CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RPCOccupancyTest.cc
Go to the documentation of this file.
1 /* \author Anna Cimmino*/
5 
6 // Framework
8 //Geometry
10 
12  edm::LogVerbatim("rpceventsummary") << "[RPCOccupancyTest]: Constructor";
13 
14  prescaleFactor_ = ps.getUntrackedParameter<int>("DiagnosticPrescale", 1);
15  numberOfDisks_ = ps.getUntrackedParameter<int>("NumberOfEndcapDisks", 4);
16  numberOfRings_ = ps.getUntrackedParameter<int>("NumberOfEndcapRings", 2);
17  useNormalization_ = ps.getUntrackedParameter<bool>("testMode", true);
18  useRollInfo_ = ps.getUntrackedParameter<bool>("useRollInfo_", false);
19 
20  std::string subsystemFolder = ps.getUntrackedParameter<std::string>("RPCFolder", "RPC");
21  std::string recHitTypeFolder = ps.getUntrackedParameter<std::string>("RecHitTypeFolder", "AllHits");
22 
23  prefixDir_ = subsystemFolder + "/" + recHitTypeFolder;
24 }
25 
27  edm::LogVerbatim("rpceventsummary") << "[RPCOccupancyTest]: Begin job ";
28  globalFolder_ = workingFolder;
29 
30  totalStrips_ = 0.;
31  totalActive_ = 0.;
32 }
33 
34 void RPCOccupancyTest::getMonitorElements(std::vector<MonitorElement*>& meVector,
35  std::vector<RPCDetId>& detIdVector,
36  std::string& clientHistoName) {
37  //Get NumberOfDigi ME for each roll
38  for (unsigned int i = 0; i < meVector.size(); i++) {
39  std::string meName = meVector[i]->getName();
40 
41  if (meName.find(clientHistoName) != std::string::npos) {
42  myOccupancyMe_.push_back(meVector[i]);
43  myDetIds_.push_back(detIdVector[i]);
44  }
45  }
46 }
47 
49  edm::LogVerbatim("rpceventsummary") << "[RPCOccupancyTest]: Client Operation";
50 
51  //Loop on MEs
52  for (unsigned int i = 0; i < myOccupancyMe_.size(); i++) {
54  } //End loop on MEs
55 
56  //Active Channels
57  if (Active_Fraction && totalStrips_ != 0.) {
59  }
60  if (Active_Dead) {
63  }
64 }
65 
68 
69  std::stringstream histoName;
70 
71  histoName.str("");
72  histoName << "RPC_Active_Channel_Fractions";
73  Active_Fraction = ibooker.book1D(histoName.str().c_str(), histoName.str().c_str(), 1, 0.5, 1.5);
74  Active_Fraction->setBinLabel(1, "Active Fraction", 1);
75 
76  histoName.str("");
77  histoName << "RPC_Active_Inactive_Strips";
78  Active_Dead = ibooker.book1D(histoName.str().c_str(), histoName.str().c_str(), 2, 0.5, 2.5);
79  Active_Dead->setBinLabel(1, "Active Strips", 1);
80  Active_Dead->setBinLabel(2, "Inactive Strips", 1);
81 
82  for (int w = -2; w <= 2; w++) { //loop on wheels
83 
84  histoName.str("");
85  histoName << "AsymmetryLeftRight_Roll_vs_Sector_Wheel" << w;
86 
87  auto me = RPCRollMapHisto::bookBarrel(ibooker, w, histoName.str(), histoName.str(), useRollInfo_);
88  AsyMeWheel[w + 2] = dynamic_cast<MonitorElement*>(me);
89  } //end Barrel
90 
91  for (int d = -numberOfDisks_; d <= numberOfDisks_; d++) {
92  if (d == 0)
93  continue;
94 
95  int offset = numberOfDisks_;
96  if (d > 0)
97  offset--; //used to skip case equale to zero
98 
99  histoName.str("");
100  histoName << "AsymmetryLeftRight_Ring_vs_Segment_Disk" << d;
101  auto me = RPCRollMapHisto::bookEndcap(ibooker, d, histoName.str(), histoName.str(), useRollInfo_);
102  AsyMeDisk[d + offset] = dynamic_cast<MonitorElement*>(me);
103  } //End loop on Endcap
104 }
105 
107  if (!myMe)
108  return;
109 
110  MonitorElement* AsyMe = nullptr; //Left Right Asymetry
111 
112  if (detId.region() == 0) {
113  AsyMe = AsyMeWheel[detId.ring() + 2];
114 
115  } else {
116  if (-detId.station() + numberOfDisks_ >= 0) {
117  if (detId.region() < 0) {
118  AsyMe = AsyMeDisk[-detId.station() + numberOfDisks_];
119  } else {
120  AsyMe = AsyMeDisk[detId.station() + numberOfDisks_ - 1];
121  }
122  }
123  }
124 
125  int xBin, yBin;
126  if (detId.region() == 0) { //Barrel
127  xBin = detId.sector();
128  rpcdqm::utils rollNumber;
129  yBin = rollNumber.detId2RollNr(detId);
130  } else { //Endcap
131  //get segment number
132  RPCGeomServ RPCServ(detId);
133  xBin = RPCServ.segment();
134  (numberOfRings_ == 3 ? yBin = detId.ring() * 3 - detId.roll() + 1
135  : yBin = (detId.ring() - 1) * 3 - detId.roll() + 1);
136  }
137 
138  int stripInRoll = myMe->getNbinsX();
139  totalStrips_ += (float)stripInRoll;
140  float FOccupancy = 0;
141  float BOccupancy = 0;
142 
143  float totEnt = myMe->getEntries();
144  for (int strip = 1; strip <= stripInRoll; strip++) {
145  float stripEntries = myMe->getBinContent(strip);
146  if (stripEntries > 0) {
147  totalActive_++;
148  }
149  if (strip <= stripInRoll / 2) {
150  FOccupancy += myMe->getBinContent(strip);
151  } else {
152  BOccupancy += myMe->getBinContent(strip);
153  }
154  }
155 
156  float asym = 0;
157  if (totEnt != 0)
158  asym = fabs((FOccupancy - BOccupancy) / totEnt);
159 
160  if (AsyMe)
161  AsyMe->setBinContent(xBin, yBin, asym);
162 }
Log< level::Info, true > LogVerbatim
T getUntrackedParameter(std::string const &, T const &) const
void clientOperation() override
MonitorElement * AsyMeWheel[5]
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
tuple yBin
Definition: cuy.py:892
MonitorElement * Active_Fraction
std::vector< RPCDetId > myDetIds_
tuple d
Definition: ztail.py:151
int roll() const
Definition: RPCDetId.h:92
virtual int getNbinsX() const
get # of bins in X-axis
virtual double getEntries() const
get # of entries
int ring() const
Definition: RPCDetId.h:59
MonitorElement * AsyMeDisk[10]
std::string globalFolder_
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
virtual double getBinContent(int binx) const
get content of bin (1-D)
void fillGlobalME(RPCDetId &, MonitorElement *)
void myBooker(DQMStore::IBooker &) override
virtual int segment()
Definition: RPCGeomServ.cc:361
int detId2RollNr(const RPCDetId &_id)
Definition: utils.h:31
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
MonitorElement * Active_Dead
static MonitorElement * bookBarrel(IBooker &booker, const int wheel, const std::string &prefix, const std::string &title, const bool useRollInfo)
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
Definition: RPCDetId.h:81
std::string prefixDir_
RPCOccupancyTest(const edm::ParameterSet &ps)
void getMonitorElements(std::vector< MonitorElement * > &, std::vector< RPCDetId > &, std::string &) override
void beginJob(std::string &) override
std::vector< MonitorElement * > myOccupancyMe_
T w() const
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
static MonitorElement * bookEndcap(IBooker &booker, const int disk, const std::string &prefix, const std::string &title, const bool useRollInfo)
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:53
int station() const
Definition: RPCDetId.h:78