Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

Atlfast::PionMatrixManager Class Reference

Used by tracksmearer to provide smear matrices corresponding to given track trajectories. More...

#include <PionMatrixManager.h>

Inheritance diagram for Atlfast::PionMatrixManager:

Inheritance graph
[legend]
Collaboration diagram for Atlfast::PionMatrixManager:

Collaboration graph
[legend]
List of all members.

Public Methods

 PionMatrixManager (int, MsgStream)
 Default Constructor.

virtual ~PionMatrixManager ()
 Default Destructor.

vector< double > getVariables (const TrackTrajectory &track, HepMatrix &usedSigma) const
 returns correlation matrix corresponding to given track trajectory


Private Methods

void initialise ()
 reads file, creates BinData objects and asks them to calculate their matrices

void fillVector (ifstream &, vector< vector< double > > &, int)
void makeHeader ()
IBinDatagetBinData (const TrackTrajectory &track) const
 returns BinData object corresponding to track trajectory


Private Attributes

MsgStream * m_log
string m_file
 name of flat file containing smear matrix data.

map< BinID, IBinData * > m_binData
 BinData objects, paired to a BinID.

CorrelatedDatam_correlatedData
 object which performs dcorset/dcorgen

int m_randSeed
vector< double > m_etaBoundaries
vector< double > m_rTBoundaries
int m_nRTBins
int m_nEtaBins

Detailed Description

Used by tracksmearer to provide smear matrices corresponding to given track trajectories.

It reads a flat file containing smear matrix data and creates a BinData object for every eta/phi/pt bin.

Definition at line 42 of file PionMatrixManager.h.


Constructor & Destructor Documentation

Atlfast::PionMatrixManager::PionMatrixManager int   ,
MsgStream   
 

Default Constructor.

Definition at line 12 of file PionMatrixManager.cxx.

References initialise(), m_correlatedData, m_file, and m_log.

00012                                                                  :m_randSeed(randSeed){
00013     log<< MSG::INFO << "Constructing PionMatrixManager"<< endreq;
00014     m_file = "Atlfast_PionResParam.dat";
00015     m_correlatedData = new CorrelatedData(randSeed);
00016     m_log = &log;
00017     this->initialise();
00018     *m_log << MSG::INFO << "Constructed PionMatrixManager"<< endreq;
00019   }

Atlfast::PionMatrixManager::~PionMatrixManager   [virtual]
 

Default Destructor.

Definition at line 26 of file PionMatrixManager.cxx.

References m_binData, and m_correlatedData.

00026                                        {
00027     
00028     delete m_correlatedData;
00029     map<BinID, IBinData*>::iterator iter = m_binData.begin();
00030     map<BinID, IBinData*>::iterator end = m_binData.end();
00031     for (; iter!=end;++iter)
00032       {
00033         delete (iter->second); 
00034       }
00035   }

Member Function Documentation

vector< double > Atlfast::PionMatrixManager::getVariables const TrackTrajectory &    track,
HepMatrix &    usedSigma
const [virtual]
 

returns correlation matrix corresponding to given track trajectory

Implements Atlfast::IMatrixManager.

Definition at line 215 of file PionMatrixManager.cxx.

References Atlfast::CorrelatedData::generate(), getBinData(), Atlfast::IBinData::getMatrix(), m_correlatedData, and Atlfast::CorrelatedData::root().

00216                                                                               {
00217     HepMatrix sigma;
00218     vector<double> variables;
00219 
00220     IBinData* binData = getBinData(track);
00221 
00222     sigma = binData->getMatrix(track);
00223     // do Dcorset and Dcorgen to get smear parameters
00224     variables = m_correlatedData->generate(m_correlatedData->root(sigma));
00225     returnSigma = sigma;
00226     return variables;
00227     
00228   }

void Atlfast::PionMatrixManager::initialise   [private]
 

reads file, creates BinData objects and asks them to calculate their matrices

Definition at line 41 of file PionMatrixManager.cxx.

References fillVector(), m_binData, m_etaBoundaries, m_file, m_log, m_nEtaBins, m_nRTBins, m_randSeed, m_rTBoundaries, and makeHeader().

Referenced by PionMatrixManager().

00041                                     {
00042     // open file
00043     ifstream input;
00044     input.open( m_file.c_str() );
00045     
00046     if (input) {
00047       
00048       *m_log << MSG::INFO <<"PionMatrixManager: File "<<m_file<<" open."<<endreq;
00049       
00050       double pTMin, etaMin, etaMax, rtBoundary;
00051       int nEtaBoundaries;
00052       
00053       // read some parameters
00054       input >> pTMin;
00055       input >> etaMin;
00056       input >> etaMax;
00057       input >> nEtaBoundaries;
00058       input >> m_nRTBins;
00059       m_nEtaBins = nEtaBoundaries - 1;
00060       
00061       // construct vector<binboundaries>
00062       double etaStep = (etaMax - etaMin)/double(nEtaBoundaries);
00063       for (int i=0; i<m_nEtaBins+1; i++)
00064         { m_etaBoundaries.push_back(etaMin + etaStep/2. + double(i)*etaStep);}
00065       for (int i=0; i<m_nRTBins+1; i++){
00066         input >> rtBoundary;
00067         m_rTBoundaries.push_back(rtBoundary);
00068       }
00069       
00070       // parameters are stored in rT bin blocks----
00071       // with parameters in format:
00072       // Core: C0(d0, z0, phi, cotTheta, 1/qPT), C1(d0, z0, phi, cotTheta, 1/qPT) etc.
00073       // Tails: C0(d0, z0, phi, cotTheta, 1/qPT), C1(d0, z0, phi, cotTheta, 1/qPT) etc.
00074       // Fractions: C0(d0, z0, phi, cotTheta, 1/qPT), C1(d0, z0, phi, cotTheta, 1/qPT) etc.
00075       // Correlations: C0(1,2,3,4), C1(1,2,3,4) etc.
00076 
00077       //start bin id ints at zero
00078       int iBin=0; 
00079       
00080       for ( int rt = 0; rt < m_nRTBins; rt++){
00081         
00082         // make vectors to hold all resolution parameters for this rt bin
00083         vector<double> empty;
00084         vector< vector<double> >  coreC0(nEtaBoundaries, empty); 
00085         vector< vector<double> >  coreC1(nEtaBoundaries, empty);
00086         vector< vector<double> >  coreC2(nEtaBoundaries, empty);
00087         vector< vector<double> >  tailsC0(nEtaBoundaries, empty);
00088         vector< vector<double> >  tailsC1(nEtaBoundaries, empty);
00089         vector< vector<double> >  tailsC2(nEtaBoundaries, empty);
00090         vector< vector<double> >  fractionsC0(nEtaBoundaries, empty);
00091         vector< vector<double> >  fractionsC1(nEtaBoundaries, empty);
00092         vector< vector<double> >  correlationsC0(nEtaBoundaries, empty);
00093         vector< vector<double> >  correlationsC1(nEtaBoundaries, empty);
00094         vector< vector<double> >  correlationsC3(nEtaBoundaries, empty);
00095         
00096         //read eta bin number of values for each C and parameter
00097         // read core data
00098         fillVector(input, coreC0, 5);
00099         fillVector(input, coreC1, 5);
00100         fillVector(input, coreC2, 5);
00101         // read tail data
00102         fillVector(input, tailsC0, 5);
00103         fillVector(input, tailsC1, 5);
00104         fillVector(input, tailsC2, 5);
00105         // read fractions data
00106         fillVector(input, fractionsC0, 5);
00107         fillVector(input, fractionsC1, 5);
00108         // read correlations data
00109         fillVector(input, correlationsC0, 4);
00110         fillVector(input, correlationsC1, 4);
00111         fillVector(input, correlationsC3, 4);
00112         
00113         // DATA READING FINISHED FOR THIS RT BIN
00114         // got all values, now make RT/Eta Bins and Resolution objects
00115         for (int i=0; i<m_nEtaBins; ++i) {        
00116           double etaLow = m_etaBoundaries[i];
00117           double etaHigh = m_etaBoundaries[i+1];
00118           // make bin id with rt and eta boundaries
00119           BinID rTEtaBin(iBin, m_rTBoundaries[rt], m_rTBoundaries[rt+1],
00120                          etaLow, etaHigh);
00121           //make parameter resolutions for each parameter
00122           vector<ParameterResolutions*> core;
00123           vector<ParameterResolutions*> tails;
00124           vector<ParameterResolutions*> fractions;
00125           vector<ParameterResolutions*> correlations;
00126           for (int param=0; param < 5; param++) {
00127             vector<BinID> coreCoeffBins;
00128             coreCoeffBins.push_back(BinID(0, coreC0[i][param], coreC0[i+1][param]) );
00129             coreCoeffBins.push_back(BinID(0, coreC1[i][param], coreC1[i+1][param]) );
00130             coreCoeffBins.push_back(BinID(0, coreC2[i][param], coreC2[i+1][param]) );
00131             core.push_back(new ParameterResolutions(coreCoeffBins,etaLow, etaHigh ));
00132 
00133             vector<BinID> tailsCoeffBins;
00134             tailsCoeffBins.push_back(BinID(0, tailsC0[i][param], tailsC0[i+1][param]) );
00135             tailsCoeffBins.push_back(BinID(0, tailsC1[i][param], tailsC1[i+1][param]) );
00136             tailsCoeffBins.push_back(BinID(0, tailsC2[i][param], tailsC2[i+1][param]) );
00137             tails.push_back(new ParameterResolutions(tailsCoeffBins,etaLow, etaHigh));
00138 
00139             vector<BinID> fractionsCoeffBins;
00140             fractionsCoeffBins.push_back(BinID(0, fractionsC0[i][param], fractionsC0[i+1][param]) );
00141             fractionsCoeffBins.push_back(BinID(0, fractionsC1[i][param], fractionsC1[i+1][param]) );
00142             fractions.push_back(new ParameterResolutions(fractionsCoeffBins,etaLow, etaHigh));
00143           }
00144           for (int param=0; param < 4; param++) {
00145             vector<BinID> correlationsCoeffBins;
00146             correlationsCoeffBins.push_back(BinID(0, correlationsC0[i][param], correlationsC0[i+1][param]) );
00147             correlationsCoeffBins.push_back(BinID(0, correlationsC1[i][param], correlationsC1[i+1][param]) );
00148             correlationsCoeffBins.push_back(BinID(0, 0, 0) );
00149             correlationsCoeffBins.push_back(BinID(0, correlationsC3[i][param], correlationsC3[i+1][param]) );
00150             correlations.push_back(new ParameterResolutions(correlationsCoeffBins,etaLow, etaHigh));
00151           }
00152           
00153           // Now make a bin data with edges rt and eta, containing the 
00154           // correlation data
00155           PionBinData* binData =  new PionBinData(rTEtaBin,
00156                                                   core,
00157                                                   tails,
00158                                                   fractions,
00159                                                   correlations,
00160                                                   m_randSeed);
00161           
00162           // enter bin data into map
00163           m_binData[rTEtaBin] = binData;
00164           
00165           //increment bin ID
00166           iBin++;
00167           
00168         }//end of eta bin loop
00169       } //end of rt bin loop
00170       
00171     }
00172     else { *m_log << MSG::INFO << "PionMatrixManager: no data file ( "
00173                   <<m_file<<" )!!!!" << endreq;}
00174     
00175     makeHeader();
00176     
00177   }

void Atlfast::PionMatrixManager::fillVector ifstream &   ,
vector< vector< double > > &   ,
int   
[private]
 

Definition at line 195 of file PionMatrixManager.cxx.

Referenced by initialise().

00197                                              {
00198     double res;
00199     for (int param=0; param<M; param++) { 
00200       vector< vector<double> >::iterator binIter = myVector.begin();
00201       for (;binIter != myVector.end(); binIter++){
00202         input >> res;
00203         binIter->push_back(res);
00204       } 
00205       
00206     }
00207   }

void Atlfast::PionMatrixManager::makeHeader   [private]
 

Definition at line 179 of file PionMatrixManager.cxx.

References m_binData, m_etaBoundaries, m_log, m_nEtaBins, m_nRTBins, and m_rTBoundaries.

Referenced by initialise().

00179                                     {
00180     HeaderPrinter hp("Atlfast PionTrack Smearer:", *m_log);
00181     hp.add("Total number of Bins     ", int(m_binData.size()) );
00182     hp.add("rT Bin Min               ", m_rTBoundaries.front());        
00183     hp.add("rT Bin Max               ", m_rTBoundaries.back());
00184     hp.add("Number of rT Bins        ", m_nRTBins);
00185     hp.add("Eta Bin Min              ", m_etaBoundaries.front());        
00186     hp.add("Eta Bin Max              ", m_etaBoundaries.back());
00187     hp.add("Number of Eta Bins       ", m_nEtaBins);
00188     hp.print();
00189   }

IBinData * Atlfast::PionMatrixManager::getBinData const TrackTrajectory &    track const [private]
 

returns BinData object corresponding to track trajectory

Definition at line 234 of file PionMatrixManager.cxx.

References m_binData.

Referenced by getVariables().

00234                                                                           {
00235     TrackParameters track = traj.parameters();
00236 
00237     vector<double> rTEta;
00238     double rT = abs( traj.radius() );
00239     double eta = abs( track.eta() );
00240 
00241     // validity check
00242     double rTLow = ( (m_binData.begin())->first ).low(0);
00243     double rTHigh = ( (m_binData.rbegin())->first ).high(0);
00244     double etaLow = ( (m_binData.begin())->first ).low(1);
00245     double etaHigh = ( (m_binData.rbegin())->first ).high(1);
00246 
00247     if ( rT < rTLow ) rT = rTLow;
00248     if ( rT > rTHigh) rT = rTHigh;  
00249     if ( eta < etaLow ) eta = etaLow;
00250     if ( eta > etaHigh) eta = etaHigh;  
00251 
00252     // find BinID
00253     rTEta.push_back( rT );
00254     rTEta.push_back( eta );
00255 
00256     map<BinID, IBinData*>::const_iterator binIter = m_binData.begin();
00257     map<BinID, IBinData*>::const_iterator binEnd = m_binData.end();
00258 
00259     for (; binIter != binEnd; ++binIter){
00260       if (binIter->first.isInBin(rTEta)) {
00261         return binIter->second;
00262       }
00263     }
00264     // OOPS! couldn't fin bin
00265     cout << "WARNING: PionMatrixManager - No bin; rT "<< rT <<", eta "<<eta<<endl;
00266     return (m_binData.begin())->second;
00267   }

Member Data Documentation

MsgStream* Atlfast::PionMatrixManager::m_log [private]
 

Definition at line 56 of file PionMatrixManager.h.

Referenced by initialise(), makeHeader(), and PionMatrixManager().

string Atlfast::PionMatrixManager::m_file [private]
 

name of flat file containing smear matrix data.

Definition at line 65 of file PionMatrixManager.h.

Referenced by initialise(), and PionMatrixManager().

map<BinID, IBinData*> Atlfast::PionMatrixManager::m_binData [private]
 

BinData objects, paired to a BinID.

Definition at line 67 of file PionMatrixManager.h.

Referenced by getBinData(), initialise(), makeHeader(), and ~PionMatrixManager().

CorrelatedData* Atlfast::PionMatrixManager::m_correlatedData [private]
 

object which performs dcorset/dcorgen

Definition at line 69 of file PionMatrixManager.h.

Referenced by getVariables(), PionMatrixManager(), and ~PionMatrixManager().

int Atlfast::PionMatrixManager::m_randSeed [private]
 

Definition at line 71 of file PionMatrixManager.h.

Referenced by initialise().

vector<double> Atlfast::PionMatrixManager::m_etaBoundaries [private]
 

Definition at line 72 of file PionMatrixManager.h.

Referenced by initialise(), and makeHeader().

vector<double> Atlfast::PionMatrixManager::m_rTBoundaries [private]
 

Definition at line 73 of file PionMatrixManager.h.

Referenced by initialise(), and makeHeader().

int Atlfast::PionMatrixManager::m_nRTBins [private]
 

Definition at line 74 of file PionMatrixManager.h.

Referenced by initialise(), and makeHeader().

int Atlfast::PionMatrixManager::m_nEtaBins [private]
 

Definition at line 75 of file PionMatrixManager.h.

Referenced by initialise(), and makeHeader().


The documentation for this class was generated from the following files:
Generated on Tue Mar 18 11:18:58 2003 for AtlfastAlgs by doxygen1.3-rc1