CMS 3D CMS Logo

Public Member Functions | Private Member Functions

PedsOnlyHistosUsingDb Class Reference

#include <PedsOnlyHistosUsingDb.h>

Inheritance diagram for PedsOnlyHistosUsingDb:
CommissioningHistosUsingDb PedsOnlyHistograms CommissioningHistograms CommissioningHistograms

List of all members.

Public Member Functions

 PedsOnlyHistosUsingDb (const edm::ParameterSet &pset, DQMStore *, SiStripConfigDb *const )
virtual void uploadConfigurations ()
virtual ~PedsOnlyHistosUsingDb ()

Private Member Functions

void create (SiStripConfigDb::AnalysisDescriptionsV &, Analysis)
void update (SiStripConfigDb::FedDescriptionsRange)

Detailed Description

Definition at line 9 of file PedsOnlyHistosUsingDb.h.


Constructor & Destructor Documentation

PedsOnlyHistosUsingDb::PedsOnlyHistosUsingDb ( const edm::ParameterSet pset,
DQMStore bei,
SiStripConfigDb * const  db 
)

Definition at line 15 of file PedsOnlyHistosUsingDb.cc.

References LogTrace, and sistrip::mlDqmClient_.

  : CommissioningHistograms( pset.getParameter<edm::ParameterSet>("PedsOnlyParameters"),
                             bei,
                             sistrip::PEDS_ONLY ),
    CommissioningHistosUsingDb( db,
                                sistrip::PEDS_ONLY ),
    PedsOnlyHistograms( pset.getParameter<edm::ParameterSet>("PedsOnlyParameters"),
                        bei )
{
  LogTrace(mlDqmClient_) 
    << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
    << " Constructing object...";
}
PedsOnlyHistosUsingDb::~PedsOnlyHistosUsingDb ( ) [virtual]

Definition at line 33 of file PedsOnlyHistosUsingDb.cc.

References LogTrace, and sistrip::mlDqmClient_.

                                              {
  LogTrace(mlDqmClient_) 
    << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
    << " Destructing object...";
}

Member Function Documentation

void PedsOnlyHistosUsingDb::create ( SiStripConfigDb::AnalysisDescriptionsV desc,
Analysis  analysis 
) [private, virtual]

Reimplemented from CommissioningHistosUsingDb.

Definition at line 170 of file PedsOnlyHistosUsingDb.cc.

References CommissioningHistosUsingDb::db(), SiStripConfigDb::dbParams(), benchmark_cfg::errors, CommissioningAnalysis::fecKey(), CommissioningAnalysis::fedKey(), CommissioningAnalysis::getErrorCodes(), SiStripFecKey::i2cAddr(), sistrip::invalid_, PedsOnlyAnalysis::isValid(), SiStripDbParams::partitions(), PedsOnlyAnalysis::pedsMax(), PedsOnlyAnalysis::pedsMean(), PedsOnlyAnalysis::pedsMin(), PedsOnlyAnalysis::pedsSpread(), PedsOnlyAnalysis::rawMax(), PedsOnlyAnalysis::rawMean(), PedsOnlyAnalysis::rawMin(), PedsOnlyAnalysis::rawSpread(), and tmp.

                                                        {

  PedsOnlyAnalysis* anal = dynamic_cast<PedsOnlyAnalysis*>( analysis->second );
  if ( !anal ) { return; }
  
  SiStripFecKey fec_key( anal->fecKey() );
  SiStripFedKey fed_key( anal->fedKey() );
  
  for ( uint16_t iapv = 0; iapv < 2; ++iapv ) {
    
    // Create description
    PedestalsAnalysisDescription* tmp;
    tmp = new PedestalsAnalysisDescription( std::vector<uint16_t>(0,0), //@@
                                            std::vector<uint16_t>(0,0), //@@
                                            anal->pedsMean()[iapv],
                                            anal->pedsSpread()[iapv],
                                            1.*sistrip::invalid_, //@@
                                            1.*sistrip::invalid_, //@@
                                            anal->rawMean()[iapv],
                                            anal->rawSpread()[iapv],
                                            anal->pedsMax()[iapv], 
                                            anal->pedsMin()[iapv], 
                                            1.*sistrip::invalid_, //@@
                                            1.*sistrip::invalid_, //@@
                                            anal->rawMax()[iapv],
                                            anal->rawMin()[iapv],
                                            fec_key.fecCrate(),
                                            fec_key.fecSlot(),
                                            fec_key.fecRing(),
                                            fec_key.ccuAddr(),
                                            fec_key.ccuChan(),
                                            SiStripFecKey::i2cAddr( fec_key.lldChan(), !iapv ), 
                                            db()->dbParams().partitions().begin()->second.partitionName(),
                                            db()->dbParams().partitions().begin()->second.runNumber(),
                                            anal->isValid(),
                                            "",
                                            fed_key.fedId(),
                                            fed_key.feUnit(),
                                            fed_key.feChan(),
                                            fed_key.fedApv() );
    
    // Add comments
    typedef std::vector<std::string> Strings;
    Strings errors = anal->getErrorCodes();
    Strings::const_iterator istr = errors.begin();
    Strings::const_iterator jstr = errors.end();
    for ( ; istr != jstr; ++istr ) { tmp->addComments( *istr ); }

    // Store description
    desc.push_back( tmp );
      
  }

}
void PedsOnlyHistosUsingDb::update ( SiStripConfigDb::FedDescriptionsRange  feds) [private]

Definition at line 75 of file PedsOnlyHistosUsingDb.cc.

References sistrip::APVS_PER_FEDCH, CommissioningHistosUsingDb::cabling(), FedChannelConnection::ccuAddr(), FedChannelConnection::ccuChan(), SiStripFedCabling::connection(), CommissioningHistograms::data(), FedChannelConnection::fecCrate(), SiStripFedKey::feChan(), FedChannelConnection::fecRing(), FedChannelConnection::fecSlot(), FedChannelConnection::fedCh(), sistrip::FEDCH_PER_FED, FedChannelConnection::fedId(), SiStripFedKey::feUnit(), sistrip::invalid_, SiStripKey::key(), FedChannelConnection::lldChannel(), sistrip::mlDqmClient_, PedsOnlyAnalysis::peds(), PedsOnlyAnalysis::pedsMin(), and PedsOnlyAnalysis::raw().

Referenced by uploadConfigurations().

                                                                             {
 
  // Iterate through feds and update fed descriptions
  uint16_t updated = 0;
  SiStripConfigDb::FedDescriptionsV::const_iterator ifed;
  for ( ifed = feds.begin(); ifed != feds.end(); ifed++ ) {
    
    for ( uint16_t ichan = 0; ichan < sistrip::FEDCH_PER_FED; ichan++ ) {

      // Build FED and FEC keys
      const FedChannelConnection& conn = cabling()->connection( (*ifed)->getFedId(), ichan );
      if ( conn.fecCrate() == sistrip::invalid_ ||
           conn.fecSlot() == sistrip::invalid_ ||
           conn.fecRing() == sistrip::invalid_ ||
           conn.ccuAddr() == sistrip::invalid_ ||
           conn.ccuChan() == sistrip::invalid_ ||
           conn.lldChannel() == sistrip::invalid_ ) { continue; }
      SiStripFedKey fed_key( conn.fedId(), 
                             SiStripFedKey::feUnit( conn.fedCh() ),
                             SiStripFedKey::feChan( conn.fedCh() ) );
      SiStripFecKey fec_key( conn.fecCrate(), 
                             conn.fecSlot(), 
                             conn.fecRing(), 
                             conn.ccuAddr(), 
                             conn.ccuChan(), 
                             conn.lldChannel() );

      // Locate appropriate analysis object 
      Analyses::const_iterator iter = data().find( fec_key.key() );
      if ( iter != data().end() ) {

        // Check if analysis is valid
        if ( !iter->second->isValid() ) { continue; }
        
        PedsOnlyAnalysis* anal = dynamic_cast<PedsOnlyAnalysis*>( iter->second );
        if ( !anal ) { 
          edm::LogError(mlDqmClient_)
            << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
            << " NULL pointer to analysis object!";
          continue; 
        }
        
        // Determine the pedestal shift to apply
        uint32_t pedshift = 127;
        for ( uint16_t iapv = 0; iapv < sistrip::APVS_PER_FEDCH; iapv++ ) {
          uint32_t pedmin = (uint32_t) anal->pedsMin()[iapv];
          pedshift = pedmin < pedshift ? pedmin : pedshift;
        }

        // Iterate through APVs and strips
        for ( uint16_t iapv = 0; iapv < sistrip::APVS_PER_FEDCH; iapv++ ) {
          for ( uint16_t istr = 0; istr < anal->peds()[iapv].size(); istr++ ) { 
            
            static float high_threshold = 5.;
            static float low_threshold  = 2.;
            static bool  disable_strip  = false;
            Fed9U::Fed9UStripDescription data( static_cast<uint32_t>( anal->peds()[iapv][istr]-pedshift ), 
                                               high_threshold, 
                                               low_threshold, 
                                               anal->raw()[iapv][istr], //@@ raw noise!
                                               disable_strip );
            Fed9U::Fed9UAddress addr( ichan, iapv, istr );
            (*ifed)->getFedStrips().setStrip( addr, data );
            
          }
        }
        updated++;
      
      } else {
        edm::LogWarning(mlDqmClient_) 
          << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
          << " Unable to find pedestals/noise for FedKey/Id/Ch: " 
          << hex << setw(8) << setfill('0') << fed_key.key() << dec << "/"
          << (*ifed)->getFedId() << "/"
          << ichan
          << " and device with FEC/slot/ring/CCU/LLD " 
          << fec_key.fecCrate() << "/"
          << fec_key.fecSlot() << "/"
          << fec_key.fecRing() << "/"
          << fec_key.ccuAddr() << "/"
          << fec_key.ccuChan() << "/"
          << fec_key.channel();
      }
    }
  }

  edm::LogVerbatim(mlDqmClient_) 
    << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
    << " Updated FED pedestals/noise for " 
    << updated << " channels";

}
void PedsOnlyHistosUsingDb::uploadConfigurations ( ) [virtual]

Reimplemented from CommissioningHistosUsingDb.

Definition at line 41 of file PedsOnlyHistosUsingDb.cc.

References CommissioningHistosUsingDb::db(), CommissioningHistosUsingDb::doUploadConf(), SiStripConfigDb::getFedDescriptions(), LogTrace, sistrip::mlDqmClient_, update(), and SiStripConfigDb::uploadFedDescriptions().

                                                 {
  LogTrace(mlDqmClient_) 
    << "[PedsOnlyHistosUsingDb::" << __func__ << "]";

  if ( !db() ) {
    edm::LogError(mlDqmClient_) 
      << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
      << " NULL pointer to SiStripConfigDb interface!"
      << " Aborting upload...";
    return;
  }
  
  // Update FED descriptions with new peds/noise values
  SiStripConfigDb::FedDescriptionsRange feds = db()->getFedDescriptions(); 
  update( feds );
  if ( doUploadConf() ) { 
    edm::LogVerbatim(mlDqmClient_) 
      << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
      << " Uploading pedestals/noise to DB...";
    db()->uploadFedDescriptions(); 
    edm::LogVerbatim(mlDqmClient_) 
      << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
      << " Completed database upload of " << feds.size() 
      << " FED descriptions!";
  } else {
    edm::LogWarning(mlDqmClient_) 
      << "[PedsOnlyHistosUsingDb::" << __func__ << "]"
      << " TEST only! No pedestals/noise values will be uploaded to DB...";
  }
  
}