00001 #include "DQM/SiStripCommissioningSources/interface/LatencyTask.h"
00002 #include "DataFormats/SiStripCommon/interface/SiStripHistoTitle.h"
00003 #include <DataFormats/SiStripDetId/interface/SiStripDetId.h>
00004 #include "DQMServices/Core/interface/DQMStore.h"
00005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00006 #include "DataFormats/SiStripCommon/interface/SiStripDetKey.h"
00007
00008 #define NBINS (192)
00009 #define LOWBIN (-4800)
00010 #define HIGHBIN (0)
00011
00012
00013
00014 CommissioningTask::HistoSet LatencyTask::timing_;
00015 CommissioningTask::HistoSet LatencyTask::cluster_;
00016
00017
00018
00019 LatencyTask::LatencyTask( DQMStore* dqm,
00020 const FedChannelConnection& conn ) :
00021 CommissioningTask( dqm, conn, "LatencyTask" ),firstReading_(-1)
00022 {
00023 LogDebug("Commissioning") << "[LatencyTask::LatencyTask] Constructing object...";
00024 }
00025
00026
00027
00028 LatencyTask::~LatencyTask() {
00029 LogDebug("Commissioning") << "[LatencyTask::LatencyTask] Destructing object...";
00030 }
00031
00032
00033
00034 void LatencyTask::book() {
00035 LogDebug("Commissioning") << "[LatencyTask::book]";
00036
00037 std::string title;
00038 int nBins = NBINS;
00039 SiStripDetKey detkeytracker((uint32_t) 0);
00040 SiStripDetKey detkeypartition((uint16_t) (connection().fecCrate()));
00041
00042
00043 if (timing_.histo()) {
00044
00045 LogDebug("Commissioning") << "[LatencyTask::book] using existing histogram.";
00046 } else {
00047
00048 LogDebug("Commissioning") << "[LatencyTask::book] booking a new histogram in " << dqm()->pwd();
00049
00050 title = SiStripHistoTitle( sistrip::EXPERT_HISTO,
00051 sistrip::APV_LATENCY,
00052 sistrip::DET_KEY,
00053 detkeytracker.key(),
00054 sistrip::TRACKER,
00055 0,
00056 sistrip::extrainfo::clusterCharge_ ).title();
00057 dqm()->setCurrentFolder( detkeytracker.path() );
00058 timing_.histo( dqm()->bookProfile( title, title,
00059 nBins, LOWBIN, HIGHBIN,
00060 100, 0., -1., "s" ) );
00061 timing_.vNumOfEntries_.resize(nBins,0);
00062 timing_.vSumOfContents_.resize(nBins,0);
00063 timing_.vSumOfSquares_.resize(nBins,0);
00064 }
00065
00066 LogDebug("Commissioning") << "[LatencyTask::book] booking a new histogram in " << dqm()->pwd();
00067
00068 title = SiStripHistoTitle( sistrip::EXPERT_HISTO,
00069 sistrip::APV_LATENCY,
00070 sistrip::DET_KEY,
00071 detkeypartition.key(),
00072 sistrip::PARTITION,
00073 0,
00074 sistrip::extrainfo::clusterCharge_ ).title();
00075 dqm()->setCurrentFolder( detkeypartition.path() );
00076 timingPartition_.histo( dqm()->bookProfile( title, title,
00077 nBins, LOWBIN, HIGHBIN,
00078 100, 0., -1., "s" ) );
00079 timingPartition_.vNumOfEntries_.resize(nBins,0);
00080 timingPartition_.vSumOfContents_.resize(nBins,0);
00081 timingPartition_.vSumOfSquares_.resize(nBins,0);
00082
00083
00084 if (cluster_.histo()) {
00085
00086 LogDebug("Commissioning") << "[LatencyTask::book] using existing histogram.";
00087 } else {
00088
00089 LogDebug("Commissioning") << "[LatencyTask::book] booking a new histogram in " << dqm()->pwd();
00090
00091 title = SiStripHistoTitle( sistrip::EXPERT_HISTO,
00092 sistrip::APV_LATENCY,
00093 sistrip::DET_KEY,
00094 detkeytracker.key(),
00095 sistrip::TRACKER,
00096 0,
00097 sistrip::extrainfo::occupancy_).title();
00098 dqm()->setCurrentFolder( detkeytracker.path() );
00099 cluster_.histo( dqm()->book1D( title, title,
00100 nBins, LOWBIN, HIGHBIN ));
00101 cluster_.isProfile_ = false;
00102 cluster_.vNumOfEntries_.resize(nBins,0);
00103 cluster_.vSumOfContents_.resize(nBins,0);
00104 cluster_.vSumOfSquares_.resize(nBins,0);
00105 }
00106
00107 LogDebug("Commissioning") << "[LatencyTask::book] booking a new histogram in " << dqm()->pwd();
00108
00109 title = SiStripHistoTitle( sistrip::EXPERT_HISTO,
00110 sistrip::APV_LATENCY,
00111 sistrip::DET_KEY,
00112 detkeypartition.key(),
00113 sistrip::PARTITION,
00114 0,
00115 sistrip::extrainfo::occupancy_ ).title();
00116 dqm()->setCurrentFolder( detkeypartition.path() );
00117 clusterPartition_.histo( dqm()->book1D( title, title,
00118 nBins, LOWBIN, HIGHBIN ) );
00119 clusterPartition_.isProfile_ = false;
00120 clusterPartition_.vNumOfEntries_.resize(nBins,0);
00121 clusterPartition_.vSumOfContents_.resize(nBins,0);
00122 clusterPartition_.vSumOfSquares_.resize(nBins,0);
00123
00124 LogDebug("Commissioning") << "[LatencyTask::book] done";
00125 }
00126
00127
00128
00129 void LatencyTask::fill( const SiStripEventSummary& summary,
00130 const edm::DetSet<SiStripRawDigi>& digis ) {
00131 LogDebug("Commissioning") << "[LatencyTask::fill]";
00132
00133 int32_t delay = static_cast<int32_t>( const_cast<SiStripEventSummary&>(summary).latency() );
00134 if(firstReading_==-1) firstReading_ = delay;
00135 float correctedDelay = 0.;
00136 LogDebug("Commissioning") << "[LatencyTask::fill]; the delay is " << delay;
00137
00138 unsigned int nclusters = 0;
00139 for(unsigned int strip=0;strip<digis.data.size();strip++) {
00140 if(digis.data[strip].adc()!=0) {
00141
00142 ++nclusters;
00143
00144
00145
00146 correctedDelay = delay*(-25.);
00147
00148 int bin = int((correctedDelay-LOWBIN)/((HIGHBIN-LOWBIN)/NBINS));
00149 LogDebug("Commissioning") << "[LatencyTask::fill]; using a hit with value " << ( digis.data[strip].adc()&0xff )
00150 << " at corrected delay of " << correctedDelay
00151 << " in bin " << bin ;
00152 updateHistoSet( timing_,bin,digis.data[strip].adc()&0xff);
00153 LogDebug("Commissioning") << "HistoSet timing Updated " << strip << " " << digis.data.size();
00154 updateHistoSet( timingPartition_,bin,digis.data[strip].adc()&0xff);
00155 LogDebug("Commissioning") << "HistoSet timingPartition Updated " << strip << " " << digis.data.size();
00156 }
00157 }
00158
00159 int bin = int((delay*(-25.)-LOWBIN)/((HIGHBIN-LOWBIN)/NBINS));
00160 LogDebug("Commissioning") << "[LatencyTask::fill]; occupancy is " << nclusters;
00161 updateHistoSet( cluster_,bin,nclusters );
00162 updateHistoSet( clusterPartition_,bin,nclusters );
00163 }
00164
00165
00166
00167 void LatencyTask::update() {
00168 LogDebug("Commissioning") << "[LatencyTask::update]";
00169 updateHistoSet( timing_ );
00170 updateHistoSet( timingPartition_ );
00171 updateHistoSet( cluster_ );
00172 updateHistoSet( clusterPartition_ );
00173 }
00174