21 reco_(conf.getParameter<bool>(
"correctForTimeslew"),
22 conf.getParameter<bool>(
"correctForPhaseContainment"),
23 conf.getParameter<double>(
"correctionPhaseNS")),
25 inputLabel_(conf.getParameter<edm::InputTag>(
"digiLabel")),
26 correctTiming_(conf.getParameter<bool>(
"correctTiming")),
27 setNoiseFlags_(conf.getParameter<bool>(
"setNoiseFlags")),
28 setHSCPFlags_(conf.getParameter<bool>(
"setHSCPFlags")),
29 setSaturationFlags_(conf.getParameter<bool>(
"setSaturationFlags")),
30 setTimingTrustFlags_(conf.getParameter<bool>(
"setTimingTrustFlags")),
31 setPulseShapeFlags_(conf.getParameter<bool>(
"setPulseShapeFlags")),
32 dropZSmarkedPassed_(conf.getParameter<bool>(
"dropZSmarkedPassed")),
33 firstAuxTS_(conf.getParameter<int>(
"firstAuxTS")),
34 firstSample_(conf.getParameter<int>(
"firstSample")),
35 samplesToAdd_(conf.getParameter<int>(
"samplesToAdd")),
36 tsFromDB_(conf.getParameter<bool>(
"tsFromDB"))
39 std::string subd=conf.
getParameter<std::string>(
"Subdetector");
62 if (!strcasecmp(subd.c_str(),
"HBHE")) {
64 bool timingShapedCutsFlags = conf.
getParameter<
bool>(
"setTimingShapedCutsFlags");
65 if (timingShapedCutsFlags)
81 psdigi.
getParameter<std::vector<edm::ParameterSet> >(
"pulseShapeParameterSets")
103 psPulseShape.
getParameter<
double>(
"MinimumChargeThreshold"),
104 psPulseShape.
getParameter<
double>(
"TS4TS5ChargeThreshold"),
105 psPulseShape.
getParameter<
unsigned int>(
"TrianglePeakTS"),
106 psPulseShape.
getParameter<std::vector<double> >(
"LinearThreshold"),
107 psPulseShape.
getParameter<std::vector<double> >(
"LinearCut"),
108 psPulseShape.
getParameter<std::vector<double> >(
"RMS8MaxThreshold"),
109 psPulseShape.
getParameter<std::vector<double> >(
"RMS8MaxCut"),
110 psPulseShape.
getParameter<std::vector<double> >(
"LeftSlopeThreshold"),
111 psPulseShape.
getParameter<std::vector<double> >(
"LeftSlopeCut"),
112 psPulseShape.
getParameter<std::vector<double> >(
"RightSlopeThreshold"),
113 psPulseShape.
getParameter<std::vector<double> >(
"RightSlopeCut"),
114 psPulseShape.
getParameter<std::vector<double> >(
"RightSlopeSmallThreshold"),
115 psPulseShape.
getParameter<std::vector<double> >(
"RightSlopeSmallCut"),
116 psPulseShape.
getParameter<std::vector<double> >(
"TS4TS5LowerThreshold"),
117 psPulseShape.
getParameter<std::vector<double> >(
"TS4TS5LowerCut"),
118 psPulseShape.
getParameter<std::vector<double> >(
"TS4TS5UpperThreshold"),
119 psPulseShape.
getParameter<std::vector<double> >(
"TS4TS5UpperCut"),
124 produces<HBHERecHitCollection>();
125 }
else if (!strcasecmp(subd.c_str(),
"HO")) {
127 produces<HORecHitCollection>();
128 }
else if (!strcasecmp(subd.c_str(),
"HF")) {
146 psS9S1.
getParameter<std::vector<double> >(
"shortEnergyParams"),
147 psS9S1.
getParameter<std::vector<double> >(
"shortETParams"),
148 psS9S1.
getParameter<std::vector<double> >(
"long_optimumSlope"),
149 psS9S1.
getParameter<std::vector<double> >(
"longEnergyParams"),
150 psS9S1.
getParameter<std::vector<double> >(
"longETParams"),
157 psS8S1.
getParameter<std::vector<double> >(
"shortEnergyParams"),
158 psS8S1.
getParameter<std::vector<double> >(
"shortETParams"),
159 psS8S1.
getParameter<std::vector<double> >(
"long_optimumSlope"),
160 psS8S1.
getParameter<std::vector<double> >(
"longEnergyParams"),
161 psS8S1.
getParameter<std::vector<double> >(
"longETParams"),
168 psPET.
getParameter<std::vector<double> >(
"shortEnergyParams"),
169 psPET.
getParameter<std::vector<double> >(
"shortETParams"),
171 psPET.
getParameter<std::vector<double> >(
"longEnergyParams"),
172 psPET.
getParameter<std::vector<double> >(
"longETParams"),
178 produces<HFRecHitCollection>();
179 }
else if (!strcasecmp(subd.c_str(),
"ZDC")) {
182 produces<ZDCRecHitCollection>();
183 }
else if (!strcasecmp(subd.c_str(),
"CALIB")) {
186 produces<HcalCalibRecHitCollection>();
188 std::cout <<
"HcalHitReconstructor is not associated with a specific subdetector!" << std::endl;
225 const HcalQIEShape* shape = conditions->getHcalShape ();
247 rec->reserve(digi->size());
251 std::vector<HBHEDataFrame> HBDigis;
252 std::vector<int> RecHitIndex;
255 int favorite_capid = 0;
257 long capid_votes[4] = {0,0,0,0};
258 for (i=digi->begin(); i!=digi->end(); i++) {
259 capid_votes[(*i)[0].capid()]++;
261 for (
int k = 0;
k < 4;
k++)
262 if (capid_votes[
k] > capid_votes[favorite_capid])
270 for (i=digi->begin(); i!=digi->end(); i++) {
278 if (i->zsMarkAndPass())
continue;
281 const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
290 if(toaddMem != toadd) {
301 for (
int xx=fTS; xx<fTS+4 && xx<i->size();++xx)
302 auxflag+=(i->sample(xx).adc())<<(7*(xx-fTS));
304 auxflag+=((i->sample(fTS).capid())<<28);
305 (rec->back()).setAux(auxflag);
307 (rec->back()).setFlags(0);
325 for(
int j=0;
j!=i->size(); DigiEnergy += i->sample(
j++).nominal_fC());
328 HBDigis.push_back(*i);
329 RecHitIndex.push_back(rec->size()-1);
348 rec->reserve(digi->size());
353 int favorite_capid = 0;
355 long capid_votes[4] = {0,0,0,0};
356 for (i=digi->begin(); i!=digi->end(); i++) {
357 capid_votes[(*i)[0].capid()]++;
359 for (
int k = 0;
k < 4;
k++)
360 if (capid_votes[
k] > capid_votes[favorite_capid])
368 for (i=digi->begin(); i!=digi->end(); i++) {
375 if (i->zsMarkAndPass())
continue;
378 const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
387 if(toaddMem != toadd) {
397 for (
int xx=fTS; xx<fTS+4 && xx<i->size();++xx)
398 auxflag+=(i->sample(xx).adc())<<(7*(xx-fTS));
400 auxflag+=((i->sample(fTS).capid())<<28);
401 (rec->back()).setAux(auxflag);
403 (rec->back()).setFlags(0);
425 rec->reserve(digi->size());
430 int favorite_capid = 0;
432 long capid_votes[4] = {0,0,0,0};
433 for (i=digi->begin(); i!=digi->end(); i++) {
434 capid_votes[(*i)[0].capid()]++;
436 for (
int k = 0;
k < 4;
k++)
437 if (capid_votes[
k] > capid_votes[favorite_capid])
445 for (i=digi->begin(); i!=digi->end(); i++) {
452 if (i->zsMarkAndPass())
continue;
455 const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
464 if(toaddMem != toadd) {
470 if (first ==3 && toadd == 4) {
477 else if (first == 4 && toadd == 2)
483 else if (first == 2 && toadd == 2)
497 for (
int xx=fTS; xx<fTS+4 && xx<i->size();++xx)
498 auxflag+=(i->sample(xx).adc())<<(7*(xx-fTS));
500 auxflag+=((i->sample(fTS).capid())<<28);
501 (rec->back()).setAux(auxflag);
504 (rec->back()).setFlags(0);
531 int depth=i->id().depth();
532 int ieta=i->id().ieta();
534 if (depth==2 ||
abs(ieta)==29 )
541 int depth=i->id().depth();
542 int ieta=i->id().ieta();
544 if (depth==2 ||
abs(ieta)==29 )
551 int depth=i->id().depth();
552 int ieta=i->id().ieta();
554 if (depth==1 &&
abs(ieta)!=29 )
567 rec->reserve(digi->size());
574 for (i=digi->begin(); i!=digi->end(); i++) {
582 if (i->zsMarkAndPass())
continue;
585 const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
594 if(toaddMem != toadd) {
unsigned int firstSample() const
T getParameter(std::string const &) const
HBHERecHit reconstruct(const HBHEDataFrame &digi, int first, int toadd, const HcalCoder &coder, const HcalCalibrations &calibs) const
void hbheSetTimeFlagsFromDigi(HBHERecHitCollection *, std::vector< HBHEDataFrame >, std::vector< int >)
void setHFTimingTrustFlag(HFRecHit &rechit, const HFDataFrame &digi)
HcalADCSaturationFlag * saturationFlagSetter_
void hfSetFlagFromDigi(HFRecHit &hf, const HFDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib)
virtual ~HcalHitReconstructor()
std::vector< T >::const_iterator const_iterator
void SetFlagsFromDigi(HBHERecHit &hbhe, const HBHEDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib, int firstSample=3, int samplesToAdd=4)
uint32_t rawId() const
get the raw id
void HFSetFlagFromPET(HFRecHit &hf, HFRecHitCollection &rec, HcalChannelQuality *myqual, const HcalSeverityLevelComputer *mySeverity)
void resetFlagTimeSamples(int firstSample, int samplesToAdd, int expectedPeak)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
HcalHFStatusBitFromDigis * hfdigibit_
void initPulseCorr(int toadd)
bool dropChannel(const uint32_t &mystatus) const
void setSaturationFlag(HBHERecHit &rechit, const HBHEDataFrame &digi)
unsigned int samplesToAdd() const
virtual void produce(edm::Event &e, const edm::EventSetup &c)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
HcalHitReconstructor(const edm::ParameterSet &ps)
std::vector< T >::iterator iterator
HcalHF_PETalgorithm * hfPET_
void HFSetFlagFromS9S1(HFRecHit &hf, HFRecHitCollection &rec, HcalChannelQuality *myqual, const HcalSeverityLevelComputer *mySeverity)
HcalHF_S9S1algorithm * hfS9S1_
HBHEPulseShapeFlagSetter * hbhePulseShapeFlagSetter_
static const int SubdetectorId
void SetTimingShapedFlags(HBHERecHit &hbhe)
T const * product() const
HBHEStatusBitSetter * hbheFlagSetter_
HBHETimeProfileStatusBitSetter * hbheHSCPFlagSetter_
HBHETimingShapedFlagSetter * hbheTimingShapedFlagSetter_
HcalHF_S9S1algorithm * hfS8S1_
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)
edm::InputTag inputLabel_
virtual void endRun(edm::Run &r, edm::EventSetup const &es)
bool setTimingTrustFlags_
HFTimingTrustFlag * HFTimingTrustFlagSetter_
virtual void beginRun(edm::Run &r, edm::EventSetup const &es)
uint32_t getValue() const
const Item * getValues(DetId fId) const
void SetFlagsFromRecHits(HBHERecHitCollection &rec)