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
00063 int main(int argc, char** argv)
00064 {
00065
00066 TFile *f;
00067
00068 if (argc==1) f = new TFile("rsG1tev5_100.root");
00069
00070 else f = new TFile(*++argv);
00071
00072
00073 TTree *T = (TTree*)f->Get("ESD");
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 XANAEsdEvent *event = new XANAEsdEvent();
00087 T->SetBranchAddress("Event.",&event);
00088
00089 XANAGeneratorEvent *generatorEvent = new XANAGeneratorEvent();
00090 T->SetBranchAddress("GeneratorEvent.",&generatorEvent);
00091
00092 XANAGeantEvent *geantEvent = new XANAGeantEvent();
00093 T->SetBranchAddress("GeantEvent.",&geantEvent);
00094
00095
00096 Int_t nb = 0;
00097 Int_t nevent = (Int_t)T->GetEntries();
00098
00099 nevent =5;
00100
00101 cout << "Nombre d entrees a traiter : " << nevent << endl;
00102 for (Int_t i=0; i<nevent; i++) {
00103 nb += T->GetEntry(i);
00104
00105 cout << " Graviton for event " << i << endl;
00106
00107
00108
00109
00110 Short_t mc_np = 0, mc_nsp = 0, mc_nssp = 0, mc_npp = 0, mc_nspp = 0 ;
00111 mc_np = generatorEvent->getNumberOfParticles();
00112 mc_nsp = generatorEvent->getNumberOfSignalParticles();
00113 mc_nssp = generatorEvent->getNumberOfStableSignalParticles();
00114 mc_npp = generatorEvent->getNumberOfPileupParticles();
00115 mc_nspp = generatorEvent->getNumberOfStablePileupParticles();
00116 genpart=generatorEvent->getParticles();
00117 int npart=0,iRSgrav=11,ilink1=0,ilink2=0;
00118 for (int gp=0;gp<mc_np;gp++) {
00119 XANAGeneratorParticle *gpart = (XANAGeneratorParticle *)((*genpart)[gp]);
00120 if ((gpart->getPartId()==11 || gpart->getPartId()==-11) && gpart->getMo1()==12 )
00121 {
00122 if (npart==0)
00123 {
00124
00125 npart++;
00126 ilink1=gp;
00127 }
00128 else if (npart==1)
00129 {
00130
00131 npart++;
00132 ilink2=gp;
00133 }
00134 else
00135 {
00136 cout << " pas possible d'avoir 3 electrons rattaches au RSgrav " << endl;
00137 }
00138 }
00139 }
00140 XANAGeneratorParticle *gRSgrav = (XANAGeneratorParticle *)((*genpart)[iRSgrav]);
00141 XANAGeneratorParticle *gElec1 = (XANAGeneratorParticle *)((*genpart)[ilink1]);
00142 XANAGeneratorParticle *gElec2 = (XANAGeneratorParticle *)((*genpart)[ilink2]);
00143
00144 float trueMassGen=gRSgrav->getMass();
00145 float eeMassGen=RSMassGen(gElec1,gElec2);
00146 float costhetaGen = RSdistribAngGen(gElec1,gElec2);
00147
00148 float eeMassRec=-1.;
00149 float costhetaRec = -2.;
00150
00151
00152
00153
00154
00155 Short_t nc = 0, nh = 0, nhc = 0, npc = 0, nt = 0, nv = 0, nvt = 0;
00156 Short_t nm = 0, nelt = 0 ;
00157
00158
00159 nc = event->getNumberOfEmClusters(); clusters = event->getEmClusters();
00160 nh = event->getNumberOfTrackHits(); hits = event->getEmClusterHits();
00161 nhc = event->getNumberOfHadClusters(); hadClusters = event->getHadClusters();
00162 ns_supercluster = event->getNumberOfSuperClusters();
00163 superClusters = event->getSuperClusters();
00164 npc = event->getNumberOfPreshClusters(); preshClusters = event->getPreshClusters();
00165 nt = event->getNumberOfTracks(); tracks = event->getTracks();
00166 nv = event->getNumberOfVertices(); vertices = event->getVertices();
00167 nvt = event->getNumberOfVertexTracks();
00168 ne_candidatelectron = event->getNumberOfElectronCandidates();
00169 electrons = event->getElectronCandidates();
00170 nm = event->getNumberOfMuonCandidates(); muons = event->getMuonCandidates();
00171 nelt = event->getNumberOfElectronTracks(); electronTracks = event->getElectronTracks();
00172
00173
00174
00175
00176
00177 Int_t indexel1=-1, indexel2=-1;
00178
00179
00180
00181 RSSelection(indexel1, indexel2);
00182
00183
00184
00185 if (indexel1>-1 && indexel2>-1)
00186 {
00187 XANAElectronCandidate *elec1 = (XANAElectronCandidate*)((*electrons)[indexel1]);
00188 XANAElectronCandidate *elec2 = (XANAElectronCandidate*)((*electrons)[indexel2]);
00189
00190 float energy1 =elec1->getSuperClusterEnergy()/elec1->getSuperCluster()->getEnergyScaleFactor();
00191 float eta1 =elec1->getSuperCluster()->getPosition().eta();
00192 float phi1 =elec1->getSuperCluster()->getPosition().phi();
00193
00194 float energy2 =elec2->getSuperClusterEnergy()/elec2->getSuperCluster()->getEnergyScaleFactor();
00195 float eta2 =elec2->getSuperCluster()->getPosition().eta();
00196 float phi2 =elec2->getSuperCluster()->getPosition().phi();
00197
00198 cout << "RSSelection: elec1 " << energy1 << " Eta " << eta1 << " Phi " << phi1 << endl;
00199 cout << "RSSelection: elec2 " << energy2 << " Eta " << eta2 << " Phi " << phi2 << endl;
00200
00201
00202 int iflag_satur=0;
00203 RSSaturation(elec1, energy1, iflag_satur);
00204 cout << "RSSaturation: elec1 " << energy1 << " Sat? " << iflag_satur << endl;
00205
00206 RSSaturation(elec2, energy2, iflag_satur);
00207 cout << "RSSaturation: elec2 " << energy2 << " Sat? " << iflag_satur << endl;
00208
00209
00210 float EtIsol1=0.;
00211 float EtIsol2=0.;
00212 RSAssocPhoton(elec1, energy1, EtIsol1);
00213 RSAssocPhoton(elec2, energy2, EtIsol2);
00214
00215 cout << "RSAssocPhoton: elec1 " << energy1 << " Iso " << EtIsol1 << endl;
00216 cout << "RSAssocPhoton: elec2 " << energy2 << " Iso " << EtIsol2 << endl;
00217
00218
00219
00220 bool FAMOS=true;
00221 float xcor1=RSCorrectionFunc(energy1, eta1, FAMOS);
00222 float xcor2=RSCorrectionFunc(energy2, eta2, FAMOS);
00223 xcor1=1./xcor1;
00224 xcor2=1./xcor2;
00225 energy1*=xcor1;
00226 energy2*=xcor2;
00227
00228 cout << "RSCorrectionFunc: elec1 " << energy1 << " xcor1 " << xcor1 << endl;
00229 cout << "RSCorrectionFunc: elec2 " << energy2 << " xcor2 " << xcor2 << endl;
00230
00231
00232
00233 RSElec *cElec1 = new RSElec(elec1,energy1,eta1,phi1,EtIsol1);
00234 RSElec *cElec2 = new RSElec(elec2,energy2,eta2,phi2,EtIsol2);
00235
00236 cout << " RSElec: cElec1 " << cElec1->getElecEnergy() << " Eta" << cElec1->getElecEta() <<
00237 " Phi " << cElec1->getElecPhi() << " Iso " << cElec1->getElecIsol() << " Px " << cElec1->getElecPx() <<
00238 " Py " << cElec1->getElecPy() << " Pz " << cElec1->getElecPz() << " Et " << cElec1->getElecEt() << endl;
00239 cout << " RSElec: cElec2 " << cElec2->getElecEnergy() << " Eta" << cElec2->getElecEta() <<
00240 " Phi " << cElec2->getElecPhi() << " Iso " << cElec2->getElecIsol() << " Px " << cElec2->getElecPx() <<
00241 " Py " << cElec2->getElecPy() << " Pz " << cElec2->getElecPz() << " Et " << cElec2->getElecEt() << endl;
00242
00243
00244 eeMassRec=RSMassRec(cElec1,cElec2);
00245
00246
00247 if ( cElec1->getElecIsol()< 0.02* cElec1->getElecEt() &&
00248 cElec2->getElecIsol()< 0.02* cElec2->getElecEt() )
00249 {
00250 costhetaRec = RSdistribAngRec(cElec1,cElec2);
00251
00252 }
00253
00254
00255 cout << " Graviton Mass " << trueMassGen << " ee-gen " << eeMassGen << " rec " << eeMassRec << endl;
00256 cout << " Graviton costheta : ee-gen " << costhetaGen << " rec " << costhetaRec << endl;
00257
00258 cout << endl;
00259
00260
00261 }
00262
00263
00264 event->clear();
00265 generatorEvent->clear();
00266 geantEvent->clear();
00267 }
00268
00269 }
00270
00271
00272