#include <XANADOO/domain/interface/XANAEsdEvent.h>
#include <XANADOO/XANAMcInfo/interface/XANAGeneratorEvent.h>
#include <XANADOO/XANAMcInfo/interface/XANAGeantEvent.h>
#include <XANADOO/XANAMcInfo/interface/XANAGeneratorParticle.h>
#include <XANADOO/XANAMcInfo/interface/XANAGeantTrack.h>
#include <XANADOO/XANAMcInfo/interface/XANAGeantVertex.h>
#include <XANADOO/XANAElectronCandidate/interface/XANAElectronGSFTrack.h>
#include <XANADOO/XANAClusters/interface/XANACaloRecHit.h>
#include <XANADOO/XANATracks/interface/XANATrackHit.h>
#include <XANADOO/XANAClusters/interface/XANACluster.h>
#include <XANADOO/XANAClusters/interface/XANAEmCluster.h>
#include <XANADOO/XANAClusters/interface/XANASuperCluster.h>
#include <XANADOO/XANAElectronCandidate/interface/XANAElectronCandidate.h>
#include <XANADOO/XANAVertex/interface/XANAVertex.h>
#include <CLHEP/Geometry/Point3D.h>
#include "TFile.h"
#include "TBranch.h"
#include "TObjArray.h"
#include "TRefArray.h"
#include "TTree.h"
#include "TChain.h"
#include <XANADOO/XANAnalysisZZ/interface/treeStruct.h>
#include <map>
#include <vector>
Include dependency graph for higgsTreeNewXana.cpp:
Go to the source code of this file.
Defines | |
#define | PI 3.14159265358979323846 |
#define | SIGMA_EB 0.04 |
#define | SIGMA_EE 0.150 |
Functions | |
void | globalReset (simpleEvent *e) |
void | kineReset (simpleGeneratorEvent *k) |
int | mom (int idx, TObjArray *tracks) |
XANAGeantVertex * | getDaughterVertex (XANAGeantTrack *gtk, TObjArray *tracks) |
void | setAddr (TTree *T, XANAEsdEvent *event, XANAGeneratorEvent *generatorEvent, XANAGeantEvent *geantEvent) |
int | main (int argc, char **argv) |
|
Definition at line 34 of file higgsTreeNewXana.cpp. Referenced by main(). |
|
Definition at line 36 of file higgsTreeNewXana.cpp. Referenced by main(). |
|
Definition at line 37 of file higgsTreeNewXana.cpp. Referenced by main(). |
|
Definition at line 768 of file higgsTreeNewXana.cpp. References XANAGeantTrack::getIndex(), and tracks.
00769 { 00770 for (int i=0; i<tracks->GetEntriesFast(); i++) { 00771 if (((XANAGeantTrack*)(*tracks)[i])->getMotherIndex()==gtk->getIndex() 00772 && ((XANAGeantTrack*)(*tracks)[i])->getVertex()->getNumberOfTracks()==2) { 00773 return ((XANAGeantTrack*)(*tracks)[i])->getVertex(); 00774 } 00775 } 00776 return NULL; 00777 } |
|
|
|
Definition at line 58 of file higgsTreeNewXana.cpp. References XANAGeneratorEvent::clear(), XANAGeantEvent::clear(), XANAEsdEvent::clear(), simpleEvent::el_DetaScTkEc, simpleEvent::el_DetaScTkVx, simpleEvent::el_DetaSeedTkEc, simpleEvent::el_DphiScTkEc, simpleEvent::el_DphiScTkVx, simpleEvent::el_DphiSeedTkEc, simpleEvent::el_ecIso, simpleEvent::el_EOP, simpleEvent::el_EseedOP, simpleEvent::el_eta, simpleEvent::el_HOE, simpleEvent::el_iel, simpleEvent::el_phi, simpleEvent::el_pTVX, simpleEvent::el_pVX, simpleEvent::el_pVXMag, simpleEvent::el_tkIso, simpleGeneratorEvent::eta, XANAElectronGSFTrack::getBackwardFitChi2OverDof(), XANASuperCluster::getBremClusters(), XANAElectronCandidate::getCaloIsolation(), XANATrack::getCharge(), XANAVertex::getChi2(), XANATrack::getChi2OverDof(), XANAElectronCandidate::getDeltaEtaSeedClusterAtCalo(), XANAElectronCandidate::getDeltaEtaSuperClusterAtCalo(), XANAElectronCandidate::getDeltaEtaSuperClusterAtVtx(), XANAElectronTrack::getElectronCandidate(), XANASuperCluster::getElectronCandidate(), XANAEsdEvent::getElectronTracks(), XANAEmCluster::getEmClusterHits(), XANACluster::getEmClusterHits(), XANACaloRecHit::getEnergy(), XANACluster::getEnergy(), XANASuperCluster::getEnergy(), XANASuperCluster::getEnergyScaleFactor(), XANAElectronCandidate::getESeedClusterOverP(), XANAElectronCandidate::getESuperClusterOverP(), XANAElectronCandidate::getEta(), XANAGeantEvent::getGeantTracks(), XANATriggerInfo::getGlobalL1Decision(), XANATriggerInfo::getGlobalL1Response(), XANAElectronGSFTrack::getGSFMomentumAtFirstPointMode(), XANAElectronGSFTrack::getGSFMomentumAtFirstPointWeightedMean(), XANAElectronGSFTrack::getGSFMomentumAtLastPointMode(), XANAElectronGSFTrack::getGSFMomentumAtLastPointWeightedMean(), XANAElectronGSFTrack::getGSFMomentumAtVertexMode(), XANAElectronGSFTrack::getGSFMomentumAtVertexWeightedMean(), XANAElectronCandidate::getHadronicOverEm(), XANAElectronGSFTrack::getHighestWeightAtFirstPoint(), XANAElectronGSFTrack::getHighestWeightAtLastPoint(), XANAElectronGSFTrack::getHighestWeightAtVertex(), XANATriggerInfo::getHltDecision(), XANATriggerInfo::getHltResponse(), XANAGeneratorParticle::getLine(), XANAGeneratorParticle::getMo1(), XANAGeneratorParticle::getMomentum(), XANAElectronCandidate::getMomentumAtVertex(), XANAVertex::getNdof(), XANAVertex::getNormalizedChi2(), XANASuperCluster::getNumberOfBrems(), XANAEsdEvent::getNumberOfElectronTracks(), XANATrack::getNumberOfHits(), XANATrack::getNumberOfLostHits(), XANACluster::getNumberOfRecHits(), XANAGeneratorEvent::getNumberOfStableSignalParticles(), XANAEsdEvent::getNumberOfSuperClusters(), XANAGeneratorEvent::getParticles(), XANAGeneratorParticle::getPartId(), XANAElectronCandidate::getPhi(), XANAVertex::getPosition(), XANACluster::getPosition(), XANASuperCluster::getPosition(), XANATrack::getPositionAtFirstPoint(), XANATrack::getPositionAtLastPoint(), XANAVertex::getPositionErrorDiag(), XANAVertex::getPositionErrorOffDiag(), XANAElectronCandidate::getPt(), XANASuperCluster::getSeedCluster(), XANAGeneratorEvent::getSignalParticles(), XANAGeneratorEvent::getStableSignalParticles(), XANAGeneratorParticle::getStatus(), XANASuperCluster::getSum1(), XANASuperCluster::getSum25(), XANASuperCluster::getSum4(), XANASuperCluster::getSum9(), XANAEsdEvent::getSuperClusters(), XANAElectronCandidate::getTrackIsolation(), XANAEsdEvent::getTriggerInfo(), XANAVertex::getVectorialSum(), XANATrack::getVertex(), XANAGeneratorParticle::getVertex(), globalReset(), simpleEvent::ievent, simpleGeneratorEvent::ievent, simpleGeneratorEvent::ifirst, kineReset(), simpleEvent::kn_deltaR, simpleEvent::kn_E, simpleEvent::kn_eta, simpleEvent::kn_lineMo1, simpleEvent::kn_lineMo2, simpleEvent::kn_p, simpleEvent::kn_phi, simpleEvent::kn_pid, simpleEvent::kn_pidMo1, simpleEvent::kn_pidMo2, simpleEvent::kn_pMag, simpleEvent::kn_pT, simpleEvent::kn_x, simpleGeneratorEvent::mH, simpleGeneratorEvent::mom, simpleGeneratorEvent::mZ1, simpleGeneratorEvent::mZ2, simpleGeneratorEvent::nple, simpleGeneratorEvent::p, simpleGeneratorEvent::phi, PI, simpleGeneratorEvent::pid, simpleGeneratorEvent::pMag, simpleGeneratorEvent::pT, simpleEvent::sc_bremEtot, simpleEvent::sc_bremNxtals, simpleEvent::sc_bremNxtals2sigma, simpleEvent::sc_Erec, simpleEvent::sc_ErecS1, simpleEvent::sc_ErecS25, simpleEvent::sc_ErecS4, simpleEvent::sc_ErecS9, simpleEvent::sc_ErecScaleFactor, simpleEvent::sc_ErecUncorr, simpleEvent::sc_eta, simpleEvent::sc_isc, simpleEvent::sc_nBrems, simpleEvent::sc_nsc, simpleEvent::sc_phi, simpleEvent::sc_seedE, simpleEvent::sc_seedEta, simpleEvent::sc_seedNxtals, simpleEvent::sc_seedNxtals2sigma, simpleEvent::sc_seedPhi, setAddr(), SIGMA_EB, SIGMA_EE, simpleEvent::tg_hltD, simpleEvent::tg_hltR, simpleEvent::tg_l1D, simpleEvent::tg_l1R, simpleEvent::tk_chargeRec, simpleEvent::tk_chi2OverDof, simpleEvent::tk_chi2OverDofBack, simpleEvent::tk_highestWeightFP, simpleEvent::tk_highestWeightLP, simpleEvent::tk_highestWeightVX, simpleEvent::tk_itk, simpleEvent::tk_ntk, simpleEvent::tk_petaFPmean, simpleEvent::tk_petaFPmode, simpleEvent::tk_petaLPmean, simpleEvent::tk_petaLPmode, simpleEvent::tk_petaVXmean, simpleEvent::tk_petaVXmode, simpleEvent::tk_pFPmean, simpleEvent::tk_pFPmeanMag, simpleEvent::tk_pFPmode, simpleEvent::tk_pFPmodeMag, simpleEvent::tk_pLPmean, simpleEvent::tk_pLPmeanMag, simpleEvent::tk_pLPmode, simpleEvent::tk_pLPmodeMag, simpleEvent::tk_pphiFPmean, simpleEvent::tk_pphiFPmode, simpleEvent::tk_pphiLPmean, simpleEvent::tk_pphiLPmode, simpleEvent::tk_pphiVXmean, simpleEvent::tk_pphiVXmode, simpleEvent::tk_pVXmean, simpleEvent::tk_pVXmeanMag, simpleEvent::tk_pVXmode, simpleEvent::tk_pVXmodeMag, simpleEvent::tk_tkNhits, simpleEvent::tk_tkNLostHits, simpleEvent::tk_xetaFP, simpleEvent::tk_xetaLP, simpleEvent::tk_xFP, simpleEvent::tk_xLP, simpleEvent::tk_xphiFP, simpleEvent::tk_xphiLP, tracks, simpleEvent::vx_chi2, simpleEvent::vx_chi2Norm, simpleEvent::vx_Ndof, simpleEvent::vx_vectSum, simpleEvent::vx_x, simpleEvent::vx_xeDiag, simpleEvent::vx_xeOffDiag, and simpleGeneratorEvent::x.
00059 { 00060 if (argc==1) { 00061 printf("Usage: elTree [XANADOO tree]\n"); 00062 exit(1); 00063 } 00064 00065 XANAEsdEvent *event = new XANAEsdEvent(); 00066 XANAGeneratorEvent *generatorEvent = new XANAGeneratorEvent(); 00067 XANAGeantEvent *geantEvent = new XANAGeantEvent(); 00068 00069 TFile *fout = new TFile("higgsTree.root","RECREATE"); 00070 00071 00072 TTree *tree = new TTree("tree","tree"); 00073 00074 /* 00075 * tree structure 00076 */ 00077 simpleEvent e; 00078 simpleGeneratorEvent k; 00079 // general info 00080 tree->Branch("k",&k.ievent, 00081 "ievent/I" 00082 ":ifirst/I" // ifirst==0 to take kine info just once 00083 ":nple/I" 00084 ":pid[10]/I" 00085 ":mom[10]/I" 00086 ":x[10][4]/F" 00087 ":p[10][4]/F" 00088 ":pMag[10]/F" 00089 ":pT[10]/F" 00090 ":eta[10]/F" 00091 ":phi[10]/F" 00092 ":mH/F" 00093 ":mZ1/F" 00094 ":mZ2/F" 00095 ); 00096 tree->Branch("e",&e.ievent, 00097 "ievent/I" 00098 // kine info 00099 ":kn_deltaRKine/F" 00100 ":kn_pid/I" 00101 ":kn_pidMo1/I" 00102 ":kn_lineMo1/I" 00103 ":kn_pidMo2/I" 00104 ":kn_lineMo2/I" 00105 ":kn_E/F" 00106 ":kn_pT/F" 00107 ":kn_eta/F" 00108 ":kn_phi/F" 00109 ":kn_x[4]/F" 00110 ":kn_p[4]/F" 00111 ":kn_pMag/F" 00112 // ecal info 00113 ":sc_isc/I" 00114 ":sc_nsc/I" 00115 ":sc_Erec/F" 00116 ":sc_ErecUncorr/F" 00117 ":sc_ErecScaleFactor/F" 00118 ":sc_ErecS1/F" 00119 ":sc_ErecS4/F" 00120 ":sc_ErecS9/F" 00121 ":sc_ErecS25/F" 00122 ":sc_eta/F" 00123 ":sc_phi/F" 00124 ":sc_seedE/F" 00125 ":sc_seedEta/F" 00126 ":sc_seedPhi/F" 00127 ":sc_seedNxtals/I" 00128 ":sc_seedNxtals2sigma/I" 00129 ":sc_nBrems/I" 00130 ":sc_bremEtot/F" 00131 ":sc_bremNxtals/I" 00132 ":sc_bremNxtals2sigma/I" 00133 // tracker info 00134 ":tk_ntk/I" 00135 ":tk_itk/I" 00136 // 00137 ":tk_xetaFP/F" 00138 ":tk_xphiFP/F" 00139 ":tk_xFP[3]/F" 00140 ":tk_xetaLP/F" 00141 ":tk_xphiLP/F" 00142 ":tk_xLP[3]/F" 00143 // 00144 ":tk_petaFPmode/F" 00145 ":tk_pphiFPmode/F" 00146 ":tk_pFPmode[3]/F" 00147 ":tk_pFPmodeMag/F" 00148 ":tk_petaFPmean/F" 00149 ":tk_pphiFPmean/F" 00150 ":tk_pFPmean[3]/F" 00151 ":tk_pFPmeanMag/F" 00152 // 00153 ":tk_petaLPmode/F" 00154 ":tk_pphiLPmode/F" 00155 ":tk_pLPmode[3]/F" 00156 ":tk_pLPmodeMag/F" 00157 ":tk_petaLPmean/F" 00158 ":tk_pphiLPmean/F" 00159 ":tk_pLPmean[3]/F" 00160 ":tk_pLPmeanMag/F" 00161 // 00162 ":tk_petaVXmode/F" 00163 ":tk_pphiVXmode/F" 00164 ":tk_pVXmode[3]/F" 00165 ":tk_pVXmodeMag/F" 00166 ":tk_petaVXmean/F" 00167 ":tk_pphiVXmean/F" 00168 ":tk_pVXmean[3]/F" 00169 ":tk_pVXmeanMag/F" 00170 // 00171 ":tk_tkNhits/I" 00172 ":tk_tkNLostHits/I" 00173 ":tk_chi2OverDof/F" 00174 ":tk_chi2OverDofBack/F" 00175 ":tk_chargeRec/I" 00176 ":tk_highestWeightFP/F" 00177 ":tk_highestWeightLP/F" 00178 ":tk_highestWeightVX/F" 00179 // vertex info 00180 ":vx_x[3]/F" 00181 ":vx_xeDiag[3]/F" 00182 ":vx_xeOffDiag[3]/F" 00183 ":vx_chi2/F" 00184 ":vx_chi2Norm/F" 00185 ":vx_Ndof/I" 00186 ":vx_vectSum[3]/F" 00187 // electron candidate info 00188 ":el_iel/I" 00189 ":el_phi/F" 00190 ":el_eta/F" 00191 ":el_pVX[3]/F" 00192 ":el_pVXMag/F" 00193 ":el_pTVX/F" 00194 ":el_pEC[3]/F" 00195 ":el_pECMag/F" 00196 ":el_DetaScTkVx/F" 00197 ":el_DetaScTkEc/F" 00198 ":el_DetaSeedTkEc/F" 00199 ":el_DphiScTkVx/F" 00200 ":el_DphiScTkEc/F" 00201 ":el_DphiSeedTkEc/F" 00202 ":el_tkIso/F" 00203 ":el_ecIso/F" 00204 ":el_EOP/F" 00205 ":el_EseedOP/F" 00206 ":el_HOE/F" 00207 // event trigger info 00208 ":tg_l1D/b" 00209 ":tg_hltD/b" 00210 ":tg_l1R[128]/b" 00211 ":tg_hltR[152]/b" 00212 ); 00213 00214 // >>> added to bypass the TChain problem 00215 TTree *T; 00216 Int_t nevent=0; 00217 Int_t nb = 0; 00218 e.ievent=0; 00219 k.ievent=0; 00220 for (int i=1; i<argc; i++) { 00221 printf("--> %s\n",argv[i]); 00222 TFile *F = new TFile(argv[i]); 00223 if (!(F->GetNkeys())) { 00224 printf("File %s has no key --> skipping\n",argv[i]); 00225 continue; 00226 } 00227 T = (TTree*)F->Get("ESD"); 00228 nevent = (Int_t)T->GetEntries(); 00229 printf("Going to read %d events...\n",nevent); 00230 setAddr(T,event,generatorEvent,geantEvent); 00231 // <<< added to bypass the TChain problem 00232 00233 /* 00234 * main event loop... 00235 */ 00236 TRefArray *gen=0; 00237 TRefArray *genAll=0; 00238 TObjArray *tracks=0; 00239 TObjArray *sc=0; 00240 //nevent = 1; 00241 for (Int_t iev=0; iev<nevent; iev++) { 00242 nb += T->GetEntry(iev); 00243 ++e.ievent; 00244 ++k.ievent; 00245 00246 if (iev%50==1) fprintf(stdout," Event % 5d\n",iev); 00247 00248 tracks = geantEvent->getGeantTracks(); 00249 gen = generatorEvent->getStableSignalParticles(); 00250 genAll = generatorEvent->getSignalParticles(); 00251 00252 kineReset(&k); 00253 /* 00254 * Event Kine info 00255 */ 00256 vector<int> plist; 00257 int ifirstel=0; 00258 int aZ=0; 00259 // find electrons... 00260 for (int ip=0; ip<generatorEvent->getNumberOfStableSignalParticles(); ip++) { 00261 XANAGeneratorParticle *gp = (XANAGeneratorParticle*)(*gen)[ip]; 00262 if (abs(gp->getPartId())!=11 && abs(gp->getPartId())!=22) continue; 00263 int mo1 = gp->getMo1(); 00264 int line=0; 00265 // ...coming from a Z (+trick to consider also indirect decays Z->[...]->e) 00266 while (1) { 00267 XANAGeneratorParticle *gpMoN = (XANAGeneratorParticle*)(*genAll)[mo1-1]; 00268 mo1 = gpMoN->getMo1(); 00269 if ((gpMoN->getPartId()==23 && gpMoN->getStatus()==3)) { 00270 line = gpMoN->getLine(); 00271 break; 00272 } 00273 if (mo1==0) break; 00274 } 00275 if (line) { 00276 if (ifirstel==0) { 00277 aZ = line; 00278 ifirstel=1; 00279 } 00280 // ip>0 --> a Z; ip<0 --> the other one 00281 if (line==aZ) plist.push_back(ip); 00282 else plist.push_back(-ip); 00283 } 00284 } 00285 k.nple = (int)plist.size(); 00286 float ptot[4]; 00287 float pZ1[4]; 00288 float pZ2[4]; 00289 for (int j=0; j<4; j++) { 00290 ptot[j]=0; 00291 pZ1[j] =0; 00292 pZ2[j] =0; 00293 } 00294 // order electrons in pT 00295 map<float,int> ptlist; 00296 for (unsigned int ip=0; ip<plist.size(); ip++) { 00297 XANAGeneratorParticle *gp = (XANAGeneratorParticle*)(*gen)[abs(plist[ip])]; 00298 ptlist[gp->getMomentum().vect().perp()] = ip; 00299 } 00300 // fill variables 00301 map<float,int>::reverse_iterator rit; 00302 int cnt=0; 00303 for (rit=ptlist.rbegin(); rit!=ptlist.rend(); rit++) { 00304 int ip = rit->second; 00305 XANAGeneratorParticle *gp = (XANAGeneratorParticle*)(*gen)[abs(plist[ip])]; 00306 00307 k.pid[cnt] = gp->getPartId(); 00308 k.mom[cnt] = (int)copysign(1,plist[ip]); // +1 a Z; -1 the other one 00309 k.x[cnt][0] = gp->getVertex().x(); 00310 k.x[cnt][1] = gp->getVertex().y(); 00311 k.x[cnt][2] = gp->getVertex().z(); 00312 k.x[cnt][3] = gp->getVertex().e(); 00313 k.p[cnt][0] = gp->getMomentum().x(); 00314 k.p[cnt][1] = gp->getMomentum().y(); 00315 k.p[cnt][2] = gp->getMomentum().z(); 00316 k.p[cnt][3] = gp->getMomentum().e(); 00317 k.pMag[cnt] = gp->getMomentum().vect().mag(); 00318 k.pT[cnt] = gp->getMomentum().vect().perp(); 00319 k.eta[cnt] = gp->getMomentum().eta(); 00320 k.phi[cnt] = gp->getMomentum().phi(); 00321 00322 for (int j=0; j<4; j++) { 00323 ptot[j] += k.p[cnt][j]; 00324 if (k.mom[cnt]>0) pZ1[j] += k.p[cnt][j]; 00325 else pZ2[j] += k.p[cnt][j]; 00326 } 00327 cnt++; 00328 00329 //printf("%- d %- 1.f\n",gp->getPartId(),copysign(1,plist[ip])); 00330 } 00331 float mmH=0, mmZ1=0, mmZ2=0; 00332 // Higgs and Z invariant masses (from the electrons!) 00333 for (int i=0; i<3; i++) { 00334 mmH -= ptot[i]*ptot[i]; 00335 mmZ1 -= pZ1[i]*pZ1[i]; 00336 mmZ2 -= pZ2[i]*pZ2[i]; 00337 } 00338 mmH += ptot[3]*ptot[3]; 00339 mmZ1 += pZ1[3]*pZ1[3]; 00340 mmZ2 += pZ2[3]*pZ2[3]; 00341 00342 k.mH = sqrt(mmH); 00343 if (mmZ1>mmZ2) { 00344 k.mZ1 = sqrt(mmZ1); 00345 k.mZ2 = sqrt(mmZ2); 00346 } else { 00347 k.mZ2 = sqrt(mmZ1); 00348 k.mZ1 = sqrt(mmZ2); 00349 } 00350 plist.clear(); 00351 ptlist.clear(); 00352 00353 /* 00354 * SC/tracks quantities 00355 */ 00356 00357 // event trigger info 00358 // reset 00359 e.tg_l1D=0; 00360 e.tg_hltD=0; 00361 for (int i=0; i<128; i++) e.tg_l1R[i]=0; 00362 for (int i=0; i<152; i++) e.tg_hltR[i]=0; 00363 // get the info 00364 XANATriggerInfo xtg = event->getTriggerInfo(); 00365 e.tg_l1D = xtg.getGlobalL1Decision(); 00366 e.tg_hltD = xtg.getHltDecision(); 00367 cout << xtg.getGlobalL1Decision() << " " << xtg.getHltDecision() << " " << endl; 00368 TBits tb; 00369 tb = xtg.getGlobalL1Response(); 00370 for (int i=0; i<16*8; i++) { 00371 e.tg_l1R[i] = tb.TestBitNumber(i); 00372 } 00373 tb = xtg.getHltResponse(); 00374 for (int i=0; i<19*8; i++) { 00375 e.tg_hltR[i] = tb.TestBitNumber(i); 00376 } 00377 00378 int ifilled=0; 00379 // super clusters 00380 sc = event->getSuperClusters(); 00381 e.sc_nsc = event->getNumberOfSuperClusters(); // number of supercluster in the event 00382 e.sc_isc=0; 00383 //e.sc_nsc = 1; 00384 //printf("Event: %d ------------------------- number of SuperClusters = %d\n",iev,e.sc_nsc); 00385 // fill SC variables 00386 for (int iisc=0; iisc<e.sc_nsc; iisc++) { 00387 // reset quantities 00388 globalReset(&e); 00389 //measuredReset(&e); 00390 00391 XANASuperCluster *xsc = (XANASuperCluster*)(*sc)[iisc]; 00392 00393 // generator particle info: 00394 // associate a SC with the closest (in DeltaR) generator particle 00395 // no cut on DeltaR (left for the successive analysis) 00396 HepPoint3D point = xsc->getPosition(); 00397 point.setMag(xsc->getEnergy()); 00398 HepLorentzVector vecLor( point.x(), point.y(), point.z(), xsc->getEnergy()); 00399 map<float, int> deltaR; 00400 deltaR.clear(); 00401 TRefArray *gen = generatorEvent->getStableSignalParticles(); 00402 TObjArray *genAll = generatorEvent->getParticles(); 00403 for (int ip=0; ip<generatorEvent->getNumberOfStableSignalParticles(); ip++) { 00404 XANAGeneratorParticle *genpar = (XANAGeneratorParticle*)(*gen)[ip]; 00405 if (abs(genpar->getPartId())==11 00406 || genpar->getPartId()==22 && 00407 genpar->getMomentum().e()/xsc->getEnergy()>.1) 00408 deltaR[vecLor.deltaR(genpar->getMomentum())] = ip; 00409 } 00410 XANAGeneratorParticle *genpar = (XANAGeneratorParticle*)(*gen)[deltaR.begin()->second]; 00411 XANAGeneratorParticle *genparMo1 = (XANAGeneratorParticle*)(*genAll)[genpar->getMo1()-1]; 00412 XANAGeneratorParticle *genparMo2 = (XANAGeneratorParticle*)(*genAll)[genparMo1->getMo1()-1]; 00413 00414 e.kn_deltaR = deltaR.begin()->first; 00415 e.kn_x[0] = genpar->getVertex().x(); 00416 e.kn_x[1] = genpar->getVertex().y(); 00417 e.kn_x[2] = genpar->getVertex().z(); 00418 e.kn_x[3] = genpar->getVertex().e(); 00419 e.kn_p[0] = genpar->getMomentum().x(); 00420 e.kn_p[1] = genpar->getMomentum().y(); 00421 e.kn_p[2] = genpar->getMomentum().z(); 00422 e.kn_p[3] = genpar->getMomentum().e(); 00423 e.kn_pMag = genpar->getMomentum().vect().mag(); 00424 e.kn_E = genpar->getMomentum().e(); 00425 e.kn_pT = genpar->getMomentum().vect().perp(); 00426 e.kn_eta = genpar->getMomentum().eta(); 00427 e.kn_phi = genpar->getMomentum().phi(); 00428 e.kn_pT = genpar->getMomentum().vect().perp(); 00429 e.kn_eta = genpar->getMomentum().eta(); 00430 e.kn_phi = genpar->getMomentum().phi(); 00431 e.kn_pid = genpar->getPartId(); 00432 e.kn_pidMo1 = genparMo1->getPartId(); 00433 e.kn_lineMo1 = genparMo1->getLine(); 00434 e.kn_pidMo2 = genparMo2->getPartId(); 00435 e.kn_lineMo2 = genparMo2->getLine(); 00436 00437 ++e.sc_isc; 00438 00439 e.sc_Erec = xsc->getEnergy(); 00440 e.sc_ErecS1 = xsc->getSum1(); 00441 e.sc_ErecS4 = xsc->getSum4(); 00442 e.sc_ErecS9 = xsc->getSum9(); 00443 e.sc_ErecS25 = xsc->getSum25(); 00444 e.sc_ErecScaleFactor = xsc->getEnergyScaleFactor(); 00445 e.sc_ErecUncorr = e.sc_Erec/e.sc_ErecScaleFactor; 00446 e.sc_eta = xsc->getPosition().eta(); 00447 e.sc_phi = xsc->getPosition().phi(); 00448 00449 e.sc_seedE = xsc->getSeedCluster()->getEnergy(); 00450 e.sc_seedEta = xsc->getSeedCluster()->getPosition().eta(); 00451 e.sc_seedPhi = xsc->getSeedCluster()->getPosition().phi(); 00452 e.sc_nBrems = xsc->getNumberOfBrems(); 00453 00454 TRefArray *cbrems = xsc->getBremClusters(); 00455 XANACluster *seed = xsc->getSeedCluster(); 00456 e.sc_seedE = seed->getEnergy(); 00457 e.sc_seedEta = seed->getPosition().eta(); 00458 e.sc_seedPhi = seed->getPosition().phi(); 00459 e.sc_seedNxtals = seed->getNumberOfRecHits(); 00460 TRefArray *seedHits = seed->getEmClusterHits(); 00461 float threshold; 00462 if (fabs(e.sc_eta)<1.48) threshold = 2.*SIGMA_EB; 00463 else threshold = 2.*SIGMA_EE; 00464 for (int irh=0; irh<e.sc_seedNxtals; irh++) { 00465 XANACaloRecHit *caloRhit = (XANACaloRecHit*)(*seedHits)[irh]; 00466 if (caloRhit->getEnergy()>threshold) e.sc_seedNxtals2sigma++; 00467 } 00468 // brem clusters variables 00469 for (int ibc=0; ibc<e.sc_nBrems; ibc++) { 00470 XANAEmCluster *bc = (XANAEmCluster*)(*cbrems)[ibc]; 00471 e.sc_bremEtot += bc->getEnergy(); 00472 e.sc_bremNxtals += bc->getNumberOfRecHits(); 00473 int bremNxtalsTmp = bc->getNumberOfRecHits(); 00474 TRefArray *bremHits = bc->getEmClusterHits(); 00475 for (int irh=0; irh<bremNxtalsTmp; irh++) 00476 if (((XANACaloRecHit*)(*bremHits)[irh])->getEnergy()>2*threshold) { 00477 e.sc_bremNxtals2sigma++; 00478 } 00479 } 00480 00481 00482 // rough matching with a track 00483 //map<float, int> deltaR; 00484 deltaR.clear(); 00485 TObjArray *gsfTks = event->getElectronTracks(); 00486 for (int ip=0; ip<event->getNumberOfElectronTracks(); ip++) { 00487 XANAElectronGSFTrack *gsfTk = (XANAElectronGSFTrack*)(*gsfTks)[ip]; 00488 float eta_tk = gsfTk->getGSFMomentumAtVertexMode().eta(); 00489 float eta_sc = xsc->getPosition().eta(); 00490 float phi_tk = gsfTk->getGSFMomentumAtVertexMode().phi(); 00491 float phi_sc = xsc->getPosition().phi(); 00492 00493 float deta = eta_sc - eta_tk; 00494 float dphi = phi_sc - phi_tk; 00495 if (fabs(dphi) > PI) dphi = dphi < 0 ? 2.*PI + dphi : dphi - 2.*PI; 00496 00497 deltaR[ sqrt(deta*deta+dphi*dphi) ] = ip; 00498 } 00499 00500 map<float, int>::iterator it; 00501 vector<int> tkList; 00502 // compute total number of tracks for a given SC 00503 for (it=deltaR.begin(); it!=deltaR.end(); it++) { 00504 if (it->first<1.) { 00505 //printf(" taking track with deltaR = %f\n",it->first); 00506 tkList.push_back(it->second); 00507 ++e.tk_ntk; 00508 } 00509 } 00510 // accept/reject the matching and fill tk_tracks variables 00511 for (unsigned int iitk=0; iitk<tkList.size(); iitk++) { 00512 ++e.tk_itk; 00513 XANAElectronGSFTrack *gsfTk = (XANAElectronGSFTrack*)(*gsfTks)[tkList[iitk]]; 00514 00515 e.tk_xetaFP = gsfTk->getPositionAtFirstPoint().eta(); 00516 e.tk_xphiFP = gsfTk->getPositionAtFirstPoint().phi(); 00517 e.tk_xFP[0] = gsfTk->getPositionAtFirstPoint().x(); 00518 e.tk_xFP[1] = gsfTk->getPositionAtFirstPoint().y(); 00519 e.tk_xFP[2] = gsfTk->getPositionAtFirstPoint().z(); 00520 00521 e.tk_xetaLP = gsfTk->getPositionAtLastPoint().eta(); 00522 e.tk_xphiLP = gsfTk->getPositionAtLastPoint().phi(); 00523 e.tk_xLP[0] = gsfTk->getPositionAtLastPoint().x(); 00524 e.tk_xLP[1] = gsfTk->getPositionAtLastPoint().y(); 00525 e.tk_xLP[2] = gsfTk->getPositionAtLastPoint().z(); 00526 00527 e.tk_petaFPmode = gsfTk->getGSFMomentumAtFirstPointMode().eta(); 00528 e.tk_pphiFPmode = gsfTk->getGSFMomentumAtFirstPointMode().phi(); 00529 e.tk_pFPmode[0] = gsfTk->getGSFMomentumAtFirstPointMode().x(); 00530 e.tk_pFPmode[1] = gsfTk->getGSFMomentumAtFirstPointMode().y(); 00531 e.tk_pFPmode[2] = gsfTk->getGSFMomentumAtFirstPointMode().z(); 00532 e.tk_pFPmodeMag = gsfTk->getGSFMomentumAtFirstPointMode().mag(); 00533 e.tk_petaFPmean = gsfTk->getGSFMomentumAtFirstPointWeightedMean().eta(); 00534 e.tk_pphiFPmean = gsfTk->getGSFMomentumAtFirstPointWeightedMean().phi(); 00535 e.tk_pFPmean[0] = gsfTk->getGSFMomentumAtFirstPointWeightedMean().x(); 00536 e.tk_pFPmean[1] = gsfTk->getGSFMomentumAtFirstPointWeightedMean().y(); 00537 e.tk_pFPmean[2] = gsfTk->getGSFMomentumAtFirstPointWeightedMean().z(); 00538 e.tk_pFPmeanMag = gsfTk->getGSFMomentumAtFirstPointWeightedMean().mag(); 00539 00540 e.tk_petaLPmode = gsfTk->getGSFMomentumAtLastPointMode().eta(); 00541 e.tk_pphiLPmode = gsfTk->getGSFMomentumAtLastPointMode().phi(); 00542 e.tk_pLPmode[0] = gsfTk->getGSFMomentumAtLastPointMode().x(); 00543 e.tk_pLPmode[1] = gsfTk->getGSFMomentumAtLastPointMode().y(); 00544 e.tk_pLPmode[2] = gsfTk->getGSFMomentumAtLastPointMode().z(); 00545 e.tk_pLPmodeMag = gsfTk->getGSFMomentumAtLastPointMode().mag(); 00546 e.tk_petaLPmean = gsfTk->getGSFMomentumAtLastPointWeightedMean().eta(); 00547 e.tk_pphiLPmean = gsfTk->getGSFMomentumAtLastPointWeightedMean().phi(); 00548 e.tk_pLPmean[0] = gsfTk->getGSFMomentumAtLastPointWeightedMean().x(); 00549 e.tk_pLPmean[1] = gsfTk->getGSFMomentumAtLastPointWeightedMean().y(); 00550 e.tk_pLPmean[2] = gsfTk->getGSFMomentumAtLastPointWeightedMean().z(); 00551 e.tk_pLPmeanMag = gsfTk->getGSFMomentumAtLastPointWeightedMean().mag(); 00552 00553 e.tk_petaVXmode = gsfTk->getGSFMomentumAtVertexMode().eta(); 00554 e.tk_pphiVXmode = gsfTk->getGSFMomentumAtVertexMode().phi(); 00555 e.tk_pVXmode[0] = gsfTk->getGSFMomentumAtVertexMode().x(); 00556 e.tk_pVXmode[1] = gsfTk->getGSFMomentumAtVertexMode().y(); 00557 e.tk_pVXmode[2] = gsfTk->getGSFMomentumAtVertexMode().z(); 00558 e.tk_pVXmodeMag = gsfTk->getGSFMomentumAtVertexMode().mag(); 00559 e.tk_petaVXmean = gsfTk->getGSFMomentumAtVertexWeightedMean().eta(); 00560 e.tk_pphiVXmean = gsfTk->getGSFMomentumAtVertexWeightedMean().phi(); 00561 e.tk_pVXmean[0] = gsfTk->getGSFMomentumAtVertexWeightedMean().x(); 00562 e.tk_pVXmean[1] = gsfTk->getGSFMomentumAtVertexWeightedMean().y(); 00563 e.tk_pVXmean[2] = gsfTk->getGSFMomentumAtVertexWeightedMean().z(); 00564 e.tk_pVXmeanMag = gsfTk->getGSFMomentumAtVertexWeightedMean().mag(); 00565 00566 e.tk_chi2OverDof = gsfTk->getChi2OverDof(); 00567 e.tk_chi2OverDofBack = gsfTk->getBackwardFitChi2OverDof(); 00568 e.tk_tkNhits = gsfTk->getNumberOfHits(); 00569 e.tk_tkNLostHits = gsfTk->getNumberOfLostHits(); 00570 e.tk_chargeRec = gsfTk->getCharge(); 00571 e.tk_highestWeightFP = gsfTk->getHighestWeightAtFirstPoint(); 00572 e.tk_highestWeightLP = gsfTk->getHighestWeightAtLastPoint(); 00573 e.tk_highestWeightVX = gsfTk->getHighestWeightAtVertex(); 00574 00575 // vertex info 00576 XANAVertex *vtx = gsfTk->getVertex(); 00577 if (vtx!=NULL) { 00578 e.vx_x[0] = vtx->getPosition().x(); 00579 e.vx_x[1] = vtx->getPosition().y(); 00580 e.vx_x[2] = vtx->getPosition().z(); 00581 e.vx_xeDiag[0] = vtx->getPositionErrorDiag().x(); 00582 e.vx_xeDiag[1] = vtx->getPositionErrorDiag().y(); 00583 e.vx_xeDiag[2] = vtx->getPositionErrorDiag().z(); 00584 e.vx_xeOffDiag[0] = vtx->getPositionErrorOffDiag().x(); 00585 e.vx_xeOffDiag[1] = vtx->getPositionErrorOffDiag().y(); 00586 e.vx_xeOffDiag[2] = vtx->getPositionErrorOffDiag().z(); 00587 e.vx_chi2 = vtx->getChi2(); 00588 e.vx_chi2Norm = vtx->getNormalizedChi2(); 00589 e.vx_Ndof = (int)vtx->getNdof(); 00590 e.vx_vectSum[0] = vtx->getVectorialSum().x(); 00591 e.vx_vectSum[1] = vtx->getVectorialSum().y(); 00592 e.vx_vectSum[2] = vtx->getVectorialSum().z(); 00593 // is there a refitted track? 00594 00595 } 00596 00597 // electron candidate variables 00598 e.el_iel=0; 00599 XANAElectronCandidate *elCan1 = xsc->getElectronCandidate(); 00600 XANAElectronCandidate *elCan = gsfTk->getElectronCandidate(); 00601 if (elCan1==elCan && elCan!=NULL) { 00602 e.el_iel = 1; 00603 e.el_phi = elCan->getPhi(); 00604 e.el_eta = elCan->getEta(); 00605 e.el_pVX[0] = elCan->getMomentumAtVertex().x(); 00606 e.el_pVX[1] = elCan->getMomentumAtVertex().y(); 00607 e.el_pVX[2] = elCan->getMomentumAtVertex().z(); 00608 e.el_pVXMag = elCan->getMomentumAtVertex().mag(); 00609 e.el_pTVX = elCan->getPt(); 00610 00611 e.el_DetaScTkVx = elCan->getDeltaEtaSuperClusterAtVtx(); 00612 e.el_DetaScTkEc = elCan->getDeltaEtaSuperClusterAtCalo(); 00613 e.el_DetaSeedTkEc = elCan->getDeltaEtaSeedClusterAtCalo(); 00614 e.el_DphiScTkVx = elCan->getDeltaEtaSuperClusterAtVtx(); 00615 e.el_DphiScTkEc = elCan->getDeltaEtaSuperClusterAtCalo(); 00616 e.el_DphiSeedTkEc = elCan->getDeltaEtaSeedClusterAtCalo(); 00617 00618 e.el_tkIso = elCan->getTrackIsolation(); 00619 e.el_ecIso = elCan->getCaloIsolation(); 00620 e.el_EOP = elCan->getESuperClusterOverP(); 00621 e.el_EseedOP = elCan->getESeedClusterOverP(); 00622 e.el_HOE = elCan->getHadronicOverEm(); 00623 } 00624 00625 tree->Fill(); 00626 ifilled=1; 00627 k.ifirst=1; 00628 //printf("filling @ tracks %f %d\n",e.etaKine-e.scEta,e.isc); 00629 } 00630 if (!tkList.size()) { 00631 tree->Fill(); 00632 ifilled=1; 00633 k.ifirst=1; 00634 //printf("filling @ SC %f %d\n",e.etaKine-e.scEta,e.isc); 00635 } 00636 } 00637 if (!e.sc_nsc) { 00638 tree->Fill(); 00639 //printf("filling @ genpart %f %d\n",e.etaKine-e.scEta,e.isc); 00640 } 00641 event->clear(); 00642 geantEvent->clear(); 00643 generatorEvent->clear(); 00644 } 00645 F->Close(); 00646 delete F; 00647 } 00648 00649 cout << endl; 00650 cout << e.ievent << " events and " << nb << " bytes read " << endl; 00651 cout << endl; 00652 00653 fout->Write(); 00654 fout->Close(); 00655 return 0; 00656 } |
|
Definition at line 755 of file higgsTreeNewXana.cpp. References XANAGeantTrack::getMotherIndex(), and XANAGeantTrack::getPartId(). Referenced by XANAMcInfoTester::upDate().
00756 { 00757 int pid=0; 00758 while (idx>0) { 00759 XANAGeantTrack *gtmp = (XANAGeantTrack*)(*tracks)[idx-1]; 00760 idx = gtmp->getMotherIndex(); 00761 pid = gtmp->getPartId(); 00762 } 00763 return pid; 00764 } |
|
Definition at line 48 of file higgsTreeNewXana.cpp. Referenced by main().
00049 { 00050 T->SetBranchAddress("Event.",&event); 00051 T->SetBranchStatus("Event.",0); 00052 T->SetBranchAddress("GeneratorEvent.",&generatorEvent); 00053 T->SetBranchAddress("GeantEvent.",&geantEvent); 00054 } |