ROOT logo
// ARGUMENTS:
// 1. number of azymuthal sectors (it's better not to go under 8 or over 40)
// 2. the ROOT file to read (WITHOUT exstension)
// 3. event number
// 4. if specified a string, a fstream named like the argument is opened and
//    the elapsed CPU time is stored (not useful)

// the macro will save a file named, for example "galice_<nsecs>.root"
// containing may AliITSneuralTrack objects

void AliITSNeuralTracking
(Int_t nsecs = 12, const char* rfile = "galice", Int_t event = 0, const char* save = 0)
{
	TStopwatch timer;
	Double_t CONVERT = TMath::Pi() / 180.0;
	const char* wfile = Form("%s_%d.root", rfile, nsecs);
	cout << "Reading file " << rfile << ".root and saving in " << wfile << endl;
	
// ==================================
// ==== 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: becareful 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 = 5;
	p = new Double_t[5];
	cut = new Double_t[5];	
	p[0] = 2.0;
	p[1] = 1.0;
	p[2] = 0.7;
	p[3] = 0.5;
	p[4] = 0.3;
	
	for (Int_t i = 0; i < ncuts; i++) cut[i] = 0.003 * 0.2 / p[i];
	

// ==========================
// ==== OTHER PARAMETERS ====
// ==========================
	    
	Bool_t   flag   = kFALSE; // for now, don't change this line, please...
	
	Double_t diff   = 0.02;   // helicoidal cut 
	Double_t dtheta = 1.0;    // delta-theta cut
	Double_t temp   = 1.0;    // temperature parameter
	Double_t var    = 0.0001; // stabilization threshold
	
	Double_t exp    = 7.0;    // straight-line excitator
	Double_t gtoc   = 3.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
	
	
// =========================
// ==== NEURAL TRACKING ====
// =========================
	
	AliITSneuralTracker *ANN = new AliITSneuralTracker(nsecs, ncuts, cut, CONVERT*dtheta);
		
	TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(Form("%s.root", rfile));
	if (!file) file = new TFile(Form("%s.root", rfile),"UPDATE");

	//Double_t Xv = -0.001097;
	//Double_t Yv = -0.00347647;
	//Double_t Zv =  0.000631345;
	//ANN->SetVertex(Xv, Yv, Zv);
	// You should find the vertex with VertexMacro.C
	// and then put by hand the found values with
	// the above method.
	
	Int_t points = ANN->ReadFile(Form("%s.root", rfile), event);
		
	ANN->SetTemperature(temp);
	ANN->SetVariationLimit(var);
	ANN->SetGainToCostRatio(gtoc);
	ANN->SetExponent(exp);
	ANN->SetInitLimits(min, max);
	ANN->SetDiff(diff);
	
	cout << points << " points found " << endl << endl;
	
	TStopwatch timer;
	timer.Start();
	
	ANN->Go(wfile, flag);
	
	timer.Stop();
	cout << endl;
	timer.Print();
	
	if (save) {
		fstream ksave(save, ios::app);
		ksave << nsecs << " " << timer->CpuTime() << endl;
		ksave.close();
	}
	
//	delete gAlice;
//	gAlice = 0;
}
 AliITSNeuralTracking.C:1
 AliITSNeuralTracking.C:2
 AliITSNeuralTracking.C:3
 AliITSNeuralTracking.C:4
 AliITSNeuralTracking.C:5
 AliITSNeuralTracking.C:6
 AliITSNeuralTracking.C:7
 AliITSNeuralTracking.C:8
 AliITSNeuralTracking.C:9
 AliITSNeuralTracking.C:10
 AliITSNeuralTracking.C:11
 AliITSNeuralTracking.C:12
 AliITSNeuralTracking.C:13
 AliITSNeuralTracking.C:14
 AliITSNeuralTracking.C:15
 AliITSNeuralTracking.C:16
 AliITSNeuralTracking.C:17
 AliITSNeuralTracking.C:18
 AliITSNeuralTracking.C:19
 AliITSNeuralTracking.C:20
 AliITSNeuralTracking.C:21
 AliITSNeuralTracking.C:22
 AliITSNeuralTracking.C:23
 AliITSNeuralTracking.C:24
 AliITSNeuralTracking.C:25
 AliITSNeuralTracking.C:26
 AliITSNeuralTracking.C:27
 AliITSNeuralTracking.C:28
 AliITSNeuralTracking.C:29
 AliITSNeuralTracking.C:30
 AliITSNeuralTracking.C:31
 AliITSNeuralTracking.C:32
 AliITSNeuralTracking.C:33
 AliITSNeuralTracking.C:34
 AliITSNeuralTracking.C:35
 AliITSNeuralTracking.C:36
 AliITSNeuralTracking.C:37
 AliITSNeuralTracking.C:38
 AliITSNeuralTracking.C:39
 AliITSNeuralTracking.C:40
 AliITSNeuralTracking.C:41
 AliITSNeuralTracking.C:42
 AliITSNeuralTracking.C:43
 AliITSNeuralTracking.C:44
 AliITSNeuralTracking.C:45
 AliITSNeuralTracking.C:46
 AliITSNeuralTracking.C:47
 AliITSNeuralTracking.C:48
 AliITSNeuralTracking.C:49
 AliITSNeuralTracking.C:50
 AliITSNeuralTracking.C:51
 AliITSNeuralTracking.C:52
 AliITSNeuralTracking.C:53
 AliITSNeuralTracking.C:54
 AliITSNeuralTracking.C:55
 AliITSNeuralTracking.C:56
 AliITSNeuralTracking.C:57
 AliITSNeuralTracking.C:58
 AliITSNeuralTracking.C:59
 AliITSNeuralTracking.C:60
 AliITSNeuralTracking.C:61
 AliITSNeuralTracking.C:62
 AliITSNeuralTracking.C:63
 AliITSNeuralTracking.C:64
 AliITSNeuralTracking.C:65
 AliITSNeuralTracking.C:66
 AliITSNeuralTracking.C:67
 AliITSNeuralTracking.C:68
 AliITSNeuralTracking.C:69
 AliITSNeuralTracking.C:70
 AliITSNeuralTracking.C:71
 AliITSNeuralTracking.C:72
 AliITSNeuralTracking.C:73
 AliITSNeuralTracking.C:74
 AliITSNeuralTracking.C:75
 AliITSNeuralTracking.C:76
 AliITSNeuralTracking.C:77
 AliITSNeuralTracking.C:78
 AliITSNeuralTracking.C:79
 AliITSNeuralTracking.C:80
 AliITSNeuralTracking.C:81
 AliITSNeuralTracking.C:82
 AliITSNeuralTracking.C:83
 AliITSNeuralTracking.C:84
 AliITSNeuralTracking.C:85
 AliITSNeuralTracking.C:86
 AliITSNeuralTracking.C:87
 AliITSNeuralTracking.C:88
 AliITSNeuralTracking.C:89
 AliITSNeuralTracking.C:90
 AliITSNeuralTracking.C:91
 AliITSNeuralTracking.C:92
 AliITSNeuralTracking.C:93
 AliITSNeuralTracking.C:94
 AliITSNeuralTracking.C:95
 AliITSNeuralTracking.C:96
 AliITSNeuralTracking.C:97
 AliITSNeuralTracking.C:98
 AliITSNeuralTracking.C:99
 AliITSNeuralTracking.C:100
 AliITSNeuralTracking.C:101
 AliITSNeuralTracking.C:102
 AliITSNeuralTracking.C:103
 AliITSNeuralTracking.C:104
 AliITSNeuralTracking.C:105
 AliITSNeuralTracking.C:106
 AliITSNeuralTracking.C:107
 AliITSNeuralTracking.C:108
 AliITSNeuralTracking.C:109
 AliITSNeuralTracking.C:110
 AliITSNeuralTracking.C:111
 AliITSNeuralTracking.C:112