CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes

LatencyTask Class Reference

#include <LatencyTask.h>

Inheritance diagram for LatencyTask:
CommissioningTask

List of all members.

Public Member Functions

 LatencyTask (DQMStore *, const FedChannelConnection &)
virtual ~LatencyTask ()

Private Member Functions

virtual void book ()
virtual void fill (const SiStripEventSummary &, const edm::DetSet< SiStripRawDigi > &)
virtual void update ()

Private Attributes

HistoSet clusterPartition_
int firstReading_
HistoSet timingPartition_

Static Private Attributes

static HistoSet cluster_
static HistoSet timing_

Detailed Description

Definition at line 11 of file LatencyTask.h.


Constructor & Destructor Documentation

LatencyTask::LatencyTask ( DQMStore dqm,
const FedChannelConnection conn 
)

Definition at line 19 of file LatencyTask.cc.

References LogDebug.

                                                                 :
  CommissioningTask( dqm, conn, "LatencyTask" ),firstReading_(-1)
{
  LogDebug("Commissioning") << "[LatencyTask::LatencyTask] Constructing object...";
}
LatencyTask::~LatencyTask ( ) [virtual]

Definition at line 28 of file LatencyTask.cc.

References LogDebug.

                          {
  LogDebug("Commissioning") << "[LatencyTask::LatencyTask] Destructing object...";
}

Member Function Documentation

void LatencyTask::book ( ) [private, virtual]

Reimplemented from CommissioningTask.

Definition at line 34 of file LatencyTask.cc.

References sistrip::APV_LATENCY, cluster_, sistrip::extrainfo::clusterCharge_, clusterPartition_, CommissioningTask::connection(), sistrip::DET_KEY, CommissioningTask::dqm(), sistrip::EXPERT_HISTO, HIGHBIN, CommissioningTask::HistoSet::histo(), CommissioningTask::HistoSet::isProfile_, SiStripKey::key(), LogDebug, LOWBIN, NBINS, sistrip::extrainfo::occupancy_, sistrip::PARTITION, SiStripKey::path(), DQMStore::pwd(), DQMStore::setCurrentFolder(), timing_, timingPartition_, indexGen::title, sistripsummary::TRACKER, CommissioningTask::HistoSet::vNumOfEntries_, CommissioningTask::HistoSet::vSumOfContents_, and CommissioningTask::HistoSet::vSumOfSquares_.

                       {
  LogDebug("Commissioning") << "[LatencyTask::book]";

  std::string title;
  int nBins = NBINS;
  SiStripDetKey detkeytracker((uint32_t) 0);
  SiStripDetKey detkeypartition((uint16_t) (connection().fecCrate()));

  // see if the global timing histogram is already booked
  if (timing_.histo()) {
    // if already booked, use it
    LogDebug("Commissioning") << "[LatencyTask::book] using existing histogram.";
  } else {
    // make a new histo on the tracker level if not existing yet
    LogDebug("Commissioning") << "[LatencyTask::book] booking a new histogram in " << dqm()->pwd();
    // construct the histo title
    title = SiStripHistoTitle( sistrip::EXPERT_HISTO,
                               sistrip::APV_LATENCY,
                               sistrip::DET_KEY,
                               detkeytracker.key(),
                               sistrip::TRACKER,
                               0,
                               sistrip::extrainfo::clusterCharge_ ).title();
    dqm()->setCurrentFolder( detkeytracker.path() );
    timing_.histo( dqm()->bookProfile( title, title,            // name and title
                                       nBins, LOWBIN, HIGHBIN,  // binning + range
                                       100, 0., -1., "s" ) );    // Y range : automatic
    timing_.vNumOfEntries_.resize(nBins,0);
    timing_.vSumOfContents_.resize(nBins,0);
    timing_.vSumOfSquares_.resize(nBins,0);
  }
  // make a new histo on the partition level if not existing yet
  LogDebug("Commissioning") << "[LatencyTask::book] booking a new histogram in " << dqm()->pwd();
  // histo title
  title = SiStripHistoTitle( sistrip::EXPERT_HISTO,
                             sistrip::APV_LATENCY,
                             sistrip::DET_KEY,
                             detkeypartition.key(),
                             sistrip::PARTITION,
                             0,
                             sistrip::extrainfo::clusterCharge_ ).title();
  dqm()->setCurrentFolder( detkeypartition.path() );
  timingPartition_.histo( dqm()->bookProfile( title, title,            // name and title
                                              nBins, LOWBIN, HIGHBIN,  // binning + range
                                              100, 0., -1., "s" ) );    // Y range : automatic
  timingPartition_.vNumOfEntries_.resize(nBins,0);
  timingPartition_.vSumOfContents_.resize(nBins,0);
  timingPartition_.vSumOfSquares_.resize(nBins,0);

  // see if the global cluster histogram is already booked
  if (cluster_.histo()) {
    // if already booked, use it
    LogDebug("Commissioning") << "[LatencyTask::book] using existing histogram.";
  } else {
    // make a new histo on the tracker level if not existing yet
    LogDebug("Commissioning") << "[LatencyTask::book] booking a new histogram in " << dqm()->pwd();
    // construct the histo title
    title = SiStripHistoTitle( sistrip::EXPERT_HISTO,
                               sistrip::APV_LATENCY,
                               sistrip::DET_KEY,
                               detkeytracker.key(),
                               sistrip::TRACKER,
                               0,
                               sistrip::extrainfo::occupancy_).title();
    dqm()->setCurrentFolder( detkeytracker.path() );
    cluster_.histo( dqm()->book1D( title, title,               // name and title
                                   nBins, LOWBIN, HIGHBIN ));  // binning + range
    cluster_.isProfile_ = false;
    cluster_.vNumOfEntries_.resize(nBins,0);
    cluster_.vSumOfContents_.resize(nBins,0);
    cluster_.vSumOfSquares_.resize(nBins,0);
  }
  // make a new histo on the partition level if not existing yet
  LogDebug("Commissioning") << "[LatencyTask::book] booking a new histogram in " << dqm()->pwd();
  // histo title
  title = SiStripHistoTitle( sistrip::EXPERT_HISTO, 
                             sistrip::APV_LATENCY, 
                             sistrip::DET_KEY, 
                             detkeypartition.key(),
                             sistrip::PARTITION,
                             0,
                             sistrip::extrainfo::occupancy_ ).title(); 
  dqm()->setCurrentFolder( detkeypartition.path() );
  clusterPartition_.histo( dqm()->book1D( title, title,                // name and title
                                          nBins, LOWBIN, HIGHBIN ) );  // binning + range
  clusterPartition_.isProfile_ = false;
  clusterPartition_.vNumOfEntries_.resize(nBins,0);
  clusterPartition_.vSumOfContents_.resize(nBins,0);
  clusterPartition_.vSumOfSquares_.resize(nBins,0);

  LogDebug("Commissioning") << "[LatencyTask::book] done";
}
void LatencyTask::fill ( const SiStripEventSummary summary,
const edm::DetSet< SiStripRawDigi > &  digis 
) [private, virtual]

Reimplemented from CommissioningTask.

Definition at line 129 of file LatencyTask.cc.

References newFWLiteAna::bin, cluster_, clusterPartition_, edm::DetSet< T >::data, firstReading_, HIGHBIN, LogDebug, LOWBIN, NBINS, strip(), edmLumisInFiles::summary, timing_, timingPartition_, and CommissioningTask::updateHistoSet().

                                                                 {
  LogDebug("Commissioning") << "[LatencyTask::fill]";
  // retrieve the delay from the EventSummary
  int32_t delay = static_cast<int32_t>( const_cast<SiStripEventSummary&>(summary).latency() );
  if(firstReading_==-1) firstReading_ = delay;
  float correctedDelay = 0.;
  LogDebug("Commissioning") << "[LatencyTask::fill]; the delay is " << delay;
  // loop on the strips to find the (maybe) non-zero digi
  unsigned int nclusters = 0;
  for(unsigned int strip=0;strip<digis.data.size();strip++) {
    if(digis.data[strip].adc()!=0) {
      // count the "cluster"
      ++nclusters;
      // no TOF correction is applied.
      // 2 reasons: the effect is a priori to thin to be seen with 25ns steps
      // and it biases the result by one clock due to the 25bins in the HistoSet
      correctedDelay = delay*(-25.); // no TOF correction is applied. 
      // compute the bin
      int bin = int((correctedDelay-LOWBIN)/((HIGHBIN-LOWBIN)/NBINS));
      LogDebug("Commissioning") << "[LatencyTask::fill]; using a hit with value " << ( digis.data[strip].adc()&0xff )
                                << " at corrected delay of " << correctedDelay
                                << " in bin " << bin ;
      updateHistoSet( timing_,bin,digis.data[strip].adc()&0xff);
      LogDebug("Commissioning") << "HistoSet timing Updated " << strip << " " << digis.data.size();
      updateHistoSet( timingPartition_,bin,digis.data[strip].adc()&0xff);
      LogDebug("Commissioning") << "HistoSet timingPartition Updated " << strip << " " << digis.data.size();
    }
  }
  // set the occupancy
  int bin = int((delay*(-25.)-LOWBIN)/((HIGHBIN-LOWBIN)/NBINS));
  LogDebug("Commissioning") << "[LatencyTask::fill]; occupancy is " << nclusters;
  updateHistoSet( cluster_,bin,nclusters );
  updateHistoSet( clusterPartition_,bin,nclusters );
}
void LatencyTask::update ( void  ) [private, virtual]

Member Data Documentation

Definition at line 26 of file LatencyTask.h.

Referenced by book(), fill(), and update().

Definition at line 28 of file LatencyTask.h.

Referenced by book(), fill(), and update().

Definition at line 29 of file LatencyTask.h.

Referenced by fill().

Definition at line 25 of file LatencyTask.h.

Referenced by book(), fill(), and update().

Definition at line 27 of file LatencyTask.h.

Referenced by book(), fill(), and update().