diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMainMon.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMainMon.h
index 08954483b8e91c9a12c54021c638b0b2c0f2ad81..ae0f61151a9100a0ed9156f6ae334acceb65cc63 100755
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMainMon.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMainMon.h
@@ -131,6 +131,8 @@ class PixelMainMon:public ManagedMonitorToolBase
     int ParseDetailsString(std::string & detailsMod);
     bool OnTrack(Identifier id, bool isCluster);
     int getErrorCategory(int bit, bool isibl);
+	std::string makeHistname(std::string set, bool ontrk);
+	std::string makeHisttitle(std::string set, std::string axis, bool ontrk);
 
     StatusCode BookClustersMon(void);
     StatusCode BookClustersLumiBlockMon(void);
@@ -252,6 +254,7 @@ class PixelMainMon:public ManagedMonitorToolBase
     bool m_doLumiBlock;   //store module status, error etc for each lumiblock
     bool m_doRefresh;
     bool isFirstBook;
+    bool m_doDegFactorMap;
 
     bool m_doHeavyIonMon;  //modifications for heavy ion monitoring
 
@@ -265,6 +268,7 @@ class PixelMainMon:public ManagedMonitorToolBase
     bool m_isNewRun;
     bool m_isNewLumiBlock;
     bool m_newLowStatInterval;
+    TH1F_LW*              m_hit_ToT_dbm[PixLayerDBM::COUNT];
 
     double m_occupancy_cut;
 
@@ -279,7 +283,7 @@ class PixelMainMon:public ManagedMonitorToolBase
     TH1F_LW*              m_mu_vs_lumi;
     PixelMonModulesProf*  m_hiteff_mod;
 
-    TH1F_LW*          m_events_per_lumi;
+    TH1F_LW*              m_events_per_lumi;
     TProfile_LW*          m_hits_per_lumi;
     TProfile_LW*          m_avgocc_per_lumi;
     TProfile_LW*          m_avgocc_ratioIBLB0_per_lumi;
@@ -287,8 +291,8 @@ class PixelMainMon:public ManagedMonitorToolBase
     TProfile_LW*          m_hits_per_lumi_mod[PixLayer::COUNT];
     TProfile_LW*          m_avgocc_per_lumi_mod[PixLayer::COUNT];
 
-    TH2F_LW*          m_maxocc_per_lumi_mod[PixLayer::COUNT];
-    TH1F_LW*          m_nlargeevt_per_lumi_mod[PixLayer::COUNT];
+    TH2F_LW*              m_maxocc_per_lumi_mod[PixLayer::COUNT];
+    TH1F_LW*              m_nlargeevt_per_lumi_mod[PixLayer::COUNT];
 
     //TH1F_LW*              m_hit_ToT[PixLayerIBL2D3D::COUNT];
     TH1F_LW*              m_hit_ToT[PixLayerIBL2D3DDBM::COUNT];
@@ -297,20 +301,7 @@ class PixelMainMon:public ManagedMonitorToolBase
     TH1F_LW*              m_hit_ToT_tmp_mod[PixLayer::COUNT];
 
     TProfile2D_LW*        m_ToT_etaphi_mod[PixLayer::COUNT];
-    //TH2F_LW*              m_ToT_vs_eta_IBL;
-    //TH2F_LW*              m_ToT_vs_eta_B0;
-    //TH2F_LW*              m_ToT_vs_eta_B1;
-    //TH2F_LW*              m_ToT_vs_eta_B2;
-    //TH2F_LW*              m_ToT_vs_phi_IBL;      
-    //TH2F_LW*              m_ToT_vs_phi_B0;      
-    //TH2F_LW*              m_ToT_vs_phi_B1;
-    //TH2F_LW*              m_ToT_vs_phi_B2;
-    TH2F_LW*              m_nlowToT_vs_clussize_IBL;
-    TH2F_LW*              m_nlowToT_vs_clussize_B0;
-    TH2F_LW*              m_nlowToT_vs_clussize_B1;
-    TH2F_LW*              m_nlowToT_vs_clussize_B2;
-    TH2F_LW*              m_nlowToT_vs_clussize_ECC;
-    TH2F_LW*              m_nlowToT_vs_clussize_ECA;
+    TH2F_LW*              m_nlowToT_vs_clussize_mod[PixLayer::COUNT];
 
     TH1I_LW*              m_Lvl1ID_PIX;
     TH1I_LW*              m_Lvl1ID_IBL;
@@ -321,7 +312,6 @@ class PixelMainMon:public ManagedMonitorToolBase
     TProfile_LW*          m_BCID_Profile;
     PixelMon2DLumiProfiles*    m_Lvl1ID_diff_mod_ATLAS_per_LB;
     PixelMon2DLumiProfiles*    m_Lvl1ID_absdiff_mod_ATLAS_per_LB;
-    //TH1F_LW*              m_Lvl1A_mod[PixLayer::COUNT];
     TH1F_LW*              m_Lvl1A_mod[PixLayerDBM::COUNT];
     TH1F_LW*              m_Lvl1A_10min_mod[PixLayer::COUNT];
     TH1I_LW*              m_Lvl1ID_diff_mod_ATLAS_mod[PixLayer::COUNT];
@@ -329,9 +319,7 @@ class PixelMainMon:public ManagedMonitorToolBase
     TH2I_LW*              m_diff_ROD_BCID;         
     PixelMon2DMaps*       m_occupancy;
     PixelMon2DMaps*       m_occupancy_10min;
-    //PixelMon2DMaps*       m_average_occupancy;
-    PixelMon2DMaps*       m_average_pixocc;
-    PixelMon2DMaps*       m_average_pixocc2;
+    PixelMon2DMapsLW*     m_average_pixocc;
     PixelMon2DMaps*       m_hitmap_mon;
     PixelMon2DMaps*       m_hitmap_tmp;
     PixelMonModules1D*    m_FE_chip_hit_summary;
@@ -362,14 +350,10 @@ class PixelMainMon:public ManagedMonitorToolBase
     PixelMonModules2D*    m_pixel_noise_map;
     PixelMonModules1D*    m_pixel_occupancy_spectrum;
     PixelMonModules1D*    m_hit_num_mod;
-    //int                   m_HitPerEventArray_disksA[48][3];
-    //int                   m_HitPerEventArray_disksC[48][3];
-    //int                   m_HitPerEventArray_lI[14][20];
-    //int                   m_HitPerEventArray_l0[22][13];
-    //int                   m_HitPerEventArray_l1[38][13];
-    //int                   m_HitPerEventArray_l2[52][13]; 
-
-    //track histograms
+
+    //-----------------
+    // track histograms
+    //-----------------
     TH1F_LW*              m_track_res_phi; 
     TH1F_LW*              m_track_pull_phi;
     TH1F_LW*              m_track_res_eta; 
@@ -382,21 +366,21 @@ class PixelMainMon:public ManagedMonitorToolBase
     TH1F_LW*              m_track_chi2_bcl1_highpt;
     TH1F_LW*              m_track_chi2_bcl0_highpt;
     TH1F_LW*              m_track_chi2_bclgt1_highpt;
-    TH1F_LW*              m_track_clusToT;
-    TH1F_LW*              m_track_qOverP;  
-    TH1F_LW*              m_track_qOverP_inv;  
-    TH1F_LW*              m_track_pt;  
-    TH1F_LW*              m_track_d0;      
-    TH1F_LW*              m_track_z0;     
-    TH1F_LW*              m_track_phi0;    
-    TH1F_LW*              m_track_theta;   
-    TH1F_LW*              m_track_eta;    
+    //TH1F_LW*              m_track_clusToT;
+    //TH1F_LW*              m_track_qOverP;  
+    //TH1F_LW*              m_track_qOverP_inv;  
+    //TH1F_LW*              m_track_pt;  
+    //TH1F_LW*              m_track_d0;      
+    //TH1F_LW*              m_track_z0;     
+    //TH1F_LW*              m_track_phi0;    
+    //TH1F_LW*              m_track_theta;   
+    //TH1F_LW*              m_track_eta;    
     TH1I_LW*              m_tracks_per_lumi;
     TH1F_LW*              m_trackRate_per_lumi;
     TProfile_LW*          m_tracksPerEvt_per_lumi;
     TProfile_LW*          m_tracksPerEvtPerMu_per_lumi;
-    TH2F_LW*              m_track_dedx;
-    TH1F_LW*              m_track_mass_dedx;
+    //TH2F_LW*              m_track_dedx;
+    //TH1F_LW*              m_track_mass_dedx;
     TH2F_LW*              m_clustot_vs_pt;
     TH1F_LW*              m_clustot_lowpt;
     TH1F_LW*              m_1hitclustot_lowpt;
@@ -406,78 +390,35 @@ class PixelMainMon:public ManagedMonitorToolBase
     TH1F_LW*              m_2hitclustot_highpt;
 
     PixelMonModulesProf*  m_tsos_hiteff_vs_lumi;
-    PixelMon2DMaps*       m_tsos_hitmap;
-    PixelMon2DMaps*       m_tsos_holemap;
-    PixelMon2DMaps*   m_tsos_outliermap;
+    PixelMon2DMapsLW*     m_tsos_hitmap;
+    PixelMon2DMapsLW*     m_tsos_holemap;
+    PixelMon2DMapsLW*     m_tsos_outliermap;
+
+    TProfile2D_LW*        m_degFactorMap;
+    TProfile_LW*          m_degFactorMap_per_lumi;
+    TProfile2D_LW*        m_degFactorMap_eta_per_lumi;
+    //TProfile2D_LW*        m_degFactorMap_phi_per_lumi;
 
     //cluster histograms
     TProfile_LW*          m_clusters_per_lumi;
     TProfile_LW*          m_clusters_per_lumi_mod[PixLayer::COUNT];
-    TProfile_LW*          m_clusters_per_lumi_PIX;
     TProfile_LW*          m_largeclusters_per_lumi;
     TProfile_LW*          m_verylargeclusters_per_lumi;
     TH1I_LW*              m_totalclusters_per_lumi;
     TH1I_LW*              m_totalclusters_per_lumi_mod[PixLayer::COUNT];
     TH1I_LW*              m_highNclusters_per_lumi;
-    TH1F_LW*              m_cluster_ToT_PIX;
-    TH1F_LW*              m_cluster_ToT_ECA;
-    TH1F_LW*              m_cluster_ToT_IBL;
-    TH1F_LW*              m_cluster_ToT_IBL2D;
-    TH1F_LW*              m_cluster_ToT_IBL3D;
-    TH1F_LW*              m_cluster_ToT_B0;
-    TH1F_LW*              m_cluster_ToT_B1;
-    TH1F_LW*              m_cluster_ToT_B2;
-    TH1F_LW*              m_cluster_ToT_ECC;
-    TH1F_LW*              m_bigcluster_ToT_ECA;
-    TH1F_LW*              m_bigcluster_ToT_IBL;
-    TH1F_LW*              m_bigcluster_ToT_B0;
-    TH1F_LW*              m_bigcluster_ToT_B1;
-    TH1F_LW*              m_bigcluster_ToT_B2;
-    TH1F_LW*              m_bigcluster_ToT_ECC;
-    TH1F_LW*              m_1cluster_ToT_ECA;
-    TH1F_LW*              m_1cluster_ToT_IBL;
-    TH1F_LW*              m_1cluster_ToT_B0;
-    TH1F_LW*              m_1cluster_ToT_B1;
-    TH1F_LW*              m_1cluster_ToT_B2;
-    TH1F_LW*              m_1cluster_ToT_ECC;
-    TH1F_LW*              m_2cluster_ToT_ECA;
-    TH1F_LW*              m_2cluster_ToT_IBL;
-    TH1F_LW*              m_2cluster_ToT_B0;
-    TH1F_LW*              m_2cluster_ToT_B1;
-    TH1F_LW*              m_2cluster_ToT_B2;
-    TH1F_LW*              m_2cluster_ToT_ECC;
-    TH1F_LW*              m_3cluster_ToT_ECA;
-    TH1F_LW*              m_3cluster_ToT_IBL;
-    TH1F_LW*              m_3cluster_ToT_B0;
-    TH1F_LW*              m_3cluster_ToT_B1;
-    TH1F_LW*              m_3cluster_ToT_B2;
-    TH1F_LW*              m_3cluster_ToT_ECC;
+    TH1F_LW*              m_cluster_ToT1d_mod[PixLayerIBL2D3D::COUNT];
+    TH1F_LW*              m_1cluster_ToT_mod[PixLayer::COUNT];
+    TH1F_LW*              m_2cluster_ToT_mod[PixLayer::COUNT];
+    TH1F_LW*              m_3cluster_ToT_mod[PixLayer::COUNT];
+    TH1F_LW*              m_bigcluster_ToT_mod[PixLayer::COUNT];
 
     ///////////////                                    
-    TH1F_LW*              m_bigcluster_Q_ECA;
-    TH1F_LW*              m_bigcluster_Q_IBL;
-    TH1F_LW*              m_bigcluster_Q_B0;
-    TH1F_LW*              m_bigcluster_Q_B1;
-    TH1F_LW*              m_bigcluster_Q_B2;
-    TH1F_LW*              m_bigcluster_Q_ECC;
-    TH1F_LW*              m_1cluster_Q_ECA;
-    TH1F_LW*              m_1cluster_Q_IBL;
-    TH1F_LW*              m_1cluster_Q_B0;
-    TH1F_LW*              m_1cluster_Q_B1;
-    TH1F_LW*              m_1cluster_Q_B2;
-    TH1F_LW*              m_1cluster_Q_ECC;
-    TH1F_LW*              m_2cluster_Q_ECA;
-    TH1F_LW*              m_2cluster_Q_IBL;
-    TH1F_LW*              m_2cluster_Q_B0;
-    TH1F_LW*              m_2cluster_Q_B1;
-    TH1F_LW*              m_2cluster_Q_B2;
-    TH1F_LW*              m_2cluster_Q_ECC;
-    TH1F_LW*              m_3cluster_Q_ECA;
-    TH1F_LW*              m_3cluster_Q_IBL;
-    TH1F_LW*              m_3cluster_Q_B0;
-    TH1F_LW*              m_3cluster_Q_B1;
-    TH1F_LW*              m_3cluster_Q_B2;
-    TH1F_LW*              m_3cluster_Q_ECC;
+    TH1F_LW*              m_cluster_Q_mod[PixLayerIBL2D3D::COUNT];
+    TH1F_LW*              m_1cluster_Q_mod[PixLayer::COUNT];
+    TH1F_LW*              m_2cluster_Q_mod[PixLayer::COUNT];
+    TH1F_LW*              m_3cluster_Q_mod[PixLayer::COUNT];
+    TH1F_LW*              m_bigcluster_Q_mod[PixLayer::COUNT];
 
     PixelMonProfiles*       m_clussize_map;
     PixelMonProfiles*       m_cluscharge_map;
@@ -491,41 +432,17 @@ class PixelMainMon:public ManagedMonitorToolBase
     TH1F_LW*              m_cluster_groupsize_mod[PixLayer::COUNT];
     TH1F_LW*              m_cluster_LVL1A;
     TH1F_LW*              m_cluster_LVL1A_highToT;
-    TH1F_LW*              m_cluster_LVL1A_PIX;
-    TH1F_LW*              m_cluster_LVL1A_ECA;
-    TH1F_LW*              m_cluster_LVL1A_ECC;
-    TH1F_LW*              m_cluster_LVL1A_IBL;
-    TH1F_LW*              m_cluster_LVL1A_B0;
-    TH1F_LW*              m_cluster_LVL1A_B1;
-    TH1F_LW*              m_cluster_LVL1A_B2;
-    TH1F_LW*              m_cluster_charge_ECA;
-    TH1F_LW*              m_cluster_charge_ECC;
-    TH1F_LW*              m_cluster_charge_IBL;
-    TH1F_LW*              m_cluster_charge_B0;
-    TH1F_LW*              m_cluster_charge_B1;
-    TH1F_LW*              m_cluster_charge_B2;
+    TH1F_LW*              m_cluster_LVL1A1d_mod[PixLayer::COUNT];
     TProfile_LW*          m_clusterSize_eta;
-    TH2F_LW*              m_clusToT_vs_eta_IBL;
-    TH2F_LW*              m_clusToT_vs_eta_B0;
-    TH2F_LW*              m_clusToT_vs_eta_B1;
-    TH2F_LW*              m_clusToT_vs_eta_B2;
+    TH2F_LW*              m_clusToT_vs_eta_mod[PixLayer::COUNT];
     TH2F_LW*              m_clusQ_vs_eta_mod[PixLayer::COUNT];
-    TH2F_LW*              m_ToT_vs_clussize_IBL;
-    TH2F_LW*              m_ToT_vs_clussize_B0;
-    TH2F_LW*              m_ToT_vs_clussize_B1;
-    TH2F_LW*              m_ToT_vs_clussize_B2;
-    TH2F_LW*              m_Q_vs_clussize_IBL;
-    TH2F_LW*              m_Q_vs_clussize_B0;
-    TH2F_LW*              m_Q_vs_clussize_B1;
-    TH2F_LW*              m_Q_vs_clussize_B2;
-    TH2F_LW*              m_Q_vs_clussize_ECC;
-    TH2F_LW*              m_Q_vs_clussize_ECA;
+    TH2F_LW*              m_ToT_vs_clussize_mod[PixLayer::COUNT];
+    TH2F_LW*              m_Q_vs_clussize_mod[PixLayer::COUNT];
 
     TH2F_LW*              m_clussize_vs_eta_mod[PixLayer::COUNT];
     PixelMon2DMaps*       m_cluster_occupancy;
     DBMMon2DMaps  *       m_clusocc_DBM;
     PixelMon2DMaps*       m_clusocc_sizenot1; 
-    //PixelMon2DMaps*       m_average_cluster_occupancy;
     PixelMonModulesProf*  m_cluseff_mod;
     PixelMonModules1D*    m_cluster_ToT_mod;
     PixelMonModules1D*    m_cluster_size_mod;
@@ -568,27 +485,9 @@ class PixelMainMon:public ManagedMonitorToolBase
     PixelMonModules1D*    m_Status_modules;
     PixelMonProfiles*     m_status;
     PixelMon2DMaps*       m_dqStatus;
-    TProfile_LW*          m_badModules_per_lumi;
-    TProfile_LW*          m_badModules_per_lumi_ECA;
-    TProfile_LW*          m_badModules_per_lumi_ECC;
-    TProfile_LW*          m_badModules_per_lumi_IBL;
-    TProfile_LW*          m_badModules_per_lumi_B0;
-    TProfile_LW*          m_badModules_per_lumi_B1;
-    TProfile_LW*          m_badModules_per_lumi_B2;
-    TProfile_LW*          m_disabledModules_per_lumi;
-    TProfile_LW*          m_disabledModules_per_lumi_PIX;
-    TProfile_LW*          m_disabledModules_per_lumi_ECA;
-    TProfile_LW*          m_disabledModules_per_lumi_ECC;
-    TProfile_LW*          m_disabledModules_per_lumi_IBL;
-    TProfile_LW*          m_disabledModules_per_lumi_B0;
-    TProfile_LW*          m_disabledModules_per_lumi_B1;
-    TProfile_LW*          m_disabledModules_per_lumi_B2;
-    TProfile_LW*          m_baddisabledModules_per_lumi_ECA;
-    TProfile_LW*          m_baddisabledModules_per_lumi_ECC;
-    TProfile_LW*          m_baddisabledModules_per_lumi_IBL;
-    TProfile_LW*          m_baddisabledModules_per_lumi_B0;
-    TProfile_LW*          m_baddisabledModules_per_lumi_B1;
-    TProfile_LW*          m_baddisabledModules_per_lumi_B2;
+    TProfile_LW*          m_badModules_per_lumi_mod[PixLayerIBL2D3D::COUNT];
+    TProfile_LW*          m_disabledModules_per_lumi_mod[PixLayerIBL2D3D::COUNT];
+    TProfile_LW*          m_baddisabledModules_per_lumi_mod[PixLayerIBL2D3D::COUNT];
 
     //ROD Error histograms
     TH1F_LW*              m_error1;            
@@ -630,12 +529,8 @@ class PixelMainMon:public ManagedMonitorToolBase
     TProfile_LW*          m_errorStates_per_lumi_mod[PixLayer::COUNT-1][16];
     TProfile2D_LW*        m_ErrorBit_per_lumi_mod[PixLayerIBL2D3D::COUNT];
     TProfile2D_LW*        m_Error_per_lumi_mod[PixLayerIBL2D3D::COUNT];
-    //TProfile_LW*          m_sync_rod_BCID_per_lumi_mod[PixLayer::COUNT-1];
     TH1I_LW*              m_bad_mod_errors_mod[PixLayer::COUNT];
     TH2F_LW*              m_errors_etaid_mod[PixLayer::COUNT];
-    //TH2F_LW*              m_errors_etaid_per_evt_mod[PixLayer::COUNT];
-    //TH2F_LW*              m_mod_errormap_IBL;
-    //TH1I_LW*              m_mod_errors_IBL;
 
     PixelMon2DLumiMaps*        m_errors_int_LB[16];
 
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DMapsLW.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DMapsLW.h
index 6d7106404f4f87296d09e800f1c1167c1fe9e40d..426c338dd8f751b99e91dc73035312178cbc3fb3 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DMapsLW.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DMapsLW.h
@@ -32,8 +32,11 @@ class PixelMon2DMapsLW
       TH2F_LW* B2;
       TH2F_LW* A;
       TH2F_LW* C;
+      TH2F_LW* DBMA;
+      TH2F_LW* DBMC;
       void Fill(Identifier &id, const PixelID* pixID, bool doIBL, bool errorHist);
       void FillNormalized(PixelMon2DMapsLW* old, int nevent);
+      void WeightingFill(Identifier &id, const PixelID* pixID, bool doIBL, float weight);
       void Scale(double number);
       StatusCode regHist(ManagedMonitorToolBase::MonGroup &group, bool doIBL, bool errorHist);
 private:
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonModules.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonModules.h
index 25b0a431bb062a2b6fe63a946cb288d9af8f475f..5c1d109fab1193ac5d00263d988a22470a28c891 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonModules.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonModules.h
@@ -9,7 +9,9 @@
 
 class TH2F;
 class TH1F;
+class TH1F_LW;
 class TProfile;
+class TProfile_LW;
 class Identifier;
 class PixelID;
 class StatusCode;
@@ -67,20 +69,20 @@ class PixelMonModulesProf : public PixelMonModules
 virtual ~PixelMonModulesProf();
  StatusCode regHist(ManagedMonitorToolBase* thisptr, std::string path, ManagedMonitorToolBase::Interval_t Run, bool doIBL);
 //StatusCode regHist(ManagedMonitorToolBase* thisptr, std::string path, ManagedMonitorToolBase::Interval_t Run, ManagedMonitorToolBase::MgmtAttr_t m=ATTRIB_MANAGED,bool doIBL);
-      TProfile* IBL[20][14];
-      TProfile* B0[13][22];
-      TProfile* B1[13][38];
-      TProfile* B2[13][52];
-      TProfile* A[3][48];
-      TProfile* C[3][48];
+      TProfile_LW* IBL[20][14];
+      TProfile_LW* B0[13][22];
+      TProfile_LW* B1[13][38];
+      TProfile_LW* B2[13][52];
+      TProfile_LW* A[3][48];
+      TProfile_LW* C[3][48];
       virtual void formatHist(std::string opt="", bool doIBL=false);  //pass the bin lables here if needed
       void Fill(double value0, double value1, Identifier &id, const PixelID* pixID,bool doIBL);
       void SetBinLabel(const char* lable, int binN);
       virtual void Reset();
-      double GetBinContent(double value, Identifier &id, const PixelID* pixID);
+      //double GetBinContent(double value, Identifier &id, const PixelID* pixID);
    private:
-      TProfile* Dummy;           //shouldn't be used unless messed up;
-      TProfile* &getHist(int i); //make looping over all the histos easier.
+      TProfile_LW* Dummy;           //shouldn't be used unless messed up;
+      TProfile_LW* &getHist(int i); //make looping over all the histos easier.
 };
 
 class PixelMonModules2D : public PixelMonModules
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonProfiles.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonProfiles.h
index 47e827d446d86e36f8e258eb60a3d5a70342ca12..e1f6fe267a3604185412244bdd0e6635392874f5 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonProfiles.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonProfiles.h
@@ -7,7 +7,8 @@
 #include "AthenaMonitoring/ManagedMonitorToolBase.h"
 #include <string.h>
 
-class TProfile2D;
+//class TProfile2D;
+class TProfile2D_LW;
 class Identifier;
 class PixelID;
 class StatusCode;
@@ -22,14 +23,14 @@ class PixelMonProfiles
    public:
       PixelMonProfiles(std::string name, std::string title);
       ~PixelMonProfiles();
-      TProfile2D* IBL2D;
-      TProfile2D* IBL3D;
-      TProfile2D* IBL;
-      TProfile2D* B0;
-      TProfile2D* B1;
-      TProfile2D* B2;
-      TProfile2D* A;
-      TProfile2D* C;
+      TProfile2D_LW* IBL2D;
+      TProfile2D_LW* IBL3D;
+      TProfile2D_LW* IBL;
+      TProfile2D_LW* B0;
+      TProfile2D_LW* B1;
+      TProfile2D_LW* B2;
+      TProfile2D_LW* A;
+      TProfile2D_LW* C;
       void Fill(Identifier &id, const PixelID* pixID, float Index, bool doIBL);
       void SetMaxValue(float max);
       StatusCode regHist(ManagedMonitorToolBase::MonGroup &group);
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Clusters.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Clusters.cxx
index 34a11039b1dfe02a51a8f0e525a3cd8ff30f333e..d1f00252af749f5c242bafdc58a32a7b3dce1048 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Clusters.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Clusters.cxx
@@ -64,323 +64,221 @@ StatusCode PixelMainMon::BookClustersMon(void)
 
    std::string addOnTrack = "_OnTrack";
 
-   int hxbin = 0; double hxmin = 0.; double hxmax = 0.;
-   //int hybin = 0; double hymin = 0.; double hymax = 0.;
-   int nbins_LB = 2500; double min_LB   = -0.5; double max_LB = min_LB + (1.0*nbins_LB);        
+   int nbins_LB = 2500;  double min_LB   = -0.5; double max_LB = min_LB + (1.0*nbins_LB);        
    int nbins_npix = 300; double min_npix = -0.5; double max_npix = min_npix + (1.0*nbins_npix);
-   int nbins_nwid = 50; double min_nwid = -0.5; double max_nwid = min_nwid + (1.0*nbins_nwid);
-   int nbins_eta = 13; double min_eta = -6.5;  double max_eta = min_eta + (1.0*nbins_eta);
-   int nbins_tot = 300; double min_tot = -0.5; double max_tot = min_tot + (1.0*nbins_tot);
+   int nbins_nwid = 50;  double min_nwid = -0.5; double max_nwid = min_nwid + (1.0*nbins_nwid);
+   int nbins_eta = 13;   double min_eta = -6.5;  double max_eta = min_eta + (1.0*nbins_eta);
+   int nbins_tot = 300;  double min_tot = -0.5; double max_tot = min_tot + (1.0*nbins_tot);
+   int nbins_ibl_tot = 150;  double min_ibl_tot = -0.5; double max_ibl_tot = min_tot + (1.0*nbins_tot);
+   int nbins_Q = 70;     double min_Q = -0.5; double max_Q = min_Q + (3000.0*nbins_Q);
+   int nbins_nevt = 50;  double min_nevt = -0.5; double max_nevt = min_nevt + (1.0*nbins_nevt);
+   int nbins_lvl1 = 14;  double min_lvl1 = -1.5; double max_lvl1 = min_lvl1 + (1.0*nbins_lvl1);
    std::string atext_LB = ";lumi block"; 
    std::string atext_clu = ";# clusters/event"; 
    std::string atext_npix = ";# pixels/cluster"; 
    std::string atext_nclu = ";# clusters"; 
+   std::string atext_nevt = ";# events"; 
    std::string atext_cluw = ";cluster width"; 
    std::string atext_eta = ";Module eta index"; 
-   std::string atext_tot = ";ToT"; 
+   std::string atext_tot = ";ToT [BC]"; 
+   std::string atext_Q = ";Charge [e]"; 
+   std::string atext_lvl1 = ";LVL1A"; 
    std::string tmp;
    std::string tmp2;
    std::string atitles;
+   std::string hname;
+   std::string htitles;
    std::string modlabel[8];
    modlabel[0]="ECA"; modlabel[1]="ECC";
    modlabel[2]="B0";  modlabel[3]="B1";  modlabel[4]="B2"; modlabel[5]="IBL"; modlabel[6]="IBL2D"; modlabel[7]="IBL3D"; 
 
-   tmp = "ClusterSize_v_eta"; tmp2 = "Cluster size as a function of barrel module eta"; atitles = ";Module eta index;cluster width";
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_clusterSize_eta           = TProfile_LW::create(tmp.c_str(), (tmp2 + m_histTitleExt + atitles).c_str(), nbins_eta, min_eta, max_eta));
+   hname = makeHistname("ClusterSize_vs_eta", false);
+   htitles = makeHisttitle("Average cluster size as a function of barrel module eta", (atext_eta+atext_cluw), false);
+   sc = clusterExpert.regHist(m_clusterSize_eta = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_eta, min_eta, max_eta));
 
-   tmp = "LargeClusters_per_lumi"; tmp2 = "Clusters (with >10 pixels) per event per LB"; atitles = ";lumi block;# clusters/event";
-   if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterShift.regHist(m_largeclusters_per_lumi     = TProfile_LW::create(tmp.c_str(), (tmp2 + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
+   hname = makeHistname("LargeClusters_per_lumi", true);
+   htitles = makeHisttitle("Avetarge number of large clusters (with >10 pixels) per event", (atext_LB+atext_clu), true);
+   sc = clusterShift.regHist(m_largeclusters_per_lumi = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
 
-   tmp = "VeryLargeClusters_per_lumi"; tmp2 = "Clusters (with >50 pixels) per event per LB"; atitles = ";lumi block;# clusters/event";
-   if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterShift.regHist(m_verylargeclusters_per_lumi = TProfile_LW::create(tmp.c_str(), (tmp2 + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
+   hname = makeHistname("VeryLargeClusters_per_lumi", true);
+   htitles = makeHisttitle("Average number of very large clusters (with >50 pixels) per event", (atext_LB+atext_clu), true);
+   sc = clusterShift.regHist(m_verylargeclusters_per_lumi = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
 
-   tmp = "HighNClusters_per_lumi"; tmp2 = "Rate of events with >1000 clusters/event per LB"; atitles = ";lumi block;# event";
-   if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_highNclusters_per_lumi    = TH1I_LW::create(tmp.c_str(),     (tmp2 + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
+   hname = makeHistname("HighNClusters_per_lumi", true);
+   htitles = makeHisttitle("Number of events with >1000 clusters/event", (atext_LB+atext_nevt), true);
+   sc = clusterExpert.regHist(m_highNclusters_per_lumi = TH1I_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
 
-   tmp = "Clusters_per_lumi"; tmp2 = "Number of pixel clusters per event per LB"; atitles = ";lumi block;# clusters/event";
-   if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterShift.regHist(m_clusters_per_lumi      = TProfile_LW::create(tmp.c_str(),            (tmp2 +                      m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
+   hname = makeHistname("Clusters_per_lumi", true);
+   htitles = makeHisttitle("Average number of pixel clusters per event", (atext_LB+atext_clu), true);
+   sc = clusterShift.regHist(m_clusters_per_lumi = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
 
-   tmp = "Clusters_per_lumi"; tmp2 = "Number of pixel clusters per event per LB"; atitles = ";lumi block;# clusters/event";
-   sc = clusterShift.regHist(m_clusters_per_lumi_PIX  = TProfile_LW::create((tmp + "_PIX").c_str(), (tmp2 + ", Pixel"          + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
+   hname = makeHistname("TotalClusters_per_lumi", true);
+   htitles = makeHisttitle("Total number of pixel clusters", (atext_LB+atext_nclu), true);
+   sc = clusterShift.regHist(m_totalclusters_per_lumi = TH1I_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
 
-   tmp = "TotalClusters_per_lumi"; tmp2 = "Total number of pixel clusters per event per LB"; atitles = ";lumi block;# clusters";
-   if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterShift.regHist(m_totalclusters_per_lumi      = TH1I_LW::create(tmp.c_str() ,           (tmp2 +                 m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
+   hname = makeHistname("Cluster_groupsize", true);
+   htitles = makeHisttitle("Number of pixels in a cluster", (atext_npix+atext_nclu), true);
+   sc = clusterExpert.regHist(m_cluster_groupsize = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_npix, min_npix, max_npix));
 
-   tmp = "Cluster_groupsize"; tmp2 = "Number of pixels per cluster"; atitles = ";# pixels/cluster;# clusters";  
-   if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_cluster_groupsize     = TH1F_LW::create(tmp.c_str(),            (tmp2 +          m_histTitleExt + atitles).c_str(), nbins_npix, min_npix, max_npix));
+   hname = makeHistname("Cluster_column_width", false);
+   htitles = makeHisttitle("Column width of a cluster", (atext_cluw+atext_nclu), false);
+   sc = clusterExpert.regHist(m_cluster_col_width = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_nwid, min_nwid, max_nwid)); 
 
-   tmp = "Cluster_column_width"; tmp2 = "Column width of cluster"; atitles = ";cluster width;# clusters";
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_cluster_col_width     = TH1F_LW::create(tmp.c_str(),            (tmp2 +          m_histTitleExt + atitles).c_str(), nbins_nwid, min_nwid, max_nwid)); 
+   hname = makeHistname("Cluster_row_width", false);
+   htitles = makeHisttitle("Row width of a cluster", (atext_cluw+atext_nclu), false);
+   sc = clusterExpert.regHist(m_cluster_row_width = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_nwid, min_nwid, max_nwid));
 
-   tmp = "Cluster_row_width"; tmp2 = "Row width of cluster"; atitles = ";cluster width;# clusters";  
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_cluster_row_width     = TH1F_LW::create(tmp.c_str(),            (tmp2 +          m_histTitleExt + atitles).c_str(), nbins_nwid, min_nwid, max_nwid));
+   hname = makeHistname("Cluster_LVL1A", true);
+   htitles = makeHisttitle("Cluster Level 1 Accept", (atext_lvl1+atext_nclu), true);
+   sc = timeShift.regHist(m_cluster_LVL1A = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_lvl1, min_lvl1, max_lvl1));
 
    /// Histograms for each layer
    for(int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
-         tmp = "Clusters_per_lumi"; tmp2 = "Number of pixel clusters per event per LB"; atitles = ";lumi block;# clusters/event";
-         sc = clusterExpert.regHist(m_clusters_per_lumi_mod[i] = TProfile_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
-         tmp = "TotalClusters_per_lumi"; tmp2 = "Total number of pixel clusters per event per LB"; atitles = ";lumi block;# clusters";
-         sc = clusterExpert.regHist(m_totalclusters_per_lumi_mod[i] = TH1I_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
-         tmp = "Cluster_groupsize"; tmp2 = "Number of pixels per cluster"; atitles = ";# pixels/cluster;# clusters";
-         sc = clusterExpert.regHist(m_cluster_groupsize_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_npix+1, min_npix, max_npix+1));
-         tmp = "Cluster_column_width"; tmp2 = "Column width of cluster"; atitles = ";cluster width;# clusters";
-         sc = clusterExpert.regHist(m_cluster_col_width_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_nwid, min_nwid, max_nwid));
-         tmp = "Cluster_row_width"; tmp2 = "Row width of cluster"; atitles = ";cluster width;# clusters";
-         sc = clusterExpert.regHist(m_cluster_row_width_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atext_cluw + atext_nclu).c_str(), nbins_nwid, min_nwid, max_nwid));
-   }
-
-   
-   if(m_doESD && !m_doOnline){
-      hxbin = 200; hxmin = 0.; hxmax = 200000.;  
-
-      tmp = "clusQ_vs_eta"; tmp2 = "Cluster Q vs Eta"; atitles = ";Module eta index;Charge";
-      for(int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
-         sc = clusterExpert.regHist(m_clusQ_vs_eta_mod[i] = TH2F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_eta, min_eta, max_eta, hxbin, hxmin, hxmax));
+      hname = makeHistname(("Clusters_per_lumi_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Average number of pixel clusters per event per LB, "+modlabel[i]), (atext_LB+atext_clu), false);
+      sc = clusterExpert.regHist(m_clusters_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+
+      hname = makeHistname(("TotalClusters_per_lumi_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Total number of pixel clusters per LB, "+modlabel[i]), (atext_LB+atext_nclu), false);
+      sc = clusterExpert.regHist(m_totalclusters_per_lumi_mod[i] = TH1I_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+
+      hname = makeHistname(("Cluster_groupsize_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Number of pixels in a cluster, "+modlabel[i]), (atext_npix+atext_nclu), false);
+      sc = clusterExpert.regHist(m_cluster_groupsize_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_npix+1, min_npix, max_npix+1));
+
+      hname = makeHistname(("Cluster_column_width_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Column width of a cluster, "+modlabel[i]), (atext_cluw+atext_nclu), false);
+      sc = clusterExpert.regHist(m_cluster_col_width_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_nwid, min_nwid, max_nwid));
+
+      hname = makeHistname(("Cluster_row_width_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Row width of a cluster, "+modlabel[i]), (atext_cluw+atext_nclu), false);
+      sc = clusterExpert.regHist(m_cluster_row_width_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_nwid, min_nwid, max_nwid));
+
+      //hname = makeHistname(("Cluster_ToT_"+modlabel[i]), false);
+      //htitles = makeHisttitle(("Cluster ToT, "+modlabel[i]), (atext_tot+atext_nclu), false);
+      //sc = clusterExpert.regHist(m_cluster_ToT1d_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot, min_tot, max_tot));
+
+      hname = makeHistname(("1Hit_Cluster_ToT_"+modlabel[i]), false);
+      htitles = makeHisttitle(("ToT for 1-hit clusters, "+modlabel[i]), (atext_tot+atext_nclu), false);
+      sc = clusterExpert.regHist(m_1cluster_ToT_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot, min_tot, max_tot));
+
+      hname = makeHistname(("2Hit_Cluster_ToT_"+modlabel[i]), false);
+      htitles = makeHisttitle(("ToT for 2-hit clusters, "+modlabel[i]), (atext_tot+atext_nclu), false);
+      sc = clusterExpert.regHist(m_2cluster_ToT_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot, min_tot, max_tot));
+
+      hname = makeHistname(("3Hit_Cluster_ToT_"+modlabel[i]), false);
+      htitles = makeHisttitle(("ToT for 3-hit clusters, "+modlabel[i]), (atext_tot+atext_nclu), false);
+      sc = clusterExpert.regHist(m_3cluster_ToT_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot, min_tot, max_tot));
+
+      hname = makeHistname(("BigHit_Cluster_ToT_"+modlabel[i]), false);
+      htitles = makeHisttitle(("ToT for cluster size > 3, "+modlabel[i]), (atext_tot+atext_nclu), false);
+      sc = clusterExpert.regHist(m_bigcluster_ToT_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot, min_tot, max_tot));
+
+      //hname = makeHistname(("Cluster_Q_"+modlabel[i]), false);
+      //htitles = makeHisttitle(("Charge, "+modlabel[i]), (atext_Q+atext_nclu), false);
+      //sc = clusterExpert.regHist(m_cluster_Q_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_Q, min_Q, max_Q));
+
+      hname = makeHistname(("1Hit_Cluster_Q_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Charge for 1-hit clusters, "+modlabel[i]), (atext_Q+atext_nclu), false);
+      sc = clusterExpert.regHist(m_1cluster_Q_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_Q, min_Q, max_Q));
+
+      hname = makeHistname(("2Hit_Cluster_Q_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Charge for 2-hit clusters, "+modlabel[i]), (atext_Q+atext_nclu), false);
+      sc = clusterExpert.regHist(m_2cluster_Q_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_Q, min_Q, max_Q));
+
+      hname = makeHistname(("3Hit_Cluster_Q_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Charge for 3-hit clusters, "+modlabel[i]), (atext_Q+atext_nclu), false);
+      sc = clusterExpert.regHist(m_3cluster_Q_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_Q, min_Q, max_Q));
+
+      hname = makeHistname(("BigHit_Cluster_Q_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Charge for cluster size > 3, "+modlabel[i]), (atext_Q+atext_nclu), false);
+      sc = clusterExpert.regHist(m_bigcluster_Q_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_Q, min_Q, max_Q));
+
+      hname = makeHistname(("Cluster_LVL1A_"+modlabel[i]), true);
+      if(i != PixLayer::kIBL) htitles = makeHisttitle(("Cluster Level 1 Accept with ToT > 15, "+modlabel[i]), (atext_lvl1+atext_nclu), false);
+      else htitles = makeHisttitle(("Cluster Level 1 Accept with ToT > 4, "+modlabel[i]), (atext_lvl1+atext_nclu), false);
+      sc = timeExpert.regHist(m_cluster_LVL1A1d_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_lvl1, min_lvl1, max_lvl1));
+
+      if(m_doESD && !m_doOnline){
+         hname = makeHistname(("ClusterQ_vs_eta_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Cluster charge vs eta, "+modlabel[i]), (atext_eta+atext_Q), false);
+         sc = clusterExpert.regHist(m_clusQ_vs_eta_mod[i] = TH2F_LW::create(hname.c_str(), htitles.c_str(), nbins_eta, min_eta, max_eta, nbins_Q, min_Q, max_Q));
+
+         hname = makeHistname(("Cluster_groupsize_vs_eta_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Number of pixels per cluster vs eta, "+modlabel[i]), (atext_eta+atext_npix), false);
+         sc = clusterExpert.regHist(m_clussize_vs_eta_mod[i] = TH2F_LW::create(hname.c_str(), htitles.c_str(), nbins_eta, min_eta, max_eta, nbins_npix, min_npix, max_npix));
+
+         hname = makeHistname(("ClusterToT_vs_eta_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Cluster ToT vs eta, "+modlabel[i]), (atext_eta+atext_tot), false);
+         sc = clusterExpert.regHist(m_clusToT_vs_eta_mod[i] = TH2F_LW::create(hname.c_str(), htitles.c_str(), nbins_eta, min_eta, max_eta, nbins_tot, min_tot, max_tot));
+
+         hname = makeHistname(("ClusterToT_vs_groupsize_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Cluster ToT vs groupsize, "+modlabel[i]), (atext_tot+atext_npix), false);
+         sc= clusterExpert.regHist(m_ToT_vs_clussize_mod[i] = TH2F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot, min_tot, max_tot, nbins_npix, min_npix, max_npix));
+
+         hname = makeHistname(("ClusterQ_vs_groupsize_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Cluster Charge vs groupsize, "+modlabel[i]), (atext_tot+atext_npix), false);
+         sc= clusterExpert.regHist(m_Q_vs_clussize_mod[i] = TH2F_LW::create(hname.c_str(), htitles.c_str(), nbins_Q, min_Q, max_Q, nbins_npix, min_npix, max_npix));
+
+         hname = makeHistname(("nlowToT_vs_clussize_"+modlabel[i]), false);
+         htitles = makeHisttitle(("# Low ToT Hits vs groupsize, "+modlabel[i]), (atext_npix+atext_nevt), false);
+         sc= clusterExpert.regHist(m_nlowToT_vs_clussize_mod[i] = TH2F_LW::create(hname.c_str(), htitles.c_str(), nbins_npix, min_npix, max_npix, nbins_nevt, min_nevt, max_nevt));
       }
-      tmp = "clustersize_vs_eta"; tmp2 = "Cluster Size vs Eta"; atitles = ";Module eta index;Cluster size";
-      for(int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
-         sc = clusterExpert.regHist(m_clussize_vs_eta_mod[i] = TH2F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_eta, min_eta, max_eta,40,-0.5,39.5));
+   }
+   for(int i=0; i<PixLayerIBL2D3D::COUNT; i++){
+      hname = makeHistname(("Cluster_ToT_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Cluster ToT, "+modlabel[i]), (atext_tot+atext_nclu), false);
+      if( i<PixLayer::kIBL ){
+         sc = clusterExpert.regHist(m_cluster_ToT1d_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot, min_tot, max_tot));
+      }else if(m_doIBL){
+         sc = clusterExpert.regHist(m_cluster_ToT1d_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_ibl_tot, min_ibl_tot, max_ibl_tot));
       }
 
-      //tmp = "m_clusToT_vs_eta"; tmp2 = "Cluster ToT vs Eta";
-      tmp = "clusToT_vs_eta"; tmp2 = "Cluster ToT vs Eta";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_clusToT_vs_eta_B0  = TH2F_LW::create((tmp + "_B0").c_str(), (tmp2 + ", B0" + m_histTitleExt + atext_eta + atext_tot).c_str(), nbins_eta, min_eta, max_eta, nbins_tot, min_tot, max_tot));
-      sc = clusterExpert.regHist(m_clusToT_vs_eta_B1  = TH2F_LW::create((tmp + "_B1").c_str(), (tmp2 + ", B1" + m_histTitleExt + atext_eta + atext_tot).c_str(), nbins_eta, min_eta, max_eta, nbins_tot, min_tot, max_tot));
-      sc = clusterExpert.regHist(m_clusToT_vs_eta_B2  = TH2F_LW::create((tmp + "_B2").c_str(), (tmp2 + ", B2" + m_histTitleExt + atext_eta + atext_tot).c_str(), nbins_eta, min_eta, max_eta, nbins_tot, min_tot, max_tot));
-      //tmp = "m_clustersize_vs_eta"; tmp2 = "Cluster Size vs Eta";
-      //tmp = "m_ToT_vs_clussize"; tmp2 = "Cluster ToT vs Size";
-      tmp = "ToT_vs_clussize"; tmp2 = "Cluster ToT vs Size";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc= clusterExpert.regHist(m_ToT_vs_clussize_B0 = TH2F_LW::create((tmp + "_B0").c_str(), (tmp2 + ", B0" + m_histTitleExt + ";Cluster Size" + atext_tot).c_str(),40,-0.5,39.5, nbins_tot, min_tot, max_tot));
-      sc= clusterExpert.regHist(m_ToT_vs_clussize_B1 = TH2F_LW::create((tmp + "_B1").c_str(), (tmp2 + ", B1" + m_histTitleExt + ";Cluster Size" + atext_tot).c_str(),40,-0.5,39.5, nbins_tot, min_tot, max_tot));
-      sc= clusterExpert.regHist(m_ToT_vs_clussize_B2 = TH2F_LW::create((tmp + "_B2").c_str(), (tmp2 + ", B2" + m_histTitleExt + ";Cluster Size" + atext_tot).c_str(),40,-0.5,39.5, nbins_tot, min_tot, max_tot));
-
-     hxbin = 200; hxmin = 0.; hxmax = 200000.;
-     //tmp = "m_Q_vs_clussize"; tmp2 = "Cluster Q vs Size";
-      tmp = "Q_vs_clussize"; tmp2 = "Cluster Q vs Size";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc= clusterExpert.regHist(m_Q_vs_clussize_B0  = TH2F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0" + m_histTitleExt + ";Clsuter Size;Charge").c_str(),40,-0.5,39.5,hxbin, hxmin, hxmax));
-      sc= clusterExpert.regHist(m_Q_vs_clussize_B1  = TH2F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1" + m_histTitleExt + ";Clsuter Size;Charge").c_str(),40,-0.5,39.5,hxbin, hxmin, hxmax));
-      sc= clusterExpert.regHist(m_Q_vs_clussize_B2  = TH2F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2" + m_histTitleExt + ";Clsuter Size;Charge").c_str(),40,-0.5,39.5,hxbin, hxmin, hxmax));
-      sc= clusterExpert.regHist(m_Q_vs_clussize_ECC = TH2F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC"+ m_histTitleExt + ";Clsuter Size;Charge").c_str(),40,-0.5,39.5,hxbin, hxmin, hxmax));
-      sc= clusterExpert.regHist(m_Q_vs_clussize_ECA = TH2F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA"+ m_histTitleExt + ";Clsuter Size;Charge").c_str(),40,-0.5,39.5,hxbin, hxmin, hxmax));
-      //tmp = "m_nlowToT_vs_clussize"; tmp2 = "# Low ToT Hits vs Size";
-      tmp = "nlowToT_vs_clussize"; tmp2 = "# Low ToT Hits vs Size";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc= clusterExpert.regHist(m_nlowToT_vs_clussize_B0  = TH2F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0" + m_histTitleExt + ";Cluster Size; frac low ToT hits").c_str(),40,-0.5,39.5,40,-0.5,39.5));
-      sc= clusterExpert.regHist(m_nlowToT_vs_clussize_B1  = TH2F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1" + m_histTitleExt + ";Cluster Size; frac low ToT hits").c_str(),40,-0.5,39.5,40,-0.5,39.5));
-      sc= clusterExpert.regHist(m_nlowToT_vs_clussize_B2  = TH2F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2" + m_histTitleExt + ";Cluster Size; frac low ToT hits").c_str(),40,-0.5,39.5,40,-0.5,39.5));
-      sc= clusterExpert.regHist(m_nlowToT_vs_clussize_ECC = TH2F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC"+ m_histTitleExt + ";Cluster Size; frac low ToT hits").c_str(),40,-0.5,39.5,40,-0.5,39.5));
-      sc= clusterExpert.regHist(m_nlowToT_vs_clussize_ECA = TH2F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA"+ m_histTitleExt + ";Cluster Size; frac low ToT hits").c_str(),40,-0.5,39.5,40,-0.5,39.5));
+      hname = makeHistname(("Cluster_Q_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Charge, "+modlabel[i]), (atext_Q+atext_nclu), false);
+      sc = clusterExpert.regHist(m_cluster_Q_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_Q, min_Q, max_Q));
    }
 
+   
    if (m_doOnTrack || m_doOnPixelTrack) { 
      sc = clusterExpert.regHist(m_clustersOnOffTrack_per_lumi = TProfile_LW::create("ClustersOnOffTrack_per_lumi",("Fraction pixel clusters on track per event per LB" + m_histTitleExt + ";lumi block; fraction clusters/event").c_str(),2500,-0.5,2499.5));
    }
 
-   tmp = "Cluster_ToT"; tmp2 = "Cluster ToT";
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterShift.regHist(m_cluster_ToT_PIX     = TH1F_LW::create((tmp + "_PIX").c_str(), (tmp2 + ":Pixel" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_cluster_ToT_ECA    = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ":ECA"   + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_cluster_ToT_ECC    = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ":ECC"   + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_cluster_ToT_B0     = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ":B0"    + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_cluster_ToT_B1     = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ":B1"    + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_cluster_ToT_B2     = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ":B2"    + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   tmp = "Big_Cluster_ToT"; tmp2 = "ToT for Clusters of size>3";
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_bigcluster_ToT_B0  = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_bigcluster_ToT_B1  = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_bigcluster_ToT_B2  = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_bigcluster_ToT_ECA = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_bigcluster_ToT_ECC = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   tmp = "1Hit_Cluster_ToT"; tmp2 = "ToT for 1-hit clusters";
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_1cluster_ToT_B0    = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_1cluster_ToT_B1    = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_1cluster_ToT_B2    = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_1cluster_ToT_ECA   = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_1cluster_ToT_ECC   = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));   
-   tmp = "2Hit_Cluster_ToT"; tmp2 = "ToT for 2-hit clusters";
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_2cluster_ToT_B0    = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_2cluster_ToT_B1    = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_2cluster_ToT_B2    = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_2cluster_ToT_ECA   = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_2cluster_ToT_ECC   = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot)); 
-   tmp = "3Hit_Cluster_ToT"; tmp2 = "ToT for 3-hit clusters";
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_3cluster_ToT_B0    = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_3cluster_ToT_B1    = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_3cluster_ToT_B2    = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_3cluster_ToT_ECA   = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot));
-   sc = clusterExpert.regHist(m_3cluster_ToT_ECC   = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + atext_tot + atext_nclu).c_str(), nbins_tot, min_tot, max_tot)); 
-   
-   //if(m_doESD && !m_doOnline){
-      hxbin = 50; hxmin = 0.; hxmax = 200000.; // 1bin = 4ke
-      tmp = "Big_Cluster_Q"; tmp2 = "Charge for Clusters of size>3";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_bigcluster_Q_B0  = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_bigcluster_Q_B1  = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_bigcluster_Q_B2  = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_bigcluster_Q_ECA = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_bigcluster_Q_ECC = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      tmp = "1Hit_Cluster_Q"; tmp2 = "Charge for 1-hit clusters";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_1cluster_Q_B0    = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_1cluster_Q_B1    = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_1cluster_Q_B2    = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_1cluster_Q_ECA   = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_1cluster_Q_ECC   = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));   
-      tmp = "2Hit_Cluster_Q"; tmp2 = "Charge for 2-hit clusters";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_2cluster_Q_B0    = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_2cluster_Q_B1    = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_2cluster_Q_B2    = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_2cluster_Q_ECA   = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_2cluster_Q_ECC   = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax)); 
-      tmp = "3Hit_Cluster_Q"; tmp2 = "Charge for 3-hit clusters";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_3cluster_Q_B0    = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_3cluster_Q_B1    = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_3cluster_Q_B2    = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_3cluster_Q_ECA   = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-      sc = clusterExpert.regHist(m_3cluster_Q_ECC   = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax)); 
-   //}
-
-   tmp = "Cluster_LVL1A"; tmp2 = "Cluster Level 1 Accept";
-   if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = timeShift.regHist(m_cluster_LVL1A          = TH1F_LW::create(tmp.c_str(),                (tmp2 +                         m_histTitleExt + ";LVL1A" + atext_nclu).c_str(), 14,-1.5,12.5));
-   tmp = "Cluster_LVL1A"; tmp2 = "Cluster Level 1 Accept";
-   sc = timeShift.regHist(m_cluster_LVL1A_PIX      = TH1F_LW::create((tmp + "_PIX").c_str(),     (tmp2 + " with ToT>15, Pixel" + m_histTitleExt + ";LVL1A" + atext_nclu).c_str(), 18,-1.5,16.5));
-   sc = timeExpert.regHist(m_cluster_LVL1A_B0      = TH1F_LW::create((tmp + "_B0").c_str(),      (tmp2 + " with ToT>15, B0"    + m_histTitleExt + ";LVL1A" + atext_nclu).c_str(), 14,-1.5,12.5));
-   sc = timeExpert.regHist(m_cluster_LVL1A_B1      = TH1F_LW::create((tmp + "_B1").c_str(),      (tmp2 + " with ToT>15, B1"    + m_histTitleExt + ";LVL1A" + atext_nclu).c_str(), 14,-1.5,12.5));
-   sc = timeExpert.regHist(m_cluster_LVL1A_B2      = TH1F_LW::create((tmp + "_B2").c_str(),      (tmp2 + " with ToT>15, B2"    + m_histTitleExt + ";LVL1A" + atext_nclu).c_str(), 14,-1.5,12.5));
-   sc = timeExpert.regHist(m_cluster_LVL1A_ECA     = TH1F_LW::create((tmp + "_ECA").c_str(),     (tmp2 + " with ToT>15, ECA"   + m_histTitleExt + ";LVL1A" + atext_nclu).c_str(), 14,-1.5,12.5));
-   sc = timeExpert.regHist(m_cluster_LVL1A_ECC     = TH1F_LW::create((tmp + "_ECC").c_str(),     (tmp2 + " with ToT>15, ECC"   + m_histTitleExt + ";LVL1A" + atext_nclu).c_str(), 14,-1.5,12.5));
-   sc = timeExpert.regHist(m_cluster_LVL1A_highToT = TH1F_LW::create((tmp + "_highToT").c_str(), (tmp2 + " with ToT>15"        + m_histTitleExt + ";LVL1A" + atext_nclu).c_str(), 14,-1.5,12.5));
-
-   hxbin = 50; hxmin = 0.; hxmax = 200000.;
-   tmp = "Cluster_charge"; tmp2 = "Cluster total charge";
-   //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-   sc = clusterExpert.regHist(m_cluster_charge_B0  = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-   sc = clusterExpert.regHist(m_cluster_charge_B1  = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-   sc = clusterExpert.regHist(m_cluster_charge_B2  = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-   sc = clusterExpert.regHist(m_cluster_charge_ECA = TH1F_LW::create((tmp + "_ECA").c_str(), (tmp2 + ", ECA" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-   sc = clusterExpert.regHist(m_cluster_charge_ECC = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
    
-   if(m_doIBL){
-      tmp = "Cluster_ToT"; tmp2 = "Cluster ToT";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_cluster_ToT_IBL     = TH1F_LW::create((tmp + "_IBL").c_str(),   (tmp2 + ", IBL"                   + m_histTitleExt + atext_tot + atext_nclu).c_str(), 50,-0.5,49.5));
-      sc = clusterExpert.regHist(m_cluster_ToT_IBL2D   = TH1F_LW::create((tmp + "_IBL2D").c_str(), (tmp2 + " for IBL Planar Modules" + m_histTitleExt + atext_tot + atext_nclu).c_str(), 100,-0.5,99.5));
-      sc = clusterExpert.regHist(m_cluster_ToT_IBL3D   = TH1F_LW::create((tmp + "_IBL3D").c_str(), (tmp2 + " for IBL 3D Modules"     + m_histTitleExt + atext_tot + atext_nclu).c_str(), 100,-0.5,99.5));
-      tmp = "Big_Cluster_ToT"; tmp2 = "ToT for Clusters of size>3";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_bigcluster_ToT_IBL  = TH1F_LW::create((tmp + "_IBL").c_str(),   (tmp2 + ", IBL" + m_histTitleExt + atext_tot + atext_nclu).c_str(), 300,-0.5,299.5));
-      tmp = "1Hit_Cluster_ToT"; tmp2 = "ToT for 1-hit clusters";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_1cluster_ToT_IBL    = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + atext_tot + atext_nclu).c_str(), 50, -0.5, 49.5));
-      tmp = "2Hit_Cluster_ToT"; tmp2 = "ToT for 2-hit clusters";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_2cluster_ToT_IBL    = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + atext_tot + atext_nclu).c_str(), 100, -0.5, 99.5));
-      tmp = "3Hit_Cluster_ToT"; tmp2 = "ToT for 3-hit clusters";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_3cluster_ToT_IBL    = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + atext_tot + atext_nclu).c_str(), 150, -0.5, 149.5));
-      tmp = "Cluster_LVL1A"; tmp2 = "Cluster Level 1 Accept";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = timeExpert.regHist(m_cluster_LVL1A_IBL      = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + " with ToT >4, IBL" + m_histTitleExt + "; LVL1A" + atext_nclu).c_str(), 18, -1.5, 16.5));
-      tmp = "Cluster_charge"; tmp2 = "Cluster total charge";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      sc = clusterExpert.regHist(m_cluster_charge_IBL  = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax)); 
-      tmp = "Cluster_groupsize"; tmp2 = "Number of pixels per cluster";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      //sc = clusterExpert.regHist(m_cluster_groupsize_IBL = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + atext_npix + atext_nclu).c_str(), nbins_npix, min_npix, max_npix));
-      tmp = "Cluster_column_width"; tmp2 = "Column width of cluster";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      //sc = clusterExpert.regHist(m_cluster_col_width_IBL = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + atext_cluw + atext_nclu).c_str(), nbins_nwid, min_nwid, max_nwid));
-      tmp = "Cluster_row_width"; tmp2 = "Row width of cluster";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      //sc = clusterExpert.regHist(m_cluster_row_width_IBL = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + atext_cluw + atext_nclu).c_str(), nbins_nwid, min_nwid, max_nwid));
-    
-      //if(m_doESD && ! m_doOnline){
-         hxbin = 50; hxmin = 0.; hxmax = 200000.;
-         tmp = "Big_Cluster_Q"; tmp2 = "Charge for Clusters of size>3";
-         //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-         sc = clusterExpert.regHist(m_bigcluster_Q_IBL   = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-         tmp = "1Hit_Cluster_Q"; tmp2 = "Charge for 1-hit clusters";
-         //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-         sc = clusterExpert.regHist(m_1cluster_Q_IBL     = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-         tmp = "2Hit_Cluster_ToT"; tmp2 = "ToT for 2-hit clusters";
-         //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-         sc = clusterExpert.regHist(m_2cluster_Q_IBL     = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-         tmp = "3Hit_Cluster_Q"; tmp2 = "Charge for 3-hit clusters";
-         //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-         sc = clusterExpert.regHist(m_3cluster_Q_IBL     = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";Charge" + atext_nclu).c_str(), hxbin, hxmin, hxmax));
-         //tmp = "m_nlowToT_vs_clussize"; tmp2 = "# Low ToT Hits vs Size";
-         tmp = "nlowToT_vs_clussize"; tmp2 = "# Low ToT Hits vs Size";
-         //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-         sc = clusterExpert.regHist(m_nlowToT_vs_clussize_IBL = TH2F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";Cluster Size; frac low ToT hits").c_str(),40,-0.5,39.5,40,-0.5,39.5));
-         //tmp = "m_clusToT_vs_eta"; tmp2 = "Cluster ToT vs Eta";
-         tmp = "clusToT_vs_eta"; tmp2 = "Cluster ToT vs Eta";
-         //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-         sc = clusterExpert.regHist(m_clusToT_vs_eta_IBL  = TH2F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + atext_eta + atext_tot).c_str(),20,-10.5,9.5,300,-0.5,299.5));
-         //tmp = "m_clustersize_vs_eta"; tmp2 = "Cluster Size vs Eta";
-         tmp = "clustersize_vs_eta"; tmp2 = "Cluster Size vs Eta";
-         //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-         //sc = clusterExpert.regHist(m_clussize_vs_eta_IBL = TH2F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + atext_eta + ";Cluster size").c_str(),20,-10.5,9.5,40,-0.5,39.5));
-         //tmp = "m_ToT_vs_clussize"; tmp2 = "Cluster ToT vs Size";
-         tmp = "ToT_vs_clussize"; tmp2 = "Cluster ToT vs Size";
-         //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-         sc = clusterExpert.regHist(m_ToT_vs_clussize_IBL = TH2F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";Cluster Size" + atext_tot).c_str(),40,-0.5,39.5,300,-0.5,299.5));
-      //}
-   }
    if(m_do2DMaps)
    {
       tmp = "Cluster_Occupancy"; tmp2 = "Cluster occupancy";
       //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
       m_cluster_occupancy = new PixelMon2DMaps(tmp.c_str(), (tmp2 + m_histTitleExt).c_str());
       sc = m_cluster_occupancy->regHist(clusterShift);
-      //tmp = "Cluster_Occupancy_DBM"; tmp2 = "Cluster occupancy";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      //m_clusocc_DBM = new DBMMon2DMaps(tmp.c_str(), (tmp2 + m_histTitleExt).c_str());
-      //sc = m_clusocc_DBM->regHist(clusterShift);
-      //tmp = "Average_Cluster_Occupancy"; tmp2 = "Average cluster occupancy";
-      //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-      //m_average_cluster_occupancy = new PixelMon2DMaps(tmp.c_str(), (tmp2 + m_histTitleExt).c_str());
-      //sc = m_average_cluster_occupancy->regHist(clusterShift);
-      tmp = "Cluster_LVL1A_Mod"; tmp2 = "Cluster Level 1 Accept";
+
+      tmp = "Cluster_LVL1A_Mod"; tmp2 = "Average cluster Level 1 Accept";
       //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
       m_cluster_LVL1A_mod = new PixelMonProfiles(tmp.c_str(), (tmp2 + m_histTitleExt).c_str());
       sc = m_cluster_LVL1A_mod->regHist(timeShift);
+
       tmp = "Clus_Occ_SizeCut"; tmp2 = "Size>1 Cluster occupancy";
       //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
       m_clusocc_sizenot1 = new PixelMon2DMaps(tmp.c_str(), (tmp2 + m_histTitleExt).c_str()); 
       sc = m_clusocc_sizenot1->regHist(clusterShift); 
-      tmp = "Clus_LVL1A_SizeCut"; tmp2 = "Size>1 Cluster Level 1 Accept";
+
+      tmp = "Clus_LVL1A_SizeCut"; tmp2 = "Average Size>1 Cluster Level 1 Accept";
       //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
       m_clus_LVL1A_sizenot1 = new PixelMonProfiles(tmp.c_str(), (tmp2 + m_histTitleExt).c_str());
       sc = m_clus_LVL1A_sizenot1->regHist(timeShift); 
 
       if(!m_doOnline){
-         tmp = "Cluster_Size_Map"; tmp2 = "Cluster size map";
+         tmp = "Cluster_Size_Map"; tmp2 = "Average cluster size map";
          //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
 	      m_clussize_map = new PixelMonProfiles(tmp.c_str(), (tmp2 + m_histTitleExt).c_str());
 	      sc = m_clussize_map->regHist(clusterExpert);
-         tmp = "Cluster_Charge_Map"; tmp2 = "Cluster charge map";
+
+         tmp = "Cluster_Charge_Map"; tmp2 = "Average cluster charge map";
          //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
 	      m_cluscharge_map = new PixelMonProfiles(tmp.c_str(), (tmp2 + m_histTitleExt).c_str());
 	      sc = m_cluscharge_map->regHist(clusterExpert);
-         tmp = "Cluster_ToT_Map"; tmp2 = "Cluster ToT map";
+
+         tmp = "Cluster_ToT_Map"; tmp2 = "Average cluster ToT map";
          //if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
 	      m_clusToT_map = new PixelMonProfiles(tmp.c_str(), (tmp2 + m_histTitleExt).c_str());
 	      sc = m_clusToT_map->regHist(clusterExpert);
@@ -413,11 +311,11 @@ StatusCode PixelMainMon::BookClustersMon(void)
      int max_clusters_region = 8000;
      int max_avclusters = 50;
      if (m_doHeavyIonMon) { max_clusters = 100000; max_clusters_region = 40000; max_avclusters = 1000; }
-     tmp = "num_clusters"; tmp2 = "Number of pixel clusters per event";
+     tmp = "num_clusters"; tmp2 = "Number of pixel clusters in an event";
      if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
-     tmp = "num_clusters"; tmp2 = "Number of pixel clusters per event";
+     tmp = "num_clusters"; tmp2 = "Number of pixel clusters in an event";
      sc = clusterShift.regHist(m_num_clusters      = TH1I_LW::create(tmp.c_str(),            (tmp2 + ";# pixel clusters/event" + m_histTitleExt + ";# events").c_str(), 1000,0.,(int)max_clusters));
-     sc = clusterExpert.regHist(m_num_clusters_PIX = TH1I_LW::create((tmp + "_PIX").c_str(), (tmp2 + ", Pixel" + m_histTitleExt + ";# pixel clusters/event;# events").c_str(),1000,0.,(int)max_clusters));
+     //sc = clusterExpert.regHist(m_num_clusters_PIX = TH1I_LW::create((tmp + "_PIX").c_str(), (tmp2 + ", Pixel" + m_histTitleExt + ";# pixel clusters/event;# events").c_str(),1000,0.,(int)max_clusters));
      sc = clusterExpert.regHist(m_num_clusters_B0  = TH1I_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0" + m_histTitleExt + ";# pixel clusters/event;# events").c_str(),160,0.,(int)max_clusters_region));
      sc = clusterExpert.regHist(m_num_clusters_B1  = TH1I_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1" + m_histTitleExt + ";# pixel clusters/event;# events").c_str(),160,0.,(int)max_clusters_region));
      sc = clusterExpert.regHist(m_num_clusters_B2  = TH1I_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2" + m_histTitleExt + ";# pixel clusters/event;# events").c_str(),160,0.,(int)max_clusters_region));
@@ -431,12 +329,12 @@ StatusCode PixelMainMon::BookClustersMon(void)
      sc = clusterExpert.regHist(m_ecC_cluster_occupancy_summary     = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 100,0.,(int)max_avclusters));
      sc = clusterExpert.regHist(m_bar_layI_cluster_occupancy_summary= TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 100,0.,(int)max_avclusters));
      sc = clusterExpert.regHist(m_bar_lay0_cluster_occupancy_summary= TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 100,0.,(int)max_avclusters));
-     sc = clusterExpert.regHist(m_bar_lay1_cluster_occupancy_summary= TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 100,0.,(int)max_avclusters));
-     sc = clusterExpert.regHist(m_bar_lay2_cluster_occupancy_summary= TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 100,0.,(int)max_avclusters));
+     sc = clusterExpert.regHist(m_bar_lay1_cluster_occupancy_summary= TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 100,0.,(int)max_avclusters));
+     sc = clusterExpert.regHist(m_bar_lay2_cluster_occupancy_summary= TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 100,0.,(int)max_avclusters));
    }
    if(m_doLowOccupancy)
    {
-      tmp = "num_clusters_low_occupancy"; tmp2 = "Number of pixel clusters per event";
+      tmp = "num_clusters_low_occupancy"; tmp2 = "Number of pixel clusters in an event";
       if(m_doOnTrack) { tmp = tmp + addOnTrack; tmp2 = tmp2 + addOnTrack; }
       sc = clusterShift.regHist(m_num_clusters_low                        = TH1I_LW::create(tmp.c_str(),  (tmp2 + m_histTitleExt + ";# pixel clusters/event;# events").c_str(), 200,-0.5,199.5));
       tmp = "cluster_occupancy_summary_low_occupancy"; tmp2 = "Average cluster occupancy";
@@ -445,10 +343,9 @@ StatusCode PixelMainMon::BookClustersMon(void)
       sc = clusterExpert.regHist(m_ecC_cluster_occupancy_summary_low      = TH1F_LW::create((tmp + "_ECC").c_str(), (tmp2 + ", ECC" + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 50,0.,2.));
       sc = clusterExpert.regHist(m_bar_layI_cluster_occupancy_summary_low = TH1F_LW::create((tmp + "_IBL").c_str(), (tmp2 + ", IBL" + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 50,0.,2.));
       sc = clusterExpert.regHist(m_bar_lay0_cluster_occupancy_summary_low = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B0"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 50,0.,2.));
-      sc = clusterExpert.regHist(m_bar_lay1_cluster_occupancy_summary_low = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 50,0.,2.));
-      sc = clusterExpert.regHist(m_bar_lay2_cluster_occupancy_summary_low = TH1F_LW::create((tmp + "_B0").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 50,0.,2.));
+      sc = clusterExpert.regHist(m_bar_lay1_cluster_occupancy_summary_low = TH1F_LW::create((tmp + "_B1").c_str(),  (tmp2 + ", B1"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 50,0.,2.));
+      sc = clusterExpert.regHist(m_bar_lay2_cluster_occupancy_summary_low = TH1F_LW::create((tmp + "_B2").c_str(),  (tmp2 + ", B2"  + m_histTitleExt + ";average # of clusters per module per event;# modules").c_str(), 50,0.,2.));
    }
-   //   int max_clusters = 500;
 
    if(m_doPixelOccupancy){ }
    if(m_doDetails){ }
@@ -553,6 +450,12 @@ StatusCode PixelMainMon::FillClustersMon(void)
       {
          clusID=(*p_clus)->identify();
          int pixlayer = GetPixLayerID(m_pixelid->barrel_ec(clusID), m_pixelid->layer_disk(clusID), m_doIBL);
+         int pixlayeribl2d3d = pixlayer;
+         if( pixlayeribl2d3d == PixLayerIBL2D3D::kIBL ){
+            pixlayeribl2d3d = GetPixLayerIDIBL2D3D(m_pixelid->barrel_ec(clusID), m_pixelid->layer_disk(clusID), m_pixelid->eta_module(clusID), m_doIBL);
+         }
+         if(pixlayer == 99) continue;
+
 
 	      const PixelCluster& cluster = **p_clus;
 	      const InDet::SiWidth clusWidth = cluster.width();
@@ -571,128 +474,34 @@ StatusCode PixelMainMon::FillClustersMon(void)
 	      if(m_cluster_LVL1A_mod) m_cluster_LVL1A_mod->Fill(clusID,m_pixelid,cluster.LVL1A()+0.00001,m_doIBL); //avoid filling exactly zero to distinguish from disabled modules
 	      if(cluster.rdoList().size()>1 
             && m_clus_LVL1A_sizenot1) m_clus_LVL1A_sizenot1->Fill(clusID,m_pixelid,cluster.LVL1A()+0.00001,m_doIBL); //avoid filling exactly zero to distinguish from disabled modules
-         /// Fill ToT
-	      if(m_cluster_ToT_PIX && !(m_pixelid->barrel_ec(clusID)==0 && m_pixelid->layer_disk(clusID)==0 && m_doIBL)) m_cluster_ToT_PIX->Fill(cluster.totalToT());     
-	      if(m_cluster_ToT_ECA && m_pixelid->barrel_ec(clusID)==2 ) m_cluster_ToT_ECA->Fill(cluster.totalToT());   
-         if(m_cluster_ToT_ECC && m_pixelid->barrel_ec(clusID)==-2) m_cluster_ToT_ECC->Fill(cluster.totalToT());      
-	      if(m_pixelid->barrel_ec(clusID)==0) {
-	         if(m_doIBL && m_cluster_ToT_IBL2D && m_pixelid->layer_disk(clusID)==0 && m_pixelid->eta_module(clusID)<6 && m_pixelid->eta_module(clusID)>-7) m_cluster_ToT_IBL2D->Fill(cluster.totalToT());
-            if(m_doIBL && m_cluster_ToT_IBL3D && m_pixelid->layer_disk(clusID)==0 && !(m_pixelid->eta_module(clusID)<6 && m_pixelid->eta_module(clusID)>-7)) m_cluster_ToT_IBL3D->Fill(cluster.totalToT());
-	         if(m_doIBL && m_cluster_ToT_IBL && m_pixelid->layer_disk(clusID)==0) m_cluster_ToT_IBL->Fill(cluster.totalToT());
-	         if(m_cluster_ToT_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL ) m_cluster_ToT_B0->Fill(cluster.totalToT());     
-	         if(m_cluster_ToT_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL ) m_cluster_ToT_B1->Fill(cluster.totalToT()); 
-	         if(m_cluster_ToT_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL ) m_cluster_ToT_B2->Fill(cluster.totalToT()); 
-	      }
-	      if(cluster.rdoList().size()==1){  // Cluster size = 1
-            if(m_1cluster_ToT_ECA && m_pixelid->barrel_ec(clusID)==2 ) m_1cluster_ToT_ECA->Fill(cluster.totalToT());
-            if(m_1cluster_ToT_ECC && m_pixelid->barrel_ec(clusID)==-2) m_1cluster_ToT_ECC->Fill(cluster.totalToT());
-            if (m_pixelid->barrel_ec(clusID)==0) {
-               if(m_1cluster_ToT_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL) m_1cluster_ToT_IBL->Fill(cluster.totalToT());
-               if(m_1cluster_ToT_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL ) m_1cluster_ToT_B0->Fill(cluster.totalToT());
-               if(m_1cluster_ToT_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL ) m_1cluster_ToT_B1->Fill(cluster.totalToT());
-               if(m_1cluster_ToT_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL ) m_1cluster_ToT_B2->Fill(cluster.totalToT());
-            }
-         }
-	      if(cluster.rdoList().size()==2){ // Cluster size = 2
-            if(m_2cluster_ToT_ECA && m_pixelid->barrel_ec(clusID)==2 ) m_2cluster_ToT_ECA->Fill(cluster.totalToT());
-            if(m_2cluster_ToT_ECC && m_pixelid->barrel_ec(clusID)==-2) m_2cluster_ToT_ECC->Fill(cluster.totalToT());
-            if (m_pixelid->barrel_ec(clusID)==0) {
-               if(m_2cluster_ToT_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL) m_2cluster_ToT_IBL->Fill(cluster.totalToT());
-               if(m_2cluster_ToT_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL ) m_2cluster_ToT_B0->Fill(cluster.totalToT());
-               if(m_2cluster_ToT_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL ) m_2cluster_ToT_B1->Fill(cluster.totalToT());
-               if(m_2cluster_ToT_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL ) m_2cluster_ToT_B2->Fill(cluster.totalToT());
-            }
-         }
-	      if(cluster.rdoList().size()==3){ // Cluster size = 3
-            if(m_3cluster_ToT_ECA && m_pixelid->barrel_ec(clusID)==2 ) m_3cluster_ToT_ECA->Fill(cluster.totalToT());
-            if(m_3cluster_ToT_ECC && m_pixelid->barrel_ec(clusID)==-2) m_3cluster_ToT_ECC->Fill(cluster.totalToT());
-            if (m_pixelid->barrel_ec(clusID)==0) {
-               if(m_3cluster_ToT_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL) m_3cluster_ToT_IBL->Fill(cluster.totalToT());
-               if(m_3cluster_ToT_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL ) m_3cluster_ToT_B0->Fill(cluster.totalToT());
-               if(m_3cluster_ToT_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL ) m_3cluster_ToT_B1->Fill(cluster.totalToT());
-               if(m_3cluster_ToT_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL ) m_3cluster_ToT_B2->Fill(cluster.totalToT());
-            }
-         }
-	      if(cluster.rdoList().size()>3){  // CLuster size > 3
-	         if(m_bigcluster_ToT_ECA && m_pixelid->barrel_ec(clusID)==2 )m_bigcluster_ToT_ECA->Fill(cluster.totalToT());
-	         if(m_bigcluster_ToT_ECC && m_pixelid->barrel_ec(clusID)==-2)m_bigcluster_ToT_ECC->Fill(cluster.totalToT());
-	         if (m_pixelid->barrel_ec(clusID)==0) {
-	           if(m_bigcluster_ToT_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL) m_bigcluster_ToT_IBL->Fill(cluster.totalToT());
-	           if(m_bigcluster_ToT_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL ) m_bigcluster_ToT_B0->Fill(cluster.totalToT());
-	           if(m_bigcluster_ToT_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL ) m_bigcluster_ToT_B1->Fill(cluster.totalToT());
-	           if(m_bigcluster_ToT_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL ) m_bigcluster_ToT_B2->Fill(cluster.totalToT());
-	         }
-	      }
-         /// Fill Charge
-	      if(m_cluster_charge_ECA && m_pixelid->barrel_ec(clusID)==2 )m_cluster_charge_ECA->Fill(cluster.totalCharge());
-	      if(m_cluster_charge_ECC && m_pixelid->barrel_ec(clusID)==-2)m_cluster_charge_ECC->Fill(cluster.totalCharge());
-	      if (m_pixelid->barrel_ec(clusID)==0) {
-	         if(m_cluster_charge_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL)m_cluster_charge_IBL->Fill(cluster.totalCharge());
-	         if(m_cluster_charge_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL )m_cluster_charge_B0->Fill(cluster.totalCharge());
-	         if(m_cluster_charge_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL )m_cluster_charge_B1->Fill(cluster.totalCharge());
-	         if(m_cluster_charge_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL )m_cluster_charge_B2->Fill(cluster.totalCharge());
-	      }
-	      if(cluster.rdoList().size()==1){ // Cluster size = 1
-            if(m_1cluster_Q_ECA && m_pixelid->barrel_ec(clusID)==2 )m_1cluster_Q_ECA->Fill(cluster.totalCharge());
-	         if(m_1cluster_Q_ECC && m_pixelid->barrel_ec(clusID)==-2)m_1cluster_Q_ECC->Fill(cluster.totalCharge());
-	         if (m_pixelid->barrel_ec(clusID)==0) {
-               if(m_1cluster_Q_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL)m_1cluster_Q_IBL->Fill(cluster.totalCharge());
-               if(m_1cluster_Q_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL )m_1cluster_Q_B0->Fill(cluster.totalCharge());
-               if(m_1cluster_Q_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL )m_1cluster_Q_B1->Fill(cluster.totalCharge());
-               if(m_1cluster_Q_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL )m_1cluster_Q_B2->Fill(cluster.totalCharge());
-            }
-         }
-	      if(cluster.rdoList().size()==2){ // Cluster size = 2
-	         if(m_2cluster_Q_ECA && m_pixelid->barrel_ec(clusID)==2 )m_2cluster_Q_ECA->Fill(cluster.totalCharge());
-            if(m_2cluster_Q_ECC && m_pixelid->barrel_ec(clusID)==-2)m_2cluster_Q_ECC->Fill(cluster.totalCharge());
-            if (m_pixelid->barrel_ec(clusID)==0) {
-               if(m_2cluster_Q_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL)m_2cluster_Q_IBL->Fill(cluster.totalCharge());
-               if(m_2cluster_Q_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL )m_2cluster_Q_B0->Fill(cluster.totalCharge());
-               if(m_2cluster_Q_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL )m_2cluster_Q_B1->Fill(cluster.totalCharge());
-               if(m_2cluster_Q_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL )m_2cluster_Q_B2->Fill(cluster.totalCharge());
-            }
-         }
-	      if(cluster.rdoList().size()==3){ // Cluster size = 3
-	         if(m_3cluster_Q_ECA && m_pixelid->barrel_ec(clusID)==2 )m_3cluster_Q_ECA->Fill(cluster.totalCharge());
-            if(m_3cluster_Q_ECC && m_pixelid->barrel_ec(clusID)==-2)m_3cluster_Q_ECC->Fill(cluster.totalCharge());
-            if (m_pixelid->barrel_ec(clusID)==0) {
-               if(m_3cluster_Q_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL)m_3cluster_Q_IBL->Fill(cluster.totalCharge());
-               if(m_3cluster_Q_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL )m_3cluster_Q_B0->Fill(cluster.totalCharge());
-               if(m_3cluster_Q_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL )m_3cluster_Q_B1->Fill(cluster.totalCharge());
-               if(m_3cluster_Q_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL )m_3cluster_Q_B2->Fill(cluster.totalCharge());
-            }
-         }
-	      if(cluster.rdoList().size()>3){  // Cluster size > 3
-	         if(m_bigcluster_Q_ECA && m_pixelid->barrel_ec(clusID)==2 )m_bigcluster_Q_ECA->Fill(cluster.totalCharge());
-	         if(m_bigcluster_Q_ECC && m_pixelid->barrel_ec(clusID)==-2)m_bigcluster_Q_ECC->Fill(cluster.totalCharge());
-	         if (m_pixelid->barrel_ec(clusID)==0) {
-	            if(m_bigcluster_Q_IBL && m_pixelid->layer_disk(clusID)==0 &&m_doIBL)m_bigcluster_Q_IBL->Fill(cluster.totalCharge());
-	            if(m_bigcluster_Q_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL )m_bigcluster_Q_B0->Fill(cluster.totalCharge());
-	            if(m_bigcluster_Q_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL )m_bigcluster_Q_B1->Fill(cluster.totalCharge());
-	            if(m_bigcluster_Q_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL )m_bigcluster_Q_B2->Fill(cluster.totalCharge());
-	         }
-	      }
-	      if(cluster.totalToT() > 15)  //Cluster LVL1A histograms for ToT > 15 (corresponding to charge > 10000 electrons)  
-	      { 
-	         if(m_cluster_LVL1A_highToT)m_cluster_LVL1A_highToT->Fill(cluster.LVL1A()); 
-            if(m_cluster_LVL1A_PIX && !(m_pixelid->barrel_ec(clusID)==0 && m_pixelid->layer_disk(clusID)==0 && m_doIBL))m_cluster_LVL1A_PIX->Fill(cluster.LVL1A());	     
-
-            if(m_cluster_LVL1A_ECA && m_pixelid->barrel_ec(clusID)==2 )m_cluster_LVL1A_ECA->Fill(cluster.LVL1A());	     
-	         if(m_cluster_LVL1A_ECC && m_pixelid->barrel_ec(clusID)==-2)m_cluster_LVL1A_ECC->Fill(cluster.LVL1A());
-	         if (m_pixelid->barrel_ec(clusID)==0) 
-	         {
-	            if(m_cluster_LVL1A_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL )m_cluster_LVL1A_B0->Fill(cluster.LVL1A());
-	            if(m_cluster_LVL1A_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL )m_cluster_LVL1A_B1->Fill(cluster.LVL1A());
-	            if(m_cluster_LVL1A_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL )m_cluster_LVL1A_B2->Fill(cluster.LVL1A());
-	         }
-	      }
-	      if(cluster.totalToT() > 4 
-            && m_cluster_LVL1A_IBL && m_pixelid->layer_disk(clusID)==0 
-            && m_pixelid->barrel_ec(clusID)==0 
-            &&m_doIBL){
-            m_cluster_LVL1A_IBL->Fill(cluster.LVL1A());
+	      if(pixlayer != PixLayer::kIBL){
+            if(cluster.totalToT() > 15 && m_cluster_LVL1A1d_mod[pixlayer]) m_cluster_LVL1A1d_mod[pixlayer]->Fill(cluster.LVL1A());
+	      }else{
+            if(cluster.totalToT() > 4  && m_cluster_LVL1A1d_mod[pixlayer]) m_cluster_LVL1A1d_mod[pixlayer]->Fill(cluster.LVL1A());
          }
+
+         /// Fill ToT
          if(m_cluster_ToT_mod) m_cluster_ToT_mod->Fill(cluster.totalToT(),clusID,m_pixelid,m_doIBL);   
+	      if(m_cluster_ToT1d_mod[pixlayer]) m_cluster_ToT1d_mod[pixlayer]->Fill(cluster.totalToT());     
+         if(pixlayer == PixLayer::kIBL && m_cluster_ToT1d_mod[pixlayeribl2d3d]) m_cluster_ToT1d_mod[pixlayeribl2d3d]->Fill(cluster.totalToT());     
+         if(cluster.rdoList().size()==1 && m_1cluster_ToT_mod[pixlayer] ) m_1cluster_ToT_mod[pixlayer]->Fill(cluster.totalToT());
+	      if(cluster.rdoList().size()==2 && m_2cluster_ToT_mod[pixlayer] ) m_2cluster_ToT_mod[pixlayer]->Fill(cluster.totalToT());
+	      if(cluster.rdoList().size()==3 && m_3cluster_ToT_mod[pixlayer] ) m_3cluster_ToT_mod[pixlayer]->Fill(cluster.totalToT());
+	      if(cluster.rdoList().size()>3  && m_bigcluster_ToT_mod[pixlayer] ) m_bigcluster_ToT_mod[pixlayer]->Fill(cluster.totalToT());
+
+         /// Fill Charge
+	      if(m_cluster_Q_mod[pixlayer]) m_cluster_Q_mod[pixlayer]->Fill(cluster.totalCharge());
+	      if(pixlayer == PixLayer::kIBL && m_cluster_Q_mod[pixlayeribl2d3d]) m_cluster_Q_mod[pixlayeribl2d3d]->Fill(cluster.totalCharge());
+	      if(cluster.rdoList().size()==1 && m_1cluster_Q_mod[pixlayer] ) m_1cluster_Q_mod[pixlayer]->Fill(cluster.totalCharge());
+	      if(cluster.rdoList().size()==2 && m_2cluster_Q_mod[pixlayer] ) m_2cluster_Q_mod[pixlayer]->Fill(cluster.totalCharge());
+	      if(cluster.rdoList().size()==3 && m_3cluster_Q_mod[pixlayer] ) m_3cluster_Q_mod[pixlayer]->Fill(cluster.totalCharge());
+	      if(cluster.rdoList().size()>3  && m_bigcluster_Q_mod[pixlayer] ) m_bigcluster_Q_mod[pixlayer]->Fill(cluster.totalCharge());
+	      //if(cluster.totalToT() > 4 
+         //   && m_cluster_LVL1A_IBL && m_pixelid->layer_disk(clusID)==0 
+         //   && m_pixelid->barrel_ec(clusID)==0 
+         //   &&m_doIBL){
+         //   //m_cluster_LVL1A_IBL->Fill(cluster.LVL1A());
+         //}
 
          // Fill Cluster efficiency
 	      if(m_cluseff_mod){
@@ -731,34 +540,8 @@ StatusCode PixelMainMon::FillClustersMon(void)
 	         if(cluster.totList().at(i)<8) {nlowToT++;}
 	      }
 	 
-	      if (m_pixelid->barrel_ec(clusID)==0) {	   
-
-	         if(m_clusToT_vs_eta_IBL && m_pixelid->layer_disk(clusID)==0 && m_doIBL) m_clusToT_vs_eta_IBL->Fill(m_pixelid->eta_module(clusID) ,cluster.totalToT());
-            if(m_clusToT_vs_eta_B0  && m_pixelid->layer_disk(clusID)==0+m_doIBL )   m_clusToT_vs_eta_B0->Fill(m_pixelid->eta_module(clusID) ,cluster.totalToT());
-            if(m_clusToT_vs_eta_B1  && m_pixelid->layer_disk(clusID)==1+m_doIBL )   m_clusToT_vs_eta_B1->Fill(m_pixelid->eta_module(clusID) ,cluster.totalToT());
-            if(m_clusToT_vs_eta_B2  && m_pixelid->layer_disk(clusID)==2+m_doIBL )   m_clusToT_vs_eta_B2->Fill(m_pixelid->eta_module(clusID) ,cluster.totalToT());
-	         if(m_ToT_vs_clussize_IBL && m_pixelid->layer_disk(clusID)==0 && m_doIBL) m_ToT_vs_clussize_IBL->Fill(cluster.rdoList().size() ,cluster.totalToT());
-            if(m_ToT_vs_clussize_B0  && m_pixelid->layer_disk(clusID)==0+m_doIBL )   m_ToT_vs_clussize_B0->Fill(cluster.rdoList().size() ,cluster.totalToT());
-            if(m_ToT_vs_clussize_B1  && m_pixelid->layer_disk(clusID)==1+m_doIBL )   m_ToT_vs_clussize_B1->Fill(cluster.rdoList().size() ,cluster.totalToT());
-            if(m_ToT_vs_clussize_B2  && m_pixelid->layer_disk(clusID)==2+m_doIBL )   m_ToT_vs_clussize_B2->Fill(cluster.rdoList().size() ,cluster.totalToT());
-	         if(m_nlowToT_vs_clussize_IBL && m_pixelid->layer_disk(clusID)==0 && m_doIBL) m_nlowToT_vs_clussize_IBL->Fill(cluster.rdoList().size(),nlowToT);
-            if(m_nlowToT_vs_clussize_B0  && m_pixelid->layer_disk(clusID)==0+m_doIBL )   m_nlowToT_vs_clussize_B0->Fill(cluster.rdoList().size(),nlowToT);
-            if(m_nlowToT_vs_clussize_B1  && m_pixelid->layer_disk(clusID)==1+m_doIBL )   m_nlowToT_vs_clussize_B1->Fill(cluster.rdoList().size(),nlowToT);
-            if(m_nlowToT_vs_clussize_B2  && m_pixelid->layer_disk(clusID)==2+m_doIBL )   m_nlowToT_vs_clussize_B2->Fill(cluster.rdoList().size(),nlowToT);
-
-            if(m_Q_vs_clussize_B0 && m_pixelid->layer_disk(clusID)==0+m_doIBL ) m_Q_vs_clussize_B0->Fill(cluster.rdoList().size() ,cluster.totalCharge());
-            if(m_Q_vs_clussize_B1 && m_pixelid->layer_disk(clusID)==1+m_doIBL ) m_Q_vs_clussize_B1->Fill(cluster.rdoList().size() ,cluster.totalCharge());
-            if(m_Q_vs_clussize_B2 && m_pixelid->layer_disk(clusID)==2+m_doIBL ) m_Q_vs_clussize_B2->Fill(cluster.rdoList().size() ,cluster.totalCharge());
-         }
-	 
-	      if (m_pixelid->barrel_ec(clusID)==2) {
-            if(m_Q_vs_clussize_ECA)m_Q_vs_clussize_ECA->Fill(cluster.rdoList().size() ,cluster.totalCharge());
-	         if(m_nlowToT_vs_clussize_ECA)m_nlowToT_vs_clussize_ECA->Fill(cluster.rdoList().size(),nlowToT);
-	      }
-	      if (m_pixelid->barrel_ec(clusID)==-2) {
-            if(m_Q_vs_clussize_ECC)m_Q_vs_clussize_ECC->Fill(cluster.rdoList().size() ,cluster.totalCharge());
-	         if(m_nlowToT_vs_clussize_ECC)m_nlowToT_vs_clussize_ECC->Fill(cluster.rdoList().size(),nlowToT);
-	      }
+	      if(m_clusToT_vs_eta_mod[pixlayer]) m_clusToT_vs_eta_mod[pixlayer]->Fill(m_pixelid->eta_module(clusID), cluster.totalToT());
+	      if(m_ToT_vs_clussize_mod[pixlayer]) m_ToT_vs_clussize_mod[pixlayer]->Fill(cluster.totalToT(), cluster.rdoList().size());
 
          if(pixlayer != 99 && m_cluster_groupsize_mod[pixlayer]){
             if( cluster.rdoList().size() <= 299.5 ){
@@ -817,15 +600,15 @@ StatusCode PixelMainMon::FillClustersMon(void)
       FillSummaryHistos(m_cluster_occupancy,m_ecA_cluster_occupancy_summary_low,m_ecC_cluster_occupancy_summary_low,m_bar_layI_cluster_occupancy_summary_low,m_bar_lay0_cluster_occupancy_summary_low,m_bar_lay1_cluster_occupancy_summary_low,m_bar_lay2_cluster_occupancy_summary_low);
    }                              
 
-   if(m_clusters_per_lumi)m_clusters_per_lumi->Fill(m_manager->lumiBlockNumber(),nclusters); 
-   if(m_clusters_per_lumi_PIX)m_clusters_per_lumi_PIX->Fill(m_manager->lumiBlockNumber(),nclusters-nclusters_IBL); 
+   if(m_clusters_per_lumi)m_clusters_per_lumi->Fill(m_manager->lumiBlockNumber(), nclusters); 
+   //if(m_clusters_per_lumi_PIX)m_clusters_per_lumi_PIX->Fill(m_manager->lumiBlockNumber(),nclusters-nclusters_IBL); 
    for( int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
       if(m_clusters_per_lumi_mod[i]) m_clusters_per_lumi_mod[i]->Fill( m_manager->lumiBlockNumber(), nclusters_mod[i]);
    }
 
-   if(m_largeclusters_per_lumi)m_largeclusters_per_lumi->Fill(m_manager->lumiBlockNumber(),nlargeclusters); 
+   if(m_largeclusters_per_lumi)m_largeclusters_per_lumi->Fill(m_manager->lumiBlockNumber(), nlargeclusters); 
    if(m_verylargeclusters_per_lumi)m_verylargeclusters_per_lumi->Fill(m_manager->lumiBlockNumber(),nverylargeclusters); 
-   if( (nclusters>=1000) && m_highNclusters_per_lumi) m_highNclusters_per_lumi->Fill(m_manager->lumiBlockNumber()); 
+   if((nclusters>=1000) && m_highNclusters_per_lumi) m_highNclusters_per_lumi->Fill(m_manager->lumiBlockNumber()); 
    if (m_doOnTrack || m_doOnPixelTrack) {
      if(m_clustersOnOffTrack_per_lumi && nclusters_all>0) m_clustersOnOffTrack_per_lumi->Fill(m_manager->lumiBlockNumber(),(float)nclusters_ontrack/nclusters_all); 
    }
@@ -834,7 +617,7 @@ StatusCode PixelMainMon::FillClustersMon(void)
    if (!m_majorityDisabled) {
      
       if(m_num_clusters) m_num_clusters->Fill(nclusters);
-      if(m_num_clusters_PIX) m_num_clusters_PIX->Fill(nclusters-nclusters_IBL);
+      //if(m_num_clusters_PIX) m_num_clusters_PIX->Fill(nclusters-nclusters_IBL);
       if(m_num_clusters_low) m_num_clusters_low->Fill(nclusters);
       if(m_num_clusters_ECA) m_num_clusters_ECA->Fill(nclusters_ECA);
       if(m_num_clusters_ECC) m_num_clusters_ECC->Fill(nclusters_ECC);
@@ -894,11 +677,7 @@ StatusCode PixelMainMon::ProcClustersMon(void)
    
    double events = m_event;
    if(events==0) return StatusCode::SUCCESS; //if no events, the rest of the test is pointless and would divide by 0
-    if( m_event != m_event2) events = m_event2;
-
-   //if (m_average_cluster_occupancy) {  //scale to get average occupancies
-   //   m_average_cluster_occupancy->Scale(events, m_doIBL);  
-   //}
+   if( m_event != m_event2) events = m_event2;
 
    return StatusCode::SUCCESS;
 }
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Errors.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Errors.cxx
index ee36a7a9f24c54ef3f9ebc09817e9391f2b54c53..cb233bafba4951fb5698b25598fd874b8fb48bb4 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Errors.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Errors.cxx
@@ -74,6 +74,11 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
    float max_eta[nlayers] = {2.5, 3.5, 6.5, 6.5, 6.5, 15.5};
 
    /// Set the number of bins, max/min bin
+   std::string atext_LB = ";lumi block"; 
+   std::string atext_err = ";# errors/event"; 
+   std::string atext_erf = ";# errors/module/event"; 
+   std::string atext_erb = ";Error bit"; 
+   std::string atext_ers = ";Error state"; 
    std::string axisTitle_LB = ";lumi block;# errors/event";
    std::string axisTitle_ES = ";Error State;# Errors";
    int nbins_LB = 2500; float minbin_LB = -0.5; float maxbin_LB = minbin_LB + (1.0*nbins_LB);
@@ -81,40 +86,49 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
    std::string tmp;
    std::string tmp2;
    std::string tmp3[nerror] = {"SyncErrorsFrac_per_event", "TruncationErrorsFrac_per_event", "OpticalErrorsFrac_per_event", "SEUErrorsFrac_per_event", "TimeoutErrorsFrac_per_event"};
+   std::string hname;
+   std::string htitles;
 
 
    for( int i=0; i<nlayersIBL2d3d; i++){
-      tmp = "errors_per_lumi_" + modlabel2[i];
-      tmp2 = "Number of errors per event per LB, " + modlabel2[i] + m_histTitleExt + axisTitle_LB;
-      sc = rodHistos.regHist(m_errors_per_lumi_mod[i] = TProfile_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB));
-      tmp = "SyncErrors_per_lumi_" + modlabel2[i];
-      tmp2 = "Synchronization errors per event per LB, " + modlabel2[i] + m_histTitleExt + axisTitle_LB;
-      sc = rodHistos.regHist(m_SyncErrors_per_lumi_mod[i] = TProfile_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB));
-      tmp = "OpticalErrors_per_lumi_" + modlabel2[i];
-      tmp2 = "Preamble/header errors per event per LB, " + modlabel2[i] + m_histTitleExt + axisTitle_LB;
-      sc = rodHistos.regHist(m_OpticalErrors_per_lumi_mod[i] = TProfile_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB));
-      tmp = "SEUErrors_per_lumi_" + modlabel2[i];
-      tmp2 = "SEU errors per event per LB, " + modlabel2[i] + m_histTitleExt + axisTitle_LB;
-      sc = rodHistos.regHist(m_SEU_Errors_per_lumi_mod[i] = TProfile_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB));
-      tmp = "TruncationErrors_per_lumi_" + modlabel2[i];
-      tmp2 = "Truncation errors per event per LB, " + modlabel2[i] + m_histTitleExt + axisTitle_LB;
-      sc = rodHistos.regHist(m_TruncationErrors_per_lumi_mod[i] = TProfile_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB));
-      tmp = "TimeoutErrors_per_lumi_" + modlabel2[i];
-      tmp2 = "Timeout errors per event per LB, " + modlabel2[i] + m_histTitleExt +  axisTitle_LB;
-      sc = rodHistos.regHist(m_TimeoutErrors_per_lumi_mod[i] = TProfile_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB));
-      tmp = "ErrorBit_per_lumi_" + modlabel2[i];
-      tmp2 = "Errors per module per event per LB, " + modlabel2[i] + m_histTitleExt +  axisTitle_LB;
-      sc = rodHistos.regHist(m_ErrorBit_per_lumi_mod[i] = TProfile2D_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB, 31, 0., 31.));
+      hname = makeHistname(("errors_per_lumi_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Average number of errors per event, "+modlabel2[i]), (atext_LB+atext_err), false);
+      sc = rodHistos.regHist(m_errors_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
+
+      hname = makeHistname(("SyncErrors_per_lumi_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Average Synchronization errors per event, "+modlabel2[i]), (atext_LB+atext_err), false);
+      sc = rodHistos.regHist(m_SyncErrors_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
+
+      hname = makeHistname(("OpticalErrors_per_lumi_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Average Preamble/header errors per event, "+modlabel2[i]), (atext_LB+atext_err), false);
+      sc = rodHistos.regHist(m_OpticalErrors_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
+
+      hname = makeHistname(("SEUErrors_per_lumi_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Average SEU errors per event, "+modlabel2[i]), (atext_LB+atext_err), false);
+      sc = rodHistos.regHist(m_SEU_Errors_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
+
+      hname = makeHistname(("TruncationErrors_per_lumi_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Average Truncation errors per event, "+modlabel2[i]), (atext_LB+atext_err), false);
+      sc = rodHistos.regHist(m_TruncationErrors_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
+
+      hname = makeHistname(("TimeoutErrors_per_lumi_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Average Timeout errors per event, "+modlabel2[i]), (atext_LB+atext_err), false);
+      sc = rodHistos.regHist(m_TimeoutErrors_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
+
+      hname = makeHistname(("ErrorBit_per_lumi_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Average Errors per module per event, "+modlabel2[i]), (atext_LB+atext_erb+atext_err), false);
+      sc = rodHistos.regHist(m_ErrorBit_per_lumi_mod[i] = TProfile2D_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB, 31, 0., 31.));
       m_ErrorBit_per_lumi_mod[i]->SetOption("colz");
-      tmp = "Error_per_lumi_" + modlabel2[i];
-      tmp2 = "Errors per module per event per LB, " + modlabel2[i] + m_histTitleExt +  axisTitle_LB;
-      sc = rodHistos.regHist(m_Error_per_lumi_mod[i] = TProfile2D_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB, 7, 0., 7.));
+
+      hname = makeHistname(("Error_per_lumi_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Average Errors per module per event, "+modlabel2[i]), (atext_LB+atext_ers+atext_err), false);
+      sc = rodHistos.regHist(m_Error_per_lumi_mod[i] = TProfile2D_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB, 7, 0., 7.));
       m_Error_per_lumi_mod[i]->SetOption("colz");
 
       for( int j=0; j<nerror; j++){
-         tmp = tmp3[j] + "_" + modlabel2[i];
-         tmp2 = tmp3[j] + ", " + modlabel2[i] + m_histTitleExt + ";lumi block;# errors/(module, event)";
-         sc = rodHistos.regHist(m_ErrorFraction_per_evt[j][i] = TProfile_LW::create( tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB));
+         hname = makeHistname((tmp3[j]+"_"+modlabel2[i]), false);
+         htitles = makeHisttitle((tmp3[j]+", "+modlabel2[i]), (atext_LB+atext_erf), false);
+         sc = rodHistos.regHist(m_ErrorFraction_per_evt[j][i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
       }
    }
    
@@ -133,32 +147,34 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
    histErrorName[7][0] = "Mod_Trunc_EoE_Overflow_errors"; histErrorName[7][1] = "Truncation Module EoE Overflow errors per event per LB";
    histErrorName[8][0] = "ROD_Trunc_HT_Limit_errors";     histErrorName[8][1] = "Truncation ROD H/T Limit errors per event per LB";
    histErrorName[9][0] = "ROD_Trunc_ROD_OF_errors";       histErrorName[9][1] = "Truncation ROD Overflow errors per event per LB";
-   histErrorName[10][0] = "Optical_Errors";               histErrorName[10][1] = "Preamble/header Errors per event per LB";
-   histErrorName[11][0] = "SEU_Hit_Parity";               histErrorName[11][1] = "SEU Hit Parity errors per event per LB";
-   histErrorName[12][0] = "SEU_Register_Parity";          histErrorName[12][1] = "SEU Register Parity errors per event per LB";
-   histErrorName[13][0] = "SEU_Hamming";                  histErrorName[13][1] = "SEU Hamming Code errors per event per LB";
-   histErrorName[14][0] = "ROD_Timeout";                  histErrorName[14][1] = "ROD Formatter Timeout errors per event per LB";
-   histErrorName[15][0] = "FE_Warning";                   histErrorName[15][1] = "FE Warning errors per event per LB";
+   histErrorName[10][0] = "Optical_Errors";               histErrorName[10][1]= "Preamble/header Errors per event per LB";
+   histErrorName[11][0] = "SEU_Hit_Parity";               histErrorName[11][1]= "SEU Hit Parity errors per event per LB";
+   histErrorName[12][0] = "SEU_Register_Parity";          histErrorName[12][1]= "SEU Register Parity errors per event per LB";
+   histErrorName[13][0] = "SEU_Hamming";                  histErrorName[13][1]= "SEU Hamming Code errors per event per LB";
+   histErrorName[14][0] = "ROD_Timeout";                  histErrorName[14][1]= "ROD Formatter Timeout errors per event per LB";
+   histErrorName[15][0] = "FE_Warning";                   histErrorName[15][1]= "FE Warning errors per event per LB";
    for(int j=0; j<nerrState; j++){
       for (int i=0; i<nlayers-1; i++) {
-         tmp = histErrorName[j][0] + "_per_lumi_" + modlabel2[i];
-         tmp2 = histErrorName[j][1] + ", " + modlabel2[i] + m_histTitleExt + axisTitle_LB;
-         sc = rodExpert.regHist(m_errorStates_per_lumi_mod[i][j] = TProfile_LW::create(tmp.c_str(), tmp2.c_str(), nbins_LB, minbin_LB, maxbin_LB));
+         hname = makeHistname((histErrorName[j][0]+"_per_lumi_"+modlabel2[i]), false);
+         htitles = makeHisttitle(("Average "+histErrorName[j][1]+", "+modlabel2[i]), (atext_LB+atext_erf), false);
+         sc = rodExpert.regHist(m_errorStates_per_lumi_mod[i][j] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
       }
       bool errorHist = false;
-      tmp = histErrorName[j][0] + "Map";
-      tmp2 = histErrorName[j][1] + m_histTitleExt;
-      m_ErrorStateMap[j] = new PixelMon2DMapsLW(tmp.c_str(), tmp2.c_str(), m_doIBL, errorHist);
+      hname = makeHistname((histErrorName[j][0]+"_Map"), false);
+      htitles = makeHisttitle((histErrorName[j][1]), (atext_LB+atext_erf), false);
+      m_ErrorStateMap[j] = new PixelMon2DMapsLW(hname.c_str(), htitles.c_str(), m_doIBL, errorHist);
       sc = m_ErrorStateMap[j]->regHist(rodExpert, m_doIBL, errorHist);
    }
 
    for( int i=0; i<nlayers; i++){
-      tmp = "Bad_Module_Errors_" + modlabel2[i];
-      tmp2 = "Errors for Bad Module, " + modlabel2[i] + m_histTitleExt + axisTitle_LB;
-      sc = rodExpert.regHist(m_bad_mod_errors_mod[i]  = TH1I_LW::create( tmp.c_str(), tmp2.c_str(), nbins_ES, minbin_ES, maxbin_ES));
-      tmp = "Errors_EtaID_" + modlabel2[i];
-      tmp2 = "Errors vs Eta Module ID, " + modlabel2[i] + m_histTitleExt + ";#eta module ID;Error State;# Errors";
-      sc = rodExpert.regHist(m_errors_etaid_mod[i] = TH2F_LW::create( tmp.c_str(), tmp2.c_str(), nmod_eta[i], min_eta[i], max_eta[i], 32,-0.5,31.5));
+      hname = makeHistname(("Bad_Module_Errors_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Errors for Bad Module, "+modlabel2[i]), (atext_LB+atext_erf), false);
+      sc = rodExpert.regHist(m_bad_mod_errors_mod[i]  = TH1I_LW::create(hname.c_str(), htitles.c_str(), nbins_ES, minbin_ES, maxbin_ES));
+
+      hname = makeHistname(("Errors_EtaID_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Errors vs Eta Module ID, "+modlabel2[i]), ";eta module ID;Error State;# Errors", false);
+      sc = rodExpert.regHist(m_errors_etaid_mod[i] = TH2F_LW::create(hname.c_str(), htitles.c_str(), nmod_eta[i], min_eta[i], max_eta[i], 32,-0.5,31.5));
+
       //tmp = "Errors_EtaID_per_event_" + modlabel2[i];
       //tmp2 = "Errors vs Eta Module ID/event, " + modlabel2[i] + m_histTitleExt + ";#eta module ID;Error State;# Errors";
       //sc = rodExpert.regHist(m_errors_etaid_per_evt_mod[i] = TH2F_LW::create( tmp.c_str(), tmp2.c_str(), nmod_eta[i], min_eta[i], max_eta[i], 32,-0.5,31.5));
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/HelperFunctions.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/HelperFunctions.cxx
index 03fba7c9308b3214aadd1a71205709f5a8ab52ce..ed961bac67efd4d2c50885529fd50d72ffe8248c 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/HelperFunctions.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/HelperFunctions.cxx
@@ -22,6 +22,21 @@
 #include "PixelMonitoring/PixelMon2DMaps.h"
 
 
+std::string PixelMainMon :: makeHistname(std::string set, bool ontrk)
+{
+   std::string name = set;
+   if( ontrk && m_doOnTrack ) name += "_OnTrack";
+   return name;
+}
+
+std::string PixelMainMon :: makeHisttitle(std::string set, std::string axis, bool ontrk)
+{
+   std::string name = set;
+   if( ontrk && m_doOnTrack ) name += "_OnTrack";
+   name = name + m_histTitleExt + axis;
+   return name;
+}
+
 int PixelMainMon :: GetPixLayerID(int ec, int ld, bool ibl)
 {
    int layer = 99;
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Hits.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Hits.cxx
index fad559b199bfcb7f03d82b2be71e2924378e19e0..eecb7867e98df08d99968004a3da39ebf11518a3 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Hits.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Hits.cxx
@@ -32,6 +32,7 @@
 #include "InDetRawData/InDetRawDataContainer.h"
 #include "InDetRawData/InDetRawDataCLASS_DEF.h" 
 #include "PixelMonitoring/PixelMon2DMaps.h"
+#include "PixelMonitoring/PixelMon2DMapsLW.h"
 #include "PixelMonitoring/DBMMon2DMaps.h"
 #include "PixelMonitoring/PixelMonModules.h"
 #include "PixelMonitoring/PixelMon2DLumiProfiles.h"
@@ -62,7 +63,7 @@ StatusCode PixelMainMon::BookHitsMon(void)
    MonGroup timeShift(  this, pathT.c_str(),  run, ATTRIB_MANAGED ); //declare a group of histograms
    MonGroup timeExpert( this, pathT.c_str(), run, ATTRIB_MANAGED ); //declare a group of histograms
    
-   std::string modlabel[8];
+   std::string modlabel[9];
    modlabel[0]="ECA"; modlabel[1]="ECC";
    modlabel[2]="B0";  modlabel[3]="B1";  modlabel[4]="B2"; 
    modlabel[5]="IBL"; modlabel[6]="IBL2D"; modlabel[7]="IBL3D"; 
@@ -74,6 +75,8 @@ StatusCode PixelMainMon::BookHitsMon(void)
    std::string tmp;
    std::string tmp2;
    std::string atitles; 
+   std::string hname;
+   std::string htitles;
    
    int nbins_LB = 2500; double min_LB  = -0.5; double max_LB = min_LB + (1.0*nbins_LB);        
    int nbins_tot3 = 300; double min_tot3 = -0.5; double max_tot3 = min_tot3 + (1.0*nbins_tot3);
@@ -81,37 +84,64 @@ StatusCode PixelMainMon::BookHitsMon(void)
 
    static constexpr int nmod_phi[PixLayer::COUNT] = {48, 48, 22, 38, 52, 14};
    static constexpr int nmod_eta[PixLayer::COUNT] = {3, 3, 13, 13, 13, 20};
-   
-   sc = rdoExpert.regHist(m_mu_vs_lumi = TH1F_LW::create("Interactions_vs_lumi", "<Interactions> vs LB ; LumiBlock; <#Interactions/event>", nbins_LB, min_LB, max_LB));
 
-   tmp = "Events_per_lumi"; tmp2 = "Number of event per LB"; atitles = ";lumi block;# event";
-   sc = rdoShift.regHist(m_events_per_lumi = TH1F_LW::create(tmp.c_str(), (tmp2 + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
-   tmp = "Hits_per_lumi"; tmp2 = "Number of pixel hits per event per LB"; atitles = ";lumi block;# hits/event";
-   sc = rdoShift.regHist(m_hits_per_lumi = TProfile_LW::create(tmp.c_str(), (tmp2 + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
-   tmp = "AvgOcc_per_lumi"; tmp2 = "Average pixel occupancy per event per LB"; atitles = ";lumi block;(average occupancy)/event";
-   sc = rdoShift.regHist(m_avgocc_per_lumi = TProfile_LW::create(tmp.c_str(), (tmp2 + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
-   tmp = "AvgOcc_RatioIBLB0_per_lumi"; tmp2 = "Average pixel occupancy IBL/B0 per event per LB"; atitles = ";lumi block;ratio";
-   sc = rdoShift.regHist(m_avgocc_ratioIBLB0_per_lumi = TProfile_LW::create(tmp.c_str(), (tmp2 + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
+   std::string atext_LB = ";lumi block"; 
+   std::string atext_nevt = ";# events"; 
+   std::string atext_nhit = ";# hits"; 
+   std::string atext_hit = ";# hits/event"; 
+   std::string atext_occ = ";# hits/pixel/event"; 
+   std::string atext_tot = ";ToT [BC]"; 
+   std::string atext_lv1 = ";Level 1 Accept"; 
+  
+   hname = makeHistname("Interactions_vs_lumi", false);
+   htitles = makeHisttitle("<Interactions> vs LB", (atext_LB+";<#Interactions/event>"), false);
+   sc = rdoExpert.regHist(m_mu_vs_lumi = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+
+   hname = makeHistname("Events_per_lumi", false);
+   htitles = makeHisttitle("Number of events in a LB", (atext_LB+atext_nevt), false);
+   sc = rdoShift.regHist(m_events_per_lumi = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+
+   hname = makeHistname("Hits_per_lumi", false);
+   htitles = makeHisttitle("Average number of pixel hits per event", (atext_LB+atext_hit), false);
+   sc = rdoShift.regHist(m_hits_per_lumi = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+
+   hname = makeHistname("AvgOcc_per_lumi", false);
+   htitles = makeHisttitle("Average pixel occupancy per event over all layers", (atext_LB+atext_occ), false);
+   sc = rdoShift.regHist(m_avgocc_per_lumi = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+
+   hname = makeHistname("AvgOcc_RatioIBLB0_per_lumi", false);
+   htitles = makeHisttitle("Average pixel occupancy ratio of IBL/B0 per event per LB", (atext_LB+";ratio"), false);
+   sc = rdoShift.regHist(m_avgocc_ratioIBLB0_per_lumi = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
 
    for(int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){ // not include IBL2D and IBL3D
-      tmp = "Hits_per_lumi"; tmp2 = "Number of pixel hits per event per LB"; atitles = ";lumi block;# hits/event";
-      sc = rdoExpert.regHist(m_hits_per_lumi_mod[i] = TProfile_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
-      tmp = "AvgOcc_per_lumi"; tmp2 = "Average pixel occupancy per event per LB"; atitles = ";lumi block;#hits/(pixel, event)";
-      sc = rdoExpert.regHist(m_avgocc_per_lumi_mod[i] = TProfile_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
-      tmp = "MaxOcc_per_lumi"; tmp2 = "Max. pixel occupancy per event per LB"; atitles = ";lumi block;#hits/pixel/event";
-      sc = rdoShift.regHist(m_maxocc_per_lumi_mod[i] = TH2F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB, 200, 0.0001, 0.002));
-      tmp = "nHits_per_module_per_event"; tmp2 = "Number of hits per module per event"; atitles = ";#hits per module per event;#event #times #module";
-      sc = rdoShift.regHist(m_nhits_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + m_histTitleExt + atitles).c_str(), 1000, -0.5, -0.5+1000.0));
-      tmp = "nLargeEvent_per_lumi"; tmp2 = "Number of large event (hitocc > 0.7#times 10^{-3}) per LB"; atitles = ";lumi block;#event";
-      sc = rdoShift.regHist(m_nlargeevt_per_lumi_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_LB, min_LB, max_LB));
-   }
-
-   tmp = "Hit_ToT"; tmp2 = "Hit ToT"; atitles = ";ToT;# hits";
+      hname = makeHistname(("Hits_per_lumi_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Average number of pixel hits per event, "+modlabel[i]), (atext_LB+atext_hit), false);
+      sc = rdoExpert.regHist(m_hits_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+
+      hname = makeHistname(("AvgOcc_per_lumi_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Average pixel occupancy per event, "+modlabel[i]), (atext_LB+atext_occ), false);
+      sc = rdoExpert.regHist(m_avgocc_per_lumi_mod[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+
+      hname = makeHistname(("MaxOcc_per_lumi_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Max. pixel occupancy per event, "+modlabel[i]), (atext_LB+atext_occ), false);
+      sc = rdoShift.regHist(m_maxocc_per_lumi_mod[i] = TH2F_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB, 200, 0.0001, 0.002));
+
+      hname = makeHistname(("nHits_per_module_per_event_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Number of hits in a module in an event, "+modlabel[i]), ";#hits in a module in an event;#events #times #modules", false);
+      sc = rdoShift.regHist(m_nhits_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), 1000, -0.5, -0.5+1000.0));
+
+      hname = makeHistname(("nLargeEvent_per_lumi_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Number of large events (hitocc > 0.7#times 10^{-3}), "+modlabel[i]), (atext_LB+atext_nevt), false);
+      sc = rdoShift.regHist(m_nlargeevt_per_lumi_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, min_LB, max_LB));
+   }
+
    for(int i=0; i<PixLayerIBL2D3DDBM::COUNT; i++){
+      hname = makeHistname(("Hit_ToT_"+modlabel2[i]), false);
+      htitles = makeHisttitle(("Hit ToT, "+modlabel2[i]), (atext_tot+atext_nhit), false);
       if(i<PixLayerIBL2D3DDBM::kDBMA){
-         sc = rdoExpert.regHist(m_hit_ToT[i] = TH1F_LW::create((tmp + "_" + modlabel2[i]).c_str(), (tmp2 + ", " + modlabel2[i] + m_histTitleExt + atitles).c_str(), nbins_tot3, min_tot3, max_tot3));
+         sc = rdoExpert.regHist(m_hit_ToT[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot3, min_tot3, max_tot3));
       }else if(m_doIBL){
-         sc = rdoExpert.regHist(m_hit_ToT[i] = TH1F_LW::create((tmp + "_" + modlabel2[i]).c_str(), (tmp2 + ", " + modlabel2[i] + m_histTitleExt + atitles).c_str(), nbins_tot4, min_tot4, max_tot4));
+         sc = rdoExpert.regHist(m_hit_ToT[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot4, min_tot4, max_tot4));
       }
    }
    
@@ -121,16 +151,20 @@ StatusCode PixelMainMon::BookHitsMon(void)
       m_hitmap_tmp = new PixelMon2DMaps("HitMap_tmp", ("Hit map for monitoring" + m_histTitleExt).c_str()); sc = m_hitmap_tmp->regHist(rdoShift);
       
       for(int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
+         hname = makeHistname(("Hit_ToT_Mon_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Hit ToT Monitoring, "+modlabel[i]), (atext_tot+atext_nhit), false);
          if( i<PixLayer::kIBL ){
-            tmp = "Hit_ToT_Mon"; tmp2 = "Hit ToT Monitoring";
-            sc = rdoExpert.regHist(m_hit_ToT_Mon_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_tot3, min_tot3, max_tot3));
-            tmp = "Hit_ToT_tmp"; tmp2 = "Hit ToT tmp";
-            sc = rdoExpert.regHist(m_hit_ToT_tmp_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_tot3, min_tot3, max_tot3));
+            sc = rdoExpert.regHist(m_hit_ToT_Mon_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot3, min_tot3, max_tot3));
          }else{
-            tmp = "Hit_ToT_Mon"; tmp2 = "Hit ToT Monitoring";
-            sc = rdoExpert.regHist(m_hit_ToT_Mon_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_tot4, min_tot4, max_tot4));
-            tmp = "Hit_ToT_tmp"; tmp2 = "Hit ToT tmp";
-            sc = rdoExpert.regHist(m_hit_ToT_tmp_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), nbins_tot4, min_tot4, max_tot4));
+            sc = rdoExpert.regHist(m_hit_ToT_Mon_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot4, min_tot4, max_tot4));
+         }
+
+         hname = makeHistname(("Hit_ToT_tmp_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Hit ToT tmp, "+modlabel[i]), (atext_tot+atext_nhit), false);
+         if( i<PixLayer::kIBL ){
+            sc = rdoExpert.regHist(m_hit_ToT_tmp_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot3, min_tot3, max_tot3));
+         }else{
+            sc = rdoExpert.regHist(m_hit_ToT_tmp_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), nbins_tot4, min_tot4, max_tot4));
          }
       }
    }
@@ -146,13 +180,13 @@ StatusCode PixelMainMon::BookHitsMon(void)
       
    if(m_doTiming)
    {
-      sc = timeExpert.regHist(m_Lvl1ID_PIX     = TH1I_LW::create("LvlID_PIX",  ("Level 1 ID (PIX)" + m_histTitleExt + ";level 1 ID;# hits").c_str(), 20,-0.5,19.5));
-      sc = timeExpert.regHist(m_Lvl1ID_IBL     = TH1I_LW::create("LvlID_IBL",  ("Level 1 ID (IBL)" + m_histTitleExt + ";level 1 ID;# hits").c_str(), 40,-0.5,39.5));
-      sc = timeShift.regHist(m_BCID            = TH1I_LW::create("Pixel_BCID",  ("BCID" + m_histTitleExt + ";Pixel BCID;# pixel hits").c_str(), 300,-0.5,299.5));//2808 bunches but have a few extra bins to check 
-      sc = timeShift.regHist(m_Atlas_BCID      = TH1F_LW::create("Atlas_BCID",  ("BCID" + m_histTitleExt + ";ATLAS BCID;# pixel hits").c_str(), 3500,-0.5,3499.5));
-      sc = timeShift.regHist(m_Atlas_BCID_hits = TH2F_LW::create("Atlas_BCID_Hits",  ("BCID" + m_histTitleExt + ";BCID;# pixel hits").c_str(), 3500,-0.5,3499.5,100,0,25000));
-      sc = timeExpert.regHist(m_BCID_Profile   = TProfile_LW::create("Atlas_BCID_Profile",  ("BCID_Profile" + m_histTitleExt + ";BCID;# pixel hits").c_str(), 3500,-0.5,3499.5));  
-      sc = timeShift.regHist(m_Lvl1A = TH1F_LW::create("Lvl1A", ("Hit Level 1 Accept" + m_histTitleExt + ";Level 1 Accept; # hits").c_str(), 14, -1.5, 12.5));
+      sc = timeExpert.regHist(m_Lvl1ID_PIX     = TH1I_LW::create("LvlID_PIX",  ("Level 1 ID (PIX)" + m_histTitleExt + ";level 1 ID" + atext_nhit).c_str(), 20,-0.5,19.5));
+      sc = timeExpert.regHist(m_Lvl1ID_IBL     = TH1I_LW::create("LvlID_IBL",  ("Level 1 ID (IBL)" + m_histTitleExt + ";level 1 ID" + atext_nhit).c_str(), 40,-0.5,39.5));
+      sc = timeShift.regHist(m_BCID            = TH1I_LW::create("Pixel_BCID", ("BCID" + m_histTitleExt + ";Pixel BCID" + atext_nhit).c_str(), 300,-0.5,299.5));//2808 bunches but have a few extra bins to check 
+      sc = timeShift.regHist(m_Atlas_BCID      = TH1F_LW::create("Atlas_BCID", ("BCID" + m_histTitleExt + ";ATLAS BCID" + atext_nhit).c_str(), 3500,-0.5,3499.5));
+      sc = timeShift.regHist(m_Atlas_BCID_hits = TH2F_LW::create("Atlas_BCID_Hits",  ("BCID" + m_histTitleExt + ";BCID" + atext_nhit).c_str(), 3500,-0.5,3499.5,100,0,25000));
+      sc = timeExpert.regHist(m_BCID_Profile   = TProfile_LW::create("Atlas_BCID_Profile",  ("BCID_Profile" + m_histTitleExt + ";BCID" + atext_nhit).c_str(), 3500,-0.5,3499.5));  
+      sc = timeShift.regHist(m_Lvl1A = TH1F_LW::create("Lvl1A", ("Hit Level 1 Accept" + m_histTitleExt + ";Level 1 Accept" + atext_nhit).c_str(), 14, -1.5, 12.5));
 
       for(int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
          tmp = "ROD_Module_BCID"; tmp2 = "Difference between BCID of RODs and Modules"; atitles = "; BCID: ROD-Module (#bc) ; Number of Pixels";
@@ -162,19 +196,21 @@ StatusCode PixelMainMon::BookHitsMon(void)
          //tmp = "Lvl1A"; tmp2 = "Hit Level 1 Accept"; atitles = ";Level 1 Accept; # hits";
          //sc = timeShift.regHist(m_Lvl1A_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), 14, -1.5, 12.5));
       }
+
       for(int i=0; i<PixLayerDBM::COUNT-1+(int)(m_doIBL); i++){
-         tmp = "Lvl1A"; tmp2 = "Hit Level 1 Accept"; atitles = ";Level 1 Accept; # hits";
-         sc = timeShift.regHist(m_Lvl1A_mod[i] = TH1F_LW::create((tmp + "_" + modlabel2[i]).c_str(), (tmp2 + ", " + modlabel2[i] + m_histTitleExt + atitles).c_str(), 14, -1.5, 12.5));
+         hname = makeHistname(("Lvl1A_"+modlabel2[i]), false);
+         htitles = makeHisttitle(("Hit Level 1 Accept, "+modlabel2[i]), (atext_lv1+atext_nhit), false);
+         sc = timeShift.regHist(m_Lvl1A_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), 14, -1.5, 12.5));
       }
    }
 
    if(m_do2DMaps)
    {
-      m_occupancy         = new PixelMon2DMaps("Occupancy",           ("hit occupancy" + m_histTitleExt).c_str());          sc = m_occupancy->regHist(rdoShift);
-      m_average_pixocc    = new PixelMon2DMaps("Occupancy_per_pixel", ("#hits / pixel" + m_histTitleExt).c_str());          sc = m_average_pixocc->regHist(rdoShift);
-      //m_average_pixocc2   = new PixelMon2DMaps("Average_PixOcc",      ("#hits / (pixel, event)" + m_histTitleExt).c_str()); sc = m_average_pixocc2->regHist(rdoShift);
-      //m_average_occupancy = new PixelMon2DMaps("Average_Occupancy",   ("#hits / event" + m_histTitleExt).c_str());          sc = m_average_occupancy->regHist(rdoShift);
-      //m_occupancyDBM      = new DBMMon2DMaps("Occupancy_DBM",          ("hit occupancy DBM" + m_histTitleExt).c_str());      sc = m_occupancyDBM->regHist(rdoShift);
+      m_occupancy = new PixelMon2DMaps("Occupancy", ("hit map"+ m_histTitleExt).c_str());
+      sc = m_occupancy->regHist(rdoShift);
+
+      m_average_pixocc = new PixelMon2DMapsLW("Occupancy_per_pixel", ("#hits / pixel" + m_histTitleExt).c_str(), m_doIBL, false);
+      sc = m_average_pixocc->regHist(rdoShift, m_doIBL, false);
      
       m_Lvl1ID_diff_mod_ATLAS_per_LB = new PixelMon2DLumiProfiles("Lvl1ID_diff_ATLAS_mod_per_LB", ("ATLAS_{Level 1 ID} - Module_{Level 1 ID} per LB" + m_histTitleExt).c_str(),"#Delta Level 1 ID",m_doIBL,false);
       sc = m_Lvl1ID_diff_mod_ATLAS_per_LB->regHist(timeExpert,m_doIBL,false);
@@ -182,11 +218,12 @@ StatusCode PixelMainMon::BookHitsMon(void)
       m_Lvl1ID_absdiff_mod_ATLAS_per_LB = new PixelMon2DLumiProfiles("Lvl1ID_absdiff_ATLAS_mod_per_LB", ("ATLAS_{Level 1 ID} - Module_{Level 1 ID} per LB" + m_histTitleExt).c_str(),"#Delta Level 1 ID",m_doIBL,false);
       sc = m_Lvl1ID_absdiff_mod_ATLAS_per_LB->regHist(timeExpert,m_doIBL,false);
    }
+
    if(m_doModules)
    {
-      m_hit_num_mod = new PixelMonModules1D("Hit_num", ("Number of hits per event in module" + m_histTitleExt).c_str(), 15,-0.5,149.5,m_doIBL);
+      m_hit_num_mod = new PixelMonModules1D("Hit_num", ("Number of hits in a module in an event" + m_histTitleExt).c_str(), 15,-0.5,149.5,m_doIBL);
       sc = m_hit_num_mod->regHist(this,(path+"/Modules_NumberOfHits").c_str(),run, m_doIBL);
-      m_hiteff_mod = new PixelMonModulesProf("Hit_track_eff", ("Proportion of hits on track vs t in module" + m_histTitleExt).c_str(), 2500,-0.5,2499.5,m_doIBL);
+      m_hiteff_mod = new PixelMonModulesProf("Hit_track_eff", ("Proportion of hits on track" + m_histTitleExt).c_str(), 2500,-0.5,2499.5,m_doIBL);
       sc = m_hiteff_mod->regHist(this,(path+"/Modules_HitEff").c_str(),run, m_doIBL);
    }
    if(m_doModules || m_doFEChipSummary)
@@ -212,20 +249,22 @@ StatusCode PixelMainMon::BookHitsMon(void)
       int max_hits = 80000;
       int max_avhits = 100;
       if (m_doHeavyIonMon) { max_hits = 350000; max_avhits = 2500; }
-      sc = rdoShift.regHist(m_num_hits= TH1I_LW::create("num_hits",  ("Number of pixel hits per event" + m_histTitleExt + ";# pixel hits/event;# events").c_str(), 2500,0.,(int)max_hits));
+      sc = rdoShift.regHist(m_num_hits= TH1I_LW::create("num_hits",  ("Number of pixel hits in an event" + m_histTitleExt + ";# pixel hits/event;# events").c_str(), 2500,0.,(int)max_hits));
 
-      tmp = "Occupancy_Summary"; tmp2 = "Average hit occupancy"; atitles = ";average # of hits per module per event;# modules";
       for(int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
-         sc = rdoExpert.regHist(m_occupancy_summary_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), 100,0.,(int)max_avhits));
+         hname = makeHistname(("Occupancy_Summary_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Average hit occupancy, "+modlabel[i]), ";average # hits in a module in an event;# modules", false);
+         sc = rdoExpert.regHist(m_occupancy_summary_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), 100,0.,(int)max_avhits));
       }
    }
    if(m_doLowOccupancy)
    {
       sc = rdoShift.regHist(m_num_hits_low= TH1I_LW::create("num_hits_low_occupancy",  ("Number of pixel hits per event" + m_histTitleExt + ";# pixel hits/event;# events").c_str(), 200,-0.5,199.5));
       
-      tmp = "Occupancy_Summary_Low"; tmp2 = "Average hit occupancy(low)"; atitles = ";average # of hits per module per event;# modules";
       for(int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
-         sc = rdoExpert.regHist(m_occupancy_summary_low_mod[i] = TH1F_LW::create((tmp + "_" + modlabel[i]).c_str(), (tmp2 + ", " + modlabel[i] + m_histTitleExt + atitles).c_str(), 50, 0., 2.));
+         hname = makeHistname(("Occupancy_Summary_Low_"+modlabel[i]), false);
+         htitles = makeHisttitle(("Average hit occupancy(low), "+modlabel[i]), ";average # hits in a module in an event;# modules", false);
+         sc = rdoExpert.regHist(m_occupancy_summary_low_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), 50, 0., 2.));
       }
    }
 
@@ -289,23 +328,44 @@ StatusCode PixelMainMon::BookHitsLumiBlockMon(void)
    modlabel[0]="ECA"; modlabel[1]="ECC";
    modlabel[2]="B0";  modlabel[3]="B1";  modlabel[4]="B2"; modlabel[5]="IBL";
 
+   std::string hname;
+   std::string htitles;
+   std::string atext_LB = ";lumi block"; 
+   std::string atext_nevt = ";# events"; 
+   std::string atext_nhit = ";# hits"; 
+   std::string atext_hit = ";# hits/event"; 
+   std::string atext_occ = ";# hits/pixel/event"; 
+   std::string atext_tot = ";ToT [BC]"; 
+   std::string atext_lv1 = ";Level 1 Accept"; 
+
    if(m_doHighOccupancy) {
-     sc = lumiBlockHist.regHist(m_num_hits_LB = TH1I_LW::create("num_hits_LB", ("Number of pixel hits per event" + m_histTitleExt + ";# pixel hits/event;# events").c_str(), 100,0.,25000));
+      hname = makeHistname("num_hits_LB", false);
+      htitles = makeHisttitle("Number of pixel hits in an event", (atext_hit+atext_nevt), false);
+      sc = lumiBlockHist.regHist(m_num_hits_LB = TH1I_LW::create(hname.c_str(), htitles.c_str(), 100, -0.5, 24999.5));
    }
    if(m_doLowOccupancy) {
-     sc = lumiBlockHist.regHist(m_num_hits_low_LB = TH1I_LW::create("num_hits_low_occupancy_LB", ("Number of pixel hits per event" + m_histTitleExt + ";# pixel hits/event;# events").c_str(), 200,-0.5,199.5));
+      hname = makeHistname("num_hits_low_LB", false);
+      htitles = makeHisttitle("Number of pixel hits in an event", (atext_hit+atext_nevt), false);
+      sc = lumiBlockHist.regHist(m_num_hits_low_LB = TH1I_LW::create(hname.c_str(), htitles.c_str(), 200, -0.5, 199.5));
    }   
    if(m_doModules) {
-     m_hit_num_mod_LB = new PixelMonModules1D("Hit_num_LB", ("Number of hits per event in module" + m_histTitleExt).c_str(), 20,-0.5,19.5,m_doIBL);
-     sc = m_hit_num_mod_LB->regHist(this,(path+"/Modules_NumberOfHits").c_str(),lowStat,m_doIBL);
+      hname = makeHistname("num_Hits_mod_LB", false);
+      htitles = makeHisttitle("Number of pixel hits in a module in an event", (atext_hit+atext_nevt), false);
+      m_hit_num_mod_LB = new PixelMonModules1D(hname.c_str(), htitles.c_str(), 20, -0.5, 19.5, m_doIBL);
+      sc = m_hit_num_mod_LB->regHist(this, (path+"/Modules_NumberOfHits").c_str(), lowStat, m_doIBL);
    }
    for( int i=0; i<PixLayer::COUNT; i++){
+      hname = makeHistname(("Hit_ToT_LB_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Hit ToT, "+modlabel[i]), (atext_tot+atext_nhit), false);
       if(i != PixLayer::kIBL){
-         sc = lumiBlockHist.regHist(m_hit_ToT_LB_mod[i] = TH1F_LW::create(("Hits_ToT_LB_"+modlabel[i]).c_str(), ("Hits Time over Threshold, " + modlabel[i] + m_histTitleExt + ";ToT;# Hits").c_str(), 300,-0.5,299.5));   
+         sc = lumiBlockHist.regHist(m_hit_ToT_LB_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), 300, -0.5, 299.5));   
       }else{
-         sc = lumiBlockHist.regHist(m_hit_ToT_LB_mod[i] = TH1F_LW::create(("Hits_ToT_LB_"+modlabel[i]).c_str(), ("Hits Time over Threshold, " + modlabel[i] + m_histTitleExt + ";ToT;# Hits").c_str(), 20,-0.5,19.5));   
+         sc = lumiBlockHist.regHist(m_hit_ToT_LB_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), 20, -0.5, 19.5));   
       }
-      sc = lumiBlockHist.regHist(m_Lvl1A_10min_mod[i] = TH1F_LW::create(("Lvl1A_10min_" + modlabel[i]).c_str(), ("Hit Level 1 Accept, " + modlabel[i] + m_histTitleExt + ";Level 1 Accept; # hits").c_str(), 14, -1.5, 12.5));
+
+      hname = makeHistname(("Lvl1A_10min_"+modlabel[i]), false);
+      htitles = makeHisttitle(("Hit Level 1 Accept, "+modlabel[i]), (atext_lv1+atext_nhit), false);
+      sc = lumiBlockHist.regHist(m_Lvl1A_10min_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), 14, -1.5, 12.5));
    }
 
    m_occupancy_10min = new PixelMon2DMaps("Occupancy_10min", ("hit occupancy" + m_histTitleExt).c_str());
@@ -404,8 +464,8 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
    int m_HitPerEventArray_l2[ nmod_phi[PixLayer::kB2] ][ nmod_eta[PixLayer::kB2] ];
    int m_HitPerEventArray_lI[ nmod_phi[PixLayer::kIBL] ][ nmod_eta[PixLayer::kIBL] ];
 
-   if (m_doModules)
-   {
+   ///if (m_doModules)
+   ///{
       for(int i=0; i<PixLayer::COUNT; i++){
          for( int phi=0; phi<nmod_phi[i]; phi++){
             for(int eta=0; eta<nmod_eta[i]; eta++){
@@ -418,7 +478,7 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
             }
          }
       }
-   }//end doModules
+   ///}//end doModules
 
    double nhits=0;
    double nhits_mod[PixLayer::COUNT]={0};
@@ -486,8 +546,6 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
 	      /// Fill Occupancy
          if(m_occupancy) m_occupancy->Fill(rdoID, m_pixelid, m_doIBL);
          if(m_occupancy_10min && m_doLumiBlock) m_occupancy_10min->Fill(rdoID, m_pixelid, m_doIBL);
-         //if(m_average_pixocc2) m_average_pixocc2->ScaleBynPixnEvt(m_occupancy, m_event, m_nGood_IBL2D, m_nGood_IBL3D, m_nGood_B0, m_nGood_B1, m_nGood_B2, m_nGood_ECA, m_nGood_ECC, m_doIBL);
-         //if(m_average_pixocc2) m_average_pixocc2->Fill(rdoID, m_pixelid, m_doIBL); 
          if(m_average_pixocc && nchannels[pixlayeribl2d3d] > 0) m_average_pixocc->WeightingFill(rdoID, m_pixelid, m_doIBL, 1.0/( 1.0*nchannels[pixlayeribl2d3d]) );
 	      if(m_doOnline && m_hitmap_tmp) m_hitmap_tmp->Fill(rdoID, m_pixelid, m_doIBL);
          
@@ -496,7 +554,7 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
 	         m_Lvl1A->Fill((*p_rdo)->getLVL1A());
             if(pixlayerdbm != 99 && m_Lvl1A_mod[pixlayerdbm]) m_Lvl1A_mod[pixlayerdbm]->Fill( (*p_rdo)->getLVL1A());
 	      }
-         if( pixlayer != 99 && m_Lvl1A_10min_mod[pixlayer] && m_doLumiBlock ) m_Lvl1A_10min_mod[pixlayer]->Fill( (*p_rdo)->getLVL1A() );
+         if(pixlayer != 99 && m_Lvl1A_10min_mod[pixlayer] && m_doLumiBlock ) m_Lvl1A_10min_mod[pixlayer]->Fill( (*p_rdo)->getLVL1A() );
 	      if(isIBL && m_Lvl1ID_IBL) m_Lvl1ID_IBL->Fill((*p_rdo)->getLVL1ID()%32);
 	      if(!isIBL && m_Lvl1ID_PIX) m_Lvl1ID_PIX->Fill((*p_rdo)->getLVL1ID());
 
@@ -550,7 +608,7 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
          if(m_doLumiBlock && pixlayer != 99){
             if(m_hit_ToT_LB_mod[pixlayer]) m_hit_ToT_LB_mod[pixlayer]->Fill((*p_rdo)->getToT());
          }
-         if( pixlayer != 99 && m_ToT_etaphi_mod[pixlayer] ) m_ToT_etaphi_mod[pixlayer]->Fill(m_pixelid->eta_module(rdoID), m_pixelid->phi_module(rdoID), (*p_rdo)->getToT());
+         if(pixlayer != 99 && m_ToT_etaphi_mod[pixlayer] ) m_ToT_etaphi_mod[pixlayer]->Fill(m_pixelid->eta_module(rdoID), m_pixelid->phi_module(rdoID), (*p_rdo)->getToT());
 
 
          /// Monitoring!!
@@ -580,8 +638,8 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
          nhitsM3++;
          nhitsM4++;
 
-	      if (m_doModules)//fill module hit arrays so we can calculate the number of hits/event/module 
-         {
+	      ///if (m_doModules)//fill module hit arrays so we can calculate the number of hits/event/module 
+         ///{
 	         if(m_pixelid->barrel_ec(rdoID)==2 ) m_HitPerEventArray_disksA[m_pixelid->phi_module(rdoID)][m_pixelid->layer_disk(rdoID)]++;
 
 	         if(m_pixelid->barrel_ec(rdoID)==-2) m_HitPerEventArray_disksC[m_pixelid->phi_module(rdoID)][m_pixelid->layer_disk(rdoID)]++;
@@ -593,11 +651,11 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
                if(m_pixelid->layer_disk(rdoID)==1+m_doIBL) m_HitPerEventArray_l1[m_pixelid->phi_module(rdoID)][m_pixelid->eta_module(rdoID)+6]++;
                if(m_pixelid->layer_disk(rdoID)==2+m_doIBL) m_HitPerEventArray_l2[m_pixelid->phi_module(rdoID)][m_pixelid->eta_module(rdoID)+6]++;
             } 
-         }
+         ///}
 
          ///////////End of main fill block////////////////////
       }
-   }//end of event loop
+   } //end of ROD loop
    
    
 
@@ -621,7 +679,7 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
 
    /// Fill number of hits per lLB
    if(m_events_per_lumi) m_events_per_lumi->Fill(m_manager->lumiBlockNumber());
-   if(m_hits_per_lumi) m_hits_per_lumi->Fill(m_manager->lumiBlockNumber(),nhits);     
+   if(m_hits_per_lumi) m_hits_per_lumi->Fill(m_manager->lumiBlockNumber(), nhits);     
    for( int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
       if(m_hits_per_lumi_mod[i]) m_hits_per_lumi_mod[i]->Fill(m_manager->lumiBlockNumber(), nhits_mod[i]);
    }
@@ -630,7 +688,7 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
    double avgocc = 0;
    double avgocc_mod[PixLayer::COUNT] = {0};
    if(nactivechannels>0) avgocc = nhits/nactivechannels;
-   if(m_avgocc_per_lumi) m_avgocc_per_lumi->Fill(m_manager->lumiBlockNumber(),avgocc);
+   if(m_avgocc_per_lumi) m_avgocc_per_lumi->Fill(m_manager->lumiBlockNumber(), avgocc);
 
    for( int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
       if(nactivechannels_mod[i] > 0) avgocc_mod[i] = nhits_mod[i]/nactivechannels_mod[i];
@@ -648,19 +706,18 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
 
    /// Fill the #hit per module per event
    //if(!m_doOnline){
-      for( int i=0; i<PixLayer::COUNT; i++){
-         for( int phi=0; phi<nmod_phi[i]; phi++){
-            for( int eta=0; eta<nmod_eta[i]; eta++){
-	      if( i == PixLayer::kECA && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_disksA[phi][eta] );
-	      if( i == PixLayer::kECC && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_disksC[phi][eta] );
-	      if( i == PixLayer::kB0  && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_l0[phi][eta]);
-         if( i == PixLayer::kB1  && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_l1[phi][eta]);
-         if( i == PixLayer::kB2  && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_l2[phi][eta]);
-	      if( i == PixLayer::kIBL && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_lI[phi][eta]);
-            }
+   for(int i=0; i<PixLayer::COUNT; i++){
+      for(int phi=0; phi<nmod_phi[i]; phi++){
+         for(int eta=0; eta<nmod_eta[i]; eta++){
+	   if(i == PixLayer::kECA && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_disksA[phi][eta] );
+	   if(i == PixLayer::kECC && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_disksC[phi][eta] );
+	   if(i == PixLayer::kB0  && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_l0[phi][eta]);
+      if(i == PixLayer::kB1  && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_l1[phi][eta]);
+      if(i == PixLayer::kB2  && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_l2[phi][eta]);
+	   if(i == PixLayer::kIBL && m_nhits_mod[i]) m_nhits_mod[i]->Fill( m_HitPerEventArray_lI[phi][eta]);
          }
       }
-   //}
+   }
 
    /// Put the #hits per event for each layer
    if( m_event == 0){
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelDCSMon.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelDCSMon.cxx
index 4d84c736b65fc9b8c5492176910042c720748185..7e7ee2be1b84321417af8ce27656919a903ec8c3 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelDCSMon.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelDCSMon.cxx
@@ -55,10 +55,10 @@ StatusCode PixelMainMon::BookPixelDCSMon(void)
   //sc = dcsExpert.regHist(m_hist_coolingPipeTemperatureInlet2D = TH2F_LW::create("cooling Pipe TemperatureInlet_chanNum", "cooling Pipe TempreratureInlet vs Channel Number; Channel Number;Temperature",14,1,15,150,-15,15));
   //sc = dcsExpert.regHist(m_hist_coolingPipeTemperatureOutlet2D = TH2F_LW::create("cooling Pipe TemperatureOutlet_chanNum", "cooling Pipe TempreratureOutlet vs Channel Number; Channel Number;Temperature",14,1,15,150,-15,15));
   //sc = dcsExpert.regHist(m_hist_HV_voltage2D = TH2F_LW::create("HV voltage_chanNum", "HV vs Channel Number; Channel Number;HV",14,1,15,100,-100,0));
-  float min_temperature = -15.; float max_temperature = 5.; int nbins_temperature = 100;
+  float min_temperature = -20.; float max_temperature = 0.; int nbins_temperature = 100;
   float min_LB = 0.;            float max_LB = 1500.;       int nbins_LB = 1500;
   float min_module = -10.;      float max_module = 10.;     int nbins_module = 20;
-  float min_HV = 0.;            float max_HV = 100.;        int nbins_HV = 100;
+  float min_HV = 0.;            float max_HV = 150.;        int nbins_HV = 150;
   float min_HVcurrent = 0.;     float max_HVcurrent = 0.1;  int nbins_HVcurrent = 100;
   float min_LV = 0.;            float max_LV = 5.;          int nbins_LV = 50;
   float min_LVcurrent = 0.;     float max_LVcurrent = 5.;   int nbins_LVcurrent = 50;
@@ -355,7 +355,7 @@ StatusCode PixelMainMon::BookPixelDCSMon(void)
   }
   // temperature
   sc = dcsExpert.regHist(m_hist_moduleTemperatureEtaPhi
-      = TProfile2D_LW::create("moduleTemperature_EtaPhi", "moduleTemperature EtaPhi; Module #eta Index;staveID;"+label_moduleTemp,
+      = TProfile2D_LW::create("moduleTemperature_EtaPhi", "Module Temperature EtaPhi; Module #eta Index;staveID;"+label_moduleTemp,
         nbins_module,min_module,max_module,nbins_staveID,min_staveID,max_staveID));
   //m_hist_moduleTemperatureEtaPhi->SetContour(99);
   xaxis = m_hist_moduleTemperatureEtaPhi->GetXaxis();
@@ -500,7 +500,7 @@ StatusCode PixelMainMon::BookPixelDCSMon(void)
   //m_hist_LB_staveID_dT->SetContour(99);
   // LV PC
   sc = dcsExpert.regHist(m_hist_LVPowerConsumptionEtaPhi
-      = TProfile2D_LW::create("LVPowerConsumption_EtaPhi", "LVPowerConsumption EtaPhi; Module #eta Index;staveID;"+label_LVPC,
+      = TProfile2D_LW::create("LVPowerConsumption_EtaPhi", "LV Power Consumption EtaPhi; Module #eta Index;staveID;"+label_LVPC,
         nbins_module,min_module,max_module,nbins_staveID,min_staveID,max_staveID));
   //m_hist_LVPowerConsumptionEtaPhi->SetContour(99);
   xaxis = m_hist_LVPowerConsumptionEtaPhi->GetXaxis();
@@ -513,7 +513,7 @@ StatusCode PixelMainMon::BookPixelDCSMon(void)
   //m_hist_LB_staveID_LVPowerConsumption->SetContour(99);
   // HV PC
   sc = dcsExpert.regHist(m_hist_HVPowerConsumptionEtaPhi
-      = TProfile2D_LW::create("HVPowerConsumption_EtaPhi", "HVPowerConsumption EtaPhi; Module #eta Index;staveID;"+label_HVPC,
+      = TProfile2D_LW::create("HVPowerConsumption_EtaPhi", "HV Power Consumption EtaPhi; Module #eta Index;staveID;"+label_HVPC,
         nbins_module,min_module,max_module,nbins_staveID,min_staveID,max_staveID));
   //m_hist_HVPowerConsumptionEtaPhi->SetContour(99);
   xaxis = m_hist_HVPowerConsumptionEtaPhi->GetXaxis();
@@ -526,7 +526,7 @@ StatusCode PixelMainMon::BookPixelDCSMon(void)
   //m_hist_LB_staveID_HVPowerConsumption->SetContour(99);
   // LVHV PC
   sc = dcsExpert.regHist(m_hist_LVHVPowerConsumptionEtaPhi
-      = TProfile2D_LW::create("LVHVPowerConsumption_EtaPhi", "LVHVPowerConsumption EtaPhi; Module #eta Index;staveID;"+label_LVHVPC,
+      = TProfile2D_LW::create("LVHVPowerConsumption_EtaPhi", "LV+HV Power Consumption EtaPhi; Module #eta Index;staveID;"+label_LVHVPC,
         nbins_module,min_module,max_module,nbins_staveID,min_staveID,max_staveID));
   //m_hist_LVHVPowerConsumptionEtaPhi->SetContour(99);
   xaxis = m_hist_LVHVPowerConsumptionEtaPhi->GetXaxis();
@@ -539,7 +539,7 @@ StatusCode PixelMainMon::BookPixelDCSMon(void)
   //m_hist_LB_staveID_LVHVPowerConsumption->SetContour(99);
   // eff flex temp
   sc = dcsExpert.regHist(m_hist_effFLEXtempEtaPhi
-      = TProfile2D_LW::create("effFLEXtemp_EtaPhi", "effFLEXtemp EtaPhi; Module #eta Index;staveID;"+label_effFLEXtemp,
+      = TProfile2D_LW::create("effFLEXtemp_EtaPhi", "Effective FLEX Temperature EtaPhi; Module #eta Index;staveID;"+label_effFLEXtemp,
         nbins_module,min_module,max_module,nbins_staveID,min_staveID,max_staveID));
   //m_hist_effFLEXtempEtaPhi->SetContour(99);
   xaxis = m_hist_effFLEXtempEtaPhi->GetXaxis();
@@ -552,7 +552,7 @@ StatusCode PixelMainMon::BookPixelDCSMon(void)
   //m_hist_LB_staveID_effFLEXtemp->SetContour(99);
   // thermal figure of merit
   sc = dcsExpert.regHist(m_hist_thermalFigureMeritEtaPhi
-      = TProfile2D_LW::create("thermalFigureMerit_EtaPhi", "thermalFigureMerit EtaPhi; Module #eta Index;staveID;"+label_tfm,
+      = TProfile2D_LW::create("thermalFigureMerit_EtaPhi", "Thermal Figure of Merit EtaPhi; Module #eta Index;staveID;"+label_tfm,
         nbins_module,min_module,max_module,nbins_staveID,min_staveID,max_staveID));
   //m_hist_thermalFigureMeritEtaPhi->SetContour(99);
   xaxis = m_hist_thermalFigureMeritEtaPhi->GetXaxis();
@@ -1091,12 +1091,12 @@ StatusCode PixelMainMon::ProcPixelDCSMon(void)
          m_hist_LB_staveID_LVHVPowerConsumption->Fill(LB,staveNum,lvpc + hvpc * 0.001);
          m_hist_LB_moduleGroup_LVHVPowerConsumption[staveNum - 1]->Fill(LB, moduleGroup, lvpc + hvpc * 0.001);
          // fill effective FLEX temperature
-         float tempFlex = dT * 0.6 + tempOutlet;
+         float tempFlex = dT * 0.6 + tempOutlet; // 0.6 is measured value
          m_hist_effFLEXtempEtaPhi->Fill(module_eta, staveNum, tempFlex);
          m_hist_LB_staveID_effFLEXtemp->Fill(LB,staveNum,tempFlex);
          m_hist_LB_moduleGroup_effFLEXtemp[staveNum - 1]->Fill(LB, moduleGroup, tempFlex);
          // fill thermal figure of merit
-         if (lvpc + hvpc * 0.001 == 0) {
+         if (lvpc + hvpc * 0.001 != 0) {
            float tfm = dT/(lvpc + hvpc * 0.001);
            m_hist_thermalFigureMeritEtaPhi->Fill(module_eta, staveNum, tfm);
            m_hist_LB_staveID_thermalFigureMerit->Fill(LB,staveNum,tfm);
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMainMon.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMainMon.cxx
index 0ee20e910b5478cbb23a3947681c54e25bc9e57a..8fd0142590b76b345fd59e4823b04408c5e6ad54 100755
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMainMon.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMainMon.cxx
@@ -140,6 +140,7 @@ PixelMainMon::PixelMainMon(const std::string & type,
    declareProperty("doStatus",        m_doStatus     = false);
    declareProperty("doDCS",           m_doDCS        = false);
 
+   declareProperty("doDegFactorMap",   m_doDegFactorMap = true);
    declareProperty("doHeavyIonMon",   m_doHeavyIonMon = false);
 
    declareProperty("doIBL",           m_doIBL = false);
@@ -168,20 +169,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
 
    m_avgocc_per_lumi = 0;
 
-   //m_ToT_vs_eta_IBL = 0;
-   //m_ToT_vs_eta_B0 = 0;
-   //m_ToT_vs_eta_B1 = 0;
-   //m_ToT_vs_eta_B2 = 0;
-   //m_ToT_vs_phi_IBL = 0;
-   //m_ToT_vs_phi_B0 = 0;
-   //m_ToT_vs_phi_B1 = 0;
-   //m_ToT_vs_phi_B2 = 0;
-   m_nlowToT_vs_clussize_IBL = 0;
-   m_nlowToT_vs_clussize_B0 = 0;
-   m_nlowToT_vs_clussize_B1 = 0;
-   m_nlowToT_vs_clussize_B2 = 0;
-   m_nlowToT_vs_clussize_ECC = 0;
-   m_nlowToT_vs_clussize_ECA = 0;
    m_Lvl1A = 0;
    m_Lvl1ID_PIX = 0;                
    m_Lvl1ID_IBL = 0;                
@@ -194,9 +181,7 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_diff_ROD_BCID = 0;         
    m_occupancy = 0;
    m_occupancy_10min = 0;
-   //m_average_occupancy = 0;
    m_average_pixocc = 0;
-   m_average_pixocc2 = 0;
    m_avgocc_ratioIBLB0_per_lumi = 0;
    m_hitmap_tmp = 0;
    m_FE_chip_hit_summary = 0;
@@ -223,6 +208,14 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_pixel_noise_map = 0;
    m_pixel_occupancy_spectrum = 0;
    m_hit_num_mod = 0;
+
+   //-------------------
+   // track histograms
+   //-------------------
+   m_degFactorMap = 0;
+   m_degFactorMap_per_lumi = 0;
+   m_degFactorMap_eta_per_lumi = 0;
+   //m_degFactorMap_phi_per_lumi = 0;
    m_track_res_phi = 0; 
    m_track_pull_phi = 0;
    m_track_res_eta = 0; 
@@ -235,21 +228,21 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_track_chi2_bcl1_highpt = 0;
    m_track_chi2_bcl0_highpt = 0;
    m_track_chi2_bclgt1_highpt = 0;
-   m_track_clusToT = 0;
-   m_track_qOverP = 0;  
-   m_track_qOverP_inv = 0;  
-   m_track_pt = 0;  
-   m_track_d0 = 0;      
-   m_track_z0 = 0;     
-   m_track_phi0 = 0;    
-   m_track_theta = 0;   
-   m_track_eta = 0;    
+   //m_track_clusToT = 0;
+   //m_track_qOverP = 0;  
+   //m_track_qOverP_inv = 0;  
+   //m_track_pt = 0;  
+   //m_track_d0 = 0;      
+   //m_track_z0 = 0;     
+   //m_track_phi0 = 0;    
+   //m_track_theta = 0;   
+   //m_track_eta = 0;    
    m_tracks_per_lumi = 0;
    m_trackRate_per_lumi = 0;
    m_tracksPerEvt_per_lumi = 0;
    m_tracksPerEvtPerMu_per_lumi = 0;
-   m_track_dedx = 0;
-   m_track_mass_dedx = 0;
+   //m_track_dedx = 0;
+   //m_track_mass_dedx = 0;
    m_clustot_vs_pt = 0;
    m_clustot_lowpt = 0;
    m_1hitclustot_lowpt = 0;
@@ -262,68 +255,10 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_tsos_holemap = 0;
    m_tsos_outliermap = 0;
    m_clusters_per_lumi = 0;
-   m_clusters_per_lumi_PIX = 0;
    m_largeclusters_per_lumi = 0;
    m_verylargeclusters_per_lumi = 0;
    m_totalclusters_per_lumi = 0;
    m_highNclusters_per_lumi = 0;
-   m_cluster_ToT_PIX = 0;
-   m_cluster_ToT_IBL = 0;
-   m_cluster_ToT_ECA = 0;
-   m_cluster_ToT_IBL3D = 0;
-   m_cluster_ToT_IBL2D = 0;
-   m_cluster_ToT_B0 = 0;
-   m_cluster_ToT_B1 = 0;
-   m_cluster_ToT_B2 = 0;
-   m_cluster_ToT_ECC = 0;
-   m_bigcluster_ToT_ECA = 0;
-   m_bigcluster_ToT_IBL = 0;
-   m_bigcluster_ToT_B0 = 0;
-   m_bigcluster_ToT_B1 = 0;
-   m_bigcluster_ToT_B2 = 0;
-   m_bigcluster_ToT_ECC = 0;
-   m_1cluster_ToT_ECA = 0;
-   m_1cluster_ToT_IBL = 0;
-   m_1cluster_ToT_B0 = 0;
-   m_1cluster_ToT_B1 = 0;
-   m_1cluster_ToT_B2 = 0;
-   m_1cluster_ToT_ECC = 0;
-   m_2cluster_ToT_ECA = 0;
-   m_2cluster_ToT_IBL = 0;
-   m_2cluster_ToT_B0 = 0;
-   m_2cluster_ToT_B1 = 0;
-   m_2cluster_ToT_B2 = 0;
-   m_2cluster_ToT_ECC = 0;
-   m_3cluster_ToT_ECA = 0;
-   m_3cluster_ToT_IBL = 0;
-   m_3cluster_ToT_B0 = 0;
-   m_3cluster_ToT_B1 = 0;
-   m_3cluster_ToT_B2 = 0;
-   m_3cluster_ToT_ECC = 0;
-   m_bigcluster_Q_ECA = 0;
-   m_bigcluster_Q_IBL = 0;
-   m_bigcluster_Q_B0 = 0;
-   m_bigcluster_Q_B1 = 0;
-   m_bigcluster_Q_B2 = 0;
-   m_bigcluster_Q_ECC = 0;
-   m_1cluster_Q_ECA = 0;
-   m_1cluster_Q_IBL = 0;
-   m_1cluster_Q_B0 = 0;
-   m_1cluster_Q_B1 = 0;
-   m_1cluster_Q_B2 = 0;
-   m_1cluster_Q_ECC = 0;
-   m_2cluster_Q_ECA = 0;
-   m_2cluster_Q_IBL = 0;
-   m_2cluster_Q_B0 = 0;
-   m_2cluster_Q_B1 = 0;
-   m_2cluster_Q_B2 = 0;
-   m_2cluster_Q_ECC = 0;
-   m_3cluster_Q_ECA = 0;
-   m_3cluster_Q_IBL = 0;
-   m_3cluster_Q_B0 = 0;
-   m_3cluster_Q_B1 = 0;
-   m_3cluster_Q_B2 = 0;
-   m_3cluster_Q_ECC = 0;
    m_clussize_map = 0;
    m_cluscharge_map = 0;
    m_clusToT_map = 0;
@@ -332,40 +267,12 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_cluster_row_width = 0;
    m_cluster_row_width_IBL = 0;
    m_cluster_LVL1A = 0;
-   m_cluster_LVL1A_PIX = 0;
    m_clus_LVL1A_sizenot1 = 0; 
    m_cluster_LVL1A_highToT = 0;
-   m_cluster_LVL1A_ECA = 0;
-   m_cluster_LVL1A_ECC = 0;
-   m_cluster_LVL1A_IBL = 0;
-   m_cluster_LVL1A_B0 = 0;
-   m_cluster_LVL1A_B1 = 0;
-   m_cluster_LVL1A_B2 = 0;
-   m_cluster_charge_ECA = 0;
-   m_cluster_charge_ECC = 0;
-   m_cluster_charge_IBL = 0;
-   m_cluster_charge_B0 = 0;
-   m_cluster_charge_B1 = 0;
-   m_cluster_charge_B2 = 0;
    m_clusterSize_eta = 0;
-   m_clusToT_vs_eta_IBL = 0;
-   m_clusToT_vs_eta_B0 = 0;
-   m_clusToT_vs_eta_B1 = 0;
-   m_clusToT_vs_eta_B2 = 0;
-   m_ToT_vs_clussize_IBL = 0;
-   m_ToT_vs_clussize_B0 = 0;
-   m_ToT_vs_clussize_B1 = 0;
-   m_ToT_vs_clussize_B2 = 0;
-   m_Q_vs_clussize_IBL = 0;
-   m_Q_vs_clussize_B0 = 0;
-   m_Q_vs_clussize_B1 = 0;
-   m_Q_vs_clussize_B2 = 0;
-   m_Q_vs_clussize_ECC = 0;
-   m_Q_vs_clussize_ECA = 0;
    m_cluster_occupancy = 0;
    m_clusocc_DBM = 0;
    m_clusocc_sizenot1 = 0; 
-   //m_average_cluster_occupancy = 0;
    m_cluseff_mod = 0;
    m_cluster_ToT_mod = 0;
    m_cluster_size_mod = 0;
@@ -399,27 +306,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_Status_modules = 0;
    m_status = 0;
    m_dqStatus = 0;
-   m_badModules_per_lumi = 0;
-   m_badModules_per_lumi_ECA = 0;
-   m_badModules_per_lumi_ECC = 0;
-   m_badModules_per_lumi_IBL = 0;
-   m_badModules_per_lumi_B0 = 0;
-   m_badModules_per_lumi_B1 = 0;
-   m_badModules_per_lumi_B2 = 0;
-   m_disabledModules_per_lumi = 0;
-   m_disabledModules_per_lumi_PIX = 0;
-   m_disabledModules_per_lumi_ECA = 0;
-   m_disabledModules_per_lumi_ECC = 0;
-   m_disabledModules_per_lumi_IBL = 0;
-   m_disabledModules_per_lumi_B0 = 0;
-   m_disabledModules_per_lumi_B1 = 0;
-   m_disabledModules_per_lumi_B2 = 0;
-   m_baddisabledModules_per_lumi_ECA = 0;
-   m_baddisabledModules_per_lumi_ECC = 0;
-   m_baddisabledModules_per_lumi_B0 = 0;
-   m_baddisabledModules_per_lumi_B1 = 0;
-   m_baddisabledModules_per_lumi_B2 = 0;
-   m_baddisabledModules_per_lumi_IBL = 0;
    m_error1 = 0;            
    m_errorTypes = 0;        
    m_otherROD_per_lumi_IBL = 0; 
@@ -428,9 +314,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_error_time2 = 0;       
    m_error_time3 = 0;       
    m_errors = 0;
-   //m_IBLModErrors = 0; 
-   //m_IBLSyncErrors = 0; 
-   //m_IBLotherRODErrors = 0; 
    m_OpticalErrors = 0;
    m_SEU_Errors = 0;
    m_TimeoutErrors = 0;
@@ -442,27 +325,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_SEUCategory = 0; 
    m_TimeoutCategory = 0; 
    m_TruncationErrors = 0;
-   //m_SyncErrors_mod = 0;
-   //m_SyncErrors_ROD = 0;
-   //m_TruncErrors_mod = 0;
-   //m_TruncErrors_ROD = 0;
-   //m_sync_mod_BCID1 = 0;   
-   //m_sync_mod_BCID2 = 0;   
-   //m_sync_mod_LVL1ID = 0;
-   //m_sync_rod_BCID = 0;   
-   //m_sync_rod_LVL1ID = 0;   
-   //m_trunc_mod_EOC = 0;
-   //m_trunc_mod_hitOF = 0;
-   //m_trunc_mod_EoEOF = 0;
-   //m_trunc_rod_HTlim = 0;
-   //m_trunc_rod_FIFOOF = 0;
-   //m_optical_error = 0;
-   //m_seu_hit_parity = 0;
-   //m_seu_reg_parity = 0;
-   //m_seu_hamming = 0;
-   //m_timeout = 0;
-   //m_FEwarning = 0;
-   //m_mod_errors_IBL = 0;
    m_sync_mod_BCID1_per_LB = 0;
    m_sync_mod_BCID1_int_LB = 0;
    m_sync_mod_BCID2_per_LB = 0;
@@ -568,6 +430,19 @@ PixelMainMon::PixelMainMon(const std::string & type,
       m_bad_mod_errors_mod[i] = 0;
       m_errors_etaid_mod[i] = 0;
       m_hit_ToT_LB_mod[i] = 0;
+      m_clusToT_vs_eta_mod[i] = 0;
+      m_ToT_vs_clussize_mod[i] = 0;
+      m_Q_vs_clussize_mod[i] = 0;
+      m_nlowToT_vs_clussize_mod[i] = 0;
+      m_1cluster_ToT_mod[i] = 0;
+      m_2cluster_ToT_mod[i] = 0;
+      m_3cluster_ToT_mod[i] = 0;
+      m_bigcluster_ToT_mod[i] = 0;
+      m_1cluster_Q_mod[i] = 0;
+      m_2cluster_Q_mod[i] = 0;
+      m_3cluster_Q_mod[i] = 0;
+      m_bigcluster_Q_mod[i] = 0;
+      m_cluster_LVL1A1d_mod[i] = 0;
    }
    for( int j=0; j<16; j++){
       m_errors_int_LB[j] = 0;
@@ -581,6 +456,11 @@ PixelMainMon::PixelMainMon(const std::string & type,
       m_TimeoutErrors_per_lumi_mod[i] = 0;
       m_ErrorBit_per_lumi_mod[i] = 0;
       m_Error_per_lumi_mod[i] = 0;
+      m_cluster_ToT1d_mod[i] = 0;
+      m_cluster_Q_mod[i] = 0;
+      m_badModules_per_lumi_mod[i] = 0;
+      m_disabledModules_per_lumi_mod[i] = 0;
+      m_baddisabledModules_per_lumi_mod[i] = 0;
       for( int j=0; j<ErrorCategory::COUNT; j++){
          m_ErrorFraction_per_evt[j][i] = 0;
          m_ErrorCategoryMap[j] = 0;
@@ -710,6 +590,7 @@ PixelMainMon::~PixelMainMon()
     delete m_FSM_state;
     delete m_FSM_status;
     delete m_moduleDCSDataHolder;
+
 }
 
 
@@ -811,7 +692,7 @@ StatusCode PixelMainMon::initialize()
   m_atrcollist.push_back(std::string("/PIXEL/DCS/FSMSTATUS"));   // readout unit
   m_atrcollist.push_back(std::string("/PIXEL/DCS/PIPES"));       // IBL stave
   m_atrcollist.push_back(std::string("/PIXEL/DCS/HVCURRENT"));   // IBL readout unit
-  m_atrcollist.push_back(std::string("/PIXEL/DCS/PLANTS"));      // 1
+  //m_atrcollist.push_back(std::string("/PIXEL/DCS/PLANTS"));      // 1
   m_atrcollist.push_back(std::string("/PIXEL/DCS/LV"));          // IBL readout unit
   m_currentLumiBlockNumber = 0;
 
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DMapsLW.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DMapsLW.cxx
index 4713262b244632e0f6269bf361689e2cd0418ccf..f35b902caf4dad8f2726c46948fe06725e0e3973 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DMapsLW.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DMapsLW.cxx
@@ -30,6 +30,8 @@ PixelMon2DMapsLW::PixelMon2DMapsLW(std::string name, std::string title,bool doIB
   B2 = TH2F_LW::create((name+"_B2").c_str(),       (title + ", B2 " + etatext + phitext).c_str(),13,-6.5,6.5,52,-0.5,51.5);
   A  = TH2F_LW::create((name+"_ECA" ).c_str(),     (title + ", ECA " + disktext + phitext).c_str(),3,-0.5,2.5,48,-0.5,47.5);
   C  = TH2F_LW::create((name+"_ECC" ).c_str(),     (title + ", ECC " + disktext + phitext).c_str(),3,-0.5,2.5,48,-0.5,47.5);
+  DBMA = TH2F_LW::create((name+"_DBMA" ).c_str(),  (title + ", DBMA " + disktext + phitext).c_str(),3,-0.5,2.5,4,-0.5,3.5);
+  DBMC = TH2F_LW::create((name+"_DBMC" ).c_str(),  (title + ", DBMC " + disktext + phitext).c_str(),3,-0.5,2.5,4,-0.5,3.5);
 
   formatHist(doIBL,errorHist);
 }
@@ -44,6 +46,8 @@ PixelMon2DMapsLW::~PixelMon2DMapsLW()
    LWHist::safeDelete(B2);
    LWHist::safeDelete(A);
    LWHist::safeDelete(C);
+   LWHist::safeDelete(DBMA);
+   LWHist::safeDelete(DBMC);
 }
 
 void PixelMon2DMapsLW::Fill(Identifier &id, const PixelID* pixID, bool doIBL,bool errorHist)
@@ -54,6 +58,8 @@ void PixelMon2DMapsLW::Fill(Identifier &id, const PixelID* pixID, bool doIBL,boo
 
    if(bec==2) A->Fill(ld,pm); 
    else if(bec==-2) C->Fill(ld,pm);
+   else if(bec==4) DBMA->Fill(ld, pm);
+   else if(bec==-4) DBMC->Fill(ld, pm);
 
    else if(bec==0)
      {
@@ -90,6 +96,51 @@ void PixelMon2DMapsLW::Fill(Identifier &id, const PixelID* pixID, bool doIBL,boo
     if(copy) IBL->Fill(emf+1, pm);
        }
      }
+}
+
+void PixelMon2DMapsLW::WeightingFill(Identifier &id, const PixelID* pixID, bool doIBL, float weight)
+{
+   int bec = pixID->barrel_ec(id);
+   int ld  = pixID->layer_disk(id);
+   int pm  = pixID->phi_module(id);
+
+   if(bec==2) A->Fill(ld, pm, weight);
+   else if(bec==-2) C->Fill(ld, pm, weight);
+   else if(bec==4) DBMA->Fill(ld, pm, weight);
+   else if(bec==-4) DBMC->Fill(ld, pm, weight);
+
+   else if(bec==0)
+   {
+      if(doIBL){ld--;}
+      int em  = pixID->eta_module(id);
+      if(ld ==0){ 
+	      B0->Fill(em, pm, weight);
+      }
+      else if(ld ==1){ 
+	      B1->Fill(em, pm, weight);
+      }
+      else if(ld ==2){ 
+	      B2->Fill(em, pm, weight);
+      }
+      else if(ld ==-1){
+	      int feid = 0;
+	      int emf = 0;
+	      if(em<6 && em>-7){
+	         if(pixID->eta_index(id) >= 80) feid = 1;
+	         emf = 2 * em + feid; 
+	         IBL2D->Fill(em, pm, weight);
+	      }
+	      else if(em<-6){
+	         emf = em - 6;
+	         IBL3D->Fill(em+10, pm, weight);
+	      }
+	      else{
+	         emf = em + 6;
+	         IBL3D->Fill(em-2, pm, weight);
+	      }
+	      IBL->Fill(emf, pm, weight);
+      }
+   }
 }   
 
 void PixelMon2DMapsLW::FillNormalized(PixelMon2DMapsLW* old, int nevent)
@@ -162,7 +213,9 @@ void PixelMon2DMapsLW::formatHist(bool doIBL, bool errorHist)
 {
    const int ndisk = 3;
    const int nphi  = 48;
+   const int nphi_dbm  = 4;
    const char *disk[ndisk] = { "Disk 1", "Disk 2", "Disk 3" };
+   const char *phi_dbm[nphi_dbm] = { "M1","M2","M3","M4"};
    const int nmod = 13;
    const int nmodIBL2D = 12;
    const int nmodIBL3D = 8;
@@ -232,10 +285,17 @@ void PixelMon2DMapsLW::formatHist(bool doIBL, bool errorHist)
       A->GetYaxis()->SetBinLabel( i+1, nstaveA[i] );
       C->GetYaxis()->SetBinLabel( i+1, nstaveC[i] );
    }
+   for (int i=0; i<nphi_dbm; i++) 
+   {
+      DBMA->GetYaxis()->SetBinLabel( i+1, phi_dbm[i] );
+      DBMC->GetYaxis()->SetBinLabel( i+1, phi_dbm[i] );
+   }
    for (int i=0; i<ndisk; i++) 
    {
       A->GetXaxis()->SetBinLabel( i+1, disk[i] );
       C->GetXaxis()->SetBinLabel( i+1, disk[i] );
+      DBMA->GetXaxis()->SetBinLabel( i+1, disk[i] );
+      DBMC->GetXaxis()->SetBinLabel( i+1, disk[i] );
    }
    for (int i=0; i<nmod; i++) 
    {
@@ -301,6 +361,8 @@ void PixelMon2DMapsLW::formatHist(bool doIBL, bool errorHist)
    B2->GetYaxis()->SetLabelSize(0.03);
    A->GetYaxis()->SetLabelSize(0.02);
    C->GetYaxis()->SetLabelSize(0.02);
+   DBMA->GetYaxis()->SetLabelSize(0.02);
+   DBMC->GetYaxis()->SetLabelSize(0.02);
    //Move the lable so you can read it
    // IBL2D->GetYaxis()->SetTitleOffset(1.35);
    // IBL3D->GetYaxis()->SetTitleOffset(1.35);
@@ -315,12 +377,16 @@ void PixelMon2DMapsLW::formatHist(bool doIBL, bool errorHist)
    B2->SetOption("colz");
    A->SetOption("colz");
    C->SetOption("colz");
+   DBMA->SetOption("colz");
+   DBMC->SetOption("colz");
    //force the minimum to be 0 so you can spot empty blocks easily
    B0->SetMinimum(0.);
    B1->SetMinimum(0.);
    B2->SetMinimum(0.);
    A->SetMinimum(0.);
    C->SetMinimum(0.);
+   DBMA->SetMinimum(0.);
+   DBMC->SetMinimum(0.);
    //Remvoe the stats box because it's in the way
    // IBL2D->SetStats(0.);
    // IBL3D->SetStats(0.);
@@ -344,6 +410,8 @@ StatusCode PixelMon2DMapsLW::regHist(ManagedMonitorToolBase::MonGroup &group, bo
     sc = group.regHist(B2);
     sc = group.regHist(A);
     sc = group.regHist(C);
+   sc = group.regHist(DBMA);
+   sc = group.regHist(DBMC);
 
    return sc;
 }
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonModules.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonModules.cxx
index c5e24fb426e693a7cae135bfd27fa835a47c87e9..309b55099386891c08b2161ecc46761180c30780 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonModules.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonModules.cxx
@@ -11,6 +11,8 @@
 #include "TH1I.h"
 #include "TH2I.h"
 #include "TProfile.h"
+#include "LWHists/TH1F_LW.h"
+#include "LWHists/TProfile_LW.h"
 #include "InDetIdentifier/PixelID.h"
 #include "GaudiKernel/StatusCode.h"       
 #include <iostream>
@@ -25,7 +27,8 @@ PixelMonModulesProf::PixelMonModulesProf(std::string name, std::string title, in
   nBins=nbins;
   for(int i=0; i < 1744 +280*doIBL; i++)
     {
-      getHist(i) = new TProfile((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, arr);
+      //getHist(i) = new TProfile((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, arr);
+      getHist(i) = TProfile_LW::create((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, arr);
     }
   if(doIBL==false){
     for(int i=1744; i < 2024; i++){
@@ -41,7 +44,8 @@ PixelMonModulesProf::PixelMonModulesProf(std::string name, std::string title, in
   nBins=nbins;
   for(int i=0; i < 1744 +280*doIBL; i++)
     {
-      getHist(i) = new TProfile((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, low, high);
+      //getHist(i) = new TProfile((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, low, high);
+      getHist(i) = TProfile_LW::create((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, low, high);
     }
   if(doIBL==false){
     for(int i=1744; i < 2024; i++){
@@ -55,10 +59,10 @@ PixelMonModulesProf::PixelMonModulesProf(std::string name, std::string title, in
 PixelMonModulesProf::~PixelMonModulesProf()
 {
   for(int i=0; i < 2024; i++)
-    {
-      if(getHist(i)){
-	delete getHist(i);}
-    }
+  {
+     //if(getHist(i)){ delete getHist(i); }
+     if(getHist(i)){ LWHist::safeDelete( getHist(i) ); }
+  }
 }
 
 PixelMonModules1D::PixelMonModules1D(std::string name, std::string title, int nbins, double* arr, bool doIBL)
@@ -67,6 +71,7 @@ PixelMonModules1D::PixelMonModules1D(std::string name, std::string title, int nb
   for(int i=0; i < 1744 +280*doIBL; i++)
     {
       getHist(i) = new TH1F((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, arr);
+      //getHist(i) = TH1F_LW::create((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, arr);
     }
   if(doIBL==false){
     for(int i=1744; i < 2024; i++){
@@ -74,6 +79,7 @@ PixelMonModules1D::PixelMonModules1D(std::string name, std::string title, int nb
     }
   }
   formatHist("",doIBL);
+  //formatHist(doIBL);
   Dummy=0;
 }
 
@@ -83,6 +89,7 @@ PixelMonModules1D::PixelMonModules1D(std::string name, std::string title, int nb
   for(int i=0; i < 1744 +280*doIBL; i++)
     {
       getHist(i) = new TH1F((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, low, high);
+      //getHist(i) = TH1F_LW::create((getHistName(i,false,doIBL)+"_"+name).c_str(), (getHistName(i,false,doIBL)+" "+title).c_str(), nbins, low, high);
     }
   if(doIBL==false){
     for(int i=1744; i < 2024; i++){
@@ -90,17 +97,17 @@ PixelMonModules1D::PixelMonModules1D(std::string name, std::string title, int nb
     }
   }
   formatHist("",doIBL);
+  //formatHist(doIBL);
   Dummy=0;
 }
 
 PixelMonModules1D::~PixelMonModules1D()
 {
   for(int i=0; i < 2024; i++)
-    {
-      if(getHist(i)){
-	delete getHist(i);
-      }
-    }
+  {
+     if(getHist(i)){ delete getHist(i); }
+     //if(getHist(i)){ LWHist::safeDelete( getHist(i) ); }
+  }
 }
 
 PixelMonModules2D::PixelMonModules2D(std::string name, std::string title, int nbins0, double low0, double high0, int nbins1, double low1, double high1, bool doIBL)
@@ -139,24 +146,24 @@ void PixelMonModulesProf::Reset()
     }
 }
 
-double PixelMonModulesProf::GetBinContent(double value, Identifier &id, const PixelID* pixID)
-{
-  int bec = pixID->barrel_ec(id);
-  int ld  = pixID->layer_disk(id);
-  int pm  = pixID->phi_module(id);
-
-  if(bec==2)  return A[ld][pm]->GetBinContent(A[ld][pm]->FindBin(value)); 
-  else if(bec==-2)return C[ld][pm]->GetBinContent(C[ld][pm]->FindBin(value));
-  else if(bec==0)
-    {
-      int em  = pixID->eta_module(id);
-      if(ld ==0) return B0[em+6][pm]->GetBinContent(B0[em+6][pm]->FindBin(value));
-      else if(ld ==1) return B1[em+6][pm]->GetBinContent(B1[em+6][pm]->FindBin(value));
-      else if(ld ==2) return B2[em+6][pm]->GetBinContent(B2[em+6][pm]->FindBin(value));
-      else if (ld==-1)return IBL[em+10][pm]->GetBinContent(IBL[em+10][pm]->FindBin(value));
-    }
-  return 0.0;
-}
+//double PixelMonModulesProf::GetBinContent(double value, Identifier &id, const PixelID* pixID)
+//{
+//  int bec = pixID->barrel_ec(id);
+//  int ld  = pixID->layer_disk(id);
+//  int pm  = pixID->phi_module(id);
+//
+//  if(bec==2)  return A[ld][pm]->GetBinContent(A[ld][pm]->FindBin(value)); 
+//  else if(bec==-2)return C[ld][pm]->GetBinContent(C[ld][pm]->FindBin(value));
+//  else if(bec==0)
+//    {
+//      int em  = pixID->eta_module(id);
+//      if(ld ==0) return B0[em+6][pm]->GetBinContent(B0[em+6][pm]->FindBin(value));
+//      else if(ld ==1) return B1[em+6][pm]->GetBinContent(B1[em+6][pm]->FindBin(value));
+//      else if(ld ==2) return B2[em+6][pm]->GetBinContent(B2[em+6][pm]->FindBin(value));
+//      else if (ld==-1)return IBL[em+10][pm]->GetBinContent(IBL[em+10][pm]->FindBin(value));
+//    }
+//  return 0.0;
+//}
 
 StatusCode PixelMonModulesProf::regHist(ManagedMonitorToolBase* thisptr, std::string path, ManagedMonitorToolBase::Interval_t Run, bool doIBL)
 {
@@ -250,15 +257,15 @@ double PixelMonModules1D::GetBinContent(double value, Identifier &id, const Pixe
   int ld  = pixID->layer_disk(id);
   int pm  = pixID->phi_module(id);
 
-  if(bec==2)  return A[ld][pm]->GetBinContent(A[ld][pm]->FindBin(value)); 
-  else if(bec==-2)return C[ld][pm]->GetBinContent(C[ld][pm]->FindBin(value));
+  if(bec==2) return A[ld][pm]->GetBinContent(A[ld][pm]->GetXaxis()->FindBin(value)); 
+  else if(bec==-2)return C[ld][pm]->GetBinContent(C[ld][pm]->GetXaxis()->FindBin(value));
   else if(bec==0)
     {
       int em  = pixID->eta_module(id);
-      if(ld ==0) return B0[em+6][pm]->GetBinContent(B0[em+6][pm]->FindBin(value));
-      else if(ld ==1) return B1[em+6][pm]->GetBinContent(B1[em+6][pm]->FindBin(value));
-      else if(ld ==2) return B2[em+6][pm]->GetBinContent(B2[em+6][pm]->FindBin(value));
-      else if (ld==-1)return IBL[em+10][pm]->GetBinContent(IBL[em+10][pm]->FindBin(value));
+      if(ld ==0) return B0[em+6][pm]->GetBinContent(B0[em+6][pm]->GetXaxis()->FindBin(value));
+      else if(ld ==1) return B1[em+6][pm]->GetBinContent(B1[em+6][pm]->GetXaxis()->FindBin(value));
+      else if(ld ==2) return B2[em+6][pm]->GetBinContent(B2[em+6][pm]->GetXaxis()->FindBin(value));
+      else if (ld==-1)return IBL[em+10][pm]->GetBinContent(IBL[em+10][pm]->GetXaxis()->FindBin(value));
     }
   return 0.0;
 }
@@ -344,7 +351,7 @@ void PixelMonModules1D::SetBinLabel(const char* label, int binN)
     }
 }
 
-TProfile* &PixelMonModulesProf::getHist(int i)
+TProfile_LW* &PixelMonModulesProf::getHist(int i)
 {
   if(i < 286) return B0[i/22][i%22];
   i -= 286;
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonProfiles.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonProfiles.cxx
index 21e9f34976ec6a6126cbd6608da22d68fe504a2b..4234c65cd0963a5fd2df712a778cf199a5182189 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonProfiles.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonProfiles.cxx
@@ -8,21 +8,30 @@
 
 #include "PixelMonitoring/PixelMonProfiles.h"
 #include "InDetIdentifier/PixelID.h"
-#include "TProfile2D.h"
+//#include "TProfile2D.h"
+#include "LWHists/TProfile2D_LW.h"
 #include "GaudiKernel/StatusCode.h"     
 #include <string.h>
 
 PixelMonProfiles::PixelMonProfiles(std::string name, std::string title )
 {
 
-  IBL3D = new TProfile2D((name+"_IBL3D").c_str(),(title + ", IBL 3D module " + ";eta index of module;phi index of module").c_str(),8,-.5,7.5,14,-0.5,13.5);
-  IBL2D = new TProfile2D((name+"_IBL2D").c_str(),(title + ", IBL planar module " + ";eta index of module;phi index of module").c_str(),12,-6.5,5.5,14,-0.5,13.5);
-  IBL   = new TProfile2D((name+"_IBL").c_str(),  (title + ", IBL " + ";eta index of module;phi index of module").c_str(), 32, -16.5, 15.5, 14, -0.5, 13.5);
-  B0    = new TProfile2D((name+"_B0").c_str(),   (title + ", B0 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,22,-0.5,21.5);
-  B1    = new TProfile2D((name+"_B1").c_str(),   (title + ", B1 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,38,-0.5,37.5);
-  B2    = new TProfile2D((name+"_B2").c_str(),   (title + ", B2 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,52,-0.5,51.5);
-  A     = new TProfile2D((name+"_ECA" ).c_str(), (title + ", ECA "+ ";disk number;phi index of module").c_str(),         3,-0.5,2.5,48,-0.5,47.5);
-  C     = new TProfile2D((name+"_ECC" ).c_str(), (title + ", ECC "+ ";disk number;phi index of module").c_str(),         3,-0.5,2.5,48,-0.5,47.5);
+  //IBL3D = new TProfile2D((name+"_IBL3D").c_str(),(title + ", IBL 3D module " + ";eta index of module;phi index of module").c_str(),8,-.5,7.5,14,-0.5,13.5);
+  //IBL2D = new TProfile2D((name+"_IBL2D").c_str(),(title + ", IBL planar module " + ";eta index of module;phi index of module").c_str(),12,-6.5,5.5,14,-0.5,13.5);
+  //IBL   = new TProfile2D((name+"_IBL").c_str(),  (title + ", IBL " + ";eta index of module;phi index of module").c_str(), 32, -16.5, 15.5, 14, -0.5, 13.5);
+  //B0    = new TProfile2D((name+"_B0").c_str(),   (title + ", B0 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,22,-0.5,21.5);
+  //B1    = new TProfile2D((name+"_B1").c_str(),   (title + ", B1 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,38,-0.5,37.5);
+  //B2    = new TProfile2D((name+"_B2").c_str(),   (title + ", B2 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,52,-0.5,51.5);
+  //A     = new TProfile2D((name+"_ECA" ).c_str(), (title + ", ECA "+ ";disk number;phi index of module").c_str(),         3,-0.5,2.5,48,-0.5,47.5);
+  //C     = new TProfile2D((name+"_ECC" ).c_str(), (title + ", ECC "+ ";disk number;phi index of module").c_str(),         3,-0.5,2.5,48,-0.5,47.5);
+  IBL3D = TProfile2D_LW::create((name+"_IBL3D").c_str(),(title + ", IBL 3D module " + ";eta index of module;phi index of module").c_str(),8,-.5,7.5,14,-0.5,13.5);
+  IBL2D = TProfile2D_LW::create((name+"_IBL2D").c_str(),(title + ", IBL planar module " + ";eta index of module;phi index of module").c_str(),12,-6.5,5.5,14,-0.5,13.5);
+  IBL   = TProfile2D_LW::create((name+"_IBL").c_str(),  (title + ", IBL " + ";eta index of module;phi index of module").c_str(), 32, -16.5, 15.5, 14, -0.5, 13.5);
+  B0    = TProfile2D_LW::create((name+"_B0").c_str(),   (title + ", B0 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,22,-0.5,21.5);
+  B1    = TProfile2D_LW::create((name+"_B1").c_str(),   (title + ", B1 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,38,-0.5,37.5);
+  B2    = TProfile2D_LW::create((name+"_B2").c_str(),   (title + ", B2 " + ";eta index of module;phi index of module").c_str(),13,-6.5,6.5,52,-0.5,51.5);
+  A     = TProfile2D_LW::create((name+"_ECA" ).c_str(), (title + ", ECA "+ ";disk number;phi index of module").c_str(),         3,-0.5,2.5,48,-0.5,47.5);
+  C     = TProfile2D_LW::create((name+"_ECC" ).c_str(), (title + ", ECC "+ ";disk number;phi index of module").c_str(),         3,-0.5,2.5,48,-0.5,47.5);
 
 
   formatHist();
@@ -31,14 +40,22 @@ PixelMonProfiles::PixelMonProfiles(std::string name, std::string title )
 
 PixelMonProfiles::~PixelMonProfiles()
 {
-   delete IBL3D;
-   delete IBL2D;
-   delete IBL;
-   delete B0;
-   delete B1;
-   delete B2;
-   delete A;
-   delete C;
+   //delete IBL3D;
+   //delete IBL2D;
+   //delete IBL;
+   //delete B0;
+   //delete B1;
+   //delete B2;
+   //delete A;
+   //delete C;
+   LWHist::safeDelete(IBL3D);
+   LWHist::safeDelete(IBL2D);
+   LWHist::safeDelete(IBL);
+   LWHist::safeDelete(B0);
+   LWHist::safeDelete(B1);
+   LWHist::safeDelete(B2);
+   LWHist::safeDelete(A);
+   LWHist::safeDelete(C);
 }
 
 void PixelMonProfiles::SetMaxValue(float max)
@@ -230,14 +247,14 @@ void PixelMonProfiles::formatHist()
    A->GetYaxis()->SetLabelSize(0.02);
    C->GetYaxis()->SetLabelSize(0.02);
    //Move the lable so you can read it
-   IBL2D->GetYaxis()->SetTitleOffset(1.35);
-   IBL3D->GetYaxis()->SetTitleOffset(1.35);
-   IBL->GetYaxis()->SetTitleOffset(1.35);
-   B0->GetYaxis()->SetTitleOffset(1.35);
-   B1->GetYaxis()->SetTitleOffset(1.35);
-   B2->GetYaxis()->SetTitleOffset(1.35);
-   A->GetYaxis()->SetTitleOffset(1.35);
-   C->GetYaxis()->SetTitleOffset(1.35);
+   //IBL2D->GetYaxis()->SetTitleOffset(1.35);
+   //IBL3D->GetYaxis()->SetTitleOffset(1.35);
+   //IBL->GetYaxis()->SetTitleOffset(1.35);
+   //B0->GetYaxis()->SetTitleOffset(1.35);
+   //B1->GetYaxis()->SetTitleOffset(1.35);
+   //B2->GetYaxis()->SetTitleOffset(1.35);
+   //A->GetYaxis()->SetTitleOffset(1.35);
+   //C->GetYaxis()->SetTitleOffset(1.35);
    //put histograms in the easier to read colz format
    IBL->SetOption("colz");
    IBL2D->SetOption("colz");
@@ -257,14 +274,14 @@ void PixelMonProfiles::formatHist()
    A->SetMinimum(0.);     
    C->SetMinimum(0.);    
    //Remvoe the stats box because it's in the way
-   IBL->SetStats(0.);
-   IBL2D->SetStats(0.);
-   IBL3D->SetStats(0.);
-   B0->SetStats(0.);
-   B1->SetStats(0.);
-   B2->SetStats(0.);
-   A->SetStats(0.);
-   C->SetStats(0.);
+   //IBL->SetStats(0.);
+   //IBL2D->SetStats(0.);
+   //IBL3D->SetStats(0.);
+   //B0->SetStats(0.);
+   //B1->SetStats(0.);
+   //B2->SetStats(0.);
+   //A->SetStats(0.);
+   //C->SetStats(0.);
    
 }
 
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Status.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Status.cxx
index 5e0e71623d6d8638dba98c321b040e5db429008a..c424d8b05792f88c7b7837baeb6920fbb3c810e2 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Status.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Status.cxx
@@ -66,39 +66,20 @@ StatusCode PixelMainMon::BookStatusMon(void)
    int nbins_LB = 2500; double min_LB = -0.5; double max_LB = min_LB + (1.0*nbins_LB);
    std::string atext_LB = ";lumi block";
    std::string atext_nmod = ";# modules/event";
+   const std::string modlabel[PixLayerIBL2D3D::COUNT] = {"ECA", "ECC", "B0", "B1", "B2", "IBL", "IBL2D", "IBL3D"};
 
-   tmp = "BadModules_per_lumi"; tmp2 = "Number of bad modules (bad+active) per event per LB";
-   sc = statusHistos.regHist(m_badModules_per_lumi     = TProfile_LW::create(tmp.c_str(),           (tmp2+        m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_badModules_per_lumi_ECA = TProfile_LW::create((tmp + "_ECA").c_str(),(tmp2+", ECA"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_badModules_per_lumi_ECC = TProfile_LW::create((tmp + "_ECC").c_str(),(tmp2+", ECC"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_badModules_per_lumi_B0  = TProfile_LW::create((tmp + "_B0").c_str(), (tmp2+", B0" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_badModules_per_lumi_B1  = TProfile_LW::create((tmp + "_B1").c_str(), (tmp2+", B1" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_badModules_per_lumi_B2  = TProfile_LW::create((tmp + "_B2").c_str(), (tmp2+", B2" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   if(m_doIBL){
-   sc = statusHistos.regHist(m_badModules_per_lumi_IBL = TProfile_LW::create((tmp + "_IBL").c_str(),(tmp2+", IBL"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   }
-
-   //tmp = "DisabledModules_per_lumi"; tmp2 = "Number of disabled modules (inactive or bad) per event per LB";
-   tmp = "DisabledModules_per_lumi"; tmp2 = "Number of disabled modules per event per LB";
-   sc = statusHistos.regHist(m_disabledModules_per_lumi     = TProfile_LW::create(tmp.c_str(),            (tmp2+        m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_disabledModules_per_lumi_PIX = TProfile_LW::create((tmp + "_PIX").c_str(), (tmp2+", PIX"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_disabledModules_per_lumi_ECA = TProfile_LW::create((tmp + "_ECA").c_str(), (tmp2+", ECA"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_disabledModules_per_lumi_ECC = TProfile_LW::create((tmp + "_ECC").c_str(), (tmp2+", ECC"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_disabledModules_per_lumi_B0  = TProfile_LW::create((tmp + "_B0").c_str(),  (tmp2+", B0" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_disabledModules_per_lumi_B1  = TProfile_LW::create((tmp + "_B1").c_str(),  (tmp2+", B1" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_disabledModules_per_lumi_B2  = TProfile_LW::create((tmp + "_B2").c_str(),  (tmp2+", B2" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   if(m_doIBL){
-   sc = statusHistos.regHist(m_disabledModules_per_lumi_IBL = TProfile_LW::create((tmp + "_IBL").c_str(), (tmp2+", IBL"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   }
+   for( int i=0; i<PixLayerIBL2D3D::COUNT; i++){
+      tmp = makeHistname(("BadModules_per_lumi_"+modlabel[i]), false);
+      tmp2 = makeHisttitle(("Number of bad modules (bad+active) per event per LB, "+modlabel[i]), (atext_LB+atext_nmod), false);
+      sc = statusHistos.regHist(m_badModules_per_lumi_mod[i] = TProfile_LW::create(tmp.c_str(), (tmp2+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
 
-   tmp = "BadDisabledModules_per_lumi"; tmp2 = "Number of disabled & bad modules per event per LB";
-   sc = statusHistos.regHist(m_baddisabledModules_per_lumi_ECA = TProfile_LW::create((tmp + "_ECA").c_str(), (tmp2+", ECA"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_baddisabledModules_per_lumi_ECC = TProfile_LW::create((tmp + "_ECC").c_str(), (tmp2+", ECC"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_baddisabledModules_per_lumi_B0  = TProfile_LW::create((tmp + "_B0").c_str(),  (tmp2+", B0" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_baddisabledModules_per_lumi_B1  = TProfile_LW::create((tmp + "_B1").c_str(),  (tmp2+", B1" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   sc = statusHistos.regHist(m_baddisabledModules_per_lumi_B2  = TProfile_LW::create((tmp + "_B2").c_str(),  (tmp2+", B2" +m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
-   if(m_doIBL){
-   sc = statusHistos.regHist(m_baddisabledModules_per_lumi_IBL = TProfile_LW::create((tmp + "_IBL").c_str(), (tmp2+", IBL"+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
+      tmp = makeHistname(("DisabledModules_per_lumi_"+modlabel[i]), false);
+      tmp2 = makeHisttitle(("Number of disabled modules per event per LB, "+modlabel[i]), (atext_LB+atext_nmod), false);
+      sc = statusHistos.regHist(m_disabledModules_per_lumi_mod[i] = TProfile_LW::create(tmp.c_str(), (tmp2+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
+     
+      tmp = makeHistname(("BadDisabledModules_per_lumi_"+modlabel[i]), false);
+      tmp2 = makeHisttitle(("Number of disabled & bad modules per event per LB, "+modlabel[i]), (atext_LB+atext_nmod), false);
+      sc = statusHistos.regHist(m_baddisabledModules_per_lumi_mod[i] = TProfile_LW::create(tmp.c_str(), (tmp2+m_histTitleExt+atext_LB+atext_nmod).c_str(), nbins_LB, min_LB, max_LB));
    }
 
    if(sc.isFailure())if(msgLvl(MSG::WARNING)) msg(MSG::WARNING)  << "histograms not booked" << endreq;         
@@ -128,20 +109,10 @@ StatusCode PixelMainMon::FillStatusMon(void)
    PixelID::const_id_iterator idItEnd = m_pixelid->wafer_end();
 
    int nBad=0;
-   int nBad_ECA=0;
-   int nBad_ECC=0;
-   int nBad_IBL=0;
-   int nBad_B0=0;
-   int nBad_B1=0;
-   int nBad_B2=0;
+   int nBad_mod[PixLayerIBL2D3D::COUNT]={0};
 
    int nDisabled=0;
-   int nDisabled_ECA=0;
-   int nDisabled_ECC=0;
-   int nDisabled_IBL=0;
-   int nDisabled_B0=0;
-   int nDisabled_B1=0;
-   int nDisabled_B2=0;
+   int nDisabled_mod[PixLayerIBL2D3D::COUNT]={0};
 
 
    if(m_isNewLumiBlock && m_Status_modules) m_Status_modules->Reset();
@@ -150,6 +121,12 @@ StatusCode PixelMainMon::FillStatusMon(void)
    {
       Identifier WaferID = *idIt;
       IdentifierHash id_hash = m_pixelid->wafer_hash(WaferID); 
+      int pixlayer = GetPixLayerID(m_pixelid->barrel_ec(WaferID), m_pixelid->layer_disk(WaferID), m_doIBL);
+      int pixlayeribl2d3d = 0;
+      if( pixlayer == PixLayer::kIBL ){
+         pixlayeribl2d3d = GetPixLayerIDIBL2D3D(m_pixelid->barrel_ec(WaferID), m_pixelid->layer_disk(WaferID), m_pixelid->eta_module(WaferID), m_doIBL);
+      }
+      if( pixlayer == 99 ) continue;
 
       // check in order of occurrence to reduce number of calls to conditions service
       if      (m_pixelCondSummarySvc->isActive(id_hash) == true && m_pixelCondSummarySvc->isGood(id_hash) == true ) {Index=0;}
@@ -166,14 +143,8 @@ StatusCode PixelMainMon::FillStatusMon(void)
       {
 	      if (Index == 1) {
 	         nBad++;
-	         if(m_pixelid->barrel_ec(WaferID)==2)  nBad_ECA++;
-	         if(m_pixelid->barrel_ec(WaferID)==-2) nBad_ECC++;
-	         if(m_pixelid->barrel_ec(WaferID)==0) {
-	            if(m_pixelid->layer_disk(WaferID)==0 && m_doIBL) nBad_IBL++;
-	            if(m_pixelid->layer_disk(WaferID)==0+m_doIBL) nBad_B0++;
-	            if(m_pixelid->layer_disk(WaferID)==1+m_doIBL) nBad_B1++;
-	            if(m_pixelid->layer_disk(WaferID)==2+m_doIBL) nBad_B2++;
-            }
+            nBad_mod[pixlayer]++;
+            if(pixlayeribl2d3d != 0) nBad_mod[pixlayeribl2d3d]++;
 	      }
 	      // inactive or bad modules
 	      // should maybe use only inactive modules for these, however, since tracking etc use "disabled module" as !(active+good)
@@ -181,14 +152,8 @@ StatusCode PixelMainMon::FillStatusMon(void)
          if(Index == 2)
 	      {
             nDisabled++;
-	         if(m_pixelid->barrel_ec(WaferID)==2)  nDisabled_ECA++;
-	         if(m_pixelid->barrel_ec(WaferID)==-2) nDisabled_ECC++;
-	         if (m_pixelid->barrel_ec(WaferID)==0) {
-	            if(m_pixelid->layer_disk(WaferID)==0 && m_doIBL) nDisabled_IBL++;
-	            if(m_pixelid->layer_disk(WaferID)==0+m_doIBL) nDisabled_B0++;
-	            if(m_pixelid->layer_disk(WaferID)==1+m_doIBL) nDisabled_B1++;
-	            if(m_pixelid->layer_disk(WaferID)==2+m_doIBL) nDisabled_B2++;
-	         }
+            nDisabled_mod[pixlayer]++;
+            if(pixlayeribl2d3d != 0) nDisabled_mod[pixlayeribl2d3d]++;
          }
 
 	      if (m_Status_modules)
@@ -213,31 +178,14 @@ StatusCode PixelMainMon::FillStatusMon(void)
       }
    } // End of loop 
 
-   static float nmod[PixLayer::COUNT] = {144., 144., 286., 494., 676., 280.};
-
-   if(m_disabledModules_per_lumi)     m_disabledModules_per_lumi->Fill(m_manager->lumiBlockNumber(),nDisabled); 
-   if(m_disabledModules_per_lumi_PIX) m_disabledModules_per_lumi_PIX->Fill(m_manager->lumiBlockNumber(),nDisabled-nDisabled_IBL);
-   if(m_disabledModules_per_lumi_ECA) m_disabledModules_per_lumi_ECA->Fill(m_manager->lumiBlockNumber(),nDisabled_ECA); 
-   if(m_disabledModules_per_lumi_ECC) m_disabledModules_per_lumi_ECC->Fill(m_manager->lumiBlockNumber(),nDisabled_ECC); 
-   if(m_disabledModules_per_lumi_IBL) m_disabledModules_per_lumi_IBL->Fill(m_manager->lumiBlockNumber(),nDisabled_IBL);
-   if(m_disabledModules_per_lumi_B0)  m_disabledModules_per_lumi_B0->Fill(m_manager->lumiBlockNumber(),nDisabled_B0); 
-   if(m_disabledModules_per_lumi_B1)  m_disabledModules_per_lumi_B1->Fill(m_manager->lumiBlockNumber(),nDisabled_B1); 
-   if(m_disabledModules_per_lumi_B2)  m_disabledModules_per_lumi_B2->Fill(m_manager->lumiBlockNumber(),nDisabled_B2); 
-
-   if(m_badModules_per_lumi)     m_badModules_per_lumi->Fill(m_manager->lumiBlockNumber(),nBad); 
-   if(m_badModules_per_lumi_ECA) m_badModules_per_lumi_ECA->Fill(m_manager->lumiBlockNumber(),nBad_ECA/nmod[PixLayer::kECA]); 
-   if(m_badModules_per_lumi_ECC) m_badModules_per_lumi_ECC->Fill(m_manager->lumiBlockNumber(),nBad_ECC/nmod[PixLayer::kECC]); 
-   if(m_badModules_per_lumi_IBL) m_badModules_per_lumi_IBL->Fill(m_manager->lumiBlockNumber(),nBad_IBL/nmod[PixLayer::kIBL]);
-   if(m_badModules_per_lumi_B0)  m_badModules_per_lumi_B0->Fill(m_manager->lumiBlockNumber(),nBad_B0/nmod[PixLayer::kB0]); 
-   if(m_badModules_per_lumi_B1)  m_badModules_per_lumi_B1->Fill(m_manager->lumiBlockNumber(),nBad_B1/nmod[PixLayer::kB1]); 
-   if(m_badModules_per_lumi_B2)  m_badModules_per_lumi_B2->Fill(m_manager->lumiBlockNumber(),nBad_B2/nmod[PixLayer::kB2]); 
-
-   if(m_baddisabledModules_per_lumi_ECA) m_baddisabledModules_per_lumi_ECA->Fill(m_manager->lumiBlockNumber(),nDisabled_ECA+nBad_ECA); 
-   if(m_baddisabledModules_per_lumi_ECC) m_baddisabledModules_per_lumi_ECC->Fill(m_manager->lumiBlockNumber(),nDisabled_ECC+nBad_ECC); 
-   if(m_baddisabledModules_per_lumi_IBL) m_baddisabledModules_per_lumi_IBL->Fill(m_manager->lumiBlockNumber(),nDisabled_IBL+nBad_IBL);
-   if(m_baddisabledModules_per_lumi_B0)  m_baddisabledModules_per_lumi_B0->Fill(m_manager->lumiBlockNumber(),nDisabled_B0+nBad_B0); 
-   if(m_baddisabledModules_per_lumi_B1)  m_baddisabledModules_per_lumi_B1->Fill(m_manager->lumiBlockNumber(),nDisabled_B1+nBad_B1); 
-   if(m_baddisabledModules_per_lumi_B2)  m_baddisabledModules_per_lumi_B2->Fill(m_manager->lumiBlockNumber(),nDisabled_B2+nBad_B2); 
+   //static float nmod[PixLayer::COUNT] = {144., 144., 286., 494., 676., 280.};
+   static float nmod2[PixLayerIBL2D3D::COUNT] = {144., 144., 286., 494., 676., 280., 168., 112.};
+
+   for(int i=0 ; i<PixLayerIBL2D3D::COUNT ; i++){
+     if(m_badModules_per_lumi_mod[i]) m_badModules_per_lumi_mod[i]->Fill( m_manager->lumiBlockNumber(), nBad_mod[i]/nmod2[i] );
+     if(m_disabledModules_per_lumi_mod[i]) m_disabledModules_per_lumi_mod[i]->Fill( m_manager->lumiBlockNumber(), nDisabled_mod[i] );
+     if(m_baddisabledModules_per_lumi_mod[i]) m_baddisabledModules_per_lumi_mod[i]->Fill(m_manager->lumiBlockNumber(),nDisabled_mod[i]+nBad_mod[i]); 
+   }
 
    if (nDisabled > (1744+280*m_doIBL)*0.50) {
      m_majorityDisabled = true;
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Track.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Track.cxx
index 45b5e2b27501a532bb5bcbd9fce555ffaa2c2faf..b60f27e5099bb5f042af1e55f29843d50cf4977f 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Track.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Track.cxx
@@ -25,6 +25,7 @@
 #include "LWHists/TH2F_LW.h"
 #include "LWHists/TH2I_LW.h"
 #include "LWHists/TProfile_LW.h"
+#include "LWHists/TProfile2D_LW.h"
 #include <sstream>
 #include <algorithm>
 
@@ -36,6 +37,7 @@
 #include "TrkTrackSummary/InDetTrackSummary.h"
 #include "TrkToolInterfaces/ITrackHoleSearchTool.h"
 #include "PixelMonitoring/PixelMon2DMaps.h"
+#include "PixelMonitoring/PixelMon2DMapsLW.h"
 #include "PixelMonitoring/PixelMonModules.h"
 #include "EventPrimitives/EventPrimitives.h"
 #include "EventPrimitives/EventPrimitivesHelpers.h"
@@ -60,15 +62,6 @@ StatusCode PixelMainMon::BookTrackMon(void)
      sc=trackHistos.regHist(m_track_pull_eta  = TH1F_LW::create("m_Pixel_track_pull_eta", ("m_Pixel_track_pull_eta (pixel tracks)" + m_histTitleExt).c_str(),100,-2,2));   
      sc=trackHistos.regHist(m_track_chi2      = TH1F_LW::create("m_Pixel_track_chi2", ("chi2 of reconstructed track (pixel tracks)" + m_histTitleExt + "; #chi^{2}/DoF;").c_str(), 50,-0.,10.));
 
-     if(m_do2DMaps && !m_doOnline){
-       m_tsos_hitmap = new PixelMon2DMaps("TSOS_Measurement", ("TSOS of type Measurement" + m_histTitleExt).c_str());
-       sc = m_tsos_hitmap->regHist(trackHistos);
-       m_tsos_holemap = new PixelMon2DMaps("TSOS_Hole", ("TSOS of type Hole" + m_histTitleExt).c_str());
-       sc = m_tsos_holemap->regHist(trackHistos);
-       m_tsos_outliermap = new PixelMon2DMaps("TSOS_Outlier", ("TSOS of type Outlier" + m_histTitleExt).c_str());
-       sc = m_tsos_outliermap->regHist(trackHistos);
-     }
-
      if(m_doModules){
        m_tsos_hiteff_vs_lumi = new PixelMonModulesProf("TSOS_HitEfficiency",("TSOS-based hit efficiency in module" + m_histTitleExt).c_str(),2500,-0.5,2499.5,m_doIBL);
        sc = m_tsos_hiteff_vs_lumi->regHist(this,(path+"/Modules_TSOSHitEff").c_str(),run, m_doIBL);
@@ -90,20 +83,20 @@ StatusCode PixelMainMon::BookTrackMon(void)
        sc=trackHistos.regHist(m_track_chi2_bclgt1_highpt = TH1F_LW::create("m_Pixel_track_chi2_bclgt1_highpt", ("track chi2 with >1 1-hit, low-ToT cluster (pT>=10GeV)" + m_histTitleExt + "; #chi^{2}/DoF;").c_str(), 50,-0.,10.));
      }
 
-     sc=trackHistos.regHist(m_track_clusToT = TH1F_LW::create("m_track_clusToT",("Cluster on track ToT check"+ m_histTitleExt +"; ToT;").c_str(),250,0.,250.));
-     sc=trackHistos.regHist(m_track_qOverP    = TH1F_LW::create("m_Pixel_track_qOverP", ("Reconstructed inverse momentum of track (pixel tracks)" + m_histTitleExt + "; inverse momentum [GeV^{-1}];").c_str(), 100,-7.5,7.5));
-     sc=trackHistos.regHist(m_track_qOverP_inv= TH1F_LW::create("m_Pixel_track_qOverP_inv", ("Reconstructed momentum of track (pixel tracks)" + m_histTitleExt + "; momentum [GeV];").c_str(), 100,-20,20));
-     sc=trackHistos.regHist(m_track_pt        = TH1F_LW::create("m_Pixel_track_pt", ("Reconstructed transverse momentum of track (pixel tracks)" + m_histTitleExt + "; p_{T} [GeV];").c_str(), 50,0.,10.));
-     sc=trackHistos.regHist(m_track_d0        = TH1F_LW::create("m_Pixel_track_d0", ("Reconstructed d0 of track (pixel tracks)" + m_histTitleExt + "; d_{0} [mm];").c_str(), 80,-20.,20.));
-     sc=trackHistos.regHist(m_track_z0        = TH1F_LW::create("m_Pixel_track_z0", ("Reconstructed z0 of track (pixel tracks)" + m_histTitleExt + "; z_{0} [mm];").c_str(), 80,-400.,400.));
-     sc=trackHistos.regHist(m_track_phi0      = TH1F_LW::create("m_Pixel_track_phi0", ("Reconstructed phi0 of track (pixel tracks)" + m_histTitleExt + "; #phi_{0};").c_str(), 40,-4.,4.));
-     sc=trackHistos.regHist(m_track_theta     = TH1F_LW::create("m_Pixel_track_theta", ("Reconstructed theta of track (pixel tracks)" + m_histTitleExt + "; #theta;").c_str(), 40,-0.,4.));
-     sc=trackHistos.regHist(m_track_eta       = TH1F_LW::create("m_Pixel_track_eta", ("Reconstructed eta of track (pixel tracks)" + m_histTitleExt + "; #eta;").c_str(), 40,-4.,4.));
+     //sc=trackHistos.regHist(m_track_clusToT = TH1F_LW::create("m_track_clusToT",("Cluster on track ToT check"+ m_histTitleExt +"; ToT;").c_str(),250,0.,250.));
+     //sc=trackHistos.regHist(m_track_qOverP    = TH1F_LW::create("m_Pixel_track_qOverP", ("Reconstructed inverse momentum of track (pixel tracks)" + m_histTitleExt + "; inverse momentum [GeV^{-1}];").c_str(), 100,-7.5,7.5));
+     //sc=trackHistos.regHist(m_track_qOverP_inv= TH1F_LW::create("m_Pixel_track_qOverP_inv", ("Reconstructed momentum of track (pixel tracks)" + m_histTitleExt + "; momentum [GeV];").c_str(), 100,-20,20));
+     //sc=trackHistos.regHist(m_track_pt        = TH1F_LW::create("m_Pixel_track_pt", ("Reconstructed transverse momentum of track (pixel tracks)" + m_histTitleExt + "; p_{T} [GeV];").c_str(), 50,0.,10.));
+     //sc=trackHistos.regHist(m_track_d0        = TH1F_LW::create("m_Pixel_track_d0", ("Reconstructed d0 of track (pixel tracks)" + m_histTitleExt + "; d_{0} [mm];").c_str(), 80,-20.,20.));
+     //sc=trackHistos.regHist(m_track_z0        = TH1F_LW::create("m_Pixel_track_z0", ("Reconstructed z0 of track (pixel tracks)" + m_histTitleExt + "; z_{0} [mm];").c_str(), 80,-400.,400.));
+     //sc=trackHistos.regHist(m_track_phi0      = TH1F_LW::create("m_Pixel_track_phi0", ("Reconstructed phi0 of track (pixel tracks)" + m_histTitleExt + "; #phi_{0};").c_str(), 40,-4.,4.));
+     //sc=trackHistos.regHist(m_track_theta     = TH1F_LW::create("m_Pixel_track_theta", ("Reconstructed theta of track (pixel tracks)" + m_histTitleExt + "; #theta;").c_str(), 40,-0.,4.));
+     //sc=trackHistos.regHist(m_track_eta       = TH1F_LW::create("m_Pixel_track_eta", ("Reconstructed eta of track (pixel tracks)" + m_histTitleExt + "; #eta;").c_str(), 40,-4.,4.));
      sc=trackHistos.regHist(m_tracks_per_lumi = TH1I_LW::create("tracks_per_lumi", ("Number of tracks per LB (pixel tracks)" + m_histTitleExt + ";lumi block;# tracks").c_str(),2500,-0.5,2499.5));
      sc=trackHistos.regHist(m_tracksPerEvt_per_lumi = TProfile_LW::create("tracksPerEvt_per_lumi", ("Number of tracks per event per LB (pixel tracks)" + m_histTitleExt + ";lumi block;tracks/event").c_str(),2500,-0.5,2499.5));
      sc=trackHistos.regHist(m_trackRate_per_lumi    = TH1F_LW::create("trackRate_per_lumi", ("Track rate per LB (pixel tracks)" + m_histTitleExt + ";lumi block;#tracks/sec").c_str(),2500,-0.5,2499.5));
-     sc=trackHistos.regHist(m_track_dedx      = TH2F_LW::create("m_Pixel_track_dedx", ("Reconstructed dE/dx of track (pixel tracks)" + m_histTitleExt + "; momentum [MeV]; dE/dx [MeV g cm^{-2}]").c_str(),125,-2500,2500,100,0,10));
-     sc=trackHistos.regHist(m_track_mass_dedx = TH1F_LW::create("m_Pixel_track_mass_dedx", ("Reconstructed mass using dE/dx of track (pixel tracks)" + m_histTitleExt + "; mass [MeV]; ").c_str(),125,0,2500));
+     //sc=trackHistos.regHist(m_track_dedx      = TH2F_LW::create("m_Pixel_track_dedx", ("Reconstructed dE/dx of track (pixel tracks)" + m_histTitleExt + "; momentum [MeV]; dE/dx [MeV g cm^{-2}]").c_str(),125,-2500,2500,100,0,10));
+     //sc=trackHistos.regHist(m_track_mass_dedx = TH1F_LW::create("m_Pixel_track_mass_dedx", ("Reconstructed mass using dE/dx of track (pixel tracks)" + m_histTitleExt + "; mass [MeV]; ").c_str(),125,0,2500));
    }
    else {
      sc=trackHistos.regHist(m_track_res_phi   = TH1F_LW::create("m_Pixel_track_res_phi", ("Pixel Residual LocX" + m_histTitleExt).c_str(),100,-0.1,0.1));
@@ -113,12 +106,12 @@ StatusCode PixelMainMon::BookTrackMon(void)
      sc=trackHistos.regHist(m_track_chi2      = TH1F_LW::create("m_Pixel_track_chi2", ("chi2 of reconstructed track" + m_histTitleExt + "; #chi^{2}/DoF;").c_str(), 50,-0.,10.));
 
      if(m_do2DMaps && !m_doOnline){
-       m_tsos_hitmap = new PixelMon2DMaps("TSOS_Measurement", ("TSOS of type Measurement" + m_histTitleExt).c_str());
-       sc = m_tsos_hitmap->regHist(trackHistos);
-       m_tsos_holemap = new PixelMon2DMaps("TSOS_Hole", ("TSOS of type Hole" + m_histTitleExt).c_str());
-       sc = m_tsos_holemap->regHist(trackHistos);
-       m_tsos_outliermap = new PixelMon2DMaps("TSOS_Outlier", ("TSOS of type Outlier" + m_histTitleExt).c_str());
-       sc = m_tsos_outliermap->regHist(trackHistos);
+       m_tsos_hitmap = new PixelMon2DMapsLW("TSOS_Measurement", ("TSOS of type Measurement" + m_histTitleExt), m_doIBL, false);
+       sc = m_tsos_hitmap->regHist(trackHistos, m_doIBL, false);
+       m_tsos_holemap = new PixelMon2DMapsLW("TSOS_Hole", ("TSOS of type Hole" + m_histTitleExt), m_doIBL, false);
+       sc = m_tsos_holemap->regHist(trackHistos, m_doIBL, false);
+       m_tsos_outliermap = new PixelMon2DMapsLW("TSOS_Outlier", ("TSOS of type Outlier" + m_histTitleExt), m_doIBL, false);
+       sc = m_tsos_outliermap->regHist(trackHistos, m_doIBL, false);
      }
 
      if(m_doModules){
@@ -142,21 +135,30 @@ StatusCode PixelMainMon::BookTrackMon(void)
        sc=trackHistos.regHist(m_track_chi2_bclgt1_highpt = TH1F_LW::create("m_Pixel_track_chi2_bclgt1_highpt", ("track chi2 with >1 1-hit, low-ToT cluster (pT>=10GeV)" + m_histTitleExt + "; #chi^{2}/DoF;").c_str(), 50,-0.,10.));
      }
 
-     sc=trackHistos.regHist(m_track_clusToT = TH1F_LW::create("m_track_clusToT",("Cluster on track ToT check"+ m_histTitleExt +"; ToT;").c_str(),250,0.,250.));
-     sc=trackHistos.regHist(m_track_qOverP    = TH1F_LW::create("m_Pixel_track_qOverP", ("Reconstructed inverse momentum of track" + m_histTitleExt + "; inverse momentum [GeV^{-1}];").c_str(), 100,-7.5,7.5));
-     sc=trackHistos.regHist(m_track_qOverP_inv= TH1F_LW::create("m_Pixel_track_qOverP_inv", ("Reconstructed momentum of track" + m_histTitleExt + "; momentum [GeV];").c_str(), 100,-20,20));
-     sc=trackHistos.regHist(m_track_pt        = TH1F_LW::create("m_Pixel_track_pt", ("Reconstructed transverse momentum of track" + m_histTitleExt + "; p_{T} [GeV];").c_str(), 50,0.,10.));
-     sc=trackHistos.regHist(m_track_d0        = TH1F_LW::create("m_Pixel_track_d0", ("Reconstructed d0 of track" + m_histTitleExt + "; d_{0} [mm];").c_str(), 80,-20.,20.));
-     sc=trackHistos.regHist(m_track_z0        = TH1F_LW::create("m_Pixel_track_z0", ("Reconstructed z0 of track" + m_histTitleExt + "; z_{0} [mm];").c_str(), 80,-400.,400.));
-     sc=trackHistos.regHist(m_track_phi0      = TH1F_LW::create("m_Pixel_track_phi0", ("Reconstructed phi0 of track" + m_histTitleExt + "; #phi_{0};").c_str(), 40,-4.,4.));
-     sc=trackHistos.regHist(m_track_theta     = TH1F_LW::create("m_Pixel_track_theta", ("Reconstructed theta of track" + m_histTitleExt + "; #theta;").c_str(), 40,-0.,4.));
-     sc=trackHistos.regHist(m_track_eta       = TH1F_LW::create("m_Pixel_track_eta", ("Reconstructed eta of track" + m_histTitleExt + "; #eta;").c_str(), 40,-4.,4.));
+     //sc=trackHistos.regHist(m_track_clusToT = TH1F_LW::create("m_track_clusToT",("Cluster on track ToT check"+ m_histTitleExt +"; ToT;").c_str(),250,0.,250.));
+     //sc=trackHistos.regHist(m_track_qOverP    = TH1F_LW::create("m_Pixel_track_qOverP", ("Reconstructed inverse momentum of track" + m_histTitleExt + "; inverse momentum [GeV^{-1}];").c_str(), 100,-7.5,7.5));
+     //sc=trackHistos.regHist(m_track_qOverP_inv= TH1F_LW::create("m_Pixel_track_qOverP_inv", ("Reconstructed momentum of track" + m_histTitleExt + "; momentum [GeV];").c_str(), 100,-20,20));
+     //sc=trackHistos.regHist(m_track_pt        = TH1F_LW::create("m_Pixel_track_pt", ("Reconstructed transverse momentum of track" + m_histTitleExt + "; p_{T} [GeV];").c_str(), 50,0.,10.));
+     //sc=trackHistos.regHist(m_track_d0        = TH1F_LW::create("m_Pixel_track_d0", ("Reconstructed d0 of track" + m_histTitleExt + "; d_{0} [mm];").c_str(), 80,-20.,20.));
+     //sc=trackHistos.regHist(m_track_z0        = TH1F_LW::create("m_Pixel_track_z0", ("Reconstructed z0 of track" + m_histTitleExt + "; z_{0} [mm];").c_str(), 80,-400.,400.));
+     //sc=trackHistos.regHist(m_track_phi0      = TH1F_LW::create("m_Pixel_track_phi0", ("Reconstructed phi0 of track" + m_histTitleExt + "; #phi_{0};").c_str(), 40,-4.,4.));
+     //sc=trackHistos.regHist(m_track_theta     = TH1F_LW::create("m_Pixel_track_theta", ("Reconstructed theta of track" + m_histTitleExt + "; #theta;").c_str(), 40,-0.,4.));
+     //sc=trackHistos.regHist(m_track_eta       = TH1F_LW::create("m_Pixel_track_eta", ("Reconstructed eta of track" + m_histTitleExt + "; #eta;").c_str(), 40,-4.,4.));
      sc=trackHistos.regHist(m_tracks_per_lumi = TH1I_LW::create("tracks_per_lumi", ("Number of tracks per LB" + m_histTitleExt + ";lumi block;# tracks").c_str(),2500,-0.5,2499.5));
      sc=trackHistos.regHist(m_tracksPerEvt_per_lumi = TProfile_LW::create("tracksPerEvt_per_lumi", ("Number of tracks per event per LB" + m_histTitleExt + ";lumi block;tracks/event").c_str(),2500,-0.5,2499.5));
      sc=trackHistos.regHist(m_tracksPerEvtPerMu_per_lumi = TProfile_LW::create("tracksPerEvtPerMu_per_lumi", ("Number of tracks per event per mu per LB (pixel tracks)" + m_histTitleExt + ";lumi block;tracks/event").c_str(),2500,-0.5,2499.5));
      sc=trackHistos.regHist(m_trackRate_per_lumi    = TH1F_LW::create("trackRate_per_lumi", ("Track rate per LB" + m_histTitleExt + ";lumi block;#tracks/sec").c_str(),2500,-0.5,2499.5));
-     sc=trackHistos.regHist(m_track_dedx      = TH2F_LW::create("m_Pixel_track_dedx", ("Reconstructed dE/dx of track" + m_histTitleExt + "; momentum [MeV]; dE/dx [MeV g cm^{-2}]").c_str(),125,-2500,2500,100,0,10));
-     sc=trackHistos.regHist(m_track_mass_dedx = TH1F_LW::create("m_Pixel_track_mass_dedx", ("Reconstructed mass using dE/dx of track" + m_histTitleExt + "; mass [MeV]; ").c_str(),125,0,2500));
+     //sc=trackHistos.regHist(m_track_dedx      = TH2F_LW::create("m_Pixel_track_dedx", ("Reconstructed dE/dx of track" + m_histTitleExt + "; momentum [MeV]; dE/dx [MeV g cm^{-2}]").c_str(),125,-2500,2500,100,0,10));
+     //sc=trackHistos.regHist(m_track_mass_dedx = TH1F_LW::create("m_Pixel_track_mass_dedx", ("Reconstructed mass using dE/dx of track" + m_histTitleExt + "; mass [MeV]; ").c_str(),125,0,2500));
+     
+     sc=trackHistos.regHist(m_degFactorMap = TProfile2D_LW::create("degFactorMap", ("degradation factor map for IP resolution" + m_histTitleExt + ";track #eta;track #phi").c_str(), 60, -3.0, 3.0, 80, -4.0, 4.0));
+     m_degFactorMap->SetOption("colz");
+     sc=trackHistos.regHist(m_degFactorMap_per_lumi = TProfile_LW::create("degFactorMap_per_lumi", ("overall degradation factor for IP resolution per lumi" + m_histTitleExt + ";lumi block;overall avg deg. factor").c_str(), 2500, -0.5, 2499.5));
+     sc=trackHistos.regHist(m_degFactorMap_eta_per_lumi = TProfile2D_LW::create("degFactorMap_eta_per_lumi", ("degradation factor (eta) for IP resolution per lumi" + m_histTitleExt + ";lumi block;track #eta").c_str(),  2500, -0.5, 2499.5, 60, -3.0, 3.0 ));
+     m_degFactorMap_eta_per_lumi->SetOption("colz");
+     //sc=trackHistos.regHist(m_degFactorMap_phi_per_lumi = TProfile2D_LW::create("degFactorMap_phi_per_lumi", ("degradation factor (phi) for IP resolution per lumi" + m_histTitleExt + ";lumi block;track #phi").c_str(),  2500, -0.5, 2499.5, 80, -4.0, 4.0 ));
+     //m_degFactorMap_phi_per_lumi->SetOption("colz");
+
    }
 
    if(sc.isFailure())if(msgLvl(MSG::WARNING)) msg(MSG::WARNING)  << "histograms not booked" << endreq;   
@@ -183,46 +185,35 @@ StatusCode PixelMainMon::FillTrackMon(void)
    if(m_doOnTrack || m_doOnPixelTrack)m_RDOIDs.clear();//reset these so you can fill them with the new id's
    if(m_doOnTrack || m_doOnPixelTrack)m_ClusterIDs.clear();
    for (int i=0; i<(int)m_tracks->size(); i++) 
-      {
+   {
       const Trk::Track *track0=(*m_tracks)[i];
-      if (track0 == 0) 
-      {
+      if (track0 == 0) {
          if (msgLvl(MSG::ERROR) ) msg(MSG::ERROR) << "no pointer to track!!!" << endreq;
          break;
       }
 
-      const  Trk::Perigee *measPerigee = dynamic_cast< const Trk::Perigee *>(track0->perigeeParameters());
+      const Trk::Perigee *measPerigee = dynamic_cast< const Trk::Perigee *>(track0->perigeeParameters());
 
-      double mass = 0;
-      double dedx = 0;
+      //double mass = 0;
+      //double dedx = 0;
+      float degradationFactor = 1.0;
+      unsigned int hitslayer = 0;
+      bool isEndcaps = false;
       //Check the track summary if it exists to see if there are pixel hits on this track, if no hits, skip ahead
-      //const Trk::TrackSummary* summary = m_trkSummaryTool->createSummary(*track);
-      //if ( summary->get(Trk::numberOfPixelHits) == 0 ) {
-      //	delete summary;
-      //	continue;   
-      //} 
-      //else { 
-      //	dedx = summary->getPixeldEdx();
-      //	std::cout << "mass: " << summary->indetTrackSummary()->massPixeldEdx() << std::endl;
-      //	mass = summary->indetTrackSummary()->massPixeldEdx()*1000;
-      //	delete summary; 
-      //}
 
       int nholes=-1;
       const Trk::TrackSummary* summary = track0->trackSummary();
 
       if (summary) {
-	nholes = summary->get(Trk::numberOfPixelHoles);
+	      nholes = summary->get(Trk::numberOfPixelHoles);
 
       	if (summary->get(Trk::numberOfPixelHits)==0) {
-	  continue;
-	}
-	else { 
-	  dedx = summary->getPixeldEdx(); 
-	  mass = summary->indetTrackSummary()->massPixeldEdx()*1000;
-	}
-      }
-      else {
+            continue;
+	      } else { 
+	         //dedx = summary->getPixeldEdx(); 
+	         //mass = summary->indetTrackSummary()->massPixeldEdx()*1000;
+	      }
+      } else {
       	if (msgLvl(MSG::INFO)) msg(MSG::INFO) << "No Track Summary Found" << endreq;
       }
 
@@ -234,209 +225,259 @@ StatusCode PixelMainMon::FillTrackMon(void)
       //get the track state on surfaces (a vector, on element per surface) and loop over it
 
       if(m_doHoleSearch && !m_doOnline && nholes>0){
-	track = m_holeSearchTool->getTrackWithHoles(*track0);
+	      track = m_holeSearchTool->getTrackWithHoles(*track0);
       }
 
       const DataVector< const Trk::TrackStateOnSurface>* trackStates=track->trackStateOnSurfaces();
       for (DataVector< const Trk::TrackStateOnSurface>::const_iterator trackStateOnSurfaceIterator=trackStates->begin(); trackStateOnSurfaceIterator!=trackStates->end(); trackStateOnSurfaceIterator++)
-	{
-	  //Change the track state on 1 surface into the cluster it represents
-	  const Trk::MeasurementBase* mesb=(*trackStateOnSurfaceIterator)->measurementOnTrack();
+	   {
+	      //Change the track state on 1 surface into the cluster it represents
+	      const Trk::MeasurementBase* mesb=(*trackStateOnSurfaceIterator)->measurementOnTrack();
+	      
+	      const InDet::SiClusterOnTrack *clus=0;
+	      Identifier clusID;
+	      Identifier surfaceID;
 	  
-	  const InDet::SiClusterOnTrack *clus=0;
-	  Identifier clusID;
-	  Identifier surfaceID;
-	  
-	  const Trk::RIO_OnTrack* hit = mesb ? dynamic_cast<const Trk::RIO_OnTrack*>(mesb) : 0;
-	  if (mesb && !hit) continue;  // skip pseudomeasurements etc.                                         
-	  if (mesb && mesb->associatedSurface().associatedDetectorElement()) {
-	    surfaceID = mesb->associatedSurface().associatedDetectorElement()->identify();
-	    
-	  } else { // holes, perigee                                                                              
-	    if (not (*trackStateOnSurfaceIterator)->trackParameters() ) {
-	      msg(MSG::INFO) << "pointer of TSOS to track parameters or associated surface is null" << endreq;
-	      continue;
-	    }
-	    surfaceID = (*trackStateOnSurfaceIterator)->trackParameters()->associatedSurface().associatedDetectorElementIdentifier();//check ptr
-	  }
-	  
-	  if((*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Measurement)){
-	    clus = dynamic_cast< const InDet::SiClusterOnTrack*>(mesb);
-	    if(clus){
-	      clusID = clus->identify();
-	    }
-	  }
-	  
-	  if((*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Outlier)){
-	    clus = dynamic_cast< const InDet::SiClusterOnTrack*>((*trackStateOnSurfaceIterator)->measurementOnTrack());
-	    if(clus){
-	      clusID = clus->identify();
-	    }
-	  }
+	      const Trk::RIO_OnTrack* hit = mesb ? dynamic_cast<const Trk::RIO_OnTrack*>(mesb) : 0;
+	      if (mesb && !hit) continue;  // skip pseudomeasurements etc.                                         
+	      if (mesb && mesb->associatedSurface().associatedDetectorElement()) {
+	        surfaceID = mesb->associatedSurface().associatedDetectorElement()->identify();
+	        
+	      } else { // holes, perigee                                                                              
+	        if (not (*trackStateOnSurfaceIterator)->trackParameters() ) {
+	          msg(MSG::INFO) << "pointer of TSOS to track parameters or associated surface is null" << endreq;
+	          continue;
+	        }
+	        surfaceID = (*trackStateOnSurfaceIterator)->trackParameters()->associatedSurface().associatedDetectorElementIdentifier();//check ptr
+	      }
+	      
+	      if((*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Measurement)){
+	        clus = dynamic_cast< const InDet::SiClusterOnTrack*>(mesb);
+	        if(clus){
+	          clusID = clus->identify();
+	        }
+	      }
+	      
+	      if((*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Outlier)){
+	        clus = dynamic_cast< const InDet::SiClusterOnTrack*>((*trackStateOnSurfaceIterator)->measurementOnTrack());
+	        if(clus){
+	          clusID = clus->identify();
+	        }
+	      }
 	  
-	  if((*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Hole)){
-	    clus = dynamic_cast< const InDet::SiClusterOnTrack*>((*trackStateOnSurfaceIterator)->measurementOnTrack());
-	    if(clus){
-	      clusID = clus->identify();
-	    }
-	  }
-
-	  if(m_idHelper->is_pixel(surfaceID) && (*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Measurement)){
-	    if(m_tsos_hitmap)m_tsos_hitmap->Fill(surfaceID,m_pixelid,m_doIBL);
-	    if(m_tsos_hiteff_vs_lumi){
-	      m_tsos_hiteff_vs_lumi->Fill(m_manager->lumiBlockNumber(),1.,surfaceID,m_pixelid,m_doIBL);
-	    }
-	  }
-
-	  if(m_idHelper->is_pixel(surfaceID) && (*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Hole)){
-	    if(m_tsos_holemap)m_tsos_holemap->Fill(surfaceID,m_pixelid,m_doIBL);
-	    if(m_tsos_hiteff_vs_lumi){
-	      m_tsos_hiteff_vs_lumi->Fill(m_manager->lumiBlockNumber(),0.,surfaceID,m_pixelid,m_doIBL);
-	    } 
-	  }
-	    
-	  if(m_idHelper->is_pixel(surfaceID) && (*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Outlier)){
-	    if(m_tsos_outliermap)m_tsos_outliermap->Fill(surfaceID,m_pixelid,m_doIBL);
-	    if(m_tsos_hiteff_vs_lumi){
-	      m_tsos_hiteff_vs_lumi->Fill(m_manager->lumiBlockNumber(),0.,surfaceID,m_pixelid,m_doIBL);
-	    }
-	  }
+	      if((*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Hole)){
+	        clus = dynamic_cast< const InDet::SiClusterOnTrack*>((*trackStateOnSurfaceIterator)->measurementOnTrack());
+	        if(clus){
+	          clusID = clus->identify();
+	        }
+	      }
+
+	      if(m_idHelper->is_pixel(surfaceID) && (*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Measurement)){
+	        if(m_tsos_hitmap)m_tsos_hitmap->Fill(surfaceID,m_pixelid,m_doIBL,false);
+	        if(m_tsos_hiteff_vs_lumi){
+	          m_tsos_hiteff_vs_lumi->Fill(m_manager->lumiBlockNumber(),1.,surfaceID,m_pixelid,m_doIBL);
+	        }
+	      }
+
+	      if(m_idHelper->is_pixel(surfaceID) && (*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Hole)){
+	        if(m_tsos_holemap)m_tsos_holemap->Fill(surfaceID,m_pixelid,m_doIBL,false);
+	        if(m_tsos_hiteff_vs_lumi){
+	          m_tsos_hiteff_vs_lumi->Fill(m_manager->lumiBlockNumber(),0.,surfaceID,m_pixelid,m_doIBL);
+	        } 
+	      }
+	        
+	      if(m_idHelper->is_pixel(surfaceID) && (*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Outlier)){
+	        if(m_tsos_outliermap)m_tsos_outliermap->Fill(surfaceID,m_pixelid,m_doIBL,false);
+	        if(m_tsos_hiteff_vs_lumi){
+	          m_tsos_hiteff_vs_lumi->Fill(m_manager->lumiBlockNumber(),0.,surfaceID,m_pixelid,m_doIBL);
+	        }
+	      }
 	
-	    if(!(*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Measurement)){continue;}
+	      if(!(*trackStateOnSurfaceIterator)->type(Trk::TrackStateOnSurface::Measurement)){continue;}
 	    
-	    if(!clus)continue;
-	const InDet::SiCluster *RawDataClus = dynamic_cast< const InDet::SiCluster*>(clus->prepRawData());
-	if(!RawDataClus)continue;
+	      if(!clus)continue;
+
+	      const InDet::SiCluster *RawDataClus = dynamic_cast< const InDet::SiCluster*>(clus->prepRawData());
+	      if(!RawDataClus)continue;
 	 
-	//if the cluster is a pixel cluster (not SCT) get the pixel information
-	if (RawDataClus->detectorElement()->isPixel())
-	  {
-	    const InDet::PixelCluster* pixelCluster=dynamic_cast<const InDet::PixelCluster*>(RawDataClus);
-	    if(!pixelCluster){
-	      //	      std::cout<<"ERROR! Dynamic-cast to pixel cluster failed!"<<std::endl;
-	    }
-	    
-	    else{
-	      float size = pixelCluster->rdoList().size();
-	      float tot = pixelCluster->totalToT();
-	      m_track_clusToT->Fill(pixelCluster->totalToT());
-	      if(size==1 && tot<8){
-		nbadclus++;
-	      }
-	      else{
-		ngoodclus++;
-	      }
-	      	    
-	      if(m_doModules && !m_doOnline){
-		if(measPerigee){
-		  float pt = measPerigee->pT()/1000.0;
-		  m_clustot_vs_pt->Fill(pt,tot);
-		  if(pt<10){
-		    m_clustot_lowpt->Fill(tot);
-		    if(size==1){m_1hitclustot_lowpt->Fill(tot);}
-		    if(size==2){m_2hitclustot_lowpt->Fill(tot);}
-		  }
-		  else{
-		    m_clustot_highpt->Fill(tot);
-		    if(size==1){m_1hitclustot_highpt->Fill(tot);}
-		    if(size==2){m_2hitclustot_highpt->Fill(tot);}
-		  }
-		}
-	      }	    
-	    }
-
-	    nPixelHits++;//add another pixel hit 
-	    for(unsigned int loopSize=0;loopSize < RawDataClus->rdoList().size(); loopSize++)
+	      //if the cluster is a pixel cluster (not SCT) get the pixel information
+	      if (RawDataClus->detectorElement()->isPixel())
 	      {
-		if(m_doOnTrack || m_doOnPixelTrack)m_RDOIDs.push_back(RawDataClus->rdoList().at(loopSize));
-	      }
-	    if(m_doOnTrack || m_doOnPixelTrack)m_ClusterIDs.push_back( clus->identify());
+            int pixlayer = GetPixLayerID(m_pixelid->barrel_ec(surfaceID), m_pixelid->layer_disk(surfaceID), m_doIBL);
+            if( pixlayer == PixLayer::kECA || pixlayer == PixLayer::kECC ) isEndcaps = true;
+
+	         const InDet::PixelCluster* pixelCluster=dynamic_cast<const InDet::PixelCluster*>(RawDataClus);
+	         if(!pixelCluster){
+	           //	      std::cout<<"ERROR! Dynamic-cast to pixel cluster failed!"<<std::endl;
+	         } else {
+               float size = pixelCluster->rdoList().size();
+	            float tot = pixelCluster->totalToT();
+	            //m_track_clusToT->Fill(pixelCluster->totalToT());
+	            if(size==1 && tot<8) { nbadclus++; }
+	            else{ ngoodclus++; }
+	      	    
+	            if(m_doModules && !m_doOnline){
+		            if(measPerigee){
+		              float pt = measPerigee->pT()/1000.0;
+		              if(m_clustot_vs_pt) m_clustot_vs_pt->Fill(pt,tot);
+		              if(pt<10){
+		                if(m_clustot_lowpt) m_clustot_lowpt->Fill(tot);
+		                if(size==1){ if(m_1hitclustot_lowpt) m_1hitclustot_lowpt->Fill(tot);}
+		                if(size==2){ if(m_2hitclustot_lowpt) m_2hitclustot_lowpt->Fill(tot);}
+		              }else{
+		                if(m_clustot_highpt) m_clustot_highpt->Fill(tot);
+		                if(size==1){ if(m_1hitclustot_highpt) m_1hitclustot_highpt->Fill(tot);}
+		                if(size==2){ if(m_2hitclustot_highpt) m_2hitclustot_highpt->Fill(tot);}
+		              }
+		            }
+	            }
+               // categorize tracks for IP resolution degradation
+               if(pixlayer >= PixLayer::kECC){
+                  unsigned int tmplayer = 0x1<<pixlayer;
+                  if( hitslayer != tmplayer ) hitslayer += 0x1<<pixlayer;
+               }
+
+	         }
+
+	         nPixelHits++;//add another pixel hit 
+	         for(unsigned int loopSize=0;loopSize < RawDataClus->rdoList().size(); loopSize++) {
+		         if(m_doOnTrack || m_doOnPixelTrack)m_RDOIDs.push_back(RawDataClus->rdoList().at(loopSize));
+	         }
+	         
+            if(m_doOnTrack || m_doOnPixelTrack)m_ClusterIDs.push_back( clus->identify());
 	    
-	    // Get track parameters for current surface (with AtaPlane)
+	         // Get track parameters for current surface (with AtaPlane)
             trkParameters = (*trackStateOnSurfaceIterator)->trackParameters();
             const Trk::AtaPlane *trackAtPlane = dynamic_cast<const Trk::AtaPlane*>(trkParameters);
             if (trackAtPlane)
             {
-	      const Amg::Vector2D localpos = trackAtPlane->localPosition();
+	            const Amg::Vector2D localpos = trackAtPlane->localPosition();
 
                // Get local error matrix for hit and track and calc pull
-	      const AmgSymMatrix(5) trackErrMat = (*trackAtPlane->covariance());
-	      const Amg::MatrixX clusErrMat = clus->localCovariance();
+	            const AmgSymMatrix(5) trackErrMat = (*trackAtPlane->covariance());
+	            const Amg::MatrixX clusErrMat = clus->localCovariance();
 
                //pulls and residuals Phi
-	       double error_sum = sqrt(pow(Amg::error(trackErrMat,Trk::locX),2) + pow(Amg::error(clusErrMat,Trk::locX), 2));
+	            double error_sum = sqrt(pow(Amg::error(trackErrMat,Trk::locX),2) + pow(Amg::error(clusErrMat,Trk::locX), 2));
                double res = clus->localParameters()[Trk::locX]-localpos[0];
-               m_track_res_phi->Fill(res);
+               if(m_track_res_phi) m_track_res_phi->Fill(res);
                double pull = 0;
                if(error_sum != 0) pull = (res)/error_sum;
-               m_track_pull_phi->Fill(pull);
+               if(m_track_pull_phi) m_track_pull_phi->Fill(pull);
 
                //pulls and residuals Eta
-	       error_sum = sqrt(pow(Amg::error(trackErrMat,Trk::locY),2) + pow(Amg::error(clusErrMat,Trk::locY), 2));
+	            error_sum = sqrt(pow(Amg::error(trackErrMat,Trk::locY),2) + pow(Amg::error(clusErrMat,Trk::locY), 2));
                res = clus->localParameters()[Trk::locY]-localpos[1];
-               m_track_res_eta->Fill(res);
+               if(m_track_res_eta) m_track_res_eta->Fill(res);
                if(error_sum != 0) pull = (res)/error_sum;
-               m_track_pull_eta->Fill(pull);
+               if(m_track_pull_eta) m_track_pull_eta->Fill(pull);
             }
-         }
-      }
+         } // end of if (RawDataClus->detectorElement()->isPixel())
+      } // end of TSOS loop
     
       if(!m_doOnline && m_doModules){
-	float pt = measPerigee->pT()/1000.0;
-	if(nbadclus==1){
-	  m_track_chi2_bcl1->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
-	}
-	if(nbadclus==0){
-	  m_track_chi2_bcl0->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
-	} 
-	if(nbadclus>1){
-	  m_track_chi2_bclgt1->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
-	} 
-	if(pt>=10){
-	  if(nbadclus==1){
-	    m_track_chi2_bcl1_highpt->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
-	  }
-	  if(nbadclus==0){
-	    m_track_chi2_bcl0_highpt->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
-	  } 
-	  if(nbadclus>1){
-	    m_track_chi2_bclgt1_highpt->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
-	  } 
-	}
+	      float pt = measPerigee->pT()/1000.0;
+	      if(nbadclus==1){
+	         if(m_track_chi2_bcl1) m_track_chi2_bcl1->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
+	      }
+	      if(nbadclus==0){
+	         if(m_track_chi2_bcl0) m_track_chi2_bcl0->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
+	      } 
+	      if(nbadclus>1){
+	         if(m_track_chi2_bclgt1) m_track_chi2_bclgt1->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
+	      } 
+	      if(pt>=10){
+	         if(nbadclus==1){
+	            if(m_track_chi2_bcl1_highpt) m_track_chi2_bcl1_highpt->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
+	         }
+	         if(nbadclus==0){
+	            if(m_track_chi2_bcl1_highpt) m_track_chi2_bcl0_highpt->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
+	         } 
+	         if(nbadclus>1){
+	            if(m_track_chi2_bclgt1_highpt) m_track_chi2_bclgt1_highpt->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
+	         } 
+	      }
       }
             
       if(nPixelHits>0)//track properties for tracks through the pixel detector
       {
-         const  Trk::Perigee *measPerigee = dynamic_cast< const Trk::Perigee *>(track0->perigeeParameters());
-         if (measPerigee != NULL){
-         m_track_qOverP->Fill((measPerigee->parameters()[Trk::qOverP]*1000.0));
-	 if (measPerigee->parameters()[Trk::qOverP] != 0) { 
-	   m_track_qOverP_inv->Fill((1./(measPerigee->parameters()[Trk::qOverP]*1000.0))); 
-	   m_track_dedx->Fill(1./(measPerigee->parameters()[Trk::qOverP]),dedx);
-	 }
-         if (std::abs(mass-139.57)>.00001&&mass>0&&dedx>1.8) m_track_mass_dedx->Fill(mass);
-         m_track_pt->Fill((measPerigee->pT()/1000.0));
-         m_track_d0->Fill(measPerigee->parameters()[Trk::d0]);
-         m_track_z0->Fill(measPerigee->parameters()[Trk::z0]);
-         m_track_phi0->Fill(measPerigee->parameters()[Trk::phi0]);
-         m_track_theta->Fill(measPerigee->parameters()[Trk::theta]);
-         m_track_eta->Fill(measPerigee->eta());
-         if (track0->fitQuality()->numberDoF() > 0){ 
-	   m_track_chi2->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
-	   if(m_track_chi2_LB) m_track_chi2_LB->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
-	 }
-	 else{ 
-	   m_track_chi2->Fill(-1);
-	   if(m_track_chi2_LB) m_track_chi2_LB->Fill(-1);
-	 }	 
-	 if(m_tracks_per_lumi) m_tracks_per_lumi->Fill(m_manager->lumiBlockNumber());
-	 nTracks++;
-	 }
+         //const  Trk::Perigee *measPerigee = dynamic_cast< const Trk::Perigee *>(track0->perigeeParameters());
+         //if (measPerigee != NULL){
+         //   //m_track_qOverP->Fill((measPerigee->parameters()[Trk::qOverP]*1000.0));
+	      //   //if (measPerigee->parameters()[Trk::qOverP] != 0) { 
+	      //     //m_track_qOverP_inv->Fill((1./(measPerigee->parameters()[Trk::qOverP]*1000.0))); 
+	      //     //m_track_dedx->Fill(1./(measPerigee->parameters()[Trk::qOverP]),dedx);
+	      //   //}
+         //   //if (std::abs(mass-139.57)>.00001&&mass>0&&dedx>1.8) m_track_mass_dedx->Fill(mass);
+         //   //m_track_pt->Fill((measPerigee->pT()/1000.0));
+         //   //m_track_d0->Fill(measPerigee->parameters()[Trk::d0]);
+         //   //m_track_z0->Fill(measPerigee->parameters()[Trk::z0]);
+         //   //m_track_phi0->Fill(measPerigee->parameters()[Trk::phi0]);
+         //   //m_track_theta->Fill(measPerigee->parameters()[Trk::theta]);
+         //   //m_track_eta->Fill(measPerigee->eta());
+         //   if (track0->fitQuality()->numberDoF() > 0){ 
+	      //      if(m_track_chi2) m_track_chi2->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
+	      //      if(m_track_chi2_LB) m_track_chi2_LB->Fill(track0->fitQuality()->chiSquared()/track0->fitQuality()->numberDoF());
+	      //   }else{ 
+	      //      if(m_track_chi2) m_track_chi2->Fill(-1);
+	      //      if(m_track_chi2_LB) m_track_chi2_LB->Fill(-1);
+	      //   }	 
+	      //   if(m_tracks_per_lumi) m_tracks_per_lumi->Fill(m_manager->lumiBlockNumber());
+	      //   nTracks++;
+	      //}
       }
-      if(m_doHoleSearch && !m_doOnline && nholes>0){delete (track);}
+
+      /// IP degradation factor map
+      if( m_doDegFactorMap ){
+         if (measPerigee){
+
+            float eta = measPerigee->eta();
+            //float phi = measPerigee->parameters()[Trk::phi0];
+            float phi = 1.0; ///TEMPORALLY !!!!
+
+            //
+            if(isEndcaps){
+               degradationFactor = 1.0;
+            }else{
+               unsigned int alllayers =  0x1<<PixLayer::kIBL | 0x1<<PixLayer::kB0 | 0x1<<PixLayer::kB1 | 0x1<<PixLayer::kB2;
+               unsigned int IBL       =  0x0<<PixLayer::kIBL | 0x1<<PixLayer::kB0 | 0x1<<PixLayer::kB1 | 0x1<<PixLayer::kB2;
+               unsigned int B0        =  0x1<<PixLayer::kIBL | 0x0<<PixLayer::kB0 | 0x1<<PixLayer::kB1 | 0x1<<PixLayer::kB2;
+               unsigned int B1        =  0x1<<PixLayer::kIBL | 0x1<<PixLayer::kB0 | 0x0<<PixLayer::kB1 | 0x1<<PixLayer::kB2;
+               unsigned int B2        =  0x1<<PixLayer::kIBL | 0x1<<PixLayer::kB0 | 0x1<<PixLayer::kB1 | 0x0<<PixLayer::kB2;
+               unsigned int IBLB0     =  0x0<<PixLayer::kIBL | 0x0<<PixLayer::kB0 | 0x1<<PixLayer::kB1 | 0x1<<PixLayer::kB2;
+               unsigned int IBLB2     =  0x0<<PixLayer::kIBL | 0x1<<PixLayer::kB0 | 0x1<<PixLayer::kB1 | 0x0<<PixLayer::kB2;
+               unsigned int B0B2      =  0x1<<PixLayer::kIBL | 0x0<<PixLayer::kB0 | 0x1<<PixLayer::kB1 | 0x0<<PixLayer::kB2;
+               unsigned int B1B2      =  0x1<<PixLayer::kIBL | 0x1<<PixLayer::kB0 | 0x0<<PixLayer::kB1 | 0x0<<PixLayer::kB2;
+               unsigned int IBLB0B1   =  0x0<<PixLayer::kIBL | 0x0<<PixLayer::kB0 | 0x0<<PixLayer::kB1 | 0x1<<PixLayer::kB2;
+               unsigned int IBLB0B1B2 =  0x0<<PixLayer::kIBL | 0x0<<PixLayer::kB0 | 0x0<<PixLayer::kB1 | 0x0<<PixLayer::kB2;
+               if( hitslayer == alllayers ) degradationFactor = 1.0; // All hits
+               else{
+                  if( hitslayer == IBL ) degradationFactor = 1.8; // IBL
+                  else if( hitslayer == B0 ) degradationFactor = 1.16; // B0
+                  else if( hitslayer == B1 ) degradationFactor = 1.0; // B1
+                  else if( hitslayer == B2 ) degradationFactor = 1.0; // B2
+                  else if( hitslayer == IBLB0 ) degradationFactor = 3.5; // IBL & B0
+                  else if( hitslayer == IBLB2 ) degradationFactor = 1.8; // IBL & B2
+                  else if( hitslayer == B0B2 ) degradationFactor = 1.17; // B & B2
+                  else if( hitslayer == B1B2 ) degradationFactor = 1.0;  // B1 & B2
+                  else if( hitslayer == IBLB0B1 ) degradationFactor = 6.0;  // IBL & B0 & B1
+                  else if( hitslayer == IBLB0B1B2 ) degradationFactor = 6.0;  // IBL & B0 & B1
+                  else degradationFactor = 1.0;
+               }
+               //std::cout << hitslayer << " " << tests << " " << degradationFactor << std::endl;
+            }
+
+            if(m_degFactorMap) m_degFactorMap->Fill( eta, phi, degradationFactor);
+            if(m_degFactorMap_per_lumi) m_degFactorMap_per_lumi->Fill(m_manager->lumiBlockNumber(), degradationFactor);
+            if(m_degFactorMap_eta_per_lumi) m_degFactorMap_eta_per_lumi->Fill(m_manager->lumiBlockNumber(), eta, degradationFactor);
+            //if(m_degFactorMap_phi_per_lumi) m_degFactorMap_phi_per_lumi->Fill(m_manager->lumiBlockNumber(), measPerigee->parameters()[Trk::phi0], degradationFactor);
+         }
       }
 
-   if(m_tracksPerEvt_per_lumi) m_tracksPerEvt_per_lumi->Fill(m_manager->lumiBlockNumber(),nTracks);
+      if(m_doHoleSearch && !m_doOnline && nholes>0){delete (track);}
+   } // end of track loop
+
+   if(m_tracksPerEvt_per_lumi) m_tracksPerEvt_per_lumi->Fill(m_manager->lumiBlockNumber(), nTracks);
    if(m_tracksPerEvtPerMu_per_lumi && m_lumiTool->lbAverageInteractionsPerCrossing() > 0 ){
       m_tracksPerEvtPerMu_per_lumi->Fill(m_manager->lumiBlockNumber(),nTracks/m_lumiTool->lbAverageInteractionsPerCrossing());
    }