CMS 3D CMS Logo

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

#include <HcalHitReconstructor.h>

Inheritance diagram for HcalHitReconstructor:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

virtual void beginRun (edm::Run const &r, edm::EventSetup const &es) overridefinal
 
virtual void endRun (edm::Run const &r, edm::EventSetup const &es) overridefinal
 
 HcalHitReconstructor (const edm::ParameterSet &ps)
 
virtual void produce (edm::Event &e, const edm::EventSetup &c) override
 
virtual ~HcalHitReconstructor ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (std::string const &iProcessName, std::string const &iModuleLabel, bool iPrint, std::vector< char const * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Types

typedef void(HcalSimpleRecAlgo::* SetCorrectionFcn )(boost::shared_ptr< AbsOOTPileupCorrection >)
 

Private Attributes

std::string cat_
 
int cntprtCorrMethod_
 
bool correctTiming_
 
std::string corrName_
 
std::string dataOOTCorrectionCategory_
 
std::string dataOOTCorrectionName_
 
DetId::Detector det_
 
bool digiTimeFromDB_
 
bool dropZSmarkedPassed_
 
bool first_
 
int firstAuxTS_
 
int firstSample_
 
HBHEStatusBitSetterhbheFlagSetter_
 
HBHETimeProfileStatusBitSetterhbheHSCPFlagSetter_
 
HBHENegativeFlagSetterhbheNegativeFlagSetter_
 
HBHEPulseShapeFlagSetterhbhePulseShapeFlagSetter_
 
HBHETimingShapedFlagSetterhbheTimingShapedFlagSetter_
 
HcalHFStatusBitFromDigishfdigibit_
 
std::unique_ptr
< HcalFlagHFDigiTimeParams
HFDigiTimeParams
 
HcalHF_PETalgorithmhfPET_
 
HcalHF_S9S1algorithmhfS8S1_
 
HcalHF_S9S1algorithmhfS9S1_
 
HFTimingTrustFlagHFTimingTrustFlagSetter_
 
edm::InputTag inputLabel_
 
std::string mcOOTCorrectionCategory_
 
std::string mcOOTCorrectionName_
 
HcalRecoParamsparamTS
 
int puCorrMethod_
 
HcalSimpleRecAlgo reco_
 
bool recoParamsFromDB_
 
int samplesToAdd_
 
HcalADCSaturationFlagsaturationFlagSetter_
 
bool setHSCPFlags_
 
bool setNegativeFlags_
 
bool setNoiseFlags_
 
SetCorrectionFcn setPileupCorrection_
 
bool setPulseShapeFlags_
 
bool setSaturationFlags_
 
bool setTimingTrustFlags_
 
int subdet_
 
HcalOtherSubdetector subdetOther_
 
edm::EDGetTokenT
< HcalCalibDigiCollection
tok_calib_
 
edm::EDGetTokenT
< HBHEDigiCollection
tok_hbhe_
 
edm::EDGetTokenT
< HFDigiCollection
tok_hf_
 
edm::EDGetTokenT
< HODigiCollection
tok_ho_
 
bool tsFromDB_
 
bool useLeakCorrection_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Author
J. Temple & E. Yazgan Based on HcalSimpleReconstructor.h by J. Mans

Definition at line 46 of file HcalHitReconstructor.h.

Member Typedef Documentation

typedef void(HcalSimpleRecAlgo::* HcalHitReconstructor::SetCorrectionFcn)(boost::shared_ptr< AbsOOTPileupCorrection >)
private

Definition at line 57 of file HcalHitReconstructor.h.

Constructor & Destructor Documentation

HcalHitReconstructor::HcalHitReconstructor ( const edm::ParameterSet ps)
explicit

Definition at line 25 of file HcalHitReconstructor.cc.

References DetId::Calo, dataOOTCorrectionCategory_, dataOOTCorrectionName_, det_, digiTimeFromDB_, edm::ParameterSet::existsAs(), edm::ParameterSet::getParameter(), hbheFlagSetter_, hbheHSCPFlagSetter_, hbheNegativeFlagSetter_, hbhePulseShapeFlagSetter_, hbheTimingShapedFlagSetter_, HcalBarrel, HcalCalibration, HcalForward, HcalOther, HcalOuter, hfdigibit_, hfPET_, hfS8S1_, hfS9S1_, HFTimingTrustFlagSetter_, inputLabel_, mcOOTCorrectionCategory_, mcOOTCorrectionName_, puCorrMethod_, reco_, recoParamsFromDB_, saturationFlagSetter_, HcalSimpleRecAlgo::setHBHEPileupCorrection(), setHSCPFlags_, HcalSimpleRecAlgo::setMeth3Params(), setNegativeFlags_, setNoiseFlags_, setPileupCorrection_, HcalSimpleRecAlgo::setpuCorrMethod(), HcalSimpleRecAlgo::setpuCorrParams(), setPulseShapeFlags_, setSaturationFlags_, setTimingTrustFlags_, AlCaHLTBitMon_QueryRunRegistry::string, subdet_, HcalZDCDetId::SubdetectorId, subdetOther_, tok_calib_, tok_hbhe_, tok_hf_, and tok_ho_.

25  :
26  reco_(conf.getParameter<bool>("correctForTimeslew"),
27  conf.getParameter<bool>("correctForPhaseContainment"),
28  conf.getParameter<double>("correctionPhaseNS")),
30  inputLabel_(conf.getParameter<edm::InputTag>("digiLabel")),
31  correctTiming_(conf.getParameter<bool>("correctTiming")),
32  setNoiseFlags_(conf.getParameter<bool>("setNoiseFlags")),
33  setHSCPFlags_(conf.getParameter<bool>("setHSCPFlags")),
34  setSaturationFlags_(conf.getParameter<bool>("setSaturationFlags")),
35  setTimingTrustFlags_(conf.getParameter<bool>("setTimingTrustFlags")),
36  setPulseShapeFlags_(conf.getParameter<bool>("setPulseShapeFlags")),
37  setNegativeFlags_(false),
38  dropZSmarkedPassed_(conf.getParameter<bool>("dropZSmarkedPassed")),
39  firstAuxTS_(conf.getParameter<int>("firstAuxTS")),
40  firstSample_(conf.getParameter<int>("firstSample")),
41  samplesToAdd_(conf.getParameter<int>("samplesToAdd")),
42  tsFromDB_(conf.getParameter<bool>("tsFromDB")),
43  useLeakCorrection_(conf.getParameter<bool>("useLeakCorrection")),
49  paramTS(0),
50  puCorrMethod_(conf.getParameter<int>("puCorrMethod")),
52  first_(true)
53 
54 {
55  // register for data access
56  tok_hbhe_ = consumes<HBHEDigiCollection>(inputLabel_);
57  tok_ho_ = consumes<HODigiCollection>(inputLabel_);
58  tok_hf_ = consumes<HFDigiCollection>(inputLabel_);
59  tok_calib_ = consumes<HcalCalibDigiCollection>(inputLabel_);
60 
61  std::string subd=conf.getParameter<std::string>("Subdetector");
62  //Set all FlagSetters to 0
63  /* Important to do this! Otherwise, if the setters are turned off,
64  the "if (XSetter_) delete XSetter_;" commands can crash
65  */
66 
67  recoParamsFromDB_ = conf.getParameter<bool>("recoParamsFromDB");
68  // recoParamsFromDB_ = false ; // trun off for now.
69 
70  // std::cout<<" HcalHitReconstructor recoParamsFromDB_ "<<recoParamsFromDB_<<std::endl;
71 
72  if (conf.existsAs<bool>("setNegativeFlags"))
73  setNegativeFlags_ = conf.getParameter<bool>("setNegativeFlags");
74 
75  hbheFlagSetter_ = 0;
80  hfdigibit_ = 0;
81 
82  hfS9S1_ = 0;
83  hfS8S1_ = 0;
84  hfPET_ = 0;
87  digiTimeFromDB_ = false; // only need for HF
88 
90  {
91  const edm::ParameterSet& pssat = conf.getParameter<edm::ParameterSet>("saturationParameters");
92  saturationFlagSetter_ = new HcalADCSaturationFlag(pssat.getParameter<int>("maxADCvalue"));
93  }
94 
95  if (!strcasecmp(subd.c_str(),"HBHE")) {
97 
100 
101  bool timingShapedCutsFlags = conf.getParameter<bool>("setTimingShapedCutsFlags");
102  if (timingShapedCutsFlags)
103  {
104  const edm::ParameterSet& psTshaped = conf.getParameter<edm::ParameterSet>("timingshapedcutsParameters");
105  hbheTimingShapedFlagSetter_ = new HBHETimingShapedFlagSetter(psTshaped.getParameter<std::vector<double> >("tfilterEnvelope"),
106  psTshaped.getParameter<bool>("ignorelowest"),
107  psTshaped.getParameter<bool>("ignorehighest"),
108  psTshaped.getParameter<double>("win_offset"),
109  psTshaped.getParameter<double>("win_gain"));
110  }
111 
112  if (setNoiseFlags_)
113  {
114  const edm::ParameterSet& psdigi =conf.getParameter<edm::ParameterSet>("flagParameters");
115  hbheFlagSetter_=new HBHEStatusBitSetter(psdigi.getParameter<double>("nominalPedestal"),
116  psdigi.getParameter<double>("hitEnergyMinimum"),
117  psdigi.getParameter<int>("hitMultiplicityThreshold"),
118  psdigi.getParameter<std::vector<edm::ParameterSet> >("pulseShapeParameterSets")
119  );
120  } // if (setNoiseFlags_)
121  if (setHSCPFlags_)
122  {
123  const edm::ParameterSet& psHSCP = conf.getParameter<edm::ParameterSet>("hscpParameters");
125  psHSCP.getParameter<double>("r1Max"),
126  psHSCP.getParameter<double>("r2Min"),
127  psHSCP.getParameter<double>("r2Max"),
128  psHSCP.getParameter<double>("fracLeaderMin"),
129  psHSCP.getParameter<double>("fracLeaderMax"),
130  psHSCP.getParameter<double>("slopeMin"),
131  psHSCP.getParameter<double>("slopeMax"),
132  psHSCP.getParameter<double>("outerMin"),
133  psHSCP.getParameter<double>("outerMax"),
134  psHSCP.getParameter<double>("TimingEnergyThreshold"));
135  } // if (setHSCPFlags_)
137  {
138  const edm::ParameterSet &psPulseShape = conf.getParameter<edm::ParameterSet>("pulseShapeParameters");
140  psPulseShape.getParameter<double>("MinimumChargeThreshold"),
141  psPulseShape.getParameter<double>("TS4TS5ChargeThreshold"),
142  psPulseShape.getParameter<double>("TS3TS4ChargeThreshold"),
143  psPulseShape.getParameter<double>("TS3TS4UpperChargeThreshold"),
144  psPulseShape.getParameter<double>("TS5TS6ChargeThreshold"),
145  psPulseShape.getParameter<double>("TS5TS6UpperChargeThreshold"),
146  psPulseShape.getParameter<double>("R45PlusOneRange"),
147  psPulseShape.getParameter<double>("R45MinusOneRange"),
148  psPulseShape.getParameter<unsigned int>("TrianglePeakTS"),
149  psPulseShape.getParameter<std::vector<double> >("LinearThreshold"),
150  psPulseShape.getParameter<std::vector<double> >("LinearCut"),
151  psPulseShape.getParameter<std::vector<double> >("RMS8MaxThreshold"),
152  psPulseShape.getParameter<std::vector<double> >("RMS8MaxCut"),
153  psPulseShape.getParameter<std::vector<double> >("LeftSlopeThreshold"),
154  psPulseShape.getParameter<std::vector<double> >("LeftSlopeCut"),
155  psPulseShape.getParameter<std::vector<double> >("RightSlopeThreshold"),
156  psPulseShape.getParameter<std::vector<double> >("RightSlopeCut"),
157  psPulseShape.getParameter<std::vector<double> >("RightSlopeSmallThreshold"),
158  psPulseShape.getParameter<std::vector<double> >("RightSlopeSmallCut"),
159  psPulseShape.getParameter<std::vector<double> >("TS4TS5LowerThreshold"),
160  psPulseShape.getParameter<std::vector<double> >("TS4TS5LowerCut"),
161  psPulseShape.getParameter<std::vector<double> >("TS4TS5UpperThreshold"),
162  psPulseShape.getParameter<std::vector<double> >("TS4TS5UpperCut"),
163  psPulseShape.getParameter<bool>("UseDualFit"),
164  psPulseShape.getParameter<bool>("TriangleIgnoreSlow"));
165  } // if (setPulseShapeFlags_)
166  if (setNegativeFlags_)
168 
169  produces<HBHERecHitCollection>();
170  } else if (!strcasecmp(subd.c_str(),"HO")) {
172  // setPileupCorrection_ = &HcalSimpleRecAlgo::setHOPileupCorrection;
174  produces<HORecHitCollection>();
175  } else if (!strcasecmp(subd.c_str(),"HF")) {
177  // setPileupCorrection_ = &HcalSimpleRecAlgo::setHFPileupCorrection;
179  digiTimeFromDB_=conf.getParameter<bool>("digiTimeFromDB");
180 
181  if (setTimingTrustFlags_) {
182 
183  const edm::ParameterSet& pstrust = conf.getParameter<edm::ParameterSet>("hfTimingTrustParameters");
184  HFTimingTrustFlagSetter_=new HFTimingTrustFlag(pstrust.getParameter<int>("hfTimingTrustLevel1"),
185  pstrust.getParameter<int>("hfTimingTrustLevel2"));
186  }
187 
188  if (setNoiseFlags_)
189  {
190  const edm::ParameterSet& psdigi =conf.getParameter<edm::ParameterSet>("digistat");
191  const edm::ParameterSet& psTimeWin =conf.getParameter<edm::ParameterSet>("HFInWindowStat");
192  hfdigibit_=new HcalHFStatusBitFromDigis(psdigi,psTimeWin);
193 
194  const edm::ParameterSet& psS9S1 = conf.getParameter<edm::ParameterSet>("S9S1stat");
195  hfS9S1_ = new HcalHF_S9S1algorithm(psS9S1.getParameter<std::vector<double> >("short_optimumSlope"),
196  psS9S1.getParameter<std::vector<double> >("shortEnergyParams"),
197  psS9S1.getParameter<std::vector<double> >("shortETParams"),
198  psS9S1.getParameter<std::vector<double> >("long_optimumSlope"),
199  psS9S1.getParameter<std::vector<double> >("longEnergyParams"),
200  psS9S1.getParameter<std::vector<double> >("longETParams"),
201  psS9S1.getParameter<int>("HcalAcceptSeverityLevel"),
202  psS9S1.getParameter<bool>("isS8S1")
203  );
204 
205  const edm::ParameterSet& psS8S1 = conf.getParameter<edm::ParameterSet>("S8S1stat");
206  hfS8S1_ = new HcalHF_S9S1algorithm(psS8S1.getParameter<std::vector<double> >("short_optimumSlope"),
207  psS8S1.getParameter<std::vector<double> >("shortEnergyParams"),
208  psS8S1.getParameter<std::vector<double> >("shortETParams"),
209  psS8S1.getParameter<std::vector<double> >("long_optimumSlope"),
210  psS8S1.getParameter<std::vector<double> >("longEnergyParams"),
211  psS8S1.getParameter<std::vector<double> >("longETParams"),
212  psS8S1.getParameter<int>("HcalAcceptSeverityLevel"),
213  psS8S1.getParameter<bool>("isS8S1")
214  );
215 
216  const edm::ParameterSet& psPET = conf.getParameter<edm::ParameterSet>("PETstat");
217  hfPET_ = new HcalHF_PETalgorithm(psPET.getParameter<std::vector<double> >("short_R"),
218  psPET.getParameter<std::vector<double> >("shortEnergyParams"),
219  psPET.getParameter<std::vector<double> >("shortETParams"),
220  psPET.getParameter<std::vector<double> >("long_R"),
221  psPET.getParameter<std::vector<double> >("longEnergyParams"),
222  psPET.getParameter<std::vector<double> >("longETParams"),
223  psPET.getParameter<int>("HcalAcceptSeverityLevel"),
224  psPET.getParameter<std::vector<double> >("short_R_29"),
225  psPET.getParameter<std::vector<double> >("long_R_29")
226  );
227  }
228  produces<HFRecHitCollection>();
229  } else if (!strcasecmp(subd.c_str(),"ZDC")) {
232  produces<ZDCRecHitCollection>();
233  } else if (!strcasecmp(subd.c_str(),"CALIB")) {
236  produces<HcalCalibRecHitCollection>();
237  } else {
238  edm::LogWarning("Configuration") << "HcalHitReconstructor is not associated with a specific subdetector!" << std::endl;
239  }
240 
241  // If no valid OOT pileup correction name specified,
242  // disable the correction
243  if (conf.existsAs<std::string>("dataOOTCorrectionName"))
244  dataOOTCorrectionName_ = conf.getParameter<std::string>("dataOOTCorrectionName");
245  if (conf.existsAs<std::string>("dataOOTCorrectionCategory"))
246  dataOOTCorrectionCategory_ = conf.getParameter<std::string>("dataOOTCorrectionCategory");
247  if (conf.existsAs<std::string>("mcOOTCorrectionName"))
248  mcOOTCorrectionName_ = conf.getParameter<std::string>("mcOOTCorrectionName");
249  if (conf.existsAs<std::string>("mcOOTCorrectionCategory"))
250  mcOOTCorrectionCategory_ = conf.getParameter<std::string>("mcOOTCorrectionCategory");
251  if (dataOOTCorrectionName_.empty() && mcOOTCorrectionName_.empty())
253 
255  if(puCorrMethod_ == 2) {
257  conf.getParameter<bool> ("applyPedConstraint"),
258  conf.getParameter<bool> ("applyTimeConstraint"),
259  conf.getParameter<bool> ("applyPulseJitter"),
260  conf.getParameter<bool> ("applyUnconstrainedFit"),
261  conf.getParameter<bool> ("applyTimeSlew"),
262  conf.getParameter<double>("ts4Min"),
263  conf.getParameter<double>("ts4Max"),
264  conf.getParameter<double>("pulseJitter"),
265  conf.getParameter<double>("meanTime"),
266  conf.getParameter<double>("timeSigma"),
267  conf.getParameter<double>("meanPed"),
268  conf.getParameter<double>("pedSigma"),
269  conf.getParameter<double>("noise"),
270  conf.getParameter<double>("timeMin"),
271  conf.getParameter<double>("timeMax"),
272  conf.getParameter<double>("ts3chi2"),
273  conf.getParameter<double>("ts4chi2"),
274  conf.getParameter<double>("ts345chi2"),
275  conf.getParameter<double>("chargeMax"), //For the unconstrained Fit
276  conf.getParameter<int> ("fitTimes")
277  );
278  }
280  conf.getParameter<int> ("pedestalSubtractionType"),
281  conf.getParameter<double> ("pedestalUpperLimit"),
282  conf.getParameter<int> ("timeSlewParsType"),
283  conf.getParameter<std::vector<double> >("timeSlewPars"),
284  conf.getParameter<double> ("respCorrM3")
285  );
286 }
void setMeth3Params(int iPedSubMethod, float iPedSubThreshold, int iTimeSlewParsType, std::vector< double > iTimeSlewPars, double irespCorrM3)
T getParameter(std::string const &) const
edm::EDGetTokenT< HBHEDigiCollection > tok_hbhe_
HcalADCSaturationFlag * saturationFlagSetter_
SetCorrectionFcn setPileupCorrection_
std::string dataOOTCorrectionCategory_
HBHENegativeFlagSetter * hbheNegativeFlagSetter_
edm::EDGetTokenT< HcalCalibDigiCollection > tok_calib_
HcalHFStatusBitFromDigis * hfdigibit_
edm::EDGetTokenT< HODigiCollection > tok_ho_
HcalHF_PETalgorithm * hfPET_
HcalHF_S9S1algorithm * hfS9S1_
HBHEPulseShapeFlagSetter * hbhePulseShapeFlagSetter_
static const int SubdetectorId
Definition: HcalZDCDetId.h:20
void setHBHEPileupCorrection(boost::shared_ptr< AbsOOTPileupCorrection > corr)
HBHEStatusBitSetter * hbheFlagSetter_
HBHETimeProfileStatusBitSetter * hbheHSCPFlagSetter_
HBHETimingShapedFlagSetter * hbheTimingShapedFlagSetter_
void setpuCorrMethod(int method)
HcalHF_S9S1algorithm * hfS8S1_
HcalOtherSubdetector subdetOther_
HFTimingTrustFlag * HFTimingTrustFlagSetter_
std::string mcOOTCorrectionCategory_
edm::EDGetTokenT< HFDigiCollection > tok_hf_
HcalSimpleRecAlgo reco_
void setpuCorrParams(bool iPedestalConstraint, bool iTimeConstraint, bool iAddPulseJitter, bool iUnConstrainedFit, bool iApplyTimeSlew, double iTS4Min, double iTS4Max, double iPulseJitter, double iTimeMean, double iTimeSig, double iPedMean, double iPedSig, double iNoise, double iTMin, double iTMax, double its3Chi2, double its4Chi2, double its345Chi2, double iChargeThreshold, int iFitTimes)
HcalHitReconstructor::~HcalHitReconstructor ( )
virtual

Definition at line 301 of file HcalHitReconstructor.cc.

References hbheFlagSetter_, hbheHSCPFlagSetter_, hbheNegativeFlagSetter_, hbhePulseShapeFlagSetter_, hbheTimingShapedFlagSetter_, hfdigibit_, hfPET_, hfS8S1_, hfS9S1_, HFTimingTrustFlagSetter_, paramTS, and saturationFlagSetter_.

301  {
302  delete hbheFlagSetter_;
303  delete hbheHSCPFlagSetter_;
307  delete hfdigibit_;
308 
309  delete hfS9S1_;
310  delete hfS8S1_;
311  delete hfPET_;
312  delete saturationFlagSetter_;
314 
315  delete paramTS;
316 }
HcalADCSaturationFlag * saturationFlagSetter_
HBHENegativeFlagSetter * hbheNegativeFlagSetter_
HcalHFStatusBitFromDigis * hfdigibit_
HcalHF_PETalgorithm * hfPET_
HcalHF_S9S1algorithm * hfS9S1_
HBHEPulseShapeFlagSetter * hbhePulseShapeFlagSetter_
HBHEStatusBitSetter * hbheFlagSetter_
HBHETimeProfileStatusBitSetter * hbheHSCPFlagSetter_
HBHETimingShapedFlagSetter * hbheTimingShapedFlagSetter_
HcalHF_S9S1algorithm * hfS8S1_
HFTimingTrustFlag * HFTimingTrustFlagSetter_

Member Function Documentation

void HcalHitReconstructor::beginRun ( edm::Run const &  r,
edm::EventSetup const &  es 
)
finaloverridevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 318 of file HcalHitReconstructor.cc.

References HcalSimpleRecAlgo::beginRun(), digiTimeFromDB_, edm::EventSetup::get(), HFDigiTimeParams, AlCaHLTBitMon_ParallelJobs::p, paramTS, edm::ESHandle< class >::product(), reco_, recoParamsFromDB_, HcalCondObjectContainerBase::setTopo(), and tsFromDB_.

318  {
319 
321  es.get<HcalRecNumberingRecord>().get(htopo);
322 
323  if ( tsFromDB_== true || recoParamsFromDB_ == true )
324  {
326  es.get<HcalRecoParamsRcd>().get(p);
327  paramTS = new HcalRecoParams(*p.product());
328  paramTS->setTopo(htopo.product());
329 
330 
331 
332 
333  // std::cout<<" skdump in HcalHitReconstructor::beginRun dupm RecoParams "<<std::endl;
334  // std::ofstream skfile("skdumpRecoParamsNewFormat.txt");
335  // HcalDbASCIIIO::dumpObject(skfile, (*paramTS) );
336  }
337 
338  if (digiTimeFromDB_==true)
339  {
341  es.get<HcalFlagHFDigiTimeParamsRcd>().get(p);
342  HFDigiTimeParams.reset( new HcalFlagHFDigiTimeParams( *p ) );
343 
345  es.get<HcalRecNumberingRecord>().get(htopo);
346  HFDigiTimeParams->setTopo(htopo.product());
347 
348  }
349 
350  reco_.beginRun(es);
351 }
void beginRun(edm::EventSetup const &es)
std::unique_ptr< HcalFlagHFDigiTimeParams > HFDigiTimeParams
T const * product() const
Definition: ESHandle.h:86
void setTopo(const HcalTopology *topo)
HcalSimpleRecAlgo reco_
void HcalHitReconstructor::endRun ( edm::Run const &  r,
edm::EventSetup const &  es 
)
finaloverridevirtual

Reimplemented from edm::stream::EDProducerBase.

Definition at line 353 of file HcalHitReconstructor.cc.

References digiTimeFromDB_, HcalSimpleRecAlgo::endRun(), paramTS, reco_, and tsFromDB_.

353  {
354  if (tsFromDB_==true)
355  {
356  delete paramTS; paramTS=0;
357  }
358  if (digiTimeFromDB_==true)
359  {
360  //DL delete HFDigiTimeParams; HFDigiTimeParams = 0;
361  }
362  reco_.endRun();
363 }
HcalSimpleRecAlgo reco_
void HcalHitReconstructor::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 290 of file HcalHitReconstructor.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), and edm::ParameterSetDescription::setAllowAnything().

290  {
292  desc.setAllowAnything();
293  desc.add<int>("pedestalSubtractionType", 1);
294  desc.add<double>("pedestalUpperLimit", 2.7);
295  desc.add<int>("timeSlewParsType",3);
296  desc.add<std::vector<double>>("timeSlewPars", { 12.2999, -2.19142, 0, 12.2999, -2.19142, 0, 12.2999, -2.19142, 0 });
297  desc.add<double>("respCorrM3", 0.95);
298  descriptions.add("hltHbhereco",desc);
299 }
void setAllowAnything()
allow any parameter label/value pairs
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void HcalHitReconstructor::produce ( edm::Event e,
const edm::EventSetup c 
)
overridevirtual

Implements edm::stream::EDProducerBase.

Definition at line 365 of file HcalHitReconstructor.cc.

References funct::abs(), cat_, HBHEStatusBitSetter::Clear(), cntprtCorrMethod_, HBHENegativeFlagSetter::configFilter(), HcalTimingCorrector::Correct(), HcalRecoParam::correctForPhaseContainment(), castor_dqm_sourceclient-live_cfg::correctForPhaseContainment, HcalRecoParam::correctForTimeslew(), castor_dqm_sourceclient-live_cfg::correctForTimeslew, HcalRecoParam::correctionPhaseNS(), HcalRecoParam::correctTiming(), correctTiming_, corrName_, dataOOTCorrectionCategory_, dataOOTCorrectionName_, HLT_FULL_cff::depth, det_, digiTimeFromDB_, HcalSeverityLevelComputer::dropChannel(), dropZSmarkedPassed_, HBHETimeProfileStatusBitSetter::EnergyThreshold(), edm::EventSetup::find(), plotBeamSpotDB::first, first_, HcalRecoParam::firstAuxTS(), firstAuxTS_, HcalRecoParam::firstSample(), firstSample_, edm::EventSetup::get(), edm::eventsetup::EventSetupRecord::get(), edm::Event::getByToken(), HcalChannelStatus::getValue(), HcalCondObjectContainer< Item >::getValues(), hbheFlagSetter_, hbheHSCPFlagSetter_, hbheNegativeFlagSetter_, hbhePulseShapeFlagSetter_, HBHETimeProfileStatusBitSetter::hbheSetTimeFlagsFromDigi(), hbheTimingShapedFlagSetter_, DetId::Hcal, HcalBarrel, HcalCalibration, HcalEndcap, HcalForward, HcalOther, HcalOuter, hfdigibit_, HcalFlagHFDigiTimeParam::HFdigiflagCoefficients(), HcalFlagHFDigiTimeParam::HFdigiflagExpectedPeak(), HcalFlagHFDigiTimeParam::HFdigiflagFirstSample(), HcalFlagHFDigiTimeParam::HFdigiflagMinEThreshold(), HcalFlagHFDigiTimeParam::HFdigiflagSamplesToAdd(), HFDigiTimeParams, hfPET_, hfS8S1_, hfS9S1_, HcalHFStatusBitFromDigis::hfSetFlagFromDigi(), HcalHF_PETalgorithm::HFSetFlagFromPET(), HcalHF_S9S1algorithm::HFSetFlagFromS9S1(), HFTimingTrustFlagSetter_, i, edm::EventBase::isRealData(), j, relval_2017::k, LogTrace, mcOOTCorrectionCategory_, mcOOTCorrectionName_, AlCaHLTBitMon_ParallelJobs::p, paramTS, HcalRecoParam::pileupCleaningID(), HcalCaloFlagLabels::PresampleADC, edm::ESHandle< class >::product(), puCorrMethod_, edm::Event::put(), DetId::rawId(), reco_, HcalSimpleRecAlgo::reconstruct(), recoParamsFromDB_, HcalHFStatusBitFromDigis::resetParamsFromDB(), edm::Event::run(), HcalRecoParam::samplesToAdd(), samplesToAdd_, saturationFlagSetter_, HBHEStatusBitSetter::SetFlagsFromDigi(), HBHEStatusBitSetter::SetFlagsFromRecHits(), HcalSimpleRecAlgo::setForData(), HFTimingTrustFlag::setHFTimingTrustFlag(), setHSCPFlags_, HcalSimpleRecAlgo::setLeakCorrection(), setNegativeFlags_, setNoiseFlags_, setPileupCorrection_, HBHENegativeFlagSetter::setPulseShapeFlags(), HBHEPulseShapeFlagSetter::SetPulseShapeFlags(), setPulseShapeFlags_, HcalSimpleRecAlgo::setRecoParams(), HcalADCSaturationFlag::setSaturationFlag(), setSaturationFlags_, HBHETimingShapedFlagSetter::SetTimingShapedFlags(), setTimingTrustFlags_, subdet_, subdetOther_, tok_calib_, tok_hbhe_, tok_hf_, tok_ho_, tsFromDB_, HcalRecoParam::useLeakCorrection(), and useLeakCorrection_.

366 {
367 
368  // get conditions
370  eventSetup.get<HcalRecNumberingRecord>().get(topo);
371 
372  edm::ESHandle<HcalDbService> conditions;
373  eventSetup.get<HcalDbRecord>().get(conditions);
374 
375  // HACK related to HB- corrections
376  if ( first_ ) {
377  const bool isData = e.isRealData();
378  if (isData) reco_.setForData(e.run()); else reco_.setForData(0);
381  first_=false;
382  }
384 
386  eventSetup.get<HcalChannelQualityRcd>().get("withTopo",p);
387  const HcalChannelQuality* myqual = p.product();
388 
390  eventSetup.get<HcalSeverityLevelComputerRcd>().get(mycomputer);
391  const HcalSeverityLevelComputer* mySeverity = mycomputer.product();
392 
393  // Configure OOT pileup corrections
394  bool isMethod1Set = false;
395  if (!corrName_.empty())
396  {
397  edm::ESHandle<OOTPileupCorrectionColl> pileupCorrections;
398  if (eventSetup.find(edm::eventsetup::EventSetupRecordKey::makeKey<HcalOOTPileupCorrectionRcd>()))
399  eventSetup.get<HcalOOTPileupCorrectionRcd>().get(pileupCorrections);
400  else
401  eventSetup.get<HcalOOTPileupCompatibilityRcd>().get(pileupCorrections);
402 
403  if( setPileupCorrection_ ){
404  const OOTPileupCorrData * testMethod1Ptr = dynamic_cast<OOTPileupCorrData*>((pileupCorrections->get(corrName_, cat_)).get());
405  if( testMethod1Ptr ) isMethod1Set = true;
406  (reco_.*setPileupCorrection_)(pileupCorrections->get(corrName_, cat_));
407  }
408  }
409 
410  // Configure the negative energy filter
413  {
414  eventSetup.get<HBHENegativeEFilterRcd>().get(negEhandle);
416  }
417 
418  // Only for HBHE
419  if( subdet_ == HcalBarrel ) {
420  if( !cntprtCorrMethod_ ) {
422  if( puCorrMethod_ == 2 ) LogTrace("HcalPUcorrMethod") << "Using Hcal OOTPU method 2" << std::endl;
423  else if( puCorrMethod_ == 1 ){
424  if( isMethod1Set ) LogTrace("HcalPUcorrMethod") << "Using Hcal OOTPU method 1" << std::endl;
425  else edm::LogWarning("HcalPUcorrMethod") <<"puCorrMethod_ set to be 1 but method 1 is NOT activated (method 0 used instead)!\n"
426  <<"Please check GlobalTag usage or method 1 separately disabled by dataOOTCorrectionName & mcOOTCorrectionName?" << std::endl;
427  } else if (puCorrMethod_ == 3) {
428  LogTrace("HcalPUcorrMethod") << "Using Hcal Deterministic Fit Method!" << std::endl;
429  } else LogTrace("HcalPUcorrMethod") << "Using Hcal OOTPU method 0" << std::endl;
430  }
431  }
432 
433  // GET THE BEAM CROSSING INFO HERE, WHEN WE UNDERSTAND HOW THINGS WORK.
434  // Then, call "setBXInfo" method of the reco_ object.
435  // Also remember to call SetBXInfo in the negative energy flag setter.
436 
437  if (det_==DetId::Hcal) {
438 
439  // HBHE -------------------------------------------------------------------
442 
443  e.getByToken(tok_hbhe_,digi);
444 
445  // create empty output
446  std::auto_ptr<HBHERecHitCollection> rec(new HBHERecHitCollection);
447  rec->reserve(digi->size());
448  // run the algorithm
451  std::vector<HBHEDataFrame> HBDigis;
452  std::vector<int> RecHitIndex;
453 
454  // Vote on majority TS0 CapId
455  int favorite_capid = 0;
456  if (correctTiming_) {
457  long capid_votes[4] = {0,0,0,0};
458  for (i=digi->begin(); i!=digi->end(); i++) {
459  capid_votes[(*i)[0].capid()]++;
460  }
461  for (int k = 0; k < 4; k++)
462  if (capid_votes[k] > capid_votes[favorite_capid])
463  favorite_capid = k;
464  }
465 
466  for (i=digi->begin(); i!=digi->end(); i++) {
467  HcalDetId cell = i->id();
468  DetId detcell=(DetId)cell;
469 
471  const HcalRecoParam* param_ts = paramTS->getValues(detcell.rawId());
472  if(tsFromDB_) {
473  firstSample_ = param_ts->firstSample();
474  samplesToAdd_ = param_ts->samplesToAdd();
475  }
476  if(recoParamsFromDB_) {
477  bool correctForTimeslew=param_ts->correctForTimeslew();
479  float phaseNS=param_ts->correctionPhaseNS();
481  correctTiming_ = param_ts->correctTiming();
482  firstAuxTS_ = param_ts->firstAuxTS();
483  int pileupCleaningID = param_ts->pileupCleaningID();
484 
485  /*
486  int sub = cell.subdet();
487  int depth = cell.depth();
488  int inteta = cell.ieta();
489  int intphi = cell.iphi();
490 
491  std::cout << "HcalHitReconstructor::produce cell:"
492  << " sub, ieta, iphi, depth = "
493  << sub << " " << inteta << " " << intphi
494  << " " << depth << std::endl
495  << " first, toadd = " << firstSample_ << ", "
496  << samplesToAdd_ << std::endl
497  << " correctForTimeslew " << correctForTimeslew
498  << std::endl
499  << " correctForPhaseContainment "
500  << correctForPhaseContainment << std::endl
501  << " phaseNS " << phaseNS << std::endl
502  << " useLeakCorrection " << useLeakCorrection_
503  << std::endl
504  << " correctTiming " << correctTiming_ << std::endl
505  << " firstAuxTS " << firstAuxTS_ << std::endl
506  << " pileupCleaningID " << pileupCleaningID
507  << std::endl;
508  */
509 
510  reco_.setRecoParams(correctForTimeslew,correctForPhaseContainment,useLeakCorrection_,pileupCleaningID,phaseNS);
511  }
512  }
513 
514  int first = firstSample_;
515  int toadd = samplesToAdd_;
516 
517  // check on cells to be ignored and dropped: (rof,20.Feb.09)
518  const HcalChannelStatus* mydigistatus=myqual->getValues(detcell.rawId());
519  if (mySeverity->dropChannel(mydigistatus->getValue() ) ) continue;
521  if (i->zsMarkAndPass()) continue;
522 
523  const HcalCalibrations& calibrations=conditions->getHcalCalibrations(cell);
524  const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
525  const HcalQIEShape* shape = conditions->getHcalShape (channelCoder);
526  HcalCoderDb coder (*channelCoder, *shape);
527 
528  rec->push_back(reco_.reconstruct(*i,first,toadd,coder,calibrations));
529 
530  // Fill first auxiliary word
531  unsigned int auxflag=0;
532  int fTS = firstAuxTS_;
533  if (fTS<0) fTS=0; // silly protection against time slice <0
534  for (int xx=fTS; xx<fTS+4 && xx<i->size();++xx) {
535  int adcv = i->sample(xx).adc();
536  auxflag+=((adcv&0x7F)<<(7*(xx-fTS))); // store the time slices in the first 28 bits of aux, a set of 4 7-bit adc values
537  // bits 28 and 29 are reserved for capid of the first time slice saved in aux
538  }
539  auxflag+=((i->sample(fTS).capid())<<28);
540  (rec->back()).setAux(auxflag);
541 
542  // Fill second auxiliary word
543  auxflag=0;
544  int fTS2 = (firstAuxTS_-4 < 0) ? 0 : firstAuxTS_-4;
545  for (int xx = fTS2; xx < fTS2+4 && xx<i->size(); ++xx) {
546  int adcv = i->sample(xx).adc();
547  auxflag+=((adcv&0x7F)<<(7*(xx-fTS2)));
548  }
549  auxflag+=((i->sample(fTS2).capid())<<28);
550  (rec->back()).setAuxHBHE(auxflag);
551 
552  (rec->back()).setFlags(0); // this sets all flag bits to 0
553  // Set presample flag
554  if (fTS>0)
555  (rec->back()).setFlagField((i->sample(fTS-1).adc()), HcalCaloFlagLabels::PresampleADC,7);
556 
559  if (setNoiseFlags_)
560  hbheFlagSetter_->SetFlagsFromDigi(&(*topo),rec->back(),*i,coder,calibrations,first,toadd);
562  hbhePulseShapeFlagSetter_->SetPulseShapeFlags(rec->back(), *i, coder, calibrations);
563  if (setNegativeFlags_)
564  hbheNegativeFlagSetter_->setPulseShapeFlags(rec->back(), *i, coder, calibrations);
567  if (correctTiming_)
568  HcalTimingCorrector::Correct(rec->back(), *i, favorite_capid);
569  if (setHSCPFlags_ && i->id().ietaAbs()<16)
570  {
571  double DigiEnergy=0;
572  for(int j=0; j!=i->size(); DigiEnergy += i->sample(j++).nominal_fC());
573  if(DigiEnergy > hbheHSCPFlagSetter_->EnergyThreshold())
574  {
575  HBDigis.push_back(*i);
576  RecHitIndex.push_back(rec->size()-1);
577  }
578 
579  } // if (set HSCPFlags_ && |ieta|<16)
580  } // loop over HBHE digis
581 
582 
584  if (setHSCPFlags_) hbheHSCPFlagSetter_->hbheSetTimeFlagsFromDigi(rec.get(), HBDigis, RecHitIndex);
585  // return result
586  e.put(rec);
587 
588  // HO ------------------------------------------------------------------
589  } else if (subdet_==HcalOuter) {
591  e.getByToken(tok_ho_,digi);
592 
593  // create empty output
594  std::auto_ptr<HORecHitCollection> rec(new HORecHitCollection);
595  rec->reserve(digi->size());
596  // run the algorithm
598 
599  // Vote on majority TS0 CapId
600  int favorite_capid = 0;
601  if (correctTiming_) {
602  long capid_votes[4] = {0,0,0,0};
603  for (i=digi->begin(); i!=digi->end(); i++) {
604  capid_votes[(*i)[0].capid()]++;
605  }
606  for (int k = 0; k < 4; k++)
607  if (capid_votes[k] > capid_votes[favorite_capid])
608  favorite_capid = k;
609  }
610 
611  for (i=digi->begin(); i!=digi->end(); i++) {
612  HcalDetId cell = i->id();
613  DetId detcell=(DetId)cell;
614  // firstSample & samplesToAdd
616  const HcalRecoParam* param_ts = paramTS->getValues(detcell.rawId());
617  if(tsFromDB_) {
618  firstSample_ = param_ts->firstSample();
619  samplesToAdd_ = param_ts->samplesToAdd();
620  }
621  if(recoParamsFromDB_) {
622  bool correctForTimeslew=param_ts->correctForTimeslew();
623  bool correctForPhaseContainment= param_ts->correctForPhaseContainment();
624  float phaseNS=param_ts->correctionPhaseNS();
626  correctTiming_ = param_ts->correctTiming();
627  firstAuxTS_ = param_ts->firstAuxTS();
628  int pileupCleaningID = param_ts->pileupCleaningID();
629  reco_.setRecoParams(correctForTimeslew,correctForPhaseContainment,useLeakCorrection_,pileupCleaningID,phaseNS);
630  }
631  }
632 
633  int first = firstSample_;
634  int toadd = samplesToAdd_;
635 
636  // check on cells to be ignored and dropped: (rof,20.Feb.09)
637  const HcalChannelStatus* mydigistatus=myqual->getValues(detcell.rawId());
638  if (mySeverity->dropChannel(mydigistatus->getValue() ) ) continue;
640  if (i->zsMarkAndPass()) continue;
641 
642  const HcalCalibrations& calibrations=conditions->getHcalCalibrations(cell);
643  const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
644  const HcalQIEShape* shape = conditions->getHcalShape (channelCoder);
645  HcalCoderDb coder (*channelCoder, *shape);
646 
647  rec->push_back(reco_.reconstruct(*i,first,toadd,coder,calibrations));
648 
649  // Set auxiliary flag
650  int auxflag=0;
651  int fTS = firstAuxTS_;
652  if (fTS<0) fTS=0; //silly protection against negative time slice values
653  for (int xx=fTS; xx<fTS+4 && xx<i->size();++xx)
654  auxflag+=(i->sample(xx).adc())<<(7*(xx-fTS)); // store the time slices in the first 28 bits of aux, a set of 4 7-bit adc values
655  // bits 28 and 29 are reserved for capid of the first time slice saved in aux
656  auxflag+=((i->sample(fTS).capid())<<28);
657  (rec->back()).setAux(auxflag);
658  (rec->back()).setFlags(0);
659  // Fill Presample ADC flag
660  if (fTS>0)
661  (rec->back()).setFlagField((i->sample(fTS-1).adc()), HcalCaloFlagLabels::PresampleADC,7);
662 
665  if (correctTiming_)
666  HcalTimingCorrector::Correct(rec->back(), *i, favorite_capid);
667  }
668  // return result
669  e.put(rec);
670 
671  // HF -------------------------------------------------------------------
672  } else if (subdet_==HcalForward) {
674  e.getByToken(tok_hf_,digi);
675 
676 
678  // create empty output
679  std::auto_ptr<HFRecHitCollection> rec(new HFRecHitCollection);
680  rec->reserve(digi->size());
681  // run the algorithm
683 
684  // Vote on majority TS0 CapId
685  int favorite_capid = 0;
686  if (correctTiming_) {
687  long capid_votes[4] = {0,0,0,0};
688  for (i=digi->begin(); i!=digi->end(); i++) {
689  capid_votes[(*i)[0].capid()]++;
690  }
691  for (int k = 0; k < 4; k++)
692  if (capid_votes[k] > capid_votes[favorite_capid])
693  favorite_capid = k;
694  }
695 
696  for (i=digi->begin(); i!=digi->end(); i++) {
697  HcalDetId cell = i->id();
698  DetId detcell=(DetId)cell;
699 
701  const HcalRecoParam* param_ts = paramTS->getValues(detcell.rawId());
702  if(tsFromDB_) {
703  firstSample_ = param_ts->firstSample();
704  samplesToAdd_ = param_ts->samplesToAdd();
705  }
706  if(recoParamsFromDB_) {
707  bool correctForTimeslew=param_ts->correctForTimeslew();
708  bool correctForPhaseContainment= param_ts->correctForPhaseContainment();
709  float phaseNS=param_ts->correctionPhaseNS();
711  correctTiming_ = param_ts->correctTiming();
712  firstAuxTS_ = param_ts->firstAuxTS();
713  int pileupCleaningID = param_ts->pileupCleaningID();
714  reco_.setRecoParams(correctForTimeslew,correctForPhaseContainment,useLeakCorrection_,pileupCleaningID,phaseNS);
715  }
716  }
717 
718  int first = firstSample_;
719  int toadd = samplesToAdd_;
720 
721  // check on cells to be ignored and dropped: (rof,20.Feb.09)
722  const HcalChannelStatus* mydigistatus=myqual->getValues(detcell.rawId());
723  if (mySeverity->dropChannel(mydigistatus->getValue() ) ) continue;
725  if (i->zsMarkAndPass()) continue;
726 
727  const HcalCalibrations& calibrations=conditions->getHcalCalibrations(cell);
728  const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
729  const HcalQIEShape* shape = conditions->getHcalShape (channelCoder);
730  HcalCoderDb coder (*channelCoder, *shape);
731 
732  // Set HFDigiTime flag values from digiTimeFromDB_
733  if (digiTimeFromDB_==true && hfdigibit_!=0)
734  {
735  const HcalFlagHFDigiTimeParam* hfDTparam = HFDigiTimeParams->getValues(detcell.rawId());
737  hfDTparam->HFdigiflagSamplesToAdd(),
738  hfDTparam->HFdigiflagExpectedPeak(),
739  hfDTparam->HFdigiflagMinEThreshold(),
740  hfDTparam->HFdigiflagCoefficients()
741  );
742  }
743 
744  //std::cout << "TOADDHF " << toadd << " " << first << " " << std::endl;
745  rec->push_back(reco_.reconstruct(*i,first,toadd,coder,calibrations));
746 
747  // Set auxiliary flag
748  int auxflag=0;
749  int fTS = firstAuxTS_;
750  if (fTS<0) fTS=0; // silly protection against negative time slice values
751  for (int xx=fTS; xx<fTS+4 && xx<i->size();++xx)
752  auxflag+=(i->sample(xx).adc())<<(7*(xx-fTS)); // store the time slices in the first 28 bits of aux, a set of 4 7-bit adc values
753  // bits 28 and 29 are reserved for capid of the first time slice saved in aux
754  auxflag+=((i->sample(fTS).capid())<<28);
755  (rec->back()).setAux(auxflag);
756 
757  // Clear flags
758  (rec->back()).setFlags(0);
759 
760  // Fill Presample ADC flag
761  if (fTS>0)
762  (rec->back()).setFlagField((i->sample(fTS-1).adc()), HcalCaloFlagLabels::PresampleADC,7);
763 
764  // This calls the code for setting the HF noise bit determined from digi shape
765  if (setNoiseFlags_)
766  hfdigibit_->hfSetFlagFromDigi(rec->back(),*i,coder,calibrations);
771  if (correctTiming_)
772  HcalTimingCorrector::Correct(rec->back(), *i, favorite_capid);
773  } // for (i=digi->begin(); i!=digi->end(); i++) -- loop on all HF digis
774 
775  // The following flags require the full set of rechits
776  // These need to be set consecutively, so an energy check should be the first
777  // test performed on these hits (to minimize the loop time)
778  if (setNoiseFlags_)
779  {
780  // Step 1: Set PET flag (short fibers of |ieta|==29)
781  // Neighbor/partner channels that are flagged by Pulse Shape algorithm (HFDigiTime)
782  // won't be considered in these calculations
783  for (HFRecHitCollection::iterator i = rec->begin();i!=rec->end();++i)
784  {
785  int depth=i->id().depth();
786  int ieta=i->id().ieta();
787  // Short fibers and all channels at |ieta|=29 use PET settings in Algo 3
788  if (depth==2 || abs(ieta)==29 )
789  hfPET_->HFSetFlagFromPET(*i,*rec,myqual,mySeverity);
790  }
791 
792  // Step 2: Set S8S1 flag (short fibers or |ieta|==29)
793  for (HFRecHitCollection::iterator i = rec->begin();i!=rec->end();++i)
794  {
795  int depth=i->id().depth();
796  int ieta=i->id().ieta();
797  // Short fibers and all channels at |ieta|=29 use PET settings in Algo 3
798  if (depth==2 || abs(ieta)==29 )
799  hfS8S1_->HFSetFlagFromS9S1(*i,*rec,myqual,mySeverity);
800  }
801 
802  // Set 3: Set S9S1 flag (long fibers)
803  for (HFRecHitCollection::iterator i = rec->begin();i!=rec->end();++i)
804  {
805  int depth=i->id().depth();
806  int ieta=i->id().ieta();
807  // Short fibers and all channels at |ieta|=29 use PET settings in Algo 3
808  if (depth==1 && abs(ieta)!=29 )
809  hfS9S1_->HFSetFlagFromS9S1(*i,*rec,myqual, mySeverity);
810  }
811  }
812 
813  // return result
814  e.put(rec);
815  } else if (subdet_==HcalOther && subdetOther_==HcalCalibration) {
817  e.getByToken(tok_calib_,digi);
818 
819  // create empty output
820  std::auto_ptr<HcalCalibRecHitCollection> rec(new HcalCalibRecHitCollection);
821  rec->reserve(digi->size());
822  // run the algorithm
823  int first = firstSample_;
824  int toadd = samplesToAdd_;
825 
827  for (i=digi->begin(); i!=digi->end(); i++) {
828  HcalCalibDetId cell = i->id();
829  // HcalDetId cellh = i->id();
830  DetId detcell=(DetId)cell;
831  // check on cells to be ignored and dropped: (rof,20.Feb.09)
832  const HcalChannelStatus* mydigistatus=myqual->getValues(detcell.rawId());
833  if (mySeverity->dropChannel(mydigistatus->getValue() ) ) continue;
835  if (i->zsMarkAndPass()) continue;
836 
837  const HcalCalibrations& calibrations=conditions->getHcalCalibrations(cell);
838  const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
839  const HcalQIEShape* shape = conditions->getHcalShape (channelCoder);
840  HcalCoderDb coder (*channelCoder, *shape);
841 
842  // firstSample & samplesToAdd
843  if(tsFromDB_) {
844  const HcalRecoParam* param_ts = paramTS->getValues(detcell.rawId());
845  first = param_ts->firstSample();
846  toadd = param_ts->samplesToAdd();
847  }
848  rec->push_back(reco_.reconstruct(*i,first,toadd,coder,calibrations));
849 
850  /*
851  // Flag setting not available for calibration rechits
852  // Set auxiliary flag
853  int auxflag=0;
854  int fTS = firstAuxTS_;
855  for (int xx=fTS; xx<fTS+4 && xx<i->size();++xx)
856  auxflag+=(i->sample(xx).adc())<<(7*(xx-fTS)); // store the time slices in the first 28 bits of aux, a set of 4 7-bit adc values
857  // bits 28 and 29 are reserved for capid of the first time slice saved in aux
858  auxflag+=((i->sample(fTS).capid())<<28);
859  (rec->back()).setAux(auxflag);
860 
861  (rec->back()).setFlags(0); // Not yet implemented for HcalCalibRecHit
862  */
863  }
864  // return result
865  e.put(rec);
866  }
867  }
868  //DL delete myqual;
869 } // void HcalHitReconstructor::produce(...)
unsigned int firstSample() const
Definition: HcalRecoParam.h:32
int i
Definition: DBlmapReader.cc:9
void HFSetFlagFromS9S1(HFRecHit &hf, HFRecHitCollection &rec, const HcalChannelQuality *myqual, const HcalSeverityLevelComputer *mySeverity)
HBHERecHit reconstruct(const HBHEDataFrame &digi, int first, int toadd, const HcalCoder &coder, const HcalCalibrations &calibs) const
edm::EDGetTokenT< HBHEDigiCollection > tok_hbhe_
void configFilter(const HBHENegativeEFilter *f)
void setHFTimingTrustFlag(HFRecHit &rechit, const HFDataFrame &digi)
unsigned int pileupCleaningID() const
Definition: HcalRecoParam.h:44
HcalADCSaturationFlag * saturationFlagSetter_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
uint32_t HFdigiflagSamplesToAdd() const
bool correctForPhaseContainment() const
Definition: HcalRecoParam.h:29
void hfSetFlagFromDigi(HFRecHit &hf, const HFDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib)
std::vector< HBHEDataFrame >::const_iterator const_iterator
const Item * getValues(DetId fId, bool throwOnFail=true) const
void resetParamsFromDB(int firstSample, int samplesToAdd, int expectedPeak, double minthreshold, const std::vector< double > &coef)
bool isRealData() const
Definition: EventBase.h:63
SetCorrectionFcn setPileupCorrection_
void HFSetFlagFromPET(HFRecHit &hf, HFRecHitCollection &rec, const HcalChannelQuality *myqual, const HcalSeverityLevelComputer *mySeverity)
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
std::string dataOOTCorrectionCategory_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:121
HBHENegativeFlagSetter * hbheNegativeFlagSetter_
std::unique_ptr< HcalFlagHFDigiTimeParams > HFDigiTimeParams
void get(HolderT &iHolder) const
bool correctForTimeslew() const
Definition: HcalRecoParam.h:38
edm::EDGetTokenT< HcalCalibDigiCollection > tok_calib_
bool correctTiming() const
Definition: HcalRecoParam.h:40
RunNumber_t run() const
Definition: Event.h:93
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
HcalHFStatusBitFromDigis * hfdigibit_
int j
Definition: DBlmapReader.cc:9
bool dropChannel(const uint32_t &mystatus) const
uint32_t HFdigiflagExpectedPeak() const
void hbheSetTimeFlagsFromDigi(HBHERecHitCollection *, const std::vector< HBHEDataFrame > &, const std::vector< int > &)
void setSaturationFlag(HBHERecHit &rechit, const HBHEDataFrame &digi)
unsigned int samplesToAdd() const
Definition: HcalRecoParam.h:33
edm::EDGetTokenT< HODigiCollection > tok_ho_
#define LogTrace(id)
float correctionPhaseNS() const
Definition: HcalRecoParam.h:31
std::vector< HFRecHit >::iterator iterator
std::vector< double > HFdigiflagCoefficients() const
HcalHF_PETalgorithm * hfPET_
Definition: DetId.h:18
HcalHF_S9S1algorithm * hfS9S1_
HBHEPulseShapeFlagSetter * hbhePulseShapeFlagSetter_
void setRecoParams(bool correctForTimeslew, bool correctForPulse, bool setLeakCorrection, int pileupCleaningID, float phaseNS)
void SetTimingShapedFlags(HBHERecHit &hbhe)
uint32_t HFdigiflagFirstSample() const
void setForData(int runnum)
T const * product() const
Definition: ESHandle.h:86
HBHEStatusBitSetter * hbheFlagSetter_
HBHETimeProfileStatusBitSetter * hbheHSCPFlagSetter_
HBHETimingShapedFlagSetter * hbheTimingShapedFlagSetter_
void setPulseShapeFlags(HBHERecHit &hbhe, const HBHEDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib)
HcalHF_S9S1algorithm * hfS8S1_
void SetFlagsFromRecHits(const HcalTopology *topo, HBHERecHitCollection &rec)
HcalOtherSubdetector subdetOther_
static void Correct(HBHERecHit &rechit, const HBHEDataFrame &digi, int favorite_capid)
void SetPulseShapeFlags(HBHERecHit &hbhe, const HBHEDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib)
unsigned int firstAuxTS() const
Definition: HcalRecoParam.h:41
HFTimingTrustFlag * HFTimingTrustFlagSetter_
uint32_t getValue() const
void SetFlagsFromDigi(const HcalTopology *topo, HBHERecHit &hbhe, const HBHEDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib, int firstSample=3, int samplesToAdd=4)
std::string mcOOTCorrectionCategory_
edm::EDGetTokenT< HFDigiCollection > tok_hf_
HcalSimpleRecAlgo reco_
double HFdigiflagMinEThreshold() const
bool useLeakCorrection() const
Definition: HcalRecoParam.h:36

Member Data Documentation

std::string HcalHitReconstructor::cat_
private

Definition at line 116 of file HcalHitReconstructor.h.

Referenced by produce().

int HcalHitReconstructor::cntprtCorrMethod_
private

Definition at line 114 of file HcalHitReconstructor.h.

Referenced by produce().

bool HcalHitReconstructor::correctTiming_
private

Definition at line 81 of file HcalHitReconstructor.h.

Referenced by produce().

std::string HcalHitReconstructor::corrName_
private

Definition at line 116 of file HcalHitReconstructor.h.

Referenced by produce().

std::string HcalHitReconstructor::dataOOTCorrectionCategory_
private

Definition at line 105 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

std::string HcalHitReconstructor::dataOOTCorrectionName_
private

Definition at line 104 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

DetId::Detector HcalHitReconstructor::det_
private

Definition at line 72 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::digiTimeFromDB_
private

Definition at line 97 of file HcalHitReconstructor.h.

Referenced by beginRun(), endRun(), HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::dropZSmarkedPassed_
private

Definition at line 88 of file HcalHitReconstructor.h.

Referenced by produce().

bool HcalHitReconstructor::first_
private

Definition at line 115 of file HcalHitReconstructor.h.

Referenced by produce().

int HcalHitReconstructor::firstAuxTS_
private

Definition at line 90 of file HcalHitReconstructor.h.

Referenced by produce().

int HcalHitReconstructor::firstSample_
private

Definition at line 93 of file HcalHitReconstructor.h.

Referenced by produce().

HBHEStatusBitSetter* HcalHitReconstructor::hbheFlagSetter_
private

Definition at line 62 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

HBHETimeProfileStatusBitSetter* HcalHitReconstructor::hbheHSCPFlagSetter_
private

Definition at line 63 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

HBHENegativeFlagSetter* HcalHitReconstructor::hbheNegativeFlagSetter_
private

Definition at line 66 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

HBHEPulseShapeFlagSetter* HcalHitReconstructor::hbhePulseShapeFlagSetter_
private

Definition at line 65 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

HBHETimingShapedFlagSetter* HcalHitReconstructor::hbheTimingShapedFlagSetter_
private

Definition at line 64 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

HcalHFStatusBitFromDigis* HcalHitReconstructor::hfdigibit_
private

Definition at line 67 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

std::unique_ptr<HcalFlagHFDigiTimeParams> HcalHitReconstructor::HFDigiTimeParams
private

Definition at line 111 of file HcalHitReconstructor.h.

Referenced by beginRun(), and produce().

HcalHF_PETalgorithm* HcalHitReconstructor::hfPET_
private

Definition at line 70 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

HcalHF_S9S1algorithm* HcalHitReconstructor::hfS8S1_
private

Definition at line 69 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

HcalHF_S9S1algorithm* HcalHitReconstructor::hfS9S1_
private

Definition at line 68 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

HFTimingTrustFlag* HcalHitReconstructor::HFTimingTrustFlagSetter_
private

Definition at line 61 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

edm::InputTag HcalHitReconstructor::inputLabel_
private

Definition at line 75 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor().

std::string HcalHitReconstructor::mcOOTCorrectionCategory_
private

Definition at line 107 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

std::string HcalHitReconstructor::mcOOTCorrectionName_
private

Definition at line 106 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

HcalRecoParams* HcalHitReconstructor::paramTS
private

Definition at line 110 of file HcalHitReconstructor.h.

Referenced by beginRun(), endRun(), produce(), and ~HcalHitReconstructor().

int HcalHitReconstructor::puCorrMethod_
private

Definition at line 113 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

HcalSimpleRecAlgo HcalHitReconstructor::reco_
private

Definition at line 59 of file HcalHitReconstructor.h.

Referenced by beginRun(), endRun(), HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::recoParamsFromDB_
private

Definition at line 96 of file HcalHitReconstructor.h.

Referenced by beginRun(), HcalHitReconstructor(), and produce().

int HcalHitReconstructor::samplesToAdd_
private

Definition at line 94 of file HcalHitReconstructor.h.

Referenced by produce().

HcalADCSaturationFlag* HcalHitReconstructor::saturationFlagSetter_
private

Definition at line 60 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), produce(), and ~HcalHitReconstructor().

bool HcalHitReconstructor::setHSCPFlags_
private

Definition at line 83 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::setNegativeFlags_
private

Definition at line 87 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::setNoiseFlags_
private

Definition at line 82 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

SetCorrectionFcn HcalHitReconstructor::setPileupCorrection_
private

Definition at line 108 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::setPulseShapeFlags_
private

Definition at line 86 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::setSaturationFlags_
private

Definition at line 84 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::setTimingTrustFlags_
private

Definition at line 85 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

int HcalHitReconstructor::subdet_
private

Definition at line 73 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

HcalOtherSubdetector HcalHitReconstructor::subdetOther_
private

Definition at line 74 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

edm::EDGetTokenT<HcalCalibDigiCollection> HcalHitReconstructor::tok_calib_
private

Definition at line 79 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

edm::EDGetTokenT<HBHEDigiCollection> HcalHitReconstructor::tok_hbhe_
private

Definition at line 76 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

edm::EDGetTokenT<HFDigiCollection> HcalHitReconstructor::tok_hf_
private

Definition at line 78 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

edm::EDGetTokenT<HODigiCollection> HcalHitReconstructor::tok_ho_
private

Definition at line 77 of file HcalHitReconstructor.h.

Referenced by HcalHitReconstructor(), and produce().

bool HcalHitReconstructor::tsFromDB_
private

Definition at line 95 of file HcalHitReconstructor.h.

Referenced by beginRun(), endRun(), and produce().

bool HcalHitReconstructor::useLeakCorrection_
private

Definition at line 101 of file HcalHitReconstructor.h.

Referenced by produce().