CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes
EcalMixingModuleValidation Class Reference

#include <EcalMixingModuleValidation.h>

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

Public Member Functions

void bookHistograms (DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
 
 EcalMixingModuleValidation (const edm::ParameterSet &ps)
 Constructor. More...
 
 ~EcalMixingModuleValidation ()
 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
 
 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 ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
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 & itemsToGetFromEvent () 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
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

void analyze (edm::Event const &e, edm::EventSetup const &c) override
 Analyze. More...
 
void dqmBeginRun (edm::Run const &, edm::EventSetup const &) override
 
void endRun (const edm::Run &r, const edm::EventSetup &c) 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 Types

typedef std::map< uint32_t, float, std::less< uint32_t > > MapType
 

Private Member Functions

void bunchSumTest (std::vector< MonitorElement * > &theBunches, MonitorElement *&theTotal, MonitorElement *&theRatio, int nSample)
 
void checkCalibrations (edm::EventSetup const &c)
 
void checkPedestals (const edm::EventSetup &c)
 
void computeSDBunchDigi (const edm::EventSetup &eventSetup, const MixCollection< PCaloHit > &theHits, MapType &ebSignalSimMap, const EcalSubdetector &thisDet, const double &theSimThreshold, CLHEP::HepRandomEngine *)
 
void findPedestal (const DetId &detId, int gainId, double &ped) const
 
CLHEP::HepRandomEngine * randomEngine (edm::StreamID const &streamID)
 

Private Attributes

double barrelADCtoGeV_
 
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitEBToken_
 
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitEEToken_
 
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitESToken_
 
DQMStoredbe_
 
edm::EDGetTokenT< EBDigiCollectionEBdigiCollectionToken_
 
edm::EDGetTokenT< EEDigiCollectionEEdigiCollectionToken_
 
double endcapADCtoGeV_
 
double esADCtokeV_
 
double esBaseline_
 
edm::EDGetTokenT< ESDigiCollectionESdigiCollectionToken_
 
double esThreshold_
 
std::map< int, double, std::less< int > > gainConv_
 
edm::EDGetTokenT< edm::HepMCProductHepMCToken_
 
double m_ESeffwei
 
int m_ESgain
 
const ESIntercalibConstantsm_ESmips
 
const ESPedestalsm_ESpeds
 
MonitorElementmeEBbunchCrossing_
 
MonitorElementmeEBBunchShape_ [nBunch]
 
MonitorElementmeEBDigiMixRatiogt100ADC_
 
MonitorElementmeEBDigiMixRatioOriggt50pc_
 
MonitorElementmeEBShape_
 
MonitorElementmeEBShapeRatio_
 
MonitorElementmeEEbunchCrossing_
 
MonitorElementmeEEBunchShape_ [nBunch]
 
MonitorElementmeEEDigiMixRatiogt100ADC_
 
MonitorElementmeEEDigiMixRatioOriggt40pc_
 
MonitorElementmeEEShape_
 
MonitorElementmeEEShapeRatio_
 
MonitorElementmeESbunchCrossing_
 
MonitorElementmeESBunchShape_ [nBunch]
 
MonitorElementmeESShape_
 
MonitorElementmeESShapeRatio_
 
std::string outputFile_
 
std::vector< CLHEP::HepRandomEngine * > randomEngines_
 
CaloHitResponsetheEBResponse
 
const EBShapetheEBShape
 
CaloHitResponsetheEEResponse
 
const EEShapetheEEShape
 
CaloHitResponsetheESResponse
 
ESShapetheESShape
 
const CaloGeometrytheGeometry
 
int theMaxBunch
 
int theMinBunch
 
const EcalSimParameterMaptheParameterMap
 
const EcalPedestalsthePedestals
 
bool verbose_
 

Static Private Attributes

static const int nBunch = 21
 

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, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
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::NoCacheglobalBeginLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, LuminosityBlockContext const *)
 
static std::shared_ptr< dqmDetails::NoCacheglobalBeginRunSummary (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 75 of file EcalMixingModuleValidation.h.

Member Typedef Documentation

typedef std::map<uint32_t,float,std::less<uint32_t> > EcalMixingModuleValidation::MapType
private

Definition at line 77 of file EcalMixingModuleValidation.h.

Constructor & Destructor Documentation

EcalMixingModuleValidation::EcalMixingModuleValidation ( const edm::ParameterSet ps)

Constructor.

Definition at line 19 of file EcalMixingModuleValidation.cc.

References barrelADCtoGeV_, ecalEBTriggerPrimitiveDigis_cfi::binOfMaximum, ecalSimParameterMap_cff::doPhotostatistics, endcapADCtoGeV_, gainConv_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), mps_fire::i, meEBbunchCrossing_, meEBBunchShape_, meEBDigiMixRatiogt100ADC_, meEBDigiMixRatioOriggt50pc_, meEBShape_, meEBShapeRatio_, meEEbunchCrossing_, meEEBunchShape_, meEEDigiMixRatiogt100ADC_, meEEDigiMixRatioOriggt40pc_, meEEShape_, meEEShapeRatio_, meESbunchCrossing_, meESBunchShape_, meESShape_, meESShapeRatio_, nBunch, ecalSimParameterMap_cff::photoelectronsToAnalogBarrel, ecalSimParameterMap_cff::photoelectronsToAnalogEndcap, ecalSimParameterMap_cff::readoutFrameSize, ecalSimParameterMap_cff::samplingFactor, ecalSimParameterMap_cff::simHitToPhotoelectronsBarrel, ecalSimParameterMap_cff::simHitToPhotoelectronsEndcap, ecalSimParameterMap_cff::syncPhase, theEBResponse, theEBShape, theEEResponse, theEEShape, theESResponse, theESShape, theMaxBunch, theMinBunch, theParameterMap, ecalSimParameterMap_cff::timePhase, and verbose_.

19  :
20  HepMCToken_( consumes<edm::HepMCProduct>( edm::InputTag( ps.getParameter<std::string>( "moduleLabelMC" ) ) ) ),
21  EBdigiCollectionToken_( consumes<EBDigiCollection>( ps.getParameter<edm::InputTag>( "EBdigiCollection" ) ) ),
22  EEdigiCollectionToken_( consumes<EEDigiCollection>( ps.getParameter<edm::InputTag>( "EEdigiCollection" ) ) ),
23  ESdigiCollectionToken_( consumes<ESDigiCollection>( ps.getParameter<edm::InputTag>( "ESdigiCollection" ) ) ),
25  , ps.getParameter<std::string>( "hitsProducer" ) + std::string( "EcalHitsEB" )
26  )
27  )
28  ),
30  , ps.getParameter<std::string>( "hitsProducer" ) + std::string( "EcalHitsEE" )
31  )
32  )
33  ),
35  , ps.getParameter<std::string>( "hitsProducer" ) + std::string( "EcalHitsES" )
36  )
37  )
38  ) {
39 
40 
41  // needed for MixingModule checks
42 
43  double simHitToPhotoelectronsBarrel = ps.getParameter<double>("simHitToPhotoelectronsBarrel");
44  double simHitToPhotoelectronsEndcap = ps.getParameter<double>("simHitToPhotoelectronsEndcap");
45  double photoelectronsToAnalogBarrel = ps.getParameter<double>("photoelectronsToAnalogBarrel");
46  double photoelectronsToAnalogEndcap = ps.getParameter<double>("photoelectronsToAnalogEndcap");
47  double samplingFactor = ps.getParameter<double>("samplingFactor");
48  double timePhase = ps.getParameter<double>("timePhase");
49  int readoutFrameSize = ps.getParameter<int>("readoutFrameSize");
50  int binOfMaximum = ps.getParameter<int>("binOfMaximum");
51  bool doPhotostatistics = ps.getParameter<bool>("doPhotostatistics");
52  bool syncPhase = ps.getParameter<bool>("syncPhase");
53 
54  doPhotostatistics = false;
55 
56  theParameterMap = new EcalSimParameterMap(simHitToPhotoelectronsBarrel, simHitToPhotoelectronsEndcap,
57  photoelectronsToAnalogBarrel, photoelectronsToAnalogEndcap,
58  samplingFactor, timePhase, readoutFrameSize, binOfMaximum,
59  doPhotostatistics, syncPhase);
60  //theEcalShape = new EcalShape(timePhase);
61 
62  //theEcalResponse = new CaloHitResponse(theParameterMap, theEcalShape);
63 
64 /*
65  int ESGain = ps.getParameter<int>("ESGain");
66  double ESNoiseSigma = ps.getParameter<double> ("ESNoiseSigma");
67  int ESBaseline = ps.getParameter<int>("ESBaseline");
68  double ESMIPADC = ps.getParameter<double>("ESMIPADC");
69  double ESMIPkeV = ps.getParameter<double>("ESMIPkeV");
70 */
71 
72  theESShape = new ESShape();
73  theEBShape = new EBShape();
74  theEEShape = new EEShape();
75 
79 
80 // double effwei = 1.;
81 
82 /*
83  if (ESGain == 0)
84  effwei = 1.45;
85  else if (ESGain == 1)
86  effwei = 0.9066;
87  else if (ESGain == 2)
88  effwei = 0.8815;
89 
90  esBaseline_ = (double)ESBaseline;
91  esADCtokeV_ = 1000000.*ESMIPADC/ESMIPkeV;
92  esThreshold_ = 3.*effwei*ESNoiseSigma/esADCtokeV_;
93 */
94  theMinBunch = -10;
95  theMaxBunch = 10;
96 
97 
98  // verbosity switch
99  verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
100 
101  gainConv_[1] = 1.;
102  gainConv_[2] = 2.;
103  gainConv_[3] = 12.;
104  gainConv_[0] = 12.;
105  barrelADCtoGeV_ = 0.035;
106  endcapADCtoGeV_ = 0.06;
107 
110 
113 
114  meEBbunchCrossing_ = 0;
115  meEEbunchCrossing_ = 0;
116  meESbunchCrossing_ = 0;
117 
118  for ( int i = 0 ; i < nBunch ; i++ ) {
119  meEBBunchShape_[i] = 0;
120  meEEBunchShape_[i] = 0;
121  meESBunchShape_[i] = 0;
122  }
123 
124  meEBShape_ = 0;
125  meEEShape_ = 0;
126  meESShape_ = 0;
127 
128  meEBShapeRatio_ = 0;
129  meEEShapeRatio_ = 0;
130  meESShapeRatio_ = 0;
131 
132 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitESToken_
edm::EDGetTokenT< edm::HepMCProduct > HepMCToken_
MonitorElement * meEEBunchShape_[nBunch]
edm::EDGetTokenT< EBDigiCollection > EBdigiCollectionToken_
MonitorElement * meEBBunchShape_[nBunch]
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitEEToken_
MonitorElement * meESBunchShape_[nBunch]
Creates electronics signals from hits.
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitEBToken_
Definition: EBShape.h:6
std::map< int, double, std::less< int > > gainConv_
const EcalSimParameterMap * theParameterMap
edm::EDGetTokenT< ESDigiCollection > ESdigiCollectionToken_
edm::EDGetTokenT< EEDigiCollection > EEdigiCollectionToken_
Definition: EEShape.h:6
EcalMixingModuleValidation::~EcalMixingModuleValidation ( )

Destructor.

Definition at line 134 of file EcalMixingModuleValidation.cc.

134 {}

Member Function Documentation

void EcalMixingModuleValidation::analyze ( edm::Event const &  e,
edm::EventSetup const &  c 
)
overrideprotectedvirtual

Analyze.

Implements edm::stream::EDAnalyzerBase.

Definition at line 286 of file EcalMixingModuleValidation.cc.

References ESSample::adc(), EcalMGPASample::adc(), barrelADCtoGeV_, cosmicBasicClusters_cfi::barrelHits, checkPedestals(), computeSDBunchDigi(), crossingFramePCaloHitEBToken_, crossingFramePCaloHitEEToken_, crossingFramePCaloHitESToken_, EBdigiCollectionToken_, EcalBarrel, EcalEndcap, EcalPreshower, EEdigiCollectionToken_, endcapADCtoGeV_, cosmicBasicClusters_cfi::endcapHits, esADCtokeV_, esBaseline_, ESdigiCollectionToken_, esThreshold_, MonitorElement::Fill(), ESCondObjectContainer< T >::find(), findPedestal(), gainConv_, EcalMGPASample::gainId(), edm::Event::getByToken(), edm::HepMCProduct::GetEvent(), ESCondObjectContainer< T >::getMap(), HepMCToken_, mps_fire::i, ESDataFrame::id(), EEDataFrame::id(), EBDataFrame::id(), EBDetId::ieta(), createfilelist::int, EBDetId::iphi(), gedGsfElectrons_cfi::isBarrel, GeomDetEnumerators::isEndcap(), edm::HandleBase::isValid(), EEDetId::ix(), EEDetId::iy(), LogDebug, m_ESeffwei, m_ESmips, m_ESpeds, ESDataFrame::MAXSAMPLES, EcalDataFrame::MAXSAMPLES, meEBbunchCrossing_, meEBDigiMixRatiogt100ADC_, meEBDigiMixRatioOriggt50pc_, meEBShape_, meEEbunchCrossing_, meEEDigiMixRatiogt100ADC_, meEEDigiMixRatioOriggt40pc_, meEEShape_, meESbunchCrossing_, meESShape_, ecalTB2006H4_GenSimDigiReco_cfg::mySample, AlCaHLTBitMon_ParallelJobs::p, ESDetId::plane(), dataAnalyzerFineBiningParameters_cff::Pmax, gedPhotons_cfi::preshowerHits, edm::Handle< T >::product(), randomEngine(), DetId::rawId(), edm::DataFrameContainer::reserve(), simplePhotonAnalyzer_cfi::sample, ESDetId::six(), ESDetId::siy(), ESDataFrame::size(), EcalDataFrame::size(), edm::DataFrameContainer::size(), edm::Event::streamID(), ESDetId::strip(), ESDetId::zside(), and EEDetId::zside().

286  {
287 
288  //LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event();
289 
290  checkPedestals(c);
291 
292  std::vector<SimTrack> theSimTracks;
293  std::vector<SimVertex> theSimVertexes;
294 
296  edm::Handle<CrossingFrame<PCaloHit> > crossingFrame;
300 
301 
302  bool skipMC = false;
303  e.getByToken( HepMCToken_, MCEvt );
304  if (!MCEvt.isValid()) { skipMC = true; }
305 
306  const EBDigiCollection* EBdigis =0;
307  const EEDigiCollection* EEdigis =0;
308  const ESDigiCollection* ESdigis =0;
309 
310  bool isBarrel = true;
311  e.getByToken( EBdigiCollectionToken_, EcalDigiEB );
312  if (EcalDigiEB.isValid()) {
313  EBdigis = EcalDigiEB.product();
314  LogDebug("DigiInfo") << "total # EBdigis: " << EBdigis->size() ;
315  if ( EBdigis->size() == 0 ) isBarrel = false;
316  } else {
317  isBarrel = false;
318  }
319 
320  bool isEndcap = true;
321  e.getByToken( EEdigiCollectionToken_, EcalDigiEE );
322  if (EcalDigiEE.isValid()) {
323  EEdigis = EcalDigiEE.product();
324  LogDebug("DigiInfo") << "total # EEdigis: " << EEdigis->size() ;
325  if ( EEdigis->size() == 0 ) isEndcap = false;
326  } else {
327  isEndcap = false;
328  }
329 
330  bool isPreshower = true;
331  e.getByToken( ESdigiCollectionToken_, EcalDigiES );
332  if (EcalDigiES.isValid()) {
333  ESdigis = EcalDigiES.product();
334  LogDebug("DigiInfo") << "total # ESdigis: " << ESdigis->size() ;
335  if ( ESdigis->size() == 0 ) isPreshower = false;
336  } else {
337  isPreshower = false;
338  }
339 
340  double theGunEnergy = 0.;
341  if ( ! skipMC ) {
342  for ( HepMC::GenEvent::particle_const_iterator p = MCEvt->GetEvent()->particles_begin();
343  p != MCEvt->GetEvent()->particles_end(); ++p ) {
344 
345  theGunEnergy = (*p)->momentum().e();
346  }
347  }
348  // in case no HepMC available, assume an arbitrary average energy for an interesting "gun"
349  else {
350  edm::LogWarning("DigiInfo") << "No HepMC available, using 30 GeV as giun energy";
351  theGunEnergy = 30.;
352  }
353 
354  // BARREL
355 
356  // loop over simHits
357 
358  if ( isBarrel ) {
359 
360  e.getByToken( crossingFramePCaloHitEBToken_, crossingFrame );
361  const MixCollection<PCaloHit> barrelHits(crossingFrame.product());
362 
363  MapType ebSignalSimMap;
364 
365  double ebSimThreshold = 0.5*theGunEnergy;
366 
367  for ( auto const &iHit : barrelHits ) {
368 
369  EBDetId ebid = EBDetId(iHit.id()) ;
370 
371  LogDebug("HitInfo")
372  << " CaloHit " << iHit.getName() << "\n"
373  << " DetID = "<<iHit.id()<< " EBDetId = " << ebid.ieta() << " " << ebid.iphi() << "\n"
374  << " Time = " << iHit.time() << " Event id. = " << iHit.eventId().rawId() << "\n"
375  << " Track Id = " << iHit.geantTrackId() << "\n"
376  << " Energy = " << iHit.energy();
377 
378  uint32_t crystid = ebid.rawId();
379 
380  if ( iHit.eventId().rawId() == 0 ) ebSignalSimMap[crystid] += iHit.energy();
381 
382  if ( meEBbunchCrossing_ ) meEBbunchCrossing_->Fill(iHit.eventId().bunchCrossing());
383 
384  }
385 
386  // loop over Digis
387 
388  const EBDigiCollection * barrelDigi = EcalDigiEB.product () ;
389 
390  std::vector<double> ebAnalogSignal ;
391  std::vector<double> ebADCCounts ;
392  std::vector<double> ebADCGains ;
393  ebAnalogSignal.reserve(EBDataFrame::MAXSAMPLES);
394  ebADCCounts.reserve(EBDataFrame::MAXSAMPLES);
395  ebADCGains.reserve(EBDataFrame::MAXSAMPLES);
396 
397  for (unsigned int digis=0; digis<EcalDigiEB->size(); ++digis) {
398 
399  EBDataFrame ebdf=(*barrelDigi)[digis];
400  int nrSamples=ebdf.size();
401 
402  EBDetId ebid = ebdf.id () ;
403 
404  double Emax = 0. ;
405  int Pmax = 0 ;
406 
407  for (int sample = 0 ; sample < nrSamples; ++sample) {
408  ebAnalogSignal[sample] = 0.;
409  ebADCCounts[sample] = 0.;
410  ebADCGains[sample] = -1.;
411  }
412 
413  for (int sample = 0 ; sample < nrSamples; ++sample) {
414 
416 
417  ebADCCounts[sample] = (mySample.adc()) ;
418  ebADCGains[sample] = (mySample.gainId ()) ;
419  ebAnalogSignal[sample] = (ebADCCounts[sample]*gainConv_[(int)ebADCGains[sample]]*barrelADCtoGeV_);
420  if (Emax < ebAnalogSignal[sample] ) {
421  Emax = ebAnalogSignal[sample] ;
422  Pmax = sample ;
423  }
424  LogDebug("DigiInfo") << "EB sample " << sample << " ADC counts = " << ebADCCounts[sample] << " Gain Id = " << ebADCGains[sample] << " Analog eq = " << ebAnalogSignal[sample];
425  }
426  double pedestalPreSampleAnalog = 0.;
427  findPedestal( ebid, (int)ebADCGains[Pmax] , pedestalPreSampleAnalog);
428  pedestalPreSampleAnalog *= gainConv_[(int)ebADCGains[Pmax]]*barrelADCtoGeV_;
429  double Erec = Emax - pedestalPreSampleAnalog;
430 
431  if ( ebSignalSimMap[ebid.rawId()] != 0. ) {
432  LogDebug("DigiInfo") << " Digi / Signal Hit = " << Erec << " / " << ebSignalSimMap[ebid.rawId()] << " gainConv " << gainConv_[(int)ebADCGains[Pmax]];
433  if ( Erec > 100.*barrelADCtoGeV_ && meEBDigiMixRatiogt100ADC_ ) meEBDigiMixRatiogt100ADC_->Fill( Erec/ebSignalSimMap[ebid.rawId()] );
434  if ( ebSignalSimMap[ebid.rawId()] > ebSimThreshold && meEBDigiMixRatioOriggt50pc_ ) meEBDigiMixRatioOriggt50pc_->Fill( Erec/ebSignalSimMap[ebid.rawId()] );
435  if ( ebSignalSimMap[ebid.rawId()] > ebSimThreshold && meEBShape_ ) {
436  for ( int i = 0; i < 10 ; i++ ) {
437  pedestalPreSampleAnalog = 0.;
438  findPedestal( ebid, (int)ebADCGains[i] , pedestalPreSampleAnalog);
439  pedestalPreSampleAnalog *= gainConv_[(int)ebADCGains[i]]*barrelADCtoGeV_;
440  meEBShape_->Fill(i, ebAnalogSignal[i]-pedestalPreSampleAnalog );
441  }
442  }
443  }
444 
445  }
446 
447  EcalSubdetector thisDet = EcalBarrel;
448  computeSDBunchDigi(c, barrelHits, ebSignalSimMap, thisDet, ebSimThreshold, randomEngine(e.streamID()));
449  }
450 
451 
452  // ENDCAP
453 
454  // loop over simHits
455 
456  if ( isEndcap ) {
457 
458  e.getByToken( crossingFramePCaloHitEEToken_, crossingFrame );
459  const MixCollection<PCaloHit> endcapHits(crossingFrame.product());
460  MapType eeSignalSimMap;
461 
462  double eeSimThreshold = 0.4*theGunEnergy;
463 
464  for ( auto const & iHit : endcapHits ) {
465 
466  EEDetId eeid = EEDetId(iHit.id()) ;
467 
468  LogDebug("HitInfo")
469  << " CaloHit " << iHit.getName() << "\n"
470  << " DetID = "<<iHit.id()<< " EEDetId side = " << eeid.zside() << " = " << eeid.ix() << " " << eeid.iy() << "\n"
471  << " Time = " << iHit.time() << " Event id. = " << iHit.eventId().rawId() << "\n"
472  << " Track Id = " << iHit.geantTrackId() << "\n"
473  << " Energy = " << iHit.energy();
474 
475  uint32_t crystid = eeid.rawId();
476 
477  if ( iHit.eventId().rawId() == 0 ) eeSignalSimMap[crystid] += iHit.energy();
478 
479  if ( meEEbunchCrossing_ ) meEEbunchCrossing_->Fill(iHit.eventId().bunchCrossing());
480 
481  }
482 
483  // loop over Digis
484 
485  const EEDigiCollection * endcapDigi = EcalDigiEE.product () ;
486 
487  std::vector<double> eeAnalogSignal ;
488  std::vector<double> eeADCCounts ;
489  std::vector<double> eeADCGains ;
490  eeAnalogSignal.reserve(EEDataFrame::MAXSAMPLES);
491  eeADCCounts.reserve(EEDataFrame::MAXSAMPLES);
492  eeADCGains.reserve(EEDataFrame::MAXSAMPLES);
493 
494  for (unsigned int digis=0; digis<EcalDigiEE->size(); ++digis) {
495 
496  EEDataFrame eedf=(*endcapDigi)[digis];
497  int nrSamples=eedf.size();
498 
499  EEDetId eeid = eedf.id () ;
500 
501  double Emax = 0. ;
502  int Pmax = 0 ;
503 
504  for (int sample = 0 ; sample < nrSamples; ++sample) {
505  eeAnalogSignal[sample] = 0.;
506  eeADCCounts[sample] = 0.;
507  eeADCGains[sample] = -1.;
508  }
509 
510  for (int sample = 0 ; sample < nrSamples; ++sample) {
511 
512  EcalMGPASample mySample = eedf[sample];
513 
514  eeADCCounts[sample] = (mySample.adc()) ;
515  eeADCGains[sample] = (mySample.gainId()) ;
516  eeAnalogSignal[sample] = (eeADCCounts[sample]*gainConv_[(int)eeADCGains[sample]]*endcapADCtoGeV_);
517  if (Emax < eeAnalogSignal[sample] ) {
518  Emax = eeAnalogSignal[sample] ;
519  Pmax = sample ;
520  }
521  LogDebug("DigiInfo") << "EE sample " << sample << " ADC counts = " << eeADCCounts[sample] << " Gain Id = " << eeADCGains[sample] << " Analog eq = " << eeAnalogSignal[sample];
522  }
523  double pedestalPreSampleAnalog = 0.;
524  findPedestal( eeid, (int)eeADCGains[Pmax] , pedestalPreSampleAnalog);
525  pedestalPreSampleAnalog *= gainConv_[(int)eeADCGains[Pmax]]*endcapADCtoGeV_;
526  double Erec = Emax - pedestalPreSampleAnalog;
527 
528  if ( eeSignalSimMap[eeid.rawId()] != 0. ) {
529  LogDebug("DigiInfo") << " Digi / Signal Hit = " << Erec << " / " << eeSignalSimMap[eeid.rawId()] << " gainConv " << gainConv_[(int)eeADCGains[Pmax]];
530  if ( Erec > 100.*endcapADCtoGeV_ && meEEDigiMixRatiogt100ADC_ ) meEEDigiMixRatiogt100ADC_->Fill( Erec/eeSignalSimMap[eeid.rawId()] );
531  if ( eeSignalSimMap[eeid.rawId()] > eeSimThreshold && meEEDigiMixRatioOriggt40pc_ ) meEEDigiMixRatioOriggt40pc_->Fill( Erec/eeSignalSimMap[eeid.rawId()] );
532  if ( eeSignalSimMap[eeid.rawId()] > eeSimThreshold && meEBShape_ ) {
533  for ( int i = 0; i < 10 ; i++ ) {
534  pedestalPreSampleAnalog = 0.;
535  findPedestal( eeid, (int)eeADCGains[i] , pedestalPreSampleAnalog);
536  pedestalPreSampleAnalog *= gainConv_[(int)eeADCGains[i]]*endcapADCtoGeV_;
537  meEEShape_->Fill(i, eeAnalogSignal[i]-pedestalPreSampleAnalog );
538  }
539  }
540  }
541  }
542 
543  EcalSubdetector thisDet = EcalEndcap;
544  computeSDBunchDigi(c, endcapHits, eeSignalSimMap, thisDet, eeSimThreshold, randomEngine(e.streamID()));
545  }
546 
547  if ( isPreshower) {
548 
549  e.getByToken(crossingFramePCaloHitESToken_, crossingFrame );
550  const MixCollection<PCaloHit> preshowerHits(crossingFrame.product());
551 
552  MapType esSignalSimMap;
553 
554  for ( auto const & iHit : preshowerHits ) {
555 
556  ESDetId esid = ESDetId(iHit.id()) ;
557 
558  LogDebug("HitInfo")
559  << " CaloHit " << iHit.getName() << "\n"
560  << " DetID = "<<iHit.id()<< "ESDetId: z side " << esid.zside() << " plane " << esid.plane() << esid.six() << ',' << esid.siy() << ':' << esid.strip() << "\n"
561  << " Time = " << iHit.time() << " Event id. = " << iHit.eventId().rawId() << "\n"
562  << " Track Id = " << iHit.geantTrackId() << "\n"
563  << " Energy = " << iHit.energy();
564 
565  uint32_t stripid = esid.rawId();
566 
567  if ( iHit.eventId().rawId() == 0 ) esSignalSimMap[stripid] += iHit.energy();
568 
569  if ( meESbunchCrossing_ ) meESbunchCrossing_->Fill(iHit.eventId().bunchCrossing());
570 
571  // loop over Digis
572 
573  const ESDigiCollection * preshowerDigi = EcalDigiES.product () ;
574 
575  std::vector<double> esADCCounts ;
576  std::vector<double> esADCAnalogSignal ;
577  esADCCounts.reserve(ESDataFrame::MAXSAMPLES);
578  esADCAnalogSignal.reserve(ESDataFrame::MAXSAMPLES);
579 
580  for (unsigned int digis=0; digis<EcalDigiES->size(); ++digis) {
581 
582  ESDataFrame esdf=(*preshowerDigi)[digis];
583  int nrSamples=esdf.size();
584 
585  ESDetId esid = esdf.id () ;
586 
587  for (int sample = 0 ; sample < nrSamples; ++sample) {
588  esADCCounts[sample] = 0.;
589  esADCAnalogSignal[sample] = 0.;
590  }
591 
592  for (int sample = 0 ; sample < nrSamples; ++sample) {
593 
594  ESSample mySample = esdf[sample];
595 
596  esADCCounts[sample] = (mySample.adc()) ;
597  esBaseline_ = m_ESpeds->find(esid)->getMean() ;
598  const double factor ( esADCtokeV_/(*(m_ESmips->getMap().find(esid)) ) ) ;
599  esThreshold_ = 3.*m_ESeffwei*( (*m_ESpeds->find(esid)).getRms())/factor;
600  esADCAnalogSignal[sample] = (esADCCounts[sample]-esBaseline_)/factor;
601  }
602  LogDebug("DigiInfo") << "Preshower Digi for ESDetId: z side " << esid.zside() << " plane " << esid.plane() << esid.six() << ',' << esid.siy() << ':' << esid.strip();
603  for ( int i = 0; i < 3 ; i++ ) {
604  LogDebug("DigiInfo") << "sample " << i << " ADC = " << esADCCounts[i] << " Analog eq = " << esADCAnalogSignal[i];
605  }
606 
607  if ( esSignalSimMap[esid.rawId()] > esThreshold_ && meESShape_ ) {
608  for ( int i = 0; i < 3 ; i++ ) {
609  meESShape_->Fill(i, esADCAnalogSignal[i] );
610  }
611  }
612 
613  }
614 
615  }
616 
617  EcalSubdetector thisDet = EcalPreshower;
618  computeSDBunchDigi(c, preshowerHits, esSignalSimMap, thisDet, esThreshold_, randomEngine(e.streamID()));
619 
620  }
621 
622 }
#define LogDebug(id)
void checkPedestals(const edm::EventSetup &c)
int strip() const
Definition: ESDetId.h:53
const ESIntercalibConstants * m_ESmips
int ix() const
Definition: EEDetId.h:76
key_type id() const
Definition: EBDataFrame.h:31
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitESToken_
void findPedestal(const DetId &detId, int gainId, double &ped) const
edm::EDGetTokenT< edm::HepMCProduct > HepMCToken_
const ESDetId & id() const
Definition: ESDataFrame.h:21
const self & getMap() const
edm::EDGetTokenT< EBDigiCollection > EBdigiCollectionToken_
int six() const
Definition: ESDetId.h:49
int size() const
Definition: ESDataFrame.h:23
int gainId() const
get the gainId (2 bits)
int size() const
Definition: EcalDataFrame.h:26
void Fill(long long x)
int iphi() const
get the crystal iphi
Definition: EBDetId.h:53
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitEEToken_
int siy() const
Definition: ESDetId.h:51
static const int MAXSAMPLES
Definition: ESDataFrame.h:32
CLHEP::HepRandomEngine * randomEngine(edm::StreamID const &streamID)
const_iterator find(uint32_t rawId) const
int zside() const
Definition: EEDetId.h:70
int iy() const
Definition: EEDetId.h:82
int ieta() const
get the crystal ieta
Definition: EBDetId.h:51
int zside() const
Definition: ESDetId.h:45
bool isValid() const
Definition: HandleBase.h:74
edm::EDGetTokenT< CrossingFrame< PCaloHit > > crossingFramePCaloHitEBToken_
bool isEndcap(GeomDetEnumerators::SubDetector m)
void computeSDBunchDigi(const edm::EventSetup &eventSetup, const MixCollection< PCaloHit > &theHits, MapType &ebSignalSimMap, const EcalSubdetector &thisDet, const double &theSimThreshold, CLHEP::HepRandomEngine *)
key_type id() const
Definition: EEDataFrame.h:28
std::map< int, double, std::less< int > > gainConv_
void reserve(size_t isize)
std::map< uint32_t, float, std::less< uint32_t > > MapType
edm::EDGetTokenT< ESDigiCollection > ESdigiCollectionToken_
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:38
T const * product() const
Definition: Handle.h:81
int plane() const
Definition: ESDetId.h:47
int adc() const
get the ADC sample (singed 16 bits)
Definition: ESSample.h:18
EcalSubdetector
static const int MAXSAMPLES
Definition: EcalDataFrame.h:48
edm::EDGetTokenT< EEDigiCollection > EEdigiCollectionToken_
int adc() const
get the ADC sample (12 bits)
void EcalMixingModuleValidation::bookHistograms ( DQMStore::IBooker i,
edm::Run const &  ,
edm::EventSetup const &   
)
overridevirtual

Implements DQMEDAnalyzer.

Definition at line 142 of file EcalMixingModuleValidation.cc.

References DQMStore::IBooker::book1D(), DQMStore::IBooker::bookProfile(), trackerHits::histo, mps_fire::i, meEBbunchCrossing_, meEBBunchShape_, meEBDigiMixRatiogt100ADC_, meEBDigiMixRatioOriggt50pc_, meEBShape_, meEBShapeRatio_, meEEbunchCrossing_, meEEBunchShape_, meEEDigiMixRatiogt100ADC_, meEEDigiMixRatioOriggt40pc_, meEEShape_, meEEShapeRatio_, meESbunchCrossing_, meESBunchShape_, meESShape_, meESShapeRatio_, nBunch, and DQMStore::IBooker::setCurrentFolder().

142  {
143 
144  Char_t histo[200];
145 
146  ibooker.setCurrentFolder("EcalDigisV/EcalDigiTask");
147 
148  sprintf (histo, "EcalDigiTask Barrel maximum Digi over sim signal ratio gt 100 ADC" ) ;
149  meEBDigiMixRatiogt100ADC_ = ibooker.book1D(histo, histo, 200, 0., 100.) ;
150 
151  sprintf (histo, "EcalDigiTask Endcap maximum Digi over sim signal ratio gt 100 ADC" ) ;
152  meEEDigiMixRatiogt100ADC_ = ibooker.book1D(histo, histo, 200, 0., 100.) ;
153 
154  sprintf (histo, "EcalDigiTask Barrel maximum Digi over sim signal ratio signal gt 50pc gun" ) ;
155  meEBDigiMixRatioOriggt50pc_ = ibooker.book1D(histo, histo, 200, 0., 100.) ;
156 
157  sprintf (histo, "EcalDigiTask Endcap maximum Digi over sim signal ratio signal gt 40pc gun" ) ;
158  meEEDigiMixRatioOriggt40pc_ = ibooker.book1D(histo, histo, 200, 0., 100.) ;
159 
160  sprintf (histo, "EcalDigiTask Barrel bunch crossing" ) ;
161  meEBbunchCrossing_ = ibooker.book1D(histo, histo, 20, -10., 10.) ;
162 
163  sprintf (histo, "EcalDigiTask Endcap bunch crossing" ) ;
164  meEEbunchCrossing_ = ibooker.book1D(histo, histo, 20, -10., 10.) ;
165 
166  sprintf (histo, "EcalDigiTask Preshower bunch crossing" ) ;
167  meESbunchCrossing_ = ibooker.book1D(histo, histo, 20, -10., 10.) ;
168 
169  for ( int i = 0 ; i < nBunch ; i++ ) {
170 
171  sprintf (histo, "EcalDigiTask Barrel shape bunch crossing %02d", i-10 );
172  meEBBunchShape_[i] = ibooker.bookProfile(histo, histo, 10, 0, 10, 4000, 0., 400.);
173 
174  sprintf (histo, "EcalDigiTask Endcap shape bunch crossing %02d", i-10 );
175  meEEBunchShape_[i] = ibooker.bookProfile(histo, histo, 10, 0, 10, 4000, 0., 400.);
176 
177  sprintf (histo, "EcalDigiTask Preshower shape bunch crossing %02d", i-10 );
178  meESBunchShape_[i] = ibooker.bookProfile(histo, histo, 3, 0, 3, 4000, 0., 400.);
179 
180  }
181 
182  sprintf (histo, "EcalDigiTask Barrel shape digi");
183  meEBShape_ = ibooker.bookProfile(histo, histo, 10, 0, 10, 4000, 0., 2000.);
184 
185  sprintf (histo, "EcalDigiTask Endcap shape digi");
186  meEEShape_ = ibooker.bookProfile(histo, histo, 10, 0, 10, 4000, 0., 2000.);
187 
188  sprintf (histo, "EcalDigiTask Preshower shape digi");
189  meESShape_ = ibooker.bookProfile(histo, histo, 3, 0, 3, 4000, 0., 2000.);
190 
191  sprintf (histo, "EcalDigiTask Barrel shape digi ratio");
192  meEBShapeRatio_ = ibooker.book1D(histo, histo, 10, 0, 10.);
193 
194  sprintf (histo, "EcalDigiTask Endcap shape digi ratio");
195  meEEShapeRatio_ = ibooker.book1D(histo, histo, 10, 0, 10.);
196 
197  sprintf (histo, "EcalDigiTask Preshower shape digi ratio");
198  meESShapeRatio_ = ibooker.book1D(histo, histo, 3, 0, 3.);
199 
200 }
MonitorElement * meEEBunchShape_[nBunch]
MonitorElement * meEBBunchShape_[nBunch]
MonitorElement * meESBunchShape_[nBunch]
void EcalMixingModuleValidation::bunchSumTest ( std::vector< MonitorElement * > &  theBunches,
MonitorElement *&  theTotal,
MonitorElement *&  theRatio,
int  nSample 
)
private

Definition at line 228 of file EcalMixingModuleValidation.cc.

References gather_cfg::cout, MonitorElement::getBinContent(), MonitorElement::getBinError(), funct::pow(), particleFlowDisplacedVertex_cfi::ratio, MonitorElement::setBinContent(), MonitorElement::setBinError(), mathSSE::sqrt(), theMaxBunch, theMinBunch, and pileupDistInMC::total.

Referenced by endRun().

229 {
230 
231  std::vector<double> bunchSum;
232  bunchSum.reserve(nSample);
233  std::vector<double> bunchSumErro;
234  bunchSumErro.reserve(nSample);
235  std::vector<double> total;
236  total.reserve(nSample);
237  std::vector<double> totalErro;
238  totalErro.reserve(nSample);
239  std::vector<double> ratio;
240  ratio.reserve(nSample);
241  std::vector<double> ratioErro;
242  ratioErro.reserve(nSample);
243 
244 
245  for ( int iEl = 0 ; iEl < nSample ; iEl++ ) {
246  bunchSum[iEl] = 0.;
247  bunchSumErro[iEl] = 0.;
248  total[iEl] = 0.;
249  totalErro[iEl] = 0.;
250  ratio[iEl] = 0.;
251  ratioErro[iEl] = 0.;
252  }
253 
254  for ( int iSample = 0 ; iSample < nSample ; iSample++ ) {
255 
256  total[iSample] += theTotal->getBinContent(iSample+1);
257  totalErro[iSample] += theTotal->getBinError(iSample+1);
258 
259  for ( int iBunch = theMinBunch; iBunch <= theMaxBunch; iBunch++ ) {
260 
261  int iHisto = iBunch - theMinBunch;
262 
263  bunchSum[iSample] += theBunches[iHisto]->getBinContent(iSample+1);
264  bunchSumErro[iSample] += pow(theBunches[iHisto]->getBinError(iSample+1),2);
265 
266  }
267  bunchSumErro[iSample] = sqrt(bunchSumErro[iSample]);
268 
269  if ( bunchSum[iSample] > 0. ) {
270  ratio[iSample] = total[iSample]/bunchSum[iSample];
271  ratioErro[iSample] = sqrt(pow(totalErro[iSample]/bunchSum[iSample],2)+
272  pow((total[iSample]*bunchSumErro[iSample])/(bunchSum[iSample]*bunchSum[iSample]),2));
273  }
274 
275  std::cout << " Sample = " << iSample << " Total = " << total[iSample] << " +- " << totalErro[iSample] << "\n"
276  << " Sum = " << bunchSum[iSample] << " +- " << bunchSumErro[iSample] << "\n"
277  << " Ratio = " << ratio[iSample] << " +- " << ratioErro[iSample] << std::endl;
278 
279  theRatio->setBinContent(iSample+1, (float)ratio[iSample]);
280  theRatio->setBinError(iSample+1, (float)ratioErro[iSample]);
281 
282  }
283 
284 }
void setBinContent(int binx, double content)
set content of bin (1-D)
T sqrt(T t)
Definition: SSEVec.h:18
void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
double getBinError(int binx) const
get uncertainty on content of bin (1-D) - See TH1::GetBinError for details
double getBinContent(int binx) const
get content of bin (1-D)
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
void EcalMixingModuleValidation::checkCalibrations ( edm::EventSetup const &  c)
private

Definition at line 624 of file EcalMixingModuleValidation.cc.

References barrelADCtoGeV_, endcapADCtoGeV_, esADCtokeV_, EcalMGPAGainRatio::gain12Over6(), EcalMGPAGainRatio::gain6Over1(), gainConv_, edm::EventSetup::get(), EcalADCToGeVConstant::getEBValue(), EcalADCToGeVConstant::getEEValue(), ESGain::getESGain(), ESMIPToGeVConstant::getESValueHigh(), ESMIPToGeVConstant::getESValueLow(), createfilelist::int, LogDebug, m_ESeffwei, m_ESgain, m_ESmips, m_ESpeds, edm::ESHandle< T >::product(), ESShape::setGain(), and theESShape.

Referenced by dqmBeginRun().

624  {
625 
626  // ADC -> GeV Scale
628  eventSetup.get<EcalADCToGeVConstantRcd>().get(pAgc);
629  const EcalADCToGeVConstant* agc = pAgc.product();
630 
631  EcalMGPAGainRatio * defaultRatios = new EcalMGPAGainRatio();
632 
633  gainConv_[1] = 1.;
634  gainConv_[2] = defaultRatios->gain12Over6() ;
635  gainConv_[3] = gainConv_[2]*(defaultRatios->gain6Over1()) ;
636  gainConv_[0] = gainConv_[2]*(defaultRatios->gain6Over1()) ;
637 
638  LogDebug("EcalDigi") << " Gains conversions: " << "\n" << " g1 = " << gainConv_[1] << "\n" << " g2 = " << gainConv_[2] << "\n" << " g3 = " << gainConv_[3];
639 
640  delete defaultRatios;
641 
642  const double barrelADCtoGeV_ = agc->getEBValue();
643  LogDebug("EcalDigi") << " Barrel GeV/ADC = " << barrelADCtoGeV_;
644  const double endcapADCtoGeV_ = agc->getEEValue();
645  LogDebug("EcalDigi") << " Endcap GeV/ADC = " << endcapADCtoGeV_;
646 
647 
648  // ES condition objects
649  edm::ESHandle<ESGain> esgain_;
651  edm::ESHandle<ESPedestals> esPedestals_;
653 
654  eventSetup.get<ESGainRcd>().get(esgain_);
655  eventSetup.get<ESMIPToGeVConstantRcd>().get(esMIPToGeV_);
656  eventSetup.get<ESPedestalsRcd>().get(esPedestals_);
657  eventSetup.get<ESIntercalibConstantsRcd>().get(esMIPs_);
658 
659  const ESGain *esgain = esgain_.product();
660  m_ESpeds = esPedestals_.product();
661  m_ESmips = esMIPs_.product();
662  const ESMIPToGeVConstant *esMipToGeV = esMIPToGeV_.product();
663  m_ESgain = (int) esgain->getESGain();
664  const double valESMIPToGeV = (m_ESgain == 1) ? esMipToGeV->getESValueLow() : esMipToGeV->getESValueHigh();
665 
667 
668  esADCtokeV_ = 1000000.*valESMIPToGeV ;
669 
670  m_ESeffwei = ( 0 == m_ESgain ? 1.45 :
671  ( 1 == m_ESgain ? 0.9066 :
672  ( 2 == m_ESgain ? 0.8815 : 1.0 ) ) ) ;
673 
674 }
#define LogDebug(id)
const ESIntercalibConstants * m_ESmips
Definition: ESGain.h:7
void setGain(const int gain)
Definition: ESShape.h:26
float getESValueLow() const
float gain6Over1() const
std::map< int, double, std::less< int > > gainConv_
float getESGain() const
Definition: ESGain.h:13
float gain12Over6() const
float getESValueHigh() const
T const * product() const
Definition: ESHandle.h:86
void EcalMixingModuleValidation::checkPedestals ( const edm::EventSetup c)
private

Definition at line 676 of file EcalMixingModuleValidation.cc.

References edm::EventSetup::get(), edm::ESHandle< T >::product(), and thePedestals.

Referenced by analyze().

677 {
678 
679  // Pedestals from event setup
680 
682  eventSetup.get<EcalPedestalsRcd>().get( dbPed );
683  thePedestals=dbPed.product();
684 
685 }
T const * product() const
Definition: ESHandle.h:86
void EcalMixingModuleValidation::computeSDBunchDigi ( const edm::EventSetup eventSetup,
const MixCollection< PCaloHit > &  theHits,
MapType ebSignalSimMap,
const EcalSubdetector thisDet,
const double &  theSimThreshold,
CLHEP::HepRandomEngine *  engine 
)
private

Definition at line 717 of file EcalMixingModuleValidation.cc.

References CaloHitResponse::clear(), DetId::Ecal, EcalBarrel, EcalEndcap, EcalPreshower, MonitorElement::Fill(), CaloHitResponse::findSignal(), edm::EventSetup::get(), CaloGeometry::getValidDetIds(), mps_fire::i, CaloSamples::id(), MessageLogger_cfi::limit, ESDataFrame::MAXSAMPLES, CaloSamples::MAXSAMPLES, meEBBunchShape_, meEEBunchShape_, meESBunchShape_, hcalSimParameters_cfi::photoelectronsToAnalog, CaloHitResponse::run(), CaloHitResponse::setBunchRange(), CaloHitResponse::setGeometry(), EcalSimParameterMap::simParameters(), theEBResponse, theEEResponse, theESResponse, theGeometry, theMaxBunch, theMinBunch, and theParameterMap.

Referenced by analyze().

718 {
719 
720  if ( thisDet != EcalBarrel && thisDet != EcalEndcap && thisDet != EcalPreshower ) {
721  edm::LogError("EcalMMValid") << "Invalid subdetector type";
722  return;
723  }
724  //bool isCrystal = true;
725  //if ( thisDet == EcalPreshower ) isCrystal = false;
726 
727  // load the geometry
728 
729  edm::ESHandle<CaloGeometry> hGeometry;
730  eventSetup.get<CaloGeometryRecord>().get(hGeometry);
731 
732  const CaloGeometry * pGeometry = &*hGeometry;
733 
734  // see if we need to update
735  if(pGeometry != theGeometry) {
736  theGeometry = pGeometry;
737  //theEcalResponse->setGeometry(theGeometry);
741 
742  }
743 
744  // vector of DetId with energy above a fraction of the gun's energy
745 
746  const std::vector<DetId>& theSDId = theGeometry->getValidDetIds( DetId::Ecal, thisDet );
747 
748  std::vector<DetId> theOverThresholdId;
749  for ( unsigned int i = 0 ; i < theSDId.size() ; i++ ) {
750 
751  int sdId = theSDId[i].rawId();
752  if ( SignalSimMap[sdId] > theSimThreshold ) theOverThresholdId.push_back( theSDId[i] );
753 
754  }
755 
757  if ( thisDet == EcalPreshower ) limit = ESDataFrame::MAXSAMPLES;
758 
759  for (int iBunch = theMinBunch ; iBunch <= theMaxBunch ; iBunch++ ) {
760 
761  //if ( isCrystal ) {
762  if( thisDet == EcalBarrel ) {
763  theEBResponse->setBunchRange(iBunch, iBunch);
764  theEBResponse->clear();
765  theEBResponse->run(theHits, engine);
766  }
767  else if( thisDet == EcalEndcap ) {
768  theEEResponse->setBunchRange(iBunch, iBunch);
769  theEEResponse->clear();
770  theEEResponse->run(theHits, engine);
771  }
772  else {
773  theESResponse->setBunchRange(iBunch, iBunch);
774  theESResponse->clear();
775  theESResponse->run(theHits, engine);
776  }
777 
778  int iHisto = iBunch - theMinBunch;
779 
780  for ( std::vector<DetId>::const_iterator idItr = theOverThresholdId.begin() ; idItr != theOverThresholdId.end() ; ++idItr ) {
781 
782  CaloSamples * analogSignal;
783  //if ( isCrystal )
784  if( thisDet == EcalBarrel ) {
785  analogSignal = theEBResponse->findSignal(*idItr);
786  }
787  else if( thisDet == EcalEndcap ) {
788  analogSignal = theEEResponse->findSignal(*idItr);
789  }
790  else {
791  analogSignal = theESResponse->findSignal(*idItr);
792  }
793 
794  if ( analogSignal ) {
795 
796  (*analogSignal) *= theParameterMap->simParameters(analogSignal->id()).photoelectronsToAnalog();
797 
798  for ( int i = 0 ; i < limit ; i++ ) {
799  if ( thisDet == EcalBarrel ) { meEBBunchShape_[iHisto]->Fill(i,(float)(*analogSignal)[i]); }
800  else if ( thisDet == EcalEndcap ) { meEEBunchShape_[iHisto]->Fill(i,(float)(*analogSignal)[i]); }
801  else if ( thisDet == EcalPreshower ) { meESBunchShape_[iHisto]->Fill(i,(float)(*analogSignal)[i]); }
802  }
803  }
804 
805  }
806 
807  }
808 
809  }
void setGeometry(const CaloGeometry *geometry)
geometry needed for time-of-flight
static const int MAXSAMPLES
Definition: CaloSamples.h:74
virtual const CaloSimParameters & simParameters(const DetId &id) const
return the sim parameters relative to the right subdet
MonitorElement * meEEBunchShape_[nBunch]
MonitorElement * meEBBunchShape_[nBunch]
virtual void run(const MixCollection< PCaloHit > &hits, CLHEP::HepRandomEngine *)
Complete cell digitization.
void Fill(long long x)
MonitorElement * meESBunchShape_[nBunch]
static const int MAXSAMPLES
Definition: ESDataFrame.h:32
const EcalSimParameterMap * theParameterMap
const T & get() const
Definition: EventSetup.h:56
void setBunchRange(int minBunch, int maxBunch)
tells it which pileup bunches to do
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
Definition: CaloGeometry.cc:92
CaloSamples * findSignal(const DetId &detId)
users can look for the signal for a given cell
void clear()
frees up memory
DetId id() const
get the (generic) id
Definition: CaloSamples.h:21
void EcalMixingModuleValidation::dqmBeginRun ( edm::Run const &  ,
edm::EventSetup const &  c 
)
overrideprotectedvirtual

Reimplemented from DQMEDAnalyzer.

Definition at line 136 of file EcalMixingModuleValidation.cc.

References checkCalibrations().

136  {
137 
139 
140 }
void checkCalibrations(edm::EventSetup const &c)
void EcalMixingModuleValidation::endRun ( const edm::Run r,
const edm::EventSetup c 
)
overrideprotected

Definition at line 202 of file EcalMixingModuleValidation.cc.

References bunchSumTest(), mps_fire::i, ESDataFrame::MAXSAMPLES, EcalDataFrame::MAXSAMPLES, meEBBunchShape_, meEBShape_, meEBShapeRatio_, meEEBunchShape_, meEEShape_, meEEShapeRatio_, meESBunchShape_, meESShape_, meESShapeRatio_, and nBunch.

202  {
203 
204  // add shapes for each bunch crossing and divide the digi by the result
205 
206  std::vector<MonitorElement *> theBunches;
207  for ( int i = 0 ; i < nBunch ; i++ ) {
208  theBunches.push_back(meEBBunchShape_[i]);
209  }
211 
212  theBunches.clear();
213 
214  for ( int i = 0 ; i < nBunch ; i++ ) {
215  theBunches.push_back(meEEBunchShape_[i]);
216  }
218 
219  theBunches.clear();
220 
221  for ( int i = 0 ; i < nBunch ; i++ ) {
222  theBunches.push_back(meESBunchShape_[i]);
223  }
225 
226 }
MonitorElement * meEEBunchShape_[nBunch]
MonitorElement * meEBBunchShape_[nBunch]
void bunchSumTest(std::vector< MonitorElement * > &theBunches, MonitorElement *&theTotal, MonitorElement *&theRatio, int nSample)
MonitorElement * meESBunchShape_[nBunch]
static const int MAXSAMPLES
Definition: ESDataFrame.h:32
static const int MAXSAMPLES
Definition: EcalDataFrame.h:48
void EcalMixingModuleValidation::findPedestal ( const DetId detId,
int  gainId,
double &  ped 
) const
private

Definition at line 687 of file EcalMixingModuleValidation.cc.

References EcalCondObjectContainer< T >::end(), EcalCondObjectContainer< T >::find(), ecalMGPA::gainId(), EcalCondObjectContainer< T >::getMap(), LogDebug, EcalPedestal::mean_x1, EcalPedestal::mean_x12, EcalPedestal::mean_x6, DetId::rawId(), EcalCondObjectContainer< T >::size(), and thePedestals.

Referenced by analyze().

688 {
690  = thePedestals->getMap().find(detId);
691  // should I care if it doesn't get found?
692  if(mapItr == thePedestals->getMap().end()) {
693  edm::LogError("EcalMMValid") << "Could not find pedestal for " << detId.rawId() << " among the " << thePedestals->getMap().size();
694  } else {
695  EcalPedestals::Item item = (*mapItr);
696 
697  switch(gainId) {
698  case 0:
699  ped = item.mean_x1;
700  case 1:
701  ped = item.mean_x12;
702  break;
703  case 2:
704  ped = item.mean_x6;
705  break;
706  case 3:
707  ped = item.mean_x1;
708  break;
709  default:
710  edm::LogError("EcalMMValid") << "Bad Pedestal " << gainId;
711  break;
712  }
713  LogDebug("EcalMMValid") << "Pedestals for " << detId.rawId() << " gain range " << gainId << " : \n" << "Mean = " << ped;
714  }
715 }
#define LogDebug(id)
int gainId(sample_type sample)
get the gainId (2 bits)
const self & getMap() const
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
EcalPedestalsMap::const_iterator EcalPedestalsMapIterator
Definition: EcalPedestals.h:52
const_iterator find(uint32_t rawId) const
const_iterator end() const
CLHEP::HepRandomEngine * EcalMixingModuleValidation::randomEngine ( edm::StreamID const &  streamID)
private

Definition at line 811 of file EcalMixingModuleValidation.cc.

References edm::RandomNumberGenerator::getEngine(), diffTreeTool::index, randomEngines_, and edm::StreamID::value().

Referenced by analyze().

811  {
812  unsigned int index = streamID.value();
813  if(index >= randomEngines_.size()) {
814  randomEngines_.resize(index + 1, nullptr);
815  }
816  CLHEP::HepRandomEngine* ptr = randomEngines_[index];
817  if(!ptr) {
819  ptr = &rng->getEngine(streamID);
820  randomEngines_[index] = ptr;
821  }
822  return ptr;
823 }
std::vector< CLHEP::HepRandomEngine * > randomEngines_
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.

Member Data Documentation

double EcalMixingModuleValidation::barrelADCtoGeV_
private
edm::EDGetTokenT< CrossingFrame<PCaloHit> > EcalMixingModuleValidation::crossingFramePCaloHitEBToken_
private

Definition at line 120 of file EcalMixingModuleValidation.h.

Referenced by analyze().

edm::EDGetTokenT< CrossingFrame<PCaloHit> > EcalMixingModuleValidation::crossingFramePCaloHitEEToken_
private

Definition at line 120 of file EcalMixingModuleValidation.h.

Referenced by analyze().

edm::EDGetTokenT< CrossingFrame<PCaloHit> > EcalMixingModuleValidation::crossingFramePCaloHitESToken_
private

Definition at line 120 of file EcalMixingModuleValidation.h.

Referenced by analyze().

DQMStore* EcalMixingModuleValidation::dbe_
private

Definition at line 110 of file EcalMixingModuleValidation.h.

edm::EDGetTokenT<EBDigiCollection> EcalMixingModuleValidation::EBdigiCollectionToken_
private

Definition at line 116 of file EcalMixingModuleValidation.h.

Referenced by analyze().

edm::EDGetTokenT<EEDigiCollection> EcalMixingModuleValidation::EEdigiCollectionToken_
private

Definition at line 117 of file EcalMixingModuleValidation.h.

Referenced by analyze().

double EcalMixingModuleValidation::endcapADCtoGeV_
private
double EcalMixingModuleValidation::esADCtokeV_
private

Definition at line 170 of file EcalMixingModuleValidation.h.

Referenced by analyze(), and checkCalibrations().

double EcalMixingModuleValidation::esBaseline_
private

Definition at line 169 of file EcalMixingModuleValidation.h.

Referenced by analyze().

edm::EDGetTokenT<ESDigiCollection> EcalMixingModuleValidation::ESdigiCollectionToken_
private

Definition at line 118 of file EcalMixingModuleValidation.h.

Referenced by analyze().

double EcalMixingModuleValidation::esThreshold_
private

Definition at line 171 of file EcalMixingModuleValidation.h.

Referenced by analyze().

std::map<int, double, std::less<int> > EcalMixingModuleValidation::gainConv_
private
edm::EDGetTokenT<edm::HepMCProduct> EcalMixingModuleValidation::HepMCToken_
private

Definition at line 114 of file EcalMixingModuleValidation.h.

Referenced by analyze().

double EcalMixingModuleValidation::m_ESeffwei
private

Definition at line 184 of file EcalMixingModuleValidation.h.

Referenced by analyze(), and checkCalibrations().

int EcalMixingModuleValidation::m_ESgain
private

Definition at line 181 of file EcalMixingModuleValidation.h.

Referenced by checkCalibrations().

const ESIntercalibConstants* EcalMixingModuleValidation::m_ESmips
private

Definition at line 183 of file EcalMixingModuleValidation.h.

Referenced by analyze(), and checkCalibrations().

const ESPedestals* EcalMixingModuleValidation::m_ESpeds
private

Definition at line 182 of file EcalMixingModuleValidation.h.

Referenced by analyze(), and checkCalibrations().

MonitorElement* EcalMixingModuleValidation::meEBbunchCrossing_
private
MonitorElement* EcalMixingModuleValidation::meEBBunchShape_[nBunch]
private
MonitorElement* EcalMixingModuleValidation::meEBDigiMixRatiogt100ADC_
private
MonitorElement* EcalMixingModuleValidation::meEBDigiMixRatioOriggt50pc_
private
MonitorElement* EcalMixingModuleValidation::meEBShape_
private
MonitorElement* EcalMixingModuleValidation::meEBShapeRatio_
private
MonitorElement* EcalMixingModuleValidation::meEEbunchCrossing_
private
MonitorElement* EcalMixingModuleValidation::meEEBunchShape_[nBunch]
private
MonitorElement* EcalMixingModuleValidation::meEEDigiMixRatiogt100ADC_
private
MonitorElement* EcalMixingModuleValidation::meEEDigiMixRatioOriggt40pc_
private
MonitorElement* EcalMixingModuleValidation::meEEShape_
private
MonitorElement* EcalMixingModuleValidation::meEEShapeRatio_
private
MonitorElement* EcalMixingModuleValidation::meESbunchCrossing_
private
MonitorElement* EcalMixingModuleValidation::meESBunchShape_[nBunch]
private
MonitorElement* EcalMixingModuleValidation::meESShape_
private
MonitorElement* EcalMixingModuleValidation::meESShapeRatio_
private
const int EcalMixingModuleValidation::nBunch = 21
staticprivate
std::string EcalMixingModuleValidation::outputFile_
private

Definition at line 112 of file EcalMixingModuleValidation.h.

std::vector<CLHEP::HepRandomEngine*> EcalMixingModuleValidation::randomEngines_
private

Definition at line 186 of file EcalMixingModuleValidation.h.

Referenced by randomEngine().

CaloHitResponse* EcalMixingModuleValidation::theEBResponse
private

Definition at line 160 of file EcalMixingModuleValidation.h.

Referenced by computeSDBunchDigi(), and EcalMixingModuleValidation().

const EBShape* EcalMixingModuleValidation::theEBShape
private

Definition at line 154 of file EcalMixingModuleValidation.h.

Referenced by EcalMixingModuleValidation().

CaloHitResponse* EcalMixingModuleValidation::theEEResponse
private

Definition at line 161 of file EcalMixingModuleValidation.h.

Referenced by computeSDBunchDigi(), and EcalMixingModuleValidation().

const EEShape* EcalMixingModuleValidation::theEEShape
private

Definition at line 155 of file EcalMixingModuleValidation.h.

Referenced by EcalMixingModuleValidation().

CaloHitResponse* EcalMixingModuleValidation::theESResponse
private

Definition at line 159 of file EcalMixingModuleValidation.h.

Referenced by computeSDBunchDigi(), and EcalMixingModuleValidation().

ESShape* EcalMixingModuleValidation::theESShape
private

Definition at line 153 of file EcalMixingModuleValidation.h.

Referenced by checkCalibrations(), and EcalMixingModuleValidation().

const CaloGeometry* EcalMixingModuleValidation::theGeometry
private

Definition at line 176 of file EcalMixingModuleValidation.h.

Referenced by computeSDBunchDigi().

int EcalMixingModuleValidation::theMaxBunch
private
int EcalMixingModuleValidation::theMinBunch
private
const EcalSimParameterMap* EcalMixingModuleValidation::theParameterMap
private

Definition at line 151 of file EcalMixingModuleValidation.h.

Referenced by computeSDBunchDigi(), and EcalMixingModuleValidation().

const EcalPedestals* EcalMixingModuleValidation::thePedestals
private

Definition at line 179 of file EcalMixingModuleValidation.h.

Referenced by checkPedestals(), and findPedestal().

bool EcalMixingModuleValidation::verbose_
private

Definition at line 108 of file EcalMixingModuleValidation.h.

Referenced by EcalMixingModuleValidation().