CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EventTimeDistribution.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiStripTools
4 // Class: EventTimeDistribution
5 //
13 //
14 // Original Author: Andrea Venturi
15 // Created: Tue Jul 19 11:56:00 CEST 2009
16 //
17 //
18 
19 
20 // system include files
21 #include <memory>
22 
23 // user include files
24 #include <string>
25 
26 #include "TH1F.h"
27 #include "TH2F.h"
28 
31 
35 
37 
39 
42 
44 
47 
49 //
50 // class decleration
51 //
52 
54  public:
57 
58 
59  private:
60  virtual void beginJob() ;
61  virtual void beginRun(const edm::Run&, const edm::EventSetup&) ;
62  virtual void endRun(const edm::Run&, const edm::EventSetup&) ;
63  virtual void analyze(const edm::Event&, const edm::EventSetup&);
64  virtual void endJob() ;
65 
66  // ----------member data ---------------------------
67 
70  const std::string _phasepart;
71  const bool _wantdbxvsbxincycle;
72  const bool _wantdbxvsbx;
73  const bool _wantbxincyclevsbx;
75  unsigned int _nevents;
76  const double _binsize;
77 
79 
80  TH1F** _dbx;
81  TH1F** _bx;
82  TH1F** _bxincycle;
83  TH1F** _orbit;
85  TH2F** _dbxvsbx;
88 
89 };
90 
91 //
92 // constants, enums and typedefs
93 //
94 
95 //
96 // static data member definitions
97 //
98 
99 //
100 // constructors and destructor
101 //
103  _historyProduct(iConfig.getParameter<edm::InputTag>("historyProduct")),
104  _apvphasecoll(iConfig.getParameter<edm::InputTag>("apvPhaseCollection")),
105  _phasepart(iConfig.getUntrackedParameter<std::string>("phasePartition","None")),
106  _wantdbxvsbxincycle(iConfig.getUntrackedParameter<bool>("wantDBXvsBXincycle",false)),
107  _wantdbxvsbx(iConfig.getUntrackedParameter<bool>("wantDBXvsBX",false)),
108  _wantbxincyclevsbx(iConfig.getUntrackedParameter<bool>("wantBXincyclevsBX",false)),
109  _wantorbitvsbxincycle(iConfig.getUntrackedParameter<bool>("wantOrbitvsBXincycle",false)),
110  _nevents(0),
111  _binsize(iConfig.getUntrackedParameter<double>("minBinSizeInSec",1.)),
112  _rhm(),
113  _dbxvsbxincycle(0), _dbxvsbx(0), _bxincyclevsbx(0), _orbitvsbxincycle(0)
114 {
115  //now do what ever initialization is needed
116 
117  _dbx = _rhm.makeTH1F("dbx","dbx",1000,-0.5,999.5);
118  _bx = _rhm.makeTH1F("bx","BX number",3564,-0.5,3563.5);
119  _bxincycle = _rhm.makeTH1F("bxcycle","bxcycle",70,-0.5,69.5);
120  _orbit = _rhm.makeTH1F("orbit","orbit",3600,0,11223*_binsize*3600);
121  if(_wantdbxvsbxincycle) _dbxvsbxincycle = _rhm.makeTH2F("dbxvsbxincycle","dbxvsbxincycle",70,-0.5,69.5,1000,-0.5,999.5);
122  if(_wantdbxvsbx) _dbxvsbx = _rhm.makeTH2F("dbxvsbx","dbxvsbx",3564,-0.5,3563.5,1000,-0.5,999.5);
123  if(_wantbxincyclevsbx) _bxincyclevsbx = _rhm.makeTH2F("bxincyclevsbx","bxincyclevsbx",3564,-0.5,3563.5,70,-0.5,69.5);
124  if(_wantorbitvsbxincycle) _orbitvsbxincycle = _rhm.makeTH2F("orbitvsbxincycle","orbitvsbxincycle",70,-0.5,69.5,3600,0,11223*_binsize*3600);
125 
126  edm::LogInfo("UsedAPVCyclePhaseCollection") << " APVCyclePhaseCollection " << _apvphasecoll << " used";
127 
128 }
129 
130 
132 {
133 
134  // do anything here that needs to be done at desctruction time
135  // (e.g. close files, deallocate resources etc.)
136 
137 }
138 
139 
140 //
141 // member functions
142 //
143 
144 // ------------ method called to for each event ------------
145 void
147 {
148  using namespace edm;
149 
150  _nevents++;
151 
153  iEvent.getByLabel(_historyProduct,he);
154 
156  iEvent.getByLabel(_apvphasecoll,apvphase);
157 
158  long long tbx = he->absoluteBX();
159  if(apvphase.isValid() && !apvphase.failedToGet()) {
160  const int thephase = apvphase->getPhase(_phasepart);
161  if(thephase!=APVCyclePhaseCollection::invalid &&
164  tbx -= thephase;
165  }
166 
167 
168 
169  // improve the matchin between default and actual partitions
170 
171  (*_dbx)->Fill(he->deltaBX());
172  (*_bx)->Fill(iEvent.bunchCrossing());
173  (*_bxincycle)->Fill(tbx%70);
174  (*_orbit)->Fill(iEvent.orbitNumber());
175  if(_dbxvsbxincycle && *_dbxvsbxincycle) (*_dbxvsbxincycle)->Fill(tbx%70,he->deltaBX());
176  if(_dbxvsbx && *_dbxvsbx) (*_dbxvsbx)->Fill(iEvent.bunchCrossing(),he->deltaBX());
177  if(_bxincyclevsbx && *_bxincyclevsbx) (*_bxincyclevsbx)->Fill(iEvent.bunchCrossing(),tbx%70);
178  if(_orbitvsbxincycle && *_orbitvsbxincycle) (*_orbitvsbxincycle)->Fill(tbx%70,iEvent.orbitNumber());
179 
180 
181 }
182 
183 void
185 {
186 
187  _rhm.beginRun(iRun);
188  if(*_dbx) { (*_dbx)->GetXaxis()->SetTitle("#DeltaBX"); }
189 
190  if(*_bx) { (*_bx)->GetXaxis()->SetTitle("BX"); }
191 
192  if(*_bxincycle) { (*_bxincycle)->GetXaxis()->SetTitle("Event BX mod(70)"); }
193 
194  if(*_orbit) {
195  (*_orbit)->SetBit(TH1::kCanRebin);
196  (*_orbit)->GetXaxis()->SetTitle("time [Orb#]");
197  }
198 
200  (*_dbxvsbxincycle)->GetXaxis()->SetTitle("Event BX mod(70)"); (*_dbxvsbxincycle)->GetYaxis()->SetTitle("#DeltaBX");
201  }
202 
203  if(_dbxvsbx && *_dbxvsbx) { (*_dbxvsbx)->GetXaxis()->SetTitle("BX"); (*_dbxvsbx)->GetYaxis()->SetTitle("#DeltaBX"); }
204 
206  (*_bxincyclevsbx)->GetXaxis()->SetTitle("BX"); (*_bxincyclevsbx)->GetYaxis()->SetTitle("Event BX mod(70)");
207  }
208 
210  (*_orbitvsbxincycle)->SetBit(TH1::kCanRebin);
211  (*_orbitvsbxincycle)->GetXaxis()->SetTitle("Event BX mod(70)"); (*_orbitvsbxincycle)->GetYaxis()->SetTitle("time [Orb#]");
212  }
213 }
214 
215 void
217 {
218 }
219 
220 
221 // ------------ method called once each job just before starting event loop ------------
222 void
224 {
225 
226 }
227 
228 // ------------ method called once each job just after ending the event loop ------------
229 void
231 
232  edm::LogInfo("EndOfJob") << _nevents << " analyzed events";
233 
234 }
235 
236 
237 //define this as a plug-in
virtual void analyze(const edm::Event &, const edm::EventSetup &)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
const edm::InputTag _apvphasecoll
int bunchCrossing() const
Definition: EventBase.h:62
TH1F ** makeTH1F(const char *name, const char *title, const unsigned int nbinx, const double xmin, const double xmax)
int iEvent
Definition: GenABIO.cc:243
const edm::InputTag _historyProduct
int orbitNumber() const
Definition: EventBase.h:63
RunHistogramManager _rhm
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
const std::string _phasepart
EventTimeDistribution(const edm::ParameterSet &)
void beginRun(const edm::Run &iRun)
virtual void endRun(const edm::Run &, const edm::EventSetup &)
TH2F ** makeTH2F(const char *name, const char *title, const unsigned int nbinx, const double xmin, const double xmax, const unsigned int nbiny, const double ymin, const double ymax)
virtual void beginRun(const edm::Run &, const edm::EventSetup &)
Definition: Run.h:33