CMS 3D CMS Logo

RPCEfficiencySecond.cc
Go to the documentation of this file.
1 /***************************************
2 Original Author:Camilo Carrillo
3 ****************************************/
4 #include <sstream>
5 
16 
18 
20 
21  folderPath = iConfig.getUntrackedParameter<std::string>("folderPath","RPC/RPCEfficiency/");
22  numberOfDisks_ = iConfig.getUntrackedParameter<int>("NumberOfEndcapDisks", 4);
23  innermostRings_ = iConfig.getUntrackedParameter<int>("NumberOfInnermostEndcapRings", 2);
24 
25  init_ = false;
26 
27 }
28 
30 
32 
34 
35  if(!init_){
36 
37  LogDebug("rpcefficiencysecond")<<"Getting the RPC Geometry";
38 
39  iSetup.get<MuonGeometryRecord>().get(rpcGeo_);
40  init_= true;
41 
42  }
43 }
44 
45 
47 
48 
49  rpcdqm::utils rpcUtils;
50  //Barrel
51  std::stringstream folderName;
52  std::stringstream MeName; std::stringstream MeTitle;
53  for (int w =-2; w<=2; w++){
54  folderName.str("");
55  folderName<<folderPath<<"Wheel_"<<w;
56  ibooker.setCurrentFolder(folderName.str());
57  MeName.str("");
58  MeName<<"EffDistroWheel_"<<w;
59  MeTitle.str("");
60  MeTitle<<"Efficiency Distribution for Wheel "<<w;
61  EffDistroW[w+2]=ibooker.book1D(MeName.str(),MeTitle.str(),20,0.5,100.5);
62  MeName.str("");
63  MeName<<"GlobEfficiencyWheel_"<<w;
64  MeTitle.str("");
65  MeTitle<<"Efficiency Wheel "<<w;
66  EffGlobW[w+2]=ibooker.book1D(MeName.str(),MeTitle.str(),206,0.5,206.5);
68  MeName.str("");
69  MeName<<"Efficiency_Roll_vs_Sector_Wheel_"<<w;
70  WheelSummary[w+2] = ibooker.book2D(MeName.str(),MeName.str(),12, 0.5,12.5, 21, 0.5, 21.5);
71  rpcUtils.labelXAxisSector( WheelSummary[w+2] );
72  rpcUtils.labelYAxisRoll( WheelSummary[w+2], 0, w, true);
73  ibooker.setCurrentFolder(folderPath+"Azimutal/");
74  MeName.str("");
75  MeName<<"AzimutalDistroW"<<w;
76  MeTitle.str("");
77  MeTitle<<"Efficiency per Sector Wheel "<<w;
78  sectorEffW[w+2]= ibooker.book1D(MeName.str(),MeTitle.str(),12,0.5,12.5);
79  MeName.str("");
80  MeName<<"AzimutalDistroW"<<w<<"Ex";
81  MeTitle.str("");
82  MeTitle<<"Expected per Sector Wheel "<<w;
83  ExsectorEffW[w+2]= ibooker.book1D(MeName.str(),MeTitle.str(),12,0.5,12.5);
84  MeName.str("");
85  MeName<<"AzimutalDistroW"<<w<<"Oc";
86  MeTitle.str("");
87  MeTitle<<"Occupancy per Sector Wheel "<<w;
88  OcsectorEffW[w+2]= ibooker.book1D(MeName.str(),MeTitle.str(),12,0.5,12.5);
89  ibooker.setCurrentFolder(folderPath+"BarrelPerLayer/");
90  MeName.str("");
91  MeName<<"ExpLayerW"<<w;
92  MeTitle.str("");
93  MeTitle<<"Expected Wheel "<<w;
94  ExpLayerW[w+2]= ibooker.book1D(MeName.str(),MeTitle.str(),6,0.5,6.5);
95  MeName.str("");
96  MeName<<"ObsLayerW"<<w;
97  MeTitle.str("");
98  MeTitle<<"Observed Wheel "<<w;
99  ObsLayerW[w+2]= ibooker.book1D(MeName.str(),MeTitle.str(),6,0.5,6.5);
100  }
101  //EndCap
102  int index = 0;
103  for (int d = (-1 *numberOfDisks_); d<=numberOfDisks_; d++){
104  if (d==0) {continue;}
105  folderName.str("");
106  folderName<<folderPath<<"Disk_"<<d;
107  ibooker.setCurrentFolder(folderName.str());
108  MeName.str("");
109  MeName<<"EffDistroDisk_"<<d;
110  MeTitle.str("");
111  MeTitle<<"Efficiency Distribution Disk "<<d;
112  EffDistroD[index]=ibooker.book1D(MeName.str(),MeTitle.str(),20,0.5,100.5);
113  MeName.str("");
114  MeName<<"GlobEfficiencyDisk_"<<d;
115  MeTitle.str("");
116  MeTitle<<"Efficiency Disk "<<d;
117  EffGlobD[index] = ibooker.book1D(MeName.str(),MeTitle.str(),218,0.5,218.5);
118  ibooker.setCurrentFolder(folderPath);
119  MeName.str("");
120  MeName<<"Efficiency_Roll_vs_Segment_Disk_"<<d;
121  DiskSummary[index] = ibooker.book2D(MeName.str(),MeName.str(),36,0.5,36.5,6,0.5,6.5);
122  rpcUtils.labelXAxisSegment(DiskSummary[index]);
123  rpcUtils.labelYAxisRing(DiskSummary[index], innermostRings_ , true);
124  ibooker.setCurrentFolder(folderPath+"Azimutal/");
125  MeName.str("");
126  MeName<<"GregDistroR2D"<<d;
127  MeTitle.str("");
128  MeTitle<<"Efficiency for Station "<<d<<" Ring 2";
129  GregR2D[index]= ibooker.book1D(MeName.str(),MeTitle.str(),36,0.5,36.5);
130  MeName.str("");
131  MeName<<"GregDistroR3D"<<d;
132  MeTitle.str("");
133  MeTitle<<"Efficiency for Station "<<d<<" Ring 3";
134  GregR3D[index]= ibooker.book1D(MeName.str(),MeTitle.str(),36,0.5,36.5);
135  MeName.str("");
136  MeName<<"OcGregDistroR2D"<<d;
137  MeTitle.str("");
138  MeTitle<<"Occupancy Distribution for Station "<<d<<" Ring 2";
139  OcGregR2D[index]= ibooker.book1D(MeName.str(),MeTitle.str(),36,0.5,36.5);
140  MeName.str("");
141  MeName<<"OcGregDistroR3D"<<d;
142  MeTitle.str("");
143  MeTitle<<"Occupancy Distribution for Station "<<d<<" Ring 3";
144  OcGregR3D[index]= ibooker.book1D(MeName.str(),MeTitle.str(),36,0.5,36.5);
145  MeName.str("");
146  MeName<<"ExGregDistroR2D"<<d;
147  MeTitle.str("");
148  MeTitle<<"Expected Distribution for Station "<<d<<" Ring 2";
149  ExGregR2D[index]= ibooker.book1D(MeName.str(),MeTitle.str(),36,0.5,36.5);
150  MeName.str("");
151  MeName<<"ExGregDistroR3D"<<d;
152  MeTitle.str("");
153  MeTitle<<"Expected Distribution for Station "<<d<<" Ring 3";
154  ExGregR3D[index]= ibooker.book1D(MeName.str(),MeTitle.str(),36,0.5,36.5);
155  index++;
156  }
157 
158 
159 
160  LogDebug("rpcefficiencysecond")<<"Getting the RPC Geometry";
161 
162 
163  //Setting Labels in Summary Label.
164  std::stringstream binLabel;
165  for (int w = -2; w<=2 ;w++){
166  for(int x = 1;x<=12;x++){
167  for(int y = 1;y<=21;y++){
168  WheelSummary[w+2]->setBinContent(x,y,-1);
169  }
170  }
171  }
172  for (int d = 0 ; d<(numberOfDisks_*2); d++){
173  for(int x = 1;x<=36;x++){
174  for(int y = 1;y<=6;y++){
175  DiskSummary[d]->setBinContent(x,y,-1);
176  }
177  }
178  }
179  binLabel.str("");
180  int indexWheel[5];
181  for(int j=0;j<5;j++){
182  indexWheel[j]=0;
183  }
184  int indexDisk[10];
185  for(int j=0;j<10;j++){
186  indexDisk[j]=0;
187  }
188  for(TrackingGeometry::DetContainer::const_iterator it=rpcGeo_->dets().begin(); it!=rpcGeo_->dets().end();it++){
189  if(dynamic_cast< const RPCChamber* >( *it ) != nullptr ){
190  const RPCChamber* ch = dynamic_cast< const RPCChamber* >( *it );
191  std::vector< const RPCRoll*> roles = (ch->rolls());
192  for(std::vector<const RPCRoll*>::const_iterator r = roles.begin();r != roles.end(); ++r){
193  RPCDetId rpcId = (*r)->id();
194  RPCGeomServ rpcsrv(rpcId);
195  // std::string nameRoll = rpcsrv.name();
196  std::string camera = rpcsrv.name();
197  //Breaking down the geometry
198  int region = rpcId.region();
199  int wheel = rpcId.ring(); int ring = rpcId.ring();
200  int sector = rpcId.sector();
201  int station = rpcId.station();
202  int geolayer = rpcId.layer();
203 
204  RPCBookFolderStructure * folderStr = new RPCBookFolderStructure();
205  std::string folder = folderPath + "MuonSegEff/" + folderStr->folderStructure(rpcId);
206 
207 
208  if(region==0){//Barrel
209  std::stringstream meIdRPC, meIdDT; //, bxDistroId;
210 
211 
212  meIdRPC<<folder<<"/RPCDataOccupancyFromDT_"<<rpcId.rawId();
213  meIdDT<<folder<<"/ExpectedOccupancyFromDT_"<<rpcId.rawId();
214  histoRPC = igetter.get(meIdRPC.str());
215  histoDT = igetter.get(meIdDT.str());
216  int NumberWithOutPrediction=0;
217  double p = 0.;
218  double o = 0.;
219  double ef = 0.;
220  double er = 0.;
221  double buffef = 0.;
222  double buffer = 0.;
223  double sumbuffef = 0.;
224  double sumbuffer = 0.;
225  double averageeff = 0.;
226  int NumberStripsPointed = 0;
227  if(histoRPC && histoDT){
228  for(int i=1;i<=int((*r)->nstrips());++i){
229  if(histoDT->getBinContent(i)!=0){
230  LogDebug("rpcefficiencysecond")<<"Inside the If";
231  buffef = double(histoRPC->getBinContent(i))/double(histoDT->getBinContent(i));
232  buffer = sqrt(buffef*(1.-buffef)/double(histoDT->getBinContent(i)));
233  sumbuffef=sumbuffef+buffef;
234  sumbuffer = sumbuffer + buffer*buffer;
235  NumberStripsPointed++;
236  }else{
237  NumberWithOutPrediction++;
238  }
239  LogDebug("rpcefficiencysecond")<<"Strip="<<i<<" RPC="<<histoRPC->getBinContent(i)<<" DT="<<histoDT->getBinContent(i)<<" buffef="<<buffef<<" sumbuffef="<<sumbuffef<<" NumberStripsPointed="<<NumberStripsPointed<<" NumberWithOutPrediction"<<NumberWithOutPrediction;
240  }
241  p=histoDT->getTH1F()->Integral();
242  o=histoRPC->getTH1F()->Integral();
243  if(NumberStripsPointed!=0){
244  averageeff = (sumbuffef/double(NumberStripsPointed))*100.;
245  //averageerr = sqrt(sumbuffer/double(NumberStripsPointed))*100.;
246  }
247  }
248  // int Ring = rpcId.ring();
249  if(p!=0){
250  ef = double(o)/double(p);
251  er = sqrt(ef*(1.-ef)/double(p));
252  }
253  ef=ef*100;
254  er=er*100;
255  //Filling azimutal Wheel Histograms
256  int layer = 0;
257  if(station==1&&geolayer==1) layer = 1;
258  else if(station==1&&geolayer==2) layer = 2;
259  else if(station==2&&geolayer==1) layer = 3;
260  else if(station==2&&geolayer==2) layer = 4;
261  else if(station==3) layer = 5;
262  else if(station==4) layer = 6;
263  ExsectorEffW[wheel+2]->Fill(sector,p); OcsectorEffW[wheel+2]->Fill(sector,o);
264  ExpLayerW[wheel+2]->Fill(layer, p); ObsLayerW[wheel+2]->Fill(layer, o);
265  LogDebug("rpcefficiencysecond")<<"Pigi "<<camera<<" "<<rpcsrv.shortname()<<" "<<(*r)->id();
266  if(p > 100){//We need at least 100 predictions to fill the summary plot
267  int xBin,yBin;
268  xBin= (*r)->id().sector();
269  rpcdqm::utils rollNumber;
270  yBin = rollNumber.detId2RollNr((*r)->id());
271  WheelSummary[wheel+2]->setBinContent(xBin,yBin,averageeff);
272  }
273  EffDistroW[wheel+2]->Fill(averageeff);
274  indexWheel[wheel+2]++;
275  EffGlobW[wheel+2]->setBinContent(indexWheel[wheel+2],ef);
276  EffGlobW[wheel+2]->setBinError(indexWheel[wheel+2],er);
277  EffGlobW[wheel+2]->setBinLabel(indexWheel[wheel+2],camera,1);
278  }else{//EndCap
279  std::stringstream meIdRPC,meIdCSC; //, bxDistroId;
280  std::string meIdPRO;
281  meIdRPC<<folder<<"/RPCDataOccupancyFromCSC_"<<rpcId.rawId();
282  meIdCSC<<folder<<"/ExpectedOccupancyFromCSC_"<<rpcId.rawId();
283  histoRPC= igetter.get(meIdRPC.str());
284  histoCSC= igetter.get(meIdCSC.str());
285 
286  int NumberWithOutPrediction=0;
287  double p = 0;
288  double o = 0;
289  double ef =0;
290  double er =0;
291  double buffef = 0;
292  double buffer = 0;
293  double sumbuffef = 0;
294  double sumbuffer = 0;
295  double averageeff = 0;
296  int NumberStripsPointed = 0;
297  if(histoRPC && histoCSC) {
298  LogDebug("rpcefficiencysecond")<<rpcsrv.name();
299  for(int i=1;i<=int((*r)->nstrips());++i){
300  if(histoCSC->getBinContent(i)!=0){
301  LogDebug("rpcefficiencysecond")<<"Inside the If";
302  buffef = double(histoRPC->getBinContent(i))/double(histoCSC->getBinContent(i));
303  buffer = sqrt(buffef*(1.-buffef)/double(histoCSC->getBinContent(i)));
304  sumbuffef=sumbuffef+buffef;
305  sumbuffer = sumbuffer + buffer*buffer;
306  NumberStripsPointed++;
307  }else{
308  NumberWithOutPrediction++;
309  }
310  LogDebug("rpcefficiencysecond")<<"Strip="<<i<<" RPC="<<histoRPC->getBinContent(i)<<" CSC="<<histoCSC->getBinContent(i)<<" buffef="<<buffef<<" buffer="<<buffer<<" sumbuffef="<<sumbuffef<<" sumbuffer="<<sumbuffer<<" NumberStripsPointed="<<NumberStripsPointed<<" NumberWithOutPrediction"<<NumberWithOutPrediction;
311  }
312  p=histoCSC->getTH1F()->Integral();
313  o=histoRPC->getTH1F()->Integral();
314  if(NumberStripsPointed!=0){
315  averageeff = (sumbuffef/double(NumberStripsPointed))*100.;
316  }
317  }
318  int Disk = station*region;
319  if(Disk > numberOfDisks_ || Disk<-numberOfDisks_){continue;} //remove strange disk numbers!!
320  int dIndex = -1;
321  if(region == -1){
322  dIndex = Disk+numberOfDisks_;
323  }else if(region == 1){
324  dIndex = Disk+numberOfDisks_-1;
325  }
326  if( dIndex<0 || dIndex>= numberOfDisks_*2){continue;} //extra check on disk numering
327  if(p!=0){
328  ef = double(o)/double(p);
329  er = sqrt(ef*(1.-ef)/double(p));
330  }
331  ef=ef*100;
332  er=er*100;
333  if(ring==2){
334  if (ExGregR2D[dIndex] && OcGregR2D[dIndex] ){
335  ExGregR2D[dIndex]->Fill(rpcsrv.segment(),p);
336  OcGregR2D[dIndex]->Fill(rpcsrv.segment(),o);
337  }
338  } else if(ring==3){
339  ExGregR3D[dIndex]->Fill(rpcsrv.segment(),p);
340  OcGregR3D[dIndex]->Fill(rpcsrv.segment(),o);
341  }
342  if(p > 100){ //We need at least 100 predictions to fill the summary plot
343  RPCGeomServ RPCServ((*r)->id());
344  int xBin = RPCServ.segment();
345  int yBin= (ring-1)*3-(*r)->id().roll()+1;
346  DiskSummary[dIndex]->setBinContent(xBin, yBin, averageeff);
347  }
348  if ( EffDistroD[dIndex]){EffDistroD[dIndex]->Fill(averageeff);}
349  indexDisk[dIndex]++;
350  if ( EffGlobD[dIndex]){
351  EffGlobD[dIndex]->setBinContent(indexDisk[dIndex],ef);
352  EffGlobD[dIndex]->setBinError(indexDisk[dIndex],er);
353  EffGlobD[dIndex]->setBinLabel(indexDisk[dIndex],camera,1);
354  }
355  }
356  delete folderStr;
357  }
358  }
359 
360 
361  }
362  double eff,N,err;
363  int k;
364  for (int d = 0; d<(numberOfDisks_*2); d++){
365  for(k=1;k<=36;k++){
366  err=0; eff=0; N=ExGregR2D[d]->getBinContent(k);
367  if(N!=0.){ eff = OcGregR2D[d]->getBinContent(k)/N; err=sqrt(eff*(1-eff)/N);}
368  GregR2D[d]->setBinContent(k,eff); GregR2D[d]->setBinError(k,err);
369  err=0; eff=0; N=ExGregR3D[d]->getBinContent(k);
370  if(N!=0.){ eff = OcGregR3D[d]->getBinContent(k)/N; err=sqrt(eff*(1-eff)/N);}
371  GregR3D[d]->setBinContent(k,eff); GregR3D[d]->setBinError(k,err);
372  }
373  }
374  for (int w =-2; w<=2; w++){
375  for(k=1;k<=12;k++){
376  err=0; eff=0; N=ExsectorEffW[w+2]->getBinContent(k);
377  if(N!=0.){ eff = OcsectorEffW[w+2]->getBinContent(k)/N;err=sqrt(eff*(1-eff)/N);}
378  sectorEffW[w+2]->setBinContent(k,eff); sectorEffW[w+2]->setBinError(k,err);
379  }
380  }
381  //Ranges for Both
382  //Barrel
383  for (int w=-2; w<=2; w++){
384  EffGlobW[w+2]->setAxisRange(-4.,100.,2);
385  EffGlobW[w+2]->setAxisTitle("%",2);
386  }
387  for (int d=0; d<(numberOfDisks_*2); d++){
388  EffGlobD[d]->setAxisRange(-4.,100.,2);
389  EffGlobD[d]->setAxisTitle("%",2);
390  }
391 
392 
393 }
394 
#define LogDebug(id)
MonitorElement * EffGlobW[5]
T getUntrackedParameter(std::string const &, T const &) const
void setBinContent(int binx, double content)
set content of bin (1-D)
const double w
Definition: UKUtility.cc:23
RPCEfficiencySecond(const edm::ParameterSet &)
MonitorElement * histoCSC
void setAxisRange(double xmin, double xmax, int axis=1)
set x-, y- or z-axis range (axis=1, 2, 3 respectively)
TH1F * getTH1F() const
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &) override
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:302
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:47
MonitorElement * OcGregR3D[10]
MonitorElement * histoDT
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)
MonitorElement * OcsectorEffW[5]
void labelXAxisSegment(MonitorElement *myMe)
Definition: utils.h:264
void labelYAxisRoll(MonitorElement *myMe, int region, int ring, bool useRollInfo)
Definition: utils.h:283
MonitorElement * sectorEffW[5]
#define nullptr
void Fill(long long x)
edm::ESHandle< RPCGeometry > rpcGeo_
Definition: BoundDisk.h:19
virtual std::string name()
Definition: RPCGeomServ.cc:20
void labelYAxisRing(MonitorElement *myMe, int numberOfRings, bool useRollInfo)
Definition: utils.h:311
MonitorElement * ObsLayerW[5]
int ring() const
Definition: RPCDetId.h:72
T sqrt(T t)
Definition: SSEVec.h:18
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
MonitorElement * EffGlobD[10]
const std::vector< const RPCRoll * > & rolls() const
Return the Rolls.
Definition: RPCChamber.cc:68
MonitorElement * EffDistroD[10]
MonitorElement * ExpLayerW[5]
void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
MonitorElement * OcGregR2D[10]
virtual std::string shortname()
Definition: RPCGeomServ.cc:208
void labelXAxisSector(MonitorElement *myMe)
Definition: utils.h:249
int k[5][pyjets_maxn]
int layer() const
Definition: RPCDetId.h:108
virtual int segment()
Definition: RPCGeomServ.cc:469
int detId2RollNr(const RPCDetId &_id)
Definition: utils.h:31
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
#define N
Definition: blowfish.cc:9
std::string folderStructure(RPCDetId detId)
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:136
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
Definition: RPCGeometry.cc:33
MonitorElement * WheelSummary[5]
void beginJob() override
MonitorElement * ExGregR2D[10]
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
Definition: RPCDetId.h:102
MonitorElement * DiskSummary[10]
double getBinContent(int binx) const
get content of bin (1-D)
T get() const
Definition: EventSetup.h:63
MonitorElement * ExsectorEffW[5]
MonitorElement * GregR2D[10]
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
MonitorElement * ExGregR3D[10]
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * histoRPC
MonitorElement * GregR3D[10]
yBin
Definition: cuy.py:892
MonitorElement * EffDistroW[5]
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:63
int station() const
Definition: RPCDetId.h:96