#include <EventFilter/RPCRawToDigi/interface/RPCPackingModule.h>
Public Member Functions | |
virtual void | produce (edm::Event &, const edm::EventSetup &) |
get data, convert to raw event, attach again to Event | |
RPCPackingModule (const edm::ParameterSet &) | |
ctor | |
virtual | ~RPCPackingModule () |
dtor | |
Static Public Member Functions | |
static std::vector < rpcrawtodigi::EventRecords > | eventRecords (int fedId, int trigger_BX, const RPCDigiCollection *, const RPCRecordFormatter &) |
Private Member Functions | |
FEDRawData * | rawData (int fedId, unsigned int lvl1_ID, const RPCDigiCollection *, const RPCRecordFormatter &) |
Private Attributes | |
unsigned long | eventCounter_ |
const RPCReadOutMapping * | theCabling |
Definition at line 22 of file RPCPackingModule.h.
RPCPackingModule::RPCPackingModule | ( | const edm::ParameterSet & | pset | ) | [explicit] |
ctor
Definition at line 34 of file RPCPackingModule.cc.
References theCabling.
00034 : 00035 eventCounter_(0) 00036 { 00037 00038 theCabling = new RPCReadOutMapping(""); 00039 produces<FEDRawDataCollection>(); 00040 00041 }
RPCPackingModule::~RPCPackingModule | ( | ) | [virtual] |
dtor
Definition at line 43 of file RPCPackingModule.cc.
References theCabling.
00044 { 00045 delete theCabling; 00046 }
vector< EventRecords > RPCPackingModule::eventRecords | ( | int | fedId, | |
int | trigger_BX, | |||
const RPCDigiCollection * | digis, | |||
const RPCRecordFormatter & | formatter | |||
) | [static] |
Definition at line 145 of file RPCPackingModule.cc.
References it, LogDebug, LogTrace, range, DetId::rawId(), and RPCRecordFormatter::recordPack().
Referenced by LinkDataXMLWriter::analyze(), and rawData().
00150 { 00151 typedef DigiContainerIterator<RPCDetId, RPCDigi> DigiRangeIterator; 00152 vector<EventRecords> dataRecords; 00153 00154 00155 LogDebug("RPCRawDataPacker")<<"Packing Fed id="<<fedId; 00156 for (DigiRangeIterator it=digis->begin(); it != digis->end(); it++) { 00157 RPCDetId rpcDetId = (*it).first; 00158 uint32_t rawDetId = rpcDetId.rawId(); 00159 RPCDigiCollection::Range range = digis->get(rpcDetId); 00160 for (vector<RPCDigi>::const_iterator id = range.first; id != range.second; id++) { 00161 const RPCDigi & digi = (*id); 00162 vector<EventRecords> rawFromDigi = formatter.recordPack(rawDetId, digi, trigger_BX); 00163 dataRecords.insert(dataRecords.end(), rawFromDigi.begin(), rawFromDigi.end()); 00164 } 00165 } 00166 00167 // 00168 // merge data words 00169 // 00170 LogTrace("RPCRawDataPacker") <<" size of data: " << dataRecords.size(); 00171 vector<EventRecords> merged = EventRecords::mergeRecords(dataRecords); 00172 LogTrace("") <<" size of megred: " << merged.size(); 00173 00174 return merged; 00175 }
void RPCPackingModule::produce | ( | edm::Event & | ev, | |
const edm::EventSetup & | es | |||
) | [virtual] |
get data, convert to raw event, attach again to Event
Implements edm::EDProducer.
Definition at line 49 of file RPCPackingModule.cc.
References edm::ESWatcher< T >::check(), reco_application_tbsim_simpleTBanalysis_cfg::digiCollection, lat::endl(), edm::EventID::event(), eventCounter_, edm::EventSetup::get(), edm::Event::getByType(), edm::Event::id(), LogDebug, LogTrace, edm::Handle< T >::product(), edm::Event::put(), rawData(), theCabling, and RPCReadOutMapping::version().
00051 { 00052 eventCounter_++; 00053 LogInfo("RPCPackingModule") << "[RPCPackingModule::produce] " 00054 << "event counter: " << eventCounter_; 00055 00056 Handle< RPCDigiCollection > digiCollection; 00057 ev.getByType(digiCollection); 00058 LogDebug("") << DebugDigisPrintout()(digiCollection.product()); 00059 00060 static edm::ESWatcher<RPCEMapRcd> recordWatcher; 00061 if(recordWatcher.check(es)) { 00062 delete theCabling; 00063 LogTrace("") << "record has CHANGED!!, initialise readout map!"; 00064 ESHandle<RPCEMap> readoutMapping; 00065 es.get<RPCEMapRcd>().get(readoutMapping); 00066 theCabling = readoutMapping->convert(); 00067 LogTrace("") <<" READOUT MAP VERSION: " << theCabling->version() << endl; 00068 } 00069 00070 auto_ptr<FEDRawDataCollection> buffers( new FEDRawDataCollection ); 00071 00072 // pair<int,int> rpcFEDS=FEDNumbering::getRPCFEDIds(); 00073 pair<int,int> rpcFEDS(790,792); 00074 for (int id= rpcFEDS.first; id<=rpcFEDS.second; ++id){ 00075 00076 RPCRecordFormatter formatter(id, theCabling) ; 00077 unsigned int lvl1_ID = ev.id().event(); 00078 FEDRawData* rawData = RPCPackingModule::rawData(id, lvl1_ID, digiCollection.product(), formatter); 00079 FEDRawData& fedRawData = buffers->FEDData(id); 00080 00081 fedRawData = *rawData; 00082 delete rawData; 00083 } 00084 ev.put( buffers ); 00085 }
FEDRawData * RPCPackingModule::rawData | ( | int | fedId, | |
unsigned int | lvl1_ID, | |||
const RPCDigiCollection * | digis, | |||
const RPCRecordFormatter & | formatter | |||
) | [private] |
Definition at line 88 of file RPCPackingModule.cc.
References FEDRawData::data(), rpcrawtodigi::DataRecord::data(), empty, eventRecords(), FEDTrailer::set(), FEDHeader::set(), FEDRawData::size(), and w.
Referenced by produce().
00089 { 00090 // 00091 // get merged records 00092 // 00093 int trigger_BX = 200; // FIXME - set event by event but correct bx assigment in digi 00094 vector<EventRecords> merged = RPCPackingModule::eventRecords(fedId,trigger_BX,digis,formatter); 00095 00096 // 00097 // create data words 00098 // 00099 vector<Word64> dataWords; 00100 EmptyWord empty; 00101 typedef vector<EventRecords>::const_iterator IR; 00102 for (IR ir = merged.begin(), irEnd = merged.end() ; ir != irEnd; ++ir) { 00103 Word64 w = ( ( (Word64(ir->recordBX().data()) << 16) | ir->recordSLD().data() ) << 16 00104 | ir->recordCD().data() ) << 16 | empty.data(); 00105 dataWords.push_back(w); 00106 } 00107 00108 // 00109 // create raw data 00110 // 00111 int nHeaders = 1; 00112 int nTrailers = 1; 00113 int dataSize = (nHeaders+nTrailers+dataWords.size()) * sizeof(Word64); 00114 FEDRawData * raw = new FEDRawData(dataSize); 00115 00116 // 00117 // add header 00118 // 00119 unsigned char *pHeader = raw->data(); 00120 int evt_ty = 3; 00121 int source_ID = fedId; 00122 FEDHeader::set(pHeader, evt_ty, lvl1_ID, trigger_BX, source_ID); 00123 00124 // 00125 // add datawords 00126 // 00127 for (unsigned int idata = 0; idata < dataWords.size(); idata ++) { 00128 Word64 * word = reinterpret_cast<Word64* >(pHeader+(idata+1)*sizeof(Word64)); 00129 *word = dataWords[idata]; 00130 } 00131 00132 // 00133 // add trailer 00134 // 00135 unsigned char *pTrailer = pHeader + raw->size()-sizeof(Word64); 00136 int crc = 0; 00137 int evt_stat = 15; 00138 int tts = 0; 00139 int datasize = raw->size()/sizeof(Word64); 00140 FEDTrailer::set(pTrailer, datasize, crc, evt_stat, tts); 00141 00142 return raw; 00143 }
unsigned long RPCPackingModule::eventCounter_ [private] |
const RPCReadOutMapping* RPCPackingModule::theCabling [private] |
Definition at line 42 of file RPCPackingModule.h.
Referenced by produce(), RPCPackingModule(), and ~RPCPackingModule().