CMS 3D CMS Logo

BigEventsDebugger.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: BigEventsDebugger
4 // Class: BigEventsDebugger
5 //
13 //
14 // Original Author: Andrea Venturi
15 // Created: Sun Nov 16 16:04:44 CET 2008
16 // $Id: BigEventsDebugger.cc,v 1.2 2012/12/05 21:51:54 venturia Exp $
17 //
18 //
19 
20 // system include files
21 #include <memory>
22 
23 // user include files
26 
30 
32 
33 #include <vector>
34 #include "TH1F.h"
35 #include "TH2F.h"
36 #include "TProfile.h"
37 
39 
42 
48 
50 
51 //
52 // class decleration
53 //
54 
55 template <class T>
57 public:
58  explicit BigEventsDebugger(const edm::ParameterSet&);
59  ~BigEventsDebugger() override;
60 
61 private:
62  void analyze(const edm::Event&, const edm::EventSetup&) override;
63 
64  // ----------member data ---------------------------
65 
69  bool m_folded;
73 
74  std::vector<std::string> m_labels;
75  std::vector<TH1F*> m_hist;
76  std::vector<TProfile*> m_hprof;
77  std::vector<TH2F*> m_hist2d;
78 };
79 
80 //
81 // constants, enums and typedefs
82 //
83 
84 //
85 // static data member definitions
86 //
87 
88 //
89 // constructors and destructor
90 //
91 template <class T>
93  : m_digiprofiler(iConfig),
94  m_collectionToken(consumes<T>(iConfig.getParameter<edm::InputTag>("collection"))),
95  m_singleevents(iConfig.getParameter<bool>("singleEvents")),
96  m_folded(iConfig.getUntrackedParameter<bool>("foldedStrips", false)),
97  m_want1dHisto(iConfig.getUntrackedParameter<bool>("want1dHisto", true)),
98  m_wantProfile(iConfig.getUntrackedParameter<bool>("wantProfile", true)),
99  m_want2dHisto(iConfig.getUntrackedParameter<bool>("want2dHisto", false))
100 
101 {
102  //now do what ever initialization is needed
103 
104  std::vector<edm::ParameterSet> selconfigs = iConfig.getParameter<std::vector<edm::ParameterSet> >("selections");
105 
106  for (std::vector<edm::ParameterSet>::const_iterator selconfig = selconfigs.begin(); selconfig != selconfigs.end();
107  ++selconfig) {
108  m_labels.push_back(selconfig->getParameter<std::string>("label"));
109  }
110 
112 
113  if (!m_singleevents) {
114  char dirname[500];
115  sprintf(dirname, "Summary");
116  TFileDirectory subd = tfserv->mkdir(dirname);
117 
118  //book histos
119 
120  unsigned int nbins = 768;
121  if (m_folded)
122  nbins = 256;
123 
124  for (std::vector<std::string>::const_iterator label = m_labels.begin(); label != m_labels.end(); ++label) {
125  if (m_want1dHisto) {
126  std::string hname = *label + "hist";
127  std::string htitle = *label + " occupancy";
128  m_hist.push_back(subd.make<TH1F>(hname.c_str(), htitle.c_str(), nbins, -0.5, nbins - 0.5));
129  }
130  if (m_wantProfile) {
131  std::string hname = *label + "prof";
132  std::string htitle = *label + " charge profile";
133  m_hprof.push_back(subd.make<TProfile>(hname.c_str(), htitle.c_str(), nbins, -0.5, nbins - 0.5));
134  }
135  if (m_want2dHisto) {
136  std::string hname = *label + "hist2d";
137  std::string htitle = *label + " charge distribution";
138  m_hist2d.push_back(subd.make<TH2F>(hname.c_str(), htitle.c_str(), nbins, -0.5, nbins - 0.5, 257, -0.5, 256.5));
139  }
140  }
141  }
142 }
143 
144 template <class T>
146  // do anything here that needs to be done at desctruction time
147  // (e.g. close files, deallocate resources etc.)
148 }
149 
150 //
151 // member functions
152 //
153 
154 // ------------ method called to for each event ------------
155 template <class T>
157  using namespace edm;
158 
160 
161  // create a folder for each event
162 
163  if (m_singleevents) {
164  m_hist.clear();
165  m_hprof.clear();
166  m_hist2d.clear();
167 
168  char dirname[500];
169  sprintf(dirname, "event_%u_%llu", iEvent.run(), iEvent.id().event());
170  TFileDirectory subd = tfserv->mkdir(dirname);
171 
172  //book histos
173 
174  unsigned int nbins = 768;
175  if (m_folded)
176  nbins = 256;
177 
178  for (std::vector<std::string>::const_iterator label = m_labels.begin(); label != m_labels.end(); ++label) {
179  if (m_want1dHisto) {
180  std::string hname = *label + "hist";
181  std::string htitle = *label + " occupancy";
182  m_hist.push_back(subd.make<TH1F>(hname.c_str(), htitle.c_str(), nbins, -0.5, nbins - 0.5));
183  }
184  if (m_wantProfile) {
185  std::string hname = *label + "prof";
186  std::string htitle = *label + " charge profile";
187  m_hprof.push_back(subd.make<TProfile>(hname.c_str(), htitle.c_str(), nbins, -0.5, nbins - 0.5));
188  }
189  if (m_want2dHisto) {
190  std::string hname = *label + "hist2d";
191  std::string htitle = *label + " charge distribution";
192  m_hist2d.push_back(subd.make<TH2F>(hname.c_str(), htitle.c_str(), nbins, -0.5, nbins - 0.5, 257, -0.5, 256.5));
193  }
194  }
195  }
196 
197  //analyze event
198 
199  Handle<T> digis;
200  iEvent.getByToken(m_collectionToken, digis);
201  m_digiprofiler.fill(digis, m_hist, m_hprof, m_hist2d);
202 }
203 
207 
208 //define this as a plug-in
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:40
std::vector< TH1F * > m_hist
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
std::vector< TH2F * > m_hist2d
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
~BigEventsDebugger() override
BigEventsDebugger< edm::DetSetVector< SiStripDigi > > DigiBigEventsDebugger
char const * label
int iEvent
Definition: GenABIO.cc:224
void analyze(const edm::Event &, const edm::EventSetup &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
DigiCollectionProfiler< T > m_digiprofiler
std::vector< TProfile * > m_hprof
RunNumber_t run() const
Definition: Event.h:107
T * make(const Args &...args) const
make new ROOT object
BigEventsDebugger(const edm::ParameterSet &)
edm::EDGetTokenT< T > m_collectionToken
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
edm::EventID id() const
Definition: EventBase.h:59
HLT enums.
std::vector< std::string > m_labels
long double T
BigEventsDebugger< edm::DetSetVector< SiStripRawDigi > > RawDigiBigEventsDebugger
BigEventsDebugger< edmNew::DetSetVector< SiStripCluster > > ClusterBigEventsDebugger