HighLAND
TreeConverterUtils.cxx
1 #include "TreeConverterUtils.hxx"
2 #include <stdio.h>
3 #include <math.h>
4 
5 
6 namespace convUtils {}
7 
8 
9 //****************************************************************************
10 void convUtils::ConvertTPCDetEnumToBitField(unsigned long &det, int tpc){
11 //****************************************************************************
12  SubDetId::SetDetectorUsed(det, SubDetId::kTPC);
13  switch(tpc){
14  case 0: SubDetId::SetDetectorUsed(det, SubDetId::kTPC1);
15  break;
16  case 1: SubDetId::SetDetectorUsed(det, SubDetId::kTPC2);
17  break;
18  case 2: SubDetId::SetDetectorUsed(det, SubDetId::kTPC3);
19  break;
20  default: SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
21  }
22 }
23 
24 //****************************************************************************
25 void convUtils::ConvertFGDDetEnumToBitField(unsigned long &det, int fgd){
26 //****************************************************************************
27  SubDetId::SetDetectorUsed(det, SubDetId::kFGD);
28  switch(fgd){
29  case 0: SubDetId::SetDetectorUsed(det, SubDetId::kFGD1);
30  break;
31  case 1: SubDetId::SetDetectorUsed(det, SubDetId::kFGD2);
32  break;
33  default: SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
34  }
35 }
36 
37 //****************************************************************************
38 void convUtils::ConvertSMRDDetEnumToBitField(unsigned long &det, int smrd){
39 //****************************************************************************
40  SubDetId::SetDetectorUsed(det, SubDetId::kSMRD);
41  switch(smrd){
42  case 0: SubDetId::SetDetectorUsed(det, SubDetId::kTopSMRD);
43  break;
44  case 1: SubDetId::SetDetectorUsed(det, SubDetId::kBottomSMRD);
45  break;
46  case 2: SubDetId::SetDetectorUsed(det, SubDetId::kLeftSMRD);
47  break;
48  case 3: SubDetId::SetDetectorUsed(det, SubDetId::kRightSMRD);
49  break;
50  default: SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
51  }
52 
54 
55 }
56 
57 //****************************************************************************
58 void convUtils::ConvertECALDetEnumToBitField(unsigned long &det, int ecal){
59 //****************************************************************************
60  switch(ecal){
61  case 0: SubDetId::SetDetectorUsed(det, SubDetId::kLeftPECAL);
62  break;
63  case 1: SubDetId::SetDetectorUsed(det, SubDetId::kRightPECAL);
64  break;
65  case 2: SubDetId::SetDetectorUsed(det, SubDetId::kTopPECAL);
66  break;
67  case 3: SubDetId::SetDetectorUsed(det, SubDetId::kBottomPECAL);
68  break;
69  case 4: SubDetId::SetDetectorUsed(det, SubDetId::kLeftTECAL);
70  break;
71  case 5: SubDetId::SetDetectorUsed(det, SubDetId::kRightTECAL);
72  break;
73  case 6: SubDetId::SetDetectorUsed(det, SubDetId::kTopTECAL);
74  break;
75  case 7: SubDetId::SetDetectorUsed(det, SubDetId::kBottomTECAL);
76  break;
77  case 8: SubDetId::SetDetectorUsed(det, SubDetId::kDSECAL);
78  break;
79  default: SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
80  }
82 
83 }
84 
85 //****************************************************************************
86 void convUtils::ConvertLocalDetEnumToBitField(unsigned long &det, int index, SubDetId::SubDetEnum subdet_enum){
87 //****************************************************************************
88 
89  switch(subdet_enum){
90  case SubDetId::kTPC :
92  break;
93  case SubDetId::kFGD :
95  break;
96  case SubDetId::kECAL :
98  break;
99  case SubDetId::kSMRD :
101  break;
102  case SubDetId::kP0D :
103  SubDetId::SetDetectorUsed(det, SubDetId::kP0D);
104  break;
105  default :
106  std::cout << "convUtils::ConvertLocalDetEnumToBitField(). Cannot get old local detector enumeration for subsystem: " << subdet_enum << ". Please define whether it is a TPC, FGD, ECAL, SMRD or P0D track." << std::endl;
107  SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
108  }
109 }
110 
111 //****************************************************************************
112 void convUtils::ConvertTrueParticleDetEnumToBitField(unsigned long &det, int DetUsed){
113 //****************************************************************************
114 
115 /* This is the enumeration used in oaAnalysis (ToaAnalysisUtils.hxx)
116  kFGD1 = 0,
117  kFGD2,
118  kP0D,
119  kDsECal,
120  kBrlECal,
121  kP0DECal,
122  kTPC1,
123  kTPC2,
124  kTPC3,
125  kMRD,
126  kOffAxis, /// the rest of the off-axis detector
127  kINGRID,
128  kCavern,
129  kNSubdetectors
130 */
131 
132  switch(DetUsed){
133  case 0: SubDetId::SetDetectorUsed(det, SubDetId::kFGD1);
134  break;
135  case 1: SubDetId::SetDetectorUsed(det, SubDetId::kFGD2);
136  break;
137  case 2: SubDetId::SetDetectorUsed(det, SubDetId::kP0D);
138  break;
139  case 3: SubDetId::SetDetectorUsed(det, SubDetId::kDSECAL);
140  break;
141  case 4: SubDetId::SetDetectorUsed(det, SubDetId::kECAL); // Temporary fix whilst SubDetId in truth is not available from oaAnalysis
142  SubDetId::SetDetectorUsed(det, SubDetId::kTECAL);
143  break;
144  case 5: SubDetId::SetDetectorUsed(det, SubDetId::kECAL); // Temporary fix whilst SubDetId in truth is not available from oaAnalysis
145  SubDetId::SetDetectorUsed(det, SubDetId::kPECAL);
146  break;
147  case 6: SubDetId::SetDetectorUsed(det, SubDetId::kTPC1);
148  break;
149  case 7: SubDetId::SetDetectorUsed(det, SubDetId::kTPC2);
150  break;
151  case 8: SubDetId::SetDetectorUsed(det, SubDetId::kTPC3);
152  break;
153  case 9: SubDetId::SetDetectorUsed(det, SubDetId::kSMRD);
154  break;
155  default: SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
156  }
158 }
159 
160 //****************************************************************************
161 void convUtils::ConvertTrackerDetEnumToBitField(unsigned long &det, int DetUsed){
162 //****************************************************************************
163  switch(DetUsed){
164  case 1: SubDetId::SetDetectorUsed(det, SubDetId::kTPC1);
165  break;
166  case 2: SubDetId::SetDetectorUsed(det, SubDetId::kTPC2);
167  break;
168  case 3: SubDetId::SetDetectorUsed(det, SubDetId::kTPC3);
169  break;
170  case 4: SubDetId::SetDetectorUsed(det, SubDetId::kFGD1);
171  break;
172  case 5: SubDetId::SetDetectorUsed(det, SubDetId::kFGD2);
173  break;
174  default: SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
175  }
177 }
178 
179 
180 //**********************************************************************
181 void convUtils::ConvertTrackerDetFieldToBitField(unsigned long &det, int Detectors){
182 //**********************************************************************
183  //try to avoid string comparison
184 
185  //cannot be a tracker object
186  if (Detectors>12345){
187  SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
188  return;
189  }
190 
191  for(int i=5; i>0; i--){
192  int value = Detectors % 10;
194  Detectors /=10;
195  if (Detectors == 0)
196  break;
197  }
198 
199 }
200 
201 
202 //****************************************************************************
203 void convUtils::ConvertTrackDetEnumToBitField(unsigned long &det, int DetUsed[]){
204  //****************************************************************************
205  for(UInt_t i = 0; i < NDETECTORS; ++i){
206  if(DetUsed[i]==1){
208  }
209  }
211 }
212 
213 //****************************************************************************
214 void convUtils::ConvertTrackDetEnumToBitField(unsigned long &det, bool DetUsed[]){
215 //****************************************************************************
216  for(UInt_t i = 0; i < NDETECTORS; ++i){
217  if(DetUsed[i]){
219  }
220  }
222 }
223 
224 
225 //****************************************************************************
226 void convUtils::SetDetectorUsedField(unsigned long &det, unsigned int i){
227 //****************************************************************************
228  switch(i){
229  case 0: SubDetId::SetDetectorUsed(det, SubDetId::kTPC1);
230  break;
231  case 1: SubDetId::SetDetectorUsed(det, SubDetId::kTPC2);
232  break;
233  case 2: SubDetId::SetDetectorUsed(det, SubDetId::kTPC3);
234  break;
235  case 3: SubDetId::SetDetectorUsed(det, SubDetId::kFGD1);
236  break;
237  case 4: SubDetId::SetDetectorUsed(det, SubDetId::kFGD2);
238  break;
239  case 5: SubDetId::SetDetectorUsed(det, SubDetId::kP0D);
240  break;
241  case 6: SubDetId::SetDetectorUsed(det, SubDetId::kDSECAL);
242  break;
243  case 7: SubDetId::SetDetectorUsed(det, SubDetId::kTopSMRD);
244  break;
245  case 8: SubDetId::SetDetectorUsed(det, SubDetId::kBottomSMRD);
246  break;
247  case 9: SubDetId::SetDetectorUsed(det, SubDetId::kLeftSMRD);
248  break;
249  case 10: SubDetId::SetDetectorUsed(det, SubDetId::kRightSMRD);
250  break;
251  case 11: SubDetId::SetDetectorUsed(det, SubDetId::kTopPECAL);
252  break;
253  case 12: SubDetId::SetDetectorUsed(det, SubDetId::kBottomPECAL);
254  break;
255  case 13: SubDetId::SetDetectorUsed(det, SubDetId::kLeftPECAL);
256  break;
257  case 14: SubDetId::SetDetectorUsed(det, SubDetId::kRightPECAL);
258  break;
259  case 15: SubDetId::SetDetectorUsed(det, SubDetId::kTopTECAL);
260  break;
261  case 16: SubDetId::SetDetectorUsed(det, SubDetId::kBottomTECAL);
262  break;
263  case 17: SubDetId::SetDetectorUsed(det, SubDetId::kLeftTECAL);
264  break;
265  case 18: SubDetId::SetDetectorUsed(det, SubDetId::kRightTECAL);
266  break;
267  case 19: SubDetId::SetDetectorUsed(det, SubDetId::kTRACKER);
268  break;
269  default: SubDetId::SetDetectorUsed(det, SubDetId::kInvalid);
270  }
271  return;
272 }
273 
274 
275 //********************************************************************
277 //********************************************************************
278 
279  switch(det){
280  case SubDetId::kTPC :
281  if(SubDetId::IsTPCDetector(idet)) return (idet - 2);
282  else std::cout << "Error: Should not be here, detector " << idet << " is not in the TPC" << std::endl;
283  break;
284  case SubDetId::kFGD :
285  if(SubDetId::IsFGDDetector(idet)) return (idet);
286  else std::cout << "Error: Should not be here, detector " << idet << " is not in the FGD" << std::endl;
287  break;
288  case SubDetId::kP0D :
289  if(SubDetId::IsP0DDetector(idet)) return 0;
290  else std::cout << "Error: Should not be here, detector " << idet << " is not in the P0D" << std::endl;
291  break;
292  case SubDetId::kECAL :
293  if(SubDetId::IsECALDetector(idet)){
294  switch(idet){
295  case SubDetId::kLeftPECAL:
296  return 0;
297  break;
298  case SubDetId::kRightPECAL:
299  return 1;
300  break;
301  case SubDetId::kTopPECAL:
302  return 2;
303  break;
304  case SubDetId::kBottomPECAL:
305  return 3;
306  break;
307  case SubDetId::kLeftTECAL:
308  return 4;
309  break;
310  case SubDetId::kRightTECAL:
311  return 5;
312  break;
313  case SubDetId::kTopTECAL:
314  return 6;
315  break;
316  case SubDetId::kBottomTECAL:
317  return 7;
318  break;
319  case SubDetId::kDSECAL:
320  return 8;
321  break;
322  default:
323  std::cout << "Error: Should not be here, detector " << idet << " is not in the ECal" << std::endl;
324  return -1;
325  }
326  }
327  break;
328  case SubDetId::kSMRD :
329  if(SubDetId::IsSMRDDetector(idet)){
330  switch(idet){
331  case SubDetId::kLeftSMRD:
332  return 0;
333  break;
334  case SubDetId::kRightSMRD:
335  return 1;
336  break;
337  case SubDetId::kTopSMRD:
338  return 2;
339  break;
340  case SubDetId::kBottomSMRD:
341  return 3;
342  break;
343  default:
344  std::cout << "Error: Should not be here, detector " << idet << " is not in the SMRD" << std::endl;
345  return -1;
346  }
347  }
348  break;
349  default :
350  std::cout << "convUtils::GetLocalDetEnum(). Cannot get old local detector enumeration for subsystem: " << det << ". Please define whether it is a TPC, FGD, ECAL, P0D or SMRD track." << std::endl;
351  return -1;
352  }
353  std::cout << "convUtils::GetLocalDetEnum(). Cannot get old local detector enumeration for subsystem: " << det << ". Please define whether it is a TPC, FGD, ECAL, P0D or SMRD track." << std::endl;
354  return -1;
355 }
356 
357 
358 //**********************************************************************
359 void convUtils::ConvertBitFieldToTrackerDetField(unsigned long det, int& trackerDet){
360 //**********************************************************************
361  //try to avoid string comparison
362 
363  trackerDet=-1;
364 
365  if (SubDetId::GetDetectorUsed(det,SubDetId::kTPC1)) trackerDet = 1;
366  if (SubDetId::GetDetectorUsed(det,SubDetId::kTPC2)) trackerDet = trackerDet*10+2;
367  if (SubDetId::GetDetectorUsed(det,SubDetId::kTPC3)) trackerDet = trackerDet*10+3;
368  if (SubDetId::GetDetectorUsed(det,SubDetId::kFGD1)) trackerDet = trackerDet*10+4;
369  if (SubDetId::GetDetectorUsed(det,SubDetId::kFGD2)) trackerDet = trackerDet*10+5;
370 }
371 
372 //****************************************************************************
373 void convUtils::ConvertBitFieldToTrueParticleDetEnum(unsigned long det, int &trueDet){
374 //****************************************************************************
375 
376  //Note! special treatment since oaAnalysis true info does not allow to split between
377  //TECal/PECal/SMRD sub-detectors and hence now sub-detector bits are set
378 
379  trueDet=-1;
380 
381  if ( SubDetId::GetDetectorUsed(det, SubDetId::kFGD1)) trueDet = 0;
382  else if ( SubDetId::GetDetectorUsed(det, SubDetId::kFGD2)) trueDet = 1;
383  else if ( SubDetId::GetDetectorUsed(det, SubDetId::kP0D)) trueDet = 2;
384  else if ( SubDetId::GetDetectorUsed(det, SubDetId::kDSECAL)) trueDet = 3;
385  else if ((SubDetId::GetDetectorUsed(det, SubDetId::kTECAL)) ||
386  ( det & (1<<SubDetId::kTECAL))) trueDet = 4;
387  else if ((SubDetId::GetDetectorUsed(det, SubDetId::kPECAL)) ||
388  ( det & (1<<SubDetId::kPECAL))) trueDet = 5;
389  else if ( SubDetId::GetDetectorUsed(det, SubDetId::kTPC1)) trueDet = 6;
390  else if ( SubDetId::GetDetectorUsed(det, SubDetId::kTPC2)) trueDet = 7;
391  else if ( SubDetId::GetDetectorUsed(det, SubDetId::kTPC3)) trueDet = 8;
392  else if ((SubDetId::GetDetectorUsed(det, SubDetId::kSMRD)) ||
393  ( det & (1<<SubDetId::kSMRD))) trueDet = 9;
394 }
395 
void SetDetectorUsedField(unsigned long &det, unsigned int i)
Set the bit field for a used detector given oaAnalysis detector enumeration (TGlobalPID::DetectorUsed...
static bool IsFGDDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a FGD or not.
Definition: SubDetId.cxx:126
void ConvertLocalDetEnumToBitField(unsigned long &det, int index, SubDetId::SubDetEnum subdet_enum)
Convert the detector used array to the bit field used by psyche given a SubDetEnum.
void ConvertTPCDetEnumToBitField(unsigned long &det, int tpc)
Convert the detector used array to the bit field used by psyche for TPC track segments.
static bool IsP0DDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a SMRDP0D or not.
Definition: SubDetId.cxx:146
static void SetDetectorSystemFields(unsigned long &BitField)
Definition: SubDetId.cxx:81
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
static void SetDetectorUsed(unsigned long &BitField, SubDetId::SubDetEnum det)
Method to set a certain subdetector or subdetector system to used used.
Definition: SubDetId.cxx:36
void ConvertECALDetEnumToBitField(unsigned long &det, int ecal)
Convert the detector used array to the bit field used by psyche for ECAL track segments.
static bool IsTPCDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a TPC or not.
Definition: SubDetId.cxx:122
static bool IsECALDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a ECAL or not.
Definition: SubDetId.cxx:130
SubDetEnum
Enumeration of all detector systems and subdetectors.
Definition: SubDetId.hxx:25
void ConvertSMRDDetEnumToBitField(unsigned long &det, int smrd)
Convert the detector used array to the bit field used by psyche for SMRD track segments.
void ConvertFGDDetEnumToBitField(unsigned long &det, int fgd)
Convert the detector used array to the bit field used by psyche for FGD track segments.
int GetLocalDetEnum(SubDetId::SubDetEnum det, SubDetId::SubDetEnum idet)
Get old local detector enumeration to find array index of Flat tree.
void ConvertTrueParticleDetEnumToBitField(unsigned long &det, int DetUsed)
Convert the detector used array to the bit field used by psyche for truth trueParts.
void ConvertTrackerDetFieldToBitField(unsigned long &det, int Detectors)
Convert tracker detector field to bit field.
void ConvertTrackerDetEnumToBitField(unsigned long &det, int DetUsed)
Convert the detector used array to the bit field used by psyche for tracker tracks.
void ConvertTrackDetEnumToBitField(unsigned long &det, int DetUsed[])
Convert the detector used array to the bit field used by psyche for ana tracks.
void ConvertBitFieldToTrueParticleDetEnum(unsigned long det, int &trueDet)
Get highland style numbering for true objects.
static bool IsSMRDDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a SMRD or not.
Definition: SubDetId.cxx:142
void ConvertBitFieldToTrackerDetField(unsigned long det, int &trackerDet)
Get highland style tracker combination numbering.