#include <CalibrationScanTask.h>
Public Member Functions | |
CalibrationScanTask (DQMStore *, const FedChannelConnection &, const sistrip::RunType &, const char *filename, uint32_t run, const edm::EventSetup &setup) | |
virtual | ~CalibrationScanTask () |
Private Member Functions | |
virtual void | book () |
void | checkAndSave (const uint16_t &isha, const uint16_t &vfs) |
void | directory (std::stringstream &, uint32_t run_number=0) |
virtual void | fill (const SiStripEventSummary &, const edm::DetSet< SiStripRawDigi > &) |
virtual void | update () |
Private Attributes | |
MonitorElement * | calchanElement_ |
HistoSet | calib1_ |
HistoSet | calib2_ |
std::string | filename_ |
MonitorElement * | ishaElement_ |
uint16_t | lastCalchan_ |
uint16_t | lastISHA_ |
uint16_t | lastVFS_ |
uint16_t | nBins_ |
std::vector< uint16_t > | ped |
uint32_t | run_ |
sistrip::RunType | runType_ |
MonitorElement * | vfsElement_ |
Definition at line 10 of file CalibrationScanTask.h.
CalibrationScanTask::CalibrationScanTask | ( | DQMStore * | dqm, |
const FedChannelConnection & | conn, | ||
const sistrip::RunType & | rtype, | ||
const char * | filename, | ||
uint32_t | run, | ||
const edm::EventSetup & | setup | ||
) |
Definition at line 20 of file CalibrationScanTask.cc.
References FedChannelConnection::apvPairNumber(), FedChannelConnection::detId(), edm::EventSetup::get(), LogDebug, ped, strip(), and relativeConstraints::value.
: CommissioningTask( dqm, conn, "CalibrationScanTask" ), runType_(rtype), calib1_(),calib2_(), nBins_(65),lastISHA_(1000),lastVFS_(1000),lastCalchan_(1000), filename_(filename), run_(run) { LogDebug("Commissioning") << "[CalibrationScanTask::CalibrationScanTask] Constructing object..."; // load the pedestals edm::ESHandle<SiStripPedestals> pedestalsHandle; setup.get<SiStripPedestalsRcd>().get(pedestalsHandle); SiStripPedestals::Range detPedRange = pedestalsHandle->getRange(conn.detId()); int start = conn.apvPairNumber()*256; int stop = start + 256; int value = 0; ped.reserve(256); LogDebug("Commissioning") << "[CalibrationScanTask::CalibrationScanTask] Loading pedestal for " << conn.detId(); if(conn.detId()==0) return; for(int strip = start; strip < stop; ++strip) { value = int(pedestalsHandle->getPed(strip,detPedRange)); if(value>895) value -= 1024; ped.push_back(value); } }
CalibrationScanTask::~CalibrationScanTask | ( | ) | [virtual] |
Definition at line 53 of file CalibrationScanTask.cc.
References LogDebug.
{ LogDebug("Commissioning") << "[CalibrationScanTask::CalibrationScanTask] Destructing object..."; }
void CalibrationScanTask::book | ( | ) | [private, virtual] |
Reimplemented from CommissioningTask.
Definition at line 59 of file CalibrationScanTask.cc.
References sistrip::APV, DQMStore::bookInt(), calchanElement_, calib1_, calib2_, CommissioningTask::connection(), sistrip::DET_KEY, CommissioningTask::dqm(), sistrip::EXPERT_HISTO, spr::find(), DQMStore::get(), DQMStore::getMEs(), CommissioningTask::HistoSet::histo(), ishaElement_, CommissioningTask::HistoSet::isProfile_, LogDebug, nBins_, DQMStore::pwd(), createBeamHaloJobs::pwd, sistrip::root_, runType_, DQMStore::setCurrentFolder(), SiStripHistoTitle::title(), vfsElement_, and CommissioningTask::HistoSet::vNumOfEntries_.
{ LogDebug("Commissioning") << "[CalibrationScanTask::book]"; // construct the histo titles and book two histograms: one per APV std::string title1 = SiStripHistoTitle( sistrip::EXPERT_HISTO, runType_, sistrip::DET_KEY, connection().detId(), sistrip::APV, connection().i2cAddr(0) ).title(); calib1_.histo( dqm()->book1D( title1, title1, nBins_, 0, 203.125) ); calib1_.isProfile_=false; calib1_.vNumOfEntries_.resize(nBins_,0); std::string title2 = SiStripHistoTitle( sistrip::EXPERT_HISTO, runType_, sistrip::DET_KEY, connection().detId(), sistrip::APV, connection().i2cAddr(1) ).title(); calib2_.histo( dqm()->book1D( title2, title2, nBins_, 0, 203.125) ); calib2_.isProfile_=false; calib2_.vNumOfEntries_.resize(nBins_,0); // book the isha, vfs values std::string pwd = dqm()->pwd(); std::string rootDir = pwd.substr(0,pwd.find(std::string(sistrip::root_) + "/")+(sizeof(sistrip::root_) - 1)); dqm()->setCurrentFolder( rootDir ); std::vector<std::string> existingMEs = dqm()->getMEs(); if(find(existingMEs.begin(),existingMEs.end(),"isha")!=existingMEs.end()) { ishaElement_ = dqm()->get(dqm()->pwd()+"/isha"); } else { ishaElement_ = dqm()->bookInt("isha"); } if(find(existingMEs.begin(),existingMEs.end(),"isha")!=existingMEs.end()) { vfsElement_ = dqm()->get(dqm()->pwd()+"/vfs"); } else { vfsElement_ = dqm()->bookInt("vfs"); } if(find(existingMEs.begin(),existingMEs.end(),"calchan")!=existingMEs.end()) { calchanElement_ = dqm()->get(dqm()->pwd()+"/calchan"); } else { calchanElement_ = dqm()->bookInt("calchan"); } LogDebug("Commissioning") << "[CalibrationScanTask::book] done"; }
void CalibrationScanTask::checkAndSave | ( | const uint16_t & | isha, |
const uint16_t & | vfs | ||
) | [private] |
Definition at line 143 of file CalibrationScanTask.cc.
References sistrip::APV, calchanElement_, calib1_, calib2_, CommissioningTask::connection(), sistrip::DET_KEY, dir, directory(), CommissioningTask::dqm(), sistrip::EXPERT_HISTO, cmsPerfPublish::fail(), filename_, MonitorElement::Fill(), CommissioningTask::HistoSet::histo(), recoMuon::in, ishaElement_, lastCalchan_, lastISHA_, lastVFS_, LogTrace, mergeVDriftHistosByStation::name, nBins_, NULL, run_, runType_, DQMStore::save(), indexGen::title, update(), vfsElement_, and CommissioningTask::HistoSet::vNumOfEntries_.
Referenced by fill().
{ //for the first time if(lastISHA_==1000 && lastVFS_==1000) { lastISHA_ = isha; lastVFS_ = vfs; } // set the calchan value in the correspond string ishaElement_->Fill(lastISHA_); vfsElement_->Fill(lastVFS_); calchanElement_->Fill(lastCalchan_); // check if ISHA/VFS has changed // in that case, save the histograms, reset them, change the title and continue if(lastISHA_!=isha || lastVFS_!=vfs) { // set histograms before saving update(); //TODO: we must do this for all tasks, otherwise only the first is updated. // change the title std::stringstream complement; complement << "ISHA" << isha << "_VFS" << vfs; std::string title1 = SiStripHistoTitle( sistrip::EXPERT_HISTO, runType_, sistrip::DET_KEY, connection().detId(), sistrip::APV, connection().i2cAddr(0), complement.str() ).title(); calib1_.histo()->setTitle(title1); std::string title2 = SiStripHistoTitle( sistrip::EXPERT_HISTO, runType_, sistrip::DET_KEY, connection().detId(), sistrip::APV, connection().i2cAddr(1), complement.str() ).title(); calib2_.histo()->setTitle(title2); // Strip filename of ".root" extension std::string name; if ( filename_.find(".root",0) == std::string::npos ) { name = filename_; } else { name = filename_.substr( 0, filename_.find(".root",0) ); } // Retrieve SCRATCH directory std::string scratch = "SCRATCH"; //@@ remove trailing slash!!! std::string dir = ""; if ( getenv(scratch.c_str()) != NULL ) { dir = getenv(scratch.c_str()); } // Save file with appropriate filename std::stringstream ss; if ( !dir.empty() ) { ss << dir << "/"; } else { ss << "/tmp/"; } ss << name << "_"; directory(ss,run_); // Add filename with run number, host ip, pid and .root extension ss << "_ISHA" << lastISHA_ << "_VFS" << lastVFS_; // Add ISHA and VFS values ss << "_000"; // Add FU instance number (fake) ss << ".root"; // Append ".root" extension if ( !filename_.empty() ) { if(ifstream(ss.str().c_str(),ifstream::in).fail()) { //save only once. Skip if the file already exist dqm()->save( ss.str() ); LogTrace("DQMsource") << "[SiStripCommissioningSource::" << __func__ << "]" << " Saved all histograms to file \"" << ss.str() << "\""; } else { LogTrace("DQMsource") << "[SiStripCommissioningSource::" << __func__ << "]" << " Skipping creation of file \"" << ss.str() << "\" that already exists" ; } } else { edm::LogWarning("DQMsource") << "[SiStripCommissioningSource::" << __func__ << "]" << " NULL value for filename! No root file saved!"; } // reset calib1_.vNumOfEntries_.clear(); calib1_.vNumOfEntries_.resize(nBins_,0); calib2_.vNumOfEntries_.clear(); calib2_.vNumOfEntries_.resize(nBins_,0); // set new parameter values lastISHA_=isha; lastVFS_=vfs; // set the calchan value in the correspond string ishaElement_->Fill(lastISHA_); vfsElement_->Fill(lastVFS_); calchanElement_->Fill(lastCalchan_); } }
void CalibrationScanTask::directory | ( | std::stringstream & | dir, |
uint32_t | run_number = 0 |
||
) | [private] |
Definition at line 241 of file CalibrationScanTask.cc.
References evf::utils::pid, pos, and tmp.
Referenced by checkAndSave().
{ // Get details about host char hn[256]; gethostname( hn, sizeof(hn) ); struct hostent* he; he = gethostbyname(hn); // Extract host name and ip std::string host_name; std::string host_ip; if ( he ) { host_name = std::string(he->h_name); host_ip = std::string( inet_ntoa( *(struct in_addr*)(he->h_addr) ) ); } else { host_name = "unknown.cern.ch"; host_ip = "255.255.255.255"; } // Reformat IP address std::string::size_type pos = 0; std::stringstream ip; //for ( uint16_t ii = 0; ii < 4; ++ii ) { while ( pos != std::string::npos ) { std::string::size_type tmp = host_ip.find(".",pos); if ( tmp != std::string::npos ) { ip << std::setw(3) << std::setfill('0') << host_ip.substr( pos, tmp-pos ) << "."; pos = tmp+1; // skip the delimiter "." } else { ip << std::setw(3) << std::setfill('0') << host_ip.substr( pos ); pos = std::string::npos; } } // Get pid pid_t pid = getpid(); // Construct string dir << std::setw(8) << std::setfill('0') << run_number << "_" << ip.str() << "_" << std::setw(5) << std::setfill('0') << pid; }
void CalibrationScanTask::fill | ( | const SiStripEventSummary & | summary, |
const edm::DetSet< SiStripRawDigi > & | digis | ||
) | [private, virtual] |
Reimplemented from CommissioningTask.
Definition at line 109 of file CalibrationScanTask.cc.
References newFWLiteAna::bin, SiStripEventSummary::calChan(), calib1_, calib2_, SiStripEventSummary::calSel(), checkAndSave(), edm::DetSet< T >::data, SiStripEventSummary::isha(), gen::k, lastCalchan_, SiStripEventSummary::latency(), ped, update(), CommissioningTask::updateHistoSet(), and SiStripEventSummary::vfs().
{ // LogDebug("Commissioning") << "[CalibrationScanTask::fill]: isha/vfs = " << summary.isha() << "/" << summary.vfs(); // Check if ISHA/VFS changed. In that case, save, reset histo, change title, and continue checkAndSave(summary.isha(),summary.vfs()); // retrieve the delay from the EventSummary int bin = (100-summary.latency())*8+(7-summary.calSel()); // loop on the strips to fill the histogram // digis are obtained for an APV pair. // strips 0->127 : calib1_ // strips 128->255: calib2_ // then, only some strips are fired at a time. // We use calChan to know that int isub,ical = summary.calChan(); isub = ical<4 ? ical+4 : ical-4; lastCalchan_ = ical; for (int k=0;k<16;++k) { // all strips of the APV are merged in updateHistoSet( calib1_,bin,digis.data[ical+k*8].adc()-ped[ical+k*8]-(digis.data[isub+k*8].adc()-ped[isub+k*8])); updateHistoSet( calib2_,bin,digis.data[128+ical+k*8].adc()-ped[128+ical+k*8]-(digis.data[128+isub+k*8].adc()-ped[128+isub+k*8])); } update(); //TODO: temporary: find a better solution later }
void CalibrationScanTask::update | ( | void | ) | [private, virtual] |
Reimplemented from CommissioningTask.
Definition at line 135 of file CalibrationScanTask.cc.
References calib1_, calib2_, and CommissioningTask::updateHistoSet().
Referenced by checkAndSave(), and fill().
{ // LogDebug("Commissioning") << "[CalibrationScanTask::update]"; // huge output updateHistoSet( calib1_ ); updateHistoSet( calib2_ ); }
MonitorElement * CalibrationScanTask::calchanElement_ [private] |
Definition at line 36 of file CalibrationScanTask.h.
Referenced by book(), and checkAndSave().
HistoSet CalibrationScanTask::calib1_ [private] |
Definition at line 29 of file CalibrationScanTask.h.
Referenced by book(), checkAndSave(), fill(), and update().
HistoSet CalibrationScanTask::calib2_ [private] |
Definition at line 29 of file CalibrationScanTask.h.
Referenced by book(), checkAndSave(), fill(), and update().
std::string CalibrationScanTask::filename_ [private] |
Definition at line 33 of file CalibrationScanTask.h.
Referenced by checkAndSave().
MonitorElement* CalibrationScanTask::ishaElement_ [private] |
Definition at line 36 of file CalibrationScanTask.h.
Referenced by book(), and checkAndSave().
uint16_t CalibrationScanTask::lastCalchan_ [private] |
Definition at line 32 of file CalibrationScanTask.h.
Referenced by checkAndSave(), and fill().
uint16_t CalibrationScanTask::lastISHA_ [private] |
Definition at line 32 of file CalibrationScanTask.h.
Referenced by checkAndSave().
uint16_t CalibrationScanTask::lastVFS_ [private] |
Definition at line 32 of file CalibrationScanTask.h.
Referenced by checkAndSave().
uint16_t CalibrationScanTask::nBins_ [private] |
Definition at line 31 of file CalibrationScanTask.h.
Referenced by book(), and checkAndSave().
std::vector<uint16_t> CalibrationScanTask::ped [private] |
Definition at line 34 of file CalibrationScanTask.h.
Referenced by CalibrationScanTask(), and fill().
uint32_t CalibrationScanTask::run_ [private] |
Definition at line 35 of file CalibrationScanTask.h.
Referenced by checkAndSave().
Definition at line 27 of file CalibrationScanTask.h.
Referenced by book(), and checkAndSave().
MonitorElement * CalibrationScanTask::vfsElement_ [private] |
Definition at line 36 of file CalibrationScanTask.h.
Referenced by book(), and checkAndSave().