PdspChannelMapService_service.cc
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////////////////////////
2 // Class: PdspChannelMapService
3 // Module type: service
4 // File: PdspChannelMapService.h
5 // Author: Jingbo Wang (jiowang@ucdavis.edu), February 2018
6 //
7 // Implementation of hardware-offline channel mapping reading from a file.
8 ///////////////////////////////////////////////////////////////////////////////////////////////////
9 
10 #include "PdspChannelMapService.h"
12 
13 // Bad channel value
14 unsigned int bad() {
16  return val;
17 }
18 
20 
27 
28  std::string channelMapFile = pset.get<std::string>("FileName");
29 
30  std::string fullname;
31  cet::search_path sp("FW_SEARCH_PATH");
32  sp.find_file(channelMapFile, fullname);
33 
34  if (fullname.empty()) {
35  std::cout << "Input file " << channelMapFile << " not found" << std::endl;
36  throw cet::exception("File not found");
37  }
38  else
39  std::cout << "PDSP Channel Map: Building RCE TPC wiremap from file " << channelMapFile << std::endl;
40 
41  std::ifstream inFile(fullname, std::ios::in);
43 
44  while (std::getline(inFile,line)) {
45  unsigned int crateNo, slotNo, fiberNo, FEMBChannel, StreamChannel, slotID, fiberID, chipNo, chipChannel, asicNo, asicChannel, planeType, offlineChannel;
46  std::stringstream linestream(line);
47  linestream >> crateNo >> slotNo >> fiberNo>> FEMBChannel >> StreamChannel >> slotID >> fiberID >> chipNo >> chipChannel >> asicNo >> asicChannel >> planeType >> offlineChannel;
48 
49  // fill lookup tables. Throw an exception if any number is out of expected bounds.
50  // checking for negative values produces compiler warnings as these are unsigned ints
51 
52  if (offlineChannel >= fNChans)
53  {
54  throw cet::exception("PdspChannelMapService") << "Ununderstood Offline Channel: " << offlineChannel << "\n";
55  }
56  if (crateNo >= fNCrates)
57  {
58  throw cet::exception("PdspChannelMapService") << "Ununderstood Crate Number: " << crateNo << "\n";
59  }
60  if (slotNo >= fNSlots)
61  {
62  throw cet::exception("PdspChannelMapService") << "Ununderstood Slot Number: " << slotNo << "\n";
63  }
64  if (fiberNo >= fNFibers)
65  {
66  throw cet::exception("PdspChannelMapService") << "Ununderstood Fiber Number: " << fiberNo << "\n";
67  }
68  if (StreamChannel >= fNFEMBChans)
69  {
70  throw cet::exception("PdspChannelMapService") << "Ununderstood FEMB (Stream) Channel Number: " << StreamChannel << "\n";
71  }
72 
73  farrayCsfcToOffline[crateNo][slotNo][fiberNo][StreamChannel] = offlineChannel;
74  fvAPAMap[offlineChannel] = crateNo;
75  fvWIBMap[offlineChannel] = slotNo;
76  fvFEMBMap[offlineChannel] = fiberNo;
77  fvFEMBChannelMap[offlineChannel] = FEMBChannel;
78  fvStreamChannelMap[offlineChannel] = StreamChannel;
79  fvSlotIdMap[offlineChannel] = slotID;
80  fvFiberIdMap[offlineChannel] = fiberID;
81  fvChipMap[offlineChannel] = chipNo;
82  fvChipChannelMap[offlineChannel] = chipChannel;
83  fvASICMap[offlineChannel] = asicNo;
84  fvASICChannelMap[offlineChannel] = asicChannel;
85  fvPlaneMap[offlineChannel] = planeType;
86 
87  }
88  inFile.close();
89 
90 
91 
92  std::string FELIXchannelMapFile = pset.get<std::string>("FELIXFileName");
93  sp.find_file(FELIXchannelMapFile, fullname);
94 
95  if (fullname.empty()) {
96  std::cout << "Input file " << FELIXchannelMapFile << " not found" << std::endl;
97  throw cet::exception("File not found");
98  }
99  else
100  std::cout << "PDSP Channel Map: Building FELIX TPC wiremap from file " << channelMapFile << std::endl;
101 
102  std::ifstream FELIXinFile(fullname, std::ios::in);
103 
104  while (std::getline(FELIXinFile,line)) {
105  unsigned int crateNo, slotNo, fiberNo, FEMBChannel, StreamChannel, slotID, fiberID, chipNo, chipChannel, asicNo, asicChannel, planeType, offlineChannel;
106  std::stringstream linestream(line);
107  linestream >> crateNo >> slotNo >> fiberNo>> FEMBChannel >> StreamChannel >> slotID >> fiberID >> chipNo >> chipChannel >> asicNo >> asicChannel >> planeType >> offlineChannel;
108 
109  // fill lookup tables. Throw an exception if any number is out of expected bounds.
110  // checking for negative values produces compiler warnings as these are unsigned ints
111 
112  if (offlineChannel >= fNChans)
113  {
114  throw cet::exception("PdspChannelMapService") << "Ununderstood Offline Channel: " << offlineChannel << "\n";
115  }
116  if (crateNo >= fNCrates)
117  {
118  throw cet::exception("PdspChannelMapService") << "Ununderstood Crate Number: " << crateNo << "\n";
119  }
120  if (slotNo >= fNSlots)
121  {
122  throw cet::exception("PdspChannelMapService") << "Ununderstood Slot Number: " << slotNo << "\n";
123  }
124  if (fiberNo >= fNFibers)
125  {
126  throw cet::exception("PdspChannelMapService") << "Ununderstood Fiber Number: " << fiberNo << "\n";
127  }
128  if (StreamChannel >= fNFEMBChans)
129  {
130  throw cet::exception("PdspChannelMapService") << "Ununderstood FEMB (Stream) Channel Number: " << StreamChannel << "\n";
131  }
132 
133  fFELIXarrayCsfcToOffline[crateNo][slotNo][fiberNo][StreamChannel] = offlineChannel;
134  fFELIXvAPAMap[offlineChannel] = crateNo;
135  fFELIXvWIBMap[offlineChannel] = slotNo;
136  fFELIXvFEMBMap[offlineChannel] = fiberNo;
137  fFELIXvFEMBChannelMap[offlineChannel] = FEMBChannel;
138  fFELIXvStreamChannelMap[offlineChannel] = StreamChannel;
139  fFELIXvSlotIdMap[offlineChannel] = slotID;
140  fFELIXvFiberIdMap[offlineChannel] = fiberID;
141  fFELIXvChipMap[offlineChannel] = chipNo;
142  fFELIXvChipChannelMap[offlineChannel] = chipChannel;
143  fFELIXvASICMap[offlineChannel] = asicNo;
144  fFELIXvASICChannelMap[offlineChannel] = asicChannel;
145  fFELIXvPlaneMap[offlineChannel] = planeType;
146 
147  }
148  inFile.close();
149 
150  // APA numbering -- hardcoded here.
151  // Installation numbering:
152  // APA5 APA6 APA4
153  // beam -->
154  // APA3 APA2 APA1
155  //
156  // The Offline numbering:
157  // APA1 APA3 APA5
158  // beam -->
159  // APA0 APA2 APA4
160  //
161  fvInstalledAPA[0] = 3;
162  fvInstalledAPA[1] = 5;
163  fvInstalledAPA[2] = 2;
164  fvInstalledAPA[3] = 6;
165  fvInstalledAPA[4] = 1;
166  fvInstalledAPA[5] = 4;
167 
168  // and the inverse map -- shifted by 1 -- the above list must start counting at 1.
169 
170  for (size_t i=0; i<6; ++i)
171  {
173  }
174 
175  std::string SSPchannelMapFile = pset.get<std::string>("SSPFileName");
176 
177  std::string SSPfullname;
178  sp.find_file(SSPchannelMapFile, SSPfullname);
179 
180  if (SSPfullname.empty()) {
181  std::cout << "Input file for SSP Channel Map " << SSPchannelMapFile << " not found in FW_SEARCH_PATH " << std::endl;
182  throw cet::exception("File not found");
183  }
184  else
185  std::cout << "PDSP Channel Map: Building SSP channel map from file " << SSPchannelMapFile << std::endl;
186 
187  std::ifstream SSPinFile(SSPfullname, std::ios::in);
188 
189  while (std::getline(SSPinFile,line)) {
190  unsigned int onlineChannel, APA, SSP, SSPGlobal, ChanWithinSSP, OpDetNo, offlineChannel;
191  std::stringstream linestream(line);
192  linestream >> onlineChannel >> APA >> SSP >> SSPGlobal >> ChanWithinSSP >> OpDetNo >> offlineChannel;
193 
194  // fill lookup tables. Throw an exception if any number is out of expected bounds.
195  // checking for negative values produces compiler warnings as these are unsigned ints
196 
197  if (onlineChannel >= fNSSPChans)
198  {
199  throw cet::exception("PdspChannelMapService") << "Ununderstood SSP Online Channel: " << onlineChannel << "\n";
200  }
201  if (offlineChannel >= fNSSPChans)
202  {
203  throw cet::exception("PdspChannelMapService") << "Ununderstood SSP Offline Channel: " << offlineChannel << "\n";
204  }
205  if (APA > fNAPAs) // APAs count from 1
206  {
207  throw cet::exception("PdspChannelMapService") << "Ununderstood APA Number in SSP map file: " << APA << "\n";
208  }
209  //if (SSP >= fNSSPsPerAPA) -- These checks don't make sense
210  // {
211  // throw cet::exception("PdspChannelMapService") << "Ununderstood SSP number within this APA: " << SSP << " " << APA << "\n";
212  // }
213  //if (SSPGlobal >= fNSSPs)
214  // {
215  // throw cet::exception("PdspChannelMapService") << "Ununderstood Global SSP number: " << SSPGlobal << "\n";
216  // }
217  if (ChanWithinSSP >= fNChansPerSSP)
218  {
219  throw cet::exception("PdspChannelMapService") << "Ununderstood Channel within SSP Number: " << ChanWithinSSP << " " << SSPGlobal << "\n";
220  }
221  if (OpDetNo >= 60)
222  {
223  throw cet::exception("PdspChannelMapService") << "Ununderstood SSP Module Number: " << OpDetNo << "\n";
224  }
225 
226  farraySSPOnlineToOffline[onlineChannel] = offlineChannel;
227  farraySSPOfflineToOnline[offlineChannel] = onlineChannel;
228  fvSSPAPAMap[offlineChannel] = APA;
229  fvSSPWithinAPAMap[offlineChannel] = SSP;
230  fvSSPGlobalMap[offlineChannel] = SSPGlobal;
231  fvSSPChanWithinSSPMap[offlineChannel] = ChanWithinSSP;
232  fvOpDetNoMap[offlineChannel] = OpDetNo;
233  }
234  SSPinFile.close();
235 }
236 
238 }
239 
240 // assumes crate goes from 1-6, in "installed crate ordering"
241 // assumes slot goes from 0-5.
242 // assumes fiber goes from 1-4.
243 // These conventions are observed in Run 2973, a cryo commissioning run.
244 
245 unsigned int dune::PdspChannelMapService::GetOfflineNumberFromDetectorElements(unsigned int crate, unsigned int slot, unsigned int fiber, unsigned int streamchannel, FelixOrRCE frswitch) {
246 
247  unsigned int offlineChannel=0;
248  unsigned int lcrate = crate;
249  unsigned int lslot = slot;
250  unsigned int lfiber = fiber;
251 
252  if (crate > fNCrates || crate == 0)
253  {
255  {
256  mf::LogWarning("PdspChannelMapService: Bad Crate Number, expecting a number between 1 and 6. Falling back to 1. Ununderstood crate number=") << crate;
257  }
259  lcrate = 1;
260  }
261 
262  if (slot >= fNSlots)
263  {
265  {
266  mf::LogWarning("PdspChannelMapService: Bad slot number, using slot number zero as a fallback. Ununderstood slot number: ") << slot;
267  }
269  lslot = 0;
270  }
271 
272  if (fiber > fNFibers || fiber == 0)
273  {
275  {
276  mf::LogWarning("PdspChannelMapService: Bad fiber number, falling back to 1. Ununderstood fiber number: ") << fiber;
277  }
279  lfiber = 1;
280  }
281 
282  if (streamchannel >= fNFEMBChans)
283  {
284  throw cet::exception("PdspChannelMapService") << "Ununderstood Stream (FEMB) chan: "
285  << crate << " " << slot << " " << fiber << " " << streamchannel << "\n";
286  }
287 
288  if (frswitch == kRCE)
289  {
290  offlineChannel = farrayCsfcToOffline[fvTPCSet_VsInstalledAPA[lcrate-1]][lslot][lfiber-1][streamchannel];
291  }
292  else
293  {
294  offlineChannel = fFELIXarrayCsfcToOffline[fvTPCSet_VsInstalledAPA[lcrate-1]][lslot][lfiber-1][streamchannel];
295  }
296 
297  return offlineChannel;
298 }
299 
300 // does not depend on FELIX or RCE -- offline channels should always map to the same APA/crate regardless of RCE or FELIX
301 
302 unsigned int dune::PdspChannelMapService::APAFromOfflineChannel(unsigned int offlineChannel) const {
303  check_offline_channel(offlineChannel);
304  return fvAPAMap[offlineChannel];
305  // return fFELIXvAPAMap[offlineChannel]; // -- FELIX one -- should be the same
306 }
307 
308 unsigned int dune::PdspChannelMapService::InstalledAPAFromOfflineChannel(unsigned int offlineChannel) const {
309  check_offline_channel(offlineChannel);
310  unsigned int offlineAPA = fvAPAMap[offlineChannel];
311  if (offlineAPA > 5)
312  {
313  throw cet::exception("PdspChannelMapService") << "Offline APA Number out of range: " << offlineAPA << "\n";
314  }
315  return fvInstalledAPA[fvAPAMap[offlineChannel]];
316 }
317 
318 // does not depend on FELIX or RCE
319 
320 unsigned int dune::PdspChannelMapService::WIBFromOfflineChannel(unsigned int offlineChannel) const {
321  check_offline_channel(offlineChannel);
322  return fvWIBMap[offlineChannel];
323  // return fFELIXvWIBMap[offlineChannel]; // -- FELIX one -- should be the same
324 }
325 
326 // does not depend on FELIX or RCE
327 
328 unsigned int dune::PdspChannelMapService::FEMBFromOfflineChannel(unsigned int offlineChannel) const {
329  check_offline_channel(offlineChannel);
330  return fvFEMBMap[offlineChannel]+1;
331  //return fFELIXvFEMBMap[offlineChannel];
332 }
333 
334 // does not depend on FELIX or RCE
335 
336 unsigned int dune::PdspChannelMapService::FEMBChannelFromOfflineChannel(unsigned int offlineChannel) const {
337  check_offline_channel(offlineChannel);
338  return fvFEMBChannelMap[offlineChannel];
339  // return fFELIXvFEMBChannelMap[offlineChannel]; // -- FELIX one -- should be the same
340 }
341 
342 // this one does depend on FELIX or RCE
343 
344 unsigned int dune::PdspChannelMapService::StreamChannelFromOfflineChannel(unsigned int offlineChannel, FelixOrRCE frswitch) const {
345  check_offline_channel(offlineChannel);
346  if (frswitch == kRCE)
347  {
348  return fvStreamChannelMap[offlineChannel];
349  }
350  else
351  {
352  return fFELIXvStreamChannelMap[offlineChannel];
353  }
354 }
355 
356 // does not depend on FELIX or RCE
357 
358 unsigned int dune::PdspChannelMapService::SlotIdFromOfflineChannel(unsigned int offlineChannel) const {
359  check_offline_channel(offlineChannel);
360  return fvSlotIdMap[offlineChannel];
361  // return fFELIXvSlotIdMap[offlineChannel]; // -- FELIX one -- should be the same
362 }
363 
364 // may potentially depend on FELIX or RCE, but if fibers are switched between the WIB and the FELIX or RCE,
365 // we can fix this in the channel map but report with this method the fiber coming out of the WIB, not the
366 // one going in to the FELIX or RCE
367 
368 unsigned int dune::PdspChannelMapService::FiberIdFromOfflineChannel(unsigned int offlineChannel) const {
369  check_offline_channel(offlineChannel);
370  return fvFiberIdMap[offlineChannel];
371 }
372 
373 // does not depend on FELIX or RCE
374 
375 unsigned int dune::PdspChannelMapService::ChipFromOfflineChannel(unsigned int offlineChannel) const {
376  check_offline_channel(offlineChannel);
377  return fvChipMap[offlineChannel];
378 }
379 
380 unsigned int dune::PdspChannelMapService::AsicFromOfflineChannel(unsigned int offlineChannel) const {
381  check_offline_channel(offlineChannel);
382  return fvChipMap[offlineChannel];
383 }
384 
385 unsigned int dune::PdspChannelMapService::ChipChannelFromOfflineChannel(unsigned int offlineChannel) const {
386  check_offline_channel(offlineChannel);
387  return fvChipChannelMap[offlineChannel];
388 }
389 
390 // from David Adams -- use the chip channel instead of the asic channel
391 
392 unsigned int dune::PdspChannelMapService::AsicChannelFromOfflineChannel(unsigned int offlineChannel) const {
393  check_offline_channel(offlineChannel);
394  return fvChipChannelMap[offlineChannel];
395 }
396 
397 // really shouldn't be using this as it doesn't mean asic
398 
399 unsigned int dune::PdspChannelMapService::ASICFromOfflineChannel(unsigned int offlineChannel) {
401  {
402  mf::LogWarning("PdspChannelMapService: Deprecated call to ASICFromOfflineChannel. Use AsicLinkFromOfflineChannel");
403  }
405  check_offline_channel(offlineChannel);
406  return fvASICMap[offlineChannel];
407 }
408 
409 unsigned int dune::PdspChannelMapService::AsicLinkFromOfflineChannel(unsigned int offlineChannel) const {
410  check_offline_channel(offlineChannel);
411  return fvASICMap[offlineChannel];
412 }
413 
414 unsigned int dune::PdspChannelMapService::ASICChannelFromOfflineChannel(unsigned int offlineChannel) {
416  {
417  mf::LogWarning("PdspChannelMapService: Deprecated call to ASICChannelFromOfflineChannel. Not a meaningful number -- channels are grouped by 16's not 8's");
418  }
420  check_offline_channel(offlineChannel);
421  return fvASICChannelMap[offlineChannel];
422 }
423 
424 unsigned int dune::PdspChannelMapService::PlaneFromOfflineChannel(unsigned int offlineChannel) const {
425  check_offline_channel(offlineChannel);
426  return fvPlaneMap[offlineChannel];
427 }
428 
430 {
431  size_t result=0;
432  size_t s = sizeof(size_t)*8;
433  for (size_t j=0; j<s; ++j)
434  {
435  if (i & 1) ++result;
436  i >>= 1;
437  }
438  return result;
439 }
440 
442 {
443  unsigned int lchannel = onlineChannel;
444 
445  if (onlineChannel > fNSSPChans)
446  {
448  {
449  mf::LogWarning("PdspChannelMapService: Online Channel Number too high, using zero as a fallback: ") << onlineChannel;
450  }
452  lchannel = 0;
453  }
454  return farraySSPOnlineToOffline[lchannel];
455 }
456 
457 unsigned int dune::PdspChannelMapService::SSPOnlineChannelFromOfflineChannel(unsigned int offlineChannel) const
458 {
459  SSP_check_offline_channel(offlineChannel);
460  return farraySSPOfflineToOnline[offlineChannel];
461 }
462 
463 unsigned int dune::PdspChannelMapService::SSPAPAFromOfflineChannel(unsigned int offlineChannel) const
464 {
465  SSP_check_offline_channel(offlineChannel);
466  return fvSSPAPAMap[offlineChannel];
467 }
468 
469 unsigned int dune::PdspChannelMapService::SSPWithinAPAFromOfflineChannel(unsigned int offlineChannel) const
470 {
471  SSP_check_offline_channel(offlineChannel);
472  return fvSSPWithinAPAMap[offlineChannel];
473 }
474 
475 unsigned int dune::PdspChannelMapService::SSPGlobalFromOfflineChannel(unsigned int offlineChannel) const
476 {
477  SSP_check_offline_channel(offlineChannel);
478  return fvSSPGlobalMap[offlineChannel];
479 }
480 
481 unsigned int dune::PdspChannelMapService::SSPChanWithinSSPFromOfflineChannel(unsigned int offlineChannel) const
482 {
483  SSP_check_offline_channel(offlineChannel);
484  return fvSSPChanWithinSSPMap[offlineChannel];
485 }
486 
487 unsigned int dune::PdspChannelMapService::OpDetNoFromOfflineChannel(unsigned int offlineChannel) const
488 {
489  SSP_check_offline_channel(offlineChannel);
490  return fvOpDetNoMap[offlineChannel];
491 }
492 
unsigned int fvStreamChannelMap[15360]
unsigned int ChipChannelFromOfflineChannel(unsigned int offlineChannel) const
Returns chip channel number.
unsigned int SSPAPAFromOfflineChannel(unsigned int offlineChannel) const
unsigned int StreamChannelFromOfflineChannel(unsigned int offlineChannel, FelixOrRCE frswitch) const
Returns RCE(FELIX) stream(frame) channel.
unsigned int InstalledAPAFromOfflineChannel(unsigned int offlineChannel) const
Returns APA/crate in installation notation.
static QCString result
unsigned int FiberIdFromOfflineChannel(unsigned int offlineChannel) const
Returns global fiber ID.
unsigned int FEMBChannelFromOfflineChannel(unsigned int offlineChannel) const
Returns FEMB channel.
std::string string
Definition: nybbler.cc:12
unsigned int ASICChannelFromOfflineChannel(unsigned int offlineChannel)
Returns ASIC channel number – to be deprecated.
unsigned int SSPOnlineChannelFromOfflineChannel(unsigned int offlineChannel) const
unsigned int AsicFromOfflineChannel(unsigned int offlineChannel) const
enum dune::PdspChannelMapService::_FelixOrRCE FelixOrRCE
unsigned int AsicChannelFromOfflineChannel(unsigned int offlineChannel) const
unsigned int fFELIXvASICChannelMap[15360]
unsigned int fFELIXarrayCsfcToOffline[6][5][4][128]
unsigned int GetOfflineNumberFromDetectorElements(unsigned int crate, unsigned int slot, unsigned int fiber, unsigned int fembchannel, FelixOrRCE frswitch)
unsigned int SSPGlobalFromOfflineChannel(unsigned int offlineChannel) const
unsigned int APAFromOfflineChannel(unsigned int offlineChannel) const
Returns APA/crate.
unsigned int fvASICChannelMap[15360]
void check_offline_channel(unsigned int offlineChannel) const
unsigned int SSPChanWithinSSPFromOfflineChannel(unsigned int offlineChannel) const
unsigned int SlotIdFromOfflineChannel(unsigned int offlineChannel) const
Returns global slot ID.
unsigned int SSPOfflineChannelFromOnlineChannel(unsigned int onlineChannel)
unsigned int fFELIXvChipChannelMap[15360]
unsigned int farraySSPOnlineToOffline[288]
struct dune::tde::crate crate
T get(std::string const &key) const
Definition: ParameterSet.h:271
unsigned int farraySSPOfflineToOnline[288]
unsigned int OpDetNoFromOfflineChannel(unsigned int offlineChannel) const
unsigned int fFELIXvFEMBChannelMap[15360]
unsigned int fvFEMBChannelMap[15360]
unsigned int farrayCsfcToOffline[6][5][4][128]
static int max(int a, int b)
unsigned int PlaneFromOfflineChannel(unsigned int offlineChannel) const
Returns plane.
unsigned int ASICFromOfflineChannel(unsigned int offlineChannel)
Returns ASIC number – to be deprecated.
unsigned int fFELIXvSlotIdMap[15360]
PdspChannelMapService(fhicl::ParameterSet const &pset)
unsigned int SSPWithinAPAFromOfflineChannel(unsigned int offlineChannel) const
TFile * inFile
Definition: makeDST.cxx:36
#define DEFINE_ART_SERVICE(svc)
unsigned int WIBFromOfflineChannel(unsigned int offlineChannel) const
Returns WIB/slot.
unsigned int bad()
void line(double t, double *p, double &x, double &y, double &z)
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
std::string find_file(std::string const &filename) const
Definition: search_path.cc:96
unsigned int FEMBFromOfflineChannel(unsigned int offlineChannel) const
Returns FEMB/fiber.
unsigned int fvChipChannelMap[15360]
void SSP_check_offline_channel(unsigned int offlineChannel) const
unsigned int AsicLinkFromOfflineChannel(unsigned int offlineChannel) const
unsigned int fFELIXvStreamChannelMap[15360]
static QCString * s
Definition: config.cpp:1042
unsigned int fFELIXvFiberIdMap[15360]
unsigned int ChipFromOfflineChannel(unsigned int offlineChannel) const
Returns chip number.
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
QTextStream & endl(QTextStream &s)