14 template <
class Coll,
class DetIdClass>
15 int process(
const Coll* pt,
const DetId& did,
unsigned short* buffer,
int& presamples) {
18 typename Coll::const_iterator
i=pt->find(DetIdClass(did));
20 presamples=i->presamples();
23 buffer[
j]=(*i)[
j].raw();
29 unsigned short* buffer,
int &presamples) {
35 size=process<CastorDigiCollection,HcalCastorDetId>(inputs.
castorCont,did,buffer,presamples);
41 int nl1a,
int orbitn,
int bcn,
49 static const int CORFormatVersion=1;
55 spigots[spigot].
allocate(CORFormatVersion);
58 int presamples=-1, samples=-1;
59 for (
int fiber=1; fiber<=12; fiber++)
60 for (
int fiberchan=0; fiberchan<3; fiberchan++) {
61 int linear=(fiber-1)*3+fiberchan;
69 if (!emap.
lookup(partialEid,fullEid,genId))
continue;
74 int mysamples=findSamples(genId,inputs,database,mypresamples);
76 if (samples<0) samples=mysamples;
77 else if (samples!=mysamples) {
78 edm::LogError(
"CASTOR") <<
"Mismatch of samples in a single COR (unsupported) " << mysamples <<
" != " << samples;
82 presamples=mypresamples;
84 }
else if (mypresamples!=presamples) {
85 edm::LogError(
"CASTOR") <<
"Mismatch of presamples in a single COR (unsupported) " << mypresamples <<
" != " << presamples;
88 preclen[linear]=(
unsigned char)(samples);
95 spigots[spigot].
pack(&(preclen[0]),&(precdata[0]),
96 &(triglen[0]),&(trigdata[0]),
98 static const int pipeline=0x22;
99 static const int firmwareRev=0;
101 submodule|=(exampleEId.
htrSlot()&0x1F)<<1;
116 for (
int spigot=0; spigot<2; spigot++) {
117 theSize+=spigots[spigot].
getRawLength()*
sizeof(
unsigned short);
122 theSize+=mergerdata.
getRawLength()*
sizeof(
unsigned short);
125 theSize+=(8-(theSize%8))%8;
134 for (
int spigot=0; spigot<2; spigot++) {
135 if (spigots[spigot].getRawLength()>0)
static const int CHANNELS_PER_SPIGOT
void pack(unsigned char *daq_lengths, unsigned short *daq_samples, unsigned char *tp_lengths, unsigned short *tp_samples, bool do_capid=false)
Unpack the HTR data into TP and DAQ data sorted by channel.
int readoutVMECrateId() const
const int getRawLength() const
Get the length of the raw data.
void packHeaderTrailer(int L1Anumber, int bcn, int submodule, int orbitn, int pipeline, int ndd, int nps, int firmwareRev=0)
pack header and trailer (call after pack)
const CastorDigiCollection * castorCont
static void set(unsigned char *trailer, int evt_lgth, int crc, int evt_stat, int tts, bool T=false)
Set all fields in the trailer.
size_t size() const
Lenght of the data buffer in bytes.
void pack(int fedid, int dccnumber, int nl1a, int orbitn, int bcn, const CastorCollections &inputs, const CastorElectronicsMap &emap, FEDRawData &output)
const DetId lookup(CastorElectronicsId fId) const
lookup the logical detid associated with the given electronics id
void resize(size_t newsize)
static const int MAXIMUM_SAMPLES_PER_CHANNEL
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
void allocate(int version_to_create=0)
const int getRawLength() const
Get the length of the raw data.
int findSamples(const DetId &did, const CastorCollections &inputs, unsigned short *buffer, int &presamples)
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Readout chain identification for Castor Bits for the readout chain : some names need change! [31:26] ...
Detector det() const
get the detector field from this detid
tuple size
Write out results.