55 LOG(info) <<
"Initializing the processing";
56 for (
int iDet = 0; iDet <
MAXCHAMBER; ++iDet) {
61 mFconv = std::make_unique<TF1Convolution>(
"[3] * TMath::Landau(x, [0], [1]) * exp(-[2]*x)",
"TMath::Gaus(x, 0, [0])", 0.,
NBINSGAINCALIB,
true);
62 mFconv->SetNofPointsFFT(2000);
63 mFitFunction = std::make_unique<TF1>(
"fitConvLandau", *mFconv, 0.,
NBINSGAINCALIB, mFconv->GetNpar());
64 mFitFunction->SetParameters(40, 15, 0.02, 1, 0.1);
65 mFitFunction->SetParLimits(0, 30., 100.0);
66 mFitFunction->SetParLimits(1, 5.0, 25.0);
67 mFitFunction->SetParLimits(2, -0.1, 0.5);
68 mFitFunction->SetParLimits(3, 1.0, 10.0);
69 mFitFunction->SetParLimits(4, -0.1, 0.5);
73 mOutTree->Branch(
"MPVdEdx", &mFitResults);
74 for (
int iDet = 0; iDet <
MAXCHAMBER; ++iDet) {
75 mOutTree->Branch(Form(
"dEdxHist_%d", iDet), mdEdxhists[iDet].get());
107 LOG(info) <<
"Finalizing gain calibration";
115 LOGP(info,
"Current slot has {} entries", dEdxHists->getNEntries());
116 for (
int iDet = 0; iDet <
MAXCHAMBER; ++iDet) {
117 mdEdxhists[iDet]->Reset();
120 nEntries += dEdxHists->getHistogramEntry(iDet *
NBINSGAINCALIB + iBin);
121 mdEdxhists[iDet]->SetBinContent(iBin + 1, dEdxHists->getHistogramEntry(iDet *
NBINSGAINCALIB + iBin));
122 mdEdxhists[iDet]->SetBinError(iBin + 1, sqrt(dEdxHists->getHistogramEntry(iDet *
NBINSGAINCALIB + iBin)));
125 if (nEntries < mMinEntriesChamber) {
126 LOGF(
debug,
"Chamber %d did not reach minimum amount of %d entries for refit", iDet, mMinEntriesChamber);
129 mdEdxhists[iDet]->Scale(1. / nEntries);
132 mFitFunction->SetParameter(0, mdEdxhists[iDet]->GetMean() / 1.25);
133 int fitStatus = mdEdxhists[iDet]->Fit(
"fitConvLandau",
"LQB0",
"", 1,
NBINSGAINCALIB - 4);
135 if (fitStatus != 0) {
136 LOGF(warn,
"Fit for chamber %i failed, nEntries: %d", iDet, nEntries);
140 mFitResults[iDet] = mFitFunction->GetMaximumX(0.,
NBINSGAINCALIB);
141 LOGF(
debug,
"Fit result for chamber %i: dEdx MPV = ", iDet, mFitResults[iDet]);
144 LOGF(info,
"Done fitting dEdx histograms. CPU time: %f, real time: %f", timer.CpuTime(), timer.RealTime());
149 for (
int iDet = 0; iDet <
MAXCHAMBER; ++iDet) {
150 LOGF(
debug,
"Fit result for chamber %i: dEdx MPV = ", iDet, mFitResults[iDet]);
156 for (
int iDet = 0; iDet <
MAXCHAMBER; ++iDet) {
159 calObject.
setMPVdEdx(iDet, mFitResults[iDet]);
163 std::map<std::string, std::string> metadata;
166 mObjectVector.push_back(calObject);
InputRecord & inputs()
The inputs associated with this processing context.