#include <DPGAnalysis/SiStripTools/plugins/APVCyclePhaseProducerFromL1ABC.cc>
Public Member Functions | |
APVCyclePhaseProducerFromL1ABC (const edm::ParameterSet &) | |
~APVCyclePhaseProducerFromL1ABC () | |
Private Member Functions | |
virtual void | beginJob () |
virtual void | beginRun (edm::Run &, const edm::EventSetup &) |
virtual void | endJob () |
virtual void | endRun (edm::Run &, const edm::EventSetup &) |
virtual void | produce (edm::Event &, const edm::EventSetup &) |
Private Attributes | |
unsigned int | _curroffevent |
long long | _curroffset |
const std::vector< std::string > | _defpartnames |
const std::vector< int > | _defphases |
const unsigned int | _firstgoodrun |
TH1F * | _hbx |
TH1F * | _hdbx |
TH1F * | _hdorbit |
const edm::InputTag | _l1abccollection |
std::map< unsigned int, long long > | _offsets |
const int | _orbitoffsetSOR |
const bool | _wantHistos |
Description: EDproducer for APVCyclePhaseCollection which uses the configuration file to assign a phase to the run
Implementation: <Notes on="" implementation>="">
Definition at line 55 of file APVCyclePhaseProducerFromL1ABC.cc.
APVCyclePhaseProducerFromL1ABC::APVCyclePhaseProducerFromL1ABC | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 96 of file APVCyclePhaseProducerFromL1ABC.cc.
: _l1abccollection(iConfig.getParameter<edm::InputTag>("l1ABCCollection")), _defpartnames(iConfig.getParameter<std::vector<std::string> >("defaultPartitionNames")), _defphases(iConfig.getParameter<std::vector<int> >("defaultPhases")), _orbitoffsetSOR(iConfig.getParameter<int>("StartOfRunOrbitOffset")), _wantHistos(iConfig.getUntrackedParameter<bool>("wantHistos",false)), _hbx(0),_hdbx(0),_hdorbit(0),_firstgoodrun(110878), _offsets(), _curroffset(0), _curroffevent(0) { produces<APVCyclePhaseCollection,edm::InEvent>(); //now do what ever other initialization is needed }
APVCyclePhaseProducerFromL1ABC::~APVCyclePhaseProducerFromL1ABC | ( | ) |
Definition at line 113 of file APVCyclePhaseProducerFromL1ABC.cc.
{ // do anything here that needs to be done at desctruction time // (e.g. close files, deallocate resources etc.) }
void APVCyclePhaseProducerFromL1ABC::beginJob | ( | void | ) | [private, virtual] |
Reimplemented from edm::EDProducer.
Definition at line 278 of file APVCyclePhaseProducerFromL1ABC.cc.
{ }
void APVCyclePhaseProducerFromL1ABC::beginRun | ( | edm::Run & | iRun, |
const edm::EventSetup & | iSetup | ||
) | [private, virtual] |
Reimplemented from edm::EDProducer.
Definition at line 128 of file APVCyclePhaseProducerFromL1ABC.cc.
References _firstgoodrun, _hbx, _hdbx, _hdorbit, _offsets, _wantHistos, and edm::RunBase::run().
{ // reset offset vector _offsets.clear(); edm::LogInfo("AbsoluteBXOffsetReset") << "Absolute BX offset map reset"; if(_wantHistos) { edm::Service<TFileService> tfserv; char dirname[300]; sprintf(dirname,"run_%d",iRun.run()); TFileDirectory subrun = tfserv->mkdir(dirname); _hbx = subrun.make<TH1F>("l1abcbx","BX number from L1ABC",4096,-0.5,4095.5); _hbx->GetXaxis()->SetTitle("BX"); _hbx->GetYaxis()->SetTitle("Events"); _hdbx = subrun.make<TH1F>("dbx","BX number difference",4096*2-1,-4095.5,4095.5); _hdbx->GetXaxis()->SetTitle("#DeltaBX"); _hdbx->GetYaxis()->SetTitle("Events"); _hdorbit = subrun.make<TH1F>("dorbit","Orbit Number difference",9999,-4999.5,4999.5); _hdorbit->GetXaxis()->SetTitle("#Deltaorbit"); _hdorbit->GetYaxis()->SetTitle("Events"); } if(iRun.run() < _firstgoodrun) { edm::LogInfo("UnreliableMissingL1AcceptBunchCrossingCollection") << "In this run L1AcceptBunchCrossingCollection is missing or unreliable: default phases will be used"; } }
void APVCyclePhaseProducerFromL1ABC::endJob | ( | void | ) | [private, virtual] |
Reimplemented from edm::EDProducer.
Definition at line 284 of file APVCyclePhaseProducerFromL1ABC.cc.
{ }
void APVCyclePhaseProducerFromL1ABC::endRun | ( | edm::Run & | , |
const edm::EventSetup & | |||
) | [private, virtual] |
Reimplemented from edm::EDProducer.
Definition at line 165 of file APVCyclePhaseProducerFromL1ABC.cc.
References _offsets, and evf::evtn::offset().
{ // summary of absolute bx offset vector edm::LogInfo("L1AcceptBunchCrossingAbsoluteBXOffsetSummary") << "Absolute BX offset summary:"; for(std::map<unsigned int, long long>::const_iterator offset=_offsets.begin();offset!=_offsets.end();++offset) { edm::LogVerbatim("L1AcceptBunchCrossingAbsoluteBXOffsetSummary") << offset->first << " " << offset->second; } }
void APVCyclePhaseProducerFromL1ABC::produce | ( | edm::Event & | iEvent, |
const edm::EventSetup & | iSetup | ||
) | [private, virtual] |
Implements edm::EDProducer.
Definition at line 178 of file APVCyclePhaseProducerFromL1ABC.cc.
References _curroffevent, _curroffset, _defpartnames, _defphases, _firstgoodrun, _hbx, _hdbx, _hdorbit, _l1abccollection, _offsets, _orbitoffsetSOR, _wantHistos, edm::EventBase::bunchCrossing(), edm::EventID::event(), Exception, edm::Event::getByLabel(), edm::EventBase::id(), edm::EventBase::orbitNumber(), edm::Event::put(), and edm::Event::run().
{ using namespace edm; std::auto_ptr<APVCyclePhaseCollection> apvphases(new APVCyclePhaseCollection() ); const std::vector<int>& phases = _defphases; const std::vector<std::string>& partnames = _defpartnames; // Look for the L1AcceptBunchCrossingCollection int phasechange = 0; if(iEvent.run() >= _firstgoodrun ) { Handle<L1AcceptBunchCrossingCollection > pIn; iEvent.getByLabel(_l1abccollection,pIn); // offset computation long long orbitoffset = _orbitoffsetSOR; int bxoffset = 0; for(L1AcceptBunchCrossingCollection::const_iterator l1abc=pIn->begin();l1abc!=pIn->end();++l1abc) { if(l1abc->l1AcceptOffset()==0) { if(l1abc->eventType()!=0) { orbitoffset = (long long)iEvent.orbitNumber() - (long long)l1abc->orbitNumber() ; bxoffset = iEvent.bunchCrossing() - l1abc->bunchCrossing(); if(_wantHistos) { _hbx->Fill(l1abc->bunchCrossing()); _hdbx->Fill(bxoffset); _hdorbit->Fill(orbitoffset); } } else { edm::LogWarning("L1AcceptBunchCrossingNoType") << "L1AcceptBunchCrossing with no type found: "; for(L1AcceptBunchCrossingCollection::const_iterator debu=pIn->begin();debu!=pIn->end();++debu) { edm::LogPrint("L1AcceptBunchCrossingNoType") << *debu; } } } } long long absbxoffset = orbitoffset*3564 + bxoffset; if(orbitoffset != _orbitoffsetSOR) phasechange = (orbitoffset*3564)%70; if(_offsets.size()==0) { _curroffset = absbxoffset; _curroffevent = iEvent.id().event(); _offsets[iEvent.id().event()] = absbxoffset; } else { if(_curroffset != absbxoffset || iEvent.id().event() < _curroffevent ) { if( _curroffset != absbxoffset) { edm::LogInfo("L1AcceptBunchCrossingAbsoluteBXOffsetChanged") << "Absolute BX offset changed from " << _curroffset << " to " << absbxoffset << " at orbit " << iEvent.orbitNumber() << " and BX " << iEvent.bunchCrossing(); for(L1AcceptBunchCrossingCollection::const_iterator l1abc=pIn->begin();l1abc!=pIn->end();++l1abc) { edm::LogVerbatim("L1AcceptBunchCrossingAbsoluteBXOffsetChanged") << *l1abc; } } _curroffset = absbxoffset; _curroffevent = iEvent.id().event(); _offsets[iEvent.id().event()] = absbxoffset; } } } if(phases.size() < partnames.size() ) { // throw exception throw cms::Exception("InvalidAPVCyclePhases") << " Inconsistent phases/partitions vector sizes: " << phases.size() << " " << partnames.size(); } for(unsigned int ipart=0;ipart<partnames.size();++ipart) { if(phases[ipart]>=0) { apvphases->get()[partnames[ipart]] = (phases[ipart]+phasechange)%70; } } iEvent.put(apvphases); }
unsigned int APVCyclePhaseProducerFromL1ABC::_curroffevent [private] |
Definition at line 80 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by produce().
long long APVCyclePhaseProducerFromL1ABC::_curroffset [private] |
Definition at line 79 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by produce().
const std::vector<std::string> APVCyclePhaseProducerFromL1ABC::_defpartnames [private] |
Definition at line 70 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by produce().
const std::vector<int> APVCyclePhaseProducerFromL1ABC::_defphases [private] |
Definition at line 71 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by produce().
const unsigned int APVCyclePhaseProducerFromL1ABC::_firstgoodrun [private] |
Definition at line 77 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by beginRun(), and produce().
TH1F* APVCyclePhaseProducerFromL1ABC::_hbx [private] |
Definition at line 74 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by beginRun(), and produce().
TH1F* APVCyclePhaseProducerFromL1ABC::_hdbx [private] |
Definition at line 75 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by beginRun(), and produce().
TH1F* APVCyclePhaseProducerFromL1ABC::_hdorbit [private] |
Definition at line 76 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by beginRun(), and produce().
const edm::InputTag APVCyclePhaseProducerFromL1ABC::_l1abccollection [private] |
Definition at line 69 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by produce().
std::map<unsigned int, long long> APVCyclePhaseProducerFromL1ABC::_offsets [private] |
Definition at line 78 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by beginRun(), endRun(), and produce().
const int APVCyclePhaseProducerFromL1ABC::_orbitoffsetSOR [private] |
Definition at line 72 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by produce().
const bool APVCyclePhaseProducerFromL1ABC::_wantHistos [private] |
Definition at line 73 of file APVCyclePhaseProducerFromL1ABC.cc.
Referenced by beginRun(), and produce().