CMS 3D CMS Logo

HcalTBObjectUnpacker.cc
Go to the documentation of this file.
1 
10 #include <iostream>
11 #include <fstream>
12 using namespace std;
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_.empty()){
64 
65  parseCalib();
66  // printf("I got %d lines!\n",calibLines_.size());
67  if(calibLines_.empty())
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  auto trigd = std::make_unique<HcalTBTriggerData>();
100 
101  auto rund = std::make_unique<HcalTBRunData>();
102 
103  auto epd = std::make_unique<HcalTBEventPosition>();
104 
105  auto tmgd = std::make_unique<HcalTBTiming>();
106 
107  auto bcntd = std::make_unique<HcalTBBeamCounters>();
108 
109  auto spd = std::make_unique<HcalSourcePositionData>();
110 
111  if (triggerFed_ >=0) {
112  // Step C: unpack all requested FEDs
113  const FEDRawData& fed = rawraw->FEDData(triggerFed_);
114  tdUnpacker_.unpack(fed,*trigd);
115  }
116 
117  if (sdFed_ >=0) {
118  // Step C: unpack all requested FEDs
119  const FEDRawData& fed = rawraw->FEDData(sdFed_);
120  sdUnpacker_.unpack(fed, *rund, *epd);
121  }
122 
123  if (tdcFed_ >=0) {
124  // Step C: unpack all requested FEDs
125  const FEDRawData& fed = rawraw->FEDData(tdcFed_);
126  tdcUnpacker_.unpack(fed, *epd, *tmgd);
127  }
128 
129  if (qadcFed_ >=0) {
130  // Step C: unpack all requested FEDs
131  const FEDRawData& fed = rawraw->FEDData(qadcFed_);
132  bool is04 = true;
133  if(qadcFed_==8) is04=false;
134  qadcUnpacker_.unpack(fed, *bcntd,is04);
135  }
136 
137  if (spdFed_ >=0) {
138  // Step C: unpack all requested FEDs
139  const FEDRawData& fed = rawraw->FEDData(spdFed_);
140  spdUnpacker_.unpack(fed, *spd);
141  }
142 
143  // Step D: Put outputs into event
144  if (doTriggerData_) e.put(std::move(trigd));
145  if (doRunData_) e.put(std::move(rund));
146  if (doEventPosition_) e.put(std::move(epd));
147  if (doTiming_) e.put(std::move(tmgd));
148  if (doBeamADC_) e.put(std::move(bcntd));
149  if (doSourcePos_) e.put(std::move(spd));
150  }
151 
152 
154 
155  if(calibFile_.empty()){
156  printf("HcalTBObjectUnpacker cowardly refuses to parse a NULL file...\n");
157  return;
158  }
159 
161 
162 
163  ifstream infile(fip.fullPath().c_str());
164 
165  char buffer [1024];
166  string tmpStr;
167 
168  while (infile.getline(buffer, 1024)) {
169  if (buffer [0] == '#') continue; //ignore comment
170  if (buffer [0] == '/' && buffer [1] == '/') continue; //ignore comment
171  tmpStr = string(buffer);
172  vector<string> lineVect;
173 
174  int start = 0; bool empty = true;
175  for (unsigned i=0; i<=tmpStr.size(); i++) {
176  if (tmpStr[i] == ' ' || i==tmpStr.size()) {
177  if (!empty) {
178  std::string item(tmpStr, start, i-start);
179  lineVect.push_back(item);
180  empty = true;
181 // printf("Got: %s\n",item.c_str());
182  }
183  start = i+1;
184  }
185  else {
186  if (empty) empty = false;
187  }
188  }
189 
190  if(!lineVect.empty()) calibLines_.push_back(lineVect);
191  }
192 
193  infile.close();
194  return;
195 }
196 
199 
Definition: start.py:1
hcaltb::HcalTBTriggerDataUnpacker tdUnpacker_
T getParameter(std::string const &) const
void unpack(const FEDRawData &raw, HcalTBTriggerData &htbtd) const
void produce(edm::Event &e, const edm::EventSetup &c) override
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:136
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
#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)
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
void setCalib(const std::vector< std::vector< std::string > > &calibLines_)
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_)
hcaltb::HcalTBQADCUnpacker qadcUnpacker_
std::string fullPath() const
Definition: FileInPath.cc:197
def move(src, dest)
Definition: eostools.py:510