diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.cxx
index 2ba97d9cfcb5ad4a85ae66cddd3cfab82a24626d..eb927777072fe85153bb4373ed629def07354395 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.cxx
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.cxx
@@ -465,27 +465,51 @@ StatusCode PixelConfigCondAlg::execute(const EventContext& ctx) const {
   std::vector<PixelHistoConverter> distanceMap_h;
   for (unsigned int i=0; i<mapsPath_list.size(); i++) {
     ATH_MSG_INFO("Using maps located in: "<<mapsPath_list.at(i) << " for layer No." << i);
-    TFile* mapsFile = new TFile((mapsPath_list.at(i)).c_str()); //this is the ramo potential.
+    std::unique_ptr<TFile> mapsFile(TFile::Open((mapsPath_list.at(i)).c_str(), "READ")); //this is the ramo potential
+
+    if (!mapsFile) {
+      ATH_MSG_FATAL("Cannot open file: " << mapsPath_list.at(i));
+      return StatusCode::FAILURE;
+    }
 
     //Setup ramo weighting field map
-    TH3F* ramoPotentialMap_hold = 0;
-    ramoPotentialMap_hold = (TH3F*)mapsFile->Get("hramomap1");
-    if (ramoPotentialMap_hold==0) { ramoPotentialMap_hold=(TH3F*)mapsFile->Get("ramo3d"); }
-    if (ramoPotentialMap_hold==0) {
+    std::unique_ptr<TH3F> ramoPotentialMap_hold(mapsFile->Get<TH3F>("hramomap1"));
+    if (!ramoPotentialMap_hold) {
+      ramoPotentialMap_hold.reset(mapsFile->Get<TH3F>("ramo3d"));
+    }
+    if (!ramoPotentialMap_hold) {
       ATH_MSG_FATAL("Did not find a Ramo potential map and an approximate form is available yet. Exit...");
       return StatusCode::FAILURE;
     }
 
+    ramoPotentialMap_hold->SetDirectory(nullptr);
+    std::unique_ptr<TH2F> lorentzMap_e_hold(mapsFile->Get<TH2F>("lorentz_map_e"));
+    std::unique_ptr<TH2F> lorentzMap_h_hold(mapsFile->Get<TH2F>("lorentz_map_h"));
+    std::unique_ptr<TH2F> distanceMap_e_hold(mapsFile->Get<TH2F>("edistance"));
+    std::unique_ptr<TH2F> distanceMap_h_hold(mapsFile->Get<TH2F>("hdistance"));
+
+    if (!lorentzMap_e_hold || !lorentzMap_h_hold || !distanceMap_e_hold || !distanceMap_h_hold) {
+      ATH_MSG_FATAL("Cannot read one of the histograms needed");
+      return StatusCode::FAILURE;
+    }
+
+    lorentzMap_e_hold->SetDirectory(nullptr);
+    lorentzMap_h_hold->SetDirectory(nullptr);
+    distanceMap_e_hold->SetDirectory(nullptr);
+    distanceMap_h_hold->SetDirectory(nullptr);
+
     ramoPotentialMap.emplace_back();
-    ATH_CHECK(ramoPotentialMap.back().setHisto3D(ramoPotentialMap_hold));
+    ATH_CHECK(ramoPotentialMap.back().setHisto3D(ramoPotentialMap_hold.get()));
     lorentzMap_e.emplace_back();
     lorentzMap_h.emplace_back();
     distanceMap_e.emplace_back();
     distanceMap_h.emplace_back();
-    ATH_CHECK(lorentzMap_e.back().setHisto2D((TH2F*)mapsFile->Get("lorentz_map_e")));
-    ATH_CHECK(lorentzMap_h.back().setHisto2D((TH2F*)mapsFile->Get("lorentz_map_h")));
-    ATH_CHECK(distanceMap_e.back().setHisto2D((TH2F*)mapsFile->Get("edistance")));
-    ATH_CHECK(distanceMap_h.back().setHisto2D((TH2F*)mapsFile->Get("hdistance")));
+    ATH_CHECK(lorentzMap_e.back().setHisto2D(lorentzMap_e_hold.get()));
+    ATH_CHECK(lorentzMap_h.back().setHisto2D(lorentzMap_h_hold.get()));
+    ATH_CHECK(distanceMap_e.back().setHisto2D(distanceMap_e_hold.get()));
+    ATH_CHECK(distanceMap_h.back().setHisto2D(distanceMap_h_hold.get()));
+
+    mapsFile->Close();
   }
   writeCdo -> setLorentzMap_e(lorentzMap_e);
   writeCdo -> setLorentzMap_h(lorentzMap_h);
@@ -499,7 +523,7 @@ StatusCode PixelConfigCondAlg::execute(const EventContext& ctx) const {
   EventIDRange rangeW{start, stop};
   rangeW = rangeDeadMap;
 
-  if (rangeW.stop().isValid() and rangeW.start()>rangeW.stop()) {
+  if (rangeW.stop().isValid() && rangeW.start()>rangeW.stop()) {
     ATH_MSG_FATAL("Invalid intersection rangeW: " << rangeW);
     return StatusCode::FAILURE;
   }
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx
index 6e36ec275af73a69a9bb84c73302ce886dcc12aa..9f47b73e27e1ebb617bf27f34d9c26d8bc4c2bbf 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSim3DTool.cxx
@@ -23,6 +23,8 @@
 
 #include "TFile.h"
 
+#include <memory>
+
 using namespace InDetDD;
 
 //===============================================
@@ -87,8 +89,11 @@ StatusCode SensorSim3DTool::initialize() {
 
   for (unsigned int i = 0; i < mapsPath_list.size(); i++) {
     ATH_MSG_INFO("Using maps located in: " << mapsPath_list.at(i));
-    //std::unique_ptr<TFile>  mapsFile=std::make_unique<TFile>( (mapsPath_list.at(i)).c_str() ); //this is the ramo potential.
-    TFile* mapsFile = new TFile((mapsPath_list.at(i)).c_str()); //this is the ramo potential.
+    std::unique_ptr<TFile> mapsFile(TFile::Open((mapsPath_list.at(i)).c_str(), "READ")); //this is the ramo potential.
+    if (!mapsFile) {
+        ATH_MSG_ERROR("Cannot open file: " << mapsPath_list.at(i));
+        return StatusCode::FAILURE;
+    }
 
     std::pair < int, int > Layer; // index for layer/end cap position
     Layer.first = 0; //Barrel (0) or End Cap (1)   -    Now only for Barrel. If we want to add End Caps, put them at iayer.first=1
@@ -97,66 +102,77 @@ StatusCode SensorSim3DTool::initialize() {
     //May want to be changed in the future, since there's no point having an index with only one possible value
 
     //Setup ramo weighting field map
-    TH3F* ramoPotentialMap_hold;
-    ramoPotentialMap_hold = 0;
-    ramoPotentialMap_hold = (TH3F* ) mapsFile->Get("ramo");
-    if (ramoPotentialMap_hold == 0) {
-      ATH_MSG_INFO("Did not find a Ramo potential map.  Will use an approximate form.");
+    std::unique_ptr<TH2F> ramoPotentialMap_hold(mapsFile->Get<TH2F>("ramo"));
+    if (!ramoPotentialMap_hold) {
+      ATH_MSG_ERROR("Did not find a Ramo potential map.  Will use an approximate form.");
       return StatusCode::FAILURE; //Obviously, remove this when gen. code is set up
     }
-    //ramoPotentialMap.push_back(ramoPotentialMap_hold);
+    ramoPotentialMap_hold->SetDirectory(nullptr);
     m_ramoPotentialMap.emplace_back();
-    ATH_CHECK(m_ramoPotentialMap.back().setHisto3D(ramoPotentialMap_hold));
+    ATH_CHECK(m_ramoPotentialMap.back().setHisto2D(ramoPotentialMap_hold.get()));
 
     ATH_MSG_INFO("Using fluence " << m_fluence_layers.at(i));
 
     //Now setup the E-field.
-    TH2F* eFieldMap_hold;
-    eFieldMap_hold = 0;
-    eFieldMap_hold = (TH2F* ) mapsFile->Get("efield");
-    if (eFieldMap_hold == 0) {
-      ATH_MSG_INFO("Unable to load sensor e-field map, so generating one using approximations.");
+    std::unique_ptr<TH2F> eFieldMap_hold(mapsFile->Get<TH2F>("efield"));
+    if (!eFieldMap_hold) {
+      ATH_MSG_ERROR("Unable to load sensor e-field map, so generating one using approximations.");
       return StatusCode::FAILURE; //Obviously, remove this when gen. code is set up
     }
+    eFieldMap_hold->SetDirectory(nullptr);
     m_eFieldMap.emplace_back();
-    ATH_CHECK(m_eFieldMap.back().setHisto2D(eFieldMap_hold));
-
-    TH3F* xPositionMap_e_hold;
-    TH3F* xPositionMap_h_hold;
-    TH3F* yPositionMap_e_hold;
-    TH3F* yPositionMap_h_hold;
-    TH2F* timeMap_e_hold;
-    TH2F* timeMap_h_hold;
-
-    xPositionMap_e_hold = 0;
-    xPositionMap_h_hold = 0;
-    yPositionMap_e_hold = 0;
-    yPositionMap_h_hold = 0;
-    timeMap_e_hold = 0;
-    timeMap_h_hold = 0;
-    xPositionMap_e_hold = (TH3F* ) mapsFile->Get("xPosition_e");
-    xPositionMap_h_hold = (TH3F* ) mapsFile->Get("xPosition_h");
-    yPositionMap_e_hold = (TH3F* ) mapsFile->Get("yPosition_e");
-    yPositionMap_h_hold = (TH3F* ) mapsFile->Get("yPosition_h");
-    timeMap_e_hold = (TH2F* ) mapsFile->Get("etimes");
-    timeMap_h_hold = (TH2F* ) mapsFile->Get("htimes");
+    ATH_CHECK(m_eFieldMap.back().setHisto2D(eFieldMap_hold.get()));
+
+    std::unique_ptr<TH3F> xPositionMap_e_hold(mapsFile->Get<TH3F>("xPosition_e"));
+    std::unique_ptr<TH3F> xPositionMap_h_hold(mapsFile->Get<TH3F>("xPosition_h"));
+    std::unique_ptr<TH3F> yPositionMap_e_hold(mapsFile->Get<TH3F>("yPosition_e"));
+    std::unique_ptr<TH3F> yPositionMap_h_hold(mapsFile->Get<TH3F>("yPosition_h"));
+    std::unique_ptr<TH2F> timeMap_e_hold(mapsFile->Get<TH2F>("etimes"));
+    std::unique_ptr<TH2F> timeMap_h_hold(mapsFile->Get<TH2F>("htimes"));
+
+    if (!xPositionMap_e_hold || !xPositionMap_h_hold || !yPositionMap_e_hold || !yPositionMap_h_hold ||
+        !timeMap_e_hold || !timeMap_h_hold) {
+      ATH_MSG_ERROR("Cannot find one of the maps.");
+      return StatusCode::FAILURE; //Obviously, remove this when gen. code is set up
+    }
+
+    xPositionMap_e_hold->SetDirectory(nullptr);
+    xPositionMap_h_hold->SetDirectory(nullptr);
+    yPositionMap_e_hold->SetDirectory(nullptr);
+    yPositionMap_h_hold->SetDirectory(nullptr);
+    timeMap_e_hold->SetDirectory(nullptr);
+    timeMap_h_hold->SetDirectory(nullptr);
+
     //Now, determine the time to reach the electrode and the trapping position.
     m_xPositionMap_e.emplace_back();
     m_xPositionMap_h.emplace_back();
     m_yPositionMap_e.emplace_back();
     m_yPositionMap_h.emplace_back();
-    ATH_CHECK(m_xPositionMap_e.back().setHisto3D(xPositionMap_e_hold));
-    ATH_CHECK(m_xPositionMap_h.back().setHisto3D(xPositionMap_h_hold));
-    ATH_CHECK(m_yPositionMap_e.back().setHisto3D(yPositionMap_e_hold));
-    ATH_CHECK(m_yPositionMap_h.back().setHisto3D(yPositionMap_h_hold));
+    ATH_CHECK(m_xPositionMap_e.back().setHisto3D(xPositionMap_e_hold.get()));
+    ATH_CHECK(m_xPositionMap_h.back().setHisto3D(xPositionMap_h_hold.get()));
+    ATH_CHECK(m_yPositionMap_e.back().setHisto3D(yPositionMap_e_hold.get()));
+    ATH_CHECK(m_yPositionMap_h.back().setHisto3D(yPositionMap_h_hold.get()));
     m_timeMap_e.emplace_back();
     m_timeMap_h.emplace_back();
-    ATH_CHECK(m_timeMap_e.back().setHisto2D(timeMap_e_hold));
-    ATH_CHECK(m_timeMap_h.back().setHisto2D(timeMap_h_hold));
+    ATH_CHECK(m_timeMap_e.back().setHisto2D(timeMap_e_hold.get()));
+    ATH_CHECK(m_timeMap_h.back().setHisto2D(timeMap_h_hold.get()));
+
+    std::unique_ptr<TH2F> avgCharge_e(mapsFile->Get<TH2F>("avgCharge_e"));
+    std::unique_ptr<TH2F> avgCharge_h(mapsFile->Get<TH2F>("avgCharge_h"));
+
+    if (!avgCharge_e || !avgCharge_h) {
+      ATH_MSG_ERROR("Cannot find one of the charge maps.");
+      return StatusCode::FAILURE; //Obviously, remove this when gen. code is set up
+    }
+
+    avgCharge_e->SetDirectory(nullptr);
+    avgCharge_h->SetDirectory(nullptr);
 
     // Get average charge data (for charge chunk effect correction)
-    ATH_CHECK(m_avgChargeMap_e.setHisto2D((TH2F*) mapsFile->Get("avgCharge_e")));
-    ATH_CHECK(m_avgChargeMap_h.setHisto2D((TH2F*) mapsFile->Get("avgCharge_h")));
+    ATH_CHECK(m_avgChargeMap_e.setHisto2D(avgCharge_e.get()));
+    ATH_CHECK(m_avgChargeMap_h.setHisto2D(avgCharge_h.get()));
+
+    mapsFile->Close();
   }
 
   return StatusCode::SUCCESS;
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
index 8622bf6ec9f0bec78d10776b965c10a98b6eebd7..e36e2165428816e4027ea5f6c9050717d9247f4e 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
@@ -22,6 +22,8 @@
 
 #include "TFile.h"
 
+#include <memory>
+
 using namespace InDetDD;
 
 //===============================================
@@ -80,39 +82,43 @@ StatusCode SensorSimPlanarTool::initialize() {
     for (unsigned int i = 0; i < mapsPath_list.size(); i++) {
       ATH_MSG_INFO("Using maps located in: " << mapsPath_list.at(i) << " for layer No." << i);
       ATH_MSG_INFO("Create E field via interpolation based on files from: " << TCADpath_list.at(i));
-      //std::unique_ptr<TFile>  mapsFile=std::make_unique<TFile>( (mapsPath_list.at(i)).c_str() ); //this is the ramo
-      // potential.
-      TFile* mapsFile = new TFile((mapsPath_list.at(i)).c_str()); //this is the ramo potential.
+      std::unique_ptr<TFile> mapsFile(TFile::Open((mapsPath_list.at(i)).c_str(), "READ")); //this is the ramo potential.
+      if (!mapsFile) {
+        ATH_MSG_ERROR("Cannot open file: " << mapsPath_list.at(i));
+        return StatusCode::FAILURE;
+      }
 
       //Setup ramo weighting field map
-      TH3F* ramoPotentialMap_hold;
-      ramoPotentialMap_hold = 0;
-      ramoPotentialMap_hold = (TH3F*) mapsFile->Get("hramomap1");
-      if (ramoPotentialMap_hold == 0) ramoPotentialMap_hold = (TH3F*) mapsFile->Get("ramo3d");
-      if (ramoPotentialMap_hold == 0) {
+      std::unique_ptr<TH3F> ramoPotentialMap_hold(mapsFile->Get<TH3F>("hramomap1"));
+      if (!ramoPotentialMap_hold) {
+        ramoPotentialMap_hold.reset(mapsFile->Get<TH3F>("ramo3d"));
         ATH_MSG_INFO("Did not find a Ramo potential map.  Will use an approximate form.");
+      }
+      if (!ramoPotentialMap_hold) {
         ATH_MSG_WARNING("Not implemented yet - exit");
         return StatusCode::FAILURE; //Obviously, remove this when gen. code is set up
       }
+      ramoPotentialMap_hold->SetDirectory(nullptr);
       m_ramoPotentialMap.emplace_back();
-      ATH_CHECK(m_ramoPotentialMap.back().setHisto3D(ramoPotentialMap_hold));
+      ATH_CHECK(m_ramoPotentialMap.back().setHisto3D(ramoPotentialMap_hold.get()));
       //Now setup the E-field.
-      TH1F* eFieldMap_hold;
-      eFieldMap_hold = new TH1F();
-      //ATH_MSG_INFO("Generating E field maps using interpolation.");
-      CHECK(m_radDamageUtil->generateEfieldMap(eFieldMap_hold, NULL, m_fluenceLayer[i], m_voltageLayer[i], i,
+      TH1F* eFieldMap_hold(nullptr);
+      CHECK(m_radDamageUtil->generateEfieldMap(eFieldMap_hold, nullptr, m_fluenceLayer[i], m_voltageLayer[i], i,
                                                TCADpath_list.at(i), true));
 
-      TH2F* lorentzMap_e_hold = new TH2F();
-      TH2F* lorentzMap_h_hold = new TH2F();
-      TH2F* distanceMap_h_hold = new TH2F();
-      TH2F* distanceMap_e_hold = new TH2F();
-      TH1F* timeMap_e_hold = new TH1F();
-      TH1F* timeMap_h_hold = new TH1F();
+      eFieldMap_hold->SetDirectory(nullptr);
+
+      TH2F* lorentzMap_e_hold(nullptr);
+      TH2F* lorentzMap_h_hold(nullptr);
+      TH2F* distanceMap_h_hold(nullptr);
+      TH2F* distanceMap_e_hold(nullptr);
+      TH1F* timeMap_e_hold(nullptr);
+      TH1F* timeMap_h_hold(nullptr);
 
       ATH_CHECK(m_radDamageUtil->generateDistanceTimeMap(distanceMap_e_hold, distanceMap_h_hold, timeMap_e_hold,
                                                          timeMap_h_hold, lorentzMap_e_hold, lorentzMap_h_hold,
-                                                         eFieldMap_hold, NULL));
+                                                         eFieldMap_hold, nullptr));
+
       // For debugging and documentation: uncomment to save different maps which are based on the interpolated E field
       if (m_radDamageUtil->saveDebugMaps()) {
         TString prename = "map_layer_";
@@ -131,11 +137,19 @@ StatusCode SensorSimPlanarTool::initialize() {
         lorentzMap_h_hold->SaveAs(prename);
       }
       //Safetycheck
-      if (distanceMap_e_hold == 0 || distanceMap_h_hold == 0 || timeMap_e_hold == 0 || timeMap_h_hold == 0 ||
-          lorentzMap_e_hold == 0 || lorentzMap_h_hold == 0) {
-        ATH_MSG_INFO("Unable to load at least one of the distance/time/Lorentz angle maps.");
+      if (!distanceMap_e_hold || !distanceMap_h_hold || !timeMap_e_hold || !timeMap_h_hold ||
+          !lorentzMap_e_hold || !lorentzMap_h_hold) {
+        ATH_MSG_ERROR("Unable to load at least one of the distance/time/Lorentz angle maps.");
         return StatusCode::FAILURE;//Obviously, remove this when gen. code is set up
       }
+
+      lorentzMap_e_hold->SetDirectory(nullptr);
+      lorentzMap_h_hold->SetDirectory(nullptr);
+      distanceMap_e_hold->SetDirectory(nullptr);
+      distanceMap_h_hold->SetDirectory(nullptr);
+      timeMap_e_hold->SetDirectory(nullptr);
+      timeMap_h_hold->SetDirectory(nullptr);
+
       m_distanceMap_e.emplace_back();
       m_distanceMap_h.emplace_back();
       ATH_CHECK(m_distanceMap_e.back().setHisto2D(distanceMap_e_hold));
@@ -144,6 +158,16 @@ StatusCode SensorSimPlanarTool::initialize() {
       m_lorentzMap_h.emplace_back();
       ATH_CHECK(m_lorentzMap_e.back().setHisto2D(lorentzMap_e_hold));
       ATH_CHECK(m_lorentzMap_h.back().setHisto2D(lorentzMap_h_hold));
+
+      delete eFieldMap_hold;
+      delete lorentzMap_e_hold;
+      delete lorentzMap_h_hold;
+      delete distanceMap_e_hold;
+      delete distanceMap_h_hold;
+      delete timeMap_e_hold;
+      delete timeMap_h_hold;
+
+      mapsFile->Close();
     }
   }
   return StatusCode::SUCCESS;