Belle II Software  release-08-01-10
eclWaveformTemplateCalibrationC3Algorithm.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/eclWaveformTemplateCalibrationC3Algorithm.h>
11 
12 /* ECL headers. */
13 #include <ecl/dataobjects/ECLElementNumbers.h>
14 #include <ecl/dbobjects/ECLDigitWaveformParameters.h>
15 
16 /* ROOT headers. */
17 #include <TFile.h>
18 #include <TTree.h>
19 
20 /* C++ headers. */
21 #include <cstdlib>
22 
23 using namespace std;
24 using namespace Belle2;
25 using namespace ECL;
26 
28 eclWaveformTemplateCalibrationC3Algorithm::eclWaveformTemplateCalibrationC3Algorithm():
29  CalibrationAlgorithm("eclWaveformTemplateCalibrationC2Collector")
30 {
32  "Perform the hadron and diode template shape calibration using photon template shapes from stage C2"
33  );
34 }
35 
37 {
38 
39  B2INFO("RUNNING" << Form("eclComputePulseTemplates_Step2.py %d %d", (m_firstCellID), (m_lastCellID)));
40  system(Form("eclComputePulseTemplates_Step2.py %d %d", (m_firstCellID), (m_lastCellID)));
41 
42  B2INFO("RUNNING " << Form("eclComputePulseTemplates_Step3 %d %d", m_firstCellID, m_lastCellID));
43  system(Form("eclComputePulseTemplates_Step3 %d %d", m_firstCellID, m_lastCellID));
44 
45  //save to db
46  ECLDigitWaveformParameters* HadronDiodeParameters = new ECLDigitWaveformParameters();
47 
48  TFile* TempFile = new TFile(Form("HadronPars_Low%d_High%d.root", m_firstCellID, m_lastCellID), "READ");
49  TTree* TempTree = (TTree*) TempFile->Get("HadronWaveformInfo");
50  double tHadronShapePars_A[11];
51  double tDiodeShapePars_A[11];
52  double tMaxResidualHadron_A;
53  double tMaxResidualDiode_A;
54  double tMaxValDiode_A;
55  double tMaxValHadron_A;
56  TempTree->SetBranchAddress("TempHadronPar11_A", &tHadronShapePars_A);
57  TempTree->SetBranchAddress("TempDiodePar11_A", &tDiodeShapePars_A);
58  TempTree->SetBranchAddress("MaxResHadron_A", &tMaxResidualHadron_A);
59  TempTree->SetBranchAddress("MaxResDiode_A", &tMaxResidualDiode_A);
60  TempTree->SetBranchAddress("MaxValDiode_A", &tMaxValDiode_A);
61  TempTree->SetBranchAddress("MaxValHadron_A", &tMaxValHadron_A);
62 
63  int batch = m_lastCellID - m_firstCellID;
64  for (int j = 0; j <= batch; j++) {
65  int tCellID = m_firstCellID + j;
66  if (tCellID > ECLElementNumbers::c_NCrystals)continue;
67  B2INFO("tCellID=" << tCellID << " j=" << j);
68  TempTree->GetEntry(j);
69  float tHadronShapePars_float[11];
70  float tDiodeShapePars_float[11];
71  for (int p = 0; p < 11; p++) {
72 
73  if (tHadronShapePars_A[p] > 100 || tHadronShapePars_A[p] < -100) {
74  B2INFO("Warning large parameter for: " << tCellID << " " << tHadronShapePars_A[p]);
75  for (int h = 0; h < 11; h++) B2INFO(tHadronShapePars_A[h]);
76  }
77 
78  tHadronShapePars_float[p] = (float)tHadronShapePars_A[p];
79  tDiodeShapePars_float[p] = (float)tDiodeShapePars_A[p];
80 
81  }
82 
83  B2INFO("tCellID tHadronShapePars_float[0]" << tCellID << " " << tHadronShapePars_float[0]);
84 
85  HadronDiodeParameters->setTemplateParameters(tCellID, tHadronShapePars_float, tHadronShapePars_float, tDiodeShapePars_float);
86  }
87  TempFile->Close();
88 
89  saveCalibration(HadronDiodeParameters, Form("HadronDiodeParameters_CellID%d_CellID%d", m_firstCellID, m_lastCellID));
90  return c_OK;
91 }
92 
Base class for calibration algorithms.
void saveCalibration(TClonesArray *data, const std::string &name)
Store DBArray payload with given name with default IOV.
void setDescription(const std::string &description)
Set algorithm description (in constructor)
EResult
The result of calibration.
@ c_OK
Finished successfuly =0 in Python.
DB object to store photon, hadron and diode shape parameters.
void setTemplateParameters(int cellID, const float photonInput[11], const float hadronInput[11], const float diodeInput[11])
Set photon, hadron and diode template parameters for crystal.
const int c_NCrystals
Number of crystals.
Abstract base class for different kinds of events.