CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes
HcalTriggerPrimitiveAlgo Class Reference

#include <HcalTriggerPrimitiveAlgo.h>

Classes

struct  HFDetails
 
struct  HFUpgradeDetails
 

Public Member Functions

template<typename T , typename... Args>
void addDigis (const T &collection, const Args &... digis)
 
template<typename T >
void addDigis (const T &collection)
 
template<typename D >
void addDigis (const HcalDataFrameContainer< D > &collection)
 
 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 numberOfFilterPresamplesHBQIE11, int numberOfFilterPresamplesHEQIE11, int numberOfSamplesHF, int numberOfPresamplesHF, bool useTDCInMinBiasBits, uint32_t minSignalThreshold=0, uint32_t PMT_NoiseThreshold=0)
 
void overrideParameters (const edm::ParameterSet &ps)
 
template<typename... Digis>
void run (const HcalTPGCoder *incoder, const HcalTPGCompressor *outcoder, const HcalDbService *conditions, HcalTrigPrimDigiCollection &result, const HcalTrigTowerGeometry *trigTowerGeometry, float rctlsb, const HcalFeatureBit *LongvrsShortCut, const Digis &... digis)
 
void runFEFormatError (const FEDRawDataCollection *rawraw, const HcalElectronicsMap *emap, HcalTrigPrimDigiCollection &result)
 
void runZS (HcalTrigPrimDigiCollection &tp)
 
void setFixSaturationFlag (bool fix_saturation)
 
void setNCTScaleShift (int)
 
void setNumFilterPresamplesHBQIE11 (int presamples)
 
void setNumFilterPresamplesHEQIE11 (int presamples)
 
void setPeakFinderAlgorithm (int algo)
 
void setRCTScaleShift (int)
 
void setUpgradeFlags (bool hb, bool he, bool hf)
 
void setWeightQIE11 (int aieta, double weight)
 
void setWeightsQIE11 (const edm::ParameterSet &weightsQIE11)
 
 ~HcalTriggerPrimitiveAlgo ()
 

Private Types

typedef std::map< HcalTrigTowerDetId, std::vector< bool > > FGbitMap
 
typedef std::vector< HcalFinegrainBit::TowerFGUpgradeContainer
 
typedef std::map< HcalTrigTowerDetId, FGUpgradeContainerFGUpgradeMap
 
typedef std::vector< HcalFinegrainBit::TowerTDCFGUpgradeTDCContainer
 
typedef std::map< HcalTrigTowerDetId, FGUpgradeTDCContainerFGUpgradeTDCMap
 
typedef std::map< HcalTrigTowerDetId, std::map< uint32_t, HFDetails > > HFDetailMap
 
typedef std::map< HcalTrigTowerDetId, std::map< uint32_t, std::array< HFUpgradeDetails, 4 > > > HFUpgradeDetailMap
 
typedef std::map< HcalTrigTowerDetId, std::vector< bool > > SatMap
 
typedef std::vector< IntegerCaloSamplesSumFGContainer
 
typedef std::map< HcalTrigTowerDetId, IntegerCaloSamplesSumMap
 
typedef std::map< HcalTrigTowerDetId, SumFGContainerTowerMapFGSum
 
typedef std::map< uint32_t, std::vector< bool > > TowerMapVeto
 

Private Member Functions

void addFG (const HcalTrigTowerDetId &id, std::vector< bool > &msb)
 
void addSignal (const HBHEDataFrame &frame)
 adds the signal to the map More...
 
void addSignal (const HFDataFrame &frame)
 
void addSignal (const QIE10DataFrame &frame)
 
void addSignal (const QIE11DataFrame &frame)
 
void addSignal (const IntegerCaloSamples &samples)
 
void addUpgradeFG (const HcalTrigTowerDetId &id, int depth, const std::vector< std::bitset< 2 >> &bits)
 
void addUpgradeTDCFG (const HcalTrigTowerDetId &id, const QIE11DataFrame &frame)
 
void analyze (IntegerCaloSamples &samples, HcalTriggerPrimitiveDigi &result)
 adds the actual digis More...
 
void analyzeHF (IntegerCaloSamples &samples, HcalTriggerPrimitiveDigi &result, const int hf_lumi_shift)
 
void analyzeHF2016 (const IntegerCaloSamples &SAMPLES, HcalTriggerPrimitiveDigi &result, const int HF_LUMI_SHIFT, const HcalFeatureBit *HCALFEM)
 
void analyzeHFQIE10 (const IntegerCaloSamples &SAMPLES, HcalTriggerPrimitiveDigi &result, const int HF_LUMI_SHIFT, const HcalFeatureBit *HCALFEM)
 
void analyzeQIE11 (IntegerCaloSamples &samples, std::vector< bool > sample_saturation, HcalTriggerPrimitiveDigi &result, const HcalFinegrainBit &fg_algo)
 
bool needLegacyFG (const HcalTrigTowerDetId &id) const
 
bool needUpgradeID (const HcalTrigTowerDetId &id, int depth) const
 
bool passTDC (const QIE10DataFrame &digi, int ts) const
 
bool validChannel (const QIE10DataFrame &digi, int ts) const
 
bool validUpgradeFG (const HcalTrigTowerDetId &id, int depth) const
 

Private Attributes

const HcalDbServiceconditions_
 
std::vector< uint32_t > FG_HF_thresholds_
 
uint32_t FG_threshold_
 
FGbitMap fgMap_
 
FGUpgradeMap fgUpgradeMap_
 
FGUpgradeTDCMap fgUpgradeTDCMap_
 
bool fix_saturation_ = false
 
TowerMapVeto HF_Veto
 
const HcaluLUTTPGCoderincoder_
 
int latency_
 
HcalFeatureBitLongvrsShortCut
 
uint32_t minSignalThreshold_
 
int NCTScaleShift
 
int numberOfFilterPresamplesHBQIE11_
 
int numberOfFilterPresamplesHEQIE11_
 
int numberOfPresamples_
 
int numberOfPresamplesHF_
 
int numberOfSamples_
 
int numberOfSamplesHF_
 
const HcalTPGCompressoroutcoder_
 
bool override_adc_hf_ = false
 
uint32_t override_adc_hf_value_
 
edm::ParameterSet override_parameters_
 
bool override_tdc_hf_ = false
 
unsigned long long override_tdc_hf_value_
 
int peak_finder_algorithm_
 
bool peakfind_
 
uint32_t PMT_NoiseThreshold_
 
int RCTScaleShift
 
HFDetailMap theHFDetailMap
 
HFUpgradeDetailMap theHFUpgradeDetailMap
 
SatMap theSatMap
 
SumMap theSumMap
 
double theThreshold
 
TowerMapFGSum theTowerMapFGSum
 
const HcalTrigTowerGeometrytheTrigTowerGeometry
 
bool upgrade_hb_ = false
 
bool upgrade_he_ = false
 
bool upgrade_hf_ = false
 
bool useTDCInMinBiasBits_
 
std::vector< double > weights_
 
std::array< std::array< double, 2 >, 29 > weightsQIE11_
 
uint32_t ZS_threshold_
 
int ZS_threshold_I_
 

Static Private Attributes

static const int FIRST_DEPTH7_TOWER = 26
 
static const int FIRST_FINEGRAIN_TOWER = 30
 
static const int HBHE_OVERLAP_TOWER = 16
 
static const int LAST_FINEGRAIN_DEPTH = 6
 
static const int LAST_FINEGRAIN_TOWER = 28
 
static const int QIE10_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE10_LUT_BITMASK
 
static const int QIE10_MAX_LINEARIZATION_ET = 0x7FF
 
static const int QIE11_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE11_LUT_BITMASK
 
static const int QIE11_MAX_LINEARIZATION_ET = 0x7FF
 
static const int QIE8_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE8_LUT_BITMASK
 

Detailed Description

Definition at line 27 of file HcalTriggerPrimitiveAlgo.h.

Member Typedef Documentation

◆ FGbitMap

typedef std::map<HcalTrigTowerDetId, std::vector<bool> > HcalTriggerPrimitiveAlgo::FGbitMap
private

Definition at line 210 of file HcalTriggerPrimitiveAlgo.h.

◆ FGUpgradeContainer

Definition at line 213 of file HcalTriggerPrimitiveAlgo.h.

◆ FGUpgradeMap

Definition at line 214 of file HcalTriggerPrimitiveAlgo.h.

◆ FGUpgradeTDCContainer

Definition at line 217 of file HcalTriggerPrimitiveAlgo.h.

◆ FGUpgradeTDCMap

Definition at line 218 of file HcalTriggerPrimitiveAlgo.h.

◆ HFDetailMap

typedef std::map<HcalTrigTowerDetId, std::map<uint32_t, HFDetails> > HcalTriggerPrimitiveAlgo::HFDetailMap
private

Definition at line 180 of file HcalTriggerPrimitiveAlgo.h.

◆ HFUpgradeDetailMap

typedef std::map<HcalTrigTowerDetId, std::map<uint32_t, std::array<HFUpgradeDetails, 4> > > HcalTriggerPrimitiveAlgo::HFUpgradeDetailMap
private

Definition at line 190 of file HcalTriggerPrimitiveAlgo.h.

◆ SatMap

typedef std::map<HcalTrigTowerDetId, std::vector<bool> > HcalTriggerPrimitiveAlgo::SatMap
private

Definition at line 171 of file HcalTriggerPrimitiveAlgo.h.

◆ SumFGContainer

Definition at line 193 of file HcalTriggerPrimitiveAlgo.h.

◆ SumMap

Definition at line 168 of file HcalTriggerPrimitiveAlgo.h.

◆ TowerMapFGSum

Definition at line 194 of file HcalTriggerPrimitiveAlgo.h.

◆ TowerMapVeto

typedef std::map<uint32_t, std::vector<bool> > HcalTriggerPrimitiveAlgo::TowerMapVeto
private

Definition at line 207 of file HcalTriggerPrimitiveAlgo.h.

Constructor & Destructor Documentation

◆ HcalTriggerPrimitiveAlgo()

HcalTriggerPrimitiveAlgo::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  numberOfFilterPresamplesHBQIE11,
int  numberOfFilterPresamplesHEQIE11,
int  numberOfSamplesHF,
int  numberOfPresamplesHF,
bool  useTDCInMinBiasBits,
uint32_t  minSignalThreshold = 0,
uint32_t  PMT_NoiseThreshold = 0 
)

Definition at line 23 of file HcalTriggerPrimitiveAlgo.cc.

References numberOfPresamples_, numberOfPresamplesHF_, numberOfSamples_, numberOfSamplesHF_, peakfind_, ZS_threshold_, and ZS_threshold_I_.

38  : incoder_(nullptr),
39  outcoder_(nullptr),
40  theThreshold(0),
41  peakfind_(pf),
42  weights_(w),
54  minSignalThreshold_(minSignalThreshold),
55  PMT_NoiseThreshold_(PMT_NoiseThreshold),
56  NCTScaleShift(0),
57  RCTScaleShift(0),
60  //No peak finding setting (for Fastsim)
61  if (!peakfind_) {
62  numberOfSamples_ = 1;
66  }
67  // Switch to integer for comparisons - remove compiler warning
69 }
std::vector< uint32_t > FG_HF_thresholds_
T w() const
const HcalTPGCompressor * outcoder_
const HcaluLUTTPGCoder * incoder_

◆ ~HcalTriggerPrimitiveAlgo()

HcalTriggerPrimitiveAlgo::~HcalTriggerPrimitiveAlgo ( )

Definition at line 71 of file HcalTriggerPrimitiveAlgo.cc.

71 {}

Member Function Documentation

◆ addDigis() [1/3]

template<typename T , typename... Args>
void HcalTriggerPrimitiveAlgo::addDigis ( const T collection,
const Args &...  digis 
)
inline

Definition at line 57 of file HcalTriggerPrimitiveAlgo.h.

References universalConfigTemplate::collection.

Referenced by run().

57  {
59  addDigis(digis...);
60  };
void addDigis(const T &collection, const Args &... digis)

◆ addDigis() [2/3]

template<typename T >
void HcalTriggerPrimitiveAlgo::addDigis ( const T collection)
inline

Definition at line 63 of file HcalTriggerPrimitiveAlgo.h.

References addSignal(), and universalConfigTemplate::collection.

63  {
64  for (const auto& digi : collection) {
65  addSignal(digi);
66  }
67  };
void addSignal(const HBHEDataFrame &frame)
adds the signal to the map

◆ addDigis() [3/3]

template<typename D >
void HcalTriggerPrimitiveAlgo::addDigis ( const HcalDataFrameContainer< D > &  collection)
inline

Definition at line 70 of file HcalTriggerPrimitiveAlgo.h.

References addSignal(), universalConfigTemplate::collection, and mps_fire::i.

70  {
71  for (auto i = collection.begin(); i != collection.end(); ++i) {
72  D digi(*i);
73  addSignal(digi);
74  }
75  };
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:141
void addSignal(const HBHEDataFrame &frame)
adds the signal to the map

◆ addFG()

void HcalTriggerPrimitiveAlgo::addFG ( const HcalTrigTowerDetId id,
std::vector< bool > &  msb 
)
private

Definition at line 852 of file HcalTriggerPrimitiveAlgo.cc.

References fgMap_, mps_fire::i, and triggerObjects_cff::id.

Referenced by addSignal(), and addUpgradeFG().

852  {
853  FGbitMap::iterator itr = fgMap_.find(id);
854  if (itr != fgMap_.end()) {
855  std::vector<bool>& _msb = itr->second;
856  for (size_t i = 0; i < msb.size(); ++i)
857  _msb[i] = _msb[i] || msb[i];
858  } else
859  fgMap_[id] = msb;
860 }

◆ addSignal() [1/5]

void HcalTriggerPrimitiveAlgo::addSignal ( const HBHEDataFrame frame)
private

adds the signal to the map

Definition at line 94 of file HcalTriggerPrimitiveAlgo.cc.

References HcaluLUTTPGCoder::adc2Linear(), addFG(), cms::cuda::assert(), amptDefault_cfi::frame, mps_fire::i, incoder_, HcaluLUTTPGCoder::lookupMSB(), theTrigTowerGeometry, and HcalTrigTowerGeometry::towerIds().

Referenced by addDigis(), and addSignal().

94  {
95  // TODO: Need to add support for seperate 28, 29 in HE
96  //Hack for 300_pre10, should be removed.
97  if (frame.id().depth() == 5)
98  return;
99 
100  std::vector<HcalTrigTowerDetId> ids = theTrigTowerGeometry->towerIds(frame.id());
101  assert(ids.size() == 1 || ids.size() == 2);
102  IntegerCaloSamples samples1(ids[0], int(frame.size()));
103 
104  samples1.setPresamples(frame.presamples());
105  incoder_->adc2Linear(frame, samples1);
106 
107  std::vector<bool> msb;
108  incoder_->lookupMSB(frame, msb);
109 
110  if (ids.size() == 2) {
111  // make a second trigprim for the other one, and split the energy
112  IntegerCaloSamples samples2(ids[1], samples1.size());
113  for (int i = 0; i < samples1.size(); ++i) {
114  samples1[i] = uint32_t(samples1[i] * 0.5);
115  samples2[i] = samples1[i];
116  }
117  samples2.setPresamples(frame.presamples());
118  addSignal(samples2);
119  addFG(ids[1], msb);
120  }
121  addSignal(samples1);
122  addFG(ids[0], msb);
123 }
void lookupMSB(const HBHEDataFrame &df, std::vector< bool > &msb) const
void addFG(const HcalTrigTowerDetId &id, std::vector< bool > &msb)
assert(be >=bs)
const HcalTrigTowerGeometry * theTrigTowerGeometry
void adc2Linear(const HBHEDataFrame &df, IntegerCaloSamples &ics) const override
const HcaluLUTTPGCoder * incoder_
void addSignal(const HBHEDataFrame &frame)
adds the signal to the map
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds

◆ addSignal() [2/5]

void HcalTriggerPrimitiveAlgo::addSignal ( const HFDataFrame frame)
private

Definition at line 125 of file HcalTriggerPrimitiveAlgo.cc.

References HcaluLUTTPGCoder::adc2Linear(), addSignal(), amptDefault_cfi::frame, HF_Veto, mps_fire::i, incoder_, minSignalThreshold_, EgammaValidation_cff::samples, IntegerCaloSamples::setPresamples(), theHFDetailMap, theTowerMapFGSum, theTrigTowerGeometry, HcalTrigTowerGeometry::towerIds(), and HcalTrigTowerDetId::version().

125  {
126  if (frame.id().depth() == 1 || frame.id().depth() == 2) {
127  std::vector<HcalTrigTowerDetId> ids = theTrigTowerGeometry->towerIds(frame.id());
128  std::vector<HcalTrigTowerDetId>::const_iterator it;
129  for (it = ids.begin(); it != ids.end(); ++it) {
130  HcalTrigTowerDetId trig_tower_id = *it;
131  IntegerCaloSamples samples(trig_tower_id, frame.size());
132  samples.setPresamples(frame.presamples());
134 
135  // Don't add to final collection yet
136  // HF PMT veto sum is calculated in analyzerHF()
137  IntegerCaloSamples zero_samples(trig_tower_id, frame.size());
138  zero_samples.setPresamples(frame.presamples());
139  addSignal(zero_samples);
140 
141  // Pre-LS1 Configuration
142  if (trig_tower_id.version() == 0) {
143  // Mask off depths: fgid is the same for both depths
144  uint32_t fgid = (frame.id().maskDepth());
145 
146  if (theTowerMapFGSum.find(trig_tower_id) == theTowerMapFGSum.end()) {
147  SumFGContainer sumFG;
148  theTowerMapFGSum.insert(std::pair<HcalTrigTowerDetId, SumFGContainer>(trig_tower_id, sumFG));
149  }
150 
151  SumFGContainer& sumFG = theTowerMapFGSum[trig_tower_id];
152  SumFGContainer::iterator sumFGItr;
153  for (sumFGItr = sumFG.begin(); sumFGItr != sumFG.end(); ++sumFGItr) {
154  if (sumFGItr->id() == fgid) {
155  break;
156  }
157  }
158  // If find
159  if (sumFGItr != sumFG.end()) {
160  for (int i = 0; i < samples.size(); ++i) {
161  (*sumFGItr)[i] += samples[i];
162  }
163  } else {
164  //Copy samples (change to fgid)
165  IntegerCaloSamples sumFGSamples(DetId(fgid), samples.size());
166  sumFGSamples.setPresamples(samples.presamples());
167  for (int i = 0; i < samples.size(); ++i) {
168  sumFGSamples[i] = samples[i];
169  }
170  sumFG.push_back(sumFGSamples);
171  }
172 
173  // set veto to true if Long or Short less than threshold
174  if (HF_Veto.find(fgid) == HF_Veto.end()) {
175  vector<bool> vetoBits(samples.size(), false);
176  HF_Veto[fgid] = vetoBits;
177  }
178  for (int i = 0; i < samples.size(); ++i) {
179  if (samples[i] < minSignalThreshold_) {
180  HF_Veto[fgid][i] = true;
181  }
182  }
183  }
184  // HF 1x1
185  else if (trig_tower_id.version() == 1) {
186  uint32_t fgid = (frame.id().maskDepth());
187  HFDetails& details = theHFDetailMap[trig_tower_id][fgid];
188  // Check the frame type to determine long vs short
189  if (frame.id().depth() == 1) { // Long
190  details.long_fiber = samples;
191  details.LongDigi = frame;
192  } else if (frame.id().depth() == 2) { // Short
193  details.short_fiber = samples;
194  details.ShortDigi = frame;
195  } else {
196  // Neither long nor short... So we have no idea what to do
197  edm::LogWarning("HcalTPAlgo") << "Unable to figure out what to do with data frame for " << frame.id();
198  return;
199  }
200  }
201  // Uh oh, we are in a bad/unknown state! Things will start crashing.
202  else {
203  return;
204  }
205  }
206  }
207 }
void setPresamples(int pre)
set presample information
std::vector< IntegerCaloSamples > SumFGContainer
const HcalTrigTowerGeometry * theTrigTowerGeometry
Definition: helper.h:56
Definition: DetId.h:17
void adc2Linear(const HBHEDataFrame &df, IntegerCaloSamples &ics) const override
const HcaluLUTTPGCoder * incoder_
Log< level::Warning, false > LogWarning
int version() const
get the version code for the trigger tower
void addSignal(const HBHEDataFrame &frame)
adds the signal to the map
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds

◆ addSignal() [3/5]

void HcalTriggerPrimitiveAlgo::addSignal ( const QIE10DataFrame frame)
private

Definition at line 209 of file HcalTriggerPrimitiveAlgo.cc.

References HcaluLUTTPGCoder::adc2Linear(), addSignal(), amptDefault_cfi::frame, HcalForward, triggerObjects_cff::id, heavyIonCSV_trainingSettings::idx, incoder_, HcaluLUTTPGCoder::lookupMSB(), passTDC(), EgammaValidation_cff::samples, IntegerCaloSamples::setPresamples(), HcalDetId::subdet(), theHFUpgradeDetailMap, theTrigTowerGeometry, HcalTrigTowerGeometry::towerIds(), validChannel(), and BeamSplash_cfg::version.

209  {
210  HcalDetId detId = frame.detid();
211  // prevent QIE10 calibration channels from entering TP emulation
212  if (detId.subdet() != HcalForward)
213  return;
214 
215  auto ids = theTrigTowerGeometry->towerIds(frame.id());
216  for (const auto& id : ids) {
217  if (id.version() == 0) {
218  edm::LogError("HcalTPAlgo") << "Encountered QIE10 data frame mapped to TP version 0:" << id;
219  continue;
220  }
221 
222  int nsamples = frame.samples();
223 
224  IntegerCaloSamples samples(id, nsamples);
225  samples.setPresamples(frame.presamples());
227 
228  // Don't add to final collection yet
229  // HF PMT veto sum is calculated in analyzerHF()
230  IntegerCaloSamples zero_samples(id, nsamples);
231  zero_samples.setPresamples(frame.presamples());
232  addSignal(zero_samples);
233 
234  auto fid = HcalDetId(frame.id());
235  auto& details = theHFUpgradeDetailMap[id][fid.maskDepth()];
236  auto& detail = details[fid.depth() - 1];
237  detail.samples = samples;
238  detail.digi = frame;
239  detail.validity.resize(nsamples);
240  detail.passTDC.resize(nsamples);
241  incoder_->lookupMSB(frame, detail.fgbits);
242  for (int idx = 0; idx < nsamples; ++idx) {
243  detail.validity[idx] = validChannel(frame, idx);
244  detail.passTDC[idx] = passTDC(frame, idx);
245  }
246  }
247 }
HFUpgradeDetailMap theHFUpgradeDetailMap
void lookupMSB(const HBHEDataFrame &df, std::vector< bool > &msb) const
Log< level::Error, false > LogError
constexpr HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
const HcalTrigTowerGeometry * theTrigTowerGeometry
Definition: helper.h:56
void adc2Linear(const HBHEDataFrame &df, IntegerCaloSamples &ics) const override
const HcaluLUTTPGCoder * incoder_
bool passTDC(const QIE10DataFrame &digi, int ts) const
bool validChannel(const QIE10DataFrame &digi, int ts) const
void addSignal(const HBHEDataFrame &frame)
adds the signal to the map
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds

◆ addSignal() [4/5]

void HcalTriggerPrimitiveAlgo::addSignal ( const QIE11DataFrame frame)
private

Definition at line 249 of file HcalTriggerPrimitiveAlgo.cc.

References HcaluLUTTPGCoder::adc2Linear(), addSignal(), addUpgradeFG(), addUpgradeTDCFG(), cms::cuda::assert(), amptDefault_cfi::frame, HcalBarrel, HcalEndcap, mps_fire::i, incoder_, HcaluLUTTPGCoder::lookupMSB(), theTrigTowerGeometry, and HcalTrigTowerGeometry::towerIds().

249  {
250  HcalDetId detId(frame.id());
251  // prevent QIE11 calibration channels from entering TP emulation
252  if (detId.subdet() != HcalEndcap && detId.subdet() != HcalBarrel)
253  return;
254 
255  std::vector<HcalTrigTowerDetId> ids = theTrigTowerGeometry->towerIds(detId);
256  assert(ids.size() == 1 || ids.size() == 2);
257  IntegerCaloSamples samples1(ids[0], int(frame.samples()));
258 
259  samples1.setPresamples(frame.presamples());
260  incoder_->adc2Linear(frame, samples1);
261 
262  std::vector<std::bitset<2>> msb(frame.samples(), 0);
263  incoder_->lookupMSB(frame, msb);
264 
265  if (ids.size() == 2) {
266  // make a second trigprim for the other one, and share the energy
267  IntegerCaloSamples samples2(ids[1], samples1.size());
268  for (int i = 0; i < samples1.size(); ++i) {
269  samples1[i] = uint32_t(samples1[i]);
270  samples2[i] = samples1[i];
271  }
272  samples2.setPresamples(frame.presamples());
273  addSignal(samples2);
274  addUpgradeFG(ids[1], detId.depth(), msb);
275  addUpgradeTDCFG(ids[1], frame);
276  }
277  addSignal(samples1);
278  addUpgradeFG(ids[0], detId.depth(), msb);
279  addUpgradeTDCFG(ids[0], frame);
280 }
void addUpgradeTDCFG(const HcalTrigTowerDetId &id, const QIE11DataFrame &frame)
void lookupMSB(const HBHEDataFrame &df, std::vector< bool > &msb) const
assert(be >=bs)
const HcalTrigTowerGeometry * theTrigTowerGeometry
void adc2Linear(const HBHEDataFrame &df, IntegerCaloSamples &ics) const override
void addUpgradeFG(const HcalTrigTowerDetId &id, int depth, const std::vector< std::bitset< 2 >> &bits)
const HcaluLUTTPGCoder * incoder_
void addSignal(const HBHEDataFrame &frame)
adds the signal to the map
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds

◆ addSignal() [5/5]

void HcalTriggerPrimitiveAlgo::addSignal ( const IntegerCaloSamples samples)
private

Definition at line 282 of file HcalTriggerPrimitiveAlgo.cc.

References cms::cuda::assert(), fix_saturation_, mps_fire::i, triggerObjects_cff::id, QIE11_LINEARIZATION_ET, EgammaValidation_cff::samples, theSatMap, and theSumMap.

282  {
284  SumMap::iterator itr = theSumMap.find(id);
285 
286  if (itr == theSumMap.end()) {
287  theSumMap.insert(std::make_pair(id, samples));
288  } else {
289  // wish CaloSamples had a +=
290  for (int i = 0; i < samples.size(); ++i) {
291  (itr->second)[i] += samples[i];
292  }
293  }
294 
295  // if fix_saturation == true, keep track of tower with saturated input LUT
296  if (fix_saturation_) {
297  SatMap::iterator itr_sat = theSatMap.find(id);
298 
299  assert((itr == theSumMap.end()) == (itr_sat == theSatMap.end()));
300 
301  if (itr_sat == theSatMap.end()) {
302  vector<bool> check_sat;
303  for (int i = 0; i < samples.size(); ++i) {
304  if (!(samples[i] < QIE11_LINEARIZATION_ET)) {
305  check_sat.push_back(true);
306  } else
307  check_sat.push_back(false);
308  }
309  theSatMap.insert(std::make_pair(id, check_sat));
310  } else {
311  for (int i = 0; i < samples.size(); ++i) {
312  if (!(samples[i] < QIE11_LINEARIZATION_ET))
313  (itr_sat->second)[i] = true;
314  }
315  }
316  }
317 }
assert(be >=bs)

◆ addUpgradeFG()

void HcalTriggerPrimitiveAlgo::addUpgradeFG ( const HcalTrigTowerDetId id,
int  depth,
const std::vector< std::bitset< 2 >> &  bits 
)
private

Definition at line 891 of file HcalTriggerPrimitiveAlgo.cc.

References addFG(), LEDCalibrationChannels::depth, fgUpgradeMap_, mps_fire::i, needLegacyFG(), needUpgradeID(), and validUpgradeFG().

Referenced by addSignal().

893  {
894  if (not validUpgradeFG(id, depth)) {
895  if (needLegacyFG(id)) {
896  std::vector<bool> pseudo(bits.size(), false);
897  addFG(id, pseudo);
898  } else if (needUpgradeID(id, depth)) {
899  // If the tower id is not in the map yet
900  // then for safety's sake add it, otherwise, no need
901  // Likewise, we're here with non-fg depth 7 so the bits are not to be added
902  auto it = fgUpgradeMap_.find(id);
903  if (it == fgUpgradeMap_.end()) {
904  FGUpgradeContainer element;
905  element.resize(bits.size());
906  fgUpgradeMap_.insert(std::make_pair(id, element));
907  }
908  }
909 
910  return;
911  }
912 
913  auto it = fgUpgradeMap_.find(id);
914  if (it == fgUpgradeMap_.end()) {
915  FGUpgradeContainer element;
916  element.resize(bits.size());
917  it = fgUpgradeMap_.insert(std::make_pair(id, element)).first;
918  }
919  for (unsigned int i = 0; i < bits.size(); ++i) {
920  it->second[i][0][depth - 1] = bits[i][0];
921  it->second[i][1][depth - 1] = bits[i][1];
922  }
923 }
bool validUpgradeFG(const HcalTrigTowerDetId &id, int depth) const
bool needLegacyFG(const HcalTrigTowerDetId &id) const
void addFG(const HcalTrigTowerDetId &id, std::vector< bool > &msb)
bool needUpgradeID(const HcalTrigTowerDetId &id, int depth) const
std::vector< HcalFinegrainBit::Tower > FGUpgradeContainer

◆ addUpgradeTDCFG()

void HcalTriggerPrimitiveAlgo::addUpgradeTDCFG ( const HcalTrigTowerDetId id,
const QIE11DataFrame frame 
)
private

Definition at line 925 of file HcalTriggerPrimitiveAlgo.cc.

References HcaluLUTTPGCoder::adc2Linear(), cms::cuda::assert(), fgUpgradeTDCMap_, amptDefault_cfi::frame, HcaluLUTTPGCoder::group0FGbits(), HcalBarrel, HcalEndcap, mps_fire::i, incoder_, theTrigTowerGeometry, and HcalTrigTowerGeometry::towerIds().

Referenced by addSignal().

925  {
926  HcalDetId detId(frame.id());
927  if (detId.subdet() != HcalEndcap && detId.subdet() != HcalBarrel)
928  return;
929 
930  std::vector<HcalTrigTowerDetId> ids = theTrigTowerGeometry->towerIds(detId);
931  assert(ids.size() == 1 || ids.size() == 2);
932  IntegerCaloSamples samples1(ids[0], int(frame.samples()));
933  samples1.setPresamples(frame.presamples());
934  incoder_->adc2Linear(frame, samples1); // use linearization LUT
935  std::vector<unsigned short> bits12_15 = incoder_->group0FGbits(frame); // get 4 energy bits (12-15) from group 0 LUT
936 
937  bool is_compressed = false;
938  if (detId.subdet() == HcalBarrel) {
939  is_compressed = (frame.flavor() == 3);
940  // 0 if frame.flavor is 0 (uncompressed), 1 if frame.flavor is 3 (compressed)
941  }
942 
943  auto it = fgUpgradeTDCMap_.find(id);
944  if (it == fgUpgradeTDCMap_.end()) {
945  FGUpgradeTDCContainer element;
946  element.resize(frame.samples());
947  it = fgUpgradeTDCMap_.insert(std::make_pair(id, element)).first;
948  }
949  for (int i = 0; i < frame.samples(); i++) {
950  it->second[i][detId.depth() - 1] =
951  std::make_pair(std::make_pair(bits12_15[i], is_compressed), std::make_pair(frame[i].tdc(), samples1[i]));
952  }
953 }
std::vector< unsigned short > group0FGbits(const QIE11DataFrame &df) const
assert(be >=bs)
const HcalTrigTowerGeometry * theTrigTowerGeometry
std::vector< HcalFinegrainBit::TowerTDC > FGUpgradeTDCContainer
void adc2Linear(const HBHEDataFrame &df, IntegerCaloSamples &ics) const override
const HcaluLUTTPGCoder * incoder_
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds

◆ analyze()

void HcalTriggerPrimitiveAlgo::analyze ( IntegerCaloSamples samples,
HcalTriggerPrimitiveDigi result 
)
private

adds the actual digis

Definition at line 319 of file HcalTriggerPrimitiveAlgo.cc.

References HcalTPGCompressor::compress(), fgMap_, mps_fire::i, heavyIonCSV_trainingSettings::idx, createfilelist::int, numberOfPresamples_, numberOfSamples_, outcoder_, convertSQLitetoXML_cfg::output, peak_finder_algorithm_, peakfind_, QIE8_LINEARIZATION_ET, mps_fire::result, EgammaValidation_cff::samples, edm::shift, theThreshold, and weights_.

Referenced by run().

319  {
320  int shrink = weights_.size() - 1;
321  std::vector<bool>& msb = fgMap_[samples.id()];
322  IntegerCaloSamples sum(samples.id(), samples.size());
323 
324  //slide algo window
325  for (int ibin = 0; ibin < int(samples.size()) - shrink; ++ibin) {
326  int algosumvalue = 0;
327  for (unsigned int i = 0; i < weights_.size(); i++) {
328  //add up value * scale factor
329  algosumvalue += int(samples[ibin + i] * weights_[i]);
330  }
331  if (algosumvalue < 0)
332  sum[ibin] = 0; // low-side
333  //high-side
334  //else if (algosumvalue>QIE8_LINEARIZATION_ET) sum[ibin]=QIE8_LINEARIZATION_ET;
335  else
336  sum[ibin] = algosumvalue; //assign value to sum[]
337  }
338 
339  // Align digis and TP
340  int dgPresamples = samples.presamples();
341  int tpPresamples = numberOfPresamples_;
342  int shift = dgPresamples - tpPresamples;
343  int dgSamples = samples.size();
344  int tpSamples = numberOfSamples_;
345  if (peakfind_) {
346  if ((shift < shrink) || (shift + tpSamples + shrink > dgSamples - (peak_finder_algorithm_ - 1))) {
347  edm::LogInfo("HcalTriggerPrimitiveAlgo::analyze")
348  << "TP presample or size from the configuration file is out of the accessible range. Using digi values from "
349  "data instead...";
350  shift = shrink;
351  tpPresamples = dgPresamples - shrink;
352  tpSamples = dgSamples - (peak_finder_algorithm_ - 1) - shrink - shift;
353  }
354  }
355 
356  std::vector<int> finegrain(tpSamples, false);
357 
358  IntegerCaloSamples output(samples.id(), tpSamples);
359  output.setPresamples(tpPresamples);
360 
361  for (int ibin = 0; ibin < tpSamples; ++ibin) {
362  // ibin - index for output TP
363  // idx - index for samples + shift
364  int idx = ibin + shift;
365 
366  //Peak finding
367  if (peakfind_) {
368  bool isPeak = false;
369  switch (peak_finder_algorithm_) {
370  case 1:
371  isPeak = (samples[idx] > samples[idx - 1] && samples[idx] >= samples[idx + 1] && samples[idx] > theThreshold);
372  break;
373  case 2:
374  isPeak = (sum[idx] > sum[idx - 1] && sum[idx] >= sum[idx + 1] && sum[idx] > theThreshold);
375  break;
376  default:
377  break;
378  }
379 
380  if (isPeak) {
381  output[ibin] = std::min<unsigned int>(sum[idx], QIE8_LINEARIZATION_ET);
382  finegrain[ibin] = msb[idx];
383  }
384  // Not a peak
385  else
386  output[ibin] = 0;
387  } else { // No peak finding, just output running sum
388  output[ibin] = std::min<unsigned int>(sum[idx], QIE8_LINEARIZATION_ET);
389  finegrain[ibin] = msb[idx];
390  }
391 
392  // Only Pegged for 1-TS algo.
393  if (peak_finder_algorithm_ == 1) {
396  }
397  }
398  outcoder_->compress(output, finegrain, result);
399 }
const HcalTPGCompressor * outcoder_
void compress(const IntegerCaloSamples &ics, const std::vector< int > &fineGrain, HcalTriggerPrimitiveDigi &digi) const
Log< level::Info, false > LogInfo
static unsigned int const shift

◆ analyzeHF()

void HcalTriggerPrimitiveAlgo::analyzeHF ( IntegerCaloSamples samples,
HcalTriggerPrimitiveDigi result,
const int  hf_lumi_shift 
)
private

Definition at line 527 of file HcalTriggerPrimitiveAlgo.cc.

References cms::cuda::assert(), HcalTPGCompressor::compress(), FG_threshold_, HF_Veto, heavyIonCSV_trainingSettings::idx, createfilelist::int, numberOfPresamplesHF_, numberOfSamplesHF_, outcoder_, convertSQLitetoXML_cfg::output, PMT_NoiseThreshold_, QIE8_LINEARIZATION_ET, mps_fire::result, EgammaValidation_cff::samples, edm::shift, theTowerMapFGSum, and PbPb_ZMuSkimMuonDPG_cff::veto.

Referenced by run().

529  {
530  HcalTrigTowerDetId detId(samples.id());
531 
532  // Align digis and TP
533  int dgPresamples = samples.presamples();
534  int tpPresamples = numberOfPresamplesHF_;
535  int shift = dgPresamples - tpPresamples;
536  int dgSamples = samples.size();
537  int tpSamples = numberOfSamplesHF_;
538  if (shift < 0 || shift + tpSamples > dgSamples) {
539  edm::LogInfo("HcalTriggerPrimitiveAlgo::analyzeHF")
540  << "TP presample or size from the configuration file is out of the accessible range. Using digi values from "
541  "data instead...";
542  tpPresamples = dgPresamples;
543  shift = 0;
544  tpSamples = dgSamples;
545  }
546 
547  std::vector<int> finegrain(tpSamples, false);
548 
549  TowerMapFGSum::const_iterator tower2fg = theTowerMapFGSum.find(detId);
550  assert(tower2fg != theTowerMapFGSum.end());
551 
552  const SumFGContainer& sumFG = tower2fg->second;
553  // Loop over all L+S pairs that mapped from samples.id()
554  // Note: 1 samples.id() = 6 x (L+S) without noZS
555  for (SumFGContainer::const_iterator sumFGItr = sumFG.begin(); sumFGItr != sumFG.end(); ++sumFGItr) {
556  const std::vector<bool>& veto = HF_Veto[sumFGItr->id().rawId()];
557  for (int ibin = 0; ibin < tpSamples; ++ibin) {
558  int idx = ibin + shift;
559  // if not vetod, add L+S to total sum and calculate FG
560  bool vetoed = idx < int(veto.size()) && veto[idx];
561  if (!(vetoed && (*sumFGItr)[idx] > PMT_NoiseThreshold_)) {
562  samples[idx] += (*sumFGItr)[idx];
563  finegrain[ibin] = (finegrain[ibin] || (*sumFGItr)[idx] >= FG_threshold_);
564  }
565  }
566  }
567 
568  IntegerCaloSamples output(samples.id(), tpSamples);
569  output.setPresamples(tpPresamples);
570 
571  for (int ibin = 0; ibin < tpSamples; ++ibin) {
572  int idx = ibin + shift;
573  output[ibin] = samples[idx] >> hf_lumi_shift;
574  static const int MAX_OUTPUT = QIE8_LINEARIZATION_ET; // QIE8_LINEARIZATION_ET = 1023
575  if (output[ibin] > MAX_OUTPUT)
576  output[ibin] = MAX_OUTPUT;
577  }
578  outcoder_->compress(output, finegrain, result);
579 }
const HcalTPGCompressor * outcoder_
assert(be >=bs)
std::vector< IntegerCaloSamples > SumFGContainer
void compress(const IntegerCaloSamples &ics, const std::vector< int > &fineGrain, HcalTriggerPrimitiveDigi &digi) const
Log< level::Info, false > LogInfo
static unsigned int const shift

◆ analyzeHF2016()

void HcalTriggerPrimitiveAlgo::analyzeHF2016 ( const IntegerCaloSamples SAMPLES,
HcalTriggerPrimitiveDigi result,
const int  HF_LUMI_SHIFT,
const HcalFeatureBit HCALFEM 
)
private

Definition at line 581 of file HcalTriggerPrimitiveAlgo.cc.

References cms::cuda::assert(), newFWLiteAna::bin, HcalTPGCompressor::compress(), FG_HF_thresholds_, HcalFeatureBit::fineGrainbit(), FIRST_FINEGRAIN_TOWER, B2GTnPMonitor_cfi::item, SiStripPI::min, numberOfPresamplesHF_, numberOfSamplesHF_, outcoder_, convertSQLitetoXML_cfg::output, QIE8_LINEARIZATION_ET, mps_fire::result, EgammaValidation_cff::samples, and theHFDetailMap.

Referenced by run().

584  {
585  // Align digis and TP
586  const int SHIFT = samples.presamples() - numberOfPresamplesHF_;
587  assert(SHIFT >= 0);
588  assert((SHIFT + numberOfSamplesHF_) <= samples.size());
589 
590  // Try to find the HFDetails from the map corresponding to our samples
591  const HcalTrigTowerDetId detId(samples.id());
592  HFDetailMap::const_iterator it = theHFDetailMap.find(detId);
593  // Missing values will give an empty digi
594  if (it == theHFDetailMap.end()) {
595  return;
596  }
597 
598  std::vector<std::bitset<2>> finegrain(numberOfSamplesHF_, false);
599 
600  // Set up out output of IntergerCaloSamples
602  output.setPresamples(numberOfPresamplesHF_);
603 
604  for (const auto& item : it->second) {
605  auto& details = item.second;
606  for (int ibin = 0; ibin < numberOfSamplesHF_; ++ibin) {
607  const int IDX = ibin + SHIFT;
608  int long_fiber_val = 0;
609  if (IDX < details.long_fiber.size()) {
610  long_fiber_val = details.long_fiber[IDX];
611  }
612  int short_fiber_val = 0;
613  if (IDX < details.short_fiber.size()) {
614  short_fiber_val = details.short_fiber[IDX];
615  }
616  output[ibin] += (long_fiber_val + short_fiber_val);
617 
618  uint32_t ADCLong = details.LongDigi[ibin].adc();
619  uint32_t ADCShort = details.ShortDigi[ibin].adc();
620 
621  if (details.LongDigi.id().ietaAbs() >= FIRST_FINEGRAIN_TOWER) {
622  finegrain[ibin][1] = (ADCLong > FG_HF_thresholds_[0] || ADCShort > FG_HF_thresholds_[0]);
623 
624  if (embit != nullptr)
625  finegrain[ibin][0] = embit->fineGrainbit(details.ShortDigi, details.LongDigi, ibin);
626  }
627  }
628  }
629 
630  for (int bin = 0; bin < numberOfSamplesHF_; ++bin) {
631  static const unsigned int MAX_OUTPUT = QIE8_LINEARIZATION_ET; // QIE8_LINEARIZATION_ET = 1023
632  output[bin] = min({MAX_OUTPUT, output[bin] >> hf_lumi_shift});
633  }
634 
635  std::vector<int> finegrain_converted;
636  finegrain_converted.reserve(finegrain.size());
637  for (const auto& fg : finegrain)
638  finegrain_converted.push_back(fg.to_ulong());
639  outcoder_->compress(output, finegrain_converted, result);
640 }
std::vector< uint32_t > FG_HF_thresholds_
const HcalTPGCompressor * outcoder_
assert(be >=bs)
void compress(const IntegerCaloSamples &ics, const std::vector< int > &fineGrain, HcalTriggerPrimitiveDigi &digi) const
Definition: helper.h:56

◆ analyzeHFQIE10()

void HcalTriggerPrimitiveAlgo::analyzeHFQIE10 ( const IntegerCaloSamples SAMPLES,
HcalTriggerPrimitiveDigi result,
const int  HF_LUMI_SHIFT,
const HcalFeatureBit HCALFEM 
)
private

Definition at line 670 of file HcalTriggerPrimitiveAlgo.cc.

References cms::cuda::assert(), newFWLiteAna::bin, HcalTPGCompressor::compress(), FG_HF_thresholds_, HcalFeatureBit::fineGrainbit(), FIRST_FINEGRAIN_TOWER, mps_fire::i, heavyIonCSV_trainingSettings::idx, createfilelist::int, B2GTnPMonitor_cfi::item, SiStripPI::min, numberOfPresamplesHF_, numberOfSamplesHF_, or, outcoder_, convertSQLitetoXML_cfg::output, QIE10_LINEARIZATION_ET, QIE10_MAX_LINEARIZATION_ET, mps_fire::result, EgammaValidation_cff::samples, edm::shift, theHFUpgradeDetailMap, and useTDCInMinBiasBits_.

Referenced by run().

673  {
674  // Align digis and TP
675  const int shift = samples.presamples() - numberOfPresamplesHF_;
676  assert(shift >= 0);
677  assert((shift + numberOfSamplesHF_) <= samples.size());
678  assert(hf_lumi_shift >= 2);
679 
680  // Try to find the HFDetails from the map corresponding to our samples
681  const HcalTrigTowerDetId detId(samples.id());
682  auto it = theHFUpgradeDetailMap.find(detId);
683  // Missing values will give an empty digi
684  if (it == theHFUpgradeDetailMap.end()) {
685  return;
686  }
687 
688  std::vector<std::bitset<2>> finegrain(numberOfSamplesHF_, false);
689 
690  // Set up out output of IntergerCaloSamples
692  output.setPresamples(numberOfPresamplesHF_);
693 
694  for (const auto& item : it->second) {
695  auto& details = item.second;
696  for (int ibin = 0; ibin < numberOfSamplesHF_; ++ibin) {
697  const int idx = ibin + shift;
698 
699  int long_fiber_val = 0;
700  int long_fiber_count = 0;
701  int short_fiber_val = 0;
702  int short_fiber_count = 0;
703 
704  bool saturated = false;
705 
706  for (auto i : {0, 2}) {
707  if (idx < details[i].samples.size() and details[i].validity[idx] and details[i].passTDC[idx]) {
708  long_fiber_val += details[i].samples[idx];
709  saturated = saturated || (details[i].samples[idx] == QIE10_LINEARIZATION_ET);
710  ++long_fiber_count;
711  }
712  }
713  for (auto i : {1, 3}) {
714  if (idx < details[i].samples.size() and details[i].validity[idx] and details[i].passTDC[idx]) {
715  short_fiber_val += details[i].samples[idx];
716  saturated = saturated || (details[i].samples[idx] == QIE10_LINEARIZATION_ET);
717  ++short_fiber_count;
718  }
719  }
720 
721  if (saturated) {
723  } else {
724  // For details of the energy handling, see:
725  // https://cms-docdb.cern.ch/cgi-bin/DocDB/ShowDocument?docid=12306
726  // If both readouts are valid, average of the two energies is taken
727  // division by 2 is compensated by adjusting the total scale shift in the end
728  if (long_fiber_count == 2)
729  long_fiber_val >>= 1;
730  if (short_fiber_count == 2)
731  short_fiber_val >>= 1;
732 
733  auto sum = long_fiber_val + short_fiber_val;
734  // Similar to above, if both channels are valid,
735  // average of the two energies is calculated
736  // division by 2 here is also compensated by adjusting the total scale shift in the end
737  if (long_fiber_count > 0 and short_fiber_count > 0)
738  sum >>= 1;
739 
740  output[ibin] += sum;
741  }
742 
743  for (const auto& detail : details) {
744  if (idx < int(detail.digi.size()) and detail.validity[idx] and
745  HcalDetId(detail.digi.id()).ietaAbs() >= FIRST_FINEGRAIN_TOWER) {
746  if (useTDCInMinBiasBits_ && !detail.passTDC[idx])
747  continue;
748  finegrain[ibin][1] = finegrain[ibin][1] or detail.fgbits[idx][0];
749  // what is commonly called the "second" HF min-bias bit is
750  // actually the 0-th bit, which can also be used instead for the EM bit
751  // (called finegrain[ibin][0] below) in non-HI running
752  finegrain[ibin][0] = finegrain[ibin][0] or detail.fgbits[idx][1];
753  }
754  }
755  // the EM bit is only used if the "second" FG bit is disabled
756  if (embit != nullptr and FG_HF_thresholds_.at(1) != 255) {
757  finegrain[ibin][0] = embit->fineGrainbit(details[1].digi,
758  details[3].digi,
759  details[0].digi,
760  details[2].digi,
761  details[1].validity[idx],
762  details[3].validity[idx],
763  details[0].validity[idx],
764  details[2].validity[idx],
765  idx);
766  }
767  }
768  }
769 
770  for (int bin = 0; bin < numberOfSamplesHF_; ++bin) {
771  output[bin] = min({(unsigned int)QIE10_MAX_LINEARIZATION_ET, output[bin] >> (hf_lumi_shift - 2)});
772  }
773  std::vector<int> finegrain_converted;
774  finegrain_converted.reserve(finegrain.size());
775  for (const auto& fg : finegrain)
776  finegrain_converted.push_back(fg.to_ulong());
777  outcoder_->compress(output, finegrain_converted, result);
778 }
std::vector< uint32_t > FG_HF_thresholds_
HFUpgradeDetailMap theHFUpgradeDetailMap
static const int QIE10_MAX_LINEARIZATION_ET
const HcalTPGCompressor * outcoder_
assert(be >=bs)
void compress(const IntegerCaloSamples &ics, const std::vector< int > &fineGrain, HcalTriggerPrimitiveDigi &digi) const
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
Definition: Activities.doc:12
Definition: helper.h:56
static unsigned int const shift

◆ analyzeQIE11()

void HcalTriggerPrimitiveAlgo::analyzeQIE11 ( IntegerCaloSamples samples,
std::vector< bool >  sample_saturation,
HcalTriggerPrimitiveDigi result,
const HcalFinegrainBit fg_algo 
)
private

Definition at line 401 of file HcalTriggerPrimitiveAlgo.cc.

References HcalTPGCompressor::compress(), HcalFinegrainBit::compute(), fgUpgradeMap_, fgUpgradeTDCMap_, fix_saturation_, mps_fire::i, heavyIonCSV_trainingSettings::idx, HcalDetId::ietaAbs(), createfilelist::int, HcalTopology::lastHBRing(), numberOfFilterPresamplesHBQIE11_, numberOfFilterPresamplesHEQIE11_, numberOfPresamples_, numberOfSamples_, outcoder_, convertSQLitetoXML_cfg::output, QIE11_MAX_LINEARIZATION_ET, mps_fire::result, ecalGpuTask_cfi::sample, EgammaValidation_cff::samples, edm::shift, theThreshold, theTrigTowerGeometry, HcalTrigTowerGeometry::topology(), HcalTrigTowerGeometry::towerIds(), and weightsQIE11_.

Referenced by run().

404  {
405  HcalDetId detId(samples.id());
406 
407  // Get the |ieta| for current sample
408  int theIeta = detId.ietaAbs();
409 
410  unsigned int dgSamples = samples.size();
411  unsigned int dgPresamples = samples.presamples();
412 
413  unsigned int tpSamples = numberOfSamples_;
414  unsigned int tpPresamples = numberOfPresamples_;
415 
416  unsigned int filterSamples = weightsQIE11_[theIeta].size();
417  unsigned int filterPresamples = theIeta > theTrigTowerGeometry->topology().lastHBRing()
420 
421  unsigned int shift = dgPresamples - tpPresamples;
422 
423  // shrink keeps the FIR filter from going off the end of the 8TS vector
424  unsigned int shrink = filterSamples - 1;
425 
426  auto& msb = fgUpgradeMap_[samples.id()];
427  auto& timingTDC = fgUpgradeTDCMap_[samples.id()];
428  IntegerCaloSamples sum(samples.id(), samples.size());
429 
430  std::vector<HcalTrigTowerDetId> ids = theTrigTowerGeometry->towerIds(detId);
431 
432  // keep track of tower with saturated energy and force the total TP saturated
433  bool force_saturation[samples.size()];
434  for (int i = 0; i < samples.size(); i++) {
435  force_saturation[i] = false;
436  }
437 
438  //slide algo window
439  for (unsigned int ibin = 0; ibin < dgSamples - shrink; ++ibin) {
440  int algosumvalue = 0;
441  bool check_sat = false;
442  for (unsigned int i = 0; i < filterSamples; i++) {
443  //add up value * scale factor
444  // In addition, divide by two in the 10 degree phi segmentation region
445  // to mimic 5 degree segmentation for the trigger
446  unsigned int sample = samples[ibin + i];
447 
448  if (fix_saturation_ && (sample_saturation.size() > ibin + i))
449  check_sat = (check_sat | sample_saturation[ibin + i] | (sample > QIE11_MAX_LINEARIZATION_ET));
450 
453 
454  // Usually use a segmentation factor of 1.0 but for ieta >= 21 use 0.5
455  double segmentationFactor = 1.0;
456  if (ids.size() == 2) {
457  segmentationFactor = 0.5;
458  }
459 
460  // Based on the |ieta| of the sample, retrieve the correct region weight
461  double theWeight = weightsQIE11_[theIeta][i];
462 
463  algosumvalue += int(sample * segmentationFactor * theWeight);
464  }
465  if (algosumvalue < 0)
466  sum[ibin] = 0; // low-side
467  //high-side
468  //else if (algosumvalue>QIE11_LINEARIZATION_ET) sum[ibin]=QIE11_LINEARIZATION_ET;
469  else
470  sum[ibin] = algosumvalue; //assign value to sum[]
471 
472  if (check_sat)
473  force_saturation[ibin] = true;
474  }
475 
476  std::vector<int> finegrain(tpSamples, false);
477 
478  IntegerCaloSamples output(samples.id(), tpSamples);
479  output.setPresamples(tpPresamples);
480 
481  for (unsigned int ibin = 0; ibin < tpSamples; ++ibin) {
482  // ibin - index for output TP
483  // idx - index for samples + shift - filterPresamples
484  int idx = ibin + shift - filterPresamples;
485 
486  // When idx is <= 0 peakfind would compare out-of-bounds of the vector. Avoid this ambiguity
487  if (idx <= 0) {
488  output[ibin] = 0;
489  continue;
490  }
491 
492  //Only run the peak-finder when the PFA2 FIR filter is running, which corresponds to weights = 1
493  if (weightsQIE11_[theIeta][0] == 1) {
494  bool isPeak = (sum[idx] > sum[idx - 1] && sum[idx] >= sum[idx + 1] && sum[idx] > theThreshold);
495  if (isPeak) {
496  output[ibin] = std::min<unsigned int>(sum[idx], QIE11_MAX_LINEARIZATION_ET);
497 
498  if (fix_saturation_ && force_saturation[idx] && ids.size() == 2)
499  output[ibin] = QIE11_MAX_LINEARIZATION_ET * 0.5;
500  else if (fix_saturation_ && force_saturation[idx])
502 
503  } else {
504  // Not a peak
505  output[ibin] = 0;
506  }
507  } else {
508  output[ibin] = std::min<unsigned int>(sum[idx], QIE11_MAX_LINEARIZATION_ET);
509 
510  if (fix_saturation_ && force_saturation[idx] && ids.size() == 2)
511  output[ibin] = QIE11_MAX_LINEARIZATION_ET * 0.5;
512  else if (fix_saturation_ && force_saturation[idx])
514  }
515  // peak-finding is not applied for FG bits
516  // compute(msb) returns two bits (MIP). compute(timingTDC,ids) returns 6 bits (1 depth, 1 prompt, 1 delayed 01, 1 delayed 10, 2 reserved)
517  finegrain[ibin] = fg_algo.compute(timingTDC[idx + filterPresamples], ids[0]).to_ulong() |
518  fg_algo.compute(msb[idx + filterPresamples]).to_ulong() << 4;
519  if (ibin == tpPresamples && (idx + filterPresamples) != dgPresamples)
520  edm::LogError("HcalTriggerPritimveAlgo")
521  << "TP SOI (tpPresamples = " << tpPresamples
522  << ") is not aligned with digi SOI (dgPresamples = " << dgPresamples << ")";
523  }
524  outcoder_->compress(output, finegrain, result);
525 }
constexpr int ietaAbs() const
get the absolute value of the cell ieta
Definition: HcalDetId.h:148
const HcalTPGCompressor * outcoder_
Log< level::Error, false > LogError
const HcalTopology & topology() const
void compress(const IntegerCaloSamples &ics, const std::vector< int > &fineGrain, HcalTriggerPrimitiveDigi &digi) const
const HcalTrigTowerGeometry * theTrigTowerGeometry
int lastHBRing() const
Definition: HcalTopology.h:92
std::array< std::array< double, 2 >, 29 > weightsQIE11_
std::bitset< 2 > compute(const Tower &) const
static const int QIE11_MAX_LINEARIZATION_ET
static unsigned int const shift
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds

◆ needLegacyFG()

bool HcalTriggerPrimitiveAlgo::needLegacyFG ( const HcalTrigTowerDetId id) const
private

Definition at line 872 of file HcalTriggerPrimitiveAlgo.cc.

References HBHE_OVERLAP_TOWER, and upgrade_hb_.

Referenced by addUpgradeFG().

872  {
873  // This tower (ietaAbs == 16) does not accept upgraded FG bits,
874  // but needs pseudo legacy ones to ensure that the tower is processed
875  // even when the QIE8 depths in front of it do not have energy deposits.
876  if (id.ietaAbs() == HBHE_OVERLAP_TOWER and not upgrade_hb_)
877  return true;
878  return false;
879 }

◆ needUpgradeID()

bool HcalTriggerPrimitiveAlgo::needUpgradeID ( const HcalTrigTowerDetId id,
int  depth 
) const
private

Definition at line 881 of file HcalTriggerPrimitiveAlgo.cc.

References FIRST_DEPTH7_TOWER, and LAST_FINEGRAIN_DEPTH.

Referenced by addUpgradeFG().

881  {
882  // Depth 7 for TT 26, 27, and 28 is not considered a fine grain depth.
883  // However, the trigger tower for these ieta should still be added to the fgUpgradeMap_
884  // Otherwise, depth 7-only signal will not be analyzed.
885  unsigned int aieta = id.ietaAbs();
886  if (aieta >= FIRST_DEPTH7_TOWER and aieta <= LAST_FINEGRAIN_TOWER and depth > LAST_FINEGRAIN_DEPTH)
887  return true;
888  return false;
889 }

◆ overrideParameters()

void HcalTriggerPrimitiveAlgo::overrideParameters ( const edm::ParameterSet ps)

Definition at line 81 of file HcalTriggerPrimitiveAlgo.cc.

References edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), override_adc_hf_, override_adc_hf_value_, override_parameters_, override_tdc_hf_, and override_tdc_hf_value_.

Referenced by HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer().

81  {
83 
84  if (override_parameters_.exists("ADCThresholdHF")) {
85  override_adc_hf_ = true;
86  override_adc_hf_value_ = override_parameters_.getParameter<uint32_t>("ADCThresholdHF");
87  }
88  if (override_parameters_.exists("TDCMaskHF")) {
89  override_tdc_hf_ = true;
90  override_tdc_hf_value_ = override_parameters_.getParameter<unsigned long long>("TDCMaskHF");
91  }
92 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
bool exists(std::string const &parameterName) const
checks if a parameter exists
unsigned long long override_tdc_hf_value_

◆ passTDC()

bool HcalTriggerPrimitiveAlgo::passTDC ( const QIE10DataFrame digi,
int  ts 
) const
private

Definition at line 642 of file HcalTriggerPrimitiveAlgo.cc.

References gpuClustering::adc, conditions_, HcalDbService::getHcalTPParameters(), override_adc_hf_, override_adc_hf_value_, override_tdc_hf_, and override_tdc_hf_value_.

Referenced by addSignal().

642  {
644  auto adc_threshold = parameters->getADCThresholdHF();
645  auto tdc_mask = parameters->getTDCMaskHF();
646 
647  if (override_adc_hf_)
648  adc_threshold = override_adc_hf_value_;
649  if (override_tdc_hf_)
650  tdc_mask = override_tdc_hf_value_;
651 
652  if (digi[ts].adc() < adc_threshold)
653  return true;
654 
655  return (1ul << digi[ts].le_tdc()) & tdc_mask;
656 }
const HcalDbService * conditions_
const HcalTPParameters * getHcalTPParameters() const
unsigned long long override_tdc_hf_value_
uint16_t *__restrict__ uint16_t const *__restrict__ adc

◆ run()

template<typename... Digis>
void HcalTriggerPrimitiveAlgo::run ( const HcalTPGCoder incoder,
const HcalTPGCompressor outcoder,
const HcalDbService conditions,
HcalTrigPrimDigiCollection result,
const HcalTrigTowerGeometry trigTowerGeometry,
float  rctlsb,
const HcalFeatureBit LongvrsShortCut,
const Digis &...  digis 
)

Definition at line 252 of file HcalTriggerPrimitiveAlgo.h.

References addDigis(), analyze(), analyzeHF(), analyzeHF2016(), analyzeHFQIE10(), analyzeQIE11(), submitPVValidationJobs::conditions, conditions_, edm::ParameterSet::exists(), fgMap_, fgUpgradeMap_, fgUpgradeTDCMap_, HcalTrigTowerGeometry::firstHFTower(), HcalTPParameters::getFGVersionHBHE(), HcalDbService::getHcalTPParameters(), edm::ParameterSet::getParameter(), HF_Veto, incoder_, B2GTnPMonitor_cfi::item, LongvrsShortCut, NCTScaleShift, or, outcoder_, override_parameters_, RCTScaleShift, mps_fire::result, theHFDetailMap, theHFUpgradeDetailMap, theSatMap, theSumMap, theTowerMapFGSum, theTrigTowerGeometry, upgrade_hb_, upgrade_he_, upgrade_hf_, and BeamSplash_cfg::version.

Referenced by HcalTrigPrimDigiProducer::produce().

259  {
260  theTrigTowerGeometry = trigTowerGeometry;
261 
262  incoder_ = dynamic_cast<const HcaluLUTTPGCoder*>(incoder);
263  outcoder_ = outcoder;
265 
266  theSumMap.clear();
267  theSatMap.clear();
268  theTowerMapFGSum.clear();
269  HF_Veto.clear();
270  fgMap_.clear();
271  fgUpgradeMap_.clear();
272  fgUpgradeTDCMap_.clear();
273  theHFDetailMap.clear();
274  theHFUpgradeDetailMap.clear();
275 
276  // Add all digi collections
277  addDigis(digis...);
278 
279  // Prepare the fine-grain calculation algorithm for HB/HE
280  int version = 0;
283  if (override_parameters_.exists("FGVersionHBHE"))
284  version = override_parameters_.getParameter<uint32_t>("FGVersionHBHE");
285  HcalFinegrainBit fg_algo(version);
286 
287  // VME produces additional bits on the front used by lumi but not the
288  // trigger, this shift corrects those out by right shifting over them.
289  for (auto& item : theSumMap) {
290  result.push_back(HcalTriggerPrimitiveDigi(item.first));
291  HcalTrigTowerDetId detId(item.second.id());
292  if (detId.ietaAbs() >= theTrigTowerGeometry->firstHFTower(detId.version())) {
293  if (detId.version() == 0) {
294  analyzeHF(item.second, result.back(), RCTScaleShift);
295  } else if (detId.version() == 1) {
296  if (upgrade_hf_)
298  else
300  } else {
301  // Things are going to go poorly
302  }
303  } else {
304  // Determine which energy reconstruction path to take based on the
305  // fine-grain availability:
306  // * QIE8 TP add entries into fgMap_
307  // * QIE11 TP add entries into fgUpgradeMap_
308  // (not for tower 16 unless HB is upgraded, too)
309  if (fgMap_.find(item.first) != fgMap_.end()) {
310  analyze(item.second, result.back());
311  } else if (fgUpgradeMap_.find(item.first) != fgUpgradeMap_.end()) {
312  SatMap::iterator item_sat = theSatMap.find(detId);
313  if (item_sat == theSatMap.end())
314  analyzeQIE11(item.second, std::vector<bool>(), result.back(), fg_algo);
315  else
316  analyzeQIE11(item.second, item_sat->second, result.back(), fg_algo);
317  }
318  }
319  }
320 
321  // Free up some memory
322  theSumMap.clear();
323  theSatMap.clear();
324  theTowerMapFGSum.clear();
325  HF_Veto.clear();
326  fgMap_.clear();
327  fgUpgradeMap_.clear();
328  fgUpgradeTDCMap_.clear();
329  theHFDetailMap.clear();
330  theHFUpgradeDetailMap.clear();
331 
332  return;
333 }
void analyze(IntegerCaloSamples &samples, HcalTriggerPrimitiveDigi &result)
adds the actual digis
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
HFUpgradeDetailMap theHFUpgradeDetailMap
int getFGVersionHBHE() const
get FineGrain Algorithm Version for HBHE
void analyzeHF(IntegerCaloSamples &samples, HcalTriggerPrimitiveDigi &result, const int hf_lumi_shift)
void analyzeHF2016(const IntegerCaloSamples &SAMPLES, HcalTriggerPrimitiveDigi &result, const int HF_LUMI_SHIFT, const HcalFeatureBit *HCALFEM)
bool exists(std::string const &parameterName) const
checks if a parameter exists
void analyzeHFQIE10(const IntegerCaloSamples &SAMPLES, HcalTriggerPrimitiveDigi &result, const int HF_LUMI_SHIFT, const HcalFeatureBit *HCALFEM)
const HcalTPGCompressor * outcoder_
int firstHFTower(int version) const
const HcalTrigTowerGeometry * theTrigTowerGeometry
const HcalDbService * conditions_
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
Definition: Activities.doc:12
const HcalTPParameters * getHcalTPParameters() const
void analyzeQIE11(IntegerCaloSamples &samples, std::vector< bool > sample_saturation, HcalTriggerPrimitiveDigi &result, const HcalFinegrainBit &fg_algo)
void addDigis(const T &collection, const Args &... digis)
const HcaluLUTTPGCoder * incoder_

◆ runFEFormatError()

void HcalTriggerPrimitiveAlgo::runFEFormatError ( const FEDRawDataCollection rawraw,
const HcalElectronicsMap emap,
HcalTrigPrimDigiCollection result 
)

Definition at line 796 of file HcalTriggerPrimitiveAlgo.cc.

References HcalHTRData::check(), FEDRawData::data(), DetId::det(), runTauDisplay::eid, FEDRawDataCollection::FEDData(), HcalHTRData::getErrorsWord(), HcalDCCHeader::getSourceId(), HcalDCCHeader::getSpigotData(), HcalDCCHeader::getSpigotPresent(), HcalBarrel, HcalEndcap, HcalForward, HcalHTRData::htrSlot(), HcalHTRData::htrTopBottom(), mps_fire::i, HcalHTRData::isHistogramEvent(), HcalElectronicsMap::lookup(), FEDNumbering::MAXHCALFEDID, FEDNumbering::MINHCALFEDID, DetId::null(), HcalHTRData::readoutVMECrateId(), mps_fire::result, FEDRawData::size(), HcalDCCHeader::SPIGOT_COUNT, DetId::subdetId(), theTrigTowerGeometry, HcalTrigTowerGeometry::towerIds(), cmsswSequenceInfo::tp, and validateGeometry_cfg::valid.

Referenced by HcalTrigPrimDigiProducer::produce().

798  {
799  std::set<uint32_t> FrontEndErrors;
800 
802  const FEDRawData& raw = rawraw->FEDData(i);
803  if (raw.size() < 12)
804  continue;
805  const HcalDCCHeader* dccHeader = (const HcalDCCHeader*)(raw.data());
806  if (!dccHeader)
807  continue;
808  HcalHTRData htr;
809  for (int spigot = 0; spigot < HcalDCCHeader::SPIGOT_COUNT; spigot++) {
810  if (!dccHeader->getSpigotPresent(spigot))
811  continue;
812  dccHeader->getSpigotData(spigot, htr, raw.size());
813  int dccid = dccHeader->getSourceId();
814  int errWord = htr.getErrorsWord() & 0x1FFFF;
815  bool HTRError = (!htr.check() || htr.isHistogramEvent() || (errWord & 0x800) != 0);
816 
817  if (HTRError) {
818  bool valid = false;
819  for (int fchan = 0; fchan < 3 && !valid; fchan++) {
820  for (int fib = 0; fib < 9 && !valid; fib++) {
821  HcalElectronicsId eid(fchan, fib, spigot, dccid - FEDNumbering::MINHCALFEDID);
822  eid.setHTR(htr.readoutVMECrateId(), htr.htrSlot(), htr.htrTopBottom());
823  DetId detId = emap->lookup(eid);
824  if (detId.null())
825  continue;
826  HcalSubdetector subdet = (HcalSubdetector(detId.subdetId()));
827  if (detId.det() != 4 || (subdet != HcalBarrel && subdet != HcalEndcap && subdet != HcalForward))
828  continue;
829  std::vector<HcalTrigTowerDetId> ids = theTrigTowerGeometry->towerIds(detId);
830  for (std::vector<HcalTrigTowerDetId>::const_iterator triggerId = ids.begin(); triggerId != ids.end();
831  ++triggerId) {
832  FrontEndErrors.insert(triggerId->rawId());
833  }
834  //valid = true;
835  }
836  }
837  }
838  }
839  }
840 
841  // Loop over TP collection
842  // Set TP to zero if there is FE Format Error
843  HcalTriggerPrimitiveSample zeroSample(0);
844  for (HcalTrigPrimDigiCollection::iterator tp = result.begin(); tp != result.end(); ++tp) {
845  if (FrontEndErrors.find(tp->id().rawId()) != FrontEndErrors.end()) {
846  for (int i = 0; i < tp->size(); ++i)
847  tp->setSample(i, zeroSample);
848  }
849  }
850 }
bool isHistogramEvent() const
Is this event a histogram event? (do not call standard unpack in this case!!!!!)
Definition: HcalHTRData.cc:409
int getSpigotData(int nspigot, HcalHTRData &decodeTool, int validSize) const
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
constexpr bool null() const
is this a null id ?
Definition: DetId.h:59
const HcalTrigTowerGeometry * theTrigTowerGeometry
unsigned int htrSlot() const
HcalElectronicsId-style HTR slot.
Definition: HcalHTRData.cc:365
unsigned int htrTopBottom() const
HcalElectronicsId-style HTR top/bottom (1=top/0=bottom)
Definition: HcalHTRData.cc:369
int getSourceId() const
Definition: HcalDCCHeader.h:32
HcalSubdetector
Definition: HcalAssistant.h:31
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
std::vector< T >::iterator iterator
Definition: DetId.h:17
static const int SPIGOT_COUNT
Definition: HcalDCCHeader.h:19
unsigned int getErrorsWord() const
Get the errors word.
Definition: HcalHTRData.h:162
bool getSpigotPresent(unsigned int nspigot) const
Read the "PRESENT" bit for this spigot.
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:24
unsigned int readoutVMECrateId() const
HcalElectronicsId-style VME crate number.
Definition: HcalHTRData.cc:373
Readout chain identification for Hcal.
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds
bool check() const
Check for a good event Requires a minimum length, matching wordcount and length, not an empty event...
Definition: HcalHTRData.cc:63

◆ runZS()

void HcalTriggerPrimitiveAlgo::runZS ( HcalTrigPrimDigiCollection tp)

Definition at line 780 of file HcalTriggerPrimitiveAlgo.cc.

References mps_fire::i, mps_fire::result, cmsswSequenceInfo::tp, and ZS_threshold_I_.

Referenced by HcalTrigPrimDigiProducer::produce().

780  {
781  for (HcalTrigPrimDigiCollection::iterator tp = result.begin(); tp != result.end(); ++tp) {
782  bool ZS = true;
783  for (int i = 0; i < tp->size(); ++i) {
784  if (tp->sample(i).compressedEt() > ZS_threshold_I_) {
785  ZS = false;
786  break;
787  }
788  }
789  if (ZS)
790  tp->setZSInfo(false, true);
791  else
792  tp->setZSInfo(true, false);
793  }
794 }
std::vector< T >::iterator iterator

◆ setFixSaturationFlag()

void HcalTriggerPrimitiveAlgo::setFixSaturationFlag ( bool  fix_saturation)

◆ setNCTScaleShift()

void HcalTriggerPrimitiveAlgo::setNCTScaleShift ( int  shift)

Definition at line 977 of file HcalTriggerPrimitiveAlgo.cc.

References NCTScaleShift, and edm::shift.

Referenced by HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer().

977 { NCTScaleShift = shift; }
static unsigned int const shift

◆ setNumFilterPresamplesHBQIE11()

void HcalTriggerPrimitiveAlgo::setNumFilterPresamplesHBQIE11 ( int  presamples)
inline

◆ setNumFilterPresamplesHEQIE11()

void HcalTriggerPrimitiveAlgo::setNumFilterPresamplesHEQIE11 ( int  presamples)
inline

◆ setPeakFinderAlgorithm()

void HcalTriggerPrimitiveAlgo::setPeakFinderAlgorithm ( int  algo)

Definition at line 971 of file HcalTriggerPrimitiveAlgo.cc.

References Exception, and peak_finder_algorithm_.

Referenced by HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer().

971  {
972  if (algo <= 0 || algo > 2)
973  throw cms::Exception("ERROR: Only algo 1 & 2 are supported.") << std::endl;
975 }

◆ setRCTScaleShift()

void HcalTriggerPrimitiveAlgo::setRCTScaleShift ( int  shift)

Definition at line 979 of file HcalTriggerPrimitiveAlgo.cc.

References RCTScaleShift, and edm::shift.

Referenced by HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer().

979 { RCTScaleShift = shift; }
static unsigned int const shift

◆ setUpgradeFlags()

void HcalTriggerPrimitiveAlgo::setUpgradeFlags ( bool  hb,
bool  he,
bool  hf 
)

◆ setWeightQIE11()

void HcalTriggerPrimitiveAlgo::setWeightQIE11 ( int  aieta,
double  weight 
)

Definition at line 965 of file HcalTriggerPrimitiveAlgo.cc.

References mps_merge::weight, and weightsQIE11_.

Referenced by HcalTrigPrimDigiProducer::beginRun().

965  {
966  // Simple map of |ieta| in HBHE to weight
967  // Only one weight for SOI-1 TS
968  weightsQIE11_[aieta] = {{weight, 1.0}};
969 }
std::array< std::array< double, 2 >, 29 > weightsQIE11_

◆ setWeightsQIE11()

void HcalTriggerPrimitiveAlgo::setWeightsQIE11 ( const edm::ParameterSet weightsQIE11)

Definition at line 955 of file HcalTriggerPrimitiveAlgo.cc.

References findQualityFiles::v, hcaltpdigi_cfi::weightsQIE11, and weightsQIE11_.

Referenced by HcalTrigPrimDigiProducer::HcalTrigPrimDigiProducer().

955  {
956  // Names are just abs(ieta) for HBHE
957  std::vector<std::string> ietaStrs = weightsQIE11.getParameterNames();
958  for (auto& ietaStr : ietaStrs) {
959  // Strip off "ieta" part of key and just use integer value in map
960  auto const& v = weightsQIE11.getParameter<std::vector<double>>(ietaStr);
961  weightsQIE11_[std::stoi(ietaStr.substr(4))] = {{v[0], v[1]}};
962  }
963 }
weightsQIE11
hardware algo
std::array< std::array< double, 2 >, 29 > weightsQIE11_

◆ validChannel()

bool HcalTriggerPrimitiveAlgo::validChannel ( const QIE10DataFrame digi,
int  ts 
) const
private

Definition at line 658 of file HcalTriggerPrimitiveAlgo.cc.

References conditions_, HcalDbService::getHcalTPChannelParameter(), HcalTPChannelParameter::getMask(), QIE10DataFrame::id(), QIE10DataFrame::linkError(), and QIE10DataFrame::samples().

Referenced by addSignal().

658  {
659  // channels with invalid data should not contribute to the sum
660  if (digi.linkError() || ts >= digi.samples() || !digi[ts].ok())
661  return false;
662 
663  auto mask = conditions_->getHcalTPChannelParameter(HcalDetId(digi.id()))->getMask();
664  if (mask)
665  return false;
666 
667  return true;
668 }
constexpr edm::DataFrame::id_type id() const
uint32_t getMask() const
get mask for channel validity and self trigger information
const HcalDbService * conditions_
const HcalTPChannelParameter * getHcalTPChannelParameter(const HcalGenericDetId &fId, bool throwOnFail=true) const
constexpr bool linkError() const
constexpr int samples() const
total number of samples in the digi

◆ validUpgradeFG()

bool HcalTriggerPrimitiveAlgo::validUpgradeFG ( const HcalTrigTowerDetId id,
int  depth 
) const
private

Definition at line 862 of file HcalTriggerPrimitiveAlgo.cc.

References LEDCalibrationChannels::depth, HBHE_OVERLAP_TOWER, LAST_FINEGRAIN_DEPTH, LAST_FINEGRAIN_TOWER, and upgrade_hb_.

Referenced by addUpgradeFG().

862  {
864  return false;
865  if (id.ietaAbs() > LAST_FINEGRAIN_TOWER)
866  return false;
867  if (id.ietaAbs() == HBHE_OVERLAP_TOWER and not upgrade_hb_)
868  return false;
869  return true;
870 }

Member Data Documentation

◆ conditions_

const HcalDbService* HcalTriggerPrimitiveAlgo::conditions_
private

Definition at line 135 of file HcalTriggerPrimitiveAlgo.h.

Referenced by passTDC(), run(), and validChannel().

◆ FG_HF_thresholds_

std::vector<uint32_t> HcalTriggerPrimitiveAlgo::FG_HF_thresholds_
private

Definition at line 142 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeHF2016(), and analyzeHFQIE10().

◆ FG_threshold_

uint32_t HcalTriggerPrimitiveAlgo::FG_threshold_
private

Definition at line 141 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeHF().

◆ fgMap_

FGbitMap HcalTriggerPrimitiveAlgo::fgMap_
private

Definition at line 211 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addFG(), analyze(), and run().

◆ fgUpgradeMap_

FGUpgradeMap HcalTriggerPrimitiveAlgo::fgUpgradeMap_
private

Definition at line 215 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addUpgradeFG(), analyzeQIE11(), and run().

◆ fgUpgradeTDCMap_

FGUpgradeTDCMap HcalTriggerPrimitiveAlgo::fgUpgradeTDCMap_
private

Definition at line 219 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addUpgradeTDCFG(), analyzeQIE11(), and run().

◆ FIRST_DEPTH7_TOWER

const int HcalTriggerPrimitiveAlgo::FIRST_DEPTH7_TOWER = 26
staticprivate

Definition at line 236 of file HcalTriggerPrimitiveAlgo.h.

Referenced by needUpgradeID().

◆ FIRST_FINEGRAIN_TOWER

const int HcalTriggerPrimitiveAlgo::FIRST_FINEGRAIN_TOWER = 30
staticprivate

Definition at line 241 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeHF2016(), and analyzeHFQIE10().

◆ fix_saturation_

bool HcalTriggerPrimitiveAlgo::fix_saturation_ = false
private

Definition at line 225 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal(), analyzeQIE11(), and setFixSaturationFlag().

◆ HBHE_OVERLAP_TOWER

const int HcalTriggerPrimitiveAlgo::HBHE_OVERLAP_TOWER = 16
staticprivate

Definition at line 235 of file HcalTriggerPrimitiveAlgo.h.

Referenced by needLegacyFG(), and validUpgradeFG().

◆ HF_Veto

TowerMapVeto HcalTriggerPrimitiveAlgo::HF_Veto
private

Definition at line 208 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal(), analyzeHF(), and run().

◆ incoder_

const HcaluLUTTPGCoder* HcalTriggerPrimitiveAlgo::incoder_
private

Definition at line 133 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal(), addUpgradeTDCFG(), and run().

◆ LAST_FINEGRAIN_DEPTH

const int HcalTriggerPrimitiveAlgo::LAST_FINEGRAIN_DEPTH = 6
staticprivate

Definition at line 237 of file HcalTriggerPrimitiveAlgo.h.

Referenced by needUpgradeID(), and validUpgradeFG().

◆ LAST_FINEGRAIN_TOWER

const int HcalTriggerPrimitiveAlgo::LAST_FINEGRAIN_TOWER = 28
staticprivate

Definition at line 238 of file HcalTriggerPrimitiveAlgo.h.

Referenced by validUpgradeFG().

◆ latency_

int HcalTriggerPrimitiveAlgo::latency_
private

Definition at line 140 of file HcalTriggerPrimitiveAlgo.h.

◆ LongvrsShortCut

HcalFeatureBit* HcalTriggerPrimitiveAlgo::LongvrsShortCut
private

Definition at line 206 of file HcalTriggerPrimitiveAlgo.h.

Referenced by run().

◆ minSignalThreshold_

uint32_t HcalTriggerPrimitiveAlgo::minSignalThreshold_
private

Definition at line 152 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal().

◆ NCTScaleShift

int HcalTriggerPrimitiveAlgo::NCTScaleShift
private

Definition at line 154 of file HcalTriggerPrimitiveAlgo.h.

Referenced by run(), and setNCTScaleShift().

◆ numberOfFilterPresamplesHBQIE11_

int HcalTriggerPrimitiveAlgo::numberOfFilterPresamplesHBQIE11_
private

Definition at line 147 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeQIE11(), and setNumFilterPresamplesHBQIE11().

◆ numberOfFilterPresamplesHEQIE11_

int HcalTriggerPrimitiveAlgo::numberOfFilterPresamplesHEQIE11_
private

Definition at line 148 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeQIE11(), and setNumFilterPresamplesHEQIE11().

◆ numberOfPresamples_

int HcalTriggerPrimitiveAlgo::numberOfPresamples_
private

Definition at line 146 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyze(), analyzeQIE11(), and HcalTriggerPrimitiveAlgo().

◆ numberOfPresamplesHF_

int HcalTriggerPrimitiveAlgo::numberOfPresamplesHF_
private

◆ numberOfSamples_

int HcalTriggerPrimitiveAlgo::numberOfSamples_
private

Definition at line 145 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyze(), analyzeQIE11(), and HcalTriggerPrimitiveAlgo().

◆ numberOfSamplesHF_

int HcalTriggerPrimitiveAlgo::numberOfSamplesHF_
private

◆ outcoder_

const HcalTPGCompressor* HcalTriggerPrimitiveAlgo::outcoder_
private

◆ override_adc_hf_

bool HcalTriggerPrimitiveAlgo::override_adc_hf_ = false
private

Definition at line 229 of file HcalTriggerPrimitiveAlgo.h.

Referenced by overrideParameters(), and passTDC().

◆ override_adc_hf_value_

uint32_t HcalTriggerPrimitiveAlgo::override_adc_hf_value_
private

Definition at line 230 of file HcalTriggerPrimitiveAlgo.h.

Referenced by overrideParameters(), and passTDC().

◆ override_parameters_

edm::ParameterSet HcalTriggerPrimitiveAlgo::override_parameters_
private

Definition at line 227 of file HcalTriggerPrimitiveAlgo.h.

Referenced by overrideParameters(), and run().

◆ override_tdc_hf_

bool HcalTriggerPrimitiveAlgo::override_tdc_hf_ = false
private

Definition at line 231 of file HcalTriggerPrimitiveAlgo.h.

Referenced by overrideParameters(), and passTDC().

◆ override_tdc_hf_value_

unsigned long long HcalTriggerPrimitiveAlgo::override_tdc_hf_value_
private

Definition at line 232 of file HcalTriggerPrimitiveAlgo.h.

Referenced by overrideParameters(), and passTDC().

◆ peak_finder_algorithm_

int HcalTriggerPrimitiveAlgo::peak_finder_algorithm_
private

Definition at line 161 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyze(), and setPeakFinderAlgorithm().

◆ peakfind_

bool HcalTriggerPrimitiveAlgo::peakfind_
private

Definition at line 137 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyze(), and HcalTriggerPrimitiveAlgo().

◆ PMT_NoiseThreshold_

uint32_t HcalTriggerPrimitiveAlgo::PMT_NoiseThreshold_
private

Definition at line 153 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeHF().

◆ QIE10_LINEARIZATION_ET

const int HcalTriggerPrimitiveAlgo::QIE10_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE10_LUT_BITMASK
staticprivate

Definition at line 244 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeHFQIE10().

◆ QIE10_MAX_LINEARIZATION_ET

const int HcalTriggerPrimitiveAlgo::QIE10_MAX_LINEARIZATION_ET = 0x7FF
staticprivate

Definition at line 247 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeHFQIE10().

◆ QIE11_LINEARIZATION_ET

const int HcalTriggerPrimitiveAlgo::QIE11_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE11_LUT_BITMASK
staticprivate

Definition at line 245 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal().

◆ QIE11_MAX_LINEARIZATION_ET

const int HcalTriggerPrimitiveAlgo::QIE11_MAX_LINEARIZATION_ET = 0x7FF
staticprivate

Definition at line 248 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeQIE11().

◆ QIE8_LINEARIZATION_ET

const int HcalTriggerPrimitiveAlgo::QIE8_LINEARIZATION_ET = HcaluLUTTPGCoder::QIE8_LUT_BITMASK
staticprivate

Definition at line 243 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyze(), analyzeHF(), and analyzeHF2016().

◆ RCTScaleShift

int HcalTriggerPrimitiveAlgo::RCTScaleShift
private

Definition at line 155 of file HcalTriggerPrimitiveAlgo.h.

Referenced by run(), and setRCTScaleShift().

◆ theHFDetailMap

HFDetailMap HcalTriggerPrimitiveAlgo::theHFDetailMap
private

Definition at line 181 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal(), analyzeHF2016(), and run().

◆ theHFUpgradeDetailMap

HFUpgradeDetailMap HcalTriggerPrimitiveAlgo::theHFUpgradeDetailMap
private

Definition at line 191 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal(), analyzeHFQIE10(), and run().

◆ theSatMap

SatMap HcalTriggerPrimitiveAlgo::theSatMap
private

Definition at line 172 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal(), and run().

◆ theSumMap

SumMap HcalTriggerPrimitiveAlgo::theSumMap
private

Definition at line 169 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal(), and run().

◆ theThreshold

double HcalTriggerPrimitiveAlgo::theThreshold
private

Definition at line 136 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyze(), and analyzeQIE11().

◆ theTowerMapFGSum

TowerMapFGSum HcalTriggerPrimitiveAlgo::theTowerMapFGSum
private

Definition at line 195 of file HcalTriggerPrimitiveAlgo.h.

Referenced by addSignal(), analyzeHF(), and run().

◆ theTrigTowerGeometry

const HcalTrigTowerGeometry* HcalTriggerPrimitiveAlgo::theTrigTowerGeometry
private

◆ upgrade_hb_

bool HcalTriggerPrimitiveAlgo::upgrade_hb_ = false
private

Definition at line 221 of file HcalTriggerPrimitiveAlgo.h.

Referenced by needLegacyFG(), run(), setUpgradeFlags(), and validUpgradeFG().

◆ upgrade_he_

bool HcalTriggerPrimitiveAlgo::upgrade_he_ = false
private

Definition at line 222 of file HcalTriggerPrimitiveAlgo.h.

Referenced by run(), and setUpgradeFlags().

◆ upgrade_hf_

bool HcalTriggerPrimitiveAlgo::upgrade_hf_ = false
private

Definition at line 223 of file HcalTriggerPrimitiveAlgo.h.

Referenced by run(), and setUpgradeFlags().

◆ useTDCInMinBiasBits_

bool HcalTriggerPrimitiveAlgo::useTDCInMinBiasBits_
private

Definition at line 151 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeHFQIE10().

◆ weights_

std::vector<double> HcalTriggerPrimitiveAlgo::weights_
private

Definition at line 138 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyze().

◆ weightsQIE11_

std::array<std::array<double, 2>, 29> HcalTriggerPrimitiveAlgo::weightsQIE11_
private

Definition at line 139 of file HcalTriggerPrimitiveAlgo.h.

Referenced by analyzeQIE11(), setWeightQIE11(), and setWeightsQIE11().

◆ ZS_threshold_

uint32_t HcalTriggerPrimitiveAlgo::ZS_threshold_
private

Definition at line 143 of file HcalTriggerPrimitiveAlgo.h.

Referenced by HcalTriggerPrimitiveAlgo().

◆ ZS_threshold_I_

int HcalTriggerPrimitiveAlgo::ZS_threshold_I_
private

Definition at line 144 of file HcalTriggerPrimitiveAlgo.h.

Referenced by HcalTriggerPrimitiveAlgo(), and runZS().