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

readESD.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/XANAPhotonCandidate/interface/XANAPhotonCandidate.h>
00014 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronTrack.h>
00015 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronGSFTrack.h>
00016 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronSeed.h>
00017 #include <XANADOO/XANAMuons/interface/XANAMuonCandidate.h>
00018 #include <XANADOO/XANATriggerInfo/interface/XANATriggerInfo.h>
00019 #include <XANADOO/XANAJets/interface/XANAJet.h>
00020 #include <XANADOO/XANAUtilities/interface/XANAToolkit.h>
00021 
00022 #include "TTree.h"
00023 #include "TBits.h"
00024 #include "TObjectTable.h"
00025 #include "TFile.h"
00026 #include "TBranch.h"
00027 #include "TClonesArray.h"
00028 #include "TObjArray.h"
00029 #include "TH1.h"
00030 #include "TH2.h"
00031 #include "TSystem.h"
00032 #include "TChain.h"
00033 
00034 #include <string>
00035 
00036 
00037 using namespace std;
00038 
00039 int main(int argc, char** argv)
00040 {
00041   //   Connect to file generated
00042   TFile *f;
00043   if (argc==1) f = new TFile("h300eemm.root");
00044   else f = new TFile(*++argv);
00045  
00046     //   Read Tree named "T" in memory. Tree pointer is assigned the same name
00047   TTree *T = (TTree*)f->Get("ESD");
00048    
00049 // version TChain
00050 //   TChain *T = new TChain("ESD");
00051 //   T->Add("file1.root");
00052 //   T->Add("file2.root");
00053  
00054 // example of how to suppress reading of branches
00055 // has to be put before setting the branch addresses!
00056 // T->SetBranchStatus("GeantEvent*",0);
00057 
00058 // Reconstructed event
00059   XANAEsdEvent *event = new XANAEsdEvent();  
00060   T->SetBranchAddress("Event.",&event);
00061   // MC information (generator and GEANT event)
00062   XANAGeneratorEvent *generatorEvent = new XANAGeneratorEvent();
00063   T->SetBranchAddress("GeneratorEvent.",&generatorEvent);
00064     
00065   XANAGeantEvent *geantEvent = new XANAGeantEvent();
00066   T->SetBranchAddress("GeantEvent.",&geantEvent);
00067   
00068   Short_t nc = 0, nh = 0, nhc = 0, ns = 0, npc = 0,  nt = 0, nv = 0, nvt = 0;  
00069   Short_t ne = 0, nm=0, nelt = 0, np = 0;
00070   
00071   TObjArray *clusters = 0;
00072   TObjArray *hadClusters = 0;
00073   TObjArray *superClusters = 0;
00074   TObjArray *preshClusters = 0;
00075   TRefArray *hits = 0;
00076   TObjArray *tracks = 0;
00077   TObjArray *vertices = 0;
00078   TObjArray *electrons = 0;
00079   TObjArray *photons = 0;
00080   TObjArray *electronTracks = 0;
00081   TObjArray *muons = 0;
00082 
00083   Short_t mc_np = 0, mc_nsp = 0, mc_nssp = 0, mc_npp = 0, mc_nspp = 0, mc_ngt = 0, mc_ngv = 0;  
00084   
00085   //   Start main loop on all events
00086   Int_t nb = 0; 
00087   Int_t nevent = (Int_t)T->GetEntries();
00088   xana::out(5) << "================== Total number of events: " << nevent << " ================" << endl;    
00089  
00090   for (Int_t i=0; i<nevent; i++) {
00091     nb += T->GetEntry(i); 
00092 
00093      xana::out(5) << "================ Event: " << i << " ================" << endl;    
00094     
00095     // Reconstructed event
00096     
00097     xana::out(5) << "Reconstructed:" ;
00098     
00099     nc  = event->getNumberOfEmClusters();      clusters = event->getEmClusters(); 
00100     nh  = event->getNumberOfEmClusterHits();          hits = event->getEmClusterHits();   
00101     nhc = event->getNumberOfHadClusters();   hadClusters = event->getHadClusters();   
00102     ns  = event->getNumberOfSuperClusters(); superClusters = event->getSuperClusters(); 
00103     npc = event->getNumberOfPreshClusters(); preshClusters = event->getPreshClusters(); 
00104     nt  = event->getNumberOfTracks();        tracks = event->getTracks();
00105     nv  = event->getNumberOfVertices();      vertices = event->getVertices();   
00106     nvt = event->getNumberOfVertexTracks();  
00107     ne  = event->getNumberOfElectronCandidates(); electrons = event->getElectronCandidates();
00108     np  = event->getNumberOfPhotonCandidates(); photons = event->getPhotonCandidates();
00109     nm  = event->getNumberOfMuonCandidates(); muons = event->getMuonCandidates();
00110     nelt    = event->getNumberOfElectronTracks();
00111     electronTracks = event->getElectronTracks();
00112  
00113     XANATriggerInfo trigger(event->getTriggerInfo());
00114     
00115     cout << "  clust, hits, hadClu, supers, presho, tracks, vertex, vTrack, nElec, nMuons. nPhot" << endl;
00116     printf("  \t \t %d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", nc, nh, nhc, ns, npc, nt, nv, nvt, ne, nm, np);
00117     xana::out(5) << "Number of electron tracks: "<<nelt <<endl;
00118     
00119     // electrons
00120     for (Int_t ie=0; ie<ne; ie++) {
00121       XANAElectronCandidate *elec = (XANAElectronCandidate*)((*electrons)[ie]);
00122       xana::out(5) << "New electron candidate : " << elec << endl;
00123       xana::out(5) << " 4-momentum at vertex = " << elec->getMomentumAtVertex() << endl;
00124       if (elec->getElectronTrack()->getAlgoName() == "GSF") {
00125         XANAElectronGSFTrack *gsfetr = (XANAElectronGSFTrack *)(elec->getElectronTrack());
00126         if (elec->getSuperCluster()) xana::out(2) << " Unscaled 4-momentum at vertex = " 
00127          << elec->getMomentumAtVertex()*gsfetr->getGSFMomentumAtVertexMode().mag()/elec->getSuperCluster()->getEnergy() << endl;
00128       } else {
00129         if (elec->getSuperCluster()) xana::out(2) << " Unscaled 4-momentum at vertex = " 
00130          << elec->getMomentumAtVertex()*elec->getElectronTrack()->getMomentumAtVertex().mag()/elec->getSuperCluster()->getEnergy() << endl;
00131       }
00132       xana::out(5) << " Pt at vertex = " << elec->getPt() << endl;
00133       xana::out(5) << " eta at vertex = " << elec->getEta() << endl;
00134       xana::out(5) << " phi at vertex = " << elec->getPhi() << endl;
00135       xana::out(2) << " track momentum at calo = " << elec->getTrackMomentumAtCalo() << endl;
00136       xana::out(2) << " super cluster position = " << elec->getSuperClusterPosition() << endl;
00137       xana::out(2) << " super cluster (eta,phi) = " << "("<<elec->getSuperClusterPosition().pseudoRapidity()<<
00138                                           ","<<elec->getSuperClusterPosition().phi()<<")"<< endl;
00139       xana::out(2) << " track position at calo = " << elec->getTrackPositionAtCalo() << endl;
00140       xana::out(2) << " Esuper/p = " << elec->getESuperClusterOverP() << endl;
00141       xana::out(2) << " Eseed/p = " << elec->getESeedClusterOverP() << endl;
00142       xana::out(2) << " deta (seed-track) at calo = " << elec->getDeltaEtaSeedClusterAtCalo() << endl;
00143       xana::out(2) << " dphi (seed-track) at calo = " << elec->getDeltaPhiSeedClusterAtCalo() << endl;
00144       xana::out(2) << " deta (super-track) at calo = " << elec->getDeltaEtaSuperClusterAtCalo() << endl;
00145       xana::out(2) << " dphi (super-track) at calo = " << elec->getDeltaPhiSuperClusterAtCalo() << endl;
00146       xana::out(2) << " deta (super-track) at vtx = " << elec->getDeltaEtaSuperClusterAtVtx() << endl;
00147       xana::out(2) << " dphi (super-track) at vtx = " << elec->getDeltaPhiSuperClusterAtVtx() << endl;
00148       xana::out(2) << " track iso = " << elec->getTrackIsolation() << endl;
00149       xana::out(2) << " calo iso = " << elec->getCaloIsolation() << endl;
00150       xana::out(2) << " had/em = " << elec->getHadronicOverEm() << endl;
00151       xana::out(2) << " algo = " << elec->getAlgoName() << endl;
00152       xana::out(2) << " constituant seed cluster : " << endl;
00153       xana::out(2) << "  seed " << elec->getSeedCluster() << endl;
00154       xana::out(5) << " constituant super cluster : " << endl;
00155       xana::out(2) << "  super " << elec->getSuperCluster() << endl;
00156       if (elec->getSuperCluster()) {
00157       xana::out(5) << "  E = " << elec->getSuperCluster()->getEnergy() << endl ;
00158       xana::out(5) << "  Epresh = " << elec->getSuperCluster()->getPreshowerEnergy() << endl ;
00159       xana::out(5) << "  (x,y,z) = " << elec->getSuperCluster()->getPosition() << endl ;
00160       }
00161       xana::out(2) << " constituant brem clusters : " << endl;
00162       xana::out(2) << "  brems " << elec->getBremClusters() << endl;
00163       if (elec->getBremClusters()) {
00164       for (Int_t ibr=0; ibr<elec->getBremClusters()->GetEntries(); ibr++) {
00165         XANACluster *brem = (XANACluster *)((*(elec->getBremClusters()))[ibr]);
00166         xana::out(2) << "new brem cluster with energy " << brem->getEnergy() << endl;
00167       }
00168       }
00169       xana::out(5) << " constituant electron track : " << endl;
00170       xana::out(2) << "  eletk " << elec->getElectronTrack() << endl;
00171       if (elec->getElectronTrack()) {
00172       xana::out(5) << "  q = " << elec->getElectronTrack()->getCharge() << endl ;
00173       xana::out(5) << "  chi2 = " << elec->getElectronTrack()->getChi2OverDof() << endl ;
00174       xana::out(5) << "  n hits = " << elec->getElectronTrack()->getNumberOfHits() << endl ;
00175       xana::out(2) << "  lost hits = " << elec->getElectronTrack()->getNumberOfLostHits() << endl ;
00176       xana::out(2) << "  long impact param = " << elec->getElectronTrack()->getLongImpactParameter() << endl ;
00177       xana::out(2) << "  trans impact param = " << elec->getElectronTrack()->getTransImpactParameter() << endl ;
00178       xana::out(2) << "  3D impact param = " << elec->getElectronTrack()->getImpactParameter() << endl ;
00179       xana::out(2) << "  long impact param err = " << elec->getElectronTrack()->getLongImpactParameterError() << endl ;
00180       xana::out(2) << "  trans impact param err = " << elec->getElectronTrack()->getTransImpactParameterError() << endl ;
00181       xana::out(2) << "  3D impact param err = " << elec->getElectronTrack()->getImpactParameterError() << endl ;
00182       xana::out(5) << "  momentum at vertex = " << elec->getElectronTrack()->getMomentumAtVertex() << endl ;
00183       xana::out(2) << "  momentum at first hit = " << elec->getElectronTrack()->getMomentumAtFirstPoint() << endl ;
00184       xana::out(2) << "  momentum at last hit = " << elec->getElectronTrack()->getMomentumAtLastPoint() << endl ;
00185       xana::out(2) << "  position at first hit = " << elec->getElectronTrack()->getPositionAtFirstPoint() << endl ;
00186       xana::out(2) << "  position at last hit = " << elec->getElectronTrack()->getPositionAtLastPoint() << endl ;
00187       xana::out(2) << "  track algo = " << elec->getElectronTrack()->getAlgoName() << endl;
00188       xana::out(2) << "  vertex = " << elec->getElectronTrack()->getVertex() << endl;
00189       xana::out(2) << "  super = " << elec->getElectronTrack()->getSuperCluster() << endl;
00190       xana::out(2) << "  elec = " << elec->getElectronTrack()->getElectronCandidate() << endl;
00191       xana::out(2) << "  seed = " << elec->getElectronTrack()->getElectronSeed() << endl;
00192       if (elec->getElectronTrack()->getAlgoName() == "GSF") {
00193       xana::out(5) << "  specific to gsf tracks: " << endl ; 
00194       XANAElectronGSFTrack *gsfetr = (XANAElectronGSFTrack *)(elec->getElectronTrack());
00195       xana::out(5) << "  gsf momentum at vertex average = " << gsfetr->getGSFMomentumAtVertexWeightedMean() << endl ; 
00196       xana::out(5) << "  gsf momentum at vertex mode = " << gsfetr->getGSFMomentumAtVertexMode() << endl ; 
00197       xana::out(5) << "  gsf momentum at vertex mode pt = " << gsfetr->getGSFMomentumAtVertexMode().perp() << endl ; 
00198       xana::out(5) << "  gsf momentum at vertex mode phi = " << gsfetr->getGSFMomentumAtVertexMode().phi() << endl ; 
00199       }
00200       if (elec->getElectronTrack()->getElectronSeed()) {
00201       xana::out(2) << "  seed n hits = " << elec->getElectronTrack()->getElectronSeed()->getNumberOfHits() << endl;
00202       xana::out(2) << "  seed algo = " << elec->getElectronTrack()->getElectronSeed()->getAlgoName() << endl;
00203       xana::out(2) << "  seed super cluster = " << elec->getElectronTrack()->getElectronSeed()->getSuperCluster() << endl;
00204       xana::out(2) << "  seed electron track = " << elec->getElectronTrack()->getElectronSeed()->getElectronTrack() << endl;
00205       if (event->getEleTrackHits()) xana::out(2) << " Nr of entries for electron track hits = " << event->getEleTrackHits()->GetEntries() << endl;
00206       xana::out(2) << " Number of electron track hits = "<<event->getNumberOfEleTrackHits() <<  endl;
00207       }
00208       }
00209     }
00210  
00211     // electron tracks
00212     for (int iet=0;iet<nelt;iet++) {
00213       XANAElectronTrack *etr = (XANAElectronTrack *)((*electronTracks)[iet]);
00214       xana::out(2) << "New electron track of type " << etr->getAlgoName() << endl;
00215       if (etr->getAlgoName() == "GSF") {
00216         XANAElectronGSFTrack *gsfetr = (XANAElectronGSFTrack *)((*electronTracks)[iet]);
00217         xana::out(2) << " gsf e track pt at first weighted mean " << gsfetr->getGSFMomentumAtFirstPointWeightedMean().perp() << endl;
00218         xana::out(2) << " gsf e track pt at first mode " << gsfetr->getGSFMomentumAtFirstPointMode().perp() << endl;
00219         xana::out(2) << " gsf e track phi at first weighted mean " << gsfetr->getGSFMomentumAtFirstPointWeightedMean().phi() << endl;
00220         xana::out(2) << " gsf e track phi at first mode " << gsfetr->getGSFMomentumAtFirstPointMode().phi() << endl;
00221         xana::out(2) << " gsf e track pt at vertex weighted mean " << gsfetr->getGSFMomentumAtVertexWeightedMean().perp() << endl;
00222         xana::out(2) << " gsf e track pt at vertex mode " << gsfetr->getGSFMomentumAtVertexMode().perp() << endl;
00223         xana::out(2) << " gsf e track phi at vertex weighted mean " << gsfetr->getGSFMomentumAtVertexWeightedMean().phi() << endl;
00224         xana::out(2) << " gsf e track phi at vertex mode " << gsfetr->getGSFMomentumAtVertexMode().phi() << endl;
00225       }
00226     }
00227     
00228     // hits
00229     Short_t nchits=event->getNumberOfCaloRecHits();
00230     Short_t ntrhits=event->getNumberOfAllTrackHits();
00231     Short_t nelerechits=0;
00232     if (event->getEleTrackHits()) nelerechits=event->getEleTrackHits()->GetEntries();
00233     xana::out(2) <<"CaloRecHits: " << nchits << " TrackHits: " <<ntrhits << " ElectronTrackHits: " <<nelerechits << endl;
00234 
00235      // jets 
00236     xana::out(5) << "Jets: " << event->getNumberOfJets() <<endl;
00237     TObjArray *a =event->getJets();
00238     for (int i=0;i<event->getNumberOfJets();i++) {
00239       xana::out(5) <<" Jet "<< i <<" has "<<((XANAJet* )a->At(i))->getNumberOfClusters()<<" HadClusters "<<endl;
00240     }
00241 
00242      // photons 
00243     xana::out(5) << "Photons: " << np <<endl;
00244     TObjArray *b =event->getPhotonCandidates();
00245     for (int i=0;i<event->getNumberOfPhotonCandidates();i++) {
00246       xana::out(5) <<" Photon "<< i <<" with Pt: "<<((XANAPhotonCandidate* )b->At(i))->getPt()
00247                                     <<" eta:"<<((XANAPhotonCandidate* )b->At(i))->getEta()
00248                                     <<" phi:"<<((XANAPhotonCandidate* )b->At(i))->getPhi()<<endl;
00249     }
00250 
00251    // Monte Carlo information
00252    
00253     // generator event
00254     mc_np   = generatorEvent->getNumberOfParticles();
00255     mc_nsp  = generatorEvent->getNumberOfSignalParticles();
00256     mc_nssp = generatorEvent->getNumberOfStableSignalParticles();
00257     mc_npp  = generatorEvent->getNumberOfPileupParticles();
00258     mc_nspp = generatorEvent->getNumberOfStablePileupParticles();
00259     
00260     // GEANT event
00261     mc_ngt = geantEvent->getNumberOfGeantTracks();
00262     mc_ngv = geantEvent->getNumberOfGeantVertices();
00263     
00264     xana::out(5)  << "MC Info: ";
00265     xana::out(5) << "parti, signl, stSig, pileup, stPil, geantTr, geantVe" << endl; 
00266     printf("\t   %d\t %d\t%d\t%d\t%d\t%d\t%d\n", mc_np, mc_nsp, mc_nssp, mc_npp, mc_nspp, mc_ngt, mc_ngv);  
00267        
00268     xana::out(5) << "Trigger info:  ";
00269     xana::out(5) << " level1 decision " << trigger.getGlobalL1Decision() << " hlt decision : " << trigger.getHltDecision() << endl; 
00270     xana::out(2) << " Level 1 detailed response " << endl;
00271     trigger.getGlobalL1Response().Print();
00272     xana::out(2) << " HLT detailed response " << endl;
00273     trigger.getHltResponse().Print();
00274    
00275     //    gObjectTable->Print();
00276     event->clear(); 
00277     generatorEvent->clear();
00278     geantEvent->clear();
00279   }
00280   
00281   xana::out(8) << endl;
00282   xana::out(8) << nevent << " events and " << nb << " bytes read " << endl;  
00283   xana::out(8) << endl;
00284   
00285   //  f->Close();  
00286  
00287 }

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