59 bool fitDone = kFALSE;
61 auto [
nsamples, bunchIndex, ampEstimate,
64 if (bunchIndex >= 0 && ampEstimate >=
mAmpCut) {
66 int timebinOffset = bunchlist[bunchIndex].getStartTime() - (bunchlist[bunchIndex].getBunchLength() - 1);
69 if (
nsamples > 1 && maxADC < constants::OVERFLOWCUT) {
72 time += timebinOffset;
73 timeEstimate += timebinOffset;
81 float ampAsymm = (amp - ampEstimate) / (amp + ampEstimate);
82 float timeDiff =
time - timeEstimate;
84 if ((TMath::Abs(ampAsymm) > 0.1) || (TMath::Abs(timeDiff) > 2)) {
92 std::default_random_engine generator;
93 std::uniform_real_distribution<float> distribution(0.0, 1.0);
94 amp += (0.5 - distribution(generator));
96 time =
time * constants::EMCAL_TIMESAMPLE;
107 float amp(0),
time(0), chi2(0);
109 int nsamples = lastTimeBin - firstTimeBin + 1;
117 int timebin = firstTimeBin +
i;
123 signalF.SetParameters(10., 5., constants::TAU, constants::ORDER, 0.);
124 signalF.SetParNames(
"amp",
"t0",
"tau",
"N",
"ped");
125 signalF.FixParameter(2, constants::TAU);
126 signalF.FixParameter(3, constants::ORDER);
127 signalF.FixParameter(4, 0);
128 signalF.SetParameter(1,
time);
129 signalF.SetParameter(0, amp);
130 signalF.SetParLimits(0, 0.5 * amp, 2 * amp);
131 signalF.SetParLimits(1,
time - 4,
time + 4);
133 int status = gSig.Fit(&signalF,
"QROW");
135 amp = signalF.GetParameter(0);
136 time = signalF.GetParameter(1);
137 chi2 = signalF.GetChisquare();
142 return std::make_tuple(amp,
time, chi2);
std::tuple< int, int, float, short, short, float, int, int > preFitEvaluateSamples(const gsl::span< const Bunch > bunchvector, int adcThreshold)
Method to do the selection of what should possibly be fitted.