BmnRoot
Loading...
Searching...
No Matches
BmnDchTrackFinder.h
Go to the documentation of this file.
1// Author: Pavel Batyuk (VBLHEP) <pavel.batyuk@jinr.ru> 2017-01-21
2
4// //
5// BmnDchTrackFinder //
6// //
7// Implementation of an algorithm developed by //
8// N.Voytishin and V.Paltchik (LIT) //
9// to the BmnRoot software //
10// //
11// The algorithm serves for searching for track segments //
12// in the Drift Chambers of the BM@N experiment //
13// //
15
16#ifndef BMNDCHTRACKFINDER_H
17#define BMNDCHTRACKFINDER_H 1
18
19#include "BmnDchDigit.h"
20#include "BmnDchHit.h"
21#include "BmnDchHitProducer.h"
22#include "BmnDchTrack.h"
23#include "BmnMath.h"
24
25#include "FairTask.h"
26#include "FairTrackParam.h"
27#include "FairMCPoint.h"
28
29#include <TMath.h>
30#include <TNamed.h>
31#include <TString.h>
32#include <TClonesArray.h>
33#include <TVector2.h>
34#include "TH1F.h"
35#include "TH2F.h"
36#include "TProfile.h"
37
38#include <fstream>
39
40using namespace std;
41using namespace TMath;
42
43class BmnDchTrackFinder : public FairTask
44{
45 public:
47 BmnDchTrackFinder(Int_t, Int_t, Bool_t);
48 virtual ~BmnDchTrackFinder();
49
50 virtual InitStatus Init();
51 virtual void Exec(Option_t* opt);
52 virtual void Finish();
53
54 void SetTransferFunction(TString name) {
55 fTransferFunctionName = name;
56 }
57
58private:
59 void initHists();
60
61 Int_t fPeriod;
62 Int_t fRunId;
63 Int_t N;
64 Int_t layers_with ;
65 Int_t layers_with2;
66 Bool_t expData;
67 UInt_t fEventNo; // event counter
68 Bool_t isInitialized = false;
69
70 TString InputDigitsBranchName;
71 TString tracksDch;
72 TString segmentsDch;
73
74 TString fTransferFunctionName;
76 TClonesArray* fBmnDchDigitsArray;
77 TClonesArray* fBmnHitsArray;
78
80 TClonesArray* fDchHits;
81 TClonesArray* fDchTracks;
82 TClonesArray* fDchSegments;
83
84 Int_t prev_wire;
85 Int_t prev_time;
86
87 Int_t nChambers; // dch1 or dch2
88 Int_t nWires; // corresponding to the found v(0), u(1), y(2), x(3)-pairs
89 Int_t nLayers; // a(0) or b(1)
90 Int_t nSegmentsMax; // Max. number of found segments to store
91
92 Double_t t_dc[4][16]; //[time interval][plane number]
93 Double_t pol_par_dc[3][5][16]; //[polinom number][param number][plane number]
94 Double_t scaling[16]; //[plane number]
95
96 Double_t scale; //scaling for transfer function coeffs
97
98 Double_t z_loc[8]; // z local xa->vb (cm)
99 Double_t z_glob[16]; // z global dc 1 & dc 2 (cm)
100 Double_t Z_dch1; //z coord in the middle of dch1
101 Double_t Z_dch2; //z coord in the middle of dch2
102 Double_t Z_dch_mid; //z coord between the two chambers, this z is considered the global z for the matched dch-segment
103 Double_t dZ_dch_mid;
104 Double_t dZ_dch;
105
106 Double_t x1_sh;
107 Double_t x2_sh;
108 Double_t y1_sh;
109 Double_t y2_sh;
110
111 Double_t x1_slope_sh;
112 Double_t y1_slope_sh;
113 Double_t x2_slope_sh;
114 Double_t y2_slope_sh;
115
116 Bool_t* has7DC;
117
118 Int_t nSegmentsToBeMatched;
119
120 Double_t** x_global;
121 Double_t** y_global;
122 Double_t** Chi2;
123
124 Int_t** SegMCId;
125 Int_t** SegMCIdCount;
126
127 Double_t*** v;
128 Double_t*** u;
129 Double_t*** y;
130 Double_t*** x;
131 Int_t*** vId;
132 Int_t*** uId;
133 Int_t*** yId;
134 Int_t*** xId;
135 Double_t*** v_time;
136 Double_t*** u_time;
137 Double_t*** y_time;
138 Double_t*** x_time;
139 Double_t*** v_Single;
140 Double_t*** u_Single;
141 Double_t*** y_Single;
142 Double_t*** x_Single;
143 Int_t*** v_SingleId;
144 Int_t*** u_SingleId;
145 Int_t*** y_SingleId;
146 Int_t*** x_SingleId;
147 Double_t*** sigm_v;
148 Double_t*** sigm_u;
149 Double_t*** sigm_y;
150 Double_t*** sigm_x;
151 Double_t*** Sigm_v_single;
152 Double_t*** Sigm_u_single;
153 Double_t*** Sigm_y_single;
154 Double_t*** Sigm_x_single;
155 Double_t*** params;
156 Double_t*** params_sigmas;
157 Int_t*** rhId_segment;
158 Double_t*** rh_segment;
159 Double_t*** rh_segment_time;
160 Double_t*** rh_sigm_segment;
161
162 Int_t* nSegments;
163 Int_t** pairs;
164 Int_t** segment_size;
165 Int_t*** singles;
166
167 Double_t* x_mid;
168 Double_t* y_mid;
169 Int_t* pairID;
170 Int_t* nhits;
171 Double_t* aX;
172 Double_t* aY;
173 Double_t* imp;
174 Double_t* leng;
175 Double_t* Chi2_match;
176
177 TList fhList;
178
179 //added
180 TString fhTestFlnm;
181 TH1D* Ntrack1;
182 TH1D* Ntrack2;
183
184 TH2F* hXvsAx;
185 TH1F* hXa_wireOccupancy;
186 TH1F* hXb_wireOccupancy;
187 TH1F* hYa_wireOccupancy;
188 TH1F* hYb_wireOccupancy;
189 TH1F* hUa_wireOccupancy;
190 TH1F* hUb_wireOccupancy;
191 TH1F* hVa_wireOccupancy;
192 TH1F* hVb_wireOccupancy;
193 TH1F* hXa2_wireOccupancy;
194 TH1F* hXb2_wireOccupancy;
195 TH1F* hYa2_wireOccupancy;
196 TH1F* hYb2_wireOccupancy;
197 TH1F* hUa2_wireOccupancy;
198 TH1F* hUb2_wireOccupancy;
199 TH1F* hVa2_wireOccupancy;
200 TH1F* hVb2_wireOccupancy;
201 TH1F* haX2_aX1;
202 TH1F* haY2_aY1;
203 TH1F* hX1_X2_glob_all;
204 TH1F* hY1_Y2_glob_all;
205 TH1F* haX2_aX1m;
206 TH1F* haY2_aY1m;
207 TH1F* hX1_X2_glob_m;
208 TH1F* hY1_Y2_glob_m;
209 TH1F* hx1Da_Db;
210 TH1F* hx2Da_Db;
211 TH1F* hy1Da_Db;
212 TH1F* hy2Da_Db;
213 TH1F* hu1Da_Db;
214 TH1F* hu2Da_Db;
215 TH1F* hv1Da_Db;
216 TH1F* hv2Da_Db;
217 TH1F* hx1Da_Db_best;
218 TH1F* hx2Da_Db_best;
219 TH1F* hy1Da_Db_best;
220 TH1F* hy2Da_Db_best;
221 TH1F* hu1Da_Db_best;
222 TH1F* hu2Da_Db_best;
223 TH1F* hv1Da_Db_best;
224 TH1F* hv2Da_Db_best;
225 TH1F* haX1;
226 TH1F* haY1;
227 TH1F* haX2;
228 TH1F* haY2;
229 TH1F* hx1;
230 TH1F* hy1;
231 TH1F* hx2;
232 TH1F* hy2;
233 TH1F* hX;
234 TH1F* hY;
235 TH1F* haX;
236 TH1F* haY;
237 TH2F* hlocXY1;
238 TH2F* hlocXY2;
239 TH1F* hSlot_1xa_time;
240 TH1F* hSlot_1xb_time;
241 TH1F *hXDC1_atZ0;
242 TH1F *hYDC1_atZ0;
243 TH1F *hXDC2_atZ0;
244 TH1F *hYDC2_atZ0;
245 TH1F *hSlot_1xa_time8p;
246 TH1F *hSlot_1xb_time8p;
247 TH1F *hSlot_1ya_time8p;
248 TH1F *hSlot_1yb_time8p;
249 TH1F *hSlot_1ua_time8p;
250 TH1F *hSlot_1ub_time8p;
251 TH1F *hSlot_1va_time8p;
252 TH1F *hSlot_1vb_time8p;
253 TH1F *hSlot_2xa_time8p;
254 TH1F *hSlot_2xb_time8p;
255 TH1F *hSlot_2ya_time8p;
256 TH1F *hSlot_2yb_time8p;
257 TH1F *hSlot_2ua_time8p;
258 TH1F *hSlot_2ub_time8p;
259 TH1F *hSlot_2va_time8p;
260 TH1F *hSlot_2vb_time8p;
261
262 TH1F *hResidx1a;
263 TH1F *hResidy1a;
264 TH1F *hResidu1a;
265 TH1F *hResidv1a;
266 TH1F *hResidx2a;
267 TH1F *hResidy2a;
268 TH1F *hResidu2a;
269 TH1F *hResidv2a;
270 TH1F *hResidx1b;
271 TH1F *hResidy1b;
272 TH1F *hResidu1b;
273 TH1F *hResidv1b;
274 TH1F *hResidx2b;
275 TH1F *hResidy2b;
276 TH1F *hResidu2b;
277 TH1F *hResidv2b;
278
279 TH1F *hResidx1a_0p1;
280 TH1F *hResidy1a_0p1;
281 TH1F *hResidu1a_0p1;
282 TH1F *hResidv1a_0p1;
283 TH1F *hResidx2a_0p1;
284 TH1F *hResidy2a_0p1;
285 TH1F *hResidu2a_0p1;
286 TH1F *hResidv2a_0p1;
287
288 TH1F *hResidx1a_0p1_0p4;
289 TH1F *hResidy1a_0p1_0p4;
290 TH1F *hResidu1a_0p1_0p4;
291 TH1F *hResidv1a_0p1_0p4;
292 TH1F *hResidx2a_0p1_0p4;
293 TH1F *hResidy2a_0p1_0p4;
294 TH1F *hResidu2a_0p1_0p4;
295 TH1F *hResidv2a_0p1_0p4;
296
297 TH1F *hResidx1a_0p4_0p5;
298 TH1F *hResidy1a_0p4_0p5;
299 TH1F *hResidu1a_0p4_0p5;
300 TH1F *hResidv1a_0p4_0p5;
301 TH1F *hResidx2a_0p4_0p5;
302 TH1F *hResidy2a_0p4_0p5;
303 TH1F *hResidu2a_0p4_0p5;
304 TH1F *hResidv2a_0p4_0p5;
305
306 TH1F *hResidx1b_0p1;
307 TH1F *hResidy1b_0p1;
308 TH1F *hResidu1b_0p1;
309 TH1F *hResidv1b_0p1;
310 TH1F *hResidx2b_0p1;
311 TH1F *hResidy2b_0p1;
312 TH1F *hResidu2b_0p1;
313 TH1F *hResidv2b_0p1;
314
315 TH1F *hResidx1b_0p1_0p4;
316 TH1F *hResidy1b_0p1_0p4;
317 TH1F *hResidu1b_0p1_0p4;
318 TH1F *hResidv1b_0p1_0p4;
319 TH1F *hResidx2b_0p1_0p4;
320 TH1F *hResidy2b_0p1_0p4;
321 TH1F *hResidu2b_0p1_0p4;
322 TH1F *hResidv2b_0p1_0p4;
323
324 TH1F *hResidx1b_0p4_0p5;
325 TH1F *hResidy1b_0p4_0p5;
326 TH1F *hResidu1b_0p4_0p5;
327 TH1F *hResidv1b_0p4_0p5;
328 TH1F *hResidx2b_0p4_0p5;
329 TH1F *hResidy2b_0p4_0p5;
330 TH1F *hResidu2b_0p4_0p5;
331 TH1F *hResidv2b_0p4_0p5;
332
333
334 TH1F *hPullsx1a_0p1;
335 TH1F *hPullsy1a_0p1;
336 TH1F *hPullsu1a_0p1;
337 TH1F *hPullsv1a_0p1;
338 TH1F *hPullsx2a_0p1;
339 TH1F *hPullsy2a_0p1;
340 TH1F *hPullsu2a_0p1;
341 TH1F *hPullsv2a_0p1;
342
343 TH1F *hPullsx1a_0p1_0p4;
344 TH1F *hPullsy1a_0p1_0p4;
345 TH1F *hPullsu1a_0p1_0p4;
346 TH1F *hPullsv1a_0p1_0p4;
347 TH1F *hPullsx2a_0p1_0p4;
348 TH1F *hPullsy2a_0p1_0p4;
349 TH1F *hPullsu2a_0p1_0p4;
350 TH1F *hPullsv2a_0p1_0p4;
351
352 TH1F *hPullsx1a_0p4_0p5;
353 TH1F *hPullsy1a_0p4_0p5;
354 TH1F *hPullsu1a_0p4_0p5;
355 TH1F *hPullsv1a_0p4_0p5;
356 TH1F *hPullsx2a_0p4_0p5;
357 TH1F *hPullsy2a_0p4_0p5;
358 TH1F *hPullsu2a_0p4_0p5;
359 TH1F *hPullsv2a_0p4_0p5;
360
361 TH1F *hPullsx1b_0p1;
362 TH1F *hPullsy1b_0p1;
363 TH1F *hPullsu1b_0p1;
364 TH1F *hPullsv1b_0p1;
365 TH1F *hPullsx2b_0p1;
366 TH1F *hPullsy2b_0p1;
367 TH1F *hPullsu2b_0p1;
368 TH1F *hPullsv2b_0p1;
369
370 TH1F *hPullsx1b_0p1_0p4;
371 TH1F *hPullsy1b_0p1_0p4;
372 TH1F *hPullsu1b_0p1_0p4;
373 TH1F *hPullsv1b_0p1_0p4;
374 TH1F *hPullsx2b_0p1_0p4;
375 TH1F *hPullsy2b_0p1_0p4;
376 TH1F *hPullsu2b_0p1_0p4;
377 TH1F *hPullsv2b_0p1_0p4;
378
379 TH1F *hPullsx1b_0p4_0p5;
380 TH1F *hPullsy1b_0p4_0p5;
381 TH1F *hPullsu1b_0p4_0p5;
382 TH1F *hPullsv1b_0p4_0p5;
383 TH1F *hPullsx2b_0p4_0p5;
384 TH1F *hPullsy2b_0p4_0p5;
385 TH1F *hPullsu2b_0p4_0p5;
386 TH1F *hPullsv2b_0p4_0p5;
387
388 TH1F *hAx1_loc;
389 TH1F *hAy1_loc;
390 TH1F *hAu1_loc;
391 TH1F *hAv1_loc;
392 TH1F *hAx2_loc;
393 TH1F *hAy2_loc;
394 TH1F *hAu2_loc;
395 TH1F *hAv2_loc;
396
397 TH1F *hAx12_loc;
398 TH1F *hAy12_loc;
399 TH1F *hAu12_loc;
400 TH1F *hAv12_loc;
401 TH1F *hAx122loc;
402 TH1F *hAy122loc;
403 TH1F *hAu122loc;
404 TH1F *hAv122loc;
405
406 TH1F *hXm_Xe_loc;
407 TH1F *hYm_Ye_loc;
408 TH1F *hUm_Ue_loc;
409 TH1F *hVm_Ve_loc;
410 TProfile *hDc1XaResVsDa;
411 TProfile *hDc1XbResVsDb;
412 TProfile *hDc1XaResVsDa_m;
413 TProfile *hDc1XbResVsDb_m;
414 TProfile *hDc1XaResVsDa_p;
415 TProfile *hDc1XbResVsDb_p;
416
417 TH1F *hUvsXV1;
418 TH1F *hYvsXV1;
419 TH1F *hUvsXV2;
420 TH1F *hYvsXV2;
421 TH1D *NGtracks;
422 TH1F *hChi2ndf_dc1;
423 TH1F *hChi2ndf_dc2;
424 TH1F *hSegSize_dc1;
425 TH1F *hSegSize_dc2;
426 TH1F *hChi2Matched;
427 TH1F *hP;
428 TH1F *hNomin1;
429 TH1F *hDenom1;
430 TH1F *hNomin2;
431 TH1F *hDenom2;
432
433 TH1F *hEff1;
434 TH1F *hEff2;
435 TH1F *hNLayWithFiredWiresDc1;
436 TH1F *hNLayWithFiredWiresDc2;
437 TH1F *hNoFiredWiresOnLayerDc1;
438 TH1F *hNoFiredWiresOnLayerDc2;
439 //end
440
441 void CreateDchTrack();
442 void CreateDchTrack(Int_t, Double_t*, Double_t**, Int_t*, Double_t**,Double_t**, Double_t**, Int_t*, Int_t*);
443 void SelectLongestAndBestSegments(Int_t, Int_t*, Double_t**, Double_t*);
444 void FillSegmentParametersSigmas(Int_t, Double_t**, Double_t**, Double_t*, Double_t**);
445 void FillPlaneResiduals(Int_t , Int_t* , Double_t** , Double_t**, Double_t**, Double_t*);
446 void FindSegmentTrackMCId(Int_t , Int_t**, Double_t*, Int_t*, Int_t*);
447 void CompareDaDb(Double_t, Double_t&);
448 void CompareDaDb(Double_t, Double_t&, Double_t&);
449 void PrepareArraysToProcessEvent();
450 Bool_t FitDchSegments(Int_t, Int_t*, Double_t**, Double_t**, Double_t**, Double_t*, Double_t*, Double_t*);
451 Double_t CalculateResidual(Int_t, Int_t, Double_t**, Double_t**);
452 Double_t CalculateResidualMatch(Int_t, Int_t, Int_t, Double_t***, Double_t***);
453 Int_t BuildUVSegments(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t,
454 Double_t**, Double_t**, Double_t**, Double_t**,
455 Int_t**, Int_t**, Int_t**, Int_t**,
456 Double_t**, Double_t**, Double_t**, Double_t**,
457 Double_t**, Double_t**, Double_t**, Double_t**,
458 Double_t**, Int_t**, Double_t**, Double_t**,
459 Double_t**, Double_t**, Int_t**, Int_t**, Double_t**, Double_t**);
460 Int_t BuildXYSegments(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t,
461 Double_t**, Double_t**, Double_t**, Double_t**,
462 Int_t**, Int_t**, Int_t**, Int_t**,
463 Double_t**, Double_t**, Double_t**, Double_t**,
464 Double_t**, Double_t**, Double_t**, Double_t**,
465 Double_t**, Int_t**, Double_t**, Double_t**,
466 Double_t**, Double_t**, Int_t**, Int_t**, Double_t**, Double_t**);
467 Int_t Reconstruction(Int_t, TString, Int_t, Int_t, Int_t,
468 Double_t*, Double_t*, Double_t*, Double_t*,
469 Bool_t*, Bool_t*,
470 Double_t**, Double_t**, Double_t**);
471 Int_t ReconstructionSingle(Int_t, TString, TString, Int_t, Int_t,
472 Double_t*, Double_t*, Bool_t*,
473 Double_t**, Double_t**);
474 Int_t ReconstructionMC(Int_t, TString, Int_t, Int_t, Int_t,
475 Double_t*, Double_t*, Double_t*, Double_t*, Int_t*, Int_t*,
476 Bool_t*, Bool_t*,
477 Double_t**, Int_t**, Double_t**, Double_t**);
478 Int_t ReconstructionSingleMC(Int_t, TString, TString, Int_t, Int_t,
479 Double_t*, Double_t*, Int_t*, Bool_t*,
480 Double_t**, Int_t**, Double_t**);
481 void SegmentsToBeMatched();
482
483 ClassDef(BmnDchTrackFinder, 1)
484};
485
486#endif
virtual void Exec(Option_t *opt)
void SetTransferFunction(TString name)
virtual InitStatus Init()
STL namespace.