File indexing completed on 2023-10-25 09:39:09
0001 #ifndef DataFormats_HcalRecHit_HBHERecHitAuxSetter_h_
0002 #define DataFormats_HcalRecHit_HBHERecHitAuxSetter_h_
0003
0004 #include "DataFormats/HcalRecHit/interface/HBHERecHit.h"
0005 #include "DataFormats/HcalRecHit/interface/HBHEChannelInfo.h"
0006 #include "DataFormats/HcalRecHit/interface/CaloRecHitAuxSetter.h"
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 struct HBHERecHitAuxSetter {
0019 static const unsigned MASK_ADC = 0xffff;
0020 static const unsigned OFF_ADC = 0;
0021
0022
0023 static const unsigned MASK_NSAMPLES = 0xf;
0024 static const unsigned OFF_NSAMPLES = 16;
0025
0026
0027 static const unsigned MASK_SOI = 0xf;
0028 static const unsigned OFF_SOI = 20;
0029
0030
0031 static const unsigned MASK_CAPID = 0x3;
0032 static const unsigned OFF_CAPID = 24;
0033
0034
0035 static const unsigned OFF_TDC_TIME = 26;
0036 static const unsigned OFF_DROPPED = 27;
0037 static const unsigned OFF_LINK_ERR = 28;
0038 static const unsigned OFF_CAPID_ERR = 29;
0039
0040
0041 static const unsigned OFF_COMBINED = 30;
0042
0043
0044 constexpr static void setAux(const HBHEChannelInfo& info, HBHERecHit* rechit);
0045 };
0046
0047 constexpr void HBHERecHitAuxSetter::setAux(const HBHEChannelInfo& info, HBHERecHit* rechit) {
0048 using namespace CaloRecHitAuxSetter;
0049
0050 uint32_t aux = 0, auxHBHE = 0, auxPhase1 = 0;
0051
0052
0053 unsigned nSamples = info.nSamples();
0054 if (nSamples > 10)
0055 nSamples = 10;
0056 for (unsigned i = 0; i < 4 && i < nSamples; ++i)
0057 setField(&aux, 0xff, i * 8, info.tsAdc(i));
0058 for (unsigned i = 4; i < 8 && i < nSamples; ++i)
0059 setField(&auxHBHE, 0xff, (i - 4) * 8, info.tsAdc(i));
0060 for (unsigned i = 8; i < nSamples; ++i)
0061 setField(&auxPhase1, 0xff, (i - 8) * 8, info.tsAdc(i));
0062
0063
0064 setField(&auxPhase1, MASK_NSAMPLES, OFF_NSAMPLES, nSamples);
0065 unsigned soi = info.soi();
0066 if (soi > 10)
0067 soi = 10;
0068 setField(&auxPhase1, MASK_SOI, OFF_SOI, soi);
0069 setField(&auxPhase1, MASK_CAPID, OFF_CAPID, info.capid());
0070
0071
0072 setBit(&auxPhase1, OFF_TDC_TIME, info.hasTimeInfo());
0073 setBit(&auxPhase1, OFF_DROPPED, info.isDropped());
0074 setBit(&auxPhase1, OFF_LINK_ERR, info.hasLinkError());
0075 setBit(&auxPhase1, OFF_CAPID_ERR, info.hasCapidError());
0076
0077
0078 rechit->setAux(aux);
0079 rechit->setAuxHBHE(auxHBHE);
0080 rechit->setAuxPhase1(auxPhase1);
0081 }
0082
0083 #endif