//
// This macro generates a simple TTree containing
// all true matches collected from one event.
//
// For each match it is stored:
// - label ID of the track
// - label ID of the EMCAL cluster
// - momentum (3D) of the track
// - vertex (3D) of the track
//
// All tracks which come from kinks are excluded
// from this computation, and fake tracks are collected.
// If desired, it is possible to change these settings
// operating on the Bool_t variables listed below.
//
Bool_t rejectKinks = kTRUE; // switch to TRUE to include kinks in computation
Bool_t rejectFakes = kFALSE; // switch to TRUE to include fake tracks in computation
class match_t
{
public:
Int_t label; // GEANT label of particle
Int_t indexT; // index of track in ESD collection
Int_t indexC; // index of cluster in ESD collection
Double_t p[3]; // track momentum
Double_t v[3]; // track vertex
};
//
// Read AliESDs.root file and saves all true pairs of trak-cluster.
//
void SaveTrueMatchesSimple(const char *outFileName="true-matches.root")
{
//
// open ESD file, retrieve tree and link to branch cursor
//
TFile *srcFile = TFile::Open("AliESDs.root");
if (!srcFile) return;
TTree *srcTree = (TTree*)srcFile->Get("esdTree");
if (!srcTree) return;
AliESDEvent* esd = new AliESDEvent();
esd->ReadFromTree(srcTree);
Long64_t nEvents = srcTree->GetEntries();
//
// Open output file and create output tree
//
TFile *outFile = new TFile(outFileName, "RECREATE");
match_t match;
//
// Loop on events and store true matches
//
Bool_t isKink;
Int_t label, count, nTracks, firstCluster, lastCluster;
for (Long64_t iev = 0; iev < nEvents; iev++) {
srcTree->GetEntry(iev);
cout << "Event " << iev + 1 << " of " << nEvents << ": " << endl;
nTracks = esd->GetNumberOfTracks();
firstCluster = 0;
lastCluster = esd->GetNumberOfCaloClusters();
cout << "Tracks found : " << nTracks << endl;
cout << "EMC clusters found: " << lastCluster - firstCluster << endl;
// create new matches tree
TTree *outTree = new TTree(Form("tm_%d", iev), Form("True matches from event %d", iev));
outTree->Branch("matches", &match, "label/I:indexT/I:indexC/I:p[3]/D:v[3]/D");
// external loop on tracks
for (Int_t it = 0; it < nTracks; it++) {
AliESDtrack *esdTrack = esd->GetTrack(it);
// start check to reject kinks
if (rejectKinks) {
isKink = kFALSE;
for (Int_t i = 0; i < 3; i++) {
if (esdTrack->GetKinkIndex(i) > 0) isKink = kTRUE;
}
if (isKink) continue;
}
// get track GEANT label (to be checked for match)
label = esdTrack->GetLabel();
if (rejectFakes) {
if (label < 0) continue;
}
else {
label = TMath::Abs(label);
}
// store track data into candidate match variable
// anyway, it will be stored in the tree only
// if it matches a cluster
match.indexT = it;
esdTrack->GetPxPyPz(match.p);
esdTrack->GetXYZ(match.v);
// internal loop on clusters
// a counter counts how many true matches are
// generated for the same track
count = 0;
for (Int_t ic = firstCluster; ic < lastCluster; ic++) {
AliESDCaloCluster *cl = esd->GetCaloCluster(ic);
if (!cl->IsEMCAL()) continue;
if (cl->GetLabel() != label) continue;
// if the method reaches this point, we
// have found a match to be stored
match.label = label;
match.indexC = ic;
outTree->Fill();
count++;
}
// alert for multiple matches
if (count > 0) {
cout << "Found " << count << " clusters which match track " << it << " in ESD";
if (count > 1) cout << " --> MULTIPLE MATCH";
cout << endl;
}
} // end loop on tracks
outFile->cd();
outTree->Write();
delete outTree;
}
outFile->Close();
}
SaveTrueMatchesSimple.C:1 SaveTrueMatchesSimple.C:2 SaveTrueMatchesSimple.C:3 SaveTrueMatchesSimple.C:4 SaveTrueMatchesSimple.C:5 SaveTrueMatchesSimple.C:6 SaveTrueMatchesSimple.C:7 SaveTrueMatchesSimple.C:8 SaveTrueMatchesSimple.C:9 SaveTrueMatchesSimple.C:10 SaveTrueMatchesSimple.C:11 SaveTrueMatchesSimple.C:12 SaveTrueMatchesSimple.C:13 SaveTrueMatchesSimple.C:14 SaveTrueMatchesSimple.C:15 SaveTrueMatchesSimple.C:16 SaveTrueMatchesSimple.C:17 SaveTrueMatchesSimple.C:18 SaveTrueMatchesSimple.C:19 SaveTrueMatchesSimple.C:20 SaveTrueMatchesSimple.C:21 SaveTrueMatchesSimple.C:22 SaveTrueMatchesSimple.C:23 SaveTrueMatchesSimple.C:24 SaveTrueMatchesSimple.C:25 SaveTrueMatchesSimple.C:26 SaveTrueMatchesSimple.C:27 SaveTrueMatchesSimple.C:28 SaveTrueMatchesSimple.C:29 SaveTrueMatchesSimple.C:30 SaveTrueMatchesSimple.C:31 SaveTrueMatchesSimple.C:32 SaveTrueMatchesSimple.C:33 SaveTrueMatchesSimple.C:34 SaveTrueMatchesSimple.C:35 SaveTrueMatchesSimple.C:36 SaveTrueMatchesSimple.C:37 SaveTrueMatchesSimple.C:38 SaveTrueMatchesSimple.C:39 SaveTrueMatchesSimple.C:40 SaveTrueMatchesSimple.C:41 SaveTrueMatchesSimple.C:42 SaveTrueMatchesSimple.C:43 SaveTrueMatchesSimple.C:44 SaveTrueMatchesSimple.C:45 SaveTrueMatchesSimple.C:46 SaveTrueMatchesSimple.C:47 SaveTrueMatchesSimple.C:48 SaveTrueMatchesSimple.C:49 SaveTrueMatchesSimple.C:50 SaveTrueMatchesSimple.C:51 SaveTrueMatchesSimple.C:52 SaveTrueMatchesSimple.C:53 SaveTrueMatchesSimple.C:54 SaveTrueMatchesSimple.C:55 SaveTrueMatchesSimple.C:56 SaveTrueMatchesSimple.C:57 SaveTrueMatchesSimple.C:58 SaveTrueMatchesSimple.C:59 SaveTrueMatchesSimple.C:60 SaveTrueMatchesSimple.C:61 SaveTrueMatchesSimple.C:62 SaveTrueMatchesSimple.C:63 SaveTrueMatchesSimple.C:64 SaveTrueMatchesSimple.C:65 SaveTrueMatchesSimple.C:66 SaveTrueMatchesSimple.C:67 SaveTrueMatchesSimple.C:68 SaveTrueMatchesSimple.C:69 SaveTrueMatchesSimple.C:70 SaveTrueMatchesSimple.C:71 SaveTrueMatchesSimple.C:72 SaveTrueMatchesSimple.C:73 SaveTrueMatchesSimple.C:74 SaveTrueMatchesSimple.C:75 SaveTrueMatchesSimple.C:76 SaveTrueMatchesSimple.C:77 SaveTrueMatchesSimple.C:78 SaveTrueMatchesSimple.C:79 SaveTrueMatchesSimple.C:80 SaveTrueMatchesSimple.C:81 SaveTrueMatchesSimple.C:82 SaveTrueMatchesSimple.C:83 SaveTrueMatchesSimple.C:84 SaveTrueMatchesSimple.C:85 SaveTrueMatchesSimple.C:86 SaveTrueMatchesSimple.C:87 SaveTrueMatchesSimple.C:88 SaveTrueMatchesSimple.C:89 SaveTrueMatchesSimple.C:90 SaveTrueMatchesSimple.C:91 SaveTrueMatchesSimple.C:92 SaveTrueMatchesSimple.C:93 SaveTrueMatchesSimple.C:94 SaveTrueMatchesSimple.C:95 SaveTrueMatchesSimple.C:96 SaveTrueMatchesSimple.C:97 SaveTrueMatchesSimple.C:98 SaveTrueMatchesSimple.C:99 SaveTrueMatchesSimple.C:100 SaveTrueMatchesSimple.C:101 SaveTrueMatchesSimple.C:102 SaveTrueMatchesSimple.C:103 SaveTrueMatchesSimple.C:104 SaveTrueMatchesSimple.C:105 SaveTrueMatchesSimple.C:106 SaveTrueMatchesSimple.C:107 SaveTrueMatchesSimple.C:108 SaveTrueMatchesSimple.C:109 SaveTrueMatchesSimple.C:110 SaveTrueMatchesSimple.C:111 SaveTrueMatchesSimple.C:112 SaveTrueMatchesSimple.C:113 SaveTrueMatchesSimple.C:114 SaveTrueMatchesSimple.C:115 SaveTrueMatchesSimple.C:116 SaveTrueMatchesSimple.C:117 SaveTrueMatchesSimple.C:118 SaveTrueMatchesSimple.C:119 SaveTrueMatchesSimple.C:120 SaveTrueMatchesSimple.C:121 SaveTrueMatchesSimple.C:122 SaveTrueMatchesSimple.C:123 SaveTrueMatchesSimple.C:124 SaveTrueMatchesSimple.C:125 SaveTrueMatchesSimple.C:126 SaveTrueMatchesSimple.C:127 SaveTrueMatchesSimple.C:128 SaveTrueMatchesSimple.C:129