HARPO  5.1.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HarpoKalmanFitting.cxx
Go to the documentation of this file.
1 //
2 // File HarpoKalmanFitting.cxx
3 //
12 #include "HarpoKalmanFitting.h"
13 #include "HarpoConfig.h"
14 #include "HarpoDetSet.h"
15 #include "HarpoDebug.h"
16 #include "HarpoDccEvent.h"
17 #include "Pmm2Event.h"
18 #include "HarpoEvent.h"
19 #include "HarpoRecoEvent.h"
20 
21 #include "TEllipse.h"
22 #include "TFile.h"
23 #include "TStyle.h"
24 #include "TCanvas.h"
25 #include "TLatex.h"
26 #include "TGraph.h"
27 #include "TF1.h"
28 #include "TArrow.h"
29 #include "TLinearFitter.h"
30 #include "TMath.h"
31 #include "TSystem.h"
32 
33 #include <cstdlib>
34 #include <cstring>
35 #include <cassert>
36 #include <fstream>
37 #include <iostream>
38 
39 
40 ClassImp(HarpoKalmanFitting);
41 
43  {
44  unsigned int nd; // number of detectors
46 
47  assert(hdr != NULL);
48  hdr->print();
49 
50  for (nd = 0; nd < gkNDetectors; nd++) {
51  // if (fEvt->isdataExist(nd)) {
52  HarpoDccMap *plane = fEvt->GetDccMap(nd);
53  if (plane != NULL )plane->print();
54  }
55  }
56 
58 {
59  // Bool_t drawEvent = kFALSE;
60  nEvents++;
61  if(gHarpoDebug>0)
62  Info("process","Event %ld",nEvents);
63 
64  for(Int_t i = 0; i< NTRACK; i++)
65  fNclTrack[i] = 0;
66  if(!fEvt->GetRecoEvent()) // Reconstructed data (clusters, tracks, matched tracks)
67  return;
68  HarpoRecoEvent* reco = fEvt->GetRecoEvent();
69  reco->SetTrackType(KALMAN);
70  // Clusters in the event (both X and Y directions)
71  TClonesArray* clArray = reco->GetClustersArray();
72  // Int_t nCl = clArray->GetEntries();
73  TClonesArray* trArray = reco->GetKalmanTracksArray();
74  Int_t nTr = trArray->GetEntries();
75  Info("process","*********** %d **********",nTr);
76 
77  for(Int_t plane = 0; plane<2; plane++){
78  InitPlane(clArray, plane);
79  for(Int_t itr = 0; itr<nTr; itr++){
80  HarpoRecoKalmanTracks* track = (HarpoRecoKalmanTracks*)trArray->At(itr);
81  if(track->GetPlane() != plane) continue;
82  FitTrack(clArray,plane,track);
83  }
84  }
85 }
86 
87 Int_t HarpoKalmanFitting::InitPlane(TClonesArray* clArray, Int_t plane)
88 {
89 
90  HarpoKalman::InitPlane(clArray,plane);
91  for(Int_t itr = 0; itr<NTRACK; itr++){
92  fId[itr][0] = -1;
93  fId[itr][1] = -1;
94  }
95 
96  return 1;
97 }
98 
99 
100 
101 TMatrixD HarpoKalmanFitting::GetTrackEnd(TClonesArray* clArray, Int_t plane, Int_t iTr)
102 {
103 
104  Int_t iMin = NCHAN+1, iMax = -1, jMin = NADC+1, jMax = -1;
105  Double_t xMax = 0, zMax = 0;
106  Int_t nCl = clArray->GetEntries();
107  for(Int_t icl = 0; icl<nCl; icl++){
108  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
109  Int_t index = cluster->GetIndex();
110  Int_t mean = cluster->GetMean();
111  if(cluster->GetIdClusterTrack() != iTr) continue;
112  if(cluster->GetPlane() != plane) continue;
113  if(cluster->GetType() == TCLUSTER){
114  if(index>jMax){ jMax = index; xMax = mean;}
115  if(index<jMin) jMin = index;
116  }
117  if(cluster->GetType() == CCLUSTER){
118  if(index>iMax){ iMax = index; zMax = mean;}
119  if(index<iMin) iMin = index;
120  }
121  }
122  TMatrixD X(4,1);
123  if(iMax-iMin > jMax-jMin){ // vertical track
124  X[0][0] = zMax;
125  X[1][0] = iMax;
126  X[2][0] = 0;
127  X[3][0] = -1;
128  }else{ // horizontal track
129  X[0][0] = jMax;
130  X[1][0] = xMax;
131  X[2][0] = -1;
132  X[3][0] = 0;
133  }
134 
135  return X;
136 }
137 
138 
139 
140 
141 Int_t HarpoKalmanFitting::FitTrack(TClonesArray* clArray, Int_t plane, HarpoRecoKalmanTracks* track)
142 {
143 
144  Int_t iTr = track->GetNtrack();
145 
146  // TMatrixD X(4,1);
147  // X[0][0] = track->GetZend();
148  // X[1][0] = track->GetXend();
149  // X[2][0] = track->GetZstart() - track->GetZend();
150  // X[3][0] = track->GetZstart() - track->GetZend();
151 
152  TMatrixD X = GetTrackEnd(clArray,plane,iTr);
153 
154  // if(gHarpoDebug>1)
155  Info("FitTrack","New seed: (%g, %g, %g, %g)",X[0][0],X[1][0],X[2][0],X[3][0]);
156 
157  TMatrixD Corig(4,4);
158  for(int a = 0;a<4;a++){
159  for(int b =0;b<4;b++){
160  if(a==b){
161  if(a<2)
162  Corig[a][b]=fResKalman*fResKalman; //initialisation de C
163  else
164  Corig[a][b]=(2*fResKalman)*(2*fResKalman)+fScatKalman*fScatKalman;
165  }
166  else
167  Corig[a][b]=0;
168  }
169  }
170  TArrayI* arr = new TArrayI(2000);
171  Double_t angleorig = TMath::ATan2(X[2][0],X[3][0]);
172  //##################################################################################
173  arr = FindNextClosest(X,Corig,angleorig,iTr,clArray,arr,1,plane,iTr+2,3002,2,-1);//#
174  //##################################################################################
175 
176  Int_t n = 0;
177  for(Int_t i = 0; i<2000; i++){
178  if(arr->At(i)-1<0) break;
179  n++;
180  }
181  Info("FitTrack","NclOrig = %d, NclFit = %d",track->GetNclusterTrack(),n);
182  if(n<fNclMin){
183  delete arr;
184  return -n;
185  }
186 
187 
188  Int_t offset = 10;
189  HarpoRecoClusters* clusterSt1 = (HarpoRecoClusters*)clArray->At(arr->At(offset)-1);
190  HarpoRecoClusters* clusterSt2 = (HarpoRecoClusters*)clArray->At(arr->At(offset + 1)-1);
191  Double_t xSt = clusterSt1->GetXfit();
192  Double_t zSt = clusterSt1->GetZfit();
193  Double_t pxSt = clusterSt2->GetXfit() - clusterSt1->GetXfit();
194  Double_t pzSt = clusterSt2->GetZfit() - clusterSt1->GetZfit();
195  HarpoRecoClusters* clusterEnd1 = (HarpoRecoClusters*)clArray->At(arr->At(n-offset)-1);
196  HarpoRecoClusters* clusterEnd2 = (HarpoRecoClusters*)clArray->At(arr->At(n-offset - 1)-1);
197  Double_t xEnd = clusterEnd1->GetXfit();
198  Double_t zEnd = clusterEnd1->GetZfit();
199  Double_t pxEnd = clusterEnd2->GetXfit() - clusterEnd1->GetXfit();
200  Double_t pzEnd = clusterEnd2->GetZfit() - clusterEnd1->GetZfit();
201 
202 
203  track->SetPxStart(pxSt);
204  track->SetPzStart(pzSt);
205  track->SetPxEnd(pxEnd);
206  track->SetPzEnd(pzEnd);
207 
208  track->SetXstart(xSt);
209  track->SetZstart(zSt);
210  track->SetXend(xEnd);
211  track->SetZend(zEnd);
212 
213 
214  if(fCanvas[plane]){ // Display for Reco monitor
215  // TEllipse* pStart = new TEllipse();
216  // pStart->SetFillColor(iTr+2);
217  // pStart->DrawEllipse(zSt,xSt,5,0,0,360,0);
218  // fHist[plane]->GetXaxis()->SetRangeUser(zSt-20,zSt+20);
219  // fHist[plane]->GetYaxis()->SetRangeUser(xSt-20,xSt+20);
220  // fCanvas[plane]->Update();
221  // gSystem->Sleep(200);
222  // TEllipse* pEnd = new TEllipse();
223  // pEnd->SetFillColor(iTr+2);
224  // pEnd->SetFillStyle(3002);
225  // pEnd->DrawEllipse(zEnd,xEnd,5,0,0,360,0);
226  // fHist[plane]->GetXaxis()->SetRangeUser(zEnd-20,zEnd+20);
227  // fHist[plane]->GetYaxis()->SetRangeUser(xEnd-20,xEnd+20);
228  // fCanvas[plane]->Update();
229  // gSystem->Sleep(200);
230 
231 
232 
233  TArrow* arrowSt = new TArrow();
234  arrowSt->SetLineColor(iTr+2);
235  arrowSt->SetFillColor(iTr+2);
236  fCanvas[plane]->cd();
237  arrowSt->DrawArrow(zSt,xSt,zSt+10*pzSt,xSt+10*pxSt);
238  fHist[plane]->GetXaxis()->SetRangeUser(zSt-20,zSt+20);
239  fHist[plane]->GetYaxis()->SetRangeUser(xSt-20,xSt+20);
240  fCanvas[plane]->Update();
241  gSystem->Sleep(2000);
242  TArrow* arrowEnd = new TArrow();
243  arrowEnd->SetLineColor(iTr+2);
244  arrowEnd->SetFillColor(iTr+2);
245  fCanvas[plane]->cd();
246  arrowEnd->DrawArrow(zEnd,xEnd,zEnd+10*pzEnd,xEnd+10*pxEnd);
247  fHist[plane]->GetXaxis()->SetRangeUser(zEnd-20,zEnd+20);
248  fHist[plane]->GetYaxis()->SetRangeUser(xEnd-20,xEnd+20);
249  fCanvas[plane]->Update();
250  gSystem->Sleep(2000);
251  }
252 
253  delete arr;
254 
255  return n;
256 }
257 
258 
259 
260 
261 Double_t HarpoKalmanFitting::GetQtrack(Int_t itr, Int_t plane)
262 {
263  HarpoDccMap* map = fEvt->GetDccMap(plane);
264 
265  HarpoRecoEvent* reco = fEvt->GetRecoEvent();
266  TClonesArray* clArray = reco->GetClustersArray();
267  Int_t nCl = clArray->GetEntries();
268  Double_t qTr = 0;
269  for(Int_t icl = 0; icl<nCl; icl++){
270  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
271  if(cluster->GetPlane() != plane) continue;
272  if(!cluster->CheckIdClusterTrack(itr)) continue;
273  Int_t type = cluster->GetType();
274  Int_t ind = cluster->GetIndex();
275  Int_t ind2 = cluster->GetIfirst();
276  Int_t width = cluster->GetWidth();
277  for(Int_t k = ind2; k< ind2 + width; k++){
278  Int_t i = -1, j = -1;
279  if(type == CCLUSTER){ i = ind; j = k;}
280  if(type == TCLUSTER){ i = k; j = ind;}
281  if(i<0 || i>=NCHAN) continue;
282  if(j<0 || j>=NADC) continue;
283  Double_t q = map->GetData(i,j);
284  // Double_t q = fMapTmp[i][j];
285  if(q<-500) continue;
286  ULong64_t test = 1 << itr;
287  //Info("GetQtrack","TEST = %llX | %llX => %llX, %llX",test,fMapTmp[i][j],fMapTmp[i][j]&test,fMapTmp[i][j]|test);
288  if(fMapTmp[i][j] & test) continue;
289  qTr += q;
290  // fMapTmp[i][j] = -1000;
291  fMapTmp[i][j] |= test;
292  }
293  }
294  if(gHarpoDebug>0)
295  Info("GetQtrack","Plane %d, Track %d: Q = %g/%g",plane,itr,qTr,fQtot);
296  return qTr;
297 }
298 
299 Double_t HarpoKalmanFitting::GetQtracks(Int_t plane)
300 {
301  HarpoDccMap* map = fEvt->GetDccMap(plane);
302 
303  HarpoRecoEvent* reco = fEvt->GetRecoEvent();
304  TClonesArray* clArray = reco->GetClustersArray();
305  Int_t nCl = clArray->GetEntries();
306  // Double_t qTr = 0;
307 
308  ULong_t used4Q[NCHAN][NADC];
309  for(Int_t i = 0; i<NCHAN; i++){
310  for(Int_t j = 0; j<NADC; j++){
311  // fMapTmp[i][j] = map->GetData(i,j);
312  used4Q[i][j] = 0;
313  }
314  }
315 
316  for(Int_t icl = 0; icl<nCl; icl++){
317  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
318  if(cluster->GetPlane() != plane) continue;
319  Int_t type = cluster->GetType();
320  Int_t ind = cluster->GetIndex();
321  Int_t ind2 = cluster->GetIfirst();
322  Int_t width = cluster->GetWidth();
323  Int_t nTr = cluster->GetNtr();
324  for(Int_t iTr = 0; iTr<nTr;iTr++){
325  Int_t itr = cluster->GetIdClusterTrack(iTr);
326  for(Int_t k = ind2; k< ind2 + width; k++){
327  Int_t i = -1, j = -1;
328  if(type == CCLUSTER){ i = ind; j = k;}
329  if(type == TCLUSTER){ i = k; j = ind;}
330  if(i<0 || i>=NCHAN) continue;
331  if(j<0 || j>=NADC) continue;
332  Double_t q = map->GetData(i,j);
333  // Double_t q = fMapTmp[i][j];
334  if(q<-500) continue;
335  ULong64_t test = 1 << itr;
336  //Info("GetQtrack","TEST = %llX | %llX => %llX, %llX",test,fMapTmp[i][j],fMapTmp[i][j]&test,fMapTmp[i][j]|test);
337  if(used4Q[i][j] & test) continue;
338  // qTr += q;
339  // fMapTmp[i][j] = -1000;
340  used4Q[i][j] |= test;
341  }
342  }
343  }
344 
345  // Double_t qTr[fNtr[plane]][fNtr[plane]];
346  for(Int_t i = 0; i<fNtr[plane]; i++){
347  for(Int_t j = 0; j<fNtr[plane]; j++){
348  fQcommon[i][j] = 0;
349  }
350  }
351  for(Int_t i = 0; i<NCHAN; i++){
352  for(Int_t j = 0; j<NADC; j++){
353  Double_t q = map->GetData(i,j);
354  if(q<-500) continue;
355 
356  for(Int_t itr1 = 0; itr1<fNtr[plane]; itr1++){
357  ULong64_t test1 = 1 << itr1;
358  if(!(used4Q[i][j] & test1)) continue;
359  for(Int_t itr2 = itr1; itr2<fNtr[plane]; itr2++){
360  ULong64_t test2 = 1 << itr2;
361  if(!(used4Q[i][j] & test2)) continue;
362  fQcommon[itr1][itr2] += q;
363  }
364  }
365  }
366  }
367 
368  if(gHarpoDebug>1){
369  for(Int_t i = 0; i<fNtr[plane]; i++){
370  for(Int_t j = 0; j<fNtr[plane]; j++){
371  std::cout << fQcommon[i][j] << " ";
372  }
373  std::cout << std::endl;
374  }
375  }
376 
377  // Info("GetQtrack","Plane %d, Track %d: Q = %g/%g",plane,itr,qTr,fQtot);
378  return 0;
379 }
380 
381 
383  {
385 
386  // Initialise histograms here
387 
388  fCanvas[0] = NULL;
389  fCanvas[1] = NULL;
390  fHist[0] = NULL;
391  fHist[1] = NULL;
392 
393  fNclMin = 10;
394  fNclMin2 = 15;
395  fMaxSlopeType = 1.5;
396  fResKalman = 0.2;
397  fScatKalman = 1;
398  fResFinder = 1;
399  fScatFinder = 0.5;
400 
401  fQmin = 200;
402  fWidthMinT = 2;
403  fWidthMinC = 5;
404  fWidthMax = 30;
405 
406 
407 
408 
409  // fNtr = 0;
410  hNcl = new TH1F("hNcl","hNcl",500,0,500);
411 
412  // for(Int_t itr = 0; itr<NTRACK; itr++){
413  // fGraphs[0][itr] = 0;
414  // fGraphs[1][itr] = 0;
415  // }
416 
417 
418  const Int_t nbinsDist = 200;
419  Double_t xminDist = 1;
420  Double_t xmaxDist = 10000;
421  Double_t logxminDist = TMath::Log(xminDist);
422  Double_t logxmaxDist = TMath::Log(xmaxDist);
423  Double_t binwidthDist = (logxmaxDist-logxminDist)/nbinsDist;
424  Double_t xbinsDist[nbinsDist+1];
425  xbinsDist[0] = xminDist;
426  for (Int_t i=1;i<=nbinsDist;i++)
427  xbinsDist[i] = TMath::Exp(logxminDist+i*binwidthDist);
428 
429 
430  const Int_t nbinsTheta = 100;
431  Double_t xminTheta = 1e-5;
432  Double_t xmaxTheta = 2;
433  Double_t logxminTheta = TMath::Log(xminTheta);
434  Double_t logxmaxTheta = TMath::Log(xmaxTheta);
435  Double_t binwidthTheta = (logxmaxTheta-logxminTheta)/nbinsTheta;
436  Double_t xbinsTheta[nbinsTheta+1];
437  xbinsTheta[0] = xminTheta;
438  for (Int_t i=1;i<=nbinsTheta;i++)
439  xbinsTheta[i] = TMath::Exp(logxminTheta+i*binwidthTheta);
440 
441  hDistTracks = new TH1F("hDistTracks","",nbinsDist,xbinsDist);
442  hDistMinTracks = new TH1F("hDistMinTracks","",nbinsDist,xbinsDist);
443  hThetaTracks = new TH1F("hThetaTracks","",nbinsTheta,xbinsTheta);//,100,-1,1);
444  // hThetaTracksNtr = new TH2F("hThetaTracksNtr","",NTRACK,0,NTRACK,100,-1,1);
445  hThetaTracksNtr = new TH2F("hThetaTracksNtr","",nbinsDist,xbinsDist,nbinsTheta,xbinsTheta);
446  for(Int_t i = 0; i<10; i++)
447  hThetaDist[i] = new TH2F(Form("hThetaDist%d",i),"",nbinsDist,xbinsDist,nbinsTheta,xbinsTheta);
448 
449 
450  const Int_t nbinsQ = 100;
451  Double_t xminQ = 1e-3;
452  Double_t xmaxQ = 1e3;
453  Double_t logxminQ = TMath::Log(xminQ);
454  Double_t logxmaxQ = TMath::Log(xmaxQ);
455  Double_t binwidthQ = (logxmaxQ-logxminQ)/nbinsQ;
456  Double_t xbinsQ[nbinsQ+1];
457  xbinsQ[0] = xminQ;
458  for (Int_t i=1;i<=nbinsQ;i++)
459  xbinsQ[i] = TMath::Exp(logxminQ+i*binwidthQ);
460  fHistQQtestVsDist = new TH2F("fHistQQtestVsDist","",nbinsQ,xbinsQ,nbinsDist,xbinsDist);
461  fHistQQmin = new TH2F("fHistQQmin","",nbinsQ,xbinsQ,nbinsDist,xbinsDist);
462 
463  }
464 
465 void HarpoKalmanFitting::Save(char * /* mode */)
466  {
467 
468  OpenHistFile("recoKalmanFitting");
469  // Save histograms here
470  hDistTracks->Write();
471  hDistMinTracks->Write();
472  hThetaTracks->Write();
473  hThetaTracksNtr->Write();
474  for(Int_t i = 0; i<10; i++){
475  if(hThetaDist[i])
476  hThetaDist[i]->Write();
477  }
478  fHistQQtestVsDist->Write();
479  fHistQQmin->Write();
480 
481  }
482 
void SetPzEnd(Double_t val)
void SetXend(Double_t val)
#define NTRACK
Double_t GetZfit(Int_t i=0)
HarpoRecoEvent * GetRecoEvent()
Definition: HarpoEvent.h:46
Double_t fScatKalman
Definition: HarpoKalman.h:128
TClonesArray * GetKalmanTracksArray()
TH2F * hThetaDist[10]
Definition: HarpoKalman.h:107
#define NCHAN
Definition: HarpoDccMap.h:16
void SetPxEnd(Double_t val)
Double_t GetMean()
Double_t fWidthMax
Definition: HarpoKalman.h:123
Double_t fQtot
Definition: HarpoKalman.h:94
Double_t fResKalman
Definition: HarpoKalman.h:127
Double_t GetData(Int_t i, Int_t j)
Set/Get Data Cell.
Definition: HarpoDccMap.cxx:84
TH1F * hThetaTracks
Definition: HarpoKalman.h:105
void SetPzStart(Double_t val)
TH2F * hThetaTracksNtr
Definition: HarpoKalman.h:106
Object containing the reconstruction information for one event (with array of HarpoRecoClusters Harpo...
Double_t fMaxSlopeType
Definition: HarpoKalman.h:126
Double_t fQmin
Definition: HarpoKalman.h:120
Int_t InitPlane(TClonesArray *clArray, Int_t plane)
Definition: HarpoKalman.cxx:54
TH1F * hDistMinTracks
Definition: HarpoKalman.h:104
TMatrixD GetTrackEnd(TClonesArray *clArray, Int_t plane, Int_t iTr)
Double_t GetQtrack(Int_t itr, Int_t plane)
TH1F * hNcl
Redefine empty default.
TArrayI * FindNextClosest(TMatrixD X, TMatrixD C, Double_t angle, Int_t Ntr, TClonesArray *clArray, TArrayI *arr, Int_t ncl, Int_t plane, Int_t color, Int_t fill, Int_t smooth, Int_t q)
virtual void print()
FullEvent Header not scecific to the detectors The class is ....
A virtual class which define intrafece between HARPO Reader and Event Analysis code.
TVirtualPad * fCanvas[2]
Definition: HarpoKalman.h:100
Int_t fId[NTRACK][2]
virtual void print()
Int_t fNclTrack[NTRACK]
Definition: HarpoKalman.h:74
Int_t InitPlane(TClonesArray *clArray, Int_t plane)
HarpoRecoTracks object, Obtained with Kalman filter.
Cluster object, containing position, charge and quality information.
TFile * OpenHistFile(const char *ananame)
void SetXstart(Double_t val)
void SetZend(Double_t val)
Double_t fScatFinder
Definition: HarpoKalman.h:130
static int type
unpacked dcc data The class contains the data map for DCC or Feminos The data is stored as a 2D TMatr...
Definition: HarpoDccMap.h:29
ULong64_t fMapTmp[NCHAN][NADC]
Definition: HarpoKalman.h:93
Int_t FitTrack(TClonesArray *clArray, Int_t plane, HarpoRecoKalmanTracks *track)
Double_t GetQtracks(Int_t plane)
Double_t fWidthMinC
Definition: HarpoKalman.h:122
Int_t GetIdClusterTrack()
void SetZstart(Double_t val)
#define NADC
Definition: HarpoDccMap.h:18
#define KALMAN
Int_t fNtr[2]
Definition: HarpoKalman.h:72
Double_t fWidthMinT
Definition: HarpoKalman.h:121
#define TCLUSTER
Long64_t gHarpoDebug
Definition: HarpoDebug.cxx:9
void SetPxStart(Double_t val)
Double_t fResFinder
Definition: HarpoKalman.h:129
Double_t fQcommon[NTRACK][NTRACK]
TH1F * hDistTracks
Definition: HarpoKalman.h:103
HarpoEventHeader * GetHeader()
Definition: HarpoEvent.cxx:80
HarpoEvent * fEvt
Definition: HarpoAnalyse.h:70
ULong_t nEvents
Definition: HarpoAnalyse.h:75
void print()
Ovreloaded medod whic do all job.
const ULong_t gkNDetectors
Definition: HarpoDet.h:14
#define CCLUSTER
Double_t GetXfit(Int_t i=0)
HarpoDccMap * GetDccMap(Long_t plane=XDCC)
Definition: HarpoEvent.cxx:108
Int_t GetNclusterTrack()
void Save(char *mode=NULL)
TClonesArray * GetClustersArray()
TH2F * fHist[2]
Definition: HarpoKalman.h:101
void SetTrackType(Int_t val)
Bool_t CheckIdClusterTrack(Int_t val)