CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
MatacqProducer Class Reference

#include <MatacqProducer.h>

Inheritance diagram for MatacqProducer:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  MatacqEventId
 
class  PosEstimator
 
struct  stats_t
 

Public Types

enum  calibTrigType_t { laserType = 4, ledType = 5, tpType = 6, pedType = 7 }
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 MatacqProducer (const edm::ParameterSet &params)
 
virtual void produce (edm::Event &event, const edm::EventSetup &eventSetup)
 
 ~MatacqProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector
< edm::ProductResolverIndex >
const & 
indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- 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 & 
itemsToGetFromEvent () 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

typedef FILE * FILE_t
 
typedef off_t filepos_t
 

Private Member Functions

void addMatacqData (edm::Event &event)
 
int getCalibTriggerType (edm::Event &ev) const
 
bool getMatacqEvent (uint32_t runNumber, int32_t orbitId, bool fileChange)
 
bool getMatacqFile (uint32_t runNumber, uint32_t orbitId, bool *fileChange=0)
 
uint32_t getOrbitId (edm::Event &ev) const
 
uint32_t getRunNumber (edm::Event &ev) const
 
void loadOrbitOffset ()
 
bool mcheck (const std::string &name)
 
void mclose ()
 
bool meof ()
 
bool misOpened ()
 
bool mopen (const std::string &name)
 
bool mread (char *buf, size_t n, const char *mess=0, bool peek=false)
 
bool mrewind ()
 
bool mseek (filepos_t offset, int whence=SEEK_SET, const char *mess=0)
 
bool msize (filepos_t &s)
 
bool mtell (filepos_t &pos)
 
void newRun (int prevRun, int newRun)
 

Static Private Member Functions

static std::string runSubDir (uint32_t runNumber)
 

Private Attributes

std::vector< unsigned char > data_
 
std::string digiInstanceName_
 
bool disabled_
 
bool doOrbitOffset_
 
int eventSkipCounter_
 
int fastRetrievalThresh_
 
std::vector< std::string > fileNames_
 
MatacqDataFormatter formatter_
 
bool ignoreTriggerType_
 
FILE_t inFile_
 
std::string inFileName_
 
edm::InputTag inputRawCollection_
 
edm::EDGetTokenT
< FEDRawDataCollection
inputRawCollectionToken_
 
int32_t lastOrb_
 
std::ofstream logFile_
 
std::string logFileName_
 
bool logTiming_
 
MatacqRawEvent matacq_
 
bool mergeRaw_
 
int onErrorDisablingEvtCnt_
 
uint32_t openedFileRunNumber_
 
std::map< uint32_t, uint32_t > orbitOffset_
 
std::string orbitOffsetFile_
 
PosEstimator posEstim_
 
bool produceDigis_
 
bool produceRaw_
 
std::string rawInstanceName_
 
uint32_t runNumber_
 
timeval startTime_
 
struct MatacqProducer::stats_t stats_
 
std::ofstream timeLog_
 
std::string timeLogFile_
 
timeval timer_
 
bool timing_
 
int verbosity_
 

Static Private Attributes

static const int bufferSize = 30000
 
static const int matacqFedId_ = 655
 
static const int orbitTolerance_ = 80
 
static const stats_t stats_init = {0,0,0}
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDProducer
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

Definition at line 45 of file MatacqProducer.h.

Member Typedef Documentation

typedef FILE* MatacqProducer::FILE_t
private

Definition at line 60 of file MatacqProducer.h.

typedef off_t MatacqProducer::filepos_t
private

Definition at line 59 of file MatacqProducer.h.

Member Enumeration Documentation

Enumerator
laserType 
ledType 
tpType 
pedType 

Definition at line 48 of file MatacqProducer.h.

Constructor & Destructor Documentation

MatacqProducer::MatacqProducer ( const edm::ParameterSet params)
explicit

Constructor

Parameters
paramsseletive readout parameters

Definition at line 65 of file MatacqProducer.cc.

References gather_cfg::cout, digiInstanceName_, doOrbitOffset_, Exception, edm::ParameterSet::getParameter(), inputRawCollectionToken_, loadOrbitOffset(), logFile_, logFileName_, logTiming_, now(), orbitOffsetFile_, fileinputsource_cfi::out, posEstim_, produceDigis_, produceRaw_, rawInstanceName_, startTime_, timeLog_, timeLogFile_, timer_, MatacqProducer::PosEstimator::verbosity(), and verbosity_.

65  :
66  fileNames_(params.getParameter<std::vector<std::string> >("fileNames")),
67  digiInstanceName_(params.getParameter<string>("digiInstanceName")),
68  rawInstanceName_(params.getParameter<string>("rawInstanceName")),
69  timing_(params.getUntrackedParameter<bool>("timing", false)),
70  disabled_(params.getParameter<bool>("disabled")),
71  verbosity_(params.getUntrackedParameter<int>("verbosity", 0)),
72  produceDigis_(params.getParameter<bool>("produceDigis")),
73  produceRaw_(params.getParameter<bool>("produceRaw")),
74  inputRawCollection_(params.getParameter<edm::InputTag>("inputRawCollection")),
75  mergeRaw_(params.getParameter<bool>("mergeRaw")),
76  ignoreTriggerType_(params.getParameter<bool>("ignoreTriggerType")),
77  matacq_(0, 0),
78  inFile_(0),
81  lastOrb_(0),
83  orbitOffsetFile_(params.getUntrackedParameter<std::string>("orbitOffsetFile",
84  "")),
85  inFileName_(""),
87  logFileName_(params.getUntrackedParameter<std::string>("logFileName",
88  "matacqProducer.log")),
90  onErrorDisablingEvtCnt_(params.getParameter<int>("onErrorDisablingEvtCnt")),
91  timeLogFile_(params.getUntrackedParameter<std::string>("timeLogFile", "")),
92  runNumber_(0)
93 {
94  if(verbosity_>=4) cout << "[Matacq " << now() << "] in MatacqProducer ctor" << endl;
95 
96  gettimeofday(&timer_, 0);
97 
98  if(timeLogFile_.size()>0){
99  timeLog_.open(timeLogFile_.c_str());
100  if(timeLog_.fail()){
101  cout << "[LaserSorter " << now() << "] "
102  << "Failed to open file " << timeLogFile_ << " to log timing.\n";
103  logTiming_ = false;
104  } else{
105  logTiming_ = true;
106  }
107  }
108 
110 
111  logFile_.open(logFileName_.c_str(), ios::app | ios::out);
112 
113  if(logFile_.bad()){
114  throw cms::Exception("FileOpen") << "Failed to open file "
115  << logFileName_ << " for logging.\n";
116  }
117 
118  inputRawCollectionToken_ = consumes<FEDRawDataCollection>(params.getParameter<InputTag>("inputRawCollection"));
119 
120 
121  if(produceDigis_){
122  if(verbosity_>0) cout << "[Matacq " << now() << "] registering new "
123  "EcalMatacqDigiCollection product with instance name '"
124  << digiInstanceName_ << "'\n";
125  produces<EcalMatacqDigiCollection>(digiInstanceName_);
126  }
127 
128  if(produceRaw_){
129  if(verbosity_>0) cout << "[Matacq " << now() << "] registering new FEDRawDataCollection "
130  "product with instance name '"
131  << rawInstanceName_ << "'\n";
132  produces<FEDRawDataCollection>(rawInstanceName_);
133  }
134 
135  startTime_.tv_sec = startTime_.tv_usec = 0;
136  if(orbitOffsetFile_.size()>0){
137  doOrbitOffset_ = true;
138  loadOrbitOffset();
139  } else{
140  doOrbitOffset_ = false;
141  }
142  if(verbosity_>=4) cout << "[Matacq " << now() << "] exiting MatacqProducer ctor" << endl;
143 }
std::string inFileName_
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
uint32_t runNumber_
std::ofstream logFile_
std::ofstream timeLog_
std::vector< std::string > fileNames_
std::string digiInstanceName_
struct MatacqProducer::stats_t stats_
edm::EDGetTokenT< FEDRawDataCollection > inputRawCollectionToken_
edm::InputTag inputRawCollection_
std::string orbitOffsetFile_
std::string timeLogFile_
uint32_t openedFileRunNumber_
PosEstimator posEstim_
static const int bufferSize
static std::string now()
MatacqRawEvent matacq_
std::string rawInstanceName_
tuple cout
Definition: gather_cfg.py:145
std::string logFileName_
std::vector< unsigned char > data_
static const stats_t stats_init
MatacqProducer::~MatacqProducer ( )

Destructor

Definition at line 766 of file MatacqProducer.cc.

References gather_cfg::cout, logTiming_, mclose(), now(), startTime_, and t.

766  {
767  mclose();
768  timeval t;
769  gettimeofday(&t, 0);
770  if(logTiming_ && startTime_.tv_sec!=0){
771  //not using logger, to allow timing with different logging options
772  cout << "[Matacq " << now() << "] Time elapsed between first event and "
773  "destruction of MatacqProducer: "
774  << ((t.tv_sec-startTime_.tv_sec)*1.
775  + (t.tv_usec-startTime_.tv_usec)*1.e-6) << "s\n";
776  }
777 }
static std::string now()
tuple cout
Definition: gather_cfg.py:145

Member Function Documentation

void MatacqProducer::addMatacqData ( edm::Event event)
private

Add matacq digi to the event

Parameters
eventthe event
digiInstanceName_name to give to the matacq digi instance

Definition at line 179 of file MatacqProducer.cc.

References bufferSize, filterCSVwithJSON::copy, gather_cfg::cout, data_, digiInstanceName_, doOrbitOffset_, eventSkipCounter_, formatter_, getCalibTriggerType(), MatacqRawEvent::getDccLen(), getMatacqEvent(), getMatacqFile(), getOrbitId(), MatacqRawEvent::getOrbitId(), MatacqRawEvent::getParsedLen(), getRunNumber(), ignoreTriggerType_, inputRawCollectionToken_, MatacqDataFormatter::interpretRawData(), laserType, matacq_, matacqFedId_, mergeRaw_, eostools::move(), MatacqProducer::stats_t::nLaserEventsWithMatacq, MatacqProducer::stats_t::nNonLaserEventsWithMatacq, now(), orbitOffset_, produceDigis_, produceRaw_, rawInstanceName_, convertSQLiteXML::runNumber, stats_, and verbosity_.

Referenced by produce().

179  {
180 
182  event.getByToken(inputRawCollectionToken_, sourceColl);
183 
184  std::unique_ptr<FEDRawDataCollection> rawColl;
185  if(produceRaw_){
186  if(mergeRaw_){
187  rawColl = std::make_unique<FEDRawDataCollection>(*sourceColl);
188  } else{
189  rawColl = std::make_unique<FEDRawDataCollection>();
190  }
191  }
192 
193  auto digiColl = std::make_unique<EcalMatacqDigiCollection>();
194 
195  if(eventSkipCounter_==0){
196  if(sourceColl->FEDData(matacqFedId_).size()>4 && !produceRaw_){
197  //input raw data collection already contains matacqData
198  formatter_.interpretRawData(sourceColl->FEDData(matacqFedId_),
199  *digiColl);
200  } else{
201  bool isLaserEvent = (getCalibTriggerType(event) == laserType);
202 
203 
204  // cout << "---> " << (ignoreTriggerType_?"yes":"no") << " " << getCalibTriggerType(event) << endl;
205 
206  if(isLaserEvent || ignoreTriggerType_){
207 
208  const uint32_t runNumber = getRunNumber(event);
209  const uint32_t orbitId = getOrbitId(event);
210 
211  LogInfo("Matacq") << "Run " << runNumber << "\t Orbit " << orbitId << "\n";
212 
213  bool fileChange;
214  if(doOrbitOffset_){
215  map<uint32_t,uint32_t>::iterator it = orbitOffset_.find(runNumber);
216  if(it == orbitOffset_.end()){
217  LogWarning("Matacq") << "Orbit offset not found for run "
218  << runNumber
219  << ". No orbit correction will be applied.";
220  }
221  }
222 
223  if(getMatacqFile(runNumber, orbitId, &fileChange)){
224  //matacq file retrieval succeeded
225  LogInfo("Matacq") << "Matacq data file found for "
226  << "run " << runNumber << " orbit " << orbitId;
227  if(getMatacqEvent(runNumber, orbitId, fileChange)){
228  if(produceDigis_){
229  formatter_.interpretRawData(matacq_, *digiColl);
230  }
231  if(produceRaw_){
232  uint32_t dataLen64 = matacq_.getParsedLen();
233  if(dataLen64 > bufferSize*8 || matacq_.getDccLen()!= dataLen64){
234  LogWarning("Matacq") << " Error in Matacq event fragment length! "
235  << "DCC len: " << matacq_.getDccLen()
236  << "*8 Bytes, Parsed len: "
237  << matacq_.getParsedLen() << "*8 Bytes. "
238  << "Matacq data will not be included for this event.\n";
239  } else{
240  rawColl->FEDData(matacqFedId_).resize(dataLen64*8);
241  copy(data_.begin(), data_.begin() + dataLen64*8,
242  rawColl->FEDData(matacqFedId_).data());
243  }
244  }
245  LogInfo("Matacq") << "Associating matacq data with orbit id "
246  << matacq_.getOrbitId()
247  << " to dcc event with orbit id "
248  << orbitId << std::endl;
249  if(isLaserEvent){
251  } else{
253  }
254  } else{
255  if(isLaserEvent){
256  LogWarning("Matacq") << "No matacq data found for laser event "
257  << "of run " << runNumber << " orbit "
258  << orbitId;
259  }
260  }
261  } else{
262  LogWarning("Matacq") << "No matacq file found for event "
263  << event.id();
264  }
265  }
266  }
267  if(eventSkipCounter_>0){ //error occured for this events
268  // and some events will be skipped following
269  // to this error.
270  LogInfo("Matacq") << " [" << now() << "] "
272  << " next events will be skipped, following to an "
273  << "error on the last processed event, "
274  << "which is expected to be persistant.";
275  }
276  } else{
278  }
279 
280  if(produceRaw_){
281  if(verbosity_>1) cout << "[Matacq " << now() << "] "
282  << "Adding FEDRawDataCollection collection "
283  << " to event.\n";
284  event.put(std::move(rawColl), rawInstanceName_);
285  }
286 
287  if(produceDigis_){
288  if(verbosity_>1) cout << "[Matacq " << now() << "] "
289  << "Adding EcalMatacqDigiCollection collection "
290  << " to event.\n";
291  event.put(std::move(digiColl), digiInstanceName_);
292  }
293 }
std::map< uint32_t, uint32_t > orbitOffset_
static const int matacqFedId_
static unsigned getOrbitId(unsigned char *data, size_t size)
std::string digiInstanceName_
uint32_t getRunNumber(edm::Event &ev) const
unsigned getDccLen() const
uint32_t getOrbitId(edm::Event &ev) const
struct MatacqProducer::stats_t stats_
edm::EDGetTokenT< FEDRawDataCollection > inputRawCollectionToken_
def move
Definition: eostools.py:510
int getCalibTriggerType(edm::Event &ev) const
MatacqDataFormatter formatter_
static const int bufferSize
static std::string now()
MatacqRawEvent matacq_
std::string rawInstanceName_
void interpretRawData(const FEDRawData &data, EcalMatacqDigiCollection &matacqDigiCollection)
tuple cout
Definition: gather_cfg.py:145
std::vector< unsigned char > data_
bool getMatacqFile(uint32_t runNumber, uint32_t orbitId, bool *fileChange=0)
bool getMatacqEvent(uint32_t runNumber, int32_t orbitId, bool fileChange)
int MatacqProducer::getCalibTriggerType ( edm::Event ev) const
private

Definition at line 646 of file MatacqProducer.cc.

References Majority< T >::add(), FEDRawData::data(), data, Exception, edm::Event::getByToken(), inputRawCollectionToken_, FEDNumbering::inRange(), edm::HandleBase::isValid(), AlCaHLTBitMon_ParallelJobs::p, lumiPlot::rawdata, Majority< T >::result(), and FEDRawData::size().

Referenced by addMatacqData().

646  {
649  if(!(rawdata.isValid())){
650  throw cms::Exception("NotFound")
651  << "No FED raw data collection found. ECAL raw data are "
652  "required to retrieve the trigger type";
653  }
654 
655  Majority<int> stat;
656  for(int id=601; id<=654; ++id){
657  if(!FEDNumbering::inRange(id)) continue;
658  const FEDRawData& data = rawdata->FEDData(id);
659  const int detailedTrigger32 = 5;
660  if(data.size()>=4*(detailedTrigger32+1)){
661  const unsigned char* pTType = data.data() + detailedTrigger32*4;
662  int tType = pTType[1] & 0x7;
663  stat.add(tType);
664  }
665  }
666  double p;
667  int tType = stat.result(&p);
668  if(p<0){
669  //throw cms::Exception("NotFound") << "No ECAL DCC data found\n";
670  LogWarning("NotFound") << "No ECAL DCC data found\n";
671  tType = -1;
672  }
673  if(p<.8){
674  //throw cms::Exception("EventCorruption") << "Inconsitency in detailed trigger type indicated in ECAL DCC data headers\n";
675  LogWarning("EventCorruption") << "Inconsitency in detailed trigger type indicated in ECAL DCC data headers\n";
676  tType = -1;
677  }
678  return tType;
679 }
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
void add(const T &value)
Definition: Majority.h:24
edm::EDGetTokenT< FEDRawDataCollection > inputRawCollectionToken_
bool isValid() const
Definition: HandleBase.h:75
static bool inRange(int)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
dictionary rawdata
Definition: lumiPlot.py:393
T result(double *proba) const
Definition: Majority.h:29
bool MatacqProducer::getMatacqEvent ( uint32_t  runNumber,
int32_t  orbitId,
bool  fileChange 
)
private

Definition at line 342 of file MatacqProducer.cc.

References funct::abs(), gather_cfg::cout, data_, MatacqProducer::PosEstimator::eventLength(), Exception, fastRetrievalThresh_, newFWLiteAna::found, MatacqRawEvent::getDccLen(), MatacqRawEvent::getOrbitId(), MatacqRawEvent::getRunNum(), inFileName_, MatacqProducer::PosEstimator::invalid(), lastOrb_, matacq_, mread(), mrewind(), mseek(), msize(), mtell(), now(), hltrates_dqm_sourceclient-live_cfg::offset, orbitTolerance_, MatacqProducer::PosEstimator::pos(), posEstim_, DTTTrigCorrFirst::run, and verbosity_.

Referenced by addMatacqData().

344  {
345  filepos_t startPos;
346  if(!mtell(startPos)) return false;
347 
348  int32_t startOrb = -1;
349  const size_t headerSize = 8*8;
350  if(mread((char*)&data_[0], headerSize, "Reading matacq header", true)){
351  startOrb = MatacqRawEvent::getOrbitId(&data_[0], headerSize);
352  if(startOrb<0) startOrb = 0;
353  } else{
354  if(verbosity_>2){
355  cout << "[Matacq " << now() << "] Failed to read matacq header. Moved to start of "
356  " the file.\n";
357  }
358  mrewind();
359  if(mread((char*)&data_[0], headerSize, "Reading matacq header", true)){
360  startPos = 0;
361  startOrb = MatacqRawEvent::getOrbitId(&data_[0], headerSize);
362  } else{
363  if(verbosity_>2) cout << "[Matacq " << now() << "] Looks like matacq file is empty"
364  << "\n";
365  return false;
366  }
367  }
368 
369  if(verbosity_>2) cout << "[Matacq " << now() << "] Last read orbit: " << lastOrb_
370  << " looking for orbit " << orbitId
371  << ". Current file position: " << startPos
372  << " Orbit at current position: " << startOrb << "\n";
373 
374  // f.clear();
375  bool didCoarseMove = false;
376 
377  //FIXME: case where posEtim_.invalid() is false
378  if(!posEstim_.invalid()
379  && (abs(lastOrb_-orbitId) > fastRetrievalThresh_)){
380  filepos_t pos = posEstim_.pos(orbitId);
381 
382  // struct stat st;
383  filepos_t fsize;
384  // if(0==stat(inFileName_.c_str(), &st)){
385  if(msize(fsize)){
386  // const int64_t fsize = st.st_size;
387  if(0!=posEstim_.eventLength() && pos > fsize){
388  //estimated position is beyong end of file
389  //-> move to beginning of last event:
390  int64_t evtSize = posEstim_.eventLength()*sizeof(uint64_t);
391  pos = ((int64_t)fsize/evtSize-1)*evtSize;
392  if(verbosity_>2){
393  cout << "[Matacq " << now() << "] Estimated position was beyond end of file. "
394  "Changed to " << pos << "\n";
395  }
396  }
397  } else{
398  LogWarning("Matacq") << "Failed to access file " << inFileName_ << ".";
399  }
400  if(pos>=0){
401  if(verbosity_>2) cout << "[Matacq " << now() << "] jumping to estimated position "
402  << pos << "\n";
403  mseek(pos, SEEK_SET, "Jumping to estimated event position");
404  if(mread((char*)&data_[0], headerSize, "Reading matacq header", true)){
405  didCoarseMove = true;
406  } else{
407  //estimated position might have been beyond the end of the file,
408  //try, with original position:
409  didCoarseMove = false;
410  if(!mread((char*)&data_[0], headerSize, "Reading event header", true)){
411  return false;
412  }
413  }
414  } else{
415  if(verbosity_) cout << "[Matacq " << now() << "] Event orbit outside of orbit range "
416  "of matacq data file events\n";
417  return false;
418  }
419  }
420 
421  int32_t orb = MatacqRawEvent::getOrbitId(&data_[0], headerSize);
422 
423  if(didCoarseMove){
424  //autoadjustement of threshold for coarse move:
425  if(abs(orb-orbitId) > fastRetrievalThresh_){
426  if(verbosity_>2) cout << "[Matacq " << now() << "] Fast retrieval threshold increased from "
428  fastRetrievalThresh_ = 2*abs(orb-orbitId);
429  if(verbosity_>2) cout << " to " << fastRetrievalThresh_ << "\n";
430  }
431 
432  //if coarse move did not improve situation, rolls back:
433  if(startOrb > 0
434  && (abs(orb-orbitId) > abs(startOrb-orbitId))){
435  if(verbosity_>2) cout << "[Matacq " << now() << "] Estimation (-> orbit " << orb << ") "
436  "was worst than original position (-> orbit "
437  << startOrb
438  << "). Restoring position (" << startPos << ").\n";
439  mseek(startPos, SEEK_SET);
440  mread((char*)&data_[0], headerSize, "Reading event header", true);
441  orb = MatacqRawEvent::getOrbitId(&data_[0], headerSize);
442  }
443  }
444 
445  bool searchBackward = (orb>orbitId)?true:false;
446  //BEWARE: len must be signed, because we are using latter in the code (-len)
447  //expression
448  int len = (int)MatacqRawEvent::getDccLen(&data_[0], headerSize);
449 
450  if(len==0){
451  cout << "[Matacq " << now() << "] read DCC length is null! Cancels matacq event search "
452  << " and move matacq file pointer to beginning of the file. "
453  << "(" << __FILE__ << ":" << __LINE__ << ")."
454  << "\n";
455  //rewind(f);
456  mrewind();
457  return false;
458  }
459 
460  enum state_t { searching, found, failed } state = searching;
461 
462  while(state == searching){
463  orb = MatacqRawEvent::getOrbitId(&data_[0], headerSize);
464  len = (int)MatacqRawEvent::getDccLen(&data_[0], headerSize);
465  uint32_t run = MatacqRawEvent::getRunNum(&data_[0], headerSize);
466  if(verbosity_>3){
467  filepos_t pos = -1;
468  mtell(pos);
469  cout << "[Matacq " << now() << "] Header read at file position "
470  << pos
471  << ": orbit = " << orb
472  << " len = " << len << "x8 Byte"
473  << " run = " << run << "\n";
474  }
475  if((abs(orb-orbitId) < orbitTolerance_)
476  && (runNumber==0 || runNumber==run)){
477  state = found;
478  lastOrb_ = orb;
479  //reads the rest of the event:
480  if((int)data_.size() < len*8){
481  throw cms::Exception("Matacq") << "Buffer overflow";
482  }
483  if(verbosity_>2) cout << "[Matacq " << now() << "] Event found. Reading "
484  " matacq event." << "\n";
485  if(!mread((char*)&data_[0], len*8, "Reading matacq event")){
486  if(verbosity_>2) cout << "[Matacq " << now() << "] Failed to read matacq event."
487  << "\n";
488  state = failed;
489  }
490  matacq_ = MatacqRawEvent((unsigned char*)&data_[0], len*8);
491  } else {
492  if((searchBackward && (orb < orbitId))
493  || (!searchBackward && (orb > orbitId))){ //search ended
494  lastOrb_ = orb;
495  state = failed;
496  if(verbosity_>2) cout << "[Matacq " << now()
497  << "] No matacq data found for run " << run
498  << ", orbit ID " << orbitId << "." << "\n";
499  } else{
500  off_t offset = (searchBackward?-len:len)*8;
501  lastOrb_ = orb;
502  if(verbosity_>3){
503  cout << "[Matacq " << now() << "] In matacq file, moving "
504  << abs(offset) << " byte " << (offset>0?"forward":"backward")
505  << ".\n";
506  }
507 
508  if(mseek(offset, SEEK_CUR,
509  (searchBackward?"Moving to previous event":
510  "Moving to next event"))
511  && mread((char*)&data_[0], headerSize, "Reading event header",
512  true)){
513  } else{
514  if(!searchBackward) mseek(-len*8, SEEK_CUR,
515  "Moving to start of last complete event");
516  state = failed;
517  }
518  }
519  }
520  }
521 
522  if(state==found){
523  filepos_t pos = -1;
524  filepos_t fsize = -1;
525  mtell(pos);
526  msize(fsize);
527  if(pos==fsize-1){ //last byte.
528  if(verbosity_>2){
529  cout << "[Matacq " << now() << "] Event found was at the end of the file. Moving "
530  "stream position to beginning of this event."
531  << "\n";
532  }
533  mseek(-(int)len*8-1, SEEK_CUR,
534  "Moving to beginning of last matacq event");
535  }
536  }
537  return (state==found);
538 }
std::string inFileName_
static const int orbitTolerance_
unsigned getRunNum() const
uint32_t getOrbitId() const
unsigned getDccLen() const
int64_t pos(int orb) const
bool mread(char *buf, size_t n, const char *mess=0, bool peek=false)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned long long uint64_t
Definition: Time.h:15
PosEstimator posEstim_
bool mtell(filepos_t &pos)
static std::string now()
bool mseek(filepos_t offset, int whence=SEEK_SET, const char *mess=0)
MatacqRawEvent matacq_
tuple cout
Definition: gather_cfg.py:145
bool msize(filepos_t &s)
std::vector< unsigned char > data_
bool MatacqProducer::getMatacqFile ( uint32_t  runNumber,
uint32_t  orbitId,
bool *  fileChange = 0 
)
private

Retrieve the file containing a given matacq event

Parameters
runNumberNumber of the run the matacq event is looking from
orbitIdId of the orbit of the matacq event
fileChangeif not null pointer, set to true if the file changed.
Returns
true if file retrieval succeeded, false otherwise. found.

Definition at line 542 of file MatacqProducer.cc.

References gather_cfg::cout, eventSkipCounter_, fileNames_, alignmentValidation::fname, cmsPerfStripChart::format, newFWLiteAna::found, i, MatacqProducer::PosEstimator::init(), lastOrb_, mcheck(), misOpened(), mopen(), now(), onErrorDisablingEvtCnt_, openedFileRunNumber_, posEstim_, convertSQLiteXML::runNumber, runSubDir(), and verbosity_.

Referenced by addMatacqData().

543  {
546  if(fileChange!=0) *fileChange = false;
547  return misOpened();
548  }
549 
550  if(fileNames_.size()==0) return 0;
551 
552  const string runNumberFormat = "%08d";
553  string sRunNumber = str(boost::format(runNumberFormat) % runNumber);
554  //cout << "Run number string: " << sRunNumber << "\n";
555  bool found = false;
556  string fname;
557  for(unsigned i=0; i < fileNames_.size() && !found; ++i){
558  fname = fileNames_[i];
559  boost::algorithm::replace_all(fname, "%run_subdir%",
561  boost::algorithm::replace_all(fname, "%run_number%", sRunNumber);
562 
563  if(verbosity_>0) cout << "[Matacq " << now() << "] "
564  << "Looking for a file with path "
565  << fname << "\n";
566 
567  if(mcheck(fname)){
568  LogInfo("Matacq") << "Uses matacq data file: '" << fname << "'\n";
569  found = true;
570  }
571  }
572  if(!found){
573  if(verbosity_>=0) cout << "[Matacq " << now() << "] no matacq file found "
574  "for run " << runNumber << "\n";
577  if(fileChange!=0) *fileChange = false;
578  return 0;
579  }
580 
581  if(!mopen(fname)){
582  LogWarning("Matacq") << "Failed to open file " << fname << "\n";
585  if(fileChange!=0) *fileChange = false;
586  return false;
587  } else{
589  lastOrb_ = 0;
590  posEstim_.init(this);
591  if(fileChange!=0) *fileChange = true;
592  return true;
593  }
594 }
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > fileNames_
string format
Some error handling for the usage.
bool mcheck(const std::string &name)
static std::string runSubDir(uint32_t runNumber)
uint32_t openedFileRunNumber_
PosEstimator posEstim_
void init(MatacqProducer *mp)
string fname
main script
static std::string now()
tuple cout
Definition: gather_cfg.py:145
bool mopen(const std::string &name)
uint32_t MatacqProducer::getOrbitId ( edm::Event ev) const
private

Definition at line 601 of file MatacqProducer.cc.

References funct::abs(), FEDRawData::data(), data, Exception, edm::Event::getByToken(), edm::EventBase::id(), inputRawCollectionToken_, FEDNumbering::inRange(), edm::HandleBase::isValid(), orbitTolerance_, lumiPlot::rawdata, and FEDRawData::size().

Referenced by addMatacqData().

601  {
602  //on CVS HEAD (June 4, 08), class Event has a method orbitNumber()
603  //we could use here. The code would be shorten to:
604  //return ev.orbitNumber();
605  //we have to deal with what we have in current CMSSW releases:
608  if(!(rawdata.isValid())){
609  throw cms::Exception("NotFound")
610  << "No FED raw data collection found. ECAL raw data are "
611  "required to retrieve the orbit ID";
612  }
613 
614  int orbit = 0;
615  for(int id=601; id<=654; ++id){
616  if(!FEDNumbering::inRange(id)) continue;
617  const FEDRawData& data = rawdata->FEDData(id);
618  const int orbitIdOffset64 = 3;
619  if(data.size()>=8*(orbitIdOffset64+1)){//orbit id is in 4th 64-bit word
620  const unsigned char* pOrbit = data.data() + orbitIdOffset64*8;
621  int thisOrbit = pOrbit[0]
622  | (pOrbit[1] <<8)
623  | (pOrbit[2] <<16)
624  | (pOrbit[3] <<24);
625  if(orbit!=0 && thisOrbit!=0 && abs(orbit-thisOrbit)>orbitTolerance_){
626  //throw cms::Exception("EventCorruption")
627  // << "Orbit ID inconsitency in DCC headers";
628  LogWarning("EventCorruption")
629  << "Orbit ID inconsitency in DCC headers";
630  orbit = 0;
631  break;
632  }
633  if(thisOrbit!=0) orbit = thisOrbit;
634  }
635  }
636 
637  if(orbit==0){
638  // throw cms::Exception("NotFound")
639  // << "Failed to retrieve orbit ID of event "<< ev.id();
640  LogWarning("NotFound") << "Failed to retrieve orbit ID of event "
641  << ev.id();
642  }
643  return orbit;
644 }
static const int orbitTolerance_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
edm::EDGetTokenT< FEDRawDataCollection > inputRawCollectionToken_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool isValid() const
Definition: HandleBase.h:75
static bool inRange(int)
edm::EventID id() const
Definition: EventBase.h:58
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
dictionary rawdata
Definition: lumiPlot.py:393
uint32_t MatacqProducer::getRunNumber ( edm::Event ev) const
private

Definition at line 597 of file MatacqProducer.cc.

References edm::Event::run().

Referenced by addMatacqData(), and produce().

597  {
598  return ev.run();
599 }
RunNumber_t run() const
Definition: Event.h:94
void MatacqProducer::loadOrbitOffset ( )
private

Loading orbit correction table from file.

See Also
orbitOffsetFile_

Definition at line 779 of file MatacqProducer.cc.

References gather_cfg::cout, Exception, f, ntuplemaker::iline, bookConverter::max, now(), orbitOffset_, orbitOffsetFile_, DTTTrigCorrFirst::run, and alignCSCRings::s.

Referenced by MatacqProducer().

779  {
780  std::ifstream f(orbitOffsetFile_.c_str());
781  if(f.bad()){
782  throw cms::Exception("Matacq")
783  << "Failed to open orbit ID correction file '"
784  << orbitOffsetFile_ << "'\n";
785  }
786 
787  cout << "[Matacq " << now() << "] "
788  << "Offset to substract to Matacq events Orbit ID: \n"
789  << "#Run Number\t Offset\n";
790 
791  int iline = 0;
792  string s;
793  stringstream buf;
794  while(f.eof()){
795  getline(f, s);
796  ++iline;
797  if(s[0]=='#'){//comment
798  //skip line:
799  f.ignore(numeric_limits<streamsize>::max(), '\n');
800  continue;
801  }
802  buf.str("");
803  buf << s;
804  int run;
805  int orbit;
806  buf >> run;
807  buf >> orbit;
808  if(buf.bad()){
809  throw cms::Exception("Matacq")
810  << "Syntax error in Orbit offset file '"
811  << orbitOffsetFile_ << "'";
812  }
813  cout << run << "\t" << orbit << "\n";
814  orbitOffset_.insert(pair<int, int>(run, orbit));
815  }
816 }
std::map< uint32_t, uint32_t > orbitOffset_
double f[11][100]
std::string orbitOffsetFile_
static std::string now()
tuple cout
Definition: gather_cfg.py:145
bool MatacqProducer::mcheck ( const std::string &  name)
private

Definition at line 1004 of file MatacqProducer.cc.

Referenced by getMatacqFile().

1004  {
1005  struct stat dummy;
1006  return 0==stat(name.c_str(), &dummy);
1007 // if(stat(name.c_str(), &dummy)==0){
1008 // return true;
1009 // } else{
1010 // cout << "[Matacq " << now() << "] Failed to stat file '"
1011 // << name.c_str() << "'. "
1012 // << "Error " << errno << ": " << strerror(errno) << "\n";
1013 // return false;
1014 // }
1015 }
void MatacqProducer::mclose ( )
private

Definition at line 1029 of file MatacqProducer.cc.

References inFile_.

Referenced by mopen(), and ~MatacqProducer().

1029  {
1030  if(inFile_!=0) fclose(inFile_);
1031  inFile_ = 0;
1032 }
bool MatacqProducer::meof ( )
private

Definition at line 1038 of file MatacqProducer.cc.

References inFile_.

1038  {
1039  if(0==inFile_) return true;
1040  return feof(inFile_)==0;
1041 }
bool MatacqProducer::misOpened ( )
private

Definition at line 1034 of file MatacqProducer.cc.

References inFile_.

Referenced by getMatacqFile().

1034  {
1035  return inFile_!=0;
1036 }
bool MatacqProducer::mopen ( const std::string &  name)
private

Definition at line 1017 of file MatacqProducer.cc.

References inFile_, inFileName_, mclose(), and mergeVDriftHistosByStation::name.

Referenced by getMatacqFile().

1017  {
1018  if(inFile_!=0) mclose();
1019  inFile_ = fopen(name.c_str(), "r");
1020  if(inFile_!=0){
1021  inFileName_ = name;
1022  return true;
1023  } else{
1024  inFileName_ = "";
1025  return false;
1026  }
1027 }
std::string inFileName_
bool MatacqProducer::mread ( char *  buf,
size_t  n,
const char *  mess = 0,
bool  peek = false 
)
private

Read a data block from input file. On failure file position is restored and if position restoring fails, file is rewind.

Parameters
bufbuffer to store read data
nsize of data block
messtext to insert in the eventual error message.
peekif true file position is restored after the data read
Returns
true on success, false on failure

Definition at line 958 of file MatacqProducer.cc.

References gather_cfg::cout, inFile_, lastOrb_, mrewind(), now(), and verbosity_.

Referenced by getMatacqEvent(), and MatacqProducer::PosEstimator::init().

958  {
959  if(0==inFile_) return false;
960  off_t pos = ftello(inFile_);
961  bool rc = (pos!=-1) && (1==fread(buf, n, 1, inFile_));
962  if(!rc){
963  if(verbosity_){
964  cout << "[Matacq " << now() << "] ";
965  if(mess) cout << mess << ". ";
966  cout << "Read failure from input matacq file.\n";
967  }
968  clearerr(inFile_);
969  }
970  if(peek || !rc){//need to restore file position
971  if(0!=fseeko(inFile_, pos, SEEK_SET)){
972  if(verbosity_){
973  cout << "[Matacq " << now() << "] ";
974  if(mess) cout << mess << ". ";
975  cout << "Failed to restore file position of "
976  "before read error. Rewind file.\n";
977  }
978  //rewind(inFile_.get());
979  mrewind();
980  lastOrb_ = 0;
981  }
982  }
983  return rc;
984 }
static std::string now()
tuple cout
Definition: gather_cfg.py:145
bool MatacqProducer::mrewind ( )
private

Definition at line 998 of file MatacqProducer.cc.

References inFile_.

Referenced by getMatacqEvent(), MatacqProducer::PosEstimator::init(), mread(), and mseek().

998  {
999  if(0==inFile_) return false;
1000  clearerr(inFile_);
1001  return fseeko(inFile_, 0, SEEK_SET)!=0;
1002 }
bool MatacqProducer::mseek ( filepos_t  offset,
int  whence = SEEK_SET,
const char *  mess = 0 
)
private

Move input file read pointer. On failure file is rewind.

Parameters
bufbuffer to store read data
nsize of data block
messtext to insert in the eventual error message.
Returns
true on success, false on failure

Definition at line 938 of file MatacqProducer.cc.

References gather_cfg::cout, inFile_, mrewind(), now(), and verbosity_.

Referenced by getMatacqEvent(), and MatacqProducer::PosEstimator::init().

938  {
939  if(0==inFile_) return false;
940  const int rc = fseeko(inFile_, offset, whence);
941  if(rc!=0 && verbosity_){
942  cout << "[Matacq " << now() << "] ";
943  if(mess) cout << mess << ". ";
944  cout << "Random access error on input matacq file. "
945  "Rewind file.\n";
946  mrewind();
947  }
948  return rc==0;
949 }
static std::string now()
tuple cout
Definition: gather_cfg.py:145
bool MatacqProducer::msize ( filepos_t s)
private

Definition at line 986 of file MatacqProducer.cc.

References inFile_.

Referenced by getMatacqEvent(), and MatacqProducer::PosEstimator::init().

986  {
987  if(0==inFile_) return false;
988  struct stat buf;
989  if(0!=fstat(fileno(inFile_), &buf)){
990  s = 0;
991  return false;
992  } else{
993  s = buf.st_size;
994  return true;
995  }
996 }
bool MatacqProducer::mtell ( filepos_t pos)
private

Definition at line 951 of file MatacqProducer.cc.

References inFile_.

Referenced by getMatacqEvent().

951  {
952  if(0==inFile_) return false;
953  pos = ftello(inFile_);
954  return pos != -1;
955 
956 }
void MatacqProducer::newRun ( int  prevRun,
int  newRun 
)
private

Definition at line 1052 of file MatacqProducer.cc.

References eventSkipCounter_, logFile_, MatacqProducer::stats_t::nEvents, MatacqProducer::stats_t::nLaserEventsWithMatacq, MatacqProducer::stats_t::nNonLaserEventsWithMatacq, now(), runNumber_, and stats_.

Referenced by produce().

1052  {
1053  runNumber_ = newRun;
1054  eventSkipCounter_ = 0;
1055  logFile_ << "[" << now() << "] Event count for run "
1056  << runNumber_ << ": "
1057  << "total: " << stats_.nEvents << ", "
1058  << "Laser event with Matacq data: "
1059  << stats_.nLaserEventsWithMatacq << ", "
1060  << "Non laser event (according to DCC header) with Matacq data: "
1061  << stats_.nNonLaserEventsWithMatacq << "\n" << flush;
1062 
1063  stats_.nEvents = 0;
1066 
1067 
1068 }
uint32_t runNumber_
std::ofstream logFile_
struct MatacqProducer::stats_t stats_
static std::string now()
void newRun(int prevRun, int newRun)
void MatacqProducer::produce ( edm::Event event,
const edm::EventSetup eventSetup 
)
virtual

Produces the EDM products

Parameters
CMSevent
eventSetupevent conditions

Implements edm::EDProducer.

Definition at line 147 of file MatacqProducer.cc.

References addMatacqData(), gather_cfg::cout, disabled_, getRunNumber(), logTiming_, MatacqProducer::stats_t::nEvents, newRun(), now(), convertSQLiteXML::runNumber, runNumber_, startTime_, stats_, t, timeLog_, timer_, and verbosity_.

Referenced by JSONExport.JsonExport::export(), HTMLExport.HTMLExport::export(), and HTMLExport.HTMLExportStatic::export().

147  {
148  if(verbosity_>=4) cout << "[Matacq " << now() << "] in MatacqProducer::produce" << endl;
149  if(logTiming_){
150  timeval t;
151  gettimeofday(&t, 0);
152 
153  timeLog_ << t.tv_sec << "."
154  << setfill('0') << setw(3) << (t.tv_usec+500)/1000 << setfill(' ')<< "\t"
155  << (t.tv_usec - timer_.tv_usec)*1.
156  + (t.tv_sec - timer_.tv_sec)*1.e6 << "\t";
157  timer_ = t;
158  }
159 
160  if(startTime_.tv_sec==0) gettimeofday(&startTime_, 0);
161  ++stats_.nEvents;
162  if(disabled_) return;
163  const uint32_t runNumber = getRunNumber(event);
164  if(runNumber!=runNumber_){
165  newRun(runNumber_, runNumber);
166  }
167  addMatacqData(event);
168 
169  if(logTiming_){
170  timeval t;
171  gettimeofday(&t, 0);
172  timeLog_ << (t.tv_usec - timer_.tv_usec)*1.
173  + (t.tv_sec - timer_.tv_sec)*1.e6 << "\n";
174  timer_ = t;
175  }
176 }
uint32_t runNumber_
std::ofstream timeLog_
uint32_t getRunNumber(edm::Event &ev) const
struct MatacqProducer::stats_t stats_
void addMatacqData(edm::Event &event)
static std::string now()
tuple cout
Definition: gather_cfg.py:145
void newRun(int prevRun, int newRun)
std::string MatacqProducer::runSubDir ( uint32_t  runNumber)
staticprivate

Definition at line 1045 of file MatacqProducer.cc.

References cmsPerfStripChart::format, and units().

Referenced by getMatacqFile().

1045  {
1046  int millions = runNumber / (1000*1000);
1047  int thousands = (runNumber-millions*1000*1000) / 1000;
1048  int units = runNumber-millions*1000*1000 - thousands*1000;
1049  return str(boost::format("%03d/%03d/%03d") % millions % thousands % units);
1050 }
string format
Some error handling for the usage.
TString units(TString variable, Char_t axis)

Member Data Documentation

const int MatacqProducer::bufferSize = 30000
staticprivate

Definition at line 264 of file MatacqProducer.h.

Referenced by addMatacqData().

std::vector<unsigned char> MatacqProducer::data_
private

Definition at line 266 of file MatacqProducer.h.

Referenced by addMatacqData(), and getMatacqEvent().

std::string MatacqProducer::digiInstanceName_
private

Instance name to use for the produced Matacq digi collection

Definition at line 212 of file MatacqProducer.h.

Referenced by addMatacqData(), and MatacqProducer().

bool MatacqProducer::disabled_
private

Parameter to disable matacq data production. For timing purpose.

Definition at line 224 of file MatacqProducer.h.

Referenced by produce().

bool MatacqProducer::doOrbitOffset_
private

Switch for orbit ID correction.

See Also
orbitOffsetFile_

Definition at line 289 of file MatacqProducer.h.

Referenced by addMatacqData(), and MatacqProducer().

int MatacqProducer::eventSkipCounter_
private

counter for event skipping

Definition at line 315 of file MatacqProducer.h.

Referenced by addMatacqData(), getMatacqFile(), and newRun().

int MatacqProducer::fastRetrievalThresh_
private

Definition at line 271 of file MatacqProducer.h.

Referenced by getMatacqEvent().

std::vector<std::string> MatacqProducer::fileNames_
private

Definition at line 208 of file MatacqProducer.h.

Referenced by getMatacqFile().

MatacqDataFormatter MatacqProducer::formatter_
private

Definition at line 267 of file MatacqProducer.h.

Referenced by addMatacqData().

bool MatacqProducer::ignoreTriggerType_
private

When true look for matacq data independently of trigger type.

Definition at line 256 of file MatacqProducer.h.

Referenced by addMatacqData().

FILE_t MatacqProducer::inFile_
private

Stream of currently opened matacq file

Definition at line 262 of file MatacqProducer.h.

Referenced by mclose(), meof(), misOpened(), mopen(), mread(), mrewind(), mseek(), msize(), and mtell().

std::string MatacqProducer::inFileName_
private

Name of currently opened matacq file

Definition at line 293 of file MatacqProducer.h.

Referenced by getMatacqEvent(), and mopen().

edm::InputTag MatacqProducer::inputRawCollection_
private

Name of the raw data collection the Matacq data must be merge to if merging is enabled.

Definition at line 241 of file MatacqProducer.h.

edm::EDGetTokenT<FEDRawDataCollection> MatacqProducer::inputRawCollectionToken_
private

EDM token to access the raw data collection the Matacq data must be merge to if merging is enabled.

Definition at line 247 of file MatacqProducer.h.

Referenced by addMatacqData(), getCalibTriggerType(), getOrbitId(), and MatacqProducer().

int32_t MatacqProducer::lastOrb_
private

Definition at line 270 of file MatacqProducer.h.

Referenced by getMatacqEvent(), getMatacqFile(), and mread().

std::ofstream MatacqProducer::logFile_
private

Log file

Definition at line 310 of file MatacqProducer.h.

Referenced by MatacqProducer(), and newRun().

std::string MatacqProducer::logFileName_
private

Log file name

Definition at line 306 of file MatacqProducer.h.

Referenced by MatacqProducer().

bool MatacqProducer::logTiming_
private

Switch for code timing.

Definition at line 334 of file MatacqProducer.h.

Referenced by MatacqProducer(), produce(), and ~MatacqProducer().

MatacqRawEvent MatacqProducer::matacq_
private

Definition at line 258 of file MatacqProducer.h.

Referenced by addMatacqData(), and getMatacqEvent().

const int MatacqProducer::matacqFedId_ = 655
staticprivate

Definition at line 295 of file MatacqProducer.h.

Referenced by addMatacqData().

bool MatacqProducer::mergeRaw_
private

Switch for merging Matacq raw data with existing raw data collection.

Definition at line 252 of file MatacqProducer.h.

Referenced by addMatacqData().

int MatacqProducer::onErrorDisablingEvtCnt_
private

Number of events to skip in case of error

Definition at line 319 of file MatacqProducer.h.

Referenced by getMatacqFile().

uint32_t MatacqProducer::openedFileRunNumber_
private

Definition at line 269 of file MatacqProducer.h.

Referenced by getMatacqFile().

std::map<uint32_t,uint32_t> MatacqProducer::orbitOffset_
private

Orbit offset table.

See Also
orbitOffsetFile_

Definition at line 285 of file MatacqProducer.h.

Referenced by addMatacqData(), and loadOrbitOffset().

std::string MatacqProducer::orbitOffsetFile_
private

File name of table with orbit offset between matacq event and DCC. Used to recover data suffering from orbit miss-synchonization

Definition at line 281 of file MatacqProducer.h.

Referenced by loadOrbitOffset(), and MatacqProducer().

const int MatacqProducer::orbitTolerance_ = 80
staticprivate

Definition at line 268 of file MatacqProducer.h.

Referenced by getMatacqEvent(), and getOrbitId().

PosEstimator MatacqProducer::posEstim_
private

Definition at line 273 of file MatacqProducer.h.

Referenced by getMatacqEvent(), getMatacqFile(), and MatacqProducer().

bool MatacqProducer::produceDigis_
private

Swictch for Matacq digi producion

Definition at line 232 of file MatacqProducer.h.

Referenced by addMatacqData(), and MatacqProducer().

bool MatacqProducer::produceRaw_
private

Switch for Matacq FED raw data production

Definition at line 236 of file MatacqProducer.h.

Referenced by addMatacqData(), and MatacqProducer().

std::string MatacqProducer::rawInstanceName_
private

Instance name to use for the produced Matacq raw data collection

Definition at line 216 of file MatacqProducer.h.

Referenced by addMatacqData(), and MatacqProducer().

uint32_t MatacqProducer::runNumber_
private

Number of the currently processed run

Definition at line 338 of file MatacqProducer.h.

Referenced by newRun(), and produce().

timeval MatacqProducer::startTime_
private

Definition at line 275 of file MatacqProducer.h.

Referenced by MatacqProducer(), produce(), and ~MatacqProducer().

struct MatacqProducer::stats_t MatacqProducer::stats_
private

Referenced by addMatacqData(), newRun(), and produce().

const MatacqProducer::stats_t MatacqProducer::stats_init = {0,0,0}
staticprivate

Definition at line 303 of file MatacqProducer.h.

std::ofstream MatacqProducer::timeLog_
private

Output stream to log code timing

Definition at line 330 of file MatacqProducer.h.

Referenced by MatacqProducer(), and produce().

std::string MatacqProducer::timeLogFile_
private

Name of file to log timing

Definition at line 323 of file MatacqProducer.h.

Referenced by MatacqProducer().

timeval MatacqProducer::timer_
private

Buffer for timing

Definition at line 326 of file MatacqProducer.h.

Referenced by MatacqProducer(), and produce().

bool MatacqProducer::timing_
private

Parameter to switch module timing.

Definition at line 220 of file MatacqProducer.h.

int MatacqProducer::verbosity_
private