CMS 3D CMS Logo

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

#include <DiMuonMassBiasClient.h>

Inheritance diagram for DiMuonMassBiasClient:
DQMEDHarvester edm::one::EDProducer< edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::EndProcessBlockProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns, edm::one::SharedResources, edm::Accumulator > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 DiMuonMassBiasClient (const edm::ParameterSet &ps)
 Constructor. More...
 
 ~DiMuonMassBiasClient () override
 Destructor. More...
 
- Public Member Functions inherited from DQMEDHarvester
void accumulate (edm::Event const &ev, edm::EventSetup const &es) final
 
void beginJob () override
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &) override
 
virtual void dqmAnalyze (DQMStore::IBooker &, DQMStore::IGetter &, edm::Event const &, edm::EventSetup const &)
 
 DQMEDHarvester (edm::ParameterSet const &iConfig)
 
 DQMEDHarvester ()
 
virtual void dqmEndLuminosityBlock (DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmEndRun (DQMStore::IBooker &, DQMStore::IGetter &, edm::Run const &, edm::EventSetup const &)
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void endLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &es) final
 
void endProcessBlockProduce (edm::ProcessBlock &) final
 
void endRun (edm::Run const &, edm::EventSetup const &) override
 
void endRunProduce (edm::Run &run, edm::EventSetup const &es) final
 
 ~DQMEDHarvester () override=default
 
- Public Member Functions inherited from edm::one::EDProducer< edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::EndProcessBlockProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns, edm::one::SharedResources, edm::Accumulator >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () 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
 
std::vector< bool > const & recordProvenanceList () 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)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~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::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Protected Member Functions

void beginJob (void) override
 BeginJob. More...
 
void beginRun (edm::Run const &run, edm::EventSetup const &eSetup) override
 BeginRun. More...
 
void dqmEndJob (DQMStore::IBooker &ibooker_, DQMStore::IGetter &igetter_) override
 EndJob. More...
 
- Protected Member Functions inherited from edm::ProducerBase
template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
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< Bconsumes (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 ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
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)
 

Private Member Functions

void bookMEs (DQMStore::IBooker &ibooker)
 book MEs More...
 
void fitAndFillHisto (std::pair< std::string, MonitorElement *> toHarvest, DQMStore::IBooker &iBooker)
 
void fitAndFillProfile (std::pair< std::string, MonitorElement *> toHarvest, DQMStore::IBooker &iBooker)
 
diMuonMassBias::fitOutputs fitLineShape (TH1 *hist, const bool &fitBackground=false) const
 
void getMEsToHarvest (DQMStore::IGetter &igetter)
 

Private Attributes

const bool debugMode_
 
const bool fitBackground_
 
std::map< std::string, MonitorElement * > harvestTargets_
 
float meanConfig_ [3]
 
std::map< std::string, MonitorElement * > meanHistos_
 
std::map< std::string, MonitorElement * > meanProfiles_
 
std::vector< std::string > MEtoHarvest_
 
float sigmaConfig_ [3]
 
const std::string TopFolder_
 
const bool useRooCBShape_
 
const bool useRooCMSShape_
 
const bool useTH1s_
 
float widthConfig_ [3]
 
std::map< std::string, MonitorElement * > widthHistos_
 
std::map< std::string, MonitorElement * > widthProfiles_
 

Additional Inherited Members

- Public Types inherited from DQMEDHarvester
typedef dqm::harvesting::DQMStore DQMStore
 
typedef dqm::harvesting::MonitorElement MonitorElement
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
template<typename T >
using BranchAliasSetterT = ProductRegistryHelper::BranchAliasSetterT< T >
 
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 Attributes inherited from DQMEDHarvester
DQMStoredqmstore_
 
edm::GetterOfProducts< DQMTokenjobmegetter_
 
edm::EDPutTokenT< DQMTokenjobToken_
 
edm::GetterOfProducts< DQMTokenlumimegetter_
 
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::GetterOfProducts< DQMTokenrunmegetter_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Definition at line 59 of file DiMuonMassBiasClient.h.

Constructor & Destructor Documentation

◆ DiMuonMassBiasClient()

DiMuonMassBiasClient::DiMuonMassBiasClient ( const edm::ParameterSet ps)

Constructor.

Definition at line 20 of file DiMuonMassBiasClient.cc.

References debugMode_, diMuonMassBias::fillArrayF(), DiMuonMassBiasClient_cfi::fit_par, edm::ParameterSet::getParameter(), meanConfig_, sigmaConfig_, and widthConfig_.

21  : TopFolder_(iConfig.getParameter<std::string>("FolderName")),
22  useTH1s_(iConfig.getParameter<bool>("useTH1s")),
23  fitBackground_(iConfig.getParameter<bool>("fitBackground")),
24  useRooCBShape_(iConfig.getParameter<bool>("useRooCBShape")),
25  useRooCMSShape_(iConfig.getParameter<bool>("useRooCMSShape")),
26  debugMode_(iConfig.getParameter<bool>("debugMode")),
27  MEtoHarvest_(iConfig.getParameter<std::vector<std::string>>("MEtoHarvest"))
28 //-----------------------------------------------------------------------------------
29 {
30  edm::LogInfo("DiMuonMassBiasClient") << "DiMuonMassBiasClient::Constructing DiMuonMassBiasClient ";
31 
32  // fill the parameters for the fit
33  edm::ParameterSet fit_par = iConfig.getParameter<edm::ParameterSet>("fit_par");
37 
38  if (debugMode_) {
39  edm::LogPrint("DiMuonMassBiasClient")
40  << "mean: " << meanConfig_[0] << " (" << meanConfig_[1] << "," << meanConfig_[2] << ") " << std::endl;
41  edm::LogPrint("DiMuonMassBiasClient")
42  << "width: " << widthConfig_[0] << " (" << widthConfig_[1] << "," << widthConfig_[2] << ")" << std::endl;
43  edm::LogPrint("DiMuonMassBiasClient")
44  << "sigma: " << sigmaConfig_[0] << " (" << sigmaConfig_[1] << "," << sigmaConfig_[2] << ")" << std::endl;
45  }
46 }
const std::string TopFolder_
std::vector< std::string > MEtoHarvest_
Log< level::Warning, true > LogPrint
Log< level::Info, false > LogInfo
void fillArrayF(float *x, const edm::ParameterSet &cfg, const char *name)

◆ ~DiMuonMassBiasClient()

DiMuonMassBiasClient::~DiMuonMassBiasClient ( )
override

Destructor.

Definition at line 49 of file DiMuonMassBiasClient.cc.

51 {
52  edm::LogInfo("DiMuonMassBiasClient") << "DiMuonMassBiasClient::Deleting DiMuonMassBiasClient ";
53 }
Log< level::Info, false > LogInfo

Member Function Documentation

◆ beginJob()

void DiMuonMassBiasClient::beginJob ( void  )
overrideprotectedvirtual

BeginJob.

Reimplemented from edm::one::EDProducerBase.

Definition at line 56 of file DiMuonMassBiasClient.cc.

58 {
59  edm::LogInfo("DiMuonMassBiasClient") << "DiMuonMassBiasClient::beginJob done";
60 }
Log< level::Info, false > LogInfo

◆ beginRun()

void DiMuonMassBiasClient::beginRun ( edm::Run const &  run,
edm::EventSetup const &  eSetup 
)
overrideprotected

BeginRun.

Definition at line 63 of file DiMuonMassBiasClient.cc.

65 {
66  edm::LogInfo("DiMuonMassBiasClient") << "DiMuonMassBiasClient:: Begining of Run";
67 }
Log< level::Info, false > LogInfo

◆ bookMEs()

void DiMuonMassBiasClient::bookMEs ( DQMStore::IBooker ibooker)
private

book MEs

Definition at line 70 of file DiMuonMassBiasClient.cc.

References dqm::implementation::IBooker::book1D(), harvestTargets_, crabWrapper::key, meanHistos_, dqm::implementation::NavigatorBase::setCurrentFolder(), runGCPTkAlMap::title, TopFolder_, widthHistos_, TrackerOfflineValidation_Dqm_cff::xmax, TrackerOfflineValidation_Dqm_cff::xmin, compareTotals::xtitle, and compareTotals::ytitle.

Referenced by dqmEndJob().

72 {
73  iBooker.setCurrentFolder(TopFolder_ + "/DiMuonMassBiasMonitor/MassBias/Profiles");
74  for (const auto& [key, ME] : harvestTargets_) {
75  if (ME == nullptr) {
76  edm::LogError("DiMuonMassBiasClient") << "could not find MonitorElement for key: " << key << std::endl;
77  continue;
78  }
79 
80  const auto& title = ME->getTitle();
81  const auto& xtitle = ME->getAxisTitle(1);
82  const auto& ytitle = ME->getAxisTitle(2);
83 
84  const auto& nxbins = ME->getNbinsX();
85  const auto& xmin = ME->getAxisMin(1);
86  const auto& xmax = ME->getAxisMax(1);
87 
88  MonitorElement* meanToBook =
89  iBooker.book1D(("Mean" + key), (title + ";#LT M_{#mu^{-}#mu^{+}} #GT [GeV];" + ytitle), nxbins, xmin, xmax);
90  meanHistos_.insert({key, meanToBook});
91 
92  MonitorElement* sigmaToBook =
93  iBooker.book1D(("Sigma" + key), (title + ";" + xtitle + ";" + "#sigma of " + ytitle), nxbins, xmin, xmax);
94  widthHistos_.insert({key, sigmaToBook});
95  }
96 }
std::map< std::string, MonitorElement * > widthHistos_
const std::string TopFolder_
Log< level::Error, false > LogError
std::map< std::string, MonitorElement * > harvestTargets_
Definition: ME.h:11
std::map< std::string, MonitorElement * > meanHistos_

◆ dqmEndJob()

void DiMuonMassBiasClient::dqmEndJob ( DQMStore::IBooker ibooker_,
DQMStore::IGetter igetter_ 
)
overrideprotectedvirtual

EndJob.

Implements DQMEDHarvester.

Definition at line 260 of file DiMuonMassBiasClient.cc.

References bookMEs(), fitAndFillHisto(), fitAndFillProfile(), getMEsToHarvest(), harvestTargets_, and useTH1s_.

262 {
263  edm::LogInfo("DiMuonMassBiasClient") << "DiMuonMassBiasClient::endLuminosityBlock";
264 
265  getMEsToHarvest(igetter);
266 
267  // book the histograms upfront
268  if (useTH1s_) {
269  bookMEs(ibooker);
270  }
271 
272  for (const auto& element : harvestTargets_) {
273  if (!useTH1s_) {
274  // if using profiles
275  this->fitAndFillProfile(element, ibooker);
276  } else {
277  // if using histograms
278  this->fitAndFillHisto(element, ibooker);
279  }
280  }
281 }
void getMEsToHarvest(DQMStore::IGetter &igetter)
std::map< std::string, MonitorElement * > harvestTargets_
Log< level::Info, false > LogInfo
void fitAndFillProfile(std::pair< std::string, MonitorElement *> toHarvest, DQMStore::IBooker &iBooker)
void bookMEs(DQMStore::IBooker &ibooker)
book MEs
void fitAndFillHisto(std::pair< std::string, MonitorElement *> toHarvest, DQMStore::IBooker &iBooker)

◆ fillDescriptions()

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

Definition at line 419 of file DiMuonMassBiasClient.cc.

References edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, DiMuonMassBiasClient_cfi::fit_par, SiStripPI::max, and AlCaHLTBitMon_QueryRunRegistry::string.

421 {
423  desc.add<std::string>("FolderName", "DiMuonMassBiasMonitor");
424  desc.add<bool>("useTH1s", false);
425  desc.add<bool>("fitBackground", false);
426  desc.add<bool>("useRooCMSShape", false);
427  desc.add<bool>("useRooCBShape", false);
428  desc.add<bool>("debugMode", false);
429 
431  fit_par.add<std::vector<double>>("mean_par",
434  std::numeric_limits<float>::max()}); // par = mean
435 
436  fit_par.add<std::vector<double>>("width_par",
439  std::numeric_limits<float>::max()}); // par = width
440 
441  fit_par.add<std::vector<double>>("sigma_par",
444  std::numeric_limits<float>::max()}); // par = sigma
445 
446  desc.add<edm::ParameterSetDescription>("fit_par", fit_par);
447 
448  desc.add<std::vector<std::string>>("MEtoHarvest",
449  {"DiMuMassVsMuMuPhi",
450  "DiMuMassVsMuMuEta",
451  "DiMuMassVsMuPlusPhi",
452  "DiMuMassVsMuPlusEta",
453  "DiMuMassVsMuMinusPhi",
454  "DiMuMassVsMuMinusEta",
455  "DiMuMassVsMuMuDeltaEta",
456  "DiMuMassVsCosThetaCS"});
457  descriptions.addWithDefaultLabel(desc);
458 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)

◆ fitAndFillHisto()

void DiMuonMassBiasClient::fitAndFillHisto ( std::pair< std::string, MonitorElement *>  toHarvest,
DQMStore::IBooker iBooker 
)
private

Definition at line 213 of file DiMuonMassBiasClient.cc.

References newFWLiteAna::bin, debugMode_, Measurement1D::error(), fitLineShape(), crabWrapper::key, meanHistos_, mysort::results, Measurement1D::value(), ApeEstimator_cff::width, widthHistos_, and LaserClient_cfi::xaxis.

Referenced by dqmEndJob().

216 {
217  const auto& key = toHarvest.first;
218  const auto& ME = toHarvest.second;
219 
220  if (debugMode_)
221  edm::LogPrint("DiMuonMassBiasClient") << "dealing with key: " << key << std::endl;
222 
223  if (ME == nullptr) {
224  edm::LogError("DiMuonMassBiasClient") << "could not find MonitorElement for key: " << key << std::endl;
225  return;
226  }
227 
228  TH2F* bareHisto = ME->getTH2F();
229  for (int bin = 1; bin <= ME->getNbinsX(); bin++) {
230  const auto& xaxis = bareHisto->GetXaxis();
231  const auto& low_edge = xaxis->GetBinLowEdge(bin);
232  const auto& high_edge = xaxis->GetBinUpEdge(bin);
233 
234  if (debugMode_)
235  edm::LogPrint("DiMuonMassBiasClient") << "dealing with bin: " << bin << " range: (" << std::setprecision(2)
236  << low_edge << "," << std::setprecision(2) << high_edge << ")";
237  TH1D* Proj = bareHisto->ProjectionY(Form("%s_proj_%i", key.c_str(), bin), bin, bin);
238  Proj->SetTitle(Form("%s #in (%.2f,%.2f), bin: %i", Proj->GetTitle(), low_edge, high_edge, bin));
239 
241 
242  if (results.isInvalid()) {
243  edm::LogWarning("DiMuonMassBiasClient") << "the current bin has invalid data" << std::endl;
244  continue;
245  }
246 
247  // fill the mean profiles
248  const Measurement1D& bias = results.getBias();
249  meanHistos_[key]->setBinContent(bin, bias.value());
250  meanHistos_[key]->setBinError(bin, bias.error());
251 
252  // fill the width profiles
253  const Measurement1D& width = results.getWidth();
254  widthHistos_[key]->setBinContent(bin, width.value());
255  widthHistos_[key]->setBinError(bin, width.error());
256  }
257 }
std::map< std::string, MonitorElement * > widthHistos_
diMuonMassBias::fitOutputs fitLineShape(TH1 *hist, const bool &fitBackground=false) const
Log< level::Error, false > LogError
Definition: ME.h:11
Log< level::Warning, true > LogPrint
double value() const
Definition: Measurement1D.h:25
std::map< std::string, MonitorElement * > meanHistos_
results
Definition: mysort.py:8
double error() const
Definition: Measurement1D.h:27
Log< level::Warning, false > LogWarning

◆ fitAndFillProfile()

void DiMuonMassBiasClient::fitAndFillProfile ( std::pair< std::string, MonitorElement *>  toHarvest,
DQMStore::IBooker iBooker 
)
private

Definition at line 118 of file DiMuonMassBiasClient.cc.

References newFWLiteAna::bin, dqm::implementation::IBooker::bookProfile(), debugMode_, Measurement1D::error(), fitLineShape(), crabWrapper::key, LogDebug, meanProfiles_, mysort::results, dqm::implementation::NavigatorBase::setCurrentFolder(), runGCPTkAlMap::title, TopFolder_, Measurement1D::value(), ApeEstimator_cff::width, widthProfiles_, LaserClient_cfi::xaxis, TrackerOfflineValidation_Dqm_cff::xmax, TrackerOfflineValidation_Dqm_cff::xmin, compareTotals::xtitle, and compareTotals::ytitle.

Referenced by dqmEndJob().

121 {
122  const auto& key = toHarvest.first;
123  const auto& ME = toHarvest.second;
124 
125  if (debugMode_)
126  edm::LogPrint("DiMuonMassBiasClient") << "dealing with key: " << key << std::endl;
127 
128  if (ME == nullptr) {
129  edm::LogError("DiMuonMassBiasClient") << "could not find MonitorElement for key: " << key << std::endl;
130  return;
131  }
132 
133  const auto& title = ME->getTitle();
134  const auto& xtitle = ME->getAxisTitle(1);
135  const auto& ytitle = ME->getAxisTitle(2);
136 
137  const auto& nxbins = ME->getNbinsX();
138  const auto& xmin = ME->getAxisMin(1);
139  const auto& xmax = ME->getAxisMax(1);
140 
141  TProfile* p_mean = new TProfile(("Mean" + key).c_str(),
142  (title + ";" + xtitle + ";#LT M_{#mu^{-}#mu^{+}} #GT [GeV]").c_str(),
143  nxbins,
144  xmin,
145  xmax,
146  "g");
147 
148  TProfile* p_width = new TProfile(
149  ("Sigma" + key).c_str(), (title + ";" + xtitle + ";#sigma of " + ytitle).c_str(), nxbins, xmin, xmax, "g");
150 
151  p_mean->Sumw2();
152  p_width->Sumw2();
153 
154  TH2F* bareHisto = ME->getTH2F();
155  for (int bin = 1; bin <= nxbins; bin++) {
156  const auto& xaxis = bareHisto->GetXaxis();
157  const auto& low_edge = xaxis->GetBinLowEdge(bin);
158  const auto& high_edge = xaxis->GetBinUpEdge(bin);
159 
160  if (debugMode_)
161  edm::LogPrint("DiMuonMassBiasClient") << "dealing with bin: " << bin << " range: (" << std::setprecision(2)
162  << low_edge << "," << std::setprecision(2) << high_edge << ")";
163 
164  TH1D* Proj = bareHisto->ProjectionY(Form("%s_proj_%i", key.c_str(), bin), bin, bin);
165  Proj->SetTitle(Form("%s #in (%.2f,%.2f), bin: %i", Proj->GetTitle(), low_edge, high_edge, bin));
166 
168 
169  if (results.isInvalid()) {
170  edm::LogWarning("DiMuonMassBiasClient") << "the current bin has invalid data" << std::endl;
171  continue;
172  }
173 
174  // fill the mean profiles
175  const Measurement1D& bias = results.getBias();
176 
177  // ============================================= DISCLAIMER ================================================
178  // N.B. this is sort of a hack in order to fill arbitrarily both central values and error bars of a TProfile.
179  // Choosing the option "g" in the constructor the bin error will be 1/sqrt(W(j)), where W(j) is the sum of weights.
180  // Filling the sum of weights with the 1 / err^2, the bin error automatically becomes "err".
181  // In order to avoid the central value to be shifted, that's divided by 1 / err^2 as well.
182  // For more information, please consult the https://root.cern.ch/doc/master/classTProfile.html
183 
184  p_mean->SetBinContent(bin, bias.value() / (bias.error() * bias.error()));
185  p_mean->SetBinEntries(bin, 1. / (bias.error() * bias.error()));
186 
187  if (debugMode_)
188  LogDebug("DiMuonBassBiasClient") << " Bin: " << bin << " value: " << bias.value() << " from profile ( "
189  << p_mean->GetBinContent(bin) << ") - error: " << bias.error()
190  << " from profile ( " << p_mean->GetBinError(bin) << " )";
191 
192  // fill the width profiles
193  const Measurement1D& width = results.getWidth();
194 
195  // see discussion above
196  p_width->SetBinContent(bin, width.value() / (width.error() * width.error()));
197  p_width->SetBinEntries(bin, 1. / (width.error() * width.error()));
198  }
199 
200  // now book the profiles
201  iBooker.setCurrentFolder(TopFolder_ + "/DiMuonMassBiasMonitor/MassBias/Profiles");
202  MonitorElement* meanToBook = iBooker.bookProfile(p_mean->GetName(), p_mean);
203  meanProfiles_.insert({key, meanToBook});
204 
205  MonitorElement* sigmaToBook = iBooker.bookProfile(p_width->GetName(), p_width);
206  widthProfiles_.insert({key, sigmaToBook});
207 
208  delete p_mean;
209  delete p_width;
210 }
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
diMuonMassBias::fitOutputs fitLineShape(TH1 *hist, const bool &fitBackground=false) const
const std::string TopFolder_
Log< level::Error, false > LogError
std::map< std::string, MonitorElement * > meanProfiles_
std::map< std::string, MonitorElement * > widthProfiles_
Definition: ME.h:11
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:399
Log< level::Warning, true > LogPrint
double value() const
Definition: Measurement1D.h:25
results
Definition: mysort.py:8
double error() const
Definition: Measurement1D.h:27
Log< level::Warning, false > LogWarning
#define LogDebug(id)

◆ fitLineShape()

diMuonMassBias::fitOutputs DiMuonMassBiasClient::fitLineShape ( TH1 *  hist,
const bool &  fitBackground = false 
) const
private

Definition at line 284 of file DiMuonMassBiasClient.cc.

References b, alignmentValidation::c1, crystalball(), compareTotals::hist, instance, SiStripPI::mean, diMuonMassBias::minimumHits, alignCSCRings::s, ApeEstimator_cff::width, TrackerOfflineValidation_Dqm_cff::xmax, and TrackerOfflineValidation_Dqm_cff::xmin.

Referenced by fitAndFillHisto(), and fitAndFillProfile().

286 {
287  if (hist->GetEntries() < diMuonMassBias::minimumHits) {
288  edm::LogWarning("DiMuonMassBiasClient") << " Input histogram:" << hist->GetName() << " has not enough entries ("
289  << hist->GetEntries() << ") for a meaningful Voigtian fit!\n"
290  << "Skipping!";
291 
292  return diMuonMassBias::fitOutputs(Measurement1D(0., 0.), Measurement1D(0., 0.));
293  }
294 
295  TCanvas* c1 = new TCanvas();
296  if (debugMode_) {
297  c1->Clear();
298  c1->SetLeftMargin(0.15);
299  c1->SetRightMargin(0.10);
300  }
301 
302  // silence messages
303  RooMsgService::instance().setGlobalKillBelow(RooFit::FATAL);
304 
305  Double_t xmin = hist->GetXaxis()->GetXmin();
306  Double_t xmax = hist->GetXaxis()->GetXmax();
307 
308  if (debugMode_) {
309  edm::LogPrint("DiMuonMassBiasClient") << "fitting range: (" << xmin << "-" << xmax << ")" << std::endl;
310  }
311 
312  RooRealVar InvMass("InvMass", "di-muon mass M(#mu^{+}#mu^{-}) [GeV]", xmin, xmax);
313  std::unique_ptr<RooPlot> frame{InvMass.frame()};
314  RooDataHist datahist("datahist", "datahist", InvMass, RooFit::Import(*hist));
315  datahist.plotOn(frame.get());
316 
317  // parameters of the Voigtian
318  RooRealVar mean("#mu", "mean", meanConfig_[0], meanConfig_[1], meanConfig_[2]); //90.0, 60.0, 120.0 (for Z)
319  RooRealVar width("width", "width", widthConfig_[0], widthConfig_[1], widthConfig_[2]); // 5.0, 0.0, 120.0 (for Z)
320  RooRealVar sigma("#sigma", "sigma", sigmaConfig_[0], sigmaConfig_[1], sigmaConfig_[2]); // 5.0, 0.0, 120.0 (for Z)
321  RooVoigtian voigt("voigt", "voigt", InvMass, mean, width, sigma);
322 
323  // parameters of the Crystal-ball
324  RooRealVar peakCB("peakCB", "peakCB", meanConfig_[0], meanConfig_[1], meanConfig_[2]);
325  RooRealVar sigmaCB("#sigma", "sigma", sigmaConfig_[0], sigmaConfig_[1], sigmaConfig_[2]);
326  RooRealVar alphaCB("#alpha", "alpha", 1., 0., 10.);
327  RooRealVar nCB("n", "n", 1., 0., 100.);
328  RooCBShape crystalball("crystalball", "crystalball", InvMass, peakCB, sigmaCB, alphaCB, nCB);
329 
330  // for the simple background fit
331  RooRealVar lambda("#lambda", "slope", 0., -50., 50.);
332  RooExponential expo("expo", "expo", InvMass, lambda);
333 
334  // for the more refined background fit
335  RooRealVar exp_alpha("#alpha", "alpha", 40.0, 20.0, 160.0);
336  RooRealVar exp_beta("#beta", "beta", 0.05, 0.0, 2.0);
337  RooRealVar exp_gamma("#gamma", "gamma", 0.02, 0.0, 0.1);
338  RooRealVar exp_peak("peak", "peak", meanConfig_[0]);
339  RooCMSShape exp_pdf("exp_pdf", "bkg shape", InvMass, exp_alpha, exp_beta, exp_gamma, exp_peak);
340 
341  // define the signal and background fractions
342  RooRealVar b("N_{b}", "Number of background events", 0, hist->GetEntries() / 10.);
343  RooRealVar s("N_{s}", "Number of signal events", 0, hist->GetEntries());
344 
345  if (fitBackground_) {
346  RooArgList listPdf;
347  if (useRooCBShape_) {
348  if (useRooCMSShape_) {
349  // crystal-ball + CMS-shape fit
350  listPdf.add(crystalball);
351  listPdf.add(exp_pdf);
352  } else {
353  // crystal-ball + exponential fit
354  listPdf.add(crystalball);
355  listPdf.add(expo);
356  }
357  } else {
358  if (useRooCMSShape_) {
359  // voigtian + CMS-shape fit
360  listPdf.add(voigt);
361  listPdf.add(exp_pdf);
362  } else {
363  // voigtian + exponential fit
364  listPdf.add(voigt);
365  listPdf.add(expo);
366  }
367  }
368 
369  RooAddPdf fullModel("fullModel", "Signal + Background Model", listPdf, RooArgList(s, b));
370  fullModel.fitTo(datahist, RooFit::PrintLevel(-1));
371  fullModel.plotOn(frame.get(), RooFit::LineColor(kRed));
372  if (useRooCMSShape_) {
373  fullModel.plotOn(frame.get(), RooFit::Components(exp_pdf), RooFit::LineStyle(kDashed)); //Other option
374  } else {
375  fullModel.plotOn(frame.get(), RooFit::Components(expo), RooFit::LineStyle(kDashed)); //Other option
376  }
377  fullModel.paramOn(frame.get(), RooFit::Layout(0.65, 0.90, 0.90));
378  } else {
379  if (useRooCBShape_) {
380  // use crystal-ball for a fit-only signal
381  crystalball.fitTo(datahist, RooFit::PrintLevel(-1));
382  crystalball.plotOn(frame.get(), RooFit::LineColor(kRed)); //this will show fit overlay on canvas
383  crystalball.paramOn(frame.get(),
384  RooFit::Layout(0.65, 0.90, 0.90)); //this will display the fit parameters on canvas
385  } else {
386  // use voigtian for a fit-only signal
387  voigt.fitTo(datahist, RooFit::PrintLevel(-1));
388  voigt.plotOn(frame.get(), RooFit::LineColor(kRed)); //this will show fit overlay on canvas
389  voigt.paramOn(frame.get(), RooFit::Layout(0.65, 0.90, 0.90)); //this will display the fit parameters on canvas
390  }
391  }
392 
393  // Redraw data on top and print / store everything
394  datahist.plotOn(frame.get());
395  frame->GetYaxis()->SetTitle("n. of events");
396  TString histName = hist->GetName();
397  frame->SetName("frame" + histName);
398  frame->SetTitle(hist->GetTitle());
399  frame->Draw();
400 
401  if (debugMode_) {
402  c1->Print("fit_debug" + histName + ".pdf");
403  }
404  delete c1;
405 
406  float mass_mean = useRooCBShape_ ? peakCB.getVal() : mean.getVal();
407  float mass_sigma = useRooCBShape_ ? sigmaCB.getVal() : sigma.getVal();
408 
409  float mass_mean_err = useRooCBShape_ ? peakCB.getError() : mean.getError();
410  float mass_sigma_err = useRooCBShape_ ? sigmaCB.getError() : sigma.getError();
411 
412  Measurement1D resultM(mass_mean, mass_mean_err);
413  Measurement1D resultW(mass_sigma, mass_sigma_err);
414 
415  return diMuonMassBias::fitOutputs(resultM, resultW);
416 }
static PFTauRenderPlugin instance
Log< level::Warning, true > LogPrint
double b
Definition: hdecay.h:118
static constexpr int minimumHits
double crystalball(double *x, double *par)
Definition: myFunctions.cc:98
Log< level::Warning, false > LogWarning

◆ getMEsToHarvest()

void DiMuonMassBiasClient::getMEsToHarvest ( DQMStore::IGetter igetter)
private

Definition at line 99 of file DiMuonMassBiasClient.cc.

References dqm::implementation::IGetter::get(), harvestTargets_, MEtoHarvest_, AlCaHLTBitMon_QueryRunRegistry::string, and TopFolder_.

Referenced by dqmEndJob().

101 {
102  std::string inFolder = TopFolder_ + "/DiMuonMassBiasMonitor/MassBias/";
103 
104  //loop on the list of histograms to harvest
105  for (const auto& hname : MEtoHarvest_) {
106  MonitorElement* toHarvest = iGetter.get(inFolder + hname);
107 
108  if (toHarvest == nullptr) {
109  edm::LogError("DiMuonMassBiasClient") << "could not find input MonitorElement: " << inFolder + hname << std::endl;
110  continue;
111  }
112 
113  harvestTargets_.insert({hname, toHarvest});
114  }
115 }
const std::string TopFolder_
Log< level::Error, false > LogError
std::map< std::string, MonitorElement * > harvestTargets_
std::vector< std::string > MEtoHarvest_

Member Data Documentation

◆ debugMode_

const bool DiMuonMassBiasClient::debugMode_
private

Definition at line 93 of file DiMuonMassBiasClient.h.

Referenced by DiMuonMassBiasClient(), fitAndFillHisto(), and fitAndFillProfile().

◆ fitBackground_

const bool DiMuonMassBiasClient::fitBackground_
private

Definition at line 90 of file DiMuonMassBiasClient.h.

◆ harvestTargets_

std::map<std::string, MonitorElement*> DiMuonMassBiasClient::harvestTargets_
private

Definition at line 111 of file DiMuonMassBiasClient.h.

Referenced by bookMEs(), dqmEndJob(), and getMEsToHarvest().

◆ meanConfig_

float DiMuonMassBiasClient::meanConfig_[3]
private

Definition at line 95 of file DiMuonMassBiasClient.h.

Referenced by DiMuonMassBiasClient().

◆ meanHistos_

std::map<std::string, MonitorElement*> DiMuonMassBiasClient::meanHistos_
private

Definition at line 103 of file DiMuonMassBiasClient.h.

Referenced by bookMEs(), and fitAndFillHisto().

◆ meanProfiles_

std::map<std::string, MonitorElement*> DiMuonMassBiasClient::meanProfiles_
private

Definition at line 107 of file DiMuonMassBiasClient.h.

Referenced by fitAndFillProfile().

◆ MEtoHarvest_

std::vector<std::string> DiMuonMassBiasClient::MEtoHarvest_
private

Definition at line 100 of file DiMuonMassBiasClient.h.

Referenced by getMEsToHarvest().

◆ sigmaConfig_

float DiMuonMassBiasClient::sigmaConfig_[3]
private

Definition at line 97 of file DiMuonMassBiasClient.h.

Referenced by DiMuonMassBiasClient().

◆ TopFolder_

const std::string DiMuonMassBiasClient::TopFolder_
private

Definition at line 88 of file DiMuonMassBiasClient.h.

Referenced by bookMEs(), fitAndFillProfile(), and getMEsToHarvest().

◆ useRooCBShape_

const bool DiMuonMassBiasClient::useRooCBShape_
private

Definition at line 91 of file DiMuonMassBiasClient.h.

◆ useRooCMSShape_

const bool DiMuonMassBiasClient::useRooCMSShape_
private

Definition at line 92 of file DiMuonMassBiasClient.h.

◆ useTH1s_

const bool DiMuonMassBiasClient::useTH1s_
private

Definition at line 89 of file DiMuonMassBiasClient.h.

Referenced by dqmEndJob().

◆ widthConfig_

float DiMuonMassBiasClient::widthConfig_[3]
private

Definition at line 96 of file DiMuonMassBiasClient.h.

Referenced by DiMuonMassBiasClient().

◆ widthHistos_

std::map<std::string, MonitorElement*> DiMuonMassBiasClient::widthHistos_
private

Definition at line 104 of file DiMuonMassBiasClient.h.

Referenced by bookMEs(), and fitAndFillHisto().

◆ widthProfiles_

std::map<std::string, MonitorElement*> DiMuonMassBiasClient::widthProfiles_
private

Definition at line 108 of file DiMuonMassBiasClient.h.

Referenced by fitAndFillProfile().