CMS 3D CMS Logo

Functions

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/FastSimulation/L1CaloTriggerProducer/src/FastL1Region.cc File Reference

#include "FastSimulation/L1CaloTriggerProducer/interface/FastL1Region.h"

Go to the source code of this file.

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, bool doEM)
double RCTEnergyTrunc (double et, double LSB, double thres)

Function Documentation

double corrEmEt ( double  et,
int  eta 
)

Definition at line 991 of file FastL1Region.cc.

Referenced by FastL1GlobalAlgo::FillL1RegionsTP().

                             {


  const int nscales = 32;
  /*
  const int nscales = 27;
  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,
                          1.044,1.131,1.218,1.305,1.392,1.479,1.566,1.653,1.740,1.830,1.930,
                          2.043,2.172,2.322,2.500};
  */

  double scfactor[nscales] = { 
    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,
    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, 
    1.15,1.15,1.15,1.15,1.15,1.15};

  /*
  double scale=1.;
  for (int i=0;i<nscales;i++) {
    if (std::abs(eta)<etalimit[i]) {
      scale = scfactor[i];
    }
  }
    return (scale*et);
  */

  if (eta>=0 && eta <=28)
    return (scfactor[eta]*et);
  else
    return et;
}
double corrJetEt ( double  et,
double  eta 
)

Definition at line 833 of file FastL1Region.cc.

References corrJetEt1().

Referenced by FastL1GlobalAlgo::addJet().

{
  return corrJetEt1(et,eta);
  //return corrJetEt2(et,eta);
}
double corrJetEt1 ( double  et,
double  eta 
)

Definition at line 930 of file FastL1Region.cc.

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

Referenced by corrJetEt().

{
  double etabin[23] = {-5.115, -4.439, -3.839, -3.33, 
                        -3.0, -2.172, -1.74, -1.392, -1.044, -0.696, -0.348, 
                        0.0, 0.348, 0.696, 1.044, 1.392, 1.74, 2.172, 3.0,
                        3.33, 3.839, 4.439, 5.115};

  int BinID = 0;
      
  double domainbin_L[22] = {6.52223337753073373e+00,6.64347505748981959e+00,6.78054870174118296e+00,6.75191887554567405e+00,
                            6.60891660595437802e+00,6.57813476381055473e+00,6.96764764481347232e+00,6.77192746888150943e+00,
                            7.16209661824076260e+00,7.09640803784948027e+00,7.29886808171882517e+00,7.29883431473330546e+00,
                            7.24561741344293875e+00,7.05381822724987995e+00,6.52340799679028827e+00,6.96091042775473401e+00,
                            6.69803071767842262e+00,7.79138848427964259e+00,6.78565437835616603e+00,6.71201461174192904e+00,
                            6.60832257380386334e+00,6.54875448717649267e+00};

  double domainbin_U[22] = {8.90225568813317558e+00,1.24483653543590922e+01,1.32037091554958987e+01,1.70036104608977681e+01,
                            3.54325008263432011e+01,4.28758696753095450e+01,4.73079850563588025e+01,4.74182802251108981e+01,
                            4.62509826468679748e+01,5.02198002212212913e+01,4.69817029938948352e+01,4.77263481299233732e+01,
                            4.86083837976362076e+01,4.80105593452927337e+01,5.11550616006504200e+01,4.90703092811585861e+01,
                            4.11879629179572788e+01,3.21820720507165845e+01,1.71844078553560529e+01,1.33158534849654764e+01,
                            1.43586396719878149e+01,1.08629843894704248e+01};

  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,
                  -21.0595,-22.1007,-22.658,-23.6898,-24.8888,-23.3246,-21.5343,-6.41221,-4.58952,-3.17222,0.637666};

  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,
                  0.781097,0.768022,0.740101,0.774782,0.788106,0.814502,0.686877,0.709556,0.628581,0.317453};
  
  double C[22] = {0.00409083,0.000235995,8.22958e-05,2.47567e-05,0.000127995,0.000132914,0.000133342,0.000133035,0.000125993,
                  8.25968e-05,9.94442e-05,9.11652e-05,0.000109351,0.000115883,0.00011112,0.000122559,0.00015868,0.000152601,
                  0.000112927,6.29999e-05,0.000741798,0.00274605};

  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,
                  4.48249,5.2734,5.51785,8.00182,6.21742,6.96692,7.22975,8.12257};
  
  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,
                  0.170689,0.155268,0.174603,0.133432,0.0719798,-0.0921457,-0.0525274,-0.208415,-0.253542,-0.318476};

  double F[22] = {0.0171799,0.0202499,0.0186897,0.0115477,0.00603883,0.00446235,0.00363449,0.00318894,0.00361997,0.00341508,
                  0.00366392,0.0036545,0.00352303,0.00349116,0.00294891,0.00353187,0.00460384,0.00711028,0.0109351,0.0182924,
                  0.01914,0.0161094};

  for(int i = 0; i < 22; i++){
    if(eta > etabin[i] && eta <= etabin[i+1])
      BinID = i;
  }

  if(et >= domainbin_U[BinID]){
    return 2*(et-A[BinID])/(B[BinID]+sqrt(B[BinID]*B[BinID]-4*A[BinID]*C[BinID]+4*et*C[BinID]));
  }
  else if(et > domainbin_L[BinID]){
    return 2*(et-D[BinID])/(E[BinID]+sqrt(E[BinID]*E[BinID]-4*D[BinID]*F[BinID]+4*et*F[BinID]));
  }
  else return et;
}
double corrJetEt2 ( double  et,
double  eta 
)

Definition at line 842 of file FastL1Region.cc.

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

{
  const int NUMBER_ETA_VALUES = 11;
  std::vector< std::vector<float> > m_calibFunc;

  m_calibFunc.resize(NUMBER_ETA_VALUES);

  // still fill manually 
  m_calibFunc.at(0).push_back(1);
  m_calibFunc.at(0).push_back(1);
  m_calibFunc.at(0).push_back(2);

  m_calibFunc.at(1).push_back(1);
  m_calibFunc.at(1).push_back(2);
  m_calibFunc.at(1).push_back(2);

  m_calibFunc.at(2).push_back(2);
  m_calibFunc.at(2).push_back(2);
  m_calibFunc.at(2).push_back(2);
  m_calibFunc.at(2).push_back(2);
  m_calibFunc.at(2).push_back(3);
  m_calibFunc.at(2).push_back(3);

  m_calibFunc.at(3).push_back(1);
  m_calibFunc.at(3).push_back(1);
  m_calibFunc.at(3).push_back(3);

  m_calibFunc.at(4).push_back(1);
  m_calibFunc.at(4).push_back(3);
  m_calibFunc.at(4).push_back(3);
  m_calibFunc.at(4).push_back(6);
  m_calibFunc.at(4).push_back(6);
  m_calibFunc.at(4).push_back(6);
  m_calibFunc.at(4).push_back(6);
  m_calibFunc.at(4).push_back(6);

  m_calibFunc.at(5).push_back(3);
  m_calibFunc.at(5).push_back(3);
  m_calibFunc.at(5).push_back(3);

  m_calibFunc.at(6).push_back(1);
  m_calibFunc.at(6).push_back(1);
  m_calibFunc.at(6).push_back(4);

  m_calibFunc.at(7).push_back(1);
  m_calibFunc.at(7).push_back(4);
  m_calibFunc.at(7).push_back(4);

  m_calibFunc.at(8).push_back(4);
  m_calibFunc.at(8).push_back(4);
  m_calibFunc.at(8).push_back(4);
  m_calibFunc.at(8).push_back(1);
  m_calibFunc.at(8).push_back(1);
  m_calibFunc.at(8).push_back(1);

  m_calibFunc.at(9).push_back(1);
  m_calibFunc.at(9).push_back(1);
  m_calibFunc.at(9).push_back(5);

  m_calibFunc.at(10).push_back(1);
  m_calibFunc.at(10).push_back(5);
  m_calibFunc.at(10).push_back(5);


  double etabin[12] = { 0.0, 0.348, 0.696, 1.044, 1.392, 1.74, 2.172, 3.0,
                        3.33, 3.839, 4.439, 5.115};
  int BinID = 0;
  for(int i = 0; i < 11; i++){
    if(std::abs(eta) >= etabin[i] && eta < etabin[i+1])
      BinID = i;
  }

  double corrEt = 0;
  for (unsigned i=0; i<m_calibFunc.at(BinID).size();i++){
    corrEt += m_calibFunc.at(BinID).at(i)*pow(et,(int)i); 
  }
  
  uint16_t jetEtOut = (uint16_t)corrEt;
  
  if(jetEtOut < 1024) {
    return (double)jetEtOut;
  }
  return (double)1023;

}
double GCTEnergyTrunc ( double  et,
double  LSB,
bool  doEM 
)

Definition at line 1041 of file FastL1Region.cc.

References i, and run_regression::ret.

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

                                                 {

  //return et;

  //double L1CaloEmEtScaleLSB = LSB;
  //double L1CaloRegionEtScaleLSB = LSB;

  //if (et>0.) et += LSB/2.; // round up

  double L1CaloEmThresholds[64] = { 
    0.,     1.,     2.,     3.,     4.,     5.,     6.,     7.,     8.,     9., 
    10.,    11.,    12.,    13.,    14.,    15.,    16.,    17.,    18.,    19., 
    20.,    21.,    22.,    23.,    24.,    25.,    26.,    27.,    28.,    29., 
    30.,    31.,    32.,    33.,    34.,    35.,    36.,    37.,    38.,    39., 
    40.,    41.,    42.,    43.,    44.,    45.,    46.,    47.,    48.,    49.,
    50.,    51.,    52.,    53.,    54.,    55.,    56.,    57.,    58.,    59., 
    60.,    61.,    62.,    63.
  };
 
  double L1CaloJetThresholds[64] = {       
    0.,     10.,    12.,    14.,    15.,    18.,    20.,    22.,    24.,    25.,
    28.,    30.,    32.,    35.,    37.,    40.,    45.,    50.,    55.,    60.,    
    65.,    70.,    75.,    80.,    85.,    90.,    100.,   110.,   120.,   125.,   
    130.,   140.,   150.,   160.,   170.,   175.,   180.,   190.,   200.,   215.,   
    225.,   235.,   250.,   275.,   300.,   325.,   350.,   375.,   400.,   425.,   
    450.,   475.,   500.,   525.,   550.,   575.,   600.,   625.,   650.,   675.,   
    700.,   725.,   750.,   775.
  };
  


  double L1CaloThresholds[64];
  if (doEM) {
    for (int i=0;i<64;i++)
      L1CaloThresholds[i] = L1CaloEmThresholds[i];
  } else {
    for (int i=0;i<64;i++)
      L1CaloThresholds[i] = L1CaloJetThresholds[i];
  }


  double ret = 0.;
  for (int i=63;i>0;i--) {
    if (et>=(L1CaloThresholds[i])) {
      if (i==63) {
        ret = L1CaloThresholds[63];
      } else {
        /*
        double minL = std::abs(et - L1CaloThresholds[i]); 
        double minU = std::abs(et - L1CaloThresholds[i+1]); 
        if (minL<minU)
          ret = L1CaloThresholds[i];
        else
          ret = L1CaloThresholds[i+1];
        */
        /*
        if (doEM) {
          ret = L1CaloThresholds[i];
        } else {
          ret = L1CaloThresholds[i+1];
        }
        */
        ret = L1CaloThresholds[i];
      }
      break;
    }
  }
  return ret;
}
double RCTEnergyTrunc ( double  et,
double  LSB,
double  thres 
)

Definition at line 1026 of file FastL1Region.cc.

References run_regression::ret.

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

                                                    {

  //return et;
  if (et>=thres) return thres;

  //et += LSB/2.;
  //double ret = (int)(et / LSB) * LSB + LSB;
  int iEt = (int)(et / LSB);
  double ret =  (double)iEt * LSB;

  return ret;
}