11 template <
class Coll,
class DetIdClass>
16 typename Coll::const_iterator
i = pt->find(DetIdClass(did));
18 presamples = i->presamples();
21 buffer[
j] = (*i)[
j].raw();
29 unsigned short* buffer,
36 size = process<CastorDigiCollection, HcalCastorDetId>(inputs.
castorCont, did,
buffer, presamples);
53 constexpr
int HTRFormatVersion = 3;
57 for (
int spigot = 0; spigot < 15; spigot++) {
58 spigots[spigot].
allocate(HTRFormatVersion);
61 int presamples = -1, samples = -1;
62 for (
int fiber = 1; fiber <= 8; fiber++)
63 for (
int fiberchan = 0; fiberchan < 3; fiberchan++) {
64 int linear = (fiber - 1) * 3 + fiberchan;
65 HcalQIESample chanSample(0, 0, fiber, fiberchan,
false,
false);
66 unsigned short chanid = chanSample.
raw() & 0xF800;
73 if (!emap.
lookup(partialEid, fullEid, genId))
79 int mysamples =
findSamples(genId, inputs, database, mypresamples);
84 else if (samples != mysamples) {
85 edm::LogError(
"CASTOR") <<
"Mismatch of samples in a single HTR (unsupported) " << mysamples
90 presamples = mypresamples;
92 }
else if (mypresamples != presamples) {
93 edm::LogError(
"CASTOR") <<
"Mismatch of presamples in a single HTR (unsupported) " << mypresamples
94 <<
" != " << presamples;
97 for (
int ii = 0;
ii < samples;
ii++)
98 database[
ii] = (database[
ii] & 0x7FF) | chanid;
99 preclen[
linear] = (
unsigned char)(samples);
105 spigots[spigot].
pack(&(preclen[0]), &(precdata[0]), &(triglen[0]), &(trigdata[0]),
false);
106 constexpr
int pipeline = 0x22;
107 constexpr
int firmwareRev = 0;
109 submodule |= (exampleEId.
htrSlot() & 0x1F) << 1;
111 spigots[spigot].
packHeaderTrailer(nl1a, bcn, submodule, orbitn, pipeline, samples, presamples, firmwareRev);
116 for (
int spigot = 0; spigot < 15; spigot++) {
117 theSize += spigots[spigot].
getRawLength() *
sizeof(
unsigned short);
120 theSize += (8 - (theSize % 8)) % 8;
126 dcc->
setHeader(fedid, bcn, nl1a, orbitn);
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
Log< level::Error, false > LogError
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] ...
tuple size
Write out results.
constexpr Detector det() const
get the detector field from this detid