15 #include "boost/dynamic_bitset.hpp"
16 #include "boost/foreach.hpp"
31 : requirePreTrigger_(pset.getParameter<bool>(
"requirePreTrigger")),
32 requireCLCTForComparators_(pset.getParameter<bool>(
"requireCLCTForComparators"))
48 map<CSCDetId, CSCEventData>::iterator chamberMapItr =
theChamberDataMap.find(chamberId);
74 bool me1a = (cscDetId.
station()==1) && (cscDetId.
ring()==4);
76 bool me1b = (cscDetId.
station()==1) && (cscDetId.
ring()==1);
80 std::vector<CSCStripDigi>::const_iterator digiItr = (*j).second.first;
81 std::vector<CSCStripDigi>::const_iterator
last = (*j).second.second;
82 for( ; digiItr !=
last; ++digiItr)
86 if ( me1a && zplus ) { digi.
setStrip(17-strip); }
87 if ( me1b && !zplus) { digi.
setStrip(65-strip);}
89 cscData.
add(digi, cscDetId.
layer() );
103 std::vector<CSCWireDigi>::const_iterator digiItr = (*j).second.first;
104 std::vector<CSCWireDigi>::const_iterator
last = (*j).second.second;
105 for( ; digiItr !=
last; ++digiItr)
107 cscData.
add(*digiItr, cscDetId.
layer() );
125 bool me1a = (cscDetId.
station()==1) && (cscDetId.
ring()==4);
131 if (me1a && digi.
getStrip() <= 16) {
135 cscData.
add(digi_corr, cscDetId.
layer());
138 cscData.
add(digi, cscDetId.
layer());
152 cscData.
add(std::vector<CSCALCTDigi>((*j).second.first, (*j).second.second));
163 cscData.
add(std::vector<CSCCLCTDigi>((*j).second.first, (*j).second.second));
174 cscData.
add(std::vector<CSCCorrelatedLCTDigi>((*j).second.first, (*j).second.second));
182 if(chamberId.
ring() ==4)
207 add(stripDigis, preTriggers);
209 add(comparatorDigis, clctDigis);
212 add(correlatedLCTDigis);
218 std::map<int, CSCDCCEventData> dccMap;
229 dccMap.insert(std::pair<int, CSCDCCEventData>(idcc,
CSCDCCEventData(idcc, nDDUs, bx, l1a) ) );
232 for(map<CSCDetId, CSCEventData>::iterator chamberItr =
theChamberDataMap.begin();
236 int indexDCC = mapping->
slink(chamberItr->first);
240 std::map<int, CSCDCCEventData>::iterator dccMapItr = dccMap.find(indexDCC);
241 if(dccMapItr == dccMap.end())
243 throw cms::Exception(
"CSCDigiToRaw") <<
"Bad DCC number:" << indexDCC;
247 int dduId = mapping->
ddu(chamberItr->first);
248 int dduSlot = mapping->
dduSlot(chamberItr->first);
249 int dduInput = mapping->
dduInput(chamberItr->first);
250 int dmbId = mapping->
dmb(chamberItr->first);
251 dccMapItr->second.addChamber(chamberItr->second, dduId, dduSlot, dduInput, dmbId);
257 for(std::map<int, CSCDCCEventData>::iterator dccMapItr = dccMap.begin();
258 dccMapItr != dccMap.end(); ++dccMapItr)
260 boost::dynamic_bitset<> dccBits = dccMapItr->second.pack();
262 fedRawData.
resize(dccBits.size());
266 cscFEDTrailer.set(fedRawData.
data()+(fedRawData.
size()-8),
EventNumber_t event() const
void add(const CSCStripDigiCollection &stripDigis, const CSCCLCTPreTriggerCollection &preTriggers)
int getStrip() const
Get the strip number.
void createFedBuffers(const CSCStripDigiCollection &stripDigis, const CSCWireDigiCollection &wireDigis, const CSCComparatorDigiCollection &comparatorDigis, const CSCALCTDigiCollection &alctDigis, const CSCCLCTDigiCollection &clctDigis, const CSCCLCTPreTriggerCollection &preTriggers, const CSCCorrelatedLCTDigiCollection &correlatedLCTDigis, FEDRawDataCollection &fed_buffers, const CSCChamberMap *theMapping, edm::Event &e)
Take a vector of digis and fill the FEDRawDataCollection.
int ddu(const CSCDetId &) const
ddu id for given DetId
int dmb(const CSCDetId &) const
dmb id for given DetId
bool requireCLCTForComparators_
int getComparator() const
Get Comparator readings.
size_t size() const
Lenght of the data buffer in bytes.
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
void setStrip(int istrip)
const CSCChamberMap * theElectronicsMap
void resize(size_t newsize)
int slink(const CSCDetId &) const
slink id for given DetId
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
int dduInput(const CSCDetId &) const
ddu input for given DetId
CSCDetId chamberId() const
CSCDigiToRaw(const edm::ParameterSet &pset)
Constructor.
int getTimeBinWord() const
Return the word with each bit corresponding to a time bin.
void beginEvent(const CSCChamberMap *electronicsMap)
unsigned short iChamberType()
std::map< CSCDetId, CSCEventData > theChamberDataMap
void bitsetToChar(const boost::dynamic_bitset<> &bs, unsigned char *result)
this method takes bitset obj and returns char * array
int crate(const CSCDetId &) const
Interface required use in digi-to-raw.
int dduSlot(const CSCDetId &) const
ddu slot for given DetId
CSCEventData & findEventData(const CSCDetId &cscDetId)
pick out the correct data object for this chamber
void add(const CSCStripDigi &, int layer)
routines to add digis to the data
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
CSCDetId chamberID(const CSCDetId &cscDetId) const
takes layer ID, converts to chamber ID, switching ME1A to ME11
std::pair< const_iterator, const_iterator > Range
const CSCDMBHeader * dmbHeader() const
the DAQ motherboard header. A good place for event and chamber info