144 mMinEvents = cpvParams.gainMinEvents;
145 mMinNChannelsToCalibrate = cpvParams.gainMinNChannelsToCalibrate;
146 mDesiredLandauMPV = cpvParams.gainDesiredLandauMPV;
147 mToleratedChi2PerNDF = cpvParams.gainToleratedChi2PerNDF;
148 mMinAllowedCoeff = cpvParams.gainMinAllowedCoeff;
149 mMaxAllowedCoeff = cpvParams.gainMaxAllowedCoeff;
150 mFitRangeL = cpvParams.gainFitRangeL;
151 mFitRangeR = cpvParams.gainFitRangeR;
152 mUpdateTFInterval = cpvParams.gainCheckForCalibrationInterval;
165 LOG(info) <<
"GainCalibrator::configParameters() : Parameters used: ";
166 LOG(info) <<
"mMinEvents = " << mMinEvents;
167 LOG(info) <<
"mDesiredLandauMPV = " << mDesiredLandauMPV;
168 LOG(info) <<
"mToleratedChi2PerNDF = " << mToleratedChi2PerNDF;
169 LOG(info) <<
"mMinAllowedCoeff = " << mMinAllowedCoeff;
170 LOG(info) <<
"mMaxAllowedCoeff = " << mMaxAllowedCoeff;
171 LOG(info) <<
"mFitRangeL = " << mFitRangeL;
172 LOG(info) <<
"mFitRangeR = " << mFitRangeR;
173 LOG(info) <<
"mUpdateTFInterval = " << mUpdateTFInterval;
188 LOG(info) <<
"GainCalibrator::finalizeSlot() : finalizing slot "
194 int nChannelsCalibrated = 0, nChannelsTooSmallCoeff = 0, nChannelsTooLargeCoeff = 0;
195 TF1* fLandau =
new TF1(
"fLandau",
"landau", mFitRangeL, mFitRangeR);
196 fLandau->SetParLimits(0, 0., 1.E6);
197 fLandau->SetParLimits(1, mDesiredLandauMPV / mMaxAllowedCoeff, mDesiredLandauMPV / mMinAllowedCoeff);
198 fLandau->SetParLimits(2, 0., 1.E3);
200 h.Rebin(std::ceil(mMaxAllowedCoeff));
205 int nCalibratedChannels = 0;
206 int badChi2Channels = 0;
208 newGains->
setGain(
i, mPreviousGains.get()->getGain(
i));
210 if ((
i % 500) == 0) {
211 LOG(info) <<
"GainCalibrator::finalizeSlot() : checking channel " <<
i;
213 if (slot.
getContainer()->mAmplitudeSpectra[
i].getNEntries() > mMinEvents) {
214 if (slot.
getContainer()->mAmplitudeSpectra[
i].nEventsInRange(mFitRangeL, mFitRangeR) < mMinEvents) {
220 double mean = slot.
getContainer()->mAmplitudeSpectra[
i].getMean();
221 double rms = slot.
getContainer()->mAmplitudeSpectra[
i].getRMS();
222 double startingValue = slot.
getContainer()->mAmplitudeSpectra[
i].getBinContent()[(
int)mean];
223 fLandau->SetParameters(startingValue, mean, rms);
224 auto fitResult =
h.Fit(fLandau,
"SQL0N",
"", mFitRangeL, mFitRangeR);
226 if (fitResult->Chi2() / fitResult->Ndf() > mToleratedChi2PerNDF) {
230 if (badChi2Channels < 20) {
231 LOG(info) <<
"GainCalibrator::finalizeSlot() : bad chi2/ndf in fit of spectrum in channel " <<
i;
232 fitResult->Print(
"V");
233 }
else if (badChi2Channels == 20) {
234 LOG(info) <<
"GainCalibrator::finalizeSlot() : bad chi2/ndf in fit of spectrum in channel " <<
i;
235 fitResult->Print(
"V");
236 LOG(info) <<
"GainCalibrator::finalizeSlot() : bad chi2/ndf is reported 20 times. Muting ";
240 float coeff = mDesiredLandauMPV / fLandau->GetParameter(1) * mPreviousGains.get()->getGain(
i);
242 if (mMinAllowedCoeff <= coeff && coeff <= mMaxAllowedCoeff) {
244 nChannelsCalibrated++;
245 }
else if (mMinAllowedCoeff >= coeff) {
246 newGains->
setGain(
i, mMinAllowedCoeff);
248 newGains->
setGain(
i, mMaxAllowedCoeff);
253 LOG(info) <<
"GainCalibrator::finalizeSlot() : succesfully calibrated " << nChannelsCalibrated <<
"channels";
254 LOG(info) <<
"GainCalibrator::finalizeSlot() : bad chi2/ndf is occured " << badChi2Channels <<
"times";
256 mGainsVec.push_back(*newGains);
258 std::map<std::string, std::string> metaData;
262 mCcdbInfoGainsVec.emplace_back(
"CPV/Calib/Gains", className, fileName, metaData, timeStamp, timeStamp + 31536000000);
265 mPreviousGains.reset(newGains);
272 LOG(warning) <<
"GainCalibrator::prepareForEnding() : have no TimeSlots to end. Sorry about that.";
276 auto& slot = cont.back();
277 LOG(info) <<
"GainCalibrator::prepareForEnding() : sending GainCalibData from slot("
278 << slot.getTFStart() <<
" <= TF <= " << slot.getTFEnd() <<
") to CCDB";
279 slot.getContainer()->print();
281 std::map<std::string, std::string> metaData;
282 mGainCalibDataVec.push_back(*(slot.getContainer()));
286 mCcdbInfoGainCalibDataVec.emplace_back(
"CPV/PhysicsRun/GainCalibData", className, fileName, metaData, timeStamp, timeStamp + 604800000);
304 int nChannelsToCalibrate = 0;
306 if (slot.
getContainer()->mAmplitudeSpectra[
i].getNEntries() > mMinEvents) {
307 nChannelsToCalibrate++;
310 if (nChannelsToCalibrate >= mMinNChannelsToCalibrate) {
311 LOG(info) <<
"GainCalibrator::hasEnoughtData() : slot "
312 << slot.
getTFStart() <<
" <= TF <= " << slot.
getTFEnd() <<
" is ready for calibration ("
313 << nChannelsToCalibrate <<
" are going to be calibrated).";
316 LOG(info) <<
"GainCalibrator::hasEnoughtData() : slot "
317 << slot.
getTFStart() <<
" <= TF <= " << slot.
getTFEnd() <<
" is not ready for calibration ("
318 << nChannelsToCalibrate <<
" channels to be calibrated wich is not enough).";