275 const EventContext& ctx = Gaudi::Hive::currentContext();
282 auto digitsContainer = std::make_unique<TileMutableDigitsContainer>(
true,
290 auto rawChannelContainer = std::make_unique<TileMutableRawChannelContainer>(
true,
m_rChType,
m_rChUnit);
291 ATH_CHECK( rawChannelContainer->status() );
293 DataPool < TileDigits > tileDigitsPool(
m_tileHWID->adc_hash_max());
295 double tFit = 0, ped = 100;
297 TF1 *pdf =
new TF1();
298 TF1 *pdf_PhaseI =
new TF1();
299 TF1 *pdf_lo =
new TF1();
300 TF1 *pdf_hi =
new TF1();
305 Double_t sigma_lo = 1;
306 pdf_lo =
new TF1(
"pdf_lo",
"(1/(sqrt(2*pi)*[0])) * (exp(-0.5*(x/[0])**2)/(sqrt(2*pi)*[0]))", -100, 100);
307 pdf_lo->SetParameter(0,sigma_lo);
309 Double_t sigma_hi = 2.5;
310 pdf_hi =
new TF1(
"pdf_hi",
"(1/(sqrt(2*pi)*[0])) * (exp(-0.5*(x/[0])**2)/(sqrt(2*pi)*[0]))", -100, 100);
311 pdf_hi->SetParameter(0,sigma_hi);
317 pdf_PhaseI =
new TF1(
"pdf_PhaseI",
"[0] * (exp(-0.5*(x/[1])**2)/(sqrt(2*pi)*[1]) + [2] *exp(-0.5*(x/[3])**2)/(sqrt(2*pi)*[3]))", -100., 100.);
329 double n_inTimeAmp = 0.0;
332 for (
int ros = 1; ros < 5; ++ros) {
333 for (
int drawer = 0; drawer < 64; ++drawer) {
335 for (
int channel = 0; channel < 48; ++channel) {
347 bool isHGSaturated =
false;
349 for (
int igain = 1; igain >= 0; igain--) {
367 m_ps[gain]->scalePulse(deformatedTime, deformatedTime);
374 addPileUp(n_inTimeAmp, gain, ros, drawer, channel);
378 m_ps[gain]->scalePulse(deformatedTime, deformatedTime);
380 double scaleFactor = (
m_PhaseII ? 40.0 : 64.0);
381 n_inTimeAmp /= scaleFactor;
382 for (
auto &Value :
m_PUAmp[ros-1][drawer][channel]) {
383 ampValue /= scaleFactor;
388 pdf = (gain==1) ? pdf_hi : pdf_lo;
399 m_buf->getValueVector(samples);
405 RandGaussQ::shootArray(*rngWrapper, samples.size(), Rndm, 0.0, 1.0);
406 RandFlat::shootArray(*rngWrapper, 1, Rndm_dG, 0.0, 1.0);
407 for (
unsigned int js = 0; js < samples.size(); ++js) {
409 if (Rndm_dG[0] <
Norm)
410 samples[js] += (float) Hfn1 * Rndm[js];
412 samples[js] += (float) Hfn2 * Rndm[js];
416 for (
unsigned int i = 0; i < samples.size(); ++i) {
418 isHGSaturated =
true;
428 ATH_MSG_VERBOSE(
"New ADC " << ros <<
"/" << drawer <<
"/" << channel <<
"/ saving gain " << gain);
434 ATH_CHECK( digitsContainer->push_back(digit) );
436 auto rawChannel = std::make_unique<TileRawChannel>(digit->adc_HWID(),
442 ATH_CHECK( rawChannelContainer->push_back(std::move(rawChannel)) );
447 ATH_MSG_VERBOSE(
"New ADC " << ros <<
"/" << drawer <<
"/" << channel <<
"/ saving gain " << gain);
453 ATH_CHECK( digitsContainer->push_back(digit) );
455 auto rawChannel = std::make_unique<TileRawChannel>(digit->adc_HWID(),
461 ATH_CHECK( rawChannelContainer->push_back(std::move(rawChannel)) );
477 float my_PUAmp[7] = {0};
479 for (
int i = 0; i < 7; i++)
489 m_tsg->fill7SamplesQIE((
float) n_inTimeAmp, my_PUAmp);
493 m_buf->getValueVector(samples);
495 ATH_MSG_VERBOSE(
"New ADC " << ros <<
"/" << drawer <<
"/" << channel <<
"/ saving gain " << gain);
501 ATH_CHECK( digitsContainer->push_back(digit) );
503 auto rawChannel = std::make_unique<TileRawChannel>(digit->adc_HWID(),
509 ATH_CHECK( rawChannelContainer->push_back(std::move(rawChannel)) );
514 bool isHGSaturated =
false;
516 for (
int igain = 1; igain >= 0; --igain) {
531 pdf = (gain == 1) ? pdf_hi : pdf_lo;
545 m_ps[gain]->scalePulse(deformatedTime, deformatedTime);
548 m_PUAmp[ros-1][drawer][channel].pop_back();
549 m_PUAmp[ros-1][drawer][channel].insert(
m_PUAmp[ros-1][drawer][channel].begin(), 0);
556 m_PUAmp[ros-1][drawer][channel].front() += n_inTimeAmp;
558 sample =
m_tsg->fillSample(tFit, ped,
559 m_PUAmp[ros-1][drawer][channel],
561 (
int)
m_PUAmp[ros-1][drawer][channel].size(),
570 sample =
m_tsg->fillSample(tFit, ped,
571 m_PUAmp[ros-1][drawer][channel],
573 (
int)
m_PUAmp[ros-1][drawer][channel].size(),
588 isHGSaturated =
true;
593 samples.push_back(sample);
595 ATH_MSG_VERBOSE(
"New chain ADC " << ros <<
"/" << drawer <<
"/" << channel <<
" - saving gain " << gain);
600 ATH_CHECK(digitsContainer->push_back(digit));
603 auto rawChannel = std::make_unique<TileRawChannel>(
609 ATH_CHECK(rawChannelContainer->push_back(std::move(rawChannel)));
636 return StatusCode::SUCCESS;
724 for (
int imu = 0; imu<mu; imu++){
740 ATH_MSG_VERBOSE(
"Random amplitudes for PU: " << amp_1 <<
" " << amp_2);
790 double scaleFactor =
m_PhaseII ? 40 : 64;
791 n_inTimeAmp /= scaleFactor;