00001
00002
00003 #include "EventFilter/SiStripRawToDigi/plugins/SiStripDigiToRawModule.h"
00004 #include "EventFilter/SiStripRawToDigi/interface/SiStripDigiToRaw.h"
00005 #include "FWCore/Framework/interface/Event.h"
00006 #include "FWCore/Framework/interface/EventSetup.h"
00007 #include "FWCore/Framework/interface/ESHandle.h"
00008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00009 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00010 #include "DataFormats/Common/interface/Handle.h"
00011 #include "DataFormats/Common/interface/DetSetVector.h"
00012 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00013 #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
00014 #include "CondFormats/DataRecord/interface/SiStripFedCablingRcd.h"
00015 #include <cstdlib>
00016
00017 using namespace std;
00018
00019
00023 SiStripDigiToRawModule::SiStripDigiToRawModule( const edm::ParameterSet& pset ) :
00024 inputModuleLabel_( pset.getParameter<std::string>( "InputModuleLabel" ) ),
00025 inputDigiLabel_( pset.getParameter<std::string>( "InputDigiLabel" ) ),
00026 digiToRaw_(0),
00027 eventCounter_(0)
00028 {
00029 if ( edm::isDebugEnabled() ) {
00030 LogDebug("DigiToRaw")
00031 << "[SiStripDigiToRawModule::SiStripDigiToRawModule]"
00032 << " Constructing object...";
00033 }
00034
00035
00036 std::string mode = pset.getUntrackedParameter<std::string>("FedReadoutMode","VIRGIN_RAW");
00037 int16_t nbytes = pset.getUntrackedParameter<int>("AppendedBytes",0);
00038 bool use_fed_key = pset.getUntrackedParameter<bool>("UseFedKey",false);
00039 digiToRaw_ = new SiStripDigiToRaw( mode, nbytes, use_fed_key );
00040
00041 produces<FEDRawDataCollection>();
00042
00043 }
00044
00045
00047 SiStripDigiToRawModule::~SiStripDigiToRawModule() {
00048 if ( edm::isDebugEnabled() ) {
00049 LogDebug("DigiToRaw")
00050 << "[SiStripDigiToRawModule::~SiStripDigiToRawModule]"
00051 << " Destructing object...";
00052 }
00053 if ( digiToRaw_ ) delete digiToRaw_;
00054 }
00055
00056
00063 void SiStripDigiToRawModule::produce( edm::Event& iEvent,
00064 const edm::EventSetup& iSetup ) {
00065
00066 eventCounter_++;
00067
00068 edm::ESHandle<SiStripFedCabling> cabling;
00069 iSetup.get<SiStripFedCablingRcd>().get( cabling );
00070
00071 edm::Handle< edm::DetSetVector<SiStripDigi> > digis;
00072 iEvent.getByLabel( inputModuleLabel_, inputDigiLabel_, digis );
00073
00074 std::auto_ptr<FEDRawDataCollection> buffers( new FEDRawDataCollection );
00075
00076 digiToRaw_->createFedBuffers( iEvent, cabling, digis, buffers );
00077
00078 iEvent.put( buffers );
00079
00080 }