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
00042 TFile *f;
00043 if (argc==1) f = new TFile("h300eemm.root");
00044 else f = new TFile(*++argv);
00045
00046
00047 TTree *T = (TTree*)f->Get("ESD");
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 XANAEsdEvent *event = new XANAEsdEvent();
00060 T->SetBranchAddress("Event.",&event);
00061
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
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
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
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
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
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
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
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
00252
00253
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
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
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
00286
00287 }