16 using namespace sistrip;
22 factory_ = std::make_unique<ApvTimingSummaryFactory>();
24 <<
" Constructing object...";
31 <<
" Destructing object...";
41 HistosMap::const_iterator iter;
42 Analyses::iterator ianal;
43 std::map<std::string, uint16_t> errors;
46 for (ianal =
data().
begin(); ianal !=
data().end(); ianal++) {
62 if (iter->second.empty()) {
64 <<
" Zero histograms found!";
69 std::vector<TH1*> profs;
70 Histos::const_iterator ihis = iter->second.begin();
71 for (; ihis != iter->second.end(); ihis++) {
74 profs.push_back(prof);
82 data()[iter->first] = anal;
90 if (anal->
time() > time_max) {
91 time_max = anal->
time();
92 device_max = iter->first;
96 if (anal->
time() < time_min) {
97 time_min = anal->
time();
98 device_min = iter->first;
105 <<
" Unable to set maximum time! Found unexpected value: " << time_max;
110 <<
" Crate/FEC/Ring/CCU/module/channel: " << min.
fecCrate() <<
"/" << min.
fecSlot()
112 << min.
lldChan() <<
" has minimum time for tick mark rising edge [ns]: " << time_min;
116 <<
" Crate/FEC/Ring/CCU/module/channel: " << max.
fecCrate() <<
"/" << max.
fecSlot()
118 << max.
lldChan() <<
" has maximum time for tick mark rising edge [ns]: " << time_max;
121 <<
" Difference b/w minimum and maximum times"
122 <<
" for tick mark rising edges [ns] is: " << (time_max - time_min);
126 for (ianal =
data().begin(); ianal !=
data().end(); ianal++) {
131 anal->
refTime(time_max, this->
pset().getParameter<int>(
"TargetDelay"));
142 <<
" Analyzed histograms for " <<
histos().size() <<
" FED channels, of which "
143 << valid <<
" (" << 100 * valid /
histos().size() <<
"%) are valid.";
146 <<
" No histograms to analyze!";
151 <<
" Analyzed histograms for " <<
histos().size() <<
" FED channels, of which "
152 << valid <<
" (" << 100 * valid /
histos().size() <<
"%) are valid.";
153 if (!errors.empty()) {
155 std::stringstream
ss;
157 std::map<std::string, uint16_t>::const_iterator
ii;
158 for (ii = errors.begin(); ii != errors.end(); ++
ii) {
159 ss <<
" " << ii->first <<
": " << ii->second << std::endl;
163 <<
" Found " << count <<
" errors (" << 100 * count /
histos().size()
164 <<
"%): " << ss.str();
168 <<
" No histograms to analyze!";
void analysis(const std::vector< TH1 * > &)
Log< level::Info, true > LogVerbatim
Analyses & data(bool getMaskedData=false)
const uint16_t & fecRing() const
const edm::ParameterSet & pset() const
const float & refTime() const
Analysis for timing run using APV tick marks.
static const char mlDqmClient_[]
const uint16_t & lldChan() const
const uint16_t & fecSlot() const
static const uint16_t valid_
Utility class that identifies a position within the strip tracker control structure, down to the level of an APV25.
void histoAnalysis(bool debug) override
bool isValid() const override
const float & time() const
const uint16_t & fecCrate() const
int extract(std::vector< int > *output, const std::string &dati)
std::unique_ptr< Factory > factory_
const uint16_t & ccuAddr() const
static const uint16_t invalid_
const uint16_t & ccuChan() const
Log< level::Warning, false > LogWarning
Analysis for timing run using APV tick marks.
const VString & getErrorCodes() const
~ApvTimingHistograms() override
bool foundTickMark() const
ApvTimingHistograms(const edm::ParameterSet &pset, DQMStore *)
const HistosMap & histos() const