File indexing completed on 2024-09-11 04:32:39
0001 #include "DQM/SiStripCommissioningSources/interface/SiStripCommissioningSource.h"
0002 #include "CalibFormats/SiStripObjects/interface/SiStripFecCabling.h"
0003 #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h"
0004 #include "DQM/SiStripCommissioningSources/interface/ApvTimingTask.h"
0005 #include "DQM/SiStripCommissioningSources/interface/Averages.h"
0006 #include "DQM/SiStripCommissioningSources/interface/CalibrationScanTask.h"
0007 #include "DQM/SiStripCommissioningSources/interface/CalibrationTask.h"
0008 #include "DQM/SiStripCommissioningSources/interface/DaqScopeModeTask.h"
0009 #include "DQM/SiStripCommissioningSources/interface/FastFedCablingTask.h"
0010 #include "DQM/SiStripCommissioningSources/interface/FedCablingTask.h"
0011 #include "DQM/SiStripCommissioningSources/interface/FedTimingTask.h"
0012 #include "DQM/SiStripCommissioningSources/interface/FineDelayTask.h"
0013 #include "DQM/SiStripCommissioningSources/interface/LatencyTask.h"
0014 #include "DQM/SiStripCommissioningSources/interface/NoiseTask.h"
0015 #include "DQM/SiStripCommissioningSources/interface/OptoScanTask.h"
0016 #include "DQM/SiStripCommissioningSources/interface/PedestalsTask.h"
0017 #include "DQM/SiStripCommissioningSources/interface/PedsFullNoiseTask.h"
0018 #include "DQM/SiStripCommissioningSources/interface/PedsOnlyTask.h"
0019 #include "DQM/SiStripCommissioningSources/interface/VpspScanTask.h"
0020 #include "DQMServices/Core/interface/DQMStore.h"
0021 #include "DataFormats/Common/interface/Handle.h"
0022 #include "DataFormats/SiStripCommon/interface/SiStripEnumsAndStrings.h"
0023 #include "DataFormats/SiStripCommon/interface/SiStripEventSummary.h"
0024 #include "DataFormats/SiStripCommon/interface/SiStripFecKey.h"
0025 #include "DataFormats/SiStripCommon/interface/SiStripFedKey.h"
0026 #include "FWCore/Framework/interface/Event.h"
0027 #include "FWCore/Framework/interface/EventSetup.h"
0028 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0029 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0030 #include "FWCore/ServiceRegistry/interface/Service.h"
0031 #include "FWCore/Utilities/interface/Exception.h"
0032 #include <ctime>
0033 #include <iomanip>
0034 #include <memory>
0035 #include <sstream>
0036
0037 #include <sys/types.h>
0038 #include <unistd.h>
0039 #include <iomanip>
0040
0041 #include <arpa/inet.h>
0042 #include <cstdio>
0043 #include <netdb.h>
0044 #include <sys/socket.h>
0045 #include <sys/unistd.h>
0046 #include <cstdint>
0047
0048 using namespace sistrip;
0049
0050
0051
0052 SiStripCommissioningSource::SiStripCommissioningSource(const edm::ParameterSet& pset)
0053 : dqm_(nullptr),
0054 fedCablingToken_(esConsumes<edm::Transition::BeginRun>()),
0055 fecCabling_(nullptr),
0056 inputModuleLabel_(pset.getParameter<std::string>("InputModuleLabel")),
0057 inputModuleLabelAlt_(pset.existsAs<std::string>("InputModuleLabelAlt")
0058 ? pset.getParameter<std::string>("InputModuleLabelAlt")
0059 : ""),
0060 inputModuleLabelSummary_(pset.getParameter<std::string>("SummaryInputModuleLabel")),
0061 inputClusterLabel_(
0062 pset.existsAs<std::string>("InputClusterLabel") ? pset.getParameter<std::string>("InputClusterLabel") : ""),
0063 filename_(pset.getUntrackedParameter<std::string>("RootFileName", sistrip::dqmSourceFileName_)),
0064 run_(0),
0065 partitionName_(pset.existsAs<std::string>("PartitionName") ? pset.getParameter<std::string>("PartitionName")
0066 : ""),
0067 time_(0),
0068 isSpy_(pset.existsAs<bool>("isSpy") ? pset.getParameter<bool>("isSpy") : false),
0069 taskConfigurable_(pset.getUntrackedParameter<std::string>("CommissioningTask", "UNDEFINED")),
0070 task_(sistrip::UNDEFINED_RUN_TYPE),
0071 tasks_(),
0072 cablingTasks_(),
0073 tasksExist_(false),
0074 cablingTask_(false),
0075 updateFreq_(pset.getUntrackedParameter<int>("HistoUpdateFreq", 1)),
0076 base_(""),
0077 view_(pset.getUntrackedParameter<std::string>("View", "Default")),
0078 parameters_(pset) {
0079 usesResource("DQMStore");
0080 inputModuleSummaryToken_ = consumes<SiStripEventSummary>(edm::InputTag(inputModuleLabelSummary_));
0081 digiVirginRawToken_ = mayConsume<edm::DetSetVector<SiStripRawDigi> >(edm::InputTag(inputModuleLabel_, "VirginRaw"));
0082 digiFineDelaySelectionToken_ =
0083 mayConsume<edm::DetSetVector<SiStripRawDigi> >(edm::InputTag(inputModuleLabel_, "FineDelaySelection"));
0084 digiReorderedToken_ = mayConsume<edm::DetSetVector<SiStripRawDigi> >(edm::InputTag(inputModuleLabel_, "Reordered"));
0085
0086 if (not isSpy_)
0087 digiScopeModeToken_ = mayConsume<edm::DetSetVector<SiStripRawDigi> >(edm::InputTag(inputModuleLabel_, "ScopeMode"));
0088 else {
0089 digiScopeModeToken_ =
0090 mayConsume<edm::DetSetVector<SiStripRawDigi> >(edm::InputTag(inputModuleLabelAlt_, "ScopeRawDigis"));
0091 clustersToken_ = mayConsume<edmNew::DetSetVector<SiStripCluster> >(edm::InputTag(inputClusterLabel_));
0092 }
0093
0094 LogTrace(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0095 << " Constructing object...";
0096 tasks_.clear();
0097 tasks_.resize(1024, VecOfTasks(96, static_cast<CommissioningTask*>(nullptr)));
0098
0099 if (task_ == sistrip::NOISE) {
0100 noiseToken_ = esConsumes();
0101 }
0102 if (task_ == sistrip::NOISE || task_ == sistrip::CALIBRATION_SCAN || task_ == sistrip::CALIBRATION_SCAN_DECO ||
0103 task_ == sistrip::CALIBRATION || task_ == sistrip::CALIBRATION_DECO) {
0104 pedestalToken_ = esConsumes();
0105 }
0106 }
0107
0108
0109
0110 SiStripCommissioningSource::~SiStripCommissioningSource() {
0111 LogTrace(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0112 << " Destructing object...";
0113 }
0114
0115
0116
0117 SiStripCommissioningSource::DQMStore* const SiStripCommissioningSource::dqm(std::string method) const {
0118 if (!dqm_) {
0119 std::stringstream ss;
0120 if (!method.empty()) {
0121 ss << "[SiStripCommissioningSource::" << method << "]" << std::endl;
0122 } else {
0123 ss << "[SiStripCommissioningSource]" << std::endl;
0124 }
0125 ss << " NULL pointer to DQMStore";
0126 edm::LogWarning(mlDqmSource_) << ss.str();
0127 return nullptr;
0128 } else {
0129 return dqm_;
0130 }
0131 }
0132
0133
0134
0135
0136
0137 void SiStripCommissioningSource::beginRun(edm::Run const& run, const edm::EventSetup& setup) {
0138 LogTrace(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0139 << " Configuring..." << std::endl;
0140
0141
0142
0143 dqm_ = edm::Service<DQMStore>().operator->();
0144 edm::LogInfo(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0145 << " DQMStore service: " << dqm_;
0146 dqm(__func__);
0147
0148
0149
0150 std::stringstream dir("");
0151 base_ = dir.str();
0152
0153
0154
0155 const auto& fed_cabling = setup.getData(fedCablingToken_);
0156 fedCabling_ = const_cast<SiStripFedCabling*>(&fed_cabling);
0157 LogDebug(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0158 << "Initialized FED cabling. Number of FEDs is " << fedCabling_->fedIds().size();
0159 fecCabling_ = new SiStripFecCabling(fed_cabling);
0160 if (fecCabling_->crates().empty()) {
0161 std::stringstream ss;
0162 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0163 << " Empty std::vector returned by FEC cabling object!"
0164 << " Check if database connection failed...";
0165 edm::LogWarning(mlDqmSource_) << ss.str();
0166 }
0167
0168
0169
0170 tasksExist_ = false;
0171 task_ = sistrip::UNDEFINED_RUN_TYPE;
0172 cablingTask_ = false;
0173
0174 remove();
0175
0176 clearCablingTasks();
0177 clearTasks();
0178 }
0179
0180
0181
0182 void SiStripCommissioningSource::endJob() {
0183 LogTrace(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0184 << " Halting..." << std::endl;
0185
0186
0187
0188 for (TaskMap::iterator itask = cablingTasks_.begin(); itask != cablingTasks_.end(); itask++) {
0189 if (itask->second) {
0190 itask->second->updateHistograms();
0191 }
0192 }
0193
0194 if (task_ == sistrip::APV_LATENCY) {
0195 for (uint16_t partition = 0; partition < 4; ++partition) {
0196 tasks_[0][partition]->updateHistograms();
0197 }
0198 } else if (task_ == sistrip::FINE_DELAY) {
0199 tasks_[0][0]->updateHistograms();
0200 } else {
0201
0202 uint16_t fed_id = 0;
0203 uint16_t fed_ch = 0;
0204 auto ifed = fedCabling_->fedIds().begin();
0205 for (; ifed != fedCabling_->fedIds().end(); ifed++) {
0206 auto conns = fedCabling_->fedConnections(*ifed);
0207 for (auto iconn = conns.begin(); iconn != conns.end(); iconn++) {
0208 if (!iconn->isConnected()) {
0209 continue;
0210 }
0211 fed_id = iconn->fedId();
0212 fed_ch = iconn->fedCh();
0213 if (tasks_[fed_id][fed_ch]) {
0214 tasks_[fed_id][fed_ch]->updateHistograms();
0215 delete tasks_[fed_id][fed_ch];
0216 }
0217 }
0218 }
0219 }
0220
0221
0222
0223 std::string name;
0224 if (filename_.find(".root", 0) == std::string::npos) {
0225 name = filename_;
0226 } else {
0227 name = filename_.substr(0, filename_.find(".root", 0));
0228 }
0229
0230
0231 std::string scratch = "SCRATCH";
0232 std::string dir = "";
0233 if (std::getenv(scratch.c_str()) != nullptr) {
0234 dir = std::getenv(scratch.c_str());
0235 }
0236
0237
0238 std::stringstream ss;
0239 if (!dir.empty()) {
0240 ss << dir << "/";
0241 } else {
0242 ss << "/tmp/";
0243 }
0244
0245
0246 ss << name << "_";
0247 if (task_ == sistrip::DAQ_SCOPE_MODE and not partitionName_.empty())
0248 ss << partitionName_ << "_";
0249
0250 directory(ss, run_);
0251 ss << ".root";
0252
0253
0254 if (!filename_.empty()) {
0255 if (run_ != 0) {
0256 dqm()->save(ss.str());
0257 } else {
0258 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0259 << " NULL value for RunNumber! No root file saved!";
0260 }
0261 } else {
0262 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0263 << " NULL value for filename! No root file saved!";
0264 }
0265
0266 LogTrace(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0267 << " Saved all histograms to file \"" << ss.str() << "\"";
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278 if (fedCabling_) {
0279 fedCabling_ = nullptr;
0280 }
0281 if (fecCabling_) {
0282 delete fecCabling_;
0283 fecCabling_ = nullptr;
0284 }
0285 }
0286
0287
0288
0289 void SiStripCommissioningSource::analyze(const edm::Event& event, const edm::EventSetup& setup) {
0290
0291 edm::Handle<SiStripEventSummary> summary;
0292
0293 event.getByToken(inputModuleSummaryToken_, summary);
0294
0295
0296 if ((summary->runType() == sistrip::UNDEFINED_RUN_TYPE || summary->runType() == sistrip::UNKNOWN_RUN_TYPE) &&
0297 summary->nullParams()) {
0298 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0299 << " Unknown/undefined RunType and NULL parameter values!"
0300 << " It may be that the 'trigger FED' object was not found!";
0301 }
0302
0303
0304
0305
0306
0307 if (event.id().run() != run_) {
0308 run_ = event.id().run();
0309 createRunNumber();
0310 }
0311
0312
0313 if (!(event.id().event() % updateFreq_)) {
0314 std::stringstream ss;
0315 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0316 << " The last " << updateFreq_ << " events were processed at a rate of ";
0317 if (time(nullptr) == time_) {
0318 ss << ">" << updateFreq_ << " Hz";
0319 } else {
0320 ss << (updateFreq_ / (time(nullptr) - time_)) << " Hz";
0321 }
0322 edm::LogVerbatim(mlDqmSource_) << ss.str();
0323 time_ = time(nullptr);
0324 }
0325
0326
0327 if (!tasksExist_) {
0328 createTask(summary.product(), setup);
0329 } else {
0330 for (auto& v : tasks_) {
0331 for (auto& t : v) {
0332 t->eventSetup(&setup);
0333 }
0334 }
0335 }
0336
0337
0338 edm::Handle<edm::DetSetVector<SiStripRawDigi> > raw;
0339 edm::Handle<edm::DetSetVector<SiStripRawDigi> > rawAlt;
0340 edm::Handle<edmNew::DetSetVector<SiStripCluster> > cluster;
0341
0342 if (task_ == sistrip::DAQ_SCOPE_MODE) {
0343 if (not isSpy_ and
0344 summary->fedReadoutMode() == FED_VIRGIN_RAW) {
0345 event.getByToken(digiVirginRawToken_, raw);
0346 } else if (not isSpy_ and summary->fedReadoutMode() == FED_SCOPE_MODE) {
0347 event.getByToken(digiScopeModeToken_, raw);
0348 } else if (isSpy_) {
0349 event.getByToken(digiScopeModeToken_, rawAlt);
0350 event.getByToken(digiReorderedToken_, raw);
0351 if (not inputClusterLabel_.empty())
0352 event.getByToken(clustersToken_, cluster);
0353 } else {
0354 std::stringstream ss;
0355 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0356 << " Requested DAQ_SCOPE_MODE but unknown FED"
0357 << " readout mode retrieved from SiStripEventSummary: "
0358 << SiStripEnumsAndStrings::fedReadoutMode(summary->fedReadoutMode());
0359 edm::LogWarning(mlDqmSource_) << ss.str();
0360 }
0361 } else if (task_ == sistrip::FAST_CABLING || task_ == sistrip::FED_CABLING || task_ == sistrip::APV_TIMING ||
0362 task_ == sistrip::FED_TIMING || task_ == sistrip::OPTO_SCAN) {
0363 event.getByToken(digiScopeModeToken_, raw);
0364 } else if (task_ == sistrip::VPSP_SCAN || task_ == sistrip::CALIBRATION || task_ == sistrip::CALIBRATION_DECO ||
0365 task_ == sistrip::CALIBRATION_SCAN || task_ == sistrip::CALIBRATION_SCAN_DECO ||
0366 task_ == sistrip::PEDESTALS || task_ == sistrip::PEDS_ONLY || task_ == sistrip::NOISE ||
0367 task_ == sistrip::PEDS_FULL_NOISE) {
0368 event.getByToken(digiVirginRawToken_, raw);
0369 } else if (task_ == sistrip::APV_LATENCY || task_ == sistrip::FINE_DELAY) {
0370 event.getByToken(digiFineDelaySelectionToken_, raw);
0371 } else {
0372 std::stringstream ss;
0373 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0374 << " Unknown CommissioningTask: " << SiStripEnumsAndStrings::runType(task_)
0375 << " Unable to establish FED readout mode and retrieve digi container!"
0376 << " Check if SiStripEventSummary object is found/present in Event";
0377 edm::LogWarning(mlDqmSource_) << ss.str();
0378 return;
0379 }
0380
0381
0382 if (not raw.isValid()) {
0383 std::stringstream ss;
0384 ss << "[SiStripCommissioningSource::" << __func__ << "]" << std::endl
0385 << " NULL pointer to DetSetVector!" << std::endl
0386 << " Unable to fill histograms!";
0387 edm::LogWarning(mlDqmSource_) << ss.str();
0388 return;
0389 }
0390
0391 if (isSpy_ and not inputModuleLabelAlt_.empty() and not rawAlt.isValid()) {
0392 std::stringstream ss;
0393 ss << "[SiStripCommissioningSource::" << __func__ << "]" << std::endl
0394 << " NULL pointer to DetSetVector!" << std::endl
0395 << " Unable to fill histograms!";
0396 edm::LogWarning(mlDqmSource_) << ss.str();
0397 return;
0398 }
0399
0400 if (isSpy_ and not inputClusterLabel_.empty() and not cluster.isValid()) {
0401 std::stringstream ss;
0402 ss << "[SiStripCommissioningSource::" << __func__ << "]" << std::endl
0403 << " NULL pointer to DetSetVector!" << std::endl
0404 << " Unable to fill histograms!";
0405 edm::LogWarning(mlDqmSource_) << ss.str();
0406 return;
0407 }
0408
0409 if (!cablingTask_) {
0410 fillHistos(summary.product(), *raw, *rawAlt, *cluster);
0411 } else {
0412 fillCablingHistos(summary.product(), *raw);
0413 }
0414 }
0415
0416
0417
0418 void SiStripCommissioningSource::fillCablingHistos(const SiStripEventSummary* const summary,
0419 const edm::DetSetVector<SiStripRawDigi>& raw) {
0420
0421 const SiStripModule& module = fecCabling_->module(summary->dcuId());
0422 uint16_t lld_channel = (summary->deviceId() & 0x3) + 1;
0423 SiStripFecKey key_object(module.key().fecCrate(),
0424 module.key().fecSlot(),
0425 module.key().fecRing(),
0426 module.key().ccuAddr(),
0427 module.key().ccuChan(),
0428 lld_channel);
0429 uint32_t fec_key = key_object.key();
0430 std::stringstream sss;
0431 sss << "[SiStripCommissioningSource::" << __func__ << "]"
0432 << " Found DcuId 0x" << std::hex << std::setw(8) << std::setfill('0') << summary->dcuId() << std::dec
0433 << " with Crate/FEC/Ring/CCU/Module/LLD: " << module.key().fecCrate() << "/" << module.key().fecSlot() << "/"
0434 << module.key().fecRing() << "/" << module.key().ccuAddr() << "/" << module.key().ccuChan() << "/" << lld_channel;
0435 edm::LogWarning(mlDqmSource_) << sss.str();
0436
0437
0438
0439
0440 if (key_object.isInvalid(sistrip::CCU_CHAN)) {
0441 std::stringstream ss;
0442 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0443 << " DcuId 0x" << std::hex << std::setw(8) << std::setfill('0') << summary->dcuId() << std::dec
0444 << " in 'DAQ register' field not found in cabling map!"
0445 << " (NULL values returned for FEC path)";
0446 edm::LogWarning(mlDqmSource_) << ss.str();
0447 return;
0448 }
0449
0450
0451 for (auto ifed = fedCabling_->fedIds().begin(); ifed != fedCabling_->fedIds().end(); ifed++) {
0452
0453 if (*ifed == sistrip::invalid_) {
0454 continue;
0455 }
0456
0457
0458 std::map<uint16_t, float> medians;
0459 medians.clear();
0460 std::map<uint16_t, float> medians1;
0461 medians1.clear();
0462
0463
0464 for (uint16_t ichan = 0; ichan < 96; ichan++) {
0465
0466 uint32_t fed_key = ((*ifed & sistrip::invalid_) << 16) | (ichan & sistrip::invalid_);
0467
0468 std::vector<edm::DetSet<SiStripRawDigi> >::const_iterator digis = raw.find(fed_key);
0469 if (digis != raw.end()) {
0470 if (digis->data.empty()) {
0471 continue;
0472 }
0473
0474 Averages ave;
0475 for (uint16_t idigi = 0; idigi < digis->data.size(); idigi++) {
0476 ave.add(static_cast<uint32_t>(digis->data[idigi].adc()));
0477 }
0478 Averages::Params params;
0479 ave.calc(params);
0480 medians[ichan] = params.median_;
0481 medians1[ichan] = digis->data[0].adc();
0482 }
0483
0484 }
0485
0486
0487 Averages average;
0488 std::map<uint16_t, float>::const_iterator ii = medians.begin();
0489 for (; ii != medians.end(); ii++) {
0490 average.add(ii->second);
0491 }
0492 Averages::Params tmp;
0493 average.calc(tmp);
0494
0495 std::stringstream ss;
0496 ss << "FED Averages:" << std::endl
0497 << " nChans: " << medians.size() << std::endl
0498 << " num/mean/median/rms/max/min: " << tmp.num_ << "/" << tmp.mean_ << "/" << tmp.median_ << "/" << tmp.rms_
0499 << "/" << tmp.max_ << "/" << tmp.min_ << std::endl;
0500 LogTrace(mlDqmSource_) << ss.str();
0501
0502
0503 Averages truncated;
0504 std::map<uint16_t, float>::const_iterator jj = medians.begin();
0505 for (; jj != medians.end(); jj++) {
0506 if (jj->second < tmp.median_ + tmp.rms_) {
0507 truncated.add(jj->second);
0508 }
0509 }
0510 Averages::Params params;
0511 truncated.calc(params);
0512
0513 std::stringstream ss1;
0514 ss1 << "Truncated Averages:" << std::endl
0515 << " nChans: " << medians.size() << std::endl
0516 << " num/mean/median/rms/max/min: " << params.num_ << "/" << params.mean_ << "/" << params.median_ << "/"
0517 << params.rms_ << "/" << params.max_ << "/" << params.min_ << std::endl;
0518 LogTrace(mlDqmSource_) << ss1.str();
0519
0520
0521 std::stringstream ss2;
0522 std::stringstream ss3;
0523 std::map<uint16_t, float> channels;
0524 std::map<uint16_t, float>::const_iterator ichan = medians.begin();
0525 for (; ichan != medians.end(); ichan++) {
0526 if (ichan->second > 200.) {
0527 LogTrace(mlTest_) << "TEST FOUND SIGNAL HIGH: " << *ifed << " " << ichan->first << " " << ichan->second;
0528 channels[ichan->first] = ichan->second;
0529 }
0530 ss2
0531 << ichan->second << " ";
0532 ss3
0533 << medians1[ichan->first] << " ";
0534 }
0535
0536 ss2 << std::endl;
0537 ss3 << std::endl;
0538 LogTrace(mlTest_) << "DUMP for FED " << *ifed << ": " << ss2.str();
0539 LogTrace(mlTest_) << "FIRST ADC VAL " << *ifed << ": " << ss3.str();
0540
0541
0542 if (cablingTasks_.find(fec_key) != cablingTasks_.end()) {
0543 if (!channels.empty()) {
0544 cablingTasks_[fec_key]->fillHistograms(*summary, *ifed, channels);
0545 SiStripFecKey path(fec_key);
0546 std::stringstream ss;
0547 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0548 << " Filled histogram for '" << cablingTasks_[fec_key]->myName() << "' object with FecKey: 0x" << std::hex
0549 << std::setfill('0') << std::setw(8) << fec_key << std::dec
0550 << " and Crate/FEC/ring/CCU/module/LLDchan: " << path.fecCrate() << "/" << path.fecSlot() << "/"
0551 << path.fecRing() << "/" << path.ccuAddr() << "/" << path.ccuChan() << "/" << path.channel();
0552 LogTrace(mlDqmSource_) << ss.str();
0553 }
0554 } else {
0555 SiStripFecKey path(fec_key);
0556 std::stringstream ss;
0557 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0558 << " Unable to find CommissioningTask object with FecKey: 0x" << std::hex << std::setfill('0') << std::setw(8)
0559 << fec_key << std::dec << " and Crate/FEC/ring/CCU/module/LLDchan: " << path.fecCrate() << "/"
0560 << path.fecSlot() << "/" << path.fecRing() << "/" << path.ccuAddr() << "/" << path.ccuChan() << "/"
0561 << path.channel();
0562 edm::LogWarning(mlDqmSource_) << ss.str();
0563 }
0564
0565 }
0566 }
0567
0568
0569
0570 void SiStripCommissioningSource::fillHistos(const SiStripEventSummary* const summary,
0571 const edm::DetSetVector<SiStripRawDigi>& raw,
0572 const edm::DetSetVector<SiStripRawDigi>& rawAlt,
0573 const edmNew::DetSetVector<SiStripCluster>& clusters) {
0574
0575 std::vector<uint16_t> stripOnClusters;
0576 auto ifed = fedCabling_->fedIds().begin();
0577 for (; ifed != fedCabling_->fedIds().end(); ifed++) {
0578
0579 auto conns = fedCabling_->fedConnections(*ifed);
0580 for (auto iconn = conns.begin(); iconn != conns.end(); iconn++) {
0581 if (!(iconn->fedId()) || iconn->fedId() > sistrip::valid_) {
0582 continue;
0583 }
0584 if (!iconn->isConnected()) {
0585 continue;
0586 }
0587
0588
0589
0590
0591 uint32_t fed_key = ((iconn->fedId() & sistrip::invalid_) << 16) | (iconn->fedCh() & sistrip::invalid_);
0592
0593 std::vector<edm::DetSet<SiStripRawDigi> >::const_iterator digis = raw.find(fed_key);
0594
0595
0596 std::vector<edm::DetSet<SiStripRawDigi> >::const_iterator digisAlt;
0597 if (not rawAlt.empty()) {
0598 digisAlt = rawAlt.find(fed_key);
0599 if (digisAlt == rawAlt.end())
0600 continue;
0601 }
0602
0603
0604 stripOnClusters.clear();
0605 if (not clusters.empty()) {
0606 for (edmNew::DetSetVector<SiStripCluster>::const_iterator DSViter = clusters.begin(); DSViter != clusters.end();
0607 DSViter++) {
0608 if (DSViter->id() != iconn->detId())
0609 continue;
0610 for (edmNew::DetSet<SiStripCluster>::const_iterator DSiter = DSViter->begin(); DSiter != DSViter->end();
0611 DSiter++) {
0612 if (DSiter->firstStrip() >= iconn->apvPairNumber() * 256 and
0613 DSiter->firstStrip() < (1 + iconn->apvPairNumber()) * 256) {
0614 for (size_t istrip = 0; istrip < DSiter->amplitudes().size(); istrip++) {
0615 stripOnClusters.push_back(DSiter->firstStrip() + istrip - iconn->apvPairNumber() * 256);
0616 }
0617 }
0618 }
0619 }
0620 }
0621
0622 if (digis != raw.end()) {
0623
0624 if (task_ == sistrip::APV_LATENCY) {
0625 if (tasks_[0][iconn->fecCrate() - 1]) {
0626 tasks_[0][iconn->fecCrate() - 1]->fillHistograms(*summary, *digis);
0627 } else {
0628 std::stringstream ss;
0629 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0630 << " Unable to find CommissioningTask for FEC crate " << iconn->fecCrate()
0631 << ". Unable to fill histograms!";
0632 edm::LogWarning(mlDqmSource_) << ss.str();
0633 }
0634 } else if (task_ == sistrip::FINE_DELAY) {
0635 if (tasks_[0][0]) {
0636 tasks_[0][0]->fillHistograms(*summary, *digis);
0637 } else {
0638 std::stringstream ss;
0639 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0640 << " Unable to find global CommissioningTask for FineDelay. Unable to fill histograms!";
0641 edm::LogWarning(mlDqmSource_) << ss.str();
0642 }
0643 } else {
0644 if (tasks_[iconn->fedId()][iconn->fedCh()]) {
0645 if (not rawAlt.empty() or digisAlt == rawAlt.end())
0646 tasks_[iconn->fedId()][iconn->fedCh()]->fillHistograms(*summary, *digis);
0647 else {
0648 if (stripOnClusters.empty())
0649 tasks_[iconn->fedId()][iconn->fedCh()]->fillHistograms(*summary, *digis, *digisAlt);
0650 else {
0651 tasks_[iconn->fedId()][iconn->fedCh()]->fillHistograms(*summary, *digis, *digisAlt, stripOnClusters);
0652 }
0653 }
0654 } else {
0655 std::stringstream ss;
0656 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0657 << " Unable to find CommissioningTask object with FED key " << std::hex << std::setfill('0')
0658 << std::setw(8) << fed_key << std::dec << " and FED id/ch " << iconn->fedId() << "/" << iconn->fedCh()
0659 << " Unable to fill histograms!";
0660 edm::LogWarning(mlDqmSource_) << ss.str();
0661 }
0662 }
0663 } else {
0664
0665
0666 if (task_ != sistrip::APV_LATENCY && task_ != sistrip::FINE_DELAY) {
0667 std::stringstream ss;
0668 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0669 << " Unable to find any DetSet containing digis for FED key " << std::hex << std::setfill('0')
0670 << std::setw(8) << fed_key << std::dec << " and FED id/ch " << iconn->fedId() << "/" << iconn->fedCh();
0671 edm::LogWarning(mlDqmSource_) << ss.str();
0672 }
0673 }
0674 }
0675 }
0676 }
0677
0678
0679
0680 void SiStripCommissioningSource::createRunNumber() {
0681
0682 if (!run_) {
0683 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0684 << " NULL run number!";
0685 return;
0686 }
0687
0688
0689 dqm()->setCurrentFolder(base_ + sistrip::root_);
0690 std::stringstream run;
0691 run << run_;
0692 dqm()->bookString(std::string(sistrip::runNumber_) + sistrip::sep_ + run.str(), run.str());
0693 }
0694
0695
0696
0697 void SiStripCommissioningSource::createTask(const SiStripEventSummary* const summary, const edm::EventSetup& setup) {
0698
0699 task_ = sistrip::UNDEFINED_RUN_TYPE;
0700
0701
0702 if (summary) {
0703 task_ = summary->runType();
0704 std::stringstream ss;
0705 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0706 << " Identified CommissioningTask from EventSummary to be \"" << SiStripEnumsAndStrings::runType(task_) << "\"";
0707 LogTrace(mlDqmSource_) << ss.str();
0708 } else {
0709 task_ = sistrip::UNKNOWN_RUN_TYPE;
0710 std::stringstream ss;
0711 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0712 << " NULL pointer to SiStripEventSummary!"
0713 << " Check SiStripEventSummary is found/present in Event";
0714 edm::LogWarning(mlDqmSource_) << ss.str();
0715 }
0716
0717
0718 sistrip::RunType configurable = SiStripEnumsAndStrings::runType(taskConfigurable_);
0719 if (configurable != sistrip::UNDEFINED_RUN_TYPE && configurable != sistrip::UNKNOWN_RUN_TYPE) {
0720 std::stringstream ss;
0721 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0722 << " Overriding CommissioningTask from EventSummary (\"" << SiStripEnumsAndStrings::runType(task_)
0723 << "\") with value retrieved from .cfg file (\"" << SiStripEnumsAndStrings::runType(configurable) << "\")!";
0724 LogTrace(mlDqmSource_) << ss.str();
0725 task_ = configurable;
0726 }
0727
0728
0729 dqm()->setCurrentFolder(base_ + sistrip::root_);
0730 std::string task_str = SiStripEnumsAndStrings::runType(task_);
0731 dqm()->bookString(std::string(sistrip::taskId_) + sistrip::sep_ + task_str, task_str);
0732
0733
0734 if (task_ == sistrip::UNKNOWN_RUN_TYPE || task_ == sistrip::UNDEFINED_RUN_TYPE) {
0735 std::stringstream ss;
0736 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0737 << " Unexpected CommissioningTask found (" << static_cast<uint16_t>(task_) << ") \""
0738 << SiStripEnumsAndStrings::runType(task_) << "\""
0739 << " Unexpected value found in SiStripEventSummary and/or cfg file"
0740 << " If SiStripEventSummary is not present in Event,"
0741 << " check 'CommissioningTask' configurable in cfg file";
0742 edm::LogWarning(mlDqmSource_) << ss.str();
0743 return;
0744 } else {
0745 std::stringstream ss;
0746 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0747 << " Identified CommissioningTask to be \"" << SiStripEnumsAndStrings::runType(task_) << "\"";
0748 LogTrace(mlDqmSource_) << ss.str();
0749 }
0750
0751
0752 if (task_ == sistrip::FED_CABLING) {
0753 cablingTask_ = true;
0754 } else {
0755 cablingTask_ = false;
0756 }
0757
0758 std::stringstream ss;
0759 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0760 << " CommissioningTask: " << SiStripEnumsAndStrings::runType(summary->runType());
0761 LogTrace(mlDqmSource_) << ss.str();
0762
0763 edm::LogVerbatim(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0764 << " Creating CommissioningTask objects and booking histograms...";
0765 if (cablingTask_) {
0766 createCablingTasks();
0767 } else {
0768 createTasks(task_, setup);
0769 }
0770 edm::LogVerbatim(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0771 << " Finished booking histograms!";
0772 tasksExist_ = true;
0773 }
0774
0775
0776
0777 void SiStripCommissioningSource::createCablingTasks() {
0778
0779 uint16_t booked = 0;
0780 for (std::vector<SiStripFecCrate>::const_iterator icrate = fecCabling_->crates().begin();
0781 icrate != fecCabling_->crates().end();
0782 icrate++) {
0783 for (std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++) {
0784 for (std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end();
0785 iring++) {
0786 for (std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end();
0787 iccu++) {
0788 for (std::vector<SiStripModule>::const_iterator imodule = iccu->modules().begin();
0789 imodule != iccu->modules().end();
0790 imodule++) {
0791
0792 SiStripFecKey path(
0793 icrate->fecCrate(), ifec->fecSlot(), iring->fecRing(), iccu->ccuAddr(), imodule->ccuChan());
0794
0795
0796 if (!path.isValid()) {
0797 continue;
0798 }
0799
0800
0801 std::string dir = base_ + path.path();
0802 dqm()->setCurrentFolder(dir);
0803
0804
0805 for (uint16_t ipair = 0; ipair < imodule->nApvPairs(); ipair++) {
0806
0807 SiStripModule::PairOfU16 apvs = imodule->activeApvPair(imodule->lldChannel(ipair));
0808
0809
0810 FedChannelConnection conn(icrate->fecCrate(),
0811 ifec->fecSlot(),
0812 iring->fecRing(),
0813 iccu->ccuAddr(),
0814 imodule->ccuChan(),
0815 apvs.first,
0816 apvs.second,
0817 imodule->dcuId(),
0818 imodule->detId(),
0819 imodule->nApvPairs());
0820
0821
0822 uint32_t key = SiStripFecKey(icrate->fecCrate(),
0823 ifec->fecSlot(),
0824 iring->fecRing(),
0825 iccu->ccuAddr(),
0826 imodule->ccuChan(),
0827 imodule->lldChannel(ipair))
0828 .key();
0829
0830
0831 if (!key) {
0832 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0833 << " Unexpected NULL value for FEC key!";
0834 continue;
0835 }
0836
0837
0838 if (cablingTasks_.find(key) == cablingTasks_.end()) {
0839 if (task_ == sistrip::FED_CABLING) {
0840 cablingTasks_[key] = new FedCablingTask(dqm(), conn);
0841 } else if (task_ == sistrip::UNDEFINED_RUN_TYPE) {
0842 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0843 << " Undefined CommissioningTask"
0844 << " Unable to create FedCablingTask object!";
0845 } else if (task_ == sistrip::UNKNOWN_RUN_TYPE) {
0846 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0847 << " Unknown CommissioningTask"
0848 << " Unable to create FedCablingTask object!";
0849 } else {
0850 edm::LogWarning(mlDqmSource_)
0851 << "[SiStripCommissioningSource::" << __func__ << "]"
0852 << " Unexpected CommissioningTask: " << SiStripEnumsAndStrings::runType(task_)
0853 << " Unable to create FedCablingTask object!";
0854 }
0855
0856
0857 if (cablingTasks_.find(key) != cablingTasks_.end()) {
0858 if (cablingTasks_[key]) {
0859 cablingTasks_[key]->bookHistograms();
0860 cablingTasks_[key]->updateFreq(1);
0861 booked++;
0862 std::stringstream ss;
0863 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0864 << " Booking histograms for '" << cablingTasks_[key]->myName() << "' object with key 0x"
0865 << std::hex << std::setfill('0') << std::setw(8) << key << std::dec << " in directory \"" << dir
0866 << "\"";
0867 LogTrace(mlDqmSource_) << ss.str();
0868 } else {
0869 std::stringstream ss;
0870 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0871 << " NULL pointer to CommissioningTask for key 0x" << std::hex << std::setfill('0')
0872 << std::setw(8) << key << std::dec << " in directory " << dir << " Unable to book histograms!";
0873 edm::LogWarning(mlDqmSource_) << ss.str();
0874 }
0875 } else {
0876 std::stringstream ss;
0877 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0878 << " Unable to find CommissioningTask for key 0x" << std::hex << std::setfill('0') << std::setw(8)
0879 << key << std::dec << " in directory " << dir << " Unable to book histograms!";
0880 edm::LogWarning(mlDqmSource_) << ss.str();
0881 }
0882
0883 } else {
0884 std::stringstream ss;
0885 ss << "[SiStripCommissioningSource::" << __func__ << "]"
0886 << " CommissioningTask object already exists for key 0x" << std::hex << std::setfill('0')
0887 << std::setw(8) << key << std::dec << " in directory " << dir
0888 << " Unable to create FedCablingTask object!";
0889 edm::LogWarning(mlDqmSource_) << ss.str();
0890 }
0891
0892 }
0893 }
0894 }
0895 }
0896 }
0897 }
0898
0899 edm::LogVerbatim(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0900 << " Created " << booked << " CommissioningTask objects and booked histograms";
0901 }
0902
0903
0904
0905 void SiStripCommissioningSource::createTasks(sistrip::RunType run_type, const edm::EventSetup& setup) {
0906 uint16_t booked = 0;
0907
0908
0909 if (task_ == sistrip::APV_LATENCY) {
0910 for (uint16_t partition = 0; partition < 4; ++partition) {
0911
0912 tasks_[0][partition] = new LatencyTask(
0913 dqm(),
0914 FedChannelConnection(
0915 partition + 1, sistrip::invalid_, sistrip::invalid_, sistrip::invalid_, sistrip::invalid_));
0916 tasks_[0][partition]->eventSetup(&setup);
0917 tasks_[0][partition]->bookHistograms();
0918 tasks_[0][partition]->updateFreq(updateFreq_);
0919 booked++;
0920 }
0921
0922
0923 } else if (task_ == sistrip::FINE_DELAY) {
0924 tasks_[0][0] = new FineDelayTask(dqm(), FedChannelConnection());
0925 tasks_[0][0]->eventSetup(&setup);
0926 tasks_[0][0]->bookHistograms();
0927 tasks_[0][0]->updateFreq(updateFreq_);
0928 booked++;
0929
0930 } else {
0931
0932
0933 for (auto ifed = fedCabling_->fedIds().begin(); ifed != fedCabling_->fedIds().end(); ++ifed) {
0934
0935 auto conns = fedCabling_->fedConnections(*ifed);
0936 for (auto iconn = conns.begin(); iconn != conns.end(); ++iconn) {
0937
0938 SiStripFecKey fec_key(
0939 iconn->fecCrate(), iconn->fecSlot(), iconn->fecRing(), iconn->ccuAddr(), iconn->ccuChan());
0940
0941 SiStripFedKey fed_key(
0942 iconn->fedId(), SiStripFedKey::feUnit(iconn->fedCh()), SiStripFedKey::feChan(iconn->fedCh()));
0943 if (!iconn->isConnected()) {
0944 continue;
0945 }
0946
0947
0948
0949
0950
0951 std::stringstream dir;
0952 dir << base_;
0953 if (view_ == "Default") {
0954 if (run_type == sistrip::FAST_CABLING) {
0955 dir << fed_key.path();
0956 } else {
0957 dir << fec_key.path();
0958 }
0959 } else if (view_ == "FecView") {
0960 dir << fec_key.path();
0961 } else if (view_ == "FedView") {
0962 dir << fed_key.path();
0963 } else if (view_ == "DetView") {
0964
0965 dir << sistrip::root_ << sistrip::dir_ << sistrip::detectorView_ << sistrip::dir_ << iconn->detId();
0966 } else {
0967 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
0968 << " Invalid view " << view_ << std::endl
0969 << " Histograms will end up all in the top directory.";
0970 }
0971 dqm()->setCurrentFolder(dir.str());
0972
0973
0974 if (!tasks_[iconn->fedId()][iconn->fedCh()]) {
0975 if (task_ == sistrip::FAST_CABLING) {
0976 tasks_[iconn->fedId()][iconn->fedCh()] = new FastFedCablingTask(dqm(), *iconn);
0977 } else if (task_ == sistrip::APV_TIMING) {
0978 tasks_[iconn->fedId()][iconn->fedCh()] = new ApvTimingTask(dqm(), *iconn);
0979 } else if (task_ == sistrip::FED_TIMING) {
0980 tasks_[iconn->fedId()][iconn->fedCh()] = new FedTimingTask(dqm(), *iconn);
0981 } else if (task_ == sistrip::OPTO_SCAN) {
0982 tasks_[iconn->fedId()][iconn->fedCh()] = new OptoScanTask(dqm(), *iconn);
0983 } else if (task_ == sistrip::VPSP_SCAN) {
0984 tasks_[iconn->fedId()][iconn->fedCh()] = new VpspScanTask(dqm(), *iconn);
0985 } else if (task_ == sistrip::PEDESTALS) {
0986 tasks_[iconn->fedId()][iconn->fedCh()] = new PedestalsTask(dqm(), *iconn);
0987 } else if (task_ == sistrip::PEDS_ONLY) {
0988 tasks_[iconn->fedId()][iconn->fedCh()] = new PedsOnlyTask(dqm(), *iconn);
0989 } else if (task_ == sistrip::NOISE) {
0990 tasks_[iconn->fedId()][iconn->fedCh()] = new NoiseTask(dqm(), *iconn, pedestalToken_, noiseToken_);
0991 } else if (task_ == sistrip::PEDS_FULL_NOISE) {
0992 tasks_[iconn->fedId()][iconn->fedCh()] = new PedsFullNoiseTask(dqm(), *iconn, parameters_);
0993 } else if (task_ == sistrip::DAQ_SCOPE_MODE) {
0994 tasks_[iconn->fedId()][iconn->fedCh()] = new DaqScopeModeTask(dqm(), *iconn, parameters_);
0995 } else if (task_ == sistrip::CALIBRATION_SCAN || task_ == sistrip::CALIBRATION_SCAN_DECO) {
0996 tasks_[iconn->fedId()][iconn->fedCh()] =
0997 new CalibrationScanTask(dqm(), *iconn, task_, filename_.c_str(), run_, setup.getData(pedestalToken_));
0998 } else if (task_ == sistrip::CALIBRATION || task_ == sistrip::CALIBRATION_DECO) {
0999 tasks_[iconn->fedId()][iconn->fedCh()] =
1000 new CalibrationTask(dqm(), *iconn, task_, filename_.c_str(), run_, setup.getData(pedestalToken_));
1001 } else if (task_ == sistrip::UNDEFINED_RUN_TYPE) {
1002 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
1003 << " Undefined CommissioningTask"
1004 << " Unable to create CommissioningTask object!";
1005 } else {
1006 edm::LogWarning(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
1007 << " Unknown CommissioningTask"
1008 << " Unable to create CommissioningTask object!";
1009 }
1010
1011
1012 if (tasks_[iconn->fedId()][iconn->fedCh()]) {
1013 tasks_[iconn->fedId()][iconn->fedCh()]->eventSetup(&setup);
1014
1015 if (task_ != sistrip::CALIBRATION_SCAN and task_ != sistrip::CALIBRATION_SCAN_DECO and
1016 task_ != sistrip::CALIBRATION and task_ != sistrip::CALIBRATION_DECO)
1017 tasks_[iconn->fedId()][iconn->fedCh()]->bookHistograms();
1018 else {
1019 if (task_ == sistrip::CALIBRATION_SCAN or task_ == sistrip::CALIBRATION_SCAN_DECO)
1020 static_cast<CalibrationScanTask*>(tasks_[iconn->fedId()][iconn->fedCh()])->setCurrentFolder(dir.str());
1021 else if (task_ == sistrip::CALIBRATION or task_ == sistrip::CALIBRATION_DECO)
1022 static_cast<CalibrationTask*>(tasks_[iconn->fedId()][iconn->fedCh()])->setCurrentFolder(dir.str());
1023 }
1024 tasks_[iconn->fedId()][iconn->fedCh()]->updateFreq(updateFreq_);
1025 booked++;
1026 } else {
1027 std::stringstream ss;
1028 ss << "[SiStripCommissioningSource::" << __func__ << "]"
1029 << " NULL pointer to CommissioningTask for key 0x" << std::hex << std::setfill('0') << std::setw(8)
1030 << fed_key.key() << std::dec << " in directory " << dir.str() << " Unable to book histograms!";
1031 edm::LogWarning(mlDqmSource_) << ss.str();
1032 }
1033 } else {
1034 std::stringstream ss;
1035 ss << "[SiStripCommissioningSource::" << __func__ << "]"
1036 << " CommissioningTask object already exists for key 0x" << std::hex << std::setfill('0') << std::setw(8)
1037 << fed_key.key() << std::dec << " in directory " << dir.str()
1038 << " Unable to create CommissioningTask object!";
1039 edm::LogWarning(mlDqmSource_) << ss.str();
1040 }
1041 }
1042 }
1043 }
1044 edm::LogVerbatim(mlDqmSource_) << "[SiStripCommissioningSource::" << __func__ << "]"
1045 << " Created " << booked << " CommissioningTask objects and booked histograms";
1046 }
1047
1048
1049
1050 void SiStripCommissioningSource::clearCablingTasks() {
1051 if (cablingTasks_.empty()) {
1052 return;
1053 }
1054 for (TaskMap::iterator itask = cablingTasks_.begin(); itask != cablingTasks_.end(); itask++) {
1055 if (itask->second) {
1056 delete itask->second;
1057 }
1058 }
1059 cablingTasks_.clear();
1060 }
1061
1062
1063
1064 void SiStripCommissioningSource::clearTasks() {
1065 if (tasks_.empty()) {
1066 return;
1067 }
1068 VecOfVecOfTasks::iterator ifed = tasks_.begin();
1069 for (; ifed != tasks_.end(); ifed++) {
1070 VecOfTasks::iterator ichan = ifed->begin();
1071 for (; ichan != ifed->end(); ichan++) {
1072 if (*ichan) {
1073 delete *ichan;
1074 *ichan = 0;
1075 }
1076 }
1077 ifed->resize(96, nullptr);
1078 }
1079 tasks_.resize(1024);
1080 }
1081
1082
1083
1084 void SiStripCommissioningSource::remove() {
1085
1086 }
1087
1088
1089
1090 void SiStripCommissioningSource::directory(std::stringstream& dir, uint32_t run_number) {
1091
1092 char hn[256];
1093 gethostname(hn, sizeof(hn));
1094 struct hostent* he;
1095 he = gethostbyname(hn);
1096
1097
1098 std::string host_name;
1099 std::string host_ip;
1100 if (he) {
1101 host_name = std::string(he->h_name);
1102 host_ip = std::string(inet_ntoa(*(struct in_addr*)(he->h_addr)));
1103 } else {
1104 host_name = "unknown.cern.ch";
1105 host_ip = "255.255.255.255";
1106 }
1107
1108
1109 std::string::size_type pos = 0;
1110 std::stringstream ip;
1111
1112 while (pos != std::string::npos) {
1113 std::string::size_type tmp = host_ip.find('.', pos);
1114 if (tmp != std::string::npos) {
1115 ip << std::setw(3) << std::setfill('0') << host_ip.substr(pos, tmp - pos) << ".";
1116 pos = tmp + 1;
1117 } else {
1118 ip << std::setw(3) << std::setfill('0') << host_ip.substr(pos);
1119 pos = std::string::npos;
1120 }
1121 }
1122
1123
1124 pid_t pid = getpid();
1125
1126
1127 if (run_number) {
1128 dir << std::setw(8) << std::setfill('0') << run_number << "_";
1129 }
1130 dir << ip.str() << "_" << std::setw(5) << std::setfill('0') << pid;
1131 }
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189