51 const auto slotLengthTF = ic.options().get<uint32_t>(
"tf-per-slot");
52 const auto slotLengthSeconds = ic.options().get<
int>(
"seconds-per-slot");
53 const auto maxDelay = ic.options().get<uint32_t>(
"max-delay");
54 const auto minEntries = ic.options().get<
int>(
"min-entries");
55 mCalibIntervalExtensionMS = ic.options().get<uint32_t>(
"calib-interval-extension") * 1000l;
57 const auto minEntriesSector = ic.options().get<
int>(
"min-entries-sector");
58 const auto minEntries1D = ic.options().get<
int>(
"min-entries-1d");
59 const auto minEntries2D = ic.options().get<
int>(
"min-entries-2d");
60 const auto fitPasses = ic.options().get<
int>(
"fit-passes");
61 const auto fitThreshold = ic.options().get<
float>(
"fit-threshold");
62 const auto fitThresholdLowFactor = ic.options().get<
float>(
"fit-threshold-low-factor");
64 const auto dEdxBins = ic.options().get<
int>(
"dedxbins");
65 const auto mindEdx = ic.options().get<
float>(
"min-dedx");
66 const auto maxdEdx = ic.options().get<
float>(
"max-dedx");
67 const auto angularBins = ic.options().get<
int>(
"angularbins");
68 const auto fitSnp = ic.options().get<
bool>(
"fit-snp");
70 const auto dumpData = ic.options().get<
bool>(
"file-dump");
71 const auto dumpHistograms = ic.options().get<uint32_t>(
"dump-histograms");
72 const auto trackDebug = ic.options().get<
bool>(
"track-debug");
73 const bool makeGaussianFits = !ic.options().get<
bool>(
"disable-gaussian-fits");
75 mCalibrator = std::make_unique<tpc::CalibratordEdx>();
76 mCalibrator->setHistParams(dEdxBins, mindEdx, maxdEdx, angularBins, fitSnp);
77 mCalibrator->setApplyCuts(
false);
78 mCalibrator->setFitThresholds(minEntriesSector, minEntries1D, minEntries2D);
79 mCalibrator->setMinEntries(minEntries);
80 mCalibrator->setSlotLength(slotLengthTF);
81 mCalibrator->setSlotLengthInSeconds(slotLengthSeconds);
82 mCalibrator->setMaxSlotsDelay(maxDelay);
83 mCalibrator->setElectronCut({fitThreshold, fitPasses, fitThresholdLowFactor});
84 mCalibrator->setMaterialType(mMatType);
85 mCalibrator->setDumpHistograms(dumpHistograms);
86 mCalibrator->setTrackDebug(trackDebug);
87 mCalibrator->setMakeGaussianFits(makeGaussianFits);
89 mCustomdEdxFileName = o2::gpu::GPUConfigurableParamGPUSettingsO2::Instance().dEdxCorrFile;
90 mDisableTimeGain = o2::gpu::GPUConfigurableParamGPUSettingsO2::Instance().dEdxDisableResidualGain;
92 if (mDisableTimeGain) {
93 LOGP(info,
"TimeGain correction was disabled via GPU_global.dEdxDisableResidualGain=1");
96 if (!mDisableTimeGain && !mCustomdEdxFileName.empty()) {
97 std::unique_ptr<TFile> fdEdxCustom(TFile::Open(mCustomdEdxFileName.data()));
98 if (!fdEdxCustom || !fdEdxCustom->IsOpen() || fdEdxCustom->IsZombie()) {
99 LOGP(error,
"Could not open custom TimeGain file {}", mCustomdEdxFileName);
103 LOGP(error,
"Could not load 'CalibdEdxCorrection' from file {}", mCustomdEdxFileName);
105 mTimeGain = *timeGain;
107 LOGP(info,
"Loaded custom TimeGain from file {} with {} dimensions and mean qTot Params {}", mCustomdEdxFileName, mTimeGain.getDims(),
utils::elementsToString(meanParamTot));
113 const auto dumpDataName = ic.options().get<std::string>(
"file-dump-name");
114 mCalibrator->enableDebugOutput(dumpDataName);
136 static bool slotLengthSet =
false;
137 if (!slotLengthSet) {
139 mCalibrator->checkSlotLength();
140 slotLengthSet =
true;
143 auto& slotTF = mCalibrator->getSlotForTF(mCalibrator->getCurrentTFInfo().tfCounter);
144 auto calib = slotTF.getContainer();
146 const auto calibInEnties = calib->getCalibrationInput().getEntries(stackID,
ChargeType::Tot);
147 calib->setCalibrationInput(mTimeGain);
149 const auto meanParamTot = calib->getCalibrationInput().getMeanParams(
ChargeType::Tot);
150 LOGP(info,
"Updating TimeGain with {} dimensions and mean qTot Params {} for slot with TF range {} <=TF<= {}",
151 calib->getCalibrationInput().getDims(),
utils::elementsToString(meanParamTot), slotTF.getTFStart(), slotTF.getTFEnd());
154 const auto tracks = pc.inputs().get<gsl::span<tpc::TrackTPC>>(
"tracks");
155 LOGP(detail,
"Processing TF {} with {} tracks", mCalibrator->getCurrentTFInfo().tfCounter, tracks.size());
156 mRunNumber = mCalibrator->getCurrentTFInfo().runNumber;
157 mCalibrator->process(tracks);
158 sendOutput(pc.outputs());
160 const auto& infoVec = mCalibrator->getTFinterval();
161 LOGP(detail,
"Created {} objects for TF {}", infoVec.size(), mCalibrator->getCurrentTFInfo().tfCounter);
186 LOGP(info,
"Sending object {} / {} of size {} bytes, valid for {} : {} ", info.getPath(), info.getFileName(),
image->size(), info.getStartValidityTimestamp(), info.getEndValidityTimestamp());