HighLAND
SubDetUtils.cxx
1 #include "SubDetUtils.hxx"
2 
3 
4 //**************************************************
6 //**************************************************
7  // for a given track compute the number of segments in a given detector
8  return SubDetId::GetNSegmentsInDet(track.Detector, det);
9 }
10 
11 //**************************************************
12 int anaUtils::GetAllTrajInBunch(const AnaEventB& event, AnaTrueParticleB* trajInBunch[]) {
13 //**************************************************
14  int count = 0;
15  for(Int_t i=0;i< event.nTrueParticles;i++){
16  if(!event.TrueParticles[i]->TrueVertex) continue;
17  if(event.TrueParticles[i]->TrueVertex->Bunch!=event.Bunch) continue;
18  trajInBunch[count] = event.TrueParticles[i];
19  ++count;
20  }
21  return count;
22 }
23 
24 
25 //**************************************************
26 int anaUtils::GetAllChargedTrajInBunch(const AnaEventB& event, AnaTrueParticleB* chargedtrajInBunch[]) {
27 //**************************************************
28  int count = 0;
29  for(Int_t i=0;i< event.nTrueParticles;i++){
30  if(!event.TrueParticles[i]->TrueVertex) continue;
31  if(event.TrueParticles[i]->TrueVertex->Bunch!=event.Bunch) continue;
32 
33  if(event.TrueParticles[i]->Charge!=0){
34  chargedtrajInBunch[count] = event.TrueParticles[i];
35  ++count;
36  }
37  }
38  return count;
39 }
40 
41 //**************************************************
42 bool anaUtils::HasTrackUsingDet(const AnaEventB& event, SubDetId::SubDetEnum det) {
43 //**************************************************
44 
45  for (int it = 0; it < event.nParticles; it++) {
46  AnaTrackB* track = static_cast<AnaTrackB*>(event.Particles[it]);
47  if (SubDetId::GetDetectorUsed(track->Detector, det)){
48  return true;
49  }
50  }
51 
52  return false;
53 }
54 
55 //**************************************************
57 //**************************************************
58 
59  int count = 0;
60  for (int it = 0; it < event.nParticles; it++) {
61  AnaTrackB* track = static_cast<AnaTrackB*>(event.Particles[it]);
62  if (SubDetId::GetDetectorUsed(track->Detector, det)){
63  selTracks[count] = track;
64  count++;
65  }
66  }
67 
68  return count;
69 }
70 
71 //**************************************************
73 //**************************************************
74 
75  int count = 0;
76 
77  for (int it = 0; it < event.nParticles; it++) {
78  AnaTrackB* track = static_cast<AnaTrackB*>(event.Particles[it]);
79  if (!SubDetId::GetDetectorUsed(track->Detector, det)) {
80  selTracks[count] = track;
81  ++count;
82  }
83  }
84 
85  return count;
86 }
87 
88 //**************************************************
90 //**************************************************
91 
92  int count = 0;
93 
94  for (int it = 0; it < event.nParticles; it++) {
95  AnaTrackB* track = static_cast<AnaTrackB*>(event.Particles[it]);
96  if (TrackUsesOnlyDet(*track, det)) {
97  selTracks[count] = track;
98  ++count;
99  }
100  }
101 
102  return count;
103 }
104 
105 
106 //**************************************************
107 bool anaUtils::TrackUsesDets(const AnaTrackB& track, SubDetId::SubDetEnum dets[], int nDets) {
108 //**************************************************
109  return SubDetId::GetDetectorArrayUsed(track.Detector, dets, nDets);
110 }
111 
112 //**************************************************
114 //**************************************************
115  return SubDetId::GetDetectorUsed(track.Detector, det);
116 }
117 
118 //**************************************************
120 //**************************************************
121  return SubDetId::GetDetectorUsed(track.Detector, det);
122 }
123 
124 //**************************************************
126 //**************************************************
127  return SubDetId::TrackUsesOnlyDet(track.Detector, det);
128 }
129 
130 //**************************************************
132 //**************************************************
133  return SubDetId::TrackUsesOnlyDet(track.Detector, det);
134 }
135 
AnaTrueVertexB * TrueVertex
Pointer to the AnaTrueVertexB of the interaction that created this AnaTrueParticleB.
int GetAllTracksUsingOnlyDet(const AnaBunchB &bunch, SubDetId::SubDetEnum det, AnaTrackB *selTracks[])
unsigned long Detector
static bool TrackUsesOnlyDet(unsigned long BitFIeld, SubDetId::SubDetEnum det)
Check whether a track only uses a specified subdetector or detector system.
Definition: SubDetId.cxx:117
Int_t GetNSegmentsInDet(const AnaTrackB &track, SubDetId::SubDetEnum det)
Get the number of AnaParticle segments that use the specified detector system.
Definition: SubDetUtils.cxx:5
static int GetNSegmentsInDet(unsigned long BitFIeld, SubDetId::SubDetEnum det)
Definition: SubDetId.cxx:113
int GetAllTrajInBunch(const AnaEventB &event, AnaTrueParticleB *traj[])
Definition: SubDetUtils.cxx:12
static bool GetDetectorUsed(unsigned long BitField, SubDetId::SubDetEnum det)
Method to see if a certain subdetector or subdetector system is used.
Definition: SubDetId.cxx:40
bool TrackUsesDet(const AnaTrackB &track, SubDetId::SubDetEnum det)
int GetAllChargedTrajInBunch(const AnaEventB &event, AnaTrueParticleB *traj[])
Definition: SubDetUtils.cxx:26
Representation of a true Monte Carlo trajectory/particle.
SubDetEnum
Enumeration of all detector systems and subdetectors.
Definition: SubDetId.hxx:25
Representation of a global track.
Int_t Bunch
The index of this bunch (0-7).
int GetAllTracksNotUsingDet(const AnaEventB &event, SubDetId::SubDetEnum det, AnaTrackB *selTracks[])
Definition: SubDetUtils.cxx:72
AnaTrueParticleB ** TrueParticles
The true MC particles used in this spill.
bool TrackUsesDets(const AnaTrackB &track, SubDetId::SubDetEnum dets[], int nDets)
int GetAllTracksUsingDet(const AnaBunchB &bunch, SubDetId::SubDetEnum det, AnaTrackB *selTracks[])
Float_t Charge
The true charge of the particle.
Representation of a reconstructed particle (track or shower).
bool TrackUsesOnlyDet(const AnaTrackB &track, SubDetId::SubDetEnum det)