16 #include "CLHEP/Random/RandGaussZiggurat.h" 
   17 #include "CLHEP/Random/RandFlat.h" 
   30     constexpr std::array<double,17> sigmas{0.0,0.50,0.50,0.50,0.50,0.50,0.60,0.60,0.60,0.60,0.65,0.70,0.75,0.80,0.80,0.80,0.80};
 
   31     return sigmas.at(
tot);
 
   49   return StatusCode::SUCCESS;
 
   54   return StatusCode::SUCCESS;
 
   58                           CLHEP::HepRandomEngine* rndmEngine)
 const {
 
   77   const EventContext& ctx{Gaudi::Hive::currentContext()};
 
   83   int maxFEI4SmallHit = 2;
 
   86   std::vector<std::unique_ptr<Pixel1RawData>> p_rdo_small_fei4;
 
   87   int nSmallHitsFEI4 = 0;
 
   88   std::vector<int> 
row, col;
 
   91   std::vector<std::vector<int> > FEI4Map(maxRow + 16, std::vector<int>(maxCol + 16));
 
  108        i_chargedDiode != chargedDiodes.
orderedEnd(); ++i_chargedDiode) {
 
  116     double corrQ = 1.11 *
 
  117                    (1.0 - (-7.09 * 1000.0) / (23.72 * 1000.0 + 
charge) + (-0.22 * 1000.0) /
 
  118                     (-0.42 * 1000.0 + 
charge));
 
  157     double totsig = calibData->
getTotRes(moduleHash, FE, 
tot);
 
  158     int nToT = 
static_cast<int>(CLHEP::RandGaussZiggurat::shoot(rndmEngine, 
tot, totsig));
 
  162       double totIBLsig = getSigma(nToT);
 
  164         if (CLHEP::RandFlat::shoot(rndmEngine,0.0,1.0)<
std::exp(-0.5/totIBLsig/totIBLsig)) {
 
  165           if (CLHEP::RandFlat::shoot(rndmEngine,0.0,1.0)<0.5) { nToT--; }
 
  174     if (nToT == 2 && maxFEI4SmallHit == 2) {
 
  178     nToT=std::clamp(nToT, 1, overflowToT);
 
  180     if (nToT <= moduleData->getToTThreshold(barrel_ec, layerIndex)) {
 
  198     int bunch = (
flag >> 8) & 0xff;
 
  205     if (iicol >= maxCol) {
 
  206       iicol = iicol - maxCol;
 
  211       auto p_rdo = std::make_unique<Pixel1RawData>(id_readout, nToT, bunch, 0, bunch);
 
  212       if (nToT > maxFEI4SmallHit) {
 
  213         rdoCollection.
push_back(p_rdo.release());
 
  214         FEI4Map[iirow][iicol] = 2; 
 
  216         p_rdo_small_fei4.push_back(std::move(p_rdo));
 
  217         row.push_back(iirow);
 
  218         col.push_back(iicol);
 
  219         FEI4Map[iirow][iicol] = 1; 
 
  226   if (nSmallHitsFEI4 > 0) {
 
  230     for (
int ismall = 0; ismall < nSmallHitsFEI4; ismall++) {
 
  231       int rowPDR = 
row[ismall] / 2;
 
  232       int colPDR = col[ismall] / 2;
 
  233       for (
int rowBigHit = 2 * rowPDR; rowBigHit != 2 * rowPDR + 2 && rowBigHit < maxRow; ++rowBigHit) {
 
  234         for (
int colBigHit = 2 * colPDR; colBigHit != 2 * colPDR + 2 && colBigHit < maxCol; ++colBigHit) {
 
  236             "rowBig = " << rowBigHit << 
" colBig = " << colBigHit << 
" Map Content = " <<
 
  237               FEI4Map[rowBigHit][colBigHit]);
 
  238           if (FEI4Map[rowBigHit][colBigHit] == 2 && !
recorded) {
 
  247         if (FEI4Map[
row[ismall] + 1][col[ismall]] == 2) {
 
  253         if (FEI4Map[
row[ismall] - 1][col[ismall]] == 2) {