CMS 3D CMS Logo

Public Member Functions

SingleParticleJetResponse Class Reference

This class computes the expected response in the calorimeters for a given track, for which it is known if it has interacted, its energy as measured in the tracker and the energy released in the ECAL. Two algorithms are available at the moment. More...

#include <SingleParticleJetResponse.h>

List of all members.

Public Member Functions

std::vector< double > response (double echar, double energycluster, int algo=0) const
 SingleParticleJetResponse ()
 ~SingleParticleJetResponse ()

Detailed Description

This class computes the expected response in the calorimeters for a given track, for which it is known if it has interacted, its energy as measured in the tracker and the energy released in the ECAL. Two algorithms are available at the moment.

Author:
O. Kodolova, A.Heister

Definition at line 15 of file SingleParticleJetResponse.h.


Constructor & Destructor Documentation

SingleParticleJetResponse::SingleParticleJetResponse ( )

Definition at line 5 of file SingleParticleJetResponse.cc.

{}
SingleParticleJetResponse::~SingleParticleJetResponse ( ) [inline]

Definition at line 20 of file SingleParticleJetResponse.h.

{};

Member Function Documentation

vector< double > SingleParticleJetResponse::response ( double  echar,
double  energycluster,
int  algo = 0 
) const

Definition at line 7 of file SingleParticleJetResponse.cc.

References funct::log(), and mathSSE::sqrt().

{
  vector<double> response;
  double recal=0,rhcal=0;
  
 // threshold on energy of track
  double e_thEC_hint;
  double e_thHC_hint;
  double e_thHC1_mip;
  double e_thHC2_mip;

  // parameters for Ecal responces with interaction in Ecal
  double PAR1_EC_hint;
  double PAR2_EC_hint;
  double PAR3_EC_hint;
  double PAR4_EC_hint;

  // parameters for Hcal responces with interaction in Ecal
  double PAR1_HC_hint;
  double PAR2_HC_hint;
  double PAR3_HC_hint;
  double PAR4_HC_hint;

  // parameters for Hcal responces without interaction in Ecal (MIP)
  double PAR1_HC_mip;
  double PAR2_HC_mip;
  double PAR3_HC_mip;
  double PAR4_HC_mip;
  double PAR5_HC_mip;

  if (algo == 0) 
    {
      if(energycluster>0.5) 
        {
          double epiecal=1.6/(1+0.6*0.11*log(0.4*echar));
          double epihcal=1.39/(1+0.39*0.11*log(0.6*echar));
          recal=0.4*echar/epiecal;
          rhcal=0.6*echar/epihcal;
        } 
      else 
        {
          double epihcal=1.39/(1+0.39*0.11*log(echar));
          rhcal=echar/epihcal;
          recal=energycluster;
        } // interact or not 
    }
  
  else if (algo == 1) // ORCA_6 
    {
      // threshold on energy of track
      e_thHC_hint = 65.;
      e_thHC1_mip = 14.;
      e_thHC2_mip = 54.;
      
      // parameters for Ecal responses with interaction in Ecal
      PAR1_EC_hint = 3.2181;
      PAR2_EC_hint = 4.8399;
      
      // parameters for Hcal responses with interaction in Ecal
      PAR1_HC_hint = 0.2496;
      PAR2_HC_hint =-1.1673;
      PAR3_HC_hint = 0.7506;
      
      // parameters for Hcal responses without interaction in Ecal (MIP)
      PAR1_HC_mip  = 0.4108;
      PAR2_HC_mip  =-0.3474;
      PAR3_HC_mip  = 0.0293;
      PAR4_HC_mip  = 0.8388;
      PAR5_HC_mip  = 1.0520;
      
      if(energycluster>0.5) 
        {
          double fecal_hint = PAR1_EC_hint/(sqrt(echar) + PAR2_EC_hint);
          recal = echar*fecal_hint;
          
          if(echar <= e_thHC_hint) 
            {
              double fhcal_hint = PAR1_HC_hint * (log(echar) + PAR2_HC_hint);
              rhcal=echar*fhcal_hint;
            } 
          else 
            {
              rhcal =echar* PAR3_HC_hint;
            } // hcal response, interact=1
          
          // MIP, interact=0
        } 
      else 
        {
          recal=energycluster;
          if(echar <= e_thHC1_mip) 
            {
              double fhcal_mip = PAR1_HC_mip * (log(echar) + PAR2_HC_mip);
              rhcal=echar*fhcal_mip;
            } 
          else if (echar > e_thHC1_mip && echar <= e_thHC2_mip) 
            {
              double fhcal_mip = PAR3_HC_mip * sqrt(echar) + PAR4_HC_mip;
              rhcal=echar*fhcal_mip;
            } 
          else 
            {
              rhcal=echar*PAR5_HC_mip;
            } // hcal response, MIP
          
        } // interact or not
    }
  
  else if (algo == 2) // cmsim133
    {
      // threshold on energy of track
      e_thEC_hint = 0.1;
      e_thHC_hint = 1000.;
      e_thHC1_mip = 15.5;
      e_thHC2_mip = 58.;
      
      // parameters for Ecal responses with interaction in Ecal
      PAR1_EC_hint = -0.99228E-01;
      PAR2_EC_hint = -8.2298;
      PAR3_EC_hint = -0.82878E-03;
      PAR4_EC_hint = 0.41902;
      
      // parameters for Hcal responses with interaction in Ecal
      PAR1_HC_hint = 0.90693E-01;
      PAR2_HC_hint = 0.86861E-01;
      PAR3_HC_hint = 0.089524;
      PAR4_HC_hint = 0.65067;
      
      // parameters for Hcal responses without interaction in Ecal (MIP)
      PAR1_HC_mip  = 0.29538;
      PAR2_HC_mip  = -0.12289;
      PAR3_HC_mip  = 0.14940E-01;
      PAR4_HC_mip  = 0.73503;
      PAR5_HC_mip  = 0.84801;    

     
      if(energycluster>0.5) 
        {
          
          if(echar <= e_thEC_hint) 
            {
              double fecal_hint = PAR1_EC_hint * (echar + PAR2_EC_hint);
              recal = echar*fecal_hint;
            }
          else 
            {
              double fecal_hint = PAR3_EC_hint * echar + PAR4_EC_hint;
              recal = echar*fecal_hint;
            }

          if(echar <= e_thHC_hint) 
            {
              double fhcal_hint = PAR1_HC_hint * (log(echar) + PAR2_HC_hint);
              rhcal=echar*fhcal_hint;
            }
          else 
            {
              double fhcal_hint = PAR3_HC_hint * (log(echar) + PAR4_HC_hint);
              rhcal=echar*fhcal_hint;
            } // hcal response, interact=1
          
          // MIP, interact=0
        }
      else 
        {
          recal=energycluster;
          if(echar <= e_thHC1_mip) 
            {
              double fhcal_mip = PAR1_HC_mip * (log(echar) + PAR2_HC_mip);
              rhcal=echar*fhcal_mip;
            } 
          else if (echar > e_thHC1_mip && echar <= e_thHC2_mip) 
            {
              double fhcal_mip = PAR3_HC_mip * sqrt(echar) + PAR4_HC_mip;
              rhcal=echar*fhcal_mip;
            } 
          else 
            {
              rhcal=echar*PAR5_HC_mip;
            } // hcal response, MIP
      
        } // interact or not
    }

  else if (algo == 3) // OSCAR_3_6_0
    {
      // threshold on energy of track
      e_thEC_hint = 1000.;
      e_thHC_hint = 0.5;
      e_thHC1_mip = 12.;
      e_thHC2_mip = 30.;

      // parameters for Ecal responses with interaction in Ecal
      PAR1_EC_hint = -0.54951E-03;
      PAR2_EC_hint = 0.42609;
      PAR3_EC_hint = -2.8831;
      PAR4_EC_hint = 0.33487;
      
      // parameters for Hcal responses with interaction in Ecal
      PAR1_HC_hint = -0.028222;
      PAR2_HC_hint = 0.43868;
      PAR3_HC_hint = 0.12144;
      PAR4_HC_hint = -0.63474;

      // parameters for Hcal responses without interaction in Ecal (MIP)
      PAR1_HC_mip  = 0.86455E-01;
      PAR2_HC_mip  = -0.36659;
      PAR3_HC_mip  = 0.60879E-01;
      PAR4_HC_mip  = 0.64219;
      PAR5_HC_mip  = 0.96800;
     
      if(energycluster>0.5) 
        {
          if(echar <= e_thEC_hint) 
            {
              double fecal_hint = PAR1_EC_hint * (echar) + PAR2_EC_hint;
              recal = echar*fecal_hint;
            }
          else 
            {
              double fecal_hint = PAR3_EC_hint/(-echar) + PAR4_EC_hint;
              recal = echar*fecal_hint;
            }

          if(echar <= e_thHC_hint) 
            {
              double fhcal_hint = PAR1_HC_hint * echar + PAR2_HC_hint;
              rhcal=echar*fhcal_hint;
            }
          else 
            {
              double fhcal_hint = PAR3_HC_hint * (log(echar) + PAR4_HC_hint);
              rhcal=echar*fhcal_hint;
            } // hcal response, interact=1
          
          // MIP, interact=0
        }
      else 
        {
          recal=energycluster;
          if(echar <= e_thHC1_mip) 
            {
              double fhcal_mip = PAR1_HC_mip * (echar + PAR2_HC_mip);
              rhcal=echar*fhcal_mip;
            } 
          else if (echar > e_thHC1_mip && echar <= e_thHC2_mip) 
            {
              double fhcal_mip = PAR3_HC_mip * sqrt(echar) + PAR4_HC_mip;
              rhcal=echar*fhcal_mip;
            } else 
            {
              rhcal=echar*PAR5_HC_mip;
            } // hcal response, MIP
          
        } // interact or not
    }
  
  response.push_back(recal);
  response.push_back(rhcal);
  return response;
}