CMS 3D CMS Logo

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

#include <HcaluLUTTPGCoder.h>

Inheritance diagram for HcaluLUTTPGCoder:
HcalTPGCoder

Public Member Functions

void adc2Linear (const HBHEDataFrame &df, IntegerCaloSamples &ics) const override
 
void adc2Linear (const HFDataFrame &df, IntegerCaloSamples &ics) const override
 
void adc2Linear (const QIE10DataFrame &df, IntegerCaloSamples &ics) const override
 
void adc2Linear (const QIE11DataFrame &df, IntegerCaloSamples &ics) const override
 
unsigned short adc2Linear (HcalQIESample sample, HcalDetId id) const override
 
void compress (const IntegerCaloSamples &ics, const std::vector< bool > &featureBits, HcalTriggerPrimitiveDigi &tp) const override
 
double cosh_ieta (int ieta, int depth, HcalSubdetector subdet)
 
std::vector< unsigned short > getLinearizationLUT (HcalDetId id) const override
 Get the full linearization LUT (128 elements). Default implementation just uses adc2Linear to get all values. More...
 
float getLUTGain (HcalDetId id) const override
 
int getLUTId (HcalSubdetector id, int ieta, int iphi, int depth) const
 
int getLUTId (uint32_t rawid) const
 
int getLUTId (const HcalDetId &detid) const
 
float getLUTPedestal (HcalDetId id) const override
 
bool getMSB (const HcalDetId &id, int adc) const
 
 HcaluLUTTPGCoder ()
 
 HcaluLUTTPGCoder (const HcalTopology *topo, const HcalTimeSlew *delay)
 
void init (const HcalTopology *top, const HcalTimeSlew *delay)
 
void lookupMSB (const HBHEDataFrame &df, std::vector< bool > &msb) const
 
void lookupMSB (const QIE10DataFrame &df, std::vector< std::bitset< 2 >> &msb) const
 
void lookupMSB (const QIE11DataFrame &df, std::vector< std::bitset< 2 >> &msb) const
 
void make_cosh_ieta_map (void)
 
void setAllLinear (bool linear, double lsb8, double lsb11, double lsb11overlap)
 
void setFGHFthresholds (const std::vector< uint32_t > &fgthresholds)
 
void setLUTGenerationMode (bool gen)
 
void setMaskBit (int bit)
 
void update (const HcalDbService &conditions)
 
void update (const char *filename, bool appendMSB=false)
 
void updateXML (const char *filename)
 
 ~HcaluLUTTPGCoder () override
 
- Public Member Functions inherited from HcalTPGCoder
unsigned short adc2Linear (unsigned char adc, HcalDetId id) const
 
virtual ~HcalTPGCoder ()=default
 

Static Public Attributes

static const float lsb_ =1./16
 
static const int QIE10_LUT_BITMASK = 0x7FF
 
static const int QIE11_LUT_BITMASK = 0x3FF
 
static const int QIE8_LUT_BITMASK = 0x3FF
 

Private Types

typedef std::vector< LutElementLut
 
typedef unsigned short LutElement
 

Private Attributes

bool allLinear_
 
int bitToMask_
 
std::vector< double > cosh_ieta_
 
double cosh_ieta_28_HE_high_depths_
 
double cosh_ieta_28_HE_low_depths_
 
double cosh_ieta_29_HE_
 
const HcalTimeSlewdelay_
 
std::vector< uint32_t > FG_HF_thresholds_
 
int firstHBEta_
 
int firstHEEta_
 
int firstHFEta_
 
std::vector< float > gain_
 
std::vector< LutinputLUT_
 
int lastHBEta_
 
int lastHEEta_
 
int lastHFEta_
 
double linearLSB_QIE11_
 
double linearLSB_QIE11Overlap_
 
double linearLSB_QIE8_
 
bool LUTGenerationMode_
 
int maxDepthHB_
 
int maxDepthHE_
 
int maxDepthHF_
 
int nHBEta_
 
int nHEEta_
 
int nHFEta_
 
std::vector< float > ped_
 
std::unique_ptr< HcalPulseContainmentManagerpulseCorr_
 
int sizeHB_
 
int sizeHE_
 
int sizeHF_
 
const HcalTopologytopo_
 

Static Private Attributes

static const size_t INPUT_LUT_SIZE = 128
 
static const int nFi_ = 72
 
static const int QIE10_LUT_MSB0 = 0x1000
 
static const int QIE10_LUT_MSB1 = 0x2000
 
static const int QIE11_LUT_MSB0 = 0x400
 
static const int QIE11_LUT_MSB1 = 0x800
 
static const int QIE8_LUT_MSB = 0x400
 
static const size_t UPGRADE_LUT_SIZE = 256
 

Detailed Description

The nominal coder uses a user-supplied table to linearize the ADC values.

[number of ieta slices]
[low tower 1] [low tower 2] ...
[high tower 1] [ high tower 2] ...
[LUT 1(0)] [LUT 2(0)] ...
[LUT 1(1)] [LUT 2(1)] ...
. . .
[LUT 1(127)] [LUT 2(127)] ...
Author
M. Weinberger – TAMU
Tulika Bose and Greg Landsberg – Brown

Definition at line 32 of file HcaluLUTTPGCoder.h.

Member Typedef Documentation

typedef std::vector<LutElement> HcaluLUTTPGCoder::Lut
private

Definition at line 76 of file HcaluLUTTPGCoder.h.

typedef unsigned short HcaluLUTTPGCoder::LutElement
private

Definition at line 75 of file HcaluLUTTPGCoder.h.

Constructor & Destructor Documentation

HcaluLUTTPGCoder::HcaluLUTTPGCoder ( )

Definition at line 40 of file HcaluLUTTPGCoder.cc.

References allLinear_, bitToMask_, cosh_ieta_28_HE_high_depths_, cosh_ieta_28_HE_low_depths_, cosh_ieta_29_HE_, delay_, FG_HF_thresholds_, firstHBEta_, firstHEEta_, firstHFEta_, lastHBEta_, lastHEEta_, lastHFEta_, linearLSB_QIE11_, linearLSB_QIE11Overlap_, linearLSB_QIE8_, LUTGenerationMode_, maxDepthHB_, maxDepthHE_, maxDepthHF_, nHBEta_, nHEEta_, nHFEta_, sizeHB_, sizeHE_, and sizeHF_.

40  :
41  topo_{},
42  delay_{},
45  bitToMask_{},
46  firstHBEta_{},
47  lastHBEta_{},
48  nHBEta_{},
49  maxDepthHB_{},
50  sizeHB_{},
51  firstHEEta_{},
52  lastHEEta_{},
53  nHEEta_{},
54  maxDepthHE_{},
55  sizeHE_{},
56  firstHFEta_{},
57  lastHFEta_{},
58  nHFEta_{},
59  maxDepthHF_{},
60  sizeHF_{},
64  allLinear_{},
68 }
std::vector< uint32_t > FG_HF_thresholds_
double cosh_ieta_28_HE_high_depths_
double linearLSB_QIE11Overlap_
const HcalTopology * topo_
double cosh_ieta_28_HE_low_depths_
const HcalTimeSlew * delay_
HcaluLUTTPGCoder::HcaluLUTTPGCoder ( const HcalTopology topo,
const HcalTimeSlew delay 
)

Definition at line 70 of file HcaluLUTTPGCoder.cc.

References init().

70  {
71  init(top, delay);
72 }
void init(const HcalTopology *top, const HcalTimeSlew *delay)
HcaluLUTTPGCoder::~HcaluLUTTPGCoder ( )
override

Definition at line 111 of file HcaluLUTTPGCoder.cc.

111  {
112 }

Member Function Documentation

void HcaluLUTTPGCoder::adc2Linear ( const HBHEDataFrame df,
IntegerCaloSamples ics 
) const
overridevirtual

Implements HcalTPGCoder.

Definition at line 454 of file HcaluLUTTPGCoder.cc.

References ecalMGPA::adc(), getLUTId(), mps_fire::i, HBHEDataFrame::id(), inputLUT_, lumiPlot::lut, QIE8_LUT_BITMASK, and HBHEDataFrame::size().

Referenced by HcalTriggerPrimitiveAlgo::addSignal().

454  {
455  int lutId = getLUTId(df.id());
456  const Lut& lut = inputLUT_.at(lutId);
457  for (int i=0; i<df.size(); i++){
458  ics[i] = (lut.at(df[i].adc()) & QIE8_LUT_BITMASK);
459  }
460 }
int size() const
total number of samples in the digi
Definition: HBHEDataFrame.h:31
static const int QIE8_LUT_BITMASK
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
const HcalDetId & id() const
Definition: HBHEDataFrame.h:27
Definition: Lut.h:31
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::adc2Linear ( const HFDataFrame df,
IntegerCaloSamples ics 
) const
overridevirtual

Implements HcalTPGCoder.

Definition at line 462 of file HcaluLUTTPGCoder.cc.

References ecalMGPA::adc(), getLUTId(), mps_fire::i, HFDataFrame::id(), inputLUT_, lumiPlot::lut, QIE8_LUT_BITMASK, and HFDataFrame::size().

462  {
463  int lutId = getLUTId(df.id());
464  const Lut& lut = inputLUT_.at(lutId);
465  for (int i=0; i<df.size(); i++){
466  ics[i] = (lut.at(df[i].adc()) & QIE8_LUT_BITMASK);
467  }
468 }
static const int QIE8_LUT_BITMASK
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
HcalDetId const & id() const
Definition: HFDataFrame.h:26
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
int size() const
total number of samples in the digi
Definition: HFDataFrame.h:30
Definition: Lut.h:31
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::adc2Linear ( const QIE10DataFrame df,
IntegerCaloSamples ics 
) const
overridevirtual

Implements HcalTPGCoder.

Definition at line 470 of file HcaluLUTTPGCoder.cc.

References ecalMGPA::adc(), getLUTId(), mps_fire::i, QIE10DataFrame::id(), inputLUT_, lumiPlot::lut, QIE10_LUT_BITMASK, and QIE10DataFrame::samples().

470  {
471  int lutId = getLUTId(HcalDetId(df.id()));
472  const Lut& lut = inputLUT_.at(lutId);
473  for (int i=0; i<df.samples(); i++){
474  ics[i] = (lut.at(df[i].adc()) & QIE10_LUT_BITMASK);
475  }
476 }
int samples() const
total number of samples in the digi
edm::DataFrame::id_type id() const
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
static const int QIE10_LUT_BITMASK
Definition: Lut.h:31
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::adc2Linear ( const QIE11DataFrame df,
IntegerCaloSamples ics 
) const
overridevirtual

Implements HcalTPGCoder.

Definition at line 478 of file HcaluLUTTPGCoder.cc.

References ecalMGPA::adc(), getLUTId(), mps_fire::i, QIE11DataFrame::id(), inputLUT_, lumiPlot::lut, QIE11_LUT_BITMASK, and QIE11DataFrame::samples().

478  {
479  int lutId = getLUTId(HcalDetId(df.id()));
480  const Lut& lut = inputLUT_.at(lutId);
481  for (int i=0; i<df.samples(); i++){
482  ics[i] = (lut.at(df[i].adc()) & QIE11_LUT_BITMASK);
483  }
484 }
static const int QIE11_LUT_BITMASK
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
edm::DataFrame::id_type id() const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
int samples() const
total number of samples in the digi
Definition: Lut.h:31
std::vector< Lut > inputLUT_
unsigned short HcaluLUTTPGCoder::adc2Linear ( HcalQIESample  sample,
HcalDetId  id 
) const
overridevirtual

Implements HcalTPGCoder.

Definition at line 486 of file HcaluLUTTPGCoder.cc.

References HcalQIESample::adc(), getLUTId(), inputLUT_, and QIE8_LUT_BITMASK.

486  {
487  int lutId = getLUTId(id);
488  return ((inputLUT_.at(lutId)).at(sample.adc()) & QIE8_LUT_BITMASK);
489 }
static const int QIE8_LUT_BITMASK
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
constexpr int adc() const
get the ADC sample
Definition: HcalQIESample.h:59
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::compress ( const IntegerCaloSamples ics,
const std::vector< bool > &  featureBits,
HcalTriggerPrimitiveDigi tp 
) const
overridevirtual

Implements HcalTPGCoder.

Definition at line 107 of file HcaluLUTTPGCoder.cc.

References Exception.

107  {
108  throw cms::Exception("PROBLEM: This method should never be invoked!");
109 }
double HcaluLUTTPGCoder::cosh_ieta ( int  ieta,
int  depth,
HcalSubdetector  subdet 
)

Definition at line 273 of file HcaluLUTTPGCoder.cc.

References funct::abs(), allLinear_, cosh_ieta_, cosh_ieta_28_HE_high_depths_, cosh_ieta_28_HE_low_depths_, cosh_ieta_29_HE_, and HcalEndcap.

Referenced by update().

273  {
274  // ieta = 28 and 29 are both associated with trigger tower 28
275  // so special handling is required. HF ieta=29 channels included in TT30
276  // are already handled correctly in cosh_ieta_
277  if (abs(ieta) >= 28 && subdet == HcalEndcap && allLinear_) {
278  if (abs(ieta) == 29) return cosh_ieta_29_HE_;
279  if (abs(ieta) == 28) {
280  if (depth <= 3) return cosh_ieta_28_HE_low_depths_;
281  else return cosh_ieta_28_HE_high_depths_;
282  }
283  }
284 
285  return cosh_ieta_[ieta];
286 }
double cosh_ieta_28_HE_high_depths_
double cosh_ieta_28_HE_low_depths_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< double > cosh_ieta_
std::vector< unsigned short > HcaluLUTTPGCoder::getLinearizationLUT ( HcalDetId  id) const
overridevirtual

Get the full linearization LUT (128 elements). Default implementation just uses adc2Linear to get all values.

Reimplemented from HcalTPGCoder.

Definition at line 501 of file HcaluLUTTPGCoder.cc.

References getLUTId(), and inputLUT_.

501  {
502  int lutId = getLUTId(id);
503  return inputLUT_.at(lutId);
504 }
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
std::vector< Lut > inputLUT_
float HcaluLUTTPGCoder::getLUTGain ( HcalDetId  id) const
overridevirtual

Implements HcalTPGCoder.

Definition at line 496 of file HcaluLUTTPGCoder.cc.

References gain_, and getLUTId().

496  {
497  int lutId = getLUTId(id);
498  return gain_.at(lutId);
499 }
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
std::vector< float > gain_
int HcaluLUTTPGCoder::getLUTId ( HcalSubdetector  id,
int  ieta,
int  iphi,
int  depth 
) const

Definition at line 114 of file HcaluLUTTPGCoder.cc.

References firstHBEta_, firstHEEta_, firstHFEta_, HcalBarrel, HcalEndcap, HcalForward, lastHBEta_, lastHEEta_, lastHFEta_, maxDepthHB_, maxDepthHE_, maxDepthHF_, nFi_, nHBEta_, nHEEta_, nHFEta_, sizeHB_, and sizeHE_.

Referenced by adc2Linear(), getLinearizationLUT(), getLUTGain(), getLUTId(), getLUTPedestal(), getMSB(), lookupMSB(), setAllLinear(), update(), and updateXML().

114  {
115  int retval(0);
116  if (id == HcalBarrel) {
117  retval = (depth-1)+maxDepthHB_*(iphi-1);
118  if (ieta>0) retval+=maxDepthHB_*nFi_*(ieta-firstHBEta_);
119  else retval+=maxDepthHB_*nFi_*(ieta+lastHBEta_+nHBEta_);
120  } else if (id == HcalEndcap) {
121  retval = sizeHB_;
122  retval+= (depth-1)+maxDepthHE_*(iphi-1);
123  if (ieta>0) retval+=maxDepthHE_*nFi_*(ieta-firstHEEta_);
124  else retval+=maxDepthHE_*nFi_*(ieta+lastHEEta_+nHEEta_);
125  } else if (id == HcalForward) {
126  retval = sizeHB_+sizeHE_;
127  retval+= (depth-1)+maxDepthHF_*(iphi-1);
128  if (ieta>0) retval+=maxDepthHF_*nFi_*(ieta-firstHFEta_);
129  else retval+=maxDepthHF_*nFi_*(ieta+lastHFEta_+nHFEta_);
130  }
131  return retval;
132 }
static const int nFi_
int HcaluLUTTPGCoder::getLUTId ( uint32_t  rawid) const

Definition at line 134 of file HcaluLUTTPGCoder.cc.

References HcalDetId::depth(), getLUTId(), HcalDetId::ieta(), HcalDetId::iphi(), and HcalDetId::subdet().

134  {
135  HcalDetId detid(rawid);
136  return getLUTId(detid.subdet(), detid.ieta(), detid.iphi(), detid.depth());
137 }
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
int HcaluLUTTPGCoder::getLUTId ( const HcalDetId detid) const

Definition at line 139 of file HcaluLUTTPGCoder.cc.

References HcalDetId::depth(), getLUTId(), HcalDetId::ieta(), HcalDetId::iphi(), and HcalDetId::subdet().

139  {
140  return getLUTId(detid.subdet(), detid.ieta(), detid.iphi(), detid.depth());
141 }
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:146
int depth() const
get the tower depth
Definition: HcalDetId.h:166
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
int ieta() const
get the cell ieta
Definition: HcalDetId.h:159
int iphi() const
get the cell iphi
Definition: HcalDetId.h:161
float HcaluLUTTPGCoder::getLUTPedestal ( HcalDetId  id) const
overridevirtual

Implements HcalTPGCoder.

Definition at line 491 of file HcaluLUTTPGCoder.cc.

References getLUTId(), and ped_.

491  {
492  int lutId = getLUTId(id);
493  return ped_.at(lutId);
494 }
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
std::vector< float > ped_
bool HcaluLUTTPGCoder::getMSB ( const HcalDetId id,
int  adc 
) const

Definition at line 512 of file HcaluLUTTPGCoder.cc.

References getLUTId(), inputLUT_, lumiPlot::lut, and QIE8_LUT_MSB.

Referenced by lookupMSB(), and setAllLinear().

512  {
513  int lutId = getLUTId(id);
514  const Lut& lut = inputLUT_.at(lutId);
515  return (lut.at(adc) & QIE8_LUT_MSB);
516 }
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
static const int QIE8_LUT_MSB
Definition: Lut.h:31
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::init ( const HcalTopology top,
const HcalTimeSlew delay 
)

Definition at line 74 of file HcaluLUTTPGCoder.cc.

References allLinear_, bitToMask_, delay_, FG_HF_thresholds_, firstHBEta_, HcalTopology::firstHBRing(), firstHEEta_, HcalTopology::firstHERing(), firstHFEta_, HcalTopology::firstHFRing(), gain_, HcalBarrel, HcalEndcap, HcalForward, inputLUT_, lastHBEta_, HcalTopology::lastHBRing(), lastHEEta_, HcalTopology::lastHERing(), lastHFEta_, HcalTopology::lastHFRing(), linearLSB_QIE11_, linearLSB_QIE11Overlap_, linearLSB_QIE8_, LUTGenerationMode_, make_cosh_ieta_map(), HcalTopology::maxDepth(), maxDepthHB_, maxDepthHE_, maxDepthHF_, MaximumFractionalError, nFi_, nHBEta_, nHEEta_, nHFEta_, ped_, pulseCorr_, sizeHB_, sizeHE_, sizeHF_, and topo_.

Referenced by HcalTPGCoderULUT::buildCoder(), and HcaluLUTTPGCoder().

74  {
75  topo_ = top;
76  delay_ = delay;
77  LUTGenerationMode_ = true;
78  FG_HF_thresholds_ = {0, 0};
79  bitToMask_ = 0;
80  allLinear_ = false;
81  linearLSB_QIE8_ = 1.;
82  linearLSB_QIE11_ = 1.;
84  pulseCorr_ = std::make_unique<HcalPulseContainmentManager>(MaximumFractionalError);
87  nHBEta_ = (lastHBEta_-firstHBEta_+1);
100  size_t nluts= (size_t)(sizeHB_+sizeHE_+sizeHF_+1);
101  inputLUT_ = std::vector<HcaluLUTTPGCoder::Lut>(nluts);
102  gain_ = std::vector<float>(nluts, 0.);
103  ped_ = std::vector<float>(nluts, 0.);
105 }
std::vector< uint32_t > FG_HF_thresholds_
int maxDepth(void) const
int firstHFRing() const
Definition: HcalTopology.h:91
static const int nFi_
double linearLSB_QIE11Overlap_
const HcalTopology * topo_
int firstHBRing() const
Definition: HcalTopology.h:87
int lastHBRing() const
Definition: HcalTopology.h:88
double MaximumFractionalError
const HcalTimeSlew * delay_
int lastHFRing() const
Definition: HcalTopology.h:92
std::vector< float > ped_
std::vector< float > gain_
int firstHERing() const
Definition: HcalTopology.h:89
void make_cosh_ieta_map(void)
std::unique_ptr< HcalPulseContainmentManager > pulseCorr_
int lastHERing() const
Definition: HcalTopology.h:90
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::lookupMSB ( const HBHEDataFrame df,
std::vector< bool > &  msb 
) const

Definition at line 506 of file HcaluLUTTPGCoder.cc.

References HcalQIESample::adc(), getMSB(), mps_fire::i, HBHEDataFrame::id(), HBHEDataFrame::sample(), and HBHEDataFrame::size().

Referenced by HcalTriggerPrimitiveAlgo::addSignal(), and setAllLinear().

506  {
507  msb.resize(df.size());
508  for (int i=0; i<df.size(); ++i)
509  msb[i] = getMSB(df.id(), df.sample(i).adc());
510 }
int size() const
total number of samples in the digi
Definition: HBHEDataFrame.h:31
constexpr int adc() const
get the ADC sample
Definition: HcalQIESample.h:59
HcalQIESample const & sample(int i) const
access a sample
Definition: HBHEDataFrame.h:44
bool getMSB(const HcalDetId &id, int adc) const
const HcalDetId & id() const
Definition: HBHEDataFrame.h:27
void HcaluLUTTPGCoder::lookupMSB ( const QIE10DataFrame df,
std::vector< std::bitset< 2 >> &  msb 
) const

Definition at line 518 of file HcaluLUTTPGCoder.cc.

References ecalMGPA::adc(), getLUTId(), mps_fire::i, QIE10DataFrame::id(), inputLUT_, lumiPlot::lut, QIE10_LUT_MSB0, QIE10_LUT_MSB1, and QIE10DataFrame::samples().

518  {
519  msb.resize(df.samples());
520  int lutId = getLUTId(HcalDetId(df.id()));
521  const Lut& lut = inputLUT_.at(lutId);
522  for (int i = 0; i < df.samples(); ++i) {
523  msb[i][0] = lut.at(df[i].adc()) & QIE10_LUT_MSB0;
524  msb[i][1] = lut.at(df[i].adc()) & QIE10_LUT_MSB1;
525  }
526 }
int samples() const
total number of samples in the digi
edm::DataFrame::id_type id() const
static const int QIE10_LUT_MSB0
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
static const int QIE10_LUT_MSB1
Definition: Lut.h:31
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::lookupMSB ( const QIE11DataFrame df,
std::vector< std::bitset< 2 >> &  msb 
) const

Definition at line 529 of file HcaluLUTTPGCoder.cc.

References ecalMGPA::adc(), getLUTId(), mps_fire::i, QIE11DataFrame::id(), inputLUT_, lumiPlot::lut, QIE11_LUT_MSB0, QIE11_LUT_MSB1, and QIE11DataFrame::samples().

530 {
531  int lutId = getLUTId(HcalDetId(df.id()));
532  const Lut& lut = inputLUT_.at(lutId);
533  for (int i = 0; i < df.samples(); ++i) {
534  msb[i][0] = lut.at(df[i].adc()) & QIE11_LUT_MSB0;
535  msb[i][1] = lut.at(df[i].adc()) & QIE11_LUT_MSB1;
536  }
537 }
static const int QIE11_LUT_MSB1
static const int QIE11_LUT_MSB0
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
edm::DataFrame::id_type id() const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
int samples() const
total number of samples in the digi
Definition: Lut.h:31
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::make_cosh_ieta_map ( void  )

Definition at line 288 of file HcaluLUTTPGCoder.cc.

References cosh_ieta_, cosh_ieta_28_HE_high_depths_, cosh_ieta_28_HE_low_depths_, cosh_ieta_29_HE_, HcalTopology::etaRange(), EnergyCorrector::etas, firstHFEta_, HcalEndcap, HcalForward, mps_fire::i, lastHFEta_, topo_, and HcalTrigTowerGeometry::towerEtaBounds().

Referenced by init(), and update().

288  {
289 
290  cosh_ieta_ = std::vector<double>(lastHFEta_ + 1, -1.0);
291 
292  HcalTrigTowerGeometry triggeo(topo_);
293 
294  for (int i = 1; i <= firstHFEta_; ++i) {
295  double eta_low = 0., eta_high = 0.;
296  triggeo.towerEtaBounds(i, 0, eta_low, eta_high);
297  cosh_ieta_[i] = cosh((eta_low + eta_high)/2.);
298  }
299  for (int i = firstHFEta_; i <= lastHFEta_; ++i){
300  std::pair<double,double> etas = topo_->etaRange(HcalForward,i);
301  double eta1 = etas.first;
302  double eta2 = etas.second;
303  cosh_ieta_[i] = cosh((eta1 + eta2)/2.);
304  }
305 
306  // trigger tower 28 in HE has a more complicated geometry
307  std::pair<double, double> eta28 = topo_->etaRange(HcalEndcap, 28);
308  std::pair<double, double> eta29 = topo_->etaRange(HcalEndcap, 29);
309  cosh_ieta_29_HE_ = cosh((eta29.first + eta29.second)/2.);
310  cosh_ieta_28_HE_low_depths_ = cosh((eta28.first + eta28.second)/2.);
311  // for higher depths in ieta = 28, the trigger tower extends past
312  // the ieta = 29 channels
313  cosh_ieta_28_HE_high_depths_ = cosh((eta28.first + eta29.second)/2.);
314 }
double cosh_ieta_28_HE_high_depths_
const HcalTopology * topo_
double cosh_ieta_28_HE_low_depths_
std::vector< double > cosh_ieta_
std::pair< double, double > etaRange(HcalSubdetector subdet, int ieta) const
void HcaluLUTTPGCoder::setAllLinear ( bool  linear,
double  lsb8,
double  lsb11,
double  lsb11overlap 
)
inline
void HcaluLUTTPGCoder::setFGHFthresholds ( const std::vector< uint32_t > &  fgthresholds)
inline

Definition at line 58 of file HcaluLUTTPGCoder.h.

References FG_HF_thresholds_.

Referenced by HcalTPGCoderULUT::buildCoder().

58 { FG_HF_thresholds_ = fgthresholds; };
std::vector< uint32_t > FG_HF_thresholds_
void HcaluLUTTPGCoder::setLUTGenerationMode ( bool  gen)
inline

Definition at line 57 of file HcaluLUTTPGCoder.h.

References relval_steps::gen(), and LUTGenerationMode_.

Referenced by HcalTPGCoderULUT::buildCoder().

57 { LUTGenerationMode_ = gen; };
def gen(fragment, howMuch)
Production test section ####.
void HcaluLUTTPGCoder::setMaskBit ( int  bit)
inline

Definition at line 59 of file HcaluLUTTPGCoder.h.

References bitToMask_.

Referenced by HcalTPGCoderULUT::buildCoder().

59 { bitToMask_ = bit; };
void HcaluLUTTPGCoder::update ( const HcalDbService conditions)

Definition at line 316 of file HcaluLUTTPGCoder.cc.

References ecalMGPA::adc(), hcaldqm::constants::adc2fC, allLinear_, bitToMask_, AlignmentProducer_cff::calibrations, HcalQIECoder::charge(), corr, CastorSimpleReconstructor_cfi::correctionPhaseNS, HcalRecoParam::correctionPhaseNS(), cosh_ieta(), cosh_ieta_, HcalTopology::dddConstants(), delay_, HcalDetId::depth(), HcalCalibrations::effpedestal(), FG_HF_thresholds_, muonCSCDigis_cfi::gain, gain_, HcalCondObjectContainer< Item >::getAllChannels(), HcalTPChannelParameter::getFGBitInfo(), HcalL1TriggerObject::getFlag(), HcalDbService::getHcalCalibrations(), HcalDbService::getHcalChannelStatus(), HcalDbService::getHcalCoder(), HcalDbService::getHcalL1TriggerObject(), HcalDbService::getHcalLutMetadata(), HcalDbService::getHcalQIEType(), HcalDbService::getHcalRecoParam(), HcalDbService::getHcalShape(), HcalDbService::getHcalSiPMCharacteristics(), HcalDbService::getHcalSiPMParameter(), HcalDbService::getHcalTPChannelParameter(), HcalLutMetadatum::getLutGranularity(), getLUTId(), HcalLutMetadata::getNominalGain(), HcalSiPMCharacteristics::getNonLinearities(), HcalL1TriggerObject::getPedestal(), HcalLutMetadatum::getRCalib(), HcalL1TriggerObject::getRespGain(), HcalQIEType::getValue(), HcalChannelStatus::getValue(), HcalCondObjectContainer< Item >::getValues(), DetId::Hcal, HcalBarrel, HcalEndcap, HcalForward, HcalDetId::ietaAbs(), INPUT_LUT_SIZE, inputLUT_, HcalDDDRecConstants::isPlan1(), HcalTopology::lastHBRing(), linearLSB_QIE11_, linearLSB_QIE11Overlap_, linearLSB_QIE8_, lsb_, lumiPlot::lut, LUTGenerationMode_, HcalCalibrations::LUTrespcorrgain(), make_cosh_ieta_map(), SiStripPI::max, min(), or, ped_, pulseCorr_, QIE10, QIE10_LUT_BITMASK, QIE10_LUT_MSB0, QIE10_LUT_MSB1, QIE11, QIE11_LUT_BITMASK, QIE11_LUT_MSB0, QIE11_LUT_MSB1, QIE8, QIE8_LUT_BITMASK, SIZE, mps_update::status, HcalDetId::subdet(), topo_, HcalTopology::triggerMode(), HcalTopologyMode::TriggerMode_2018, HcalTopologyMode::TriggerMode_2018legacy, UPGRADE_LUT_SIZE, and HcalTopology::valid().

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), HcalTPGCoderULUT::buildCoder(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), dqm-mbProfile.Profile::finish(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), HcalTPGCoderULUT::setupDBRecord(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

316  {
317 
318  const HcalLutMetadata *metadata = conditions.getHcalLutMetadata();
319  assert(metadata !=nullptr);
320  float nominalgain_ = metadata->getNominalGain();
321 
322  pulseCorr_->beginRun(&conditions, delay_);
323 
325 
326  for (const auto& id: metadata->getAllChannels()) {
327 
328  if (not (id.det() == DetId::Hcal and topo_->valid(id))) continue;
329 
330  HcalDetId cell(id);
331  HcalSubdetector subdet = cell.subdet();
332 
333  if (subdet != HcalBarrel and subdet != HcalEndcap and subdet != HcalForward) continue;
334 
335  const HcalQIECoder* channelCoder = conditions.getHcalCoder (cell);
336  const HcalQIEShape* shape = conditions.getHcalShape(cell);
337  HcalCoderDb coder (*channelCoder, *shape);
338  const HcalLutMetadatum *meta = metadata->getValues(cell);
339 
340  unsigned int mipMax = 0;
341  unsigned int mipMin = 0;
342 
343  bool is2018OrLater = topo_->triggerMode() >= HcalTopologyMode::TriggerMode_2018 or
345  if (is2018OrLater or topo_->dddConstants()->isPlan1(cell)) {
346  const HcalTPChannelParameter *channelParameters = conditions.getHcalTPChannelParameter(cell);
347  mipMax = channelParameters->getFGBitInfo() >> 16;
348  mipMin = channelParameters->getFGBitInfo() & 0xFFFF;
349  }
350 
351  int lutId = getLUTId(cell);
352  Lut &lut=inputLUT_[lutId];
353  float ped = 0;
354  float gain = 0;
355  uint32_t status = 0;
356 
357  if (LUTGenerationMode_){
358  const HcalCalibrations& calibrations = conditions.getHcalCalibrations(cell);
359  for (auto capId : {0,1,2,3}){
360  ped += calibrations.effpedestal(capId);
361  gain += calibrations.LUTrespcorrgain(capId);
362  }
363  ped /= 4.0;
364  gain /= 4.0;
365 
366  //Get Channel Quality
367  const HcalChannelStatus* channelStatus = conditions.getHcalChannelStatus(cell);
368  status = channelStatus->getValue();
369 
370  } else {
371  const HcalL1TriggerObject* myL1TObj = conditions.getHcalL1TriggerObject(cell);
372  ped = myL1TObj->getPedestal();
373  gain = myL1TObj->getRespGain();
374  status = myL1TObj->getFlag();
375  } // LUTGenerationMode_
376 
377  ped_[lutId] = ped;
378  gain_[lutId] = gain;
379  bool isMasked = ( (status & bitToMask_) > 0 );
380  float rcalib = meta->getRCalib();
381 
382  auto adc2fC = [channelCoder, shape](unsigned int adc){
383  float fC = 0;
384  for (auto capId : {0,1,2,3}) fC += channelCoder->charge(*shape, adc, capId);
385  return fC/4;
386  };
387 
388  int qieType =conditions.getHcalQIEType(cell)->getValue();
389 
390  const size_t SIZE = qieType==QIE8 ? INPUT_LUT_SIZE : UPGRADE_LUT_SIZE;
391  const int MASK = qieType==QIE8 ? QIE8_LUT_BITMASK :
393  double linearLSB = linearLSB_QIE8_;
394  if (qieType == QIE11 and cell.ietaAbs() == topo_->lastHBRing())
395  linearLSB = linearLSB_QIE11Overlap_;
396  else if (qieType == QIE11)
397  linearLSB = linearLSB_QIE11_;
398 
399  lut.resize(SIZE, 0);
400 
401  // Input LUT for HB/HE/HF
402  if (subdet == HcalBarrel || subdet == HcalEndcap){
403 
404  int granularity = meta->getLutGranularity();
405 
406  double correctionPhaseNS = conditions.getHcalRecoParam(cell)->correctionPhaseNS();
407  for (unsigned int adc = 0; adc < SIZE; ++adc) {
408  if (isMasked) lut[adc] = 0;
409  else {
410  double nonlinearityCorrection = 1.0;
411  double containmentCorrection2TSCorrected = 1.0;
412  // SiPM nonlinearity was not corrected in 2017
413  // and containment corrections were not
414  // ET-dependent prior to 2018
415  if(is2018OrLater) {
416  double containmentCorrection1TS = pulseCorr_->correction(cell, 1, correctionPhaseNS, adc2fC(adc));
417  // Use the 1-TS containment correction to estimate the charge of the pulse
418  // from the individual samples
419  double correctedCharge = containmentCorrection1TS*adc2fC(adc);
420  containmentCorrection2TSCorrected = pulseCorr_->correction(cell, 2, correctionPhaseNS, correctedCharge);
421  if(qieType==QIE11) {
422  const HcalSiPMParameter& siPMParameter(*conditions.getHcalSiPMParameter(cell));
423  HcalSiPMnonlinearity corr(conditions.getHcalSiPMCharacteristics()->getNonLinearities(siPMParameter.getType()));
424  const double fcByPE = siPMParameter.getFCByPE();
425  const double effectivePixelsFired = correctedCharge/fcByPE;
426  nonlinearityCorrection = corr.getRecoCorrectionFactor(effectivePixelsFired);
427  }
428  }
429  if (allLinear_)
430  lut[adc] = (LutElement) std::min(std::max(0, int((adc2fC(adc) - ped) * gain * rcalib * nonlinearityCorrection * containmentCorrection2TSCorrected / linearLSB / cosh_ieta(cell.ietaAbs(), cell.depth(), HcalEndcap))), MASK);
431  else
432  lut[adc] = (LutElement) std::min(std::max(0, int((adc2fC(adc) - ped) * gain * rcalib * nonlinearityCorrection * containmentCorrection2TSCorrected / nominalgain_ / granularity)), MASK);
433 
434  if(qieType==QIE11){
435  if (adc >= mipMin and adc < mipMax) lut[adc] |= QIE11_LUT_MSB0;
436  else if (adc >= mipMax) lut[adc] |= QIE11_LUT_MSB1;
437  }
438  }
439  }
440  }
441  else if (subdet == HcalForward){
442  for (unsigned int adc = 0; adc < SIZE; ++adc) {
443  if (isMasked) lut[adc] = 0;
444  else {
445  lut[adc] = std::min(std::max(0,int((adc2fC(adc) - ped) * gain * rcalib / lsb_ / cosh_ieta_[cell.ietaAbs()])), MASK);
446  if(adc>FG_HF_thresholds_[0]) lut[adc] |= QIE10_LUT_MSB0;
447  if(adc>FG_HF_thresholds_[1]) lut[adc] |= QIE10_LUT_MSB1;
448  }
449  }
450  }
451  }
452 }
std::vector< uint32_t > FG_HF_thresholds_
uint32_t getFlag() const
float getPedestal() const
const HcalDDDRecConstants * dddConstants() const
Definition: HcalTopology.h:168
int getValue() const
Definition: HcalQIEType.h:20
const HcalTPChannelParameter * getHcalTPChannelParameter(const HcalGenericDetId &fId) const
bool valid(const DetId &id) const override
double linearLSB_QIE11Overlap_
const HcalRecoParam * getHcalRecoParam(const HcalGenericDetId &fId) const
static const int QIE11_LUT_MSB1
static const int QIE11_LUT_BITMASK
const HcalChannelStatus * getHcalChannelStatus(const HcalGenericDetId &fId) const
Definition: HcalQIENum.h:4
const HcalTopology * topo_
int lastHBRing() const
Definition: HcalTopology.h:88
static const int QIE11_LUT_MSB0
static const float lsb_
const Item * getValues(DetId fId, bool throwOnFail=true) const
static const int QIE8_LUT_BITMASK
uint8_t getLutGranularity() const
HcalTopologyMode::TriggerMode triggerMode() const
Definition: HcalTopology.h:32
unsigned short LutElement
static const int QIE10_LUT_MSB0
static const size_t UPGRADE_LUT_SIZE
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
float getRespGain() const
std::vector< DetId > getAllChannels() const
constexpr float correctionPhaseNS() const
Definition: HcalRecoParam.h:31
float getNominalGain() 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
const HcalTimeSlew * delay_
float getRCalib() const
const HcalL1TriggerObject * getHcalL1TriggerObject(const HcalGenericDetId &fId) const
constexpr double effpedestal(int fCapId) const
get effective pedestal for capid=0..3
HcalSubdetector
Definition: HcalAssistant.h:31
const HcalLutMetadata * getHcalLutMetadata() const
T min(T a, T b)
Definition: MathUtil.h:58
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
JetCorrectorParameters corr
Definition: classes.h:5
static const int QIE10_LUT_BITMASK
std::vector< double > cosh_ieta_
const HcalQIEType * getHcalQIEType(const HcalGenericDetId &fId) const
double const adc2fC[256]
Definition: Constants.h:240
std::vector< float > ped_
double cosh_ieta(int ieta, int depth, HcalSubdetector subdet)
std::vector< float > gain_
constexpr double LUTrespcorrgain(int fCapId) const
get LUT corrected and response corrected gain for capid=0..3
const HcalSiPMCharacteristics * getHcalSiPMCharacteristics() const
const HcalQIECoder * getHcalCoder(const HcalGenericDetId &fId) const
std::vector< float > getNonLinearities(int type) const
get nonlinearity constants
const HcalQIEShape * getHcalShape(const HcalGenericDetId &fId) const
static const size_t INPUT_LUT_SIZE
uint32_t getFGBitInfo() const
get FG bit information
bool isPlan1(const HcalDetId &id) const
void make_cosh_ieta_map(void)
uint32_t getValue() const
const HcalCalibrations & getHcalCalibrations(const HcalGenericDetId &fId) const
std::unique_ptr< HcalPulseContainmentManager > pulseCorr_
const HcalSiPMParameter * getHcalSiPMParameter(const HcalGenericDetId &fId) const
static const int QIE10_LUT_MSB1
Definition: Lut.h:31
std::vector< Lut > inputLUT_
float charge(const HcalQIEShape &fShape, unsigned fAdc, unsigned fCapId) const
ADC [0..127] + capid [0..3] -> fC conversion.
Definition: HcalQIECoder.cc:20
void HcaluLUTTPGCoder::update ( const char *  filename,
bool  appendMSB = false 
)

Definition at line 143 of file HcaluLUTTPGCoder.cc.

References ecalMGPA::adc(), edmScanValgrind::buffer, egammaForCoreTracking_cff::depth, FrontierConditions_GlobalTag_cff::file, getLUTId(), HcalBarrel, HcalEndcap, HcalForward, mps_fire::i, triggerObjects_cff::id, recoMuon::in, INPUT_LUT_SIZE, inputLUT_, QIE8_LUT_BITMASK, QIE8_LUT_MSB, findQualityFiles::size, AlCaHLTBitMon_QueryRunRegistry::string, topo_, and HcalTopology::valid().

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), dqm-mbProfile.Profile::finish(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

143  {
144 
145  std::ifstream file(filename, std::ios::in);
146  assert(file.is_open());
147 
148  std::vector<HcalSubdetector> subdet;
150 
151  // Drop first (comment) line
152  std::getline(file, buffer);
153  std::getline(file, buffer);
154 
155  unsigned int index = buffer.find("H", 0);
156  while (index < buffer.length()){
157  std::string subdetStr = buffer.substr(index, 2);
158  if (subdetStr == "HB") subdet.push_back(HcalBarrel);
159  else if (subdetStr == "HE") subdet.push_back(HcalEndcap);
160  else if (subdetStr == "HF") subdet.push_back(HcalForward);
161  //TODO Check subdet
162  //else exception
163  index += 2;
164  index = buffer.find("H", index);
165  }
166 
167  // Get upper/lower ranges for ieta/iphi/depth
168  size_t nCol = subdet.size();
169  assert(nCol > 0);
170 
171  std::vector<int> ietaU;
172  std::vector<int> ietaL;
173  std::vector<int> iphiU;
174  std::vector<int> iphiL;
175  std::vector<int> depU;
176  std::vector<int> depL;
177  std::vector< Lut > lutFromFile(nCol);
178  LutElement lutValue;
179 
180  for (size_t i=0; i<nCol; ++i) {
181  int ieta;
182  file >> ieta;
183  ietaL.push_back(ieta);
184  }
185 
186  for (size_t i=0; i<nCol; ++i) {
187  int ieta;
188  file >> ieta;
189  ietaU.push_back(ieta);
190  }
191 
192  for (size_t i=0; i<nCol; ++i) {
193  int iphi;
194  file >> iphi;
195  iphiL.push_back(iphi);
196  }
197 
198  for (size_t i=0; i<nCol; ++i) {
199  int iphi;
200  file >> iphi;
201  iphiU.push_back(iphi);
202  }
203 
204  for (size_t i=0; i<nCol; ++i) {
205  int dep;
206  file >> dep;
207  depL.push_back(dep);
208  }
209 
210  for (size_t i=0; i<nCol; ++i) {
211  int dep;
212  file >> dep;
213  depU.push_back(dep);
214  }
215 
216  // Read Lut Entry
217  for (size_t i=0; file >> lutValue; i = (i+1) % nCol){
218  lutFromFile[i].push_back(lutValue);
219  }
220 
221  // Check lut size
222  for (size_t i=0; i<nCol; ++i) assert(lutFromFile[i].size() == INPUT_LUT_SIZE);
223 
224  for (size_t i=0; i<nCol; ++i){
225  for (int ieta = ietaL[i]; ieta <= ietaU[i]; ++ieta){
226  for (int iphi = iphiL[i]; iphi <= iphiU[i]; ++iphi){
227  for (int depth = depL[i]; depth <= depU[i]; ++depth){
228 
229  HcalDetId id(subdet[i], ieta, iphi, depth);
230  if (!topo_->valid(id)) continue;
231 
232  int lutId = getLUTId(id);
233  for (size_t adc = 0; adc < INPUT_LUT_SIZE; ++adc){
234  if (appendMSB){
235  // Append FG bit LUT to MSB
236  // MSB = Most Significant Bit = bit 10
237  // Overwrite bit 10
238  LutElement msb = (lutFromFile[i][adc] != 0 ? QIE8_LUT_MSB : 0);
239  inputLUT_[lutId][adc] = (msb | (inputLUT_[lutId][adc] & QIE8_LUT_BITMASK));
240  }
241  else inputLUT_[lutId][adc] = lutFromFile[i][adc];
242  }// for adc
243  }// for depth
244  }// for iphi
245  }// for ieta
246  }// for nCol
247 }
size
Write out results.
bool valid(const DetId &id) const override
const HcalTopology * topo_
static const int QIE8_LUT_BITMASK
unsigned short LutElement
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
static const int QIE8_LUT_MSB
static const size_t INPUT_LUT_SIZE
std::vector< Lut > inputLUT_
void HcaluLUTTPGCoder::updateXML ( const char *  filename)

Definition at line 249 of file HcaluLUTTPGCoder.cc.

References LutXml::create_lut_map(), egammaForCoreTracking_cff::depth, Exception, XMLProcessor::getInstance(), LutXml::getLutFast(), getLUTId(), HcalBarrel, HcalEndcap, HcalForward, mps_fire::i, INPUT_LUT_SIZE, inputLUT_, createfilelist::int, HcalDetId::kHcalDepthMask2, HcalDetId::kHcalEtaMask2, HcalDetId::kHcalPhiMask2, lumiPlot::lut, XMLProcessor::terminate(), topo_, and HcalTopology::valid().

Referenced by HcalTPGCoderULUT::buildCoder().

249  {
250  LutXml * _xml = new LutXml(filename);
251  _xml->create_lut_map();
253  for (int ieta = -HcalDetId::kHcalEtaMask2;
254  ieta <= (int)(HcalDetId::kHcalEtaMask2); ++ieta) {
255  for (unsigned int iphi = 0; iphi <= HcalDetId::kHcalPhiMask2; ++iphi) {
256  for (unsigned int depth = 1; depth < HcalDetId::kHcalDepthMask2; ++depth) {
257  for (int isub=0; isub<3; ++isub) {
258  HcalDetId detid(subdet[isub], ieta, iphi, depth);
259  if (!topo_->valid(detid)) continue;
260  int id = getLUTId(subdet[isub], ieta, iphi, depth);
261  std::vector<unsigned int>* lut = _xml->getLutFast(detid);
262  if (lut==nullptr) throw cms::Exception("PROBLEM: No inputLUT_ in xml file for ") << detid << std::endl;
263  if (lut->size()!=INPUT_LUT_SIZE) throw cms::Exception ("PROBLEM: Wrong inputLUT_ size in xml file for ") << detid << std::endl;
264  for (unsigned int i=0; i<INPUT_LUT_SIZE; ++i) inputLUT_[id][i] = (LutElement)lut->at(i);
265  }
266  }
267  }
268  }
269  delete _xml;
271 }
Definition: LutXml.h:27
bool valid(const DetId &id) const override
static uint32_t kHcalEtaMask2
Definition: HcalDetId.h:21
int create_lut_map(void)
Definition: LutXml.cc:383
const HcalTopology * topo_
unsigned short LutElement
int getLUTId(HcalSubdetector id, int ieta, int iphi, int depth) const
int terminate(void)
static uint32_t kHcalDepthMask2
Definition: HcalDetId.h:27
HcalSubdetector
Definition: HcalAssistant.h:31
static uint32_t kHcalPhiMask2
Definition: HcalDetId.h:17
std::vector< unsigned int > * getLutFast(uint32_t det_id)
Definition: LutXml.cc:88
static const size_t INPUT_LUT_SIZE
static XMLProcessor * getInstance()
Definition: XMLProcessor.h:145
std::vector< Lut > inputLUT_

Member Data Documentation

bool HcaluLUTTPGCoder::allLinear_
private

Definition at line 104 of file HcaluLUTTPGCoder.h.

Referenced by cosh_ieta(), HcaluLUTTPGCoder(), init(), setAllLinear(), and update().

int HcaluLUTTPGCoder::bitToMask_
private

Definition at line 94 of file HcaluLUTTPGCoder.h.

Referenced by HcaluLUTTPGCoder(), init(), setMaskBit(), and update().

std::vector<double> HcaluLUTTPGCoder::cosh_ieta_
private

Definition at line 101 of file HcaluLUTTPGCoder.h.

Referenced by cosh_ieta(), make_cosh_ieta_map(), and update().

double HcaluLUTTPGCoder::cosh_ieta_28_HE_high_depths_
private

Definition at line 103 of file HcaluLUTTPGCoder.h.

Referenced by cosh_ieta(), HcaluLUTTPGCoder(), and make_cosh_ieta_map().

double HcaluLUTTPGCoder::cosh_ieta_28_HE_low_depths_
private

Definition at line 103 of file HcaluLUTTPGCoder.h.

Referenced by cosh_ieta(), HcaluLUTTPGCoder(), and make_cosh_ieta_map().

double HcaluLUTTPGCoder::cosh_ieta_29_HE_
private

Definition at line 103 of file HcaluLUTTPGCoder.h.

Referenced by cosh_ieta(), HcaluLUTTPGCoder(), and make_cosh_ieta_map().

const HcalTimeSlew* HcaluLUTTPGCoder::delay_
private

Definition at line 91 of file HcaluLUTTPGCoder.h.

Referenced by HcaluLUTTPGCoder(), init(), and update().

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

Definition at line 93 of file HcaluLUTTPGCoder.h.

Referenced by HcaluLUTTPGCoder(), init(), setFGHFthresholds(), and update().

int HcaluLUTTPGCoder::firstHBEta_
private

Definition at line 95 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::firstHEEta_
private

Definition at line 96 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::firstHFEta_
private

Definition at line 97 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), init(), and make_cosh_ieta_map().

std::vector<float> HcaluLUTTPGCoder::gain_
private

Definition at line 99 of file HcaluLUTTPGCoder.h.

Referenced by getLUTGain(), init(), and update().

const size_t HcaluLUTTPGCoder::INPUT_LUT_SIZE = 128
staticprivate

Definition at line 79 of file HcaluLUTTPGCoder.h.

Referenced by update(), and updateXML().

std::vector< Lut > HcaluLUTTPGCoder::inputLUT_
private
int HcaluLUTTPGCoder::lastHBEta_
private

Definition at line 95 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::lastHEEta_
private

Definition at line 96 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::lastHFEta_
private

Definition at line 97 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), init(), and make_cosh_ieta_map().

double HcaluLUTTPGCoder::linearLSB_QIE11_
private

Definition at line 105 of file HcaluLUTTPGCoder.h.

Referenced by HcaluLUTTPGCoder(), init(), setAllLinear(), and update().

double HcaluLUTTPGCoder::linearLSB_QIE11Overlap_
private

Definition at line 105 of file HcaluLUTTPGCoder.h.

Referenced by HcaluLUTTPGCoder(), init(), setAllLinear(), and update().

double HcaluLUTTPGCoder::linearLSB_QIE8_
private

Definition at line 105 of file HcaluLUTTPGCoder.h.

Referenced by HcaluLUTTPGCoder(), init(), setAllLinear(), and update().

const float HcaluLUTTPGCoder::lsb_ =1./16
static

Definition at line 34 of file HcaluLUTTPGCoder.h.

Referenced by CaloTPGTranscoderULUT::setup(), and update().

bool HcaluLUTTPGCoder::LUTGenerationMode_
private

Definition at line 92 of file HcaluLUTTPGCoder.h.

Referenced by HcaluLUTTPGCoder(), init(), setLUTGenerationMode(), and update().

int HcaluLUTTPGCoder::maxDepthHB_
private

Definition at line 95 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::maxDepthHE_
private

Definition at line 96 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::maxDepthHF_
private

Definition at line 97 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

const int HcaluLUTTPGCoder::nFi_ = 72
staticprivate

Definition at line 81 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), and init().

int HcaluLUTTPGCoder::nHBEta_
private

Definition at line 95 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::nHEEta_
private

Definition at line 96 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::nHFEta_
private

Definition at line 97 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

std::vector<float> HcaluLUTTPGCoder::ped_
private

Definition at line 100 of file HcaluLUTTPGCoder.h.

Referenced by getLUTPedestal(), init(), and update().

std::unique_ptr<HcalPulseContainmentManager> HcaluLUTTPGCoder::pulseCorr_
private

Definition at line 106 of file HcaluLUTTPGCoder.h.

Referenced by init(), and update().

const int HcaluLUTTPGCoder::QIE10_LUT_BITMASK = 0x7FF
static

Definition at line 70 of file HcaluLUTTPGCoder.h.

Referenced by adc2Linear(), and update().

const int HcaluLUTTPGCoder::QIE10_LUT_MSB0 = 0x1000
staticprivate

Definition at line 86 of file HcaluLUTTPGCoder.h.

Referenced by lookupMSB(), and update().

const int HcaluLUTTPGCoder::QIE10_LUT_MSB1 = 0x2000
staticprivate

Definition at line 87 of file HcaluLUTTPGCoder.h.

Referenced by lookupMSB(), and update().

const int HcaluLUTTPGCoder::QIE11_LUT_BITMASK = 0x3FF
static

Definition at line 71 of file HcaluLUTTPGCoder.h.

Referenced by adc2Linear(), and update().

const int HcaluLUTTPGCoder::QIE11_LUT_MSB0 = 0x400
staticprivate

Definition at line 84 of file HcaluLUTTPGCoder.h.

Referenced by lookupMSB(), and update().

const int HcaluLUTTPGCoder::QIE11_LUT_MSB1 = 0x800
staticprivate

Definition at line 85 of file HcaluLUTTPGCoder.h.

Referenced by lookupMSB(), and update().

const int HcaluLUTTPGCoder::QIE8_LUT_BITMASK = 0x3FF
static

Definition at line 69 of file HcaluLUTTPGCoder.h.

Referenced by adc2Linear(), and update().

const int HcaluLUTTPGCoder::QIE8_LUT_MSB = 0x400
staticprivate

Definition at line 83 of file HcaluLUTTPGCoder.h.

Referenced by getMSB(), and update().

int HcaluLUTTPGCoder::sizeHB_
private

Definition at line 95 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::sizeHE_
private

Definition at line 96 of file HcaluLUTTPGCoder.h.

Referenced by getLUTId(), HcaluLUTTPGCoder(), and init().

int HcaluLUTTPGCoder::sizeHF_
private

Definition at line 97 of file HcaluLUTTPGCoder.h.

Referenced by HcaluLUTTPGCoder(), and init().

const HcalTopology* HcaluLUTTPGCoder::topo_
private

Definition at line 90 of file HcaluLUTTPGCoder.h.

Referenced by init(), make_cosh_ieta_map(), update(), and updateXML().

const size_t HcaluLUTTPGCoder::UPGRADE_LUT_SIZE = 256
staticprivate

Definition at line 80 of file HcaluLUTTPGCoder.h.

Referenced by update().