diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx
index 1bbb33b98eef2bba39409a7ad941e487700718a0..7b0a36dcd162fa33896da8c6032c5f34375f7593 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx
@@ -240,8 +240,6 @@ StatusCode SensorSim3DTool::induceCharge(const TimedHitPtr<SiHit>& phit,
   const double x_bin_size = 0.001;
   const double y_bin_size = 0.001;
 
-  std::string readout;
-
   // determine which readout is used
   // FEI4 : 50 X 250 microns
   double pixel_size_x = Module.width() / p_design.rows();
@@ -316,6 +314,9 @@ StatusCode SensorSim3DTool::induceCharge(const TimedHitPtr<SiHit>& phit,
         continue;
       }
 
+      const double mobilityElectron = getMobility(efield, false);
+      const double mobilityHole     = getMobility(efield, true);
+
       //Loop over charge-carrier pairs
       for (int j = 0; j < ncharges; j++) {
         if (m_doRadDamage && m_fluence > 0) {
@@ -329,25 +330,23 @@ StatusCode SensorSim3DTool::induceCharge(const TimedHitPtr<SiHit>& phit,
 
           // Loop over everything twice: once for electrons and once for holes
           for (int eholes = 0; eholes < 2; eholes++) {
-            bool isHole = false; // Set a condition to keep track of electron/hole-specific functions
-            if (eholes == 1) isHole = true;
+            const bool isHole = (eholes == 1); // Set a condition to keep track of electron/hole-specific functions
 
             // Reset extraPixel coordinates each time through loop
             extraNPixX = nPixX;
             extraNPixY = nPixY;
 
-            double timeToElectrode = getTimeToElectrode(y_pix, x_pix, isHole);
-            double driftTime = getDriftTime(isHole);
+            const double timeToElectrode = getTimeToElectrode(y_pix, x_pix, isHole);
+            const double driftTime = getDriftTime(isHole);
 
             //Apply drift due to diffusion
-            double phiRand = CLHEP::RandGaussZiggurat::shoot(rndmEngine);
+            const double phiRand = CLHEP::RandGaussZiggurat::shoot(rndmEngine);
 
             //Apply diffusion. rdif is teh max. diffusion
-            double Dt =
-              getMobility(efield, isHole) * (0.024) * std::min(driftTime, timeToElectrode) * m_temperature / 273.;
-            double rdif = 1e-3*std::sqrt(Dt); //in mm
+            const double Dt = (isHole ? mobilityHole : mobilityElectron) * (0.024) * std::min(driftTime, timeToElectrode) * m_temperature / 273.;
+            const double rdif = 1e-3*std::sqrt(Dt); //in mm
             double xposDiff = x_pix + rdif * phiRand;
-            double etaRand = CLHEP::RandGaussZiggurat::shoot(rndmEngine);
+            const double etaRand = CLHEP::RandGaussZiggurat::shoot(rndmEngine);
             double yposDiff = y_pix + rdif * etaRand;
 
             // Account for drifting into another pixel
@@ -608,15 +607,14 @@ double SensorSim3DTool::getMobility(double electricField, bool isHoleBit) {
   //These parameterizations come from C. Jacoboni et al., Solid-State Electronics 20 (1977) 77-89. (see also
   // https://cds.cern.ch/record/684187/files/indet-2001-004.pdf).
 
-  if (!isHoleBit) {
-    vsat = 15.3 * std::pow(m_temperature, -0.87); // mm/ns
-    ecrit = 1.01E-7 * std::pow(m_temperature, 1.55); // MV/mm
-    beta = 2.57E-2 * std::pow(m_temperature, 0.66);
-  }
   if (isHoleBit) {
     vsat = 1.62 * std::pow(m_temperature, -0.52); // mm/ns
     ecrit = 1.24E-7 * std::pow(m_temperature, 1.68); // MV/mm
     beta = 0.46 * std::pow(m_temperature, 0.17);
+  } else {
+    vsat = 15.3 * std::pow(m_temperature, -0.87); // mm/ns
+    ecrit = 1.01E-7 * std::pow(m_temperature, 1.55); // MV/mm
+    beta = 2.57E-2 * std::pow(m_temperature, 0.66);
   }
 
   double mobility = (vsat / ecrit) / std::pow(1 + std::pow((electricField / ecrit), beta), (1 / beta));
@@ -627,8 +625,11 @@ double SensorSim3DTool::getDriftTime(bool isHoleBit) {
   double u = CLHEP::RandFlat::shoot(0., 1.); //
   double driftTime = 0;
 
-  if (!isHoleBit) driftTime = (-1.) * m_trappingTimeElectrons * TMath::Log(u); // ns
-  if (isHoleBit) driftTime = (-1.) * m_trappingTimeHoles * TMath::Log(u); // ns
+  if (isHoleBit) {
+    driftTime = (-1.) * m_trappingTimeHoles * std::log(u); // ns
+  } else {
+    driftTime = (-1.) * m_trappingTimeElectrons * std::log(u); // ns
+  }
   return driftTime;
 }
 
@@ -645,7 +646,7 @@ double SensorSim3DTool::getTimeToElectrode(double x, double y, bool isHoleBit) {
 
 double SensorSim3DTool::getTrappingPositionX(double initX, double initY, double driftTime, bool isHoleBit) {
   std::size_t index = 0;
-  double finalX = initX;
+  double finalX(0);
   if (!isHoleBit) {
     finalX = m_xPositionMap_e[index].getContent(m_xPositionMap_e[index].getBinX(1e3*initX), m_xPositionMap_e[index].getBinY(1e3*initY), m_xPositionMap_e[index].getBinZ(driftTime));
   } else {
@@ -657,7 +658,7 @@ double SensorSim3DTool::getTrappingPositionX(double initX, double initY, double
 
 double SensorSim3DTool::getTrappingPositionY(double initX, double initY, double driftTime, bool isHoleBit) {
   std::size_t index = 0;
-  double finalY = initY;
+  double finalY(0);
   if (!isHoleBit) {
     finalY = m_yPositionMap_e[index].getContent(m_yPositionMap_e[index].getBinX(1e3*initX), m_yPositionMap_e[index].getBinY(1e3*initY), m_yPositionMap_e[index].getBinZ(driftTime));
   } else {
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
index bd72e4a0130c8b6e6d77a68ed2e2425863a4bab1..e40892136fd89c18291500d021aea3937ff0cc11 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
@@ -385,8 +385,8 @@ StatusCode SensorSimPlanarTool::induceCharge(const TimedHitPtr<SiHit>& phit,
           for (int q = nnLoop_pixelPhiMin; q <= nnLoop_pixelPhiMax; q++) {
             //Since both e-h charge carriers start in the same place, they have the same initial ramo value
             //Centre of nearest neighbour (nn) pixel
-            SiLocalPosition centreOfPixel_nn = p_design.positionFromColumnRow(pixel_i.etaIndex() - p,
-                                                                              pixel_i.phiIndex() - q);
+            const SiLocalPosition& centreOfPixel_nn = p_design.positionFromColumnRow(pixel_i.etaIndex() - p,
+                                                                                     pixel_i.phiIndex() - q);
 
             //What is the displacement of the nn pixel from the primary pixel.
             //This is to index the correct entry in the Ramo weighting potential map
@@ -415,24 +415,21 @@ StatusCode SensorSimPlanarTool::induceCharge(const TimedHitPtr<SiHit>& phit,
             double ramo_f_e = 0.0;
             double ramo_f_h = 0.0;
 
-            if (!isFirstZ_e) {
-              ramo_f_e = ramoPotentialMap.getContent(ramoPotentialMap.getBinX(1e3*dPhi_f_e), ramoPotentialMap.getBinY(1e3*dEta_f_e), ramo_f_e_bin_z);
-            }
-
-            if (!isOverflowZ_h) {
-              ramo_f_h = ramoPotentialMap.getContent(ramoPotentialMap.getBinX(dPhi_f_h), ramoPotentialMap.getBinY(dEta_f_h), ramo_f_h_bin_z);
-            }
-            //Account for the imperfect binning that would cause charge to be double-counted
-            if (isOverflowZ_h) {
-              ramo_f_h = 0;
-            }
-
             if (isFirstZ_e) {
               if (dEta_f_e >= 0.5*Module.etaPitch() || dPhi_f_e >= 0.5*Module.phiPitch()) {
                 ramo_f_e = 0.0;
               } else if (dEta_f_e < 0.5*Module.etaPitch() && dPhi_f_e < 0.5*Module.phiPitch()) {
                 ramo_f_e = 1.0;
               }
+            } else {
+              ramo_f_e = ramoPotentialMap.getContent(ramoPotentialMap.getBinX(1e3*dPhi_f_e), ramoPotentialMap.getBinY(1e3*dEta_f_e), ramo_f_e_bin_z);
+            }
+
+            //Account for the imperfect binning that would cause charge to be double-counted
+            if (isOverflowZ_h) {
+              ramo_f_h = 0;
+            } else {
+              ramo_f_h = ramoPotentialMap.getContent(ramoPotentialMap.getBinX(dPhi_f_h), ramoPotentialMap.getBinY(dEta_f_h), ramo_f_h_bin_z);
             }
 
             //Given final position of charge carrier, find induced charge. The difference in Ramo weighting potential