Go to the documentation of this file.00001 #ifndef EcalSelectiveReadoutSuppressor_h
00002 #define EcalSelectiveReadoutSuppressor_h
00003
00004 #include <vector>
00005 #include "boost/multi_array.hpp"
00006 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00007 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00008 #include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h"
00009 #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
00010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00011 #include "SimCalorimetry/EcalSelectiveReadoutAlgos/src/EcalSelectiveReadout.h"
00012 #include "FWCore/Framework/interface/EventSetup.h"
00013 #include "CondFormats/EcalObjects/interface/EcalSRSettings.h"
00014
00015 #include <memory>
00016
00017 class EcalSelectiveReadoutSuppressor{
00018 public:
00023 EcalSelectiveReadoutSuppressor(const edm::ParameterSet & params, const EcalSRSettings* settings);
00024
00025 enum {BARREL, ENDCAP};
00026
00030 static int getFIRTapCount(){ return nFIRTaps;}
00031
00035 void setTriggerMap(const EcalTrigTowerConstituentsMap * map);
00036
00040 void setElecMap(const EcalElectronicsMapping * map);
00041
00042
00045 void setGeometry(const CaloGeometry * caloGeometry);
00046
00054 void run(const edm::EventSetup& eventSetup,
00055 const EcalTrigPrimDigiCollection & trigPrims,
00056 EBDigiCollection & barrelDigis,
00057 EEDigiCollection & endcapDigis);
00058
00073 void run(const edm::EventSetup& eventSetup,
00074 const EcalTrigPrimDigiCollection & trigPrims,
00075 const EBDigiCollection & barrelDigis,
00076 const EEDigiCollection & endcapDigis,
00077 EBDigiCollection* selectedBarrelDigis,
00078 EEDigiCollection* selectedEndcapDigis,
00079 EBSrFlagCollection* ebSrFlags,
00080 EESrFlagCollection* eeSrFlags);
00081
00084 EcalSelectiveReadout* getEcalSelectiveReadout(){
00085 return ecalSelectiveReadout.get();
00086 }
00087
00094 void printTTFlags(std::ostream& os, int iEvent = -1,
00095 bool withHeader=true) const;
00096
00097 private:
00098
00105 bool accept(const edm::DataFrame& frame, int thr);
00106
00108
00110 void initCellThresholds(double barrelLowInterest, double endcapLowInterest,
00111 double barrelHighInterest, double endcapHighInterest);
00119 int internalThreshold(double thresholdInGeV, int iSubDet) const;
00120
00138 std::vector<int> getFIRWeigths();
00139
00145 int iEta2cIndex(int iEta) const{
00146 return (iEta<0)?iEta+85:iEta+84;
00147 }
00148
00154 int iPhi2cIndex(int iPhi) const{
00155 return iPhi-1;
00156 }
00157
00163 int iTTEta2cIndex(int iEta) const{
00164 return (iEta<0)?iEta+28:iEta+27;
00165 }
00166
00172 int iTTPhi2cIndex(int iPhi) const{
00173 return iPhi-1;
00174 }
00175
00181 void setTtFlags(const edm::EventSetup& eventSetup,
00182 const EBDigiCollection& ebDigis,
00183 const EEDigiCollection& eeDigis);
00184
00188 void setTtFlags(const EcalTrigPrimDigiCollection & trigPrims);
00189
00190 template<class T>
00191 double frame2Energy(const T& frame, int timeOffset = 0) const;
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00205 const static size_t nEndcaps = 2;
00206
00209 const static size_t nEndcapTriggerTowersInEta = 11;
00210
00213 const static size_t nBarrelTriggerTowersInEta = 34;
00214
00217 const static size_t nTriggerTowersInEta
00218 = 2*nEndcapTriggerTowersInEta+nBarrelTriggerTowersInEta;
00219
00222 const static size_t nTriggerTowersInPhi = 72;
00223
00224
00227 std::auto_ptr<EcalSelectiveReadout> ecalSelectiveReadout;
00228
00229 const EcalTrigTowerConstituentsMap * theTriggerMap;
00230
00233 EcalSelectiveReadout::ttFlag_t ttFlags[nTriggerTowersInEta][nTriggerTowersInPhi];
00234
00238 int firstFIRSample;
00239
00242 std::vector<int> firWeights;
00243
00247 static const int nFIRTaps;
00248
00251 std::vector<float> weights;
00252
00255 bool symetricZS;
00256
00263 int zsThreshold[2][4];
00264
00269 double thrUnit[2];
00270
00273 bool trigPrimBypass_;
00274
00280 int trigPrimBypassMode_;
00281
00285 std::vector<int> actions_;
00286
00291 bool ttThresOnCompressedEt_;
00292
00296 bool trigPrimBypassWithPeakFinder_;
00297
00301 double trigPrimBypassLTH_;
00302
00306 double trigPrimBypassHTH_;
00307
00308
00315 int srFlags[2][8];
00316
00319 EcalSelectiveReadout::ttFlag_t defaultTtf_;
00320
00323 int ievt_;
00324 };
00325 #endif