CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
DTOccupancyTest Class Reference

#include <DTOccupancyTest.h>

Inheritance diagram for DTOccupancyTest:
DQMEDHarvester edm::one::EDProducer< edm::Accumulator, edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns, edm::one::SharedResources > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 DTOccupancyTest (const edm::ParameterSet &ps)
 Constructor. More...
 
 ~DTOccupancyTest () override
 Destructor. More...
 
- Public Member Functions inherited from DQMEDHarvester
void accumulate (edm::Event const &ev, edm::EventSetup const &es) final
 
void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void beginRun (edm::Run const &, edm::EventSetup const &) override
 
 DQMEDHarvester ()
 
void endJob () final
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void endLuminosityBlockProduce (edm::LuminosityBlock &, edm::EventSetup const &) final
 
void endRun (edm::Run const &, edm::EventSetup const &) override
 
void endRunProduce (edm::Run &run, edm::EventSetup const &setup) override
 
 ~DQMEDHarvester () override=default
 
- Public Member Functions inherited from edm::one::EDProducer< edm::Accumulator, edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns, edm::one::SharedResources >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

void beginRun (edm::Run const &run, edm::EventSetup const &context) override
 BeginRun. More...
 
void dqmEndJob (DQMStore::IBooker &, DQMStore::IGetter &) override
 Endjob. More...
 
void dqmEndLuminosityBlock (DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &) override
 DQM Client Diagnostic. More...
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Private Member Functions

void bookHistos (DQMStore::IBooker &, const int wheelId, std::string folder, std::string histoTag)
 book the summary histograms More...
 
int getIntegral (TH2F *histo, int, int, int, int, bool)
 
std::string getMEName (std::string histoTag, const DTChamberId &chId)
 Get the ME name. More...
 
int runOccupancyTest (TH2F *histo, const DTChamberId &chId, float &chamberPercentage)
 
std::string topFolder () const
 

Private Attributes

bool bookingdone
 
MonitorElementglbSummaryHisto
 
int lsCounter
 
std::set< DTLayerIdmonitoredLayers
 
edm::ESHandle< DTGeometrymuonGeom
 
std::string nameMonitoredHisto
 
int nChannelDead
 
int nChannelTotal
 
int nevents
 
int nMinEvts
 
int nMinEvtsPC
 
TNtuple * ntuple
 
int nZeroEvtsPC
 
TFile * rootFile
 
bool runOnAllHitsOccupancies
 
bool runOnInTimeOccupancies
 
bool runOnNoiseOccupancies
 
MonitorElementsummaryHisto
 
bool tpMode
 
std::map< int, MonitorElement * > wheelHistos
 
bool writeRootFile
 

Additional Inherited Members

- Public Types inherited from DQMEDHarvester
typedef dqm::harvesting::DQMStore DQMStore
 
typedef dqm::harvesting::MonitorElement MonitorElement
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Attributes inherited from DQMEDHarvester
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Definition at line 35 of file DTOccupancyTest.h.

Constructor & Destructor Documentation

DTOccupancyTest::DTOccupancyTest ( const edm::ParameterSet ps)

Constructor.

Definition at line 26 of file DTOccupancyTest.cc.

References edm::ParameterSet::getUntrackedParameter(), cmsHarvester::nevents, indexGen::rootFile, dtOccupancyTest_cfi::runOnAllHitsOccupancies, dtOccupancyTest_cfi::runOnInTimeOccupancies, and dtOccupancyTest_cfi::runOnNoiseOccupancies.

26  {
27  LogVerbatim("DTDQM|DTMonitorClient|DTOccupancyTest") << "[DTOccupancyTest]: Constructor";
28 
29  // Get the DQM service
30 
31  lsCounter = 0;
32 
33  writeRootFile = ps.getUntrackedParameter<bool>("writeRootFile", false);
34  if (writeRootFile) {
35  rootFile = new TFile("DTOccupancyTest.root", "RECREATE");
36  ntuple = new TNtuple("OccupancyNtuple",
37  "OccupancyNtuple",
38  "ls:wh:st:se:lay1MeanCell:lay1RMS:lay2MeanCell:lay2RMS:lay3MeanCell:lay3RMS:lay4MeanCell:"
39  "lay4RMS:lay5MeanCell:lay5RMS:lay6MeanCell:lay6RMS:lay7MeanCell:lay7RMS:lay8MeanCell:lay8RMS:"
40  "lay9MeanCell:lay9RMS:lay10MeanCell:lay10RMS:lay11MeanCell:lay11RMS:lay12MeanCell:lay12RMS");
41  }
42 
43  // switch on the mode for running on test pulses (different top folder)
44  tpMode = ps.getUntrackedParameter<bool>("testPulseMode", false);
45 
46  runOnAllHitsOccupancies = ps.getUntrackedParameter<bool>("runOnAllHitsOccupancies", true);
47  runOnNoiseOccupancies = ps.getUntrackedParameter<bool>("runOnNoiseOccupancies", false);
48  runOnInTimeOccupancies = ps.getUntrackedParameter<bool>("runOnInTimeOccupancies", false);
49  nMinEvts = ps.getUntrackedParameter<int>("nEventsCert", 5000);
50  nMinEvtsPC = ps.getUntrackedParameter<int>("nEventsMinPC", 2200);
51  nZeroEvtsPC = ps.getUntrackedParameter<int>("nEventsZeroPC", 30);
52 
53  bookingdone = false;
54 
55  // Event counter
56  nevents = 0;
57 }
T getUntrackedParameter(std::string const &, T const &) const
Definition: ntuple.py:1
bool runOnAllHitsOccupancies
DTOccupancyTest::~DTOccupancyTest ( )
override

Destructor.

Definition at line 59 of file DTOccupancyTest.cc.

59  {
60  LogVerbatim("DTDQM|DTMonitorClient|DTOccupancyTest") << " destructor called" << endl;
61 }

Member Function Documentation

void DTOccupancyTest::beginRun ( edm::Run const &  run,
edm::EventSetup const &  context 
)
overrideprotected

BeginRun.

Definition at line 63 of file DTOccupancyTest.cc.

References edm::EventSetup::get().

63  {
64  LogVerbatim("DTDQM|DTMonitorClient|DTOccupancyTest") << "[DTOccupancyTest]: BeginRun";
65 
66  // Get the geometry
67  context.get<MuonGeometryRecord>().get(muonGeom);
68 }
edm::ESHandle< DTGeometry > muonGeom
void DTOccupancyTest::bookHistos ( DQMStore::IBooker ,
const int  wheelId,
std::string  folder,
std::string  histoTag 
)
private

book the summary histograms

Definition at line 200 of file DTOccupancyTest.cc.

References dqm::dqmstoreimpl::DQMStore::IBooker::book2D(), HltBtagPostValidation_cff::histoName, dqm::impl::MonitorElement::setBinLabel(), dqm::dqmstoreimpl::DQMStore::IBooker::setCurrentFolder(), and makeMuonMisalignmentScenario::wheel.

200  {
201  // Set the current folder
202  stringstream wheel;
203  wheel << wheelId;
204 
205  ibooker.setCurrentFolder(topFolder());
206 
207  // build the histo name
208  string histoName = histoTag + "_W" + wheel.str();
209 
210  LogVerbatim("DTDQM|DTMonitorClient|DTOccupancyTest")
211  << "[DTOccupancyTest]: booking wheel histo:" << histoName << " (tag " << histoTag
212  << ") in: " << topFolder() + "Wheel" + wheel.str() + "/" + folder << endl;
213 
214  string histoTitle = "Occupancy summary WHEEL: " + wheel.str();
215  if (tpMode) {
216  histoTitle = "TP Occupancy summary WHEEL: " + wheel.str();
217  }
218 
219  wheelHistos[wheelId] = ibooker.book2D(histoName, histoTitle, 12, 1, 13, 4, 1, 5);
220  wheelHistos[wheelId]->setBinLabel(1, "MB1", 2);
221  wheelHistos[wheelId]->setBinLabel(2, "MB2", 2);
222  wheelHistos[wheelId]->setBinLabel(3, "MB3", 2);
223  wheelHistos[wheelId]->setBinLabel(4, "MB4", 2);
224  wheelHistos[wheelId]->setAxisTitle("sector", 1);
225 }
std::string topFolder() const
std::map< int, MonitorElement * > wheelHistos
void DTOccupancyTest::dqmEndJob ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter 
)
overrideprotectedvirtual

Endjob.

Implements DQMEDHarvester.

Definition at line 189 of file DTOccupancyTest.cc.

References indexGen::rootFile.

189  {
190  LogVerbatim("DTDQM|DTMonitorClient|DTOccupancyTest") << "[DTOccupancyTest] endjob called!";
191  if (writeRootFile) {
192  rootFile->cd();
193  ntuple->Write();
194  rootFile->Close();
195  }
196 }
Definition: ntuple.py:1
void DTOccupancyTest::dqmEndLuminosityBlock ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter,
edm::LuminosityBlock const &  lumiSeg,
edm::EventSetup const &  context 
)
overrideprotectedvirtual

DQM Client Diagnostic.

Reimplemented from DQMEDHarvester.

Definition at line 70 of file DTOccupancyTest.cc.

References dqm::dqmstoreimpl::DQMStore::IBooker::book2D(), bookHistos(), relativeConstraints::chamber, chambers, dqm::dqmstoreimpl::DQMStore::IGetter::get(), dqm::impl::MonitorElement::getFloatValue(), dqm::legacy::MonitorElement::getTH2F(), timingPdfMaker::histo, createfilelist::int, mps_fire::result, dtOccupancyTest_cfi::runOnAllHitsOccupancies, dtOccupancyTest_cfi::runOnInTimeOccupancies, dtOccupancyTest_cfi::runOnNoiseOccupancies, DTChamberId::sector(), dqm::impl::MonitorElement::setAxisTitle(), dqm::dqmstoreimpl::DQMStore::IBooker::setCurrentFolder(), DTChamberId::station(), overlapproblemtsosanalyzer_cfi::title, and DTChamberId::wheel().

73  {
74  if (!bookingdone) {
75  // Book the summary histos
76  // - one summary per wheel
77  for (int wh = -2; wh <= 2; ++wh) { // loop over wheels
78  bookHistos(ibooker, wh, string("Occupancies"), "OccupancySummary");
79  }
80 
81  ibooker.setCurrentFolder(topFolder());
82  string title = "Occupancy Summary";
83  if (tpMode) {
84  title = "Test Pulse Occupancy Summary";
85  }
86  // - global summary with alarms
87  summaryHisto = ibooker.book2D("OccupancySummary", title.c_str(), 12, 1, 13, 5, -2, 3);
88  summaryHisto->setAxisTitle("sector", 1);
89  summaryHisto->setAxisTitle("wheel", 2);
90 
91  // - global summary with percentages
92  glbSummaryHisto = ibooker.book2D("OccupancyGlbSummary", title.c_str(), 12, 1, 13, 5, -2, 3);
93  glbSummaryHisto->setAxisTitle("sector", 1);
94  glbSummaryHisto->setAxisTitle("wheel", 2);
95 
96  // assign the name of the input histogram
98  nameMonitoredHisto = "OccupancyAllHits_perCh";
99  } else if (runOnNoiseOccupancies) {
100  nameMonitoredHisto = "OccupancyNoise_perCh";
101  } else if (runOnInTimeOccupancies) {
102  nameMonitoredHisto = "OccupancyInTimeHits_perCh";
103  } else { // default is AllHits histo
104  nameMonitoredHisto = "OccupancyAllHits_perCh";
105  }
106  }
107  bookingdone = true;
108 
109  LogVerbatim("DTDQM|DTMonitorClient|DTOccupancyTest")
110  << "[DTOccupancyTest]: End of LS transition, performing the DQM client operation";
111  lsCounter++;
112 
113  // Reset the global summary
114  summaryHisto->Reset();
116 
117  nChannelTotal = 0;
118  nChannelDead = 0;
119 
120  // Get all the DT chambers
121  vector<const DTChamber*> chambers = muonGeom->chambers();
122 
123  for (vector<const DTChamber*>::const_iterator chamber = chambers.begin(); chamber != chambers.end();
124  ++chamber) { // Loop over all chambers
125  DTChamberId chId = (*chamber)->id();
126 
127  MonitorElement* chamberOccupancyHisto = igetter.get(getMEName(nameMonitoredHisto, chId));
128 
129  // Run the tests on the plot for the various granularities
130  if (chamberOccupancyHisto != nullptr) {
131  // Get the 2D histo
132  TH2F* histo = chamberOccupancyHisto->getTH2F();
133  float chamberPercentage = 1.;
134  int result = runOccupancyTest(histo, chId, chamberPercentage);
135  int sector = chId.sector();
136 
137  if (sector == 13) {
138  sector = 4;
139  float resultSect4 = wheelHistos[chId.wheel()]->getBinContent(sector, chId.station());
140  if (resultSect4 > result) {
141  result = (int)resultSect4;
142  }
143  } else if (sector == 14) {
144  sector = 10;
145  float resultSect10 = wheelHistos[chId.wheel()]->getBinContent(sector, chId.station());
146  if (resultSect10 > result) {
147  result = (int)resultSect10;
148  }
149  }
150 
151  // the 2 MB4 of Sect 4 and 10 count as half a chamber
152  if ((sector == 4 || sector == 10) && chId.station() == 4)
153  chamberPercentage = chamberPercentage / 2.;
154 
155  wheelHistos[chId.wheel()]->setBinContent(sector, chId.station(), result);
156  if (result > summaryHisto->getBinContent(sector, chId.wheel() + 3)) {
157  summaryHisto->setBinContent(sector, chId.wheel() + 3, result);
158  }
159  glbSummaryHisto->Fill(sector, chId.wheel(), chamberPercentage * 1. / 4.);
160  } else {
161  LogVerbatim("DTDQM|DTMonitorClient|DTOccupancyTest")
162  << "[DTOccupancyTest] ME: " << getMEName(nameMonitoredHisto, chId) << " not found!" << endl;
163  }
164  }
165 
166  string nEvtsName = "DT/EventInfo/Counters/nProcessedEventsDigi";
167 
168  MonitorElement* meProcEvts = igetter.get(nEvtsName);
169 
170  if (meProcEvts) {
171  int nProcEvts = meProcEvts->getFloatValue();
172  glbSummaryHisto->setEntries(nProcEvts < nMinEvts ? 10. : nProcEvts);
173  summaryHisto->setEntries(nProcEvts < nMinEvts ? 10. : nProcEvts);
174  } else {
177  LogVerbatim("DTDQM|DTMonitorClient|DTOccupancyTest")
178  << "[DTOccupancyTest] ME: " << nEvtsName << " not found!" << endl;
179  }
180 
181  // Fill the global summary
182  // Check for entire sectors off and report them on the global summary
183  //FIXME: TODO
184 
185  if (writeRootFile)
186  ntuple->AutoSave("SaveSelf");
187 }
const std::vector< const DTChamber * > & chambers() const
Return a vector of all Chamber.
Definition: DTGeometry.cc:84
virtual TH2F * getTH2F() const
virtual void setEntries(double nentries)
set # of entries
int runOccupancyTest(TH2F *histo, const DTChamberId &chId, float &chamberPercentage)
MonitorElement * summaryHisto
std::string nameMonitoredHisto
Definition: ntuple.py:1
void Fill(long long x)
virtual void Reset()
reset ME (ie. contents, errors, etc)
void bookHistos(DQMStore::IBooker &, const int wheelId, std::string folder, std::string histoTag)
book the summary histograms
std::string getMEName(std::string histoTag, const DTChamberId &chId)
Get the ME name.
bool runOnAllHitsOccupancies
virtual double getBinContent(int binx) const
get content of bin (1-D)
edm::ESHandle< DTGeometry > muonGeom
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
virtual double getFloatValue() const
int sector() const
Definition: DTChamberId.h:49
std::string topFolder() const
std::map< int, MonitorElement * > wheelHistos
int station() const
Return the station number.
Definition: DTChamberId.h:42
static char chambers[264][20]
Definition: ReadPGInfo.cc:243
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
MonitorElement * glbSummaryHisto
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
int DTOccupancyTest::getIntegral ( TH2F *  histo,
int  firstBinX,
int  lastBinX,
int  firstBinY,
int  lastBinY,
bool  doall 
)
private

Definition at line 247 of file DTOccupancyTest.cc.

References mps_fire::i, and dqmiolumiharvest::j.

247  {
248  int sum = 0;
249  for (Int_t i = firstBinX; i < lastBinX + 1; i++) {
250  for (Int_t j = firstBinY; j < lastBinY + 1; j++) {
251  if (histo->GetBinContent(i, j) > 0) {
252  if (!doall)
253  return 1;
254  sum += histo->GetBinContent(i, j);
255  }
256  }
257  }
258 
259  return sum;
260 }
string DTOccupancyTest::getMEName ( std::string  histoTag,
const DTChamberId chId 
)
private

Get the ME name.

Definition at line 227 of file DTOccupancyTest.cc.

References printsummarytable::folder, dtChamberEfficiencyTest_cfi::folderRoot, HltBtagPostValidation_cff::histoName, DTChamberId::sector(), DTChamberId::station(), relativeConstraints::station, DTChamberId::wheel(), and makeMuonMisalignmentScenario::wheel.

227  {
228  stringstream wheel;
229  wheel << chId.wheel();
230  stringstream station;
231  station << chId.station();
232  stringstream sector;
233  sector << chId.sector();
234 
235  string folderRoot = topFolder() + "Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" + station.str() + "/";
236 
237  string folder = "Occupancies/";
238 
239  // build the histo name
240  string histoName = histoTag + "_W" + wheel.str() + "_St" + station.str() + "_Sec" + sector.str();
241 
242  string histoname = folderRoot + histoName;
243 
244  return histoname;
245 }
int sector() const
Definition: DTChamberId.h:49
std::string topFolder() const
int station() const
Return the station number.
Definition: DTChamberId.h:42
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
int DTOccupancyTest::runOccupancyTest ( TH2F *  histo,
const DTChamberId chId,
float &  chamberPercentage 
)
private

Definition at line 270 of file DTOccupancyTest.cc.

References dqmMemoryStats::float, LogTrace, DTChamberId::sector(), and DTChamberId::station().

270  {
271  int nBinsX = histo->GetNbinsX();
272 
273  LogTrace("DTDQM|DTMonitorClient|DTOccupancyTest") << "--- Occupancy test for chamber: " << chId << endl;
274 
275  int compDeadCell = 0;
276  int totCell = 0;
277  int totOccup = 0;
278 
279  for (int slay = 1; slay <= 3; ++slay) { // loop over SLs
280  int binYlow = ((slay - 1) * 4) + 1;
281 
282  if (chId.station() == 4 && slay == 2)
283  continue;
284  for (int lay = 1; lay <= 4; ++lay) { // loop over layers
285  DTLayerId layID(chId, slay, lay);
286  int firstWire = muonGeom->layer(layID)->specificTopology().firstChannel();
287  int nWires = muonGeom->layer(layID)->specificTopology().channels();
288  int binY = binYlow + (lay - 1);
289  int totalDeadCells = 0;
290  int nDeadCellsInARow = 1;
291  int nDeadCellsInARowMax = 0;
292  int nCellsZeroCount = 0;
293  bool previousIsDead = false;
294 
295  int interDeadCells = 0;
296 
297  totCell += nWires;
298 
299  for (int cell = firstWire; cell != (nWires + firstWire); ++cell) { // loop over cells
300  double cellOccup = histo->GetBinContent(cell, binY);
301  LogTrace("DTDQM|DTMonitorClient|DTOccupancyTest") << " cell occup: " << cellOccup;
302  totOccup += cellOccup;
303 
304  if (cellOccup == 0) {
305  nCellsZeroCount++;
306  totalDeadCells++;
307  if (previousIsDead) {
308  nDeadCellsInARow++;
309  } else {
310  // if(interDeadCells > 3) {
311  if (nDeadCellsInARow > nDeadCellsInARowMax)
312  nDeadCellsInARowMax = nDeadCellsInARow;
313  nDeadCellsInARow = 1;
314  // }
315  }
316  previousIsDead = true;
317  interDeadCells = 0;
318  LogTrace("DTDQM|DTMonitorClient|DTOccupancyTest") << " below reference" << endl;
319  } else {
320  previousIsDead = false;
321  interDeadCells++;
322  }
323  // // 3 cells not dead between a group of dead cells don't break the count
324  if (nDeadCellsInARow > nDeadCellsInARowMax)
325  nDeadCellsInARowMax = nDeadCellsInARow;
326  }
327  compDeadCell += totalDeadCells;
328  if (nDeadCellsInARowMax >= 7.) {
329  histo->SetBinContent(nBinsX + 1, binY, -1.);
330  }
331  }
332  }
333 
334  nChannelTotal += totCell;
335  nChannelDead += compDeadCell;
336  chamberPercentage = 1. - (float(compDeadCell) / totCell);
337 
338  int min_occup = nZeroEvtsPC * 20;
339  if (chId.station() == 3)
340  min_occup = nZeroEvtsPC * 3;
341  if (chId.station() == 2)
342  min_occup = nZeroEvtsPC * 8;
343  if ((chId.station() == 4) && (chId.sector() == 9))
344  min_occup = nZeroEvtsPC * 3;
345  if ((chId.station() == 4) && (chId.sector() == 10))
346  min_occup = nZeroEvtsPC * 3;
347  if ((chId.station() == 4) && (chId.sector() == 11))
348  min_occup = nZeroEvtsPC * 3;
349  if ((chId.station() == 4) && (chId.sector() == 14))
350  min_occup = nZeroEvtsPC * 3;
351 
352  if (totOccup < min_occup)
353  return 4;
354  if (totOccup < nMinEvtsPC)
355  chamberPercentage = 1.;
356 
357  if (chamberPercentage < 0.2)
358  return 4;
359  if (chamberPercentage < 0.5)
360  return 3;
361  if (chamberPercentage < 0.75)
362  return 2;
363  if (chamberPercentage < 0.9)
364  return 1;
365 
366  return 0;
367 }
int firstChannel() const
Returns the wire number of the first wire.
Definition: DTTopology.h:79
const DTTopology & specificTopology() const
Definition: DTLayer.cc:37
#define LogTrace(id)
edm::ESHandle< DTGeometry > muonGeom
int channels() const
Returns the number of wires in the layer.
Definition: DTTopology.h:76
int sector() const
Definition: DTChamberId.h:49
const DTLayer * layer(const DTLayerId &id) const
Return a layer given its id.
Definition: DTGeometry.cc:96
int station() const
Return the station number.
Definition: DTChamberId.h:42
string DTOccupancyTest::topFolder ( ) const
private

Definition at line 369 of file DTOccupancyTest.cc.

References AlCaHLTBitMon_QueryRunRegistry::string.

369  {
370  if (tpMode)
371  return string("DT/10-TestPulses/");
372  return string("DT/01-Digi/");
373 }

Member Data Documentation

bool DTOccupancyTest::bookingdone
private

Definition at line 97 of file DTOccupancyTest.h.

MonitorElement* DTOccupancyTest::glbSummaryHisto
private

Definition at line 78 of file DTOccupancyTest.h.

int DTOccupancyTest::lsCounter
private

Definition at line 82 of file DTOccupancyTest.h.

std::set<DTLayerId> DTOccupancyTest::monitoredLayers
private

Definition at line 80 of file DTOccupancyTest.h.

edm::ESHandle<DTGeometry> DTOccupancyTest::muonGeom
private

Definition at line 73 of file DTOccupancyTest.h.

std::string DTOccupancyTest::nameMonitoredHisto
private

Definition at line 95 of file DTOccupancyTest.h.

int DTOccupancyTest::nChannelDead
private

Definition at line 100 of file DTOccupancyTest.h.

int DTOccupancyTest::nChannelTotal
private

Definition at line 99 of file DTOccupancyTest.h.

int DTOccupancyTest::nevents
private

Definition at line 71 of file DTOccupancyTest.h.

int DTOccupancyTest::nMinEvts
private

Definition at line 83 of file DTOccupancyTest.h.

int DTOccupancyTest::nMinEvtsPC
private

Definition at line 84 of file DTOccupancyTest.h.

TNtuple* DTOccupancyTest::ntuple
private
int DTOccupancyTest::nZeroEvtsPC
private

Definition at line 85 of file DTOccupancyTest.h.

TFile* DTOccupancyTest::rootFile
private

Definition at line 88 of file DTOccupancyTest.h.

bool DTOccupancyTest::runOnAllHitsOccupancies
private

Definition at line 92 of file DTOccupancyTest.h.

bool DTOccupancyTest::runOnInTimeOccupancies
private

Definition at line 94 of file DTOccupancyTest.h.

bool DTOccupancyTest::runOnNoiseOccupancies
private

Definition at line 93 of file DTOccupancyTest.h.

MonitorElement* DTOccupancyTest::summaryHisto
private

Definition at line 77 of file DTOccupancyTest.h.

bool DTOccupancyTest::tpMode
private

Definition at line 90 of file DTOccupancyTest.h.

std::map<int, MonitorElement *> DTOccupancyTest::wheelHistos
private

Definition at line 76 of file DTOccupancyTest.h.

bool DTOccupancyTest::writeRootFile
private

Definition at line 87 of file DTOccupancyTest.h.