ATLAS Offline Software
Loading...
Searching...
No Matches
TRT_LocalOccupancy.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
6// TRT_ElectronPidTool.cxx, (c) ATLAS Detector software
8
10
11// StoreGate, Athena, and Database stuff:
12#include "Identifier/Identifier.h"
13
14// Tracking:
17#include "TrkSurfaces/Surface.h"
19
20// Drift circles and TRT identifiers:
26
27// Math functions:
28#include <cmath>
29
30// ReadHandle
33
34//STL includes
35#include <sstream>
36
37
38class TRT_ID;
39
40namespace InDet
41{
43 const std::string& n,
44 const IInterface* p )
45 :
46 base_class(t,n,p)
47{
48}
49
50// =======================================================================
52{
53 // The TRT helper:
54 CHECK( detStore()->retrieve(m_TRTHelper, "TRT_ID") );
55
56 // access to t0 and straw status
57 if (m_T0Shift) {
58 CHECK( m_CalDbTool.retrieve());
59 }
60 else { //use wider validity gate if no T0 shift
63 }
64
65 //Initialize ReadHandleKeys - AllowEmpty has to be kept for overlay client passing RDOs as input arg
67
68 ATH_CHECK( m_strawStatusKey.initialize() );
69 ATH_CHECK( m_strawReadKey.initialize() );
70
71 std::string OccupancyCacheName = "GlobalTRTOccupancyData";
72 m_occupancyCacheRead = OccupancyCacheName;
73 m_occupancyCacheWrite = OccupancyCacheName;
74 ATH_CHECK(m_occupancyCacheRead.initialize());
75 ATH_CHECK(m_occupancyCacheWrite.initialize());
76
77 return StatusCode::SUCCESS;
78}
79
80std::vector<float> TRT_LocalOccupancy::GlobalOccupancy(const EventContext& ctx) const {
81 std::vector<float> output ;
82 if (m_isTrigger) {
83 ATH_MSG_INFO("Cannot compute Global Occupancies in trigger environment! Returning empty vector");
84 return output;
85 }
86
87 const OccupancyData* data = getData(ctx);
88 if (!data) {
89 ATH_MSG_INFO("Cannot get occupancy data. Returning empty vector.");
90 return output;
91 }
92
93 output.push_back( data->m_occ_total[0]*1.e-2 ) ; // Whole TRT
94 output.push_back( data->m_occ_total[1]*1.e-2 ) ; // Barrel C
95 output.push_back( data->m_occ_total[2]*1.e-2 ) ; // EndcapA C
96 output.push_back( data->m_occ_total[3]*1.e-2 ) ; // EndcapB C
97 output.push_back( data->m_occ_total[4]*1.e-2 ) ; // Barrel A
98 output.push_back( data->m_occ_total[5]*1.e-2 ) ; // EndcapA A
99 output.push_back( data->m_occ_total[6]*1.e-2 ) ; // EndcapB A
100
101 ATH_MSG_DEBUG("Compute Global Occupancy: whole TRT: "
102 << output.at(0) << "\t Barrel C: " << output.at(1)
103 << "\t EndcapA C: " << output.at(2) << "\t EndcapB C: "
104 << output.at(3) << "\t Barrel A: " << output.at(4)
105 << "\t EndcapA A: " << output.at(5)
106 << "\t EndcapB A: " << output.at(6));
107 return output;
108}
109
110
111float TRT_LocalOccupancy::LocalOccupancy(const EventContext& ctx, const Trk::Track& track) const {
112 ATH_MSG_DEBUG("Compute LocalOccupancy(const Trk::Track& track ) for tool: " << name());
113
114 int track_local[NLOCAL][NLOCALPHI]= {{0}};
115
116 const Trk::TrackStates* trackStates = track.trackStateOnSurfaces();
117 Trk::TrackStates::const_iterator tsos =trackStates->begin();
118 Trk::TrackStates::const_iterator tsosEnd =trackStates->end();
119 for (;tsos!=tsosEnd;++tsos) {
120 const Trk::MeasurementBase* mesb = (*tsos)->measurementOnTrack();
121 if (!mesb) {
122 continue;
123 }
124 const InDet::TRT_DriftCircleOnTrack* driftcircle = nullptr;
126 const Trk::RIO_OnTrack* tmpRio = static_cast<const Trk::RIO_OnTrack*>(mesb);
128 driftcircle = static_cast<const InDet::TRT_DriftCircleOnTrack*>(tmpRio);
129 }
130 }
131
132 if(!driftcircle) {
133 continue;
134 }
135
136 Identifier id=driftcircle->identify();
137 int det = m_TRTHelper->barrel_ec( id) ;
138 int lay = m_TRTHelper->layer_or_wheel( id) ;
139 int phi = m_TRTHelper->phi_module( id) ;
140
141 int i_total = findArrayTotalIndex(det, lay);
142 track_local[i_total-1][phi] +=1;
143
144 }
145
146 std::unique_ptr<OccupancyData> data_ptr;
147 const OccupancyData* data = nullptr;
148 if (m_isTrigger) {
149 data_ptr = makeDataTrigger(ctx);
150 countHitsNearTrack(ctx, *data_ptr, track_local);
151 data = data_ptr.get();
152 }
153 else
154 data = getData(ctx);
155
156 if (!data) {
157 ATH_MSG_INFO("Cannot get occupancy data. Returning 0.");
158 return 0;
159 }
160
161 float averageocc = 0;
162 int nhits = 0;
163 const std::array<std::array<int,NLOCALPHI>,NLOCAL> &stw_local = data->m_stw_local;
164
165 for (int i=0; i<6; ++i){
166 for (int j = 0; j < 32; j++){
167
168 float hits_array = track_local[i][j] ;
169 if (hits_array<1) continue;
170 float occ=0;
171 occ = (data->m_occ_local [i][j])*1.e-2 ;
172 if (stw_local[i][j] != 0){
173 if(occ == 0 && float(hits_array)/stw_local[i][j] > 0.01){
174 ATH_MSG_DEBUG("Occupancy is 0 for : " << i << " " << j << " BUT THERE ARE HITS!!!: " << hits_array);
175 continue;
176 }
177 }
178 averageocc += (occ*hits_array);
179 nhits += hits_array;
180
181 ATH_MSG_DEBUG("new track: " << i << " " << j << "\t" << hits_array << "\t" << occ );
182 }
183 }
184 if (nhits>0) averageocc = averageocc / nhits;
185 ATH_MSG_DEBUG("Compute LocalOccupancy(const Trk::Track& track ) for tool: " << averageocc << " is over" );
186
187 return averageocc;
188}
189
190
191std::map<int, double> TRT_LocalOccupancy::getDetectorOccupancy(const EventContext &ctx,
192 const TRT_RDO_Container* p_trtRDOContainer) const
193{
195 const TRTCond::StrawStatusData *strawStatus{*strawStatusHandle};
196
197 std::map<int,int> hitCounter;
198 std::map<int,double> occResults;
199
200 TRT_RDO_Container::const_iterator RDO_collection_iter = p_trtRDOContainer->begin();
201 TRT_RDO_Container::const_iterator RDO_collection_end = p_trtRDOContainer->end();
202 for ( ; RDO_collection_iter!= RDO_collection_end; ++RDO_collection_iter) {
203 const InDetRawDataCollection<TRT_RDORawData>* RDO_Collection(*RDO_collection_iter);
204 if (!RDO_Collection) continue;
205 if (!RDO_Collection->empty()){
206 DataVector<TRT_RDORawData>::const_iterator r,rb=RDO_Collection->begin(),re=RDO_Collection->end();
207
208 for(r=rb; r!=re; ++r) {
209 if (!*r)
210 continue;
211
212 Identifier rdo_id = (*r)->identify();
213 IdentifierHash straw_hash = m_TRTHelper->straw_hash(rdo_id);
214
215 //Check if straw is OK
216 if (strawStatus->findStatus(straw_hash) != TRTCond::StrawStatus::Good) {
217 continue;
218 }
219
220 int det = m_TRTHelper->barrel_ec(rdo_id) ;
221
222 unsigned int word = (*r)->getWord();
223
224 double t0 = 0.;
225 if (m_T0Shift) {
226 unsigned mask = 0x02000000;
227 bool SawZero = false;
228 int tdcvalue;
229 for(tdcvalue=0;tdcvalue<24;++tdcvalue)
230 {
231 if ( (word & mask) && SawZero) break;
232 if ( !(word & mask) ) SawZero = true;
233 mask>>=1;
234 if(tdcvalue==7 || tdcvalue==15) mask>>=1;
235 }
236 if(tdcvalue!=0 && tdcvalue!=24) {
237 t0 = m_CalDbTool->getT0(rdo_id);
238 }
239 }
240
241 if (!passValidityGate(word, t0)) continue;
242
243 hitCounter[det] +=1;
244 }
245 }
246 }
247
249 const TRTCond::AliveStraws* strawCounts{*strawHandle};
250
251 const std::array<int,TRTCond::AliveStraws::NTOTAL> &straws = strawCounts->getStwTotal();
252
253 occResults[-1] = (double)hitCounter[-1]/(double)straws[1];
254 occResults[-2] = (double)hitCounter[-2]/(double)(straws[2] + straws[3]);
255 occResults[1] = (double)hitCounter[1] /(double)straws[4];
256 occResults[2] = (double)hitCounter[2] /(double)(straws[5] + straws[6]);
257
258 return occResults;
259}
260
261void
264 int track_local[NLOCAL][NLOCALPHI]) const
265{
266
268 if (!driftCircleContainer.isValid()){
269 ATH_MSG_FATAL("driftCircleContainer " << m_trt_driftcircles << " not available");
270 return;
271 }
272
273 bool allOfEndcapAFound[2][NLOCALPHI] = {{false}};
274
275 for (int i=0; i<NLOCAL; ++i){
276 for (int j=0; j<NLOCALPHI; ++j){
277
278 // we are only interested in filling regions through which track passed
279 if (track_local[i][j] < 1) continue;
280
281 // if we already filled this region, skip it
282 if (data.m_hit_local[i][j] > 0) continue;
283
284 for (const InDet::TRT_DriftCircleCollection *colNext : *driftCircleContainer) {
285 if (!colNext) continue;
286 DataVector<TRT_DriftCircle>::const_iterator p_rdo = colNext->begin();
287 DataVector<TRT_DriftCircle>::const_iterator p_rdo_end = colNext->end();
288 for(; p_rdo!=p_rdo_end; ++p_rdo){
289 const TRT_DriftCircle* rdo = (*p_rdo);
290 if(!rdo) continue;
291
292 Identifier id = rdo->identify();
293
294 int det = m_TRTHelper->barrel_ec( id) ;
295 int lay = m_TRTHelper->layer_or_wheel( id) ;
296 int phi = m_TRTHelper->phi_module( id) ;
297 int i_total = findArrayTotalIndex(det, lay)-1;
298
299 if (i_total != i || phi != j) continue; // only fill the one region [i][j]
300
301 if (i%3==1 && lay>4) allOfEndcapAFound[(i<3?0:1)][phi]=true; //why the rescaling below?
302
303 data.m_hit_local[i_total][phi] +=1;
304 }
305 }
306
307 int hits = data.m_hit_local[i][j];
308 int stws = data.m_stw_local[i][j];
309 data.m_occ_local[i][j] = int(hits*100) / stws;
310
311 }
312 }
313
314 bool region_rescaled[NLOCAL][NLOCALPHI] = {{false}};
315
316 // rescale endcap A regions if not all wheels were counted
317 for (int i=0; i<NLOCAL; ++i){
318 for (int j=0; j<NLOCALPHI; ++j){
319 if (i%3!=1) continue; // only looking in endcapA
320 // we are only interested in regions through which track passed
321 if (track_local[i][j] < 1) continue;
322 if (!allOfEndcapAFound[(i<3?0:1)][j] && !region_rescaled[i][j]){
323 // if there are no hits in last wheel of endcapA
324 // && we haven't already rescaled this region:
325 // scale it down so the denominator is realistic
326 data.m_occ_local[i][j]/=(data.m_stws_ratio[(i<3?0:1)][j]);
327 region_rescaled[i][j]=true;
328 }
329 else if (allOfEndcapAFound[(i<3?0:1)][j] && region_rescaled[i][j]){
330 // if there are hits in last wheel of endcapA
331 // && we already rescaled this region:
332 // scale it back up to count all of endcapA
333 data.m_occ_local[i][j]*=(data.m_stws_ratio[(i<3?0:1)][j]);
334 region_rescaled[i][j]=false;
335 }
336 }
337 }
338
339 }
340
341 float TRT_LocalOccupancy::LocalOccupancy(const EventContext& ctx,
342 const double t_eta,
343 const double t_phi) const {
344 // take eta, phi of track, RoI, ... what have you
345 // return local occupancy in an appropriate region of the detector
346 // size of region is:
347 // - 1 of 6 partitions (barrel, endcapA, endcapB, sides A & C)
348 // - 1 of 32 phi modules (in triangular shape of chips, not 'pie slices')
349 ATH_MSG_DEBUG("LocalOccupancy(eta,phi)");
350
351 const OccupancyData* data = getData(ctx);
352 if (!data) {
353 ATH_MSG_ERROR ("Cannot get occupancy data.");
354 return 0;
355 }
356
357 int partition=mapEtaToPartition(t_eta);
358 int phisector=mapPhiToPhisector(t_phi);
359
360 if (partition > 5 || phisector > 31) {
361 ATH_MSG_DEBUG("mapping failed ; returning global occ");
362 return data->m_occ_total[0]*1.e-2 ;
363 }
364
365 float mapped_occ = data->m_occ_local[partition][phisector]*1.e-2;
366 ATH_MSG_DEBUG("returning mapped occupancy");
367 return mapped_occ;
368
369 }
370
371
372// ========================================================================
373bool TRT_LocalOccupancy::isMiddleBXOn(unsigned int word) {
374 // check that there is at least one hit in middle 25 ns
375 unsigned mask = 0x00010000;
376 int i=0;
377 for (i=0; i<8; ++i) {
378 if (word & mask) return true;
379 mask >>= 1;
380 }
381return false;
382}
383
384bool TRT_LocalOccupancy::passValidityGate(unsigned int word, float t0) const {
385 bool foundInterval = false;
386 unsigned mask = 0x02000000;
387 int i = 0;
388 while ( !foundInterval && (i < 24) ) {
389 if (word & mask) {
390 float thisTime = ((0.5+i)*3.125)-t0;
391 if (thisTime >= m_lowGate && thisTime <= m_highGate) foundInterval = true;
392 }
393 mask >>= 1;
394 if (i == 7 || i == 15)
395 mask >>= 1;
396 i++;
397 }
398 return foundInterval;
399}
400// ========================================================================
401
402
403 int TRT_LocalOccupancy::findArrayTotalIndex(const int det, const int lay) const {
404 int arrayindex = 0; // to be reset below
405 // NOTE: Below, arrayindex starts at 1
406 // because index 0 is filled with TOTAL value.
407 if (det == -1) arrayindex = 1; // barrel side C
408 else if (det == -2) { // endcap side C
409 if (lay < 6) arrayindex = 2; // wheel A
410 else arrayindex = 3; // wheel B
411 }
412 else if (det == 1) arrayindex = 4; // barrel side A
413 else if (det == 2) { // endcap side A
414 if (lay < 6) arrayindex = 5; // wheel A
415 else arrayindex = 6; // wheel B
416 }
417 else ATH_MSG_WARNING(" detector value is: " << det << ", out of range -2, -1, 1, 2, so THIS IS NOT TRT!!!");
418 return arrayindex;
419 }
420
422
423 int phisector=33;
424 // do phi selection
425 // shift all phi to positive numbers
426 float dphi = 0; // TBD
427
428 double phi2pi = (t_phi > 0) ? t_phi : t_phi + 2*M_PI;
429
430 phisector = int ( (phi2pi + dphi)*32./(2*M_PI) );
431 return phisector;
432}
433
434int TRT_LocalOccupancy::mapEtaToPartition(const double t_eta) const {
435
436 int partition=7;
437
438 double abseta = fabs(t_eta);
439
440 // do eta selection
441 if ( abseta <= 0.90 ) partition = 0;
442 else if ( abseta > 0.90 && abseta <= 1.55 ) partition = 1;
443 else if ( abseta > 1.55 && abseta <= 2.00 ) partition = 2;
444 else ATH_MSG_DEBUG("abs(eta) > 2.0 ; not in TRT!");
445
446 if (t_eta>0.) partition += 3; // side A
447
448 return partition;
449}
450
451
453{
455 if (rh.isValid()){
456 return rh.cptr();
457 }
458
460 return wh.put (makeData(ctx), true);
461}
462
463
464std::unique_ptr<TRT_LocalOccupancy::OccupancyData>
465TRT_LocalOccupancy::makeData(const EventContext& ctx) const
466{
467 // count live straws
469 const TRTCond::AliveStraws* strawCounts{*strawHandle};
470
471 auto data = std::make_unique<OccupancyData>(strawCounts->getStwLocal());
472
473 // put # hits in vectors
474 if ( m_trt_driftcircles.empty() ) {
475 ATH_MSG_WARNING("No TRT Drift Circles key is empty");
476 } else {
478 if ( driftCircleContainer.isValid() ) {
479 ATH_MSG_DEBUG("Found Drift Circles in StoreGate");
480 for (const InDet::TRT_DriftCircleCollection *colNext : *driftCircleContainer) {
481 if(!colNext) continue;
482 // loop over DCs
483 DataVector<TRT_DriftCircle>::const_iterator p_rdo = colNext->begin();
484 DataVector<TRT_DriftCircle>::const_iterator p_rdo_end = colNext->end();
485 for(; p_rdo!=p_rdo_end; ++p_rdo){
486 const TRT_DriftCircle* rdo = (*p_rdo);
487 if(!rdo) continue;
488 Identifier id = rdo->identify();
489
490 int det = m_TRTHelper->barrel_ec( id) ;
491 int lay = m_TRTHelper->layer_or_wheel( id) ;
492 int phi = m_TRTHelper->phi_module( id) ;
493 int i_total = findArrayTotalIndex(det, lay);
494
495 data->m_hit_total[0] +=1;
496 data->m_hit_total[i_total] +=1;
497 data->m_hit_local[i_total-1][phi] +=1;
498 }
499 }
500 } else {
501 ATH_MSG_WARNING("No TRT Drift Circles in StoreGate");
502 }
503 }
504
505 const std::array<int,NTOTAL> &stw_total = strawCounts->getStwTotal();
506 const std::array<std::array<int,NLOCALPHI>,NLOCAL> &stw_local = strawCounts->getStwLocal();
507
508 // Calculate Occs:
509 for (int i=0; i<NTOTAL; ++i) {
510 float occ = 0;
511 int hits = data->m_hit_total[i];
512 int stws = stw_total[i];
513 if (stws>0) occ = float(hits*100)/stws;
514 data->m_occ_total[i] = int(occ);
515 }
516 for (int i=0; i<NLOCAL; ++i) {
517 for (int j=0; j<NLOCALPHI; ++j) {
518 float occ = 0;
519 int hits = data->m_hit_local[i][j];
520 int stws = stw_local[i][j];
521 if (stws>0) occ = float(hits*100)/stws;
522 data->m_occ_local[i][j] = int(occ);
523 }
524 }
525
526 ATH_MSG_DEBUG("Active straws: " << stw_total[0] << "\t total number of hits: "
527 << data->m_hit_total[0]
528 << "\t occ: " << data->m_occ_total[0]);
529 return data;
530}
531
532
533std::unique_ptr<TRT_LocalOccupancy::OccupancyData>
534TRT_LocalOccupancy::makeDataTrigger(const EventContext &ctx) const
535{
537 const TRTCond::AliveStraws* strawCounts{*strawHandle};
538
539 auto data = std::make_unique<OccupancyData>(strawCounts->getStwLocal());
540 const std::array<std::array<int,NLOCALPHI>,NLOCAL> &stw_local = strawCounts->getStwLocal();;
541 const std::array<std::array<int,NLOCALPHI>,NWHEEL> &stw_wheel = strawCounts->getStwWheel();
542
543 for (int i=0; i<5; ++i){
544 for (int j=0; j<NLOCALPHI; ++j){
545 data->m_stws_ratio[0][j]+=float(stw_wheel[i+3 ][j])/stw_local[1][j];
546 data->m_stws_ratio[1][j]+=float(stw_wheel[i+20][j])/stw_local[4][j];
547 }
548 }
549
550 return data;
551}
552
553
554}// namespace InDet
const boost::regex re(r_e)
#define M_PI
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
#define CHECK(...)
Evaluate an expression and check for errors.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
static Double_t t0
Handle class for reading from StoreGate.
This is an Identifier helper class for the TRT subdetector.
InDetRawDataContainer< InDetRawDataCollection< TRT_RDORawData > > TRT_RDO_Container
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
bool empty() const noexcept
Returns true if the collection is empty.
const_iterator end() const
return const_iterator for end of container
const_iterator begin() const
return const_iterator for first entry
This is a "hash" representation of an Identifier.
Represents 'corrected' measurements from the TRT (for example, corrected for wire sag).
std::unique_ptr< OccupancyData > makeData(const EventContext &ctx) const
SG::ReadCondHandleKey< TRTCond::AliveStraws > m_strawReadKey
SG::ReadHandleKey< TRT_DriftCircleContainer > m_trt_driftcircles
Gaudi::Property< bool > m_T0Shift
TRT_LocalOccupancy(const std::string &, const std::string &, const IInterface *)
std::unique_ptr< OccupancyData > makeDataTrigger(const EventContext &ctx) const
virtual std::map< int, double > getDetectorOccupancy(const EventContext &ctx, const TRT_RDO_Container *p_trtRDOContainer) const override
Return a map of the occupancy in the barrel (-1,+1) and endcaps (-2,+2)
Gaudi::Property< float > m_lowWideGate
SG::WriteHandleKey< OccupancyData > m_occupancyCacheWrite
static bool isMiddleBXOn(unsigned int word)
Gaudi::Property< float > m_highWideGate
virtual float LocalOccupancy(const EventContext &ctx, const Trk::Track &track) const override
Return the local occupancy for the sectors crossed by a given track.
const TRT_ID * m_TRTHelper
External tools:
static int mapPhiToPhisector(const double phi)
virtual StatusCode initialize() override
standard Athena-Algorithm method
Gaudi::Property< float > m_lowGate
SG::ReadHandleKey< OccupancyData > m_occupancyCacheRead
const OccupancyData * getData(const EventContext &ctx) const
int mapEtaToPartition(const double eta) const
bool passValidityGate(unsigned int word, float t0) const
ToolHandle< ITRT_CalDbTool > m_CalDbTool
Gaudi::Property< float > m_highGate
SG::ReadCondHandleKey< TRTCond::StrawStatusData > m_strawStatusKey
int findArrayTotalIndex(const int det, const int lay) const
To convert from array index to det id and viceversa.
virtual std::vector< float > GlobalOccupancy(const EventContext &ctx) const override
Return the global occupancy of the event.
void countHitsNearTrack(const EventContext &ctx, OccupancyData &data, int track_local[NLOCAL][NLOCALPHI]) const
Gaudi::Property< bool > m_isTrigger
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
const std::array< std::array< int, NLOCALPHI >, NWHEEL > & getStwWheel() const
Definition AliveStraws.h:25
const std::array< int, NTOTAL > & getStwTotal() const
Definition AliveStraws.h:23
const std::array< std::array< int, NLOCALPHI >, NLOCAL > & getStwLocal() const
Definition AliveStraws.h:24
unsigned int findStatus(const IdentifierHash &hashID) const
This is an Identifier helper class for the TRT subdetector.
Definition TRT_ID.h:82
This class is the pure abstract base class for all fittable tracking measurements.
virtual bool type(MeasurementBaseType::Type type) const =0
Interface method checking the type.
Identifier identify() const
return the identifier
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
Definition RIO_OnTrack.h:70
Identifier identify() const
return the identifier -extends MeasurementBase
virtual bool rioType(RIO_OnTrackType::Type type) const =0
Method checking the Rio On Track type.
int r
Definition globals.cxx:22
Primary Vertex Finder.
DataVector< const Trk::TrackStateOnSurface > TrackStates