CMS 3D CMS Logo

CastorRawToDigi.cc
Go to the documentation of this file.
7 #include <fstream>
11 #include <iostream>
16 using namespace std;
17 
19  : dataTag_(conf.getParameter<edm::InputTag>("InputLabel")),
20  unpacker_(conf.getParameter<int>("CastorFirstFED"),
21  conf.getParameter<int>("firstSample"),
22  conf.getParameter<int>("lastSample")),
23  zdcunpacker_(conf.getParameter<int>("CastorFirstFED"),
24  conf.getParameter<int>("firstSample"),
25  conf.getParameter<int>("lastSample")),
26  ctdcunpacker_(conf.getParameter<int>("CastorFirstFED"),
27  conf.getParameter<int>("firstSample"),
28  conf.getParameter<int>("lastSample")),
29  filter_(
30  conf.getParameter<bool>("FilterDataQuality"), conf.getParameter<bool>("FilterDataQuality"), false, 0, 0, -1),
31  fedUnpackList_(conf.getUntrackedParameter<std::vector<int> >("FEDs", std::vector<int>())),
32  firstFED_(conf.getParameter<int>("CastorFirstFED")),
33  complainEmptyData_(conf.getUntrackedParameter<bool>("ComplainEmptyData", false)),
34  usingctdc_(conf.getParameter<bool>("CastorCtdc")),
35  unpackTTP_(conf.getParameter<bool>("UnpackTTP")),
36  unpackZDC_(conf.getParameter<bool>("UnpackZDC")),
37  silent_(conf.getUntrackedParameter<bool>("silent", true)),
38  usenominalOrbitMessageTime_(conf.getParameter<bool>("UseNominalOrbitMessageTime")),
39  expectedOrbitMessageTime_(conf.getParameter<int>("ExpectedOrbitMessageTime"))
40 
41 {
42  if (fedUnpackList_.empty()) {
44  fedUnpackList_.push_back(i);
45  }
46 
48  std::ostringstream ss;
49  for (unsigned int i = 0; i < fedUnpackList_.size(); i++)
50  ss << fedUnpackList_[i] << " ";
51  edm::LogInfo("CASTOR") << "CastorRawToDigi will unpack FEDs ( " << ss.str() << ")";
52 
53  // products produced...
54  produces<CastorDigiCollection>();
55  produces<ZDCDigiCollection>();
56  produces<CastorTrigPrimDigiCollection>();
57  produces<HcalUnpackerReport>();
58  if (unpackTTP_)
59  produces<HcalTTPDigiCollection>();
60 
61  tok_input_ = consumes<FEDRawDataCollection>(dataTag_);
62 }
63 
64 // Virtual destructor needed.
66 
67 // Functions that gets called by framework every event
69  // Step A: Get Inputs
71  e.getByToken(tok_input_, rawraw);
72  // get the mapping
74  es.get<CastorDbRecord>().get(pSetup);
75  const CastorElectronicsMap* readoutMap = pSetup->getCastorMapping();
76 
77  // Step B: Create empty output : three vectors for three classes...
78  std::vector<CastorDataFrame> castor;
79  std::vector<ZDCDataFrame> zdc;
80  std::vector<HcalTTPDigi> ttp;
81  std::vector<CastorTriggerPrimitiveDigi> htp;
82 
83  auto report = std::make_unique<HcalUnpackerReport>();
84 
86  colls.castorCont = &castor;
87  colls.zdcCont = &zdc;
88  if (unpackTTP_)
89  colls.ttp = &ttp;
90  colls.tpCont = &htp;
91 
92  // Step C: unpack all requested FEDs
93  const FEDRawData& fed722 = rawraw->FEDData(722);
94  const int fed722size = fed722.size();
95  const FEDRawData& fed693 = rawraw->FEDData(693);
96  const int fed693size = fed693.size();
97  for (std::vector<int>::const_iterator i = fedUnpackList_.begin(); i != fedUnpackList_.end(); i++) {
98  const FEDRawData& fed = rawraw->FEDData(*i);
99  //std::cout<<"Fed number "<<*i<<"is being worked on"<<std::endl;
100  if (*i == 693 && fed693size == 0 && fed722size != 0)
101  continue;
102  if (*i == 722 && fed722size == 0 && fed693size != 0)
103  continue;
104 
105  if (*i != 693 && *i != 722) {
106  if (fed.size() == 0) {
107  if (complainEmptyData_) {
108  edm::LogWarning("EmptyData") << "No data for FED " << *i;
109  report->addError(*i);
110  }
111  } else if (fed.size() < 8 * 3) {
112  edm::LogWarning("EmptyData") << "Tiny data " << fed.size() << " for FED " << *i;
113  report->addError(*i);
114  } else {
115  try {
116  if (usingctdc_) {
117  ctdcunpacker_.unpack(fed, *readoutMap, colls, *report);
118  } else {
119  unpacker_.unpack(fed, *readoutMap, colls, *report);
120  }
121  report->addUnpacked(*i);
122  } catch (cms::Exception& e) {
123  edm::LogWarning("Unpacking error") << e.what();
124  report->addError(*i);
125  } catch (...) {
126  edm::LogWarning("Unpacking exception");
127  report->addError(*i);
128  }
129  }
130  }
131 
132  if (*i == 693 && unpackZDC_) {
133  if (fed.size() == 0) {
134  if (complainEmptyData_) {
135  edm::LogWarning("EmptyData") << "No data for FED " << *i;
136  report->addError(*i);
137  }
138  }
139  if (fed.size() != 0) {
140  zdcunpacker_.unpack(fed, *readoutMap, colls, *report);
141  report->addUnpacked(*i);
142  }
143  }
144 
145  if (*i == 722 && unpackZDC_) {
146  if (fed.size() == 0) {
147  if (complainEmptyData_) {
148  edm::LogWarning("EmptyData") << "No data for FED " << *i;
149  report->addError(*i);
150  }
151  }
152  if (fed.size() != 0) {
153  zdcunpacker_.unpack(fed, *readoutMap, colls, *report);
154  report->addUnpacked(*i);
155  }
156  }
157 
158  } //end of loop over feds
159 
160  // Step B: encapsulate vectors in actual collections
161  auto castor_prod = std::make_unique<CastorDigiCollection>();
162  auto htp_prod = std::make_unique<CastorTrigPrimDigiCollection>();
163 
164  castor_prod->swap_contents(castor);
165  htp_prod->swap_contents(htp);
166 
167  // Step C2: filter FEDs, if required
168  if (filter_.active()) {
169  CastorDigiCollection filtered_castor = filter_.filter(*castor_prod, *report);
170 
171  castor_prod->swap(filtered_castor);
172  }
173 
174  // Step D: Put outputs into event
175  // just until the sorting is proven
176  castor_prod->sort();
177  htp_prod->sort();
178 
179  if (unpackZDC_) {
180  auto zdc_prod = std::make_unique<ZDCDigiCollection>();
181  zdc_prod->swap_contents(zdc);
182 
183  zdc_prod->sort();
184  e.put(std::move(zdc_prod));
185  }
186 
187  e.put(std::move(castor_prod));
188  e.put(std::move(htp_prod));
189 
190  if (unpackTTP_) {
191  auto prod = std::make_unique<HcalTTPDigiCollection>();
192  prod->swap_contents(ttp);
193 
194  prod->sort();
195  e.put(std::move(prod));
196  }
197  e.put(std::move(report));
198 }
199 void CastorRawToDigi::beginRun(edm::Run const& irun, edm::EventSetup const& es) {
201  if (irun.run() > 132640) {
203  } else if (irun.run() > 132174) {
205  } else if (irun.run() > 124371) {
207  } else if (irun.run() > 123984) {
209  } else if (irun.run() > 123584) {
211  } else {
213  }
215  }
216 }
HcalElectronicsMap.h
FEDNumbering.h
FEDNumbering::MAXCASTORFEDID
Definition: FEDNumbering.h:46
CastorRawCollections
Definition: CastorRawCollections.h:16
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
MessageLogger.h
funct::false
false
Definition: Factorize.h:34
ESHandle.h
CastorRawToDigi::produce
void produce(edm::Event &e, const edm::EventSetup &c) override
Definition: CastorRawToDigi.cc:68
edm::Run
Definition: Run.h:45
edm
HLT enums.
Definition: AlignableModifier.h:19
CastorRawCollections::zdcCont
std::vector< ZDCDataFrame > * zdcCont
Definition: CastorRawCollections.h:21
edm::LogInfo
Definition: MessageLogger.h:254
CastorUnpacker::unpack
void unpack(const FEDRawData &raw, const CastorElectronicsMap &emap, CastorRawCollections &conts, HcalUnpackerReport &report, bool silent=false)
For histograms, no begin and end.
Definition: CastorUnpacker.cc:75
CastorRawCollections.h
edm::SortedCollection
Definition: SortedCollection.h:49
CastorRawToDigi::filter_
CastorDataFrameFilter filter_
Definition: CastorRawToDigi.h:46
CastorRawToDigi::ctdcunpacker_
CastorCtdcUnpacker ctdcunpacker_
Definition: CastorRawToDigi.h:45
edm::Handle
Definition: AssociativeIterator.h:50
edm::RunBase::run
RunNumber_t run() const
Definition: RunBase.h:40
CastorCtdcUnpacker::unpack
void unpack(const FEDRawData &raw, const CastorElectronicsMap &emap, CastorRawCollections &conts, HcalUnpackerReport &report)
Definition: CastorCtdcUnpacker.cc:25
FEDRawData
Definition: FEDRawData.h:19
FileInPath.h
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
CastorRawToDigi::complainEmptyData_
bool complainEmptyData_
Definition: CastorRawToDigi.h:49
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
edm::SortedCollection::swap
void swap(SortedCollection &other)
Definition: SortedCollection.h:193
CastorUnpacker::setExpectedOrbitMessageTime
void setExpectedOrbitMessageTime(int time)
Definition: CastorUnpacker.h:19
FEDNumbering::MINCASTORFEDID
Definition: FEDNumbering.h:45
HcalDigiCollections.h
CastorRawToDigi::fedUnpackList_
std::vector< int > fedUnpackList_
Definition: CastorRawToDigi.h:47
dumpMFGeometry_cfg.prod
prod
Definition: dumpMFGeometry_cfg.py:24
Run.h
edm::ESHandle
Definition: DTSurvey.h:22
CastorRawToDigi::expectedOrbitMessageTime_
int expectedOrbitMessageTime_
Definition: CastorRawToDigi.h:55
CastorRawToDigi::tok_input_
edm::EDGetTokenT< FEDRawDataCollection > tok_input_
Definition: CastorRawToDigi.h:57
FEDRawDataCollection::FEDData
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
Definition: FEDRawDataCollection.cc:19
CastorRawToDigi::usingctdc_
bool usingctdc_
Definition: CastorRawToDigi.h:50
CastorRawToDigi::unpackZDC_
bool unpackZDC_
Definition: CastorRawToDigi.h:52
edm::LogWarning
Definition: MessageLogger.h:141
CastorRawToDigi::dataTag_
edm::InputTag dataTag_
Definition: CastorRawToDigi.h:42
funct::true
true
Definition: Factorize.h:173
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
CastorRawToDigi::CastorRawToDigi
CastorRawToDigi(const edm::ParameterSet &ps)
Definition: CastorRawToDigi.cc:18
createfilelist.int
int
Definition: createfilelist.py:10
CastorRawCollections::castorCont
std::vector< CastorDataFrame > * castorCont
Definition: CastorRawCollections.h:20
FEDRawDataCollection.h
CastorRawToDigi::zdcunpacker_
ZdcUnpacker zdcunpacker_
Definition: CastorRawToDigi.h:44
CastorRawToDigi::usenominalOrbitMessageTime_
bool usenominalOrbitMessageTime_
Definition: CastorRawToDigi.h:54
edm::EventSetup
Definition: EventSetup.h:57
CastorRawToDigi::unpackTTP_
bool unpackTTP_
Definition: CastorRawToDigi.h:51
get
#define get
ZdcUnpacker::unpack
void unpack(const FEDRawData &raw, const CastorElectronicsMap &emap, CastorRawCollections &conts, HcalUnpackerReport &report, bool silent=false)
For histograms, no begin and end.
Definition: ZdcUnpacker.cc:108
FEDRawData::size
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
edmIntegrityCheck.report
report
Definition: edmIntegrityCheck.py:349
CastorDbRecord
Definition: CastorDbRecord.h:29
hcalSimParameters_cfi.zdc
zdc
Definition: hcalSimParameters_cfi.py:92
HcalTopology.h
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
CastorDataFrameFilter::active
bool active() const
whether any filters are on
Definition: CastorDataFrameFilter.cc:51
CastorRawToDigi.h
CastorRawToDigi::unpacker_
CastorUnpacker unpacker_
Definition: CastorRawToDigi.h:43
CastorRawToDigi::~CastorRawToDigi
~CastorRawToDigi() override
Definition: CastorRawToDigi.cc:65
CastorRawCollections::tpCont
std::vector< CastorTriggerPrimitiveDigi > * tpCont
Definition: CastorRawCollections.h:23
CastorDbService.h
CastorRawToDigi::beginRun
void beginRun(edm::Run const &, edm::EventSetup const &) override
Definition: CastorRawToDigi.cc:199
CastorElectronicsMap
Definition: CastorElectronicsMap.h:30
CastorDbService::getCastorMapping
const CastorElectronicsMap * getCastorMapping() const
Definition: CastorDbService.cc:183
cms::Exception
Definition: Exception.h:70
CastorRawCollections::ttp
std::vector< HcalTTPDigi > * ttp
Definition: CastorRawCollections.h:24
edm::Event
Definition: Event.h:73
CastorDbRecord.h
CastorDataFrameFilter::filter
CastorDigiCollection filter(const CastorDigiCollection &incol, HcalUnpackerReport &r)
filter Castor data frames
Definition: CastorDataFrameFilter.cc:40
castorDigitizer_cfi.castor
castor
Definition: castorDigitizer_cfi.py:9
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37