HighLAND
HighlandAnalysisUtils.cxx
1 #include "HighlandAnalysisUtils.hxx"
2 #include <TMath.h>
3 #include <math.h>
4 
5 
6 //********************************************************************
8 //********************************************************************
9 
10  ProdId_h prodId=-1;
11 
12 #if VERSION_PROD5E
13  prodId=ProdId::PROD5E;
14 #endif
15 
16 #if VERSION_PROD5F
17  prodId=ProdId::PROD5F;
18 #endif
19 
20 #if VERSION_PROD5G
21  prodId=ProdId::PROD5G;
22 #endif
23 
24 #if VERSION_PROD6PRE
25  prodId=ProdId::PROD6PRE;
26 #endif
27 
28 #if VERSION_PROD6A
29  prodId=ProdId::PROD6A;
30 #endif
31 
32 #if VERSION_PROD6B
33  prodId=ProdId::PROD6BC;
34 #endif
35 
36 #if VERSION_PROD7_DEVEL
37  prodId=ProdId::PROD7DEVEL;
38 #endif
39 
40  return prodId;
41 
42 }
43 
44 //**************************************************
45 int anaUtils::GetAllChargedTrajOnlyDsECal(const AnaEventB& event, AnaTrueParticleB* DsEcalChargedTracks[] ) {///*****mirar esto!! luego añadir varibales q puso sasha y mirar si pinta micro tree, añadir edeposit y posicion a ver q pinta y asociar edeposit con emenergy || mip energy
46 //**************************************************
47  int nDsECalChargedTracks = 0;
48  AnaTrueParticleB* trajInBunch[NMAXPARTICLES];
49  int nChargedTrajInBunch = GetAllChargedTrajInBunch(event,trajInBunch);
50  for(int i=0;i<nChargedTrajInBunch;i++){
51  for(int idet=0;idet<trajInBunch[i]->nDetCrossings;idet++){
52  if((SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kFGD1)) ||
53  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kFGD2)) ||
54  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kTPC1)) ||
55  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kTPC2)) ||
56  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kTPC3)) ||
57  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kP0D)) ||
58  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kPECAL)) ||
59  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kSMRD))) {continue;}
60 
61  //i.e crossing ONLY the active part of the DsECal, no POD ECal or any other sub-detector
62  if (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kDSECAL) && trajInBunch[i]->DetCrossings[idet]->InActive){
63  // In Ds not needed cut on lenght
64  /* double dist = sqrt(pow(trajInBunch[i]->DetCrossings[idet]->ExitPosition[0]-trajInBunch[i]->DetCrossings[idet]->EntrancePosition[0] ,2) +
65  pow(trajInBunch[i]->DetCrossings[idet]->ExitPosition[1]-trajInBunch[i]->DetCrossings[idet]->EntrancePosition[1] ,2) +
66  pow(trajInBunch[i]->DetCrossings[idet]->ExitPosition[2]-trajInBunch[i]->DetCrossings[idet]->EntrancePosition[2] ,2) +
67  pow(trajInBunch[i]->DetCrossings[idet]->ExitPosition[3]-trajInBunch[i]->DetCrossings[idet]->EntrancePosition[3] ,2)); */
68  // Value of ECal threshold to set
69  // if ((trajInBunch[i]->Momentum<80) ) continue;
70  DsEcalChargedTracks[nDsECalChargedTracks] = trajInBunch[i];
71  nDsECalChargedTracks++;
72  }
73  }
74  }
75  return nDsECalChargedTracks;
76 }
77 
78 //**************************************************
79 int anaUtils::GetAllChargedTrajOnlyBrECal(const AnaEventB& event, AnaTrueParticleB* BrECalChargedTracks[]) {
80 //**************************************************
81  int nBrECalChargedTracks = 0;
82  AnaTrueParticleB* trajInBunch[NMAXPARTICLES];
83  int nChargedTrajInBunch = GetAllChargedTrajInBunch(event,trajInBunch);
84  for(int i=0;i<nChargedTrajInBunch;i++){
85  for(int idet=0;idet<trajInBunch[i]->nDetCrossings;idet++){
86  if((SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kFGD1)) ||
87  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kFGD2)) ||
88  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kTPC1)) ||
89  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kTPC2)) ||
90  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kTPC3)) ||
91  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kP0D)) ||
92  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kPECAL)) ||
93  (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kSMRD))) {continue;}
94 
95  //i.e crossing ONLY the active part of the BrECal
96  if (SubDetId::GetDetectorUsed(trajInBunch[i]->DetCrossings[idet]->Detector, SubDetId::kTECAL) && trajInBunch[i]->DetCrossings[idet]->InActive ){
97  //double dist = sqrt(pow(trajInBunch[i]->DetCrossings[idet]->ExitPosition[0]-trajInBunch[i]->DetCrossings[idet]->EntrancePosition[0] ,2) +
98  // pow(trajInBunch[i]->DetCrossings[idet]->ExitPosition[1]-trajInBunch[i]->DetCrossings[idet]->EntrancePosition[1] ,2) +
99  // pow(trajInBunch[i]->DetCrossings[idet]->ExitPosition[2]-trajInBunch[i]->DetCrossings[idet]->EntrancePosition[2] ,2) +
100  // pow(trajInBunch[i]->DetCrossings[idet]->ExitPosition[3]-trajInBunch[i]->DetCrossings[idet]->EntrancePosition[3] ,2));
101  // Value of ECal threshold to set
102  // if (TMath::Abs(dist) < 35 || (trajInBunch[i]->Momentum<30) ) continue;
103  BrECalChargedTracks[nBrECalChargedTracks] = trajInBunch[i];
104  nBrECalChargedTracks++;
105  }
106  }
107  }
108  return nBrECalChargedTracks;
109 }
110 
111 //*********************************************************
112 AnaVertexB* anaUtils::GetGlobalVertex(const AnaEventB& event, AnaTrackB** Tracks, int nTracks){
113 //*********************************************************
114  AnaVertexB* vertex = NULL;
115 
116  // Loop over vertices available in the event
117  for (int i = 0; i < event.nVertices; i++){
118 
119  if (!event.Vertices[i]) continue;
120 
121  int nMatch_tmp = 0;
122  int nTracks_tmp = 0;
123  bool tracks_loop = false;
124 
125  // Loop through vertex constituents
126  for (int j = 0; j < event.Vertices[i]->nParticles; j++){
127 
128  if (!event.Vertices[i]->Particles[j]) continue;
129 
130  // Loop through input tracks
131  for (int k = 0; k < nTracks; k++){
132  if (!Tracks[k]) continue;
133 
134  // Count valid tracks
135  if (!tracks_loop) nTracks_tmp++;
136 
137  // Check whether have the same objects, check UniqueID just in case some copying took place
138  // (probably redundunt)
139  if (event.Vertices[i]->Particles[j]->UniqueID == Tracks[k]->UniqueID)
140  nMatch_tmp++;
141  }
142 
143  tracks_loop = true;
144  }
145 
146  // Check whether all valid tracks provided belong to the vertex
147  if (nTracks_tmp == nMatch_tmp){
148  vertex = event.Vertices[i];
149  break;
150  }
151  }
152 
153  return vertex;
154 
155 }
int nDetCrossings
The number of DetCrossing objects.
int GetAllChargedTrajOnlyDsECal(const AnaEventB &event, AnaTrueParticleB *DsECalChargedTracks[])
AnaVertexB ** Vertices
The reconstructed objects in this bunch.
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
int GetAllChargedTrajInBunch(const AnaEventB &event, AnaTrueParticleB *traj[])
Definition: SubDetUtils.cxx:26
Int_t UniqueID
The UniqueID of this reconstructed object.
AnaVertexB * GetGlobalVertex(const AnaEventB &event, AnaTrackB **Tracks, int nTracks)
Representation of a true Monte Carlo trajectory/particle.
Representation of a global track.
AnaParticleB ** Particles
Representation of a global vertex.
ProdId_h GetProductionIdFromND280AnalysisTools()
Get Production Id from nd280AnalysisTools.