#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 }
|
1.3.5