CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalText2DetIdConverter.cc
Go to the documentation of this file.
1 
5 #include <stdlib.h>
6 #include <iostream>
7 #include <iomanip>
8 #include <cstdio>
9 
11 
17 
19 
20 namespace {
21  std::string strip (const std::string& fString) {
22  if (fString.empty ()) return fString;
23  int startIndex = fString.find_first_not_of(" \t\n");
24  int endIndex = fString.find_last_not_of(" \t\n");
25  return fString.substr(startIndex, (endIndex-startIndex)+1);
26  }
27 
28  int calibChannel (const std::string& fName) {
29  return
30  fName == "Mixer-High" ? 1 :
31  fName == "Mixer-Low" ? 2 :
32  fName == "Megatile" ? 3 :
33  fName == "Mixer-Scintillator" ? 4 :
34  fName == "RadDam1" ? 5 :
35  fName == "RadDam2" ? 6 :
36  fName == "RadDam3" ? 7 :
37  atoi(fName.c_str());
38  // 0;
39  }
40 }
41 
42 HcalText2DetIdConverter::HcalText2DetIdConverter (const std::string& fFlavor, const std::string& fField1,
43  const std::string& fField2, const std::string& fField3) {
44  if (!init (fFlavor, fField1, fField2, fField3)) {
45  std::cerr << "HcalText2DetIdConverter::HcalText2DetIdConverter-> Can not initiate detId from items: "
46  << fFlavor << '/' << fField1 << '/' << fField2 << '/' << fField3 << std::endl;
47  throw cms::Exception("HcalGenDetId initialization error")
48  << " Can not initiate detId from items: "
49  << fFlavor << '/' << fField1 << '/' << fField2 << '/' << fField3 << std::endl;
50  }
51 }
52 
54  init (fId);
55 }
56 
58  return HcalGenericDetId (mId).isHcalDetId ();
59 }
60 
63 }
64 
67 }
68 
71 }
72 
74  bool result = true;
75  flavorName = "UNKNOWN";
76  mId = fId;
77  HcalGenericDetId genId (mId);
78  if (fId == HcalDetId::Undefined) {
79  flavorName = "NA";
80  }
81  else if (genId.isHcalDetId ()) {
82  HcalDetId hcalId (mId);
86  genId.genericSubdet () == HcalGenericDetId::HcalGenForward ? "HF" : "H_UNKNOWN";
87  setField (1, hcalId.ieta());
88  setField (2, hcalId.iphi());
89  setField (3, hcalId.depth());
90  }
91  else if (genId.isHcalTrigTowerDetId ()) {
92  HcalTrigTowerDetId triggerId (mId);
93  if (triggerId == HcalTrigTowerDetId::Undefined) {
94  flavorName = "NT";
95  }
96  else {
97  flavorName = "HT";
98  setField (1, triggerId.ieta());
99  setField (2, triggerId.iphi());
100  setField (3, 1);
101  }
102  }
103  else if (genId.isHcalZDCDetId ()) {
104  HcalZDCDetId zdcId (mId);
105  switch (zdcId.section()) {
106  case HcalZDCDetId::EM: flavorName = "ZDC_EM"; break;
107  case HcalZDCDetId::HAD: flavorName = "ZDC_HAD"; break;
108  case HcalZDCDetId::LUM: flavorName = "ZDC_LUM"; break;
109  default: result = false;
110  }
111  setField (1, zdcId.zside());
112  setField (2, zdcId.channel());
113  setField (3, -99);
114  }
115  else if (genId.isHcalCalibDetId ()) {
116  HcalCalibDetId calibId (mId);
118  switch (calibId.hcalSubdet()) {
119  case HcalBarrel: flavorName = "CALIB_HB"; break;
120  case HcalEndcap: flavorName = "CALIB_HE"; break;
121  case HcalOuter: flavorName = "CALIB_HO"; break;
122  case HcalForward: flavorName = "CALIB_HF"; break;
123  default: result = false;
124  }
125  setField (1, calibId.ieta());
126  setField (2, calibId.iphi());
127  setField (3, calibId.cboxChannel() );
128  } else if (calibId.calibFlavor()==HcalCalibDetId::HOCrosstalk) {
129  flavorName="HOX";
130  setField (1, calibId.ieta());
131  setField (2, calibId.iphi());
132  setField (3, -999);
133  }
134  }
135  else {
136  flavorName = "UNKNOWN_FLAVOR";
137  std::cerr << "HcalText2DetIdConverter::init-> Unknown detId: " << std::hex << std::showbase << mId.rawId() << std::endl;
138  result = false;
139  }
140  return result;
141 }
142 
143 
144 bool HcalText2DetIdConverter::init (const std::string& fFlavor, const std::string& fField1,
145  const std::string& fField2, const std::string& fField3) {
146  bool result = true;
147  flavorName = strip (fFlavor);
148  field1 = strip (fField1);
149  field2 = strip (fField2);
150  field3 = strip (fField3);
151  if (flavorName == "HB" ||
152  flavorName == "HE" ||
153  flavorName == "HF" ||
154  flavorName == "HO") {
155  HcalSubdetector sub = flavorName == "HB" ? HcalBarrel :
156  flavorName == "HE" ? HcalEndcap :
157  flavorName == "HO" ? HcalOuter :
158  HcalForward;
159  mId = HcalDetId (sub, getField (1), getField (2), getField (3));
160  }
161  else if (flavorName == "HT") {
163  }
164  else if (flavorName.find ("ZDC_") == 0) {
165  HcalZDCDetId::Section section = flavorName == "ZDC_EM" ? HcalZDCDetId::EM :
166  flavorName == "ZDC_HAD" ? HcalZDCDetId::HAD :
168  mId = HcalZDCDetId (section, getField (1)>0, getField (2));
169  }
170  else if (flavorName.find ("CALIB_") == 0) {
172  if (flavorName.find("HB")!=std::string::npos) sd=HcalBarrel;
173  else if (flavorName.find("HE")!=std::string::npos) sd=HcalEndcap;
174  else if (flavorName.find("HO")!=std::string::npos) sd=HcalOuter;
175  else if (flavorName.find("HF")!=std::string::npos) sd=HcalForward;
176 
177  int ieta=getField(1);
178  int iphi=getField(2);
179  int channel = calibChannel (field3);
180  mId = HcalCalibDetId (sd, ieta,iphi,channel);
181  }
182  else if (flavorName=="HOX") {
183  int ieta=getField(1);
184  int iphi=getField(2);
185  mId = HcalCalibDetId (ieta,iphi);
186  }
187  else if (flavorName == "NA") {
189  }
190  else {
191  std::cerr << "HcalText2DetIdConverter::init-> Unknown HcalDetId flavor: " << flavorName << std::endl;
192  result = false;
193  }
194  return result;
195 }
196 
197 
199  char* endptr;
200  const char* nptr = i == 1 ? field1.c_str() :
201  i == 2 ? field2.c_str() : field3.c_str();
202  long result = strtol (nptr, &endptr, 0);
203  if (*nptr != '\0' && *endptr == '\0') {
204  return result;
205  }
206  if (i == 2 && isHcalCalibDetId ()) {
207  int result = calibChannel (field2);
208  if (i) return result;
209  }
210  if (*nptr != '\0') {
211  std::cerr << "HcalText2DetIdConverter::getField-> Can not convert string "<< nptr << " to int. Bad symbol: " << *endptr << std::endl;
212  }
213  return 0;
214  }
215 
216 void HcalText2DetIdConverter::setField (int i, int fValue) {
217  char buffer [128];
218  sprintf (buffer, "%d", fValue);
219  if (i == 1) field1 = buffer;
220  else if (i == 2) field2 = buffer;
221  else field3 = buffer;
222 }
223 
224 std::string HcalText2DetIdConverter::toString () const {
225  return flavorName + " " + field1 + " " + field2 + " " + field3;
226 }
static const HcalDetId Undefined
Definition: HcalDetId.h:66
int i
Definition: DBlmapReader.cc:9
void strip(std::string &input, const std::string &blanks=" \n\t")
Definition: stringTools.cc:16
bool isHcalZDCDetId() const
CalibDetType calibFlavor() const
get the flavor of this calibration detid
int zside() const
get the z-side of the cell (1/-1)
Definition: HcalZDCDetId.h:36
int ieta() const
get the tower ieta
int ieta() const
get the rbx name (if relevant)
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
int depth() const
get the tower depth
Definition: HcalDetId.h:42
bool isHcalTrigTowerDetId() const
void setField(int i, int fValue)
tuple result
Definition: query.py:137
int ieta() const
get the cell ieta
Definition: HcalDetId.h:38
HcalSubdetector
Definition: HcalAssistant.h:32
HcalText2DetIdConverter(const std::string &fFlavor="NA", const std::string &fField1="0", const std::string &fField2="0", const std::string &fField3="0")
Section section() const
get the section
Definition: HcalZDCDetId.h:38
bool isHcalDetId() const
int iphi() const
get the low-edge iphi (if relevant)
bool init(const std::string &fFlavor, const std::string &fField1, const std::string &fField2, const std::string &fField3)
int iphi() const
get the cell iphi
Definition: HcalDetId.h:40
Definition: DetId.h:20
double sd
int channel() const
get the channel
Definition: HcalZDCDetId.h:42
static const HcalTrigTowerDetId Undefined
int cboxChannel() const
get the calibration box channel (if relevant)
bool isHcalCalibDetId() const
HcalSubdetector hcalSubdet() const
get the HcalSubdetector (if relevant)
HcalGenericSubdetector genericSubdet() const
int iphi() const
get the tower iphi