Go to the documentation of this file.00001 #include "EventFilter/ESRawToDigi/interface/ESRawToDigi.h"
00002
00003 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
00004 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00005 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00006 #include "DataFormats/EcalRawData/interface/ESListOfFEDS.h"
00007 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00008 #include "DataFormats/EcalRawData/interface/ESDCCHeaderBlock.h"
00009 #include "DataFormats/EcalRawData/interface/ESKCHIPBlock.h"
00010
00011 #include <iostream>
00012
00013 ESRawToDigi::ESRawToDigi(edm::ParameterSet const& ps)
00014 {
00015 sourceTag_ = ps.getParameter<edm::InputTag>("sourceTag");
00016 ESdigiCollection_ = ps.getParameter<std::string>("ESdigiCollection");
00017 regional_ = ps.getUntrackedParameter<bool>("DoRegional",false);
00018 fedsListLabel_ = ps.getUntrackedParameter<edm::InputTag>("ESFedsListLabel", edm::InputTag(":esfedslist"));
00019 debug_ = ps.getUntrackedParameter<bool>("debugMode", false);
00020
00021 ESUnpacker_ = new ESUnpacker(ps);
00022
00023 produces<ESRawDataCollection>();
00024 produces<ESLocalRawDataCollection>();
00025 produces<ESDigiCollection>();
00026 }
00027
00028 ESRawToDigi::~ESRawToDigi(){
00029
00030 delete ESUnpacker_;
00031
00032 }
00033
00034 void ESRawToDigi::produce(edm::Event& e, const edm::EventSetup& es) {
00035
00036
00037 edm::Handle<FEDRawDataCollection> rawdata;
00038 e.getByLabel(sourceTag_, rawdata);
00039 if (!rawdata.isValid()) {
00040 LogDebug("") << "ESRawToDigi : Error! can't get rawdata!" << std::endl;
00041 }
00042
00043 std::vector<int> esFeds_to_unpack;
00044 if (regional_) {
00045 edm::Handle<ESListOfFEDS> fedslist;
00046 e.getByLabel(fedsListLabel_, fedslist);
00047 esFeds_to_unpack = fedslist->GetList();
00048 }
00049
00050
00051 std::auto_ptr<ESRawDataCollection> productDCC(new ESRawDataCollection);
00052 std::auto_ptr<ESLocalRawDataCollection> productKCHIP(new ESLocalRawDataCollection);
00053 std::auto_ptr<ESDigiCollection> productDigis(new ESDigiCollection);
00054
00055 ESDigiCollection digis;
00056
00057 if (regional_) {
00058 for (unsigned int i=0; i<esFeds_to_unpack.size(); ++i) {
00059
00060 const FEDRawData& fedRawData = rawdata->FEDData(esFeds_to_unpack[i]);
00061 ESUnpacker_->interpretRawData(esFeds_to_unpack[i], fedRawData, *productDCC, *productKCHIP, *productDigis);
00062
00063 if (debug_) std::cout<<"FED : "<<esFeds_to_unpack[i]<<" Data size : "<<fedRawData.size()<<" (Bytes)"<<std::endl;
00064 }
00065 } else {
00066 for (int fedId=FEDNumbering::MINPreShowerFEDID; fedId<=FEDNumbering::MAXPreShowerFEDID; ++fedId) {
00067
00068 const FEDRawData& fedRawData = rawdata->FEDData(fedId);
00069 ESUnpacker_->interpretRawData(fedId, fedRawData, *productDCC, *productKCHIP, *productDigis);
00070
00071 if (debug_) std::cout<<"FED : "<<fedId<<" Data size : "<<fedRawData.size()<<" (Bytes)"<<std::endl;
00072 }
00073 }
00074
00075 e.put(productDCC);
00076 e.put(productKCHIP);
00077 e.put(productDigis, ESdigiCollection_);
00078 }
00079