CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Classes | Functions
FastL1Region.h File Reference
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <list>
#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h"
#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
#include "DataFormats/EcalDetId/interface/EBDetId.h"
#include "DataFormats/EcalDetId/interface/EEDetId.h"
#include "Geometry/Records/interface/IdealGeometryRecord.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "Geometry/CaloTopology/interface/CaloTopology.h"
#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
#include "Geometry/CaloTopology/interface/CaloTowerConstituentsMap.h"
#include "FastSimulation/L1CaloTriggerProducer/interface/FastL1RegionMap.h"
#include "FastSimDataFormats/External/interface/FastL1BitInfo.h"

Go to the source code of this file.

Classes

class  FastL1Region
 
struct  L1Config
 

Functions

double corrEmEt (double et, int eta)
 
double corrJetEt (double et, double eta)
 
double corrJetEt1 (double et, double eta)
 
double corrJetEt2 (double et, double eta)
 
double GCTEnergyTrunc (double et, double LSB=1., bool doEM=false)
 
double RCTEnergyTrunc (double et, double Resol=1., double thres=1024.)
 

Function Documentation

double corrEmEt ( double  et,
int  eta 
)

Definition at line 979 of file FastL1Region.cc.

Referenced by FastL1GlobalAlgo::FillL1RegionsTP().

979  {
980 
981 
982  const int nscales = 32;
983  /*
984  const int nscales = 27;
985  double etalimit[nscales] = { 0.0,0.087,0.174,0.261,0.348,0.435,0.522,0.609,0.696,0.783,0.870,0.957,
986  1.044,1.131,1.218,1.305,1.392,1.479,1.566,1.653,1.740,1.830,1.930,
987  2.043,2.172,2.322,2.500};
988  */
989 
990  double scfactor[nscales] = {
991  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,
992  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,
993  1.15,1.15,1.15,1.15,1.15,1.15};
994 
995  /*
996  double scale=1.;
997  for (int i=0;i<nscales;i++) {
998  if (std::abs(eta)<etalimit[i]) {
999  scale = scfactor[i];
1000  }
1001  }
1002  return (scale*et);
1003  */
1004 
1005  if (eta>=0 && eta <=28)
1006  return (scfactor[eta]*et);
1007  else
1008  return et;
1009 }
T eta() const
double corrJetEt ( double  et,
double  eta 
)

Definition at line 821 of file FastL1Region.cc.

References corrJetEt1().

Referenced by FastL1GlobalAlgo::addJet().

822 {
823  return corrJetEt1(et,eta);
824  //return corrJetEt2(et,eta);
825 }
T eta() const
double corrJetEt1(double et, double eta)
double corrJetEt1 ( double  et,
double  eta 
)

Definition at line 918 of file FastL1Region.cc.

References funct::A, funct::C, F(), i, and mathSSE::sqrt().

Referenced by corrJetEt().

919 {
920  double etabin[23] = {-5.115, -4.439, -3.839, -3.33,
921  -3.0, -2.172, -1.74, -1.392, -1.044, -0.696, -0.348,
922  0.0, 0.348, 0.696, 1.044, 1.392, 1.74, 2.172, 3.0,
923  3.33, 3.839, 4.439, 5.115};
924 
925  int BinID = 0;
926 
927  double domainbin_L[22] = {6.52223337753073373e+00,6.64347505748981959e+00,6.78054870174118296e+00,6.75191887554567405e+00,
928  6.60891660595437802e+00,6.57813476381055473e+00,6.96764764481347232e+00,6.77192746888150943e+00,
929  7.16209661824076260e+00,7.09640803784948027e+00,7.29886808171882517e+00,7.29883431473330546e+00,
930  7.24561741344293875e+00,7.05381822724987995e+00,6.52340799679028827e+00,6.96091042775473401e+00,
931  6.69803071767842262e+00,7.79138848427964259e+00,6.78565437835616603e+00,6.71201461174192904e+00,
932  6.60832257380386334e+00,6.54875448717649267e+00};
933 
934  double domainbin_U[22] = {8.90225568813317558e+00,1.24483653543590922e+01,1.32037091554958987e+01,1.70036104608977681e+01,
935  3.54325008263432011e+01,4.28758696753095450e+01,4.73079850563588025e+01,4.74182802251108981e+01,
936  4.62509826468679748e+01,5.02198002212212913e+01,4.69817029938948352e+01,4.77263481299233732e+01,
937  4.86083837976362076e+01,4.80105593452927337e+01,5.11550616006504200e+01,4.90703092811585861e+01,
938  4.11879629179572788e+01,3.21820720507165845e+01,1.71844078553560529e+01,1.33158534849654764e+01,
939  1.43586396719878149e+01,1.08629843894704248e+01};
940 
941  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,
942  -21.0595,-22.1007,-22.658,-23.6898,-24.8888,-23.3246,-21.5343,-6.41221,-4.58952,-3.17222,0.637666};
943 
944  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,
945  0.781097,0.768022,0.740101,0.774782,0.788106,0.814502,0.686877,0.709556,0.628581,0.317453};
946 
947  double C[22] = {0.00409083,0.000235995,8.22958e-05,2.47567e-05,0.000127995,0.000132914,0.000133342,0.000133035,0.000125993,
948  8.25968e-05,9.94442e-05,9.11652e-05,0.000109351,0.000115883,0.00011112,0.000122559,0.00015868,0.000152601,
949  0.000112927,6.29999e-05,0.000741798,0.00274605};
950 
951  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,
952  4.48249,5.2734,5.51785,8.00182,6.21742,6.96692,7.22975,8.12257};
953 
954  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,
955  0.170689,0.155268,0.174603,0.133432,0.0719798,-0.0921457,-0.0525274,-0.208415,-0.253542,-0.318476};
956 
957  double F[22] = {0.0171799,0.0202499,0.0186897,0.0115477,0.00603883,0.00446235,0.00363449,0.00318894,0.00361997,0.00341508,
958  0.00366392,0.0036545,0.00352303,0.00349116,0.00294891,0.00353187,0.00460384,0.00711028,0.0109351,0.0182924,
959  0.01914,0.0161094};
960 
961  for(int i = 0; i < 22; i++){
962  if(eta > etabin[i] && eta <= etabin[i+1])
963  BinID = i;
964  }
965 
966  if(et >= domainbin_U[BinID]){
967  return 2*(et-A[BinID])/(B[BinID]+sqrt(B[BinID]*B[BinID]-4*A[BinID]*C[BinID]+4*et*C[BinID]));
968  }
969  else if(et > domainbin_L[BinID]){
970  return 2*(et-D[BinID])/(E[BinID]+sqrt(E[BinID]*E[BinID]-4*D[BinID]*F[BinID]+4*et*F[BinID]));
971  }
972  else return et;
973 }
int i
Definition: DBlmapReader.cc:9
T eta() const
T sqrt(T t)
Definition: SSEVec.h:48
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:150
double corrJetEt2 ( double  et,
double  eta 
)

Definition at line 830 of file FastL1Region.cc.

References funct::abs(), i, and funct::pow().

831 {
832  const int NUMBER_ETA_VALUES = 11;
833  std::vector< std::vector<float> > m_calibFunc;
834 
835  m_calibFunc.resize(NUMBER_ETA_VALUES);
836 
837  // still fill manually
838  m_calibFunc.at(0).push_back(1);
839  m_calibFunc.at(0).push_back(1);
840  m_calibFunc.at(0).push_back(2);
841 
842  m_calibFunc.at(1).push_back(1);
843  m_calibFunc.at(1).push_back(2);
844  m_calibFunc.at(1).push_back(2);
845 
846  m_calibFunc.at(2).push_back(2);
847  m_calibFunc.at(2).push_back(2);
848  m_calibFunc.at(2).push_back(2);
849  m_calibFunc.at(2).push_back(2);
850  m_calibFunc.at(2).push_back(3);
851  m_calibFunc.at(2).push_back(3);
852 
853  m_calibFunc.at(3).push_back(1);
854  m_calibFunc.at(3).push_back(1);
855  m_calibFunc.at(3).push_back(3);
856 
857  m_calibFunc.at(4).push_back(1);
858  m_calibFunc.at(4).push_back(3);
859  m_calibFunc.at(4).push_back(3);
860  m_calibFunc.at(4).push_back(6);
861  m_calibFunc.at(4).push_back(6);
862  m_calibFunc.at(4).push_back(6);
863  m_calibFunc.at(4).push_back(6);
864  m_calibFunc.at(4).push_back(6);
865 
866  m_calibFunc.at(5).push_back(3);
867  m_calibFunc.at(5).push_back(3);
868  m_calibFunc.at(5).push_back(3);
869 
870  m_calibFunc.at(6).push_back(1);
871  m_calibFunc.at(6).push_back(1);
872  m_calibFunc.at(6).push_back(4);
873 
874  m_calibFunc.at(7).push_back(1);
875  m_calibFunc.at(7).push_back(4);
876  m_calibFunc.at(7).push_back(4);
877 
878  m_calibFunc.at(8).push_back(4);
879  m_calibFunc.at(8).push_back(4);
880  m_calibFunc.at(8).push_back(4);
881  m_calibFunc.at(8).push_back(1);
882  m_calibFunc.at(8).push_back(1);
883  m_calibFunc.at(8).push_back(1);
884 
885  m_calibFunc.at(9).push_back(1);
886  m_calibFunc.at(9).push_back(1);
887  m_calibFunc.at(9).push_back(5);
888 
889  m_calibFunc.at(10).push_back(1);
890  m_calibFunc.at(10).push_back(5);
891  m_calibFunc.at(10).push_back(5);
892 
893 
894  double etabin[12] = { 0.0, 0.348, 0.696, 1.044, 1.392, 1.74, 2.172, 3.0,
895  3.33, 3.839, 4.439, 5.115};
896  int BinID = 0;
897  for(int i = 0; i < 11; i++){
898  if(std::abs(eta) >= etabin[i] && eta < etabin[i+1])
899  BinID = i;
900  }
901 
902  double corrEt = 0;
903  for (unsigned i=0; i<m_calibFunc.at(BinID).size();i++){
904  corrEt += m_calibFunc.at(BinID).at(i)*pow(et,(int)i);
905  }
906 
907  uint16_t jetEtOut = (uint16_t)corrEt;
908 
909  if(jetEtOut < 1024) {
910  return (double)jetEtOut;
911  }
912  return (double)1023;
913 
914 }
int i
Definition: DBlmapReader.cc:9
T eta() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
double GCTEnergyTrunc ( double  et,
double  LSB = 1.,
bool  doEM = false 
)

Definition at line 1029 of file FastL1Region.cc.

References i, and run_regression::ret.

Referenced by FastL1GlobalAlgo::addJet(), and FastL1GlobalAlgo::isEMCand().

1029  {
1030 
1031  //return et;
1032 
1033  //double L1CaloEmEtScaleLSB = LSB;
1034  //double L1CaloRegionEtScaleLSB = LSB;
1035 
1036  //if (et>0.) et += LSB/2.; // round up
1037 
1038  double L1CaloEmThresholds[64] = {
1039  0., 1., 2., 3., 4., 5., 6., 7., 8., 9.,
1040  10., 11., 12., 13., 14., 15., 16., 17., 18., 19.,
1041  20., 21., 22., 23., 24., 25., 26., 27., 28., 29.,
1042  30., 31., 32., 33., 34., 35., 36., 37., 38., 39.,
1043  40., 41., 42., 43., 44., 45., 46., 47., 48., 49.,
1044  50., 51., 52., 53., 54., 55., 56., 57., 58., 59.,
1045  60., 61., 62., 63.
1046  };
1047 
1048  double L1CaloJetThresholds[64] = {
1049  0., 10., 12., 14., 15., 18., 20., 22., 24., 25.,
1050  28., 30., 32., 35., 37., 40., 45., 50., 55., 60.,
1051  65., 70., 75., 80., 85., 90., 100., 110., 120., 125.,
1052  130., 140., 150., 160., 170., 175., 180., 190., 200., 215.,
1053  225., 235., 250., 275., 300., 325., 350., 375., 400., 425.,
1054  450., 475., 500., 525., 550., 575., 600., 625., 650., 675.,
1055  700., 725., 750., 775.
1056  };
1057 
1058 
1059 
1060  double L1CaloThresholds[64];
1061  if (doEM) {
1062  for (int i=0;i<64;i++)
1063  L1CaloThresholds[i] = L1CaloEmThresholds[i];
1064  } else {
1065  for (int i=0;i<64;i++)
1066  L1CaloThresholds[i] = L1CaloJetThresholds[i];
1067  }
1068 
1069 
1070  double ret = 0.;
1071  for (int i=63;i>0;i--) {
1072  if (et>=(L1CaloThresholds[i])) {
1073  if (i==63) {
1074  ret = L1CaloThresholds[63];
1075  } else {
1076  /*
1077  double minL = std::abs(et - L1CaloThresholds[i]);
1078  double minU = std::abs(et - L1CaloThresholds[i+1]);
1079  if (minL<minU)
1080  ret = L1CaloThresholds[i];
1081  else
1082  ret = L1CaloThresholds[i+1];
1083  */
1084  /*
1085  if (doEM) {
1086  ret = L1CaloThresholds[i];
1087  } else {
1088  ret = L1CaloThresholds[i+1];
1089  }
1090  */
1091  ret = L1CaloThresholds[i];
1092  }
1093  break;
1094  }
1095  }
1096  return ret;
1097 }
int i
Definition: DBlmapReader.cc:9
double RCTEnergyTrunc ( double  et,
double  Resol = 1.,
double  thres = 1024. 
)

Definition at line 1014 of file FastL1Region.cc.

References run_regression::ret.

Referenced by FastL1GlobalAlgo::FillMET(), FastL1Region::FillTower(), and FastL1Region::FillTower_Scaled().

1014  {
1015 
1016  //return et;
1017  if (et>=thres) return thres;
1018 
1019  //et += LSB/2.;
1020  //double ret = (int)(et / LSB) * LSB + LSB;
1021  int iEt = (int)(et / LSB);
1022  double ret = (double)iEt * LSB;
1023 
1024  return ret;
1025 }