Belle II Software  release-08-00-10
eclAutocovarianceCalibrationC4Algorithm.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 /* Own header. */
10 #include <ecl/calibration/eclAutocovarianceCalibrationC4Algorithm.h>
11 
12 /* ECL headers. */
13 #include <ecl/dataobjects/ECLElementNumbers.h>
14 #include <ecl/dbobjects/ECLCrystalCalib.h>
15 
16 #include <framework/database/DBImportObjPtr.h>
17 #include <ecl/dbobjects/ECLAutoCovariance.h>
18 
19 /* ROOT headers. */
20 #include <TFile.h>
21 #include <TGraph.h>
22 #include <TH2.h>
23 
24 using namespace Belle2;
25 using namespace ECL;
26 
29  CalibrationAlgorithm("eclAutocovarianceCalibrationC4Collector")
30 {
32  "Perform validation of coveriance matrix calibration"
33  );
34 }
35 
37 {
38 
39 
41  gROOT->SetBatch();
42 
45  auto Chi2VsCrysID = getObjectPtr<TH2F>("Chi2VsCrysID");
46 
47  std::vector<double> cryIDs;
48  std::vector<double> means;
49  std::vector<double> RMSs;
50  std::vector<double> counts;
51 
52  for (int crysID = 0; crysID < ECLElementNumbers::c_NCrystals; crysID++) {
53 
54  TH1F* hChi2 = (TH1F*)Chi2VsCrysID->ProjectionY("hChi2", crysID + 1, crysID + 1);
55 
56  int totalCounts = hChi2->GetEntries();
57 
58  if (totalCounts < m_minEntries) {
59  B2INFO("eclAutocovarianceCalibrationC4Algorithm: Warning Below Count Limit: crysID totalCounts m_minEntries: " << crysID << " " <<
60  totalCounts << " " << m_minEntries);
61  }
62 
63  float mean = hChi2->GetMean();
64 
65  cryIDs.push_back(crysID + 1);
66  means.push_back(mean);
67  RMSs.push_back(hChi2->GetRMS());
68  counts.push_back(totalCounts);
69 
70  }
71 
73  auto gMeanVsCrysID = new TGraph(cryIDs.size(), cryIDs.data(), means.data());
74  gMeanVsCrysID->SetName("gMeanVsCrysID");
75  gMeanVsCrysID->SetMarkerStyle(20);
76  auto gRMSVsCrysID = new TGraph(cryIDs.size(), cryIDs.data(), RMSs.data());
77  gRMSVsCrysID->SetName("gRMSVsCrysID");
78  gRMSVsCrysID->SetMarkerStyle(20);
79  auto gCountsVsCrysID = new TGraph(cryIDs.size(), cryIDs.data(), counts.data());
80  gCountsVsCrysID->SetName("gCountsVsCrysID");
81  gCountsVsCrysID->SetMarkerStyle(20);
82 
84  TString fName = m_outputName;
85  TDirectory::TContext context;
86  TFile* histfile = new TFile(fName, "recreate");
87  histfile->cd();
88  gMeanVsCrysID->Write();
89  gRMSVsCrysID->Write();
90  gCountsVsCrysID->Write();
91  Chi2VsCrysID->Write();
92  histfile->Close();
93  delete histfile;
94 
95  return c_OK;
96 }
Base class for calibration algorithms.
void setDescription(const std::string &description)
Set algorithm description (in constructor)
EResult
The result of calibration.
@ c_OK
Finished successfuly =0 in Python.
virtual EResult calibrate() override
..Run algorithm on events
const int c_NCrystals
Number of crystals.
Abstract base class for different kinds of events.