Go to the documentation of this file.00001 #include "RecoLocalCalo/HcalRecAlgos/interface/HcalHFStatusBitFromRecHits.h"
00002 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00003 #include "Geometry/HcalTowerAlgo/src/HcalHardcodeGeometryData.h"
00004
00005 #include <algorithm>
00006 #include <cmath>
00007 #include <iostream>
00008 using namespace std;
00009
00010 HcalHFStatusBitFromRecHits::HcalHFStatusBitFromRecHits()
00011 {
00012
00013 long_HFlongshortratio_ = 0.99;
00014 short_HFlongshortratio_ = 0.99;
00015 long_thresholdET_ = 0.5;
00016 short_thresholdET_ = 0.5;
00017 long_thresholdEnergy_ = 100;
00018 short_thresholdEnergy_ = 100;
00019 }
00020
00021 HcalHFStatusBitFromRecHits::HcalHFStatusBitFromRecHits(double shortR, double shortET, double shortE,
00022 double longR, double longET, double longE)
00023 {
00024 long_HFlongshortratio_ = longR;
00025 short_HFlongshortratio_ = shortR;
00026 long_thresholdET_ = longET;
00027 short_thresholdET_ = shortET;
00028 long_thresholdEnergy_ = longE;
00029 short_thresholdEnergy_ = shortE;
00030 }
00031
00032 HcalHFStatusBitFromRecHits::~HcalHFStatusBitFromRecHits(){}
00033
00034 void HcalHFStatusBitFromRecHits::hfSetFlagFromRecHits(HFRecHitCollection& rec,
00035 HcalChannelQuality* myqual,
00036 const HcalSeverityLevelComputer* mySeverity)
00037 {
00038
00039 int status;
00040 float en, en2;
00041 int ieta, iphi, depth;
00042 float ratio;
00043 double coshEta;
00044
00045
00046 for (HFRecHitCollection::iterator iHF=rec.begin(); iHF!=rec.end();++iHF)
00047 {
00048
00049
00050
00051 ieta =iHF->id().ieta();
00052
00053 coshEta=fabs(cosh(0.5*(theHFEtaBounds[abs(ieta)-29]+theHFEtaBounds[abs(ieta)-28])));
00054
00055 status=0;
00056
00057 en2=-999;
00058 depth=iHF->id().depth();
00059 en=iHF->energy();
00060
00061 if (depth==1)
00062 {
00063 if (en<1.2) continue;
00064 if (long_thresholdEnergy_>0. && en<long_thresholdEnergy_) continue;
00065 if (long_thresholdET_>0. && en<long_thresholdET_*coshEta) continue;
00066 }
00067
00068 else if (depth==2)
00069 {
00070 if (en<1.8) continue;
00071 if (short_thresholdEnergy_>0. && en<short_thresholdEnergy_) continue;
00072 if (short_thresholdET_>0. && en<short_thresholdET_*coshEta) continue;
00073 }
00074
00075 iphi =iHF->id().iphi();
00076
00077
00078
00079
00080 HcalDetId partner(HcalForward, ieta, iphi, 3-depth);
00081 DetId detpartner=DetId(partner);
00082 const HcalChannelStatus* partnerstatus=myqual->getValues(detpartner.rawId());
00083 if (mySeverity->dropChannel(partnerstatus->getValue() ) ) continue;
00084
00085
00086 for (HFRecHitCollection::iterator iHF2=rec.begin(); iHF2!=rec.end();++iHF2)
00087 {
00088 if (iHF2->id().ieta()!=ieta) continue;
00089 if (iHF2->id().iphi()!=iphi) continue;
00090 if (iHF2->id().depth()==depth) continue;
00091
00092 en2=iHF2->energy();
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 ratio = (en - en2)/(en + en2);
00105
00106 if (depth==1 && ratio>long_HFlongshortratio_)
00107 status=1;
00108 else if (depth==2 && ratio>short_HFlongshortratio_)
00109 status=1;
00110 break;
00111 }
00112
00113
00114 if (en2==-999)
00115 status=1;
00116
00117
00118 if (status==1)
00119 iHF->setFlagField(status,HcalCaloFlagLabels::HFLongShort, 1);
00120 }
00121 return;
00122 }