CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
EcalSelectiveReadoutSuppressor Class Reference

#include <EcalSelectiveReadoutSuppressor.h>

Public Types

enum  { BARREL, ENDCAP }
 

Public Member Functions

 EcalSelectiveReadoutSuppressor (const edm::ParameterSet &params, const EcalSRSettings *settings)
 
EcalSelectiveReadoutgetEcalSelectiveReadout ()
 
void printTTFlags (std::ostream &os, int iEvent=-1, bool withHeader=true) const
 
void run (const edm::EventSetup &eventSetup, const EcalTrigPrimDigiCollection &trigPrims, EBDigiCollection &barrelDigis, EEDigiCollection &endcapDigis)
 
void run (const edm::EventSetup &eventSetup, const EcalTrigPrimDigiCollection &trigPrims, const EBDigiCollection &barrelDigis, const EEDigiCollection &endcapDigis, EBDigiCollection *selectedBarrelDigis, EEDigiCollection *selectedEndcapDigis, EBSrFlagCollection *ebSrFlags, EESrFlagCollection *eeSrFlags)
 
void setElecMap (const EcalElectronicsMapping *map)
 
void setGeometry (const CaloGeometry *caloGeometry)
 
void setTriggerMap (const EcalTrigTowerConstituentsMap *map)
 

Static Public Member Functions

static int getFIRTapCount ()
 

Private Member Functions

bool accept (const edm::DataFrame &frame, int thr)
 
template<class T >
double frame2Energy (const T &frame, int timeOffset=0) const
 
std::vector< int > getFIRWeigths ()
 
int iEta2cIndex (int iEta) const
 
void initCellThresholds (double barrelLowInterest, double endcapLowInterest, double barrelHighInterest, double endcapHighInterest)
 helpers for constructors More...
 
int internalThreshold (double thresholdInGeV, int iSubDet) const
 
int iPhi2cIndex (int iPhi) const
 
int iTTEta2cIndex (int iEta) const
 
int iTTPhi2cIndex (int iPhi) const
 
void setTtFlags (const edm::EventSetup &eventSetup, const EBDigiCollection &ebDigis, const EEDigiCollection &eeDigis)
 
void setTtFlags (const EcalTrigPrimDigiCollection &trigPrims)
 

Private Attributes

std::vector< int > actions_
 
EcalSelectiveReadout::ttFlag_t defaultTtf_
 
std::auto_ptr
< EcalSelectiveReadout
ecalSelectiveReadout
 
int firstFIRSample
 
std::vector< int > firWeights
 
int ievt_
 
int srFlags [2][8]
 
bool symetricZS
 
const
EcalTrigTowerConstituentsMap
theTriggerMap
 
double thrUnit [2]
 
bool trigPrimBypass_
 
double trigPrimBypassHTH_
 
double trigPrimBypassLTH_
 
int trigPrimBypassMode_
 
bool trigPrimBypassWithPeakFinder_
 
EcalSelectiveReadout::ttFlag_t ttFlags [nTriggerTowersInEta][nTriggerTowersInPhi]
 
bool ttThresOnCompressedEt_
 
std::vector< float > weights
 
int zsThreshold [2][8]
 

Static Private Attributes

static const size_t nBarrelTriggerTowersInEta = 34
 
static const size_t nEndcaps = 2
 
static const size_t nEndcapTriggerTowersInEta = 11
 
static const int nFIRTaps = 6
 
static const size_t nTriggerTowersInEta = 2*nEndcapTriggerTowersInEta+nBarrelTriggerTowersInEta
 
static const size_t nTriggerTowersInPhi = 72
 

Detailed Description

Definition at line 17 of file EcalSelectiveReadoutSuppressor.h.

Member Enumeration Documentation

anonymous enum

Constructor & Destructor Documentation

EcalSelectiveReadoutSuppressor::EcalSelectiveReadoutSuppressor ( const edm::ParameterSet params,
const EcalSRSettings settings 
)

Construtor.

Parameters
paramsconfiguration from python file
settingsconfiguration from condition DB

Definition at line 31 of file EcalSelectiveReadoutSuppressor.cc.

References EcalSRSettings::actions_, actions_, BARREL, EcalSRSettings::dccNormalizedWeights_, defaultTtf_, EcalSRSettings::deltaEta_, EcalSRSettings::deltaPhi_, EcalSRSettings::ebDccAdcToGeV_, EcalSRSettings::ecalDccZs1stSample_, ecalSelectiveReadout, EcalSRSettings::eeDccAdcToGeV_, ENDCAP, edm::hlt::Exception, firstFIRSample, edm::ParameterSet::getParameter(), i, initCellThresholds(), EcalSRSettings::srpHighInterestChannelZS_, EcalSRSettings::srpLowInterestChannelZS_, symetricZS, EcalSRSettings::symetricZS_, thrUnit, trigPrimBypass_, trigPrimBypassHTH_, trigPrimBypassLTH_, trigPrimBypassMode_, trigPrimBypassWithPeakFinder_, ttThresOnCompressedEt_, and weights.

31  :
33  ievt_(0)
34 {
35 
36  firstFIRSample = settings->ecalDccZs1stSample_[0];
37  weights = settings->dccNormalizedWeights_[0];
38  symetricZS = settings->symetricZS_[0];
39  actions_ = settings->actions_;
40 
41 
42  int defTtf = params.getParameter<int>("defaultTtf");
43  if(defTtf < 0 || defTtf > 7){
44  throw cms::Exception("InvalidParameter") << "Value of EcalSelectiveReadoutProducer module parameter defaultTtf, "
45  << defaultTtf_ << ", is out of the valid range 0..7\n";
46  } else{
48  }
49 
50  //online configuration has only 4 actions flags, the 4 'forced' flags being the same with the force
51  //bit set to 1. Extends the actions vector for case of online-type configuration:
52  if(actions_.size()==4){
53  for(int i = 0; i < 4; ++i){
54  actions_.push_back(actions_[i] | 0x4);
55  }
56  }
57 
58 
59  bool actionValid = actions_.size()==8;
60  for(size_t i = 0; i < actions_.size(); ++i){
61  if(actions_[i] < 0 || actions_[i] > 7) actionValid = false;
62  }
63 
64  if(!actionValid){
65  throw cms::Exception("InvalidParameter") << "EcalSelectiveReadoutProducer module parameter 'actions' is "
66  "not valid. It must be a vector of 8 integer values comprised between 0 and 7\n";
67  }
68 
69  double adcToGeV = settings->ebDccAdcToGeV_;
70  thrUnit[BARREL] = adcToGeV/4.; //unit=1/4th ADC count
71 
72  adcToGeV = settings->eeDccAdcToGeV_;
73  thrUnit[ENDCAP] = adcToGeV/4.; //unit=1/4th ADC count
75  = auto_ptr<EcalSelectiveReadout>(new EcalSelectiveReadout(
76  settings->deltaEta_[0],
77  settings->deltaPhi_[0]));
78  const int eb = 0;
79  const int ee = 1;
81  settings->srpLowInterestChannelZS_[ee],
82  settings->srpHighInterestChannelZS_[eb],
83  settings->srpHighInterestChannelZS_[ee]
84  );
85  trigPrimBypass_ = params.getParameter<bool>("trigPrimBypass");
86  trigPrimBypassMode_ = params.getParameter<int>("trigPrimBypassMode");
88  = params.getParameter<bool>("trigPrimBypassWithPeakFinder");
89  trigPrimBypassLTH_ = params.getParameter<double>("trigPrimBypassLTH");
90  trigPrimBypassHTH_ = params.getParameter<double>("trigPrimBypassHTH");
91  if(trigPrimBypass_){
92  edm::LogWarning("Digitization") << "Beware a simplified trigger primitive "
93  "computation is used for the ECAL selective readout";
94  if(trigPrimBypassMode_ !=0 && trigPrimBypassMode_ !=1){
95  throw cms::Exception("InvalidParameter")
96  << "Invalid value for EcalSelectiveReadoutProducer parameter 'trigPrimBypassMode_'."
97  " Valid values are 0 and 1.\n";
98  }
99  ttThresOnCompressedEt_ = (trigPrimBypassMode_==1);
100  }
101 }
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
void initCellThresholds(double barrelLowInterest, double endcapLowInterest, double barrelHighInterest, double endcapHighInterest)
helpers for constructors
std::auto_ptr< EcalSelectiveReadout > ecalSelectiveReadout
std::vector< std::vector< float > > dccNormalizedWeights_
std::vector< float > srpHighInterestChannelZS_
std::vector< int > actions_
std::vector< int > ecalDccZs1stSample_
EcalSelectiveReadout::ttFlag_t defaultTtf_
std::vector< int > deltaPhi_
std::vector< int > symetricZS_
float ebDccAdcToGeV_
ADC to GeV conversion factor used in ZS filter for EB.
std::vector< float > srpLowInterestChannelZS_
std::vector< int > deltaEta_
float eeDccAdcToGeV_
ADC to GeV conversion factor used in ZS filter for EE.

Member Function Documentation

bool EcalSelectiveReadoutSuppressor::accept ( const edm::DataFrame frame,
int  thr 
)
private

Returns true if a digi passes the zero suppression.

Parameters
frame,dataframe (aka digi).
thrzero suppression threshold in thrUnit.
Returns
true if passed ZS filter, false if failed

Definition at line 216 of file EcalSelectiveReadoutSuppressor.cc.

References EcalMGPASample::adc(), firstFIRSample, EcalMGPASample::gainId(), getFIRWeigths(), nFIRTaps, query::result, compare_using_db::sample, edm::DataFrame::size(), symetricZS, and w().

Referenced by Vispa.Gui.BoxContentDialog.BoxContentDialog::apply(), Vispa.Plugins.ConfigEditor.ToolDialog.ToolDialog::apply(), and run().

217  {
218  //FIR filter weights:
219  const vector<int>& w = getFIRWeigths();
220 
221  //accumulator used to compute weighted sum of samples
222  int acc = 0;
223  bool gain12saturated = false;
224  const int gain12 = 0x01;
225  const int lastFIRSample = firstFIRSample + nFIRTaps - 1;
226  //LogDebug("DccFir") << "DCC FIR operation: ";
227  int iWeight = 0;
228  for(int iSample=firstFIRSample-1;
229  iSample<lastFIRSample; ++iSample, ++iWeight){
230  if(iSample>=0 && iSample < (int)frame.size()){
231  EcalMGPASample sample(frame[iSample]);
232  if(sample.gainId()!=gain12) gain12saturated = true;
233  //LogTrace("DccFir") << (iSample>=firstFIRSample?"+":"") << sample.adc()
234  // << "*(" << w[iWeight] << ")";
235  acc+=sample.adc()*w[iWeight];
236  } else{
237  edm::LogWarning("DccFir") << __FILE__ << ":" << __LINE__ <<
238  ": Not enough samples in data frame or 'ecalDccZs1stSample' module "
239  "parameter is not valid...";
240  }
241  }
242 
243  if(symetricZS){//cut on absolute value
244  if(acc<0) acc = -acc;
245  }
246 
247  //LogTrace("DccFir") << "\n";
248  //discards the 8 LSBs
249  //(result of shift operator on negative numbers depends on compiler
250  //implementation, therefore the value is offset to make sure it is positive
251  //before performing the bit shift).
252  acc = ((acc + (1<<30)) >>8) - (1 <<(30-8));
253 
254  //ZS passed if weigthed sum acc above ZS threshold or if
255  //one sample has a lower gain than gain 12 (that is gain 12 output
256  //is saturated)
257 
258  const bool result = (acc >= thr) || gain12saturated;
259 
260  //LogTrace("DccFir") << "acc: " << acc << "\n"
261  // << "threshold: " << thr << " ("
262  // << thr*thrUnit[((EcalDataFrame&)frame).id().subdetId()==EcalBarrel?0:1]
263  // << "GeV)\n"
264  // << "saturated: " << (gain12saturated?"yes":"no") << "\n"
265  // << "ZS passed: " << (result?"yes":"no")
266  // << (symetricZS?" (symetric cut)":"") << "\n";
267 
268  return result;
269 }
tuple result
Definition: query.py:137
size_type size() const
Definition: DataFrame.h:63
T w() const
template<class T >
double EcalSelectiveReadoutSuppressor::frame2Energy ( const T frame,
int  timeOffset = 0 
) const
private

Definition at line 560 of file EcalSelectiveReadoutSuppressor.cc.

References dtNoiseDBValidation_cfg::cerr, i, n, evf::evtn::offset(), and weights.

Referenced by setTtFlags().

561  {
562  //we have to start by 0 in order to handle offset=-1
563  //(however Fenix FIR has AFAK only 5 taps)
564  double weights[] = {0., -1/3., -1/3., -1/3., 0., 1.};
565 
566  double adc2GeV = 0.;
567  if(typeid(frame) == typeid(EBDataFrame)){
568  adc2GeV = 0.035;
569  } else if(typeid(frame) == typeid(EEDataFrame)){
570  adc2GeV = 0.060;
571  } else{ //T is an invalid type!
572  //TODO: replace message by a cms exception
573  cerr << "Severe error. "
574  << __FILE__ << ":" << __LINE__ << ": "
575  << "this is a bug. Please report it.\n";
576  }
577 
578  double acc = 0;
579 
580  const int n = min<int>(frame.size(), sizeof(weights)/sizeof(weights[0]));
581 
582  double gainInv[] = {12., 1., 6., 12.};
583 
584 
585  //cout << __PRETTY_FUNCTION__ << ": ";
586  for(int i=offset; i < n; ++i){
587  int iframe = i + offset;
588  if(iframe>=0 && iframe<frame.size()){
589  acc += weights[i]*frame[iframe].adc()
590  *gainInv[frame[iframe].gainId()]*adc2GeV;
591  //cout << (iframe>offset?"+":"")
592  // << frame[iframe].adc() << "*" << gainInv[frame[iframe].gainId()]
593  // << "*" << adc2GeV << "*(" << weights[i] << ")";
594  }
595  }
596  //cout << "\n";
597  return acc;
598 }
int i
Definition: DBlmapReader.cc:9
unsigned int offset(bool)
EcalSelectiveReadout* EcalSelectiveReadoutSuppressor::getEcalSelectiveReadout ( )
inline

For debugging purposes.

Definition at line 84 of file EcalSelectiveReadoutSuppressor.h.

References ecalSelectiveReadout.

84  {
85  return ecalSelectiveReadout.get();
86  }
std::auto_ptr< EcalSelectiveReadout > ecalSelectiveReadout
static int EcalSelectiveReadoutSuppressor::getFIRTapCount ( )
inlinestatic

Gets number of weights supported by the zero suppression filter

Returns
number of weights

Definition at line 30 of file EcalSelectiveReadoutSuppressor.h.

References nFIRTaps.

Referenced by EcalSelectiveReadoutProducer::checkWeights().

vector< int > EcalSelectiveReadoutSuppressor::getFIRWeigths ( )
private

Gets the integer weights used by the zero suppression FIR filter.

<U>Weight definitions:</U>

  • Uncalibrated normalized weights are defined as such that when applied to the average pulse with the highest sample normalized to 1, the result is 1.
  • Calibrated weights are defined for each crystal, as uncalibrated normalized weights multiplied by an intercalibration constant which is expected to be between 0.6 and 1.4
  • FIR weights are defined for each crystal as the closest signed integers to 2**10 times the calibrated weigths. The absolute value of these weights should not be greater than (2**12-1).

If a FIR weights exceeds the (2**12-1) absolute value limit, its absolute value is replaced by (2**12-1).

Definition at line 438 of file EcalSelectiveReadoutSuppressor.cc.

References abs, firWeights, i, min, nFIRTaps, and weights.

Referenced by accept().

438  {
439  if(firWeights.size()==0){
440  firWeights = vector<int>(nFIRTaps, 0); //default weight: 0;
441  const static int maxWeight = 0xEFF; //weights coded on 11+1 signed bits
442  for(unsigned i=0; i < min((size_t)nFIRTaps,weights.size()); ++i){
443  firWeights[i] = lround(weights[i] * (1<<10));
444  if(abs(firWeights[i])>maxWeight){//overflow
445  firWeights[i] = firWeights[i]<0?-maxWeight:maxWeight;
446  }
447  }
448  }
449  return firWeights;
450 }
int i
Definition: DBlmapReader.cc:9
#define abs(x)
Definition: mlp_lapack.h:159
#define min(a, b)
Definition: mlp_lapack.h:161
int EcalSelectiveReadoutSuppressor::iEta2cIndex ( int  iEta) const
inlineprivate

Transforms CMSSW eta ECAL crystal indices to indices starting at 0 to use for c-array or vector.

Parameters
iEtaCMSSW eta index (numbering -85...-1,1...85)
Returns
index in numbering from 0 to 169

Definition at line 145 of file EcalSelectiveReadoutSuppressor.h.

145  {
146  return (iEta<0)?iEta+85:iEta+84;
147  }
void EcalSelectiveReadoutSuppressor::initCellThresholds ( double  barrelLowInterest,
double  endcapLowInterest,
double  barrelHighInterest,
double  endcapHighInterest 
)
private

helpers for constructors

Initializes ZS threshold and SR classificion to SR ("action") flags

Definition at line 122 of file EcalSelectiveReadoutSuppressor.cc.

References actions_, BARREL, ENDCAP, EcalSelectiveReadout::FORCED_MASK, i, internalThreshold(), max(), min, srFlags, and zsThreshold.

Referenced by EcalSelectiveReadoutSuppressor().

125  {
126  //center, neighbour and single RUs are grouped into a single
127  //'high interest' group
128  int lowInterestThr[2]; //index for BARREL/ENDCAP
129  // int lowInterestSrFlag[2];
130  int highInterestThr[2];
131  // int highInterestSrFlag[2];
132 
133  lowInterestThr[BARREL] = internalThreshold(barrelLowInterest, BARREL);
134  // lowInterestSrFlag[BARREL] = thr2Srf(lowInterestThr[BARREL],
135  // EcalSrFlag::SRF_ZS1);
136 
137  highInterestThr[BARREL] = internalThreshold(barrelHighInterest, BARREL);
138  // highInterestSrFlag[BARREL] = thr2Srf(highInterestThr[BARREL],
139  // EcalSrFlag::SRF_ZS2);
140 
141  lowInterestThr[ENDCAP] = internalThreshold(endcapLowInterest, ENDCAP);
142  //lowInterestSrFlag[ENDCAP] = thr2Srf(lowInterestThr[ENDCAP],
143  // EcalSrFlag::SRF_ZS1);
144 
145  highInterestThr[ENDCAP] = internalThreshold(endcapHighInterest, ENDCAP);
146  // highInterestSrFlag[ENDCAP] = thr2Srf(highInterestThr[ENDCAP],
147  // EcalSrFlag::SRF_ZS2);
148 
149  const int FORCED_MASK = EcalSelectiveReadout::FORCED_MASK;
150 
151  for(int iSubDet = 0; iSubDet<2; ++iSubDet){
152  //low interest
153  //zsThreshold[iSubDet][0] = lowInterestThr[iSubDet];
154  //srFlags[iSubDet][0] = lowInterestSrFlag[iSubDet];
155  //srFlags[iSubDet][0 + FORCED_MASK] = FORCED_MASK | lowInterestSrFlag[iSubDet];
156 
157  //single->high interest
158  //zsThreshold[iSubDet][1] = highInterestThr[iSubDet];
159  //srFlags[iSubDet][1] = highInterestSrFlag[iSubDet];
160  //srFlags[iSubDet][1 + FORCED_MASK] = FORCED_MASK | highInterestSrFlag[iSubDet];
161 
162  //neighbour->high interest
163  //zsThreshold[iSubDet][2] = highInterestThr[iSubDet];
164  //srFlags[iSubDet][2] = highInterestSrFlag[iSubDet];
165  //srFlags[iSubDet][2 + FORCED_MASK] = FORCED_MASK | highInterestSrFlag[iSubDet];
166 
167  //center->high interest
168  //zsThreshold[iSubDet][3] = highInterestThr[iSubDet];
169  //srFlags[iSubDet][3] = highInterestSrFlag[iSubDet];
170  //srFlags[iSubDet][3 + FORCED_MASK] = FORCED_MASK | highInterestSrFlag[iSubDet];
171  for(size_t i = 0; i < 8; ++i){
172  srFlags[iSubDet][i] = actions_[i];
173  if((actions_[i] & ~FORCED_MASK) == 0) zsThreshold[iSubDet][i] = numeric_limits<int>::max();
174  else if((actions_[i] & ~FORCED_MASK) == 1) zsThreshold[iSubDet][i] = lowInterestThr[iSubDet];
175  else if((actions_[i] & ~FORCED_MASK) == 2) zsThreshold[iSubDet][i] = highInterestThr[iSubDet];
176  else zsThreshold[iSubDet][i] = numeric_limits<int>::min();
177  }
178 
179 // for(size_t i = 0; i < 8; ++i){
180 // cout << "zsThreshold[" << iSubDet << "][" << i << "] = " << zsThreshold[iSubDet][i] << endl;
181 // }
182  }
183 }
int i
Definition: DBlmapReader.cc:9
static const int FORCED_MASK
#define min(a, b)
Definition: mlp_lapack.h:161
int internalThreshold(double thresholdInGeV, int iSubDet) const
const T & max(const T &a, const T &b)
int EcalSelectiveReadoutSuppressor::internalThreshold ( double  thresholdInGeV,
int  iSubDet 
) const
private

Converts threshold in GeV to threshold in internal unit used by the ZS FIR.

Parameters
thresholdInGeVthe theshold in GeV
iSubDet0 for barrel, 1 for endcap
Returns
threshold in thrUnit unit. INT_MAX means complete suppression, INT_MIN means no zero suppression.

Definition at line 195 of file EcalSelectiveReadoutSuppressor.cc.

References max(), min, and thrUnit.

Referenced by initCellThresholds().

196  {
197  double thr_ = thresholdInGeV / thrUnit[iSubDet];
198  //treating over- and underflows, threshold is coded on 11+1 signed bits
199  //an underflow threshold is considered here as if NoRO DCC switch is on
200  //an overflow threshold is considered here as if ForcedRO DCC switch in on
201  //Beware that conparison must be done on a double type, because conversion
202  //cast to an int of a double higher than MAX_INT is undefined.
203  int thr;
204  if(thr_>=0x7FF+.5){
205  thr = numeric_limits<int>::max();
206  } else if(thr_<=-0x7FF-.5){
207  thr = numeric_limits<int>::min();
208  } else{
209  thr = lround(thr_);
210  }
211  return thr;
212 }
#define min(a, b)
Definition: mlp_lapack.h:161
const T & max(const T &a, const T &b)
int EcalSelectiveReadoutSuppressor::iPhi2cIndex ( int  iPhi) const
inlineprivate

Transforms CMSSW phi ECAL crystal indices to indices starting at 0 to use for c-array or vector.

Parameters
iPhiCMSSW phi index (numbering 1...360)
Returns
index in numbering 0...359

Definition at line 154 of file EcalSelectiveReadoutSuppressor.h.

154  {
155  return iPhi-1;
156  }
int EcalSelectiveReadoutSuppressor::iTTEta2cIndex ( int  iEta) const
inlineprivate

Transforms CMSSW eta ECAL TT indices to indices starting at 0 to use for c-array or vector.

Parameters
iEtaCMSSW eta index (numbering -28...-1,28...56)
Returns
index in numbering from 0 to 55

Definition at line 163 of file EcalSelectiveReadoutSuppressor.h.

Referenced by setTtFlags().

163  {
164  return (iEta<0)?iEta+28:iEta+27;
165  }
int EcalSelectiveReadoutSuppressor::iTTPhi2cIndex ( int  iPhi) const
inlineprivate

Transforms CMSSW phi ECAL crystal indices to indices starting at 0 to use for c-array or vector.

Parameters
iPhiCMSSW phi index (numbering 1...72)
Returns
index in numbering 0...71

Definition at line 172 of file EcalSelectiveReadoutSuppressor.h.

Referenced by setTtFlags().

172  {
173  return iPhi-1;
174  }
void EcalSelectiveReadoutSuppressor::printTTFlags ( std::ostream &  os,
int  iEvent = -1,
bool  withHeader = true 
) const

Writes out TT flags. On of the 'run' method must be called beforehand. Beware this method might be removed in future.

Parameters
osstream to write to
iEventevent index. Ignored if <0.
withHeader.If true writes out a header with the legend.

Definition at line 600 of file EcalSelectiveReadoutSuppressor.cc.

References EcalSelectiveReadout::nTriggerTowersInEta, EcalSelectiveReadout::nTriggerTowersInPhi, tccFlagMarker, and ttFlags.

601  {
602  const char tccFlagMarker[] = { '?', '.', 'S', '?', 'C', 'E', 'E', 'E', 'E'};
605 
606  if(withHeader){
607  os << "# TCC flag map\n#\n"
608  "# +-->Phi " << tccFlagMarker[1+0] << ": 000 (low interest)\n"
609  "# | " << tccFlagMarker[1+1] << ": 001 (mid interest)\n"
610  "# | " << tccFlagMarker[1+2] << ": 010 (not valid)\n"
611  "# V Eta " << tccFlagMarker[1+3] << ": 011 (high interest)\n"
612  "# " << tccFlagMarker[1+4] << ": 1xx forced readout (Hw error)\n";
613  }
614 
615  if(iEvent>=0){
616  os << "#\n#Event " << iEvent << "\n";
617  }
618 
619  for(int iEta=0; iEta<nEta; ++iEta){
620  for(int iPhi=0; iPhi<nPhi; ++iPhi){
621  os << tccFlagMarker[ttFlags[iEta][iPhi]+1];
622  }
623  os << "\n";
624  }
625 }
const char tccFlagMarker[]
Definition: GenABIO.cc:189
EcalSelectiveReadout::ttFlag_t ttFlags[nTriggerTowersInEta][nTriggerTowersInPhi]
int iEvent
Definition: GenABIO.cc:243
static const size_t nTriggerTowersInEta
static const size_t nTriggerTowersInPhi
void EcalSelectiveReadoutSuppressor::run ( const edm::EventSetup eventSetup,
const EcalTrigPrimDigiCollection trigPrims,
EBDigiCollection barrelDigis,
EEDigiCollection endcapDigis 
)

Runs the selective readout(SR) algorithm.

Parameters
eventSetupevent conditions
trigPrimsthe ECAL trigger primitives used as input to the SR.
barrelDigis[in,out] the EB digi collection to filter
endcapDigis[in,out] the EE digi collection to filter

Definition at line 271 of file EcalSelectiveReadoutSuppressor.cc.

References EBDigiCollection::swap(), and EEDigiCollection::swap().

274  {
275  EBDigiCollection selectedBarrelDigis;
276  EEDigiCollection selectedEndcapDigis;
277 
278  run(eventSetup, trigPrims, barrelDigis, endcapDigis,
279  &selectedBarrelDigis, &selectedEndcapDigis, 0, 0);
280 
281 //replaces the input with the suppressed version
282  barrelDigis.swap(selectedBarrelDigis);
283  endcapDigis.swap(selectedEndcapDigis);
284 }
void swap(EBDigiCollection &other)
void run(const edm::EventSetup &eventSetup, const EcalTrigPrimDigiCollection &trigPrims, EBDigiCollection &barrelDigis, EEDigiCollection &endcapDigis)
void swap(EEDigiCollection &other)
void EcalSelectiveReadoutSuppressor::run ( const edm::EventSetup eventSetup,
const EcalTrigPrimDigiCollection trigPrims,
const EBDigiCollection barrelDigis,
const EEDigiCollection endcapDigis,
EBDigiCollection selectedBarrelDigis,
EEDigiCollection selectedEndcapDigis,
EBSrFlagCollection ebSrFlags,
EESrFlagCollection eeSrFlags 
)

Runs the selective readout (SR) algorithm.

Parameters
eventSetupevent conditions
trigPrimsthe ECAL trigger primitives used as input to the SR.
barrelDigisthe input EB digi collection
endcapDigisthe input EE digi collection
selectedBarrelDigis[out] the EB digi passing the SR. Pointer to the collection to fill. If null, no collection is filled.
selectedEndcapDigis[out] the EE digi passing the SR. Pointer to the collection to fill. If null, no collection is filled.
ebSrFlags[out] the computed SR flags for EB. Pointer to the collection to fill. If null, no collection is filled.
eeSrFlags[out] the computed SR flags for EE. Pointer to the collection to fill. If null, no collection is filled.

Definition at line 288 of file EcalSelectiveReadoutSuppressor.cc.

References accept(), BARREL, edm::DataFrameContainer::begin(), EcalBarrel, ecalSelectiveReadout, edm::DataFrameContainer::end(), ENDCAP, edm::hlt::Exception, errorMatrix2Lands_multiChannel::id, ievt_, LogDebug, nBarrelTriggerTowersInEta, nTriggerTowersInPhi, edm::DataFrameContainer::push_back(), edm::SortedCollection< T, SORT >::push_back(), edm::DataFrameContainer::reserve(), edm::SortedCollection< T, SORT >::reserve(), setTtFlags(), edm::DataFrameContainer::size(), srFlags, trigPrimBypass_, ttFlags, ttThresOnCompressedEt_, EcalScDetId::validDetId(), and zsThreshold.

295  {
296  ++ievt_;
297  if(!trigPrimBypass_ || ttThresOnCompressedEt_){//uses output of TPG emulator
298  setTtFlags(trigPrims);
299  } else{//debug mode, run w/o TP digis
300  setTtFlags(eventSetup, barrelDigis, endcapDigis);
301  }
302 
303  ecalSelectiveReadout->runSelectiveReadout0(ttFlags);
304 
305  if(selectedBarrelDigis){
306  selectedBarrelDigis->reserve(barrelDigis.size()/20);
307 
308  // do barrel first
309  for(EBDigiCollection::const_iterator digiItr = barrelDigis.begin();
310  digiItr != barrelDigis.end(); ++digiItr){
311  int interestLevel
312  = ecalSelectiveReadout->getCrystalInterest(EBDigiCollection::DetId(digiItr->id())) && ~EcalSelectiveReadout::FORCED_MASK;
313  if(accept(*digiItr, zsThreshold[BARREL][interestLevel])){
314  selectedBarrelDigis->push_back(digiItr->id(), digiItr->begin());
315  }
316  }
317  }
318 
319  // and endcaps
320  if(selectedEndcapDigis){
321  selectedEndcapDigis->reserve(endcapDigis.size()/20);
322  for(EEDigiCollection::const_iterator digiItr = endcapDigis.begin();
323  digiItr != endcapDigis.end(); ++digiItr){
324  int interestLevel
325  = ecalSelectiveReadout->getCrystalInterest(EEDigiCollection::DetId(digiItr->id()))
326  & ~EcalSelectiveReadout::FORCED_MASK;
327  if(accept(*digiItr, zsThreshold[ENDCAP][interestLevel])){
328  selectedEndcapDigis->push_back(digiItr->id(), digiItr->begin());
329  }
330  }
331  }
332 
333  if(ievt_ <= 10){
334  if(selectedEndcapDigis) LogDebug("EcalSelectiveReadout")
335  // << __FILE__ << ":" << __LINE__ << ": "
336  << "Number of EB digis passing the SR: "
337  << selectedBarrelDigis->size()
338  << " / " << barrelDigis.size() << "\n";
339  if(selectedEndcapDigis) LogDebug("EcalSelectiveReadout")
340  // << __FILE__ << ":" << __LINE__ << ": "
341  << "\nNumber of EE digis passing the SR: "
342  << selectedEndcapDigis->size()
343  << " / " << endcapDigis.size() << "\n";
344  }
345 
346  if(ebSrFlags) ebSrFlags->reserve(34*72);
347  if(eeSrFlags) eeSrFlags->reserve(624);
348  //SR flags:
349  for(int iZ = -1; iZ <=1; iZ+=2){ //-1=>EE-, EB-, +1=>EE+, EB+
350  //barrel:
351  for(unsigned iEta = 1; iEta <= nBarrelTriggerTowersInEta/2; ++iEta){
352  for(unsigned iPhi = 1; iPhi <= nTriggerTowersInPhi; ++iPhi){
353  const EcalTrigTowerDetId id(iZ, EcalBarrel, iEta, iPhi);
355  = ecalSelectiveReadout->getTowerInterest(id);
356  if(interest<0){
357  throw cms::Exception("EcalSelectiveReadout")
358  << __FILE__ << ":" << __LINE__ << ": " << "unknown SR flag. for "
359  << " TT " << id << ". Most probably a bug.";
360  }
361  int flag;
362  // if(interest==EcalSelectiveReadout::FORCED_RO){
363  // flag = EcalSrFlag::SRF_FORCED_MASK | EcalSrFlag::SRF_FULL;
364  //} else{
365  flag = srFlags[BARREL][interest];
366  //}
367  if(ebSrFlags) ebSrFlags->push_back(EBSrFlag(id, flag));
368  }//next iPhi
369  } //next barrel iEta
370 
371  //endcap:
372  EcalScDetId id;
373  for(int iX = 1; iX <= 20; ++iX){
374  for(int iY = 1; iY <= 20; ++iY){
375 
376  if (EcalScDetId::validDetId(iX, iY, iZ))
377  id = EcalScDetId(iX, iY, iZ);
378  else
379  continue;
380 
382  = ecalSelectiveReadout->getSuperCrystalInterest(id);
383 
384  if(interest>=0){//negative no SC at (iX,iY) coordinates
385  int flag;
386  // if(interest==EcalSelectiveReadout::FORCED_RO){
387  // flag = EcalSrFlag::SRF_FORCED_MASK | EcalSrFlag::SRF_FULL;
388  //} else{
389  flag = srFlags[ENDCAP][interest];
390  //}
391  if(eeSrFlags) eeSrFlags->push_back(EESrFlag(id, flag));
392  } else if(iX < 9 || iX > 12 || iY < 9 || iY >12){ //not an inner partial SC
393  edm::LogError("EcalSelectiveReadout") << __FILE__ << ":" << __LINE__ << ": "
394  << "negative interest in EE for SC "
395  << id << "\n";
396  }
397  } //next iY
398  } //next iX
399  }
400 }
#define LogDebug(id)
static bool validDetId(int ix, int iy, int iz)
Definition: EcalScDetId.cc:63
long int flag
Definition: mlp_lapack.h:47
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
std::auto_ptr< EcalSelectiveReadout > ecalSelectiveReadout
void push_back(T const &t)
const_iterator begin() const
EcalSelectiveReadout::ttFlag_t ttFlags[nTriggerTowersInEta][nTriggerTowersInPhi]
void reserve(size_t isize)
void push_back(id_type iid, data_type const *idata)
const_iterator end() const
bool accept(const edm::DataFrame &frame, int thr)
void setTtFlags(const edm::EventSetup &eventSetup, const EBDigiCollection &ebDigis, const EEDigiCollection &eeDigis)
void reserve(size_type n)
void EcalSelectiveReadoutSuppressor::setElecMap ( const EcalElectronicsMapping map)

Set the ECAL electronics mapping

Parameters
mapthe ECAL electronics map

Definition at line 109 of file EcalSelectiveReadoutSuppressor.cc.

References ecalSelectiveReadout.

109  {
110  ecalSelectiveReadout->setElecMap(map);
111 }
std::auto_ptr< EcalSelectiveReadout > ecalSelectiveReadout
void EcalSelectiveReadoutSuppressor::setGeometry ( const CaloGeometry caloGeometry)

Sets the geometry of the calorimeters

Definition at line 114 of file EcalSelectiveReadoutSuppressor.cc.

References ecalSelectiveReadout.

115 {
116 #ifndef ECALSELECTIVEREADOUT_NOGEOM
117  ecalSelectiveReadout->setGeometry(caloGeometry);
118 #endif
119 }
std::auto_ptr< EcalSelectiveReadout > ecalSelectiveReadout
void EcalSelectiveReadoutSuppressor::setTriggerMap ( const EcalTrigTowerConstituentsMap map)

Set the mapping of which cell goes with which trigger tower

Parameters
mapthe trigger tower map

Definition at line 104 of file EcalSelectiveReadoutSuppressor.cc.

References ecalSelectiveReadout, python.multivaluedict::map(), and theTriggerMap.

104  {
105  theTriggerMap = map;
106  ecalSelectiveReadout->setTriggerMap(map);
107 }
std::auto_ptr< EcalSelectiveReadout > ecalSelectiveReadout
const EcalTrigTowerConstituentsMap * theTriggerMap
void EcalSelectiveReadoutSuppressor::setTtFlags ( const edm::EventSetup eventSetup,
const EBDigiCollection ebDigis,
const EEDigiCollection eeDigis 
)
private

Help function to set the srFlags field. Used in TrigPrimByPass mode

Parameters
eventSetupthe EDM event setup
ebDigithe ECAL barrel APD digis
eeDigithe ECAL endcap VPT digis

Definition at line 453 of file EcalSelectiveReadoutSuppressor.cc.

References edm::DataFrameContainer::begin(), alignCSCRings::e, DetId::Ecal, EcalBarrel, EcalEndcap, edm::DataFrameContainer::end(), frame2Energy(), edm::EventSetup::get(), CaloSubdetectorGeometry::getGeometry(), EEDataFrame::id(), EBDataFrame::id(), EcalTrigTowerDetId::ieta(), EcalTrigTowerDetId::iphi(), iTTEta2cIndex(), iTTPhi2cIndex(), nTriggerTowersInEta, nTriggerTowersInPhi, funct::sin(), theta(), theTriggerMap, EcalTrigTowerConstituentsMap::towerOf(), trigPrimBypassHTH_, trigPrimBypassLTH_, trigPrimBypassWithPeakFinder_, EcalSelectiveReadout::TTF_HIGH_INTEREST, EcalSelectiveReadout::TTF_LOW_INTEREST, EcalSelectiveReadout::TTF_MID_INTEREST, ttFlags, and ecaldqm::ttId().

Referenced by run().

455  {
456  double trigPrim[nTriggerTowersInEta][nTriggerTowersInPhi];
457 
458  //ecal geometry:
459 // static const CaloSubdetectorGeometry* eeGeometry = 0;
460 // static const CaloSubdetectorGeometry* ebGeometry = 0;
461  const CaloSubdetectorGeometry* eeGeometry = 0;
462  const CaloSubdetectorGeometry* ebGeometry = 0;
463 // if(eeGeometry==0 || ebGeometry==0){
464  edm::ESHandle<CaloGeometry> geoHandle;
465  es.get<CaloGeometryRecord>().get(geoHandle);
466  eeGeometry
467  = (*geoHandle).getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
468  ebGeometry
469  = (*geoHandle).getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
470 // }
471 
472  //init trigPrim array:
473  bzero(trigPrim, sizeof(trigPrim));
474 
475  for(EBDigiCollection::const_iterator it = ebDigis.begin();
476  it != ebDigis.end(); ++it){
477  EBDataFrame frame(*it);
478  const EcalTrigTowerDetId& ttId = theTriggerMap->towerOf(frame.id());
479 // edm:::LogDebug("TT") << __FILE__ << ":" << __LINE__ << ": "
480 // << ((EBDetId&)frame.id()).ieta()
481 // << "," << ((EBDetId&)frame.id()).iphi()
482 // << " -> " << ttId.ieta() << "," << ttId.iphi() << "\n";
483  const int iTTEta0 = iTTEta2cIndex(ttId.ieta());
484  const int iTTPhi0 = iTTPhi2cIndex(ttId.iphi());
485  double theta = ebGeometry->getGeometry(frame.id())->getPosition().theta();
486  double e = frame2Energy(frame);
488  || ((frame2Energy(frame,-1) < e) && (frame2Energy(frame, 1) < e))){
489  trigPrim[iTTEta0][iTTPhi0] += e*sin(theta);
490  }
491  }
492 
493  for(EEDigiCollection::const_iterator it = eeDigis.begin();
494  it != eeDigis.end(); ++it){
495  EEDataFrame frame(*it);
496  const EcalTrigTowerDetId& ttId = theTriggerMap->towerOf(frame.id());
497  const int iTTEta0 = iTTEta2cIndex(ttId.ieta());
498  const int iTTPhi0 = iTTPhi2cIndex(ttId.iphi());
499 // cout << __FILE__ << ":" << __LINE__ << ": EE xtal->TT "
500 // << ((EEDetId&)frame.id()).ix()
501 // << "," << ((EEDetId&)frame.id()).iy()
502 // << " -> " << ttId.ieta() << "," << ttId.iphi() << "\n";
503  double theta = eeGeometry->getGeometry(frame.id())->getPosition().theta();
504  double e = frame2Energy(frame);
506  || ((frame2Energy(frame,-1) < e) && (frame2Energy(frame, 1) < e))){
507  trigPrim[iTTEta0][iTTPhi0] += e*sin(theta);
508  }
509  }
510 
511  //dealing with pseudo-TT in two inner EE eta-ring:
512  int innerTTEtas[] = {0, 1, 54, 55};
513  for(unsigned iRing = 0; iRing < sizeof(innerTTEtas)/sizeof(innerTTEtas[0]);
514  ++iRing){
515  int iTTEta0 = innerTTEtas[iRing];
516  //this detector eta-section is divided in only 36 phi bins
517  //For this eta regions,
518  //current tower eta numbering scheme is inconsistent. For geometry
519  //version 133:
520  //- TT are numbered from 0 to 72 for 36 bins
521  //- some TT have an even index, some an odd index
522  //For geometry version 125, there are 72 phi bins.
523  //The code below should handle both geometry definition.
524  //If there are 72 input trigger primitives for each inner eta-ring,
525  //then the average of the trigger primitive of the two pseudo-TT of
526  //a pair (nEta, nEta+1) is taken as Et of both pseudo TTs.
527  //If there are only 36 input TTs for each inner eta ring, then half
528  //of the present primitive of a pseudo TT pair is used as Et of both
529  //pseudo TTs.
530 
531  for(unsigned iTTPhi0 = 0; iTTPhi0 < nTriggerTowersInPhi-1; iTTPhi0 += 2){
532  double et = .5*(trigPrim[iTTEta0][iTTPhi0]
533  +trigPrim[iTTEta0][iTTPhi0+1]);
534  //divides the TT into 2 phi bins in order to match with 72 phi-bins SRP
535  //scheme or average the Et on the two pseudo TTs if the TT is already
536  //divided into two trigger primitives.
537  trigPrim[iTTEta0][iTTPhi0] = et;
538  trigPrim[iTTEta0][iTTPhi0+1] = et;
539  }
540  }
541 
542  for(unsigned iTTEta0 = 0; iTTEta0 < nTriggerTowersInEta; ++iTTEta0){
543  for(unsigned iTTPhi0 = 0; iTTPhi0 < nTriggerTowersInPhi; ++iTTPhi0){
544  if(trigPrim[iTTEta0][iTTPhi0] > trigPrimBypassHTH_){
546  } else if(trigPrim[iTTEta0][iTTPhi0] > trigPrimBypassLTH_){
548  } else{
550  }
551 
552  // cout /*LogDebug("TT")*/
553  // << "ttFlags[" << iTTEta0 << "][" << iTTPhi0 << "] = "
554  // << ttFlags[iTTEta0][iTTPhi0] << "\n";
555  }
556  }
557 }
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
double frame2Energy(const T &frame, int timeOffset=0) const
Geom::Theta< T > theta() const
const_iterator begin() const
EcalTrigTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
int ieta() const
get the tower ieta
virtual const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
EcalSelectiveReadout::ttFlag_t ttFlags[nTriggerTowersInEta][nTriggerTowersInPhi]
int iphi() const
get the tower iphi
const_iterator end() const
unsigned ttId(const DetId &)
const EcalTrigTowerConstituentsMap * theTriggerMap
void EcalSelectiveReadoutSuppressor::setTtFlags ( const EcalTrigPrimDigiCollection trigPrims)
private

Help function to set the srFlags field.

Parameters
trigPrimthe trigger primitive digi collection

Definition at line 403 of file EcalSelectiveReadoutSuppressor.cc.

References edm::SortedCollection< T, SORT >::begin(), defaultTtf_, edm::SortedCollection< T, SORT >::end(), nTriggerTowersInEta, nTriggerTowersInPhi, trigPrimBypassHTH_, trigPrimBypassLTH_, EcalSelectiveReadout::TTF_HIGH_INTEREST, EcalSelectiveReadout::TTF_LOW_INTEREST, EcalSelectiveReadout::TTF_MID_INTEREST, ttFlags, and ttThresOnCompressedEt_.

403  {
404  for(size_t iEta0 = 0; iEta0 < nTriggerTowersInEta; ++iEta0){
405  for(size_t iPhi0 = 0; iPhi0 < nTriggerTowersInPhi; ++iPhi0){
406  ttFlags[iEta0][iPhi0] = defaultTtf_;
407  }
408  }
409  for(EcalTrigPrimDigiCollection::const_iterator trigPrim = trigPrims.begin();
410  trigPrim != trigPrims.end(); ++trigPrim){
411  int iEta = trigPrim->id().ieta();
412  unsigned int iEta0;
413  if(iEta<0){ //z- half ECAL: transforming ranges -28;-1 => 0;27
414  iEta0 = iEta + nTriggerTowersInEta/2;
415  } else{ //z+ halfECAL: transforming ranges 1;28 => 28;55
416  iEta0 = iEta + nTriggerTowersInEta/2 - 1;
417  }
418 
419  unsigned int iPhi0 = trigPrim->id().iphi() - 1;
420 
422  ttFlags[iEta0][iPhi0] =
423  (EcalSelectiveReadout::ttFlag_t) trigPrim->ttFlag();
424  } else{
425  int compressedEt = trigPrim->compressedEt();
426  if(compressedEt < trigPrimBypassLTH_){
428  } else if(compressedEt < trigPrimBypassHTH_){
430  } else{
432  }
433  }
434  }
435 }
std::vector< T >::const_iterator const_iterator
EcalSelectiveReadout::ttFlag_t ttFlags[nTriggerTowersInEta][nTriggerTowersInPhi]
EcalSelectiveReadout::ttFlag_t defaultTtf_
const_iterator end() const
const_iterator begin() const

Member Data Documentation

std::vector<int> EcalSelectiveReadoutSuppressor::actions_
private

SR flag (low interest/single/neighbor/center) to action flag (suppress, ZS1, ZS2, FRO) map.

Definition at line 285 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), and initCellThresholds().

EcalSelectiveReadout::ttFlag_t EcalSelectiveReadoutSuppressor::defaultTtf_
private

Default TTF to substitute if absent from the trigger primitive collection

Definition at line 319 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), and setTtFlags().

std::auto_ptr<EcalSelectiveReadout> EcalSelectiveReadoutSuppressor::ecalSelectiveReadout
private

Help class to comput selective readout flags.

Definition at line 227 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), getEcalSelectiveReadout(), run(), setElecMap(), setGeometry(), and setTriggerMap().

int EcalSelectiveReadoutSuppressor::firstFIRSample
private

Time position of the first sample to use in zero suppession FIR filter. Numbering starts at 0.

Definition at line 238 of file EcalSelectiveReadoutSuppressor.h.

Referenced by accept(), and EcalSelectiveReadoutSuppressor().

std::vector<int> EcalSelectiveReadoutSuppressor::firWeights
private

Weights of zero suppression FIR filter

Definition at line 242 of file EcalSelectiveReadoutSuppressor.h.

Referenced by getFIRWeigths().

int EcalSelectiveReadoutSuppressor::ievt_
private

Number of produced events

Definition at line 323 of file EcalSelectiveReadoutSuppressor.h.

Referenced by run().

const size_t EcalSelectiveReadoutSuppressor::nBarrelTriggerTowersInEta = 34
staticprivate

Number of eta trigger tower divisions in the barrel.

Definition at line 213 of file EcalSelectiveReadoutSuppressor.h.

Referenced by run().

const size_t EcalSelectiveReadoutSuppressor::nEndcaps = 2
staticprivate

Help function to get SR flag from ZS threshold using min/max convention for SUPPRESS and FULL_READOUT: see zsThreshold.

Parameters
thrZS threshold in thrUnit
flagfor Zero suppression: EcalSrFlag::SRF_ZS1 or EcalSrFlag::SRF_ZS2
Returns
the SR flagNumber of endcap, obviously two.

Definition at line 205 of file EcalSelectiveReadoutSuppressor.h.

const size_t EcalSelectiveReadoutSuppressor::nEndcapTriggerTowersInEta = 11
staticprivate

Number of eta trigger tower divisions in one endcap.

Definition at line 209 of file EcalSelectiveReadoutSuppressor.h.

const int EcalSelectiveReadoutSuppressor::nFIRTaps = 6
staticprivate

Depth of DCC zero suppression FIR filter (number of taps), in principal 6.

Definition at line 247 of file EcalSelectiveReadoutSuppressor.h.

Referenced by accept(), getFIRTapCount(), and getFIRWeigths().

const size_t EcalSelectiveReadoutSuppressor::nTriggerTowersInEta = 2*nEndcapTriggerTowersInEta+nBarrelTriggerTowersInEta
staticprivate

Number of eta divisions in trigger towers for the whole ECAL

Definition at line 218 of file EcalSelectiveReadoutSuppressor.h.

Referenced by setTtFlags().

const size_t EcalSelectiveReadoutSuppressor::nTriggerTowersInPhi = 72
staticprivate

Number of phi divisions in trigger towers.

Definition at line 222 of file EcalSelectiveReadoutSuppressor.h.

Referenced by run(), and setTtFlags().

int EcalSelectiveReadoutSuppressor::srFlags[2][8]
private

Maps RU interest flag (low interest, single neighbour, center) to Selective readout action flag (type of readout). 1st index: 0 for barrel, 1 for endcap 2nd index: RU interest (low, single, neighbour, center, forced low, forced single...)

Definition at line 315 of file EcalSelectiveReadoutSuppressor.h.

Referenced by initCellThresholds(), and run().

bool EcalSelectiveReadoutSuppressor::symetricZS
private

Flag to use a symetric zero suppression (cut on absolute value)

Definition at line 255 of file EcalSelectiveReadoutSuppressor.h.

Referenced by accept(), and EcalSelectiveReadoutSuppressor().

const EcalTrigTowerConstituentsMap* EcalSelectiveReadoutSuppressor::theTriggerMap
private

Definition at line 229 of file EcalSelectiveReadoutSuppressor.h.

Referenced by setTriggerMap(), and setTtFlags().

double EcalSelectiveReadoutSuppressor::thrUnit[2]
private

Internal unit for Zero Suppression threshold (1/4th ADC count) used by the FIR. Index: 0 for barrel, 1 for endcap

Definition at line 269 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), and internalThreshold().

bool EcalSelectiveReadoutSuppressor::trigPrimBypass_
private

Switch for trigger primitive simulation module bypass debug mode.

Definition at line 273 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), and run().

double EcalSelectiveReadoutSuppressor::trigPrimBypassHTH_
private

Low TT Et threshold for trigger primitive simulation module bypass debug mode.

Definition at line 306 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), and setTtFlags().

double EcalSelectiveReadoutSuppressor::trigPrimBypassLTH_
private

Low TT Et threshold for trigger primitive simulation module bypass debug mode.

Definition at line 301 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), and setTtFlags().

int EcalSelectiveReadoutSuppressor::trigPrimBypassMode_
private

Mode selection for "Trig bypass" mode 0: TT thresholds applied on sum of crystal Et's 1: TT thresholds applies on compressed Et from Trigger primitive

See Also
trigPrimByPass_ switch

Definition at line 280 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor().

bool EcalSelectiveReadoutSuppressor::trigPrimBypassWithPeakFinder_
private

When in trigger primitive simulation module bypass debug mode, switch to enable Peak finder effect simulation

Definition at line 296 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), and setTtFlags().

EcalSelectiveReadout::ttFlag_t EcalSelectiveReadoutSuppressor::ttFlags[nTriggerTowersInEta][nTriggerTowersInPhi]
private

Trigger tower flags: see setTtFlags()

Definition at line 233 of file EcalSelectiveReadoutSuppressor.h.

Referenced by printTTFlags(), run(), and setTtFlags().

bool EcalSelectiveReadoutSuppressor::ttThresOnCompressedEt_
private

Switch to applies trigPrimBypassLTH_ and trigPrimBypassHTH_ thresholds on TPG compressed ET instead of using flags from TPG: trig prim bypass mode 1.

Definition at line 291 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), run(), and setTtFlags().

std::vector<float> EcalSelectiveReadoutSuppressor::weights
private

DCC zero suppression FIR filter uncalibrated normalized weigths

Definition at line 251 of file EcalSelectiveReadoutSuppressor.h.

Referenced by EcalSelectiveReadoutSuppressor(), frame2Energy(), and getFIRWeigths().

int EcalSelectiveReadoutSuppressor::zsThreshold[2][8]
private

Zero suppresion threshold for the ECAL expressed in ebThrUnit and eeThrUnit. Set to numeric_limits<int>::min() for FULL READOUT and to numeric_limits<int>::max() for SUPPRESS. First index: 0 for barrel, 1 for endcap 2nd index: channel interest (see EcalSelectiveReadout::towerInterest_t

Definition at line 263 of file EcalSelectiveReadoutSuppressor.h.

Referenced by initCellThresholds(), and run().