84 adcProfIncl = std::make_unique<TProfile>(
"adcProfIncl",
"adcProfIncl", 30, -0.5, 29.5);
86 adcProfDet[iDet] = std::make_unique<TProfile>(Form(
"adcProfDet_%i", iDet), Form(
"adcProfDet_%i", iDet), 30, -0.5, 29.5);
92 double mParamsStart[4];
93 mParamsStart[0] = 100;
94 mParamsStart[1] = 500;
95 mParamsStart[2] = 0.5;
96 mParamsStart[3] = 0.5;
100 ROOT::Math::MinimizerOptions opt;
101 opt.SetMinimizerType(
"Minuit2");
102 opt.SetMinimizerAlgorithm(
"Migrad");
103 opt.SetPrintLevel(0);
104 opt.SetMaxFunctionCalls(1000);
105 opt.SetTolerance(.001);
106 mFitter.Config().SetMinimizerOptions(opt);
108 mFuncErfLandau = std::make_unique<TF1>(
109 "fErfLandau", [&](
double*
x,
double* par) {
return par[0] * TMath::Erf(
x[0]) + par[1] * TMath::Landau(
x[0], par[2], par[3]); }, mFitFunctor.
lowerBoundFit, mFitFunctor.
upperBoundFit, 4);
113 mOutTree->Branch(
"t0_chambers", &t0_chambers);
114 mOutTree->Branch(
"t0_average", &t0_average);
131 for (
int iEntry = 0; iEntry < dataPH->getNEntries(); ++iEntry) {
132 int iDet = dataPH->getDetector(iEntry);
133 adcProfIncl->Fill(dataPH->getTimeBin(iEntry), dataPH->getADC(iEntry));
134 adcProfDet[iDet]->Fill(dataPH->getTimeBin(iEntry), dataPH->getADC(iEntry));
139 mFitFunctor.
x.clear();
140 mFitFunctor.
y.clear();
141 for (
int i = 1;
i <= 30; ++
i) {
142 mFitFunctor.
x.push_back(
i - 1);
143 mFitFunctor.
y.push_back(adcProfIncl->GetBinContent(
i));
147 auto fitResult = mFitter.Result();
149 if (fitResult.IsValid()) {
150 mFuncErfLandau->SetParameters(fitResult.GetParams()[0], fitResult.GetParams()[1], fitResult.GetParams()[2], fitResult.GetParams()[3]);
151 t0_average = mFuncErfLandau->GetMaximumX();
153 LOG(warn) <<
"t0 fit for inclusive distribtion is not valid, set to " << mDummyT0;
154 t0_average = mDummyT0;
160 LOG(info) <<
"not enough entries in chamber " << iDet <<
" for t0 fit, set to " << mDummyT0;
161 t0_chambers[iDet] = mDummyT0;
165 mFitFunctor.
x.clear();
166 mFitFunctor.
y.clear();
167 for (
int i = 1;
i <= 30; ++
i) {
168 mFitFunctor.
x.push_back(
i - 1);
169 mFitFunctor.
y.push_back(adcProfDet[iDet]->GetBinContent(
i));
173 fitResult = mFitter.Result();
175 if (fitResult.IsValid()) {
176 mFuncErfLandau->SetParameters(fitResult.GetParams()[0], fitResult.GetParams()[1], fitResult.GetParams()[2], fitResult.GetParams()[3]);
177 t0_chambers[iDet] = mFuncErfLandau->GetMaximumX();
179 LOG(info) <<
"t0 fit for chamber " << iDet <<
" is not valid, set to " << mDummyT0;
180 t0_chambers[iDet] = mDummyT0;
188 LOGF(
debug,
"Fit result for inclusive distribution: t0 = ", t0_average);
189 for (
int iDet = 0; iDet <
MAXCHAMBER; ++iDet) {
190 LOGF(
debug,
"Fit result for chamber %i: t0 = ", iDet, t0_chambers[iDet]);
198 t0Object.
setT0(iDet, t0_chambers[iDet]);
202 std::map<std::string, std::string> metadata;
205 mObjectVector.push_back(t0Object);