test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Private Attributes
EcalEndcapRecHitsValidation Class Reference

#include <EcalEndcapRecHitsValidation.h>

Inheritance diagram for EcalEndcapRecHitsValidation:
DQMEDAnalyzer edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > > edm::stream::EDAnalyzerBase edm::EDConsumerBase

Public Member Functions

 EcalEndcapRecHitsValidation (const edm::ParameterSet &ps)
 Constructor. More...
 
 ~EcalEndcapRecHitsValidation ()
 Destructor. More...
 
- Public Member Functions inherited from DQMEDAnalyzer
virtual void beginRun (edm::Run const &, edm::EventSetup const &) final
 
virtual void beginStream (edm::StreamID id) final
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer (void)
 
virtual void endLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, dqmDetails::NoCache *) const final
 
virtual void endRunSummary (edm::Run const &, edm::EventSetup const &, dqmDetails::NoCache *) const final
 
uint32_t streamId () const
 
- Public Member Functions inherited from edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > >
 EDAnalyzer ()=default
 
- Public Member Functions inherited from edm::stream::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDAnalyzerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (std::string const &iProcessName, std::string const &iModuleLabel, bool iPrint, std::vector< char const * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Protected Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c)
 Analyze. More...
 
void bookHistograms (DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
 
- 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 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)
 

Private Attributes

edm::EDGetTokenT
< EEDigiCollection
EEdigiCollection_token_
 
edm::EDGetTokenT
< EEUncalibratedRecHitCollection
EEuncalibrechitCollection_token_
 
MonitorElementmeEEUncalibRecHitMaxSampleRatio_
 
MonitorElementmeEEUncalibRecHitMaxSampleRatioGt60adc_
 
MonitorElementmeEEUncalibRecHitsAmpFullMap_
 
MonitorElementmeEEUncalibRecHitsAmplitude_
 
MonitorElementmeEEUncalibRecHitsAmplitudeGt60adc_
 
MonitorElementmeEEUncalibRecHitsChi2_
 
MonitorElementmeEEUncalibRecHitsChi2Gt60adc_
 
MonitorElementmeEEUncalibRecHitsJitter_
 
MonitorElementmeEEUncalibRecHitsJitterGt60adc_
 
MonitorElementmeEEUncalibRecHitsOccupancyMinus_
 
MonitorElementmeEEUncalibRecHitsOccupancyMinusGt60adc_
 
MonitorElementmeEEUncalibRecHitsOccupancyPlus_
 
MonitorElementmeEEUncalibRecHitsOccupancyPlusGt60adc_
 
MonitorElementmeEEUncalibRecHitsPedestal_
 
MonitorElementmeEEUncalibRecHitsPedestalGt60adc_
 
MonitorElementmeEEUncalibRecHitsPedFullMap_
 
bool verbose_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > >
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDAnalyzerBase
typedef EDAnalyzerAdaptorBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from DQMEDAnalyzer
static std::shared_ptr
< dqmDetails::NoCache
globalBeginLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, LuminosityBlockContext const *)
 
static std::shared_ptr
< dqmDetails::NoCache
globalBeginRunSummary (edm::Run const &, edm::EventSetup const &, RunContext const *)
 
static void globalEndLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, LuminosityBlockContext const *, dqmDetails::NoCache *)
 
static void globalEndRunSummary (edm::Run const &, edm::EventSetup const &, RunContext const *, dqmDetails::NoCache *)
 
- Static Public Member Functions inherited from edm::stream::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Detailed Description

Definition at line 38 of file EcalEndcapRecHitsValidation.h.

Constructor & Destructor Documentation

EcalEndcapRecHitsValidation::EcalEndcapRecHitsValidation ( const edm::ParameterSet ps)

Constructor.

Definition at line 16 of file EcalEndcapRecHitsValidation.cc.

References edm::ParameterSet::getParameter(), and edm::ParameterSet::getUntrackedParameter().

16  {
17 
18  // ----------------------
19  EEdigiCollection_token_ = consumes< EEDigiCollection > (ps.getParameter<edm::InputTag>("EEdigiCollection") );
20  EEuncalibrechitCollection_token_ = consumes< EEUncalibratedRecHitCollection > (ps.getParameter<edm::InputTag>("EEuncalibrechitCollection") );
21 
22  // ----------------------
23  // verbosity switch
24  verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
25 
26  // ----------------------
43 
44 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * meEEUncalibRecHitsOccupancyPlusGt60adc_
MonitorElement * meEEUncalibRecHitMaxSampleRatioGt60adc_
MonitorElement * meEEUncalibRecHitsOccupancyMinusGt60adc_
edm::EDGetTokenT< EEUncalibratedRecHitCollection > EEuncalibrechitCollection_token_
edm::EDGetTokenT< EEDigiCollection > EEdigiCollection_token_
MonitorElement * meEEUncalibRecHitsAmplitudeGt60adc_
EcalEndcapRecHitsValidation::~EcalEndcapRecHitsValidation ( )

Destructor.

Definition at line 46 of file EcalEndcapRecHitsValidation.cc.

46  {
47 
48 }

Member Function Documentation

void EcalEndcapRecHitsValidation::analyze ( const edm::Event e,
const edm::EventSetup c 
)
protectedvirtual

Analyze.

Implements edm::stream::EDAnalyzerBase.

Definition at line 106 of file EcalEndcapRecHitsValidation.cc.

References EcalMGPASample::adc(), edm::SortedCollection< T, SORT >::begin(), EcalCondObjectContainer< T >::end(), edm::SortedCollection< T, SORT >::end(), edm::DataFrameContainer::end(), HcalObjRepresent::Fill(), EcalCondObjectContainer< T >::find(), edm::DataFrameContainer::find(), edm::EventSetup::get(), edm::Event::getByToken(), EcalCondObjectContainer< T >::getMap(), edm::HandleBase::isValid(), EEDetId::ix(), EEDetId::iy(), LogDebug, edm::Handle< T >::product(), edm::ESHandle< class >::product(), compare_using_db::sample, and EEDetId::zside().

106  {
107 
108  const EEUncalibratedRecHitCollection *EEUncalibRecHit = 0;
109  Handle< EEUncalibratedRecHitCollection > EcalUncalibRecHitEE;
110  e.getByToken( EEuncalibrechitCollection_token_, EcalUncalibRecHitEE);
111  if (EcalUncalibRecHitEE.isValid()) {
112  EEUncalibRecHit = EcalUncalibRecHitEE.product() ;
113  } else {
114  return;
115  }
116 
117  bool skipDigis = false;
118  const EEDigiCollection *EEDigi = 0;
119  Handle< EEDigiCollection > EcalDigiEE;
120  e.getByToken( EEdigiCollection_token_, EcalDigiEE);
121  if (EcalDigiEE.isValid()) {
122  EEDigi = EcalDigiEE.product();
123  } else {
124  skipDigis = true;
125  }
126 
128  c.get<EcalPedestalsRcd>().get(ecalPeds);
129 
130  // ----------------------
131  // loop over UncalibRecHits
132  for (EcalUncalibratedRecHitCollection::const_iterator uncalibRecHit = EEUncalibRecHit->begin(); uncalibRecHit != EEUncalibRecHit->end() ; ++uncalibRecHit)
133  {
134  EEDetId EEid = EEDetId(uncalibRecHit->id());
135 
136  int mySide = EEid.zside();
137 
138  // general checks
139  if (mySide > 0) { if (meEEUncalibRecHitsOccupancyPlus_) meEEUncalibRecHitsOccupancyPlus_ ->Fill(EEid.ix(), EEid.iy()); }
140  if (mySide < 0) { if (meEEUncalibRecHitsOccupancyMinus_) meEEUncalibRecHitsOccupancyMinus_ ->Fill(EEid.ix(), EEid.iy()); }
141  if (meEEUncalibRecHitsAmplitude_) meEEUncalibRecHitsAmplitude_ -> Fill(uncalibRecHit->amplitude());
142  if (meEEUncalibRecHitsPedestal_) meEEUncalibRecHitsPedestal_ -> Fill(uncalibRecHit->pedestal());
143  if (meEEUncalibRecHitsJitter_) meEEUncalibRecHitsJitter_ -> Fill(uncalibRecHit->jitter());
144  if (meEEUncalibRecHitsChi2_) meEEUncalibRecHitsChi2_ -> Fill(uncalibRecHit->chi2());
145  if (meEEUncalibRecHitsAmpFullMap_) meEEUncalibRecHitsAmpFullMap_ -> Fill(EEid.ix(), EEid.iy(), uncalibRecHit->amplitude());
146  if (meEEUncalibRecHitsPedFullMap_) meEEUncalibRecHitsPedFullMap_ -> Fill(EEid.ix(), EEid.iy(), uncalibRecHit->pedestal());
147 
148 
149  // general checks, with threshold at 60 ADC counts
150  if ( uncalibRecHit->amplitude() > 60 )
151  {
158  }
159 
160  if ( ! skipDigis ) {
161  // Find the rechit corresponding digi
162  EEDigiCollection::const_iterator myDigi = EEDigi->find(EEid);
163  // int sMax = -1; // UNUSED
164  double eMax = 0.;
165  if (myDigi != EEDigi->end()){
166  for (unsigned int sample = 0 ; sample < myDigi->size(); ++sample){
167  EcalMGPASample thisSample = (*myDigi)[sample];
168  double analogSample = thisSample.adc();
169  if ( eMax < analogSample ){
170  eMax = analogSample;
171  // sMax = sample; // UNUSED
172  }
173  }
174  }
175  else
176  continue;
177 
178  // ratio uncalibratedRecHit amplitude + ped / max energy digi
179  const EcalPedestals* myped = ecalPeds.product();
180  EcalPedestalsMap::const_iterator it=myped->getMap().find( EEid );
181  if( it != myped->getMap().end() ){
182 
183  if (eMax > (*it).mean_x1 + 5 * (*it).rms_x1 && eMax != 0 ){ //only real signal RecHit
184 
186  { meEEUncalibRecHitMaxSampleRatio_->Fill( (uncalibRecHit->amplitude()+uncalibRecHit->pedestal())/eMax); }
187 
188  if ( meEEUncalibRecHitMaxSampleRatioGt60adc_ && (uncalibRecHit->amplitude() > 60) )
189  { meEEUncalibRecHitMaxSampleRatioGt60adc_->Fill( (uncalibRecHit->amplitude()+uncalibRecHit->pedestal())/eMax); }
190 
191  LogDebug("EcalRecHitsTaskInfo") << "endcap, eMax = " << eMax << " Amplitude = " << uncalibRecHit->amplitude()+uncalibRecHit->pedestal();
192  }
193  else
194  continue;
195  }
196  else
197  continue;
198  }
199  } // loop over the UncalibratedRecHitCollection
200 
201 }
#define LogDebug(id)
int ix() const
Definition: EEDetId.h:76
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
const self & getMap() const
std::vector< EcalUncalibratedRecHit >::const_iterator const_iterator
MonitorElement * meEEUncalibRecHitsOccupancyPlusGt60adc_
MonitorElement * meEEUncalibRecHitMaxSampleRatioGt60adc_
void Fill(long long x)
const_iterator find(id_type i) const
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
int zside() const
Definition: EEDetId.h:70
MonitorElement * meEEUncalibRecHitsOccupancyMinusGt60adc_
int iy() const
Definition: EEDetId.h:82
bool isValid() const
Definition: HandleBase.h:75
const_iterator end() const
edm::EDGetTokenT< EEUncalibratedRecHitCollection > EEuncalibrechitCollection_token_
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:56
std::vector< Item >::const_iterator const_iterator
T const * product() const
Definition: ESHandle.h:86
const_iterator end() const
edm::EDGetTokenT< EEDigiCollection > EEdigiCollection_token_
const_iterator find(uint32_t rawId) const
const_iterator end() const
const_iterator begin() const
MonitorElement * meEEUncalibRecHitsAmplitudeGt60adc_
int adc() const
get the ADC sample (12 bits)
void EcalEndcapRecHitsValidation::bookHistograms ( DQMStore::IBooker i,
edm::Run const &  ,
edm::EventSetup const &   
)
overrideprotectedvirtual

Implements DQMEDAnalyzer.

Definition at line 50 of file EcalEndcapRecHitsValidation.cc.

References DQMStore::IBooker::book1D(), DQMStore::IBooker::book2D(), DQMStore::IBooker::bookProfile2D(), timingPdfMaker::histo, and DQMStore::IBooker::setCurrentFolder().

50  {
51 
52  Char_t histo[200];
53 
54  ibooker.setCurrentFolder("EcalRecHitsV/EcalEndcapRecHitsTask");
55 
56  sprintf (histo, "EE+ Occupancy" );
57  meEEUncalibRecHitsOccupancyPlus_ = ibooker.book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
58 
59  sprintf (histo, "EE- Occupancy" );
60  meEEUncalibRecHitsOccupancyMinus_ = ibooker.book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
61 
62  sprintf (histo, "EE Amplitude" );
63  meEEUncalibRecHitsAmplitude_ = ibooker.book1D(histo, histo, 201, -20., 4000.);
64 
65  sprintf (histo, "EE Pedestal" );
66  meEEUncalibRecHitsPedestal_ = ibooker.book1D(histo, histo, 50, 190., 210.);
67 
68  sprintf (histo, "EE Jitter" );
69  meEEUncalibRecHitsJitter_ = ibooker.book1D(histo, histo, 100, 0., 100.);
70 
71  sprintf (histo, "EE Chi2" );
72  meEEUncalibRecHitsChi2_ = ibooker.book1D(histo, histo, 100, 18000., 22000.);
73 
74  sprintf (histo, "EE RecHit Max Sample Ratio");
75  meEEUncalibRecHitMaxSampleRatio_ = ibooker.book1D(histo, histo, 120, 0.90, 1.05);
76 
77  sprintf (histo, "EE+ Occupancy gt 60 adc counts" );
78  meEEUncalibRecHitsOccupancyPlusGt60adc_ = ibooker.book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
79 
80  sprintf (histo, "EE- Occupancy gt 60 adc counts" );
81  meEEUncalibRecHitsOccupancyMinusGt60adc_ = ibooker.book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
82 
83  sprintf (histo, "EE Amplitude gt 60 adc counts" );
84  meEEUncalibRecHitsAmplitudeGt60adc_ = ibooker.book1D(histo, histo, 200, 0., 4000.);
85 
86  sprintf (histo, "EE Pedestal gt 60 adc counts" );
87  meEEUncalibRecHitsPedestalGt60adc_ = ibooker.book1D(histo, histo, 50, 190., 210.);
88 
89  sprintf (histo, "EE Jitter gt 60 adc counts" );
90  meEEUncalibRecHitsJitterGt60adc_ = ibooker.book1D(histo, histo, 100, 0., 100.);
91 
92  sprintf (histo, "EE Chi2 gt 60 adc counts" );
93  meEEUncalibRecHitsChi2Gt60adc_ = ibooker.book1D(histo, histo, 100, 18000., 22000.);
94 
95  sprintf (histo, "EE RecHit Max Sample Ratio gt 60 adc counts");
96  meEEUncalibRecHitMaxSampleRatioGt60adc_ = ibooker.book1D(histo, histo, 120, 0.90, 1.05);
97 
98  sprintf (histo, "EE Amplitude Full Map");
99  meEEUncalibRecHitsAmpFullMap_ = ibooker.bookProfile2D(histo, histo, 100, 0., 100., 100, 0., 100., 200, 0., 4000.);
100 
101  sprintf (histo, "EE Pedestal Full Map");
102  meEEUncalibRecHitsPedFullMap_ = ibooker.bookProfile2D(histo, histo, 100, 0., 100., 100, 0., 100., 50, 194., 201.);
103 
104 }
MonitorElement * meEEUncalibRecHitsOccupancyPlusGt60adc_
MonitorElement * meEEUncalibRecHitMaxSampleRatioGt60adc_
MonitorElement * meEEUncalibRecHitsOccupancyMinusGt60adc_
MonitorElement * meEEUncalibRecHitsAmplitudeGt60adc_

Member Data Documentation

edm::EDGetTokenT< EEDigiCollection > EcalEndcapRecHitsValidation::EEdigiCollection_token_
private

Definition at line 60 of file EcalEndcapRecHitsValidation.h.

edm::EDGetTokenT< EEUncalibratedRecHitCollection > EcalEndcapRecHitsValidation::EEuncalibrechitCollection_token_
private

Definition at line 61 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitMaxSampleRatio_
private

Definition at line 69 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitMaxSampleRatioGt60adc_
private

Definition at line 76 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsAmpFullMap_
private

Definition at line 77 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsAmplitude_
private

Definition at line 65 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsAmplitudeGt60adc_
private

Definition at line 72 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsChi2_
private

Definition at line 68 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsChi2Gt60adc_
private

Definition at line 75 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsJitter_
private

Definition at line 67 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsJitterGt60adc_
private

Definition at line 74 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsOccupancyMinus_
private

Definition at line 64 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsOccupancyMinusGt60adc_
private

Definition at line 71 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsOccupancyPlus_
private

Definition at line 63 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsOccupancyPlusGt60adc_
private

Definition at line 70 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsPedestal_
private

Definition at line 66 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsPedestalGt60adc_
private

Definition at line 73 of file EcalEndcapRecHitsValidation.h.

MonitorElement* EcalEndcapRecHitsValidation::meEEUncalibRecHitsPedFullMap_
private

Definition at line 78 of file EcalEndcapRecHitsValidation.h.

bool EcalEndcapRecHitsValidation::verbose_
private

Definition at line 57 of file EcalEndcapRecHitsValidation.h.