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 <XANADOO/XANAnalysisRS/interface/RSElecSelector.h>
00022 #include <XANADOO/XANAnalysisRS/interface/RSCorrectionFunc.h>
00023 #include <XANADOO/XANAnalysisRS/interface/RSSaturation.h>
00024 #include <XANADOO/XANAnalysisRS/interface/RSPhotonAssoc.h>
00025 #include <XANADOO/XANAnalysisRS/interface/ClassRSElec.h>
00026 #include <XANADOO/XANAnalysisRS/interface/RSVertexCorr.h>
00027 #include <XANADOO/XANAnalysisRS/interface/RSDistribAng.h>
00028 #include <XANADOO/XANAnalysisRS/interface/RSMassEstim.h>
00029
00030
00031 #include "TTree.h"
00032 #include "TBits.h"
00033 #include "TObjectTable.h"
00034 #include "TFile.h"
00035 #include "TBranch.h"
00036 #include "TClonesArray.h"
00037 #include "TObjArray.h"
00038 #include "TH1.h"
00039 #include "TH2.h"
00040 #include "TSystem.h"
00041 #include "TChain.h"
00042
00043 #include <string>
00044
00045 using namespace std;
00046
00047 Short_t ne_candidatelectron=0,ns_supercluster=0;
00048 TObjArray *genpart = 0;
00049 TObjArray *clusters = 0;
00050 TObjArray *hadClusters = 0;
00051 TObjArray *superClusters = 0;
00052 TObjArray *preshClusters = 0;
00053 TRefArray *hits = 0;
00054 TObjArray *tracks = 0;
00055 TObjArray *vertices = 0;
00056 TObjArray *electrons = 0;
00057 TObjArray *electronTracks = 0;
00058 TObjArray *muons = 0;
00059
00060
00061
00062 int main(int argc, char** argv)
00063 {
00064
00065 TFile *f;
00066
00067 if (argc==1) f = new TFile("/data/scratch/collard/Production_xana151/zprim/famos/xZprimALRM_m1tev.root");
00068
00069 else f = new TFile(*++argv);
00070
00071
00072 TTree *T = (TTree*)f->Get("ESD");
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 XANAEsdEvent *event = new XANAEsdEvent();
00086 T->SetBranchAddress("Event.",&event);
00087
00088 XANAGeneratorEvent *generatorEvent = new XANAGeneratorEvent();
00089 T->SetBranchAddress("GeneratorEvent.",&generatorEvent);
00090
00091 XANAGeantEvent *geantEvent = new XANAGeantEvent();
00092 T->SetBranchAddress("GeantEvent.",&geantEvent);
00093
00094
00095
00096
00097
00098
00099 TH1F *histo1000 = new TH1F("histo1000","M Zprime gen ee ",280,0.,7.);
00100 TH1F *histo1001 = new TH1F("histo1001","M Zprime gen",280,0.,7.);
00101 TH1F *histo1002 = new TH1F("histo1002","M Zprime rec",280,0.,7.);
00102 TH1F *histo1003 = new TH1F("histo1003","Delta M ",100,-50.,50.);
00103 TH1F *histo1004 = new TH1F("histo1004","CosTheta gen",20,-1.,1.);
00104 TH1F *histo1005 = new TH1F("histo1005","CosTheta rec",20,-1.,1.);
00105 TH1F *histo1006 = new TH1F("histo1006","CosTheta gen",10,-1.,1.);
00106 TH1F *histo1007 = new TH1F("histo1007","CosTheta rec",10,-1.,1.);
00107 TH1F *histo1008 = new TH1F("histo1008","Delta Cos th",100,-0.5,0.5);
00108 TH1F *histo1009 = new TH1F("histo1009","Delta Cos th",100,-0.2,0.2);
00109
00110
00111 TH1F *histo2000 = new TH1F("histo2000","M Zprime gen ee ",24,0.4,1.6);
00112 TH1F *histo2001 = new TH1F("histo2001","M Zprime gen ",24,0.4,1.6);
00113 TH1F *histo2002 = new TH1F("histo2002","M Zprime rec ",24,0.4,1.6);
00114 TH1F *histo2003 = new TH1F("histo2003","M Zprime gen",32,0.5,1.3);
00115 TH1F *histo2004 = new TH1F("histo2004","M Zprime rec",32,0.5,1.3);
00116 TH1F *histo2005 = new TH1F("histo2005","M Zprime gen",80,0.5,1.3);
00117 TH1F *histo2006 = new TH1F("histo2006","M Zprime rec",80,0.5,1.3);
00118 TH1F *histo2007 = new TH1F("histo2007","M Zprime gen",160,0.5,1.3);
00119 TH1F *histo2008 = new TH1F("histo2008","M Zprime rec",160,0.5,1.3);
00120 TH1F *histo2009 = new TH1F("histo2009","M Zprime gen",800,0.5,1.3);
00121 TH1F *histo2010 = new TH1F("histo2010","M Zprime rec",800,0.5,1.3);
00122 TH1F *histo2011 = new TH1F("histo2011","CosTheta gen",20,-1.,1.);
00123 TH1F *histo2012 = new TH1F("histo2012","CosTheta rec",20,-1.,1.);
00124 TH1F *histo2013 = new TH1F("histo2013","CosTheta gen",10,-1.,1.);
00125 TH1F *histo2014 = new TH1F("histo2014","CosTheta rec",10,-1.,1.);
00126
00127
00128 TH1F *histo3000 = new TH1F("histo3000","M Zprime gen ee ",30,1.5,4.5);
00129 TH1F *histo3001 = new TH1F("histo3001","M Zprime gen ",30,1.5,4.5);
00130 TH1F *histo3002 = new TH1F("histo3002","M Zprime rec ",30,1.5,4.5);
00131 TH1F *histo3003 = new TH1F("histo3003","M Zprime gen",40,1.8,3.8);
00132 TH1F *histo3004 = new TH1F("histo3004","M Zprime rec",40,1.8,3.8);
00133 TH1F *histo3005 = new TH1F("histo3005","M Zprime gen",100,1.8,3.8);
00134 TH1F *histo3006 = new TH1F("histo3006","M Zprime rec",100,1.8,3.8);
00135 TH1F *histo3007 = new TH1F("histo3007","M Zprime gen",200,1.8,3.8);
00136 TH1F *histo3008 = new TH1F("histo3008","M Zprime rec",200,1.8,3.8);
00137 TH1F *histo3009 = new TH1F("histo3009","M Zprime gen",2000,1.8,3.8);
00138 TH1F *histo3010 = new TH1F("histo3010","M Zprime rec",2000,1.8,3.8);
00139 TH1F *histo3011 = new TH1F("histo3011","CosTheta gen",20,-1.,1.);
00140 TH1F *histo3012 = new TH1F("histo3012","CosTheta rec",20,-1.,1.);
00141 TH1F *histo3013 = new TH1F("histo3013","CosTheta gen",10,-1.,1.);
00142 TH1F *histo3014 = new TH1F("histo3014","CosTheta rec",10,-1.,1.);
00143
00144
00145 TH1F *histo4000 = new TH1F("histo4000","M Zprime gen ee ",40,3.0,7.0);
00146 TH1F *histo4001 = new TH1F("histo4001","M Zprime gen ",40,3.0,7.0);
00147 TH1F *histo4002 = new TH1F("histo4002","M Zprime rec ",40,3.0,7.0);
00148 TH1F *histo4003 = new TH1F("histo4003","M Zprime gen",50,3.5,6.0);
00149 TH1F *histo4004 = new TH1F("histo4004","M Zprime rec",50,3.5,6.0);
00150 TH1F *histo4005 = new TH1F("histo4005","M Zprime gen",125,3.5,6.0);
00151 TH1F *histo4006 = new TH1F("histo4006","M Zprime rec",125,3.5,6.0);
00152 TH1F *histo4007 = new TH1F("histo4007","M Zprime gen",250,3.5,6.0);
00153 TH1F *histo4008 = new TH1F("histo4008","M Zprime rec",250,3.5,6.0);
00154 TH1F *histo4009 = new TH1F("histo4009","M Zprime gen",2500,3.5,6.0);
00155 TH1F *histo4010 = new TH1F("histo4010","M Zprime rec",2500,3.5,6.0);
00156 TH1F *histo4011 = new TH1F("histo4011","CosTheta gen",20,-1.,1.);
00157 TH1F *histo4012 = new TH1F("histo4012","CosTheta rec",20,-1.,1.);
00158 TH1F *histo4013 = new TH1F("histo4013","CosTheta gen",10,-1.,1.);
00159 TH1F *histo4014 = new TH1F("histo4014","CosTheta rec",10,-1.,1.);
00160
00161
00162 TH1F *histo5000 = new TH1F("histo5000","M Zprime gen ee ",40,3.0,7.0);
00163 TH1F *histo5001 = new TH1F("histo5001","M Zprime gen ",40,3.0,7.0);
00164 TH1F *histo5002 = new TH1F("histo5002","M Zprime rec ",40,3.0,7.0);
00165 TH1F *histo5003 = new TH1F("histo5003","M Zprime gen",50,3.5,6.0);
00166 TH1F *histo5004 = new TH1F("histo5004","M Zprime rec",50,3.5,6.0);
00167 TH1F *histo5005 = new TH1F("histo5005","M Zprime gen",125,3.5,6.0);
00168 TH1F *histo5006 = new TH1F("histo5006","M Zprime rec",125,3.5,6.0);
00169 TH1F *histo5007 = new TH1F("histo5007","M Zprime gen",250,3.5,6.0);
00170 TH1F *histo5008 = new TH1F("histo5008","M Zprime rec",250,3.5,6.0);
00171 TH1F *histo5009 = new TH1F("histo5009","M Zprime gen",2500,3.5,6.0);
00172 TH1F *histo5010 = new TH1F("histo5010","M Zprime rec",2500,3.5,6.0);
00173 TH1F *histo5011 = new TH1F("histo5011","CosTheta gen",20,-1.,1.);
00174 TH1F *histo5012 = new TH1F("histo5012","CosTheta rec",20,-1.,1.);
00175 TH1F *histo5013 = new TH1F("histo5013","CosTheta gen",10,-1.,1.);
00176 TH1F *histo5014 = new TH1F("histo5014","CosTheta rec",10,-1.,1.);
00177
00178
00179
00180 Int_t nb = 0;
00181 Int_t nevent = (Int_t)T->GetEntries();
00182
00183
00184
00185
00186 cout << "Nombre d entrees a traiter : " << nevent << endl;
00187 for (Int_t i=0; i<nevent; i++) {
00188 nb += T->GetEntry(i);
00189
00190
00191
00192
00193
00194 Short_t mc_np = 0, mc_nsp = 0, mc_nssp = 0, mc_npp = 0, mc_nspp = 0 ;
00195 mc_np = generatorEvent->getNumberOfParticles();
00196 mc_nsp = generatorEvent->getNumberOfSignalParticles();
00197 mc_nssp = generatorEvent->getNumberOfStableSignalParticles();
00198 mc_npp = generatorEvent->getNumberOfPileupParticles();
00199 mc_nspp = generatorEvent->getNumberOfStablePileupParticles();
00200 genpart=generatorEvent->getParticles();
00201 int npart=0,izprime=11,ilink1=0,ilink2=0;
00202 for (int gp=0;gp<mc_np;gp++) {
00203 XANAGeneratorParticle *gpart = (XANAGeneratorParticle *)((*genpart)[gp]);
00204 if ((gpart->getPartId()==11 || gpart->getPartId()==-11) && gpart->getMo1()==12 )
00205 {
00206 if (npart==0)
00207 {
00208
00209 npart++;
00210 ilink1=gp;
00211 }
00212 else if (npart==1)
00213 {
00214
00215 npart++;
00216 ilink2=gp;
00217 }
00218 else
00219 {
00220 cout << " pas possible d'avoir 3 electrons rattaches au Zprime " << endl;
00221 }
00222 }
00223 }
00224 XANAGeneratorParticle *gZprim = (XANAGeneratorParticle *)((*genpart)[izprime]);
00225 XANAGeneratorParticle *gElec1 = (XANAGeneratorParticle *)((*genpart)[ilink1]);
00226 XANAGeneratorParticle *gElec2 = (XANAGeneratorParticle *)((*genpart)[ilink2]);
00227
00228 float ZMassGen=gZprim->getMass();
00229 float eeMassGen=RSMassGen(gElec1,gElec2);
00230 float costhetaGen = RSdistribAngGen(gElec1,gElec2);
00231
00232 histo1000->Fill( eeMassGen/1000.);
00233 histo2000->Fill( eeMassGen/1000.);
00234 histo3000->Fill( eeMassGen/1000.);
00235 histo4000->Fill( eeMassGen/1000.);
00236 histo5000->Fill( eeMassGen/1000.);
00237
00238 histo1001->Fill( ZMassGen/1000.);
00239
00240 histo2001->Fill( ZMassGen/1000.);
00241 histo2003->Fill( ZMassGen/1000.);
00242 histo2005->Fill( ZMassGen/1000.);
00243 histo2007->Fill( ZMassGen/1000.);
00244 histo2009->Fill( ZMassGen/1000.);
00245
00246 histo3001->Fill( ZMassGen/1000.);
00247 histo3003->Fill( ZMassGen/1000.);
00248 histo3005->Fill( ZMassGen/1000.);
00249 histo3007->Fill( ZMassGen/1000.);
00250 histo3009->Fill( ZMassGen/1000.);
00251
00252 histo4001->Fill( ZMassGen/1000.);
00253 histo4003->Fill( ZMassGen/1000.);
00254 histo4005->Fill( ZMassGen/1000.);
00255 histo4007->Fill( ZMassGen/1000.);
00256 histo4009->Fill( ZMassGen/1000.);
00257
00258 histo5001->Fill( ZMassGen/1000.);
00259 histo5003->Fill( ZMassGen/1000.);
00260 histo5005->Fill( ZMassGen/1000.);
00261 histo5007->Fill( ZMassGen/1000.);
00262 histo5009->Fill( ZMassGen/1000.);
00263
00264 histo1004->Fill( costhetaGen );
00265 histo1006->Fill( costhetaGen );
00266
00267
00268
00269
00270 Short_t nc = 0, nh = 0, nhc = 0, npc = 0, nt = 0, nv = 0, nvt = 0;
00271 Short_t nm = 0, nelt = 0 ;
00272
00273
00274 nc = event->getNumberOfEmClusters(); clusters = event->getEmClusters();
00275 nh = event->getNumberOfTrackHits(); hits = event->getEmClusterHits();
00276 nhc = event->getNumberOfHadClusters(); hadClusters = event->getHadClusters();
00277 ns_supercluster = event->getNumberOfSuperClusters();
00278 superClusters = event->getSuperClusters();
00279 npc = event->getNumberOfPreshClusters(); preshClusters = event->getPreshClusters();
00280 nt = event->getNumberOfTracks(); tracks = event->getTracks();
00281 nv = event->getNumberOfVertices(); vertices = event->getVertices();
00282 nvt = event->getNumberOfVertexTracks();
00283 ne_candidatelectron = event->getNumberOfElectronCandidates();
00284 electrons = event->getElectronCandidates();
00285 nm = event->getNumberOfMuonCandidates(); muons = event->getMuonCandidates();
00286 nelt = event->getNumberOfElectronTracks(); electronTracks = event->getElectronTracks();
00287
00288
00289
00290
00291 Int_t indexel1=-1, indexel2=-1;
00292
00293
00294
00295 RSSelection(indexel1, indexel2);
00296
00297
00298
00299 if (indexel1>-1 && indexel2>-1)
00300 {
00301 XANAElectronCandidate *elec1 = (XANAElectronCandidate*)((*electrons)[indexel1]);
00302 XANAElectronCandidate *elec2 = (XANAElectronCandidate*)((*electrons)[indexel2]);
00303
00304 float energy1 =elec1->getSuperClusterEnergy()/elec1->getSuperCluster()->getEnergyScaleFactor();
00305 float eta1 =elec1->getSuperCluster()->getPosition().eta();
00306 float phi1 =elec1->getSuperCluster()->getPosition().phi();
00307
00308 float energy2 =elec2->getSuperClusterEnergy()/elec2->getSuperCluster()->getEnergyScaleFactor();
00309 float eta2 =elec2->getSuperCluster()->getPosition().eta();
00310 float phi2 =elec2->getSuperCluster()->getPosition().phi();
00311
00312
00313 int iflag_satur=0;
00314 RSSaturation(elec1, energy1, iflag_satur);
00315 RSSaturation(elec2, energy2, iflag_satur);
00316
00317
00318 float EtIsol1=0.;
00319 float EtIsol2=0.;
00320 RSAssocPhoton(elec1, energy1, EtIsol1);
00321 RSAssocPhoton(elec2, energy2, EtIsol2);
00322
00323
00324
00325 bool FAMOS=true;
00326 float xcor1=RSCorrectionFunc(energy1, eta1, FAMOS);
00327 float xcor2=RSCorrectionFunc(energy2, eta2, FAMOS);
00328 xcor1=1./xcor1;
00329 xcor2=1./xcor2;
00330 energy1*=xcor1;
00331 energy2*=xcor2;
00332
00333
00334
00335 RSElec *cElec1 = new RSElec(elec1,energy1,eta1,phi1,EtIsol1);
00336 RSElec *cElec2 = new RSElec(elec2,energy2,eta2,phi2,EtIsol2);
00337
00338
00339 float eeMassRec=RSMassRec(cElec1,cElec2);
00340
00341
00342 if ( cElec1->getElecIsol()< 0.02* cElec1->getElecEt() &&
00343 cElec2->getElecIsol()< 0.02* cElec2->getElecEt() )
00344 {
00345 float costhetaRec = RSdistribAngRec(cElec1,cElec2);
00346
00347 histo1002->Fill( eeMassRec /1000. );
00348 histo1003->Fill( ZMassGen-eeMassRec);
00349
00350 histo1005->Fill(costhetaRec);
00351 histo1007->Fill(costhetaRec);
00352 histo1008->Fill( costhetaGen-costhetaRec);
00353 histo1009->Fill( costhetaGen-costhetaRec);
00354
00355 histo2002->Fill( eeMassRec /1000. );
00356 histo2004->Fill( eeMassRec /1000. );
00357 histo2006->Fill( eeMassRec /1000. );
00358 histo2008->Fill( eeMassRec /1000. );
00359 histo2010->Fill( eeMassRec /1000. );
00360
00361 histo3002->Fill( eeMassRec /1000. );
00362 histo3004->Fill( eeMassRec /1000. );
00363 histo3006->Fill( eeMassRec /1000. );
00364 histo3008->Fill( eeMassRec /1000. );
00365 histo3010->Fill( eeMassRec /1000. );
00366
00367 histo4002->Fill( eeMassRec /1000. );
00368 histo4004->Fill( eeMassRec /1000. );
00369 histo4006->Fill( eeMassRec /1000. );
00370 histo4008->Fill( eeMassRec /1000. );
00371 histo4010->Fill( eeMassRec /1000. );
00372
00373 if (iflag_satur==0)
00374 {
00375 histo5002->Fill( eeMassRec /1000. );
00376 histo5004->Fill( eeMassRec /1000. );
00377 histo5006->Fill( eeMassRec /1000. );
00378 histo5008->Fill( eeMassRec /1000. );
00379 histo5010->Fill( eeMassRec /1000. );
00380 }
00381
00382 if (900<eeMassRec && eeMassRec<1100)
00383 {
00384 histo2011->Fill( costhetaGen );
00385 histo2012->Fill( costhetaRec );
00386 histo2013->Fill( costhetaGen );
00387 histo2014->Fill( costhetaRec );
00388 }
00389 else if (2750<eeMassRec && eeMassRec<3250)
00390 {
00391 histo3011->Fill( costhetaGen );
00392 histo3012->Fill( costhetaRec );
00393 histo3013->Fill( costhetaGen );
00394 histo3014->Fill( costhetaRec );
00395 }
00396 else if (4500<eeMassRec && eeMassRec<5500)
00397 {
00398 histo4011->Fill( costhetaGen );
00399 histo4012->Fill( costhetaRec );
00400 histo4013->Fill( costhetaGen );
00401 histo4014->Fill( costhetaRec );
00402 if (iflag_satur==0)
00403 {
00404 histo5011->Fill( costhetaGen );
00405 histo5012->Fill( costhetaRec );
00406 histo5013->Fill( costhetaGen );
00407 histo5014->Fill( costhetaRec );
00408 }
00409 }
00410
00411
00412
00413 }
00414
00415
00416
00417 }
00418
00419
00420 event->clear();
00421 generatorEvent->clear();
00422 geantEvent->clear();
00423 }
00424
00425
00426
00427 TFile *filehisto = new TFile("Mass_0.root","RECREATE");
00428
00429 histo1000->Write();
00430 histo1001->Write();
00431 histo1002->Write();
00432 histo1003->Write();
00433 histo1004->Write();
00434 histo1005->Write();
00435 histo1006->Write();
00436 histo1007->Write();
00437 histo1008->Write();
00438 histo1009->Write();
00439
00440
00441 histo2000->Write();
00442 histo2001->Write();
00443 histo2002->Write();
00444 histo2003->Write();
00445 histo2004->Write();
00446 histo2005->Write();
00447 histo2006->Write();
00448 histo2007->Write();
00449 histo2008->Write();
00450 histo2009->Write();
00451 histo2010->Write();
00452 histo2011->Write();
00453 histo2012->Write();
00454 histo2013->Write();
00455 histo2014->Write();
00456
00457 histo3000->Write();
00458 histo3001->Write();
00459 histo3002->Write();
00460 histo3003->Write();
00461 histo3004->Write();
00462 histo3005->Write();
00463 histo3006->Write();
00464 histo3007->Write();
00465 histo3008->Write();
00466 histo3009->Write();
00467 histo3010->Write();
00468 histo3011->Write();
00469 histo3012->Write();
00470 histo3013->Write();
00471 histo3014->Write();
00472
00473 histo4000->Write();
00474 histo4001->Write();
00475 histo4002->Write();
00476 histo4003->Write();
00477 histo4004->Write();
00478 histo4005->Write();
00479 histo4006->Write();
00480 histo4007->Write();
00481 histo4008->Write();
00482 histo4009->Write();
00483 histo4010->Write();
00484 histo4011->Write();
00485 histo4012->Write();
00486 histo4013->Write();
00487 histo4014->Write();
00488
00489 histo5000->Write();
00490 histo5001->Write();
00491 histo5002->Write();
00492 histo5003->Write();
00493 histo5004->Write();
00494 histo5005->Write();
00495 histo5006->Write();
00496 histo5007->Write();
00497 histo5008->Write();
00498 histo5009->Write();
00499 histo5010->Write();
00500 histo5011->Write();
00501 histo5012->Write();
00502 histo5013->Write();
00503 histo5014->Write();
00504
00505
00506 filehisto->Close();
00507
00508
00509 }
00510
00511
00512