diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/InvariantMassInclusive2.h b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/InvariantMassInclusive2.h
index d95b30285ec25ae24008a3971d88272f7c428a58..ca68e49aef7204a92d9dac43afc291571f80dc7c 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/InvariantMassInclusive2.h
+++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/InvariantMassInclusive2.h
@@ -9,6 +9,8 @@
 #include <iostream>
 #include "L1TopoInterfaces/DecisionAlg.h"
 
+class TH2;
+
 namespace TCS {
    
    class InvariantMassInclusive2 : public DecisionAlg {
@@ -42,6 +44,10 @@ namespace TCS {
       parType_t      p_MinEta2 = { 0 };
       parType_t      p_MaxEta2 = { 0 };
 
+      TH1 * m_histAcceptM[6] = {};
+      TH1 * m_histRejectM[6] = {};
+      TH2 * m_histAcceptEta1Eta2[6] = {};
+      TH2 * m_histRejectEta1Eta2[6] = {};
    };
    
 }
diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/InvariantMassInclusive2.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/InvariantMassInclusive2.cxx
index 741ea512eee5a74766fc0a7a9381bfebbf2257a6..129e10edf04a600e267c9189efb0dfbed38b789f 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/InvariantMassInclusive2.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/InvariantMassInclusive2.cxx
@@ -8,7 +8,6 @@
  * @param NumberLeading
 **********************************/
 
-#include <cmath>
 
 #include "L1TopoAlgorithms/InvariantMassInclusive2.h"
 #include "L1TopoCommon/Exception.h"
@@ -18,6 +17,11 @@
 #include "L1TopoSimulationUtils/Trigo.h"
 #include "L1TopoSimulationUtils/Hyperbolic.h"
 //
+#include "TH1F.h"
+#include "TH2F.h"
+
+#include <cmath>
+#include <iostream>
 
 REGISTER_ALG_TCS(InvariantMassInclusive2)
 
@@ -50,11 +54,11 @@ namespace {
       TSU::L1TopoDataTypes<11,0> bit_Et1(tob1->Et());
       TSU::L1TopoDataTypes<11,0> bit_Et2(tob2->Et());
       auto bit_invmass2 = 2*bit_Et1*bit_Et2*(bit_cosheta - bit_cosphi);
-      
+
       return int(bit_invmass2) ;
-  
+
    }
-  
+
 }
 
 
@@ -62,8 +66,8 @@ TCS::InvariantMassInclusive2::InvariantMassInclusive2(const std::string & name)
 {
    defineParameter("InputWidth1", 9);
    defineParameter("InputWidth2", 9);
-   defineParameter("MaxTob1", 0); 
-   defineParameter("MaxTob2", 0); 
+   defineParameter("MaxTob1", 0);
+   defineParameter("MaxTob2", 0);
    defineParameter("NumResultBits", 6);
    defineParameter("MinMSqr",   0, 0);
    defineParameter("MaxMSqr", 999, 0);
@@ -111,12 +115,12 @@ TCS::InvariantMassInclusive2::initialize() {
    for(unsigned int i=0; i<numberOutputBits(); ++i) {
       p_InvMassMin[i] = parameter("MinMSqr", i).value();
       p_InvMassMax[i] = parameter("MaxMSqr", i).value();
-   
+
       p_MinET1[i] = parameter("MinET1",i).value();
       p_MinET2[i] = parameter("MinET2",i).value();
    }
    TRG_MSG_INFO("NumberLeading1 : " << p_NumberLeading1);
-   TRG_MSG_INFO("NumberLeading2 : " << p_NumberLeading2);  
+   TRG_MSG_INFO("NumberLeading2 : " << p_NumberLeading2);
    for(unsigned int i=0; i<numberOutputBits(); ++i) {
     TRG_MSG_INFO("InvMassMin   : " << p_InvMassMin[i]);
     TRG_MSG_INFO("InvMassMax   : " << p_InvMassMax[i]);
@@ -136,7 +140,23 @@ TCS::InvariantMassInclusive2::initialize() {
    TRG_MSG_INFO("MaxEta2     : "<<p_MaxEta2     );
 
    TRG_MSG_INFO("number output : " << numberOutputBits());
- 
+   // book histograms
+   for(unsigned int i=0; i<numberOutputBits(); ++i) {
+       const int buf_len = 512;
+       char hname_accept[buf_len], hname_reject[buf_len];
+       int mass_min = sqrt(p_InvMassMin[i]);
+       int mass_max = sqrt(p_InvMassMax[i]);
+       // mass
+       snprintf(hname_accept, buf_len, "Accept_InvariantMassInclusive2_bit%d_%dM%d_Mass", i, mass_min, mass_max);
+       snprintf(hname_reject, buf_len, "Reject_InvariantMassInclusive2_bit%d_%dM%d_Mass", i, mass_min, mass_max);
+       registerHist(m_histAcceptM[i] = new TH1F(hname_accept, hname_accept, 100, 0.0, 2*mass_max));
+       registerHist(m_histRejectM[i] = new TH1F(hname_reject, hname_reject, 100, 0.0, 2*mass_max));
+       // eta2 vs. eta1
+       snprintf(hname_accept, buf_len, "Accept_InvariantMassInclusive2_bit%d_%dM%d_Eta1Eta2", i, mass_min, mass_max);
+       snprintf(hname_reject, buf_len, "Reject_InvariantMassInclusive2_bit%d_%dM%d_Eta1Eta2", i, mass_min, mass_max);
+       registerHist(m_histAcceptEta1Eta2[i] = new TH2F(hname_accept, hname_accept, 100, -50.0, +50.0, 100, -50.0, +50.0));
+       registerHist(m_histRejectEta1Eta2[i] = new TH2F(hname_reject, hname_reject, 100, -50.0, +50.0, 100, -50.0, +50.0));
+   }
    return StatusCode::SUCCESS;
 }
 
@@ -148,32 +168,39 @@ TCS::InvariantMassInclusive2::processBitCorrect( const std::vector<TCS::TOBArray
                              Decision & decison )
 {
 
-      
    if( input.size() == 2) {
-      for( TOBArray::const_iterator tob1 = input[0]->begin(); 
+      for( TOBArray::const_iterator tob1 = input[0]->begin();
            tob1 != input[0]->end() && distance(input[0]->begin(), tob1) < p_NumberLeading1;
            ++tob1)
          {
 
 
-            for( TCS::TOBArray::const_iterator tob2 = input[1]->begin(); 
+            for( TCS::TOBArray::const_iterator tob2 = input[1]->begin();
                  tob2 != input[1]->end() && distance(input[1]->begin(), tob2) < p_NumberLeading2;
                  ++tob2) {
                 // Inv Mass calculation
                 unsigned int invmass2 = calcInvMassBW( *tob1, *tob2 );
-                unsigned int eta1 = std::abs(parType_t((*tob1)->eta()));
-                unsigned int eta2 = std::abs(parType_t((*tob2)->eta()));
+                const int eta1 = (*tob1)->eta();
+                const int eta2 = (*tob2)->eta();
+                const unsigned int aeta1 = std::abs(eta1);
+                const unsigned int aeta2 = std::abs(eta2);
                for(unsigned int i=0; i<numberOutputBits(); ++i) {
                    bool accept = false;
                    if( parType_t((*tob1)->Et()) <= p_MinET1[i]) continue; // ET cut
                    if( parType_t((*tob2)->Et()) <= p_MinET2[i]) continue; // ET cut
                    if(p_ApplyEtaCut &&
-                      ((eta1 < p_MinEta1 || eta1 > p_MaxEta1 ) ||
-                       (eta2 < p_MinEta2 || eta2 > p_MaxEta2 ) ))  continue;
-                   accept = invmass2 >= p_InvMassMin[i] && invmass2 <= p_InvMassMax[i]; 
+                      ((aeta1 < p_MinEta1 || aeta1 > p_MaxEta1 ) ||
+                       (aeta2 < p_MinEta2 || aeta2 > p_MaxEta2 ) ))  continue;
+                   accept = invmass2 >= p_InvMassMin[i] && invmass2 <= p_InvMassMax[i];
                    if( accept ) {
                        decison.setBit(i, true);
                        output[i]->push_back( TCS::CompositeTOB(*tob1, *tob2) );
+                       m_histAcceptM[i]->Fill(sqrt((float)invmass2));
+                       m_histAcceptEta1Eta2[i]->Fill(eta1, eta2);
+
+                   } else {
+                       m_histRejectM[i]->Fill(sqrt((float)invmass2));
+                       m_histRejectEta1Eta2[i]->Fill(eta1, eta2);
                    }
                    TRG_MSG_DEBUG("Decision " << i << ": " << (accept?"pass":"fail") << " invmass2 = " << invmass2);
                }
@@ -194,29 +221,36 @@ TCS::InvariantMassInclusive2::process( const std::vector<TCS::TOBArray const *>
                              Decision & decison )
 {
 
-      
+
    if( input.size() == 2) {
-      for( TOBArray::const_iterator tob1 = input[0]->begin(); 
+      for( TOBArray::const_iterator tob1 = input[0]->begin();
            tob1 != input[0]->end() && distance(input[0]->begin(), tob1) < p_NumberLeading1;
            ++tob1)
          {
-            for( TCS::TOBArray::const_iterator tob2 = input[1]->begin(); 
+            for( TCS::TOBArray::const_iterator tob2 = input[1]->begin();
                  tob2 != input[1]->end() && distance(input[1]->begin(), tob2) < p_NumberLeading2;
                  ++tob2) {
                 // Inv Mass calculation
                 unsigned int invmass2 = calcInvMass( *tob1, *tob2 );
-                unsigned int eta1 = std::abs(parType_t((*tob1)->eta()));
-                unsigned int eta2 = std::abs(parType_t((*tob2)->eta()));
+                const int eta1 = (*tob1)->eta();
+                const int eta2 = (*tob2)->eta();
+                const unsigned int aeta1 = std::abs(eta1);
+                const unsigned int aeta2 = std::abs(eta2);
                for(unsigned int i=0; i<numberOutputBits(); ++i) {
                   if( parType_t((*tob1)->Et()) <= p_MinET1[i]) continue; // ET cut
                   if( parType_t((*tob2)->Et()) <= p_MinET2[i]) continue; // ET cut
                    if(p_ApplyEtaCut &&
-                      ((eta1 < p_MinEta1 || eta1 > p_MaxEta1 ) ||
-                       (eta2 < p_MinEta2 || eta2 > p_MaxEta2 ) )) continue;
-                  bool accept = invmass2 >= p_InvMassMin[i] && invmass2 <= p_InvMassMax[i]; 
+                      ((aeta1 < p_MinEta1 || aeta1 > p_MaxEta1 ) ||
+                       (aeta2 < p_MinEta2 || aeta2 > p_MaxEta2 ) )) continue;
+                  bool accept = invmass2 >= p_InvMassMin[i] && invmass2 <= p_InvMassMax[i];
                   if( accept ) {
                      decison.setBit(i, true);
                      output[i]->push_back( TCS::CompositeTOB(*tob1, *tob2) );
+                     m_histAcceptM[i]->Fill(sqrt((float)invmass2));
+                     m_histAcceptEta1Eta2[i]->Fill(eta1, eta2);
+                  } else {
+                     m_histRejectM[i]->Fill(sqrt((float)invmass2));
+                     m_histRejectEta1Eta2[i]->Fill(eta1, eta2);
                   }
                   TRG_MSG_DEBUG("Decision " << i << ": " << (accept ?"pass":"fail") << " invmass2 = " << invmass2);
                }