1 #include "SubDetId.hxx" 5 const unsigned long SubDetId::DetMask[] = {
13 1<<SubDetId::kTopTECAL,
14 1<<SubDetId::kBottomTECAL,
15 1<<SubDetId::kLeftTECAL,
16 1<<SubDetId::kRightTECAL,
17 1<<SubDetId::kTopPECAL,
18 1<<SubDetId::kBottomPECAL,
19 1<<SubDetId::kLeftPECAL,
20 1<<SubDetId::kRightPECAL,
21 1<<SubDetId::kTopSMRD,
22 1<<SubDetId::kBottomSMRD,
23 1<<SubDetId::kLeftSMRD,
24 1<<SubDetId::kRightSMRD,
25 1<<SubDetId::kInvalidSubdetector,
26 1<<SubDetId::kTPC | SubDetId::MakeMask(SubDetId::kTPC3, SubDetId::kTPC1),
27 1<<SubDetId::kFGD | SubDetId::MakeMask(SubDetId::kFGD2, SubDetId::kFGD1),
28 1<<SubDetId::kECAL | SubDetId::MakeMask(SubDetId::kRightPECAL, SubDetId::kDSECAL),
29 1<<SubDetId::kTECAL | SubDetId::MakeMask(SubDetId::kRightTECAL, SubDetId::kTopTECAL),
30 1<<SubDetId::kPECAL | SubDetId::MakeMask(SubDetId::kRightPECAL, SubDetId::kTopPECAL),
31 1<<SubDetId::kSMRD | SubDetId::MakeMask(SubDetId::kRightSMRD, SubDetId::kTopSMRD),
32 1<<SubDetId::kTRACKER | SubDetId::MakeMask(SubDetId::kTPC3, SubDetId::kFGD1),
37 BitField = BitField | 1<<det;
41 return BitField & DetMask[det];
45 return BitField & DetMask[det];
49 bool SubDetId::GetDetectorArrayUsed(
unsigned long BitField,
SubDetId::SubDetEnum dets[],
int nDet){
53 for(
int i = 0; i < nDet; ++i){
54 if(!(BitField & DetMask[dets[i]])){
61 bool SubDetId::GetDetectorArrayUsed(
unsigned long BitField, SubDetId_h dets[],
int nDet){
65 for(
int i = 0; i < nDet; ++i){
66 if(!(BitField & DetMask[dets[i]])){
75 if (BitField & DetMask[SubDetId::kTPC2])
return 2;
76 else if (BitField & DetMask[SubDetId::kTPC3])
return 3;
77 else if (BitField & DetMask[SubDetId::kTPC1])
return 1;
82 for(
int i = SubDetId::kFGD1; i < SubDetId::kInvalidSubdetector; ++i){
85 if (i == SubDetId::kFGD1 || i == SubDetId::kFGD2)
88 else if (i == SubDetId::kTPC1 || i == SubDetId::kTPC2 || i == SubDetId::kTPC3)
91 else if (i == SubDetId::kP0D)
continue;
93 else if (i >= SubDetId::kDSECAL && i <= SubDetId::kRightPECAL){
96 if (i >= SubDetId::kTopTECAL && i <= SubDetId::kRightTECAL)
SetDetectorUsed(BitField, SubDetId::kTECAL);
98 else if(i >= SubDetId::kTopPECAL && i <= SubDetId::kRightPECAL)
SetDetectorUsed(BitField, SubDetId::kPECAL);
101 else if (i >= SubDetId::kTopSMRD && i <= SubDetId::kRightSMRD)
SetDetectorUsed(BitField, SubDetId::kSMRD);
105 int SubDetId::NumberOfSetBits(
unsigned long v){
114 return NumberOfSetBits(BitField & DetMask[det]);
118 BitField = BitField & MakeMask(SubDetId::kRightSMRD, SubDetId::kFGD1);
119 return !(BitField & ~DetMask[det]);
123 return (det <= SubDetId::kTPC3 && det >= SubDetId::kTPC1);
127 return (det <= SubDetId::kFGD2 && det >= SubDetId::kFGD1);
131 return (det <= SubDetId::kRightPECAL && det >= SubDetId::kDSECAL);
135 return (det <= SubDetId::kRightTECAL && det >= SubDetId::kTopTECAL);
139 return (det <= SubDetId::kRightPECAL && det >= SubDetId::kTopPECAL);
143 return (det <= SubDetId::kRightSMRD && det >= SubDetId::kTopSMRD);
151 if(BitField & DetMask[SubDetId::kTECAL])
return true;
156 if(BitField & DetMask[SubDetId::kPECAL])
return true;
161 if(BitField & DetMask[SubDetId::kSMRD])
return true;
167 BitField = BitField & MakeMask(SubDetId::kRightSMRD, SubDetId::kFGD1);
168 int nBits = NumberOfSetBits(BitField);
170 std::cout <<
" Error: Track contains multiple subdetectors, cannot find a single subdetector enum to return." << std::endl;
171 return SubDetId::kInvalid;
173 BitField = BitField | (BitField-1);
174 nBits = NumberOfSetBits(BitField);
static bool TrackUsesOnlyDet(unsigned long BitFIeld, SubDetId::SubDetEnum det)
Check whether a track only uses a specified subdetector or detector system.
static bool IsFGDDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a FGD or not.
static bool HasPECALDetector(unsigned long BitField)
Check if a detector bit field has a P0D ECAL or not.
static int GetNSegmentsInDet(unsigned long BitFIeld, SubDetId::SubDetEnum det)
static bool IsP0DDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a SMRDP0D or not.
static void SetDetectorSystemFields(unsigned long &BitField)
static bool GetDetectorUsed(unsigned long BitField, SubDetId::SubDetEnum det)
Method to see if a certain subdetector or subdetector system is used.
static bool IsPECALDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a P0D ECAL or not.
static bool HasSMRDDetector(unsigned long BitField)
Check if a detector bit field has a SMRD or not.
static void SetDetectorUsed(unsigned long &BitField, SubDetId::SubDetEnum det)
Method to set a certain subdetector or subdetector system to used used.
static bool IsTPCDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a TPC or not.
static bool IsECALDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a ECAL or not.
SubDetEnum
Enumeration of all detector systems and subdetectors.
static SubDetId::SubDetEnum GetSubdetectorEnum(unsigned long BitField)
Get the single subdetector that this track is from.
static bool IsTECALDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a Tracker ECAL or not.
static bool HasTECALDetector(unsigned long BitField)
Check if a detector bit field has a Tracker ECAL or not.
static int GetTPC(unsigned long BitField)
static bool IsSMRDDetector(SubDetId::SubDetEnum det)
Check if a detector enumeration refers to a SMRD or not.