CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalTBObjectUnpacker.cc
Go to the documentation of this file.
1 using namespace std;
2 
11 #include <iostream>
12 #include <fstream>
13 
14 
16  triggerFed_(conf.getUntrackedParameter<int>("HcalTriggerFED",-1)),
17  sdFed_(conf.getUntrackedParameter<int>("HcalSlowDataFED",-1)),
18  spdFed_(conf.getUntrackedParameter<int>("HcalSourcePositionFED",-1)),
19  tdcFed_(conf.getUntrackedParameter<int>("HcalTDCFED",-1)),
20  qadcFed_(conf.getUntrackedParameter<int>("HcalQADCFED",-1)),
21  calibFile_(conf.getUntrackedParameter<string>("ConfigurationFile","")),
22  tdcUnpacker_(conf.getUntrackedParameter<bool>("IncludeUnmatchedHits",false)),
23  doRunData_(false),doTriggerData_(false),doEventPosition_(false),doTiming_(false),doSourcePos_(false),doBeamADC_(false)
24  {
25 
26  tok_raw_ = consumes<FEDRawDataCollection>(conf.getParameter<edm::InputTag>("fedRawDataCollectionTag"));
27 
28  if (triggerFed_ >=0) {
29  std::cout << "HcalTBObjectUnpacker will unpack Trigger FED ";
30  std::cout << triggerFed_ << endl;
31  doTriggerData_=true;
32  }
33 
34  if (sdFed_ >=0) {
35  std::cout << "HcalTBObjectUnpacker will unpack SlowData FED ";
36  std::cout << sdFed_ << endl;
37  doRunData_=true;
38  doEventPosition_=true; // at least the table
39  }
40 
41  if (tdcFed_ >=0) {
42  std::cout << "HcalTBObjectUnpacker will unpack TDC FED ";
43  std::cout << tdcFed_ << endl;
44  doTiming_=true;
45  doEventPosition_=true; // at least the WC
46  }
47 
48  if (qadcFed_ >=0) {
49  std::cout << "HcalTBObjectUnpacker will unpack QADC FED ";
50  std::cout << qadcFed_ << endl;
51  doBeamADC_=true;
52  }
53 
54  if (spdFed_ >=0) {
55  std::cout << "HcalTBObjectUnpacker will unpack Source Position Data FED ";
56  std::cout << spdFed_ << endl;
57  doSourcePos_=true;
58  }
59 
60 
61  if (tdcFed_ >= 0 || qadcFed_ >=0 ) {
62  calibLines_.clear();
63  if(calibFile_.size()>0){
64 
65  parseCalib();
66  // printf("I got %d lines!\n",calibLines_.size());
67  if(calibLines_.size()==0)
68  throw cms::Exception("Incomplete configuration") <<
69  "HcalTBObjectUnpacker: TDC/QADC/WC configuration file not found or is empty: "<<calibFile_<<endl;
70  }
71  else{
72  throw cms::Exception("Incomplete configuration") <<
73  "HcalTBObjectUnpacker: TDC/QADC/WC configuration file not found: "<<calibFile_<<endl;
74  }
75  }
76 
77 
78  if (doTriggerData_) produces<HcalTBTriggerData>();
79  if (doRunData_) produces<HcalTBRunData>();
80  if (doEventPosition_) produces<HcalTBEventPosition>();
81  if (doTiming_) produces<HcalTBTiming>();
82 // if (doBeamADC_) produces<HcalTBBeamCounters>();
83  if (doBeamADC_) {produces<HcalTBBeamCounters>();qadcUnpacker_.setCalib(calibLines_);}
84  if (doSourcePos_) produces<HcalSourcePositionData>();
86  }
87 
88  // Virtual destructor needed.
90 
91  // Functions that gets called by framework every event
93  {
94  // Step A: Get Inputs
96  e.getByToken(tok_raw_, rawraw);
97 
98  // Step B: Create empty output
99  std::auto_ptr<HcalTBTriggerData>
100  trigd(new HcalTBTriggerData);
101 
102  std::auto_ptr<HcalTBRunData>
103  rund(new HcalTBRunData);
104 
105  std::auto_ptr<HcalTBEventPosition>
106  epd(new HcalTBEventPosition);
107 
108  std::auto_ptr<HcalTBTiming>
109  tmgd(new HcalTBTiming);
110 
111  std::auto_ptr<HcalTBBeamCounters>
112  bcntd(new HcalTBBeamCounters);
113 
114  std::auto_ptr<HcalSourcePositionData>
115  spd(new HcalSourcePositionData);
116 
117  if (triggerFed_ >=0) {
118  // Step C: unpack all requested FEDs
119  const FEDRawData& fed = rawraw->FEDData(triggerFed_);
120  tdUnpacker_.unpack(fed,*trigd);
121  }
122 
123  if (sdFed_ >=0) {
124  // Step C: unpack all requested FEDs
125  const FEDRawData& fed = rawraw->FEDData(sdFed_);
126  sdUnpacker_.unpack(fed, *rund, *epd);
127  }
128 
129  if (tdcFed_ >=0) {
130  // Step C: unpack all requested FEDs
131  const FEDRawData& fed = rawraw->FEDData(tdcFed_);
132  tdcUnpacker_.unpack(fed, *epd, *tmgd);
133  }
134 
135  if (qadcFed_ >=0) {
136  // Step C: unpack all requested FEDs
137  const FEDRawData& fed = rawraw->FEDData(qadcFed_);
138  bool is04 = true;
139  if(qadcFed_==8) is04=false;
140  qadcUnpacker_.unpack(fed, *bcntd,is04);
141  }
142 
143  if (spdFed_ >=0) {
144  // Step C: unpack all requested FEDs
145  const FEDRawData& fed = rawraw->FEDData(spdFed_);
146  spdUnpacker_.unpack(fed, *spd);
147  }
148 
149  // Step D: Put outputs into event
150  if (doTriggerData_) e.put(trigd);
151  if (doRunData_) e.put(rund);
152  if (doEventPosition_) e.put(epd);
153  if (doTiming_) e.put(tmgd);
154  if (doBeamADC_) e.put(bcntd);
155  if (doSourcePos_) e.put(spd);
156  }
157 
158 
160 
161  if(calibFile_.size()==0){
162  printf("HcalTBObjectUnpacker cowardly refuses to parse a NULL file...\n");
163  return;
164  }
165 
167 
168 
169  ifstream infile(fip.fullPath().c_str());
170 
171  char buffer [1024];
172  string tmpStr;
173 
174  while (infile.getline(buffer, 1024)) {
175  if (buffer [0] == '#') continue; //ignore comment
176  if (buffer [0] == '/' && buffer [1] == '/') continue; //ignore comment
177  tmpStr = string(buffer);
178  vector<string> lineVect;
179 
180  int start = 0; bool empty = true;
181  for (unsigned i=0; i<=tmpStr.size(); i++) {
182  if (tmpStr[i] == ' ' || i==tmpStr.size()) {
183  if (!empty) {
184  std::string item(tmpStr, start, i-start);
185  lineVect.push_back(item);
186  empty = true;
187 // printf("Got: %s\n",item.c_str());
188  }
189  start = i+1;
190  }
191  else {
192  if (empty) empty = false;
193  }
194  }
195 
196  if(lineVect.size()>0) calibLines_.push_back(lineVect);
197  }
198 
199  infile.close();
200  return;
201 }
202 
205 
hcaltb::HcalTBTriggerDataUnpacker tdUnpacker_
T getParameter(std::string const &) const
void unpack(const FEDRawData &raw, HcalTBTriggerData &htbtd) const
int i
Definition: DBlmapReader.cc:9
tuple start
Check for commandline option errors.
Definition: dqm_diff.py:58
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void unpack(const FEDRawData &raw, HcalTBBeamCounters &beamadc, bool is04_=true) const
std::vector< std::vector< std::string > > calibLines_
void unpack(const FEDRawData &raw, HcalSourcePositionData &hspd) const
hcaltb::HcalTBSlowDataUnpacker sdUnpacker_
hcaltb::HcalTBSourcePositionDataUnpacker spdUnpacker_
HcalTBObjectUnpacker(const edm::ParameterSet &ps)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
void setCalib(const std::vector< std::vector< std::string > > &calibLines_)
tuple conf
Definition: dbtoconf.py:185
virtual void produce(edm::Event &e, const edm::EventSetup &c)
edm::EDGetTokenT< FEDRawDataCollection > tok_raw_
void unpack(const FEDRawData &raw, HcalTBRunData &htbrd, HcalTBEventPosition &htbep) const
void unpack(const FEDRawData &raw, HcalTBEventPosition &pos, HcalTBTiming &timing) const
hcaltb::HcalTBTDCUnpacker tdcUnpacker_
void setCalib(const std::vector< std::vector< std::string > > &calibLines_)
list infile
Definition: EdgesToViz.py:90
hcaltb::HcalTBQADCUnpacker qadcUnpacker_
tuple cout
Definition: gather_cfg.py:121
volatile std::atomic< bool > shutdown_flag false
std::string fullPath() const
Definition: FileInPath.cc:171