278 CLHEP::HepRandomEngine* rndmEngine = rngWrapper->
getEngine(ctx);
281 auto digitsContainer = std::make_unique<TileMutableDigitsContainer>(
true,
289 auto rawChannelContainer = std::make_unique<TileMutableRawChannelContainer>(
true,
m_rChType,
m_rChUnit);
290 ATH_CHECK( rawChannelContainer->status() );
292 DataPool < TileDigits > tileDigitsPool(
m_tileHWID->adc_hash_max());
294 double tFit = 0, ped = 100;
296 TF1 *pdf =
new TF1();
297 TF1 *pdf_PhaseI =
new TF1();
298 TF1 *pdf_lo =
new TF1();
299 TF1 *pdf_hi =
new TF1();
304 Double_t sigma_lo = 1;
305 pdf_lo =
new TF1(
"pdf_lo",
"(1/(sqrt(2*pi)*[0])) * (exp(-0.5*(x/[0])**2)/(sqrt(2*pi)*[0]))", -100, 100);
306 pdf_lo->SetParameter(0,sigma_lo);
308 Double_t sigma_hi = 2.5;
309 pdf_hi =
new TF1(
"pdf_hi",
"(1/(sqrt(2*pi)*[0])) * (exp(-0.5*(x/[0])**2)/(sqrt(2*pi)*[0]))", -100, 100);
310 pdf_hi->SetParameter(0,sigma_hi);
316 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.);
328 double n_inTimeAmp = 0.0;
331 for (
int ros = 1; ros < 5; ++ros) {
332 for (
int drawer = 0; drawer < 64; ++drawer) {
334 for (
int channel = 0; channel < 48; ++channel) {
346 bool isHGSaturated =
false;
348 for (
int igain = 1; igain >= 0; igain--) {
366 m_ps[gain]->scalePulse(deformatedTime, deformatedTime);
373 addPileUp(n_inTimeAmp, gain, ros, drawer, channel);
377 m_ps[gain]->scalePulse(deformatedTime, deformatedTime);
379 double scaleFactor = (
m_PhaseII ? 40.0 : 64.0);
380 n_inTimeAmp /= scaleFactor;
381 for (
auto &Value :
m_PUAmp[ros-1][drawer][channel]) {
382 ampValue /= scaleFactor;
387 pdf = (gain==1) ? pdf_hi : pdf_lo;
398 m_buf->getValueVector(samples);
404 RandGaussQ::shootArray(rndmEngine, samples.size(), Rndm, 0.0, 1.0);
405 RandFlat::shootArray(rndmEngine, 1, Rndm_dG, 0.0, 1.0);
406 for (
unsigned int js = 0; js < samples.size(); ++js) {
408 if (Rndm_dG[0] <
Norm)
409 samples[js] += (float) Hfn1 * Rndm[js];
411 samples[js] += (float) Hfn2 * Rndm[js];
415 for (
unsigned int i = 0; i < samples.size(); ++i) {
417 isHGSaturated =
true;
427 ATH_MSG_VERBOSE(
"New ADC " << ros <<
"/" << drawer <<
"/" << channel <<
"/ saving gain " << gain);
432 ATH_CHECK( digitsContainer->push_back(digit) );
434 auto rawChannel = std::make_unique<TileRawChannel>(digit->adc_HWID(),
440 ATH_CHECK( rawChannelContainer->push_back(std::move(rawChannel)) );
445 ATH_MSG_VERBOSE(
"New ADC " << ros <<
"/" << drawer <<
"/" << channel <<
"/ saving gain " << gain);
450 ATH_CHECK( digitsContainer->push_back(digit) );
452 auto rawChannel = std::make_unique<TileRawChannel>(digit->adc_HWID(),
458 ATH_CHECK( rawChannelContainer->push_back(std::move(rawChannel)) );
474 float my_PUAmp[7] = {0};
476 for (
int i = 0; i < 7; i++)
486 m_tsg->fill7SamplesQIE((
float) n_inTimeAmp, my_PUAmp);
490 m_buf->getValueVector(samples);
492 ATH_MSG_VERBOSE(
"New ADC " << ros <<
"/" << drawer <<
"/" << channel <<
"/ saving gain " << gain);
498 ATH_CHECK( digitsContainer->push_back(digit) );
500 auto rawChannel = std::make_unique<TileRawChannel>(digit->adc_HWID(),
506 ATH_CHECK( rawChannelContainer->push_back(std::move(rawChannel)) );
511 bool isHGSaturated =
false;
513 for (
int igain = 1; igain >= 0; --igain) {
528 pdf = (gain == 1) ? pdf_hi : pdf_lo;
542 m_ps[gain]->scalePulse(deformatedTime, deformatedTime);
545 m_PUAmp[ros-1][drawer][channel].pop_back();
546 m_PUAmp[ros-1][drawer][channel].insert(
m_PUAmp[ros-1][drawer][channel].begin(), 0);
553 m_PUAmp[ros-1][drawer][channel].front() += n_inTimeAmp;
555 sample =
m_tsg->fillSample(tFit, ped,
556 m_PUAmp[ros-1][drawer][channel],
567 sample =
m_tsg->fillSample(tFit, ped,
568 m_PUAmp[ros-1][drawer][channel],
585 isHGSaturated =
true;
590 samples.push_back(sample);
592 ATH_MSG_VERBOSE(
"New chain ADC " << ros <<
"/" << drawer <<
"/" << channel <<
" - saving gain " << gain);
597 ATH_CHECK(digitsContainer->push_back(digit));
600 auto rawChannel = std::make_unique<TileRawChannel>(
606 ATH_CHECK(rawChannelContainer->push_back(std::move(rawChannel)));
633 return StatusCode::SUCCESS;
721 for (
int imu = 0; imu<mu; imu++){
737 ATH_MSG_VERBOSE(
"Random amplitudes for PU: " << amp_1 <<
" " << amp_2);
787 double scaleFactor =
m_PhaseII ? 40 : 64;
788 n_inTimeAmp /= scaleFactor;