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