Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

saturFamos.cpp

Go to the documentation of this file.
00001 
00002 #include <XANADOO/domain/interface/XANAEsdEvent.h>
00003 #include <XANADOO/XANAClusters/interface/XANACluster.h>
00004 #include <XANADOO/XANAClusters/interface/XANACaloRecHit.h>
00005 #include <XANADOO/XANAClusters/interface/XANAEmCluster.h>
00006 #include <XANADOO/XANAClusters/interface/XANASuperCluster.h>
00007 #include <XANADOO/XANAClusters/interface/XANAHadCluster.h>
00008 #include <XANADOO/XANATracks/interface/XANATrack.h>
00009 #include <XANADOO/XANAMcInfo/interface/XANAGeneratorEvent.h>
00010 #include <XANADOO/XANAMcInfo/interface/XANAGeantEvent.h>
00011 #include <XANADOO/XANAMcInfo/interface/XANAGeneratorParticle.h>
00012 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronCandidate.h>
00013 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronTrack.h>
00014 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronSeed.h>
00015 #include <XANADOO/XANAMuons/interface/XANAMuonCandidate.h>
00016 #include <XANADOO/XANATriggerInfo/interface/XANATriggerInfo.h>
00017 #include <XANADOO/XANAJets/interface/XANAJet.h>
00018 
00019 #include <XANADOO/XANAGeometry/interface/XANAEcalGeometry.h>
00020 
00021 #include "TTree.h"
00022 #include "TBits.h"
00023 #include "TObjectTable.h"
00024 #include "TFile.h"
00025 #include "TBranch.h"
00026 #include "TClonesArray.h"
00027 #include "TObjArray.h"
00028 #include "TH1.h"
00029 #include "TH2.h"
00030 #include "TSystem.h"
00031 #include "TChain.h"
00032 
00033 #include <string>
00034 
00035 
00036 using namespace std;
00037 
00038 int main(int argc, char** argv)
00039 {
00040 // version TChain
00041    TChain *T = new TChain("ESD");
00042    T->Add("/data/scratch/collard/Production_xana151/single/famos/xSingleE4000.root");
00043    /*
00044    T->Add("/data/scratch/collard/Production_xana151/single/famos/xSinglePt50.root");
00045    T->Add("/data/scratch/collard/Production_xana151/single/famos/xSinglePt150.root");
00046    T->Add("/data/scratch/collard/Production_xana151/single/famos/xSinglePt500.root");
00047    T->Add("/data/scratch/collard/Production_xana151/single/famos/xSinglePt1500.root");
00048    T->Add("/data/scratch/collard/Production_xana151/single/famos/xSinglePt2500.root");
00049    */
00050  
00051 // example of how to suppress reading of branches
00052 // has to be put before setting the branch addresses!
00053 // T->SetBranchStatus("GeantEvent*",0);
00054 
00055 // Reconstructed event
00056   XANAEsdEvent *event = new XANAEsdEvent();  
00057   T->SetBranchAddress("Event.",&event);
00058   // MC information (generator and GEANT event)
00059   XANAGeneratorEvent *generatorEvent = new XANAGeneratorEvent();
00060   T->SetBranchAddress("GeneratorEvent.",&generatorEvent);
00061   XANAGeantEvent *geantEvent = new XANAGeantEvent();
00062   T->SetBranchAddress("GeantEvent.",&geantEvent);
00063   
00064   // Definitions
00065   Short_t nc = 0, nh = 0, nhc = 0, ns = 0, npc = 0,  nt = 0, nv = 0, nvt = 0;
00066   Short_t ne = 0, nm = 0, nelt = 0 ;    
00067   
00068   TObjArray *clusters = 0;
00069   TObjArray *hadClusters = 0;
00070   TObjArray *superClusters = 0;
00071   TObjArray *preshClusters = 0;
00072   TRefArray *hits = 0;
00073   TObjArray *tracks = 0;
00074   TObjArray *vertices = 0;
00075   TObjArray *electrons = 0;
00076   TObjArray *electronTracks = 0;
00077   TObjArray *muons = 0;
00078 
00079   Short_t mc_np = 0, mc_nsp = 0, mc_nssp = 0, mc_npp = 0, mc_nspp = 0;
00080 
00081   // Histo
00082   //
00083   //
00084   TH1F *histo1001 = new TH1F("histo1001","E rec / E true           ",100,0.8,1.05);
00085 
00086   TH2F *histo1002 = new TH2F("histo1002","S1 vs Red5  (all)",100,0.,350.,150,0.,4500.);
00087   TH2F *histo1003 = new TH2F("histo1003","S1 vs Red5 (S1<1.7TeV)",100,0.,175.,150,0.,1700.);
00088   TH1F *histo1004 = new TH1F("histo1004","E_SC corr / E_SC         ",100,0.5,1.5);
00089 
00090   TH1F *histo1011 = new TH1F("histo1011","S1/Red5 bin Red5:0-20",50,0.,24.0);
00091   TH1F *histo1012 = new TH1F("histo1012","S1/Red5 bin Red5:20-30",50,0.,24.0);
00092   TH1F *histo1013 = new TH1F("histo1013","S1/Red5 bin Red5:30-40",50,0.,24.0);
00093   TH1F *histo1014 = new TH1F("histo1014","S1/Red5 bin Red5:40-50",50,0.,24.0);
00094   TH1F *histo1015 = new TH1F("histo1015","S1/Red5 bin Red5:50-60",50,0.,24.0);
00095   TH1F *histo1016 = new TH1F("histo1016","S1/Red5 bin Red5:60-70",50,0.,24.0);
00096   TH1F *histo1017 = new TH1F("histo1017","S1/Red5 bin Red5:70-80",50,0.,24.0);
00097   TH1F *histo1018 = new TH1F("histo1018","S1/Red5 bin Red5:80-90",50,0.,24.0);
00098   TH1F *histo1019 = new TH1F("histo1019","S1/Red5 bin Red5:90-100",50,0.,24.0);
00099   TH1F *histo1020 = new TH1F("histo1020","S1/Red5 bin Red5:100-110",50,0.,24.0);
00100   TH1F *histo1021 = new TH1F("histo1021","S1/Red5 bin Red5:110-120",50,0.,24.0);
00101 
00102   TH1F *histo1111 = new TH1F("histo1111","S1 bin Red5:0-20",50,0.,1700.0);
00103   TH1F *histo1112 = new TH1F("histo1112","S1 bin Red5:20-30",50,0.,1700.0);
00104   TH1F *histo1113 = new TH1F("histo1113","S1 bin Red5:30-40",50,0.,1700.0);
00105   TH1F *histo1114 = new TH1F("histo1114","S1 bin Red5:40-50",50,0.,1700.0);
00106   TH1F *histo1115 = new TH1F("histo1115","S1 bin Red5:50-60",50,0.,1700.0);
00107   TH1F *histo1116 = new TH1F("histo1116","S1 bin Red5:60-70",50,0.,1700.0);
00108   TH1F *histo1117 = new TH1F("histo1117","S1 bin Red5:70-80",50,0.,1700.0);
00109   TH1F *histo1118 = new TH1F("histo1118","S1 bin Red5:80-90",50,0.,1700.0);
00110   TH1F *histo1119 = new TH1F("histo1119","S1 bin Red5:90-100",50,0.,1700.0);
00111   TH1F *histo1120 = new TH1F("histo1120","S1 bin Red5:100-110",50,0.,1700.0);
00112   TH1F *histo1121 = new TH1F("histo1121","S1 bin Red5:110-120",50,0.,1700.0);
00113 
00114 
00115 
00116   //   Start main loop on all events
00117   Int_t nb = 0; 
00118   Int_t nevent = (Int_t)T->GetEntries();
00119 
00120 //  nevent =2;
00121   
00122   cout <<  "Nombre d entrees a traiter : " << nevent << endl; 
00123   for (Int_t i=0; i<nevent; i++) {
00124     nb += T->GetEntry(i); 
00125 
00126 
00127           // generator event
00128     mc_np   = generatorEvent->getNumberOfParticles();
00129     mc_nsp  = generatorEvent->getNumberOfSignalParticles();
00130     mc_nssp = generatorEvent->getNumberOfStableSignalParticles();
00131     mc_npp  = generatorEvent->getNumberOfPileupParticles();
00132     mc_nspp = generatorEvent->getNumberOfStablePileupParticles();
00133     TObjArray *genpart = 0;      genpart=generatorEvent->getParticles();
00134     int ilink=0; int first =1;
00135     for (int gp=0;gp<mc_np;gp++) {
00136      XANAGeneratorParticle *gpart = (XANAGeneratorParticle *)((*genpart)[gp]);
00137      if (gpart->getPartId()==11 && first==1)
00138      {
00139              ilink=gp;
00140              first=2;
00141      }
00142     }
00143     XANAGeneratorParticle *gElec = (XANAGeneratorParticle *)((*genpart)[ilink]);
00144     
00145 
00146     // Reconstructed event
00147     
00148     nc  = event->getNumberOfEmClusters();      clusters = event->getEmClusters(); 
00149     nh  = event->getNumberOfTrackHits();          hits = event->getEmClusterHits();   
00150     nhc = event->getNumberOfHadClusters();   hadClusters = event->getHadClusters();   
00151     ns  = event->getNumberOfSuperClusters(); superClusters = event->getSuperClusters(); 
00152     npc = event->getNumberOfPreshClusters(); preshClusters = event->getPreshClusters(); 
00153     nt  = event->getNumberOfTracks();        tracks = event->getTracks();
00154     nv  = event->getNumberOfVertices();      vertices = event->getVertices();   
00155     nvt = event->getNumberOfVertexTracks(); 
00156     ne  = event->getNumberOfElectronCandidates(); electrons = event->getElectronCandidates(); 
00157     nm  = event->getNumberOfMuonCandidates(); muons = event->getMuonCandidates(); 
00158     nelt    = event->getNumberOfElectronTracks();
00159     electronTracks = event->getElectronTracks();
00160 
00161 
00162     // electrons
00163     Int_t i_ze_el=-1;
00164     Float_t etmax=0.;
00165 
00166     for (Int_t ie=0; ie<ne; ie++) {
00167       XANAElectronCandidate *elec = (XANAElectronCandidate*)((*electrons)[ie]);
00168       if ( (fabs( elec->getSuperCluster()->getPosition().eta() ) <  1.4442 ||
00169             fabs( elec->getSuperCluster()->getPosition().eta() ) >  1.566 )
00170             && elec->getPt()/elec->getSuperCluster()->getEnergyScaleFactor() > etmax)
00171       {
00172             i_ze_el=ie;
00173             etmax=elec->getPt()/elec->getSuperCluster()->getEnergyScaleFactor();
00174       }
00175     }
00176     
00177     if (i_ze_el>-1)
00178     {
00179                XANAElectronCandidate *rElec = (XANAElectronCandidate*)((*electrons)[i_ze_el]);
00180 
00181 
00182                // E_rec/E_true
00183                float E_true = gElec->getMomentum().e();
00184                float E_rec = rElec->getSuperClusterEnergy()/rElec->getSuperCluster()->getEnergyScaleFactor();
00185 
00186                histo1001->Fill(E_rec/E_true);
00187 
00188                // S1 vs Red5
00189                float S1 = rElec->getSuperCluster()->getSum1();
00190                float Red5= rElec->getSuperCluster()->getSum9()-rElec->getSuperCluster()->getSum4();
00191 
00192 
00193                histo1002->Fill(Red5,S1);
00194                if (S1<1700)
00195                {
00196 
00197                 histo1003->Fill(Red5,S1);
00198                 if        (0<Red5 && Red5<=20)  { histo1011->Fill(S1/Red5); histo1111->Fill(S1); }
00199                 else if  (20<Red5 && Red5<=30)  { histo1012->Fill(S1/Red5); histo1112->Fill(S1); }
00200                 else if  (30<Red5 && Red5<=40)  { histo1013->Fill(S1/Red5); histo1113->Fill(S1); }
00201                 else if  (40<Red5 && Red5<=50)  { histo1014->Fill(S1/Red5); histo1114->Fill(S1); }
00202                 else if  (50<Red5 && Red5<=60)  { histo1015->Fill(S1/Red5); histo1115->Fill(S1); }
00203                 else if  (60<Red5 && Red5<=70)  { histo1016->Fill(S1/Red5); histo1116->Fill(S1); }
00204                 else if  (70<Red5 && Red5<=80)  { histo1017->Fill(S1/Red5); histo1117->Fill(S1); }
00205                 else if  (80<Red5 && Red5<=90)  { histo1018->Fill(S1/Red5); histo1118->Fill(S1); }
00206                 else if  (90<Red5 && Red5<=100) { histo1019->Fill(S1/Red5); histo1119->Fill(S1); }
00207                 else if (100<Red5 && Red5<=110) { histo1020->Fill(S1/Red5); histo1120->Fill(S1); }
00208                 else if (110<Red5 && Red5<=120) { histo1011->Fill(S1/Red5); histo1121->Fill(S1); }
00209                 }
00210                 else 
00211                 {
00212                   // verif de la saturation
00213                   float NewS1= 10.9*Red5;
00214 //                float NewS1= 11.0*Red5;
00215                   float NewErec= E_rec -S1 +NewS1;
00216                   histo1004->Fill(NewErec/E_rec);
00217                 }
00218 
00219 
00220                
00221     }
00222 
00223 
00224     event->clear(); 
00225     generatorEvent->clear();
00226     geantEvent->clear();
00227   }
00228   
00229 //  f.Close();
00230   //
00231      TFile *filehisto = new TFile("Saturation.root","RECREATE");
00232 
00233      histo1001->Write();
00234      histo1002->Write();
00235      histo1003->Write();
00236      histo1004->Write();
00237 
00238      histo1011->Write();
00239      histo1012->Write();
00240      histo1013->Write();
00241      histo1014->Write();
00242      histo1015->Write();
00243      histo1016->Write();
00244      histo1017->Write();
00245      histo1018->Write();
00246      histo1019->Write();
00247      histo1020->Write();
00248      histo1021->Write();
00249      histo1111->Write();
00250      histo1112->Write();
00251      histo1113->Write();
00252      histo1114->Write();
00253      histo1115->Write();
00254      histo1116->Write();
00255      histo1117->Write();
00256      histo1118->Write();
00257      histo1119->Write();
00258      histo1120->Write();
00259      histo1121->Write();
00260 
00261 
00262      filehisto->Close();
00263 
00264   
00265 }
00266 

Generated on Thu Oct 27 21:59:45 2005 for XANADOO by doxygen 1.3.5