CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
FedCablingAlgorithm.cc
Go to the documentation of this file.
6 #include "TProfile.h"
7 #include "TH1.h"
8 #include <iostream>
9 #include <sstream>
10 #include <iomanip>
11 #include <cmath>
12 
13 using namespace sistrip;
14 
15 // ----------------------------------------------------------------------------
16 //
18  : CommissioningAlgorithm(anal), hFedId_(nullptr, ""), hFedCh_(nullptr, "") {
19  ;
20 }
21 
22 // ----------------------------------------------------------------------------
23 //
24 void FedCablingAlgorithm::extract(const std::vector<TH1*>& histos) {
25  if (!anal()) {
26  edm::LogWarning(mlCommissioning_) << "[FedCablingAlgorithm::" << __func__ << "]"
27  << " NULL pointer to Analysis object!";
28  return;
29  }
30 
31  // Check number of histograms
32  if (histos.size() != 2) {
34  }
35 
36  // Extract FED key from histo title
37  if (!histos.empty()) {
38  anal()->fedKey(extractFedKey(histos.front()));
39  }
40 
41  // Extract histograms
42  std::vector<TH1*>::const_iterator ihis = histos.begin();
43  for (; ihis != histos.end(); ihis++) {
44  // Check for NULL pointer
45  if (!(*ihis)) {
46  continue;
47  }
48 
49  // Check name
50  SiStripHistoTitle title((*ihis)->GetName());
51  if (title.runType() != sistrip::FED_CABLING) {
53  continue;
54  }
55 
56  // Extract FED id and channel histos
57  if (title.extraInfo().find(sistrip::feDriver_) != std::string::npos) {
58  hFedId_.first = *ihis;
59  hFedId_.second = (*ihis)->GetName();
60  } else if (title.extraInfo().find(sistrip::fedChannel_) != std::string::npos) {
61  hFedCh_.first = *ihis;
62  hFedCh_.second = (*ihis)->GetName();
63  } else {
65  }
66  }
67 }
68 
69 // -----------------------------------------------------------------------------
70 //
72  if (!anal()) {
73  edm::LogWarning(mlCommissioning_) << "[FedCablingAlgorithm::" << __func__ << "]"
74  << " NULL pointer to base Analysis object!";
75  return;
76  }
77 
79  FedCablingAnalysis* anal = dynamic_cast<FedCablingAnalysis*>(tmp);
80  if (!anal) {
81  edm::LogWarning(mlCommissioning_) << "[FedCablingAlgorithm::" << __func__ << "]"
82  << " NULL pointer to derived Analysis object!";
83  return;
84  }
85 
86  if (!hFedId_.first) {
88  return;
89  }
90 
91  if (!hFedCh_.first) {
93  return;
94  }
95 
96  TProfile* fedid_histo = dynamic_cast<TProfile*>(hFedId_.first);
97  if (!fedid_histo) {
99  return;
100  }
101 
102  TProfile* fedch_histo = dynamic_cast<TProfile*>(hFedCh_.first);
103  if (!fedch_histo) {
105  return;
106  }
107 
108  // Some initialization
109  anal->candidates_.clear();
110  float max = -1.;
111  float weight = -1.;
112  uint16_t id_val = sistrip::invalid_;
113  uint16_t ch_val = sistrip::invalid_;
114 
115  // FED id
116  max = 0.;
117  for (uint16_t ifed = 0; ifed < fedid_histo->GetNbinsX(); ifed++) {
118  if (fedid_histo->GetBinEntries(ifed + 1)) {
119  if (fedid_histo->GetBinContent(ifed + 1) > max &&
120  fedid_histo->GetBinContent(ifed + 1) > FedCablingAnalysis::threshold_) {
121  id_val = ifed;
122  max = fedid_histo->GetBinContent(ifed + 1);
123  }
124  }
125  }
126  weight = max;
127 
128  // FED ch
129  max = 0.;
130  for (uint16_t ichan = 0; ichan < fedch_histo->GetNbinsX(); ichan++) {
131  if (fedch_histo->GetBinEntries(ichan + 1)) {
132  if (fedch_histo->GetBinContent(ichan + 1) > max &&
133  fedch_histo->GetBinContent(ichan + 1) > FedCablingAnalysis::threshold_) {
134  ch_val = ichan;
135  max = fedch_histo->GetBinContent(ichan + 1);
136  }
137  }
138  }
139  if (max > weight) {
140  weight = max;
141  }
142 
143  // Set "best" candidate and ADC level
144  if (id_val != sistrip::invalid_ && ch_val != sistrip::invalid_) {
145  uint32_t key = SiStripFedKey(id_val, SiStripFedKey::feUnit(ch_val), SiStripFedKey::feChan(ch_val)).key();
146  anal->candidates_[key] = static_cast<uint16_t>(weight);
147  anal->fedId_ = id_val;
148  anal->fedCh_ = ch_val;
149  anal->adcLevel_ = weight;
150  } else {
152  }
153 }
static const char feDriver_[]
void extract(const std::vector< TH1 * > &) override
static const char unexpectedTask_[]
const uint32_t & fedKey() const
Utility class that holds histogram title.
A container class for generic run and event-related info, information required by the commissioning a...
Definition: SiStripFedKey.h:56
Histogram-based analysis for connection loop.
static const char numberOfHistos_[]
static const float threshold_
static const char unexpectedExtraInfo_[]
static const char noCandidates_[]
const uint32_t & key() const
Definition: SiStripKey.h:120
uint32_t extractFedKey(const TH1 *const)
static const char mlCommissioning_[]
tuple key
prepare the HTCondor submission files and eventually submit them
virtual void addErrorCode(const std::string &error)
static const char fedChannel_[]
const uint16_t & feUnit() const
static const uint16_t invalid_
Definition: Constants.h:16
const uint16_t & feChan() const
Abstract base for derived classes that provide analysis of commissioning histograms.
Log< level::Warning, false > LogWarning
int weight
Definition: histoStyle.py:51
tmp
align.sh
Definition: createJobs.py:716
CommissioningAnalysis *const anal() const
static const char nullPtr_[]