36 for(
int i=0;
i<16;
i++) {
40 for (
int j=0;
j<25;
j++) {
143 ecItr != ec0->
end(); ++ecItr) {
145 if (ecItr->energy()<ethres)
continue;
147 EBDetId detId = ecItr->detid();
151 int eieta = detId.
ieta();
152 int eiphi = detId.
iphi();
155 crIeta = (eieta-1)%5;
157 crIeta = 4 + (eieta+1)%5;
158 int crIphi = (eiphi - 1)%5;
164 for(
int i=0;
i<16;
i++) {
184 double towerEnergy[16];
186 for(
int i=0;
i<16;
i++) {
211 double maxRecHit=-1.;
212 double maxRecHit2=-1.;
218 ecItr != ec1->
end(); ++ecItr) {
220 if (ecItr->energy()<ethres)
continue;
222 EEDetId detId = ecItr->detid();
226 int hiphi = towerDetId.
iphi();
229 if (maxRecHit<ecItr->
energy()) {
230 maxRecHit = ecItr->energy();
236 std::vector<DetId> westV = calotopo->
west(maxDetId);
237 std::vector<DetId> eastV = calotopo->
east(maxDetId);
238 std::vector<DetId> southV = calotopo->
south(maxDetId);
239 std::vector<DetId> northV = calotopo->
north(maxDetId);
241 ecItr != ec1->
end(); ++ecItr) {
243 if (ecItr->energy()<ethres)
continue;
245 EEDetId detId = ecItr->detid();
249 int hiphi = towerDetId.
iphi();
253 (!westV.empty() && detId==westV[0]) ||
254 (!eastV.empty() && detId==eastV[0]) ||
255 (!northV.empty() && detId==northV[0]) ||
256 (!southV.empty() && detId==southV[0])
258 if (maxRecHit2<ecItr->
energy()) {
259 maxRecHit2 = ecItr->energy();
261 max2En += ecItr->energy();
268 double totE = maxRecHit + maxRecHit2;
272 if (totE/towerEnergy[
i]<eeThres)
fgBit[
i] =
true;
310 double upperThres = 1024.;
316 if ( emet<EThres) emet = 0.;
317 if ( hadet<HThres) hadet = 0.;
352 double emScale = 1.0;
353 double hadScale = 1.0;
365 double emet = emScale * t.
emEt();
366 double hadet = hadScale * t.
hadEt();
369 double upperThres = 1024.;
373 if ( emet<EThres) emet = 0.;
374 if ( hadet<HThres) hadet = 0.;
406 for (
int i=0;
i<16;
i++) {
427 for (
unsigned int i = 0U;
i < 16;
i++) {
439 fgBit[twrid] = FGBIT;
453 double stripEnergy[16][5];
454 double duostripEnergy[16][4];
455 double towerEnergy[16];
459 for (
int i=0;
i<16;
i++) {
480 for (
int j=0;
j<5;
j++) {
484 for (
int j=0;
j<4;
j++) {
485 duostripEnergy[
i][
j] = stripEnergy[
i][
j] + stripEnergy[
i][
j+1];
488 if ( (duostripEnergy[
i][
j] / towerEnergy[
i]) > ratioCut) {
513 static const std::vector<unsigned>
vetoPatterns = { 5, 7, 9, 10,11,13,14,15};
527 unsigned emEtaPat = 0;
528 unsigned emPhiPat = 0;
529 unsigned hadEtaPat = 0;
530 unsigned hadPhiPat = 0;
535 for (
int i=0;
i<16;
i++) {
536 if(
Towers[
i].emEt() > emThres) {
537 emEtaPat |= (one << (unsigned)(
i%4));
538 emPhiPat |= (one << (unsigned)(
i/4));
541 if(
Towers[
i].hadEt() > hadThres) {
542 hadEtaPat |= (one << (unsigned)(
i%4));
543 hadPhiPat |= (one << (unsigned)(
i/4));
548 for(std::vector<unsigned>::const_iterator
i =
vetoPatterns.begin();
550 unsigned etaPattern = emEtaPat | hadEtaPat;
551 unsigned phiPattern = emPhiPat | hadPhiPat;
554 if(emEtaPat == *
i || emPhiPat == *
i) {
558 if(hadEtaPat == *
i || hadPhiPat == *
i) {
562 if(etaPattern == *
i || phiPattern == *
i)
581 for (
int i=0;
i<16;
i++) {
598 for (
int i=0;
i<16;
i++) {
599 if ( (
Towers[
i].emEt()) > tmpet) {
614 for (
int i=0;
i<16;
i++) {
615 if ( (
Towers[
i].hadEt()) > tmpet) {
629 for (
int i=0;
i<16;
i++) {
641 for (
int i=0;
i<16;
i++) {
652 for (
int i=0;
i<16;
i++) {
663 for (
int i=0;
i<16;
i++) {
675 for (
int i=0;
i<16;
i++) {
685 for (
int i=0;
i<16;
i++) {
692 std::pair<double, double>
706 return std::pair<double, double>(
eta,
phi);
745 {
if (
ieta != 0)
return (
iphi*22 +
ieta-1);
else return 999; }
749 {
if (
ieta != 21)
return (
iphi*22 +
ieta+1);
else return 999; }
771 return (17*22 +
ieta-1);
796 return (17*22 +
ieta+1);
814 const int NUMBER_ETA_VALUES = 11;
815 std::vector< std::vector<float> > m_calibFunc;
817 m_calibFunc.resize(NUMBER_ETA_VALUES);
820 m_calibFunc.at(0).push_back(1);
821 m_calibFunc.at(0).push_back(1);
822 m_calibFunc.at(0).push_back(2);
824 m_calibFunc.at(1).push_back(1);
825 m_calibFunc.at(1).push_back(2);
826 m_calibFunc.at(1).push_back(2);
828 m_calibFunc.at(2).push_back(2);
829 m_calibFunc.at(2).push_back(2);
830 m_calibFunc.at(2).push_back(2);
831 m_calibFunc.at(2).push_back(2);
832 m_calibFunc.at(2).push_back(3);
833 m_calibFunc.at(2).push_back(3);
835 m_calibFunc.at(3).push_back(1);
836 m_calibFunc.at(3).push_back(1);
837 m_calibFunc.at(3).push_back(3);
839 m_calibFunc.at(4).push_back(1);
840 m_calibFunc.at(4).push_back(3);
841 m_calibFunc.at(4).push_back(3);
842 m_calibFunc.at(4).push_back(6);
843 m_calibFunc.at(4).push_back(6);
844 m_calibFunc.at(4).push_back(6);
845 m_calibFunc.at(4).push_back(6);
846 m_calibFunc.at(4).push_back(6);
848 m_calibFunc.at(5).push_back(3);
849 m_calibFunc.at(5).push_back(3);
850 m_calibFunc.at(5).push_back(3);
852 m_calibFunc.at(6).push_back(1);
853 m_calibFunc.at(6).push_back(1);
854 m_calibFunc.at(6).push_back(4);
856 m_calibFunc.at(7).push_back(1);
857 m_calibFunc.at(7).push_back(4);
858 m_calibFunc.at(7).push_back(4);
860 m_calibFunc.at(8).push_back(4);
861 m_calibFunc.at(8).push_back(4);
862 m_calibFunc.at(8).push_back(4);
863 m_calibFunc.at(8).push_back(1);
864 m_calibFunc.at(8).push_back(1);
865 m_calibFunc.at(8).push_back(1);
867 m_calibFunc.at(9).push_back(1);
868 m_calibFunc.at(9).push_back(1);
869 m_calibFunc.at(9).push_back(5);
871 m_calibFunc.at(10).push_back(1);
872 m_calibFunc.at(10).push_back(5);
873 m_calibFunc.at(10).push_back(5);
876 double etabin[12] = { 0.0, 0.348, 0.696, 1.044, 1.392, 1.74, 2.172, 3.0,
877 3.33, 3.839, 4.439, 5.115};
879 for(
int i = 0;
i < 11;
i++){
880 if(
std::abs(eta) >= etabin[
i] && eta < etabin[
i+1])
885 for (
unsigned i=0;
i<m_calibFunc.at(BinID).size();
i++){
886 corrEt += m_calibFunc.at(BinID).at(
i)*
pow(et,(
int)
i);
889 uint16_t jetEtOut = (uint16_t)corrEt;
891 if(jetEtOut < 1024) {
892 return (
double)jetEtOut;
902 double etabin[23] = {-5.115, -4.439, -3.839, -3.33,
903 -3.0, -2.172, -1.74, -1.392, -1.044, -0.696, -0.348,
904 0.0, 0.348, 0.696, 1.044, 1.392, 1.74, 2.172, 3.0,
905 3.33, 3.839, 4.439, 5.115};
909 double domainbin_L[22] = {6.52223337753073373e+00,6.64347505748981959e+00,6.78054870174118296e+00,6.75191887554567405e+00,
910 6.60891660595437802e+00,6.57813476381055473e+00,6.96764764481347232e+00,6.77192746888150943e+00,
911 7.16209661824076260e+00,7.09640803784948027e+00,7.29886808171882517e+00,7.29883431473330546e+00,
912 7.24561741344293875e+00,7.05381822724987995e+00,6.52340799679028827e+00,6.96091042775473401e+00,
913 6.69803071767842262e+00,7.79138848427964259e+00,6.78565437835616603e+00,6.71201461174192904e+00,
914 6.60832257380386334e+00,6.54875448717649267e+00};
916 double domainbin_U[22] = {8.90225568813317558e+00,1.24483653543590922e+01,1.32037091554958987e+01,1.70036104608977681e+01,
917 3.54325008263432011e+01,4.28758696753095450e+01,4.73079850563588025e+01,4.74182802251108981e+01,
918 4.62509826468679748e+01,5.02198002212212913e+01,4.69817029938948352e+01,4.77263481299233732e+01,
919 4.86083837976362076e+01,4.80105593452927337e+01,5.11550616006504200e+01,4.90703092811585861e+01,
920 4.11879629179572788e+01,3.21820720507165845e+01,1.71844078553560529e+01,1.33158534849654764e+01,
921 1.43586396719878149e+01,1.08629843894704248e+01};
923 double A[22] = {2.03682,-4.36824,-4.45258,-6.76524,-22.5984,-24.5289,-24.0313,-22.1896,-21.7818,-22.9882,-20.3321,
924 -21.0595,-22.1007,-22.658,-23.6898,-24.8888,-23.3246,-21.5343,-6.41221,-4.58952,-3.17222,0.637666};
926 double B[22] = {0.226303,0.683099,0.704578,0.704623,0.825928,0.80086,0.766475,0.726059,0.760964,0.792227,0.789188,0.795219,
927 0.781097,0.768022,0.740101,0.774782,0.788106,0.814502,0.686877,0.709556,0.628581,0.317453};
929 double C[22] = {0.00409083,0.000235995,8.22958e-05,2.47567e-05,0.000127995,0.000132914,0.000133342,0.000133035,0.000125993,
930 8.25968e-05,9.94442e-05,9.11652e-05,0.000109351,0.000115883,0.00011112,0.000122559,0.00015868,0.000152601,
931 0.000112927,6.29999e-05,0.000741798,0.00274605};
933 double D[22] = {8.24022,7.55916,7.16448,6.31577,5.96339,5.31203,5.35456,4.95243,5.34809,4.93339,5.05723,5.08575,5.18643,5.15202,
934 4.48249,5.2734,5.51785,8.00182,6.21742,6.96692,7.22975,8.12257};
936 double E[22] = {-0.343598,-0.294067,-0.22529,-0.0718625,0.004164,0.081987,0.124964,0.15006,0.145201,0.182151,0.187525,0.184763,
937 0.170689,0.155268,0.174603,0.133432,0.0719798,-0.0921457,-0.0525274,-0.208415,-0.253542,-0.318476};
939 double F[22] = {0.0171799,0.0202499,0.0186897,0.0115477,0.00603883,0.00446235,0.00363449,0.00318894,0.00361997,0.00341508,
940 0.00366392,0.0036545,0.00352303,0.00349116,0.00294891,0.00353187,0.00460384,0.00711028,0.0109351,0.0182924,
943 for(
int i = 0;
i < 22;
i++){
944 if(eta > etabin[
i] && eta <= etabin[
i+1])
948 if(et >= domainbin_U[BinID]){
949 return 2*(et-A[BinID])/(B[BinID]+
sqrt(B[BinID]*B[BinID]-4*A[BinID]*C[BinID]+4*et*C[BinID]));
951 else if(et > domainbin_L[BinID]){
952 return 2*(et-D[BinID])/(E[BinID]+
sqrt(E[BinID]*E[BinID]-4*D[BinID]*F[BinID]+4*et*F[BinID]));
964 const int nscales = 32;
972 double scfactor[nscales] = {
973 1.00,1.01,1.02,1.02,1.02,1.06,1.04,1.04,1.05,1.09,1.10,1.10,1.15,
974 1.20,1.27,1.29,1.32,1.52,1.52,1.48,1.40,1.32,1.26,1.21,1.17,1.15,
975 1.15,1.15,1.15,1.15,1.15,1.15};
987 if (eta>=0 && eta <=28)
988 return (scfactor[eta]*et);
999 if (et>=thres)
return thres;
1003 int iEt = (int)(et / LSB);
1004 double ret = (double)iEt * LSB;
1020 double L1CaloEmThresholds[64] = {
1021 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.,
1022 10., 11., 12., 13., 14., 15., 16., 17., 18., 19.,
1023 20., 21., 22., 23., 24., 25., 26., 27., 28., 29.,
1024 30., 31., 32., 33., 34., 35., 36., 37., 38., 39.,
1025 40., 41., 42., 43., 44., 45., 46., 47., 48., 49.,
1026 50., 51., 52., 53., 54., 55., 56., 57., 58., 59.,
1030 double L1CaloJetThresholds[64] = {
1031 0., 10., 12., 14., 15., 18., 20., 22., 24., 25.,
1032 28., 30., 32., 35., 37., 40., 45., 50., 55., 60.,
1033 65., 70., 75., 80., 85., 90., 100., 110., 120., 125.,
1034 130., 140., 150., 160., 170., 175., 180., 190., 200., 215.,
1035 225., 235., 250., 275., 300., 325., 350., 375., 400., 425.,
1036 450., 475., 500., 525., 550., 575., 600., 625., 650., 675.,
1037 700., 725., 750., 775.
1042 double L1CaloThresholds[64];
1044 for (
int i=0;
i<64;
i++)
1045 L1CaloThresholds[
i] = L1CaloEmThresholds[
i];
1047 for (
int i=0;
i<64;
i++)
1048 L1CaloThresholds[
i] = L1CaloJetThresholds[
i];
1053 for (
int i=63;
i>0;
i--) {
1054 if (et>=(L1CaloThresholds[
i])) {
1056 ret = L1CaloThresholds[63];
1073 ret = L1CaloThresholds[
i];
double corrJetEt(double et, double eta)
void SetRegionBits(edm::Event const &e)
std::pair< double, double > getRegionCenterEtaPhi(const edm::EventSetup &c)
void setTauVeto(bool tauVeto)
double corrJetEt2(double et, double eta)
double QuietRegionThreshold
int tower_ieta() const
get the HCAL/trigger ieta of this crystal
int tower_iphi() const
get the HCAL/trigger iphi of this crystal
Geom::Phi< T > phi() const
std::vector< EcalRecHit >::const_iterator const_iterator
void setHighestEtTowerID(int id)
void FillEMCrystals(const CaloTowerConstituentsMap *theTowerConstituentsMap, const CaloTopology *calotopo, const CaloGeometry *cGeom, const EcalRecHitCollection *ec0, const EcalRecHitCollection *ec1, FastL1RegionMap *m_RMap)
int iphi() const
get the crystal iphi
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
virtual double energy() const
energy
void setHadTauVeto(bool hadTauVeto)
CaloTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
double CrystalEBThreshold
virtual float eta() const
momentum pseudorapidity
double JetSeedEtThreshold
int iphi() const
get the tower iphi
Abs< T >::type abs(const T &t)
std::vector< DetId > east(const DetId &id) const
Get the neighbors of the given cell in east direction.
double GCTEnergyTrunc(double et, double LSB=1., bool doEM=false)
int ieta() const
get the crystal ieta
void FillTowerZero(const CaloTower &t, int &tid)
std::vector< DetId > north(const DetId &id) const
Get the neighbors of the given cell in north direction.
const_iterator end() const
double corrEmEt(double et, int eta)
CaloTowerDetId id() const
void setIsolationVeto(bool isolationVeto)
DecomposeProduct< arg, typename Div::arg > D
CaloTowerCollection Towers
std::vector< DetId > west(const DetId &id) const
Get the neighbors of the given cell in west direction.
virtual double px() const
x coordinate of momentum vector
void setEmTauVeto(bool emTauVeto)
double EMCrystalEnergy[16][25]
void setHighestHadEtTowerID(int id)
double corrJetEt1(double et, double eta)
edm::SortedCollection< CaloTower > CaloTowerCollection
double CrystalEEThreshold
void SetTauBit(edm::Event const &e)
double RCTEnergyTrunc(double et, double Resol=1., double thres=1024.)
void FillTower(const CaloTower &t, int &tid, edm::ESHandle< CaloGeometry > &cGeom)
int ieta() const
get the tower ieta
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
void FillTower_Scaled(const CaloTower &t, int &tid, bool doRCTTrunc, edm::ESHandle< CaloGeometry > &cGeom)
int HighestHadEtTowerID()
static const std::vector< unsigned > vetoPatterns
virtual double py() const
y coordinate of momentum vector
Power< A, B >::type pow(const A &a, const B &b)
void SetParameters(const L1Config &)
std::vector< DetId > south(const DetId &id) const
Get the neighbors of the given cell in south direction.
void setHighestEmEtTowerID(int id)
const_iterator begin() const