From 7ebca0447ed5ee24735794dfebe73e17d927a25f Mon Sep 17 00:00:00 2001
From: Siarhei Harkusha <Siarhei.Harkusha@cern.ch>
Date: Thu, 4 Dec 2014 04:52:46 +0100
Subject: [PATCH] added new new online bad timing status and possability to
 define bad timing for channel (TileCalibBlobObjs-00-00-43)

        * TileCalibBlobObjs/TileBchPrbs.h: added new online bad timing status (OnlineBadTiming) for channel
	* src/TileBchPrbs.cxx: added description for channel status OnlineBadTiming
	* src/TileBchStatus.cxx: added possability to define bad timing; set default for bad timing: BadTiming
	* src/TileBchDecoder.cxx: added OnlineBadTiming to bit pattern version "onl01
	* TileCalibBlobObjs/TileCalibUtils.h: added new static variable for bad timing channel difinition (BADTIMING_DEFINITION_CHAN)
	* Tagged TileCalibBlobObjs-00-00-43
---
 .../TileCalibBlobObjs/TileBchPrbs.h           |  1 +
 .../TileCalibBlobObjs/TileBchStatus.h         | 13 +++++---
 .../TileCalibBlobObjs/TileCalibUtils.h        |  4 +++
 .../TileCalibBlobObjs/src/TileBchDecoder.cxx  | 23 +++++++-------
 .../TileCalibBlobObjs/src/TileBchPrbs.cxx     |  3 ++
 .../TileCalibBlobObjs/src/TileBchStatus.cxx   | 31 ++++++++++++++-----
 .../TileCalibBlobObjs/src/TileCalibUtils.cxx  |  1 +
 7 files changed, 53 insertions(+), 23 deletions(-)

diff --git a/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileBchPrbs.h b/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileBchPrbs.h
index 3d5960678c9..e144d0029ee 100644
--- a/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileBchPrbs.h
+++ b/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileBchPrbs.h
@@ -81,6 +81,7 @@ class TileBchPrbs
     IgnoredInDsp               = 4000,
     IgnoredInHlt               = 4001,
     DisableForL1               = 4002,
+    OnlineBadTiming            = 4105,
 
     //================================
     //=== Other ONLINE ADC
diff --git a/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileBchStatus.h b/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileBchStatus.h
index 0dfbace8c28..0e05a2a651a 100644
--- a/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileBchStatus.h
+++ b/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileBchStatus.h
@@ -39,9 +39,11 @@ class TileBchStatus
   static void defineBad(  const TileBchStatus& status);
   static void defineNoisy(const TileBchStatus& status);
   static void defineNoGainL1(const TileBchStatus& status);
+  static void defineBadTiming(const TileBchStatus& status);
   static TileBchStatus getDefinitionBad();
   static TileBchStatus getDefinitionNoisy();
   static TileBchStatus getDefinitionNoGainL1();
+  static TileBchStatus getDefinitionBadTiming();
 
   bool isGood() const;
   bool isBad() const;
@@ -59,6 +61,7 @@ class TileBchStatus
   static PrbSet m_refBad;
   static PrbSet m_refNoisy;
   static PrbSet m_refNoGainL1;
+  static PrbSet m_refBadTiming;
 };
 
 //
@@ -74,7 +77,7 @@ TileBchStatus::getPrbs() const
 inline bool
 TileBchStatus::contains(const Prb& prb) const
 {
-  return (m_prbSet.find(prb)!=m_prbSet.end());
+  return (m_prbSet.find(prb) != m_prbSet.end());
 }
 
 //
@@ -82,7 +85,7 @@ TileBchStatus::contains(const Prb& prb) const
 inline bool
 TileBchStatus::isGood() const
 {
-  return (m_prbSet.size()==0);
+  return (m_prbSet.size() == 0);
 }
 
 //
@@ -98,7 +101,7 @@ TileBchStatus::isAffected() const
 inline bool
 TileBchStatus::isBad() const
 {
-  return m_prbSet.size() ? (testFor(m_refBad).size()!=0) : false;
+  return m_prbSet.size() ? (testFor(m_refBad).size() != 0) : false;
 }
 
 //
@@ -106,7 +109,7 @@ TileBchStatus::isBad() const
 inline bool
 TileBchStatus::isNoisy() const
 {
-  return m_prbSet.size() ? (testFor(m_refNoisy).size()!=0) : false;
+  return m_prbSet.size() ? (testFor(m_refNoisy).size() != 0) : false;
 }
 
 //
@@ -146,7 +149,7 @@ TileBchStatus::isHalfGainL1() const
 inline bool
 TileBchStatus::isBadTiming() const
 {
-  return m_prbSet.size() ? contains(TileBchPrbs::BadTiming) : false; 
+  return m_prbSet.size() ? (testFor(m_refBadTiming).size() != 0) : false;
 }
 
 #endif
diff --git a/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileCalibUtils.h b/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileCalibUtils.h
index fac69105670..de3de8127c1 100644
--- a/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileCalibUtils.h
+++ b/TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/TileCalibUtils.h
@@ -128,6 +128,9 @@ class TileCalibUtils{
   static unsigned int noisy_definition_chan() {return NOISY_DEFINITION_CHAN;}
   /** @brief Python compatibility function */
   static unsigned int nogainl1_definition_chan() {return NOGAINL1_DEFINITION_CHAN;}
+  /** @brief Python compatibility function */
+  static unsigned int badtiming_definition_chan() {return BADTIMING_DEFINITION_CHAN;}
+
 
   static const unsigned int MAX_ROS      ;  /**< @brief Number of ROSs               */
   static const unsigned int MAX_DRAWER   ;  /**< @brief Number of drawers in ROS 1-4 */
@@ -143,6 +146,7 @@ class TileCalibUtils{
   static const unsigned int BAD_DEFINITION_CHAN;   /**< @brief Channel used for storing of bad channel definitions */
   static const unsigned int NOISY_DEFINITION_CHAN;   /**< @brief Channel used for storing of noisy channel definitions */
   static const unsigned int NOGAINL1_DEFINITION_CHAN;   /**< @brief Channel used for storing of NoGainLevel1 channel definitions */
+  static const unsigned int BADTIMING_DEFINITION_CHAN;   /**< @brief Channel used for storing of NoGainLevel1 channel definitions */
 
 };
 
diff --git a/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchDecoder.cxx b/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchDecoder.cxx
index 0eb2789b417..0107cd9c886 100644
--- a/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchDecoder.cxx
+++ b/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchDecoder.cxx
@@ -12,7 +12,7 @@ TileBchDecoder::TileBchDecoder(BitPatVer bitPatVer)
   if(     bitPatVer==TileBchDecoder::BitPat_ofl01){ init_BitPat_ofl01(); }
   else if(bitPatVer==TileBchDecoder::BitPat_onl01){ init_BitPat_onl01(); }
   else{
-    throw TileCalib::InvalidBitPattern("TileBchDecoder::Ctor",bitPatVer);
+    throw TileCalib::InvalidBitPattern("TileBchDecoder::Ctor", bitPatVer);
   }
 }
 
@@ -22,11 +22,11 @@ TileBchStatus
 TileBchDecoder::decode(uint32_t status_channel, uint32_t status_adc) const 
 {
   TileBchStatus status;
-  for(unsigned int i=0; i<32; ++i){
+  for(unsigned int i = 0; i < 32; ++i){
     //=== decode channel problems
-    if(status_channel & 0x00000001){ status+=m_bitToPrbChn[i]; }
+    if(status_channel & 0x00000001){ status += m_bitToPrbChn[i]; }
     //=== decode adc problems
-    if(status_adc     & 0x00000001){ status+=m_bitToPrbAdc[i]; }
+    if(status_adc     & 0x00000001){ status += m_bitToPrbAdc[i]; }
     //=== shift the status words by one bit
     status_channel >>= 1;
     status_adc     >>= 1;
@@ -46,7 +46,7 @@ TileBchDecoder::encode(const TileBchStatus& status) const
     {
       std::map<TileBchPrbs::Prb,std::pair<unsigned int,unsigned int> >::const_iterator 
 	iMap = m_prbToBit.find(*iPrb);
-      if(iMap==m_prbToBit.end()){
+      if(iMap == m_prbToBit.end()){
 	//=== throw an exception if we can not encode the problem
 	throw TileCalib::InvalidBchProblem("TileBchDecoder::encode", *iPrb);
       }
@@ -120,6 +120,7 @@ TileBchDecoder::init_BitPat_onl01()
   m_bitToPrbChn[ 4] = TileBchPrbs::TrigNoGain;
   m_bitToPrbChn[ 5] = TileBchPrbs::TrigHalfGain;
   m_bitToPrbChn[ 6] = TileBchPrbs::TrigNoisy;
+  m_bitToPrbChn[ 7] = TileBchPrbs::OnlineBadTiming;
   
   //=== assign decoder to adc problems
   m_bitToPrbAdc.clear();
@@ -137,25 +138,25 @@ TileBchDecoder::initPrbToBit()
 {
   m_prbToBit.clear();
   //=== init channel problems
-  for(unsigned int i=0; i<32; ++i){
+  for(unsigned int i = 0; i < 32; ++i){
     TileBchPrbs::Prb prb = m_bitToPrbChn[i];
     if(prb==TileBchPrbs::Invalid) continue;
     //=== check for duplicates
-    if(m_prbToBit.find(prb)!=m_prbToBit.end()){
+    if(m_prbToBit.find(prb) != m_prbToBit.end()){
       throw TileCalib::InvalidBitPattern("TileBchDecoder::initPrbToBit(Chn)",i);
     }
     m_prbToBit[prb] = std::make_pair(0,i);
   }
 
   //=== init adc problems
-  for(unsigned int i=0; i<32; ++i){
+  for(unsigned int i = 0; i < 32; ++i){
     TileBchPrbs::Prb prb = m_bitToPrbAdc[i];
     if(prb==TileBchPrbs::Invalid) continue;
     //=== check for duplicates
     if(m_prbToBit.find(prb)!=m_prbToBit.end()){
       throw TileCalib::InvalidBitPattern("TileBchDecoder::initPrbToBit(Adc)",i);
     }
-    m_prbToBit[prb] = std::make_pair(1,i);
+    m_prbToBit[prb] = std::make_pair(1, i);
   }
 }
 
@@ -167,13 +168,13 @@ TileBchDecoder::printBitAssignment(std::ostream& stm) const
   stm << "Current bit to problem assignment" << std::endl;
   stm << "---------------------------------" << std::endl;
   stm << "Channel:"                          << std::endl;
-  for(unsigned int i=0; i<32; ++i){
+  for(unsigned int i = 0; i < 32; ++i){
     TileBchPrbs::Prb prb = m_bitToPrbChn[i];
     std::string desc = TileBchPrbs::getDescription(prb);
     stm << "bit "<<i<<"\t:\t" << desc << std::endl;
   }
   stm << "Adc:"                              << std::endl;
-  for(unsigned int i=0; i<32; ++i){
+  for(unsigned int i = 0; i < 32; ++i){
     TileBchPrbs::Prb prb = m_bitToPrbAdc[i];
     std::string desc = TileBchPrbs::getDescription(prb);
     stm << "bit "<<i<<"\t:\t" << desc << std::endl;
diff --git a/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchPrbs.cxx b/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchPrbs.cxx
index dafe7aa08ac..f51fc6e632c 100644
--- a/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchPrbs.cxx
+++ b/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchPrbs.cxx
@@ -70,6 +70,9 @@ TileBchPrbs::initPrbDesc()
   m_prbNames[TileBchPrbs::TrigHalfGain           ] = "LV1 channel half gain";
   m_prbNames[TileBchPrbs::TrigNoisy              ] = "LV1 channel noisy";
 
+  //=== online channel
+  m_prbNames[TileBchPrbs::OnlineBadTiming        ] = "Online bad timing";
+
   //=== online adc
   m_prbNames[TileBchPrbs::OnlineGeneralMaskAdc   ] = "Online ADC masked (unspecified)";
 }
diff --git a/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchStatus.cxx b/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchStatus.cxx
index e09d353d586..79f00668bfc 100644
--- a/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchStatus.cxx
+++ b/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileBchStatus.cxx
@@ -9,6 +9,7 @@
 TileBchStatus::PrbSet TileBchStatus::m_refBad;
 TileBchStatus::PrbSet TileBchStatus::m_refNoisy;
 TileBchStatus::PrbSet TileBchStatus::m_refNoGainL1;
+TileBchStatus::PrbSet TileBchStatus::m_refBadTiming;
 
 //
 //_________________________________________________________
@@ -32,9 +33,7 @@ TileBchStatus::operator+=(const TileBchStatus& rhs)
 {
   //  PrbSet overlapp;
   std::insert_iterator<PrbSet> insItr(m_prbSet, m_prbSet.begin()); 
-  std::set_union(m_prbSet.begin(),m_prbSet.end(),
-		 rhs.getPrbs().begin(),  rhs.getPrbs().end(),
-		 insItr);
+  std::set_union(m_prbSet.begin(),m_prbSet.end(), rhs.getPrbs().begin(), rhs.getPrbs().end(), insItr);
   return *this;
 }
 
@@ -120,6 +119,8 @@ TileBchStatus::initClassifierDefinitions()
   m_refNoGainL1.insert(TileBchPrbs::TrigNoisy);
   m_refNoGainL1.insert(TileBchPrbs::DisableForL1);
 
+  m_refBadTiming.insert(TileBchPrbs::BadTiming);
+
 }
 
 //
@@ -146,6 +147,15 @@ TileBchStatus::defineNoGainL1(const TileBchStatus& status)
   m_refNoGainL1 = status.getPrbs();
 }
 
+//
+//_________________________________________________________
+void 
+TileBchStatus::defineBadTiming(const TileBchStatus& status)
+{
+  m_refBadTiming = status.getPrbs();
+}
+
+
 //
 //_________________________________________________________
 TileBchStatus 
@@ -170,6 +180,15 @@ TileBchStatus::getDefinitionNoGainL1()
   return TileBchStatus(m_refNoGainL1);
 }
 
+//
+//_________________________________________________________
+TileBchStatus
+TileBchStatus::getDefinitionBadTiming()
+{
+  return TileBchStatus(m_refBadTiming);
+}
+
+
 //
 //_________________________________________________________
 TileBchStatus::PrbSet
@@ -177,9 +196,7 @@ TileBchStatus::testFor(const PrbSet& prbSet) const
 {
   PrbSet overlapp;
   std::insert_iterator<PrbSet> insItr(overlapp, overlapp.begin()); 
-  std::set_intersection(m_prbSet.begin(),m_prbSet.end(),
-			  prbSet.begin(),  prbSet.end(),
-                        insItr);
+  std::set_intersection(m_prbSet.begin(),m_prbSet.end(), prbSet.begin(),  prbSet.end(), insItr);
   return overlapp;
 }
 
@@ -189,7 +206,7 @@ std::string
 TileBchStatus::getString() const
 {
   std::string prbStr("");
-  for(PrbSet::const_iterator iPrb = m_prbSet.begin(); iPrb!=m_prbSet.end(); ++iPrb){
+  for(PrbSet::const_iterator iPrb = m_prbSet.begin(); iPrb != m_prbSet.end(); ++iPrb){
     prbStr += TileBchPrbs::getDescription(*iPrb) + "; ";
   } 
   return prbStr;
diff --git a/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileCalibUtils.cxx b/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileCalibUtils.cxx
index a0031ad7db2..332c7a322c7 100644
--- a/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileCalibUtils.cxx
+++ b/TileCalorimeter/TileCalib/TileCalibBlobObjs/src/TileCalibUtils.cxx
@@ -23,6 +23,7 @@ const unsigned int TileCalibUtils::DEFINITIONS_DRAWERIDX = 1; /**< @brief Drawer
 const unsigned int TileCalibUtils::BAD_DEFINITION_CHAN = 0;  /**< @brief Channel used for storing of bad channel definitions */
 const unsigned int TileCalibUtils::NOISY_DEFINITION_CHAN = 1; /**< @brief Channel used for storing of noisy channel definitions */
 const unsigned int TileCalibUtils::NOGAINL1_DEFINITION_CHAN = 2; /**< @brief Channel used for storing of NoGainLevel1 channel definitions */
+const unsigned int TileCalibUtils::BADTIMING_DEFINITION_CHAN = 3; /**< @brief Channel used for storing of NoGainLevel1 channel definitions */
 
 //
 //_____________________________________________________________________________
-- 
GitLab