ATLAS Offline Software
Loading...
Searching...
No Matches
PhiSlice.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "PhiSlice.h"
6
7#include <cmath>
8#include <iostream>
9
10//Constructor with input parameters
11PhiSlice::PhiSlice( const int SliceIndex,
12 const double ZBinWidth,
13 const double InversePhiBinWidth,
14 const double ZTolerance,
15 const double KTolerance,
16 const double PTolerance,
17 const double ZMinimum,
18 const double ZMaximum,
19 const int LayerMaximum,
20 const int BarrelMaximum )
21{
23 m_pTolerance = PTolerance;
24 m_kTolerance = KTolerance;
25 m_zTolerance = ZTolerance;
26 m_sliceIndex = SliceIndex;
27
28 m_invZBinWidth = 1.0 / ZBinWidth;
29 m_invPhiBinWidth = InversePhiBinWidth;
30 m_halfZBins = ceil( 0.5*(ZMaximum-ZMinimum) * m_invZBinWidth );
32 m_zeroOffset = floor(ZMinimum * m_invZBinWidth );
33
34 m_layerRhos.resize( LayerMaximum );
35 m_layerZs.resize( LayerMaximum );
36 m_layerPhis.resize( LayerMaximum );
37 m_zMinimum = ZMinimum;
38 m_zMaximum = ZMaximum;
39 m_barrelMaximum = BarrelMaximum;
40 m_sliceStart.resize( LayerMaximum );
41 m_sliceEnd.resize( LayerMaximum );
42
43 // std::cout << "PhiSlice::\tzBins " << m_zBins << "\t halfBins " << m_halfZBins
44 // << "\twidth " << ZBinWidth << "\tiwidth " << m_invZBinWidth << std::endl;
45}
46
47//Destructor
51
52//Store a space point
53void PhiSlice::AddPoint( const double RhoValue, const double ZValue, const double PhiValue,
54 const long LayerIndex )
55{
56 //std::cout << "PhiValue: " << PhiValue << std::endl;
57 //std::cout << "RhoValue: " << RhoValue << std::endl;
58 //std::cout << "ZValue: " << ZValue << std::endl;
59 //std::cout << "LayerIndex: " << LayerIndex << std::endl;
60 //std::cout << "m_layerRhos.size(): " << m_layerRhos.size() << std::endl;
61 //std::cout << "m_layerZs.size(): " << m_layerZs.size()<< std::endl;
62 //std::cout << "m_layerPhis.size(): " << m_layerPhis.size()<< std::endl;
63 //std::cout << "m_layerRhos[ LayerIndex ].size(): " << m_layerRhos[ LayerIndex ].size()<< std::endl;
64 //std::cout << "m_layerZs[ LayerIndex ].size(): " << m_layerZs[ LayerIndex ].size()<< std::endl;
65 //std::cout << "m_layerPhis[ LayerIndex ].size(): " << m_layerPhis[ LayerIndex ].size()<< std::endl;
66 m_layerRhos[ LayerIndex ].push_back( RhoValue );
67 m_layerZs[ LayerIndex ].push_back( ZValue );
68 m_layerPhis[ LayerIndex ].push_back( PhiValue );
69}
70
71//Make the wide layer structure
72void PhiSlice::MakeWideLayers( std::vector< std::vector<double> >* AllLayerRhos,
73 std::vector< std::vector<double> >* AllLayerZs,
74 std::vector< std::vector<double> >* AllLayerPhis,
75 std::vector< std::vector<int> >* AllSliceWidths,
76 int FilledLayerTotal,
77 std::vector<long>* FilledLayerIndices )
78{
79 //Append the hits in this slice to the overall structure (ignore the inner layer, we don't use that for the second point)
80 for ( int filledLayer = 0; filledLayer < FilledLayerTotal; filledLayer++ )
81 {
82 //Get the actual index of the next filled layer
83 int layerIndex = ( *FilledLayerIndices )[ filledLayer ];
84
85 //Add to the overall rho vector...
86 ( *AllLayerRhos )[ layerIndex ].insert(
87 ( *AllLayerRhos )[ layerIndex ].end(), // ...at the end...
88 m_layerRhos[ layerIndex ].begin(),
89 m_layerRhos[ layerIndex ].end() ); // ...the whole of our rho vector
90
91 //Likewise for z
92 ( *AllLayerZs )[ layerIndex ].insert(
93 ( *AllLayerZs )[ layerIndex ].end(),
94 m_layerZs[ layerIndex ].begin(),
95 m_layerZs[ layerIndex ].end() );
96
97 //Likewise for phi
98 ( *AllLayerPhis )[ layerIndex ].insert(
99 ( *AllLayerPhis )[ layerIndex ].end(),
100 m_layerPhis[ layerIndex ].begin(),
101 m_layerPhis[ layerIndex ].end() );
102
103 //Store the cumulative number of spacepoints per slice
104 int previousTotal = ( *AllSliceWidths )[ layerIndex ][ m_sliceIndex ];
105 ( *AllSliceWidths )[ layerIndex ][ m_sliceIndex + 1 ] = m_layerRhos[ layerIndex ].size() + previousTotal;
106
107 //Store the start and end of this slice
108 m_sliceStart[ layerIndex ] = ( *AllSliceWidths )[ layerIndex ][ m_sliceIndex ];
109 m_sliceEnd[ layerIndex ] = ( *AllSliceWidths )[ layerIndex ][ m_sliceIndex + 1 ];
110 }
111
112 //Store pointers for later
113 m_allLayerRhos = AllLayerRhos;
114 m_allLayerZs = AllLayerZs;
115 m_allLayerPhis = AllLayerPhis;
116 m_allSliceWidths = AllSliceWidths;
117 m_filledLayerTotal = FilledLayerTotal;
118 m_filledLayerIndices = FilledLayerIndices;
119
120 //Clean up
121 m_layerRhos.clear();
122 m_layerZs.clear();
123 m_layerPhis.clear();
124}
125
126//Add points to internal z-axis histogram (thread safe)
127void PhiSlice::MakeHistogram( std::vector< std::vector<long> >& ExtraSlices,
128 long PhiToSubtract,
129 int InnerLayerLimit, int TripletMode, bool ChargeAware )
130{
131 //Ininitalise internal histograms
133 m_hitHistogram = std::vector<long>( m_zBins + 1, 0 );
134 m_weightHistogram = std::vector<double>( m_zBins + 1, 0.0 );
135 if ( ChargeAware )
136 {
137 m_otherChargeHitHistogram = std::vector<long>( m_zBins + 1, 0 );
138 m_otherChargeWeightHistogram = std::vector<double>( m_zBins + 1, 0.0 );
139 }
140
141 //Add hits to these internal hsitograms
146 ExtraSlices,
147 PhiToSubtract, InnerLayerLimit, TripletMode, ChargeAware );
148
149 //Mark internal flag done
151}
152
153//Merge internal and global z-axis histogram
154void PhiSlice::AddHistogram( std::vector<long>* HitHistogram,
155 std::vector<double>* WeightHistogram,
156 std::vector<long>* OtherChargeHitHistogram,
157 std::vector<double>* OtherChargeWeightHistogram )
158{
160 {
161 //Add the internal histogram bin values to the global histograms
162 for ( unsigned int binIndex = 0; binIndex < m_hitHistogram.size(); binIndex++ )
163 {
164 ( *HitHistogram )[ binIndex ] += m_hitHistogram[ binIndex ];
165 ( *WeightHistogram )[ binIndex ] += m_weightHistogram[ binIndex ];
166 }
167 for ( unsigned int binIndex = 0; binIndex < m_otherChargeHitHistogram.size(); binIndex++ )
168 {
169 ( *OtherChargeHitHistogram )[ binIndex ] += m_otherChargeHitHistogram[ binIndex ];
170 ( *OtherChargeWeightHistogram )[ binIndex ] += m_otherChargeWeightHistogram[ binIndex ];
171 }
172 }
173 // else
174 // {
175 // //cerr << "Internal phi-slice histograms have not been made - run MakeHistograms" << endl;
176 // //exit(1);
177 // }
178}
179
180//Add points to the z-axis histogram (thread unsafe if acting on global histogram)
181void PhiSlice::GetHistogram( std::vector<long>* HitHistogram,
182 std::vector<double>* WeightHistogram,
183 std::vector<long>* OtherChargeHitHistogram,
184 std::vector<double>* OtherChargeWeightHistogram,
185 const std::vector< std::vector<long> >& ExtraSlices,
186 const long PhiToSubtract,
187 int InnerLayerLimit,
188 const int TripletMode,
189 const bool ChargeAware,
190 std::vector< std::vector<long> >* AllHits,
191 std::vector< std::vector<double> >* AllWeights )
192{
193 //Keep the inner loop maximum sensible
194 if ( InnerLayerLimit >= m_filledLayerTotal )
195 {
196 InnerLayerLimit = m_filledLayerTotal - 1;
197 }
198
199 //Make the pairs of spacepoints, from the inside layer out
200 for ( int innerFilledLayer = 0; innerFilledLayer < InnerLayerLimit; innerFilledLayer++ )
201 {
202 //Get the actual index of the inner filled layer
203 int innerLayerIndex = ( *m_filledLayerIndices )[ innerFilledLayer ];
204
205 //Loop over all the points in the inner layer
206 for ( unsigned int innerPointIndex = m_sliceStart[ innerLayerIndex ]; innerPointIndex < m_sliceEnd[ innerLayerIndex ]; innerPointIndex++ )
207 {
208 //Get the inner point
209 double innerPointZ = ( *m_allLayerZs )[ innerLayerIndex ][ innerPointIndex ];
210 double innerPointRho = ( *m_allLayerRhos )[ innerLayerIndex ][ innerPointIndex ];
211 double innerPointPhi = ( *m_allLayerPhis )[ innerLayerIndex ][ innerPointIndex ];
212
213 //Loop over all layers further out
214 for ( int outerFilledLayer = innerFilledLayer + 1; outerFilledLayer < m_filledLayerTotal; outerFilledLayer++ )
215 {
216 //Get the actual index of the outer filled layer
217 int outerLayerIndex = ( *m_filledLayerIndices )[ outerFilledLayer ];
218
219 //Work out how many neighbouring slices to examine
220 int neighbourNumber = ExtraSlices[ innerLayerIndex ][ outerLayerIndex ];
221 if ( innerLayerIndex > m_barrelMaximum || outerLayerIndex > m_barrelMaximum )
222 {
223 neighbourNumber -= PhiToSubtract;
224 }
225 if ( neighbourNumber < 1 )
226 {
227 neighbourNumber = 1;
228 }
229
230 //Work out which slices that corresponds to
231 int minimumSlice = m_sliceIndex - neighbourNumber;
232 if ( minimumSlice < 0 )
233 {
234 minimumSlice = 0;
235 }
236 unsigned int maximumSlice = m_sliceIndex + neighbourNumber + 1;
237 if ( maximumSlice >= ( *m_allSliceWidths )[ outerLayerIndex ].size() )
238 {
239 maximumSlice = ( *m_allSliceWidths )[ outerLayerIndex ].size() - 1;
240 }
241
242 //Work out the space point indices corresponding to those slices
243 int minimumPointIndex = ( *m_allSliceWidths )[ outerLayerIndex ][ minimumSlice ];
244 int maximumPointIndex = ( *m_allSliceWidths )[ outerLayerIndex ][ maximumSlice ];
245
246 //Loop over the points in the outer layer
247 for ( int outerPointIndex = minimumPointIndex; outerPointIndex < maximumPointIndex; outerPointIndex++ )
248 {
249 //Get the outer point
250 double outerPointZ = ( *m_allLayerZs )[ outerLayerIndex ][ outerPointIndex ];
251 double outerPointRho = ( *m_allLayerRhos )[ outerLayerIndex ][ outerPointIndex ];
252 double outerPointPhi = ( *m_allLayerPhis )[ outerLayerIndex ][ outerPointIndex ];
253
254 //Calculate the z axis position
255 double invDeltaRho = 1.0 / ( innerPointRho - outerPointRho );
256 double axisZ = ( outerPointZ * innerPointRho - innerPointZ * outerPointRho ) * invDeltaRho;
257
258 //Cut on the maximum z value
259 if ( axisZ>m_zMinimum && axisZ<m_zMaximum )
260 {
261 //Get the index of the outer slice for charge-awareness
262 int outerSliceIndex = floor( outerPointPhi * m_invPhiBinWidth );
263
264 //Look for triplet
265 if ( TripletMode )
266 {
267 //Calculate some extra values
268 double kValue = ( outerPointPhi - innerPointPhi ) * invDeltaRho;
269 double pValue = ( outerPointPhi * innerPointRho - innerPointPhi * outerPointRho ) * invDeltaRho;
270
271
272 //Try and identify a triplet
273 int tripletsFound = FindTriplet( outerFilledLayer, outerPointIndex,
274 axisZ, kValue, pValue,
275 ExtraSlices, PhiToSubtract, ( TripletMode == 1 ), outerSliceIndex );
276
277 //Store if at least one triplet found
278 if ( tripletsFound )
279 {
291 int axisZIndex = rint( axisZ * m_invZBinWidth - m_zeroOffset );
293
294 //If separate slice histograms, fill neighbouring slices
295 if ( AllHits && AllWeights )
296 {
297 FillNeighbours( innerLayerIndex, outerSliceIndex, tripletsFound, axisZIndex, axisZ,
298 ExtraSlices, PhiToSubtract, ChargeAware,
299 AllHits, AllWeights );
300 }
301 else
302 {
303 //Increment the main histograms
304 if ( !ChargeAware || outerSliceIndex <= m_sliceIndex + 1 )
305 {
306 ( *HitHistogram )[ axisZIndex ] += tripletsFound;
307 ( *WeightHistogram )[ axisZIndex ] += axisZ * ( double )tripletsFound;
308 }
309 if ( ChargeAware && outerSliceIndex >= m_sliceIndex - 1 )
310 {
311 ( *OtherChargeHitHistogram )[ axisZIndex ] += tripletsFound;
312 ( *OtherChargeWeightHistogram )[ axisZIndex ] += axisZ * ( double )tripletsFound;
313 }
314 }
315 }
316 }
317 else
318 {
319 //Calculate the corresponding histogram bin
320 int axisZIndex = rint( axisZ * m_invZBinWidth - m_zeroOffset );
321 // int axisZIndex = rint( (axisZ-m_zMinimum) * m_invZBinWidth);
322
323 //If separate slice histograms, fill neighbouring slices
324 if ( AllHits && AllWeights )
325 {
326 FillNeighbours( innerLayerIndex, outerSliceIndex, 1, axisZIndex, axisZ,
327 ExtraSlices, PhiToSubtract, ChargeAware,
328 AllHits, AllWeights );
329 }
330 else
331 {
332 //Increment the histograms
333 if ( !ChargeAware || outerSliceIndex <= m_sliceIndex + 1 )
334 {
335 ( *HitHistogram )[ axisZIndex ]++;
336 ( *WeightHistogram )[ axisZIndex ] += axisZ;
337 }
338 if ( ChargeAware && outerSliceIndex >= m_sliceIndex - 1 )
339 {
340 ( *OtherChargeHitHistogram )[ axisZIndex ]++;
341 ( *OtherChargeWeightHistogram )[ axisZIndex ] += axisZ;
342 }
343 }
344 }
345 }
346 }
347 }
348 }
349 }
350}
351
352//Look for a third spacepoint
353int PhiSlice::FindTriplet( int OuterFilledLayer, int OuterPointIndex,
354 double CurrentZValue,
355 double CurrentKValue,
356 double CurrentPValue,
357 const std::vector< std::vector<long> >& ExtraSlices,
358 const long PhiToSubtract, bool FastTriplet, int OuterSliceIndex )
359{
360 int tripletHits = 0;
361
362 //Find out the real index of the outer filled layer
363 int outerLayerIndex = ( *m_filledLayerIndices )[ OuterFilledLayer ];
364
365 //Get the coordinates of the outer point
366 double outerPointZ = ( *m_allLayerZs )[ outerLayerIndex ][ OuterPointIndex ];
367 double outerPointRho = ( *m_allLayerRhos )[ outerLayerIndex ][ OuterPointIndex ];
368 double outerPointPhi = ( *m_allLayerPhis )[ outerLayerIndex ][ OuterPointIndex ];
369
370 //Loop over layers further out to find triplets
371 for ( int tripletFilledLayer = OuterFilledLayer + 1; tripletFilledLayer < m_filledLayerTotal; tripletFilledLayer++ )
372 {
373 //Get the actual index of the triplet filled layer
374 int tripletLayerIndex = ( *m_filledLayerIndices )[ tripletFilledLayer ];
375
376 //Work out how many neighbouring slices to examine
377 int neighbourNumber = ExtraSlices[ outerLayerIndex ][ tripletLayerIndex ];
378 if ( outerLayerIndex > m_barrelMaximum || tripletLayerIndex > m_barrelMaximum )
379 {
380 neighbourNumber -= PhiToSubtract;
381 }
382 if ( neighbourNumber < 1 )
383 {
384 neighbourNumber = 1;
385 }
386
387 //Work out the lowest-index slice to examine
388 int minimumSlice = OuterSliceIndex - neighbourNumber;
389 if ( OuterSliceIndex >= m_sliceIndex )
390 {
391 //Keep the phi bending consistent
392 minimumSlice = OuterSliceIndex - 1;
393 }
394 if ( minimumSlice < 0 )
395 {
396 minimumSlice = 0;
397 }
398
399 //Work out the highest-index slice to examine
400 unsigned int maximumSlice = OuterSliceIndex + neighbourNumber + 1;
401 if ( OuterSliceIndex <= m_sliceIndex )
402 {
403 //Keep the phi bending consistent
404 maximumSlice = OuterSliceIndex + 2;
405 }
406 if ( maximumSlice >= ( *m_allSliceWidths )[ tripletLayerIndex ].size() )
407 {
408 maximumSlice = ( *m_allSliceWidths )[ tripletLayerIndex ].size() - 1;
409 }
410
411 //Work out the space point indices corresponding to those slices
412 int minimumPointIndex = ( *m_allSliceWidths )[ tripletLayerIndex ][ minimumSlice ];
413 int maximumPointIndex = ( *m_allSliceWidths )[ tripletLayerIndex ][ maximumSlice ];
414
415 //Loop over the points in the triplet layer
416 for ( int tripletPointIndex = minimumPointIndex; tripletPointIndex < maximumPointIndex; tripletPointIndex++ )
417 {
418 //Get the triplet point
419 double tripletPointZ = ( *m_allLayerZs )[ tripletLayerIndex ][ tripletPointIndex ];
420 double tripletPointRho = ( *m_allLayerRhos )[ tripletLayerIndex ][ tripletPointIndex ];
421 double tripletPointPhi = ( *m_allLayerPhis )[ tripletLayerIndex ][ tripletPointIndex ];
422
423 //Calculate the z value using the outer and triplet points
424 double invDeltaRho = 1.0 / ( outerPointRho - tripletPointRho );
425 double tripletZValue = ( tripletPointZ * outerPointRho - outerPointZ * tripletPointRho ) * invDeltaRho;
426 if ( fabs( tripletZValue - CurrentZValue ) > m_zTolerance )
427 {
428 continue;
429 }
430
431 //Calculate the k value using the outer and triplet points
432 double tripletKValue = ( tripletPointPhi - outerPointPhi ) * invDeltaRho;
433 if ( fabs( tripletKValue - CurrentKValue ) > m_kTolerance )
434 {
435 continue;
436 }
437
438 //Calculate the p value using the outer and triplet points
439 double tripletPValue = ( tripletPointPhi * outerPointRho - outerPointPhi * tripletPointRho ) * invDeltaRho;
440 if ( fabs( tripletPValue - CurrentPValue ) < m_pTolerance )
441 {
442 if ( FastTriplet )
443 {
444 return 1;
445 }
446 else
447 {
448 tripletHits++;
449 }
450 }
451 }
452 }
453
454 return tripletHits;
455}
456
457//Fill neighbouring slices for histogram-per-slice mode
458void PhiSlice::FillNeighbours( int InnerLayerIndex,
459 int OuterSliceIndex,
460 int TripletsFound,
461 int AxisZIndex,
462 double AxisZ,
463 const std::vector< std::vector<long> >& ExtraSlices,
464 const long PhiToSubtract,
465 const bool ChargeAware,
466 std::vector< std::vector<long> >* AllHits,
467 std::vector< std::vector<double> >* AllWeights )
468{
469 //Determine which neighbouring slices are affected
470 int neighbourMaximum = 0;
471 if ( InnerLayerIndex > 0 )
472 {
473 neighbourMaximum = ExtraSlices[0][ InnerLayerIndex ];
474
475 if ( InnerLayerIndex > m_barrelMaximum )
476 {
477 neighbourMaximum -= PhiToSubtract;
478 }
479 if ( neighbourMaximum < 1 )
480 {
481 neighbourMaximum = 1;
482 }
483 }
484 int neighbourMinimum = neighbourMaximum;
485 if ( ChargeAware && InnerLayerIndex > 0 )
486 {
487 neighbourMinimum = 1;
488 }
489
490 //Restrict loop ranges to slices that exist
491 int startNeighbour1 = m_sliceIndex - neighbourMinimum;
492 if ( startNeighbour1 < 0 )
493 {
494 startNeighbour1 = 0;
495 }
496 int endNeighbour1 = m_sliceIndex + neighbourMaximum;
497 if ( endNeighbour1 > (int)( AllHits[0].size() - 1 ) )
498 {
499 endNeighbour1 = AllHits[0].size() - 1;
500 }
501 int startNeighbour2 = m_sliceIndex - neighbourMaximum;
502 if ( startNeighbour2 < 0 )
503 {
504 startNeighbour2 = 0;
505 }
506 int endNeighbour2 = m_sliceIndex + neighbourMinimum;
507 if ( endNeighbour2 > (int)( AllHits[0].size() - 1 ) )
508 {
509 endNeighbour2 = AllHits[0].size() - 1;
510 }
511
512 //Increment the appropriate histograms
513 if ( !ChargeAware || OuterSliceIndex <= m_sliceIndex + 1 )
514 {
515 for ( int neighbourIndex = startNeighbour1; neighbourIndex <= endNeighbour1; neighbourIndex++ )
516 {
517 AllHits[0][ neighbourIndex ][ AxisZIndex ] += TripletsFound;
518 AllWeights[0][ neighbourIndex ][ AxisZIndex ] += AxisZ * ( double )TripletsFound;
519 }
520 }
521 if ( ChargeAware && OuterSliceIndex >= m_sliceIndex - 1 )
522 {
523 for ( int neighbourIndex = startNeighbour2; neighbourIndex <= endNeighbour2; neighbourIndex++ )
524 {
525 AllHits[1][ neighbourIndex ][ AxisZIndex ] += TripletsFound;
526 AllWeights[1][ neighbourIndex ][ AxisZIndex ] += AxisZ * ( double )TripletsFound;
527 }
528 }
529}
std::vector< long > m_sliceStart
Definition PhiSlice.h:81
double m_zTolerance
Definition PhiSlice.h:85
std::vector< long > m_sliceEnd
Definition PhiSlice.h:81
std::vector< std::vector< double > > m_layerPhis
Definition PhiSlice.h:75
std::vector< std::vector< int > > * m_allSliceWidths
Definition PhiSlice.h:79
void MakeHistogram(std::vector< std::vector< long > > &ExtraSlices, long PhiToSubtract, int InnerLayerLimit, int TripletMode, bool ChargeAware)
Definition PhiSlice.cxx:127
std::vector< std::vector< double > > * m_allLayerRhos
Definition PhiSlice.h:76
void MakeWideLayers(std::vector< std::vector< double > > *AllLayerRhos, std::vector< std::vector< double > > *AllLayerZs, std::vector< std::vector< double > > *AllLayerPhis, std::vector< std::vector< int > > *AllSliceWidths, int FilledLayerTotal, std::vector< long > *FilledLayerIndices)
Definition PhiSlice.cxx:72
double m_kTolerance
Definition PhiSlice.h:86
void GetHistogram(std::vector< long > *HitHistogram, std::vector< double > *WeightHistogram, std::vector< long > *OtherChargeHitHistogram, std::vector< double > *OtherChargeWeightHistogram, const std::vector< std::vector< long > > &ExtraSlices, const long PhiToSubtract, int InnerLayerLimit, const int TripletMode, const bool ChargeAware, std::vector< std::vector< long > > *AllHits=0, std::vector< std::vector< double > > *AllWeights=0)
Definition PhiSlice.cxx:181
std::vector< long > m_otherChargeHitHistogram
Definition PhiSlice.h:81
int m_barrelMaximum
Definition PhiSlice.h:96
double m_invZBinWidth
Definition PhiSlice.h:83
void AddPoint(double RhoValue, double ZValue, double PhiValue, long LayerIndex)
Definition PhiSlice.cxx:53
std::vector< std::vector< double > > m_layerZs
Definition PhiSlice.h:75
double m_pTolerance
Definition PhiSlice.h:87
int m_filledLayerTotal
Definition PhiSlice.h:94
double m_zMinimum
Definition PhiSlice.h:88
std::vector< long > m_hitHistogram
Definition PhiSlice.h:81
std::vector< double > m_weightHistogram
Definition PhiSlice.h:82
void FillNeighbours(int InnerLayerIndex, int OuterSliceIndex, int TripletsFound, int AxisZIndex, double AxisZ, const std::vector< std::vector< long > > &ExtraSlices, const long PhiToSubtract, const bool ChargeAware, std::vector< std::vector< long > > *AllHits, std::vector< std::vector< double > > *AllWeights)
Definition PhiSlice.cxx:458
std::vector< long > * m_filledLayerIndices
Definition PhiSlice.h:80
PhiSlice()=delete
bool m_internalHistogramsAreValid
Definition PhiSlice.h:97
int m_zBins
Definition PhiSlice.h:90
int m_halfZBins
Definition PhiSlice.h:91
int m_sliceIndex
Definition PhiSlice.h:93
void AddHistogram(std::vector< long > *HitHistogram, std::vector< double > *WeightHistogram, std::vector< long > *OtherChargeHitHistogram, std::vector< double > *OtherChargeWeightHistogram)
Definition PhiSlice.cxx:154
double m_invPhiBinWidth
Definition PhiSlice.h:84
int FindTriplet(int OuterFilledLayer, int OuterPointIndex, double CurrentZValue, double CurrentKValue, double CurrentPValue, const std::vector< std::vector< long > > &ExtraSlices, const long PhiToSubtract, bool FastTriplet, int OuterSliceIndex)
Definition PhiSlice.cxx:353
std::vector< std::vector< double > > * m_allLayerPhis
Definition PhiSlice.h:78
double m_zMaximum
Definition PhiSlice.h:89
std::vector< std::vector< double > > m_layerRhos
Definition PhiSlice.h:75
std::vector< double > m_otherChargeWeightHistogram
Definition PhiSlice.h:82
int m_zeroOffset
Definition PhiSlice.h:92
std::vector< std::vector< double > > * m_allLayerZs
Definition PhiSlice.h:77