New classes for the neural tracking algorithm (from A. Pulvirenti)
[u/mrichter/AliRoot.git] / ITS / AliITSneuralTracker.h
CommitLineData
1f26c323 1#ifndef AliITSneuralTracker_h
2#define AliITSneuralTracker_h
3
4class TObjArray;
5class AliITSneuron;
6class AliITSneuralTrack;
7class AliITSglobalRecPoint;
8
9///////////////////////////////////////////////////////////////////////
10//
11// AliITSneuralTracker:
12//
13// neural network MFT algorithm
14// for track finding in ITS stand alone
15// according to the Denby-Peterson model with adaptments to the
16// ALICE multiplicity
17//
18///////////////////////////////////////////////////////////////////////
19
20class AliITSneuralTracker : public TObject {
21
22public:
23
24 // constructors & destructor
25 AliITSneuralTracker();
26 AliITSneuralTracker(Int_t nsecs, Int_t nc, Double_t *c, Double_t theta);
27 virtual ~AliITSneuralTracker();
28
29 // file reading and points array population
30 Int_t ReadFile(const Text_t *fname, Int_t evnum);
31
32 // setters for working parameters (NOT cuts)
33 void SetDiff(Double_t a) {fDiff=a;} // helix adaptment parameter
34 void SetExponent(Double_t a) {fExp = a;} // exponent which selects the high excitory values
35 void SetGainToCostRatio(Double_t a) {fRatio = a;} // ratio between the gain and cost contributions
36 void SetTemperature(Double_t a) {fTemp = a;} // temperature parameter in activation function
37 void SetVariationLimit(Double_t a) {fVar = a;} // stability threshold
38 void SetInitLimits(Double_t a, Double_t b) // intervals for initial random activations
39 {fMin = (a<=b) ? a : b; fMax = (a<=b)? b : a;}
40 void SetVertex(Double_t x, Double_t y, Double_t z) // estimated vertex position
41 { fVPos[0] = x; fVPos[1] = y; fVPos[2] = z;}
42
43 // neuron managin methods
44 Bool_t SetEdge(AliITSneuron *n, AliITSglobalRecPoint *p, const char what); // sets the neuron's edges
45 Bool_t CalcParams(AliITSneuron *n); // calculation of helix parameters for the neuron
46
47 // neural tracking (the argument is the ROOT file to store results)
48 void Go(const char* filesave, Bool_t flag = kFALSE);
49
50private:
51
52 // These methods are private to prevent the users to use them in incorrect sequences
53
54 // neuron management methods (not to be used publically)
55 Bool_t ResetNeuron(AliITSneuron *n); // resets all neuron's fields like in the constructor
56 Int_t CountExits (AliITSneuron *n); // counter for # of neurons going into n's tail
57 Int_t CountEnters(AliITSneuron *n); // counter for # of neurons startins from n's head
58 Double_t Angle(AliITSneuron *n, AliITSneuron *m); // angle between two neural segments
59 Double_t Weight(AliITSneuron *n, AliITSneuron *m); // synaptic weight between two neural segments
60
61 // neural network work-flow
62 Int_t Initialize(Int_t snum, Int_t cnum, Bool_t flag = kFALSE);
63 // resets (or creates) neurons array for a new neural tracking
64 Bool_t Update(); // updates the neurons and checks if stabilization has occurred
65 Int_t Save(); // saves the found tracks after stabilization
66 void DoSector(Int_t sect, Bool_t flag); // complete work on a single sector
67
68 Int_t fCurvNum; // # of curvature cut steps
69 Double_t *fCurvCut; //! value of all curvature cuts
70
71 Int_t fSectorNum; // no. of azymuthal sectors
72 Double_t fSectorWidth; // width of an azymuthal sector
73
74 Double_t fVPos[3]; // estimated vertex coords
75
76 Double_t fMin; // min initial random activations
77 Double_t fMax; // max initial random activations
78 Double_t fThetaCut; // polar angle cut
79 Int_t fThetaNum; // size of theta sectionement
80 Double_t fTemp; // logistic function parameter
81 Double_t fVar; // stability threshold (for mean rel. activations)
82 Double_t fRatio; // ratio between inhibitory and excitory contributions
83 Double_t fExp; // alignment weight
84 Double_t fDiff; // max allowed difference between TanL exstimations from the two neuron edges
85
86 TObjArray ***fPoints[6]; //! Collection of recpoints (sectioned in azym. secs)
87 TObjArray *fNeurons[6]; //! Collection of neurons
88 TObjArray *fTracks; //! Collection of tracks
89
90 ClassDef(AliITSneuralTracker, 1)
91};
92
93
94////////////////////////////////////////////////////////////////////////////////
95
96
97class AliITSneuron : public TObject {
98
99 friend class AliITSneuralTracker;
100
101public:
102
103 AliITSneuron();
104 virtual ~AliITSneuron();
105
106 Bool_t ContainsID(Int_t ID)
107 { return (fInner->HasID(ID) && fOuter->HasID(ID)); }
108
109private:
110
111 Double_t fActivation; // Activation value
112
113 Double_t fCurv; // curvature [= 1 / R]
114 Double_t fCX; // curvature centre (X) in changed RF
115 Double_t fCY; // curvature centre (X) in changed RF
116 Double_t fTanL; // tan(dip angle) = C / freq
117 Double_t fPhase; // 'phase' parameter
118 Double_t fDiff; // difference between tan(lambda) estimated by the two different points
119 Double_t fLength; // segment length
120
121 AliITSneuron *fNext; // best outgoing unit
122 AliITSneuron *fPrev; // best incoming unit
123
124 AliITSglobalRecPoint *fInner; // inner point
125 AliITSglobalRecPoint *fOuter; // outer point
126};
127
128
129#endif