FairRoot/PandaRoot
PndPmtTask.cxx
Go to the documentation of this file.
1 /******************************************************
2 Poorman Tracks and Fitter profiling
3 Author: Ralf Kliemt (GSI,2013)
4 *******************************************************/
5 
6 #include "TMath.h"
7 #include "TRandom3.h"
8 #include "TDatabasePDG.h"
9 #include "FairRootManager.h"
10 #include "FairRunAna.h"
11 #include "FairRuntimeDb.h"
12 
13 #include "RhoCandidate.h"
14 #include "RhoCalculationTools.h"
15 #include "PndAnalysisCalcTools.h"
16 #include "RhoVtxPoca.h"
17 #include "RhoKalmanVtxFitter.h"
18 #include "RhoKinVtxFitter.h"
19 
20 #include "PndPmtTask.h"
21 #include <string>
22 #include <iostream>
23 
24 
25 using std::cout;
26 using std::flush;
27 using std::endl;
28 
29 
30 // ----- Default constructor -------------------------------------------
31 PndPmtTask::PndPmtTask() : PndPmtPoormantracks() // : FairTask("Poorman Track Task")
32 {
33  fSwAll.Start();
34  fHistoList = new TList();
35 }
36 // -------------------------------------------------------------------------
37 
38 // ----- Destructor ----------------------------------------------------
40 // -------------------------------------------------------------------------
41 
42 
43 
44 // ----- Public method Init --------------------------------------------
45 //InitStatus
47 
48  gRandom->SetSeed(fSeed);
49  RhoCalculationTools::ForceConstantBz(20.); // [kGs]=[0.1T]
51 
52  //PArameters
53  fWidx=1.5,
54  fWidy=1.5,
55  fWidz=1.5; //[cm] maximum vertex position off origin
56 
57  int bins=100;
58  double min=0,max=4.5,mdf=2.0; // GeV/c
59  double min2=0.13,max2=0.15;
60  double min3=1.,max3=1.5;
61  double max4=0.3;//cm
62  double minchi = -0.05;
63  double maxchi = 2.5;
64  double vrange = 0.05; // cm
65  double pullrange =4.;
66  double momrange=0.1;//GeV/c
67  double angdiffran=0.05; //rad
68 
69 
70  // NO FIT
71  fHVtxDiffX=new TH1F("hvtxDiffx","Vertex Smearing;(x_{mc}-x)/cm",bins,-vrange,vrange);
72  fHVtxDiffY=new TH1F("hvtxDiffy","Vertex Smearing;(y_{mc}-y)/cm",bins,-vrange,vrange);
73  fHVtxDiffZ=new TH1F("hvtxDiffz","Vertex Smearing;(z_{mc}-z)/cm",bins,-vrange,vrange);
74 
75  fHVtxDiffPX=new TH1F("hvtxdiffpx","Momentum reco;(p_{x,mc}-p_{x} / GeV/c)",bins,-momrange,momrange);
76  fHVtxDiffPY=new TH1F("hvtxdiffpy","Momentum reco;(p_{y,mc}-p_{y} / GeV/c)",bins,-momrange,momrange);
77  fHVtxDiffPZ=new TH1F("hvtxdiffpz","Momentum reco;(p_{z,mc}-p_{z}) / GeV/c",bins,-momrange,momrange);
78  fHVtxDiffE=new TH1F("hvtxdiffe","Energy reco;(E_{mc}-E) / GeV",bins,-momrange,momrange);
79 
80  fHVtxPullPX=new TH1F("hvtxpullpx","Momentum pull distribution reco;(p_{x,mc}-p_{x})/#sigma_{p_{x}}",bins,-pullrange,pullrange);
81  fHVtxPullPY=new TH1F("hvtxpullpy","Momentum pull distribution reco;(p_{y,mc}-p_{y})/#sigma_{p_{y}}",bins,-pullrange,pullrange);
82  fHVtxPullPZ=new TH1F("hvtxpullpz","Momentum pull distribution reco;(p_{z,mc}-p_{z})/#sigma_{p_{z}}",bins,-pullrange,pullrange);
83  fHVtxPullE=new TH1F("hvtxpulle","Energy pull distribution reco;(E_{mc}-E)/#sigma_{E}",bins,-pullrange,pullrange);
84 
85  fHVtxDiffThe=new TH1F("hvtxdiffthe","Momentum reco;(#Theta_{mc}-#Theta}) / GeV/c",bins,-angdiffran,angdiffran);
86  fHVtxDiffPhi=new TH1F("hvtxdiffphi","Momentum reco;(#Phi_{mc}-#Phi}) / GeV/c",bins,-angdiffran,angdiffran);
87 
88  // POCA
89 
90  fHVtxPocaX=new TH1F("hvtxPocax","Vertex POCA;(x_{mc}-x)/cm",bins,-vrange,vrange);
91  fHVtxPocaY=new TH1F("hvtxPocay","Vertex POCA;(y_{mc}-y)/cm",bins,-vrange,vrange);
92  fHVtxPocaZ=new TH1F("hvtxPocaz","Vertex POCA;(z_{mc}-z)/cm",bins,-vrange,vrange);
93 
94  fHVtxPocaXY=new TH2F("hvtxPocaxy","Vertex POCA X-Y view;(x_{mc}-x)/#mum;(y_{mc}-y)/cm",bins,-vrange,vrange,bins,-vrange,vrange);
95  fHVtxPocaRZ=new TH2F("hvtxPocarz","Vertex POCA R-Z view;(z_{mc}-z)/#mum;(r_{mc}-r)/cm",bins,-vrange,vrange,bins,-vrange,vrange);
96 
97  fHVtxPullPocaX=new TH1F("hvtxpullpocax","Vertex pull distribution POCA;(x_{mc}-x)/#sigma_{x}",bins,-pullrange,pullrange);
98  fHVtxPullPocaY=new TH1F("hvtxpullpocay","Vertex pull distribution POCA;(y_{mc}-y)/#sigma_{y}",bins,-pullrange,pullrange);
99  fHVtxPullPocaZ=new TH1F("hvtxpullpocaz","Vertex pull distribution POCA;(z_{mc}-z)/#sigma_{z}",bins,-pullrange,pullrange);
100 
101  fHVtxPocas=new TH1F("hvtxpocas","Vertex POCA D value;D/cm",bins,0.,vrange);
102  fHVtxPocaEmpty=new TH1F("hvtxcpocaempty","",0,0.,1.);
103 
104  // FAST FIT
105 
106  fHVtxFastX=new TH1F("hvtxFastx","Vertex fast fit;(x_{mc}-x)/cm",bins,-vrange,vrange);
107  fHVtxFastY=new TH1F("hvtxTasty","Vertex fast fit;(y_{mc}-y)/cm",bins,-vrange,vrange);
108  fHVtxFastZ=new TH1F("hvtxFastz","Vertex fast fit;(z_{mc}-z)/cm",bins,-vrange,vrange);
109 
110  fHVtxFastXY=new TH2F("hvtxfastxy","Vertex fast fit X-Y view;(x_{mc}-x)/#mum;(y_{mc}-y)/cm",bins,-vrange,vrange,bins,-vrange,vrange);
111  fHVtxFastRZ=new TH2F("hvtxfastrz","Vertex fast fit R-Z view;(z_{mc}-z)/#mum;(r_{mc}-r)/cm",bins,-vrange,vrange,bins,-vrange,vrange);
112 
113  fHVtxErrFastX=new TH1F("hvtxerrfastx","Vertex error distribution fast;#sigma_{x}",bins,0.,vrange);
114  fHVtxErrFastY=new TH1F("hvtxerrfasty","Vertex error distribution fast;#sigma_{y}",bins,0.,vrange);
115  fHVtxErrFastZ=new TH1F("hvtxerrfastz","Vertex error distribution fast;#sigma_{z}",bins,0.,vrange);
116  fHVtxPullFastX=new TH1F("hvtxpullfastx","Vertex pull distribution fast;(x_{mc}-x)/#sigma_{x}",bins,-pullrange,pullrange);
117  fHVtxPullFastY=new TH1F("hvtxpullfasty","Vertex pull distribution fast;(y_{mc}-y)/#sigma_{y}",bins,-pullrange,pullrange);
118  fHVtxPullFastZ=new TH1F("hvtxpullfastz","Vertex pull distribution fast;(z_{mc}-z)/#sigma_{z}",bins,-pullrange,pullrange);
119 
120  fHVtxChi2Fast=new TH1F("hvtxchi2fast","Vertex Fast #Chi^{2};#Chi^{2}",bins,minchi,maxchi);
121  fHVtxChiProbFast=new TH1F("hvtxchipropfast","P(#Chi^{2}) Fast;p",bins,0.,1.);
122 
123  // FULL FIT
124  fHVtxFitX=new TH1F("hvtxFitx","Vertex full fit;(x_{mc}-x)/cm",bins,-vrange,vrange);
125  fHVtxFitY=new TH1F("hvtxFity","Vertex full fit;(y_{mc}-y)/cm",bins,-vrange,vrange);
126  fHVtxFitZ=new TH1F("hvtxFitz","Vertex full fit;(z_{mc}-z)/cm",bins,-vrange,vrange);
127 
128  fHVtxFitXY=new TH2F("hvtxfitxy","Vertex full fit X-Y view;(x_{mc}-x)/#mum;(y_{mc}-y)/cm",bins,-vrange,vrange,bins,-vrange,vrange);
129  fHVtxFitRZ=new TH2F("hvtxfitrz","Vertex full fit R-Z view;(z_{mc}-z)/#mum;(r_{mc}-r)/cm",bins,-vrange,vrange,bins,-vrange,vrange);
130 
131  fHVtxErrFitX=new TH1F("hvtxerrfitx","Vertex error distribution full fit;#sigma_{x}",bins,0.,vrange);
132  fHVtxErrFitY=new TH1F("hvtxerrfity","Vertex error distribution full fit;#sigma_{y}",bins,0.,vrange);
133  fHVtxErrFitZ=new TH1F("hvtxerrfitz","Vertex error distribution full fit;#sigma_{z}",bins,0.,vrange);
134  fHVtxPullFitX=new TH1F("hvtxpullfitx","Vertex pull distribution full fit;(x_{mc}-x)/#sigma_{x}",bins,-pullrange,pullrange);
135  fHVtxPullFitY=new TH1F("hvtxpullfity","Vertex pull distribution full fit;(y_{mc}-y)/#sigma_{y}",bins,-pullrange,pullrange);
136  fHVtxPullFitZ=new TH1F("hvtxpullfitz","Vertex pull distribution full fit;(z_{mc}-z)/#sigma_{z}",bins,-pullrange,pullrange);
137  fHVtxDiffFitPX=new TH1F("hvtxdifffitpx","Momentum full fit;(p_{x,mc}-p_{x} / GeV/c)",bins,-momrange,momrange);
138  fHVtxDiffFitPY=new TH1F("hvtxdifffitpy","Momentum full fit;(p_{y,mc}-p_{y} / GeV/c)",bins,-momrange,momrange);
139  fHVtxDiffFitPZ=new TH1F("hvtxdifffitpz","Momentum full fit;(p_{z,mc}-p_{z}) / GeV/c",bins,-momrange,momrange);
140  fHVtxDiffFitE=new TH1F("hvtxdifffite","Energy full fit;(E_{mc}-E) / GeV",bins,-momrange,momrange);
141  fHVtxDiffFitThe=new TH1F("hvtxdifffitthe","Momentum full fit;(#Theta_{mc}-#Theta}) / GeV/c",bins,-angdiffran,angdiffran);
142  fHVtxDiffFitPhi=new TH1F("hvtxdifffitphi","Momentum full fit;(#Phi_{mc}-#Phi}) / GeV/c",bins,-angdiffran,angdiffran);
143 
144  fHVtxPullFitPX=new TH1F("hvtxpullfitpx","Momentum pull distribution full fit;(p_{x,mc}-p_{x})/#sigma_{p_{x}}",bins,-pullrange,pullrange);
145  fHVtxPullFitPY=new TH1F("hvtxpullfitpy","Momentum pull distribution full fit;(p_{y,mc}-p_{y})/#sigma_{p_{y}}",bins,-pullrange,pullrange);
146  fHVtxPullFitPZ=new TH1F("hvtxpullfitpz","Momentum pull distribution full fit;(p_{z,mc}-p_{z})/#sigma_{p_{z}}",bins,-pullrange,pullrange);
147  fHVtxPullFitE=new TH1F("hvtxpullfite","Energy pull distribution full fit;(E_{mc}-E)/#sigma_{E}",bins,-pullrange,pullrange);
148 
149  fHVtxChi2Fit=new TH1F("hvtxchi2fit","Vertex Fit #Chi^{2};#Chi^{2}",bins,minchi,maxchi);
150  fHVtxChiProbFit=new TH1F("hvtxchipropfit","P(#Chi^{2}) Fit;p",bins,0.,1.);
151 
152  // KIN Fit
153 
154  fHVtxKinX=new TH1F("hvtxKinx","Vertex full kin;(x_{mc}-x)/cm",bins,-vrange,vrange);
155  fHVtxKinY=new TH1F("hvtxKiny","Vertex full kin;(y_{mc}-y)/cm",bins,-vrange,vrange);
156  fHVtxKinZ=new TH1F("hvtxKinz","Vertex full kin;(z_{mc}-z)/cm",bins,-vrange,vrange);
157 
158  fHVtxKinXY=new TH2F("hvtxkinxy","Vertex full kin X-Y view;(x_{mc}-x)/#mum;(y_{mc}-y)/cm",bins,-vrange,vrange,bins,-vrange,vrange);
159  fHVtxKinRZ=new TH2F("hvtxkinrz","Vertex full kin R-Z view;(z_{mc}-z)/#mum;(r_{mc}-r)/cm",bins,-vrange,vrange,bins,-vrange,vrange);
160 
161  fHVtxErrKinX=new TH1F("hvtxerrkinx","Vertex error distribution full kin;#sigma_{x}",bins,0.,vrange);
162  fHVtxErrKinY=new TH1F("hvtxerrkiny","Vertex error distribution full kin;#sigma_{y}",bins,0.,vrange);
163  fHVtxErrKinZ=new TH1F("hvtxerrkinz","Vertex error distribution full kin;#sigma_{z}",bins,0.,vrange);
164  fHVtxPullKinX=new TH1F("hvtxpullkinx","Vertex pull distribution full kin;(x_{mc}-x)/#sigma_{x}",bins,-pullrange,pullrange);
165  fHVtxPullKinY=new TH1F("hvtxpullkiny","Vertex pull distribution full kin;(y_{mc}-y)/#sigma_{y}",bins,-pullrange,pullrange);
166  fHVtxPullKinZ=new TH1F("hvtxpullkinz","Vertex pull distribution full kin;(z_{mc}-z)/#sigma_{z}",bins,-pullrange,pullrange);
167  fHVtxDiffKinPX=new TH1F("hvtxdiffkinpx","Momentum full kin;(p_{x,mc}-p_{x} / GeV/c)",bins,-momrange,momrange);
168  fHVtxDiffKinPY=new TH1F("hvtxdiffkinpy","Momentum full kin;(p_{y,mc}-p_{y} / GeV/c)",bins,-momrange,momrange);
169  fHVtxDiffKinPZ=new TH1F("hvtxdiffkinpz","Momentum full kin;(p_{z,mc}-p_{z}) / GeV/c",bins,-momrange,momrange);
170  fHVtxDiffKinE=new TH1F("hvtxdiffkine","Energy full kin;(E_{mc}-E) / GeV",bins,-momrange,momrange);
171  fHVtxDiffKinThe=new TH1F("hvtxdiffkinthe","Momentum full kin;(#Theta_{mc}-#Theta}) / GeV/c",bins,-angdiffran,angdiffran);
172  fHVtxDiffKinPhi=new TH1F("hvtxdiffkinphi","Momentum full kin;(#Phi_{mc}-#Phi}) / GeV/c",bins,-angdiffran,angdiffran);
173 
174  fHVtxPullKinPX=new TH1F("hvtxpullkinpx","Momentum pull distribution full kin;(p_{x,mc}-p_{x})/#sigma_{p_{x}}",bins,-pullrange,pullrange);
175  fHVtxPullKinPY=new TH1F("hvtxpullkinpy","Momentum pull distribution full kin;(p_{y,mc}-p_{y})/#sigma_{p_{y}}",bins,-pullrange,pullrange);
176  fHVtxPullKinPZ=new TH1F("hvtxpullkinpz","Momentum pull distribution full kin;(p_{z,mc}-p_{z})/#sigma_{p_{z}}",bins,-pullrange,pullrange);
177  fHVtxPullKinE=new TH1F("hvtxpullkine","Energy pull distribution full kin;(E_{mc}-E)/#sigma_{E}",bins,-pullrange,pullrange);
178 
179  fHVtxChi2Kin=new TH1F("hvtxchi2kin","Vertex Kin #Chi^{2};#Chi^{2}",bins,minchi,maxchi);
180  fHVtxChiProbKin=new TH1F("hvtxchipropkin","P(#Chi^{2}) Kin;p",bins,0.,1.);
181 
182  // Helix Params
183  fHPrgPull0 = new TH1F("hprgpull0","PRG Pull Distribution (0)",bins,-pullrange,pullrange);
184  fHPrgPull1 = new TH1F("hprgpull1","PRG Pull Distribution (1)",bins,-pullrange,pullrange);
185  fHPrgPull2 = new TH1F("hprgpull2","PRG Pull Distribution (2)",bins,-pullrange,pullrange);
186  fHPrgPull3 = new TH1F("hprgpull3","PRG Pull Distribution (3)",bins,-pullrange,pullrange);
187  fHPrgPull4 = new TH1F("hprgpull4","PRG Pull Distribution (4)",bins,-pullrange,pullrange);
188 
189  fHCpu = new TH1D("hcpu","CPU loads (ms)",5,0,5);
190  fHCpu->GetXaxis()->SetBinLabel(1,"PMT");
191  fHCpu->GetXaxis()->SetBinLabel(2,"POCA");
192  fHCpu->GetXaxis()->SetBinLabel(3,"PRG Fast");
193  fHCpu->GetXaxis()->SetBinLabel(4,"PRG Full");
194  fHCpu->GetXaxis()->SetBinLabel(5,"KinVtx");
195 
196  fHistoList->Add(fHVtxDiffX);
197  fHistoList->Add(fHVtxDiffY);
198  fHistoList->Add(fHVtxDiffZ);
199 
200  fHistoList->Add(fHVtxPocaX);
201  fHistoList->Add(fHVtxPocaY);
202  fHistoList->Add(fHVtxPocaZ);
203 
204  fHistoList->Add(fHVtxFastX);
205  fHistoList->Add(fHVtxFastY);
206  fHistoList->Add(fHVtxFastZ);
207 
208  fHistoList->Add(fHVtxFitX);
209  fHistoList->Add(fHVtxFitY);
210  fHistoList->Add(fHVtxFitZ);
211 
212  fHistoList->Add(fHVtxKinX);
213  fHistoList->Add(fHVtxKinY);
214  fHistoList->Add(fHVtxKinZ);
215 
219 
220  fHistoList->Add(fHVtxErrFitX);
221  fHistoList->Add(fHVtxErrFitY);
222  fHistoList->Add(fHVtxErrFitZ);
223 
224  fHistoList->Add(fHVtxErrKinX);
225  fHistoList->Add(fHVtxErrKinY);
226  fHistoList->Add(fHVtxErrKinZ);
227 
231 
235 
239 
243 
244  fHistoList->Add(fHVtxDiffPX);
245  fHistoList->Add(fHVtxDiffPY);
246  fHistoList->Add(fHVtxDiffPZ);
247 
248  fHistoList->Add(fHVtxPullPX);
249  fHistoList->Add(fHVtxPullPY);
250  fHistoList->Add(fHVtxPullPZ);
251 
255 
259 
263 
267 
268  fHistoList->Add(fHVtxDiffE);
271  fHistoList->Add(fHVtxPullE);
274 
275  fHistoList->Add(fHVtxDiffThe);
276  fHistoList->Add(fHVtxDiffPhi);
277 
280 
283 
284  fHistoList->Add(fHVtxPocas);
286  fHistoList->Add(fHVtxChi2Fit);
287  fHistoList->Add(fHVtxChi2Kin);
291 
292  fHistoList->Add(fHVtxPocaXY);
293  fHistoList->Add(fHVtxFastXY);
294  fHistoList->Add(fHVtxFitXY);
295  fHistoList->Add(fHVtxKinXY);
296  fHistoList->Add(fHVtxPocaRZ);
297  fHistoList->Add(fHVtxFastRZ);
298  fHistoList->Add(fHVtxFitRZ);
299  fHistoList->Add(fHVtxKinRZ);
300 
301  fHistoList->Add(fHPrgPull0);
302  fHistoList->Add(fHPrgPull1);
303  fHistoList->Add(fHPrgPull2);
304  fHistoList->Add(fHPrgPull3);
305  fHistoList->Add(fHPrgPull4);
306 
307  fHistoList->Add(fHCpu);
308 
309  fSwPMT.Reset();
310  fSwPoca.Reset();
311  fSwPrgfast.Reset();
312  fSwPrgfull.Reset();
313  fSwKin.Reset();
314 }
315 
317  // Get run and runtime database
318  //FairRunAna* run = FairRunAna::Instance();
319  //if ( ! run ) Fatal("SetParContainers", "No analysis run");
320  //FairRuntimeDb* db = run->GetRuntimeDb();
321  //if ( ! db ) Fatal("SetParContainers", "No runtime database");
322 }
323 
324 // -------------------------------------------------------------------------
325 
326 // ----- Public method Exec --------------------------------------------
327 void PndPmtTask::Exec(Option_t*) {
328 
329 
330  RhoCandidate *aCand=0,*bCand=0,*cCand=0,*dCand=0;
331  RhoCandidate *tmpcand=0,*mccand=0;
332  TVector3 vertexMC,vertexPoc,vertexFast,vertexFit,vertexKin,vertexDiff,vertexDiffFast,vertexDiffFit,vertexDiffKin;
333  TLorentzVector mom,mommc,momdiff;
334  const TVector3 nullpunkt(0.,0.,0.);
335  double rnd1=0.,rnd2=0.,rnd3=0.;
336  RhoError amomcov(4);
337  TMatrixD aposcov(3,3);
338  TMatrixD helixCov(5,5);
339  TMatrixD jacobian(5,7);
340  Float_t mcparams[5];
341  Float_t helixparams[5];
342  TMatrixD covV(3,3);
343  TMatrixD covVfit(3,3);
344 
345  //for(int i=0;i<nevt;i++)
346  //{
347  // printf("Event %i of %i. (seed=%i)\n",i,nevt,ranseed);
348  RhoCandidate *combiCand=0,*combiCand1=0,*combiCand2=0;
349  vertexMC = RollVertexBox(fWidx,fWidy,fWidz);
350  fVertex=vertexMC;
351 
352  fSwPMT.Start(kFALSE);
353  PoorManTracks();
354  fSwPMT.Stop();
355  if (fCands->GetEntriesFast()<2) {
356  cout<<"Warning: too few particles created."<<endl;
357  return;
358  }
359 
360  aCand=(RhoCandidate*)fCands->At(0);
361  bCand=(RhoCandidate*)fCands->At(1);
362  if(fCands->GetEntriesFast()==3)
363  {
364  cCand=(RhoCandidate*)fCands->At(2);
365  combiCand = aCand->Combine(bCand,cCand);
366  combiCand1 = aCand->Combine(bCand,cCand);
367  combiCand2 = aCand->Combine(bCand,cCand);
368  }else if(fCands->GetEntriesFast()==4)
369  {
370  cCand=(RhoCandidate*)fCands->At(2);
371  dCand=(RhoCandidate*)fCands->At(3);
372  combiCand = aCand->Combine(bCand,cCand,dCand);
373  combiCand1 = aCand->Combine(bCand,cCand,dCand);
374  combiCand2 = aCand->Combine(bCand,cCand,dCand);
375  }else{
376  combiCand = aCand->Combine(bCand);
377  combiCand1 = aCand->Combine(bCand);
378  combiCand2 = aCand->Combine(bCand);
379  }
380 
381  if(fVerbose>1) cout<<"aCand, bCand, comboCand, aPos, bPos, combipos"<<endl;
382  if(fVerbose>1) cout<<*aCand<<endl;
383  if(fVerbose>1) cout<<*bCand<<endl;
384  if(fVerbose>1) cout<<*combiCand<<endl;
385  if(fVerbose>1) aCand->GetPosition().Print();
386  if(fVerbose>1) bCand->GetPosition().Print();
387  if(fVerbose>1) combiCand->GetPosition().Print();
388 
389 
390  // CLEAN
391  for(int k=0;k<combiCand->NDaughters();k++)
392  {
393  tmpcand = combiCand->Daughter(k);
394  mccand = tmpcand->GetMcTruth();
395 
396  vertexDiff=mccand->Pos();vertexDiff-=tmpcand->Pos();
397  fHVtxDiffX->Fill(vertexDiff.X());
398  fHVtxDiffY->Fill(vertexDiff.Y());
399  fHVtxDiffZ->Fill(vertexDiff.Z());
400 
401  mommc=mccand->P4();
402  mom=tmpcand->P4();
403  momdiff=mommc-mom;
404  amomcov=tmpcand->P4Cov();
405  fHVtxDiffPX->Fill(momdiff.X());
406  fHVtxDiffPY->Fill(momdiff.Y());
407  fHVtxDiffPZ->Fill(momdiff.Z());
408  fHVtxDiffE->Fill(momdiff.E());
409 
410  fHVtxPullPX->Fill(momdiff.X()/sqrt(amomcov[0][0]));
411  fHVtxPullPY->Fill(momdiff.Y()/sqrt(amomcov[1][1]));
412  fHVtxPullPZ->Fill(momdiff.Z()/sqrt(amomcov[2][2]));
413  fHVtxPullE->Fill(momdiff.E()/sqrt(amomcov[3][3]));
414 
415  fHVtxDiffThe->Fill(mommc.Theta()-mom.Theta());
416  fHVtxDiffPhi->Fill(mommc.Phi()-mom.Phi());
417 
418  }
419 
420  // ********** POCA
421  RhoVtxPoca vPoca;
422  vertexPoc=vertexMC; //seed
423  if(fVerbose>0) cout<<"poca "<<flush;
424  fSwPoca.Start(kFALSE);
425  double dist = vPoca.GetPocaVtx(vertexPoc,combiCand);
426  fSwPoca.Stop();
427  if(fVerbose>0) cout<<" - Dist = "<<dist<<" \t";if(fVerbose>1)cout<<endl;
428  vertexDiff=vertexMC - vertexPoc;
429  if(fVerbose>1) vertexMC.Print();
430  if(fVerbose>1) vertexPoc.Print();
431  if(fVerbose>1) vertexDiff.Print();
432 
433  fHVtxPocaX->Fill(vertexDiff.X());
434  fHVtxPocaY->Fill(vertexDiff.Y());
435  fHVtxPocaZ->Fill(vertexDiff.Z());
436  fHVtxPocaXY->Fill(vertexDiff.X(),vertexDiff.Y());
437  fHVtxPocaRZ->Fill(vertexDiff.Z(),vertexMC.Perp()-vertexPoc.Perp());
438  fHVtxPocas->Fill(dist);
439  fHVtxPullPocaX->Fill(vertexDiff.X()/dist);
440  fHVtxPullPocaY->Fill(vertexDiff.Y()/dist);
441  fHVtxPullPocaZ->Fill(vertexDiff.Z()/dist);
442 
443  // ********** FAST FIT
444  RhoKalmanVtxFitter vFastter(combiCand);
445  vFastter.SetSilent();
446  //vFastter.SetDebug();
447  //PndAnalysisCalcTools::SetVerbose(3);
448  if(fVerbose>0) cout<<"prg "<<flush;
449  vertexFast=nullpunkt; //seed
450  double chiq = -5454;
451  vFastter.SetExpansionPoint(vertexFast);
452  fSwPrgfast.Start(kFALSE);
453  chiq = vFastter.FitVertexFast(vertexFast,covV,false,2); // 2 iterations, don't skip cov
454  fSwPrgfast.Stop();
455  if (chiq>=0){
456  if(fVerbose>0) cout<<" - chiq = "<<chiq<<" \t";if(fVerbose>1)cout<<endl;
457 
458  fHVtxChi2Fast->Fill(vFastter.GetChi2());
459  fHVtxChiProbFast->Fill(vFastter.GetProb());
460 
461  vertexDiffFast=vertexMC - vertexFast;
462  if(fVerbose>1) vertexMC.Print();
463  if(fVerbose>1) vertexFast.Print();
464  if(fVerbose>0) vertexDiffFast.Print();
465 
466  fHVtxFastX->Fill(vertexDiffFast.X());
467  fHVtxFastY->Fill(vertexDiffFast.Y());
468  fHVtxFastZ->Fill(vertexDiffFast.Z());
469  fHVtxFastXY->Fill(vertexDiffFast.X(),vertexDiffFast.Y());
470  fHVtxFastRZ->Fill(vertexDiffFast.Z(),vertexMC.Perp()-vertexFast.Perp());
471 
472  fHVtxErrFastX->Fill(sqrt(covV[0][0]));
473  fHVtxErrFastY->Fill(sqrt(covV[1][1]));
474  fHVtxErrFastZ->Fill(sqrt(covV[2][2]));
475  fHVtxPullFastX->Fill(vertexDiffFast.X()/sqrt(covV[0][0]));
476  fHVtxPullFastY->Fill(vertexDiffFast.Y()/sqrt(covV[1][1]));
477  fHVtxPullFastZ->Fill(vertexDiffFast.Z()/sqrt(covV[2][2]));
478  }
479  //vFastter.SetSilent();
480  //PndAnalysisCalcTools::SetVerbose(0);
481 
482  // ********** FULL FIT
483  RhoKalmanVtxFitter vFitter(combiCand1);
484  vFitter.SetSilent();
485  //PndAnalysisCalcTools::SetVerbose(5);
486  //if(laut)vFitter.SetDebug(true);
487  vertexFit=nullpunkt; //seed
488  vFitter.SetNIterations(2);
489  if(fVerbose>0) cout<<"prg "<<flush;
490  //if(laut>0) PndAnalysisCalcTools::SetVerbose(3);
491  fSwPrgfull.Start(kFALSE);
492  bool stat = vFitter.Fit();
493  fSwPrgfull.Stop();
494  //if(laut>0) PndAnalysisCalcTools::SetVerbose(0);
495  //if(fVerbose>0) cout<<" - chiq = "<<chiqfit<<" \t"<<flush;if(fVerbose>1)cout<<endl;
496  if (stat)
497  {
498  //PndAnalysisCalcTools::SetVerbose(0);
499  // fHVtxChi2Fit->Fill(chiqfit/fNDF);
500  // fHVtxChiProbFit->Fill(TMath::Prob(chiqfit,fNDF));
501  fHVtxChi2Fit->Fill(vFitter.GetChi2());
502  fHVtxChiProbFit->Fill(vFitter.GetProb());
503 
504  vertexFit=combiCand1->GetFit()->DecayVtx();
505  covVfit=combiCand1->GetFit()->DecayVtx().CovMatrix();
506  vertexDiffFit=vertexMC - vertexFit;
507  if(fVerbose>1) vertexMC.Print();
508  if(fVerbose>1) vertexFit.Print();
509  if(fVerbose>1) vertexDiffFit.Print();
510 
511  fHVtxFitX->Fill(vertexDiffFit.X());
512  fHVtxFitY->Fill(vertexDiffFit.Y());
513  fHVtxFitZ->Fill(vertexDiffFit.Z());
514  fHVtxFitXY->Fill(vertexDiffFit.X(),vertexDiffFit.Y());
515  fHVtxFitRZ->Fill(vertexDiffFit.Z(),vertexMC.Perp()-vertexFit.Perp());
516 
517  fHVtxErrFitX->Fill(sqrt(covVfit[0][0]));
518  fHVtxErrFitY->Fill(sqrt(covVfit[1][1]));
519  fHVtxErrFitZ->Fill(sqrt(covVfit[2][2]));
520  fHVtxPullFitX->Fill(vertexDiffFit.X()/sqrt(covVfit[0][0]));
521  fHVtxPullFitY->Fill(vertexDiffFit.Y()/sqrt(covVfit[1][1]));
522  fHVtxPullFitZ->Fill(vertexDiffFit.Z()/sqrt(covVfit[2][2]));
523 
524  for(int k=0;k<combiCand1->NDaughters();k++)
525  {
526  tmpcand = combiCand1->Daughter(k);
527  mccand = tmpcand->GetMcTruth();
528  tmpcand = tmpcand->GetFit();
529  mommc=mccand->P4();
530  mom=tmpcand->P4();
531  momdiff=mommc-mom;
532  amomcov=tmpcand->P4Cov();
533  fHVtxDiffFitPX->Fill(momdiff.X());
534  fHVtxDiffFitPY->Fill(momdiff.Y());
535  fHVtxDiffFitPZ->Fill(momdiff.Z());
536  fHVtxDiffFitE->Fill(momdiff.E());
537 
538  fHVtxPullFitPX->Fill(momdiff.X()/sqrt(amomcov[0][0]));
539  fHVtxPullFitPY->Fill(momdiff.Y()/sqrt(amomcov[1][1]));
540  fHVtxPullFitPZ->Fill(momdiff.Z()/sqrt(amomcov[2][2]));
541  fHVtxPullFitE->Fill(momdiff.E()/sqrt(amomcov[3][3]));
542 
543  fHVtxDiffFitThe->Fill(mommc.Theta()-mom.Theta());
544  fHVtxDiffFitPhi->Fill(mommc.Phi()-mom.Phi());
545  // Now check the PRG description....
546  Bool_t prgcheckmc = PndAnalysisCalcTools::P7toPRG(mccand->Pos(),mccand->P4(),mccand->Charge(),mccand->Cov7(),nullpunkt, mcparams, helixCov, jacobian, kFALSE);
547  Bool_t prgchecktc = PndAnalysisCalcTools::P7toPRG(tmpcand->Pos(),tmpcand->P4(),tmpcand->Charge(),tmpcand->Cov7(),nullpunkt, helixparams, helixCov, jacobian, kFALSE);
548  fHPrgPull0->Fill((mcparams[0]-helixparams[0])/sqrt(helixCov[0][0]));
549  fHPrgPull1->Fill((mcparams[1]-helixparams[1])/sqrt(helixCov[1][1]));
550  fHPrgPull2->Fill((mcparams[2]-helixparams[2])/sqrt(helixCov[2][2]));
551  fHPrgPull3->Fill((mcparams[3]-helixparams[3])/sqrt(helixCov[3][3]));
552  fHPrgPull4->Fill((mcparams[4]-helixparams[4])/sqrt(helixCov[4][4]));
553  }
554  }
555 
556  // ********** Kin FIT
557  RhoKinVtxFitter kFitter(combiCand2);
558  kFitter.SetNIterationsExact(2);
559  vertexFit=nullpunkt; //seed
560  if(fVerbose>0) cout<<"kin "<<flush;
561  fSwKin.Start(kFALSE);
562  kFitter.Fit();
563  fSwKin.Stop();
564  bool ksta = kFitter.GetChi2();
565  //if(laut>0) PndAnalysisCalcTools::SetVerbose(0);
566  //if(fVerbose>0) cout<<" - chiq = "<<chiqfit<<" \t"<<flush;if(fVerbose>1)cout<<endl;
567  if (ksta)
568  {
569  //PndAnalysisCalcTools::SetVerbose(0);
570  vertexKin=combiCand2->GetFit()->DecayVtx();
571  aposcov=combiCand2->GetFit()->DecayVtx().CovMatrix();
572  fHVtxChi2Kin->Fill(kFitter.GetChi2());
573  fHVtxChiProbKin->Fill(kFitter.GetProb());
574 
575  vertexDiffKin=vertexMC - vertexKin;
576  if(fVerbose>1) vertexMC.Print();
577  if(fVerbose>1) vertexKin.Print();
578  if(fVerbose>0) vertexDiffKin.Print();
579 
580  fHVtxKinX->Fill(vertexDiffKin.X());
581  fHVtxKinY->Fill(vertexDiffKin.Y());
582  fHVtxKinZ->Fill(vertexDiffKin.Z());
583  fHVtxKinXY->Fill(vertexDiffKin.X(),vertexDiffKin.Y());
584  fHVtxKinRZ->Fill(vertexDiffKin.Z(),vertexMC.Perp()-vertexKin.Perp());
585 
586  fHVtxErrKinX->Fill(sqrt(aposcov[0][0]));
587  fHVtxErrKinY->Fill(sqrt(aposcov[1][1]));
588  fHVtxErrKinZ->Fill(sqrt(aposcov[2][2]));
589  fHVtxPullKinX->Fill(vertexDiffKin.X()/sqrt(aposcov[0][0]));
590  fHVtxPullKinY->Fill(vertexDiffKin.Y()/sqrt(aposcov[1][1]));
591  fHVtxPullKinZ->Fill(vertexDiffKin.Z()/sqrt(aposcov[2][2]));
592 
593  for(int k=0;k<combiCand2->NDaughters();k++)
594  {
595  tmpcand = combiCand2->Daughter(k);
596  mccand = tmpcand->GetMcTruth();
597  tmpcand = tmpcand->GetFit();
598  mommc=mccand->P4();
599  mom=tmpcand->P4();
600  momdiff=mommc-mom;
601  amomcov=tmpcand->P4Cov();
602  fHVtxDiffKinPX->Fill(momdiff.X());
603  fHVtxDiffKinPY->Fill(momdiff.Y());
604  fHVtxDiffKinPZ->Fill(momdiff.Z());
605  fHVtxDiffKinE->Fill(momdiff.E());
606 
607  fHVtxPullKinPX->Fill(momdiff.X()/sqrt(amomcov[0][0]));
608  fHVtxPullKinPY->Fill(momdiff.Y()/sqrt(amomcov[1][1]));
609  fHVtxPullKinPZ->Fill(momdiff.Z()/sqrt(amomcov[2][2]));
610  fHVtxPullKinE->Fill(momdiff.E()/sqrt(amomcov[3][3]));
611 
612  fHVtxDiffKinThe->Fill(mommc.Theta()-mom.Theta());
613  fHVtxDiffKinPhi->Fill(mommc.Phi()-mom.Phi());
614  }
615  }
616  // } // event loop
617 
618  //cout<<" ---------- calculations done, writing histograms."<<endl;
619  //manipulate & fit histos now
620 
621 
622 }
623 // -------------------------------------------------------------------------
624 
626 {
627  fSwAll.Stop();
628  //Read Stopwatches
629  //fHCpu->Fill("PMT",fSwPMT.RealTime()/fSwAll.RealTime());
630  //fHCpu->Fill("POCA",fSwPoca.RealTime()/fSwAll.RealTime());
631  //fHCpu->Fill("PRG Fast",fSwPrgfast.RealTime()/fSwAll.RealTime());
632  //fHCpu->Fill("PRG Full",fSwPrgfull.RealTime()/fSwAll.RealTime());
633  //fHCpu->Fill("KinVtx",fSwKin.RealTime()/fSwAll.RealTime());
634  fHCpu->Fill("PMT",1000*fSwPMT.RealTime()/fSwPMT.Counter());
635  fHCpu->Fill("POCA",1000*fSwPoca.RealTime()/fSwPMT.Counter());
636  fHCpu->Fill("PRG Fast",1000*fSwPrgfast.RealTime()/fSwPMT.Counter());
637  fHCpu->Fill("PRG Full",1000*fSwPrgfull.RealTime()/fSwPMT.Counter());
638  fHCpu->Fill("KinVtx",1000*fSwKin.RealTime()/fSwPMT.Counter());
639 
640 
641  //Write and Plot all histos from List
642  TString hfile="Data/HistoVertexing";
643  // if(seed>=0){hfile+="-";hfile+=ranseed;}
644  hfile+=".root";
645  TFile* histofile = new TFile(hfile.Data(),"RECREATE");
646  histofile->cd();
647  TListIter iter(fHistoList);
648  TH1* tmph=NULL;
649  while( tmph=(TH1*)iter() ) tmph->Write();
650  histofile->Close();
651 }
652 
653 
654 
TH1F * fHVtxPullFitE
Definition: PndPmtTask.h:65
TH1F * fHVtxErrFitZ
Definition: PndPmtTask.h:65
TH1F * fHVtxPullFitPX
Definition: PndPmtTask.h:65
TH1F * fHVtxPocaX
Definition: PndPmtTask.h:50
RhoCandidate * Combine(RhoCandidate *c)
TH1D * fHCpu
Definition: PndPmtTask.h:90
TH1F * fHVtxKinZ
Definition: PndPmtTask.h:77
void Init()
Definition: PndPmtTask.cxx:46
TH1F * fHVtxPullKinZ
Definition: PndPmtTask.h:77
TH1F * fHVtxDiffKinE
Definition: PndPmtTask.h:77
TH1F * fHVtxErrFastY
Definition: PndPmtTask.h:57
TH1F * fHVtxErrFastZ
Definition: PndPmtTask.h:57
TH1F * fHVtxDiffPY
Definition: PndPmtTask.h:44
TH1F * fHVtxErrKinZ
Definition: PndPmtTask.h:77
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
TH2F * fHVtxPocaXY
Definition: PndPmtTask.h:54
TH1F * fHVtxPullPZ
Definition: PndPmtTask.h:44
TH2F * fHVtxKinXY
Definition: PndPmtTask.h:85
TH1F * fHVtxPocaZ
Definition: PndPmtTask.h:50
TH1F * fHVtxDiffKinPhi
Definition: PndPmtTask.h:77
TVector3 Pos() const
Definition: RhoCandidate.h:186
TH1F * fHVtxDiffPhi
Definition: PndPmtTask.h:44
void SetNIterations(int i)
TStopwatch fSwPrgfull
Definition: PndPmtTask.h:92
TH1F * fHVtxErrFitX
Definition: PndPmtTask.h:65
TH1F * fHPrgPull1
Definition: PndPmtTask.h:88
TH1F * fHVtxKinX
Definition: PndPmtTask.h:77
TH1F * fHVtxDiffFitPY
Definition: PndPmtTask.h:65
RhoCandidate * Daughter(Int_t n)
void SetNIterationsExact(int nit=2)
TVector3 mommc
Definition: anaLmdDigi.C:64
TH1F * fHVtxDiffE
Definition: PndPmtTask.h:44
TH1F * fHVtxDiffFitPX
Definition: PndPmtTask.h:65
Double_t mom
Definition: plot_dirc.C:14
TH1F * fHVtxPullFitX
Definition: PndPmtTask.h:65
TH1F * fHVtxErrFastX
Definition: PndPmtTask.h:57
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Definition: P4_F32vec4.h:26
TList * fHistoList
Definition: PndPmtTask.h:42
TH1F * fHVtxPullPocaX
Definition: PndPmtTask.h:50
TH2F * fHVtxKinRZ
Definition: PndPmtTask.h:85
TH1F * fHVtxDiffKinThe
Definition: PndPmtTask.h:77
TH1F * fHVtxPullFitPY
Definition: PndPmtTask.h:65
TH1F * fHVtxPocas
Definition: PndPmtTask.h:50
TH2F * fHVtxFitRZ
Definition: PndPmtTask.h:73
TStopwatch fSwAll
Definition: PndPmtTask.h:92
TH1F * fHVtxFastX
Definition: PndPmtTask.h:57
TH1F * fHVtxChiProbKin
Definition: PndPmtTask.h:77
TH1F * fHVtxPullE
Definition: PndPmtTask.h:44
virtual void SetParContainers()
Definition: PndPmtTask.cxx:316
static void ForceConstantBz(Double_t bz=0.)
Force a constant B field value for all positions.
TH1F * fHVtxErrKinX
Definition: PndPmtTask.h:77
TH1F * fHVtxDiffPZ
Definition: PndPmtTask.h:44
TH1F * fHVtxDiffPX
Definition: PndPmtTask.h:44
TH1F * fHVtxPullFastX
Definition: PndPmtTask.h:57
TVector3 GetPosition() const
Definition: RhoCandidate.h:185
TH1F * fHVtxChiProbFit
Definition: PndPmtTask.h:65
Double_t GetPocaVtx(TVector3 &vertex, RhoCandidate *composite)
Definition: RhoVtxPoca.cxx:27
TH1F * fHVtxPullKinPZ
Definition: PndPmtTask.h:77
TH1F * fHVtxDiffKinPY
Definition: PndPmtTask.h:77
TH1F * fHVtxPullPocaY
Definition: PndPmtTask.h:50
TH2F * fHVtxPocaRZ
Definition: PndPmtTask.h:54
void SetExpansionPoint(TVector3 P)
TH1F * fHVtxDiffThe
Definition: PndPmtTask.h:44
TH1F * fHVtxFastY
Definition: PndPmtTask.h:57
TH1F * fHVtxChi2Fit
Definition: PndPmtTask.h:65
TH1F * fHVtxKinY
Definition: PndPmtTask.h:77
TH1F * fHVtxPullPX
Definition: PndPmtTask.h:44
TH1F * fHVtxPullKinE
Definition: PndPmtTask.h:77
TH1F * fHVtxPocaEmpty
Definition: PndPmtTask.h:50
TLorentzVector P4() const
Definition: RhoCandidate.h:195
TH1F * fHVtxPullKinPX
Definition: PndPmtTask.h:77
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition: P4_F32vec4.h:25
double GetProb() const
Definition: RhoFitterBase.h:50
RhoCandidate * GetMcTruth() const
Definition: RhoCandidate.h:437
TH1F * fHVtxFitX
Definition: PndPmtTask.h:65
double FitVertexFast(TVector3 &vtx, TMatrixD &cov, bool skipcov=false, int niter=2)
TH1F * fHPrgPull0
Definition: PndPmtTask.h:88
TH1F * fHVtxPullFastY
Definition: PndPmtTask.h:57
TH1F * fHVtxFastZ
Definition: PndPmtTask.h:57
RhoError P4Cov() const
TH1F * fHVtxPullPocaZ
Definition: PndPmtTask.h:50
TMatrixD Cov7() const
TH1F * fHVtxDiffFitE
Definition: PndPmtTask.h:65
TH1F * fHVtxDiffKinPX
Definition: PndPmtTask.h:77
TStopwatch fSwPrgfast
Definition: PndPmtTask.h:92
TH1F * fHVtxChi2Fast
Definition: PndPmtTask.h:57
TH1F * fHPrgPull2
Definition: PndPmtTask.h:88
TH1F * fHVtxChiProbFast
Definition: PndPmtTask.h:57
TH1F * fHVtxPullFitZ
Definition: PndPmtTask.h:65
TH1F * fHVtxPullFastZ
Definition: PndPmtTask.h:57
TH1F * fHVtxPullFitPZ
Definition: PndPmtTask.h:65
Int_t NDaughters() const
ClassImp(PndAnaContFact)
RhoCandidate * GetFit() const
Definition: RhoCandidate.h:293
Double_t Charge() const
Definition: RhoCandidate.h:184
TH2F * fHVtxFitXY
Definition: PndPmtTask.h:73
TH1F * fHVtxChi2Kin
Definition: PndPmtTask.h:77
TH1F * fHVtxPullKinPY
Definition: PndPmtTask.h:77
void Exec(Option_t *opt)
Definition: PndPmtTask.cxx:327
TH1F * fHVtxDiffFitPZ
Definition: PndPmtTask.h:65
double GetChi2() const
Definition: RhoFitterBase.h:48
TH1F * fHVtxDiffZ
Definition: PndPmtTask.h:44
TH1F * fHPrgPull3
Definition: PndPmtTask.h:88
TH1F * fHVtxPullFitY
Definition: PndPmtTask.h:65
TH1F * fHVtxPocaY
Definition: PndPmtTask.h:50
TH1F * fHVtxErrKinY
Definition: PndPmtTask.h:77
TH1F * fHVtxErrFitY
Definition: PndPmtTask.h:65
TH1F * fHVtxDiffFitPhi
Definition: PndPmtTask.h:65
drchit SetVerbose(iVerbose)
void Finish()
Definition: PndPmtTask.cxx:625
TH1F * fHVtxFitZ
Definition: PndPmtTask.h:65
TH1F * fHVtxDiffKinPZ
Definition: PndPmtTask.h:77
TH1F * fHVtxDiffFitThe
Definition: PndPmtTask.h:65
TH1F * fHVtxFitY
Definition: PndPmtTask.h:65
TH1F * fHVtxDiffY
Definition: PndPmtTask.h:44
TH1F * fHVtxPullKinY
Definition: PndPmtTask.h:77
TH1F * fHVtxPullPY
Definition: PndPmtTask.h:44
TH1F * fHVtxDiffX
Definition: PndPmtTask.h:44
TStopwatch fSwKin
Definition: PndPmtTask.h:92
TH1F * fHPrgPull4
Definition: PndPmtTask.h:88
TH2F * fHVtxFastXY
Definition: PndPmtTask.h:62
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
TVector3 RollVertexBox(double widx, double widy, double widz)
TH1F * fHVtxPullKinX
Definition: PndPmtTask.h:77
TStopwatch fSwPoca
Definition: PndPmtTask.h:92
TH2F * fHVtxFastRZ
Definition: PndPmtTask.h:62
TStopwatch fSwPMT
Definition: PndPmtTask.h:92