CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

MCElectronAnalyzer Class Reference

#include <MCElectronAnalyzer.h>

Inheritance diagram for MCElectronAnalyzer:
edm::EDAnalyzer

List of all members.

Public Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
virtual void beginJob ()
virtual void endJob ()
 MCElectronAnalyzer (const edm::ParameterSet &)
virtual ~MCElectronAnalyzer ()

Private Member Functions

float etaTransformation (float a, float b)
float phiNormalization (float &a)

Private Attributes

TFile * fOutputFile_
std::string fOutputFileName_
TH1F * h_BremEnergy_
TH1F * h_BremFrac_
TH1F * h_MCEleE_
TH1F * h_MCEleEta_
TH1F * h_MCElePhi_
std::string HepMCLabel
double mcEta_
double mcPhi_
 global variable for the MC photon
int nEvt_
int nMatched_
TProfile * p_BremVsEta_
TProfile * p_BremVsR_
std::string SimHitLabel
std::string SimTkLabel
std::string SimVtxLabel
ElectronMCTruthFindertheElectronMCTruthFinder_
const TrackerGeometrytrackerGeom

Detailed Description

Definition at line 23 of file MCElectronAnalyzer.h.


Constructor & Destructor Documentation

MCElectronAnalyzer::MCElectronAnalyzer ( const edm::ParameterSet pset) [explicit]

Definition at line 44 of file MCElectronAnalyzer.cc.

   : fOutputFileName_( pset.getUntrackedParameter<string>("HistOutFile",std::string("TestConversions.root")) ),
     fOutputFile_(0)
{


}
MCElectronAnalyzer::~MCElectronAnalyzer ( ) [virtual]

Definition at line 54 of file MCElectronAnalyzer.cc.

References theElectronMCTruthFinder_.


Member Function Documentation

void MCElectronAnalyzer::analyze ( const edm::Event e,
const edm::EventSetup  
) [virtual]

Implements edm::EDAnalyzer.

Definition at line 144 of file MCElectronAnalyzer.cc.

References gather_cfg::cout, ElectronMCTruthFinder::find(), edm::Event::getByLabel(), h_BremEnergy_, h_BremFrac_, h_MCEleE_, h_MCEleEta_, h_MCElePhi_, edm::EventBase::id(), nEvt_, p_BremVsEta_, p_BremVsR_, and theElectronMCTruthFinder_.

{


  using namespace edm;
  //const float etaPhiDistance=0.01;
  // Fiducial region
  //const float TRK_BARL =0.9;
  //const float BARL = 1.4442; // DAQ TDR p.290
  //const float END_LO = 1.566;
  //const float END_HI = 2.5;
  // Electron mass
  //const Float_t mElec= 0.000511;


  nEvt_++;
  LogInfo("MCElectronAnalyzer") << "MCElectronAnalyzer Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
  //  LogDebug("MCElectronAnalyzer") << "MCElectronAnalyzer Analyzing event number: "  << e.id() << " Global Counter " << nEvt_ <<"\n";
  std::cout << "MCElectronAnalyzer Analyzing event number: "  << e.id() << " Global Counter " << nEvt_ <<"\n";

  std::cout  << " MCElectronAnalyzer Looking for MC truth " << "\n";

  //get simtrack info
  std::vector<SimTrack> theSimTracks;
  std::vector<SimVertex> theSimVertices;

  edm::Handle<SimTrackContainer> SimTk;
  edm::Handle<SimVertexContainer> SimVtx;
  e.getByLabel("g4SimHits",SimTk);
  e.getByLabel("g4SimHits",SimVtx);

  theSimTracks.insert(theSimTracks.end(),SimTk->begin(),SimTk->end());
  theSimVertices.insert(theSimVertices.end(),SimVtx->begin(),SimVtx->end());
  std::cout << " MCElectronAnalyzer This Event has " <<  theSimTracks.size() << " sim tracks " << std::endl;
  std::cout << " MCElectronAnalyzer This Event has " <<  theSimVertices.size() << " sim vertices " << std::endl;
  if (  ! theSimTracks.size() ) std::cout << " Event number " << e.id() << " has NO sim tracks " << std::endl;


  std::vector<ElectronMCTruth> MCElectronctrons=theElectronMCTruthFinder_->find (theSimTracks,  theSimVertices);
  std::cout << " MCElectronAnalyzer MCElectronctrons size " <<  MCElectronctrons.size() << std::endl;

  for ( std::vector<ElectronMCTruth>::const_iterator iEl=MCElectronctrons.begin(); iEl !=MCElectronctrons.end(); ++iEl ){

    h_MCEleE_->Fill  ( (*iEl).fourMomentum().e() );
    h_MCEleEta_->Fill  ( (*iEl).fourMomentum().pseudoRapidity() );
    h_MCElePhi_->Fill  ( (*iEl).fourMomentum().phi() );

    float totBrem=0 ;
    unsigned int iBrem ;
    for ( iBrem=0; iBrem < (*iEl).bremVertices().size(); ++iBrem ) {
      float rBrem= (*iEl).bremVertices()[iBrem].perp();
      float etaBrem= (*iEl).bremVertices()[iBrem].eta();
      if ( rBrem < 120 ) {
        totBrem +=  (*iEl).bremMomentum()[iBrem].e();
        p_BremVsR_ ->Fill ( rBrem, (*iEl).bremMomentum()[iBrem].e() );
        p_BremVsEta_ ->Fill ( etaBrem, (*iEl).bremMomentum()[iBrem].e() );

      }
    }


    h_BremFrac_->Fill( totBrem/(*iEl).fourMomentum().e() );
    h_BremEnergy_->Fill (  totBrem  );




  }




}
void MCElectronAnalyzer::beginJob ( void  ) [virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 62 of file MCElectronAnalyzer.cc.

References fOutputFile_, fOutputFileName_, h_BremEnergy_, h_BremFrac_, h_MCEleE_, h_MCEleEta_, h_MCElePhi_, nEvt_, p_BremVsEta_, p_BremVsR_, and theElectronMCTruthFinder_.

{


  nEvt_=0;

  theElectronMCTruthFinder_ = new ElectronMCTruthFinder();


  fOutputFile_   = new TFile( fOutputFileName_.c_str(), "RECREATE" ) ;

  h_MCEleE_ = new TH1F("MCEleE","MC ele energy",100,0.,200.);
  h_MCElePhi_ = new TH1F("MCElePhi","MC ele phi",40,-3.14, 3.14);
  h_MCEleEta_ = new TH1F("MCEleEta","MC ele eta",40,-3., 3.);
  h_BremFrac_ = new TH1F("bremFrac","brem frac ", 100, 0., 1.);
  h_BremEnergy_ = new TH1F("BremE","Brem energy",100,0.,200.);

  p_BremVsR_ = new TProfile("BremVsR", " Mean Brem energy vs R ", 48, 0., 120.);
  p_BremVsEta_ = new TProfile("BremVsEta", " Mean Brem energy vs Eta ", 50, -2.5, 2.5);




  return ;
}
void MCElectronAnalyzer::endJob ( void  ) [virtual]

Reimplemented from edm::EDAnalyzer.

Definition at line 222 of file MCElectronAnalyzer.cc.

References gather_cfg::cout, fOutputFile_, and nEvt_.

{




   fOutputFile_->Write() ;
   fOutputFile_->Close() ;

   edm::LogInfo("MCElectronAnalyzer") << "Analyzed " << nEvt_  << "\n";
   std::cout  << "MCElectronAnalyzer::endJob Analyzed " << nEvt_ << " events " << "\n";

   return ;
}
float MCElectronAnalyzer::etaTransformation ( float  a,
float  b 
) [private]

Definition at line 90 of file MCElectronAnalyzer.cc.

References abs, ETA, etaBarrelEndcap, funct::log(), PI, R_ECAL, funct::tan(), and Z_Endcap.

                                                                                {

//---Definitions
        const float PI    = 3.1415927;
        //const float TWOPI = 2.0*PI;

//---Definitions for ECAL
        const float R_ECAL           = 136.5;
        const float Z_Endcap         = 328.0;
        const float etaBarrelEndcap  = 1.479;

//---ETA correction

        float Theta = 0.0  ;
        float ZEcal = R_ECAL*sinh(EtaParticle)+Zvertex;

        if(ZEcal != 0.0) Theta = atan(R_ECAL/ZEcal);
        if(Theta<0.0) Theta = Theta+PI ;
        float ETA = - log(tan(0.5*Theta));

        if( std::abs(ETA) > etaBarrelEndcap )
          {
           float Zend = Z_Endcap ;
           if(EtaParticle<0.0 )  Zend = -Zend ;
           float Zlen = Zend - Zvertex ;
           float RR = Zlen/sinh(EtaParticle);
           Theta = atan(RR/Zend);
           if(Theta<0.0) Theta = Theta+PI ;
           ETA = - log(tan(0.5*Theta));
          }
//---Return the result
        return ETA;
//---end
}
float MCElectronAnalyzer::phiNormalization ( float &  a) [private]

Definition at line 125 of file MCElectronAnalyzer.cc.

References phi, PI, and TWOPI.

{
//---Definitions
 const float PI    = 3.1415927;
 const float TWOPI = 2.0*PI;


 if(phi >  PI) {phi = phi - TWOPI;}
 if(phi < -PI) {phi = phi + TWOPI;}

 //  cout << " Float_t PHInormalization out " << PHI << endl;
 return phi;

}

Member Data Documentation

Definition at line 50 of file MCElectronAnalyzer.h.

Referenced by beginJob(), and endJob().

std::string MCElectronAnalyzer::fOutputFileName_ [private]

Definition at line 49 of file MCElectronAnalyzer.h.

Referenced by beginJob().

Definition at line 72 of file MCElectronAnalyzer.h.

Referenced by analyze(), and beginJob().

Definition at line 71 of file MCElectronAnalyzer.h.

Referenced by analyze(), and beginJob().

Definition at line 68 of file MCElectronAnalyzer.h.

Referenced by analyze(), and beginJob().

Definition at line 69 of file MCElectronAnalyzer.h.

Referenced by analyze(), and beginJob().

Definition at line 70 of file MCElectronAnalyzer.h.

Referenced by analyze(), and beginJob().

std::string MCElectronAnalyzer::HepMCLabel [private]

Definition at line 62 of file MCElectronAnalyzer.h.

double MCElectronAnalyzer::mcEta_ [private]

Definition at line 60 of file MCElectronAnalyzer.h.

double MCElectronAnalyzer::mcPhi_ [private]

global variable for the MC photon

Definition at line 59 of file MCElectronAnalyzer.h.

Definition at line 55 of file MCElectronAnalyzer.h.

Referenced by analyze(), beginJob(), and endJob().

Definition at line 56 of file MCElectronAnalyzer.h.

TProfile* MCElectronAnalyzer::p_BremVsEta_ [private]

Definition at line 75 of file MCElectronAnalyzer.h.

Referenced by analyze(), and beginJob().

TProfile* MCElectronAnalyzer::p_BremVsR_ [private]

Definition at line 74 of file MCElectronAnalyzer.h.

Referenced by analyze(), and beginJob().

std::string MCElectronAnalyzer::SimHitLabel [private]

Definition at line 65 of file MCElectronAnalyzer.h.

std::string MCElectronAnalyzer::SimTkLabel [private]

Definition at line 63 of file MCElectronAnalyzer.h.

std::string MCElectronAnalyzer::SimVtxLabel [private]

Definition at line 64 of file MCElectronAnalyzer.h.

Definition at line 45 of file MCElectronAnalyzer.h.

Referenced by analyze(), beginJob(), and ~MCElectronAnalyzer().

Definition at line 47 of file MCElectronAnalyzer.h.