#include <BremMatrixManager.h>
Public Member Functions | |
BremMatrixManager (string, int, MsgStream) | |
~BremMatrixManager () | |
TrackTrajectory | getBremTrack (const TrackTrajectory &track) const |
Private Member Functions | |
void | initialise () |
void | fillVector (ifstream &, vector< vector< double > > &, int) |
void | makeHeader () |
BremBinData * | getBinData (const TrackTrajectory &track) const |
Private Attributes | |
MsgStream * | m_log |
string | m_file |
map< BinID, BremBinData * > | m_binData |
int | m_randSeed |
vector< double > | m_etaBoundaries |
vector< double > | m_rTBoundaries |
int | m_nRTBins |
int | m_nEtaBins |
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/rT bin.
Definition at line 39 of file BremMatrixManager.h.
Atlfast::BremMatrixManager::BremMatrixManager | ( | string | , | |
int | , | |||
MsgStream | ||||
) |
Default Constructor
Definition at line 13 of file BremMatrixManager.cxx.
00013 : 00014 m_file( paramFile ), 00015 m_randSeed( randSeed ) 00016 { 00017 m_log = &log; 00018 *m_log << MSG::INFO 00019 << "Constructing BremMatrixManager with parameter file " 00020 << m_file 00021 << endreq; 00022 m_file = PathResolver::find_file( m_file, "DATAPATH" ); 00023 this->initialise(); 00024 *m_log << MSG::INFO << "Constructed BremMatrixManager" << endreq; 00025 }
Atlfast::BremMatrixManager::~BremMatrixManager | ( | ) |
Default Destructor
Definition at line 31 of file BremMatrixManager.cxx.
00032 { 00033 map<BinID, BremBinData*>::iterator iter = m_binData.begin(); 00034 map<BinID, BremBinData*>::iterator end = m_binData.end(); 00035 for ( ; iter != end; ++iter ) 00036 { 00037 delete ( iter->second ); 00038 } 00039 }
TrackTrajectory Atlfast::BremMatrixManager::getBremTrack | ( | const TrackTrajectory & | track | ) | const |
returns modified track parameters according to input track
Definition at line 245 of file BremMatrixManager.cxx.
00246 { 00247 00248 BremBinData* binData = getBinData(track); 00249 00250 TrackTrajectory newTrack = binData->getBremTrack(track); 00251 00252 return newTrack; 00253 }
void Atlfast::BremMatrixManager::initialise | ( | ) | [private] |
reads file, creates BinData objects and asks them to calculate their matrices
Definition at line 44 of file BremMatrixManager.cxx.
00045 { 00046 // open file 00047 ifstream input; 00048 input.open( m_file.c_str() ); 00049 00050 if (input) 00051 { 00052 *m_log << MSG::INFO << "BremMatrixManager: File " << m_file << " open." << endreq; 00053 00054 double pTMin, etaMin, etaMax, rtBoundary; 00055 00056 // read some parameters 00057 input >> pTMin; 00058 input >> etaMin; 00059 input >> etaMax; 00060 input >> m_nEtaBins; 00061 input >> m_nRTBins; 00062 00063 // construct vector<binboundaries> 00064 double etaStep = (etaMax - etaMin) / double(m_nEtaBins); 00065 for ( int i = 0; i < m_nEtaBins; i++ ) 00066 { 00067 m_etaBoundaries.push_back( etaMin + etaStep/2. + double(i)*etaStep ); 00068 } 00069 00070 for ( int i = 0; i < m_nRTBins + 1; i++ ) 00071 { 00072 input >> rtBoundary; 00073 m_rTBoundaries.push_back(rtBoundary); 00074 } 00075 00076 // parameters are stored in rT bin blocks---- 00077 // with parameters in format: 00078 // power function start points: C0(d0, phi0, q/pT), 00079 // C1(d0, phi0, q/pT), etc. 00080 // power function slopes: C0(d0, phi0, q/pT), 00081 // C1(d0, phi0, q/pT), etc. 00082 // Gaussian sigmas: C0(d0, phi0, q/pT), 00083 // C1(d0, phi0, q/pT), etc. 00084 // 00085 // coefficients C0,C1,C2,C3,C4 define pT-dependence of the respective quantities 00086 // according to f(pT) = C0 + C1/sqrt(pT) + C2/pT + C3/pT/sqrt(pT) + C4/pT^2 00087 00088 //start bin id ints at zero 00089 int iBin = 0; 00090 00091 for ( int rt = 0; rt < m_nRTBins; rt++ ) 00092 { 00093 // make vectors to hold all resolution parameters for this rT bin 00094 vector<double> empty; 00095 00096 vector< vector<double> > startPointsC0( m_nEtaBins, empty ); 00097 vector< vector<double> > startPointsC1( m_nEtaBins, empty ); 00098 vector< vector<double> > startPointsC2( m_nEtaBins, empty ); 00099 vector< vector<double> > startPointsC3( m_nEtaBins, empty ); 00100 vector< vector<double> > startPointsC4( m_nEtaBins, empty ); 00101 00102 vector< vector<double> > slopesC0( m_nEtaBins, empty ); 00103 vector< vector<double> > slopesC1( m_nEtaBins, empty ); 00104 vector< vector<double> > slopesC2( m_nEtaBins, empty ); 00105 vector< vector<double> > slopesC3( m_nEtaBins, empty ); 00106 vector< vector<double> > slopesC4( m_nEtaBins, empty ); 00107 00108 vector< vector<double> > sigmasC0( m_nEtaBins, empty ); 00109 vector< vector<double> > sigmasC1( m_nEtaBins, empty ); 00110 vector< vector<double> > sigmasC2( m_nEtaBins, empty ); 00111 vector< vector<double> > sigmasC3( m_nEtaBins, empty ); 00112 vector< vector<double> > sigmasC4( m_nEtaBins, empty ); 00113 00114 //read eta bin number of values for each Ci, i=0,1,2,3, and parameter 00115 // read start point data 00116 fillVector( input, startPointsC0, 3 ); 00117 fillVector( input, startPointsC1, 3 ); 00118 fillVector( input, startPointsC2, 3 ); 00119 fillVector( input, startPointsC3, 3 ); 00120 fillVector( input, startPointsC4, 3 ); 00121 00122 // read slope data 00123 fillVector( input, slopesC0, 3 ); 00124 fillVector( input, slopesC1, 3 ); 00125 fillVector( input, slopesC2, 3 ); 00126 fillVector( input, slopesC3, 3 ); 00127 fillVector( input, slopesC4, 3 ); 00128 00129 // read Gaussian sigma data 00130 fillVector( input, sigmasC0, 3 ); 00131 fillVector( input, sigmasC1, 3 ); 00132 fillVector( input, sigmasC2, 3 ); 00133 fillVector( input, sigmasC3, 3 ); 00134 fillVector( input, sigmasC4, 3 ); 00135 00136 // DATA READING FINISHED FOR THIS RT BIN 00137 00138 // got all values, now make rT/eta bins and resolution objects 00139 for ( int i = 0; i < m_nEtaBins - 1; ++i ) 00140 { 00141 double etaLow = m_etaBoundaries[i]; 00142 double etaHigh = m_etaBoundaries[i+1]; 00143 00144 // make bin id with rT and eta boundaries 00145 BinID rTEtaBin( iBin, m_rTBoundaries[rt], m_rTBoundaries[rt+1], etaLow, etaHigh ); 00146 00147 // make parameter resolutions for each parameter 00148 vector<ParameterResolutions*> startPoints; 00149 vector<ParameterResolutions*> slopes; 00150 vector<ParameterResolutions*> sigmas; 00151 for ( int param = 0; param < 3; param++ ) 00152 { 00153 vector<BinID> startPointCoeffBins; 00154 startPointCoeffBins.push_back( BinID( 0, startPointsC0[i][param], startPointsC0[i+1][param] ) ); 00155 startPointCoeffBins.push_back( BinID( 0, startPointsC1[i][param], startPointsC1[i+1][param] ) ); 00156 startPointCoeffBins.push_back( BinID( 0, startPointsC2[i][param], startPointsC2[i+1][param] ) ); 00157 startPointCoeffBins.push_back( BinID( 0, startPointsC3[i][param], startPointsC3[i+1][param] ) ); 00158 startPointCoeffBins.push_back( BinID( 0, startPointsC4[i][param], startPointsC4[i+1][param] ) ); 00159 startPoints.push_back( new ParameterResolutions( startPointCoeffBins, etaLow, etaHigh ) ); 00160 00161 vector<BinID> slopeCoeffBins; 00162 slopeCoeffBins.push_back( BinID( 0, slopesC0[i][param], slopesC0[i+1][param] ) ); 00163 slopeCoeffBins.push_back( BinID( 0, slopesC1[i][param], slopesC1[i+1][param] ) ); 00164 slopeCoeffBins.push_back( BinID( 0, slopesC2[i][param], slopesC2[i+1][param] ) ); 00165 slopeCoeffBins.push_back( BinID( 0, slopesC3[i][param], slopesC3[i+1][param] ) ); 00166 slopeCoeffBins.push_back( BinID( 0, slopesC4[i][param], slopesC4[i+1][param] ) ); 00167 slopes.push_back( new ParameterResolutions( slopeCoeffBins, etaLow, etaHigh ) ); 00168 00169 vector<BinID> sigmaCoeffBins; 00170 sigmaCoeffBins.push_back( BinID( 0, sigmasC0[i][param], sigmasC0[i+1][param] ) ); 00171 sigmaCoeffBins.push_back( BinID( 0, sigmasC1[i][param], sigmasC1[i+1][param] ) ); 00172 sigmaCoeffBins.push_back( BinID( 0, sigmasC2[i][param], sigmasC2[i+1][param] ) ); 00173 sigmaCoeffBins.push_back( BinID( 0, sigmasC3[i][param], sigmasC3[i+1][param] ) ); 00174 sigmaCoeffBins.push_back( BinID( 0, sigmasC4[i][param], sigmasC4[i+1][param] ) ); 00175 sigmas.push_back( new ParameterResolutions( sigmaCoeffBins, etaLow, etaHigh ) ); 00176 } 00177 00178 // Now make a bin data with edges rT and eta, containing the 00179 // data for bremsstrahlung corrections 00180 BremBinData* binData = new BremBinData( rTEtaBin, startPoints, slopes, sigmas, m_randSeed ); 00181 00182 // enter bin data into map 00183 m_binData[rTEtaBin] = binData; 00184 00185 // increment bin ID 00186 iBin++; 00187 00188 } // end of eta bin loop 00189 } // end of rT bin loop 00190 00191 // close file 00192 input.close(); 00193 00194 } 00195 else // no input file 00196 { 00197 *m_log << MSG::INFO 00198 << "BremMatrixManager: no data file ( " << m_file << " )!!!!" 00199 << endreq; 00200 } 00201 00202 makeHeader(); 00203 00204 }
void Atlfast::BremMatrixManager::fillVector | ( | ifstream & | , | |
vector< vector< double > > & | , | |||
int | ||||
) | [private] |
Definition at line 223 of file BremMatrixManager.cxx.
00226 { 00227 double res; 00228 for ( int param = 0; param < M; param++ ) 00229 { 00230 vector< vector<double> >::iterator binIter = myVector.begin(); 00231 for ( ; binIter != myVector.end(); binIter++ ) 00232 { 00233 input >> res; 00234 binIter->push_back(res); 00235 } 00236 00237 } 00238 }
void Atlfast::BremMatrixManager::makeHeader | ( | ) | [private] |
Definition at line 206 of file BremMatrixManager.cxx.
00207 { 00208 HeaderPrinter hp( "Atlfast BremMatrixManager:", *m_log ); 00209 hp.add( "Total number of Bins ", m_nRTBins * m_nEtaBins ); 00210 hp.add( "rT Bin Min ", m_rTBoundaries.front() ); 00211 hp.add( "rT Bin Max ", m_rTBoundaries.back() ); 00212 hp.add( "Number of rT Bins ", m_nRTBins ); 00213 hp.add( "Eta Bin Min ", m_etaBoundaries.front() ); 00214 hp.add( "Eta Bin Max ", m_etaBoundaries.back() ); 00215 hp.add( "Number of Eta Bins ", m_nEtaBins ); 00216 hp.print(); 00217 }
BremBinData * Atlfast::BremMatrixManager::getBinData | ( | const TrackTrajectory & | track | ) | const [private] |
returns BremBinData object corresponding to track trajectory
Definition at line 260 of file BremMatrixManager.cxx.
00261 { 00262 TrackParameters track = traj.parameters(); 00263 00264 vector<double> rTEta; 00265 double rT = abs( traj.radius() ); 00266 double eta = abs( track.eta() ); 00267 00268 // validity check 00269 double rTLow = ( (m_binData.begin())->first ).low(0); 00270 double rTHigh = ( (m_binData.rbegin())->first ).high(0); 00271 double etaLow = ( (m_binData.begin())->first ).low(1); 00272 double etaHigh = ( (m_binData.rbegin())->first ).high(1); 00273 00274 if ( rT < rTLow ) rT = rTLow; 00275 if ( rT > rTHigh ) rT = rTHigh; 00276 if ( eta < etaLow ) eta = etaLow; 00277 if ( eta > etaHigh ) eta = etaHigh; 00278 00279 // find BinID 00280 rTEta.push_back(rT); 00281 rTEta.push_back(eta); 00282 00283 map<BinID, BremBinData*>::const_iterator binIter = m_binData.begin(); 00284 map<BinID, BremBinData*>::const_iterator binEnd = m_binData.end(); 00285 00286 for ( ; binIter != binEnd; ++binIter ) 00287 { 00288 if ( binIter->first.isInBin(rTEta) ) 00289 { 00290 return binIter->second; 00291 } 00292 } 00293 // OOPS! couldn't fin bin 00294 *m_log << MSG::WARNING 00295 << "WARNING: BremMatrixManager - No bin; rT " << rT << ", eta " << eta 00296 << endreq; 00297 00298 return ( m_binData.begin() )->second; 00299 }
MsgStream* Atlfast::BremMatrixManager::m_log [private] |
Definition at line 56 of file BremMatrixManager.h.
string Atlfast::BremMatrixManager::m_file [private] |
name of flat file containing smear matrix data.
Definition at line 67 of file BremMatrixManager.h.
map<BinID, BremBinData*> Atlfast::BremMatrixManager::m_binData [private] |
BinData objects, paired to a BinID
Definition at line 70 of file BremMatrixManager.h.
int Atlfast::BremMatrixManager::m_randSeed [private] |
Definition at line 72 of file BremMatrixManager.h.
vector<double> Atlfast::BremMatrixManager::m_etaBoundaries [private] |
Definition at line 73 of file BremMatrixManager.h.
vector<double> Atlfast::BremMatrixManager::m_rTBoundaries [private] |
Definition at line 74 of file BremMatrixManager.h.
int Atlfast::BremMatrixManager::m_nRTBins [private] |
Definition at line 75 of file BremMatrixManager.h.
int Atlfast::BremMatrixManager::m_nEtaBins [private] |
Definition at line 76 of file BremMatrixManager.h.