64 int main(
int argc,
char* argv[])
67 TString OutputDirectory =
"";
68 if (OutputDirectory ==
"") {
69 std::cout <<
"Error set ouput directory" << std::endl;
74 int Flag = atoi(argv[1]);
75 TString InputDirectory = OutputDirectory;
77 TString ParameterTreeOutputName = OutputDirectory +
"PhotonWaveformParameters.root";
78 if (Flag == 1) ParameterTreeOutputName =
"DigitWaveformParameters.root";
79 TFile* ParameterTreeOutputFile =
new TFile(ParameterTreeOutputName,
"RECREATE");
81 TTree* ParameterTree =
new TTree(
"ParTree",
"");
82 double PhotonWaveformPar[11];
83 double HadronWaveformPar[11];
84 double DiodeWaveformPar[11];
85 for (
int k = 0; k < 11; k++) {
86 PhotonWaveformPar[k] = 0;
87 HadronWaveformPar[k] = 0;
88 DiodeWaveformPar[k] = 0;
90 double mHadronRes = 0;
92 double mHadronMax = 0;
94 ParameterTree->Branch(
"PhotonPar", &PhotonWaveformPar,
"PhotonWaveformPar[11]/D");
95 ParameterTree->Branch(
"HadronPar", &HadronWaveformPar,
"HadronWaveformPar[11]/D");
96 ParameterTree->Branch(
"DiodePar", &DiodeWaveformPar,
"DiodeWaveformPar[11]/D");
97 ParameterTree->Branch(
"mHadronRes", &mHadronRes,
"mHadronRes/D");
98 ParameterTree->Branch(
"mDiodeRes", &mDiodeRes,
"mDiodeRes/D");
99 ParameterTree->Branch(
"mHadronMax", &mHadronMax,
"mHadronMax/D");
100 ParameterTree->Branch(
"mDiodeMax", &mDiodeMax,
"mDiodeMax/D");
102 std::vector<crystalInfo> cellIDcheck(8736);
103 ifstream PhotonFile(
"/home/belle2/longos/WaveformFitting/ecl/tools/params_gamma_shape.dat");
104 if (PhotonFile.is_open()) {
105 std::vector<double> templine(12);
106 for (
int k = 0; k < 8736; k++) {
107 for (
unsigned int j = 0; j < templine.size(); j++) PhotonFile >> templine[j];
108 cellIDcheck[int(templine[0]) - 1].PhotonWaveformPars.resize(11);
109 cellIDcheck[int(templine[0]) - 1].PhotonWaveformPars[0] = templine[1];
110 for (
int j = 0; j < 10; j++) cellIDcheck[
int(templine[0]) - 1].PhotonWaveformPars[j + 1] = templine[j + 2];
111 std::cout << int(templine[0]) <<
" " << templine[1] << endl;
115 std::cout <<
"ERROR cannont open photon param file." << endl;
119 for (
unsigned int f = 0; f < cellIDcheck.size(); f++) {
120 for (
int k = 0; k < 11; k++) PhotonWaveformPar[k] = cellIDcheck[f].PhotonWaveformPars[k];
121 ParameterTree->Fill();
123 }
else if (Flag == 1) {
125 for (
int k = 0; k < 874; k++) {
127 int high = (k + 1) * batch;
129 TFile* TempFile =
new TFile(InputDirectory + Form(
"HadronPars_Low%d_High%d.root", low, high),
"READ");
130 TTree* TempTree = (TTree*) TempFile->Get(
"HadronWaveformInfo");
131 double tHadronShapePars_A[11];
132 double tDiodeShapePars_A[11];
133 double tMaxResidualHadron_A;
134 double tMaxResidualDiode_A;
135 double tMaxValDiode_A;
136 double tMaxValHadron_A;
137 TempTree->SetBranchAddress(
"TempHadronPar11_A", &tHadronShapePars_A);
138 TempTree->SetBranchAddress(
"TempDiodePar11_A", &tDiodeShapePars_A);
139 TempTree->SetBranchAddress(
"MaxResHadron_A", &tMaxResidualHadron_A);
140 TempTree->SetBranchAddress(
"MaxResDiode_A", &tMaxResidualDiode_A);
141 TempTree->SetBranchAddress(
"MaxValDiode_A", &tMaxValDiode_A);
142 TempTree->SetBranchAddress(
"MaxValHadron_A", &tMaxValHadron_A);
144 for (
int j = 0; j < batch; j++) {
145 int tCellID = (k * batch) + j;
146 if (tCellID >= 8736)
continue;
147 TempTree->GetEntry(j);
148 cellIDcheck[tCellID].HadronWaveformPars.resize(11);
149 cellIDcheck[tCellID].DiodeWaveformPars.resize(11);
150 for (
int p = 0; p < 11; p++) {
151 if (tHadronShapePars_A[p] > 100 || tHadronShapePars_A[p] < -100) {
152 std::cout <<
"Warning large parameter for: " << tCellID <<
" " << tHadronShapePars_A[p] << std::endl;
153 for (
int h = 0; h < 11; h++)std::cout << tHadronShapePars_A[h] <<
" , ";
154 std::cout << std::endl;
156 cellIDcheck[tCellID].HadronWaveformPars[p] = tHadronShapePars_A[p];
161 cellIDcheck[tCellID].MaxResHadron = tMaxResidualHadron_A;
162 cellIDcheck[tCellID].MaxValHadron = tMaxValHadron_A;
163 for (
int p = 0; p < 11; p++) cellIDcheck[tCellID].DiodeWaveformPars[p] = tDiodeShapePars_A[p];
164 cellIDcheck[tCellID].MaxResDiode = tMaxResidualDiode_A;
165 cellIDcheck[tCellID].MaxValDiode = tMaxValDiode_A;
170 for (
unsigned int f = 0; f < 8736; f++) {
171 for (
int k = 0; k < 11; k++) {
172 PhotonWaveformPar[k] = cellIDcheck[f].PhotonWaveformPars[k];
173 HadronWaveformPar[k] = cellIDcheck[f].HadronWaveformPars[k];
174 DiodeWaveformPar[k] = cellIDcheck[f].DiodeWaveformPars[k];
176 mHadronRes = cellIDcheck[f].MaxResHadron;
177 mDiodeRes = cellIDcheck[f].MaxResDiode;
178 mHadronMax = cellIDcheck[f].MaxValHadron;
179 mDiodeMax = cellIDcheck[f].MaxValDiode;
180 ParameterTree->Fill();
184 ParameterTreeOutputFile->cd();
185 ParameterTree->Write();
186 ParameterTreeOutputFile->Write();
187 ParameterTreeOutputFile->Close();