11 template <
class Coll,
class DetIdClass>
16 typename Coll::const_iterator
i =
pt->find(DetIdClass(did));
53 constexpr
int HTRFormatVersion = 3;
57 for (
int spigot = 0; spigot < 15; spigot++) {
58 spigots[spigot].
allocate(HTRFormatVersion);
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))
84 else if (
samples != mysamples) {
85 edm::LogError(
"CASTOR") <<
"Mismatch of samples in a single HTR (unsupported) " << mysamples
93 edm::LogError(
"CASTOR") <<
"Mismatch of presamples in a single HTR (unsupported) " << mypresamples
98 database[
ii] = (database[
ii] & 0x7FF) | chanid;
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;
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
Log< level::Error, false > LogError
static const int MAXIMUM_SAMPLES_PER_CHANNEL
constexpr Detector det() const
get the detector field from this detid
void allocate(int version_to_create=0)
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.
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
constexpr uint16_t raw() const
get the raw word
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)
const DetId lookup(CastorElectronicsId fId) const
lookup the logical detid associated with the given electronics id
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)
Readout chain identification for Castor Bits for the readout chain : some names need change! [31:26] ...
const int getRawLength() const
Get the length of the raw data.