CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
EcalPulseShapeGrapher Class Reference

#include <EcalPulseShapeGrapher.h>

Inheritance diagram for EcalPulseShapeGrapher:
edm::EDAnalyzer edm::EDConsumerBase

Public Member Functions

 EcalPulseShapeGrapher (const edm::ParameterSet &)
 
 ~EcalPulseShapeGrapher () override
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void endJob () override
 
std::string intToString (int)
 

Private Attributes

int abscissa [10]
 
int ampCut_
 
std::map< int, TH1F * > ampHistMap_
 
std::map< int, TH1F * > cutAmpHistMap_
 
edm::InputTag EBDigis_
 
edm::InputTag EBUncalibratedRecHitCollection_
 
edm::InputTag EEDigis_
 
edm::InputTag EEUncalibratedRecHitCollection_
 
EcalFedMapfedMap_
 
TFile * file_
 
std::map< int, TH1F * > firstSampleHistMap_
 
std::vector< int > listChannels_
 
int ordinate [10]
 
std::map< int, TH2F * > pulseShapeHistMap_
 
std::map< int, TH2F * > rawPulseShapeHistMap_
 
std::string rootFilename_
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Description: <one line="" class="" summary>="">

Implementation: <Notes on="" implementation>="">

Definition at line 46 of file EcalPulseShapeGrapher.h.

Constructor & Destructor Documentation

EcalPulseShapeGrapher::EcalPulseShapeGrapher ( const edm::ParameterSet iConfig)
explicit

Definition at line 32 of file EcalPulseShapeGrapher.cc.

References abscissa, ampHistMap_, cutAmpHistMap_, fedMap_, firstSampleHistMap_, edm::ParameterSet::getUntrackedParameter(), mps_fire::i, intToString(), listChannels_, dataset::name, pulseShapeHistMap_, rawPulseShapeHistMap_, AlCaHLTBitMon_QueryRunRegistry::string, and runGCPTkAlMap::title.

33  : EBUncalibratedRecHitCollection_(iConfig.getParameter<edm::InputTag>("EBUncalibratedRecHitCollection")),
34  EBDigis_(iConfig.getParameter<edm::InputTag>("EBDigiCollection")),
35  EEUncalibratedRecHitCollection_(iConfig.getParameter<edm::InputTag>("EEUncalibratedRecHitCollection")),
36  EEDigis_(iConfig.getParameter<edm::InputTag>("EEDigiCollection")),
37  ampCut_(iConfig.getUntrackedParameter<int>("AmplitudeCutADC", 13)),
38  rootFilename_(iConfig.getUntrackedParameter<std::string>("rootFilename", "pulseShapeGrapher")) {
39  //now do what ever initialization is needed
40 
41  std::vector<int> listDefaults;
42  listDefaults.push_back(-1);
43  listChannels_ = iConfig.getUntrackedParameter<std::vector<int> >("listChannels", listDefaults);
44 
45  for (std::vector<int>::const_iterator itr = listChannels_.begin(); itr != listChannels_.end(); ++itr) {
46  std::string title = "Amplitude of cry " + intToString(*itr);
47  std::string name = "ampOfCry" + intToString(*itr);
48  ampHistMap_[*itr] = new TH1F(name.c_str(), title.c_str(), 100, 0, 100);
49  ampHistMap_[*itr]->GetXaxis()->SetTitle("ADC");
50 
51  title = "Amplitude (over 13 ADC) of cry " + intToString(*itr);
52  name = "cutAmpOfCry" + intToString(*itr);
53  cutAmpHistMap_[*itr] = new TH1F(name.c_str(), title.c_str(), 100, 0, 100);
54  cutAmpHistMap_[*itr]->GetXaxis()->SetTitle("ADC");
55 
56  title = "Pulse shape of cry " + intToString(*itr);
57  name = "PulseShapeCry" + intToString(*itr);
58  pulseShapeHistMap_[*itr] = new TH2F(name.c_str(), title.c_str(), 10, 0, 10, 220, -20, 2);
59  pulseShapeHistMap_[*itr]->GetXaxis()->SetTitle("sample");
60 
61  title = "Raw Pulse shape of cry " + intToString(*itr);
62  name = "RawPulseShapeCry" + intToString(*itr);
63  rawPulseShapeHistMap_[*itr] = new TH2F(name.c_str(), title.c_str(), 10, 0, 10, 500, 0, 500);
64  rawPulseShapeHistMap_[*itr]->GetXaxis()->SetTitle("sample");
65 
66  title = "Amplitude of first sample, cry " + intToString(*itr);
67  name = "AmpOfFirstSampleCry" + intToString(*itr);
68  firstSampleHistMap_[*itr] = new TH1F(name.c_str(), title.c_str(), 300, 100, 400);
69  firstSampleHistMap_[*itr]->GetXaxis()->SetTitle("ADC");
70  }
71 
72  fedMap_ = new EcalFedMap();
73 
74  for (int i = 0; i < 10; i++)
75  abscissa[i] = i;
76 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::map< int, TH1F * > ampHistMap_
edm::InputTag EBUncalibratedRecHitCollection_
std::map< int, TH1F * > cutAmpHistMap_
edm::InputTag EEUncalibratedRecHitCollection_
std::vector< int > listChannels_
std::map< int, TH1F * > firstSampleHistMap_
std::map< int, TH2F * > pulseShapeHistMap_
std::map< int, TH2F * > rawPulseShapeHistMap_
EcalPulseShapeGrapher::~EcalPulseShapeGrapher ( )
override

Definition at line 78 of file EcalPulseShapeGrapher.cc.

78  {
79  // do anything here that needs to be done at desctruction time
80  // (e.g. close files, deallocate resources etc.)
81 }

Member Function Documentation

void EcalPulseShapeGrapher::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 88 of file EcalPulseShapeGrapher.cc.

References EcalMGPASample::adc(), ampCut_, ampHistMap_, CustomPhysics_cfi::amplitude, EcalUncalibratedRecHit::amplitude(), edm::SortedCollection< T, SORT >::begin(), edm::DataFrameContainer::begin(), cutAmpHistMap_, EcalElectronicsId::dccId(), EBDigis_, EBUncalibratedRecHitCollection_, EEDigis_, EEUncalibratedRecHitCollection_, edm::SortedCollection< T, SORT >::end(), edm::DataFrameContainer::end(), fedMap_, firstSampleHistMap_, muonCSCDigis_cfi::gain, EcalMGPASample::gainId(), edm::Event::getByLabel(), EcalFedMap::getSliceFromFed(), EBDetId::hashedIndex(), EEDetId::hashedIndex(), mps_fire::i, EcalUncalibratedRecHit::id(), createfilelist::int, listChannels_, muonCSCDigis_cfi::pedestal, pulseShapeHistMap_, rawPulseShapeHistMap_, EcalDataFrame::sample(), and findQualityFiles::size.

88  {
89  using namespace edm;
90  using namespace std;
91 
92  int numHitsWithActivity = 0;
93 
94  //int eventNum = iEvent.id().event();
95  //vector<EcalUncalibratedRecHit> sampleHitsPastCut;
96 
101  //cout << "event: " << eventNum << " sample hits collection size: " << sampleHits->size() << endl;
102  //Handle<EcalUncalibratedRecHitCollection> fittedHits;
103  //iEvent.getByLabel(FittedUncalibratedRecHitCollection_, fittedHits);
104  Handle<EBDigiCollection> EBdigis;
105  iEvent.getByLabel(EBDigis_, EBdigis);
106  Handle<EEDigiCollection> EEdigis;
107  iEvent.getByLabel(EEDigis_, EEdigis);
108  //cout << "event: " << eventNum << " digi collection size: " << digis->size() << endl;
109 
110  unique_ptr<EcalElectronicsMapping> ecalElectronicsMap(new EcalElectronicsMapping);
111 
112  // Loop over the hits
113  for (EcalUncalibratedRecHitCollection::const_iterator hitItr = EBHits->begin(); hitItr != EBHits->end(); ++hitItr) {
114  EcalUncalibratedRecHit hit = (*hitItr);
115  float amplitude = hit.amplitude();
116  EBDetId hitDetId = hit.id();
117 
118  // Get the Fedid
119  EcalElectronicsId elecId = ecalElectronicsMap->getElectronicsId(hitDetId);
120  int FEDid = 600 + elecId.dccId();
121  string SMname = fedMap_->getSliceFromFed(FEDid);
122 
123  vector<int>::const_iterator itr = listChannels_.begin();
124  while (itr != listChannels_.end() && (*itr) != hitDetId.hashedIndex()) {
125  itr++;
126  }
127  if (itr == listChannels_.end())
128  continue;
129 
130  ampHistMap_[hitDetId.hashedIndex()]->Fill(amplitude);
131  //cout << "Cry hash:" << hitDetId.hashedIndex() << " amplitude: " << amplitude << endl;
132  if (amplitude < ampCut_)
133  continue;
134 
135  cutAmpHistMap_[hitDetId.hashedIndex()]->Fill(amplitude);
136  numHitsWithActivity++;
137  EBDigiCollection::const_iterator digiItr = EBdigis->begin();
138  while (digiItr != EBdigis->end() && digiItr->id() != hitItr->id()) {
139  digiItr++;
140  }
141  if (digiItr == EBdigis->end())
142  continue;
143 
144  double sampleADC[10];
145  EBDataFrame df(*digiItr);
146  double pedestal = 200;
147 
148  if (df.sample(0).gainId() != 1 || df.sample(1).gainId() != 1)
149  continue; //goes to the next digi
150  else {
151  sampleADC[0] = df.sample(0).adc();
152  sampleADC[1] = df.sample(1).adc();
153  pedestal = (double)(sampleADC[0] + sampleADC[1]) / (double)2;
154  }
155 
156  for (int i = 0; (unsigned int)i < digiItr->size(); ++i) {
157  EBDataFrame df(*digiItr);
158  double gain = 12.;
159  if (df.sample(i).gainId() == 1)
160  gain = 1.;
161  else if (df.sample(i).gainId() == 2)
162  gain = 2.;
163  sampleADC[i] = pedestal + (df.sample(i).adc() - pedestal) * gain;
164  }
165 
166  //cout << "1) maxsample amp:" << maxSampleAmp << " maxSampleIndex:" << maxSampleIndex << endl;
167  for (int i = 0; i < 10; ++i) {
168  //cout << "Filling hist for:" << hitDetId.hashedIndex() << " with sample:" << i
169  //<< " amp:" <<(float)(df.sample(i).adc()-baseline)/(maxSampleAmp-baseline) << endl;
170  //cout << "ADC of sample:" << df.sample(i).adc() << " baseline:" << baseline << " maxSampleAmp:"
171  //<< maxSampleAmp << endl << endl;
172  pulseShapeHistMap_[hitDetId.hashedIndex()]->Fill(i, (float)(sampleADC[i] - pedestal) / amplitude);
173  rawPulseShapeHistMap_[hitDetId.hashedIndex()]->Fill(i, (float)(sampleADC[i]));
174  }
175  firstSampleHistMap_[hitDetId.hashedIndex()]->Fill(sampleADC[0]);
176  }
177 
178  // Now do the same for the EE hits
179  for (EcalUncalibratedRecHitCollection::const_iterator hitItr = EEHits->begin(); hitItr != EEHits->end(); ++hitItr) {
180  EcalUncalibratedRecHit hit = (*hitItr);
181  float amplitude = hit.amplitude();
182  EEDetId hitDetId = hit.id();
183 
184  // Get the Fedid
185  EcalElectronicsId elecId = ecalElectronicsMap->getElectronicsId(hitDetId);
186  int FEDid = 600 + elecId.dccId();
187  string SMname = fedMap_->getSliceFromFed(FEDid);
188 
189  vector<int>::const_iterator itr = listChannels_.begin();
190  while (itr != listChannels_.end() && (*itr) != hitDetId.hashedIndex()) {
191  itr++;
192  }
193  if (itr == listChannels_.end())
194  continue;
195 
196  ampHistMap_[hitDetId.hashedIndex()]->Fill(amplitude);
197  //cout << "Cry hash:" << hitDetId.hashedIndex() << " amplitude: " << amplitude << endl;
198  if (amplitude < ampCut_)
199  continue;
200 
201  cutAmpHistMap_[hitDetId.hashedIndex()]->Fill(amplitude);
202  numHitsWithActivity++;
203  EEDigiCollection::const_iterator digiItr = EEdigis->begin();
204  while (digiItr != EEdigis->end() && digiItr->id() != hitItr->id()) {
205  digiItr++;
206  }
207  if (digiItr == EEdigis->end())
208  continue;
209 
210  double sampleADC[10];
211  EEDataFrame df(*digiItr);
212  double pedestal = 200;
213 
214  if (df.sample(0).gainId() != 1 || df.sample(1).gainId() != 1)
215  continue; //goes to the next digi
216  else {
217  sampleADC[0] = df.sample(0).adc();
218  sampleADC[1] = df.sample(1).adc();
219  pedestal = (double)(sampleADC[0] + sampleADC[1]) / (double)2;
220  }
221 
222  for (int i = 0; (unsigned int)i < digiItr->size(); ++i) {
223  EEDataFrame df(*digiItr);
224  double gain = 12.;
225  if (df.sample(i).gainId() == 1)
226  gain = 1.;
227  else if (df.sample(i).gainId() == 2)
228  gain = 2.;
229  sampleADC[i] = pedestal + (df.sample(i).adc() - pedestal) * gain;
230  }
231 
232  //cout << "1) maxsample amp:" << maxSampleAmp << " maxSampleIndex:" << maxSampleIndex << endl;
233  for (int i = 0; i < 10; ++i) {
234  //cout << "Filling hist for:" << hitDetId.hashedIndex() << " with sample:" << i
235  //<< " amp:" <<(float)(df.sample(i).adc()-baseline)/(maxSampleAmp-baseline) << endl;
236  //cout << "ADC of sample:" << df.sample(i).adc() << " baseline:" << baseline << " maxSampleAmp:"
237  //<< maxSampleAmp << endl << endl;
238  pulseShapeHistMap_[hitDetId.hashedIndex()]->Fill(i, (float)(sampleADC[i] - pedestal) / amplitude);
239  rawPulseShapeHistMap_[hitDetId.hashedIndex()]->Fill(i, (float)(sampleADC[i]));
240  }
241  firstSampleHistMap_[hitDetId.hashedIndex()]->Fill(sampleADC[0]);
242  }
243 }
size
Write out results.
std::map< int, TH1F * > ampHistMap_
int hashedIndex() const
get a compact index for arrays
Definition: EBDetId.h:82
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
edm::InputTag EBUncalibratedRecHitCollection_
std::vector< T >::const_iterator const_iterator
std::map< int, TH1F * > cutAmpHistMap_
edm::InputTag EEUncalibratedRecHitCollection_
const_iterator begin() const
std::string getSliceFromFed(int)
Definition: EcalFedMap.cc:86
std::vector< int > listChannels_
int dccId() const
get the DCC (Ecal Local DCC value not global one) id
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:480
std::map< int, TH1F * > firstSampleHistMap_
const_iterator end() const
int hashedIndex() const
Definition: EEDetId.h:183
std::map< int, TH2F * > pulseShapeHistMap_
std::map< int, TH2F * > rawPulseShapeHistMap_
const_iterator end() const
HLT enums.
const_iterator begin() const
void EcalPulseShapeGrapher::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 246 of file EcalPulseShapeGrapher.cc.

References ampHistMap_, cutAmpHistMap_, file_, firstSampleHistMap_, listChannels_, rawPulseShapeHistMap_, and rootFilename_.

Referenced by o2olib.O2ORunMgr::executeJob().

246  {
247  rootFilename_ += ".root";
248  file_ = new TFile(rootFilename_.c_str(), "RECREATE");
249  TH1::AddDirectory(false);
250 
251  for (std::vector<int>::const_iterator itr = listChannels_.begin(); itr != listChannels_.end(); ++itr) {
252  ampHistMap_[*itr]->Write();
253  cutAmpHistMap_[*itr]->Write();
254  firstSampleHistMap_[*itr]->Write();
255 
256  rawPulseShapeHistMap_[*itr]->Write();
257  TProfile* t2 = (TProfile*)(rawPulseShapeHistMap_[*itr]->ProfileX());
258  t2->Write();
259  //TODO: fix the normalization so these are correct
260  //pulseShapeHistMap_[*itr]->Write();
261  //TProfile* t1 = (TProfile*) (pulseShapeHistMap_[*itr]->ProfileX());
262  //t1->Write();
263  }
264 
265  file_->Write();
266  file_->Close();
267 }
std::map< int, TH1F * > ampHistMap_
std::map< int, TH1F * > cutAmpHistMap_
std::vector< int > listChannels_
std::map< int, TH1F * > firstSampleHistMap_
std::map< int, TH2F * > rawPulseShapeHistMap_
std::string EcalPulseShapeGrapher::intToString ( int  num)
private

Definition at line 269 of file EcalPulseShapeGrapher.cc.

Referenced by EcalPulseShapeGrapher().

269  {
270  using namespace std;
271  ostringstream myStream;
272  myStream << num << flush;
273  return (myStream.str()); //returns the string form of the stringstream object
274 }

Member Data Documentation

int EcalPulseShapeGrapher::abscissa[10]
private

Definition at line 62 of file EcalPulseShapeGrapher.h.

Referenced by EcalPulseShapeGrapher().

int EcalPulseShapeGrapher::ampCut_
private

Definition at line 71 of file EcalPulseShapeGrapher.h.

Referenced by analyze().

std::map<int, TH1F*> EcalPulseShapeGrapher::ampHistMap_
private

Definition at line 65 of file EcalPulseShapeGrapher.h.

Referenced by analyze(), EcalPulseShapeGrapher(), and endJob().

std::map<int, TH1F*> EcalPulseShapeGrapher::cutAmpHistMap_
private

Definition at line 69 of file EcalPulseShapeGrapher.h.

Referenced by analyze(), EcalPulseShapeGrapher(), and endJob().

edm::InputTag EcalPulseShapeGrapher::EBDigis_
private

Definition at line 58 of file EcalPulseShapeGrapher.h.

Referenced by analyze().

edm::InputTag EcalPulseShapeGrapher::EBUncalibratedRecHitCollection_
private

Definition at line 57 of file EcalPulseShapeGrapher.h.

Referenced by analyze().

edm::InputTag EcalPulseShapeGrapher::EEDigis_
private

Definition at line 60 of file EcalPulseShapeGrapher.h.

Referenced by analyze().

edm::InputTag EcalPulseShapeGrapher::EEUncalibratedRecHitCollection_
private

Definition at line 59 of file EcalPulseShapeGrapher.h.

Referenced by analyze().

EcalFedMap* EcalPulseShapeGrapher::fedMap_
private

Definition at line 76 of file EcalPulseShapeGrapher.h.

Referenced by analyze(), and EcalPulseShapeGrapher().

TFile* EcalPulseShapeGrapher::file_
private

Definition at line 74 of file EcalPulseShapeGrapher.h.

Referenced by endJob().

std::map<int, TH1F*> EcalPulseShapeGrapher::firstSampleHistMap_
private

Definition at line 67 of file EcalPulseShapeGrapher.h.

Referenced by analyze(), EcalPulseShapeGrapher(), and endJob().

std::vector<int> EcalPulseShapeGrapher::listChannels_
private

Definition at line 64 of file EcalPulseShapeGrapher.h.

Referenced by analyze(), EcalPulseShapeGrapher(), and endJob().

int EcalPulseShapeGrapher::ordinate[10]
private

Definition at line 63 of file EcalPulseShapeGrapher.h.

std::map<int, TH2F*> EcalPulseShapeGrapher::pulseShapeHistMap_
private

Definition at line 66 of file EcalPulseShapeGrapher.h.

Referenced by analyze(), and EcalPulseShapeGrapher().

std::map<int, TH2F*> EcalPulseShapeGrapher::rawPulseShapeHistMap_
private

Definition at line 68 of file EcalPulseShapeGrapher.h.

Referenced by analyze(), EcalPulseShapeGrapher(), and endJob().

std::string EcalPulseShapeGrapher::rootFilename_
private

Definition at line 72 of file EcalPulseShapeGrapher.h.

Referenced by endJob().