ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
  #include "Riostream.h"
  #include "TFile.h"
  #include "TTree.h"
  #include "TStopwatch.h"

  #include "AliRun.h"
  #include "AliRunLoader.h"
  #include "AliTPCLoader.h"
  #include "AliITSLoader.h"
  #include "AliITS.h"
  #include "AliITSgeom.h"
  #include "AliITStrackerANN.h"
  #include "AliESD.h"
#endif

extern AliRun *gAlice;

Int_t AliITSFindTracksANN 
(Int_t nsectors = 10,      // number of azimutal sectors
 Int_t nev = 5)            // number of events to process
{

	// ==================================
	// ==== EVENT READING ===============
	// ==================================

	// Remove an already existing Run Loader
	if (gAlice) {
		delete AliRunLoader::Instance();
		delete gAlice; 
		gAlice=0;
	}
	
	// Instance the new Run Loader
	AliRunLoader* rl = AliRunLoader::Open("galice.root");
	if (rl == 0x0) {
		cerr<<"AliITSFindTracks.C : Can not open session RL=NULL"<< endl;
		return 3;
	}
	
	// Instance the ITS Loader
	AliITSLoader* itsl = (AliITSLoader*)rl->GetLoader("ITSLoader");
	if (itsl == 0x0) {
		cerr<<"AliITSFindTracksV2.C : Can not get ITS loader"<<endl;
		return 4;
	}
	
	// Load the gAlice
	if (rl->LoadgAlice()) {
		cerr<<"AliITSFindTracksV2.C : LoadgAlice returned error"<<endl;
		delete rl;
		return 3;
	}
	
	// Set NECESSARY conversion constant for magnetic field
	AliKalmanTrack::SetConvConst
	(
		1000/0.299792458/rl->GetAliRun()->Field()->SolenoidField()
	);
	
	// Get the ITS data & geometry & recpoints
	AliITS *dITS = (AliITS*)rl->GetAliRun()->GetDetector("ITS");
	if (!dITS) {
		cerr<<"AliITSFindClusters.C : Can not find the ITS detector !"<<endl;
		return 6;
	}
	AliITSgeom *geom = dITS->GetITSgeom();
	itsl->LoadRecPoints("read");
	
	// ==================================
	// ==== CURVATURE CUT DEFINITION ====
	// ==================================

	// These values define the curvature cuts for all steps
	// within a sector.
	// For a greater clarity, the cuts are indicated in units
	// of transverse momentum (GeV/c) but these value have no
	// exact physical meaning, but are useful to understand
	// well what means a choice in the value of a certain
	// curvature constraint
	// NOTE: be careful to make sure that the 'ncuts' variable
	//       have the same value of the dimension of the allocated arrays

	Int_t ncuts;
	Double_t *p, *cut;

	ncuts = 6;
	p = new Double_t[6];
	cut = new Double_t[6];
	cut[ 0] = 0.0006;
	cut[ 1] = 0.0010;
	cut[ 2] = 0.0013;
	cut[ 3] = 0.0018;
	cut[ 4] = 0.0020;
	cut[ 5] = 0.0030;


	// ==========================
	// ==== OTHER PARAMETERS ====
	// ==========================

	
	Double_t helix[5]   = { 0.03, 0.02, 0.01, 0.03, 0.2 };
	Double_t theta2D[5] = { 1.5, 1.0, 1.0, 3.0, 10.0 };
	Double_t theta3D[5] = { 200., 200., 200., 200.0, 200.0 };
	
	
	/*
	Double_t helix[5]   = { 0.3, 0.3, 0.3, 0.5, 0.5 };
	Double_t theta2D[5] = { 5.0, 5.0, 5.0, 5.0, 5.0 };
	Double_t theta3D[5] = { 5.0, 5.0, 5.0, 5.0, 5.0 };
	*/
	
	Double_t temp   = 1.0;     // temperature parameter
	Double_t var    = 0.00001; // stabilization threshold

	Double_t exp    = 20.0;    // straight-line excitator
	Double_t gtoc   = 6.0;     // gain/cost contribution ratio

	Double_t min    = 0.4;     // minimum in random activation initialization
	Double_t max    = 0.6;     // maximum in random activation initialization
	Double_t actmin = 0.55;    // activation threshold for binary map conversion
	
	// Instance the Tracker
	AliITStrackerANN tracker(geom, 2);
	
	// Set cuts
	tracker.SetVertex(0.0, 0.0, 0.0);

	tracker.SetCuts(ncuts, cut, theta2D, theta3D, helix);
	tracker.SetTemperature(temp);
	tracker.SetVariationLimit(var);
	tracker.SetGainToCostRatio(gtoc);
	tracker.SetWeightExponent(exp);
	tracker.SetInitInterval(min, max);
	tracker.SetActThreshold(actmin);
	
	tracker.SetPolarInterval(45.0); 
		
	// Set number of events
	if (nev > rl->GetNumberOfEvents()) nev = rl->GetNumberOfEvents();
	Int_t rc = 0;
	
	// Get ESD files
	TFile *itsf=TFile::Open("AliESDits.root","RECREATE");
	if ((!itsf)||(!itsf->IsOpen())) {
		cerr << "Can't AliESDits.root !\n"; 
		return 1;
	}
	TFile *tpcf=TFile::Open("AliESDtpc.root");
	if ((!tpcf)||(!tpcf->IsOpen())) {
		cerr<<"Can't AliESDtpc.root !\n";
		return 1;
	}
	AliESD* event = new AliESD;
	TTree* esdTree = (TTree*) tpcf->Get("esdTree");
	if (!esdTree) {
	  cerr<<"no ESD tree found !\n";
	  return 1;
	}
	esdTree->SetBranchAddress("ESD", &event);
	
	// Loop on events
	TStopwatch timer; 
	for (Int_t i = 0; i < nev; i++) {
		cerr << "Processing event number: " << i << endl;
		esdTree->GetEvent(i);
		
		rl->GetEvent(i);
		
		// Get clusters from file
		TTree *cTree=itsl->TreeR();
		if (!cTree) {
			cerr<<"AliITSFindTracksANN.C : NO clusters tree!" << endl;
			return 4;
		}
		
		// Load clusters in tracker
		tracker.LoadClusters(cTree);
		
		// Create array structure and arrange points in it
		tracker.CreateArrayStructure(nsectors);
		tracker.ArrangePoints("its.recpoints.txt");
		tracker.StoreOverallMatches();
		//tracker.PrintMatches(kFALSE);
		
		// ***************************
		//  NEURAL TRACKING OPERATION
		// ***************************
		
		Bool_t isStable = kFALSE;
		Int_t i, nUnits = 0, nLinks = 0, nTracks = 0;
		Int_t sectTracks = 0, totTracks = 0;

		// tracking through sectors
		cout << endl;
		Int_t sector, curv;
//		nUnits = tracker.CreateNetwork(0, ncuts - 1);
//		cout << endl << nUnits << " NEURONS CREATED" << endl;
//		return;
		
		for (sector = 0; sector < nsectors; sector++) {
			sectTracks = 0;
			for(curv = 0; curv < ncuts; curv++) {
				// units creation
				nUnits = tracker.CreateNetwork(sector, curv);
				if (!nUnits) {
					cout << "no neurons --> skipped" << endl;
					continue;
				}
				// units connection
				nLinks = tracker.LinkNeurons();
				if (!nLinks) {
					cout << "no connections --> skipped" << endl;
					continue;
				}
				// neural updating
				for (i = 0;; i++) {
					isStable = tracker.Update();
					if (isStable) break;
				}
				// tracks saving
				tracker.CleanNetwork();
				nTracks = tracker.StoreTracks();
				cout << nUnits << " units, ";
				cout << nLinks << " connections, ";
				cout << i << " cycles --> ";
				cout << nTracks << " tracks" << endl;
				sectTracks += nTracks;
			}
			cout << "\n >>> Total tracks found in sector: " << sectTracks << endl;
			totTracks += sectTracks;
		}
		tracker.ExportTracks("ITS.Neural.root");
		cout << "\n\n--- Totally found " << totTracks << " tracks ---\n\n" << endl;
		
		// ***************************
		
		// End of operations: unload clusters
		tracker.UnloadClusters();
		
	}
	timer.Stop(); 
	timer.Print();
	
	// Close files & delete objects
	delete event;
	tpcf->Close();
	itsf->Close();
	delete rl;
	return rc;
}


 AliITSFindTracksANN.C:1
 AliITSFindTracksANN.C:2
 AliITSFindTracksANN.C:3
 AliITSFindTracksANN.C:4
 AliITSFindTracksANN.C:5
 AliITSFindTracksANN.C:6
 AliITSFindTracksANN.C:7
 AliITSFindTracksANN.C:8
 AliITSFindTracksANN.C:9
 AliITSFindTracksANN.C:10
 AliITSFindTracksANN.C:11
 AliITSFindTracksANN.C:12
 AliITSFindTracksANN.C:13
 AliITSFindTracksANN.C:14
 AliITSFindTracksANN.C:15
 AliITSFindTracksANN.C:16
 AliITSFindTracksANN.C:17
 AliITSFindTracksANN.C:18
 AliITSFindTracksANN.C:19
 AliITSFindTracksANN.C:20
 AliITSFindTracksANN.C:21
 AliITSFindTracksANN.C:22
 AliITSFindTracksANN.C:23
 AliITSFindTracksANN.C:24
 AliITSFindTracksANN.C:25
 AliITSFindTracksANN.C:26
 AliITSFindTracksANN.C:27
 AliITSFindTracksANN.C:28
 AliITSFindTracksANN.C:29
 AliITSFindTracksANN.C:30
 AliITSFindTracksANN.C:31
 AliITSFindTracksANN.C:32
 AliITSFindTracksANN.C:33
 AliITSFindTracksANN.C:34
 AliITSFindTracksANN.C:35
 AliITSFindTracksANN.C:36
 AliITSFindTracksANN.C:37
 AliITSFindTracksANN.C:38
 AliITSFindTracksANN.C:39
 AliITSFindTracksANN.C:40
 AliITSFindTracksANN.C:41
 AliITSFindTracksANN.C:42
 AliITSFindTracksANN.C:43
 AliITSFindTracksANN.C:44
 AliITSFindTracksANN.C:45
 AliITSFindTracksANN.C:46
 AliITSFindTracksANN.C:47
 AliITSFindTracksANN.C:48
 AliITSFindTracksANN.C:49
 AliITSFindTracksANN.C:50
 AliITSFindTracksANN.C:51
 AliITSFindTracksANN.C:52
 AliITSFindTracksANN.C:53
 AliITSFindTracksANN.C:54
 AliITSFindTracksANN.C:55
 AliITSFindTracksANN.C:56
 AliITSFindTracksANN.C:57
 AliITSFindTracksANN.C:58
 AliITSFindTracksANN.C:59
 AliITSFindTracksANN.C:60
 AliITSFindTracksANN.C:61
 AliITSFindTracksANN.C:62
 AliITSFindTracksANN.C:63
 AliITSFindTracksANN.C:64
 AliITSFindTracksANN.C:65
 AliITSFindTracksANN.C:66
 AliITSFindTracksANN.C:67
 AliITSFindTracksANN.C:68
 AliITSFindTracksANN.C:69
 AliITSFindTracksANN.C:70
 AliITSFindTracksANN.C:71
 AliITSFindTracksANN.C:72
 AliITSFindTracksANN.C:73
 AliITSFindTracksANN.C:74
 AliITSFindTracksANN.C:75
 AliITSFindTracksANN.C:76
 AliITSFindTracksANN.C:77
 AliITSFindTracksANN.C:78
 AliITSFindTracksANN.C:79
 AliITSFindTracksANN.C:80
 AliITSFindTracksANN.C:81
 AliITSFindTracksANN.C:82
 AliITSFindTracksANN.C:83
 AliITSFindTracksANN.C:84
 AliITSFindTracksANN.C:85
 AliITSFindTracksANN.C:86
 AliITSFindTracksANN.C:87
 AliITSFindTracksANN.C:88
 AliITSFindTracksANN.C:89
 AliITSFindTracksANN.C:90
 AliITSFindTracksANN.C:91
 AliITSFindTracksANN.C:92
 AliITSFindTracksANN.C:93
 AliITSFindTracksANN.C:94
 AliITSFindTracksANN.C:95
 AliITSFindTracksANN.C:96
 AliITSFindTracksANN.C:97
 AliITSFindTracksANN.C:98
 AliITSFindTracksANN.C:99
 AliITSFindTracksANN.C:100
 AliITSFindTracksANN.C:101
 AliITSFindTracksANN.C:102
 AliITSFindTracksANN.C:103
 AliITSFindTracksANN.C:104
 AliITSFindTracksANN.C:105
 AliITSFindTracksANN.C:106
 AliITSFindTracksANN.C:107
 AliITSFindTracksANN.C:108
 AliITSFindTracksANN.C:109
 AliITSFindTracksANN.C:110
 AliITSFindTracksANN.C:111
 AliITSFindTracksANN.C:112
 AliITSFindTracksANN.C:113
 AliITSFindTracksANN.C:114
 AliITSFindTracksANN.C:115
 AliITSFindTracksANN.C:116
 AliITSFindTracksANN.C:117
 AliITSFindTracksANN.C:118
 AliITSFindTracksANN.C:119
 AliITSFindTracksANN.C:120
 AliITSFindTracksANN.C:121
 AliITSFindTracksANN.C:122
 AliITSFindTracksANN.C:123
 AliITSFindTracksANN.C:124
 AliITSFindTracksANN.C:125
 AliITSFindTracksANN.C:126
 AliITSFindTracksANN.C:127
 AliITSFindTracksANN.C:128
 AliITSFindTracksANN.C:129
 AliITSFindTracksANN.C:130
 AliITSFindTracksANN.C:131
 AliITSFindTracksANN.C:132
 AliITSFindTracksANN.C:133
 AliITSFindTracksANN.C:134
 AliITSFindTracksANN.C:135
 AliITSFindTracksANN.C:136
 AliITSFindTracksANN.C:137
 AliITSFindTracksANN.C:138
 AliITSFindTracksANN.C:139
 AliITSFindTracksANN.C:140
 AliITSFindTracksANN.C:141
 AliITSFindTracksANN.C:142
 AliITSFindTracksANN.C:143
 AliITSFindTracksANN.C:144
 AliITSFindTracksANN.C:145
 AliITSFindTracksANN.C:146
 AliITSFindTracksANN.C:147
 AliITSFindTracksANN.C:148
 AliITSFindTracksANN.C:149
 AliITSFindTracksANN.C:150
 AliITSFindTracksANN.C:151
 AliITSFindTracksANN.C:152
 AliITSFindTracksANN.C:153
 AliITSFindTracksANN.C:154
 AliITSFindTracksANN.C:155
 AliITSFindTracksANN.C:156
 AliITSFindTracksANN.C:157
 AliITSFindTracksANN.C:158
 AliITSFindTracksANN.C:159
 AliITSFindTracksANN.C:160
 AliITSFindTracksANN.C:161
 AliITSFindTracksANN.C:162
 AliITSFindTracksANN.C:163
 AliITSFindTracksANN.C:164
 AliITSFindTracksANN.C:165
 AliITSFindTracksANN.C:166
 AliITSFindTracksANN.C:167
 AliITSFindTracksANN.C:168
 AliITSFindTracksANN.C:169
 AliITSFindTracksANN.C:170
 AliITSFindTracksANN.C:171
 AliITSFindTracksANN.C:172
 AliITSFindTracksANN.C:173
 AliITSFindTracksANN.C:174
 AliITSFindTracksANN.C:175
 AliITSFindTracksANN.C:176
 AliITSFindTracksANN.C:177
 AliITSFindTracksANN.C:178
 AliITSFindTracksANN.C:179
 AliITSFindTracksANN.C:180
 AliITSFindTracksANN.C:181
 AliITSFindTracksANN.C:182
 AliITSFindTracksANN.C:183
 AliITSFindTracksANN.C:184
 AliITSFindTracksANN.C:185
 AliITSFindTracksANN.C:186
 AliITSFindTracksANN.C:187
 AliITSFindTracksANN.C:188
 AliITSFindTracksANN.C:189
 AliITSFindTracksANN.C:190
 AliITSFindTracksANN.C:191
 AliITSFindTracksANN.C:192
 AliITSFindTracksANN.C:193
 AliITSFindTracksANN.C:194
 AliITSFindTracksANN.C:195
 AliITSFindTracksANN.C:196
 AliITSFindTracksANN.C:197
 AliITSFindTracksANN.C:198
 AliITSFindTracksANN.C:199
 AliITSFindTracksANN.C:200
 AliITSFindTracksANN.C:201
 AliITSFindTracksANN.C:202
 AliITSFindTracksANN.C:203
 AliITSFindTracksANN.C:204
 AliITSFindTracksANN.C:205
 AliITSFindTracksANN.C:206
 AliITSFindTracksANN.C:207
 AliITSFindTracksANN.C:208
 AliITSFindTracksANN.C:209
 AliITSFindTracksANN.C:210
 AliITSFindTracksANN.C:211
 AliITSFindTracksANN.C:212
 AliITSFindTracksANN.C:213
 AliITSFindTracksANN.C:214
 AliITSFindTracksANN.C:215
 AliITSFindTracksANN.C:216
 AliITSFindTracksANN.C:217
 AliITSFindTracksANN.C:218
 AliITSFindTracksANN.C:219
 AliITSFindTracksANN.C:220
 AliITSFindTracksANN.C:221
 AliITSFindTracksANN.C:222
 AliITSFindTracksANN.C:223
 AliITSFindTracksANN.C:224
 AliITSFindTracksANN.C:225
 AliITSFindTracksANN.C:226
 AliITSFindTracksANN.C:227
 AliITSFindTracksANN.C:228
 AliITSFindTracksANN.C:229
 AliITSFindTracksANN.C:230
 AliITSFindTracksANN.C:231
 AliITSFindTracksANN.C:232
 AliITSFindTracksANN.C:233
 AliITSFindTracksANN.C:234
 AliITSFindTracksANN.C:235
 AliITSFindTracksANN.C:236
 AliITSFindTracksANN.C:237
 AliITSFindTracksANN.C:238
 AliITSFindTracksANN.C:239
 AliITSFindTracksANN.C:240
 AliITSFindTracksANN.C:241
 AliITSFindTracksANN.C:242
 AliITSFindTracksANN.C:243
 AliITSFindTracksANN.C:244
 AliITSFindTracksANN.C:245
 AliITSFindTracksANN.C:246
 AliITSFindTracksANN.C:247
 AliITSFindTracksANN.C:248
 AliITSFindTracksANN.C:249
 AliITSFindTracksANN.C:250
 AliITSFindTracksANN.C:251
 AliITSFindTracksANN.C:252
 AliITSFindTracksANN.C:253
 AliITSFindTracksANN.C:254
 AliITSFindTracksANN.C:255
 AliITSFindTracksANN.C:256