Public Member Functions | |
HcalCalibFEDSelector (const edm::ParameterSet &) | |
~HcalCalibFEDSelector () | |
Private Member Functions | |
virtual void | beginJob () |
virtual void | endJob () |
virtual void | produce (edm::Event &, const edm::EventSetup &) |
Private Attributes | |
std::vector< int > | extraFEDs_ |
edm::InputTag | rawInLabel_ |
Definition at line 17 of file HcalCalibFEDSelector.cc.
HcalCalibFEDSelector::HcalCalibFEDSelector | ( | const edm::ParameterSet & | iConfig | ) |
Definition at line 37 of file HcalCalibFEDSelector.cc.
References extraFEDs_, edm::ParameterSet::getParameter(), and rawInLabel_.
{ rawInLabel_ = iConfig.getParameter<edm::InputTag>("rawInputLabel"); extraFEDs_ = iConfig.getParameter< std::vector<int> >("extraFEDsToKeep") ; produces<FEDRawDataCollection>(); }
HcalCalibFEDSelector::~HcalCalibFEDSelector | ( | ) |
Definition at line 44 of file HcalCalibFEDSelector.cc.
{ }
void HcalCalibFEDSelector::beginJob | ( | void | ) | [private, virtual] |
void HcalCalibFEDSelector::endJob | ( | void | ) | [private, virtual] |
void HcalCalibFEDSelector::produce | ( | edm::Event & | iEvent, |
const edm::EventSetup & | iSetup | ||
) | [private, virtual] |
Implements edm::EDProducer.
Definition at line 49 of file HcalCalibFEDSelector.cc.
References diJetCalib::calibType, FEDRawData::data(), runTheMatrix::data, extraFEDs_, funct::false, FEDRawDataCollection::FEDData(), edm::Event::getByLabel(), HcalFEDList::getListOfFEDs(), i, j, gen::k, FEDNumbering::lastFEDId(), FEDNumbering::MAXHCALFEDID, FEDNumbering::MINHCALFEDID, edm::Handle< T >::product(), edm::Event::put(), rawInLabel_, FEDRawData::resize(), findQualityFiles::size, FEDRawData::size(), funct::true, and relativeConstraints::value.
{ std::auto_ptr<FEDRawDataCollection> producedData(new FEDRawDataCollection); edm::Handle<FEDRawDataCollection> rawIn; iEvent.getByLabel(rawInLabel_,rawIn); std::vector<int> selFEDs; //--- Get the list of FEDs to be kept ---// int calibType = -1 ; for (int i=FEDNumbering::MINHCALFEDID; i<=FEDNumbering::MAXHCALFEDID; i++) { const FEDRawData& fedData = rawIn->FEDData(i) ; if ( fedData.size() < 24 ) continue ; // FED is empty int value = ((const HcalDCCHeader*)(fedData.data()))->getCalibType() ; if ( calibType < 0 ) { calibType = value ; } else { if ( calibType != value ) edm::LogWarning("HcalCalibFEDSelector") << "Conflicting calibration types found: " << calibType << " vs. " << value << ". Staying with " << calibType ; } } HcalFEDList calibFeds(calibType) ; selFEDs = calibFeds.getListOfFEDs() ; for (unsigned int i=0; i<extraFEDs_.size(); i++) { bool duplicate = false ; for (unsigned int j=0; j<selFEDs.size(); j++) { if (extraFEDs_.at(i) == selFEDs.at(j)) { duplicate = true ; break ; } } if ( !duplicate ) selFEDs.push_back( extraFEDs_.at(i) ) ; } // Copying: const FEDRawDataCollection *rdc=rawIn.product(); for ( int j=0; j< FEDNumbering::lastFEDId(); ++j ) { bool rightFED=false; for (uint32_t k=0; k<selFEDs.size(); k++) { if (j==selFEDs[k]) { rightFED=true; } } if (!rightFED) continue; const FEDRawData & fedData = rdc->FEDData(j); size_t size=fedData.size(); if ( size > 0 ) { // this fed has data -- lets copy it FEDRawData & fedDataProd = producedData->FEDData(j); if ( fedDataProd.size() != 0 ) { continue; } fedDataProd.resize(size); unsigned char *dataProd=fedDataProd.data(); const unsigned char *data=fedData.data(); // memcpy is at-least-as-fast as assignment and can be much faster memcpy(dataProd, data, size); } } iEvent.put(producedData); }
std::vector<int> HcalCalibFEDSelector::extraFEDs_ [private] |
Definition at line 30 of file HcalCalibFEDSelector.cc.
Referenced by HcalCalibFEDSelector(), and produce().
Definition at line 29 of file HcalCalibFEDSelector.cc.
Referenced by HcalCalibFEDSelector(), and produce().