UEAnalysis.cc

Go to the documentation of this file.
00001 #include <iostream>
00002 #include <stdio.h>
00003 #include "HepMC/GenEvent.h"
00004 #include "HepMC/IO_GenEvent.h"
00005 #include "HepMC/GenParticle.h"
00006 #include "HepMC/GenVertex.h"
00007 #include "HepMC/IO_AsciiParticles.h"
00008 #include "HepMC/SimpleVector.h"
00009 #include "HepPDT/ParticleData.hh"
00010 #include "CLHEP/Vector/LorentzVector.h"
00011 #define PI 3.141593
00012 using namespace std;
00013 
00014 // ROOT headers
00015 #include "TH1.h"
00016 #include "TH2.h"
00017 #include "TFile.h"
00018 #include "TMath.h"
00019 #include "TLorentzVector.h"
00020 
00021 #include "fastjet/PseudoJet.hh"
00022 #include "fastjet/ClusterSequence.hh"
00023 #include "fastjet/JetDefinition.hh"
00024 #include "fastjet/SISConePlugin.hh"
00025 
00026 //UE analysis header
00027 #include "../include/UEAnalysis.h"
00028 
00029 //**********************
00030 
00031 /// empty default constructor
00032 UEAnalysis::UEAnalysis() {
00033 
00034 }
00035 
00036 /// empty default destructor
00037 UEAnalysis::~UEAnalysis() {
00038 
00039 }
00040 
00041 int UEAnalysis::Init(double tr_max_eta, double tr_min_pt) {
00042   // specify default eta cut
00043   m_max_eta=tr_max_eta;
00044   
00045   // specify default pt cut
00046   m_min_pt=tr_min_pt;
00047   
00048   // default Output file name
00049   m_outputFileName="UEAnalysis.root";
00050   m_outputRootDir="UE";
00051   
00052   char name1[20],title1[20];
00053   char name2[20],title2[20];
00054   char name3[20],title3[20];
00055   //declaration of histograms
00056   for (int i=0; i<26; i++){
00057     //just give a different name to the histograms
00058     //for <Ncharged> 
00059     sprintf(name1,"NchargedToward_%2d",i);
00060     sprintf(name2,"NchargedTransverse_%2d",i);
00061     sprintf(name3,"NchargedAway_%2d",i);
00062     
00063     sprintf(title1,"NchargedToward_%2d",i);
00064     sprintf(title2,"NchargedTransverse_%2d",i);
00065     sprintf(title2,"NchargedAway_%2d",i);
00066     
00067     m_NchargedToward[i] = new TH1D(name1,title1, 20, 0, 100);
00068     m_NchargedTransverse[i] = new TH1D(name2,title2, 20, 0, 100);
00069     m_NchargedAway[i] = new TH1D(name3,title3, 20, 0, 100);
00070 //     m_NchargedToward[i] =baseAnalysis::initHist(name1,name1,title1, 20, 0, 100);
00071 //     m_NchargedTransverse[i] =baseAnalysis::initHist(name2,name2,title2, 20, 0, 100);
00072 //     m_NchargedAway[i] =baseAnalysis::initHist(name3,name3,title3, 20, 0, 100);
00073 
00074    //for <Ptsum>
00075     sprintf(name1,"PtsumToward_%2d",i);
00076     sprintf(name2,"PtsumTransverse_%2d",i);
00077     sprintf(name3,"PtsumAway_%2d",i);
00078     
00079     sprintf(title1,"PtsumToward_%2d",i);
00080     sprintf(title2,"PtsumTransverse_%2d",i);
00081     sprintf(title2,"PtsumAway_%2d",i);
00082     
00083     m_PtsumToward[i] = new TH1D(name1,title1, 20, 0, 100);
00084     m_PtsumTransverse[i] = new TH1D(name2,title2, 20, 0, 100);
00085     m_PtsumAway[i] = new TH1D(name3,title3, 20, 0, 100);
00086 //     m_PtsumToward[i] =baseAnalysis::initHist(name1,name1,title1, 20, 0, 100);
00087 //     m_PtsumTransverse[i] =baseAnalysis::initHist(name2,name2,title2, 20, 0, 100);
00088 //     m_PtsumAway[i] =baseAnalysis::initHist(name3,name3,title3, 20, 0, 100);
00089 
00090   }
00091 
00092 
00093   //setting up the variable bin size
00094   m_nbin_pT = 25;
00095   
00096   for (int i=0; i<11; i++) {
00097     m_nbinRange_pT[i] = i;
00098   }
00099   for (int i=11; i<21; i++) {
00100     m_nbinRange_pT[i] = 10.0+ 3.0*(i-10);
00101   }
00102   m_nbinRange_pT[21] = 50.; 
00103   m_nbinRange_pT[22] = 60.; 
00104   m_nbinRange_pT[23] = 70.; 
00105   m_nbinRange_pT[24] = 80.; 
00106   m_nbinRange_pT[25] = 120.; 
00107   
00108   //booking histograms
00109   m_NchargedMeanToward = baseAnalysis::initHistVariableBin( string("NchargedMeanToward"), string("NchargedMeanToward"), string("Pt_leadingJet"), m_nbin_pT, m_nbinRange_pT);
00110   m_NchargedMeanTransverse = baseAnalysis::initHistVariableBin( string("NchargedMeanTransverse"), string("NchargedMeanTransverse"), string("Pt_leadingJet"), m_nbin_pT, m_nbinRange_pT);
00111   m_NchargedMeanAway = baseAnalysis::initHistVariableBin( string("NchargedMeanAway"), string("NchargedMeanAway"), string("Pt_leadingJet"),m_nbin_pT, m_nbinRange_pT);
00112  
00113   m_PtsumMeanToward = baseAnalysis::initHistVariableBin( string("PtsumMeanToward"), string("PtsumMeanToward"), string("Pt_leadingJet"), m_nbin_pT, m_nbinRange_pT);
00114   m_PtsumMeanTransverse = baseAnalysis::initHistVariableBin( string("PtsumMeanTransverse"), string("PtsumMeanTransverse"), string("Pt_leadingJet"), m_nbin_pT, m_nbinRange_pT);
00115   m_PtsumMeanAway = baseAnalysis::initHistVariableBin( string("PtsumMeanAway"), string("PtsumMeanAway"), string("Pt_leadingJet"),m_nbin_pT, m_nbinRange_pT);
00116  
00117   m_Njet =  baseAnalysis::initHist( string("Njet"), string("Njet"), string("jet Number"), 16, -0.5, 15.5);
00118   m_Ptjet =  baseAnalysis::initHist( string("Ptjet"), string("jet p_{T}"), string("jet p_{T}"), 50, 0, 200);
00119   m_Ptjet_log =  baseAnalysis::initHist( string("Ptjet_logscale"), string("jet p_{T}"), string("jet p_{T} - logscale -"), 50, 0, 200);
00120   m_Ptleadingjet =  baseAnalysis::initHist( string("Ptleadingjet"), string("leading jet p_{T}"), string("leading jet p_{T}"), 50, 0, 200);
00121   m_Ptleadingjet_log =  baseAnalysis::initHist( string("Ptleadingjet_logscale"), string("leading jet p_{T}"), 
00122                                                 string("leading jet p_{T} - logscale -"), 50, 0, 200);
00123 
00124   m_charged_particle_pt=baseAnalysis::initHist("charged_particle_pt","p_{T} of charged particles","p_{T}",25,0,25.); 
00125 
00126   return true; 
00127 }
00128 
00129 
00130 int UEAnalysis::Process(HepMC::GenEvent* hepmcevt){ 
00131 
00132   // storage of input particles for jet
00133   double leadingJetPt = 0.0;
00134   CLHEP::HepLorentzVector lv_leadingJet(0,0,0,0);
00135   
00136   // check if jets were found
00137   // if(!m_inclusive_jets.size()) {
00138   //   std::cout<<"UEAnalysis::no jets found"<<std::endl;
00139   //   return 0;
00140   // }
00141   if(m_inclusive_jets.size()) {
00142     // use 4 vector of leading jet to define towards/away/transverse region
00143     lv_leadingJet.setPx(m_inclusive_jets[0].px());
00144     lv_leadingJet.setPy(m_inclusive_jets[0].py());
00145     lv_leadingJet.setPz(m_inclusive_jets[0].pz());
00146     lv_leadingJet.setE(m_inclusive_jets[0].e());
00147     
00148     leadingJetPt = m_inclusive_jets[0].perp(); 
00149     // fill jet histograms
00150     for(unsigned int  i=0; i<m_inclusive_jets.size(); i++) {
00151       m_Ptjet->Fill(m_inclusive_jets[i].perp());
00152       m_Ptjet_log->Fill(m_inclusive_jets[i].perp());
00153     }
00154     m_Njet->Fill(m_inclusive_jets.size()); 
00155     m_Ptleadingjet->Fill(m_inclusive_jets[0].perp());
00156     m_Ptleadingjet_log->Fill(m_inclusive_jets[0].perp());
00157   }
00158   int NchargedToward[25];
00159   int NchargedTransverse[25];
00160   int NchargedAway[25];
00161   
00162   double PtsumToward[25];
00163   double PtsumTransverse[25];
00164   double PtsumAway[25];
00165   
00166   for(int i=0; i<m_nbin_pT; i++){
00167     NchargedToward[i]=0;
00168     NchargedTransverse[i]=0;
00169     NchargedAway[i]=0;
00170     
00171     PtsumToward[i]=0;
00172     PtsumTransverse[i]=0;
00173     PtsumAway[i]=0;
00174   }
00175   
00176   // find the leadjet bin for this event
00177   int ileadjet = -1;
00178   //int ileadjet;
00179   for(int i=0; i<m_nbin_pT; i++) {
00180     if( leadingJetPt > m_nbinRange_pT[i] && leadingJetPt < m_nbinRange_pT[i+1])
00181       ileadjet = i;
00182   }
00183   
00184   // loop over particles in the event
00185   for ( HepMC::GenEvent::particle_const_iterator p =
00186           hepmcevt->particles_begin(); p != hepmcevt->particles_end(); ++p ){
00187     
00188     // use the pdg id to identify the particles
00189     int pid = (*p)->pdg_id();
00190     
00191     // cut out the neutral particles (charge is not stored in HepMC)
00192     // just remove the neutrinos, gammas, neutral pions and
00193     // neutrons, K0s, ... from the final state
00194     if(!chargedParticle(pid)) continue;
00195     
00196     
00197     // check wether the track directly comes from a Z-Boson
00198     //if( trackfromPID(23,(*p)) ) continue;
00199     
00200     // check wether the track directly comes from a W-Boson
00201     //if( trackfromPID(24,(*p)) ) continue;
00202     //if( trackfromPID(-24,(*p)) ) continue;
00203 
00204     // check for final state particles, be careful, maybe there is another eta cut than 2.5 necessary
00205     if(!IsFinalStateParticle((*p))) continue;
00206 
00207     m_charged_particle_pt->Fill((*p)->momentum().perp());
00208     
00209     // to skip all the events with no jet
00210     if(ileadjet == -1) continue;
00211     //if(!ileadjet) continue;
00212     double pt = (*p)->momentum().perp();
00213     double px = (*p)->momentum().px();
00214     double py = (*p)->momentum().py();
00215     double pz = (*p)->momentum().pz();
00216     double pe = (*p)->momentum().e();
00217     
00218     CLHEP::HepLorentzVector lv_chargedParticle(px,py,pz,pe);
00219     
00220     //calculate for <Ncharged> vs pt of leading jet at toward region
00221     if( fabs(lv_chargedParticle.vect().deltaPhi(lv_leadingJet.vect())) < PI/3.0 ) { 
00222       NchargedToward[ileadjet]++;       
00223       PtsumToward[ileadjet]+=pt;
00224     }  
00225     
00226     //calculate for <Ncharged> vs pt of leading jet at Transverse region
00227     if( fabs(lv_chargedParticle.vect().deltaPhi(lv_leadingJet.vect())) >= PI/3.0 &&
00228         fabs(lv_chargedParticle.vect().deltaPhi(lv_leadingJet.vect())) < 2.0*PI/3.0 ) { 
00229       NchargedTransverse[ileadjet]++;
00230       PtsumTransverse[ileadjet]+=pt; 
00231     }
00232     //calculate for <Ncharged> vs pt of leading jet at Away region
00233     if( fabs(lv_chargedParticle.vect().deltaPhi(lv_leadingJet.vect())) >= 2.0*PI/3.0 ) { 
00234       NchargedAway[ileadjet]++;
00235       PtsumAway[ileadjet]+=pt;
00236     }  
00237       
00238     m_NchargedToward[ileadjet]->Fill(NchargedToward[ileadjet], 1.);
00239     m_NchargedTransverse[ileadjet]->Fill(NchargedTransverse[ileadjet], 1.);
00240     m_NchargedAway[ileadjet]->Fill(NchargedAway[ileadjet], 1.);
00241     
00242     m_PtsumToward[ileadjet]->Fill(PtsumToward[ileadjet], 1.);
00243     m_PtsumTransverse[ileadjet]->Fill(PtsumTransverse[ileadjet], 1.);
00244     m_PtsumAway[ileadjet]->Fill(PtsumAway[ileadjet], 1.);
00245     
00246   }
00247   
00248   return true;
00249 } //end of Process
00250 
00251 std::vector<TH1D*> UEAnalysis::averagedHistograms() {
00252 
00253   //Fill Histograms at Toward, Transverse and Away region
00254   for(int i=0; i<m_nbin_pT; i++){
00255     m_NchargedMeanToward->SetBinContent( i+1, m_NchargedToward[i]->GetMean() );  
00256     m_NchargedMeanToward->SetBinError( i+1, m_NchargedToward[i]->GetRMS() );  
00257     
00258     m_NchargedMeanTransverse->SetBinContent( i+1, m_NchargedTransverse[i]->GetMean() );  
00259     m_NchargedMeanTransverse->SetBinError( i+1, m_NchargedTransverse[i]->GetRMS() );  
00260     
00261     m_NchargedMeanAway->SetBinContent( i+1, m_NchargedAway[i]->GetMean() );  
00262     m_NchargedMeanAway->SetBinError( i+1, m_NchargedAway[i]->GetRMS() );  
00263     
00264     m_PtsumMeanToward->SetBinContent( i+1, m_PtsumToward[i]->GetMean() );  
00265     m_PtsumMeanToward->SetBinError( i+1, m_PtsumToward[i]->GetRMS() );  
00266     
00267     m_PtsumMeanTransverse->SetBinContent( i+1, m_PtsumTransverse[i]->GetMean() );  
00268     m_PtsumMeanTransverse->SetBinError( i+1, m_PtsumTransverse[i]->GetRMS() );  
00269     
00270     m_PtsumMeanAway->SetBinContent( i+1, m_PtsumAway[i]->GetMean() );  
00271     m_PtsumMeanAway->SetBinError( i+1, m_PtsumAway[i]->GetRMS() ); 
00272   }
00273   //m_histVector.insert(m_histVector.end(), m_histVectorVariableBin.begin(), m_histVectorVariableBin.end());
00274   //m_histVector.insert(m_histVector.begin()+2, m_histVectorVariableBin.begin(), m_histVectorVariableBin.end());
00275 
00276   return m_histVector;
00277 } //end of averagedHistograms
00278 
00279 int UEAnalysis::Finalize(TFile* output){
00280   
00281   averagedHistograms();  
00282 
00283   baseAnalysis::Finalize(output);
00284   
00285   return true;
00286 }

Generated on Mon Jan 4 15:22:34 2010 for HepMCAnalysis by  doxygen 1.4.7