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 "TTree.h"
00020 #include "TBits.h"
00021 #include "TObjectTable.h"
00022 #include "TFile.h"
00023 #include "TBranch.h"
00024 #include "TClonesArray.h"
00025 #include "TObjArray.h"
00026 #include "TH1.h"
00027 #include "TH2.h"
00028 #include "TSystem.h"
00029 #include "TChain.h"
00030
00031 #include <string>
00032
00033
00034 using namespace std;
00035
00036 int main(int argc, char** argv)
00037 {
00038
00039 TFile *f;
00040
00041 if (argc==1) f = new TFile("h300eemm.root");
00042 else f = new TFile(*++argv);
00043
00044
00045 TTree *T = (TTree*)f->Get("ESD");
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 XANAEsdEvent *event = new XANAEsdEvent();
00058 T->SetBranchAddress("Event.",&event);
00059
00060 XANAGeneratorEvent *generatorEvent = new XANAGeneratorEvent();
00061 T->SetBranchAddress("GeneratorEvent.",&generatorEvent);
00062
00063 XANAGeantEvent *geantEvent = new XANAGeantEvent();
00064 T->SetBranchAddress("GeantEvent.",&geantEvent);
00065
00066 Short_t nc = 0, nh = 0, nhc = 0, ns = 0, npc = 0, nt = 0, nv = 0, nvt = 0;
00067 Short_t ne = 0, nm=0, nelt = 0;
00068
00069 TObjArray *clusters = 0;
00070 TObjArray *hadClusters = 0;
00071 TObjArray *superClusters = 0;
00072 TObjArray *preshClusters = 0;
00073 TRefArray *hits = 0;
00074 TObjArray *tracks = 0;
00075 TObjArray *vertices = 0;
00076 TObjArray *electrons = 0;
00077 TObjArray *electronTracks = 0;
00078 TObjArray *muons = 0;
00079
00080 Short_t mc_np = 0, mc_nsp = 0, mc_nssp = 0, mc_npp = 0, mc_nspp = 0, mc_ngt = 0, mc_ngv = 0;
00081
00082
00083 Int_t nb = 0;
00084 Int_t nevent = (Int_t)T->GetEntries();
00085 cout << "================== Total number of events: " << nevent << " ================" << endl;
00086
00087 for (Int_t i=0; i<nevent; i++) {
00088 nb += T->GetEntry(i);
00089
00090 cout << "================ Event: " << i << " ================" << endl;
00091
00092
00093
00094 cout << "Reconstructed:" ;
00095
00096 nc = event->getNumberOfEmClusters(); clusters = event->getEmClusters();
00097 nh = event->getNumberOfEmClusterHits(); hits = event->getEmClusterHits();
00098 nhc = event->getNumberOfHadClusters(); hadClusters = event->getHadClusters();
00099 ns = event->getNumberOfSuperClusters(); superClusters = event->getSuperClusters();
00100 npc = event->getNumberOfPreshClusters(); preshClusters = event->getPreshClusters();
00101 nt = event->getNumberOfTracks(); tracks = event->getTracks();
00102 nv = event->getNumberOfVertices(); vertices = event->getVertices();
00103 nvt = event->getNumberOfVertexTracks();
00104 ne = event->getNumberOfElectronCandidates(); electrons = event->getElectronCandidates();
00105 nm = event->getNumberOfMuonCandidates(); muons = event->getMuonCandidates();
00106 nelt = event->getNumberOfElectronTracks();
00107 electronTracks = event->getElectronTracks();
00108
00109 XANATriggerInfo trigger(event->getTriggerInfo());
00110
00111 cout << " clust, hits, hadClu, supers, presho, tracks, vertex, vTrack, nElec, nMuons" << endl;
00112 printf(" \t \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);
00113 cout << " Number of electron tracks: "<<nelt <<endl;
00114
00115
00116 for (Int_t ie=0; ie<ne; ie++) {
00117 XANAElectronCandidate *elec = (XANAElectronCandidate*)((*electrons)[ie]);
00118 cout << "new electron candidate : " << elec << endl;
00119 cout << " 4-momentum at vertex = " << elec->getMomentumAtVertex() << endl;
00120 cout << " Pt at vertex = " << elec->getPt() << endl;
00121 cout << " eta at vertex = " << elec->getEta() << endl;
00122 cout << " phi at vertex = " << elec->getPhi() << endl;
00123 cout << " track momentum at calo = " << elec->getTrackMomentumAtCalo() << endl;
00124 cout << " super cluster position = " << elec->getSuperClusterPosition() << endl;
00125 cout << " super cluster (eta,phi) = " << "("<<elec->getSuperClusterPosition().pseudoRapidity()<<
00126 ","<<elec->getSuperClusterPosition().phi()<<")"<< endl;
00127 cout << " track position at calo = " << elec->getTrackPositionAtCalo() << endl;
00128 cout << " Esuper/p = " << elec->getESuperClusterOverP() << endl;
00129 cout << " Eseed/p = " << elec->getESeedClusterOverP() << endl;
00130 cout << " deta (seed-track) at calo = " << elec->getDeltaEtaSeedClusterAtCalo() << endl;
00131 cout << " dphi (seed-track) at calo = " << elec->getDeltaPhiSeedClusterAtCalo() << endl;
00132 cout << " deta (super-track) at calo = " << elec->getDeltaEtaSuperClusterAtCalo() << endl;
00133 cout << " dphi (super-track) at calo = " << elec->getDeltaPhiSuperClusterAtCalo() << endl;
00134 cout << " deta (super-track) at vtx = " << elec->getDeltaEtaSuperClusterAtVtx() << endl;
00135 cout << " dphi (super-track) at vtx = " << elec->getDeltaPhiSuperClusterAtVtx() << endl;
00136 cout << " track iso = " << elec->getTrackIsolation() << endl;
00137 cout << " calo iso = " << elec->getCaloIsolation() << endl;
00138 cout << " had/em = " << elec->getHadronicOverEm() << endl;
00139 cout << " algo = " << elec->getAlgoName() << endl;
00140 cout << " constituant seed cluster : " << endl;
00141 cout << " seed " << elec->getSeedCluster() << endl;
00142 cout << " constituant super cluster : " << endl;
00143 cout << " super " << elec->getSuperCluster() << endl;
00144 if (elec->getSuperCluster()) {
00145 cout << " E = " << elec->getSuperCluster()->getEnergy() << endl ;
00146 cout << " (x,y,z) = " << elec->getSuperCluster()->getPosition() << endl ;
00147 }
00148 cout << " constituant brem clusters : " << endl;
00149 cout << " brems " << elec->getBremClusters() << endl;
00150 if (elec->getBremClusters()) {
00151
00152
00153 }
00154 cout << " constituant electron track : " << endl;
00155 cout << " eletk " << elec->getElectronTrack() << endl;
00156 if (elec->getElectronTrack()) {
00157 cout << " q = " << elec->getElectronTrack()->getCharge() << endl ;
00158 cout << " chi2 = " << elec->getElectronTrack()->getChi2OverDof() << endl ;
00159 cout << " n hits = " << elec->getElectronTrack()->getNumberOfHits() << endl ;
00160 cout << " lost hits = " << elec->getElectronTrack()->getNumberOfLostHits() << endl ;
00161 cout << " long impact param = " << elec->getElectronTrack()->getLongImpactParameter() << endl ;
00162 cout << " trans impact param = " << elec->getElectronTrack()->getTransImpactParameter() << endl ;
00163 cout << " 3D impact param = " << elec->getElectronTrack()->getImpactParameter() << endl ;
00164 cout << " momentum at vertex = " << elec->getElectronTrack()->getMomentumAtVertex() << endl ;
00165 cout << " momentum at first hit = " << elec->getElectronTrack()->getMomentumAtFirstPoint() << endl ;
00166 cout << " momentum at last hit = " << elec->getElectronTrack()->getMomentumAtLastPoint() << endl ;
00167 cout << " position at first hit = " << elec->getElectronTrack()->getPositionAtFirstPoint() << endl ;
00168 cout << " position at last hit = " << elec->getElectronTrack()->getPositionAtLastPoint() << endl ;
00169 cout << " track algo = " << elec->getElectronTrack()->getAlgoName() << endl;
00170 cout << " vertex = " << elec->getElectronTrack()->getVertex() << endl;
00171 cout << " super = " << elec->getElectronTrack()->getSuperCluster() << endl;
00172
00173 cout << " elec = " << elec->getElectronTrack()->getElectronCandidate() << endl;
00174 cout << " seed = " << elec->getElectronTrack()->getElectronSeed() << endl;
00175 if (elec->getElectronTrack()->getElectronSeed()) {
00176 cout << " seed n hits = " << elec->getElectronTrack()->getElectronSeed()->getNumberOfHits() << endl;
00177 cout << " seed algo = " << elec->getElectronTrack()->getElectronSeed()->getAlgoName() << endl;
00178 cout << " seed super cluster = " << elec->getElectronTrack()->getElectronSeed()->getSuperCluster() << endl;
00179 cout << " seed electron track = " << elec->getElectronTrack()->getElectronSeed()->getElectronTrack() << endl;
00180 if (event->getEleTrackHits()) cout << " Nr of entries for electron track hits = " << event->getEleTrackHits()->GetEntries() << endl;
00181 cout << " Number of electron track hits = "<<event->getNumberOfEleTrackHits() << endl;
00182 }
00183 }
00184 }
00185 cout << endl;
00186
00187
00188
00189 Short_t nchits=event->getNumberOfCaloRecHits();
00190 Short_t ntrhits=event->getNumberOfAllTrackHits();
00191 Short_t nelerechits=0;
00192 if (event->getEleTrackHits()) nelerechits=event->getEleTrackHits()->GetEntries();
00193 cout << nchits<< " CaloRecHits, " << ntrhits << " TrackHits, "<<nelerechits << " ElectronTrackHits. "<< endl;
00194
00195
00196 cout << " Jets: " << event->getNumberOfJets() <<endl;
00197 TObjArray *a =event->getJets();
00198 for (int i=0;i<event->getNumberOfJets();i++) {
00199 cout <<" Jet "<< i <<" has "<<((XANAJet* )a->At(i))->getNumberOfClusters()<<" HadClusters "<<endl;
00200 }
00201
00202
00203
00204
00205 mc_np = generatorEvent->getNumberOfParticles();
00206 mc_nsp = generatorEvent->getNumberOfSignalParticles();
00207 mc_nssp = generatorEvent->getNumberOfStableSignalParticles();
00208 mc_npp = generatorEvent->getNumberOfPileupParticles();
00209 mc_nspp = generatorEvent->getNumberOfStablePileupParticles();
00210
00211
00212 mc_ngt = geantEvent->getNumberOfGeantTracks();
00213 mc_ngv = geantEvent->getNumberOfGeantVertices();
00214
00215 cout <<endl;
00216 cout << "MC Info: ";
00217 cout << "parti, signl, stSig, pileup, stPil, geantTr, geantVe" << endl;
00218 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);
00219
00220 cout << endl;
00221 cout << "Trigger info: ";
00222 cout << "level1 decision " << trigger.getGlobalL1Decision() << " hlt decision : " << trigger.getHltDecision() << endl;
00223 cout << "Level 1 detailed response " << endl;
00224 trigger.getGlobalL1Response().Print();
00225 cout << "HLT detailed response " << endl;
00226 trigger.getHltResponse().Print();
00227
00228
00229
00230 event->clear();
00231 generatorEvent->clear();
00232 geantEvent->clear();
00233 }
00234
00235 cout << endl;
00236 cout << nevent << " events and " << nb << " bytes read " << endl;
00237 cout << endl;
00238
00239
00240
00241 }