60 int main(
int argc,
char* argv[])
63 TString OutputDirectory =
"";
64 if (OutputDirectory ==
"") {
65 std::cout <<
"Error set ouput directory" << std::endl;
70 int Flag = atoi(argv[1]);
71 TString InputDirectory = OutputDirectory;
73 TString ParameterTreeOutputName = OutputDirectory +
"PhotonWaveformParameters.root";
74 if (Flag == 1) ParameterTreeOutputName =
"DigitWaveformParameters.root";
75 TFile* ParameterTreeOutputFile =
new TFile(ParameterTreeOutputName,
"RECREATE");
77 TTree* ParameterTree =
new TTree(
"ParTree",
"");
78 double PhotonWaveformPar[11];
79 double HadronWaveformPar[11];
80 double DiodeWaveformPar[11];
81 for (
int k = 0; k < 11; k++) {
82 PhotonWaveformPar[k] = 0;
83 HadronWaveformPar[k] = 0;
84 DiodeWaveformPar[k] = 0;
86 double mHadronRes = 0;
88 double mHadronMax = 0;
90 ParameterTree->Branch(
"PhotonPar", &PhotonWaveformPar,
"PhotonWaveformPar[11]/D");
91 ParameterTree->Branch(
"HadronPar", &HadronWaveformPar,
"HadronWaveformPar[11]/D");
92 ParameterTree->Branch(
"DiodePar", &DiodeWaveformPar,
"DiodeWaveformPar[11]/D");
93 ParameterTree->Branch(
"mHadronRes", &mHadronRes,
"mHadronRes/D");
94 ParameterTree->Branch(
"mDiodeRes", &mDiodeRes,
"mDiodeRes/D");
95 ParameterTree->Branch(
"mHadronMax", &mHadronMax,
"mHadronMax/D");
96 ParameterTree->Branch(
"mDiodeMax", &mDiodeMax,
"mDiodeMax/D");
98 std::vector<crystalInfo> cellIDcheck(8736);
99 ifstream PhotonFile(
"/home/belle2/longos/WaveformFitting/ecl/tools/params_gamma_shape.dat");
100 if (PhotonFile.is_open()) {
101 std::vector<double> templine(12);
102 for (
int k = 0; k < 8736; k++) {
103 for (
unsigned int j = 0; j < templine.size(); j++) PhotonFile >> templine[j];
104 cellIDcheck[int(templine[0]) - 1].PhotonWaveformPars.resize(11);
105 cellIDcheck[int(templine[0]) - 1].PhotonWaveformPars[0] = templine[1];
106 for (
int j = 0; j < 10; j++) cellIDcheck[
int(templine[0]) - 1].PhotonWaveformPars[j + 1] = templine[j + 2];
107 std::cout << int(templine[0]) <<
" " << templine[1] << endl;
111 std::cout <<
"ERROR cannont open photon param file." << endl;
115 for (
unsigned int f = 0; f < cellIDcheck.size(); f++) {
116 for (
int k = 0; k < 11; k++) PhotonWaveformPar[k] = cellIDcheck[f].PhotonWaveformPars[k];
117 ParameterTree->Fill();
119 }
else if (Flag == 1) {
121 for (
int k = 0; k < 874; k++) {
123 int high = (k + 1) * batch;
125 TFile* TempFile =
new TFile(InputDirectory + Form(
"HadronPars_Low%d_High%d.root", low, high),
"READ");
126 TTree* TempTree = (TTree*) TempFile->Get(
"HadronWaveformInfo");
127 double tHadronShapePars_A[11];
128 double tDiodeShapePars_A[11];
129 double tMaxResidualHadron_A;
130 double tMaxResidualDiode_A;
131 double tMaxValDiode_A;
132 double tMaxValHadron_A;
133 TempTree->SetBranchAddress(
"TempHadronPar11_A", &tHadronShapePars_A);
134 TempTree->SetBranchAddress(
"TempDiodePar11_A", &tDiodeShapePars_A);
135 TempTree->SetBranchAddress(
"MaxResHadron_A", &tMaxResidualHadron_A);
136 TempTree->SetBranchAddress(
"MaxResDiode_A", &tMaxResidualDiode_A);
137 TempTree->SetBranchAddress(
"MaxValDiode_A", &tMaxValDiode_A);
138 TempTree->SetBranchAddress(
"MaxValHadron_A", &tMaxValHadron_A);
140 for (
int j = 0; j < batch; j++) {
141 int tCellID = (k * batch) + j;
142 if (tCellID >= 8736)
continue;
143 TempTree->GetEntry(j);
144 cellIDcheck[tCellID].HadronWaveformPars.resize(11);
145 cellIDcheck[tCellID].DiodeWaveformPars.resize(11);
146 for (
int p = 0; p < 11; p++) {
147 if (tHadronShapePars_A[p] > 100 || tHadronShapePars_A[p] < -100) {
148 std::cout <<
"Warning large parameter for: " << tCellID <<
" " << tHadronShapePars_A[p] << std::endl;
149 for (
int h = 0; h < 11; h++)std::cout << tHadronShapePars_A[h] <<
" , ";
150 std::cout << std::endl;
152 cellIDcheck[tCellID].HadronWaveformPars[p] = tHadronShapePars_A[p];
157 cellIDcheck[tCellID].MaxResHadron = tMaxResidualHadron_A;
158 cellIDcheck[tCellID].MaxValHadron = tMaxValHadron_A;
159 for (
int p = 0; p < 11; p++) cellIDcheck[tCellID].DiodeWaveformPars[p] = tDiodeShapePars_A[p];
160 cellIDcheck[tCellID].MaxResDiode = tMaxResidualDiode_A;
161 cellIDcheck[tCellID].MaxValDiode = tMaxValDiode_A;
166 for (
unsigned int f = 0; f < 8736; f++) {
167 for (
int k = 0; k < 11; k++) {
168 PhotonWaveformPar[k] = cellIDcheck[f].PhotonWaveformPars[k];
169 HadronWaveformPar[k] = cellIDcheck[f].HadronWaveformPars[k];
170 DiodeWaveformPar[k] = cellIDcheck[f].DiodeWaveformPars[k];
172 mHadronRes = cellIDcheck[f].MaxResHadron;
173 mDiodeRes = cellIDcheck[f].MaxResDiode;
174 mHadronMax = cellIDcheck[f].MaxValHadron;
175 mDiodeMax = cellIDcheck[f].MaxValDiode;
176 ParameterTree->Fill();
180 ParameterTreeOutputFile->cd();
181 ParameterTree->Write();
182 ParameterTreeOutputFile->Write();
183 ParameterTreeOutputFile->Close();
a struct to hold relavent Crystal information
vector< double > PhotonWaveformPars
photon waveform parameters
vector< double > HadronWaveformPars
hadron waveform parameters
vector< double > DiodeWaveformPars
diode waveform parameters
int main(int argc, char **argv)
Run all tests.