10#include <ecl/dataobjects/ECLElementNumbers.h>
68int main(
int argc,
char* argv[])
71 TString OutputDirectory =
".";
72 if (OutputDirectory ==
"") {
73 std::cout <<
"Error set output directory" << std::endl;
78 int Flag = atoi(argv[1]);
79 TString InputDirectory = OutputDirectory;
81 TString ParameterTreeOutputName = OutputDirectory +
"PhotonWaveformParameters.root";
82 if (Flag == 1) ParameterTreeOutputName =
"DigitWaveformParameters.root";
83 TFile* ParameterTreeOutputFile =
new TFile(ParameterTreeOutputName,
"RECREATE");
85 TTree* ParameterTree =
new TTree(
"ParTree",
"");
86 double PhotonWaveformPar[11];
87 double HadronWaveformPar[11];
88 double DiodeWaveformPar[11];
89 for (
int k = 0; k < 11; k++) {
90 PhotonWaveformPar[k] = 0;
91 HadronWaveformPar[k] = 0;
92 DiodeWaveformPar[k] = 0;
94 double mHadronRes = 0;
96 double mHadronMax = 0;
98 ParameterTree->Branch(
"PhotonPar", &PhotonWaveformPar,
"PhotonWaveformPar[11]/D");
99 ParameterTree->Branch(
"HadronPar", &HadronWaveformPar,
"HadronWaveformPar[11]/D");
100 ParameterTree->Branch(
"DiodePar", &DiodeWaveformPar,
"DiodeWaveformPar[11]/D");
101 ParameterTree->Branch(
"mHadronRes", &mHadronRes,
"mHadronRes/D");
102 ParameterTree->Branch(
"mDiodeRes", &mDiodeRes,
"mDiodeRes/D");
103 ParameterTree->Branch(
"mHadronMax", &mHadronMax,
"mHadronMax/D");
104 ParameterTree->Branch(
"mDiodeMax", &mDiodeMax,
"mDiodeMax/D");
107 ifstream PhotonFile(
"/home/belle2/longos/WaveformFitting/ecl/tools/params_gamma_shape.dat");
108 if (PhotonFile.is_open()) {
109 std::vector<double> templine(12);
111 for (
unsigned int j = 0; j < templine.size(); j++) PhotonFile >> templine[j];
112 cellIDcheck[int(templine[0]) - 1].PhotonWaveformPars.resize(11);
113 cellIDcheck[int(templine[0]) - 1].PhotonWaveformPars[0] = templine[1];
114 for (
int j = 0; j < 10; j++) cellIDcheck[
int(templine[0]) - 1].PhotonWaveformPars[j + 1] = templine[j + 2];
115 std::cout << int(templine[0]) <<
" " << templine[1] << endl;
119 std::cout <<
"ERROR cannot open photon param file." << endl;
123 for (
unsigned int f = 0; f < cellIDcheck.size(); f++) {
124 for (
int k = 0; k < 11; k++) PhotonWaveformPar[k] = cellIDcheck[f].PhotonWaveformPars[k];
125 ParameterTree->Fill();
127 }
else if (Flag == 1) {
129 for (
int k = 0; k < 874; k++) {
131 int high = (k + 1) * batch;
133 TFile* TempFile =
new TFile(InputDirectory + Form(
"HadronPars_Low%d_High%d.root", low, high),
"READ");
134 TTree* TempTree =
static_cast<TTree*
>(TempFile->Get(
"HadronWaveformInfo"));
135 double tHadronShapePars_A[11];
136 double tDiodeShapePars_A[11];
137 double tMaxResidualHadron_A;
138 double tMaxResidualDiode_A;
139 double tMaxValDiode_A;
140 double tMaxValHadron_A;
141 TempTree->SetBranchAddress(
"TempHadronPar11_A", &tHadronShapePars_A);
142 TempTree->SetBranchAddress(
"TempDiodePar11_A", &tDiodeShapePars_A);
143 TempTree->SetBranchAddress(
"MaxResHadron_A", &tMaxResidualHadron_A);
144 TempTree->SetBranchAddress(
"MaxResDiode_A", &tMaxResidualDiode_A);
145 TempTree->SetBranchAddress(
"MaxValDiode_A", &tMaxValDiode_A);
146 TempTree->SetBranchAddress(
"MaxValHadron_A", &tMaxValHadron_A);
148 for (
int j = 0; j < batch; j++) {
149 int tCellID = (k * batch) + j;
151 TempTree->GetEntry(j);
152 cellIDcheck[tCellID].HadronWaveformPars.resize(11);
153 cellIDcheck[tCellID].DiodeWaveformPars.resize(11);
154 for (
int p = 0; p < 11; p++) {
155 if (tHadronShapePars_A[p] > 100 || tHadronShapePars_A[p] < -100) {
156 std::cout <<
"Warning large parameter for: " << tCellID <<
" " << tHadronShapePars_A[p] << std::endl;
157 for (
int h = 0; h < 11; h++)std::cout << tHadronShapePars_A[h] <<
" , ";
158 std::cout << std::endl;
160 cellIDcheck[tCellID].HadronWaveformPars[p] = tHadronShapePars_A[p];
165 cellIDcheck[tCellID].MaxResHadron = tMaxResidualHadron_A;
166 cellIDcheck[tCellID].MaxValHadron = tMaxValHadron_A;
167 for (
int p = 0; p < 11; p++) cellIDcheck[tCellID].DiodeWaveformPars[p] = tDiodeShapePars_A[p];
168 cellIDcheck[tCellID].MaxResDiode = tMaxResidualDiode_A;
169 cellIDcheck[tCellID].MaxValDiode = tMaxValDiode_A;
175 for (
int k = 0; k < 11; k++) {
176 PhotonWaveformPar[k] = cellIDcheck[f].PhotonWaveformPars[k];
177 HadronWaveformPar[k] = cellIDcheck[f].HadronWaveformPars[k];
178 DiodeWaveformPar[k] = cellIDcheck[f].DiodeWaveformPars[k];
180 mHadronRes = cellIDcheck[f].MaxResHadron;
181 mDiodeRes = cellIDcheck[f].MaxResDiode;
182 mHadronMax = cellIDcheck[f].MaxValHadron;
183 mDiodeMax = cellIDcheck[f].MaxValDiode;
184 ParameterTree->Fill();
188 ParameterTreeOutputFile->cd();
189 ParameterTree->Write();
190 ParameterTreeOutputFile->Write();
191 ParameterTreeOutputFile->Close();
const int c_NCrystals
Number of crystals.
Abstract base class for different kinds of events.
a struct to hold relevant Crystal information
vector< double > PhotonWaveformPars
photon waveform parameters
vector< double > HadronWaveformPars
hadron waveform parameters
vector< double > DiodeWaveformPars
diode waveform parameters