CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
HcalCableMapper.cc
Go to the documentation of this file.
6 #include <cstdio>
7 #include <iostream>
8 
9 using namespace std;
10 
11 /*version 3.1 02-13-07
12 
13 author Kevin Klapoetke - Minnesota*/
14 
16 public:
17  explicit HcalCableMapper(edm::ParameterSet const &conf);
18  ~HcalCableMapper() override = default;
19  void analyze(edm::Event const &e, edm::EventSetup const &c) override;
20  void endJob() override;
21  // std::string sourceDigi_;
22 private:
23  typedef std::vector<HcalQIESample> SampleSet;
24 
25  typedef std::map<HcalDetId, SampleSet> PathSet;
26  typedef std::map<HcalDetId, HcalElectronicsId> IdMap;
27 
28  void process(const PathSet &ps, const IdMap &im);
29 
30  std::map<HcalDetId, std::vector<SampleSet>> fullHistory_;
35 
36  template <class DigiCollection>
37  void record(const DigiCollection &digis) {
38  for (typename DigiCollection::const_iterator digi = digis.begin(); digi != digis.end(); digi++) {
39  SampleSet q;
40  for (int i = 0; i < digi->size(); i++)
41  q.push_back(digi->sample(i));
42 
43  if (fullHistory_.find(digi->id()) == fullHistory_.end())
44  fullHistory_.insert(std::pair<HcalDetId, std::vector<SampleSet>>(digi->id(), std::vector<SampleSet>()));
45  if (IdSet.find(digi->id()) == IdSet.end())
46  IdSet.insert(std::pair<HcalDetId, HcalElectronicsId>(digi->id(), HcalElectronicsId()));
47  fullHistory_[digi->id()].push_back(q);
48  IdSet[digi->id()] = digi->elecId();
49  }
50  }
51 };
52 
54  tok_hbhe_ = consumes<HBHEDigiCollection>(conf.getParameter<edm::InputTag>("hbheLabel"));
55  tok_ho_ = consumes<HODigiCollection>(conf.getParameter<edm::InputTag>("hoLabel"));
56  tok_hf_ = consumes<HFDigiCollection>(conf.getParameter<edm::InputTag>("hfLabel"));
57 }
58 
59 constexpr char const *det_names[] = {"Zero", "HcalBarrel", "HcalEndcap", "HcalForward", "HcalOuter"};
60 
61 void HcalCableMapper::process(const PathSet &ps, const IdMap &im) {
62  PathSet::const_iterator iii;
63  IdMap::const_iterator ij;
64 
65  for (iii = ps.begin(); iii != ps.end(); iii++) {
66  SampleSet ss = iii->second;
67  const HcalDetId dd = iii->first;
68 
69  ij = im.find(dd);
70  HcalElectronicsId eid = ij->second;
71 
72  int header = ((ss[0].adc()) & 0x7F);
73  int ieta = ((ss[1].adc()) & 0x3F);
74  int z_ieta = (((ss[1].adc()) >> 6) & 0x1);
75  int iphi = ((ss[2].adc()) & 0x7F);
76  int depth = ((ss[3].adc()) & 0x7);
77  int det = (((ss[3].adc()) >> 3) & 0xF);
78  int spigot = ((ss[4].adc()) & 0xF);
79  int fiber = (((ss[4].adc()) >> 4) & 0x7);
80  int crate = ((ss[5].adc()) & 0x1F);
81  int fiber_chan = (((ss[5].adc()) >> 5) & 0x3);
82  int G_Dcc = ((ss[6].adc()) & 0x3F);
83  int H_slot = ((ss[7].adc()) & 0x1F);
84  int TB = (((ss[7].adc()) >> 5) & 0x1);
85  int RBX_7 = (((ss[7].adc()) >> 6) & 0x1);
86  int RBX = ((ss[8].adc()) & 0x7F);
87  int RM = ((ss[9].adc()) & 0x3);
88  int RM_card = (((ss[9].adc()) >> 2) & 0x3);
89  int RM_chan = (((ss[9].adc()) >> 4) & 0x7);
90  string eta_sign;
91  std::string det_name;
92  if (det > 4 || det < 0) {
93  char c[20];
94  snprintf(c, 20, "Det=%d", det);
95  det_name = c;
96  } else
97  det_name = det_names[det];
98 
99  if (z_ieta == 1) {
100  eta_sign = "+";
101  } else {
102  eta_sign = "-";
103  }
104  string is_header;
105  if (header == 0x75) {
106  // NO SHIFT
107  if ((spigot == eid.spigot()) && (fiber + 1 == eid.fiberIndex()) && (fiber_chan == eid.fiberChanId()) &&
108  (H_slot == eid.htrSlot()) && (G_Dcc == eid.dccid()) && (crate == eid.readoutVMECrateId()) &&
109  (iphi == dd.iphi()) && (depth == dd.depth()) && (ieta == dd.ietaAbs()) && (TB == eid.htrTopBottom()) &&
110  (det == dd.subdet())) { //&&(z_ieta==dd.zside())
111  std::cout << "Pathway match" << std::endl;
112  } else {
113  is_header = " Header found";
114 
115  std::cout << " Digi ID: " << dd << is_header << " ieta: " << eta_sign << ieta << " iphi: " << iphi
116  << " Depth: " << depth << " Detector: " << det_name << " Spigot: " << spigot << "/" << eid.spigot()
117  << " Fiber: " << fiber + 1 << "/" << eid.fiberIndex() << " Fiber Channel: " << fiber_chan << "/"
118  << eid.fiberChanId() << " Crate: " << crate << "/" << eid.readoutVMECrateId()
119  << " Global Dcc: " << G_Dcc << "/" << eid.dccid() << " HTR Slot: " << H_slot << "/ " << eid.htrSlot()
120  << " Top/Bottom: " << TB << "/" << eid.htrTopBottom() << " RBX: " << (RBX_7 * 128 + RBX)
121  << " RM: " << RM + 1 << " RM Card: " << RM_card + 1 << " RM Channel: " << RM_chan << std::endl;
122  }
123  } else if (ieta + 64 == 0x75) {
124  ieta = ((ss[2].adc()) & 0x3F);
125  iphi = ((ss[3].adc()) & 0x7F);
126  depth = ((ss[4].adc()) & 0x7);
127  det = (((ss[4].adc()) >> 3) & 0xF);
128  spigot = ((ss[5].adc()) & 0xF);
129  fiber = (((ss[5].adc()) >> 4) & 0x7);
130  crate = ((ss[6].adc()) & 0x1F);
131  fiber_chan = (((ss[6].adc()) >> 5) & 0x3);
132  G_Dcc = ((ss[7].adc()) & 0x3F);
133  H_slot = ((ss[8].adc()) & 0x1F);
134  TB = (((ss[8].adc()) >> 5) & 0x1);
135  RBX_7 = (((ss[8].adc()) >> 6) & 0x1);
136  RBX = ((ss[9].adc()) & 0x7F);
137 
138  // SHIFT
139  if ((spigot == eid.spigot()) && (fiber + 1 == eid.fiberIndex()) && (fiber_chan == eid.fiberChanId()) &&
140  (H_slot == eid.htrSlot()) && (G_Dcc == eid.dccid()) && (TB == eid.htrTopBottom()) &&
141  (crate == eid.readoutVMECrateId()) && (iphi == dd.iphi()) && (depth == dd.depth()) && (det == dd.subdet()) &&
142  (ieta == dd.ietaAbs())) {
143  std::cout << "Pathway match (SHIFT)" << std::endl;
144  } else {
145  is_header = " DATA SHIFT";
146 
147  std::cout << " Digi ID: " << dd << is_header << " ieta: " << eta_sign << ieta << " iphi: " << iphi
148  << " Depth: " << depth << " Detector: " << det_name << " Spigot: " << spigot << "/" << eid.spigot()
149  << " Fiber: " << fiber + 1 << "/" << eid.fiberIndex() << " Fiber Channel: " << fiber_chan << "/"
150  << eid.fiberChanId() << " Crate: " << crate << "/" << eid.readoutVMECrateId()
151  << " Global Dcc: " << G_Dcc << "/" << eid.dccid() << " HTR Slot: " << H_slot << "/ " << eid.htrSlot()
152  << " Top/Bottom: " << TB << "/" << eid.htrTopBottom() << " RBX: " << (RBX_7 * 128 + RBX) << std::endl;
153  }
154  } else {
155  std::cout << " Digi ID: " << dd << " +NO HEADER+ "
156  << " RBX: " << (RBX_7 * 128 + RBX) << std::endl;
157  }
158  }
159 }
160 
163  e.getByToken(tok_hbhe_, hbhe);
164 
166  e.getByToken(tok_hf_, hf);
168  e.getByToken(tok_ho_, ho);
169 
170  record(*hbhe);
171  record(*hf);
172  record(*ho);
173 }
174 
176  std::vector<SampleSet>::iterator j;
177  int c[128];
178  int k, ii, kk;
179  int c_max = 0;
180 
181  std::map<HcalDetId, std::vector<SampleSet>>::iterator i;
182 
183  PathSet consensus;
184 
185  for (i = fullHistory_.begin(); i != fullHistory_.end(); i++) {
186  // i.first --> id
187  // i.second --> vector<SampleSet>
188  SampleSet s;
189  for (k = 0; k < 10; k++) {
190  for (ii = 0; ii < 128; ii++)
191  c[ii] = 0;
192 
193  for (j = i->second.begin(); j != i->second.end(); j++) { // word number
194  if (int(j->size()) > k)
195  c[(*j)[k].adc()]++;
196 
197  } // j loop
198  // sort c-array
199  for (kk = 0; kk < 128; kk++) {
200  if (c[kk] > c[c_max]) {
201  c_max = kk;
202  }
203  }
204 
205  s.push_back(((c_max & 0x7F)));
206 
207  c_max = 0;
208  } // k-loop
209  consensus[i->first] = s;
210 
211  } // i loop
212 
213  process(consensus, IdSet);
214 
215 } // end of endjob
216 
219 
const edm::EventSetup & c
constexpr int ietaAbs() const
get the absolute value of the cell ieta
Definition: HcalDetId.h:148
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::EDGetTokenT< HODigiCollection > tok_ho_
edm::EDGetTokenT< HBHEDigiCollection > tok_hbhe_
constexpr int dccid() const
get the (Hcal local) DCC id for VME, crate number for uTCA
int ii
Definition: cuy.py:589
constexpr char const * det_names[]
void record(const DigiCollection &digis)
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
constexpr int htrTopBottom() const
get the htr top/bottom (1=top/0=bottom), valid for VME
std::vector< HcalQIESample > SampleSet
edm::EDGetTokenT< HFDigiCollection > tok_hf_
constexpr int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
std::map< HcalDetId, std::vector< SampleSet > > fullHistory_
constexpr int htrSlot() const
get the htr slot
void process(const PathSet &ps, const IdMap &im)
constexpr int readoutVMECrateId() const
get the readout VME crate number
constexpr int spigot() const
get the spigot (input number on DCC, AMC card number for uTCA)
std::map< HcalDetId, HcalElectronicsId > IdMap
HcalCableMapper(edm::ParameterSet const &conf)
constexpr int fiberIndex() const
get the fiber index. For VME 1-8 (which of eight fibers carried by a spigot), for uTCA fibers are zer...
std::map< HcalDetId, SampleSet > PathSet
void endJob() override
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
tuple cout
Definition: gather_cfg.py:144
constexpr int fiberChanId() const
get the fiber channel id (which of channels on a fiber)
constexpr int depth() const
get the tower depth
Definition: HcalDetId.h:164
tuple process
Definition: LaserDQM_cfg.py:3
Readout chain identification for Hcal.
void analyze(edm::Event const &e, edm::EventSetup const &c) override