FairRoot/PandaRoot
PndMvdQATask.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndMvdQATask source file -----
3 // ----- Created 20/03/07 by R.Kliemt -----
4 // -------------------------------------------------------------------------
5 // libc includes
6 #include <iostream>
7 
8 // Root includes
9 #include "TROOT.h"
10 #include "TClonesArray.h"
11 #include "TGeoManager.h"
12 #include "TCanvas.h"
13 #include "TH1D.h"
14 #include "TH1I.h"
15 #include "TF1.h"
16 
17 // framework includes
18 #include "FairRootManager.h"
19 #include "PndMvdQATask.h"
20 #include "FairRun.h"
21 #include "FairRuntimeDb.h"
22 #include "../pnddata/PndMCTrack.h"
23 #include "FairHit.h"
24 // PndSds includes
25 #include "PndSdsHit.h"
26 #include "PndSdsMCPoint.h"
27 
28 
29 // ----- Default constructor -------------------------------------------
30 PndMvdQATask::PndMvdQATask() : PndBlackBoxTask("PndMvdQATask"), fProperDifference(false), fGeoH(nullptr)
31 {
34 
35 
36 }
37 // -------------------------------------------------------------------------
38 
39 // ----- Destructor ----------------------------------------------------
41 {
42 }
43 
44 // ----- Public method Init --------------------------------------------
45 InitStatus PndMvdQATask::Init()
46 {
47 
48  std::cout << "PndMvdQATask::Init()" << std::endl;
49  // Get RootManager
50  FairRootManager* ioman = FairRootManager::Instance();
51  if ( ! ioman ) {
52  std::cout << "-E- PndMvdQATask::Init: " << "RootManager not instantiated!" << std::endl;
53  return kFATAL;
54  }
55 
56  // Get MCPoints array
57  fMcPoints = (TClonesArray*) ioman->GetObject("MVDPoint");
58  if ( ! fMcPoints ) {
59  std::cout << "-W- PndMvdQATask::Init: "<< "No PndSdsMCPoint array!" << std::endl;
60  return kERROR;
61  }
62 
63  // Get MCPoints array
64  fPixelHits = (TClonesArray*) ioman->GetObject("MVDHitsPixel");
65  if ( ! fPixelHits ) {
66  std::cout << "-W- PndMvdQATask::Init: "<< "No MVDHitsPixel array!" << std::endl;
67  return kERROR;
68  }
69 
70  // Get MCPoints array
71  fStripHits = (TClonesArray*) ioman->GetObject("MVDHitsStrip");
72  if ( ! fStripHits ) {
73  std::cout << "-W- PndMvdQATask::Init: "<< "No MVDHitsStrip array!" << std::endl;
74  return kERROR;
75  }
76 
77  fHStripSingle = new TH1D("StripSingle","Strip Single Digi Cluster",100,-0.008,0.008);
78  fHStripDouble = new TH1D("StripDouble","Strip Multi Digi Cluster",100,-0.008,0.008);
79  fHStripAll = new TH1D("StripAll","Strip All Hits",100,-0.008,0.008);
80  fHStripClusterSize = new TH1D("StripClusterSize", "Strip Cluster Size", 11, -0.5, 10.5);
81  fHStripEnergy = new TH1D("StripEnergy", "Strip Energy Difference", 100, -0.00004, 0.00004);
82  fHStripTime = new TH1D("StripTime", "Strip Time Difference", 100, -20, 20);
83 
84 
85  fHPixelSingle = new TH1D("PixelSingle","Pixel Single Digi Cluster",100,-0.008,0.008);
86  fHPixelDouble = new TH1D("PixelDouble","Pixel Multi Digi Cluster",100,-0.008,0.008);
87  fHPixelAll = new TH1D("PixelAll","Pixel All Hits",100,-0.008,0.008);
88  fHPixelClusterSize = new TH1D("PixelClusterSize", "Pixel Cluster Size", 11, -0.5, 10.5);
89  fHPixelEnergy = new TH1D("PixelEnergy", "Pixel Energy Difference", 100, -0.00004, 0.00004);
90  fHPixelTime = new TH1D("PixelTime", "Pixel Time Difference", 100, -20, 20);
91 
92 
93 
94  if (fVerbose > 1) std::cout << "-I- gGeoManager = "<<gGeoManager << std::endl;
95 
96 
97  std::cout << "PndMvdQATask::Init() finished" << std::endl;
98 
99  return kSUCCESS;
100 }
101 // -------------------------------------------------------------------------
103 {
104  if ( fGeoH == NULL )
106 
108  fGeoH->FillSensorMap();
109 //
110 // fGeoH->SetParContainers();
111 // fGeoH->PrintSensorNames();
112 
113  std::cout << "PndMvdQATask::SetParContainers() finished" << std::endl;
114 }
115 
116 
117 // ----- Public method Exec --------------------------------------------
118 void PndMvdQATask::Exec(Option_t*)
119 {
120  for(int pixIndex = 0; pixIndex < fPixelHits->GetEntriesFast(); pixIndex++){
121  PndSdsHit* myHit = (PndSdsHit*)fPixelHits->At(pixIndex);
122  CalculateDifference(myHit);
123  if (fProperDifference == kTRUE){
124  fHPixelAll->Fill(fSpatialDifference.X());
127  if (myHit->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MVDPixelDigis")).GetNLinks() == 1){
129  } else {
131  }
132  fHPixelClusterSize->Fill(myHit->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MVDPixelDigis")).GetNLinks());
133  }
134  }
135 
136  for(int strIndex = 0; strIndex < fStripHits->GetEntriesFast(); strIndex++){
137  PndSdsHit* myHit = (PndSdsHit*)fStripHits->At(strIndex);
138  CalculateDifference(myHit);
139  if (fProperDifference == kTRUE){
140  fHStripAll->Fill(fSpatialDifference.X());
143  if (myHit->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MVDStripDigis")).GetNLinks() == 2){
145  } else {
147  }
148  fHStripClusterSize->Fill(myHit->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MVDStripDigis")).GetNLinks());
149  }
150  }
151 }
152 // -------------------------------------------------------------------------
153 
155 {
156  fPixelBoundaries.push_back(std::make_pair(-1e-03,1e-03)); //mean value of small double gaussian fit
157  fPixelBoundaries.push_back(std::make_pair(2e-04, 1e-03)); //sigma value of small double gaussian fit
158  fPixelBoundaries.push_back(std::make_pair(-1e-03, 1e-03)); //mean value of wide double gaussian fit
159  fPixelBoundaries.push_back(std::make_pair(2e-04, 1e-02)); //sigma value of small double gaussian fit
160  fPixelBoundaries.push_back(std::make_pair(-1e-03, 1e-03)); //mean value of single hit distribution
161  fPixelBoundaries.push_back(std::make_pair(2e-04, 1e-02)); //rms of single hit distribution
162  fPixelBoundaries.push_back(std::make_pair(2, 3)); //mean value of cluster size
163  fPixelBoundaries.push_back(std::make_pair(0.8, 1.2)); //sigma value of cluster size
164  fPixelBoundaries.push_back(std::make_pair(-1e-05, 1e-05)); //mean value of energy resolution
165  fPixelBoundaries.push_back(std::make_pair(2e-06, 5e-06)); //sigma value of energy resolution
166  fPixelBoundaries.push_back(std::make_pair(-2, 2)); //mean value of time resolution
167  fPixelBoundaries.push_back(std::make_pair(2, 10)); //sigma value of time resolution
168 
169 }
170 
172 {
173  fStripBoundaries.push_back(std::make_pair(-1e-03,1e-03)); //mean value of small double gaussian fit
174  fStripBoundaries.push_back(std::make_pair(2e-04, 1e-03)); //sigma value of small double gaussian fit
175  fStripBoundaries.push_back(std::make_pair(-1e-03, 1e-03)); //mean value of wide double gaussian fit
176  fStripBoundaries.push_back(std::make_pair(2e-04, 1e-02)); //sigma value of small double gaussian fit
177  fStripBoundaries.push_back(std::make_pair(-1e-03, 1e-03)); //mean value of single hit distribution
178  fStripBoundaries.push_back(std::make_pair(2e-04, 1e-02)); //rms of single hit distribution
179  fStripBoundaries.push_back(std::make_pair(3, 4)); //mean value of cluster size
180  fStripBoundaries.push_back(std::make_pair(0.8, 1.2)); //sigma value of cluster size
181  fStripBoundaries.push_back(std::make_pair(-1e-05, 1e-05)); //mean value of energy resolution
182  fStripBoundaries.push_back(std::make_pair(2e-06, 10e-06)); //sigma value of energy resolution
183  fStripBoundaries.push_back(std::make_pair(-2, 2)); //mean value of time resolution
184  fStripBoundaries.push_back(std::make_pair(2, 10)); //sigma value of time resolution
185 
186 }
187 
189  fSpatialDifference.SetXYZ(0.0, 0.0, 0.0);
190  fTimeDifference = 0.0;
191  fEnergyDifference = 0.0;
192  fProperDifference = kFALSE;
193 
194  if(fVerbose > 1) std::cout << *(FairMultiLinkedData_Interface*)hit << std::endl;
195  FairMultiLinkedData mcLinks = hit->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MVDPoint"));
196  if (fVerbose > 1) std::cout << mcLinks << std::endl;
197  if (mcLinks.GetNLinks() == 1){
198  PndSdsMCPoint* point = (PndSdsMCPoint*)FairRootManager::Instance()->GetCloneOfLinkData(mcLinks.GetLink(0));
199  if (point != nullptr){
200  TVector3 mcMaster = 0.5 * (point->GetPosition() + point->GetPositionOut());
201  TVector3 mcLocal = fGeoH->MasterToLocalShortId(mcMaster, point->GetSensorID());
202  TVector3 hitLocal = fGeoH->MasterToLocalShortId(hit->GetPosition(), hit->GetSensorID());
203  fSpatialDifference = hitLocal - mcLocal;
204  fEnergyDifference = hit->GetEloss() - point->GetEnergyLoss();
205  fTimeDifference = hit->GetTimeStamp() - point->GetTime();
206  if (fVerbose > 1){
207  std::cout << "Hit: " << *hit << std::endl;
208  std::cout << "McPoint: " << *point << std::endl;
209  std::cout << "MCMaster: ";
210  mcMaster.Print();
211  std::cout << " MCLocal ";
212  mcLocal.Print();
213  std::cout << std::endl;
214  std::cout << "hitLocal: ";
215  hitLocal.Print();
216  std::cout << " Difference: ";
217  fSpatialDifference.Print();
218  std::cout << std::endl;
219  }
220  fProperDifference = kTRUE;
221  delete(point);
222  }
223 
224  }
225 }
226 
227 
228 std::vector<Double_t> PndMvdQATask::DoubleGaussFit(TH1* hisDiff)
229 {
230  Double_t par[6] = { 0., 0., 0.0005, 0., 0., 0.002 };
231  //prefit peak
232  TF1* g2 = new TF1("g2", "gaus", -0.002, 0.002);
233  hisDiff->Fit(g2, "RQ");
234  g2->GetParameters(&par[0]);
235  //fit total
236  TF1* total = new TF1("total", "gaus(0)+gaus(3)", -0.008, 0.008);
237  total->SetParameters(par);
238  total->SetLineColor(kRed);
239  total->SetLineWidth(2);
240  total->SetLineStyle(7);
241  hisDiff->Fit(total, "RQ");
242  total->GetParameters(&par[0]);
243  std::vector<Double_t> result;
244  for (int i = 0; i < 6; i++){
245  result.push_back(par[i]);
246  }
247  total->DrawCopy();
248  return result;
249 }
250 
252  TCanvas* can1 = new TCanvas("MvdResPlotPixel", "MVD point resolution pixel");
253  can1->Divide(2,3);
254  can1->cd(1);
255  fHPixelAll->DrawCopy("pe");
256  can1->cd(2);
257  fHPixelSingle->DrawCopy("pe");
258  can1->cd(3);
259  fHPixelDouble->DrawCopy("pe");
260  can1->cd(4);
261  fHPixelClusterSize->DrawCopy();
262  can1->cd(5);
263  fHPixelEnergy->DrawCopy();
264  can1->cd(6);
265  fHPixelTime->DrawCopy();
266  can1->SaveAs("PixelHistos.png");
267 }
268 
270  TCanvas* can2 = new TCanvas("MvdResPlotStrip", "MVD point resolution strip");
271  can2->Divide(2,3);
272  can2->cd(1);
273  fHStripAll->DrawCopy("pe");
274  can2->cd(2);
275  fHStripSingle->DrawCopy("pe");
276  can2->cd(3);
277  fHStripDouble->DrawCopy("pe");
278  can2->cd(4);
279  fHStripClusterSize->DrawCopy();
280  can2->cd(5);
281  fHStripEnergy->DrawCopy();
282  can2->cd(6);
283  fHStripTime->DrawCopy();
284  can2->SaveAs("StripHistos.png");
285 }
286 
288  bool result = false;
289  if (fPixelSpatialRes[1] > fPixelBoundaries[0].first && fPixelSpatialRes[1] < fPixelBoundaries[0].second) result=true;
290  else { result=false; std::cout << "Pixel small mean value error: " << fPixelBoundaries[0].first << " < " << fPixelSpatialRes[1] << " < " << fPixelBoundaries[0].second << std::endl;}
291  if (fPixelSpatialRes[2] > fPixelBoundaries[1].first && fPixelSpatialRes[2] < fPixelBoundaries[1].second) result=true;
292  else { result=false; std::cout << "Pixel small sigma value error: " << fPixelBoundaries[1].first << " < " << fPixelSpatialRes[2] << " < " << fPixelBoundaries[1].second << std::endl;}
293  if (fPixelSpatialRes[4] > fPixelBoundaries[2].first && fPixelSpatialRes[4] < fPixelBoundaries[2].second) result=true;
294  else { result=false; std::cout << "Pixel broad mean value error: " << fPixelBoundaries[2].first << " < " << fPixelSpatialRes[4] << " < " << fPixelBoundaries[2].second << std::endl;}
295  if (fPixelSpatialRes[5] > fPixelBoundaries[3].first && fPixelSpatialRes[5] < fPixelBoundaries[3].second) result=true;
296  else { result=false; std::cout << "Pixel broad mean value error: " << fPixelBoundaries[3].first << " < " << fPixelSpatialRes[5] << " < " << fPixelBoundaries[3].second << std::endl;}
297  if (fHPixelSingle->GetMean() > fPixelBoundaries[4].first && fHPixelSingle->GetMean() < fPixelBoundaries[4].second) result=true;
298  else { result=false; std::cout << "Single pixel mean value error: " << fPixelBoundaries[4].first << " < " << fHPixelSingle->GetMean() << " < " << fPixelBoundaries[4].second << std::endl;}
299  if (fHPixelSingle->GetRMS() > fPixelBoundaries[5].first && fHPixelSingle->GetRMS() < fPixelBoundaries[5].second) result=true;
300  else { result=false; std::cout << "Single pixel RMS value error: " << fPixelBoundaries[5].first << " < " << fHPixelSingle->GetMean() << " < " << fPixelBoundaries[5].second << std::endl;}
301  if (fHPixelClusterSize->GetMean() > fPixelBoundaries[6].first && fHPixelClusterSize->GetMean() < fPixelBoundaries[6].second) result=true;
302  else { result=false; std::cout << "Pixel cluster size mean error: " << fPixelBoundaries[6].first << " < " << fHPixelClusterSize->GetMean() << " < " << fPixelBoundaries[6].second << std::endl;}
303  if (fHPixelClusterSize->GetRMS() > fPixelBoundaries[7].first && fHPixelClusterSize->GetRMS() < fPixelBoundaries[7].second) result=true;
304  else { result=false; std::cout << "Pixel cluster size sigma error: " << fPixelBoundaries[7].first << " < " << fHPixelClusterSize->GetRMS() << " < " << fPixelBoundaries[7].second << std::endl;}
305  if (fHPixelEnergy->GetMean() > fPixelBoundaries[8].first && fHPixelEnergy->GetMean() < fPixelBoundaries[8].second) result=true;
306  else { result=false; std::cout << "Pixel energy mean error: " << fPixelBoundaries[8].first << " < " << fHPixelEnergy->GetMean() << " < " << fPixelBoundaries[8].second << std::endl;}
307  if (fHPixelEnergy->GetRMS() > fPixelBoundaries[9].first && fHPixelEnergy->GetRMS() < fPixelBoundaries[9].second) result=true;
308  else { result=false; std::cout << "Pixel energy cluster error: " << fPixelBoundaries[9].first << " < " << fHPixelEnergy->GetRMS() << " < " << fPixelBoundaries[9].second << std::endl;}
309  if (fHPixelTime->GetMean() > fPixelBoundaries[10].first && fHPixelTime->GetMean() < fPixelBoundaries[10].second) result=true;
310  else { result=false; std::cout << "Pixel energy mean error: " << fPixelBoundaries[10].first << " < " << fHPixelTime->GetMean() << " < " << fPixelBoundaries[10].second << std::endl;}
311  if (fHPixelTime->GetRMS() > fPixelBoundaries[11].first && fHPixelTime->GetRMS() < fPixelBoundaries[11].second) result=true;
312  else { result=false; std::cout << "Pixel energy cluster error: " << fPixelBoundaries[11].first << " < " << fHPixelTime->GetRMS() << " < " << fPixelBoundaries[11].second << std::endl;}
313 
314  return result;
315 }
316 
318  bool result = false;
319  if (fStripSpatialRes[1] > fStripBoundaries[0].first && fStripSpatialRes[1] < fStripBoundaries[0].second) result=true;
320  else { result=false; std::cout << "Strip small mean value error: " << fStripBoundaries[0].first << " < " << fStripSpatialRes[1] << " < " << fStripBoundaries[0].second << std::endl;}
321  if (fStripSpatialRes[2] > fStripBoundaries[1].first && fStripSpatialRes[2] < fStripBoundaries[1].second) result=true;
322  else { result=false; std::cout << "Strip small sigma value error: " << fStripBoundaries[1].first << " < " << fStripSpatialRes[2] << " < " << fStripBoundaries[1].second << std::endl;}
323  if (fStripSpatialRes[4] > fStripBoundaries[2].first && fStripSpatialRes[4] < fStripBoundaries[2].second) result=true;
324  else { result=false; std::cout << "Strip broad mean value error: " << fStripBoundaries[2].first << " < " << fStripSpatialRes[4] << " < " << fStripBoundaries[2].second << std::endl;}
325  if (fStripSpatialRes[5] > fStripBoundaries[3].first && fStripSpatialRes[5] < fStripBoundaries[3].second) result=true;
326  else { result=false; std::cout << "Strip broad mean value error: " << fStripBoundaries[3].first << " < " << fStripSpatialRes[5] << " < " << fStripBoundaries[3].second << std::endl;}
327  if (fHStripSingle->GetMean() > fStripBoundaries[4].first && fHStripSingle->GetMean() < fStripBoundaries[4].second) result=true;
328  else { result=false; std::cout << "Single Strip mean value error: " << fStripBoundaries[4].first << " < " << fHStripSingle->GetMean() << " < " << fStripBoundaries[4].second << std::endl;}
329  if (fHStripSingle->GetRMS() > fStripBoundaries[5].first && fHStripSingle->GetRMS() < fStripBoundaries[5].second) result=true;
330  else { result=false; std::cout << "Single Strip RMS value error: " << fStripBoundaries[5].first << " < " << fHStripSingle->GetMean() << " < " << fStripBoundaries[5].second << std::endl;}
331  if (fHStripClusterSize->GetMean() > fStripBoundaries[6].first && fHStripClusterSize->GetMean() < fStripBoundaries[6].second) result=true;
332  else { result=false; std::cout << "Strip cluster size mean error: " << fStripBoundaries[6].first << " < " << fHStripClusterSize->GetMean() << " < " << fStripBoundaries[6].second << std::endl;}
333  if (fHStripClusterSize->GetRMS() > fStripBoundaries[7].first && fHStripClusterSize->GetRMS() < fStripBoundaries[7].second) result=true;
334  else { result=false; std::cout << "Strip cluster size sigma error: " << fStripBoundaries[7].first << " < " << fHStripClusterSize->GetRMS() << " < " << fStripBoundaries[7].second << std::endl;}
335  if (fHStripEnergy->GetMean() > fStripBoundaries[8].first && fHStripEnergy->GetMean() < fStripBoundaries[8].second) result=true;
336  else { result=false; std::cout << "Strip energy mean error: " << fStripBoundaries[8].first << " < " << fHStripEnergy->GetMean() << " < " << fStripBoundaries[8].second << std::endl;}
337  if (fHStripEnergy->GetRMS() > fStripBoundaries[9].first && fHStripEnergy->GetRMS() < fStripBoundaries[9].second) result=true;
338  else { result=false; std::cout << "Strip energy cluster error: " << fStripBoundaries[9].first << " < " << fHStripEnergy->GetRMS() << " < " << fStripBoundaries[9].second << std::endl;}
339  if (fHStripTime->GetMean() > fStripBoundaries[10].first && fHStripTime->GetMean() < fStripBoundaries[10].second) result=true;
340  else { result=false; std::cout << "Strip energy mean error: " << fStripBoundaries[10].first << " < " << fHStripTime->GetMean() << " < " << fStripBoundaries[10].second << std::endl;}
341  if (fHStripTime->GetRMS() > fStripBoundaries[11].first && fHStripTime->GetRMS() < fStripBoundaries[11].second) result=true;
342  else { result=false; std::cout << "Strip energy cluster error: " << fStripBoundaries[11].first << " < " << fHStripTime->GetRMS() << " < " << fStripBoundaries[11].second << std::endl;}
343 
344  return result;
345 }
346 
348 {
349  cout << "<DartMeasurement name=\"pixelMean1\" type=\"numeric/double\">" << fPixelSpatialRes[1] << "</DartMeasurement>" << endl;
350  cout << "<DartMeasurement name=\"pixelSigma1\" type=\"numeric/double\">" << fPixelSpatialRes[2] << "</DartMeasurement>" << endl;
351  cout << "<DartMeasurement name=\"pixelMean2\" type=\"numeric/double\">" << fPixelSpatialRes[4] << "</DartMeasurement>" << endl;
352  cout << "<DartMeasurement name=\"pixelSigma2\" type=\"numeric/double\">" << fPixelSpatialRes[5] << "</DartMeasurement>" << endl;
353  cout << "<DartMeasurement name=\"pixelSingleMean\" type=\"numeric/double\">" << fHPixelSingle->GetMean() << "</DartMeasurement>" << endl;
354  cout << "<DartMeasurement name=\"pixelSingleRMS\" type=\"numeric/double\">" << fHPixelSingle->GetRMS() << "</DartMeasurement>" << endl;
355  cout << "<DartMeasurement name=\"pixelClusterMean\" type=\"numeric/double\">" << fHPixelClusterSize->GetMean() << "</DartMeasurement>" << endl;
356  cout << "<DartMeasurement name=\"pixelClusterRMS\" type=\"numeric/double\">" << fHPixelClusterSize->GetRMS() << "</DartMeasurement>" << endl;
357  cout << "<DartMeasurement name=\"pixelEnergyMean\" type=\"numeric/double\">" << fHPixelEnergy->GetMean() << "</DartMeasurement>" << endl;
358  cout << "<DartMeasurement name=\"pixelEnergyRMS\" type=\"numeric/double\">" << fHPixelEnergy->GetRMS() << "</DartMeasurement>" << endl;
359  cout << "<DartMeasurement name=\"pixelTimeMean\" type=\"numeric/double\">" << fHPixelTime->GetMean() << "</DartMeasurement>" << endl;
360  cout << "<DartMeasurement name=\"pixelTimeRMS\" type=\"numeric/double\">" << fHPixelTime->GetRMS() << "</DartMeasurement>" << endl;
361 
362  TString path=fWorkdir;
363  path += "/PixelHistos.png";
364  cout << "<DartMeasurementFile name=\"PixelHistos.png\" type=\"image/png\">" << path.Data()<< "</DartMeasurementFile>" << endl;
365 
366 }
367 
369 {
370  cout << "<DartMeasurement name=\"stripMean1\" type=\"numeric/double\">" << fStripSpatialRes[1] << "</DartMeasurement>" << endl;
371  cout << "<DartMeasurement name=\"stripSigma1\" type=\"numeric/double\">" << fStripSpatialRes[2] << "</DartMeasurement>" << endl;
372  cout << "<DartMeasurement name=\"stripMean2\" type=\"numeric/double\">" << fStripSpatialRes[4] << "</DartMeasurement>" << endl;
373  cout << "<DartMeasurement name=\"stripSigma2\" type=\"numeric/double\">" << fStripSpatialRes[5] << "</DartMeasurement>" << endl;
374  cout << "<DartMeasurement name=\"stripSingleMean\" type=\"numeric/double\">" << fHStripSingle->GetMean() << "</DartMeasurement>" << endl;
375  cout << "<DartMeasurement name=\"stripSingleRMS\" type=\"numeric/double\">" << fHStripSingle->GetRMS() << "</DartMeasurement>" << endl;
376  cout << "<DartMeasurement name=\"stripClusterMean\" type=\"numeric/double\">" << fHStripClusterSize->GetMean() << "</DartMeasurement>" << endl;
377  cout << "<DartMeasurement name=\"stripClusterRMS\" type=\"numeric/double\">" << fHStripClusterSize->GetRMS() << "</DartMeasurement>" << endl;
378  cout << "<DartMeasurement name=\"stripEnergyMean\" type=\"numeric/double\">" << fHStripEnergy->GetMean() << "</DartMeasurement>" << endl;
379  cout << "<DartMeasurement name=\"stripEnergyRMS\" type=\"numeric/double\">" << fHStripEnergy->GetRMS() << "</DartMeasurement>" << endl;
380  cout << "<DartMeasurement name=\"stripTimeMean\" type=\"numeric/double\">" << fHStripTime->GetMean() << "</DartMeasurement>" << endl;
381  cout << "<DartMeasurement name=\"stripTimeRMS\" type=\"numeric/double\">" << fHStripTime->GetRMS() << "</DartMeasurement>" << endl;
382 
383  TString path=fWorkdir;
384  path += "/StripHistos.png";
385  cout << "<DartMeasurementFile name=\"StripHistos.png\" type=\"image/png\">" << path.Data() << "</DartMeasurementFile>" << endl;
386 
387 
388 }
389 
391 
394 
395  DrawPixelHistos();
396  bool testPixel = TestPixel();
398 
399  DrawStripHistos();
400  bool testStrip = TestStrip();
402 
403  if (testPixel && testStrip) {
404  std::cout << " Test passed" << std::endl;
405  std::cout << " All ok " << std::endl;
406  } else {
407  std::cout<<"Something is wrong:"<<endl;
408  std::cout<<"Test of Pixel: "<< ((testPixel) ? "ok" : "bad") <<std::endl;
409  std::cout<<"Test of Strip: "<< ((testStrip) ? "ok" : "bad") <<std::endl;
410  }
411 
412 }
413 
TH1 * fHPixelClusterSize
Definition: PndMvdQATask.h:97
void PrintDartMeasurementStrip()
int fVerbose
Definition: poormantracks.C:24
TH1 * fHStripDouble
Definition: PndMvdQATask.h:88
virtual void FinishTask()
TH1 * fHPixelTime
Definition: PndMvdQATask.h:98
Int_t i
Definition: run_full.C:25
TVector3 GetPosition() const
Definition: PndSdsHit.h:93
PndGeoHandling * fGeoH
Definition: anasim.C:34
TClonesArray * fPixelHits
Definition: PndMvdQATask.h:74
std::vector< double > fStripSpatialRes
Definition: PndMvdQATask.h:83
TH1 * fHPixelEnergy
Definition: PndMvdQATask.h:99
void SetPixelBoundaries()
virtual void SetParContainers()
Double_t par[3]
virtual void Exec(Option_t *opt)
void PrintDartMeasurementPixel()
TVector3 GetPositionOut() const
Definition: PndSdsMCPoint.h:91
std::vector< Double_t > DoubleGaussFit(TH1 *)
TString fWorkdir
Definition: PndMvdQATask.h:77
std::vector< std::pair< double, double > > fStripBoundaries
Definition: PndMvdQATask.h:84
void DrawPixelHistos()
Double_t GetEloss() const
Definition: PndSdsHit.h:97
std::vector< double > fPixelSpatialRes
Definition: PndMvdQATask.h:81
double fEnergyDifference
Definition: PndMvdQATask.h:79
TGeoManager * gGeoManager
Int_t GetSensorID() const
Definition: PndSdsMCPoint.h:89
TH1 * fHStripSingle
Definition: PndMvdQATask.h:87
ClassImp(PndMvdQATask)
void CalculateDifference(PndSdsHit *hit)
TH1 * fHPixelDouble
Definition: PndMvdQATask.h:95
Double_t
TH1 * fHStripTime
Definition: PndMvdQATask.h:91
TClonesArray * point
Definition: anaLmdDigi.C:29
TClonesArray * fStripHits
Definition: PndMvdQATask.h:73
TF1 * g2
Definition: anaLmdReco.C:159
TF1 * total
void SetStripBoundaries()
void DrawStripHistos()
static PndGeoHandling * Instance()
TVector3 MasterToLocalShortId(const TVector3 &master, const Int_t &shortId)
TClonesArray * fMcPoints
Definition: PndMvdQATask.h:72
double fTimeDifference
Definition: PndMvdQATask.h:78
TVector3 GetPosition() const
Definition: PndSdsMCPoint.h:90
TCanvas * can2
TH1 * fHStripClusterSize
Definition: PndMvdQATask.h:90
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
Definition: hit.C:1
TH1 * fHStripEnergy
Definition: PndMvdQATask.h:92
virtual ~PndMvdQATask()
virtual InitStatus Init()
TH1 * fHPixelSingle
Definition: PndMvdQATask.h:94
TVector3 fSpatialDifference
Definition: PndMvdQATask.h:76
PndGeoHandling * fGeoH
Definition: PndMvdQATask.h:71
TCanvas * can1
Int_t GetSensorID() const
Definition: PndSdsHit.h:90
TH1 * fHPixelAll
Definition: PndMvdQATask.h:96
Bool_t fProperDifference
if method CalculateDifference worked
Definition: PndMvdQATask.h:75
virtual void Print(const Option_t *opt=0) const
std::vector< std::pair< double, double > > fPixelBoundaries
Definition: PndMvdQATask.h:82
TH1 * fHStripAll
Definition: PndMvdQATask.h:89
virtual void SetParContainers()