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

Referenced by FastL1GlobalAlgo::FillL1RegionsTP().

991  {
992 
993 
994  const int nscales = 32;
995  /*
996  const int nscales = 27;
997  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,
998  1.044,1.131,1.218,1.305,1.392,1.479,1.566,1.653,1.740,1.830,1.930,
999  2.043,2.172,2.322,2.500};
1000  */
1001 
1002  double scfactor[nscales] = {
1003  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,
1004  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,
1005  1.15,1.15,1.15,1.15,1.15,1.15};
1006 
1007  /*
1008  double scale=1.;
1009  for (int i=0;i<nscales;i++) {
1010  if (std::abs(eta)<etalimit[i]) {
1011  scale = scfactor[i];
1012  }
1013  }
1014  return (scale*et);
1015  */
1016 
1017  if (eta>=0 && eta <=28)
1018  return (scfactor[eta]*et);
1019  else
1020  return et;
1021 }
T eta() const
double corrJetEt ( double  et,
double  eta 
)

Definition at line 833 of file FastL1Region.cc.

References corrJetEt1().

Referenced by FastL1GlobalAlgo::addJet().

834 {
835  return corrJetEt1(et,eta);
836  //return corrJetEt2(et,eta);
837 }
T eta() const
double corrJetEt1(double et, double eta)
double corrJetEt1 ( double  et,
double  eta 
)

Definition at line 930 of file FastL1Region.cc.

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

Referenced by corrJetEt().

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

Definition at line 842 of file FastL1Region.cc.

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

843 {
844  const int NUMBER_ETA_VALUES = 11;
845  std::vector< std::vector<float> > m_calibFunc;
846 
847  m_calibFunc.resize(NUMBER_ETA_VALUES);
848 
849  // still fill manually
850  m_calibFunc.at(0).push_back(1);
851  m_calibFunc.at(0).push_back(1);
852  m_calibFunc.at(0).push_back(2);
853 
854  m_calibFunc.at(1).push_back(1);
855  m_calibFunc.at(1).push_back(2);
856  m_calibFunc.at(1).push_back(2);
857 
858  m_calibFunc.at(2).push_back(2);
859  m_calibFunc.at(2).push_back(2);
860  m_calibFunc.at(2).push_back(2);
861  m_calibFunc.at(2).push_back(2);
862  m_calibFunc.at(2).push_back(3);
863  m_calibFunc.at(2).push_back(3);
864 
865  m_calibFunc.at(3).push_back(1);
866  m_calibFunc.at(3).push_back(1);
867  m_calibFunc.at(3).push_back(3);
868 
869  m_calibFunc.at(4).push_back(1);
870  m_calibFunc.at(4).push_back(3);
871  m_calibFunc.at(4).push_back(3);
872  m_calibFunc.at(4).push_back(6);
873  m_calibFunc.at(4).push_back(6);
874  m_calibFunc.at(4).push_back(6);
875  m_calibFunc.at(4).push_back(6);
876  m_calibFunc.at(4).push_back(6);
877 
878  m_calibFunc.at(5).push_back(3);
879  m_calibFunc.at(5).push_back(3);
880  m_calibFunc.at(5).push_back(3);
881 
882  m_calibFunc.at(6).push_back(1);
883  m_calibFunc.at(6).push_back(1);
884  m_calibFunc.at(6).push_back(4);
885 
886  m_calibFunc.at(7).push_back(1);
887  m_calibFunc.at(7).push_back(4);
888  m_calibFunc.at(7).push_back(4);
889 
890  m_calibFunc.at(8).push_back(4);
891  m_calibFunc.at(8).push_back(4);
892  m_calibFunc.at(8).push_back(4);
893  m_calibFunc.at(8).push_back(1);
894  m_calibFunc.at(8).push_back(1);
895  m_calibFunc.at(8).push_back(1);
896 
897  m_calibFunc.at(9).push_back(1);
898  m_calibFunc.at(9).push_back(1);
899  m_calibFunc.at(9).push_back(5);
900 
901  m_calibFunc.at(10).push_back(1);
902  m_calibFunc.at(10).push_back(5);
903  m_calibFunc.at(10).push_back(5);
904 
905 
906  double etabin[12] = { 0.0, 0.348, 0.696, 1.044, 1.392, 1.74, 2.172, 3.0,
907  3.33, 3.839, 4.439, 5.115};
908  int BinID = 0;
909  for(int i = 0; i < 11; i++){
910  if(std::abs(eta) >= etabin[i] && eta < etabin[i+1])
911  BinID = i;
912  }
913 
914  double corrEt = 0;
915  for (unsigned i=0; i<m_calibFunc.at(BinID).size();i++){
916  corrEt += m_calibFunc.at(BinID).at(i)*pow(et,(int)i);
917  }
918 
919  uint16_t jetEtOut = (uint16_t)corrEt;
920 
921  if(jetEtOut < 1024) {
922  return (double)jetEtOut;
923  }
924  return (double)1023;
925 
926 }
int i
Definition: DBlmapReader.cc:9
#define abs(x)
Definition: mlp_lapack.h:159
T eta() const
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 1041 of file FastL1Region.cc.

References i, and runTheMatrix::ret.

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

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

Definition at line 1026 of file FastL1Region.cc.

References runTheMatrix::ret.

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

1026  {
1027 
1028  //return et;
1029  if (et>=thres) return thres;
1030 
1031  //et += LSB/2.;
1032  //double ret = (int)(et / LSB) * LSB + LSB;
1033  int iEt = (int)(et / LSB);
1034  double ret = (double)iEt * LSB;
1035 
1036  return ret;
1037 }