11 template <
class Coll,
class DetIdClass>
13 if (pt==
nullptr)
return 0;
15 typename Coll::const_iterator
i=pt->find(DetIdClass(did));
17 presamples=i->presamples();
19 for (
int j=0; j<
size; j++)
20 buffer[j]=(*i)[j].raw();
27 unsigned short* buffer,
int &presamples) {
39 int nl1a,
int orbitn,
int bcn,
51 for (
int spigot=0; spigot<15; spigot++) {
52 spigots[spigot].
allocate(HTRFormatVersion);
56 for (
int fiber=1; fiber<=8; fiber++)
57 for (
int fiberchan=0; fiberchan<3; fiberchan++) {
58 int linear=(fiber-1)*3+fiberchan;
60 unsigned short chanid=chanSample.
raw()&0xF800;
67 if (!emap.
lookup(partialEid,fullEid,genId))
continue;
72 int mysamples=
findSamples(genId,inputs,database,mypresamples);
77 edm::LogError(
"CASTOR") <<
"Mismatch of samples in a single HTR (unsupported) " << mysamples <<
" != " <<
samples;
81 presamples=mypresamples;
83 }
else if (mypresamples!=presamples) {
84 edm::LogError(
"CASTOR") <<
"Mismatch of presamples in a single HTR (unsupported) " << mypresamples <<
" != " <<
presamples;
88 database[
ii]=(database[
ii]&0x7FF)|chanid;
89 preclen[
linear]=(
unsigned char)(samples);
95 spigots[spigot].
pack(&(preclen[0]),&(precdata[0]),
96 &(triglen[0]),&(trigdata[0]),
101 submodule|=(exampleEId.
htrSlot()&0x1F)<<1;
116 for (
int spigot=0; spigot<15; spigot++) {
117 theSize+=spigots[spigot].
getRawLength()*
sizeof(
unsigned short);
120 theSize+=(8-(theSize%8))%8;
129 for (
int spigot=0; spigot<15; spigot++) {
130 if (spigots[spigot].getRawLength()>0)
int readoutVMECrateId() const
static int findSamples(const DetId &did, const CastorCollections &inputs, unsigned short *buffer, int &presamples)
static const int CHANNELS_PER_SPIGOT
const CastorDigiCollection * castorCont
static const int MAXIMUM_SAMPLES_PER_CHANNEL
size_t size() const
Lenght of the data buffer in bytes.
void allocate(int version_to_create=0)
const DetId lookup(CastorElectronicsId fId) const
lookup the logical detid associated with the given electronics id
static void set(unsigned char *trailer, uint32_t lenght, uint16_t crc, uint8_t evt_stat, uint8_t tts, bool moreTrailers=false)
Set all fields in the trailer.
void resize(size_t newsize)
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
const int getRawLength() const
Get the length of the raw data.
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.
static void pack(int fedid, int dccnumber, int nl1a, int orbitn, int bcn, const CastorCollections &inputs, const CastorElectronicsMap &emap, FEDRawData &output)
void packHeaderTrailer(int L1Anumber, int bcn, int submodule, int orbitn, int pipeline, int ndd, int nps, int firmwareRev=0, int firmwareFlav=0)
pack header and trailer (call after pack)
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
constexpr uint16_t raw() const
get the raw word
Readout chain identification for Castor Bits for the readout chain : some names need change! [31:26] ...
constexpr Detector det() const
get the detector field from this detid