/[PAMELA software]/DarthVader/TrackerLevel2/inc/ExtTrkingAlg.h
ViewVC logotype

Contents of /DarthVader/TrackerLevel2/inc/ExtTrkingAlg.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations) (download)
Wed Oct 15 08:45:51 2014 UTC (10 years, 1 month ago) by pam-ts
Branch: MAIN
CVS Tags: v10REDr01, v10RED, HEAD
Changes since 1.3: +0 -4 lines
File MIME type: text/plain
*** empty log message ***

1 /**
2 * \file ExtTrkingAlg.h
3 * \author Elena Vannuccini
4 */
5 #ifndef exttrkingalg_h
6 #define exttrkingalg_h
7
8 // PAMELA classes
9 #include <TrkLevel1.h>
10 #include <TrkLevel2.h>
11
12 #include <ToFLevel2.h>
13
14 #include <CaloLevel1.h>
15 #include <CaloLevel2.h>
16
17 #include <ExtTrack.h>
18
19 // ROOT classes
20 #include <TClonesArray.h>
21
22
23
24 #include <stdlib.h>
25 #include <map>
26 #include <iostream>
27 #include <iomanip>
28
29
30 #define nCP 22;
31 #define nCV 2;
32 #define nCS 9;
33
34 // relative to pamela reference system (convenzione emiliano):
35 //
36 // y ^
37 // |
38 // | 6 7 8 sisensor
39 // | 3 4 5
40 // | 0 1 2
41 // ------------> x
42 //
43 // relative to silicon sensor
44 //
45 // S ^
46 // | |
47 // 2 | | <- strip direction
48 // sensor 1 | |
49 // 0 |...|...
50 // ------------> L
51 // 0 1 2
52 // ladder
53 //
54 //
55
56 int GetCaloSensor(int view, int sis){
57 if(sis<0||sis>8)return -1;
58 if(view<0||view>1)return -1;
59 if(!view)return (int)(sis/3);
60 else return sis%3;
61 };
62 int GetCaloLadder(int view, int sis){
63 if(sis<0||sis>8)return -1;
64 if(view<0||view>1)return -1;
65 if(!view)return sis%3;
66 else return (int)(sis/3);
67 };
68 int GetCaloLadder(int strip){
69 return (int)(strip/32);
70 };
71 int GetCaloSiSensor(int view, int l, int s){
72 if(view<0||view>1)return -1;
73 if(s<0||s>2)return -1;
74 if(!view) return 3*s+l;
75 else return 3*l+s;
76 };
77
78 /**
79 *
80 * Extended CaloStrip class, to account for rototraslation parameters
81 *
82 */
83 class CaloStripRoto {
84
85 private:
86
87 float fPitch; // = 1.;
88 float shift[3]; //= {0.,0.,0.};//(L,S,Z)
89 float alpha;// = 0.;
90
91 int siSensor; // 0-8
92 int sView;//0-1
93 int sPlane;//0-21
94 CaloStrip st;
95
96 void Set(int view, int plane, float strip, int sisensor); ///< Set strip giving view [0-1], plane [0-22] and number [0-95]
97 void SetSiSensor( int si=-1 ){ siSensor = si;};
98 void SetView(int view){sView = view;};
99 void SetPlane(int plane){sPlane = plane;};
100
101 public:
102
103 /* CaloStrip st; */
104
105
106 float fXA; //< X position in cm of the strip
107 float fYA; //< Y position in cm of the strip
108 float fZA; //< Z position in cm of the strip
109
110 float fXB; //< X position in cm of the strip
111 float fYB; //< Y position in cm of the strip
112 float fZB; //< Z position in cm of the strip
113
114 //
115 CaloStripRoto(int view, int plane, int sisensor, bool usemechanicalalignement = true); ///< Default Constructor.
116
117
118
119 void ResetAligParams();
120 void SetAligParams__fPitch( float f ){ fPitch = f; };
121 void SetAligParams__shift( float *s ){ for(int i=0; i<3; i++)shift[i]=s[i]; };
122 void SetAligParams__alpha( float a ){ alpha = a; };
123
124 void SetStrip(float strip){Set(GetView(),GetPlane(),strip,GetSiSensor());}; ///< Set strip giving view [0-1], plane [0-22] and number [0-95]
125
126
127
128 /* int GetSensor(int view, int sisensor); */
129 /* int GetLadder(int view, int sisensor); */
130 /* int GetSiSensor(int view, int ladder, int sensor); */
131 // CaloStrip GetCaloStrip(){return st;};
132 bool SensorContains(float x, float y);
133
134 int GetView(){return sView;};
135 int GetPlane(){return sPlane;};
136 int GetStrip(){return st.GetStrip();};
137 int GetSensor();
138 int GetLadder();
139 int GetSiSensor(){ return siSensor; };
140
141 float GetSpatialResolution(float def, float degx=0., float degy=0., float beta=1.);
142
143 float GetDistanceTo(float xP, float yP, float& xM, float &yM);
144 float GetDistanceTo(float xP, float yP){ float xM,yM; return GetDistanceTo(xP,yP,xM,yM); };
145
146 };
147
148
149 /**
150 *
151 * Extended hit class
152 *
153 */
154
155
156 class ExtHit{
157
158 private:
159
160
161 public:
162
163
164 Float_t coordCm; //centimeters
165 Float_t coordPU; //pitch units
166 Float_t resCm;
167 Float_t signal;
168 Int_t start;
169 Int_t mult;
170 Int_t view;
171
172
173 void Reset(){
174 coordCm = 1000.;
175 coordPU = 1000.;
176 resCm = 1000.;
177 signal = 0.;
178 start = -1;
179 mult = 0;
180 view = -1;
181 };
182 void Set(int s, int v){start=s; view=v;}
183 /* void Set(int s, int v){coordPU=s; view=v;} */
184
185 ExtHit(){Reset();};
186 ExtHit(int s, int v){Reset(); Set(s,v); };
187 ~ExtHit(){Reset();};
188
189 ExtHit( const ExtHit& h ){
190 coordCm = h.coordCm;
191 coordPU = h.coordPU;
192 resCm = h.resCm;
193 signal = h.signal;
194 start = h.start;
195 mult = h.mult;
196 view = h.view;
197 }
198
199 void Add(float cc, float pp, float ss){
200 if(ss<0)cout << "void ExtHit(cc="<<cc<<",ss="<<ss<<") -- not valid argument";
201 if(ss<0)return;
202 mult++;
203 float sumcc = coordCm * signal;
204 float sumpp = coordPU * signal;
205 signal+=ss;
206 sumcc += ss * cc;
207 sumpp += ss * pp;
208 coordCm = sumcc/signal;
209 coordPU = sumpp/signal;
210 };
211
212 void Dump(){
213 cout << " View "<<view<<endl;
214 cout << " Coordinate (cm) "<<coordCm<<endl;
215 cout << " Coordinate (p.u.) "<<coordPU<<endl;
216 cout << " Resolution (cm) "<<resCm<<endl;
217 cout << " Multiplicity "<<mult<<endl;
218 cout << " Signal (MIP) "<<signal<<endl;
219 };
220
221 // ClassDef(ExtHit,1);
222
223 };
224
225 /**
226 *
227 * Algorythm class
228 *
229 */
230
231
232
233 class ExtTrkingAlg : public TObject {
234
235 private:
236
237 Int_t _whichAlg; ///< algorythm id
238
239 TClonesArray *_trkArray; ///< array of tracks
240
241 TrkLevel1* _trk_l1;
242 TrkLevel2* _trk_l2;
243
244 CaloLevel1* _cal_l1;
245 CaloLevel2* _cal_l2;
246 vector<ExtHit> _cal_cl;///< calorimeter hits
247
248 ToFLevel2* _tof_l2;
249 vector<ExtHit> _trk_cl;///< tracker hits
250
251 ExtTrack* _extTrack;
252 float* _zMech;
253
254 Int_t _sel_nClstrMAX; ///< selection parameter: maximum number of cluster
255 Int_t _sel_nPlaneXMIN; ///< selection parameter: minimum number of hit x-views
256 Int_t _sel_nPlaneYMIN; ///< selection parameter: minimum number of hit y-views
257
258 Int_t _alg_nClFixX; ///< algorythm parameter: n.hits required on X view
259 Int_t _alg_nClFixY; ///< algorythm parameter:n.hits required on Y view
260 Int_t _alg_nTrackMAX; ///< algorythm parameter: maximum num. of track candidates
261 Int_t _alg_nViewCal; ///< algorythm parameter: n. calorimeter planes included
262
263 Int_t NEXTVIEWS;
264 Int_t NEXTPLANES;
265
266 float _caloCoord[2][22][96];
267 float _caloZ[44];
268 Trajectory* _caloTj;
269 Trajectory* _tgf;
270
271
272 vector<CaloStripRoto> _caloStripRoto; // rotatore di calorimetri! sapevatelo!
273
274 Bool_t _debug;
275
276 public:
277
278 void Clear(Option_t* option = ""); ///< Clear the event
279 void Delete(); ///< Delete all (deallocate arrays)
280
281 ExtTrkingAlg(Int_t id=0);
282 // ExtTrkingAlg(){ ExtTrkingAlg(0); };
283 ~ExtTrkingAlg(){ Delete(); };
284
285 // ExtTrkingAlg(Int_t id);
286
287 void SetTrkLevel1( TrkLevel1* trkl1 = NULL ) { _trk_l1 = trkl1;};
288 void SetTrkLevel2( TrkLevel2* trkl2 = NULL ) { _trk_l2 = trkl2; };
289 void SetToFLevel2( ToFLevel2* tofl2 = NULL ) { _tof_l2 = tofl2; };
290 void SetCaloLevel1( CaloLevel1* call1 = NULL ) { _cal_l1 = call1; };
291 void SetCaloLevel2( CaloLevel2* call2 = NULL ) { _cal_l2 = call2; };
292
293
294 void FillClusterMap(multimap<int,int> &map,TrkLevel1* l1,Int_t vOffset = 0);
295 void FillClusterMap(multimap<int,int> &map,CaloLevel1* l1,Int_t vOffset = 12);
296
297 Bool_t CheckEvent(); ///< pre-selection
298 void ProcessEvent0(Bool_t force = false); ///< apply tracking algorythm 0
299 void ProcessEvent1(Bool_t force = false); ///< apply tracking algorythm 1
300 void ProcessEvent2(Bool_t force = false); ///< apply tracking algorythm 1
301 void ProcessEvent(Bool_t force = false);
302 bool EvaluateClusterPosition_Tracker( int, int, int, int, float*, float*, float*);
303 bool EvaluateClusterPosition_Calorimeter( int icl, int& sensor, float *xmABar, float *ymABar, float *zmAB, float def=0.);
304
305
306 TClonesArray *GetTrackArray(Bool_t reset = false);
307
308 void SetSelectionParams(double* par);
309 void SetAlgorythmParams(double* par);
310
311
312 void SetDebug(Bool_t dbg = false){ _debug = dbg; };
313
314 void Dump();
315
316 TClonesArray** GetPointerToTrackArray(){ return &_trkArray; };
317
318 vector<ExtHit> GetCaloClusters(){ return _cal_cl; };
319 vector<ExtHit> GetTrkClusters(){ return _trk_cl; };
320
321 CaloStripRoto GetCaloStripRoto(int index){ return _caloStripRoto[index]; };
322
323
324 };
325
326
327 #endif

  ViewVC Help
Powered by ViewVC 1.1.23