|
|
Go to the documentation of this file.
24 const std::vector<double>&
w,
34 uint32_t minSignalThreshold,
35 uint32_t PMT_NoiseThreshold)
50 minSignalThreshold_(minSignalThreshold),
51 PMT_NoiseThreshold_(PMT_NoiseThreshold),
54 peak_finder_algorithm_(2),
55 override_parameters_() {
91 if (
frame.id().depth() == 5)
95 assert(ids.size() == 1 || ids.size() == 2);
98 samples1.setPresamples(
frame.presamples());
101 std::vector<bool> msb;
104 if (ids.size() == 2) {
107 for (
int i = 0;
i < samples1.size(); ++
i) {
108 samples1[
i] = uint32_t(samples1[
i] * 0.5);
109 samples2[
i] = samples1[
i];
111 samples2.setPresamples(
frame.presamples());
120 if (
frame.id().depth() == 1 ||
frame.id().depth() == 2) {
122 std::vector<HcalTrigTowerDetId>::const_iterator it;
123 for (it = ids.begin(); it != ids.end(); ++it) {
136 if (trig_tower_id.
version() == 0) {
138 uint32_t fgid = (
frame.id().maskDepth());
142 theTowerMapFGSum.insert(std::pair<HcalTrigTowerDetId, SumFGContainer>(trig_tower_id, sumFG));
146 SumFGContainer::iterator sumFGItr;
147 for (sumFGItr = sumFG.begin(); sumFGItr != sumFG.end(); ++sumFGItr) {
148 if (sumFGItr->id() == fgid) {
153 if (sumFGItr != sumFG.end()) {
164 sumFG.push_back(sumFGSamples);
169 vector<bool> vetoBits(
samples.size(),
false);
179 else if (trig_tower_id.
version() == 1) {
180 uint32_t fgid = (
frame.id().maskDepth());
183 if (
frame.id().depth() == 1) {
186 }
else if (
frame.id().depth() == 2) {
191 edm::LogWarning(
"HcalTPAlgo") <<
"Unable to figure out what to do with data frame for " <<
frame.id();
210 for (
const auto&
id : ids) {
212 edm::LogError(
"HcalTPAlgo") <<
"Encountered QIE10 data frame mapped to TP version 0:" <<
id;
216 int nsamples =
frame.samples();
230 auto& detail =
details[fid.depth() - 1];
233 detail.validity.resize(nsamples);
234 detail.passTDC.resize(nsamples);
236 for (
int idx = 0;
idx < nsamples; ++
idx) {
250 assert(ids.size() == 1 || ids.size() == 2);
253 samples1.setPresamples(
frame.presamples());
256 std::vector<std::bitset<2>> msb(
frame.samples(), 0);
259 if (ids.size() == 2) {
262 for (
int i = 0;
i < samples1.size(); ++
i) {
263 samples1[
i] = uint32_t(samples1[
i]);
264 samples2[
i] = samples1[
i];
266 samples2.setPresamples(
frame.presamples());
293 for (
int ibin = 0; ibin <
int(
samples.size()) - shrink; ++ibin) {
294 int algosumvalue = 0;
295 for (
unsigned int i = 0;
i <
weights_.size();
i++) {
299 if (algosumvalue < 0)
304 sum[ibin] = algosumvalue;
308 int dgPresamples =
samples.presamples();
310 int shift = dgPresamples - tpPresamples;
311 int dgSamples =
samples.size();
316 <<
"TP presample or size from the configuration file is out of the accessible range. Using digi values from "
319 tpPresamples = dgPresamples - shrink;
324 std::vector<int> finegrain(tpSamples,
false);
327 output.setPresamples(tpPresamples);
329 for (
int ibin = 0; ibin < tpSamples; ++ibin) {
350 finegrain[ibin] = msb[
idx];
357 finegrain[ibin] = msb[
idx];
379 for (
int ibin = 0; ibin <
int(
samples.size()) - shrink; ++ibin) {
380 int algosumvalue = 0;
381 for (
unsigned int i = 0;
i <
weights_.size();
i++) {
393 if (algosumvalue < 0)
398 sum[ibin] = algosumvalue;
402 int dgPresamples =
samples.presamples();
404 int shift = dgPresamples - tpPresamples;
405 int dgSamples =
samples.size();
409 edm::LogInfo(
"HcalTriggerPrimitiveAlgo::analyze") <<
"TP presample or size from the configuration file is out of "
410 "the accessible range. Using digi values from data instead...";
412 tpPresamples = dgPresamples - shrink;
416 std::vector<int> finegrain(tpSamples,
false);
419 output.setPresamples(tpPresamples);
421 for (
int ibin = 0; ibin < tpSamples; ++ibin) {
434 finegrain[ibin] = fg_algo.
compute(msb[
idx]).to_ulong();
441 const int hf_lumi_shift) {
445 int dgPresamples =
samples.presamples();
447 int shift = dgPresamples - tpPresamples;
448 int dgSamples =
samples.size();
450 if (shift < 0 || shift + tpSamples > dgSamples) {
452 <<
"TP presample or size from the configuration file is out of the accessible range. Using digi values from "
454 tpPresamples = dgPresamples;
456 tpSamples = dgSamples;
459 std::vector<int> finegrain(tpSamples,
false);
467 for (SumFGContainer::const_iterator sumFGItr = sumFG.begin(); sumFGItr != sumFG.end(); ++sumFGItr) {
468 const std::vector<bool>&
veto =
HF_Veto[sumFGItr->id().rawId()];
469 for (
int ibin = 0; ibin < tpSamples; ++ibin) {
481 output.setPresamples(tpPresamples);
483 for (
int ibin = 0; ibin < tpSamples; ++ibin) {
487 if (
output[ibin] > MAX_OUTPUT)
488 output[ibin] = MAX_OUTPUT;
495 const int hf_lumi_shift,
516 for (
const auto&
item : it->second) {
519 const int IDX = ibin + SHIFT;
520 int long_fiber_val = 0;
521 if (IDX <
details.long_fiber.size()) {
522 long_fiber_val =
details.long_fiber[IDX];
524 int short_fiber_val = 0;
525 if (IDX <
details.short_fiber.size()) {
526 short_fiber_val =
details.short_fiber[IDX];
528 output[ibin] += (long_fiber_val + short_fiber_val);
530 uint32_t ADCLong =
details.LongDigi[ibin].adc();
531 uint32_t ADCShort =
details.ShortDigi[ibin].adc();
536 if (embit !=
nullptr)
547 std::vector<int> finegrain_converted;
548 for (
const auto& fg : finegrain)
549 finegrain_converted.push_back(fg.to_ulong());
563 if (digi[ts].
adc() < adc_threshold)
566 return (1ul << digi[ts].le_tdc()) & tdc_mask;
583 const int hf_lumi_shift,
589 assert(hf_lumi_shift >= 2);
605 for (
const auto&
item : it->second) {
610 int long_fiber_val = 0;
611 int long_fiber_count = 0;
612 int short_fiber_val = 0;
613 int short_fiber_count = 0;
615 bool saturated =
false;
617 for (
auto i : {0, 2}) {
624 for (
auto i : {1, 3}) {
639 if (long_fiber_count == 2)
640 long_fiber_val >>= 1;
641 if (short_fiber_count == 2)
642 short_fiber_val >>= 1;
644 auto sum = long_fiber_val + short_fiber_val;
648 if (long_fiber_count > 0 and short_fiber_count > 0)
654 for (
const auto& detail :
details) {
655 if (
idx <
int(detail.digi.size()) and detail.validity[
idx] and
659 finegrain[ibin][1] = finegrain[ibin][1]
or detail.fgbits[
idx][0];
663 finegrain[ibin][0] = finegrain[ibin][0]
or detail.fgbits[
idx][1];
684 std::vector<int> finegrain_converted;
685 for (
const auto& fg : finegrain)
686 finegrain_converted.push_back(fg.to_ulong());
693 for (
int i = 0;
i <
tp->size(); ++
i) {
700 tp->setZSInfo(
false,
true);
702 tp->setZSInfo(
true,
false);
709 std::set<uint32_t> FrontEndErrors;
729 for (
int fchan = 0; fchan < 3 && !
valid; fchan++) {
730 for (
int fib = 0; fib < 9 && !
valid; fib++) {
740 for (std::vector<HcalTrigTowerDetId>::const_iterator triggerId = ids.begin(); triggerId != ids.end();
742 FrontEndErrors.insert(triggerId->rawId());
755 if (FrontEndErrors.find(
tp->id().rawId()) != FrontEndErrors.end()) {
756 for (
int i = 0;
i <
tp->size(); ++
i)
757 tp->setSample(
i, zeroSample);
763 FGbitMap::iterator
itr =
fgMap_.find(
id);
765 std::vector<bool>& _msb =
itr->second;
766 for (
size_t i = 0;
i < msb.size(); ++
i)
767 _msb[
i] = _msb[
i] || msb[
i];
795 unsigned int aieta =
id.ietaAbs();
803 const std::vector<std::bitset<2>>&
bits) {
806 std::vector<bool> pseudo(
bits.size(),
false);
815 element.resize(
bits.size());
826 element.resize(
bits.size());
827 it =
fgUpgradeMap_.insert(std::make_pair(
id, element)).first;
829 for (
unsigned int i = 0;
i <
bits.size(); ++
i) {
836 if (algo <= 0 || algo > 2)
837 throw cms::Exception(
"ERROR: Only algo 1 & 2 are supported.") << std::endl;
unsigned int readoutVMECrateId() const
HcalElectronicsId-style VME crate number.
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
int getADCThresholdHF() const
get ADC threshold fof TDC mask of HF
void addFG(const HcalTrigTowerDetId &id, std::vector< bool > &msb)
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds
bool isHistogramEvent() const
Is this event a histogram event? (do not call standard unpack in this case!!!!!)
void overrideParameters(const edm::ParameterSet &ps)
uint32_t override_adc_hf_value_
constexpr int samples() const
total number of samples in the digi
void setUpgradeFlags(bool hb, bool he, bool hf)
constexpr bool linkError() const
constexpr Detector det() const
get the detector field from this detid
static const int FIRST_FINEGRAIN_TOWER
void addUpgradeFG(const HcalTrigTowerDetId &id, int depth, const std::vector< std::bitset< 2 >> &bits)
const HcalDbService * conditions_
uint32_t getMask() const
get mask for channel validity and self trigger information
std::vector< HcalFinegrainBit::Tower > FGUpgradeContainer
constexpr bool null() const
is this a null id ?
void setNCTScaleShift(int)
void compress(const IntegerCaloSamples &ics, const std::vector< int > &fineGrain, HcalTriggerPrimitiveDigi &digi) const
unsigned long long override_tdc_hf_value_
unsigned int htrSlot() const
HcalElectronicsId-style HTR slot.
static const int QIE11_MAX_LINEARIZATION_ET
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
void setRCTScaleShift(int)
static const int QIE10_MAX_LINEARIZATION_ET
static const int LAST_FINEGRAIN_TOWER
bool passTDC(const QIE10DataFrame &digi, int ts) const
void addSignal(const HBHEDataFrame &frame)
adds the signal to the map
unsigned int htrTopBottom() const
HcalElectronicsId-style HTR top/bottom (1=top/0=bottom)
static const int QIE10_LINEARIZATION_ET
Readout chain identification for Hcal.
FGUpgradeMap fgUpgradeMap_
void runZS(HcalTrigPrimDigiCollection &tp)
int version() const
get the version code for the trigger tower
const HcalTPParameters * getHcalTPParameters() const
~HcalTriggerPrimitiveAlgo()
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
bool validUpgradeFG(const HcalTrigTowerDetId &id, int depth) const
edm::ParameterSet override_parameters_
uint32_t minSignalThreshold_
static const int HBHE_OVERLAP_TOWER
bool exists(std::string const ¶meterName) const
checks if a parameter exists
uint32_t PMT_NoiseThreshold_
virtual bool fineGrainbit(const QIE10DataFrame &short1, const QIE10DataFrame &short2, const QIE10DataFrame &long1, const QIE10DataFrame &long2, bool validShort1, bool validShort2, bool validLong1, bool validLong2, int idx) const =0
HFUpgradeDetailMap theHFUpgradeDetailMap
const HcalTrigTowerGeometry * theTrigTowerGeometry
std::vector< T >::iterator iterator
HcalTriggerPrimitiveAlgo(bool pf, const std::vector< double > &w, int latency, uint32_t FG_threshold, const std::vector< uint32_t > &FG_HF_thresholds, uint32_t ZS_threshold, int numberOfSamples, int numberOfPresamples, int numberOfSamplesHF, int numberOfPresamplesHF, bool useTDCInMinBiasBits, uint32_t minSignalThreshold=0, uint32_t PMT_NoiseThreshold=0)
void analyzeHF(IntegerCaloSamples &samples, HcalTriggerPrimitiveDigi &result, const int hf_lumi_shift)
constexpr HcalSubdetector subdet() const
get the subdetector
void lookupMSB(const HBHEDataFrame &df, std::vector< bool > &msb) const
void analyzeHFQIE10(const IntegerCaloSamples &SAMPLES, HcalTriggerPrimitiveDigi &result, const int HF_LUMI_SHIFT, const HcalFeatureBit *HCALFEM)
bool needLegacyFG(const HcalTrigTowerDetId &id) const
bool needUpgradeID(const HcalTrigTowerDetId &id, int depth) const
static const int FIRST_DEPTH7_TOWER
HFDetailMap theHFDetailMap
std::bitset< 4 > compute(const Tower &) const
std::vector< std::pair< float, float > >::iterator itr
bool validChannel(const QIE10DataFrame &digi, int ts) const
size_t size() const
Lenght of the data buffer in bytes.
static const int LAST_FINEGRAIN_DEPTH
T getParameter(std::string const &) const
int numberOfPresamplesHF_
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision bits
void analyzeQIE11(IntegerCaloSamples &samples, HcalTriggerPrimitiveDigi &result, const HcalFinegrainBit &fg_algo)
int peak_finder_algorithm_
void setPeakFinderAlgorithm(int algo)
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
static unsigned const int shift
const HcalTPGCompressor * outcoder_
void setPresamples(int pre)
set presample information
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void runFEFormatError(const FEDRawDataCollection *rawraw, const HcalElectronicsMap *emap, HcalTrigPrimDigiCollection &result)
void analyze(IntegerCaloSamples &samples, HcalTriggerPrimitiveDigi &result)
adds the actual digis
TowerMapFGSum theTowerMapFGSum
bool useTDCInMinBiasBits_
std::vector< uint32_t > FG_HF_thresholds_
constexpr edm::DataFrame::id_type id() const
const HcalTPChannelParameter * getHcalTPChannelParameter(const HcalGenericDetId &fId) const
void analyzeHF2016(const IntegerCaloSamples &SAMPLES, HcalTriggerPrimitiveDigi &result, const int HF_LUMI_SHIFT, const HcalFeatureBit *HCALFEM)
unsigned int getErrorsWord() const
Get the errors word.
std::vector< IntegerCaloSamples > SumFGContainer
void adc2Linear(const HBHEDataFrame &df, IntegerCaloSamples &ics) const override
static const int QIE8_LINEARIZATION_ET
std::vector< double > weights_
const HcaluLUTTPGCoder * incoder_
bool check() const
Check for a good event Requires a minimum length, matching wordcount and length, not an empty event.