CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
EcalDumpRaw Class Reference

#include <EcalDumpRaw.h>

Inheritance diagram for EcalDumpRaw:
edm::stream::EDAnalyzer<> edm::stream::EDAnalyzerBase edm::EDConsumerBase

Public Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
 
void analyzeEB (const edm::Event &, const edm::EventSetup &) const
 
void analyzeEE (const edm::Event &, const edm::EventSetup &) const
 
 EcalDumpRaw (const edm::ParameterSet &)
 
void endJob ()
 
 ~EcalDumpRaw ()
 
- Public Member Functions inherited from edm::stream::EDAnalyzer<>
 EDAnalyzer ()=default
 
- Public Member Functions inherited from edm::stream::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDAnalyzerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Types

enum  {
  inDaqHeader, inDccHeader, inTccBlock, inSrBlock,
  inTowerBlock
}
 

Private Member Functions

void analyzeApd ()
 
void analyzeFed (int fedId)
 
bool decode (const uint32_t *data, int iWord32, std::ostream &out)
 
double max (const std::vector< double > &a, unsigned &pos)
 
double min (const std::vector< double > &a)
 
std::string srRange (int offset) const
 
std::string toNth (int n)
 
template<class T >
std::string toString (T val)
 
std::string tpgTag (int tccType, unsigned iSeq) const
 
std::string ttfTag (int tccType, unsigned iSeq) const
 

Static Private Member Functions

static int lmodOfRu (int ru1)
 
static int modOfRu (int ru1)
 
static int sideOfRu (int ru1)
 

Private Attributes

std::vector< double > adc_
 
double amplCut_
 
int beg_fed_id_
 
int bx_
 
int dccCh_
 
std::vector< int > dccChStatus_
 
unsigned dccId_
 
enum EcalDumpRaw:: { ... }  decodeState_
 
int detailedTrigType_
 
bool dump_
 
bool dumpAdc_
 
std::ofstream dumpFile_
 
int end_fed_id_
 
unsigned eventId_
 
std::vector< unsigned > eventList_
 
std::vector< int > feBx_
 
unsigned fedId_
 
edm::InputTag fedRawDataCollectionTag_
 
edm::EDGetTokenT< FEDRawDataCollectionfedRawDataCollectionToken_
 
std::vector< int > feL1a_
 
std::vector< int > feRuId_
 
std::string filename_
 
int first_event_
 
int iEvent_
 
int iRu_
 
unsigned iSrWord64_
 
int iTcc_
 
unsigned iTccWord64_
 
int iTow_
 
unsigned iTowerWord64_
 
int l1a_
 
edm::InputTag l1AcceptBunchCrossingCollectionTag_
 
edm::EDGetTokenT< L1AcceptBunchCrossingCollectionl1AcceptBunchCrossingCollectionToken_
 
bool l1aHistory_
 
int l1aMaxX_
 
int l1aMinX_
 
std::vector< std::vector< uint32_t > > l1as_
 
int last_event_
 
std::vector< uint32_t > lastOrbit_
 
unsigned maxEventId_
 
int maxEvt_
 
unsigned minEventId_
 
std::vector< int > nTpgs_
 
int nTts_
 
unsigned orbit0_
 
bool orbit0Set_
 
uint32_t orbit_
 
std::vector< std::vector< uint32_t > > orbits_
 
int profileFedId_
 
int profileRuId_
 
bool pulsePerLme_
 
bool pulsePerLmod_
 
bool pulsePerRu_
 
unsigned side_
 
int simpleTrigType_
 
int srpBx_
 
int srpL1a_
 
int tccBlockLen64_
 
int tccBx_
 
int tccId_
 
int tccL1a_
 
int tccType_
 type of TCC currently parsed More...
 
size_t towerBlockLength_
 
std::vector< std::vector< int > > tpg_
 
int verbosity_
 
bool writeDcc_
 

Static Private Attributes

static const unsigned fedStart_ = 601
 
static const int maxTccsPerDcc_ = 4
 
static const int maxTpgsPerTcc_ = 68
 
static const unsigned nDccs_ = 54
 
static const int nRu_ = 70
 
static const int nSamples = 10
 
static const int ttId_ [nTccTypes_][maxTpgsPerTcc_]
 
static const int ebmTcc_ = 0
 
static const int ebpTcc_ = 1
 
static const int eeInnerTcc_ = 2
 
static const int eeOuterTcc_ = 3
 
static const int nTccTypes_ = 4
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDAnalyzer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDAnalyzerBase
typedef EDAnalyzerAdaptorBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::stream::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Utility to dump ECAL Raw data. Hexadecimal dump is accompagned with a side by data interpretention.

The script test/dumpRaw can be used to run this module. E. g.: dumpRaw /store/..../data_file.root Run dumpRaw -h to get help on this script.

Author: Ph. Gras CEA/IRFU Saclay

Definition at line 34 of file EcalDumpRaw.h.

Member Enumeration Documentation

anonymous enum
private
Enumerator
inDaqHeader 
inDccHeader 
inTccBlock 
inSrBlock 
inTowerBlock 

Definition at line 103 of file EcalDumpRaw.h.

Constructor & Destructor Documentation

EcalDumpRaw::EcalDumpRaw ( const edm::ParameterSet ps)
explicit

Definition at line 128 of file EcalDumpRaw.cc.

References beg_fed_id_, gather_cfg::cout, dumpFile_, end_fed_id_, fedRawDataCollectionTag_, fedRawDataCollectionToken_, filename_, first_event_, edm::ParameterSet::getUntrackedParameter(), l1AcceptBunchCrossingCollectionTag_, l1AcceptBunchCrossingCollectionToken_, last_event_, hpstanc_transforms::max, verbosity_, and writeDcc_.

128  :
129  iEvent_(0),
130  adc_(nSamples, 0.),
131  amplCut_(ps.getUntrackedParameter<double>("amplCut", 5.)),
132  dump_(ps.getUntrackedParameter<bool>("dump", true)),
133  dumpAdc_(ps.getUntrackedParameter<bool>("dumpAdc", true)),
134  l1aHistory_(ps.getUntrackedParameter<bool>("l1aHistory", true)),
135  // doHisto_(ps.getUntrackedParameter<bool>("doHisto", true)),
136  maxEvt_(ps.getUntrackedParameter<int>("maxEvt", 10000)),
137  profileFedId_(ps.getUntrackedParameter<int>("profileFedId", 0)),
138  profileRuId_(ps.getUntrackedParameter<int>("profileRuId", 1)),
139  l1aMinX_(ps.getUntrackedParameter<int>("l1aMinX", 1)),
140  l1aMaxX_(ps.getUntrackedParameter<int>("l1aMaxX", 601)),
143  eventList_(ps.getUntrackedParameter<vector<unsigned> >("eventList", vector<unsigned>())),
144  minEventId_(999999),
145  maxEventId_(0),
146  orbit0_(0),
147  orbit0Set_(false),
148  bx_(-1),
149  l1a_(-1),
150  simpleTrigType_(-1),
151  detailedTrigType_(-1),
152  // histo_("hist.root", "RECREATE"),
153  l1as_(36+2),
154  orbits_(36+2),
155  tpg_(maxTccsPerDcc_, std::vector<int>(maxTpgsPerTcc_)),
157  dccChStatus_(70, 0),
158  srpL1a_(-1),
159  tccL1a_(-1),
160  nTts_(-1),
161  tccBlockLen64_(19),
162  feL1a_(nRu_,-1),
163  srpBx_(-1),
164  tccBx_(-1),
165  tccType_(0),
166  feBx_(nRu_,-1),
167  feRuId_(nRu_,-1),
168  iTow_(0),
169  pulsePerRu_(ps.getUntrackedParameter<bool>("pulsePerRu", true)),
170  pulsePerLmod_(ps.getUntrackedParameter<bool>("pulsePerLmod", true)),
171  pulsePerLme_(ps.getUntrackedParameter<bool>("pulsePerLme", true)),
172  tccId_(0),
173  fedRawDataCollectionTag_(ps.getParameter<edm::InputTag>("fedRawDataCollectionTag")),
174  l1AcceptBunchCrossingCollectionTag_(ps.getParameter<edm::InputTag>("l1AcceptBunchCrossingCollectionTag"))
175 {
176  verbosity_= ps.getUntrackedParameter<int>("verbosity",1);
177 
178  beg_fed_id_= ps.getUntrackedParameter<int>("beg_fed_id",601);
179  end_fed_id_= ps.getUntrackedParameter<int>("end_fed_id",654);
180 
181 
182  first_event_ = ps.getUntrackedParameter<int>("first_event",1);
183  last_event_ = ps.getUntrackedParameter<int>("last_event",
185 
186  writeDcc_ = ps.getUntrackedParameter<bool>("writeDCC",false);
187  filename_ = ps.getUntrackedParameter<string>("filename","dump.bin");
188 
189  fedRawDataCollectionToken_ = consumes<FEDRawDataCollection>(fedRawDataCollectionTag_);
190  l1AcceptBunchCrossingCollectionToken_ = consumes<L1AcceptBunchCrossingCollection>(l1AcceptBunchCrossingCollectionTag_);
191 
192  if(writeDcc_){
193  dumpFile_.open(filename_.c_str());
194  if(dumpFile_.bad()){
195  /*edm::LogError("EcalDumpRaw")*/ std::cout << "Failed to open file '"
196  << filename_.c_str() << "' specified by "
197  << "parameter filename for writing. DCC data "
198  " dump will be disabled.";
199  writeDcc_ = false;
200  }
201  }
202 }
T getParameter(std::string const &) const
int tccBlockLen64_
Definition: EcalDumpRaw.h:168
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< FEDRawDataCollection > fedRawDataCollectionToken_
Definition: EcalDumpRaw.h:187
int end_fed_id_
Definition: EcalDumpRaw.h:94
bool pulsePerLme_
Definition: EcalDumpRaw.h:181
static const int nRu_
Definition: EcalDumpRaw.h:169
bool orbit0Set_
Definition: EcalDumpRaw.h:151
int detailedTrigType_
Definition: EcalDumpRaw.h:155
std::vector< double > adc_
Definition: EcalDumpRaw.h:107
bool l1aHistory_
Definition: EcalDumpRaw.h:113
int first_event_
Definition: EcalDumpRaw.h:95
double amplCut_
Definition: EcalDumpRaw.h:110
unsigned minEventId_
Definition: EcalDumpRaw.h:147
bool writeDcc_
Definition: EcalDumpRaw.h:92
std::vector< uint32_t > lastOrbit_
Definition: EcalDumpRaw.h:121
bool pulsePerLmod_
Definition: EcalDumpRaw.h:180
std::vector< unsigned > eventList_
Definition: EcalDumpRaw.h:146
std::vector< int > feL1a_
Definition: EcalDumpRaw.h:170
std::vector< std::vector< uint32_t > > orbits_
Definition: EcalDumpRaw.h:158
std::vector< int > feBx_
Definition: EcalDumpRaw.h:175
unsigned maxEventId_
Definition: EcalDumpRaw.h:148
int profileRuId_
Definition: EcalDumpRaw.h:117
std::ofstream dumpFile_
Definition: EcalDumpRaw.h:178
edm::InputTag fedRawDataCollectionTag_
Definition: EcalDumpRaw.h:185
std::string filename_
Definition: EcalDumpRaw.h:97
std::vector< int > nTpgs_
Definition: EcalDumpRaw.h:160
static const int nSamples
Definition: EcalDumpRaw.h:109
std::vector< std::vector< int > > tpg_
Definition: EcalDumpRaw.h:159
bool pulsePerRu_
Definition: EcalDumpRaw.h:179
edm::EDGetTokenT< L1AcceptBunchCrossingCollection > l1AcceptBunchCrossingCollectionToken_
Definition: EcalDumpRaw.h:188
int tccType_
type of TCC currently parsed
Definition: EcalDumpRaw.h:174
int simpleTrigType_
Definition: EcalDumpRaw.h:154
std::vector< int > dccChStatus_
Definition: EcalDumpRaw.h:161
std::vector< int > feRuId_
Definition: EcalDumpRaw.h:176
int profileFedId_
Definition: EcalDumpRaw.h:116
std::vector< std::vector< uint32_t > > l1as_
Definition: EcalDumpRaw.h:157
static const int maxTpgsPerTcc_
Definition: EcalDumpRaw.h:124
edm::InputTag l1AcceptBunchCrossingCollectionTag_
Definition: EcalDumpRaw.h:186
unsigned eventId_
Definition: EcalDumpRaw.h:145
unsigned orbit0_
Definition: EcalDumpRaw.h:149
int beg_fed_id_
Definition: EcalDumpRaw.h:93
static const unsigned nDccs_
Definition: EcalDumpRaw.h:122
static const int maxTccsPerDcc_
Definition: EcalDumpRaw.h:125
int verbosity_
Definition: EcalDumpRaw.h:91
int last_event_
Definition: EcalDumpRaw.h:96
EcalDumpRaw::~EcalDumpRaw ( )

Definition at line 207 of file EcalDumpRaw.cc.

207  {
208 }

Member Function Documentation

void EcalDumpRaw::analyze ( const edm::Event event,
const edm::EventSetup es 
)
virtual

Definition at line 212 of file EcalDumpRaw.cc.

References beg_fed_id_, bx_, MessageLogger_cfi::cerr, gather_cfg::cout, FEDRawData::data(), data, dccChStatus_, dccId_, TauDecayModes::dec, decode(), dump_, dumpFile_, end_fed_id_, eventId_, eventList_, feBx_, feBxOffset, FEDRawDataCollection::FEDData(), fedRawDataCollectionToken_, feL1a_, feRuId_, lumiContext::fill, spr::find(), first_event_, mps_fire::i, hcalTTPDigis_cfi::id, iEvent_, iRu_, edm::HandleBase::isValid(), iTcc_, iTow_, l1a_, l1AcceptBunchCrossingCollectionToken_, l1aHistory_, last_event_, FEDNumbering::lastFEDId(), maxEventId_, minEventId_, nRu_, nTpgs_, nTts_, matplotRender::rawdata, alignCSCRings::s, FEDRawData::size(), srpBx_, srpL1a_, command_line::start, tccBx_, tccL1a_, tccType_, toNth(), trigNames, and writeDcc_.

212  {
213  ++iEvent_;
214  eventId_ = event.id().event();
215 
216  if(eventList_.size()!=0 && find(eventList_.begin(), eventList_.end(),
217  eventId_) == eventList_.end()){
218  cout << "Skipping event " << eventId_ << ".\n";
219  return;
220  }
221 
222  if ((first_event_ > 0 && iEvent_ < first_event_) ||
223  (last_event_ > 0 && last_event_ < iEvent_)) return;
224  timeval start;
225  timeval stop;
226  gettimeofday(&start, 0);
227 
229  event.getByToken(fedRawDataCollectionToken_, rawdata);
230 
231  if(dump_ || l1aHistory_) cout << "\n======================================================================\n"
232  << toNth(iEvent_)
233  << " read event. "
234  << "Event id: "
235  << " " << eventId_
236  << "\n----------------------------------------------------------------------\n";
237 
238  if(l1aHistory_){
240  event.getByToken(l1AcceptBunchCrossingCollectionToken_, l1aHist);
241  if(!l1aHist.isValid()) {
242  cout << "L1A history not found.\n";
243  } else if (l1aHist->size() == 0) {
244  cout << "L1A history is empty.\n";
245  } else{
246  cout << "L1A history: \n";
247  for(L1AcceptBunchCrossingCollection::const_iterator it = l1aHist->begin();
248  it != l1aHist->end();
249  ++it){
250  cout << "L1A offset: " << it->l1AcceptOffset() << "\t"
251  << "BX: " << it->bunchCrossing() << "\t"
252  << "Orbit ID: " << it->orbitNumber() << "\t"
253  << "Trigger type: " << it->eventType() << " ("
254  << trigNames[it->eventType()&0xF] << ")\n";
255  }
256  }
257  cout << "----------------------------------------------------------------------\n";
258  }
259 
260  if(eventId_ < minEventId_) minEventId_ = eventId_;
261  if(eventId_ > maxEventId_) maxEventId_ = eventId_;
262 
263 #if 1
264 
265  bool dccIdErr = false;
266  unsigned iFed = 0;
267  unsigned refDccId = 0;
268  // static bool recordNextPhys = false;
269  //static int bxCalib = -1;
270  //x static int nCalib = 0;
271 
272  for (int id = 0; id<=FEDNumbering::lastFEDId(); ++id){
273 
274  if (id < beg_fed_id_ || end_fed_id_ < id) continue;
275 
276  const FEDRawData& data = rawdata->FEDData(id);
277 
278  if (data.size()>4){
279  ++iFed;
280  if ((data.size() % 8) !=0){
281  cout << "***********************************************\n";
282  cout << " Fed size in bits not multiple of 64, strange.\n";
283  cout << "***********************************************\n";
284  }
285 
286 
287  size_t nWord32 = data.size()/4;
288  const uint32_t * pData = ( reinterpret_cast<uint32_t*>(const_cast<unsigned char*> ( data.data())));
289  stringstream s;
290  srpL1a_ = -1;
291  tccL1a_ = -1;
292  srpBx_ = -1;
293  tccBx_ = -1;
294  iTow_ = 0;
295  iRu_ = 0;
296  nTts_ = -1;
297  iTcc_ = 0;
298  tccType_ = 0;
299 
300  for(int i = 0; i < nRu_; ++i){
301  feL1a_[i] = -1;
302  feBx_[i] = -1;
303  feRuId_[i] = -1;
304  }
305 
306  fill(nTpgs_.begin(), nTpgs_.end(), 0);
307 
308  fill(dccChStatus_.begin(), dccChStatus_.end(), 0);
309 
310  bool rc;
311  for(size_t iWord32=0; iWord32 < nWord32; iWord32+=2){
312  s.str("");
313  if(id>=601 && id<=654){// ECAL DCC data
314  rc = decode(pData+iWord32, iWord32/2, s);
315  } else{
316  rc = true;
317  }
318  if(rc && dump_){
319  cout << setfill('0') << hex
320  << "[" << setw(8) << iWord32*4 << "] "
321  << setw(4) << (pData[iWord32+1]>>16 & 0xFFFF) << " "
322  << setw(4) << (pData[iWord32+1]>>0 & 0xFFFF) << " "
323  << setw(4) << (pData[iWord32]>>16 & 0xFFFF) << " "
324  << setw(4) << (pData[iWord32]>>0 & 0xFFFF) << " "
325  << setfill(' ') << dec
326  << s.str() << "\n";
327  }
328  }
329 
330  if(iFed==1){
331  refDccId = dccId_;
332  } else{
333  if(dccId_!=refDccId){
334  dccIdErr = true;
335  }
336  }
337 
338  if(dump_) cout << flush; //flushing cout before writing to cerr
339 
340  if(srpBx_!=-1 && srpBx_!=bx_){
341  cerr << "Bx discrepancy between SRP and DCC, Bx(SRP) = "
342  << srpBx_ << ", Bx(DCC) = " << bx_
343  << " in " << toNth(iEvent_) << " event, FED "
344  << id << endl;
345  }
346 
347  if(tccBx_!=-1 && tccBx_!=bx_){
348  cerr << "Bx discrepancy between TCC and DCC, Bx(TCC) = "
349  << srpBx_ << ", Bx(DCC) = " << bx_
350  << " in " << toNth(iEvent_) << " event, FED "
351  << id << endl;
352  }
353 
354  bool feBxErr = false;
355  for(int i=0; i < nRu_; ++i){
356  int expectedFeBx;
357  if(feBxOffset==0){
358  expectedFeBx = bx_ - 1;
359  } else{
360  expectedFeBx = (bx_==3564) ? 0 : bx_;
361  }
362  if(feBx_[i]!=-1 && feBx_[i]!=expectedFeBx){
363  cerr << "BX error for " << toNth(i+1) << " RU, RU ID "
364  << feRuId_[i];
365  if((unsigned) feRuId_[i] <= dccChStatus_.size()){
366  bool detected = (dccChStatus_[feRuId_[i]-1] == 10 || dccChStatus_[feRuId_[i]-1] == 11);
367  cerr << (detected?" ":" not ") << "detected by DCC (ch status: "
368  << dccChStatus_[feRuId_[i]-1] << ")";
369  }
370  cerr << " in " << toNth(iEvent_) << " event, FED "
371  << id << "." << endl;
372 
373  feBxErr = true;
374  }
375  }
376  if(feBxErr) cerr << "Bx discrepancy between DCC and at least one FE"
377  << " in " << toNth(iEvent_) << " event, FED "
378  << id << "\n";
379 
380 
381  int localL1a = l1a_ & 0xFFF;
382  if(srpL1a_!=-1 && srpL1a_!=localL1a){
383  cerr << "Discrepancy between SRP and DCC L1a counter, L1a(SRP) = "
384  << srpL1a_ << ", L1a(DCC) & 0xFFF = " << localL1a
385  << " in " << toNth(iEvent_) << " event, FED "
386  << id << endl;
387 
388  }
389 
390  if(tccL1a_!=-1 && tccL1a_!=localL1a){
391  cerr << "Discrepancy between TCC and DCC L1a counter, L1a(TCC) = "
392  << srpL1a_ << ", L1a(DCC) & 0xFFF = " << localL1a
393  << " in " << toNth(iEvent_) << " event, FED "
394  << id << endl;
395 
396  }
397 
398  bool feL1aErr = false;
399  for(int i=0; i < nRu_; ++i){
400  if(feL1a_[i] != -1 && feL1a_[i] != ((localL1a-1) & 0xFFF)){
401  cerr << "FE L1A error for " << toNth(i+1) << " RU, RU ID "
402  << feRuId_[i];
403  if((unsigned) feRuId_[i] <= dccChStatus_.size()){
404  bool detected = (dccChStatus_[feRuId_[i]-1] == 9 || dccChStatus_[feRuId_[i]-1] == 11);
405  cerr << (detected?" ":" not ") << "detected by DCC (ch status: "
406  << dccChStatus_[feRuId_[i]-1] << ")";
407  }
408  cerr << " in " << toNth(iEvent_) << " event, FED "
409  << id << "." << endl;
410  feL1aErr = true;
411  }
412  }
413  if(feL1aErr) cerr << "Discrepancy in L1a counter between DCC "
414  "and at least one FE (L1A(DCC) & 0xFFF = " << localL1a << ")"
415  << " in " << toNth(iEvent_) << " event, FED "
416  << id << "\n";
417 
418 
419  if(iTow_>0 && iTow_< nRu_ && feRuId_[iTow_] < feRuId_[iTow_-1]){
420  cerr << "Error in RU ID (TT/SC ID)"
421  << " in " << toNth(iEvent_) << " event, FED "
422  << id << endl;
423  }
424 
425  if (beg_fed_id_ <= id && id <= end_fed_id_ && writeDcc_){
426  dumpFile_.write( reinterpret_cast <const char *> (pData), nWord32*4);
427  }
428 
429  if(dump_) cout << "\n";
430  } else{
431  // cout << "No data for FED " << id << ". Size = "
432  // << data.size() << " byte(s).\n";
433  }
434  } //next fed
435 
436  if(dump_) cout << "Number of selected FEDs with a data block: "
437  << iFed << "\n";
438 
439  if(dccIdErr){
440  cout << flush;
441  cerr << "DCC ID discrepancy in detailed trigger type "
442  << " of " << toNth(iEvent_) << " event." << endl;
443  }
444 
445 #endif
446 
447  gettimeofday(&stop, 0);
448  // double dt = (stop.tv_sec-start.tv_sec)*1.e3
449  // + (stop.tv_usec-start.tv_usec)*1.e-3;
450  // histo_.fillD("hCodeTime", "Code execution time;Duration (ms);Event count",
451  // PGXAxis(100, 0, 100),
452  // dt);
453 }
std::string toNth(int n)
Definition: EcalDumpRaw.cc:455
edm::EDGetTokenT< FEDRawDataCollection > fedRawDataCollectionToken_
Definition: EcalDumpRaw.h:187
int end_fed_id_
Definition: EcalDumpRaw.h:94
static const int nRu_
Definition: EcalDumpRaw.h:169
bool l1aHistory_
Definition: EcalDumpRaw.h:113
int first_event_
Definition: EcalDumpRaw.h:95
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
unsigned minEventId_
Definition: EcalDumpRaw.h:147
bool writeDcc_
Definition: EcalDumpRaw.h:92
bool decode(const uint32_t *data, int iWord32, std::ostream &out)
Definition: EcalDumpRaw.cc:479
std::vector< unsigned > eventList_
Definition: EcalDumpRaw.h:146
std::vector< int > feL1a_
Definition: EcalDumpRaw.h:170
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
std::vector< int > feBx_
Definition: EcalDumpRaw.h:175
unsigned maxEventId_
Definition: EcalDumpRaw.h:148
std::ofstream dumpFile_
Definition: EcalDumpRaw.h:178
std::vector< int > nTpgs_
Definition: EcalDumpRaw.h:160
bool isValid() const
Definition: HandleBase.h:74
static int lastFEDId()
Definition: FEDNumbering.cc:17
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:74
edm::EDGetTokenT< L1AcceptBunchCrossingCollection > l1AcceptBunchCrossingCollectionToken_
Definition: EcalDumpRaw.h:188
int tccType_
type of TCC currently parsed
Definition: EcalDumpRaw.h:174
std::vector< int > dccChStatus_
Definition: EcalDumpRaw.h:161
std::vector< int > feRuId_
Definition: EcalDumpRaw.h:176
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
const int feBxOffset
Definition: EcalDumpRaw.cc:33
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
unsigned eventId_
Definition: EcalDumpRaw.h:145
int beg_fed_id_
Definition: EcalDumpRaw.h:93
unsigned dccId_
Definition: EcalDumpRaw.h:143
int last_event_
Definition: EcalDumpRaw.h:96
void EcalDumpRaw::analyzeApd ( )
private
void EcalDumpRaw::analyzeEB ( const edm::Event ,
const edm::EventSetup  
) const
void EcalDumpRaw::analyzeEE ( const edm::Event ,
const edm::EventSetup  
) const
void EcalDumpRaw::analyzeFed ( int  fedId)
private
bool EcalDumpRaw::decode ( const uint32_t *  data,
int  iWord32,
std::ostream &  out 
)
private

Definition at line 479 of file EcalDumpRaw.cc.

References adc_, amplCut_, bx_, MessageLogger_cfi::cerr, colorNames, gather_cfg::cout, edmIntegrityCheck::d, pyrootRender::da, MergeFilesAndCalculateEfficiencies_cfg::dataType, dccCh_, dccChStatus_, dccId_, TauDecayModes::dec, detailedTrigNames, detailedTrigType_, dump_, dumpAdc_, ebmTcc_, ebpTcc_, eeInnerTcc_, eeOuterTcc_, feBx_, fedId_, fedStart_, feL1a_, feRuId_, lumiContext::fill, g, mps_fire::i, createfilelist::int, iRu_, iSrWord64_, iTcc_, iTccWord64_, iTowerWord64_, l1a_, lastOrbit_, hpstanc_transforms::max, max(), maxTccsPerDcc_, maxTpgsPerTcc_, mgpaGainFactors, min(), nDccs_, nRu_, nTpgs_, nTts_, orbit0_, orbit0Set_, orbit_, alignCSCRings::s, side_, sideOfRu(), simpleTrigType_, srpBx_, srpL1a_, srRange(), tccBlockLen64_, tccId_, tccL1a_, tccType_, towerBlockLength_, tpg_, tpgTag(), trigNames, ttfTag(), and ttsNames.

Referenced by analyze().

479  {
480  bool rc = true;
481  const bool d = dump_;
482  if(iWord64==0){//start of event
483  iSrWord64_ = 0;
484  iTccWord64_ = 0;
485  iTowerWord64_ = 0;
486  }
487  int dataType = (data[1] >>28) & 0xF;
488  const int boe = 5;
489  const int eoe = 10;
490  if(dataType==boe){//Begin of Event header
491  /**********************************************************************
492  * DAQ header
493  *
494  **********************************************************************/
495  simpleTrigType_ = (data[1] >>24) & 0xF;
496  l1a_ = (data[1]>>0 ) & 0xFFffFF;
497  bx_ = (data[0] >>20) & 0xFFF;
498  fedId_ = (data[0] >>8 ) & 0xFFF;
499  if(d) out << "Trigger type: " << simpleTrigType_
500  << "(" << trigNames[(data[1]>>24) & 0xF] << ")"
501  << " L1A: " << l1a_
502  << " BX: " << bx_
503  << " FED ID: " << fedId_
504  << " FOV: " << ((data[0] >>4 ) & 0xF)
505  << " H: " << ((data[0] >>3 ) & 0x1);
506  } else if((dataType>>2)==0){//DCC header
507  /**********************************************************************
508  * ECAL DCC header
509  *
510  **********************************************************************/
511  int dccHeaderId = (data[1] >>24) & 0x3F;
512  switch(dccHeaderId){
513  case 1:
514  if(d) out << "Run #: " << ((data[1] >>0 ) & 0xFFFFFF)
515  << " DCC Err: " << ((data[0] >>24) & 0xFF)
516  << " Evt Len: " << ((data[0] >>0 ) & 0xFFFFFF);
517  break;
518  case 2:
519  side_ = (data[1] >>11) & 0x1;
520  detailedTrigType_ = (data[1] >>8 ) & 0x7;
521  dccId_ = (data[1] >>0 ) & 0x3F;
522  if(d) out << "DCC FOV: " << ((data[1] >>16) & 0xF)
523  << " Side: " << side_
524  << " Trig.: " << detailedTrigType_
525  << " (" << detailedTrigNames[(data[1]>>8)&0x7] << ")"
526  << " Color: " << ((data[1] >>6 ) & 0x3)
527  << " (" << colorNames[(data[1]>>6)&0x3] << ")"
528  << " DCC ID: " << dccId_;
529  break;
530  case 3:
531  {
532  if(d) out << "TCC Status ch<4..1>: 0x"
533  << hex << ((data[1]>>8) & 0xFFFF) << dec
534  << " SR status: " << ((data[1] >>4 ) & 0xF)
535  << " TZS: " << ((data[1] >>2 ) & 0x1)
536  << " ZS: " << ((data[1] >>1 ) & 0x1)
537  << " SR: " << ((data[1] >>0 ) & 0x1);
538  orbit_ = data[0];
539  if(d) out << " Orbit: " << orbit_;
540  if(!orbit0Set_){
541  orbit0_ = orbit_;
542  orbit0Set_ = true;
543  }
544  int iDcc0 = fedId_-fedStart_;
545  if((unsigned)iDcc0<nDccs_){
547  if(d) out << " (+" << (int)orbit_-(int)lastOrbit_[iDcc0] <<")";
548  }
549  lastOrbit_[iDcc0] = orbit_;
550  }
551  }
552  break;
553  case 4:
554  case 5:
555  case 6:
556  case 7:
557  case 8:
558  {
559  int chOffset = (dccHeaderId-4)*14;
560  dccChStatus_[13+chOffset] = ((data[1] >>20) & 0xF);
561  dccChStatus_[12+chOffset] = ((data[1] >>16) & 0xF);
562  dccChStatus_[11+chOffset] = ((data[1] >>12) & 0xF);
563  dccChStatus_[10+chOffset] = ((data[1] >>8 ) & 0xF);
564  dccChStatus_[ 9+chOffset] = ((data[1] >>4 ) & 0xF);
565  dccChStatus_[ 8+chOffset] = ((data[1] >>0) & 0xF);
566  dccChStatus_[ 7+chOffset] = ((data[0] >>28) & 0xF);
567  dccChStatus_[ 6+chOffset] = ((data[0] >>24) & 0xF);
568  dccChStatus_[ 5+chOffset] = ((data[0] >>20) & 0xF);
569  dccChStatus_[ 4+chOffset] = ((data[0] >>16) & 0xF);
570  dccChStatus_[ 3+chOffset] = ((data[0] >>12) & 0xF);
571  dccChStatus_[ 2+chOffset] = ((data[0] >>8 ) & 0xF);
572  dccChStatus_[ 1+chOffset] = ((data[0] >>4 ) & 0xF);
573  dccChStatus_[ 0+chOffset] = ((data[0] >>0 ) & 0xF);
574 
575  if(d){
576  out << "FE CH status:";
577  for(int i = chOffset; i < chOffset + 14; ++i){
578  out << " #" << (i+1) << ":" << dccChStatus_[i];
579  }
580  }
581  }
582  break;
583  default:
584  if(d) out << " bits<63..62>=0 (DCC header) bits<61..56>=" << dccHeaderId
585  << "(unknown=>ERROR?)";
586  }
587  } else if((dataType>>1)==3){//TCC block
588  /**********************************************************************
589  * TCC block
590  *
591  **********************************************************************/
592  if(iTccWord64_==0){
593  //header
594  tccL1a_ = (data[1] >>0 ) & 0xFFF;
595  tccId_ = ((data[0] >>0 ) & 0xFF);
596  nTts_ = ((data[1] >>16) & 0x7F);
598  ++iTcc_;
599  if(d) out << "LE1: " << ((data[1] >>28) & 0x1)
600  << " LE0: " << ((data[1] >>27) & 0x1)
601  << " N_samples: " << ((data[1] >>23) & 0x1F)
602  << " N_TTs: " << nTts_
603  << " E1: " << ((data[1] >>12) & 0x1)
604  << " L1A: " << tccL1a_
605  << " '3': " << ((data[0] >>29) & 0x7)
606  << " E0: " << ((data[0] >>28) & 0x1)
607  << " Bx: " << ((data[0] >>16) & 0xFFF)
608  << " TTC ID: " << tccId_;
609  if(nTts_==68){ //EB TCC (TCC68)
610  if(fedId_ < 628) tccType_ = ebmTcc_;
611  else tccType_ = ebpTcc_;
612  } else if(nTts_ == 16){//Inner EE TCC (TCC48)
614  } else if(nTts_ == 28){//Outer EE TCC (TCC48)
616  } else {
617  cout << flush;
618  cerr << "Error in #TT field of TCC block."
619  "This field is normally used to determine type of TCC "
620  "(TCC48 or TCC68). Type of TCC will be deduced from the TCC ID.\n";
621  if(tccId_ < 19) tccType_ = eeInnerTcc_;
622  else if(tccId_ < 37) tccType_ = eeOuterTcc_;
623  else if(tccId_ < 55) tccType_ = ebmTcc_;
624  else if(tccId_ < 73) tccType_ = ebpTcc_;
625  else if(tccId_ < 91) tccType_ = eeOuterTcc_;
626  else if(tccId_ < 109) tccType_ = eeInnerTcc_;
627  else{
628  cerr << "TCC ID is also invalid. EB- TCC type will be assumed.\n";
629  tccType_ = ebmTcc_;
630  }
631  cerr << flush;
632  }
633  tccBlockLen64_ = (tccType_==ebmTcc_ || tccType_==ebpTcc_) ? 18 : 9;
634  } else{// if(iTccWord64_<18){
635  int tpgOffset = (iTccWord64_-1)*4;
636  if(iTcc_ > maxTccsPerDcc_){
637  out << "Too many TCC blocks";
638  } else if(tpgOffset > (maxTpgsPerTcc_ - 4)){
639  out << "Too many TPG in one TCC block";
640  } else{
641  tpg_[iTcc_-1][3+tpgOffset] = (data[1] >>16) & 0x1FF;
642  tpg_[iTcc_-1][2+tpgOffset] = (data[1] >>0 ) & 0x1FF;
643  tpg_[iTcc_-1][1+tpgOffset] = (data[0] >>16) & 0x1FF;
644  tpg_[iTcc_-1][0+tpgOffset] = (data[0] >>0 ) & 0x1FF;
645  //int n[2][4] = {{1,2,3,4},
646  // {4,3,2,1}};
647  //int iorder = (628<=fedId_ && fedId_<=645)?1:0;
648  if(d) out << ttfTag(tccType_, 3+tpgOffset) << ":" //"TTF# " << setw(2) << ttId_[3 + tpgOffset] << ":"
649  << ((data[1] >>25) & 0x7) << " "
650  << tpgTag(tccType_, 3+tpgOffset) << ":" //" TPG# "<< setw(2) << ttId_[3 + tpgOffset] << ":"
651  << setw(3) << tpg_[iTcc_-1][3+tpgOffset] << " "
652  << ttfTag(tccType_, 2+tpgOffset) << ":" //" TTF# "<< setw(2) << ttId_[2 + tpgOffset] << ":"
653  << ((data[1] >>9 ) & 0x7) << " "
654  << tpgTag(tccType_, 2+tpgOffset) << ":" //" TPG# "<< setw(2) << ttId_[2 + tpgOffset] << ":"
655  << setw(3) << tpg_[iTcc_-1][2+tpgOffset] << " "
656  << " '3': " << ((data[0] >>29) & 0x7) << " "
657  << ttfTag(tccType_, 1+tpgOffset) << ":" //" TTF# "<< setw(2) << ttId_[1 + tpgOffset] << ":"
658  << ((data[0] >>25) & 0x7) << " "
659  << setw(3) << tpgTag(tccType_, 1+tpgOffset) << ": "//" TPG# "<< setw(2) << ttId_[1 + tpgOffset] << ":"
660  << tpg_[iTcc_-1][1+tpgOffset] << " "
661  << ttfTag(tccType_, 0+tpgOffset) << ":" //" TTF# "<< setw(2) << ttId_[0 + tpgOffset] << ":"
662  << ((data[0] >>9 ) & 0x7) << " "
663  << setw(3) << tpgTag(tccType_, 0+tpgOffset) << ":" //" TPG# "<< setw(2) << ttId_[0 + tpgOffset] << ":"
664  << tpg_[iTcc_-1][0+tpgOffset];
665  }
666  }// else{
667  // if(d) out << "ERROR";
668  //}
669  ++iTccWord64_;
670  if(iTccWord64_ >= (unsigned)tccBlockLen64_) iTccWord64_ = 0;
671  } else if((dataType>>1)==4){//SRP block
672  /**********************************************************************
673  * SRP block
674  *
675  **********************************************************************/
676  if(iSrWord64_==0){//header
677  srpL1a_ = (data[1] >>0 ) & 0xFFF;
678  srpBx_ = (data[0] >>16) & 0xFFF;
679  if(d) out << "LE1: " << ((data[1] >>28) & 0x1)
680  << " LE0: " << ((data[1] >>27) & 0x1)
681  << " N_SRFs: " << ((data[1] >>16) & 0x7F)
682  << " E1: " << ((data[1] >>12) & 0x1)
683  << " L1A: " << srpL1a_
684  << " '4': " << ((data[0] >>29) & 0x7)
685  << " E0: " << ((data[0] >>28) & 0x1)
686  << " Bx: " << srpBx_
687  << " SRP ID: " << ((data[0] >>0 ) & 0xFF);
688  } else if(iSrWord64_<6){
689  int ttfOffset = (iSrWord64_-1)*16;
690  if(d){
691  if(iSrWord64_<5){
692  out <<"SRF# " << setw(6) << right << srRange(12+ttfOffset)/*16+ttfOffset << "..#" << 13+ttfOffset*/ << ": "
693  << oct << ((data[1] >>16) & 0xFFF) << dec
694  << " SRF# " << srRange(8+ttfOffset) /*12+ttfOffset << "..#" << 9+ttfOffset*/ << ": "
695  << oct << ((data[1] >>0 ) & 0xFFF) << dec
696  << " '4':" << ((data[0] >>29) & 0x7)
697  << " SRF# " << srRange(4+ttfOffset) /*8+ttfOffset << "..#" << 5+ttfOffset*/ << ": "
698  << oct << ((data[0] >>16) & 0xFFF) << dec;
699  } else{//last 64-bit word has only 4 SRFs.
700  out << " ";
701  }
702  out << " SRF# " << srRange(ttfOffset) /*4+ttfOffset << "..#" << 1+ttfOffset*/ << ": "
703  << oct << ((data[0] >>0 ) & 0xFFF) << dec;
704  }
705  } else{
706  if(d) out << "ERROR";
707  }
708  ++iSrWord64_;
709  } else if((dataType>>2)==3){//Tower block
710  /**********************************************************************
711  * "Tower" block (crystal channel data from a RU (=1 FE cards))
712  *
713  **********************************************************************/
714  if(iTowerWord64_==0){//header
715  towerBlockLength_ = (data[1]>>16) & 0x1FF;
716  int l1a;
717  int bx;
718  l1a = (data[1] >>0 ) & 0xFFF;
719  bx = (data[0] >>16) & 0xFFF;
720  dccCh_=(data[0] >>0 ) & 0xFF;
721  if(d) out << "Block Len: " << towerBlockLength_
722  << " E1: " << ((data[1] >>12) & 0x1)
723  << " L1A: " << l1a
724  << " '3': " << ((data[0] >>30) & 0x3)
725  << " E0: " << ((data[0] >>28) & 0x1)
726  << " Bx: " << bx
727  << " N_samples: " << ((data[0] >>8 ) & 0x7F)
728  << " RU ID: " << dccCh_;
729  if(iRu_ < nRu_){
730  feL1a_[iRu_] = l1a;
731  feBx_[iRu_] = bx;
732  feRuId_[iRu_] = dccCh_;
733  ++iRu_;
734  }
735  } else if((unsigned)iTowerWord64_<towerBlockLength_){
736  if(!dumpAdc_){
737  //no output.
738  rc = false;
739  }
740  const bool da = dumpAdc_ && dump_;
741  switch((iTowerWord64_-1)%3){
742  int s[4];
743  int g[4];
744  case 0:
745  s[0]=(data[0] >>16) & 0xFFF;
746  g[0]=(data[0] >>28) & 0x3;
747  s[1]=(data[1] >>0 ) & 0xFFF;
748  g[1]=(data[1] >>12) & 0x3;
749  s[2]=(data[1] >>16) & 0xFFF;
750  g[2]=(data[1] >>28) & 0x3;
751  fill(adc_.begin(), adc_.end(), 0.);
752  if(da) out << "GMF: " << ((data[0] >>11) & 0x1)
753  << " SMF: " << ((data[0] >>9 ) & 0x1)
754  << " M: " << ((data[0] >>8 ) & 0x1)
755  << " XTAL: " << ((data[0] >>4 ) & 0x7)
756  << " STRIP: " << ((data[0] >>0 ) & 0x7)
757  << " " << setw(4) << s[0]
758  << "G" << g[0]
759  << " " << setw(4) << s[1]
760  << "G" << g[1]
761  << " " << setw(4) << s[2]
762  << "G" << g[2];
763  for(int i=0; i<3; ++i) adc_[i] = s[i]*mgpaGainFactors[g[i]];
764  break;
765  case 1:
766  s[0]=(data[0] >>0 ) & 0xFFF;
767  g[0]=(data[0] >>12) & 0x3;
768  s[1]=(data[0] >>16) & 0xFFF;
769  g[1]=(data[0] >>28) & 0x3;
770  s[2]=(data[1] >>0 ) & 0xFFF;
771  g[2]=(data[1] >>12) & 0x3;
772  s[3]=(data[1] >>16) & 0xFFF;
773  g[3]=(data[1] >>28) & 0x3;
774  if(da) out << " "
775  << " " << setw(4) << s[0]
776  << "G" << g[0]
777  << " " << setw(4) << s[1]
778  << "G" << g[1]
779  << " " << setw(4) << s[2]
780  << "G" << g[2]
781  << " " << setw(4) << s[3]
782  << "G" << g[3];
783  for(int i=0; i<4; ++i) adc_[i+3] = s[i]*mgpaGainFactors[g[i]];
784  break;
785  case 2:
786  if(da) out << "TZS: " << ((data[1] >>14) & 0x1);
787 
788  s[0]=(data[0] >>0 ) & 0xFFF;
789  g[0]=(data[0] >>12) & 0x3;
790  s[1]=(data[0] >>16) & 0xFFF;
791  g[1]=(data[0] >>28) & 0x3;
792  s[2]=(data[1] >>0 ) & 0xFFF;
793  g[2]=(data[1] >>12) & 0x3 ;
794 
795  for(int i=0; i<3; ++i) adc_[i+7] = s[i]*mgpaGainFactors[g[i]];
796  if(dccCh_<=68){
797  unsigned bom0; //Bin of Maximum, starting counting from 0
798  double ampl = max(adc_, bom0)-min(adc_);
799  if(da) out << " Ampl: " << setw(4) << ampl
800  << (ampl>amplCut_?"*":" ")
801  << " BoM:" << setw(2) << (bom0+1)
802  << " ";
803  if(fedId_ == dccId_ + 600 //block of the read-out SM
804  //if laser, only one side:
805  && (detailedTrigType_!=4 || sideOfRu(dccCh_)==(int)side_)
806  ){
807  }
808  } else{
809  if(da) out << setw(29) << "";
810  }
811  if(da) out << " " << setw(4) << s[0]
812  << "G" << g[0]
813  << " " << setw(4) << s[1]
814  << "G" << g[1]
815  << " " << setw(4) << s[2]
816  << "G" << g[2];
817  break;
818  default:
819  assert(false);
820  }
821  } else {
822  if(d) out << "ERROR";
823  }
824  ++iTowerWord64_;
827  ++dccCh_;
828  }
829  } else if(dataType==eoe){//End of event trailer
830  /**********************************************************************
831  * Event DAQ trailer
832  *
833  **********************************************************************/
834  int tts = (data[0] >>4) & 0xF;
835  if(d) out << "Evt Len.: " << ((data[1] >>0 ) & 0xFFFFFF)
836  << " CRC16: " << ((data[0] >>16) & 0xFFFF)
837  << " Evt Status: " << ((data[0] >>8 ) & 0xF)
838  << " TTS: " << tts
839  << " (" << ttsNames[tts] << ")"
840  << " T:" << ((data[0] >>3) & 0x1);
841  } else{
842  if(d) out << " incorrect 64-bit word type marker (see MSBs)";
843  }
844  return rc;
845 }
int tccBlockLen64_
Definition: EcalDumpRaw.h:168
static int sideOfRu(int ru1)
Definition: EcalDumpRaw.cc:882
std::string tpgTag(int tccType, unsigned iSeq) const
Definition: EcalDumpRaw.cc:947
unsigned iTowerWord64_
Definition: EcalDumpRaw.h:100
static const int nRu_
Definition: EcalDumpRaw.h:169
static const unsigned fedStart_
Definition: EcalDumpRaw.h:123
bool orbit0Set_
Definition: EcalDumpRaw.h:151
size_t towerBlockLength_
Definition: EcalDumpRaw.h:105
std::string ttfTag(int tccType, unsigned iSeq) const
Definition: EcalDumpRaw.cc:930
int detailedTrigType_
Definition: EcalDumpRaw.h:155
double min(const std::vector< double > &a)
Definition: EcalDumpRaw.h:61
std::vector< double > adc_
Definition: EcalDumpRaw.h:107
double amplCut_
Definition: EcalDumpRaw.h:110
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
std::vector< uint32_t > lastOrbit_
Definition: EcalDumpRaw.h:121
unsigned side_
Definition: EcalDumpRaw.h:144
std::vector< int > feL1a_
Definition: EcalDumpRaw.h:170
static const char *const ttsNames[]
Definition: EcalDumpRaw.cc:103
static const int eeOuterTcc_
Definition: EcalDumpRaw.h:134
uint32_t orbit_
Definition: EcalDumpRaw.h:150
std::vector< int > feBx_
Definition: EcalDumpRaw.h:175
static const int ebmTcc_
Definition: EcalDumpRaw.h:131
unsigned iTccWord64_
Definition: EcalDumpRaw.h:102
std::vector< int > nTpgs_
Definition: EcalDumpRaw.h:160
static const char *const detailedTrigNames[]
Definition: EcalDumpRaw.cc:85
unsigned iSrWord64_
Definition: EcalDumpRaw.h:101
std::vector< std::vector< int > > tpg_
Definition: EcalDumpRaw.h:159
unsigned fedId_
Definition: EcalDumpRaw.h:142
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:74
std::string srRange(int offset) const
Definition: EcalDumpRaw.cc:913
static const double mgpaGainFactors[]
Definition: EcalDumpRaw.cc:126
int tccType_
type of TCC currently parsed
Definition: EcalDumpRaw.h:174
int simpleTrigType_
Definition: EcalDumpRaw.h:154
std::vector< int > dccChStatus_
Definition: EcalDumpRaw.h:161
static const char *const colorNames[]
Definition: EcalDumpRaw.cc:96
static const int eeInnerTcc_
Definition: EcalDumpRaw.h:133
std::vector< int > feRuId_
Definition: EcalDumpRaw.h:176
static const int maxTpgsPerTcc_
Definition: EcalDumpRaw.h:124
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
unsigned orbit0_
Definition: EcalDumpRaw.h:149
static const unsigned nDccs_
Definition: EcalDumpRaw.h:122
static const int maxTccsPerDcc_
Definition: EcalDumpRaw.h:125
double max(const std::vector< double > &a, unsigned &pos)
Definition: EcalDumpRaw.h:53
unsigned dccId_
Definition: EcalDumpRaw.h:143
static const int ebpTcc_
Definition: EcalDumpRaw.h:132
void EcalDumpRaw::endJob ( void  )

Definition at line 204 of file EcalDumpRaw.cc.

204  {
205 }
int EcalDumpRaw::lmodOfRu ( int  ru1)
staticprivate

Definition at line 900 of file EcalDumpRaw.cc.

Referenced by toString().

900  {
901  int iEta0 = (ru1-1)/4;
902  int iPhi0 = (ru1-1)%4;
903  int rs;
904  if(iEta0==0){
905  rs = 1;
906  } else{
907  rs = 2 + ((iEta0-1)/4)*2 + (iPhi0%4)/2;
908  }
909  // cout << "ru1 = " << ru1 << " -> lmod = " << rs << "\n";
910  return rs;
911 }
double EcalDumpRaw::max ( const std::vector< double > &  a,
unsigned &  pos 
)
inlineprivate

Definition at line 53 of file EcalDumpRaw.h.

References mps_fire::i, and funct::m.

Referenced by decode(), and srRange().

53  {
54  pos = 0;
55  double m = a[pos];
56  for(unsigned i = 1; i < a.size(); ++i){
57  if(a[i]>m){ m = a[i]; pos = i;}
58  }
59  return m;
60  }
double a
Definition: hdecay.h:121
double EcalDumpRaw::min ( const std::vector< double > &  a)
inlineprivate

Definition at line 61 of file EcalDumpRaw.h.

References mps_fire::i, and funct::m.

Referenced by decode(), and srRange().

61  {
62  double m = a[0];
63  for(unsigned i = 1; i < a.size(); ++i){
64  if(a[i]<m) m = a[i];
65  }
66  return m;
67  }
double a
Definition: hdecay.h:121
int EcalDumpRaw::modOfRu ( int  ru1)
staticprivate

Definition at line 891 of file EcalDumpRaw.cc.

Referenced by toString().

891  {
892  int iEta0 = (ru1-1)/4;
893  if(iEta0<5){
894  return 1;
895  } else{
896  return 2 + (iEta0-5)/4;
897  }
898 }
int EcalDumpRaw::sideOfRu ( int  ru1)
staticprivate

Definition at line 882 of file EcalDumpRaw.cc.

Referenced by decode(), and toString().

882  {
883  if(ru1 < 5 || (ru1-5)%4 >= 2){
884  return 0;
885  } else{
886  return 1;
887  }
888 }
std::string EcalDumpRaw::srRange ( int  offset) const
private

Definition at line 913 of file EcalDumpRaw.cc.

References fedId_, max(), min(), and alignCSCRings::s.

Referenced by decode(), and toString().

913  {
914  int min = offset+1;
915  int max = offset+4;
916  stringstream buf;
917  if(628 <= fedId_ && fedId_ <= 646){//EB+
918  buf << right << min << ".."
919  << left << max;
920  } else{
921  buf << right << max << ".."
922  << left << min;
923  }
924  string s = buf.str();
925  buf.str("");
926  buf << setw(6) << right << s;
927  return buf.str();
928 }
double min(const std::vector< double > &a)
Definition: EcalDumpRaw.h:61
unsigned fedId_
Definition: EcalDumpRaw.h:142
double max(const std::vector< double > &a, unsigned &pos)
Definition: EcalDumpRaw.h:53
string EcalDumpRaw::toNth ( int  n)
private

Definition at line 455 of file EcalDumpRaw.cc.

References gen::n, and alignCSCRings::s.

Referenced by analyze().

455  {
456  stringstream s;
457  s << n;
458  if(n%100<10 || n%100>20){
459  switch(n%10){
460  case 1:
461  s << "st";
462  break;
463  case 2:
464  s << "nd";
465  break;
466  case 3:
467  s << "rd";
468  break;
469  default:
470  s << "th";
471  }
472  } else{
473  s << "th";
474  }
475  return s.str();
476 }
template<class T >
std::string EcalDumpRaw::toString ( T  val)
inlineprivate
std::string EcalDumpRaw::tpgTag ( int  tccType,
unsigned  iSeq 
) const
private

Definition at line 947 of file EcalDumpRaw.cc.

References Exception, ecaldqm::ttId(), and ttId_.

Referenced by decode(), and toString().

947  {
948  if((unsigned)iSeq > sizeof(ttId_))
949  throw cms::Exception("OutOfRange")
950  << __FILE__ << ":" << __LINE__ << ": "
951  << "parameter out of range\n";
952 
953  const int ttId = ttId_[tccType][iSeq];
954  stringstream buf;
955  buf.str("");
956  if(ttId==0){
957  buf << " '0'";
958  } else{
959  buf << "TPG# " << setw(2) << ttId;
960  }
961  return buf.str();
962 }
unsigned ttId(DetId const &)
static const int ttId_[nTccTypes_][maxTpgsPerTcc_]
Definition: EcalDumpRaw.h:140
std::string EcalDumpRaw::ttfTag ( int  tccType,
unsigned  iSeq 
) const
private

Definition at line 930 of file EcalDumpRaw.cc.

References Exception, ecaldqm::ttId(), and ttId_.

Referenced by decode(), and toString().

930  {
931  if((unsigned)iSeq > sizeof(ttId_))
932  throw cms::Exception("OutOfRange")
933  << __FILE__ << ":" << __LINE__ << ": "
934  << "parameter out of range\n";
935 
936  const int ttId = ttId_[tccType][iSeq];
937  stringstream buf;
938  buf.str("");
939  if(ttId==0){
940  buf << " '0'";
941  } else{
942  buf << "TTF# " << setw(2) << ttId;
943  }
944  return buf.str();
945 }
unsigned ttId(DetId const &)
static const int ttId_[nTccTypes_][maxTpgsPerTcc_]
Definition: EcalDumpRaw.h:140

Member Data Documentation

std::vector<double> EcalDumpRaw::adc_
private

Definition at line 107 of file EcalDumpRaw.h.

Referenced by decode().

double EcalDumpRaw::amplCut_
private

Definition at line 110 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::beg_fed_id_
private

Definition at line 93 of file EcalDumpRaw.h.

Referenced by analyze(), and EcalDumpRaw().

int EcalDumpRaw::bx_
private

Definition at line 152 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

int EcalDumpRaw::dccCh_
private

Definition at line 120 of file EcalDumpRaw.h.

Referenced by decode().

std::vector<int> EcalDumpRaw::dccChStatus_
private

Definition at line 161 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

unsigned EcalDumpRaw::dccId_
private

Definition at line 143 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

enum { ... } EcalDumpRaw::decodeState_
int EcalDumpRaw::detailedTrigType_
private

Definition at line 155 of file EcalDumpRaw.h.

Referenced by decode().

bool EcalDumpRaw::dump_
private

Definition at line 111 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

bool EcalDumpRaw::dumpAdc_
private

Definition at line 112 of file EcalDumpRaw.h.

Referenced by decode().

std::ofstream EcalDumpRaw::dumpFile_
private

Definition at line 178 of file EcalDumpRaw.h.

Referenced by analyze(), and EcalDumpRaw().

const int EcalDumpRaw::ebmTcc_ = 0
staticprivate

TCC types

Definition at line 131 of file EcalDumpRaw.h.

Referenced by decode().

const int EcalDumpRaw::ebpTcc_ = 1
staticprivate

Definition at line 132 of file EcalDumpRaw.h.

Referenced by decode().

const int EcalDumpRaw::eeInnerTcc_ = 2
staticprivate

Definition at line 133 of file EcalDumpRaw.h.

Referenced by decode().

const int EcalDumpRaw::eeOuterTcc_ = 3
staticprivate

Definition at line 134 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::end_fed_id_
private

Definition at line 94 of file EcalDumpRaw.h.

Referenced by analyze(), and EcalDumpRaw().

unsigned EcalDumpRaw::eventId_
private

Definition at line 145 of file EcalDumpRaw.h.

Referenced by analyze().

std::vector<unsigned> EcalDumpRaw::eventList_
private

Definition at line 146 of file EcalDumpRaw.h.

Referenced by analyze().

std::vector<int> EcalDumpRaw::feBx_
private

Definition at line 175 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

unsigned EcalDumpRaw::fedId_
private

Definition at line 142 of file EcalDumpRaw.h.

Referenced by decode(), and srRange().

edm::InputTag EcalDumpRaw::fedRawDataCollectionTag_
private

Definition at line 185 of file EcalDumpRaw.h.

Referenced by EcalDumpRaw().

edm::EDGetTokenT<FEDRawDataCollection> EcalDumpRaw::fedRawDataCollectionToken_
private

Definition at line 187 of file EcalDumpRaw.h.

Referenced by analyze(), and EcalDumpRaw().

const unsigned EcalDumpRaw::fedStart_ = 601
staticprivate

Definition at line 123 of file EcalDumpRaw.h.

Referenced by decode().

std::vector<int> EcalDumpRaw::feL1a_
private

Definition at line 170 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

std::vector<int> EcalDumpRaw::feRuId_
private

Definition at line 176 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

std::string EcalDumpRaw::filename_
private

Definition at line 97 of file EcalDumpRaw.h.

Referenced by EcalDumpRaw().

int EcalDumpRaw::first_event_
private

Definition at line 95 of file EcalDumpRaw.h.

Referenced by analyze(), and EcalDumpRaw().

int EcalDumpRaw::iEvent_
private

Definition at line 98 of file EcalDumpRaw.h.

Referenced by analyze().

int EcalDumpRaw::iRu_
private

Definition at line 162 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

unsigned EcalDumpRaw::iSrWord64_
private

Definition at line 101 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::iTcc_
private

Definition at line 184 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

unsigned EcalDumpRaw::iTccWord64_
private

Definition at line 102 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::iTow_
private

Definition at line 177 of file EcalDumpRaw.h.

Referenced by analyze().

unsigned EcalDumpRaw::iTowerWord64_
private

Definition at line 100 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::l1a_
private

Definition at line 153 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

edm::InputTag EcalDumpRaw::l1AcceptBunchCrossingCollectionTag_
private

Definition at line 186 of file EcalDumpRaw.h.

Referenced by EcalDumpRaw().

edm::EDGetTokenT<L1AcceptBunchCrossingCollection> EcalDumpRaw::l1AcceptBunchCrossingCollectionToken_
private

Definition at line 188 of file EcalDumpRaw.h.

Referenced by analyze(), and EcalDumpRaw().

bool EcalDumpRaw::l1aHistory_
private

Definition at line 113 of file EcalDumpRaw.h.

Referenced by analyze().

int EcalDumpRaw::l1aMaxX_
private

Definition at line 119 of file EcalDumpRaw.h.

int EcalDumpRaw::l1aMinX_
private

Definition at line 118 of file EcalDumpRaw.h.

std::vector<std::vector<uint32_t> > EcalDumpRaw::l1as_
private

Definition at line 157 of file EcalDumpRaw.h.

int EcalDumpRaw::last_event_
private

Definition at line 96 of file EcalDumpRaw.h.

Referenced by analyze(), and EcalDumpRaw().

std::vector<uint32_t> EcalDumpRaw::lastOrbit_
private

Definition at line 121 of file EcalDumpRaw.h.

Referenced by decode().

unsigned EcalDumpRaw::maxEventId_
private

Definition at line 148 of file EcalDumpRaw.h.

Referenced by analyze().

int EcalDumpRaw::maxEvt_
private

Definition at line 115 of file EcalDumpRaw.h.

const int EcalDumpRaw::maxTccsPerDcc_ = 4
staticprivate

Definition at line 125 of file EcalDumpRaw.h.

Referenced by decode().

const int EcalDumpRaw::maxTpgsPerTcc_ = 68
staticprivate

Definition at line 124 of file EcalDumpRaw.h.

Referenced by decode().

unsigned EcalDumpRaw::minEventId_
private

Definition at line 147 of file EcalDumpRaw.h.

Referenced by analyze().

const unsigned EcalDumpRaw::nDccs_ = 54
staticprivate

Definition at line 122 of file EcalDumpRaw.h.

Referenced by decode().

const int EcalDumpRaw::nRu_ = 70
staticprivate

Definition at line 169 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

const int EcalDumpRaw::nSamples = 10
staticprivate

Definition at line 109 of file EcalDumpRaw.h.

const int EcalDumpRaw::nTccTypes_ = 4
staticprivate

Definition at line 135 of file EcalDumpRaw.h.

std::vector<int> EcalDumpRaw::nTpgs_
private

Definition at line 160 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

int EcalDumpRaw::nTts_
private

Definition at line 166 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

unsigned EcalDumpRaw::orbit0_
private

Definition at line 149 of file EcalDumpRaw.h.

Referenced by decode().

bool EcalDumpRaw::orbit0Set_
private

Definition at line 151 of file EcalDumpRaw.h.

Referenced by decode().

uint32_t EcalDumpRaw::orbit_
private

Definition at line 150 of file EcalDumpRaw.h.

Referenced by decode().

std::vector<std::vector<uint32_t> > EcalDumpRaw::orbits_
private

Definition at line 158 of file EcalDumpRaw.h.

int EcalDumpRaw::profileFedId_
private

Definition at line 116 of file EcalDumpRaw.h.

int EcalDumpRaw::profileRuId_
private

Definition at line 117 of file EcalDumpRaw.h.

bool EcalDumpRaw::pulsePerLme_
private

Definition at line 181 of file EcalDumpRaw.h.

bool EcalDumpRaw::pulsePerLmod_
private

Definition at line 180 of file EcalDumpRaw.h.

bool EcalDumpRaw::pulsePerRu_
private

Definition at line 179 of file EcalDumpRaw.h.

unsigned EcalDumpRaw::side_
private

Definition at line 144 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::simpleTrigType_
private

Definition at line 154 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::srpBx_
private

Definition at line 171 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

int EcalDumpRaw::srpL1a_
private

Definition at line 163 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

int EcalDumpRaw::tccBlockLen64_
private

Definition at line 168 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::tccBx_
private

Definition at line 172 of file EcalDumpRaw.h.

Referenced by analyze().

int EcalDumpRaw::tccId_
private

Definition at line 182 of file EcalDumpRaw.h.

Referenced by decode().

int EcalDumpRaw::tccL1a_
private

Definition at line 164 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

int EcalDumpRaw::tccType_
private

type of TCC currently parsed

Definition at line 174 of file EcalDumpRaw.h.

Referenced by analyze(), and decode().

size_t EcalDumpRaw::towerBlockLength_
private

Definition at line 105 of file EcalDumpRaw.h.

Referenced by decode().

std::vector<std::vector<int> > EcalDumpRaw::tpg_
private

Definition at line 159 of file EcalDumpRaw.h.

Referenced by decode().

const int EcalDumpRaw::ttId_
staticprivate

TT ID in the order the TPG appears in the data

Definition at line 140 of file EcalDumpRaw.h.

Referenced by tpgTag(), and ttfTag().

int EcalDumpRaw::verbosity_
private

Definition at line 91 of file EcalDumpRaw.h.

Referenced by EcalDumpRaw().

bool EcalDumpRaw::writeDcc_
private

Definition at line 92 of file EcalDumpRaw.h.

Referenced by analyze(), and EcalDumpRaw().