CMS 3D CMS Logo

CastorRecHitMonitor.cc
Go to the documentation of this file.
1 //***************************************************
2 // CastorRecHitMonitor
3 // Author: Dmytro Volyanskyy
4 // Date : 23.09.2008 (first version)
5 // last modification: Pedro Cipriano 09.07.2013
6 //----------------------------------------------
7 // critical revision 26.06.2014 (Vladimir Popov)
8 //***************************************************
9 
12 #include <string>
13 
14 using namespace std;
15 
17  fVerbosity = ps.getUntrackedParameter<int>("debug", 0);
18  if (fVerbosity > 0)
19  std::cout << "CastorRecHitMonitor Constructor: " << this << std::endl;
20  subsystemname = ps.getUntrackedParameter<std::string>("subSystemFolder", "Castor");
21  ievt_ = 0;
22 }
23 
25 
27  char s[60];
28  if (fVerbosity > 0)
29  std::cout << "CastorRecHitMonitor::bookHistograms" << std::endl;
30  ibooker.setCurrentFolder(subsystemname + "/CastorRecHitMonitor");
31 
32  const int N_Sec = 16;
33  const int nySec = 20;
34  float ySec[nySec + 1];
35  float xSec[N_Sec + 1];
36  double E0sec = 1. / 1024.;
37  ySec[0] = 0.;
38  ySec[1] = E0sec;
39  double lnBsec = log(2.);
40  for (int j = 1; j < nySec; j++)
41  ySec[j + 1] = E0sec * exp(j * lnBsec);
42  for (int i = 0; i <= N_Sec; i++)
43  xSec[i] = i;
44 
45  sprintf(s, "Castor Energy by Sectors #Phi");
46  h2RHvsSec = ibooker.book2D(s, s, N_Sec, xSec, nySec, ySec);
47  h2RHvsSec->setAxisTitle("sector #Phi");
48  h2RHvsSec->setAxisTitle("RecHit / GeV", /* axis */ 2);
49  h2RHvsSec->setOption("colz");
50 
51  const int nxCh = 224;
52  const int nyE = 18;
53  float xCh[nxCh + 1];
54  float yErh[nyE + 1];
55  for (int i = 0; i <= nxCh; i++)
56  xCh[i] = i;
57  double E0 = 1. / 1024.;
58  double lnA = log(2.);
59  yErh[0] = 0.;
60  yErh[1] = E0;
61  for (int j = 1; j < nyE; j++)
62  yErh[j + 1] = E0 * exp(j * lnA);
63 
64  string st = "Castor Cell Energy Map (cell-wise)";
65  h2RHchan = ibooker.book2D(st, st + ";moduleZ*16 + sector #Phi;RecHit / GeV", nxCh, xCh, nyE, yErh);
66  h2RHchan->setOption("colz");
67 
68  sprintf(s, "Castor Cell Energy");
69  hallchan = ibooker.book1D(s, s, nyE, yErh);
70  hallchan->setAxisTitle("GeV");
71 
72  st = "Castor cell avr Energy per event Map Z-Phi";
73  h2RHoccmap = ibooker.bookProfile2D(st, st + ";module Z;sector Phi", 14, 0, 14, 16, 0, 16, 0., 1.e10, "");
74  h2RHoccmap->getTProfile2D()->SetOption("colz");
75 
76  sprintf(s, "CastorRecHitEntriesMap");
77  h2RHentriesMap = ibooker.book2D(s, s, 14, 0, 14, 16, 0, 16);
78  h2RHentriesMap->setAxisTitle("moduleZ");
79  h2RHentriesMap->setAxisTitle("sector #Phi", /* axis */ 2);
80  h2RHentriesMap->setOption("colz");
81 
82  sprintf(s, "CastorRecHitTime");
83  hRHtime = ibooker.book1D(s, s, 301, -101., 200.);
84 
85  sprintf(s, "CASTORTowerDepth");
86  hTowerDepth = ibooker.book1D(s, s, 130, -15500., -14200.);
87  hTowerDepth->setAxisTitle("mm");
88 
89  sprintf(s, "CASTORTowerMultiplicity");
90  hTowerMultipl = ibooker.book1D(s, s, 20, 0., 20.);
91 
92  const int NEtow = 20;
93  float EhadTow[NEtow + 1];
94  float EMTow[NEtow + 1];
95  float ETower[NEtow + 2];
96  double E0tow = 1. / 1024.;
97  EMTow[0] = 0.;
98  EMTow[1] = E0tow;
99  EhadTow[0] = 0.;
100  EhadTow[1] = E0tow;
101  ETower[0] = 0.;
102  ETower[1] = E0tow;
103  double lnBtow = log(2.);
104  for (int j = 1; j < NEtow; j++)
105  EMTow[j + 1] = E0tow * exp(j * lnBtow);
106  for (int j = 1; j < NEtow; j++)
107  EhadTow[j + 1] = E0tow * exp(j * lnBtow);
108  for (int j = 1; j <= NEtow; j++)
109  ETower[j + 1] = E0tow * exp(j * lnBtow);
110 
111  sprintf(s, "CASTORTowerEMvsEhad");
112  h2TowerEMhad = ibooker.book2D(s, s, NEtow, EhadTow, NEtow, EMTow);
113  h2TowerEMhad->setAxisTitle("Ehad / GeV");
114  h2TowerEMhad->setAxisTitle("EM / GeV", /* axis */ 2);
115  h2TowerEMhad->setOption("colz");
116 
117  sprintf(s, "CASTORTowerTotalEnergy");
118  hTowerE = ibooker.book1D(s, s, NEtow + 1, ETower);
119  hTowerE->setAxisTitle("GeV");
120 
121  sprintf(s, "CASTORJetsMultiplicity");
122  hJetsMultipl = ibooker.book1D(s, s, 16, 0., 16.);
123 
124  sprintf(s, "CASTORJetEnergy");
125  hJetEnergy = ibooker.book1D(s, s, 5000, 0., 500.);
126 
127  sprintf(s, "CASTORJetEta");
128  hJetEta = ibooker.book1D(s, s, 126, -6.3, 6.3);
129 
130  sprintf(s, "CASTORJetPhi");
131  hJetPhi = ibooker.book1D(s, s, 63, -3.15, 3.15);
132 
133  if (fVerbosity > 0)
134  std::cout << "CastorRecHitMonitor::bookHistograms(end)" << std::endl;
135  return;
136 }
137 
139  if (castorTowers.empty())
140  return;
141  int nTowers = 0;
142 
143  for (reco::CastorTowerCollection::const_iterator iTower = castorTowers.begin(); iTower != castorTowers.end();
144  iTower++) {
145  hTowerE->Fill(iTower->energy() * 0.001);
146  h2TowerEMhad->Fill(iTower->hadEnergy() * 0.001, iTower->emEnergy() * 0.001);
147  hTowerDepth->Fill(iTower->depth());
148  nTowers++;
149  }
150  hTowerMultipl->Fill(nTowers);
151 }
152 
154  if (fVerbosity > 0)
155  std::cout << "CastorRecHitMonitor::processEvent (begin)" << std::endl;
156  ievt_++;
157  for (int z = 0; z < 14; z++)
158  for (int phi = 0; phi < 16; phi++)
159  energyInEachChannel[z][phi] = 0.;
160 
162  // if (showTiming) { cpu_timer.reset(); cpu_timer.start(); }
163 
164  if (castorHits.empty())
165  return;
166 
167  for (CASTORiter = castorHits.begin(); CASTORiter != castorHits.end(); ++CASTORiter) {
168  float energy = CASTORiter->energy();
169  float time = CASTORiter->time();
170  float time2 = time;
171  if (time < -100.)
172  time2 = -100.;
173  hRHtime->Fill(time2);
174 
175  HcalCastorDetId id(CASTORiter->detid().rawId());
176  // float zside = id.zside();
177  int module = (int)id.module(); //-- get module
178  int sector = (int)id.sector(); //-- get sector
179 
180  energyInEachChannel[module - 1][sector - 1] += energy;
181 
182  h2RHentriesMap->Fill(module - 1, sector - 1);
183  } // end for(CASTORiter=castorHits.begin(); CASTORiter!= ...
184 
185  for (int phi = 0; phi < 16; phi++) {
186  double es = 0.;
187  for (int z = 0; z < 14; z++) {
188  float rh = energyInEachChannel[z][phi] * 0.001;
189  int ind = z * 16 + phi + 1;
190  // int ind = phi*14 + z +1;
191  h2RHchan->Fill(ind, rh);
192  hallchan->Fill(rh);
193  if (rh < 0.)
194  continue;
195  h2RHoccmap->Fill(z, phi, rh);
196  es += rh;
197  }
198  h2RHvsSec->Fill(phi, es);
199  } // end for(int phi=0;
200 
201  if (fVerbosity > 0)
202  std::cout << "CastorRecHitMonitor::processEvent (end)" << std::endl;
203  return;
204 }
205 
207  int nJets = 0;
208  for (reco::BasicJetCollection::const_iterator ibegin = Jets.begin(), iend = Jets.end(), ijet = ibegin; ijet != iend;
209  ++ijet) {
210  nJets++;
211  float energy = ijet->energy() * 0.001;
212  hJetEnergy->Fill(energy);
213  hJetEta->Fill(ijet->eta());
214  hJetPhi->Fill(ijet->phi());
215  }
216  hJetsMultipl->Fill(nJets);
217 }
MonitorElement * bookProfile2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, double lowZ, double highZ, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:476
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
virtual void setOption(const char *option)
std::vector< T >::const_iterator const_iterator
T getUntrackedParameter(std::string const &, T const &) const
void processEventJets(const reco::BasicJetCollection &Jets)
void bookHistograms(DQMStore::IBooker &, edm::Run const &)
CastorRecHitMonitor(const edm::ParameterSet &ps)
const_iterator begin() const
const_iterator end() const
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:212
void processEventTowers(const reco::CastorTowerCollection &castorTowers)
virtual TProfile2D * getTProfile2D() const
void processEvent(const CastorRecHitCollection &castorHits)
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
std::vector< CastorTower > CastorTowerCollection
collection of CastorTower objects
Definition: CastorTower.h:137
Definition: Run.h:45
std::vector< BasicJet > BasicJetCollection
collection of BasicJet objects
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)