1 // Usage in compiled mode
2 // gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include");
3 // gROOT->LoadMacro("test.C+");
6 #if !defined(__CINT__) || defined(__MAKECINT__)
13 #include <TStopwatch.h>
15 #include <TParticle.h>
17 // AliRoot include files
19 #include "AliRunLoader.h"
25 void test(const char * sdir ="signal",
26 const char * bdir ="backgr") {
33 // Signal file, tree, and branch
35 name += "/AliESDs.root";
36 TFile * fSig = TFile::Open(name.Data());
37 TTree * tSig = (TTree*)fSig->Get("esdTree");
38 TBranch * bSig = tSig->GetBranch("ESD");
40 AliESD * esdSig = 0; // The signal ESD object is put here
41 bSig->SetAddress(&esdSig);
43 // Run loader (signal events)
45 name += "/galice.root";
46 AliRunLoader* rlSig = AliRunLoader::Open(name.Data());
48 // Run loader (underlying events)
50 name += "/galice.root";
51 AliRunLoader* rlUnd = AliRunLoader::Open(name.Data(),"Underlying");
56 gAlice = rlSig->GetAliRun();
58 // Now load kinematics and event header
59 rlSig->LoadKinematics();
61 rlUnd->LoadKinematics();
64 // Loop on events: check that MC and data contain the same number of events
65 Long64_t nevSig = rlSig->GetNumberOfEvents();
66 Long64_t nevUnd = rlUnd->GetNumberOfEvents();
67 Long64_t nSigPerUnd = nevSig/nevUnd;
69 cout << nevSig << " signal events" << endl;
70 cout << nevUnd << " underlying events" << endl;
71 cout << nSigPerUnd << " signal events per one underlying" << endl;
73 for (Int_t iev=0; iev<nevSig; iev++) {
74 cout << "Signal event " << iev << endl;
75 Int_t ievUnd = iev/nSigPerUnd;
76 cout << "Underlying event " << ievUnd << endl;
80 // Get signal kinematics
82 // Get underlying kinematics
83 rlUnd->GetEvent(ievUnd);
86 AliStack * stackSig = rlSig->Stack();
87 Int_t nPartSig = stackSig->GetNtrack();
88 AliStack * stackUnd = rlUnd->Stack();
89 Int_t nPartUnd = stackUnd->GetNtrack();
91 Int_t nrec = esdSig->GetNumberOfTracks();
92 cout << nrec << " reconstructed tracks" << endl;
93 for(Int_t irec=0; irec<nrec; irec++) {
94 AliESDtrack * track = esdSig->GetTrack(irec);
95 UInt_t label = TMath::Abs(track->GetTPCLabel());
96 if (label>=10000000) {
97 // Underlying event. 10000000 is the
98 // value of fkMASKSTEP in AliRunDigitizer
99 // cout << " Track from the underlying event" << endl;
101 if (label>=nPartUnd) continue;
102 TParticle * part = stackUnd->Particle(label);
103 if(part) part->Print();
106 cout << " Track " << label << " from the signal event" << endl;
107 if (label>=nPartSig) {
108 cout <<"Strange, label outside the range "<< endl;
111 TParticle * part = stackSig->Particle(label);
112 if(part) part->Print();