diff --git a/TileCalorimeter/TileMonitoring/TileMonitoring/TileDigitsMonTool.h b/TileCalorimeter/TileMonitoring/TileMonitoring/TileDigitsMonTool.h
index 93228b59b96dc72c325678ae6f06d6b54af457c1..6e67bf69d9bbafc9d17d8d5e1a0e0f335621fa7c 100644
--- a/TileCalorimeter/TileMonitoring/TileMonitoring/TileDigitsMonTool.h
+++ b/TileCalorimeter/TileMonitoring/TileMonitoring/TileDigitsMonTool.h
@@ -122,35 +122,40 @@ class TileDigitsMonTool: public TilePaterMonTool
     bool m_bigain;
     int m_nEvents;
     int m_nSamples;
-    double m_sumPed1[5][64][48][2];
-    double m_sumPed2[5][64][48][2];
-    double m_sumRms1[5][64][48][2];
-    double m_sumRms2[5][64][48][2];
-    double m_meanAmp[5][64][2][48];
-    double m_meanAmp_ij[5][64][2][48][48];
-    int m_nEvents_i[5][64][2][48];
-    int m_nEvents_ij[5][64][2][48][48];
-    double m_cov_ratio[5][64][2]; //covariance ratio printed in covariance plots
-    uint8_t m_stuck_probs[5][64][48][2][10];
-    bool m_allHistsFilled;
+    // Factor these out to avoid triggering the ubsan sanity checks.
+    struct Data {
+      double m_sumPed1[5][64][48][2];
+      double m_sumPed2[5][64][48][2];
+      double m_sumRms1[5][64][48][2];
+      double m_sumRms2[5][64][48][2];
+      double m_meanAmp[5][64][2][48];
+      double m_meanAmp_ij[5][64][2][48][48];
+      int m_nEvents_i[5][64][2][48];
+      int m_nEvents_ij[5][64][2][48][48];
+      double m_cov_ratio[5][64][2]; //covariance ratio printed in covariance plots
+      uint8_t m_stuck_probs[5][64][48][2][10];
+
+      //vector to hold data corruption information
+      // std::vector<bool> corrup[5][64][2]; //ros, drawer, gain (index of each vector is channel)
+      bool m_corrup[5][64][2][16]; //ros, drawer, gain, DMU
+
+      //Pointers to Histograms
+      std::vector<TH1S *> m_hist0[5][64]; // ros,drawer
+      std::vector<TH1S *> m_hist1[5][64][48][2]; // ros,drawer,channel,gain
+      std::vector<TH1I *> m_hist_DMUerr[5][64][48][2]; // ros,drawer,channel,gain for DMU BCID/CRC errors
+      std::vector<TH2F *> m_hist2[5][64][2];
+      std::vector<TProfile *> m_histP[5][64][48][2];
+      std::vector<TH1F *> m_final_hist1[5][64][2]; // ros, drawer, gain
+      std::vector<TH2F *> m_final_hist2[5][64][2];
+      TH2C* m_final_hist_stucks[5][64][2]; // stuck bits, saturation: ros, drawer. gain
+      std::vector<TH1D *> m_outInHighGain;
+
+      //shifted histos for DQMF
+      TH1S * m_shifted_hist[5][64][49][2]; // one extra histo for reference!
 
-    //vector to hold data corruption information
-    // std::vector<bool> corrup[5][64][2]; //ros, drawer, gain (index of each vector is channel)
-    bool m_corrup[5][64][2][16]; //ros, drawer, gain, DMU
-
-    //Pointers to Histograms
-    std::vector<TH1S *> m_hist0[5][64]; // ros,drawer
-    std::vector<TH1S *> m_hist1[5][64][48][2]; // ros,drawer,channel,gain
-    std::vector<TH1I *> m_hist_DMUerr[5][64][48][2]; // ros,drawer,channel,gain for DMU BCID/CRC errors
-    std::vector<TH2F *> m_hist2[5][64][2];
-    std::vector<TProfile *> m_histP[5][64][48][2];
-    std::vector<TH1F *> m_final_hist1[5][64][2]; // ros, drawer, gain
-    std::vector<TH2F *> m_final_hist2[5][64][2];
-    TH2C* m_final_hist_stucks[5][64][2]; // stuck bits, saturation: ros, drawer. gain
-    std::vector<TH1D *> m_outInHighGain;
-
-    //shifted histos for DQMF
-    TH1S * m_shifted_hist[5][64][49][2]; // one extra histo for reference!
+    };
+    std::unique_ptr<Data> m_data;
+    bool m_allHistsFilled;
 
     //For test
     //int hp;
diff --git a/TileCalorimeter/TileMonitoring/TileMonitoring/TileRawChannelMonTool.h b/TileCalorimeter/TileMonitoring/TileMonitoring/TileRawChannelMonTool.h
index bd62f79f7cc4d39274cb462e54a5db360e6b44ba..00b33e496558e5989e884fea43605b721277a080 100644
--- a/TileCalorimeter/TileMonitoring/TileMonitoring/TileRawChannelMonTool.h
+++ b/TileCalorimeter/TileMonitoring/TileMonitoring/TileRawChannelMonTool.h
@@ -136,23 +136,26 @@ class TileRawChannelMonTool: public TilePaterMonTool {
 
     bool m_bigain;
     int m_nEvents;
-    float m_rangeQ[2][2][3][48];
-    double m_timeCov[5][64][48][2][2][6];
-    double m_timeCovCorr[5][64][48][2][2][3];	//Lukas
-
-    //Pointers to Histograms
-    std::vector<TH1S *> m_hist1[5][64][48][2]; // ros,drawer,channel,gain
-    std::vector<TH2S *> m_hist2[5][64][48][2];
-    std::vector<TH1F *> m_finalHist1[5][64][2][2]; //ros, drawer,capacitor, gain
-    std::vector<TH2F *> m_finalHist2[256][2];
-
-    std::vector<TH1F *> m_histDsp1[5][64][48][2]; // ros,drawer,channel,gain
-    std::vector<TH2F *> m_histDsp2[5][64][48][2];
-    std::vector<TH1F *> m_finalHistDsp1[5][64][2]; //ros,drawer,gain
-    std::vector<TH2F *> m_finalHistDsp2[5][64][2];
-    std::vector<TH1F *> m_hBarDsp1[5][64][2]; // ros, drawer,gain
-
-    std::vector<TH1F *> m_summaryPmts[5][64][2][2];
+    struct Data {
+      float m_rangeQ[2][2][3][48];
+      double m_timeCov[5][64][48][2][2][6];
+      double m_timeCovCorr[5][64][48][2][2][3];	//Lukas
+
+      //Pointers to Histograms
+      std::vector<TH1S *> m_hist1[5][64][48][2]; // ros,drawer,channel,gain
+      std::vector<TH2S *> m_hist2[5][64][48][2];
+      std::vector<TH1F *> m_finalHist1[5][64][2][2]; //ros, drawer,capacitor, gain
+      std::vector<TH2F *> m_finalHist2[256][2];
+
+      std::vector<TH1F *> m_histDsp1[5][64][48][2]; // ros,drawer,channel,gain
+      std::vector<TH2F *> m_histDsp2[5][64][48][2];
+      std::vector<TH1F *> m_finalHistDsp1[5][64][2]; //ros,drawer,gain
+      std::vector<TH2F *> m_finalHistDsp2[5][64][2];
+      std::vector<TH1F *> m_hBarDsp1[5][64][2]; // ros, drawer,gain
+
+      std::vector<TH1F *> m_summaryPmts[5][64][2][2];
+    };
+    std::unique_ptr<Data> m_data;
 
     TileRawChannelUnit::UNIT m_calibUnit;
 
diff --git a/TileCalorimeter/TileMonitoring/src/TileDigitsMonTool.cxx b/TileCalorimeter/TileMonitoring/src/TileDigitsMonTool.cxx
index 72b8c1f9128023572cc0277f0eacff7418e94f8f..f823d98163b262ce65a7b3d0ad297f728a8b4320 100644
--- a/TileCalorimeter/TileMonitoring/src/TileDigitsMonTool.cxx
+++ b/TileCalorimeter/TileMonitoring/src/TileDigitsMonTool.cxx
@@ -54,16 +54,6 @@ TileDigitsMonTool::TileDigitsMonTool(const std::string & type, const std::string
   , m_cispar(0)
   , m_nEvents(0)
   , m_nSamples(0)
-  , m_sumPed1{}
-  , m_sumPed2{}
-  , m_sumRms1{}
-  , m_sumRms2{}
-  , m_meanAmp{}
-  , m_meanAmp_ij{}
-  , m_nEvents_i{}
-  , m_nEvents_ij{}
-  , m_cov_ratio{}
-  , m_stuck_probs{}
   , m_allHistsFilled(false)
   //, hp(-1)
   //, hb(-1)
@@ -103,15 +93,16 @@ StatusCode TileDigitsMonTool::initialize()
 
   m_nEvents = 0;
   m_allHistsFilled = false;
-  memset(m_sumPed1, 0, sizeof(m_sumPed1));
-  memset(m_sumPed2, 0, sizeof(m_sumPed2));
-  memset(m_sumRms1, 0, sizeof(m_sumRms1));
-  memset(m_sumRms2, 0, sizeof(m_sumRms2));
-  memset(m_meanAmp, 0, sizeof(m_meanAmp));
-  memset(m_meanAmp_ij, 0, sizeof(m_meanAmp_ij));
-  memset(m_nEvents_i, 0, sizeof(m_nEvents_i));
-  memset(m_nEvents_ij, 0, sizeof(m_nEvents_ij));
-  memset(m_stuck_probs, 0, sizeof(m_stuck_probs));
+  m_data = std::make_unique<Data>();
+  memset(m_data->m_sumPed1, 0, sizeof(m_data->m_sumPed1));
+  memset(m_data->m_sumPed2, 0, sizeof(m_data->m_sumPed2));
+  memset(m_data->m_sumRms1, 0, sizeof(m_data->m_sumRms1));
+  memset(m_data->m_sumRms2, 0, sizeof(m_data->m_sumRms2));
+  memset(m_data->m_meanAmp, 0, sizeof(m_data->m_meanAmp));
+  memset(m_data->m_meanAmp_ij, 0, sizeof(m_data->m_meanAmp_ij));
+  memset(m_data->m_nEvents_i, 0, sizeof(m_data->m_nEvents_i));
+  memset(m_data->m_nEvents_ij, 0, sizeof(m_data->m_nEvents_ij));
+  memset(m_data->m_stuck_probs, 0, sizeof(m_data->m_stuck_probs));
 
   //For test stuck_bits_maker
   //hp = 1;
@@ -138,7 +129,7 @@ StatusCode TileDigitsMonTool::bookHists()
     }
   }
 
-  m_outInHighGain.push_back(book1D("Summary", "OverFlowInHighGain", "Injected charge with overflow in high gain", 10010, -0.5, 1000.5));
+  m_data->m_outInHighGain.push_back(book1D("Summary", "OverFlowInHighGain", "Injected charge with overflow in high gain", 10010, -0.5, 1000.5));
 
   //SetBookStatus(true);
 
@@ -189,7 +180,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
     sStr << moduleName << " DMU Header " << gain[3 + gn] << " errors";
     histTitle = sStr.str();
 
-    m_hist2[ros][drawer][adc].push_back(book2F(subDir, histName, histTitle, 16, 0., 16., 8, -0.5, 7.5));
+    m_data->m_hist2[ros][drawer][adc].push_back(book2F(subDir, histName, histTitle, 16, 0., 16., 8, -0.5, 7.5));
   }
 
   for (int ch = 0; ch < 48; ++ch) {
@@ -213,7 +204,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
       sStr << moduleName << " CH " << ch << gain[3 + gn] << " sample[0]";
       histTitle = sStr.str();
 
-      m_hist1[ros][drawer][ch][adc].push_back(book1S(subDir, histName, histTitle, 151, -0.5, 150.5));
+      m_data->m_hist1[ros][drawer][ch][adc].push_back(book1S(subDir, histName, histTitle, 151, -0.5, 150.5));
 
       // RMS over samples in event
       sStr.str("");
@@ -224,7 +215,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
       sStr << moduleName << " CH " << ch << gain[3 + gn] << " mean RMS in event";
       histTitle = sStr.str();
 
-      m_hist1[ros][drawer][ch][adc].push_back(book1S(subDir, histName, histTitle, 101, -0.05, 10.05));
+      m_data->m_hist1[ros][drawer][ch][adc].push_back(book1S(subDir, histName, histTitle, 101, -0.05, 10.05));
 
       //all samples to find stuck bits
       sStr.str("");
@@ -235,7 +226,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
       sStr << moduleName << " CH " << ch << gain[3 + gn] << " all samples";
       histTitle = sStr.str();
 
-      m_hist1[ros][drawer][ch][adc].push_back(book1S(subDir, histName, histTitle, 1024, -0.5, 1023.5));
+      m_data->m_hist1[ros][drawer][ch][adc].push_back(book1S(subDir, histName, histTitle, 1024, -0.5, 1023.5));
 
       // average profile for a given channel/gain
       sStr.str("");
@@ -246,7 +237,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
       sStr << moduleName << " CH " << ch << gain[3 + gn] << " average profile";
       histTitle = sStr.str();
 
-      m_histP[ros][drawer][ch][adc].push_back(bookProfile(subDir, histName, histTitle, m_nSamples, 0.0, m_nSamples * 1.0, -0.5, 1023.5));
+      m_data->m_histP[ros][drawer][ch][adc].push_back(bookProfile(subDir, histName, histTitle, m_nSamples, 0.0, m_nSamples * 1.0, -0.5, 1023.5));
 
       // shifted samples histograms
 
@@ -262,7 +253,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
       sStr << moduleName << " CH " << ch << gain[3 + gn] << " all samples shifted";
       histTitle = sStr.str();
 
-      m_shifted_hist[ros][drawer][ch][adc] = book1S(subDir, histName, histTitle, shiftnbins, shiftxmin, shiftxmax);
+      m_data->m_shifted_hist[ros][drawer][ch][adc] = book1S(subDir, histName, histTitle, shiftnbins, shiftxmin, shiftxmax);
 
       if (ch < 16) { // use first 16 channels to store BCID/CRC errors (one per TileDMU)
 
@@ -278,7 +269,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
         sStr << moduleName << " DMU0 " << ch << gain[3 + gn] << " BCID";
         histTitle = sStr.str();
 
-        m_hist1[ros][drawer][ch][adc].push_back(book1S(subDir, histName, histTitle, 100, 2050.5, 2150.5));
+        m_data->m_hist1[ros][drawer][ch][adc].push_back(book1S(subDir, histName, histTitle, 100, 2050.5, 2150.5));
 
         sStr.str("");
         sStr << moduleName << "_dmu_" << sDmu << gain[gn] << "_BCID_err";
@@ -288,7 +279,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
         sStr << moduleName << " DMU0 " << ch << gain[3 + gn] << " BCID errors";
         histTitle = sStr.str();
 
-        m_hist_DMUerr[ros][drawer][ch][adc].push_back(book1I(subDir, histName, histTitle, 3, -0.5, 2.5));
+        m_data->m_hist_DMUerr[ros][drawer][ch][adc].push_back(book1I(subDir, histName, histTitle, 3, -0.5, 2.5));
 
         if (adc) continue; // don't book CRC for high gain
 
@@ -300,7 +291,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
         sStr << moduleName << " DMU0 " << ch << " CRC errors";
         histTitle = sStr.str();
 
-        m_hist_DMUerr[ros][drawer][ch][0].push_back(book1I(subDir, histName, histTitle, 5, -0.5, 4.5));
+        m_data->m_hist_DMUerr[ros][drawer][ch][0].push_back(book1I(subDir, histName, histTitle, 5, -0.5, 4.5));
       }
     }
   }
@@ -316,7 +307,7 @@ void TileDigitsMonTool::bookHists(int ros, int drawer)
   sStr << moduleName << " global CRC errors";
   histTitle = sStr.str();
 
-  m_hist0[ros][drawer].push_back(book1S("Summary", histName, histTitle, 3, -0.5, 2.5));
+  m_data->m_hist0[ros][drawer].push_back(book1S("Summary", histName, histTitle, 3, -0.5, 2.5));
 
 }
 
@@ -347,7 +338,7 @@ StatusCode TileDigitsMonTool::fillHists()
     int ros = m_tileHWID->ros(adc_id);
     int drawer = m_tileHWID->drawer(adc_id);
 
-    if (m_hist1[ros][drawer][0][0].size() == 0) {
+    if (m_data->m_hist1[ros][drawer][0][0].size() == 0) {
       m_bigain = true;
       m_nSamples = digitsCollection->front()->NtimeSamples();
       if (!m_bookAll) bookHists(ros, drawer);
@@ -362,10 +353,10 @@ StatusCode TileDigitsMonTool::fillHists()
         bin = 7.;
       }
       for (int dmu = 0; dmu < 16; dmu++) {
-        m_corrup[ros][drawer][0][dmu] = true;
-        m_corrup[ros][drawer][1][dmu] = true;
-        m_hist2[ros][drawer][0][0]->Fill(dmu + 0.5, bin, 1.);
-        m_hist2[ros][drawer][1][0]->Fill(dmu + 0.5, bin, 1.);
+        m_data->m_corrup[ros][drawer][0][dmu] = true;
+        m_data->m_corrup[ros][drawer][1][dmu] = true;
+        m_data->m_hist2[ros][drawer][0][0]->Fill(dmu + 0.5, bin, 1.);
+        m_data->m_hist2[ros][drawer][1][0]->Fill(dmu + 0.5, bin, 1.);
       }
       continue;
     }
@@ -379,13 +370,13 @@ StatusCode TileDigitsMonTool::fillHists()
     }
     
     for (int dmu = 0; dmu < headsize; dmu++) {
-      m_corrup[ros][drawer][0][dmu] = DMUheaderCheck(&headerVec, ros, drawer, 0, dmu); //tests and fills
-      m_corrup[ros][drawer][1][dmu] = DMUheaderCheck(&headerVec, ros, drawer, 1, dmu);
+      m_data->m_corrup[ros][drawer][0][dmu] = DMUheaderCheck(&headerVec, ros, drawer, 0, dmu); //tests and fills
+      m_data->m_corrup[ros][drawer][1][dmu] = DMUheaderCheck(&headerVec, ros, drawer, 1, dmu);
     }
   
     for (int dmu = headsize; dmu < 16; dmu++) {
-      m_corrup[ros][drawer][0][dmu] = false;
-      m_corrup[ros][drawer][1][dmu] = false;
+      m_data->m_corrup[ros][drawer][0][dmu] = false;
+      m_data->m_corrup[ros][drawer][1][dmu] = false;
     }
   }
 
@@ -397,7 +388,7 @@ StatusCode TileDigitsMonTool::fillHists()
     int ros = m_tileHWID->ros(adc_id);
     int drawer = m_tileHWID->drawer(adc_id);
 
-    if (m_hist1[ros][drawer][0][0].size() == 0) {
+    if (m_data->m_hist1[ros][drawer][0][0].size() == 0) {
       //m_bigain = (m_beamInfo->calibMode() == 1); // true if bi-gain run
       // For the time being, we fill both high and low gain plots, as it was requiered by Tomas
       m_bigain = true;
@@ -440,36 +431,36 @@ StatusCode TileDigitsMonTool::fillHists()
         rmssamp += dig * dig;
         mean_tmp[chan][gain][i] = dig;
         
-        if (!m_corrup[ros][drawer][gain][chan / 3]) {
+        if (!m_data->m_corrup[ros][drawer][gain][chan / 3]) {
           if (m_runType != CisRun) {
-            m_histP[ros][drawer][chan][gain][0]->Fill(i + 0.1, dig, 1.0);
-            m_hist1[ros][drawer][chan][gain][2]->Fill(dig, 1.0);
+            m_data->m_histP[ros][drawer][chan][gain][0]->Fill(i + 0.1, dig, 1.0);
+            m_data->m_hist1[ros][drawer][chan][gain][2]->Fill(dig, 1.0);
           } else if (m_cispar[6] > 0. && (dig > 0 || gain < 1 || charge < 12.)) { //LF If CIS run, Protection to avoid zero amplitudes due to 0 injected charge
-            m_histP[ros][drawer][chan][gain][0]->Fill(i + 0.1, dig, 1.0);
-            m_hist1[ros][drawer][chan][gain][2]->Fill(dig, 1.0);
+            m_data->m_histP[ros][drawer][chan][gain][0]->Fill(i + 0.1, dig, 1.0);
+            m_data->m_hist1[ros][drawer][chan][gain][2]->Fill(dig, 1.0);
           }
           
           if (gain == 1 && dig > 1022.5) // overflow in high gain, find charge is it
-            m_outInHighGain[0]->Fill(charge);
+            m_data->m_outInHighGain[0]->Fill(charge);
         }
       }
 
-      if (dsize > 0 && !m_corrup[ros][drawer][gain][chan / 3]) {
+      if (dsize > 0 && !m_data->m_corrup[ros][drawer][gain][chan / 3]) {
         double ped = vdigits[0];
-        m_hist1[ros][drawer][chan][gain][0]->Fill(ped, 1.0);
-        m_sumPed1[ros][drawer][chan][gain] += ped;
-        m_sumPed2[ros][drawer][chan][gain] += ped * ped;
+        m_data->m_hist1[ros][drawer][chan][gain][0]->Fill(ped, 1.0);
+        m_data->m_sumPed1[ros][drawer][chan][gain] += ped;
+        m_data->m_sumPed2[ros][drawer][chan][gain] += ped * ped;
         //if ( (chan==23)&&(ros==1)&&(drawer==18)&&(gain==0)) {
-        //std::cout << "ped=" << ped << "\tm_sumPed1=" << m_sumPed1[ros][drawer][chan][gain] << "\n";
-        //std::cout << "ped^2=" << ped*ped << "\tm_sumPed2=" << m_sumPed2[ros][drawer][chan][gain] << "\n";
+        //std::cout << "ped=" << ped << "\tm_sumPed1=" << m_data->m_sumPed1[ros][drawer][chan][gain] << "\n";
+        //std::cout << "ped^2=" << ped*ped << "\tm_sumPed2=" << m_data->m_sumPed2[ros][drawer][chan][gain] << "\n";
         //}
         if (dsize > 1) {
           meansamp /= dsize;
           rmssamp = rmssamp / dsize - meansamp * meansamp;
           rmssamp = (rmssamp > 0.0) ? sqrt(rmssamp * dsize / (dsize - 1)) : 0.0;
-          m_hist1[ros][drawer][chan][gain][1]->Fill(rmssamp, 1.0);
-          m_sumRms1[ros][drawer][chan][gain] += rmssamp;
-          m_sumRms2[ros][drawer][chan][gain] += rmssamp * rmssamp;
+          m_data->m_hist1[ros][drawer][chan][gain][1]->Fill(rmssamp, 1.0);
+          m_data->m_sumRms1[ros][drawer][chan][gain] += rmssamp;
+          m_data->m_sumRms2[ros][drawer][chan][gain] += rmssamp * rmssamp;
         }
       }
     } // digits
@@ -478,13 +469,13 @@ StatusCode TileDigitsMonTool::fillHists()
     for (int sample = 0; sample < m_nSamples; ++sample) {
       for (int gain = 0; gain < 2; ++gain) {
         for (int ch_i = 0; ch_i < 48; ++ch_i)
-	  if (!m_corrup[ros][drawer][gain][ch_i / 3]) {
-	    m_nEvents_i[ros][drawer][gain][ch_i]++;
-	    m_meanAmp[ros][drawer][gain][ch_i] += mean_tmp[ch_i][gain][sample];
+	  if (!m_data->m_corrup[ros][drawer][gain][ch_i / 3]) {
+	    m_data->m_nEvents_i[ros][drawer][gain][ch_i]++;
+	    m_data->m_meanAmp[ros][drawer][gain][ch_i] += mean_tmp[ch_i][gain][sample];
 	    for (int ch_j = 0; ch_j < 48; ++ch_j)
-	      if (!m_corrup[ros][drawer][gain][ch_j / 3]) {
-		m_nEvents_ij[ros][drawer][gain][ch_i][ch_j]++;
-		m_meanAmp_ij[ros][drawer][gain][ch_i][ch_j] += mean_tmp[ch_i][gain][sample] * mean_tmp[ch_j][gain][sample];
+	      if (!m_data->m_corrup[ros][drawer][gain][ch_j / 3]) {
+		m_data->m_nEvents_ij[ros][drawer][gain][ch_i][ch_j]++;
+		m_data->m_meanAmp_ij[ros][drawer][gain][ch_i][ch_j] += mean_tmp[ch_i][gain][sample] * mean_tmp[ch_j][gain][sample];
 	      }
 	  }
       }
@@ -495,17 +486,17 @@ StatusCode TileDigitsMonTool::fillHists()
     
     for (int ch = 0; ch < headsize; ++ch) {
       uint32_t bcid_ch = (headerVec[ch] & 0xFFF);
-      m_hist1[ros][drawer][ch][0][3]->Fill(bcid_ch, 1.0);
+      m_data->m_hist1[ros][drawer][ch][0][3]->Fill(bcid_ch, 1.0);
       if ((bcid_ch == bcid) || (bcid_ch == bcid - 1)) 	// Conservative condition to be consistent with both run before Feb07 and
-        m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(1.0, 1.0);  	// runs after Feb07. Introducing a RunNum variable it could be more strict.
+        m_data->m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(1.0, 1.0);  	// runs after Feb07. Introducing a RunNum variable it could be more strict.
       else if ((bcid == 0) && ((bcid_ch == 3563) || (bcid_ch == 3564)))	// if bcid==0 then bcid_ch should be 3563 (0xDEB)
-        m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(1.0, 1.0);			// but sometimes 3564 (0xDEC) is observed.
+        m_data->m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(1.0, 1.0);			// but sometimes 3564 (0xDEC) is observed.
       //        if (bcid_ch == bcid) 				// Now allow only exact bcid: ROD BCID = DMU BCID+1
-      //          m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(1.0,1.0);  	// 	Apr 2013
+      //          m_data->m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(1.0,1.0);  	// 	Apr 2013
       //        else if (bcid_ch == 0)
-      //          m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(0.0,1.0);
+      //          m_data->m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(0.0,1.0);
       //        else 
-      //          m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(2.0,1.0);
+      //          m_data->m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(2.0,1.0);
     }
     
     //DMUheaderCheck(&headerVec,headsize,ros,drawer,0); 
@@ -522,17 +513,17 @@ StatusCode TileDigitsMonTool::fillHists()
     // if monogain run with m_bigain==1, we fill the BCID plots we the same info
     for (int ch = 0; ch < headsize; ++ch) {
       uint32_t bcid_ch = (headerVec[ch] & 0xFFF);
-      m_hist1[ros][drawer][ch][1][3]->Fill(bcid_ch, 1.0);
+      m_data->m_hist1[ros][drawer][ch][1][3]->Fill(bcid_ch, 1.0);
       if ((bcid_ch == bcid) || (bcid_ch == bcid - 1))  		// BCID from TileDMU should match BCID from ROD header or
-        m_hist_DMUerr[ros][drawer][ch][1][0]->Fill(1.0, 1.0);        		// bcid-1 for runs after Feb07.
+        m_data->m_hist_DMUerr[ros][drawer][ch][1][0]->Fill(1.0, 1.0);        		// bcid-1 for runs after Feb07.
       else if ((bcid == 0) && ((bcid_ch == 3563) || (bcid_ch == 3564)))	// if bcid==0 then bcid_ch should be 3563 (0xDEB)
-        m_hist_DMUerr[ros][drawer][ch][1][0]->Fill(1.0, 1.0);			// but sometimes 3564 (0xDEC) is observed.
+        m_data->m_hist_DMUerr[ros][drawer][ch][1][0]->Fill(1.0, 1.0);			// but sometimes 3564 (0xDEC) is observed.
       //        if (bcid_ch == bcid) 				// Now allow only exact bcid
-      //          m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(1.0,1.0);  	// 	Apr 2013
+      //          m_data->m_hist_DMUerr[ros][drawer][ch][0][0]->Fill(1.0,1.0);  	// 	Apr 2013
       //	  else if (bcid_ch == 0)
-      //	    m_hist_DMUerr[ros][drawer][ch][1][0]->Fill(0.0,1.0);
+      //	    m_data->m_hist_DMUerr[ros][drawer][ch][1][0]->Fill(0.0,1.0);
       //	  else
-      //	    m_hist_DMUerr[ros][drawer][ch][1][0]->Fill(2.0,1.0);
+      //	    m_data->m_hist_DMUerr[ros][drawer][ch][1][0]->Fill(2.0,1.0);
     }
     
     //DMUheaderCheck(&headerVec,headsize,ros,drawer,1);
@@ -582,7 +573,7 @@ StatusCode TileDigitsMonTool::finalHists()
 
   for (unsigned int ros = 1; ros < TileCalibUtils::MAX_ROS; ++ros) {
     for (unsigned int drawer = 0; drawer < TileCalibUtils::MAX_DRAWER ; ++drawer) {
-      if (m_hist1[ros][drawer][0][0].size() != 0) {
+      if (m_data->m_hist1[ros][drawer][0][0].size() != 0) {
         unsigned int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
 
         std::ostringstream sStr;
@@ -601,7 +592,7 @@ StatusCode TileDigitsMonTool::finalHists()
             sStr.str("");
             sStr << moduleName << gain[3 + gn] << HistName[4 + type];
             histTitle = sStr.str();
-            m_final_hist1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 48, 0.0, 48.0));
+             m_data->m_final_hist1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 48, 0.0, 48.0));
           }
 
           // stuck bits and saturations / 0s
@@ -611,13 +602,13 @@ StatusCode TileDigitsMonTool::finalHists()
           sStr.str("");
           sStr << moduleName << gain[3 + gn] << " Stuck bits and saturation";
           histTitle = sStr.str();
-          m_final_hist_stucks[ros][drawer][adc] = book2C(subDir, histName, histTitle, 48, 0.0, 48.0, 6, 0., 6.);
-          m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(1, "SB 0");
-          m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(2, "SB 1,2");
-          m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(3, "SB 3,4");
-          m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(4, "SB 5-9");
-          m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(5, "zeros");
-          m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(6, "saturation");
+          m_data->m_final_hist_stucks[ros][drawer][adc] = book2C(subDir, histName, histTitle, 48, 0.0, 48.0, 6, 0., 6.);
+          m_data->m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(1, "SB 0");
+          m_data->m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(2, "SB 1,2");
+          m_data->m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(3, "SB 3,4");
+          m_data->m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(4, "SB 5-9");
+          m_data->m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(5, "zeros");
+          m_data->m_final_hist_stucks[ros][drawer][adc]->GetYaxis()->SetBinLabel(6, "saturation");
 
           for (unsigned int channel = 0; channel < TileCalibUtils::MAX_CHAN; ++channel) {
 
@@ -625,7 +616,7 @@ StatusCode TileDigitsMonTool::finalHists()
 
             double Ped = 0.0, PedRMS = 0.0, RMSHi = 0.0;
 
-            int nevents = int(m_hist1[ros][drawer][channel][adc][0]->GetEntries()); //ROOT GetEntries return a Double_t.
+            int nevents = int(m_data->m_hist1[ros][drawer][channel][adc][0]->GetEntries()); //ROOT GetEntries return a Double_t.
             bool fillPedAndRms = (nevents > 0);
 
             if ((nevents != 0) && (nevents != m_nEvents)) {
@@ -641,7 +632,7 @@ StatusCode TileDigitsMonTool::finalHists()
               /// I use the latter for calculation porpouse. I could even use
               /// the histogram mean and RMS, but it is not necessary and I
               /// avoid problems in case of overflows.
-              ATH_MSG_VERBOSE( "Number of entries in histo " << m_hist1[ros][drawer][channel][adc][0]->GetTitle()
+              ATH_MSG_VERBOSE( "Number of entries in histo " << m_data->m_hist1[ros][drawer][channel][adc][0]->GetTitle()
                               << " doesnt match n. of events! Using the first one in mean and RMS calculation" );
 
               ATH_MSG_VERBOSE( "Number of entries in histo =" << nevents << "\tNumber of events= " << m_nEvents );
@@ -653,11 +644,11 @@ StatusCode TileDigitsMonTool::finalHists()
             if (fillPedAndRms) {
 
               if (nevents > 0) {
-                Ped = m_sumPed1[ros][drawer][channel][adc] / nevents;
-                RMSHi = m_sumRms1[ros][drawer][channel][adc] / nevents;
+                Ped = m_data->m_sumPed1[ros][drawer][channel][adc] / nevents;
+                RMSHi = m_data->m_sumRms1[ros][drawer][channel][adc] / nevents;
                 
                 if (nevents > 1) {
-                  PedRMS = m_sumPed2[ros][drawer][channel][adc] / nevents - Ped * Ped;
+                  PedRMS = m_data->m_sumPed2[ros][drawer][channel][adc] / nevents - Ped * Ped;
                   PedRMS = (PedRMS > 0.0) ? sqrt(PedRMS * nevents / (nevents - 1)) : 0.0;
                 }
               }
@@ -665,7 +656,7 @@ StatusCode TileDigitsMonTool::finalHists()
               //	    if ( (pmt==24)&&(ros==1)&&(drawer==18)&&(adc==0)) {
               //std::cout << "Evt = " << m_nEvents << "\t channel=" << channel << "  pmt=" << pmt << "\n";
               //std::cout << "Ped = " << Ped << "\n";
-              //std::cout << "E(x^2) = " << m_sumPed2[ros][drawer][channel][adc] << "\n";
+              //std::cout << "E(x^2) = " << m_data->m_sumPed2[ros][drawer][channel][adc] << "\n";
               //std::cout << "PedRMS = " << PedRMS << "\n";
               
               //}
@@ -673,24 +664,24 @@ StatusCode TileDigitsMonTool::finalHists()
               if (m_fillPedestalDifference) {
 
                 if (!isDisconnected(ros, drawer, channel)) {
-                  m_final_hist1[ros][drawer][adc][0]->SetBinContent(channel + 1, Ped - m_tileToolNoiseSample->getPed(drawerIdx, channel, adc));
-                  m_final_hist1[ros][drawer][adc][0]->SetBinError(channel + 1, PedRMS);
+                  m_data->m_final_hist1[ros][drawer][adc][0]->SetBinContent(channel + 1, Ped - m_tileToolNoiseSample->getPed(drawerIdx, channel, adc));
+                  m_data->m_final_hist1[ros][drawer][adc][0]->SetBinError(channel + 1, PedRMS);
                 }
 
               } else {
-                m_final_hist1[ros][drawer][adc][0]->SetBinContent(channel + 1, Ped);
-                m_final_hist1[ros][drawer][adc][0]->SetBinError(channel + 1, PedRMS);
+                m_data->m_final_hist1[ros][drawer][adc][0]->SetBinContent(channel + 1, Ped);
+                m_data->m_final_hist1[ros][drawer][adc][0]->SetBinError(channel + 1, PedRMS);
               }
               
-              m_final_hist1[ros][drawer][adc][1]->SetBinContent(channel + 1, PedRMS);
-              m_final_hist1[ros][drawer][adc][2]->SetBinContent(channel + 1, RMSHi);
+              m_data->m_final_hist1[ros][drawer][adc][1]->SetBinContent(channel + 1, PedRMS);
+              m_data->m_final_hist1[ros][drawer][adc][2]->SetBinContent(channel + 1, RMSHi);
               
             }
 
             // For tests
-            //stuckBits_maker(m_hist1[ros][drawer][channel][adc][2]);
+            //stuckBits_maker(m_data->m_hist1[ros][drawer][channel][adc][2]);
 
-            TH1S * hist = m_hist1[ros][drawer][channel][adc][2];
+            TH1S * hist = m_data->m_hist1[ros][drawer][channel][adc][2];
             double weight = 0.0;
             for (int i = 2; i < 1025; ++i) { // first bin is excluded
               weight += hist->GetBinContent(i);
@@ -708,8 +699,8 @@ StatusCode TileDigitsMonTool::finalHists()
                 weight += 1.0; // some stuck bits
               }
             }
-            m_final_hist1[ros][drawer][adc][3]->SetBinContent(channel + 1, weight);
-            stuckBits_Amp2(hist, adc, m_final_hist_stucks[ros][drawer][adc], channel, m_stuck_probs[ros][drawer][channel][adc]);
+            m_data->m_final_hist1[ros][drawer][adc][3]->SetBinContent(channel + 1, weight);
+            stuckBits_Amp2(hist, adc, m_data->m_final_hist_stucks[ros][drawer][adc], channel, m_data->m_stuck_probs[ros][drawer][channel][adc]);
           } // end of loop over channels
 
           // BCID
@@ -719,7 +710,7 @@ StatusCode TileDigitsMonTool::finalHists()
           sStr.str("");
           sStr << moduleName << gain[3 + gn] << ErrName[2];
           histTitle = sStr.str();
-          m_final_hist1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 16, 0.0, 16.0));
+          m_data->m_final_hist1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 16, 0.0, 16.0));
 
           // CRC only for one gain
           if (adc == 0) {
@@ -729,7 +720,7 @@ StatusCode TileDigitsMonTool::finalHists()
             sStr.str("");
             sStr << moduleName << ErrName[3];
             histTitle = sStr.str();
-            m_final_hist1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 16, 0.0, 16.0));
+            m_data->m_final_hist1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 16, 0.0, 16.0));
           }
 
           for (int ch = 0; ch < 16; ++ch) {
@@ -738,12 +729,12 @@ StatusCode TileDigitsMonTool::finalHists()
 
             // BCID and CRC errors
             for (int id = 0; id < 2; ++id) {
-              int bin0 = lround(m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(0));
-              int bin1 = lround(m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(1));
-              int bin2 = lround(m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(2));
-              int bin3 = lround(m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(3));
-              int bin4 = lround(m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(4));
-              int bin5 = lround(m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(5));
+              int bin0 = lround(m_data->m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(0));
+              int bin1 = lround(m_data->m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(1));
+              int bin2 = lround(m_data->m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(2));
+              int bin3 = lround(m_data->m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(3));
+              int bin4 = lround(m_data->m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(4));
+              int bin5 = lround(m_data->m_hist_DMUerr[ros][drawer][ch][adc][id]->GetBinContent(5));
               double weight = -1.0;
 
               if (bin0 + bin3 + bin4 + bin5 > 0) {
@@ -765,7 +756,7 @@ StatusCode TileDigitsMonTool::finalHists()
                   if (weight > 0.8) weight = 0.8; // to see clearly even one event with zeros
                 }
               }
-              m_final_hist1[ros][drawer][adc][id + 4]->SetBinContent(dmu, weight);
+              m_data->m_final_hist1[ros][drawer][adc][id + 4]->SetBinContent(dmu, weight);
 
               if (adc) break; // no CRC histogram in high gain
             }
@@ -781,17 +772,17 @@ StatusCode TileDigitsMonTool::finalHists()
               sStr.str("");
               sStr << moduleName << gain[3 + gn] << HistName2[2 + type];
               histTitle = sStr.str();
-              m_final_hist2[ros][drawer][adc].push_back(book2F(subDir, histName, histTitle, 48, 0.0, 48.0, 48, 0.0, 48.0));
+              m_data->m_final_hist2[ros][drawer][adc].push_back(book2F(subDir, histName, histTitle, 48, 0.0, 48.0, 48, 0.0, 48.0));
             }
 
             if (m_nEvents * m_nSamples > 0) {
 
               for (int ch_i = 0; ch_i < 48; ++ch_i) {
-		if (m_nEvents_i[ros][drawer][adc][ch_i] > 0)
-		  m_meanAmp[ros][drawer][adc][ch_i] /= m_nEvents_i[ros][drawer][adc][ch_i];
+		if (m_data->m_nEvents_i[ros][drawer][adc][ch_i] > 0)
+		  m_data->m_meanAmp[ros][drawer][adc][ch_i] /= m_data->m_nEvents_i[ros][drawer][adc][ch_i];
                 for (int ch_j = 0; ch_j < 48; ++ch_j)
-		  if (m_nEvents_ij[ros][drawer][adc][ch_i][ch_j] > 0)
-		    m_meanAmp_ij[ros][drawer][adc][ch_i][ch_j] /= m_nEvents_ij[ros][drawer][adc][ch_i][ch_j];
+		  if (m_data->m_nEvents_ij[ros][drawer][adc][ch_i][ch_j] > 0)
+		    m_data->m_meanAmp_ij[ros][drawer][adc][ch_i][ch_j] /= m_data->m_nEvents_ij[ros][drawer][adc][ch_i][ch_j];
               }
 
               double covar[48][48];
@@ -804,7 +795,7 @@ StatusCode TileDigitsMonTool::finalHists()
                 //                int pmt_i = abs(m_cabling->channel2hole(ros,ch_i))-1;
                 for (int ch_j = 0; ch_j < 48; ++ch_j) {
                   //                  int pmt_j = abs(m_cabling->channel2hole(ros,ch_j))-1;
-                  covar[ch_i][ch_j] = m_meanAmp_ij[ros][drawer][adc][ch_i][ch_j] - m_meanAmp[ros][drawer][adc][ch_i] * m_meanAmp[ros][drawer][adc][ch_j];
+                  covar[ch_i][ch_j] = m_data->m_meanAmp_ij[ros][drawer][adc][ch_i][ch_j] - m_data->m_meanAmp[ros][drawer][adc][ch_i] * m_data->m_meanAmp[ros][drawer][adc][ch_j];
 
                   if (ch_j < ch_i) {
                     mean_cov_ij += covar[ch_i][ch_j]; //LF: we take C_ij with its sign
@@ -820,11 +811,11 @@ StatusCode TileDigitsMonTool::finalHists()
               }
 
               if (mean_cov_ii != 0.) {
-                m_cov_ratio[ros][drawer][adc] = (2. * mean_cov_ij) / (mean_cov_ii * 47.); //(2*cov_ij/(48*47))/(cov_ii/48)
+                m_data->m_cov_ratio[ros][drawer][adc] = (2. * mean_cov_ij) / (mean_cov_ii * 47.); //(2*cov_ij/(48*47))/(cov_ii/48)
               } else {
-                m_cov_ratio[ros][drawer][adc] = 0.;
+                m_data->m_cov_ratio[ros][drawer][adc] = 0.;
               }
-              //	      std::cout << "m_cov_ratio["<<adc<<"]= " <<  m_cov_ratio[ros][drawer][adc] << "\n";
+              //	      std::cout << "m_cov_ratio["<<adc<<"]= " <<  m_data->m_cov_ratio[ros][drawer][adc] << "\n";
 
               for (int i = 0; i < 48; ++i) {
                 for (int j = 0; j < 48; ++j) {
@@ -833,8 +824,8 @@ StatusCode TileDigitsMonTool::finalHists()
                   } else {
                     corr[i][j] = covar[i][j] / mean_rms[i] / mean_rms[j];
                   }
-                  m_final_hist2[ros][drawer][adc][0]->SetBinContent(i + 1, j + 1, covar[i][j]);
-                  m_final_hist2[ros][drawer][adc][1]->SetBinContent(i + 1, j + 1, corr[i][j]);
+                  m_data->m_final_hist2[ros][drawer][adc][0]->SetBinContent(i + 1, j + 1, covar[i][j]);
+                  m_data->m_final_hist2[ros][drawer][adc][1]->SetBinContent(i + 1, j + 1, corr[i][j]);
                 }
               }
             } // end if m_nEvents > 0
@@ -849,7 +840,7 @@ StatusCode TileDigitsMonTool::finalHists()
 
           for (int gn = mingain; gn < maxgain; ++gn) {
             for (int i = 0; i < 48; ++i) {
-              TH1S *h = (TH1S*) m_hist1[ros][drawer][i][gn][2]->Clone("temphist");
+              TH1S *h = (TH1S*) m_data->m_hist1[ros][drawer][i][gn][2]->Clone("temphist");
               h->SetDirectory(0);
               shiftHisto(h, ros, drawer, i, gn);
               delete h;
@@ -871,7 +862,7 @@ StatusCode TileDigitsMonTool::finalHists()
             s << moduleName << gain[3 + gn] << " all samples reference";
             std::string histTitle = s.str();
 
-            m_shifted_hist[ros][drawer][48][gn] = book1S(subDir, histName, histTitle, shiftnbins, shiftxmin, shiftxmax);
+            m_data->m_shifted_hist[ros][drawer][48][gn] = book1S(subDir, histName, histTitle, shiftnbins, shiftxmin, shiftxmax);
 
             statTestHistos(ros, drawer, gn);
           } // if runTYpe==CisRun
@@ -889,7 +880,7 @@ StatusCode TileDigitsMonTool::finalHists()
 const uint8_t * TileDigitsMonTool::stuckBitProb (int ros, int module, int channel, int gain) const
 /*---------------------------------------------------------*/
 {
-  return m_stuck_probs[ros][module][channel][gain];
+  return m_data->m_stuck_probs[ros][module][channel][gain];
 }
 
 
@@ -1014,17 +1005,17 @@ void TileDigitsMonTool::drawHists(int ros, int drawer, std::string moduleName)
       }
       int ind = type * 2 + gain;
 
-      if (m_final_hist1[ros][drawer][gain][type]->GetMaximum() < 0.9 * maxy[ind]) //if maximum is below reasonable limit use a default scale
-      m_final_hist1[ros][drawer][gain][type]->SetMaximum(maxy[ind]);
-      if (m_final_hist1[ros][drawer][gain][type]->GetMinimum() > (miny[ind] + 0.1 * TMath::Abs(miny[ind]))) // if minimum is above reasonable limit
-        m_final_hist1[ros][drawer][gain][type]->SetMinimum(miny[ind]);		              // use a default scale
+      if (m_data->m_final_hist1[ros][drawer][gain][type]->GetMaximum() < 0.9 * maxy[ind]) //if maximum is below reasonable limit use a default scale
+      m_data->m_final_hist1[ros][drawer][gain][type]->SetMaximum(maxy[ind]);
+      if (m_data->m_final_hist1[ros][drawer][gain][type]->GetMinimum() > (miny[ind] + 0.1 * TMath::Abs(miny[ind]))) // if minimum is above reasonable limit
+        m_data->m_final_hist1[ros][drawer][gain][type]->SetMinimum(miny[ind]);		              // use a default scale
 
-      m_final_hist1[ros][drawer][gain][type]->SetMarkerStyle(21);
-      m_final_hist1[ros][drawer][gain][type]->SetMarkerSize(ms);
-      m_final_hist1[ros][drawer][gain][type]->SetLabelSize(0.08, "X");
-      m_final_hist1[ros][drawer][gain][type]->SetLabelSize(0.08, "Y");
+      m_data->m_final_hist1[ros][drawer][gain][type]->SetMarkerStyle(21);
+      m_data->m_final_hist1[ros][drawer][gain][type]->SetMarkerSize(ms);
+      m_data->m_final_hist1[ros][drawer][gain][type]->SetLabelSize(0.08, "X");
+      m_data->m_final_hist1[ros][drawer][gain][type]->SetLabelSize(0.08, "Y");
       if (do_plots) {
-        m_final_hist1[ros][drawer][gain][type]->Draw("P0");
+        m_data->m_final_hist1[ros][drawer][gain][type]->Draw("P0");
         if (type > 0) maxline[gain]->Draw();
       }
     }
@@ -1061,47 +1052,47 @@ void TileDigitsMonTool::drawHists(int ros, int drawer, std::string moduleName)
       if (type == 5 && gain == 1) {
         if (do_plots) pad->SetLogy();
 
-        m_hist0[ros][drawer][0]->SetStats(kFALSE);
+        m_data->m_hist0[ros][drawer][0]->SetStats(kFALSE);
         gStyle->SetStatFontSize(0.1);
-        m_hist0[ros][drawer][0]->SetStats(kTRUE);
-        m_hist0[ros][drawer][0]->SetLabelSize(0.08, "X");
-        m_hist0[ros][drawer][0]->SetLabelSize(0.08, "Y");
-        if (do_plots) m_hist0[ros][drawer][0]->Draw(); // global CRC in bottom right corner
+        m_data->m_hist0[ros][drawer][0]->SetStats(kTRUE);
+        m_data->m_hist0[ros][drawer][0]->SetLabelSize(0.08, "X");
+        m_data->m_hist0[ros][drawer][0]->SetLabelSize(0.08, "Y");
+        if (do_plots) m_data->m_hist0[ros][drawer][0]->Draw(); // global CRC in bottom right corner
 
       } else {
         if (do_plots) pad->SetGridx();
 
-        if (m_final_hist1[ros][drawer][gain][type]->GetMaximum() < 0.9 * maxy[ind]) //if maximum is below reasonable limit use a default scale
-        m_final_hist1[ros][drawer][gain][type]->SetMaximum(maxy[ind]);
-        if (m_final_hist1[ros][drawer][gain][type]->GetMinimum() > (miny[ind] + 0.1 * TMath::Abs(miny[ind]))) // if minimum is above reasonable limit
-          m_final_hist1[ros][drawer][gain][type]->SetMinimum(miny[ind]);                           // use a default scale
+        if (m_data->m_final_hist1[ros][drawer][gain][type]->GetMaximum() < 0.9 * maxy[ind]) //if maximum is below reasonable limit use a default scale
+        m_data->m_final_hist1[ros][drawer][gain][type]->SetMaximum(maxy[ind]);
+        if (m_data->m_final_hist1[ros][drawer][gain][type]->GetMinimum() > (miny[ind] + 0.1 * TMath::Abs(miny[ind]))) // if minimum is above reasonable limit
+          m_data->m_final_hist1[ros][drawer][gain][type]->SetMinimum(miny[ind]);                           // use a default scale
 
-        m_final_hist1[ros][drawer][gain][type]->SetMarkerStyle(21);
-        m_final_hist1[ros][drawer][gain][type]->SetMarkerSize(ms);
-        m_final_hist1[ros][drawer][gain][type]->SetStats(kFALSE);
-        m_final_hist1[ros][drawer][gain][type]->SetLabelSize(0.08, "X");
-        m_final_hist1[ros][drawer][gain][type]->SetLabelSize(0.08, "Y");
+        m_data->m_final_hist1[ros][drawer][gain][type]->SetMarkerStyle(21);
+        m_data->m_final_hist1[ros][drawer][gain][type]->SetMarkerSize(ms);
+        m_data->m_final_hist1[ros][drawer][gain][type]->SetStats(kFALSE);
+        m_data->m_final_hist1[ros][drawer][gain][type]->SetLabelSize(0.08, "X");
+        m_data->m_final_hist1[ros][drawer][gain][type]->SetLabelSize(0.08, "Y");
         if (type != 3) {
-          if (do_plots) m_final_hist1[ros][drawer][gain][type]->Draw("P0");
+          if (do_plots) m_data->m_final_hist1[ros][drawer][gain][type]->Draw("P0");
         } else {
-          m_final_hist_stucks[ros][drawer][gain]->SetStats(kFALSE);
-          m_final_hist_stucks[ros][drawer][gain]->SetMarkerSize(3.);
-          m_final_hist_stucks[ros][drawer][gain]->SetMarkerColor(4);
-          m_final_hist_stucks[ros][drawer][gain]->SetLabelSize(0.08, "X");
-          m_final_hist_stucks[ros][drawer][gain]->SetLabelSize(0.1, "Y");
+          m_data->m_final_hist_stucks[ros][drawer][gain]->SetStats(kFALSE);
+          m_data->m_final_hist_stucks[ros][drawer][gain]->SetMarkerSize(3.);
+          m_data->m_final_hist_stucks[ros][drawer][gain]->SetMarkerColor(4);
+          m_data->m_final_hist_stucks[ros][drawer][gain]->SetLabelSize(0.08, "X");
+          m_data->m_final_hist_stucks[ros][drawer][gain]->SetLabelSize(0.1, "Y");
           gStyle->SetNumberContours(m_NCont);
           if (do_plots) {
-            m_final_hist_stucks[ros][drawer][gain]->Draw("textzcol");
+            m_data->m_final_hist_stucks[ros][drawer][gain]->Draw("textzcol");
             ex_pal52->Draw();
-            m_final_hist_stucks[ros][drawer][gain]->Draw("textcolzsame");
+            m_data->m_final_hist_stucks[ros][drawer][gain]->Draw("textcolzsame");
             pad->Update();
-            TPaletteAxis *palette = (TPaletteAxis*) m_final_hist_stucks[ros][drawer][gain]->GetListOfFunctions()->FindObject("palette");
+            TPaletteAxis *palette = (TPaletteAxis*) m_data->m_final_hist_stucks[ros][drawer][gain]->GetListOfFunctions()->FindObject("palette");
             if (palette != NULL) palette->SetLabelSize(0.07);
             pad->Modified();
           }
         }
         if (type == 4 || (type == 5 && gain == 0)) {
-          m_final_hist1[ros][drawer][gain][type]->GetYaxis()->SetLabelOffset(-0.85);	// do not draw default lables
+          m_data->m_final_hist1[ros][drawer][gain][type]->GetYaxis()->SetLabelOffset(-0.85);	// do not draw default lables
           if (do_plots) {
             t->DrawText(-0.2, 1., "all OK");
             t->DrawText(-0.2, .0, "wrong");
@@ -1127,28 +1118,28 @@ void TileDigitsMonTool::drawHists(int ros, int drawer, std::string moduleName)
       pad->SetTopMargin(0.15);
       pad->SetGridx();
     }
-    m_hist2[ros][drawer][gain][0]->SetMarkerSize(3.);
-    m_hist2[ros][drawer][gain][0]->SetMarkerColor(2);
-    m_hist2[ros][drawer][gain][0]->SetLabelSize(0.11, "Y");
-    m_hist2[ros][drawer][gain][0]->SetLabelSize(0.08, "X");
-    m_hist2[ros][drawer][gain][0]->SetStats(kFALSE);
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(1, "OK ");
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(2, "Format");
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(3, "Parity");
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(4, "Memory");
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(5, "SingleStr");
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(6, "DbleStr");
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(7, "DummyFrag");
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(8, "NoDataFrag");
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetTickLength(0.01);
-    m_hist2[ros][drawer][gain][0]->GetYaxis()->SetLabelOffset(0.001);
+    m_data->m_hist2[ros][drawer][gain][0]->SetMarkerSize(3.);
+    m_data->m_hist2[ros][drawer][gain][0]->SetMarkerColor(2);
+    m_data->m_hist2[ros][drawer][gain][0]->SetLabelSize(0.11, "Y");
+    m_data->m_hist2[ros][drawer][gain][0]->SetLabelSize(0.08, "X");
+    m_data->m_hist2[ros][drawer][gain][0]->SetStats(kFALSE);
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(1, "OK ");
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(2, "Format");
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(3, "Parity");
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(4, "Memory");
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(5, "SingleStr");
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(6, "DbleStr");
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(7, "DummyFrag");
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetBinLabel(8, "NoDataFrag");
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetTickLength(0.01);
+    m_data->m_hist2[ros][drawer][gain][0]->GetYaxis()->SetLabelOffset(0.001);
     if (do_plots) {
       gStyle->SetNumberContours(m_NCont);
-      m_hist2[ros][drawer][gain][0]->Draw("textzcol");
+      m_data->m_hist2[ros][drawer][gain][0]->Draw("textzcol");
       ex_pal51->Draw();
-      m_hist2[ros][drawer][gain][0]->Draw("textzcolsame");
+      m_data->m_hist2[ros][drawer][gain][0]->Draw("textzcolsame");
       pad->Update();
-      TPaletteAxis *palette = (TPaletteAxis*) m_hist2[ros][drawer][gain][0]->GetListOfFunctions()->FindObject("palette");
+      TPaletteAxis *palette = (TPaletteAxis*) m_data->m_hist2[ros][drawer][gain][0]->GetListOfFunctions()->FindObject("palette");
       if (palette != NULL) palette->SetLabelSize(0.07);
       pad->Modified();
     }
@@ -1192,13 +1183,13 @@ void TileDigitsMonTool::drawHists(int ros, int drawer, std::string moduleName)
           TVirtualPad * pad = Can->cd(type * maxgain + gain + 1);
           pad->SetTopMargin(0.15);
         }
-        m_final_hist2[ros][drawer][gain][type]->SetLabelSize(0.06, "X");
-        m_final_hist2[ros][drawer][gain][type]->SetLabelSize(0.06, "Y");
+        m_data->m_final_hist2[ros][drawer][gain][type]->SetLabelSize(0.06, "X");
+        m_data->m_final_hist2[ros][drawer][gain][type]->SetLabelSize(0.06, "Y");
         if (do_plots) {
-          m_final_hist2[ros][drawer][gain][type]->Draw("COLZ");
+          m_data->m_final_hist2[ros][drawer][gain][type]->Draw("COLZ");
           if (type == 0) {
             std::ostringstream label_text;
-            label_text << "<C_ij>/<C_ii>= " << std::setprecision(4) << m_cov_ratio[ros][drawer][gain] << std::setprecision(4);
+            label_text << "<C_ij>/<C_ii>= " << std::setprecision(4) << m_data->m_cov_ratio[ros][drawer][gain] << std::setprecision(4);
             covar_label[gain].SetLabel(label_text.str().c_str());
             covar_label[gain].SetTextSize(0.4);
             covar_label[gain].Draw();
@@ -1542,7 +1533,7 @@ void TileDigitsMonTool::CRCcheck(uint32_t crc32, uint32_t crcMask, int headsize,
   //! are the result of the CRC check in the ROD (0xFFFF means all OK).
 
   // protection against non-exisitng histograms
-  if (m_hist0[ros][drawer].size() == 0) return;
+  if (m_data->m_hist0[ros][drawer].size() == 0) return;
 
   //LF CRC check
   //std::string ros_name[2] = {"LBA","LBC"};
@@ -1558,11 +1549,11 @@ void TileDigitsMonTool::CRCcheck(uint32_t crc32, uint32_t crcMask, int headsize,
   uint32_t crc0 = crc32 & 0xFFFF;
   uint32_t crc1 = crc32 >> 16;
   if (crc32 == 0)
-    m_hist0[ros][drawer][0]->Fill(0.0, 1.0);
+    m_data->m_hist0[ros][drawer][0]->Fill(0.0, 1.0);
   else if (crc0 == crc1) // two half-words should match
-    m_hist0[ros][drawer][0]->Fill(1.0, 1.0);
+    m_data->m_hist0[ros][drawer][0]->Fill(1.0, 1.0);
   else
-    m_hist0[ros][drawer][0]->Fill(2.0, 1.0);
+    m_data->m_hist0[ros][drawer][0]->Fill(2.0, 1.0);
 
   // CRC per TileDMU.For mono gain we have it from ROD and FE. 
   // In bi gain, it is just a placeholder with global CRC information.
@@ -1573,11 +1564,11 @@ void TileDigitsMonTool::CRCcheck(uint32_t crc32, uint32_t crcMask, int headsize,
   if (m_beamInfo->calibMode() == 1) { //!bigain: dummy information
     for (int ch = 0; ch < headsize; ++ch) {
       if (crc32 == 0)
-        m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(0.0, 1.0);
+        m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(0.0, 1.0);
       else if (crc0 == crc1)
-        m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(1.0, 1.0);
+        m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(1.0, 1.0);
       else
-        m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(2.0, 1.0);
+        m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(2.0, 1.0);
 
     }
   } else { //! monogain: meaningful information.
@@ -1588,11 +1579,11 @@ void TileDigitsMonTool::CRCcheck(uint32_t crc32, uint32_t crcMask, int headsize,
            //! Fill 4 is FE and ROD crc is 0
     if (crc32 == 0) {  //std::cout << "Global crc is zero\n";
       for (int ch = 0; ch < headsize; ++ch) {
-        m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(0.0, 1.0);
+        m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(0.0, 1.0);
       }
     } else if (crcMask == 0xFFFFFFFF) {
       for (int ch = 0; ch < headsize; ++ch) {
-        m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(1.0, 1.0);
+        m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(1.0, 1.0);
       }
     } else {
       uint32_t fe_crc = crcMask & 0xFFFF;
@@ -1617,16 +1608,16 @@ void TileDigitsMonTool::CRCcheck(uint32_t crc32, uint32_t crcMask, int headsize,
 
         switch (flag) {
           case 0: //TileDMU is fine
-            m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(1.0, 1.0);
+            m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(1.0, 1.0);
             break;
           case 1: //fe error only
-            m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(2.0, 1.0);
+            m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(2.0, 1.0);
             break;
           case 2: // rod errors
-            m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(3.0, 1.0);
+            m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(3.0, 1.0);
             break;
           default: // fe+rod errors
-            m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(4.0, 1.0);
+            m_data->m_hist_DMUerr[ros][drawer][ch][0][1]->Fill(4.0, 1.0);
         } // end switch case
 
       } // end loop on chips
@@ -1664,31 +1655,31 @@ bool TileDigitsMonTool::DMUheaderCheck(std::vector<uint32_t>* headerVec, int ros
   bool err = false;
 
   if (DMUheaderFormatCheck((*headerVec)[dmu])) {
-    m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 1., 1.);
+    m_data->m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 1., 1.);
     err = true;
     return err;
   }
   if (DMUheaderParityCheck((*headerVec)[dmu])) {
-    m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 2., 1.);
+    m_data->m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 2., 1.);
     err = true;
     return err;
   }
   if (((*headerVec)[dmu] >> 25) & 0x1) {
     //Memory Parity Error
-    m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 3., 1.);
+    m_data->m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 3., 1.);
     err = true;
   }
   if (((*headerVec)[dmu] >> 24) & 0x1) {
     //Single Strobe Error
-    m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 4., 1.);
+    m_data->m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 4., 1.);
     err = true;
   }
   if (((*headerVec)[dmu] >> 23) & 0x1) {
     //Double Strobe Error
-    m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 5., 1.);
+    m_data->m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 5., 1.);
     err = true;
   }
-  if (!err) m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 0., 1.);
+  if (!err) m_data->m_hist2[ros][drawer][gain][0]->Fill(dmu + 0.5, 0., 1.);
   return err;
 }
 
@@ -1750,7 +1741,7 @@ void TileDigitsMonTool::shiftHisto(TH1S *hist, int ros, int drawer, int ch, int
     int xmin = std::max(1, shift + 50);
     for (int bin = xmin; bin < xmax; ++bin) {
       double c = hist->GetBinContent(bin);
-      if (c > 0) m_shifted_hist[ros][drawer][ch][gain]->SetBinContent(bin - shift - 50, c);
+      if (c > 0) m_data->m_shifted_hist[ros][drawer][ch][gain]->SetBinContent(bin - shift - 50, c);
     }
   }
 }
@@ -1769,7 +1760,7 @@ void TileDigitsMonTool::statTestHistos(int ros, int drawer, int gain)
 
   for (int i = 0; i < 48; i++) {
 
-    TH1S *h = m_shifted_hist[ros][drawer][i][gain];
+    TH1S *h = m_data->m_shifted_hist[ros][drawer][i][gain];
     float integ = h->Integral(200, 600);
     if (integ > 0) {
       refbld.push_back(h);
@@ -1806,9 +1797,9 @@ void TileDigitsMonTool::statTestHistos(int ros, int drawer, int gain)
   //  newrefbld->Add(ref1);      
 
   if (ent > 6)
-    m_shifted_hist[ros][drawer][48][gain]->Add(ref1, 1.);
+    m_data->m_shifted_hist[ros][drawer][48][gain]->Add(ref1, 1.);
   else
-    m_shifted_hist[ros][drawer][48][gain]->Add(ref, 1.);
+    m_data->m_shifted_hist[ros][drawer][48][gain]->Add(ref, 1.);
 
   delete ref;
   delete ref1;
@@ -1818,5 +1809,5 @@ void TileDigitsMonTool::statTestHistos(int ros, int drawer, int gain)
 
 void TileDigitsMonTool::saveStuckBitsProbabilities(TTree* tree) {
 
-  tree->Branch("StuckBitsProb", m_stuck_probs, "StuckBitsProb[5][64][48][2][10]/b");
+  tree->Branch("StuckBitsProb", m_data->m_stuck_probs, "StuckBitsProb[5][64][48][2][10]/b");
 }
diff --git a/TileCalorimeter/TileMonitoring/src/TileRawChannelMonTool.cxx b/TileCalorimeter/TileMonitoring/src/TileRawChannelMonTool.cxx
index 5df79bd222541037da1090d87556429df0e0befb..4c1fb5e2ac3f315a925633b875d8b46e5dbd98b9 100644
--- a/TileCalorimeter/TileMonitoring/src/TileRawChannelMonTool.cxx
+++ b/TileCalorimeter/TileMonitoring/src/TileRawChannelMonTool.cxx
@@ -90,14 +90,15 @@ StatusCode TileRawChannelMonTool::initialize()
 
   ATH_MSG_INFO("in initialize()");
 
+  m_data = std::make_unique<Data>();
   CHECK(m_beamInfo.retrieve());
 
   CHECK(m_tileToolEmscale.retrieve());
 
   m_nEvents = 0;
 
-  memset(m_timeCov, 0, sizeof(m_timeCov));
-  memset(m_timeCovCorr, 0, sizeof(m_timeCovCorr));
+  memset(m_data->m_timeCov, 0, sizeof(m_data->m_timeCov));
+  memset(m_data->m_timeCovCorr, 0, sizeof(m_data->m_timeCovCorr));
 
   CHECK(TilePaterMonTool::initialize());
 
@@ -197,9 +198,9 @@ void TileRawChannelMonTool::bookHists(int ros, int drawer)
           histTitle = sStr.str();
 
           if (type < 2)
-            m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 101, -0.01, 2.01));
+            m_data->m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 101, -0.01, 2.01));
           else
-            m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 101, -101.0, 101.0));
+            m_data->m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 101, -101.0, 101.0));
         }
 
         if (m_book2D) {
@@ -226,15 +227,15 @@ void TileRawChannelMonTool::bookHists(int ros, int drawer)
 
             switch (gn) {
               case 0: // low gain
-                m_hist2[ros][drawer][ch][gn & 1].push_back(
+                m_data->m_hist2[ros][drawer][ch][gn & 1].push_back(
                     book2S(subDir, histName, histTitle, 51, LowX_low2D[type], HighX_low2D[type], 160, LowY_low2D[type], HighY_low2D[type]));
                 break;
               case 1: // high gain
-                m_hist2[ros][drawer][ch][gn & 1].push_back(
+                m_data->m_hist2[ros][drawer][ch][gn & 1].push_back(
                     book2S(subDir, histName, histTitle, 51, LowX_hi2D[type], HighX_hi2D[type], 160, LowY_hi2D[type], HighY_hi2D[type]));
                 break;
               default: // single gain mode
-                m_hist2[ros][drawer][ch][gn & 1].push_back(
+                m_data->m_hist2[ros][drawer][ch][gn & 1].push_back(
                     book2S(subDir, histName, histTitle, 51, LowX_hi2D[type], HighX_hi2D[type], 160, LowY_hi2D[type], HighY_hi2D[type]));
             }
           } //loop over type hist
@@ -253,27 +254,27 @@ void TileRawChannelMonTool::bookHists(int ros, int drawer)
         if (m_runType == PedRun) {
           switch (gn) {
             case 0: // low gain
-              m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 101, -10.1, 10.1));
+              m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 101, -10.1, 10.1));
               break;
             case 1: // high gain
-              m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 101, -0.404, 0.404));
+              m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 101, -0.404, 0.404));
               break;
             default: // single gain mode
-              m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 101, -10.1, 10.1));
+              m_data->m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 101, -10.1, 10.1));
           }
         } else {
           switch (gn) {
             case 0: // low gain
-              m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 1101, -50.5, 1050.5));
+              m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 1101, -50.5, 1050.5));
               break;
             case 1: // high gain
-              m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 826, -1.01, 15.51));
+              m_data->m_hist1[ros][drawer][ch][gn].push_back(book1S(subDir, histName, histTitle, 826, -1.01, 15.51));
               break;
             default: // single gain mode
               if (m_runType == PhysRun) {
-                m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 206, -0.55, 20.05));
+                m_data->m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 206, -0.55, 20.05));
               } else {
-                m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 801, -0.5, 800.5));
+                m_data->m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 801, -0.5, 800.5));
               }
           }
         }
@@ -286,7 +287,7 @@ void TileRawChannelMonTool::bookHists(int ros, int drawer)
         sStr << moduleName << " CH " << ch << gain[3 + gn] << " time";
         histTitle = sStr.str();
 
-        m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 201, -100.5, 100.5));
+        m_data->m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 201, -100.5, 100.5));
         //Lukas
         sStr.str("");
         sStr << moduleName << "_ch_" << sCh << gain[gn] << "_time_corr";
@@ -296,7 +297,7 @@ void TileRawChannelMonTool::bookHists(int ros, int drawer)
         sStr << moduleName << " CH " << ch << gain[3 + gn] << " time_corr";
         histTitle = sStr.str();
 
-        m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 201, -100.5, 100.5));
+        m_data->m_hist1[ros][drawer][ch][gn & 1].push_back(book1S(subDir, histName, histTitle, 201, -100.5, 100.5));
         //Lukas
       }
     }
@@ -337,17 +338,17 @@ void TileRawChannelMonTool::bookDsp(int ros, int drawer)
 
     switch (gn) {
       case 0: // low gain
-        m_finalHistDsp2[ros][drawer][gn].push_back(book2F(finalsubDir, finalhistName, finalhistTitle, 200, -45.1, 855.1, 16, 0., 16.));
+        m_data->m_finalHistDsp2[ros][drawer][gn].push_back(book2F(finalsubDir, finalhistName, finalhistTitle, 200, -45.1, 855.1, 16, 0., 16.));
         break;
       case 1: // high gain
-        m_finalHistDsp2[ros][drawer][gn].push_back(book2F(finalsubDir, finalhistName, finalhistTitle, 150, -7.0, 12.0, 16, 0., 16.));
+        m_data->m_finalHistDsp2[ros][drawer][gn].push_back(book2F(finalsubDir, finalhistName, finalhistTitle, 150, -7.0, 12.0, 16, 0., 16.));
         break;
       default: // single gain mode
         if (m_runType == PhysRun) {
-          m_finalHistDsp2[ros][drawer][gn & 1].push_back(book2F(subDir, finalhistName, finalhistTitle, 150, -7.005, 7.005, 16, 0., 16.));
+          m_data->m_finalHistDsp2[ros][drawer][gn & 1].push_back(book2F(subDir, finalhistName, finalhistTitle, 150, -7.005, 7.005, 16, 0., 16.));
 
         } else {
-          m_finalHistDsp2[ros][drawer][gn & 1].push_back(book2F(subDir, finalhistName, finalhistTitle, 200, -45.1, 855.1, 16, 0., 16.));
+          m_data->m_finalHistDsp2[ros][drawer][gn & 1].push_back(book2F(subDir, finalhistName, finalhistTitle, 200, -45.1, 855.1, 16, 0., 16.));
         }
     }
 
@@ -374,16 +375,16 @@ void TileRawChannelMonTool::bookDsp(int ros, int drawer)
 
       switch (gn) {
         case 0: // low gain
-          m_histDsp1[ros][drawer][ch][gn].push_back(book1F(subDir, histName, histTitle, 491, -50.5, 1049.34));
+          m_data->m_histDsp1[ros][drawer][ch][gn].push_back(book1F(subDir, histName, histTitle, 491, -50.5, 1049.34));
           break;
         case 1: // high gain
-          m_histDsp1[ros][drawer][ch][gn].push_back(book1F(subDir, histName, histTitle, 413, -1.01, 15.51));
+          m_data->m_histDsp1[ros][drawer][ch][gn].push_back(book1F(subDir, histName, histTitle, 413, -1.01, 15.51));
           break;
         default: // single gain mode
           if (m_runType == PhysRun) {
-            m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 100, -0.55, 20.05));
+            m_data->m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 100, -0.55, 20.05));
           } else {
-            m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 200, -0.5, 800.5));
+            m_data->m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 200, -0.5, 800.5));
           }
       }
 
@@ -395,7 +396,7 @@ void TileRawChannelMonTool::bookDsp(int ros, int drawer)
       sStr << moduleName << " CH " << ch << gain[3 + gn] << " Dsp Time";
       histTitle = sStr.str();
 
-      m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 101, -100.5, 100.5));
+      m_data->m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 101, -100.5, 100.5));
 
       sStr.str("");
       sStr << moduleName << "_ch_" << sCh << gain[gn] << "_dsp_chi2";
@@ -405,7 +406,7 @@ void TileRawChannelMonTool::bookDsp(int ros, int drawer)
       sStr << moduleName << " CH " << ch << gain[3 + gn] << " Dsp Chi2";
       histTitle = sStr.str();
 
-      m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 16, -0.5, 15.5));
+      m_data->m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 16, -0.5, 15.5));
 
       sStr.str("");
       sStr << moduleName << "_ch_" << sCh << gain[gn] << "_dsp-fit_amp_diff";
@@ -417,16 +418,16 @@ void TileRawChannelMonTool::bookDsp(int ros, int drawer)
 
       switch (gn) {
         case 0: // low gain
-          m_histDsp1[ros][drawer][ch][gn].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
+          m_data->m_histDsp1[ros][drawer][ch][gn].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
           break;
         case 1: // high gain
-          m_histDsp1[ros][drawer][ch][gn].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
+          m_data->m_histDsp1[ros][drawer][ch][gn].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
           break;
         default: // single gain mode
           if (m_runType == PhysRun) {
-            m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
+            m_data->m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
           } else {
-            m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
+            m_data->m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
           }
       }
       sStr.str("");
@@ -437,7 +438,7 @@ void TileRawChannelMonTool::bookDsp(int ros, int drawer)
       sStr << moduleName << " CH " << ch << gain[3 + gn] << " Dsp-OF Time diff";
       histTitle = sStr.str();
 
-      m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 101, -2.02, 2.02));
+      m_data->m_histDsp1[ros][drawer][ch][gn & 1].push_back(book1F(subDir, histName, histTitle, 101, -2.02, 2.02));
 
       sStr.str("");
       sStr << moduleName << "_ch_" << sCh << gain[gn] << "_chi2_amp";
@@ -449,16 +450,16 @@ void TileRawChannelMonTool::bookDsp(int ros, int drawer)
 
       switch (gn) {
         case 0: // low gain
-          m_histDsp2[ros][drawer][ch][gn].push_back(book2F(subDir, histName, histTitle, 200, -45.1, 855.1, 16, 0., 16.));
+          m_data->m_histDsp2[ros][drawer][ch][gn].push_back(book2F(subDir, histName, histTitle, 200, -45.1, 855.1, 16, 0., 16.));
           break;
         case 1: // high gain
-          m_histDsp2[ros][drawer][ch][gn].push_back(book2F(subDir, histName, histTitle, 150, -7.0, 12.0, 16, 0., 16.));
+          m_data->m_histDsp2[ros][drawer][ch][gn].push_back(book2F(subDir, histName, histTitle, 150, -7.0, 12.0, 16, 0., 16.));
           break;
         default: // single gain mode
           if (m_runType == PhysRun) {
-            m_histDsp2[ros][drawer][ch][gn & 1].push_back(book2F(subDir, histName, histTitle, 150, -7.005, 7.005, 16, 0., 16.));
+            m_data->m_histDsp2[ros][drawer][ch][gn & 1].push_back(book2F(subDir, histName, histTitle, 150, -7.005, 7.005, 16, 0., 16.));
           } else {
-            m_histDsp2[ros][drawer][ch][gn & 1].push_back(book2F(subDir, histName, histTitle, 200, -45.1, 855.1, 16, 0., 16.));
+            m_data->m_histDsp2[ros][drawer][ch][gn & 1].push_back(book2F(subDir, histName, histTitle, 200, -45.1, 855.1, 16, 0., 16.));
           }
       }
 
@@ -546,7 +547,7 @@ StatusCode TileRawChannelMonTool::fillHists()
         int ros = m_tileHWID->ros(adc_id);
         int drawer = m_tileHWID->drawer(adc_id);
 
-        if (m_hist1[ros][drawer][0][0].size() == 0) {
+        if (m_data->m_hist1[ros][drawer][0][0].size() == 0) {
           //        m_bigain = (m_beamInfo->calibMode() == 1); // true if bi-gain run
           // we fill both high and low gain plots
           m_bigain = true;
@@ -610,7 +611,7 @@ StatusCode TileRawChannelMonTool::fillHists()
                   double timeInj = m_cispar[5] * 0.104;
 
                   if (m_book2D) {
-                    m_hist2[ros][drawer][chan][gain][cap]->Fill(charge, amp);
+                    m_data->m_hist2[ros][drawer][chan][gain][cap]->Fill(charge, amp);
                   }
 
                   if (charge > 1.0) { //! ignore first step with charge ~0.5 pCb
@@ -627,10 +628,10 @@ StatusCode TileRawChannelMonTool::fillHists()
                       //! do nothing for timeinj near the time slice change
                     } else {
 
-                      m_hist1[ros][drawer][chan][gain][0 + cap]->Fill(ratio);
-                      m_hist1[ros][drawer][chan][gain][2 + cap]->Fill(time);
+                      m_data->m_hist1[ros][drawer][chan][gain][0 + cap]->Fill(ratio);
+                      m_data->m_hist1[ros][drawer][chan][gain][2 + cap]->Fill(time);
                       if (m_book2D) {
-                        m_hist2[ros][drawer][chan][gain][cap + 2]->Fill(timeInj, time);
+                        m_data->m_hist2[ros][drawer][chan][gain][cap + 2]->Fill(timeInj, time);
                       }
 
                       /*TimeCov[ros][drawer][chan][gain][cap][0] += timeInj;
@@ -638,24 +639,24 @@ StatusCode TileRawChannelMonTool::fillHists()
                        TimeCov[ros][drawer][chan][gain][cap][2] += time;
                        TimeCov[ros][drawer][chan][gain][cap][3] += time*time;
                        TimeCov[ros][drawer][chan][gain][cap][4] += timeInj*time;*/
-                      ++m_timeCov[ros][drawer][chan][gain][cap][5];
+                      ++m_data->m_timeCov[ros][drawer][chan][gain][cap][5];
                     }
                   }
                 }		  //if k==0 //Lukas
               } else { // not CisRun
                 if (k == 0) { //Lukas
-                  m_hist1[ros][drawer][chan][gain][0]->Fill(amp, 1.0);
+                  m_data->m_hist1[ros][drawer][chan][gain][0]->Fill(amp, 1.0);
                   if (time != 0) { // we don't fill the time when it is exactly 0, which is a conventional value to say that it is not
                     // calculated when the difference between the max(samples)-min(samples)< threshold
-                    m_hist1[ros][drawer][chan][gain][1]->Fill(time, 1.0);
+                    m_data->m_hist1[ros][drawer][chan][gain][1]->Fill(time, 1.0);
                   }
 
-                  m_timeCov[ros][drawer][chan][gain][0][0] += amp;
-                  m_timeCov[ros][drawer][chan][gain][0][1] += amp * amp;
-                  m_timeCov[ros][drawer][chan][gain][0][2] += time;
-                  m_timeCov[ros][drawer][chan][gain][0][3] += time * time;
+                  m_data->m_timeCov[ros][drawer][chan][gain][0][0] += amp;
+                  m_data->m_timeCov[ros][drawer][chan][gain][0][1] += amp * amp;
+                  m_data->m_timeCov[ros][drawer][chan][gain][0][2] += time;
+                  m_data->m_timeCov[ros][drawer][chan][gain][0][3] += time * time;
                   //TimeCov[ros][drawer][chan][gain][0][4] += amp*time;
-                  ++m_timeCov[ros][drawer][chan][gain][0][5];
+                  ++m_data->m_timeCov[ros][drawer][chan][gain][0][5];
                   /*
                    //Lukas
                    if((ros==3 && drawer==14 && (chan==12 || chan==13 || chan==18 || chan==19))||(ros==4 && drawer==17 && (chan==12 || chan==13 || chan==18 || chan==19))){
@@ -682,11 +683,11 @@ StatusCode TileRawChannelMonTool::fillHists()
                   if (isDisconnected(ros, drawer, chan) || amp < m_minAmpForCorrectedTime) continue;
 
                   timeCorr = time - avgTimePerPart[ros];			//Lukas
-                  m_hist1[ros][drawer][chan][gain][2]->Fill(timeCorr, 1.0);		//Lukas
+                  m_data->m_hist1[ros][drawer][chan][gain][2]->Fill(timeCorr, 1.0);		//Lukas
 
-                  m_timeCovCorr[ros][drawer][chan][gain][0][0] += timeCorr;		//Lukas
-                  m_timeCovCorr[ros][drawer][chan][gain][0][1] += timeCorr * timeCorr;		//Lukas
-                  ++m_timeCovCorr[ros][drawer][chan][gain][0][2];			//Lukas
+                  m_data->m_timeCovCorr[ros][drawer][chan][gain][0][0] += timeCorr;		//Lukas
+                  m_data->m_timeCovCorr[ros][drawer][chan][gain][0][1] += timeCorr * timeCorr;		//Lukas
+                  ++m_data->m_timeCovCorr[ros][drawer][chan][gain][0][2];			//Lukas
 
                 }			//k==1 //Lukas
               } // end of nonCisRun
@@ -762,7 +763,7 @@ StatusCode TileRawChannelMonTool::fillDsp(std::map<int, std::vector<double> > &e
       int ros = m_tileHWID->ros(adc_id);
       int drawer = m_tileHWID->drawer(adc_id);
 
-      if (m_histDsp1[ros][drawer][0][0].size() == 0) {
+      if (m_data->m_histDsp1[ros][drawer][0][0].size() == 0) {
         m_bigain = true;
         bookDsp(ros, drawer);
       }
@@ -807,11 +808,11 @@ StatusCode TileRawChannelMonTool::fillDsp(std::map<int, std::vector<double> > &e
           double time = rch->time();
           double chi2 = rch->quality();
 
-          m_histDsp1[ros][drawer][chan][gain][Edsp]->Fill(amp, 1.0);
-          m_histDsp1[ros][drawer][chan][gain][Tdsp]->Fill(time, 1.0);
-          m_histDsp1[ros][drawer][chan][gain][chi2dsp]->Fill(chi2, 1.0);
-          m_histDsp2[ros][drawer][chan][gain][0]->Fill(amp, chi2, 1.0);
-          m_finalHistDsp2[ros][drawer][gain][0]->Fill(amp, chi2, 1.0);
+          m_data->m_histDsp1[ros][drawer][chan][gain][Edsp]->Fill(amp, 1.0);
+          m_data->m_histDsp1[ros][drawer][chan][gain][Tdsp]->Fill(time, 1.0);
+          m_data->m_histDsp1[ros][drawer][chan][gain][chi2dsp]->Fill(chi2, 1.0);
+          m_data->m_histDsp2[ros][drawer][chan][gain][0]->Fill(amp, chi2, 1.0);
+          m_data->m_finalHistDsp2[ros][drawer][gain][0]->Fill(amp, chi2, 1.0);
 
           std::map<int, std::vector<double> >::iterator it = efitMap.find(ros * 100 + drawer);
           if (it != efitMap.end()) {
@@ -820,11 +821,11 @@ StatusCode TileRawChannelMonTool::fillDsp(std::map<int, std::vector<double> > &e
             double tfit = (*it).second.at(chan + gain * 48);
             //convert from pC to ADC counts
             if (TMath::Abs(efit) > m_efitThresh) { // fill the histogram only if the efit is above threshold
-              m_histDsp1[ros][drawer][chan][gain][Edsp_fit]->Fill((amp - efit) / efit, 1.0);
+              m_data->m_histDsp1[ros][drawer][chan][gain][Edsp_fit]->Fill((amp - efit) / efit, 1.0);
             }
 
             if (tfit != 0.) {
-              m_histDsp1[ros][drawer][chan][gain][Tdsp_fit]->Fill((time - tfit), 1.0);
+              m_data->m_histDsp1[ros][drawer][chan][gain][Tdsp_fit]->Fill((time - tfit), 1.0);
             }
 
           }
@@ -876,7 +877,7 @@ void TileRawChannelMonTool::bookSummaryHistograms(int ros, int drawer)
           sStr.str("");
           sStr << moduleName << gain[3 + gn] << HistName[3 + type] << CapName[2 + cap];
           histTitle = sStr.str();
-          m_finalHist1[ros][drawer][adc][cap].push_back(book1F(subDir, histName, histTitle, 48, 0, 48));
+          m_data->m_finalHist1[ros][drawer][adc][cap].push_back(book1F(subDir, histName, histTitle, 48, 0, 48));
         }
       } //end of loop over capacitors 
     } //end of loop over gn  
@@ -904,43 +905,43 @@ void TileRawChannelMonTool::bookSummaryHistograms(int ros, int drawer)
         //sStr << moduleName << gain[3+gn] << HistName[4+type];
         sStr << moduleName << gain[3 + gn] << HistName[5 + type];	//Lukas
         histTitle = sStr.str();
-        m_finalHist1[ros][drawer][adc][0].push_back(book1F(subDir, histName, histTitle, 48, 0.0, 48.0));
+        m_data->m_finalHist1[ros][drawer][adc][0].push_back(book1F(subDir, histName, histTitle, 48, 0.0, 48.0));
 
         std::string hTitle(histTitle);
 
         if (m_doLaserSummaryVsPMT && m_runType == LasRun) {
 
           hTitle += " (Even PMTs)";
-          m_summaryPmts[ros][drawer][adc][0].push_back(book1F(subDir + "/pmt", histName + "_pmt_even", hTitle, 49, -0.5, 48.5));
-          m_summaryPmts[ros][drawer][adc][0].back()->SetMarkerStyle(22);
-          m_summaryPmts[ros][drawer][adc][0].back()->SetMarkerColor(2);
-          m_summaryPmts[ros][drawer][adc][0].back()->SetMarkerSize(0.75);
+          m_data->m_summaryPmts[ros][drawer][adc][0].push_back(book1F(subDir + "/pmt", histName + "_pmt_even", hTitle, 49, -0.5, 48.5));
+          m_data->m_summaryPmts[ros][drawer][adc][0].back()->SetMarkerStyle(22);
+          m_data->m_summaryPmts[ros][drawer][adc][0].back()->SetMarkerColor(2);
+          m_data->m_summaryPmts[ros][drawer][adc][0].back()->SetMarkerSize(0.75);
 
           hTitle = histTitle;
           hTitle += " (Odd PMTs)";
-          m_summaryPmts[ros][drawer][adc][1].push_back(book1F(subDir + "/pmt", histName + "_pmt_odd", hTitle, 49, -0.5, 48.5));
-          m_summaryPmts[ros][drawer][adc][1].back()->SetMarkerStyle(23);
-          m_summaryPmts[ros][drawer][adc][1].back()->SetMarkerColor(4);
-          m_summaryPmts[ros][drawer][adc][1].back()->SetMarkerSize(0.75);
+          m_data->m_summaryPmts[ros][drawer][adc][1].push_back(book1F(subDir + "/pmt", histName + "_pmt_odd", hTitle, 49, -0.5, 48.5));
+          m_data->m_summaryPmts[ros][drawer][adc][1].back()->SetMarkerStyle(23);
+          m_data->m_summaryPmts[ros][drawer][adc][1].back()->SetMarkerColor(4);
+          m_data->m_summaryPmts[ros][drawer][adc][1].back()->SetMarkerSize(0.75);
 
-          if (ros < 3 && m_summaryPmts[0][drawer][adc][0].size() < (unsigned int)(type + 1)) {
+          if (ros < 3 && m_data->m_summaryPmts[0][drawer][adc][0].size() < (unsigned int)(type + 1)) {
 
             histName.replace(histName.begin(), histName.begin() + 3, "LB");
             histTitle.replace(histTitle.begin(), histTitle.begin() + 3, "LB");
             hTitle = histTitle;
 
             hTitle += " (LBA even PMTs + LBC odd PMTs: negative)";
-            m_summaryPmts[0][drawer][adc][0].push_back(book1F(subDir + "/pmt", histName + "_pmt_LBA-even_LBC-odd", hTitle, 97, -48.5, 48.5));
-            m_summaryPmts[0][drawer][adc][0].back()->SetMarkerStyle(22);
-            m_summaryPmts[0][drawer][adc][0].back()->SetMarkerColor(2);
-            m_summaryPmts[0][drawer][adc][0].back()->SetMarkerSize(0.75);
+            m_data->m_summaryPmts[0][drawer][adc][0].push_back(book1F(subDir + "/pmt", histName + "_pmt_LBA-even_LBC-odd", hTitle, 97, -48.5, 48.5));
+            m_data->m_summaryPmts[0][drawer][adc][0].back()->SetMarkerStyle(22);
+            m_data->m_summaryPmts[0][drawer][adc][0].back()->SetMarkerColor(2);
+            m_data->m_summaryPmts[0][drawer][adc][0].back()->SetMarkerSize(0.75);
 
             hTitle = histTitle;
             hTitle += " (LBA odd PMTs + LBC even PMTs: negative)";
-            m_summaryPmts[0][drawer][adc][1].push_back(book1F(subDir + "/pmt", histName + "_pmt_LBA-odd_LBC-even", hTitle, 97, -48.5, 48.5));
-            m_summaryPmts[0][drawer][adc][1].back()->SetMarkerStyle(23);
-            m_summaryPmts[0][drawer][adc][1].back()->SetMarkerColor(4);
-            m_summaryPmts[0][drawer][adc][1].back()->SetMarkerSize(0.75);
+            m_data->m_summaryPmts[0][drawer][adc][1].push_back(book1F(subDir + "/pmt", histName + "_pmt_LBA-odd_LBC-even", hTitle, 97, -48.5, 48.5));
+            m_data->m_summaryPmts[0][drawer][adc][1].back()->SetMarkerStyle(23);
+            m_data->m_summaryPmts[0][drawer][adc][1].back()->SetMarkerColor(4);
+            m_data->m_summaryPmts[0][drawer][adc][1].back()->SetMarkerSize(0.75);
           }
         }
       }
@@ -956,19 +957,19 @@ void TileRawChannelMonTool::resetSummaryHistograms()
 /*---------------------------------------------------------*/
 {
 
-  memset(m_timeCov, 0, sizeof(m_timeCov));
-  memset(m_timeCovCorr, 0, sizeof(m_timeCovCorr));
+  memset(m_data->m_timeCov, 0, sizeof(m_data->m_timeCov));
+  memset(m_data->m_timeCovCorr, 0, sizeof(m_data->m_timeCovCorr));
 
   int mingain = (m_bigain) ? 0 : 2;
   int maxgain = (m_bigain) ? 2 : 3;
 
   for (int ros = 1; ros < 5; ++ros) {
     for (int drawer = 0; drawer < 64; ++drawer) {
-      if (m_hist1[ros][drawer][0][0].size() != 0) {
+      if (m_data->m_hist1[ros][drawer][0][0].size() != 0) {
         for (int ch = 0; ch < 48; ++ch) {
           for (int gn = mingain; gn < maxgain; ++gn) {
-            for (auto h : m_hist1[ros][drawer][ch][gn]) h->Reset();
-            for (auto h : m_hist2[ros][drawer][ch][gn]) h->Reset();
+            for (auto h : m_data->m_hist1[ros][drawer][ch][gn]) h->Reset();
+            for (auto h : m_data->m_hist2[ros][drawer][ch][gn]) h->Reset();
           }
         }
       }
@@ -984,7 +985,7 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
 
   ATH_MSG_INFO("in fillFfinalHiststograms()");
 
-  memset(m_rangeQ, 0, sizeof(m_rangeQ));
+  memset(m_data->m_rangeQ, 0, sizeof(m_data->m_rangeQ));
 
   TF1 * fit_gaus = new TF1("g", "gaus");
 
@@ -996,7 +997,7 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
   if ((m_runType == CisRun) || (m_runType == CisRamp)) {
     for (int ros = 1; ros < 5; ++ros) {
       for (int drawer = 0; drawer < 64; ++drawer) {
-        if (m_hist1[ros][drawer][0][0].size() != 0) {
+        if (m_data->m_hist1[ros][drawer][0][0].size() != 0) {
           for (int gn = mingain; gn < maxgain; ++gn) {
 
             int adc = gn & 1;
@@ -1006,32 +1007,32 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
                 //                int pmt = abs(m_cabling->channel2hole(ros,ch)); // number in range [1,48]
 
                 TF1* polyfunc = 0;
-                if (m_book2D) polyfunc = GetTimeFitFunc(m_hist2[ros][drawer][ch][adc][cap + 2]);
+                if (m_book2D) polyfunc = GetTimeFitFunc(m_data->m_hist2[ros][drawer][ch][adc][cap + 2]);
                 if (polyfunc) {
-                  m_finalHist1[ros][drawer][adc][cap][0]->SetBinContent(ch + 1, polyfunc->GetParameter(1));
+                  m_data->m_finalHist1[ros][drawer][adc][cap][0]->SetBinContent(ch + 1, polyfunc->GetParameter(1));
                   if (polyfunc->GetParError(1) > 5) {
-                    m_finalHist1[ros][drawer][adc][cap][0]->SetBinError(ch + 1, 5.);
+                    m_data->m_finalHist1[ros][drawer][adc][cap][0]->SetBinError(ch + 1, 5.);
                   } else {
-                    m_finalHist1[ros][drawer][adc][cap][0]->SetBinError(ch + 1, polyfunc->GetParError(1));
+                    m_data->m_finalHist1[ros][drawer][adc][cap][0]->SetBinError(ch + 1, polyfunc->GetParError(1));
                   }
-                  m_finalHist1[ros][drawer][adc][cap][1]->SetBinContent(ch + 1, polyfunc->GetParameter(0));
+                  m_data->m_finalHist1[ros][drawer][adc][cap][1]->SetBinContent(ch + 1, polyfunc->GetParameter(0));
                   if (polyfunc->GetParError(0) > 5) {
-                    m_finalHist1[ros][drawer][adc][cap][1]->SetBinError(ch + 1, 5.);
+                    m_data->m_finalHist1[ros][drawer][adc][cap][1]->SetBinError(ch + 1, 5.);
                   } else {
-                    m_finalHist1[ros][drawer][adc][cap][1]->SetBinError(ch + 1, polyfunc->GetParError(0));
+                    m_data->m_finalHist1[ros][drawer][adc][cap][1]->SetBinError(ch + 1, polyfunc->GetParError(0));
                   }
 
                   delete polyfunc; //important!
                 }
 
                 else {
-                  m_finalHist1[ros][drawer][adc][cap][0]->SetBinContent(ch + 1, 0.);
-                  m_finalHist1[ros][drawer][adc][cap][0]->SetBinError(ch + 1, 0.);
-                  m_finalHist1[ros][drawer][adc][cap][1]->SetBinContent(ch + 1, 0.);
-                  m_finalHist1[ros][drawer][adc][cap][1]->SetBinError(ch + 1, 0.);
+                  m_data->m_finalHist1[ros][drawer][adc][cap][0]->SetBinContent(ch + 1, 0.);
+                  m_data->m_finalHist1[ros][drawer][adc][cap][0]->SetBinError(ch + 1, 0.);
+                  m_data->m_finalHist1[ros][drawer][adc][cap][1]->SetBinContent(ch + 1, 0.);
+                  m_data->m_finalHist1[ros][drawer][adc][cap][1]->SetBinError(ch + 1, 0.);
                 }
 
-                TH1S * hist = m_hist1[ros][drawer][ch][adc][cap];
+                TH1S * hist = m_data->m_hist1[ros][drawer][ch][adc][cap];
                 int nbins = hist->GetNbinsX();
                 int minbin = 1;
                 for (; minbin < nbins; ++minbin) {
@@ -1058,11 +1059,11 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
                 }
 
                 //std::cout << hist->GetName() <<" mean-xmin= "<< mean-xmin <<"\n";
-                m_rangeQ[adc][cap][0][ch] = mean;
-                m_rangeQ[adc][cap][1][ch] = std::max(0.0, mean - xmin);
-                m_rangeQ[adc][cap][2][ch] = std::max(0.0, xmax - mean);
+                m_data->m_rangeQ[adc][cap][0][ch] = mean;
+                m_data->m_rangeQ[adc][cap][1][ch] = std::max(0.0, mean - xmin);
+                m_data->m_rangeQ[adc][cap][2][ch] = std::max(0.0, xmax - mean);
 
-                m_finalHist1[ros][drawer][adc][cap][2]->SetBinContent(ch + 1, mean);
+                m_data->m_finalHist1[ros][drawer][adc][cap][2]->SetBinContent(ch + 1, mean);
               }
             } //end of loop over capacitors 
           } //end of loop over gn 
@@ -1079,7 +1080,7 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
 
     for (int ros = 1; ros < 5; ++ros) {
       for (int drawer = 0; drawer < 64; ++drawer) {
-        if (m_hist1[ros][drawer][0][0].size() != 0) {
+        if (m_data->m_hist1[ros][drawer][0][0].size() != 0) {
           for (int gn = mingain; gn < maxgain; ++gn) {
 
             int adc = gn & 1;
@@ -1089,15 +1090,15 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
 
               double Amp = 0.0, ErrA = 0.0, RMS = 0.0, ErrR = 0.0;
               double Time = 0.0, RMST = 0.0, Sigma = 0.0, ErrS = 0.0;
-              double NEvents = m_timeCov[ros][drawer][ch][adc][0][5];
+              double NEvents = m_data->m_timeCov[ros][drawer][ch][adc][0][5];
 
               double TimeCorr = 0.0, RMSTCorr = 0.0;				//Lukas
-              double NEventsCorr = m_timeCovCorr[ros][drawer][ch][adc][0][2];	//Lukas
+              double NEventsCorr = m_data->m_timeCovCorr[ros][drawer][ch][adc][0][2];	//Lukas
 
               if (NEvents > 0.0) {
 
-                Amp = m_timeCov[ros][drawer][ch][adc][0][0] / NEvents;
-                RMS = m_timeCov[ros][drawer][ch][adc][0][1] / NEvents - Amp * Amp;
+                Amp = m_data->m_timeCov[ros][drawer][ch][adc][0][0] / NEvents;
+                RMS = m_data->m_timeCov[ros][drawer][ch][adc][0][1] / NEvents - Amp * Amp;
                 if (RMS > 0.0) {
                   RMS = sqrt(RMS);
                   ErrA = RMS / sqrt(NEvents);
@@ -1106,8 +1107,8 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
                   RMS = 0.0;
                 }
 
-                Time = m_timeCov[ros][drawer][ch][adc][0][2] / NEvents;
-                RMST = m_timeCov[ros][drawer][ch][adc][0][3] / NEvents - Time * Time;
+                Time = m_data->m_timeCov[ros][drawer][ch][adc][0][2] / NEvents;
+                RMST = m_data->m_timeCov[ros][drawer][ch][adc][0][3] / NEvents - Time * Time;
                 if (RMST > 0.0) {
                   RMST = sqrt(RMST);
                 } else {
@@ -1117,8 +1118,8 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
 
               //Lukas
               if (NEventsCorr > 0.0) {
-                TimeCorr = m_timeCovCorr[ros][drawer][ch][adc][0][0] / NEventsCorr;
-                RMSTCorr = m_timeCovCorr[ros][drawer][ch][adc][0][1] / NEventsCorr - TimeCorr * TimeCorr;
+                TimeCorr = m_data->m_timeCovCorr[ros][drawer][ch][adc][0][0] / NEventsCorr;
+                RMSTCorr = m_data->m_timeCovCorr[ros][drawer][ch][adc][0][1] / NEventsCorr - TimeCorr * TimeCorr;
                 if (RMSTCorr > 0.0) {
                   RMSTCorr = sqrt(RMSTCorr);
                 } else {
@@ -1127,22 +1128,22 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
               }
               //Lukas
 
-              if (m_hist1[ros][drawer][ch][adc][0]->GetEntries() > 0) {
-                m_hist1[ros][drawer][ch][adc][0]->Fit("g", "NQ");
+              if (m_data->m_hist1[ros][drawer][ch][adc][0]->GetEntries() > 0) {
+                m_data->m_hist1[ros][drawer][ch][adc][0]->Fit("g", "NQ");
                 Sigma = fit_gaus->GetParameter(2);
                 ErrS = fit_gaus->GetParError(2);
               }
 
-              m_finalHist1[ros][drawer][adc][0][0]->SetBinContent(ch + 1, Amp);
-              m_finalHist1[ros][drawer][adc][0][0]->SetBinError(ch + 1, ErrA);
-              m_finalHist1[ros][drawer][adc][0][1]->SetBinContent(ch + 1, RMS);
-              m_finalHist1[ros][drawer][adc][0][1]->SetBinError(ch + 1, ErrR);
-              m_finalHist1[ros][drawer][adc][0][2]->SetBinContent(ch + 1, Sigma);
-              m_finalHist1[ros][drawer][adc][0][2]->SetBinError(ch + 1, ErrS);
-              m_finalHist1[ros][drawer][adc][0][3]->SetBinContent(ch + 1, Time);
-              m_finalHist1[ros][drawer][adc][0][3]->SetBinError(ch + 1, RMST);
-              m_finalHist1[ros][drawer][adc][0][4]->SetBinContent(ch + 1, TimeCorr);	//Lukas
-              m_finalHist1[ros][drawer][adc][0][4]->SetBinError(ch + 1, RMSTCorr);	//Lukas
+              m_data->m_finalHist1[ros][drawer][adc][0][0]->SetBinContent(ch + 1, Amp);
+              m_data->m_finalHist1[ros][drawer][adc][0][0]->SetBinError(ch + 1, ErrA);
+              m_data->m_finalHist1[ros][drawer][adc][0][1]->SetBinContent(ch + 1, RMS);
+              m_data->m_finalHist1[ros][drawer][adc][0][1]->SetBinError(ch + 1, ErrR);
+              m_data->m_finalHist1[ros][drawer][adc][0][2]->SetBinContent(ch + 1, Sigma);
+              m_data->m_finalHist1[ros][drawer][adc][0][2]->SetBinError(ch + 1, ErrS);
+              m_data->m_finalHist1[ros][drawer][adc][0][3]->SetBinContent(ch + 1, Time);
+              m_data->m_finalHist1[ros][drawer][adc][0][3]->SetBinError(ch + 1, RMST);
+              m_data->m_finalHist1[ros][drawer][adc][0][4]->SetBinContent(ch + 1, TimeCorr);	//Lukas
+              m_data->m_finalHist1[ros][drawer][adc][0][4]->SetBinError(ch + 1, RMSTCorr);	//Lukas
 
               if (m_doLaserSummaryVsPMT && m_runType == LasRun) {
 
@@ -1151,48 +1152,48 @@ StatusCode TileRawChannelMonTool::fillSummaryHistograms()
 
                 int fiber = (pmt % 2);
 
-                m_summaryPmts[ros][drawer][adc][fiber][0]->SetBinContent(pmt + 1, Amp);
-                m_summaryPmts[ros][drawer][adc][fiber][0]->SetBinError(pmt + 1, ErrA);
-                m_summaryPmts[ros][drawer][adc][fiber][1]->SetBinContent(pmt + 1, RMS);
-                m_summaryPmts[ros][drawer][adc][fiber][1]->SetBinError(pmt + 1, ErrR);
-                m_summaryPmts[ros][drawer][adc][fiber][2]->SetBinContent(pmt + 1, Sigma);
-                m_summaryPmts[ros][drawer][adc][fiber][2]->SetBinError(pmt + 1, ErrS);
-                m_summaryPmts[ros][drawer][adc][fiber][3]->SetBinContent(pmt + 1, Time);
-                m_summaryPmts[ros][drawer][adc][fiber][3]->SetBinError(pmt + 1, RMST);
-                m_summaryPmts[ros][drawer][adc][fiber][4]->SetBinContent(pmt + 1, TimeCorr);	//Lukas
-                m_summaryPmts[ros][drawer][adc][fiber][4]->SetBinError(pmt + 1, RMSTCorr);	//Lukas
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][0]->SetBinContent(pmt + 1, Amp);
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][0]->SetBinError(pmt + 1, ErrA);
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][1]->SetBinContent(pmt + 1, RMS);
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][1]->SetBinError(pmt + 1, ErrR);
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][2]->SetBinContent(pmt + 1, Sigma);
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][2]->SetBinError(pmt + 1, ErrS);
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][3]->SetBinContent(pmt + 1, Time);
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][3]->SetBinError(pmt + 1, RMST);
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][4]->SetBinContent(pmt + 1, TimeCorr);	//Lukas
+                m_data->m_summaryPmts[ros][drawer][adc][fiber][4]->SetBinError(pmt + 1, RMSTCorr);	//Lukas
 
                 if (ros == 1) {
 
-                  int bin = m_summaryPmts[0][drawer][adc][fiber][0]->FindBin(pmt);
+                  int bin = m_data->m_summaryPmts[0][drawer][adc][fiber][0]->FindBin(pmt);
 
-                  m_summaryPmts[0][drawer][adc][fiber][0]->SetBinContent(bin, Amp);
-                  m_summaryPmts[0][drawer][adc][fiber][0]->SetBinError(bin, ErrA);
-                  m_summaryPmts[0][drawer][adc][fiber][1]->SetBinContent(bin, RMS);
-                  m_summaryPmts[0][drawer][adc][fiber][1]->SetBinError(bin, ErrR);
-                  m_summaryPmts[0][drawer][adc][fiber][2]->SetBinContent(bin, Sigma);
-                  m_summaryPmts[0][drawer][adc][fiber][2]->SetBinError(bin, ErrS);
-                  m_summaryPmts[0][drawer][adc][fiber][3]->SetBinContent(bin, Time);
-                  m_summaryPmts[0][drawer][adc][fiber][3]->SetBinError(bin, RMST);
-                  m_summaryPmts[0][drawer][adc][fiber][4]->SetBinContent(bin, TimeCorr);	//Lukas
-                  m_summaryPmts[0][drawer][adc][fiber][4]->SetBinError(bin, RMSTCorr);	//Lukas
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][0]->SetBinContent(bin, Amp);
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][0]->SetBinError(bin, ErrA);
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][1]->SetBinContent(bin, RMS);
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][1]->SetBinError(bin, ErrR);
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][2]->SetBinContent(bin, Sigma);
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][2]->SetBinError(bin, ErrS);
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][3]->SetBinContent(bin, Time);
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][3]->SetBinError(bin, RMST);
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][4]->SetBinContent(bin, TimeCorr);	//Lukas
+                  m_data->m_summaryPmts[0][drawer][adc][fiber][4]->SetBinError(bin, RMSTCorr);	//Lukas
 
                 }
 
                 if (ros == 2) {
 
-                  int bin = m_summaryPmts[0][drawer][adc][1 - fiber][0]->FindBin(-pmt);
+                  int bin = m_data->m_summaryPmts[0][drawer][adc][1 - fiber][0]->FindBin(-pmt);
 
-                  m_summaryPmts[0][drawer][adc][1 - fiber][0]->SetBinContent(bin, Amp);
-                  m_summaryPmts[0][drawer][adc][1 - fiber][0]->SetBinError(bin, ErrA);
-                  m_summaryPmts[0][drawer][adc][1 - fiber][1]->SetBinContent(bin, RMS);
-                  m_summaryPmts[0][drawer][adc][1 - fiber][1]->SetBinError(bin, ErrR);
-                  m_summaryPmts[0][drawer][adc][1 - fiber][2]->SetBinContent(bin, Sigma);
-                  m_summaryPmts[0][drawer][adc][1 - fiber][2]->SetBinError(bin, ErrS);
-                  m_summaryPmts[0][drawer][adc][1 - fiber][3]->SetBinContent(bin, Time);
-                  m_summaryPmts[0][drawer][adc][1 - fiber][3]->SetBinError(bin, RMST);
-                  m_summaryPmts[0][drawer][adc][1 - fiber][4]->SetBinContent(bin, TimeCorr);	//Lukas
-                  m_summaryPmts[0][drawer][adc][1 - fiber][4]->SetBinError(bin, RMSTCorr);	//Lukas
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][0]->SetBinContent(bin, Amp);
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][0]->SetBinError(bin, ErrA);
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][1]->SetBinContent(bin, RMS);
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][1]->SetBinError(bin, ErrR);
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][2]->SetBinContent(bin, Sigma);
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][2]->SetBinError(bin, ErrS);
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][3]->SetBinContent(bin, Time);
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][3]->SetBinError(bin, RMST);
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][4]->SetBinContent(bin, TimeCorr);	//Lukas
+                  m_data->m_summaryPmts[0][drawer][adc][1 - fiber][4]->SetBinError(bin, RMSTCorr);	//Lukas
 
                 }
               }
@@ -1230,7 +1231,7 @@ StatusCode TileRawChannelMonTool::finalHists()
   if (m_summaryUpdateFrequency == 0) {
     for (int ros = 1; ros < 5; ++ros) {
       for (int drawer = 0; drawer < 64; ++drawer) {
-        if (m_hist1[ros][drawer][0][0].size() != 0) {
+        if (m_data->m_hist1[ros][drawer][0][0].size() != 0) {
           bookSummaryHistograms(ros, drawer);
         }
       }
@@ -1249,7 +1250,7 @@ StatusCode TileRawChannelMonTool::finalDsp(int ros, int drawer)
 /*---------------------------------------------------------*/
 {
 
-  if (m_histDsp1[ros][drawer][0][0].size() != 0) {
+  if (m_data->m_histDsp1[ros][drawer][0][0].size() != 0) {
 
     ///get algorithm and number of iterations from bsflags
     const TileRawChannelContainer* RawChannelCntDsp;
@@ -1297,7 +1298,7 @@ StatusCode TileRawChannelMonTool::finalDsp(int ros, int drawer)
         sStr.str("");
         sStr << moduleName << gain[2 + gn] << HistName[3 + type] << alg_name[algorithm] << "-" << iter_name[iteration] << HistName[6 + type];
         histTitle = sStr.str();
-        m_finalHistDsp1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 48, 0.0, 48.0));
+        m_data->m_finalHistDsp1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 48, 0.0, 48.0));
       }
 
       //Create hbar histograms to be used in drawDsp
@@ -1308,7 +1309,7 @@ StatusCode TileRawChannelMonTool::finalDsp(int ros, int drawer)
       sStr << moduleName << gain[2 + gn] << " (DSP-" << alg_name[algorithm] << "-" << iter_name[iteration]
           << " - OFF-OF2-I) divided by OFF Amplitudes for all chans";
       histTitle = sStr.str();
-      m_hBarDsp1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
+      m_data->m_hBarDsp1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 404, -1.01, 1.01));
 
       sStr.str("");
       sStr << moduleName << gain[gn] << "_dspfit_timehbar";
@@ -1316,28 +1317,28 @@ StatusCode TileRawChannelMonTool::finalDsp(int ros, int drawer)
       sStr.str("");
       sStr << moduleName << gain[2 + gn] << " (DSP-" << alg_name[algorithm] << "-" << iter_name[iteration] << " - OFF-OF2-I) Time for all chans";
       histTitle = sStr.str();
-      m_hBarDsp1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 101, -2.02, 2.02));
+      m_data->m_hBarDsp1[ros][drawer][adc].push_back(book1F(subDir, histName, histTitle, 101, -2.02, 2.02));
 
       for (int ch = 0; ch < 48; ++ch) {
         //	int pmt = abs(m_cabling->channel2hole(ros,ch)); // number in range [1,48]
 
-        if (m_histDsp1[ros][drawer][ch][adc][Edsp_fit]->GetEntries() > 0) {
-          double dspmean = m_histDsp1[ros][drawer][ch][adc][Edsp]->GetMean();
-          double dsprms = m_histDsp1[ros][drawer][ch][adc][Edsp]->GetRMS();
-          double emean = m_histDsp1[ros][drawer][ch][adc][Edsp_fit]->GetMean();
-          double erms = m_histDsp1[ros][drawer][ch][adc][Edsp_fit]->GetRMS();
-          double tmean = m_histDsp1[ros][drawer][ch][adc][Tdsp_fit]->GetMean();
-          double trms = m_histDsp1[ros][drawer][ch][adc][Tdsp_fit]->GetRMS();
+        if (m_data->m_histDsp1[ros][drawer][ch][adc][Edsp_fit]->GetEntries() > 0) {
+          double dspmean = m_data->m_histDsp1[ros][drawer][ch][adc][Edsp]->GetMean();
+          double dsprms = m_data->m_histDsp1[ros][drawer][ch][adc][Edsp]->GetRMS();
+          double emean = m_data->m_histDsp1[ros][drawer][ch][adc][Edsp_fit]->GetMean();
+          double erms = m_data->m_histDsp1[ros][drawer][ch][adc][Edsp_fit]->GetRMS();
+          double tmean = m_data->m_histDsp1[ros][drawer][ch][adc][Tdsp_fit]->GetMean();
+          double trms = m_data->m_histDsp1[ros][drawer][ch][adc][Tdsp_fit]->GetRMS();
 
-          m_finalHistDsp1[ros][drawer][adc][sumEdsp]->SetBinContent(ch + 1, dspmean);
-          m_finalHistDsp1[ros][drawer][adc][sumEdsp]->SetBinError(ch + 1, dsprms);
-          m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetBinContent(ch + 1, emean);
-          m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetBinError(ch + 1, erms);
-          m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetBinContent(ch + 1, tmean);
-          m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetBinError(ch + 1, trms);
+          m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp]->SetBinContent(ch + 1, dspmean);
+          m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp]->SetBinError(ch + 1, dsprms);
+          m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetBinContent(ch + 1, emean);
+          m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetBinError(ch + 1, erms);
+          m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetBinContent(ch + 1, tmean);
+          m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetBinError(ch + 1, trms);
 
-          m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->Add(m_histDsp1[ros][drawer][ch][adc][Edsp_fit]);
-          m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->Add(m_histDsp1[ros][drawer][ch][adc][Tdsp_fit]);
+          m_data->m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->Add(m_data->m_histDsp1[ros][drawer][ch][adc][Edsp_fit]);
+          m_data->m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->Add(m_data->m_histDsp1[ros][drawer][ch][adc][Tdsp_fit]);
 
         }
       }
@@ -1422,19 +1423,19 @@ void TileRawChannelMonTool::drawHists(int ros, int drawer, std::string moduleNam
           pad->SetGridx();
         }
 
-        TGraphAsymmErrors * final_Egraph = bookGraphAsymmErrors(subDir, graphName, graphTitle, 48, X_axis, m_rangeQ[adc][cap][0], X_errors, X_errors,
-            m_rangeQ[adc][cap][1], m_rangeQ[adc][cap][2]);
+        TGraphAsymmErrors * final_Egraph = bookGraphAsymmErrors(subDir, graphName, graphTitle, 48, X_axis, m_data->m_rangeQ[adc][cap][0], X_errors, X_errors,
+            m_data->m_rangeQ[adc][cap][1], m_data->m_rangeQ[adc][cap][2]);
         grapherrVec.push_back(final_Egraph);
 
-        m_finalHist1[ros][drawer][adc][cap][2]->SetStats(kFALSE);
-        m_finalHist1[ros][drawer][adc][cap][2]->SetMarkerStyle(21);
-        m_finalHist1[ros][drawer][adc][cap][2]->SetMarkerSize(ms);
-        m_finalHist1[ros][drawer][adc][cap][2]->SetLabelSize(0.06, "X");
-        m_finalHist1[ros][drawer][adc][cap][2]->SetLabelSize(0.06, "Y");
-        m_finalHist1[ros][drawer][adc][cap][2]->SetMaximum(2.2);
-        m_finalHist1[ros][drawer][adc][cap][2]->SetMinimum(-0.2);
-        if (do_plots) m_finalHist1[ros][drawer][adc][cap][2]->Draw("P0");
-
+        m_data->m_finalHist1[ros][drawer][adc][cap][2]->SetStats(kFALSE);
+        m_data->m_finalHist1[ros][drawer][adc][cap][2]->SetMarkerStyle(21);
+        m_data->m_finalHist1[ros][drawer][adc][cap][2]->SetMarkerSize(ms);
+        m_data->m_finalHist1[ros][drawer][adc][cap][2]->SetLabelSize(0.06, "X");
+        m_data->m_finalHist1[ros][drawer][adc][cap][2]->SetLabelSize(0.06, "Y");
+        m_data->m_finalHist1[ros][drawer][adc][cap][2]->SetMaximum(2.2);
+        m_data->m_finalHist1[ros][drawer][adc][cap][2]->SetMinimum(-0.2);
+        if (do_plots) m_data->m_finalHist1[ros][drawer][adc][cap][2]->Draw("P0");
+        
         final_Egraph->SetMarkerStyle(21);
         final_Egraph->SetMarkerSize(ms);
         final_Egraph->SetMaximum(2.2);
@@ -1489,18 +1490,18 @@ void TileRawChannelMonTool::drawHists(int ros, int drawer, std::string moduleNam
             pad->SetGridx();
           }
 
-          if (m_finalHist1[ros][drawer][adc][cap][type]->GetMaximum() < 0.9 * maxy[type])
-            m_finalHist1[ros][drawer][adc][cap][type]->SetMaximum(maxy[type]);
-          if (m_finalHist1[ros][drawer][adc][cap][type]->GetMinimum() > (miny[type] + 0.1 * TMath::Abs(miny[type])))
-            m_finalHist1[ros][drawer][adc][cap][type]->SetMinimum(miny[type]);
+          if (m_data->m_finalHist1[ros][drawer][adc][cap][type]->GetMaximum() < 0.9 * maxy[type])
+            m_data->m_finalHist1[ros][drawer][adc][cap][type]->SetMaximum(maxy[type]);
+          if (m_data->m_finalHist1[ros][drawer][adc][cap][type]->GetMinimum() > (miny[type] + 0.1 * TMath::Abs(miny[type])))
+            m_data->m_finalHist1[ros][drawer][adc][cap][type]->SetMinimum(miny[type]);
 
-          m_finalHist1[ros][drawer][adc][cap][type]->SetMarkerStyle(21);
-          m_finalHist1[ros][drawer][adc][cap][type]->SetMarkerSize(ms);
-          m_finalHist1[ros][drawer][adc][cap][type]->SetLabelSize(0.10, "X");
-          m_finalHist1[ros][drawer][adc][cap][type]->SetLabelSize(0.10, "Y");
+          m_data->m_finalHist1[ros][drawer][adc][cap][type]->SetMarkerStyle(21);
+          m_data->m_finalHist1[ros][drawer][adc][cap][type]->SetMarkerSize(ms);
+          m_data->m_finalHist1[ros][drawer][adc][cap][type]->SetLabelSize(0.10, "X");
+          m_data->m_finalHist1[ros][drawer][adc][cap][type]->SetLabelSize(0.10, "Y");
           if (do_plots) {
-            m_finalHist1[ros][drawer][adc][cap][type]->Draw("P0");
-
+            m_data->m_finalHist1[ros][drawer][adc][cap][type]->Draw("P0");
+            
             line.SetLineColor(3);
             line.Draw();
           }
@@ -1537,14 +1538,14 @@ void TileRawChannelMonTool::drawHists(int ros, int drawer, std::string moduleNam
 
       for (int adc = 0; adc < maxgain; ++adc) {
 
-        double max0 = m_finalHist1[ros][drawer][adc][0][0]->GetMaximum();
-        double max1 = m_finalHist1[ros][drawer][adc][0][1]->GetMaximum();
-        double max2 = m_finalHist1[ros][drawer][adc][0][2]->GetMaximum();
-        double max3 = m_finalHist1[ros][drawer][adc][0][3]->GetMaximum();
-        double min0 = m_finalHist1[ros][drawer][adc][0][0]->GetMinimum();
-        double min1 = m_finalHist1[ros][drawer][adc][0][1]->GetMinimum();
-        double min2 = m_finalHist1[ros][drawer][adc][0][2]->GetMinimum();
-        double min3 = m_finalHist1[ros][drawer][adc][0][3]->GetMinimum();
+        double max0 = m_data->m_finalHist1[ros][drawer][adc][0][0]->GetMaximum();
+        double max1 = m_data->m_finalHist1[ros][drawer][adc][0][1]->GetMaximum();
+        double max2 = m_data->m_finalHist1[ros][drawer][adc][0][2]->GetMaximum();
+        double max3 = m_data->m_finalHist1[ros][drawer][adc][0][3]->GetMaximum();
+        double min0 = m_data->m_finalHist1[ros][drawer][adc][0][0]->GetMinimum();
+        double min1 = m_data->m_finalHist1[ros][drawer][adc][0][1]->GetMinimum();
+        double min2 = m_data->m_finalHist1[ros][drawer][adc][0][2]->GetMinimum();
+        double min3 = m_data->m_finalHist1[ros][drawer][adc][0][3]->GetMinimum();
 
         TVirtualPad * pad;
         if (do_plots) {
@@ -1553,15 +1554,15 @@ void TileRawChannelMonTool::drawHists(int ros, int drawer, std::string moduleNam
           pad->SetGridx();
         }
 
-        if (max0 < 0.9 * maxy[adc]) m_finalHist1[ros][drawer][adc][0][0]->SetMaximum(maxy[adc]);
-        if (min0 > (miny[adc] + 0.1 * TMath::Abs(miny[adc]))) m_finalHist1[ros][drawer][adc][0][0]->SetMinimum(miny[adc]);
+        if (max0 < 0.9 * maxy[adc]) m_data->m_finalHist1[ros][drawer][adc][0][0]->SetMaximum(maxy[adc]);
+        if (min0 > (miny[adc] + 0.1 * TMath::Abs(miny[adc]))) m_data->m_finalHist1[ros][drawer][adc][0][0]->SetMinimum(miny[adc]);
 
-        m_finalHist1[ros][drawer][adc][0][0]->SetMarkerStyle(21);
-        m_finalHist1[ros][drawer][adc][0][0]->SetMarkerSize(ms);
-        m_finalHist1[ros][drawer][adc][0][0]->SetLabelSize(0.08, "X");
-        m_finalHist1[ros][drawer][adc][0][0]->SetLabelSize(0.08, "Y");
+        m_data->m_finalHist1[ros][drawer][adc][0][0]->SetMarkerStyle(21);
+        m_data->m_finalHist1[ros][drawer][adc][0][0]->SetMarkerSize(ms);
+        m_data->m_finalHist1[ros][drawer][adc][0][0]->SetLabelSize(0.08, "X");
+        m_data->m_finalHist1[ros][drawer][adc][0][0]->SetLabelSize(0.08, "Y");
         if (do_plots) {
-          m_finalHist1[ros][drawer][adc][0][0]->Draw("E0");
+          m_data->m_finalHist1[ros][drawer][adc][0][0]->Draw("E0");
         }
 
         if (do_plots) {
@@ -1573,39 +1574,39 @@ void TileRawChannelMonTool::drawHists(int ros, int drawer, std::string moduleNam
         //     if (max2 > 5 * max1) max2 = 2 * max1; // don't put crazy fit results on plot
         if (max1 < maxy[2 + adc]) {
           if (max2 < maxy[2 + adc])
-            m_finalHist1[ros][drawer][adc][0][1]->SetMaximum(maxy[2 + adc]);
+            m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMaximum(maxy[2 + adc]);
           else
-            m_finalHist1[ros][drawer][adc][0][1]->SetMaximum(max2);
+            m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMaximum(max2);
         } else {
-          if (max1 < max2) m_finalHist1[ros][drawer][adc][0][1]->SetMaximum(max2);
+          if (max1 < max2) m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMaximum(max2);
         }
 
         if (min1 > miny[2 + adc]) {
           if (min2 > miny[2 + adc])
-            m_finalHist1[ros][drawer][adc][0][1]->SetMinimum(miny[2 + adc]);
+            m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMinimum(miny[2 + adc]);
           else
-            m_finalHist1[ros][drawer][adc][0][1]->SetMinimum(min2);
+            m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMinimum(min2);
         } else {
-          if (min1 > min2) m_finalHist1[ros][drawer][adc][0][1]->SetMinimum(min2);
+          if (min1 > min2) m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMinimum(min2);
         }
 
-        m_finalHist1[ros][drawer][adc][0][1]->SetMarkerStyle(21);
-        m_finalHist1[ros][drawer][adc][0][1]->SetMarkerSize(ms);
-        m_finalHist1[ros][drawer][adc][0][1]->SetLabelSize(0.08, "X");
-        m_finalHist1[ros][drawer][adc][0][1]->SetLabelSize(0.08, "Y");
+        m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMarkerStyle(21);
+        m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMarkerSize(ms);
+        m_data->m_finalHist1[ros][drawer][adc][0][1]->SetLabelSize(0.08, "X");
+        m_data->m_finalHist1[ros][drawer][adc][0][1]->SetLabelSize(0.08, "Y");
         if (do_plots) {
-          m_finalHist1[ros][drawer][adc][0][1]->Draw("P0");
+          m_data->m_finalHist1[ros][drawer][adc][0][1]->Draw("P0");
         }
 
-        m_finalHist1[ros][drawer][adc][0][2]->SetMaximum(m_finalHist1[ros][drawer][adc][0][1]->GetMaximum());
-        m_finalHist1[ros][drawer][adc][0][2]->SetMinimum(m_finalHist1[ros][drawer][adc][0][1]->GetMinimum());
-        m_finalHist1[ros][drawer][adc][0][2]->SetMarkerStyle(25);
-        m_finalHist1[ros][drawer][adc][0][2]->SetMarkerSize(ms);
-        m_finalHist1[ros][drawer][adc][0][2]->SetMarkerColor(4);
-        m_finalHist1[ros][drawer][adc][0][2]->SetLabelSize(0.08, "X");
-        m_finalHist1[ros][drawer][adc][0][2]->SetLabelSize(0.08, "Y");
+        m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMaximum(m_data->m_finalHist1[ros][drawer][adc][0][1]->GetMaximum());
+        m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMinimum(m_data->m_finalHist1[ros][drawer][adc][0][1]->GetMinimum());
+        m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMarkerStyle(25);
+        m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMarkerSize(ms);
+        m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMarkerColor(4);
+        m_data->m_finalHist1[ros][drawer][adc][0][2]->SetLabelSize(0.08, "X");
+        m_data->m_finalHist1[ros][drawer][adc][0][2]->SetLabelSize(0.08, "Y");
         if (do_plots) {
-          m_finalHist1[ros][drawer][adc][0][2]->Draw("sameP0");
+          m_data->m_finalHist1[ros][drawer][adc][0][2]->Draw("sameP0");
         }
 
         if (do_plots) {
@@ -1614,15 +1615,15 @@ void TileRawChannelMonTool::drawHists(int ros, int drawer, std::string moduleNam
           pad->SetGridx();
         }
 
-        if (max3 < 0.9 * maxy[4 + adc]) m_finalHist1[ros][drawer][adc][0][3]->SetMaximum(maxy[4 + adc]);
-        if (min3 > (miny[4 + adc] + 0.1 * TMath::Abs(miny[4 + adc]))) m_finalHist1[ros][drawer][adc][0][3]->SetMinimum(miny[4 + adc]);
+        if (max3 < 0.9 * maxy[4 + adc]) m_data->m_finalHist1[ros][drawer][adc][0][3]->SetMaximum(maxy[4 + adc]);
+        if (min3 > (miny[4 + adc] + 0.1 * TMath::Abs(miny[4 + adc]))) m_data->m_finalHist1[ros][drawer][adc][0][3]->SetMinimum(miny[4 + adc]);
 
-        m_finalHist1[ros][drawer][adc][0][3]->SetMarkerStyle(21);
-        m_finalHist1[ros][drawer][adc][0][3]->SetMarkerSize(ms);
-        m_finalHist1[ros][drawer][adc][0][3]->SetLabelSize(0.08, "X");
-        m_finalHist1[ros][drawer][adc][0][3]->SetLabelSize(0.08, "Y");
+        m_data->m_finalHist1[ros][drawer][adc][0][3]->SetMarkerStyle(21);
+        m_data->m_finalHist1[ros][drawer][adc][0][3]->SetMarkerSize(ms);
+        m_data->m_finalHist1[ros][drawer][adc][0][3]->SetLabelSize(0.08, "X");
+        m_data->m_finalHist1[ros][drawer][adc][0][3]->SetLabelSize(0.08, "Y");
         if (do_plots) {
-          m_finalHist1[ros][drawer][adc][0][3]->Draw("E0");
+          m_data->m_finalHist1[ros][drawer][adc][0][3]->Draw("E0");
         }
 
       } //end of loop over gain
@@ -1666,12 +1667,12 @@ void TileRawChannelMonTool::drawDsp(int ros, int drawer, std::string moduleName)
   double norm[2] = { 1., 1 };
   for (int adc = 0; adc < maxgain; ++adc) {
 
-    double maxEdsp = m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->GetMaximum();
-    double minEdsp = m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->GetMinimum();
-    double maxTdsp = m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->GetMaximum();
-    double minTdsp = m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->GetMinimum();
-    double maxchidsp = m_finalHistDsp2[ros][drawer][adc][0]->GetMaximum();
-    double minchidsp = m_finalHistDsp2[ros][drawer][adc][0]->GetMinimum();
+    double maxEdsp = m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->GetMaximum();
+    double minEdsp = m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->GetMinimum();
+    double maxTdsp = m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->GetMaximum();
+    double minTdsp = m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->GetMinimum();
+    double maxchidsp = m_data->m_finalHistDsp2[ros][drawer][adc][0]->GetMaximum();
+    double minchidsp = m_data->m_finalHistDsp2[ros][drawer][adc][0]->GetMinimum();
 
     TVirtualPad * pad;
     if (do_plots) {
@@ -1680,26 +1681,26 @@ void TileRawChannelMonTool::drawDsp(int ros, int drawer, std::string moduleName)
       pad->SetGridx();
     }
 
-    if (maxEdsp < 0.9 * maxy[adc]) m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetMaximum(maxy[adc]);
-    if (minEdsp > miny[adc] + 0.1 * TMath::Abs(miny[adc])) m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetMinimum(miny[adc]);
+    if (maxEdsp < 0.9 * maxy[adc]) m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetMaximum(maxy[adc]);
+    if (minEdsp > miny[adc] + 0.1 * TMath::Abs(miny[adc])) m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetMinimum(miny[adc]);
 
-    m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetMarkerStyle(21);
-    m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetMarkerSize(ms);
-    m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetLabelSize(0.08, "X");
-    m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetLabelSize(0.08, "Y");
-    if (do_plots) m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->Draw("");
+    m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetMarkerStyle(21);
+    m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetMarkerSize(ms);
+    m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetLabelSize(0.08, "X");
+    m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->SetLabelSize(0.08, "Y");
+    if (do_plots) m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->Draw("");
 
     //Now we add the 1d histogram on the y-axis
-    if (m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->GetMaximum() > 0.1) { //normalize the scale to get into the frame
-      norm[sumEdsp_fit] = 47. / m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->GetMaximum();
+    if (m_data->m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->GetMaximum() > 0.1) { //normalize the scale to get into the frame
+      norm[sumEdsp_fit] = 47. / m_data->m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->GetMaximum();
     }
-    m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->Scale(norm[sumEdsp_fit]);
+    m_data->m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->Scale(norm[sumEdsp_fit]);
     //hbardsp1[ros][drawer][adc][sumEdsp_fit]->SetFillStyle(3350);
-    m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->SetFillColor(38);
+    m_data->m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->SetFillColor(38);
     if (do_plots) {
-      m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->Draw("hbar,same");
+      m_data->m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->Draw("hbar,same");
 
-      m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->Draw("E0,same");
+      m_data->m_finalHistDsp1[ros][drawer][adc][sumEdsp_fit]->Draw("E0,same");
 
       line.Draw();
 
@@ -1708,25 +1709,25 @@ void TileRawChannelMonTool::drawDsp(int ros, int drawer, std::string moduleName)
       pad->SetGridx();
     }
 
-    if (maxTdsp < 0.9 * maxy[2 + adc]) m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetMaximum(maxy[2 + adc]);
-    if (minTdsp > miny[2 + adc] + 0.1 * TMath::Abs(miny[2 + adc])) m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetMinimum(miny[2 + adc]);
+    if (maxTdsp < 0.9 * maxy[2 + adc]) m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetMaximum(maxy[2 + adc]);
+    if (minTdsp > miny[2 + adc] + 0.1 * TMath::Abs(miny[2 + adc])) m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetMinimum(miny[2 + adc]);
 
-    m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetMarkerStyle(21);
-    m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetMarkerSize(ms);
-    m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetLabelSize(0.08, "X");
-    m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetLabelSize(0.08, "Y");
-    if (do_plots) m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->Draw("");
+    m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetMarkerStyle(21);
+    m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetMarkerSize(ms);
+    m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetLabelSize(0.08, "X");
+    m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->SetLabelSize(0.08, "Y");
+    if (do_plots) m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->Draw("");
 
-    if (m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->GetMaximum() > 0.1) { //normalize the scale to get into the frame
-      norm[sumTdsp_fit] = 47. / m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->GetMaximum();
+    if (m_data->m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->GetMaximum() > 0.1) { //normalize the scale to get into the frame
+      norm[sumTdsp_fit] = 47. / m_data->m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->GetMaximum();
     }
-    m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->Scale(norm[sumTdsp_fit]);
+    m_data->m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->Scale(norm[sumTdsp_fit]);
     //      hbardsp1[ros][drawer][adc][sumTdsp_fit]->SetFillStyle(3350);
-    m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->SetFillColor(38);
+    m_data->m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->SetFillColor(38);
     if (do_plots) {
-      m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->Draw("hbar,same");
+      m_data->m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->Draw("hbar,same");
 
-      m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->Draw("E0,same");
+      m_data->m_finalHistDsp1[ros][drawer][adc][sumTdsp_fit]->Draw("E0,same");
 
       line.Draw();
 
@@ -1736,14 +1737,14 @@ void TileRawChannelMonTool::drawDsp(int ros, int drawer, std::string moduleName)
       pad->SetGridy();
     }
 
-    if (maxchidsp < 0.9 * maxy[4 + adc]) m_finalHistDsp2[ros][drawer][adc][0]->SetMaximum(maxy[4 + adc]);
-    if (minchidsp > miny[4 + adc] + 0.1 * TMath::Abs(miny[4 + adc])) m_finalHistDsp2[ros][drawer][adc][0]->SetMinimum(miny[4 + adc]);
+    if (maxchidsp < 0.9 * maxy[4 + adc]) m_data->m_finalHistDsp2[ros][drawer][adc][0]->SetMaximum(maxy[4 + adc]);
+    if (minchidsp > miny[4 + adc] + 0.1 * TMath::Abs(miny[4 + adc])) m_data->m_finalHistDsp2[ros][drawer][adc][0]->SetMinimum(miny[4 + adc]);
 
-    m_finalHistDsp2[ros][drawer][adc][0]->SetLabelSize(0.08, "X");
-    m_finalHistDsp2[ros][drawer][adc][0]->SetLabelSize(0.08, "Y");
+    m_data->m_finalHistDsp2[ros][drawer][adc][0]->SetLabelSize(0.08, "X");
+    m_data->m_finalHistDsp2[ros][drawer][adc][0]->SetLabelSize(0.08, "Y");
     if (do_plots) {
       gStyle->SetPalette(1);
-      m_finalHistDsp2[ros][drawer][adc][0]->Draw("zcol");
+      m_data->m_finalHistDsp2[ros][drawer][adc][0]->Draw("zcol");
     }
 
   } //end of loop over gain
@@ -1760,8 +1761,8 @@ void TileRawChannelMonTool::drawDsp(int ros, int drawer, std::string moduleName)
   if (do_plots) delete Can;
 
   for (int adc = 0; adc < maxgain; ++adc) {
-    m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->Scale(1 / norm[sumEdsp_fit]); //back to normal
-    m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->Scale(1 / norm[sumTdsp_fit]); //back to normal
+    m_data->m_hBarDsp1[ros][drawer][adc][sumEdsp_fit]->Scale(1 / norm[sumEdsp_fit]); //back to normal
+    m_data->m_hBarDsp1[ros][drawer][adc][sumTdsp_fit]->Scale(1 / norm[sumTdsp_fit]); //back to normal
   }
 }
 
@@ -1946,13 +1947,13 @@ void TileRawChannelMonTool::LaserFancyPlotting(int ros, int drawer, int maxgain,
 
     std::ostringstream hn;
     hn << "empty_" << g;
-    final_empty[g] = new TH1F(hn.str().c_str(), m_finalHist1[ros][drawer][g][0][0]->GetTitle(), 48, 0, 48);
+    final_empty[g] = new TH1F(hn.str().c_str(), m_data->m_finalHist1[ros][drawer][g][0][0]->GetTitle(), 48, 0, 48);
     hn.str("");
     hn << "odd_" << g;
-    final_odd[g] = new TH1F(hn.str().c_str(), m_finalHist1[ros][drawer][g][0][0]->GetTitle(), 48, 0, 48);
+    final_odd[g] = new TH1F(hn.str().c_str(), m_data->m_finalHist1[ros][drawer][g][0][0]->GetTitle(), 48, 0, 48);
     hn.str("");
     hn << "even_" << g;
-    final_even[g] = new TH1F(hn.str().c_str(), m_finalHist1[ros][drawer][g][0][0]->GetTitle(), 48, 0, 48);
+    final_even[g] = new TH1F(hn.str().c_str(), m_data->m_finalHist1[ros][drawer][g][0][0]->GetTitle(), 48, 0, 48);
 
     //---- Histograms for the ratio Var/Mean
     // titles...
@@ -1988,16 +1989,16 @@ void TileRawChannelMonTool::LaserFancyPlotting(int ros, int drawer, int maxgain,
   // loop over the 2 gains values
   for (int adc = 0; adc < maxgain; ++adc) {
 
-    double max0 = m_finalHist1[ros][drawer][adc][0][0]->GetMaximum();
+    double max0 = m_data->m_finalHist1[ros][drawer][adc][0][0]->GetMaximum();
     //double max1 = final_hist1[ros][drawer][adc][0][1]->GetMaximum();
     //double max2 = final_hist1[ros][drawer][adc][0][2]->GetMaximum();
-    double max3 = m_finalHist1[ros][drawer][adc][0][3]->GetMaximum();
-    double max4 = m_finalHist1[ros][drawer][adc][0][4]->GetMaximum();	//Lukas
-    double min0 = m_finalHist1[ros][drawer][adc][0][0]->GetMinimum();
+    double max3 = m_data->m_finalHist1[ros][drawer][adc][0][3]->GetMaximum();
+    double max4 = m_data->m_finalHist1[ros][drawer][adc][0][4]->GetMaximum();	//Lukas
+    double min0 = m_data->m_finalHist1[ros][drawer][adc][0][0]->GetMinimum();
     //double min1 = final_hist1[ros][drawer][adc][0][1]->GetMinimum();
     //double min2 = final_hist1[ros][drawer][adc][0][2]->GetMinimum();
-    double min3 = m_finalHist1[ros][drawer][adc][0][3]->GetMinimum();
-    double min4 = m_finalHist1[ros][drawer][adc][0][4]->GetMinimum();	//Lukas
+    double min3 = m_data->m_finalHist1[ros][drawer][adc][0][3]->GetMinimum();
+    double min4 = m_data->m_finalHist1[ros][drawer][adc][0][4]->GetMinimum();	//Lukas
 
     if (max0 > 0.) {
       final_empty[adc]->SetMaximum(1.05 * max0);
@@ -2021,22 +2022,22 @@ void TileRawChannelMonTool::LaserFancyPlotting(int ros, int drawer, int maxgain,
     double Kapa = 1.30e-3;
     for (int ch = 0; ch < 48; ++ch) {
       if (isDisconnected(ros, drawer, ch)) {
-        final_empty[adc]->SetBinContent(ch + 1, m_finalHist1[ros][drawer][adc][0][0]->GetBinContent(ch + 1) + 0.01);
-        final_empty[adc]->SetBinError(ch + 1, m_finalHist1[ros][drawer][adc][0][0]->GetBinError(ch + 1) + 0.01);
+        final_empty[adc]->SetBinContent(ch + 1, m_data->m_finalHist1[ros][drawer][adc][0][0]->GetBinContent(ch + 1) + 0.01);
+        final_empty[adc]->SetBinError(ch + 1, m_data->m_finalHist1[ros][drawer][adc][0][0]->GetBinError(ch + 1) + 0.01);
         pmtGain_empty[adc]->SetBinContent(ch + 1, 0.01);
         pmtGain_empty[adc]->SetBinError(ch + 1, 0.01);
       }
       // connected channels
       else {
-        double mean = m_finalHist1[ros][drawer][adc][0][0]->GetBinContent(ch + 1);
-        double rms = m_finalHist1[ros][drawer][adc][0][1]->GetBinContent(ch + 1);
-        double dmean = m_finalHist1[ros][drawer][adc][0][0]->GetBinError(ch + 1);
-        double drms = m_finalHist1[ros][drawer][adc][0][1]->GetBinError(ch + 1);
+        double mean = m_data->m_finalHist1[ros][drawer][adc][0][0]->GetBinContent(ch + 1);
+        double rms = m_data->m_finalHist1[ros][drawer][adc][0][1]->GetBinContent(ch + 1);
+        double dmean = m_data->m_finalHist1[ros][drawer][adc][0][0]->GetBinError(ch + 1);
+        double drms = m_data->m_finalHist1[ros][drawer][adc][0][1]->GetBinError(ch + 1);
         // even pmts
         int pmt = abs(m_cabling->channel2hole(ros, ch)); //extra safe: abs should not be necessary, because channels are connected.
         if (pmt % 2 == 0) {
-          final_even[adc]->SetBinContent(ch + 1, m_finalHist1[ros][drawer][adc][0][0]->GetBinContent(ch + 1) + 0.001);
-          final_even[adc]->SetBinError(ch + 1, m_finalHist1[ros][drawer][adc][0][0]->GetBinError(ch + 1) + 0.001);
+          final_even[adc]->SetBinContent(ch + 1, m_data->m_finalHist1[ros][drawer][adc][0][0]->GetBinContent(ch + 1) + 0.001);
+          final_even[adc]->SetBinError(ch + 1, m_data->m_finalHist1[ros][drawer][adc][0][0]->GetBinError(ch + 1) + 0.001);
 
           //			    if (bin!=0)
           //			      log<<MSG::DEBUG<<"["<<ros<<"]["<<drawer+1<<"]["<<adc<<"]["<< bin <<"] : mean="
@@ -2051,8 +2052,8 @@ void TileRawChannelMonTool::LaserFancyPlotting(int ros, int drawer, int maxgain,
         }
         // odd pmts
         else {
-          final_odd[adc]->SetBinContent(ch + 1, m_finalHist1[ros][drawer][adc][0][0]->GetBinContent(ch + 1) + 0.001);
-          final_odd[adc]->SetBinError(ch + 1, m_finalHist1[ros][drawer][adc][0][0]->GetBinError(ch + 1) + 0.001);
+          final_odd[adc]->SetBinContent(ch + 1, m_data->m_finalHist1[ros][drawer][adc][0][0]->GetBinContent(ch + 1) + 0.001);
+          final_odd[adc]->SetBinError(ch + 1, m_data->m_finalHist1[ros][drawer][adc][0][0]->GetBinError(ch + 1) + 0.001);
 
           // log<<MSG::DEBUG<<"["<<ros<<"]["<<drawer+1<<"]["<<adc<<"]["<< bin <<"] : mean="
           // << mean <<", var="<< rms*rms<<"\tVar/mean(corrected)="<< (rms*rms/mean) - Kapa*mean <<endreq;
@@ -2125,20 +2126,20 @@ void TileRawChannelMonTool::LaserFancyPlotting(int ros, int drawer, int maxgain,
       pad->SetGridx();
     }
 
-    m_finalHist1[ros][drawer][adc][0][1]->SetMarkerStyle(21);
-    m_finalHist1[ros][drawer][adc][0][1]->SetMarkerSize(ms);
-    m_finalHist1[ros][drawer][adc][0][1]->SetLabelSize(0.08, "X");
-    m_finalHist1[ros][drawer][adc][0][1]->SetLabelSize(0.08, "Y");
-    if (do_plots) m_finalHist1[ros][drawer][adc][0][1]->Draw("P0");
-
-    m_finalHist1[ros][drawer][adc][0][2]->SetMaximum(m_finalHist1[ros][drawer][adc][0][1]->GetMaximum());
-    m_finalHist1[ros][drawer][adc][0][2]->SetMinimum(m_finalHist1[ros][drawer][adc][0][1]->GetMinimum());
-    m_finalHist1[ros][drawer][adc][0][2]->SetMarkerStyle(25);
-    m_finalHist1[ros][drawer][adc][0][2]->SetMarkerSize(ms);
-    m_finalHist1[ros][drawer][adc][0][2]->SetMarkerColor(4);
-    m_finalHist1[ros][drawer][adc][0][2]->SetLabelSize(0.08, "X");
-    m_finalHist1[ros][drawer][adc][0][2]->SetLabelSize(0.08, "Y");
-    if (do_plots) m_finalHist1[ros][drawer][adc][0][2]->Draw("sameP0");
+    m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMarkerStyle(21);
+    m_data->m_finalHist1[ros][drawer][adc][0][1]->SetMarkerSize(ms);
+    m_data->m_finalHist1[ros][drawer][adc][0][1]->SetLabelSize(0.08, "X");
+    m_data->m_finalHist1[ros][drawer][adc][0][1]->SetLabelSize(0.08, "Y");
+    if (do_plots) m_data->m_finalHist1[ros][drawer][adc][0][1]->Draw("P0");
+
+    m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMaximum(m_data->m_finalHist1[ros][drawer][adc][0][1]->GetMaximum());
+    m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMinimum(m_data->m_finalHist1[ros][drawer][adc][0][1]->GetMinimum());
+    m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMarkerStyle(25);
+    m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMarkerSize(ms);
+    m_data->m_finalHist1[ros][drawer][adc][0][2]->SetMarkerColor(4);
+    m_data->m_finalHist1[ros][drawer][adc][0][2]->SetLabelSize(0.08, "X");
+    m_data->m_finalHist1[ros][drawer][adc][0][2]->SetLabelSize(0.08, "Y");
+    if (do_plots) m_data->m_finalHist1[ros][drawer][adc][0][2]->Draw("sameP0");
 
     // Select pads 7 and 8
     if (do_plots) {
@@ -2147,14 +2148,14 @@ void TileRawChannelMonTool::LaserFancyPlotting(int ros, int drawer, int maxgain,
       pad->SetGridx();
     }
 
-    if (max3 < 0.9 * maxy[4 + adc]) m_finalHist1[ros][drawer][adc][0][3]->SetMaximum(maxy[4 + adc]);
-    if (min3 > miny[4 + adc] + 0.1 * TMath::Abs(miny[4 + adc])) m_finalHist1[ros][drawer][adc][0][3]->SetMinimum(miny[4 + adc]);
+    if (max3 < 0.9 * maxy[4 + adc]) m_data->m_finalHist1[ros][drawer][adc][0][3]->SetMaximum(maxy[4 + adc]);
+    if (min3 > miny[4 + adc] + 0.1 * TMath::Abs(miny[4 + adc])) m_data->m_finalHist1[ros][drawer][adc][0][3]->SetMinimum(miny[4 + adc]);
 
-    m_finalHist1[ros][drawer][adc][0][3]->SetMarkerStyle(21);
-    m_finalHist1[ros][drawer][adc][0][3]->SetMarkerSize(ms);
-    m_finalHist1[ros][drawer][adc][0][3]->SetLabelSize(0.08, "X");
-    m_finalHist1[ros][drawer][adc][0][3]->SetLabelSize(0.08, "Y");
-    m_finalHist1[ros][drawer][adc][0][3]->Draw("E0");
+    m_data->m_finalHist1[ros][drawer][adc][0][3]->SetMarkerStyle(21);
+    m_data->m_finalHist1[ros][drawer][adc][0][3]->SetMarkerSize(ms);
+    m_data->m_finalHist1[ros][drawer][adc][0][3]->SetLabelSize(0.08, "X");
+    m_data->m_finalHist1[ros][drawer][adc][0][3]->SetLabelSize(0.08, "Y");
+    m_data->m_finalHist1[ros][drawer][adc][0][3]->Draw("E0");
 
     //Lukas
     // Select pads 9 and 10
@@ -2164,14 +2165,14 @@ void TileRawChannelMonTool::LaserFancyPlotting(int ros, int drawer, int maxgain,
       pad->SetGridx();
     }
 
-    if (max4 < 0.9 * maxy[4 + adc]) m_finalHist1[ros][drawer][adc][0][4]->SetMaximum(maxy[4 + adc]);
-    if (min4 > miny[4 + adc] + 0.1 * TMath::Abs(miny[4 + adc])) m_finalHist1[ros][drawer][adc][0][4]->SetMinimum(miny[4 + adc]);
+    if (max4 < 0.9 * maxy[4 + adc]) m_data->m_finalHist1[ros][drawer][adc][0][4]->SetMaximum(maxy[4 + adc]);
+    if (min4 > miny[4 + adc] + 0.1 * TMath::Abs(miny[4 + adc])) m_data->m_finalHist1[ros][drawer][adc][0][4]->SetMinimum(miny[4 + adc]);
 
-    m_finalHist1[ros][drawer][adc][0][4]->SetMarkerStyle(21);
-    m_finalHist1[ros][drawer][adc][0][4]->SetMarkerSize(ms);
-    m_finalHist1[ros][drawer][adc][0][4]->SetLabelSize(0.08, "X");
-    m_finalHist1[ros][drawer][adc][0][4]->SetLabelSize(0.08, "Y");
-    if (do_plots) m_finalHist1[ros][drawer][adc][0][4]->Draw("E0");
+    m_data->m_finalHist1[ros][drawer][adc][0][4]->SetMarkerStyle(21);
+    m_data->m_finalHist1[ros][drawer][adc][0][4]->SetMarkerSize(ms);
+    m_data->m_finalHist1[ros][drawer][adc][0][4]->SetLabelSize(0.08, "X");
+    m_data->m_finalHist1[ros][drawer][adc][0][4]->SetLabelSize(0.08, "Y");
+    if (do_plots) m_data->m_finalHist1[ros][drawer][adc][0][4]->Draw("E0");
     //Lukas
 
   }    //end of loop over gain