CMS 3D CMS Logo

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

user includes More...

#include <SiStripGainsPCLWorker.h>

Inheritance diagram for SiStripGainsPCLWorker:
DQMGlobalEDAnalyzer< APVGain::APVGainHistograms > DQMGlobalEDAnalyzerBase< APVGain::APVGainHistograms, Args...> edm::global::EDProducer< T > edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &, APVGain::APVGainHistograms &) const override
 
void dqmAnalyze (edm::Event const &, edm::EventSetup const &, APVGain::APVGainHistograms const &) const override
 
 SiStripGainsPCLWorker (const edm::ParameterSet &)
 
- Public Member Functions inherited from DQMGlobalEDAnalyzer< APVGain::APVGainHistograms >
virtual void dqmEndRun (edm::Run const &, edm::EventSetup const &, APVGain::APVGainHistogramsconst &) const
 
void globalEndRunProduce (edm::Run &run, edm::EventSetup const &setup) const final
 
- Public Member Functions inherited from DQMGlobalEDAnalyzerBase< APVGain::APVGainHistograms, Args...>
void accumulate (edm::StreamID id, edm::Event const &event, edm::EventSetup const &setup) const final
 
 DQMGlobalEDAnalyzerBase ()
 
std::shared_ptr
< APVGain::APVGainHistograms
globalBeginRun (edm::Run const &run, edm::EventSetup const &setup) const final
 
void globalEndRun (edm::Run const &, edm::EventSetup const &) const final
 
- Public Member Functions inherited from edm::global::EDProducer< T >
 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
 
EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector
< edm::ProductResolverIndex >
const & 
indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector
< edm::ProductResolverIndex >
const & 
putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex >
const & 
esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector
< ProductResolverIndexAndSkipBit >
const & 
itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, 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 selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

void beginJob () override
 
void checkBookAPVColls (const TrackerGeometry *bareTkGeomPtr, APVGain::APVGainHistograms &histograms) const
 
void dqmBeginRun (edm::Run const &, edm::EventSetup const &, APVGain::APVGainHistograms &) const override
 
int statCollectionFromMode (const char *tag) const
 

Private Attributes

bool AllowSaturation
 
bool doChargeMonitorPerPlane
 
std::vector< std::string > dqm_tag_
 
bool FirstSetOfConstants
 
edm::ESGetToken< SiStripGain,
SiStripGainRcd
gainToken_
 
edm::EDGetTokenT
< TrajTrackAssociationCollection
m_association_token
 
std::string m_calibrationMode
 
std::string m_DQMdir
 
edm::EDGetTokenT< edm::View
< reco::Track > > 
m_tracks_token
 
unsigned int MaxNrStrips
 
double MaxTrackChiOverNdf
 
double MaxTrackEta
 
int MaxTrackingIteration
 
double MaxTrackMomentum
 
double MinTrackEta
 
unsigned int MinTrackHits
 
double MinTrackMomentum
 
bool OldGainRemoving
 
edm::ESGetToken
< SiStripQuality,
SiStripQualityRcd
qualityToken_
 
std::map< unsigned int, APVloctheTopologyMap
 
edm::ESGetToken
< TrackerGeometry,
TrackerDigiGeometryRecord
tkGeomToken_
 
edm::ESGetToken
< TrackerGeometry,
TrackerDigiGeometryRecord
tkGeomTokenBR_
 
edm::ESGetToken
< TrackerTopology,
TrackerTopologyRcd
tTopoToken_
 
bool useCalibration
 
bool Validation
 
std::vector< std::string > VChargeHisto
 

Additional Inherited Members

- Public Types inherited from DQMGlobalEDAnalyzerBase< APVGain::APVGainHistograms, Args...>
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from DQMGlobalEDAnalyzerBase< APVGain::APVGainHistograms, Args...>
uint64_t meId (edm::Run const &run) const
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
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)
 
void resetItemsToGetFrom (BranchType iType)
 
- Protected Attributes inherited from DQMGlobalEDAnalyzerBase< APVGain::APVGainHistograms, Args...>
DQMStoredqmstore_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

user includes

Description: Fill DQM histograms with SiStrip Charge normalized to path length

Definition at line 75 of file SiStripGainsPCLWorker.h.

Constructor & Destructor Documentation

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

Definition at line 9 of file SiStripGainsPCLWorker.cc.

References AllowSaturation, doChargeMonitorPerPlane, dqm_tag_, edm::EDConsumerBase::esConsumes(), first, FirstSetOfConstants, gainToken_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), mps_fire::i, m_association_token, m_calibrationMode, m_DQMdir, m_tracks_token, MaxNrStrips, MaxTrackChiOverNdf, MaxTrackEta, MaxTrackingIteration, MaxTrackMomentum, MinTrackEta, MinTrackHits, MinTrackMomentum, APVGain::monHnames(), OldGainRemoving, qualityToken_, alignCSCRings::s, AlCaHLTBitMon_QueryRunRegistry::string, APVGain::subdetectorId(), APVGain::subdetectorPlane(), APVGain::subdetectorSide(), theTopologyMap, APVGain::thickness(), tkGeomToken_, tkGeomTokenBR_, tTopoToken_, useCalibration, Validation, and VChargeHisto.

9  {
10  MinTrackMomentum = iConfig.getUntrackedParameter<double>("minTrackMomentum", 3.0);
11  MaxTrackMomentum = iConfig.getUntrackedParameter<double>("maxTrackMomentum", 99999.0);
12  MinTrackEta = iConfig.getUntrackedParameter<double>("minTrackEta", -5.0);
13  MaxTrackEta = iConfig.getUntrackedParameter<double>("maxTrackEta", 5.0);
14  MaxNrStrips = iConfig.getUntrackedParameter<unsigned>("maxNrStrips", 2);
15  MinTrackHits = iConfig.getUntrackedParameter<unsigned>("MinTrackHits", 8);
16  MaxTrackChiOverNdf = iConfig.getUntrackedParameter<double>("MaxTrackChiOverNdf", 3);
17  MaxTrackingIteration = iConfig.getUntrackedParameter<int>("MaxTrackingIteration", 7);
18  AllowSaturation = iConfig.getUntrackedParameter<bool>("AllowSaturation", false);
19  FirstSetOfConstants = iConfig.getUntrackedParameter<bool>("FirstSetOfConstants", true);
20  Validation = iConfig.getUntrackedParameter<bool>("Validation", false);
21  OldGainRemoving = iConfig.getUntrackedParameter<bool>("OldGainRemoving", false);
22  useCalibration = iConfig.getUntrackedParameter<bool>("UseCalibration", false);
23  doChargeMonitorPerPlane = iConfig.getUntrackedParameter<bool>("doChargeMonitorPerPlane", false);
24  m_DQMdir = iConfig.getUntrackedParameter<std::string>("DQMdir", "AlCaReco/SiStripGains");
25  m_calibrationMode = iConfig.getUntrackedParameter<std::string>("calibrationMode", "StdBunch");
26  VChargeHisto = iConfig.getUntrackedParameter<std::vector<std::string>>("ChargeHisto");
27 
28  // fill in the mapping between the histogram indices and the (id,side,plane) tuple
29  std::vector<std::pair<std::string, std::string>> hnames =
31  for (unsigned int i = 0; i < hnames.size(); i++) {
32  int id = APVGain::subdetectorId((hnames[i]).first);
33  int side = APVGain::subdetectorSide((hnames[i]).first);
34  int plane = APVGain::subdetectorPlane((hnames[i]).first);
35  int thick = APVGain::thickness((hnames[i]).first);
36  std::string s = hnames[i].first;
37 
38  auto loc = APVloc(thick, id, side, plane, s);
39  theTopologyMap.insert(std::make_pair(i, loc));
40  }
41 
42  //Set the monitoring element tag and store
43  dqm_tag_.reserve(7);
44  dqm_tag_.clear();
45  dqm_tag_.push_back("StdBunch"); // statistic collection from Standard Collision Bunch @ 3.8 T
46  dqm_tag_.push_back("StdBunch0T"); // statistic collection from Standard Collision Bunch @ 0 T
47  dqm_tag_.push_back("AagBunch"); // statistic collection from First Collision After Abort Gap @ 3.8 T
48  dqm_tag_.push_back("AagBunch0T"); // statistic collection from First Collision After Abort Gap @ 0 T
49  dqm_tag_.push_back("IsoMuon"); // statistic collection from Isolated Muon @ 3.8 T
50  dqm_tag_.push_back("IsoMuon0T"); // statistic collection from Isolated Muon @ 0 T
51  dqm_tag_.push_back("Harvest"); // statistic collection: Harvest
52 
53  m_tracks_token = consumes<edm::View<reco::Track>>(iConfig.getParameter<edm::InputTag>("tracks"));
54  m_association_token = consumes<TrajTrackAssociationCollection>(iConfig.getParameter<edm::InputTag>("tracks"));
55 
57  tkGeomTokenBR_ = esConsumes<edm::Transition::BeginRun>();
58  tkGeomToken_ = esConsumes<>();
59  gainToken_ = esConsumes<edm::Transition::BeginRun>();
60  qualityToken_ = esConsumes<edm::Transition::BeginRun>();
61 }
T getUntrackedParameter(std::string const &, T const &) const
edm::ESGetToken< SiStripQuality, SiStripQualityRcd > qualityToken_
int subdetectorPlane(uint32_t, const TrackerTopology *)
edm::EDGetTokenT< edm::View< reco::Track > > m_tracks_token
edm::EDGetTokenT< TrajTrackAssociationCollection > m_association_token
std::vector< std::string > dqm_tag_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomTokenBR_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
std::map< unsigned int, APVloc > theTopologyMap
edm::ESGetToken< SiStripGain, SiStripGainRcd > gainToken_
int subdetectorSide(uint32_t, const TrackerTopology *)
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::vector< std::string > VChargeHisto
int thickness(uint32_t)
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
std::vector< std::pair< std::string, std::string > > monHnames(std::vector< std::string >, bool, const char *tag)
int subdetectorId(uint32_t)

Member Function Documentation

void SiStripGainsPCLWorker::beginJob ( void  )
overrideprivatevirtual

Reimplemented from edm::global::EDProducerBase.

Definition at line 390 of file SiStripGainsPCLWorker.cc.

390 {}
void SiStripGainsPCLWorker::bookHistograms ( DQMStore::IBooker ibooker,
edm::Run const &  run,
edm::EventSetup const &  setup,
APVGain::APVGainHistograms histograms 
) const
overridevirtual

Implements DQMGlobalEDAnalyzerBase< APVGain::APVGainHistograms, Args...>.

Definition at line 509 of file SiStripGainsPCLWorker.cc.

References a, b, dqm::implementation::IBooker::book1DD(), dqm::implementation::IBooker::book2S(), dqm::implementation::NavigatorBase::cd(), APVGain::APVGainHistograms::Charge_1, APVGain::APVGainHistograms::Charge_2, APVGain::APVGainHistograms::Charge_3, APVGain::APVGainHistograms::Charge_4, APVGain::APVGainHistograms::Charge_Vs_Index, APVGain::APVGainHistograms::Charge_Vs_PathlengthTECM1, APVGain::APVGainHistograms::Charge_Vs_PathlengthTECM2, APVGain::APVGainHistograms::Charge_Vs_PathlengthTECP1, APVGain::APVGainHistograms::Charge_Vs_PathlengthTECP2, APVGain::APVGainHistograms::Charge_Vs_PathlengthTIB, APVGain::APVGainHistograms::Charge_Vs_PathlengthTIDM, APVGain::APVGainHistograms::Charge_Vs_PathlengthTIDP, APVGain::APVGainHistograms::Charge_Vs_PathlengthTOB, doChargeMonitorPerPlane, dqm_tag_, APVGain::APVGainHistograms::EventStats, funct::exp(), first, postprocess-scan-build::htag, mps_fire::i, log, m_calibrationMode, m_DQMdir, APVGain::monHnames(), APVGain::APVGainHistograms::NStripAPVs, fireworks::p1, fireworks::p2, edm::second(), dqm::impl::MonitorElement::setBinLabel(), dqm::implementation::NavigatorBase::setCurrentFolder(), statCollectionFromMode(), AlCaHLTBitMon_QueryRunRegistry::string, GlobalPosition_Frontier_DevDB_cff::tag, VChargeHisto, and y.

512  {
513  ibooker.cd();
514  std::string dqm_dir = m_DQMdir;
515  const char* tag = dqm_tag_[statCollectionFromMode(m_calibrationMode.c_str())].c_str();
516 
517  edm::LogInfo("SiStripGainsPCLWorker") << "Setting " << dqm_dir << " in DQM and booking histograms for tag " << tag
518  << std::endl;
519 
520  ibooker.setCurrentFolder(dqm_dir);
521 
522  // this MonitorElement is created to log the number of events / tracks and clusters used
523  // by the calibration algorithm
524 
525  histograms.EventStats = ibooker.book2S("EventStats", "Statistics", 3, -0.5, 2.5, 1, 0, 1);
526  histograms.EventStats->setBinLabel(1, "events count", 1);
527  histograms.EventStats->setBinLabel(2, "tracks count", 1);
528  histograms.EventStats->setBinLabel(3, "clusters count", 1);
529 
530  std::string stag(tag);
531  if (!stag.empty() && stag[0] != '_')
532  stag.insert(0, 1, '_');
533 
534  std::string cvi = std::string("Charge_Vs_Index") + stag;
535  std::string cvpTIB = std::string("Charge_Vs_PathlengthTIB") + stag;
536  std::string cvpTOB = std::string("Charge_Vs_PathlengthTOB") + stag;
537  std::string cvpTIDP = std::string("Charge_Vs_PathlengthTIDP") + stag;
538  std::string cvpTIDM = std::string("Charge_Vs_PathlengthTIDM") + stag;
539  std::string cvpTECP1 = std::string("Charge_Vs_PathlengthTECP1") + stag;
540  std::string cvpTECP2 = std::string("Charge_Vs_PathlengthTECP2") + stag;
541  std::string cvpTECM1 = std::string("Charge_Vs_PathlengthTECM1") + stag;
542  std::string cvpTECM2 = std::string("Charge_Vs_PathlengthTECM2") + stag;
543 
544  int elepos = statCollectionFromMode(tag);
545 
546  histograms.Charge_Vs_Index.reserve(dqm_tag_.size());
547  histograms.Charge_Vs_PathlengthTIB.reserve(dqm_tag_.size());
548  histograms.Charge_Vs_PathlengthTOB.reserve(dqm_tag_.size());
549  histograms.Charge_Vs_PathlengthTIDP.reserve(dqm_tag_.size());
550  histograms.Charge_Vs_PathlengthTIDM.reserve(dqm_tag_.size());
551  histograms.Charge_Vs_PathlengthTECP1.reserve(dqm_tag_.size());
552  histograms.Charge_Vs_PathlengthTECP2.reserve(dqm_tag_.size());
553  histograms.Charge_Vs_PathlengthTECM1.reserve(dqm_tag_.size());
554  histograms.Charge_Vs_PathlengthTECM2.reserve(dqm_tag_.size());
555 
556  // The cluster charge is stored by exploiting a non uniform binning in order
557  // reduce the histogram memory size. The bin width is relaxed with a falling
558  // exponential function and the bin boundaries are stored in the binYarray.
559  // The binXarray is used to provide as many bins as the APVs.
560  //
561  // More details about this implementations are here:
562  // https://indico.cern.ch/event/649344/contributions/2672267/attachments/1498323/2332518/OptimizeChHisto.pdf
563 
564  std::vector<float> binXarray;
565  binXarray.reserve(histograms.NStripAPVs + 1);
566  for (unsigned int a = 0; a <= histograms.NStripAPVs; a++) {
567  binXarray.push_back((float)a);
568  }
569 
570  std::array<float, 688> binYarray;
571  double p0 = 5.445;
572  double p1 = 0.002113;
573  double p2 = 69.01576;
574  double y = 0.;
575  for (int b = 0; b < 687; b++) {
576  binYarray[b] = y;
577  if (y <= 902.)
578  y = y + 2.;
579  else
580  y = (p0 - log(exp(p0 - p1 * y) - p2 * p1)) / p1;
581  }
582  binYarray[687] = 4000.;
583 
584  histograms.Charge_1[elepos].clear();
585  histograms.Charge_2[elepos].clear();
586  histograms.Charge_3[elepos].clear();
587  histograms.Charge_4[elepos].clear();
588 
589  auto it = histograms.Charge_Vs_Index.begin();
590  histograms.Charge_Vs_Index.insert(
591  it + elepos,
592  ibooker.book2S(cvi.c_str(), cvi.c_str(), histograms.NStripAPVs, &binXarray[0], 687, binYarray.data()));
593 
594  it = histograms.Charge_Vs_PathlengthTIB.begin();
595  histograms.Charge_Vs_PathlengthTIB.insert(it + elepos,
596  ibooker.book2S(cvpTIB.c_str(), cvpTIB.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
597 
598  it = histograms.Charge_Vs_PathlengthTOB.begin();
599  histograms.Charge_Vs_PathlengthTOB.insert(it + elepos,
600  ibooker.book2S(cvpTOB.c_str(), cvpTOB.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
601 
602  it = histograms.Charge_Vs_PathlengthTIDP.begin();
603  histograms.Charge_Vs_PathlengthTIDP.insert(
604  it + elepos, ibooker.book2S(cvpTIDP.c_str(), cvpTIDP.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
605 
606  it = histograms.Charge_Vs_PathlengthTIDM.begin();
607  histograms.Charge_Vs_PathlengthTIDM.insert(
608  it + elepos, ibooker.book2S(cvpTIDM.c_str(), cvpTIDM.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
609 
610  it = histograms.Charge_Vs_PathlengthTECP1.begin();
611  histograms.Charge_Vs_PathlengthTECP1.insert(
612  it + elepos, ibooker.book2S(cvpTECP1.c_str(), cvpTECP1.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
613 
614  it = histograms.Charge_Vs_PathlengthTECP2.begin();
615  histograms.Charge_Vs_PathlengthTECP2.insert(
616  it + elepos, ibooker.book2S(cvpTECP2.c_str(), cvpTECP2.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
617 
618  it = histograms.Charge_Vs_PathlengthTECM1.begin();
619  histograms.Charge_Vs_PathlengthTECM1.insert(
620  it + elepos, ibooker.book2S(cvpTECM1.c_str(), cvpTECM1.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
621 
622  it = histograms.Charge_Vs_PathlengthTECM2.begin();
623  histograms.Charge_Vs_PathlengthTECM2.insert(
624  it + elepos, ibooker.book2S(cvpTECM2.c_str(), cvpTECM2.c_str(), 20, 0.3, 1.3, 250, 0, 2000));
625 
626  std::vector<std::pair<std::string, std::string>> hnames =
628  for (unsigned int i = 0; i < hnames.size(); i++) {
629  std::string htag = (hnames[i]).first + stag;
630  histograms.Charge_1[elepos].push_back(ibooker.book1DD(htag.c_str(), (hnames[i]).second.c_str(), 100, 0., 1000.));
631  }
632 
634  for (unsigned int i = 0; i < hnames.size(); i++) {
635  std::string htag = (hnames[i]).first + stag;
636  histograms.Charge_2[elepos].push_back(ibooker.book1DD(htag.c_str(), (hnames[i]).second.c_str(), 100, 0., 1000.));
637  }
638 
640  for (unsigned int i = 0; i < hnames.size(); i++) {
641  std::string htag = (hnames[i]).first + stag;
642  histograms.Charge_3[elepos].push_back(ibooker.book1DD(htag.c_str(), (hnames[i]).second.c_str(), 100, 0., 1000.));
643  }
644 
646  for (unsigned int i = 0; i < hnames.size(); i++) {
647  std::string htag = (hnames[i]).first + stag;
648  histograms.Charge_4[elepos].push_back(ibooker.book1DD(htag.c_str(), (hnames[i]).second.c_str(), 100, 0., 1000.));
649  }
650 }
std::array< std::vector< dqm::reco::MonitorElement * >, 7 > Charge_4
static std::vector< std::string > checklist log
MonitorElement * book2S(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:219
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
const TString p2
Definition: fwPaths.cc:13
std::vector< dqm::reco::MonitorElement * > Charge_Vs_Index
std::vector< dqm::reco::MonitorElement * > Charge_Vs_PathlengthTOB
std::vector< dqm::reco::MonitorElement * > Charge_Vs_PathlengthTIDP
Exp< T >::type exp(const T &t)
Definition: Exp.h:22
std::vector< dqm::reco::MonitorElement * > Charge_Vs_PathlengthTIDM
std::vector< std::string > dqm_tag_
U second(std::pair< T, U > const &p)
MonitorElement * book1DD(TString const &name, TString const &title, int nchX, double lowX, double highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:155
std::vector< dqm::reco::MonitorElement * > Charge_Vs_PathlengthTECP2
std::array< std::vector< dqm::reco::MonitorElement * >, 7 > Charge_3
std::atomic< unsigned int > NStripAPVs
const TString p1
Definition: fwPaths.cc:12
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
Log< level::Info, false > LogInfo
double b
Definition: hdecay.h:118
std::vector< std::string > VChargeHisto
dqm::reco::MonitorElement * EventStats
double a
Definition: hdecay.h:119
std::array< std::vector< dqm::reco::MonitorElement * >, 7 > Charge_1
std::vector< dqm::reco::MonitorElement * > Charge_Vs_PathlengthTECM2
int statCollectionFromMode(const char *tag) const
std::array< std::vector< dqm::reco::MonitorElement * >, 7 > Charge_2
std::vector< dqm::reco::MonitorElement * > Charge_Vs_PathlengthTECM1
std::vector< std::pair< std::string, std::string > > monHnames(std::vector< std::string >, bool, const char *tag)
std::vector< dqm::reco::MonitorElement * > Charge_Vs_PathlengthTIB
std::vector< dqm::reco::MonitorElement * > Charge_Vs_PathlengthTECP1
void SiStripGainsPCLWorker::checkBookAPVColls ( const TrackerGeometry bareTkGeomPtr,
APVGain::APVGainHistograms histograms 
) const
private

Definition at line 394 of file SiStripGainsPCLWorker.cc.

References sistrip::APV, APVGain::APVGainHistograms::APVsColl, APVGain::APVGainHistograms::APVsCollOrdered, TrackerGeometry::dets(), mps_fire::i, dqmiolumiharvest::j, PixelTopology::ncolumns(), APVGain::APVGainHistograms::NPixelDets, PixelTopology::nrows(), APVGain::APVGainHistograms::NStripAPVs, StripTopology::nstrips(), PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, DetId::rawId(), ntupleEnum::SubDet, DetId::subdetId(), StripSubdetector::TEC, StripSubdetector::TIB, StripSubdetector::TID, and StripSubdetector::TOB.

Referenced by dqmBeginRun().

395  {
396  if (bareTkGeomPtr) { // pointer not yet set: called the first time => fill the APVColls
397  auto const& Det = bareTkGeomPtr->dets();
398 
399  edm::LogInfo("SiStripGainsPCLWorker") << " Resetting APV struct" << std::endl;
400 
401  unsigned int Index = 0;
402 
403  for (unsigned int i = 0; i < Det.size(); i++) {
404  DetId Detid = Det[i]->geographicalId();
405  int SubDet = Detid.subdetId();
406 
407  if (SubDet == StripSubdetector::TIB || SubDet == StripSubdetector::TID || SubDet == StripSubdetector::TOB ||
408  SubDet == StripSubdetector::TEC) {
409  auto DetUnit = dynamic_cast<const StripGeomDetUnit*>(Det[i]);
410  if (!DetUnit)
411  continue;
412 
413  const StripTopology& Topo = DetUnit->specificTopology();
414  unsigned int NAPV = Topo.nstrips() / 128;
415 
416  for (unsigned int j = 0; j < NAPV; j++) {
417  auto APV = std::make_shared<stAPVGain>();
418  APV->Index = Index;
419  APV->Bin = -1;
420  APV->DetId = Detid.rawId();
421  APV->APVId = j;
422  APV->SubDet = SubDet;
423  APV->FitMPV = -1;
424  APV->FitMPVErr = -1;
425  APV->FitWidth = -1;
426  APV->FitWidthErr = -1;
427  APV->FitChi2 = -1;
428  APV->FitNorm = -1;
429  APV->Gain = -1;
430  APV->PreviousGain = 1;
431  APV->PreviousGainTick = 1;
432  APV->x = DetUnit->position().basicVector().x();
433  APV->y = DetUnit->position().basicVector().y();
434  APV->z = DetUnit->position().basicVector().z();
435  APV->Eta = DetUnit->position().basicVector().eta();
436  APV->Phi = DetUnit->position().basicVector().phi();
437  APV->R = DetUnit->position().basicVector().transverse();
438  APV->Thickness = DetUnit->surface().bounds().thickness();
439  APV->NEntries = 0;
440  APV->isMasked = false;
441 
442  histograms.APVsCollOrdered.push_back(APV);
443  histograms.APVsColl[(APV->DetId << 4) | APV->APVId] = APV;
444  Index++;
445  histograms.NStripAPVs++;
446  } // loop on APVs
447  } // if is Strips
448  } // loop on dets
449 
450  for (unsigned int i = 0; i < Det.size();
451  i++) { //Make two loop such that the Pixel information is added at the end --> make transition simpler
452  DetId Detid = Det[i]->geographicalId();
453  int SubDet = Detid.subdetId();
455  auto DetUnit = dynamic_cast<const PixelGeomDetUnit*>(Det[i]);
456  if (!DetUnit)
457  continue;
458 
459  const PixelTopology& Topo = DetUnit->specificTopology();
460  unsigned int NROCRow = Topo.nrows() / (80.);
461  unsigned int NROCCol = Topo.ncolumns() / (52.);
462 
463  for (unsigned int j = 0; j < NROCRow; j++) {
464  for (unsigned int i = 0; i < NROCCol; i++) {
465  auto APV = std::make_shared<stAPVGain>();
466  APV->Index = Index;
467  APV->Bin = -1;
468  APV->DetId = Detid.rawId();
469  APV->APVId = (j << 3 | i);
470  APV->SubDet = SubDet;
471  APV->FitMPV = -1;
472  APV->FitMPVErr = -1;
473  APV->FitWidth = -1;
474  APV->FitWidthErr = -1;
475  APV->FitChi2 = -1;
476  APV->Gain = -1;
477  APV->PreviousGain = 1;
478  APV->PreviousGainTick = 1;
479  APV->x = DetUnit->position().basicVector().x();
480  APV->y = DetUnit->position().basicVector().y();
481  APV->z = DetUnit->position().basicVector().z();
482  APV->Eta = DetUnit->position().basicVector().eta();
483  APV->Phi = DetUnit->position().basicVector().phi();
484  APV->R = DetUnit->position().basicVector().transverse();
485  APV->Thickness = DetUnit->surface().bounds().thickness();
486  APV->isMasked = false; //SiPixelQuality_->IsModuleBad(Detid.rawId());
487  APV->NEntries = 0;
488 
489  histograms.APVsCollOrdered.push_back(APV);
490  histograms.APVsColl[(APV->DetId << 4) | APV->APVId] = APV;
491  Index++;
492  histograms.NPixelDets++;
493 
494  } // loop on ROC cols
495  } // loop on ROC rows
496  } // if Pixel
497  } // loop on Dets
498  } //if (!bareTkGeomPtr_) ...
499 }
static constexpr auto TEC
virtual int nstrips() const =0
tuple SubDet
Definition: ntupleEnum.py:14
virtual int ncolumns() const =0
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
virtual int nrows() const =0
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
std::atomic< unsigned int > NPixelDets
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
std::atomic< unsigned int > NStripAPVs
static constexpr auto TOB
Log< level::Info, false > LogInfo
Definition: DetId.h:17
static constexpr auto TIB
std::vector< std::shared_ptr< stAPVGain > > APVsCollOrdered
std::unordered_map< unsigned int, std::shared_ptr< stAPVGain > > APVsColl
static constexpr auto TID
void SiStripGainsPCLWorker::dqmAnalyze ( edm::Event const &  iEvent,
edm::EventSetup const &  iSetup,
APVGain::APVGainHistograms const &  histograms 
) const
overridevirtual

Implements DQMGlobalEDAnalyzerBase< APVGain::APVGainHistograms, Args...>.

Definition at line 173 of file SiStripGainsPCLWorker.cc.

References funct::abs(), AllowSaturation, sistrip::APV, APVGain::APVGainHistograms::APVsColl, RecoTauCleanerPlugins::charge, APVGain::APVGainHistograms::Charge_1, APVGain::APVGainHistograms::Charge_2, APVGain::APVGainHistograms::Charge_3, APVGain::APVGainHistograms::Charge_4, APVGain::APVGainHistograms::Charge_Vs_Index, APVGain::APVGainHistograms::Charge_Vs_PathlengthTECM1, APVGain::APVGainHistograms::Charge_Vs_PathlengthTECM2, APVGain::APVGainHistograms::Charge_Vs_PathlengthTECP1, APVGain::APVGainHistograms::Charge_Vs_PathlengthTECP2, APVGain::APVGainHistograms::Charge_Vs_PathlengthTIB, APVGain::APVGainHistograms::Charge_Vs_PathlengthTIDM, APVGain::APVGainHistograms::Charge_Vs_PathlengthTIDP, APVGain::APVGainHistograms::Charge_Vs_PathlengthTOB, edm::EventID::event(), APVGain::APVGainHistograms::EventStats, APVGain::FetchIndices(), dqm::impl::MonitorElement::Fill(), FirstSetOfConstants, edm::Event::getByToken(), edm::EventSetup::getData(), edm::EventBase::id(), dqmdumpme::indices, TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localDirection(), LogDebug, visualization-live-secondInstance_cfg::m, m_association_token, m_calibrationMode, m_tracks_token, MaxNrStrips, MaxTrackChiOverNdf, MaxTrackEta, MaxTrackingIteration, MaxTrackMomentum, MinTrackEta, MinTrackHits, MinTrackMomentum, me0TriggerPseudoDigis_cff::nStrips, OldGainRemoving, fed_dqm_sourceclient-live_cfg::path, edm::EventID::run(), cond::runnumber, statCollectionFromMode(), StripSubdetector::TEC, theTopologyMap, StripSubdetector::TIB, StripSubdetector::TID, tkGeomToken_, StripSubdetector::TOB, HLT_FULL_cff::track, tracks, tTopoToken_, useCalibration, and Validation.

175  {
176  using namespace edm;
177 
178  unsigned int eventnumber = iEvent.id().event();
179  unsigned int runnumber = iEvent.id().run();
180 
181  edm::LogInfo("SiStripGainsPCLWorker") << "Processing run " << runnumber << " and event " << eventnumber << std::endl;
182 
183  const TrackerTopology* topo = &iSetup.getData(tTopoToken_);
184  const TrackerGeometry* tGeom = &iSetup.getData(tkGeomToken_);
185 
186  // Event data handles
188  iEvent.getByToken(m_tracks_token, tracks);
189  edm::Handle<TrajTrackAssociationCollection> trajTrackAssociations;
190  iEvent.getByToken(m_association_token, trajTrackAssociations);
191 
192  for (const auto& elem : theTopologyMap) {
193  LogDebug("SiStripGainsPCLWorker") << elem.first << " - " << elem.second.m_string << " "
194  << elem.second.m_subdetectorId << " " << elem.second.m_subdetectorSide << " "
195  << elem.second.m_subdetectorPlane << std::endl;
196  }
197 
198  LogDebug("SiStripGainsPCLWorker") << "for mode" << m_calibrationMode << std::endl;
199 
200  int elepos = statCollectionFromMode(m_calibrationMode.c_str());
201 
202  std::size_t nStoredClusters{0};
203  for (const auto& assoc : *trajTrackAssociations) {
204  const auto traj = assoc.key.get();
205  const auto track = assoc.val.get();
206 
207  if ((track->eta() < MinTrackEta) || (track->eta() > MaxTrackEta) || (track->p() < MinTrackMomentum) ||
208  (track->p() > MaxTrackMomentum) || (track->numberOfValidHits() < MinTrackHits) ||
209  ((track->chi2() / track->ndof()) > MaxTrackChiOverNdf) || (track->algo() > MaxTrackingIteration))
210  continue;
211 
212  int iCluster{-1};
213  for (const auto& meas : traj->measurements()) {
214  const auto& trajState = meas.updatedState();
215  if (!trajState.isValid())
216  continue;
217 
218  // there can be 2 (stereo module), 1 (no stereo module), or 0 (no pixel or strip hit) clusters
219  auto clusters = getClusters(meas.recHit()->hit());
220  for (const auto hitCluster : clusters) {
221  ++iCluster;
222  bool saturation = false;
223  bool overlapping = false;
224  unsigned int charge = 0;
225  int firstStrip = 0;
226  unsigned int nStrips = 0;
227  if (hitCluster.strip) {
228  const auto& ampls = hitCluster.strip->amplitudes();
229  firstStrip = hitCluster.strip->firstStrip();
230  nStrips = ampls.size();
231  charge = hitCluster.strip->charge();
232  saturation = std::any_of(ampls.begin(), ampls.end(), [](uint8_t amp) { return amp >= 254; });
233 
234  overlapping = (((firstStrip % 128) == 0) || ((firstStrip / 128) != ((firstStrip + int(nStrips)) / 128)));
235  } else if (hitCluster.pixel) {
236  const auto& ampls = hitCluster.pixel->pixelADC();
237  const int firstRow = hitCluster.pixel->minPixelRow();
238  const int firstCol = hitCluster.pixel->minPixelCol();
239  firstStrip = ((firstRow / 80) << 3 | (firstCol / 52)) * 128; //Hack to save the APVId
240  nStrips = 0;
241  for (const auto amp : ampls) {
242  charge += amp;
243  if (amp >= 254)
244  saturation = true;
245  }
246  }
247  // works for both strip and pixel thanks to firstStrip encoding for pixel above, as in the calibTree
248  std::shared_ptr<stAPVGain> APV = histograms.APVsColl.at((hitCluster.det << 4) | (firstStrip / 128));
249 
250  const auto farFromEdge = (hitCluster.strip ? isFarFromBorder(trajState, hitCluster.det, tGeom) : true);
251  if ((APV->SubDet > 2) &&
252  ((!farFromEdge) || overlapping || (saturation && !AllowSaturation) || (nStrips > MaxNrStrips)))
253  continue;
254 
255  int clusterCharge = 0;
256  if (APV->SubDet > 2) { // strip
258  saturation = false;
259  for (const auto origCharge : hitCluster.strip->amplitudes()) {
260  int stripCharge;
261  if (useCalibration) {
262  if (FirstSetOfConstants) {
263  stripCharge = int(origCharge / APV->CalibGain);
264  } else {
265  stripCharge = int(origCharge * (APV->PreviousGain / APV->CalibGain));
266  }
267  } else {
268  if (FirstSetOfConstants) {
269  stripCharge = origCharge;
270  } else {
271  stripCharge = int(origCharge * APV->PreviousGain);
272  }
273  }
274  if (stripCharge > 1024) {
275  stripCharge = 255;
276  saturation = true;
277  } else if (stripCharge > 254) {
278  stripCharge = 254;
279  saturation = true;
280  }
281  clusterCharge += stripCharge;
282  }
283  if (saturation && !AllowSaturation)
284  continue;
285  } else {
286  clusterCharge = charge;
287  }
288  } else { // pixel
289  clusterCharge = charge / 265.0; //expected scale factor between pixel and strip charge
290  }
291 
292  const auto trackDir = trajState.localDirection();
293  const auto path = (10. * APV->Thickness) / std::abs(trackDir.z() / trackDir.mag());
294  double ClusterChargeOverPath = ((double)clusterCharge) / path;
295  if (APV->SubDet > 2) {
296  if (Validation) {
297  ClusterChargeOverPath /= APV->PreviousGain;
298  }
299  if (OldGainRemoving) {
300  ClusterChargeOverPath *= APV->PreviousGain;
301  }
302  } else {
303  // keep processing of pixel cluster charge until here
304  continue;
305  }
306  ++nStoredClusters;
307 
308  // real histogram for calibration
309  histograms.Charge_Vs_Index[elepos]->Fill(APV->Index, ClusterChargeOverPath);
310  LogDebug("SiStripGainsPCLWorker")
311  << " for mode " << m_calibrationMode << "\n"
312  << " i " << iCluster << " useCalibration " << useCalibration << " FirstSetOfConstants "
313  << FirstSetOfConstants << " APV->PreviousGain " << APV->PreviousGain << " APV->CalibGain " << APV->CalibGain
314  << " APV->DetId " << APV->DetId << " APV->Index " << APV->Index << " Charge " << clusterCharge << " Path "
315  << path << " ClusterChargeOverPath " << ClusterChargeOverPath << std::endl;
316 
317  // Fill monitoring histograms
318  int mCharge1 = 0;
319  for (const auto sCharge : hitCluster.strip->amplitudes()) {
320  if (sCharge > 254) {
321  mCharge1 += 254;
322  } else {
323  mCharge1 += sCharge;
324  }
325  }
326  // Revome gains for monitoring
327  int mCharge2 = mCharge1 * APV->PreviousGain; // remove G2
328  int mCharge3 = mCharge1 * APV->PreviousGainTick; // remove G1
329  int mCharge4 = mCharge1 * APV->PreviousGain * APV->PreviousGainTick; // remove G1 and G2
330 
331  LogDebug("SiStripGainsPCLWorker") << " full charge " << mCharge1 << " remove G2 " << mCharge2 << " remove G1 "
332  << mCharge3 << " remove G1*G2 " << mCharge4 << std::endl;
333 
334  auto indices = APVGain::FetchIndices(theTopologyMap, hitCluster.det, topo);
335 
336  for (auto m : indices)
337  histograms.Charge_1[elepos][m]->Fill(((double)mCharge1) / path);
338  for (auto m : indices)
339  histograms.Charge_2[elepos][m]->Fill(((double)mCharge2) / path);
340  for (auto m : indices)
341  histograms.Charge_3[elepos][m]->Fill(((double)mCharge3) / path);
342  for (auto m : indices)
343  histograms.Charge_4[elepos][m]->Fill(((double)mCharge4) / path);
344 
345  if (APV->SubDet == StripSubdetector::TIB) {
346  histograms.Charge_Vs_PathlengthTIB[elepos]->Fill(path, clusterCharge); // TIB
347 
348  } else if (APV->SubDet == StripSubdetector::TOB) {
349  histograms.Charge_Vs_PathlengthTOB[elepos]->Fill(path, clusterCharge); // TOB
350 
351  } else if (APV->SubDet == StripSubdetector::TID) {
352  if (APV->Eta < 0) {
353  histograms.Charge_Vs_PathlengthTIDM[elepos]->Fill(path, clusterCharge);
354  } // TID minus
355  else if (APV->Eta > 0) {
356  histograms.Charge_Vs_PathlengthTIDP[elepos]->Fill(path, clusterCharge);
357  } // TID plus
358 
359  } else if (APV->SubDet == StripSubdetector::TEC) {
360  if (APV->Eta < 0) {
361  if (APV->Thickness < 0.04) {
362  histograms.Charge_Vs_PathlengthTECM1[elepos]->Fill(path, clusterCharge);
363  } // TEC minus, type 1
364  else if (APV->Thickness > 0.04) {
365  histograms.Charge_Vs_PathlengthTECM2[elepos]->Fill(path, clusterCharge);
366  } // TEC minus, type 2
367  } else if (APV->Eta > 0) {
368  if (APV->Thickness < 0.04) {
369  histograms.Charge_Vs_PathlengthTECP1[elepos]->Fill(path, clusterCharge);
370  } // TEC plus, type 1
371  else if (APV->Thickness > 0.04) {
372  histograms.Charge_Vs_PathlengthTECP2[elepos]->Fill(path, clusterCharge);
373  } // TEC plus, type 2
374  }
375  }
376  }
377  }
378  }
379 
380  histograms.EventStats->Fill(0., 0., 1);
381  histograms.EventStats->Fill(1., 0., tracks->size());
382  histograms.EventStats->Fill(2., 0., nStoredClusters);
383 
384  //LogDebug("SiStripGainsPCLWorker")<<" for mode"<< m_calibrationMode
385  // <<" entries in histogram:"<< histograms.Charge_Vs_Index[elepos].getEntries()
386  // <<std::endl;
387 }
static constexpr auto TEC
std::vector< unsigned int > FetchIndices(std::map< unsigned int, APVloc >, uint32_t, const TrackerTopology *topo=nullptr)
auto const & tracks
cannot be loose
edm::EDGetTokenT< edm::View< reco::Track > > m_tracks_token
tuple nStrips
1.2 is to make the matching window safely the two nearest strips 0.35 is the size of an ME0 chamber i...
edm::EDGetTokenT< TrajTrackAssociationCollection > m_association_token
int iEvent
Definition: GenABIO.cc:224
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::map< unsigned int, APVloc > theTopologyMap
static constexpr auto TOB
Log< level::Info, false > LogInfo
static constexpr auto TIB
int statCollectionFromMode(const char *tag) const
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
list indices
Definition: dqmdumpme.py:50
static constexpr auto TID
#define LogDebug(id)
void SiStripGainsPCLWorker::dqmBeginRun ( edm::Run const &  run,
edm::EventSetup const &  iSetup,
APVGain::APVGainHistograms histograms 
) const
overrideprivatevirtual

Reimplemented from DQMGlobalEDAnalyzerBase< APVGain::APVGainHistograms, Args...>.

Definition at line 64 of file SiStripGainsPCLWorker.cc.

References a, sistrip::APV, APVGain::APVGainHistograms::APVsCollOrdered, checkBookAPVColls(), beamvalidation::exit(), gainToken_, edm::EventSetup::getData(), edm::EventSetup::getHandle(), PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, qualityToken_, submitPVResolutionJobs::stdout, and tkGeomTokenBR_.

66  {
67  using namespace edm;
68  static constexpr float defaultGainTick = 690. / 640.;
69 
70  // fills the APV collections at each begin run
71  const TrackerGeometry* bareTkGeomPtr = &iSetup.getData(tkGeomTokenBR_);
72  checkBookAPVColls(bareTkGeomPtr, histograms);
73 
74  const auto gainHandle = iSetup.getHandle(gainToken_);
75  if (!gainHandle.isValid()) {
76  edm::LogError("SiStripGainPCLWorker") << "gainHandle is not valid\n";
77  exit(0);
78  }
79 
80  const auto& siStripQuality = iSetup.getData(qualityToken_);
81 
82  for (unsigned int a = 0; a < histograms.APVsCollOrdered.size(); a++) {
83  std::shared_ptr<stAPVGain> APV = histograms.APVsCollOrdered[a];
84 
85  if (APV->SubDet == PixelSubdetector::PixelBarrel || APV->SubDet == PixelSubdetector::PixelEndcap)
86  continue;
87 
88  APV->isMasked = siStripQuality.IsApvBad(APV->DetId, APV->APVId);
89 
90  if (gainHandle->getNumberOfTags() != 2) {
91  edm::LogError("SiStripGainPCLWorker") << "NUMBER OF GAIN TAG IS EXPECTED TO BE 2\n";
92  fflush(stdout);
93  exit(0);
94  };
95  float newPreviousGain = gainHandle->getApvGain(APV->APVId, gainHandle->getRange(APV->DetId, 1), 1);
96  if (APV->PreviousGain != 1 and newPreviousGain != APV->PreviousGain)
97  edm::LogWarning("SiStripGainPCLWorker") << "WARNING: ParticleGain in the global tag changed\n";
98  APV->PreviousGain = newPreviousGain;
99 
100  float newPreviousGainTick =
101  APV->isMasked ? defaultGainTick : gainHandle->getApvGain(APV->APVId, gainHandle->getRange(APV->DetId, 0), 0);
102  if (APV->PreviousGainTick != 1 and newPreviousGainTick != APV->PreviousGainTick) {
103  edm::LogWarning("SiStripGainPCLWorker")
104  << "WARNING: TickMarkGain in the global tag changed\n"
105  << std::endl
106  << " APV->SubDet: " << APV->SubDet << " APV->APVId:" << APV->APVId << std::endl
107  << " APV->PreviousGainTick: " << APV->PreviousGainTick << " newPreviousGainTick: " << newPreviousGainTick
108  << std::endl;
109  }
110  APV->PreviousGainTick = newPreviousGainTick;
111  }
112 }
edm::ESGetToken< SiStripQuality, SiStripQualityRcd > qualityToken_
Log< level::Error, false > LogError
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomTokenBR_
edm::ESGetToken< SiStripGain, SiStripGainRcd > gainToken_
void checkBookAPVColls(const TrackerGeometry *bareTkGeomPtr, APVGain::APVGainHistograms &histograms) const
std::vector< std::shared_ptr< stAPVGain > > APVsCollOrdered
double a
Definition: hdecay.h:119
Log< level::Warning, false > LogWarning
void SiStripGainsPCLWorker::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static
int SiStripGainsPCLWorker::statCollectionFromMode ( const char *  tag) const
inlineprivate

Definition at line 127 of file SiStripGainsPCLWorker.h.

References dqm_tag_, relativeConstraints::empty, None, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by bookHistograms(), and dqmAnalyze().

127  {
128  std::vector<std::string>::const_iterator it = dqm_tag_.begin();
129  while (it != dqm_tag_.end()) {
130  if (*it == std::string(tag))
131  return it - dqm_tag_.begin();
132  it++;
133  }
134 
135  if (std::string(tag).empty())
136  return 0; // return StdBunch calibration mode for backward compatibility
137 
138  return None;
139 }
std::vector< std::string > dqm_tag_

Member Data Documentation

bool SiStripGainsPCLWorker::AllowSaturation
private

Definition at line 104 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

bool SiStripGainsPCLWorker::doChargeMonitorPerPlane
private

Charge monitor per detector plane

Definition at line 109 of file SiStripGainsPCLWorker.h.

Referenced by bookHistograms(), and SiStripGainsPCLWorker().

std::vector<std::string> SiStripGainsPCLWorker::dqm_tag_
private
bool SiStripGainsPCLWorker::FirstSetOfConstants
private

Definition at line 105 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

edm::ESGetToken<SiStripGain, SiStripGainRcd> SiStripGainsPCLWorker::gainToken_
private

Definition at line 120 of file SiStripGainsPCLWorker.h.

Referenced by dqmBeginRun(), and SiStripGainsPCLWorker().

edm::EDGetTokenT<TrajTrackAssociationCollection> SiStripGainsPCLWorker::m_association_token
private

Definition at line 116 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

std::string SiStripGainsPCLWorker::m_calibrationMode
private

Type of statistics for the calibration

Definition at line 112 of file SiStripGainsPCLWorker.h.

Referenced by bookHistograms(), dqmAnalyze(), and SiStripGainsPCLWorker().

std::string SiStripGainsPCLWorker::m_DQMdir
private

DQM folder hosting the charge statistics and the monitor plots

Definition at line 111 of file SiStripGainsPCLWorker.h.

Referenced by bookHistograms(), and SiStripGainsPCLWorker().

edm::EDGetTokenT<edm::View<reco::Track> > SiStripGainsPCLWorker::m_tracks_token
private

Definition at line 115 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

unsigned int SiStripGainsPCLWorker::MaxNrStrips
private

Definition at line 100 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

double SiStripGainsPCLWorker::MaxTrackChiOverNdf
private

Definition at line 102 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

double SiStripGainsPCLWorker::MaxTrackEta
private

Definition at line 99 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

int SiStripGainsPCLWorker::MaxTrackingIteration
private

Definition at line 103 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

double SiStripGainsPCLWorker::MaxTrackMomentum
private

Definition at line 97 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

double SiStripGainsPCLWorker::MinTrackEta
private

Definition at line 98 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

unsigned int SiStripGainsPCLWorker::MinTrackHits
private

Definition at line 101 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

double SiStripGainsPCLWorker::MinTrackMomentum
private

Definition at line 96 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

bool SiStripGainsPCLWorker::OldGainRemoving
private

Definition at line 107 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

edm::ESGetToken<SiStripQuality, SiStripQualityRcd> SiStripGainsPCLWorker::qualityToken_
private

Definition at line 121 of file SiStripGainsPCLWorker.h.

Referenced by dqmBeginRun(), and SiStripGainsPCLWorker().

std::map<unsigned int, APVloc> SiStripGainsPCLWorker::theTopologyMap
private

Definition at line 124 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> SiStripGainsPCLWorker::tkGeomToken_
private

Definition at line 119 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> SiStripGainsPCLWorker::tkGeomTokenBR_
private

Definition at line 119 of file SiStripGainsPCLWorker.h.

Referenced by dqmBeginRun(), and SiStripGainsPCLWorker().

edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> SiStripGainsPCLWorker::tTopoToken_
private

Definition at line 118 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

bool SiStripGainsPCLWorker::useCalibration
private

Definition at line 108 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

bool SiStripGainsPCLWorker::Validation
private

Definition at line 106 of file SiStripGainsPCLWorker.h.

Referenced by dqmAnalyze(), and SiStripGainsPCLWorker().

std::vector<std::string> SiStripGainsPCLWorker::VChargeHisto
private

Charge monitor plots to be output

Definition at line 113 of file SiStripGainsPCLWorker.h.

Referenced by bookHistograms(), and SiStripGainsPCLWorker().