ROOT logo
//
// This macros compares the matches found by algorithm with the true matches
// found with the "SaveTrueMatchesSimple.C" macro.
// It saves 4 histogram, which contain the Pt distribution of:
//   - all found matches
//   - all correctly found matches
//   - all wrong (fake) found matches
//   - all true matches
// which will then be availabel for computing efficiency and contamination.
//

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
};

void MatchComparison()
{
	//
	// Initialize AliRun manager
	//
	
	//
	// Initialize run loader and load Kinematics
	//
	AliRunLoader *runLoader = AliRunLoader::Open("galice.root");
	if (!runLoader) return;
	runLoader->LoadgAlice();
	gAlice = runLoader->GetAliRun();
	runLoader->LoadKinematics();
	
	//
	// Initialize histograms with their error computation
	//
	TH1D *hgood  = new TH1D("hgood", "Well matched tracks", 40, 0.0,  40.0);
	TH1D *hfake  = new TH1D("hfake", "Fake matched tracks", 40, 0.0,  40.0);
	TH1D *htrue  = new TH1D("htrue", "True matches"       , 40, 0.0,  40.0);
	TH1D *hfound = new TH1D("hfound","Found matches"      , 40, 0.0,  40.0);
	hgood->Sumw2();
	hfake->Sumw2();
	htrue->Sumw2();
	hfound->Sumw2();
	
	//
	// Open file containing true matches,
	// retrieve the Tree and link to a cursor.
	//
	TFile *fileTrue = TFile::Open("true-matches.root");
	match_t trueMatch;
	
	//
	// Open file of found matches,
	// link the modified ESD container.
	//
	TFile *fileFound = TFile::Open("matchESD.root");
	TTree *treeFound = (TTree*)fileFound->Get("esdTree");
	AliESDEvent* esd = new AliESDEvent();
	esd->ReadFromTree(treeFound);
	Long64_t nEvents = treeFound->GetEntries();
	
	//
	// Loop on all events
	//
	Int_t im, it, ic, nTrueMatches, nTracks;
	Int_t label, trkLabel, cluLabel;
	for (Long64_t iev = 0; iev < nEvents; iev++) {
		
		// get true matches tree of given event
		TTree *treeTrue = (TTree*)fileTrue->Get(Form("tm_%d", iev));
		treeTrue->SetBranchAddress("matches", &trueMatch);
		nTrueMatches = treeTrue->GetEntries();
		
		// set TTree pointers to selected event
		runLoader->GetEvent(iev);
		treeFound->GetEntry(iev);
		AliStack *stack = runLoader->Stack();
		nTracks = esd->GetNumberOfTracks();
		
		// read all true pairs
		for (im = 0; im < nTrueMatches; im++) {
			treeTrue->GetEntry(im);
			AliESDtrack *track = esd->GetTrack(trueMatch.indexT);
			if (!track) continue;
			
			label = TMath::Abs(track->GetLabel());
			TParticle *p = stack->Particle(label);
			htrue->Fill(p->Pt());
			cout <<"filling true"<< endl;
		}
		
		// compare found matches
		for (Int_t it = 0; it < nTracks; it++) {
			AliESDtrack *track = esd->GetTrack(it);
			ic = track->GetEMCALcluster();
			if (ic == AliEMCALTracker::kUnmatched) continue;
			ic = TMath::Abs(ic);
			AliESDCaloCluster *cl = esd->GetCaloCluster(ic);
			if (!cl) continue;
			if (!cl->IsEMCAL()) continue ;
			trkLabel = TMath::Abs(track->GetLabel());
			cluLabel = cl->GetLabel();
			if (trkLabel == cluLabel && trkLabel >= 0) {
				TParticle *p = stack->Particle(TMath::Abs(trkLabel));
				hgood->Fill(p->Pt());
				hfound->Fill(p->Pt());
				cout <<"filling GOOD, pt:" << p->Pt()<< endl;
			}
			else  {
				TParticle *p = stack->Particle(TMath::Abs(trkLabel));
				hfake->Fill(p->Pt());
				hfound->Fill(p->Pt());
				cout <<"filling FAKE" << endl;
			}
		}
	}
	
	cout << "True matches : " << htrue->GetEntries() << endl;
	cout << "Found matches: " << hfound->GetEntries() << endl;
	cout << "Good matches : " << hgood->GetEntries() << endl;
	cout << "Fake matches : " << hfake->GetEntries() << endl;
	
	TFile *fout = TFile::Open("match-comparison.root", "RECREATE");
	hgood->Write();
	hfake->Write();
	htrue->Write();
	hfound->Write();
	fout->Close();
}
 MatchComparison.C:1
 MatchComparison.C:2
 MatchComparison.C:3
 MatchComparison.C:4
 MatchComparison.C:5
 MatchComparison.C:6
 MatchComparison.C:7
 MatchComparison.C:8
 MatchComparison.C:9
 MatchComparison.C:10
 MatchComparison.C:11
 MatchComparison.C:12
 MatchComparison.C:13
 MatchComparison.C:14
 MatchComparison.C:15
 MatchComparison.C:16
 MatchComparison.C:17
 MatchComparison.C:18
 MatchComparison.C:19
 MatchComparison.C:20
 MatchComparison.C:21
 MatchComparison.C:22
 MatchComparison.C:23
 MatchComparison.C:24
 MatchComparison.C:25
 MatchComparison.C:26
 MatchComparison.C:27
 MatchComparison.C:28
 MatchComparison.C:29
 MatchComparison.C:30
 MatchComparison.C:31
 MatchComparison.C:32
 MatchComparison.C:33
 MatchComparison.C:34
 MatchComparison.C:35
 MatchComparison.C:36
 MatchComparison.C:37
 MatchComparison.C:38
 MatchComparison.C:39
 MatchComparison.C:40
 MatchComparison.C:41
 MatchComparison.C:42
 MatchComparison.C:43
 MatchComparison.C:44
 MatchComparison.C:45
 MatchComparison.C:46
 MatchComparison.C:47
 MatchComparison.C:48
 MatchComparison.C:49
 MatchComparison.C:50
 MatchComparison.C:51
 MatchComparison.C:52
 MatchComparison.C:53
 MatchComparison.C:54
 MatchComparison.C:55
 MatchComparison.C:56
 MatchComparison.C:57
 MatchComparison.C:58
 MatchComparison.C:59
 MatchComparison.C:60
 MatchComparison.C:61
 MatchComparison.C:62
 MatchComparison.C:63
 MatchComparison.C:64
 MatchComparison.C:65
 MatchComparison.C:66
 MatchComparison.C:67
 MatchComparison.C:68
 MatchComparison.C:69
 MatchComparison.C:70
 MatchComparison.C:71
 MatchComparison.C:72
 MatchComparison.C:73
 MatchComparison.C:74
 MatchComparison.C:75
 MatchComparison.C:76
 MatchComparison.C:77
 MatchComparison.C:78
 MatchComparison.C:79
 MatchComparison.C:80
 MatchComparison.C:81
 MatchComparison.C:82
 MatchComparison.C:83
 MatchComparison.C:84
 MatchComparison.C:85
 MatchComparison.C:86
 MatchComparison.C:87
 MatchComparison.C:88
 MatchComparison.C:89
 MatchComparison.C:90
 MatchComparison.C:91
 MatchComparison.C:92
 MatchComparison.C:93
 MatchComparison.C:94
 MatchComparison.C:95
 MatchComparison.C:96
 MatchComparison.C:97
 MatchComparison.C:98
 MatchComparison.C:99
 MatchComparison.C:100
 MatchComparison.C:101
 MatchComparison.C:102
 MatchComparison.C:103
 MatchComparison.C:104
 MatchComparison.C:105
 MatchComparison.C:106
 MatchComparison.C:107
 MatchComparison.C:108
 MatchComparison.C:109
 MatchComparison.C:110
 MatchComparison.C:111
 MatchComparison.C:112
 MatchComparison.C:113
 MatchComparison.C:114
 MatchComparison.C:115
 MatchComparison.C:116
 MatchComparison.C:117
 MatchComparison.C:118
 MatchComparison.C:119
 MatchComparison.C:120
 MatchComparison.C:121
 MatchComparison.C:122
 MatchComparison.C:123
 MatchComparison.C:124
 MatchComparison.C:125
 MatchComparison.C:126
 MatchComparison.C:127
 MatchComparison.C:128
 MatchComparison.C:129
 MatchComparison.C:130
 MatchComparison.C:131
 MatchComparison.C:132
 MatchComparison.C:133
 MatchComparison.C:134
 MatchComparison.C:135