001 #include "AtlfastAlgs/PionMatrixManager.h"
002 #include "PathResolver/PathResolver.h"
003 #include <iostream>
004
005 namespace Atlfast
006 {
007 using std::abs;
008 using std::ifstream;
009
010
011
012
013
014
015
016
017
018
019
020
021 PionMatrixManager::PionMatrixManager( string paramFile, int randSeed, MsgStream log ) :
022 m_file( paramFile ),
023 m_randSeed( randSeed )
024 {
025 m_log = &log;
026 *m_log << MSG::INFO
027 << "Constructing PionMatrixManager with parameter file "
028 << m_file
029 << endreq;
030 m_file = PathResolver::find_file( m_file, "DATAPATH" );
031 m_correlatedData = new CorrelatedData(randSeed);
032 this->initialise();
033 *m_log << MSG::INFO << "Constructed PionMatrixManager" << endreq;
034 }
035
036
037
038
039
040 PionMatrixManager::~PionMatrixManager()
041 {
042 delete m_correlatedData;
043 map<BinID, IBinData*>::iterator iter = m_binData.begin();
044 map<BinID, IBinData*>::iterator end = m_binData.end();
045 for ( ; iter != end; ++iter )
046 {
047 delete ( iter->second );
048 }
049 }
050
051
052
053
054 void PionMatrixManager::initialise()
055 {
056
057 ifstream input;
058 input.open( m_file.c_str() );
059
060 if (input)
061 {
062 *m_log << MSG::INFO << "PionMatrixManager: File " << m_file << " open." << endreq;
063
064 double pTMin, etaMin, etaMax, rtBoundary;
065
066
067 input >> pTMin;
068 input >> etaMin;
069 input >> etaMax;
070 input >> m_nEtaBins;
071 input >> m_nRTBins;
072
073
074 double etaStep = (etaMax - etaMin) / double(m_nEtaBins);
075 for ( int i = 0; i < m_nEtaBins; i++ )
076 {
077 m_etaBoundaries.push_back( etaMin + etaStep/2. + double(i)*etaStep );
078 }
079
080 for ( int i = 0; i < m_nRTBins + 1; i++ )
081 {
082 input >> rtBoundary;
083 m_rTBoundaries.push_back(rtBoundary);
084 }
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105 int iBin = 0;
106
107 for ( int rt = 0; rt < m_nRTBins; rt++ )
108 {
109
110 vector<double> empty;
111
112 vector< vector<double> > coreC0( m_nEtaBins, empty );
113 vector< vector<double> > coreC1( m_nEtaBins, empty );
114 vector< vector<double> > coreC2( m_nEtaBins, empty );
115 vector< vector<double> > coreC3( m_nEtaBins, empty );
116 vector< vector<double> > coreC4( m_nEtaBins, empty );
117
118 vector< vector<double> > tailsC0( m_nEtaBins, empty );
119 vector< vector<double> > tailsC1( m_nEtaBins, empty );
120 vector< vector<double> > tailsC2( m_nEtaBins, empty );
121 vector< vector<double> > tailsC3( m_nEtaBins, empty );
122 vector< vector<double> > tailsC4( m_nEtaBins, empty );
123
124 vector< vector<double> > fractionsC0( m_nEtaBins, empty );
125 vector< vector<double> > fractionsC1( m_nEtaBins, empty );
126 vector< vector<double> > fractionsC2( m_nEtaBins, empty );
127 vector< vector<double> > fractionsC3( m_nEtaBins, empty );
128 vector< vector<double> > fractionsC4( m_nEtaBins, empty );
129
130 vector< vector<double> > correlationsC0( m_nEtaBins, empty );
131 vector< vector<double> > correlationsC1( m_nEtaBins, empty );
132 vector< vector<double> > correlationsC2( m_nEtaBins, empty );
133 vector< vector<double> > correlationsC3( m_nEtaBins, empty );
134 vector< vector<double> > correlationsC4( m_nEtaBins, empty );
135
136
137
138 fillVector( input, coreC0, 5 );
139 fillVector( input, coreC1, 5 );
140 fillVector( input, coreC2, 5 );
141 fillVector( input, coreC3, 5 );
142 fillVector( input, coreC4, 5 );
143
144
145 fillVector( input, tailsC0, 5 );
146 fillVector( input, tailsC1, 5 );
147 fillVector( input, tailsC2, 5 );
148 fillVector( input, tailsC3, 5 );
149 fillVector( input, tailsC4, 5 );
150
151
152 fillVector( input, fractionsC0, 5 );
153 fillVector( input, fractionsC1, 5 );
154 fillVector( input, fractionsC2, 5 );
155 fillVector( input, fractionsC3, 5 );
156 fillVector( input, fractionsC4, 5 );
157
158
159 fillVector( input, correlationsC0, 4 );
160 fillVector( input, correlationsC1, 4 );
161 fillVector( input, correlationsC2, 4 );
162 fillVector( input, correlationsC3, 4 );
163 fillVector( input, correlationsC4, 4 );
164
165
166
167
168 for ( int i = 0; i < m_nEtaBins - 1; ++i )
169 {
170 double etaLow = m_etaBoundaries[i];
171 double etaHigh = m_etaBoundaries[i+1];
172
173
174 BinID rTEtaBin( iBin, m_rTBoundaries[rt], m_rTBoundaries[rt+1], etaLow, etaHigh );
175
176
177 vector<ParameterResolutions*> core;
178 vector<ParameterResolutions*> tails;
179 vector<ParameterResolutions*> fractions;
180 vector<ParameterResolutions*> correlations;
181 for ( int param = 0; param < 5; param++ )
182 {
183 vector<BinID> coreCoeffBins;
184 coreCoeffBins.push_back( BinID( 0, coreC0[i][param], coreC0[i+1][param] ) );
185 coreCoeffBins.push_back( BinID( 0, coreC1[i][param], coreC1[i+1][param] ) );
186 coreCoeffBins.push_back( BinID( 0, coreC2[i][param], coreC2[i+1][param] ) );
187 coreCoeffBins.push_back( BinID( 0, coreC3[i][param], coreC3[i+1][param] ) );
188 coreCoeffBins.push_back( BinID( 0, coreC4[i][param], coreC4[i+1][param] ) );
189 core.push_back( new ParameterResolutions( coreCoeffBins, etaLow, etaHigh ) );
190
191 vector<BinID> tailsCoeffBins;
192 tailsCoeffBins.push_back( BinID( 0, tailsC0[i][param], tailsC0[i+1][param] ) );
193 tailsCoeffBins.push_back( BinID( 0, tailsC1[i][param], tailsC1[i+1][param] ) );
194 tailsCoeffBins.push_back( BinID( 0, tailsC2[i][param], tailsC2[i+1][param] ) );
195 tailsCoeffBins.push_back( BinID( 0, tailsC3[i][param], tailsC3[i+1][param] ) );
196 tailsCoeffBins.push_back( BinID( 0, tailsC4[i][param], tailsC4[i+1][param] ) );
197 tails.push_back( new ParameterResolutions( tailsCoeffBins, etaLow, etaHigh ) );
198
199 vector<BinID> fractionsCoeffBins;
200 fractionsCoeffBins.push_back( BinID( 0, fractionsC0[i][param], fractionsC0[i+1][param] ) );
201 fractionsCoeffBins.push_back( BinID( 0, fractionsC1[i][param], fractionsC1[i+1][param] ) );
202 fractionsCoeffBins.push_back( BinID( 0, fractionsC2[i][param], fractionsC2[i+1][param] ) );
203 fractionsCoeffBins.push_back( BinID( 0, fractionsC3[i][param], fractionsC3[i+1][param] ) );
204 fractionsCoeffBins.push_back( BinID( 0, fractionsC4[i][param], fractionsC4[i+1][param] ) );
205 fractions.push_back( new ParameterResolutions( fractionsCoeffBins, etaLow, etaHigh ) );
206 }
207
208 for ( int param = 0; param < 4; param++ )
209 {
210 vector<BinID> correlationsCoeffBins;
211 correlationsCoeffBins.push_back( BinID( 0, correlationsC0[i][param], correlationsC0[i+1][param] ) );
212 correlationsCoeffBins.push_back( BinID( 0, correlationsC1[i][param], correlationsC1[i+1][param] ) );
213 correlationsCoeffBins.push_back( BinID( 0, correlationsC2[i][param], correlationsC2[i+1][param] ) );
214 correlationsCoeffBins.push_back( BinID( 0, correlationsC3[i][param], correlationsC3[i+1][param] ) );
215 correlationsCoeffBins.push_back( BinID( 0, correlationsC4[i][param], correlationsC4[i+1][param] ) );
216 correlations.push_back( new ParameterResolutions( correlationsCoeffBins, etaLow, etaHigh ) );
217 }
218
219
220
221 PionBinData* binData = new PionBinData( rTEtaBin, core, tails, fractions, correlations, m_randSeed );
222
223
224 m_binData[rTEtaBin] = binData;
225
226
227 iBin++;
228
229 }
230 }
231
232
233 input.close();
234
235 }
236 else
237 {
238 *m_log << MSG::INFO
239 << "PionMatrixManager: no data file ( " << m_file << " )!!!!"
240 << endreq;
241 }
242
243 makeHeader();
244
245 }
246
247 void PionMatrixManager::makeHeader()
248 {
249 HeaderPrinter hp( "Atlfast PionTrack Smearer:", *m_log );
250 hp.add( "Total number of Bins ", m_nRTBins * m_nEtaBins );
251 hp.add( "rT Bin Min ", m_rTBoundaries.front() );
252 hp.add( "rT Bin Max ", m_rTBoundaries.back() );
253 hp.add( "Number of rT Bins ", m_nRTBins );
254 hp.add( "Eta Bin Min ", m_etaBoundaries.front() );
255 hp.add( "Eta Bin Max ", m_etaBoundaries.back() );
256 hp.add( "Number of Eta Bins ", m_nEtaBins );
257 hp.print();
258 }
259
260
261
262
263
264 void PionMatrixManager::fillVector( ifstream& input,
265 vector< vector<double> >& myVector,
266 int M = 5 )
267 {
268 double res;
269 for ( int param = 0; param < M; param++ )
270 {
271 vector< vector<double> >::iterator binIter = myVector.begin();
272 for ( ; binIter != myVector.end(); binIter++ )
273 {
274 input >> res;
275 binIter->push_back(res);
276 }
277
278 }
279 }
280
281
282
283
284
285
286 vector<double> PionMatrixManager::getVariables( const TrackTrajectory& track,
287 HepSymMatrix& returnSigma ) const
288 {
289 HepSymMatrix sigma;
290 vector<double> variables;
291
292 IBinData* binData = getBinData(track);
293
294 sigma = binData->getMatrix(track);
295
296
297 variables = m_correlatedData->generate( m_correlatedData->root(sigma) );
298 returnSigma = sigma;
299 return variables;
300 }
301
302
303
304
305
306 IBinData* PionMatrixManager::getBinData( const TrackTrajectory& traj ) const
307 {
308 TrackParameters track = traj.parameters();
309
310 vector<double> rTEta;
311 double rT = abs( traj.radius() );
312 double eta = abs( track.eta() );
313
314
315 double rTLow = ( (m_binData.begin())->first ).low(0);
316 double rTHigh = ( (m_binData.rbegin())->first ).high(0);
317 double etaLow = ( (m_binData.begin())->first ).low(1);
318 double etaHigh = ( (m_binData.rbegin())->first ).high(1);
319
320 if ( rT < rTLow ) rT = rTLow;
321 if ( rT > rTHigh ) rT = rTHigh;
322 if ( eta < etaLow ) eta = etaLow;
323 if ( eta > etaHigh ) eta = etaHigh;
324
325
326 rTEta.push_back(rT);
327 rTEta.push_back(eta);
328
329 map<BinID, IBinData*>::const_iterator binIter = m_binData.begin();
330 map<BinID, IBinData*>::const_iterator binEnd = m_binData.end();
331
332 for ( ; binIter != binEnd; ++binIter )
333 {
334 if ( binIter->first.isInBin(rTEta) )
335 {
336 return binIter->second;
337 }
338 }
339
340 *m_log << MSG::WARNING
341 << "WARNING: PionMatrixManager - No bin; rT " << rT << ", eta " << eta
342 << endreq;
343
344 return ( m_binData.begin() )->second;
345 }
346
347
348 }
349
| Due to the LXR bug, the updates fail sometimes to remove references to deleted files. The Saturday's full rebuilds fix these problems |
|
This page was automatically generated by the
LXR engine.
|
|