CMS 3D CMS Logo

CommonModeAnalyzer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiStripTools
4 // Class: CommonModeAnalyzer
5 //
13 //
14 // Original Author: Andrea Venturi
15 // Created: Tue Jul 19 11:56:00 CEST 2009
16 //
17 //
18 
19 // system include files
20 #include <memory>
21 
22 // user include files
23 #include "TH1D.h"
24 #include "TProfile.h"
25 #include <vector>
26 #include <algorithm>
27 #include <string>
28 
32 
35 
37 
39 
42 
44 
47 
50 
53 
56 
61 //
62 // class decleration
63 //
64 
66 public:
67  explicit CommonModeAnalyzer(const edm::ParameterSet&);
68  ~CommonModeAnalyzer() override;
69 
70 private:
71  void beginJob() override;
72  void beginRun(const edm::Run&, const edm::EventSetup&) override;
73  void endRun(const edm::Run&, const edm::EventSetup&) override;
74  void analyze(const edm::Event&, const edm::EventSetup&) override;
75  void endJob() override;
76 
77  void updateDetCabling(const SiStripDetCablingRcd& iRcd);
78 
79  // ----------member data ---------------------------
80 
86  const bool m_ignorebadfedmod;
88  int m_nevents;
89 
90  std::vector<DetIdSelector> m_selections;
91  std::vector<std::string> m_labels;
92  std::vector<TH1D*> m_cmdist;
93  std::vector<TH1D*> m_nmodules;
94  std::vector<TH1D*> m_napvs;
95  std::vector<TProfile*> m_cmvsdbxincycle;
96  std::vector<TProfile**> m_cmvsbxrun;
97  std::vector<TProfile**> m_cmvsorbitrun;
98 
100 
103  const SiStripDetCabling* m_detCabling = nullptr;
104 };
105 
106 //
107 // constants, enums and typedefs
108 //
109 
110 //
111 // static data member definitions
112 //
113 
114 //
115 // constructors and destructor
116 //
118  : m_digicollectionToken(
119  consumes<edm::DetSetVector<SiStripRawDigi> >(iConfig.getParameter<edm::InputTag>("digiCollection"))),
120  m_historyProductToken(consumes<EventWithHistory>(iConfig.getParameter<edm::InputTag>("historyProduct"))),
121  m_apvphasecollToken(consumes<APVCyclePhaseCollection>(iConfig.getParameter<edm::InputTag>("apvPhaseCollection"))),
122  m_digibadmodulecollectionToken(
123  consumes<DetIdCollection>(iConfig.getParameter<edm::InputTag>("badModuleDigiCollection"))),
124  m_phasepart(iConfig.getUntrackedParameter<std::string>("phasePartition", "None")),
125  m_ignorebadfedmod(iConfig.getParameter<bool>("ignoreBadFEDMod")),
126  m_ignorenotconnected(iConfig.getParameter<bool>("ignoreNotConnected")),
127  m_nevents(0),
128  m_selections(),
129  m_labels(),
130  m_cmdist(),
131  m_nmodules(),
132  m_napvs(),
133  m_cmvsdbxincycle(),
134  m_cmvsbxrun(),
135  m_cmvsorbitrun(),
136  m_rhm(consumesCollector()),
137  m_detCablingWatcher(this, &CommonModeAnalyzer::updateDetCabling),
138  m_detCablingToken(esConsumes()) {
139  //now do what ever initialization is needed
140 
142 
143  std::vector<edm::ParameterSet> selconfigs = iConfig.getParameter<std::vector<edm::ParameterSet> >("selections");
144 
145  for (std::vector<edm::ParameterSet>::const_iterator selconfig = selconfigs.begin(); selconfig != selconfigs.end();
146  ++selconfig) {
147  std::string label = selconfig->getParameter<std::string>("label");
148  DetIdSelector selection(*selconfig);
149  m_selections.push_back(selection);
150 
151  {
152  std::string hname = label + "_CommonMode";
153  std::string htitle = label + " Common Mode";
154  m_cmdist.push_back(tfserv->make<TH1D>(hname.c_str(), htitle.c_str(), 1024, -0.5, 1024 - 0.5));
155  m_cmdist.back()->GetXaxis()->SetTitle("ADC");
156  }
157  {
158  std::string hname = label + "_nmodules";
159  std::string htitle = label + " Number of Modules with CM value";
160  m_nmodules.push_back(tfserv->make<TH1D>(hname.c_str(), htitle.c_str(), 20000, -0.5, 20000 - 0.5));
161  m_nmodules.back()->GetXaxis()->SetTitle("#modules");
162  }
163  {
164  std::string hname = label + "_napvs";
165  std::string htitle = label + " Number of APVs with CM value";
166  m_napvs.push_back(tfserv->make<TH1D>(hname.c_str(), htitle.c_str(), 2000, -0.5, 80000 - 0.5));
167  m_napvs.back()->GetXaxis()->SetTitle("#apvs");
168  }
169  {
170  std::string hname = label + "_CMvsDBXinCycle";
171  std::string htitle = label + " Common Mode vs DBX in Cycle";
172  m_cmvsdbxincycle.push_back(tfserv->make<TProfile>(hname.c_str(), htitle.c_str(), 1000, -0.5, 1000 - 0.5));
173  m_cmvsdbxincycle.back()->GetXaxis()->SetTitle("DBX in cycle");
174  m_cmvsdbxincycle.back()->GetYaxis()->SetTitle("CM (ADC counts)");
175  }
176  {
177  std::string hname = label + "_CMvsBX";
178  std::string htitle = label + " Common Mode vs BX";
179  m_cmvsbxrun.push_back(m_rhm.makeTProfile(hname.c_str(), htitle.c_str(), 3565, -0.5, 3565 - 0.5));
180  }
181  {
182  std::string hname = label + "_CMvsOrbit";
183  std::string htitle = label + " Common Mode vs Orbit";
184  m_cmvsorbitrun.push_back(m_rhm.makeTProfile(hname.c_str(), htitle.c_str(), 4 * 500, 0, 500 * 262144));
185  }
186  }
187 }
188 
190  // do anything here that needs to be done at desctruction time
191  // (e.g. close files, deallocate resources etc.)
192 }
193 
194 //
195 // member functions
196 //
197 
198 // ------------ method called to for each event ------------
200  using namespace edm;
201 
202  m_detCablingWatcher.check(iSetup);
203 
204  m_nevents++;
205 
207  iEvent.getByToken(m_historyProductToken, he);
208 
210  iEvent.getByToken(m_apvphasecollToken, apvphase);
211 
212  Handle<DetIdCollection> badmodules;
213  iEvent.getByToken(m_digibadmodulecollectionToken, badmodules);
214 
215  int thephase = APVCyclePhaseCollection::invalid;
216  if (apvphase.isValid() && !apvphase.failedToGet()) {
217  thephase = apvphase->getPhase(m_phasepart);
218  }
219  bool isphaseok = (thephase != APVCyclePhaseCollection::invalid && thephase != APVCyclePhaseCollection::multiphase &&
221 
223  iEvent.getByToken(m_digicollectionToken, digis);
224 
225  // loop on detector with digis
226 
227  std::vector<int> nmodules(m_selections.size(), 0);
228  std::vector<int> napvs(m_selections.size(), 0);
229 
230  for (edm::DetSetVector<SiStripRawDigi>::const_iterator mod = digis->begin(); mod != digis->end(); mod++) {
231  std::vector<const FedChannelConnection*> conns = m_detCabling->getConnections(mod->detId());
232 
233  if (!m_ignorebadfedmod || std::find(badmodules->begin(), badmodules->end(), mod->detId()) == badmodules->end()) {
234  for (unsigned int isel = 0; isel < m_selections.size(); ++isel) {
235  if (m_selections[isel].isSelected(mod->detId())) {
236  unsigned int strip = 0;
237  ++nmodules[isel];
238  for (edm::DetSet<SiStripRawDigi>::const_iterator digi = mod->begin(); digi != mod->end(); digi++, strip++) {
239  LogDebug("StripNumber") << "Strip number " << strip;
240  if (!m_ignorenotconnected ||
241  ((conns.size() > strip / 2) && conns[strip / 2] && conns[strip / 2]->isConnected())) {
242  ++napvs[isel];
243  m_cmdist[isel]->Fill(digi->adc());
244  if (isphaseok)
245  m_cmvsdbxincycle[isel]->Fill(he->deltaBXinCycle(thephase), digi->adc());
246  if (m_cmvsbxrun[isel] && *(m_cmvsbxrun[isel]))
247  (*(m_cmvsbxrun[isel]))->Fill(iEvent.bunchCrossing(), digi->adc());
248  if (m_cmvsorbitrun[isel] && *(m_cmvsorbitrun[isel]))
249  (*(m_cmvsorbitrun[isel]))->Fill(iEvent.orbitNumber(), digi->adc());
250  } else if (digi->adc() > 0) {
251  edm::LogWarning("NonZeroCMWhenDisconnected")
252  << " Non zero CM in " << mod->detId() << " APV " << strip << " with " << conns.size()
253  << " connections and connection pointer" << conns[strip / 2];
254  }
255  }
256  }
257  }
258  }
259  }
260  for (unsigned int isel = 0; isel < m_selections.size(); ++isel) {
261  m_nmodules[isel]->Fill(nmodules[isel]);
262  m_napvs[isel]->Fill(napvs[isel]);
263  }
264 }
265 
267  m_rhm.beginRun(iRun);
268 
269  for (std::vector<TProfile**>::const_iterator cmvsbx = m_cmvsbxrun.begin(); cmvsbx != m_cmvsbxrun.end(); ++cmvsbx) {
270  if (*cmvsbx && *(*cmvsbx)) {
271  (*(*cmvsbx))->GetXaxis()->SetTitle("BX");
272  (*(*cmvsbx))->GetYaxis()->SetTitle("CM (ADC counts)");
273  }
274  }
275  for (std::vector<TProfile**>::const_iterator cmvsorbit = m_cmvsorbitrun.begin(); cmvsorbit != m_cmvsorbitrun.end();
276  ++cmvsorbit) {
277  if (*cmvsorbit && *(*cmvsorbit)) {
278  (*(*cmvsorbit))->GetXaxis()->SetTitle("orbit");
279  (*(*cmvsorbit))->GetYaxis()->SetTitle("CM (ADC counts)");
280  (*(*cmvsorbit))->SetCanExtend(TH1::kXaxis);
281  }
282  }
283 }
284 
286 
287 // ------------ method called once each job just before starting event loop ------------
289 
290 // ------------ method called once each job just after ending the event loop ------------
291 void CommonModeAnalyzer::endJob() { edm::LogInfo("EndOfJob") << m_nevents << " analyzed events"; }
292 
295 }
296 
297 //define this as a plug-in
edm::ESWatcher::check
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:52
edm::EDCollection::begin
const_iterator begin() const
Definition: EDCollection.h:117
electrons_cff.bool
bool
Definition: electrons_cff.py:393
CommonModeAnalyzer::m_historyProductToken
edm::EDGetTokenT< EventWithHistory > m_historyProductToken
Definition: CommonModeAnalyzer.cc:82
MessageLogger.h
edm::ESWatcher< SiStripDetCablingRcd >
APVCyclePhaseCollection::multiphase
Definition: APVCyclePhaseCollection.h:21
edm::Run
Definition: Run.h:45
edm::EDGetTokenT
Definition: EDGetToken.h:33
edm
HLT enums.
Definition: AlignableModifier.h:19
APVCyclePhaseCollection::invalid
Definition: APVCyclePhaseCollection.h:21
digitizers_cfi.strip
strip
Definition: digitizers_cfi.py:19
SiStripRawDigi.h
mod
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
CommonModeAnalyzer::m_labels
std::vector< std::string > m_labels
Definition: CommonModeAnalyzer.cc:91
EventWithHistory.h
DetIdSelector.h
CommonModeAnalyzer::m_cmvsbxrun
std::vector< TProfile ** > m_cmvsbxrun
Definition: CommonModeAnalyzer.cc:96
EDAnalyzer.h
CommonModeAnalyzer::m_selections
std::vector< DetIdSelector > m_selections
Definition: CommonModeAnalyzer.cc:90
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
CommonModeAnalyzer::m_digibadmodulecollectionToken
edm::EDGetTokenT< DetIdCollection > m_digibadmodulecollectionToken
Definition: CommonModeAnalyzer.cc:84
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
edm::Handle
Definition: AssociativeIterator.h:50
CommonModeAnalyzer::m_phasepart
const std::string m_phasepart
Definition: CommonModeAnalyzer.cc:85
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
edm::EDAnalyzer
Definition: EDAnalyzer.h:28
MakerMacros.h
SiStripDetCabling.h
SiStripRawDigi
A Digi for the silicon strip detector, containing only adc information, and suitable for storing raw ...
Definition: SiStripRawDigi.h:15
RunHistogramManager
Definition: RunHistogramManager.h:210
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
CommonModeAnalyzer::updateDetCabling
void updateDetCabling(const SiStripDetCablingRcd &iRcd)
Definition: CommonModeAnalyzer.cc:293
Service.h
RunHistogramManager.h
SiStripDetCabling
Definition: SiStripDetCabling.h:21
APVCyclePhaseCollection
Definition: APVCyclePhaseCollection.h:8
corrVsCorr.selection
selection
main part
Definition: corrVsCorr.py:100
CommonModeAnalyzer::m_rhm
RunHistogramManager m_rhm
Definition: CommonModeAnalyzer.cc:99
SiStripDetCablingRcd
Definition: SiStripDependentRecords.h:19
CommonModeAnalyzer::CommonModeAnalyzer
CommonModeAnalyzer(const edm::ParameterSet &)
Definition: CommonModeAnalyzer.cc:117
edm::eventsetup::DependentRecordImplementation::get
ProductT const & get(ESGetToken< ProductT, DepRecordT > const &iToken) const
Definition: DependentRecordImplementation.h:103
CommonModeAnalyzer::endRun
void endRun(const edm::Run &, const edm::EventSetup &) override
Definition: CommonModeAnalyzer.cc:285
CommonModeAnalyzer::m_napvs
std::vector< TH1D * > m_napvs
Definition: CommonModeAnalyzer.cc:94
CommonModeAnalyzer
Definition: CommonModeAnalyzer.cc:65
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
TFileService.h
CommonModeAnalyzer::m_cmvsorbitrun
std::vector< TProfile ** > m_cmvsorbitrun
Definition: CommonModeAnalyzer.cc:97
SiStripConstants.h
CommonModeAnalyzer::m_nmodules
std::vector< TH1D * > m_nmodules
Definition: CommonModeAnalyzer.cc:93
edm::HandleBase::failedToGet
bool failedToGet() const
Definition: HandleBase.h:72
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
CommonModeAnalyzer::endJob
void endJob() override
Definition: CommonModeAnalyzer.cc:291
edm::DetSetVector::const_iterator
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
RunHistogramManager::beginRun
void beginRun(const edm::Run &iRun)
Definition: RunHistogramManager.cc:101
APVCyclePhaseCollection.h
edm::Service< TFileService >
iEvent
int iEvent
Definition: GenABIO.cc:224
CommonModeAnalyzer::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: CommonModeAnalyzer.cc:199
CommonModeAnalyzer::m_detCabling
const SiStripDetCabling * m_detCabling
The cabling object.
Definition: CommonModeAnalyzer.cc:103
CommonModeAnalyzer::m_nevents
int m_nevents
Definition: CommonModeAnalyzer.cc:88
edm::EventSetup
Definition: EventSetup.h:57
CommonModeAnalyzer::m_cmdist
std::vector< TH1D * > m_cmdist
Definition: CommonModeAnalyzer.cc:92
EventWithHistory
Definition: EventWithHistory.h:17
DetSetVector.h
edm::EDCollection< DetId >
edm::ESGetToken< SiStripDetCabling, SiStripDetCablingRcd >
HcalObjRepresent::Fill
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
Definition: HcalObjRepresent.h:1053
CommonModeAnalyzer::m_cmvsdbxincycle
std::vector< TProfile * > m_cmvsdbxincycle
Definition: CommonModeAnalyzer.cc:95
InputTag.h
CommonModeAnalyzer::m_digicollectionToken
edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > m_digicollectionToken
Definition: CommonModeAnalyzer.cc:81
CommonModeAnalyzer::beginRun
void beginRun(const edm::Run &, const edm::EventSetup &) override
Definition: CommonModeAnalyzer.cc:266
CommonModeAnalyzer::m_detCablingToken
edm::ESGetToken< SiStripDetCabling, SiStripDetCablingRcd > m_detCablingToken
Definition: CommonModeAnalyzer.cc:102
CommonModeAnalyzer::m_detCablingWatcher
edm::ESWatcher< SiStripDetCablingRcd > m_detCablingWatcher
Definition: CommonModeAnalyzer.cc:101
std
Definition: JetResolutionObject.h:76
CommonModeAnalyzer::m_ignorebadfedmod
const bool m_ignorebadfedmod
Definition: CommonModeAnalyzer.cc:86
CommonModeAnalyzer::~CommonModeAnalyzer
~CommonModeAnalyzer() override
Definition: CommonModeAnalyzer.cc:189
hcalSimParameters_cfi.he
he
Definition: hcalSimParameters_cfi.py:79
FedChannelConnection.h
DetId.h
Frameworkfwd.h
ESWatcher.h
APVCyclePhaseCollection::getPhase
const int getPhase(const std::string partition) const
Definition: APVCyclePhaseCollection.cc:5
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
CommonModeAnalyzer::m_apvphasecollToken
edm::EDGetTokenT< APVCyclePhaseCollection > m_apvphasecollToken
Definition: CommonModeAnalyzer.cc:83
CommonModeAnalyzer::beginJob
void beginJob() override
Definition: CommonModeAnalyzer.cc:288
SiStripDetCablingRcd.h
ParameterSet.h
CommonModeAnalyzer::m_ignorenotconnected
const bool m_ignorenotconnected
Definition: CommonModeAnalyzer.cc:87
APVCyclePhaseCollection::nopartition
Definition: APVCyclePhaseCollection.h:21
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
edm::EDCollection::end
const_iterator end() const
Definition: EDCollection.h:122
label
const char * label
Definition: PFTauDecayModeTools.cc:11
SiStripDetCabling::getConnections
const std::vector< const FedChannelConnection * > & getConnections(uint32_t det_id) const
Definition: SiStripDetCabling.cc:161
DetIdCollection.h
DetIdSelector
Definition: DetIdSelector.h:12
TFileService::make
T * make(const Args &... args) const
make new ROOT object
Definition: TFileService.h:64
RunHistogramManager::makeTProfile
TProfile ** makeTProfile(const char *name, const char *title, const unsigned int nbinx, const double xmin, const double xmax)
Definition: RunHistogramManager.cc:52
edm::DetSet::const_iterator
collection_type::const_iterator const_iterator
Definition: DetSet.h:31