ROOT logo
#include <fstream.h>

#include <TClassTable.h>
#include <TFile.h>
#include <TTree.h>
#include <TString.h>
#include <TClonesArray.h>
#include <TParticle.h>

#include "AliRun.h"
#include "AliITS.h"
#include "AliITSgeom.h"
#include "AliITSRecPoint.h"

Int_t AliITSStoreFindableTracksCompiled
(Int_t nMinClusters = 5, const Text_t *evname = "galice", Int_t evnum = 0)
{
	// Make sure that ALICE objects are loaded
	if (gAlice) {
		delete gAlice;
		gAlice = 0;
	}
	
	// Define the names of all involved files
	TString strEventFile(evname);
	TString strOutputFile(evname);
	strEventFile.Append(".root");
	strOutputFile.Append("_tracks_");
	strOutputFile += evnum;
	strOutputFile.Append(".root");
		
	// Connect the Root Galice file containing Geometry, Kine and Hits
	TFile *fileEvent = (TFile*)gROOT->GetListOfFiles()->FindObject(strEventFile);
	if (!fileEvent) fileEvent = new TFile(strEventFile,"UPDATE");
	
	// Get AliRun object from file
	gAlice = (AliRun*)fileEvent->Get("gAlice");
	if (gAlice) cout << "OK, found an AliRun object in file" << endl;
	
	// Get ITS related objects and data
	AliITS* ITS =(AliITS *)gAlice->GetDetector("ITS");
	if (!ITS) {
		cerr << "ITS object not found!" << endl;
		return 1;
	}
	AliITSgeom *geometry = ITS->GetITSgeom(); 
	if (!geometry) {
		cerr << "ITS geometry object not found!" << endl;
		return 2;
	}
	
	// Count the number of modules per layer
	Int_t nLadders, nDetectors, mod_min[6], mod_max[6];
	for(Int_t i = 0; i < 6; i++) {
		nLadders = geometry->GetNladders(i + 1);
		nDetectors = geometry->GetNdetectors(i + 1);
		mod_min[i] = geometry->GetModuleIndex(i + 1, 1, 1);
		mod_max[i] = geometry->GetModuleIndex(i + 1, nLadders, nDetectors);
	}
	
	// Load event and ITS recpoints
	Int_t nParticles = gAlice->GetEvent(evnum);
	cout << "Event number: " << evnum << endl;
	cout << "# particles : " << nParticles <<endl;
	if (nParticles <= 0) {
		cerr << "Can't have <= 0 particles!" << endl;
		return 3; 
	}
	AliITSRecPoint *recp = 0;
	TClonesArray  *recPoints = ITS->RecPoints();
	TObjArray     *particles = gAlice->Particles();
	Int_t nTracks = gAlice->GetNtrack(); //FCA correction
	Bool_t *hitITSLayer[6];
	for (Int_t i = 0; i < 6; i++) {
		hitITSLayer[i] = new Bool_t[nTracks];
		for (Int_t j = 0; j < nTracks; j++) hitITSLayer[i][j] = kFALSE;
	}
	
	// Load recpoints in event
	TTree *TR = gAlice->TreeR();
	if (!TR) {
		cerr << "TreeR object not found!" << endl;
		return 4;
	}
	
	// Scan recpoints and define findable tracks
	Int_t nModules = (Int_t)TR->GetEntries(), nPoints = 0, nEmpty = 0;
	cout << "Found " << nModules;
	cout << " entries in the TreeR (must be one per module!)" << endl;
	for (Int_t layer = 1; layer <= 6; layer++) {
		for (Int_t mod = mod_min[layer - 1]; mod <= mod_max[layer - 1]; mod++) {
			ITS->ResetRecPoints();
			TR->GetEntry(mod);
			nPoints = recPoints->GetEntries();
			if(!nPoints) {
				nEmpty++;
				continue;
			}
			for (Int_t point = 0; point < nPoints; point++) {
				recp = (AliITSRecPoint*)recPoints->UncheckedAt(point);
				for (Int_t it = 0; it < 3; it++) {
					Int_t track = recp->GetLabel(it);
					if(track < 0) continue;
					if(track > nTracks) {
						cout << "Found track index " << track;
						cout << " whilw gAlice->GetNtrack() = " << nTracks << endl;
						continue;
					}
					hitITSLayer[layer - 1][track] = kTRUE;
				} // loop over recpoint labels
			} //loop over points
		} //loop over modules
	} //loop over layers
	cout << "Found " << nEmpty << " empty modules" << endl;
	
	// Scan the file of tracks in TPC to retrieve the findable TPC tracks
	TString strLabelsTPC;
	Int_t label, pdg_code, nFindablesTPC = 0;
	Double_t dummy;
	ifstream tpc("good_tracks_tpc");
	while (tpc >> label >> pdg_code) {
		for (Int_t i = 0; i < 6; i++) tpc >> dummy;
		nFindablesTPC++;
		strLabelsTPC.Append(Form("[%d]", label));		
	}
			
	// Define the TTree with tracks data by means of a set of variables
	Int_t nFindablesITS = 0, nFindablesITSTPC = 0;
	Int_t nhits, tpc_ok, mother, entry = 0;
	Double_t vx, vy, vz;
	Double_t px, py, pz, pt;

	TTree *tree = new TTree("Tracks", "Findable tracks in ITS");
	
	tree->Branch("vx", &vx, "vx/D");
	tree->Branch("vy", &vy, "vy/D");
	tree->Branch("vz", &vz, "vz/D");
	tree->Branch("px", &px, "px/D");
	tree->Branch("py", &py, "py/D");
	tree->Branch("pz", &pz, "pz/D");
	tree->Branch("pt", &pt, "pt/D");
	tree->Branch("label", &label, "label/I");
	tree->Branch("entry", &entry, "entry/I");
	tree->Branch("mother", &mother, "mother/I");
	tree->Branch("pdg_code", &pdg_code, "pdg_code/I");
	tree->Branch("nhits", &nhits, "nhits/I");
	tree->Branch("tpc_ok", &tpc_ok, "tpc_ok/I");
	
	// Fill the tree
	cout << endl;
	TParticle *p = 0;
	for (Int_t i = 0; i < nTracks; i++) {
		nhits = 0;
		for (Int_t j = 0; j < 6; j++) if (hitITSLayer[j][i]) nhits++;
		if (nhits < nMinClusters) continue;
		p = gAlice->Particle(i);
		px = p->Px();
		py = p->Py();
		pz = p->Pz();
		pt = p->Pt();
		vx = p->Vx();
		vy = p->Vy();
		vz = p->Vz();
		mother = p->GetFirstMother();
		cout << "Track " << i << " stored\r" << flush;
		tpc_ok = (strLabelsTPC.Contains(Form("[%d]", i)));
		pdg_code = p->GetPdgCode();
		label = i;
		nFindablesITS++;
		if (tpc_ok) nFindablesITSTPC++;
		tree->Fill();
		entry++;
	}
	
	// Save into a file
	TFile *fileOutput = new TFile(strOutputFile, "recreate");
	tree->Write();
	fileOutput->Close();
	
	cout << "# findable tracks in TPC     : " << nFindablesTPC << endl;
	cout << "# findable tracks in ITS     : " << nFindablesITS << endl;
	cout << "# findable tracks in ITS+TPC : " << nFindablesITSTPC << endl;
	
	return 0;
}
 AliITSStoreFindableTracksCompiled.C:1
 AliITSStoreFindableTracksCompiled.C:2
 AliITSStoreFindableTracksCompiled.C:3
 AliITSStoreFindableTracksCompiled.C:4
 AliITSStoreFindableTracksCompiled.C:5
 AliITSStoreFindableTracksCompiled.C:6
 AliITSStoreFindableTracksCompiled.C:7
 AliITSStoreFindableTracksCompiled.C:8
 AliITSStoreFindableTracksCompiled.C:9
 AliITSStoreFindableTracksCompiled.C:10
 AliITSStoreFindableTracksCompiled.C:11
 AliITSStoreFindableTracksCompiled.C:12
 AliITSStoreFindableTracksCompiled.C:13
 AliITSStoreFindableTracksCompiled.C:14
 AliITSStoreFindableTracksCompiled.C:15
 AliITSStoreFindableTracksCompiled.C:16
 AliITSStoreFindableTracksCompiled.C:17
 AliITSStoreFindableTracksCompiled.C:18
 AliITSStoreFindableTracksCompiled.C:19
 AliITSStoreFindableTracksCompiled.C:20
 AliITSStoreFindableTracksCompiled.C:21
 AliITSStoreFindableTracksCompiled.C:22
 AliITSStoreFindableTracksCompiled.C:23
 AliITSStoreFindableTracksCompiled.C:24
 AliITSStoreFindableTracksCompiled.C:25
 AliITSStoreFindableTracksCompiled.C:26
 AliITSStoreFindableTracksCompiled.C:27
 AliITSStoreFindableTracksCompiled.C:28
 AliITSStoreFindableTracksCompiled.C:29
 AliITSStoreFindableTracksCompiled.C:30
 AliITSStoreFindableTracksCompiled.C:31
 AliITSStoreFindableTracksCompiled.C:32
 AliITSStoreFindableTracksCompiled.C:33
 AliITSStoreFindableTracksCompiled.C:34
 AliITSStoreFindableTracksCompiled.C:35
 AliITSStoreFindableTracksCompiled.C:36
 AliITSStoreFindableTracksCompiled.C:37
 AliITSStoreFindableTracksCompiled.C:38
 AliITSStoreFindableTracksCompiled.C:39
 AliITSStoreFindableTracksCompiled.C:40
 AliITSStoreFindableTracksCompiled.C:41
 AliITSStoreFindableTracksCompiled.C:42
 AliITSStoreFindableTracksCompiled.C:43
 AliITSStoreFindableTracksCompiled.C:44
 AliITSStoreFindableTracksCompiled.C:45
 AliITSStoreFindableTracksCompiled.C:46
 AliITSStoreFindableTracksCompiled.C:47
 AliITSStoreFindableTracksCompiled.C:48
 AliITSStoreFindableTracksCompiled.C:49
 AliITSStoreFindableTracksCompiled.C:50
 AliITSStoreFindableTracksCompiled.C:51
 AliITSStoreFindableTracksCompiled.C:52
 AliITSStoreFindableTracksCompiled.C:53
 AliITSStoreFindableTracksCompiled.C:54
 AliITSStoreFindableTracksCompiled.C:55
 AliITSStoreFindableTracksCompiled.C:56
 AliITSStoreFindableTracksCompiled.C:57
 AliITSStoreFindableTracksCompiled.C:58
 AliITSStoreFindableTracksCompiled.C:59
 AliITSStoreFindableTracksCompiled.C:60
 AliITSStoreFindableTracksCompiled.C:61
 AliITSStoreFindableTracksCompiled.C:62
 AliITSStoreFindableTracksCompiled.C:63
 AliITSStoreFindableTracksCompiled.C:64
 AliITSStoreFindableTracksCompiled.C:65
 AliITSStoreFindableTracksCompiled.C:66
 AliITSStoreFindableTracksCompiled.C:67
 AliITSStoreFindableTracksCompiled.C:68
 AliITSStoreFindableTracksCompiled.C:69
 AliITSStoreFindableTracksCompiled.C:70
 AliITSStoreFindableTracksCompiled.C:71
 AliITSStoreFindableTracksCompiled.C:72
 AliITSStoreFindableTracksCompiled.C:73
 AliITSStoreFindableTracksCompiled.C:74
 AliITSStoreFindableTracksCompiled.C:75
 AliITSStoreFindableTracksCompiled.C:76
 AliITSStoreFindableTracksCompiled.C:77
 AliITSStoreFindableTracksCompiled.C:78
 AliITSStoreFindableTracksCompiled.C:79
 AliITSStoreFindableTracksCompiled.C:80
 AliITSStoreFindableTracksCompiled.C:81
 AliITSStoreFindableTracksCompiled.C:82
 AliITSStoreFindableTracksCompiled.C:83
 AliITSStoreFindableTracksCompiled.C:84
 AliITSStoreFindableTracksCompiled.C:85
 AliITSStoreFindableTracksCompiled.C:86
 AliITSStoreFindableTracksCompiled.C:87
 AliITSStoreFindableTracksCompiled.C:88
 AliITSStoreFindableTracksCompiled.C:89
 AliITSStoreFindableTracksCompiled.C:90
 AliITSStoreFindableTracksCompiled.C:91
 AliITSStoreFindableTracksCompiled.C:92
 AliITSStoreFindableTracksCompiled.C:93
 AliITSStoreFindableTracksCompiled.C:94
 AliITSStoreFindableTracksCompiled.C:95
 AliITSStoreFindableTracksCompiled.C:96
 AliITSStoreFindableTracksCompiled.C:97
 AliITSStoreFindableTracksCompiled.C:98
 AliITSStoreFindableTracksCompiled.C:99
 AliITSStoreFindableTracksCompiled.C:100
 AliITSStoreFindableTracksCompiled.C:101
 AliITSStoreFindableTracksCompiled.C:102
 AliITSStoreFindableTracksCompiled.C:103
 AliITSStoreFindableTracksCompiled.C:104
 AliITSStoreFindableTracksCompiled.C:105
 AliITSStoreFindableTracksCompiled.C:106
 AliITSStoreFindableTracksCompiled.C:107
 AliITSStoreFindableTracksCompiled.C:108
 AliITSStoreFindableTracksCompiled.C:109
 AliITSStoreFindableTracksCompiled.C:110
 AliITSStoreFindableTracksCompiled.C:111
 AliITSStoreFindableTracksCompiled.C:112
 AliITSStoreFindableTracksCompiled.C:113
 AliITSStoreFindableTracksCompiled.C:114
 AliITSStoreFindableTracksCompiled.C:115
 AliITSStoreFindableTracksCompiled.C:116
 AliITSStoreFindableTracksCompiled.C:117
 AliITSStoreFindableTracksCompiled.C:118
 AliITSStoreFindableTracksCompiled.C:119
 AliITSStoreFindableTracksCompiled.C:120
 AliITSStoreFindableTracksCompiled.C:121
 AliITSStoreFindableTracksCompiled.C:122
 AliITSStoreFindableTracksCompiled.C:123
 AliITSStoreFindableTracksCompiled.C:124
 AliITSStoreFindableTracksCompiled.C:125
 AliITSStoreFindableTracksCompiled.C:126
 AliITSStoreFindableTracksCompiled.C:127
 AliITSStoreFindableTracksCompiled.C:128
 AliITSStoreFindableTracksCompiled.C:129
 AliITSStoreFindableTracksCompiled.C:130
 AliITSStoreFindableTracksCompiled.C:131
 AliITSStoreFindableTracksCompiled.C:132
 AliITSStoreFindableTracksCompiled.C:133
 AliITSStoreFindableTracksCompiled.C:134
 AliITSStoreFindableTracksCompiled.C:135
 AliITSStoreFindableTracksCompiled.C:136
 AliITSStoreFindableTracksCompiled.C:137
 AliITSStoreFindableTracksCompiled.C:138
 AliITSStoreFindableTracksCompiled.C:139
 AliITSStoreFindableTracksCompiled.C:140
 AliITSStoreFindableTracksCompiled.C:141
 AliITSStoreFindableTracksCompiled.C:142
 AliITSStoreFindableTracksCompiled.C:143
 AliITSStoreFindableTracksCompiled.C:144
 AliITSStoreFindableTracksCompiled.C:145
 AliITSStoreFindableTracksCompiled.C:146
 AliITSStoreFindableTracksCompiled.C:147
 AliITSStoreFindableTracksCompiled.C:148
 AliITSStoreFindableTracksCompiled.C:149
 AliITSStoreFindableTracksCompiled.C:150
 AliITSStoreFindableTracksCompiled.C:151
 AliITSStoreFindableTracksCompiled.C:152
 AliITSStoreFindableTracksCompiled.C:153
 AliITSStoreFindableTracksCompiled.C:154
 AliITSStoreFindableTracksCompiled.C:155
 AliITSStoreFindableTracksCompiled.C:156
 AliITSStoreFindableTracksCompiled.C:157
 AliITSStoreFindableTracksCompiled.C:158
 AliITSStoreFindableTracksCompiled.C:159
 AliITSStoreFindableTracksCompiled.C:160
 AliITSStoreFindableTracksCompiled.C:161
 AliITSStoreFindableTracksCompiled.C:162
 AliITSStoreFindableTracksCompiled.C:163
 AliITSStoreFindableTracksCompiled.C:164
 AliITSStoreFindableTracksCompiled.C:165
 AliITSStoreFindableTracksCompiled.C:166
 AliITSStoreFindableTracksCompiled.C:167
 AliITSStoreFindableTracksCompiled.C:168
 AliITSStoreFindableTracksCompiled.C:169
 AliITSStoreFindableTracksCompiled.C:170
 AliITSStoreFindableTracksCompiled.C:171
 AliITSStoreFindableTracksCompiled.C:172
 AliITSStoreFindableTracksCompiled.C:173
 AliITSStoreFindableTracksCompiled.C:174
 AliITSStoreFindableTracksCompiled.C:175
 AliITSStoreFindableTracksCompiled.C:176
 AliITSStoreFindableTracksCompiled.C:177
 AliITSStoreFindableTracksCompiled.C:178
 AliITSStoreFindableTracksCompiled.C:179
 AliITSStoreFindableTracksCompiled.C:180
 AliITSStoreFindableTracksCompiled.C:181
 AliITSStoreFindableTracksCompiled.C:182
 AliITSStoreFindableTracksCompiled.C:183
 AliITSStoreFindableTracksCompiled.C:184
 AliITSStoreFindableTracksCompiled.C:185
 AliITSStoreFindableTracksCompiled.C:186