#include <PionMatrixManager.h>
Inheritance diagram for Atlfast::PionMatrixManager:
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 () |
IBinData * | getBinData (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. | |
CorrelatedData * | m_correlatedData |
object which performs dcorset/dcorgen | |
int | m_randSeed |
vector< double > | m_etaBoundaries |
vector< double > | m_rTBoundaries |
int | m_nRTBins |
int | m_nEtaBins |
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.
|
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 } |
|
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 } |
|
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 } |
|
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 } |
|
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 } |
|
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 } |
|
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 } |
|
Definition at line 56 of file PionMatrixManager.h. Referenced by initialise(), makeHeader(), and PionMatrixManager(). |
|
name of flat file containing smear matrix data.
Definition at line 65 of file PionMatrixManager.h. Referenced by initialise(), and PionMatrixManager(). |
|
BinData objects, paired to a BinID.
Definition at line 67 of file PionMatrixManager.h. Referenced by getBinData(), initialise(), makeHeader(), and ~PionMatrixManager(). |
|
object which performs dcorset/dcorgen
Definition at line 69 of file PionMatrixManager.h. Referenced by getVariables(), PionMatrixManager(), and ~PionMatrixManager(). |
|
Definition at line 71 of file PionMatrixManager.h. Referenced by initialise(). |
|
Definition at line 72 of file PionMatrixManager.h. Referenced by initialise(), and makeHeader(). |
|
Definition at line 73 of file PionMatrixManager.h. Referenced by initialise(), and makeHeader(). |
|
Definition at line 74 of file PionMatrixManager.h. Referenced by initialise(), and makeHeader(). |
|
Definition at line 75 of file PionMatrixManager.h. Referenced by initialise(), and makeHeader(). |