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 961 of file FastL1Region.cc.

Referenced by FastL1GlobalAlgo::FillL1RegionsTP().

961  {
962 
963 
964  const int nscales = 32;
965  /*
966  const int nscales = 27;
967  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,
968  1.044,1.131,1.218,1.305,1.392,1.479,1.566,1.653,1.740,1.830,1.930,
969  2.043,2.172,2.322,2.500};
970  */
971 
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};
976 
977  /*
978  double scale=1.;
979  for (int i=0;i<nscales;i++) {
980  if (std::abs(eta)<etalimit[i]) {
981  scale = scfactor[i];
982  }
983  }
984  return (scale*et);
985  */
986 
987  if (eta>=0 && eta <=28)
988  return (scfactor[eta]*et);
989  else
990  return et;
991 }
T eta() const
double corrJetEt ( double  et,
double  eta 
)

Definition at line 803 of file FastL1Region.cc.

References corrJetEt1().

Referenced by FastL1GlobalAlgo::addJet().

804 {
805  return corrJetEt1(et,eta);
806  //return corrJetEt2(et,eta);
807 }
T eta() const
double corrJetEt1(double et, double eta)
double corrJetEt1 ( double  et,
double  eta 
)

Definition at line 900 of file FastL1Region.cc.

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

Referenced by corrJetEt().

901 {
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};
906 
907  int BinID = 0;
908 
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};
915 
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};
922 
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};
925 
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};
928 
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};
932 
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};
935 
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};
938 
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,
941  0.01914,0.0161094};
942 
943  for(int i = 0; i < 22; i++){
944  if(eta > etabin[i] && eta <= etabin[i+1])
945  BinID = i;
946  }
947 
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]));
950  }
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]));
953  }
954  else return et;
955 }
int i
Definition: DBlmapReader.cc:9
T eta() const
T sqrt(T t)
Definition: SSEVec.h:48
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:150
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
double corrJetEt2 ( double  et,
double  eta 
)

Definition at line 812 of file FastL1Region.cc.

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

813 {
814  const int NUMBER_ETA_VALUES = 11;
815  std::vector< std::vector<float> > m_calibFunc;
816 
817  m_calibFunc.resize(NUMBER_ETA_VALUES);
818 
819  // still fill manually
820  m_calibFunc.at(0).push_back(1);
821  m_calibFunc.at(0).push_back(1);
822  m_calibFunc.at(0).push_back(2);
823 
824  m_calibFunc.at(1).push_back(1);
825  m_calibFunc.at(1).push_back(2);
826  m_calibFunc.at(1).push_back(2);
827 
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);
834 
835  m_calibFunc.at(3).push_back(1);
836  m_calibFunc.at(3).push_back(1);
837  m_calibFunc.at(3).push_back(3);
838 
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);
847 
848  m_calibFunc.at(5).push_back(3);
849  m_calibFunc.at(5).push_back(3);
850  m_calibFunc.at(5).push_back(3);
851 
852  m_calibFunc.at(6).push_back(1);
853  m_calibFunc.at(6).push_back(1);
854  m_calibFunc.at(6).push_back(4);
855 
856  m_calibFunc.at(7).push_back(1);
857  m_calibFunc.at(7).push_back(4);
858  m_calibFunc.at(7).push_back(4);
859 
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);
866 
867  m_calibFunc.at(9).push_back(1);
868  m_calibFunc.at(9).push_back(1);
869  m_calibFunc.at(9).push_back(5);
870 
871  m_calibFunc.at(10).push_back(1);
872  m_calibFunc.at(10).push_back(5);
873  m_calibFunc.at(10).push_back(5);
874 
875 
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};
878  int BinID = 0;
879  for(int i = 0; i < 11; i++){
880  if(std::abs(eta) >= etabin[i] && eta < etabin[i+1])
881  BinID = i;
882  }
883 
884  double corrEt = 0;
885  for (unsigned i=0; i<m_calibFunc.at(BinID).size();i++){
886  corrEt += m_calibFunc.at(BinID).at(i)*pow(et,(int)i);
887  }
888 
889  uint16_t jetEtOut = (uint16_t)corrEt;
890 
891  if(jetEtOut < 1024) {
892  return (double)jetEtOut;
893  }
894  return (double)1023;
895 
896 }
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 1011 of file FastL1Region.cc.

References i, and run_regression::ret.

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

1011  {
1012 
1013  //return et;
1014 
1015  //double L1CaloEmEtScaleLSB = LSB;
1016  //double L1CaloRegionEtScaleLSB = LSB;
1017 
1018  //if (et>0.) et += LSB/2.; // round up
1019 
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.,
1027  60., 61., 62., 63.
1028  };
1029 
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.
1038  };
1039 
1040 
1041 
1042  double L1CaloThresholds[64];
1043  if (doEM) {
1044  for (int i=0;i<64;i++)
1045  L1CaloThresholds[i] = L1CaloEmThresholds[i];
1046  } else {
1047  for (int i=0;i<64;i++)
1048  L1CaloThresholds[i] = L1CaloJetThresholds[i];
1049  }
1050 
1051 
1052  double ret = 0.;
1053  for (int i=63;i>0;i--) {
1054  if (et>=(L1CaloThresholds[i])) {
1055  if (i==63) {
1056  ret = L1CaloThresholds[63];
1057  } else {
1058  /*
1059  double minL = std::abs(et - L1CaloThresholds[i]);
1060  double minU = std::abs(et - L1CaloThresholds[i+1]);
1061  if (minL<minU)
1062  ret = L1CaloThresholds[i];
1063  else
1064  ret = L1CaloThresholds[i+1];
1065  */
1066  /*
1067  if (doEM) {
1068  ret = L1CaloThresholds[i];
1069  } else {
1070  ret = L1CaloThresholds[i+1];
1071  }
1072  */
1073  ret = L1CaloThresholds[i];
1074  }
1075  break;
1076  }
1077  }
1078  return ret;
1079 }
int i
Definition: DBlmapReader.cc:9
double RCTEnergyTrunc ( double  et,
double  Resol = 1.,
double  thres = 1024. 
)

Definition at line 996 of file FastL1Region.cc.

References run_regression::ret.

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

996  {
997 
998  //return et;
999  if (et>=thres) return thres;
1000 
1001  //et += LSB/2.;
1002  //double ret = (int)(et / LSB) * LSB + LSB;
1003  int iEt = (int)(et / LSB);
1004  double ret = (double)iEt * LSB;
1005 
1006  return ret;
1007 }