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 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
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

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_
 
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::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- 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 43 of file MatacqProducer.h.

Member Typedef Documentation

typedef FILE* MatacqProducer::FILE_t
private

Definition at line 58 of file MatacqProducer.h.

typedef off_t MatacqProducer::filepos_t
private

Definition at line 57 of file MatacqProducer.h.

Member Enumeration Documentation

Enumerator
laserType 
ledType 
tpType 
pedType 

Definition at line 46 of file MatacqProducer.h.

Constructor & Destructor Documentation

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

Constructor

Parameters
paramsseletive readout parameters

Definition at line 66 of file MatacqProducer.cc.

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

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

Destructor

Definition at line 765 of file MatacqProducer.cc.

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

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

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 177 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_, inputRawCollection_, MatacqDataFormatter::interpretRawData(), laserType, matacq_, matacqFedId_, mergeRaw_, MatacqProducer::stats_t::nLaserEventsWithMatacq, MatacqProducer::stats_t::nNonLaserEventsWithMatacq, now(), orbitOffset_, produceDigis_, produceRaw_, rawInstanceName_, convertSQLiteXML::runNumber, stats_, and verbosity_.

Referenced by produce().

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

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

Referenced by addMatacqData().

645  {
647  ev.getByLabel(inputRawCollection_, rawdata);
648  if(!(rawdata.isValid())){
649  throw cms::Exception("NotFound")
650  << "No FED raw data collection found. ECAL raw data are "
651  "required to retrieve the trigger type";
652  }
653 
654  Majority<int> stat;
655  for(int id=601; id<=654; ++id){
656  if(!FEDNumbering::inRange(id)) continue;
657  const FEDRawData& data = rawdata->FEDData(id);
658  const int detailedTrigger32 = 5;
659  if(data.size()>=4*(detailedTrigger32+1)){
660  const unsigned char* pTType = data.data() + detailedTrigger32*4;
661  int tType = pTType[1] & 0x7;
662  stat.add(tType);
663  }
664  }
665  double p;
666  int tType = stat.result(&p);
667  if(p<0){
668  //throw cms::Exception("NotFound") << "No ECAL DCC data found\n";
669  LogWarning("NotFound") << "No ECAL DCC data found\n";
670  tType = -1;
671  }
672  if(p<.8){
673  //throw cms::Exception("EventCorruption") << "Inconsitency in detailed trigger type indicated in ECAL DCC data headers\n";
674  LogWarning("EventCorruption") << "Inconsitency in detailed trigger type indicated in ECAL DCC data headers\n";
675  tType = -1;
676  }
677  return tType;
678 }
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::InputTag inputRawCollection_
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:390
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 341 of file MatacqProducer.cc.

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

Referenced by addMatacqData().

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

542  {
545  if(fileChange!=0) *fileChange = false;
546  return misOpened();
547  }
548 
549  if(fileNames_.size()==0) return 0;
550 
551  const string runNumberFormat = "%08d";
552  string sRunNumber = str(boost::format(runNumberFormat) % runNumber);
553  //cout << "Run number string: " << sRunNumber << "\n";
554  bool found = false;
555  string fname;
556  for(unsigned i=0; i < fileNames_.size() && !found; ++i){
557  fname = fileNames_[i];
558  boost::algorithm::replace_all(fname, "%run_subdir%",
560  boost::algorithm::replace_all(fname, "%run_number%", sRunNumber);
561 
562  if(verbosity_>0) cout << "[Matacq " << now() << "] "
563  << "Looking for a file with path "
564  << fname << "\n";
565 
566  if(mcheck(fname)){
567  LogInfo("Matacq") << "Uses matacq data file: '" << fname << "'\n";
568  found = true;
569  }
570  }
571  if(!found){
572  if(verbosity_>=0) cout << "[Matacq " << now() << "] no matacq file found "
573  "for run " << runNumber << "\n";
576  if(fileChange!=0) *fileChange = false;
577  return 0;
578  }
579 
580  if(!mopen(fname)){
581  LogWarning("Matacq") << "Failed to open file " << fname << "\n";
584  if(fileChange!=0) *fileChange = false;
585  return false;
586  } else{
588  lastOrb_ = 0;
589  posEstim_.init(this);
590  if(fileChange!=0) *fileChange = true;
591  return true;
592  }
593 }
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:121
bool mopen(const std::string &name)
uint32_t MatacqProducer::getOrbitId ( edm::Event ev) const
private

Definition at line 600 of file MatacqProducer.cc.

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

Referenced by addMatacqData().

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

References edm::Event::run().

Referenced by addMatacqData(), and produce().

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

Loading orbit correction table from file.

See Also
orbitOffsetFile_

Definition at line 778 of file MatacqProducer.cc.

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

Referenced by MatacqProducer().

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

Definition at line 1003 of file MatacqProducer.cc.

Referenced by getMatacqFile().

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

Definition at line 1028 of file MatacqProducer.cc.

References inFile_.

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

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

Definition at line 1037 of file MatacqProducer.cc.

References inFile_.

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

Definition at line 1033 of file MatacqProducer.cc.

References inFile_.

Referenced by getMatacqFile().

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

Definition at line 1016 of file MatacqProducer.cc.

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

Referenced by getMatacqFile().

1016  {
1017  if(inFile_!=0) mclose();
1018  inFile_ = fopen(name.c_str(), "r");
1019  if(inFile_!=0){
1020  inFileName_ = name;
1021  return true;
1022  } else{
1023  inFileName_ = "";
1024  return false;
1025  }
1026 }
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 957 of file MatacqProducer.cc.

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

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

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

Definition at line 997 of file MatacqProducer.cc.

References inFile_.

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

997  {
998  if(0==inFile_) return false;
999  clearerr(inFile_);
1000  return fseeko(inFile_, 0, SEEK_SET)!=0;
1001 }
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 937 of file MatacqProducer.cc.

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

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

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

Definition at line 985 of file MatacqProducer.cc.

References inFile_.

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

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

Definition at line 950 of file MatacqProducer.cc.

References inFile_.

Referenced by getMatacqEvent().

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

Definition at line 1051 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().

1051  {
1052  runNumber_ = newRun;
1053  eventSkipCounter_ = 0;
1054  logFile_ << "[" << now() << "] Event count for run "
1055  << runNumber_ << ": "
1056  << "total: " << stats_.nEvents << ", "
1057  << "Laser event with Matacq data: "
1058  << stats_.nLaserEventsWithMatacq << ", "
1059  << "Non laser event (according to DCC header) with Matacq data: "
1060  << stats_.nNonLaserEventsWithMatacq << "\n" << flush;
1061 
1062  stats_.nEvents = 0;
1065 
1066 
1067 }
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 145 of file MatacqProducer.cc.

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

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

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

Definition at line 1044 of file MatacqProducer.cc.

References cmsPerfStripChart::format, and units().

Referenced by getMatacqFile().

1044  {
1045  int millions = runNumber / (1000*1000);
1046  int thousands = (runNumber-millions*1000*1000) / 1000;
1047  int units = runNumber-millions*1000*1000 - thousands*1000;
1048  return str(boost::format("%03d/%03d/%03d") % millions % thousands % units);
1049 }
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 256 of file MatacqProducer.h.

Referenced by addMatacqData().

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

Definition at line 258 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 210 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 222 of file MatacqProducer.h.

Referenced by produce().

bool MatacqProducer::doOrbitOffset_
private

Switch for orbit ID correction.

See Also
orbitOffsetFile_

Definition at line 281 of file MatacqProducer.h.

Referenced by addMatacqData(), and MatacqProducer().

int MatacqProducer::eventSkipCounter_
private

counter for event skipping

Definition at line 307 of file MatacqProducer.h.

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

int MatacqProducer::fastRetrievalThresh_
private

Definition at line 263 of file MatacqProducer.h.

Referenced by getMatacqEvent().

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

Definition at line 206 of file MatacqProducer.h.

Referenced by getMatacqFile().

MatacqDataFormatter MatacqProducer::formatter_
private

Definition at line 259 of file MatacqProducer.h.

Referenced by addMatacqData().

bool MatacqProducer::ignoreTriggerType_
private

When true look for matacq data independently of trigger type.

Definition at line 248 of file MatacqProducer.h.

Referenced by addMatacqData().

FILE_t MatacqProducer::inFile_
private

Stream of currently opened matacq file

Definition at line 254 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 285 of file MatacqProducer.h.

Referenced by getMatacqEvent(), and mopen().

edm::InputTag MatacqProducer::inputRawCollection_
private

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

Definition at line 239 of file MatacqProducer.h.

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

int32_t MatacqProducer::lastOrb_
private

Definition at line 262 of file MatacqProducer.h.

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

std::ofstream MatacqProducer::logFile_
private

Log file

Definition at line 302 of file MatacqProducer.h.

Referenced by MatacqProducer(), and newRun().

std::string MatacqProducer::logFileName_
private

Log file name

Definition at line 298 of file MatacqProducer.h.

Referenced by MatacqProducer().

bool MatacqProducer::logTiming_
private

Switch for code timing.

Definition at line 326 of file MatacqProducer.h.

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

MatacqRawEvent MatacqProducer::matacq_
private

Definition at line 250 of file MatacqProducer.h.

Referenced by addMatacqData(), and getMatacqEvent().

const int MatacqProducer::matacqFedId_ = 655
staticprivate

Definition at line 287 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 244 of file MatacqProducer.h.

Referenced by addMatacqData().

int MatacqProducer::onErrorDisablingEvtCnt_
private

Number of events to skip in case of error

Definition at line 311 of file MatacqProducer.h.

Referenced by getMatacqFile().

uint32_t MatacqProducer::openedFileRunNumber_
private

Definition at line 261 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 277 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 273 of file MatacqProducer.h.

Referenced by loadOrbitOffset(), and MatacqProducer().

const int MatacqProducer::orbitTolerance_ = 80
staticprivate

Definition at line 260 of file MatacqProducer.h.

Referenced by getMatacqEvent(), and getOrbitId().

PosEstimator MatacqProducer::posEstim_
private

Definition at line 265 of file MatacqProducer.h.

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

bool MatacqProducer::produceDigis_
private

Swictch for Matacq digi producion

Definition at line 230 of file MatacqProducer.h.

Referenced by addMatacqData(), and MatacqProducer().

bool MatacqProducer::produceRaw_
private

Switch for Matacq FED raw data production

Definition at line 234 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 214 of file MatacqProducer.h.

Referenced by addMatacqData(), and MatacqProducer().

uint32_t MatacqProducer::runNumber_
private

Number of the currently processed run

Definition at line 330 of file MatacqProducer.h.

Referenced by newRun(), and produce().

timeval MatacqProducer::startTime_
private

Definition at line 267 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 295 of file MatacqProducer.h.

std::ofstream MatacqProducer::timeLog_
private

Output stream to log code timing

Definition at line 322 of file MatacqProducer.h.

Referenced by MatacqProducer(), and produce().

std::string MatacqProducer::timeLogFile_
private

Name of file to log timing

Definition at line 315 of file MatacqProducer.h.

Referenced by MatacqProducer().

timeval MatacqProducer::timer_
private

Buffer for timing

Definition at line 318 of file MatacqProducer.h.

Referenced by MatacqProducer(), and produce().

bool MatacqProducer::timing_
private

Parameter to switch module timing.

Definition at line 218 of file MatacqProducer.h.

int MatacqProducer::verbosity_
private