CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Member Functions | Private Attributes
dEdxHitAnalyzer Class Reference

#include <dEdxHitAnalyzer.h>

Inheritance diagram for dEdxHitAnalyzer:
DQMEDAnalyzer edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >

Classes

struct  dEdxMEs
 

Public Member Functions

void analyze (const edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 
 dEdxHitAnalyzer (const edm::ParameterSet &)
 
void dqmBeginRun (const edm::Run &, const edm::EventSetup &) override
 
double harmonic2 (const reco::DeDxHitInfo *dedxHits)
 
 ~dEdxHitAnalyzer () override
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &event, edm::EventSetup const &setup) final
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
void beginStream (edm::StreamID id) final
 
 DQMEDAnalyzer ()
 
void endLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual bool getCanSaveByLumi ()
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from DQMEDAnalyzer
static void globalEndJob (DQMEDAnalyzerGlobalCache const *)
 
static void globalEndLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup, LuminosityBlockContext const *context)
 
static void globalEndRunProduce (edm::Run &run, edm::EventSetup const &setup, RunContext const *context)
 
static std::unique_ptr< DQMEDAnalyzerGlobalCacheinitializeGlobalCache (edm::ParameterSet const &)
 

Private Attributes

std::vector< std::string > AlgoNames
 
edm::ParameterSet conf_
 
int dEdxHarm2Bin
 
double dEdxHarm2Max
 
double dEdxHarm2Min
 
std::vector< std::string > dEdxInputList_
 
std::vector< dEdxMEsdEdxMEsVector
 
int dEdxNHitBin
 
double dEdxNHitMax
 
double dEdxNHitMin
 
int dEdxPixelBin
 
double dEdxPixelMax
 
double dEdxPixelMin
 
int dEdxStripBin
 
double dEdxStripMax
 
double dEdxStripMin
 
std::vector< edm::EDGetTokenT< reco::DeDxHitInfoAss > > dEdxTokenList_
 
bool doAllPlots_
 
bool doDeDxPlots_
 
edm::ParameterSet fullconf_
 
GenericTriggerEventFlaggenTriggerEventFlag_
 
std::string histname
 
std::string MEFolderName
 
edm::InputTag trackInputTag_
 
std::string TrackName
 
edm::EDGetTokenT< reco::TrackCollectiontrackToken_
 

Additional Inherited Members

- Public Types inherited from DQMEDAnalyzer
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 
- Protected Member Functions inherited from DQMEDAnalyzer
uint64_t meId () const
 
- Protected Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 
unsigned int streamId_
 

Detailed Description

Monitoring source for general quantities related to track dEdx.

Definition at line 29 of file dEdxHitAnalyzer.h.

Constructor & Destructor Documentation

◆ dEdxHitAnalyzer()

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

Definition at line 22 of file dEdxHitAnalyzer.cc.

References conf_, dEdxHarm2Bin, dEdxHarm2Max, dEdxHarm2Min, dEdxInputList_, dEdxNHitBin, dEdxNHitMax, dEdxNHitMin, dEdxPixelBin, dEdxPixelMax, dEdxPixelMin, dEdxStripBin, dEdxStripMax, dEdxStripMin, dEdxTokenList_, edm::ParameterSet::getParameter(), ProducerED_cfi::InputTag, MEFolderName, AlCaHLTBitMon_QueryRunRegistry::string, makeGlobalPositionRcd_cfg::tag, trackInputTag_, and trackToken_.

23  : fullconf_(iConfig),
24  conf_(fullconf_.getParameter<edm::ParameterSet>("dEdxParameters")),
25  doAllPlots_(conf_.getParameter<bool>("doAllPlots")),
26  doDeDxPlots_(conf_.getParameter<bool>("doDeDxPlots")),
28  conf_.getParameter<edm::ParameterSet>("genericTriggerEventPSet"), consumesCollector(), *this)) {
30  trackToken_ = consumes<reco::TrackCollection>(trackInputTag_);
31 
32  dEdxInputList_ = conf_.getParameter<std::vector<std::string> >("deDxHitProducers");
33  for (auto const& tag : dEdxInputList_) {
34  dEdxTokenList_.push_back(consumes<reco::DeDxHitInfoAss>(edm::InputTag(tag)));
35  }
36 
37  // parameters from the configuration
38  MEFolderName = conf_.getParameter<std::string>("FolderName");
39 
40  dEdxNHitBin = conf_.getParameter<int>("dEdxNHitBin");
41  dEdxNHitMin = conf_.getParameter<double>("dEdxNHitMin");
42  dEdxNHitMax = conf_.getParameter<double>("dEdxNHitMax");
43 
44  dEdxStripBin = conf_.getParameter<int>("dEdxStripBin");
45  dEdxStripMin = conf_.getParameter<double>("dEdxStripMin");
46  dEdxStripMax = conf_.getParameter<double>("dEdxStripMax");
47 
48  dEdxPixelBin = conf_.getParameter<int>("dEdxPixelBin");
49  dEdxPixelMin = conf_.getParameter<double>("dEdxPixelMin");
50  dEdxPixelMax = conf_.getParameter<double>("dEdxPixelMax");
51 
52  dEdxHarm2Bin = conf_.getParameter<int>("dEdxHarm2Bin");
53  dEdxHarm2Min = conf_.getParameter<double>("dEdxHarm2Min");
54  dEdxHarm2Max = conf_.getParameter<double>("dEdxHarm2Max");
55 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
edm::EDGetTokenT< reco::TrackCollection > trackToken_
Provides a code based selection for trigger and DCS information in order to have no failing filters i...
std::vector< std::string > dEdxInputList_
edm::InputTag trackInputTag_
GenericTriggerEventFlag * genTriggerEventFlag_
edm::ParameterSet fullconf_
std::vector< edm::EDGetTokenT< reco::DeDxHitInfoAss > > dEdxTokenList_
edm::ParameterSet conf_
std::string MEFolderName

◆ ~dEdxHitAnalyzer()

dEdxHitAnalyzer::~dEdxHitAnalyzer ( )
override

Definition at line 57 of file dEdxHitAnalyzer.cc.

References genTriggerEventFlag_.

57  {
59  delete genTriggerEventFlag_;
60 }
GenericTriggerEventFlag * genTriggerEventFlag_

Member Function Documentation

◆ analyze()

void dEdxHitAnalyzer::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
overridevirtual

Reimplemented from DQMEDAnalyzer.

Definition at line 128 of file dEdxHitAnalyzer.cc.

References GenericTriggerEventFlag::accept(), reco::DeDxHitInfo::charge(), dEdxInputList_, dEdxMEsVector, dEdxTokenList_, reco::DeDxHitInfo::detId(), doAllPlots_, doDeDxPlots_, genTriggerEventFlag_, h, harmonic2(), reco::TrackBase::highPurity, mps_fire::i, iEvent, edm::Ref< C, T, F >::isNull(), edm::HandleBase::isValid(), GenericTriggerEventFlag::on(), reco::DeDxHitInfo::size(), submitPVValidationJobs::t, HLT_2023v12_cff::track, and trackToken_.

128  {
129  // Filter out events if Trigger Filtering is requested
131  return;
132 
133  if (doDeDxPlots_ || doAllPlots_) {
134  edm::Handle<reco::TrackCollection> trackCollectionHandle = iEvent.getHandle(trackToken_);
135  if (!trackCollectionHandle.isValid())
136  return;
137 
138  for (unsigned int i = 0; i < dEdxInputList_.size(); i++) {
139  edm::Handle<reco::DeDxHitInfoAss> dEdxObjectHandle = iEvent.getHandle(dEdxTokenList_[i]);
140  if (!dEdxObjectHandle.isValid())
141  continue;
142 
143  for (unsigned int t = 0; t < trackCollectionHandle->size(); t++) {
144  reco::TrackRef track = reco::TrackRef(trackCollectionHandle, t);
145 
146  if (track->quality(reco::TrackBase::highPurity)) {
147  const reco::DeDxHitInfo* dedxHits = nullptr;
148  if (!track.isNull()) {
149  reco::DeDxHitInfoRef dedxHitsRef = (*dEdxObjectHandle)[track];
150  if (!dedxHitsRef.isNull())
151  dedxHits = &(*dedxHitsRef);
152  }
153  if (!dedxHits)
154  continue;
155 
156  for (unsigned int h = 0; h < dedxHits->size(); h++) {
157  DetId detid(dedxHits->detId(h));
158  if (detid.subdetId() >= 3)
159  dEdxMEsVector[i].ME_StripHitDeDx->Fill(dedxHits->charge(h));
160  if (detid.subdetId() < 3)
161  dEdxMEsVector[i].ME_PixelHitDeDx->Fill(dedxHits->charge(h));
162  }
163  dEdxMEsVector[i].ME_NHitDeDx->Fill(dedxHits->size());
164  dEdxMEsVector[i].ME_Harm2DeDx->Fill(harmonic2(dedxHits));
165  }
166  }
167  }
168  }
169 }
edm::EDGetTokenT< reco::TrackCollection > trackToken_
std::vector< std::string > dEdxInputList_
std::vector< dEdxMEs > dEdxMEsVector
int iEvent
Definition: GenABIO.cc:224
bool accept(const edm::Event &event, const edm::EventSetup &setup)
To be called from analyze/filter() methods.
GenericTriggerEventFlag * genTriggerEventFlag_
DetId detId(size_t i) const
Definition: DeDxHitInfo.h:44
bool isNull() const
Checks for null.
Definition: Ref.h:235
std::vector< edm::EDGetTokenT< reco::DeDxHitInfoAss > > dEdxTokenList_
double harmonic2(const reco::DeDxHitInfo *dedxHits)
Definition: DetId.h:17
size_t size() const
Definition: DeDxHitInfo.h:41
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
bool isValid() const
Definition: HandleBase.h:70
float charge(size_t i) const
Definition: DeDxHitInfo.h:42
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4

◆ bookHistograms()

void dEdxHitAnalyzer::bookHistograms ( DQMStore::IBooker ibooker,
edm::Run const &  iRun,
edm::EventSetup const &  iSetup 
)
overridevirtual

Implements DQMEDAnalyzer.

Definition at line 70 of file dEdxHitAnalyzer.cc.

References dqm::implementation::IBooker::book1D(), dEdxHarm2Bin, dEdxHarm2Max, dEdxHarm2Min, dEdxInputList_, dEdxMEsVector, dEdxNHitBin, dEdxNHitMax, dEdxNHitMin, dEdxPixelBin, dEdxPixelMax, dEdxPixelMin, dEdxStripBin, dEdxStripMax, dEdxStripMin, doAllPlots_, doDeDxPlots_, histname, mps_fire::i, MEFolderName, and dqm::implementation::NavigatorBase::setCurrentFolder().

70  {
72 
73  // book the Hit Property histograms
74  // ---------------------------------------------------------------------------------//
75 
76  if (doDeDxPlots_ || doAllPlots_) {
77  for (unsigned int i = 0; i < dEdxInputList_.size(); i++) {
79  dEdxMEsVector.push_back(dEdxMEs());
80 
81  histname = "Strip_dEdxPerCluster_";
83  dEdxMEsVector[i].ME_StripHitDeDx->setAxisTitle("dEdx of on-track strip cluster (ADC)");
84  dEdxMEsVector[i].ME_StripHitDeDx->setAxisTitle("Number of Strip clusters", 2);
85 
86  histname = "Pixel_dEdxPerCluster_";
88  dEdxMEsVector[i].ME_PixelHitDeDx->setAxisTitle("dEdx of on-track pixel cluster (ADC)");
89  dEdxMEsVector[i].ME_PixelHitDeDx->setAxisTitle("Number of Pixel clusters", 2);
90 
91  histname = "NumberOfdEdxHitsPerTrack_";
93  dEdxMEsVector[i].ME_NHitDeDx->setAxisTitle("Number of dEdxHits per Track");
94  dEdxMEsVector[i].ME_NHitDeDx->setAxisTitle("Number of Tracks", 2);
95 
96  histname = "Harm2_dEdxPerTrack_";
98  dEdxMEsVector[i].ME_Harm2DeDx->setAxisTitle("Harmonic2 dEdx estimator for each Track");
99  dEdxMEsVector[i].ME_Harm2DeDx->setAxisTitle("Number of Tracks", 2);
100  }
101  }
102 }
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
std::vector< std::string > dEdxInputList_
std::string histname
std::vector< dEdxMEs > dEdxMEsVector
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::string MEFolderName

◆ dqmBeginRun()

void dEdxHitAnalyzer::dqmBeginRun ( const edm::Run iRun,
const edm::EventSetup iSetup 
)
overridevirtual

Reimplemented from DQMEDAnalyzer.

Definition at line 64 of file dEdxHitAnalyzer.cc.

References genTriggerEventFlag_, GenericTriggerEventFlag::initRun(), and GenericTriggerEventFlag::on().

64  {
65  // Initialize the GenericTriggerEventFlag
66  if (genTriggerEventFlag_->on())
67  genTriggerEventFlag_->initRun(iRun, iSetup);
68 }
GenericTriggerEventFlag * genTriggerEventFlag_
void initRun(const edm::Run &run, const edm::EventSetup &setup)
To be called from beginRun() methods.

◆ fillDescriptions()

void dEdxHitAnalyzer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 172 of file dEdxHitAnalyzer.cc.

References edm::ConfigurationDescriptions::addDefault(), and submitPVResolutionJobs::desc.

172  {
173  //The following says we do not know what parameters are allowed so do no validation
174  // Please change this to state exactly what you do use, even if it is no parameters
176  desc.setUnknown();
177  descriptions.addDefault(desc);
178 }
void addDefault(ParameterSetDescription const &psetDescription)

◆ harmonic2()

double dEdxHitAnalyzer::harmonic2 ( const reco::DeDxHitInfo dedxHits)

Definition at line 104 of file dEdxHitAnalyzer.cc.

References reco::DeDxHitInfo::charge(), reco::DeDxHitInfo::detId(), MillePedeFileConverter_cfg::e, h, mps_fire::i, reco::DeDxHitInfo::pathlength(), conifer::pow(), mps_fire::result, reco::DeDxHitInfo::size(), and findQualityFiles::size.

Referenced by analyze().

104  {
105  if (!dedxHits)
106  return -1;
107  std::vector<double> vect;
108  for (unsigned int h = 0; h < dedxHits->size(); h++) {
109  DetId detid(dedxHits->detId(h));
110  double Norm = (detid.subdetId() < 3) ? 3.61e-06 : 3.61e-06 * 265;
111  double ChargeOverPathlength = Norm * dedxHits->charge(h) / dedxHits->pathlength(h);
112  vect.push_back(ChargeOverPathlength); //save charge
113  }
114 
115  int size = vect.size();
116  if (size <= 0)
117  return -1;
118  double result = 0;
119  double expo = -2;
120  for (int i = 0; i < size; i++) {
121  result += pow(vect[i], expo);
122  }
123  return pow(result / size, 1. / expo);
124 }
size
Write out results.
float pathlength(size_t i) const
Definition: DeDxHitInfo.h:43
constexpr int pow(int x)
Definition: conifer.h:24
DetId detId(size_t i) const
Definition: DeDxHitInfo.h:44
Definition: DetId.h:17
size_t size() const
Definition: DeDxHitInfo.h:41
float charge(size_t i) const
Definition: DeDxHitInfo.h:42
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4

Member Data Documentation

◆ AlgoNames

std::vector<std::string> dEdxHitAnalyzer::AlgoNames
private

Definition at line 65 of file dEdxHitAnalyzer.h.

◆ conf_

edm::ParameterSet dEdxHitAnalyzer::conf_
private

Definition at line 44 of file dEdxHitAnalyzer.h.

Referenced by dEdxHitAnalyzer().

◆ dEdxHarm2Bin

int dEdxHitAnalyzer::dEdxHarm2Bin
private

Definition at line 85 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxHarm2Max

double dEdxHitAnalyzer::dEdxHarm2Max
private

Definition at line 87 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxHarm2Min

double dEdxHitAnalyzer::dEdxHarm2Min
private

Definition at line 86 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxInputList_

std::vector<std::string> dEdxHitAnalyzer::dEdxInputList_
private

Definition at line 61 of file dEdxHitAnalyzer.h.

Referenced by analyze(), bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxMEsVector

std::vector<dEdxMEs> dEdxHitAnalyzer::dEdxMEsVector
private

Definition at line 66 of file dEdxHitAnalyzer.h.

Referenced by analyze(), and bookHistograms().

◆ dEdxNHitBin

int dEdxHitAnalyzer::dEdxNHitBin
private

Definition at line 73 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxNHitMax

double dEdxHitAnalyzer::dEdxNHitMax
private

Definition at line 75 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxNHitMin

double dEdxHitAnalyzer::dEdxNHitMin
private

Definition at line 74 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxPixelBin

int dEdxHitAnalyzer::dEdxPixelBin
private

Definition at line 81 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxPixelMax

double dEdxHitAnalyzer::dEdxPixelMax
private

Definition at line 83 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxPixelMin

double dEdxHitAnalyzer::dEdxPixelMin
private

Definition at line 82 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxStripBin

int dEdxHitAnalyzer::dEdxStripBin
private

Definition at line 77 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxStripMax

double dEdxHitAnalyzer::dEdxStripMax
private

Definition at line 79 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxStripMin

double dEdxHitAnalyzer::dEdxStripMin
private

Definition at line 78 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ dEdxTokenList_

std::vector<edm::EDGetTokenT<reco::DeDxHitInfoAss> > dEdxHitAnalyzer::dEdxTokenList_
private

Definition at line 62 of file dEdxHitAnalyzer.h.

Referenced by analyze(), and dEdxHitAnalyzer().

◆ doAllPlots_

bool dEdxHitAnalyzer::doAllPlots_
private

Definition at line 46 of file dEdxHitAnalyzer.h.

Referenced by analyze(), and bookHistograms().

◆ doDeDxPlots_

bool dEdxHitAnalyzer::doDeDxPlots_
private

Definition at line 47 of file dEdxHitAnalyzer.h.

Referenced by analyze(), and bookHistograms().

◆ fullconf_

edm::ParameterSet dEdxHitAnalyzer::fullconf_
private

Definition at line 43 of file dEdxHitAnalyzer.h.

◆ genTriggerEventFlag_

GenericTriggerEventFlag* dEdxHitAnalyzer::genTriggerEventFlag_
private

Definition at line 69 of file dEdxHitAnalyzer.h.

Referenced by analyze(), dqmBeginRun(), and ~dEdxHitAnalyzer().

◆ histname

std::string dEdxHitAnalyzer::histname
private

Definition at line 67 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms().

◆ MEFolderName

std::string dEdxHitAnalyzer::MEFolderName
private

Definition at line 71 of file dEdxHitAnalyzer.h.

Referenced by bookHistograms(), and dEdxHitAnalyzer().

◆ trackInputTag_

edm::InputTag dEdxHitAnalyzer::trackInputTag_
private

Definition at line 58 of file dEdxHitAnalyzer.h.

Referenced by dEdxHitAnalyzer().

◆ TrackName

std::string dEdxHitAnalyzer::TrackName
private

Definition at line 64 of file dEdxHitAnalyzer.h.

◆ trackToken_

edm::EDGetTokenT<reco::TrackCollection> dEdxHitAnalyzer::trackToken_
private

Definition at line 59 of file dEdxHitAnalyzer.h.

Referenced by analyze(), and dEdxHitAnalyzer().