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
00014 #include "TTree.h"
00015 #include "TFile.h"
00016 #include "TBranch.h"
00017 #include "TClonesArray.h"
00018 #include "TObjArray.h"
00019 #include "TH1.h"
00020 #include "TH2.h"
00021 #include "TSystem.h"
00022
00023 #include <string>
00024
00025
00026 #define SINGLE_ELECTRON
00027
00028
00029 using namespace std;
00030
00031 int main(int argc, char** argv)
00032 {
00033 string inputFileName = "h300eemm.root";
00034 string histoFileName = "hist_"+inputFileName;
00035
00036
00037 TFile f(inputFileName.c_str());
00038
00039
00040
00041
00042 TH1F hClustersNumber("hClustersNumber", "Number of clusters", 20, 0., 20.);
00043 TH1F hClustersEnergy("hClustersEnergy", "Energy of cluster", 100, 0., 500.);
00044 TH1F hSuperClustersNumber("hSuperClustersNumber", "Number of super clusters", 50, 0., 50.);
00045 TH1F hSuperClustersEnergy("hSuperClustersEnergy", "Energy of super cluster", 100, 0., 500.);
00046 TH1F hBremsRecovered("hBremsRecovered","Energy of recovered bremsstrahlung photons",100,0.,200.);
00047 TH2F hBremsDetaDphi("hBremsDetaDphi","Delta phi vs Delta eta for brems clusters",100,-0.3,0.3,100,-0.3,0.3);
00048
00049 TH1F hHadClustersNumber("hHadClustersNumber", "Number of hadron clusters", 20, 0., 20.);
00050 TH1F hHadClustersEnergy("hHadClustersEnergy", "Energy of hadron cluster", 100, 0., 500.);
00051
00052 TH1F hPreshClustersNumber("hPreshClustersNumber", "Number of preshower clusters", 20, 0., 20.);
00053
00054
00055 TH1F hHitsNumber("hHitsNumber", "Number of hits", 100, 0., 100.);
00056 TH1F hHitsEnergy("hHitsEnergy", "Energy of hit", 200, 0., 200.);
00057
00058
00059 TH1F hTracksNumber("hTracksNumber", "Number of tracks", 10, 0., 10.);
00060 TH1F hTracksMomentumAtVertex("hTracksMomentumAtVertex", "Momentum of track at vertex", 100, 0., 500.);
00061 TH1F hTracksMomentumAtFirstPoint("hTracksMomentumAtFirstPoint", "Momentum of track at first point", 100, 0., 500.);
00062 TH1F hTracksMomentumAtLastPoint("hTracksMomentumAtLastPoint", "Momentum of track at last point", 100, 0., 500.);
00063
00064
00065 TH1F hVertexNumber("hVertexNumber", "Number of vertices", 10, 0., 10.);
00066 TH1F hVertexTracksNumber("hVertexTracksNumber", "Number of vertex tracks", 10, 0., 10.);
00067
00068
00069
00070
00071 TH1F hGenNumberOfParticles("hGenNumberOfParticles","Generator info: number of particles", 100, 0., 100.);
00072
00073 #ifdef SINGLE_ELECTRON
00074 TH1F hGenElectronMomentum("hGenElectronMomentum","Generator info: Electron momentum", 100, 0., 500.);
00075 TH1F hGenElectronPt("hGenElectronPt","MGeneratorC info: Electron pT", 200, 0., 200.);
00076 TH1F hGenElectronEta("hGenElectronEta","Generator info: Electron eta", 100, -3.,3.);
00077 TH1F hGenElectronPhi("hGenElectronPhi","Generator info: Electron phi", 100, -3.2,3.2);
00078 XANAGeneratorParticle *tmpGenElectron = 0;
00079 #endif
00080
00081
00082 TH1F hGeantNumberOfTracks("hGeantNumberOfTracks","GEANT info: Number of tracks", 50, 0., 50.);
00083 TH1F hGeantNumberOfVertices("hGeantNumberOfVertices","GEANT info: Number of vertices", 50, 0., 50.);
00084
00085
00086 TH1F hElectronNumber("hElectronNumber", "Number of electrons", 10, 0., 10.);
00087 TH1F hElectronEscOverP("hElectronEscOverP", "Electron: E supercluster over P", 100, 0.5, 1.5);
00088 TH1F hElectronDetaSc("hElectronDetaSc", "Electron: Delta eta super cluster", 100, -0.2, 0.2);
00089 TH1F hElectronHoE("hElectronHoE", "Electron: Hadronic over Em", 100, 0.5, 1.5);
00090
00091
00092 TTree *T = (TTree*)f.Get("ESD");
00093
00094
00095 XANAEsdEvent *event = 0;
00096 T->SetBranchAddress("Event",&event);
00097
00098 Short_t nc = 0, nh = 0, nhc = 0, ns = 0, npc = 0, nt = 0, nv = 0, nvt = 0;
00099 Short_t nbrems = 0, ne = 0;
00100
00101 TObjArray *clusters = 0;
00102 TObjArray *hadClusters = 0;
00103 TObjArray *superClusters = 0;
00104 TObjArray *preshClusters = 0;
00105 TRefArray *hits = 0;
00106 TObjArray *tracks = 0;
00107 TObjArray *vertices = 0;
00108 TObjArray *electrons = 0;
00109
00110 XANAEmCluster *tmpEmCluster = 0;
00111 XANASuperCluster *tmpSuperCluster = 0;
00112 XANAEmCluster *tmpSeedCluster = 0;
00113 XANAEmCluster *tmpBremCluster = 0;
00114 XANAHadCluster *tmpHadCluster = 0;
00115 XANAElectronCandidate *tmpElectronCandidate = 0;
00116
00117
00118 XANAGeneratorEvent *generatorEvent = new XANAGeneratorEvent();
00119 TBranch *branchGeneratorEvent = T->GetBranch("GeneratorEvent");
00120 branchGeneratorEvent->SetAddress(&generatorEvent);
00121
00122 XANAGeantEvent *geantEvent = new XANAGeantEvent();
00123 TBranch *branchGeantEvent = T->GetBranch("GeantEvent");
00124 branchGeantEvent->SetAddress(&geantEvent);
00125
00126 Short_t mc_np = 0, mc_nsp = 0, mc_nssp = 0, mc_npp = 0, mc_nspp = 0, mc_ngt = 0, mc_ngv = 0;
00127
00128
00129 Int_t nb = 0;
00130 Int_t nevent = (Int_t)T->GetEntries();
00131 for (Int_t i=0; i<nevent; i++) {
00132 nb += T->GetEntry(i);
00133
00134 cout << "================ Event: " << i << " ================" << endl;
00135
00136
00137
00138 cout << "Reconstructed:" ;
00139
00140 nc = event->getNumberOfEmClusters(); clusters = event->getEmClusters();
00141 nh = event->getNumberOfEmClusterHits(); hits = event->getEmClusterHits();
00142 nhc = event->getNumberOfHadClusters(); hadClusters = event->getHadClusters();
00143 ns = event->getNumberOfSuperClusters(); superClusters = event->getSuperClusters();
00144 npc = event->getNumberOfPreshClusters(); preshClusters = event->getPreshClusters();
00145 nt = event->getNumberOfTracks(); tracks = event->getTracks();
00146 nv = event->getNumberOfVertices(); vertices = event->getVertices();
00147 nvt = event->getNumberOfVertexTracks();
00148 ne = event->getNumberOfElectronCandidates(); electrons = event->getElectronCandidates();
00149
00150 cout << " clust, hits, hadClu, supers, presho, tracks, vertex, vTrack, nElec" << endl;
00151 printf(" \t \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);
00152
00153
00154
00155
00156 mc_np = generatorEvent->getNumberOfParticles();
00157 mc_nsp = generatorEvent->getNumberOfSignalParticles();
00158 mc_nssp = generatorEvent->getNumberOfStableSignalParticles();
00159 mc_npp = generatorEvent->getNumberOfPileupParticles();
00160 mc_nspp = generatorEvent->getNumberOfStablePileupParticles();
00161
00162
00163 mc_ngt = geantEvent->getNumberOfGeantTracks();
00164 mc_ngv = geantEvent->getNumberOfGeantVertices();
00165
00166 cout << "MC Info: ";
00167 cout << "parti, signl, stSig, pileup, stPil, geantTr, geantVe" << endl;
00168 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);
00169
00170
00171
00172
00173
00174
00175 hClustersNumber.Fill((Axis_t) nc);
00176 for (int ic = 0; ic < nc; ic++)
00177 {
00178 tmpEmCluster = (XANAEmCluster *) clusters->At(ic);
00179 hClustersEnergy.Fill((Axis_t) tmpEmCluster->getEnergy());
00180 }
00181
00182 hSuperClustersNumber.Fill((Axis_t) ns);
00183 for (int is = 0; is < ns; is++)
00184 {
00185 tmpSuperCluster = (XANASuperCluster *) superClusters->At(is);
00186 hSuperClustersEnergy.Fill((Axis_t) tmpSuperCluster->getEnergy());
00187 tmpSeedCluster = (XANAEmCluster *) tmpSuperCluster->getSeedCluster();
00188 hBremsRecovered.Fill((Axis_t) tmpSuperCluster->getEnergy() - tmpSeedCluster->getEnergy());
00189 nbrems = tmpSuperCluster->getNumberOfBrems();
00190 for (int ib = 0; ib < nbrems; ib++)
00191 {
00192 tmpBremCluster = (XANAEmCluster *) tmpSuperCluster->getBremClusters()->At(ib);
00193 hBremsDetaDphi.Fill(tmpSeedCluster->getPosition().getEta()-tmpBremCluster->getPosition().getEta(),
00194 tmpSeedCluster->getPosition().getPhi()-tmpBremCluster->getPosition().getPhi());
00195 }
00196 }
00197
00198 hHadClustersNumber.Fill((Axis_t) nh);
00199 for (int ihc = 0; ihc < nhc; ihc++)
00200 {
00201 tmpHadCluster = (XANAHadCluster *) hadClusters->At(ihc);
00202 hHadClustersEnergy.Fill((Axis_t) tmpHadCluster->getEnergy());
00203 }
00204
00205 hPreshClustersNumber.Fill((Axis_t) npc);
00206
00207
00208 XANACaloRecHit *tmpCaloRecHit;
00209
00210 hHitsNumber.Fill((Axis_t) nh);
00211 for (int ih = 0; ih < nh; ih++)
00212 {
00213 tmpCaloRecHit = (XANACaloRecHit *) hits->At(ih);
00214 hHitsEnergy.Fill((Axis_t) tmpCaloRecHit->getEnergy());
00215 }
00216
00217
00218 XANATrack *tmpTrack;
00219
00220 hTracksNumber.Fill((Axis_t) nt);
00221 for (int it = 0; it < nt; it++)
00222 {
00223 tmpTrack = (XANATrack *) tracks->At(it);
00224 hTracksMomentumAtVertex.Fill((Axis_t) tmpTrack->getMomentumAtVertex().mag());
00225 hTracksMomentumAtFirstPoint.Fill((Axis_t) tmpTrack->getMomentumAtFirstPoint().mag());
00226 hTracksMomentumAtLastPoint.Fill((Axis_t) tmpTrack->getMomentumAtLastPoint().mag());
00227 }
00228
00229
00230 hVertexNumber.Fill((Axis_t) nv);
00231 hVertexTracksNumber.Fill((Axis_t) nvt);
00232
00233
00234
00235
00236 hGenNumberOfParticles.Fill((Axis_t) mc_np);
00237
00238 #ifdef SINGLE_ELECTRON
00239 tmpGenElectron = (XANAGeneratorParticle *) generatorEvent->getSignalParticles()->At(0);
00240 hGenElectronMomentum.Fill((Axis_t) tmpGenElectron->getMomentum().vect().mag());
00241 hGenElectronPt.Fill((Axis_t) tmpGenElectron->getMomentum().perp());
00242 hGenElectronEta.Fill((Axis_t) tmpGenElectron->getMomentum().pseudoRapidity());
00243 hGenElectronPhi.Fill((Axis_t) tmpGenElectron->getMomentum().phi());
00244 #endif
00245
00246
00247 hGeantNumberOfTracks.Fill((Axis_t) mc_ngt);
00248 hGeantNumberOfVertices.Fill((Axis_t) mc_ngv);
00249
00250
00251
00252 hElectronNumber.Fill((Axis_t) ne);
00253 if (ne != 0) {
00254 cout << "Electrons: Esc/p, DetaSC, HoE" << endl;
00255 for (int ie = 0; ie < ne ; ie++) {
00256 tmpElectronCandidate = (XANAElectronCandidate *) electrons->At(ie);
00257
00258 hElectronEscOverP.Fill((Axis_t) tmpElectronCandidate->getESuperClusterOverP());
00259 hElectronDetaSc.Fill((Axis_t) tmpElectronCandidate->getDeltaEtaSuperClusterAtVtx());
00260 hElectronHoE.Fill((Axis_t) tmpElectronCandidate->getHadronicOverEm());
00261
00262 printf(" %d, \t%f, %f, %f \n", ie+1,
00263 tmpElectronCandidate->getESuperClusterOverP(),
00264 tmpElectronCandidate->getDeltaEtaSuperClusterAtVtx(),
00265 tmpElectronCandidate->getHadronicOverEm());
00266 }
00267 }
00268
00269
00270 event->clear();
00271 generatorEvent->clear();
00272 geantEvent->clear();
00273 }
00274
00275 cout << endl;
00276 cout << nevent << " events and " << nb << " bytes read " << endl;
00277 cout << endl;
00278
00279 f.Close();
00280
00281
00282
00283 TFile hFile(histoFileName.c_str(),"RECREATE");
00284
00285 hClustersNumber.Write();
00286 hClustersEnergy.Write();
00287 hSuperClustersNumber.Write();
00288 hSuperClustersEnergy.Write();
00289 hHadClustersNumber.Write();
00290 hHadClustersEnergy.Write();
00291 hPreshClustersNumber.Write();
00292 hHitsNumber.Write();
00293 hHitsEnergy.Write();
00294 hTracksNumber.Write();
00295 hTracksMomentumAtVertex.Write();
00296 hTracksMomentumAtFirstPoint.Write();
00297 hTracksMomentumAtLastPoint.Write();
00298 hBremsRecovered.Write();
00299 hBremsDetaDphi.Write();
00300 hVertexNumber.Write();
00301 hVertexTracksNumber.Write();
00302 hGenNumberOfParticles.Write();
00303 #ifdef SINGLE_ELECTRON
00304 hGenElectronMomentum.Write();
00305 hGenElectronPt.Write();
00306 hGenElectronEta.Write();
00307 hGenElectronPhi.Write();
00308 #endif
00309 hGeantNumberOfTracks.Write();
00310 hGeantNumberOfVertices.Write();
00311 hElectronNumber.Write();
00312 hElectronEscOverP.Write();
00313 hElectronDetaSc.Write();
00314 hElectronHoE.Write();
00315
00316 hFile.Close();
00317
00318
00319 }