10 #include "TClonesArray.h"
11 #include "TGeoManager.h"
18 #include "FairRootManager.h"
21 #include "FairRuntimeDb.h"
22 #include "../pnddata/PndMCTrack.h"
48 std::cout <<
"PndMvdQATask::Init()" << std::endl;
50 FairRootManager* ioman = FairRootManager::Instance();
52 std::cout <<
"-E- PndMvdQATask::Init: " <<
"RootManager not instantiated!" << std::endl;
57 fMcPoints = (TClonesArray*) ioman->GetObject(
"MVDPoint");
59 std::cout <<
"-W- PndMvdQATask::Init: "<<
"No PndSdsMCPoint array!" << std::endl;
64 fPixelHits = (TClonesArray*) ioman->GetObject(
"MVDHitsPixel");
66 std::cout <<
"-W- PndMvdQATask::Init: "<<
"No MVDHitsPixel array!" << std::endl;
71 fStripHits = (TClonesArray*) ioman->GetObject(
"MVDHitsStrip");
73 std::cout <<
"-W- PndMvdQATask::Init: "<<
"No MVDHitsStrip array!" << std::endl;
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);
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);
97 std::cout <<
"PndMvdQATask::Init() finished" << std::endl;
113 std::cout <<
"PndMvdQATask::SetParContainers() finished" << std::endl;
120 for(
int pixIndex = 0; pixIndex <
fPixelHits->GetEntriesFast(); pixIndex++){
127 if (myHit->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"MVDPixelDigis")).GetNLinks() == 1){
132 fHPixelClusterSize->Fill(myHit->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"MVDPixelDigis")).GetNLinks());
136 for(
int strIndex = 0; strIndex <
fStripHits->GetEntriesFast(); strIndex++){
143 if (myHit->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"MVDStripDigis")).GetNLinks() == 2){
148 fHStripClusterSize->Fill(myHit->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"MVDStripDigis")).GetNLinks());
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){
199 if (point !=
nullptr){
207 std::cout <<
"Hit: " << *hit << std::endl;
208 std::cout <<
"McPoint: " << *point << std::endl;
209 std::cout <<
"MCMaster: ";
211 std::cout <<
" MCLocal ";
213 std::cout << std::endl;
214 std::cout <<
"hitLocal: ";
216 std::cout <<
" Difference: ";
218 std::cout << std::endl;
230 Double_t par[6] = { 0., 0., 0.0005, 0., 0., 0.002 };
232 TF1*
g2 =
new TF1(
"g2",
"gaus", -0.002, 0.002);
233 hisDiff->Fit(g2,
"RQ");
234 g2->GetParameters(&par[0]);
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]);
252 TCanvas*
can1 =
new TCanvas(
"MvdResPlotPixel",
"MVD point resolution pixel");
266 can1->SaveAs(
"PixelHistos.png");
270 TCanvas*
can2 =
new TCanvas(
"MvdResPlotStrip",
"MVD point resolution strip");
284 can2->SaveAs(
"StripHistos.png");
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;
363 path +=
"/PixelHistos.png";
364 cout <<
"<DartMeasurementFile name=\"PixelHistos.png\" type=\"image/png\">" << path.Data()<<
"</DartMeasurementFile>" << endl;
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;
384 path +=
"/StripHistos.png";
385 cout <<
"<DartMeasurementFile name=\"StripHistos.png\" type=\"image/png\">" << path.Data() <<
"</DartMeasurementFile>" << endl;
403 if (testPixel && testStrip) {
404 std::cout <<
" Test passed" << std::endl;
405 std::cout <<
" All ok " << std::endl;
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;
void PrintDartMeasurementStrip()
virtual void FinishTask()
TVector3 GetPosition() const
TClonesArray * fPixelHits
std::vector< double > fStripSpatialRes
void SetPixelBoundaries()
virtual void SetParContainers()
virtual void Exec(Option_t *opt)
void PrintDartMeasurementPixel()
TVector3 GetPositionOut() const
std::vector< Double_t > DoubleGaussFit(TH1 *)
std::vector< std::pair< double, double > > fStripBoundaries
Double_t GetEloss() const
std::vector< double > fPixelSpatialRes
TGeoManager * gGeoManager
Int_t GetSensorID() const
void CalculateDifference(PndSdsHit *hit)
TClonesArray * fStripHits
void SetStripBoundaries()
static PndGeoHandling * Instance()
TVector3 MasterToLocalShortId(const TVector3 &master, const Int_t &shortId)
TVector3 GetPosition() const
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)
virtual InitStatus Init()
TVector3 fSpatialDifference
Int_t GetSensorID() const
Bool_t fProperDifference
if method CalculateDifference worked
virtual void Print(const Option_t *opt=0) const
std::vector< std::pair< double, double > > fPixelBoundaries
virtual void SetParContainers()