File indexing completed on 2024-04-06 12:08:31
0001 #include "DQM/SiStripCommissioningClients/interface/FedTimingHistograms.h"
0002 #include "CondFormats/SiStripObjects/interface/FedTimingAnalysis.h"
0003 #include "DataFormats/SiStripCommon/interface/SiStripEnumsAndStrings.h"
0004 #include "DQM/SiStripCommissioningAnalysis/interface/FedTimingAlgorithm.h"
0005 #include "DQM/SiStripCommissioningSummary/interface/SummaryGenerator.h"
0006 #include <iostream>
0007 #include <sstream>
0008 #include <iomanip>
0009
0010 using namespace std;
0011
0012
0013
0014 FedTimingHistograms::FedTimingHistograms(const edm::ParameterSet& pset, DQMStore* bei)
0015 : CommissioningHistograms(pset.getParameter<edm::ParameterSet>("FedTimingParameters"), bei, sistrip::FED_TIMING),
0016 factory_(new Factory),
0017 optimumSamplingPoint_(15.),
0018 minDelay_(sistrip::invalid_),
0019 maxDelay_(-1. * sistrip::invalid_),
0020 deviceWithMinDelay_(sistrip::invalid_),
0021 deviceWithMaxDelay_(sistrip::invalid_) {
0022 cout << "[" << __PRETTY_FUNCTION__ << "]"
0023 << " Created object for APV TIMING histograms" << endl;
0024 }
0025
0026
0027
0028 FedTimingHistograms::~FedTimingHistograms() { cout << "[" << __PRETTY_FUNCTION__ << "]" << endl; }
0029
0030
0031
0032 void FedTimingHistograms::histoAnalysis(bool debug) {
0033
0034 data_.clear();
0035
0036
0037 float time_min = 1. * sistrip::invalid_;
0038 float time_max = -1. * sistrip::invalid_;
0039 uint32_t device_min = sistrip::invalid_;
0040 uint32_t device_max = sistrip::invalid_;
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098 if (time_max > sistrip::maximum_ || time_max < -1. * sistrip::maximum_) {
0099 cerr << "[" << __PRETTY_FUNCTION__ << "]"
0100 << " Unable to set maximum time! Found unexpected value: " << time_max << endl;
0101 return;
0102 }
0103
0104 SiStripFecKey max(device_max);
0105 cout << " Device (FEC/slot/ring/CCU/module/channel) " << max.fecCrate() << "/" << max.fecSlot() << "/"
0106 << max.fecRing() << "/" << max.ccuAddr() << "/" << max.ccuChan() << "/"
0107 << " has maximum delay (rising edge) [ns]:" << time_max << endl;
0108
0109 SiStripFecKey min(device_min);
0110 cout << " Device (FEC/slot/ring/CCU/module/channel): " << min.fecCrate() << "/" << min.fecSlot() << "/"
0111 << min.fecRing() << "/" << min.ccuAddr() << "/" << min.ccuChan() << "/"
0112 << " has minimum delay (rising edge) [ns]:" << time_min << endl;
0113
0114
0115 std::map<uint32_t, FedTimingAnalysis>::iterator ianal = data_.begin();
0116 for (; ianal != data_.end(); ianal++) {
0117 ianal->second.max(time_max);
0118 if (debug) {
0119 std::stringstream ss;
0120 ianal->second.print(ss);
0121 cout << ss.str() << endl;
0122 }
0123 }
0124 }
0125
0126
0127
0128 void FedTimingHistograms::createSummaryHisto(const sistrip::Monitorable& histo,
0129 const sistrip::Presentation& type,
0130 const std::string& directory,
0131 const sistrip::Granularity& gran) {
0132 cout << "[" << __PRETTY_FUNCTION__ << "]" << endl;
0133
0134
0135 sistrip::View view = SiStripEnumsAndStrings::view(directory);
0136 if (view == sistrip::UNKNOWN_VIEW) {
0137 return;
0138 }
0139
0140
0141 histoAnalysis(false);
0142
0143
0144 factory_->init(histo, type, view, directory, gran);
0145 uint32_t xbins = factory_->extract(data_);
0146
0147
0148 TH1* summary = histogram(histo, type, view, directory, xbins);
0149
0150
0151 factory_->fill(*summary);
0152 }