CMS 3D CMS Logo

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

#include <CalibTracker/SiPixelLorentzAngle/src/SiPixelLorentzAnglePCLHarvesterMCS.cc>

Inheritance diagram for SiPixelLorentzAnglePCLHarvesterMCS:
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 Types

using FitParametersInitValuesMuHFitMap = std::unordered_map< std::string, double >
 
using FPixCotAngleFitResults = std::unordered_map< uint32_t, std::pair< double, double > >
 
using FpixMuHResults = std::unordered_map< std::string, std::pair< double, double > >
 
- 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
 

Public Member Functions

void beginRun (const edm::Run &, const edm::EventSetup &) override
 
 SiPixelLorentzAnglePCLHarvesterMCS (const edm::ParameterSet &)
 
 ~SiPixelLorentzAnglePCLHarvesterMCS () override=default
 
- 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 &)
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

void dqmEndJob (DQMStore::IBooker &, DQMStore::IGetter &) override
 
void findMean (dqm::reco::MonitorElement *h_2D, dqm::reco::MonitorElement *h_mean, TH1D *h_slice)
 
SiPixelLAHarvestMCS::fitStatus fitMCSHistogram (dqm::reco::MonitorElement *h_mean)
 
int getIndex (bool isBetaAngle, int r, int p, int s)
 

Private Attributes

const SiPixelLorentzAnglecurrentLorentzAngle_
 
const std::string dqmDir_
 
std::unique_ptr< TF1 > f1_
 
const std::vector< double > fitParametersInitValues_
 
const std::vector< double > fitParametersInitValuesMuHFit_
 
FitParametersInitValuesMuHFitMap fitParametersInitValuesMuHFitMap_
 
const std::vector< double > fitRange_
 
FpixMuHResults fpixMuHResults
 
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordgeomEsToken_
 
SiPixelLorentzAngleCalibrationHistograms hists_
 
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecordmagneticFieldToken_
 
const int minHitsCut_
 
std::vector< std::string > newmodulelist_
 
const std::string recordName_
 
const edm::ESGetToken< SiPixelLorentzAngle, SiPixelLorentzAngleRcdsiPixelLAEsToken_
 
std::pair< double, double > theFitRange_ {-1.5, 1.5}
 
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtopoEsTokenBR_
 
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtopoEsTokenER_
 
const TrackerTopologytTopo
 

Additional Inherited Members

- 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)
 
- 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

Description: reads the intermediate ALCAPROMPT DQMIO-like dataset and performs the fitting of the SiPixel Lorentz Angle in the Prompt Calibration Loop Implementation: Reads the 16 2D histograms of the cluster size x/y vs cot(alpha/beta) and 16*3 histograms of the magnetic field components created by SiPixelLorentzAnglePCLWorker module. The cluster size x/y vs cot(alpha/beta) histograms are used to generate 1D profiles (average cluster size x/y vs cot(alpha/beta)) which are then fit and the values of the cot (alpha/beta) for which the cluster sizes are minimal are determined. The obtained cot(alpha/beta)_min value for z- and z+ side are used to perform fit and the muH for different rings and panels of the Pixel Forward Phase 1 detector using the formulas: cot(alpha)_min = vx/vz = (muHBy + muH^2*Bz*Bx)/(1+muH^2*Bz^2) cot(beta)_min = vy/vz = -(muHBx - muH^2*Bz*Bx)/(1+muH^2*Bz^2)

The extracted value of the muH are stored in an output sqlite file which is then uploaded to the conditions database.

Definition at line 145 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Member Typedef Documentation

◆ FitParametersInitValuesMuHFitMap

using SiPixelLorentzAnglePCLHarvesterMCS::FitParametersInitValuesMuHFitMap = std::unordered_map<std::string, double>

Definition at line 151 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

◆ FPixCotAngleFitResults

using SiPixelLorentzAnglePCLHarvesterMCS::FPixCotAngleFitResults = std::unordered_map<uint32_t, std::pair<double, double> >

Definition at line 149 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

◆ FpixMuHResults

using SiPixelLorentzAnglePCLHarvesterMCS::FpixMuHResults = std::unordered_map<std::string, std::pair<double, double> >

Definition at line 150 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Constructor & Destructor Documentation

◆ SiPixelLorentzAnglePCLHarvesterMCS()

SiPixelLorentzAnglePCLHarvesterMCS::SiPixelLorentzAnglePCLHarvesterMCS ( const edm::ParameterSet iConfig)

Definition at line 189 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

References Exception, fitParametersInitValues_, fitParametersInitValuesMuHFit_, fitParametersInitValuesMuHFitMap_, fitRange_, edm::Service< T >::isAvailable(), and theFitRange_.

190  : geomEsToken_(esConsumes<edm::Transition::BeginRun>()),
191  topoEsTokenBR_(esConsumes<edm::Transition::BeginRun>()),
192  topoEsTokenER_(esConsumes<edm::Transition::EndRun>()),
193  siPixelLAEsToken_(esConsumes<edm::Transition::BeginRun>()),
194  dqmDir_(iConfig.getParameter<std::string>("dqmDir")),
195  newmodulelist_(iConfig.getParameter<std::vector<std::string>>("newmodulelist")),
196  fitRange_(iConfig.getParameter<std::vector<double>>("fitRange")),
197  fitParametersInitValues_(iConfig.getParameter<std::vector<double>>("fitParameters")),
198  fitParametersInitValuesMuHFit_(iConfig.getParameter<std::vector<double>>("fitParametersMuHFit")),
199  minHitsCut_(iConfig.getParameter<int>("minHitsCut")),
200  recordName_(iConfig.getParameter<std::string>("record")) {
201  // initialize the fit range
202 
203  if (fitRange_.size() == 2) {
204  theFitRange_.first = fitRange_[0];
205  theFitRange_.second = fitRange_[1];
206  } else {
207  throw cms::Exception("SiPixelLorentzAnglePCLHarvesterMCS") << "Wrong number of fit range parameters specified";
208  }
209 
210  if (fitParametersInitValues_.size() != 5) {
211  throw cms::Exception("SiPixelLorentzAnglePCLHarvesterMCS")
212  << "Wrong number of initial values for fit parameters specified";
213  }
214 
215  if (fitParametersInitValuesMuHFit_.size() != 4) {
216  throw cms::Exception("SiPixelLorentzAnglePCLHarvesterMCS")
217  << "Wrong number of initial values for fit parameters specified";
218  }
219 
224 
225  // first ensure DB output service is available
227  if (!poolDbService.isAvailable())
228  throw cms::Exception("SiPixelLorentzAnglePCLHarvesterMCS") << "PoolDBService required";
229 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
FitParametersInitValuesMuHFitMap fitParametersInitValuesMuHFitMap_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomEsToken_
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoEsTokenBR_
const edm::ESGetToken< SiPixelLorentzAngle, SiPixelLorentzAngleRcd > siPixelLAEsToken_
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoEsTokenER_
bool isAvailable() const
Definition: Service.h:40

◆ ~SiPixelLorentzAnglePCLHarvesterMCS()

SiPixelLorentzAnglePCLHarvesterMCS::~SiPixelLorentzAnglePCLHarvesterMCS ( )
overridedefault

Member Function Documentation

◆ beginRun()

void SiPixelLorentzAnglePCLHarvesterMCS::beginRun ( const edm::Run iRun,
const edm::EventSetup iSetup 
)
override

Definition at line 232 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

References PixelEndcapName::bladeName(), SiPixelLorentzAngleCalibrationHistograms::BPixnewDetIds_, SiPixelLorentzAngleCalibrationHistograms::BPixnewLayer_, SiPixelLorentzAngleCalibrationHistograms::BPixnewModule_, SiPixelLorentzAngleCalibrationHistograms::BPixnewmodulename_, submitPVResolutionJobs::count, currentLorentzAngle_, SiPixelLorentzAngleCalibrationHistograms::detIdsList, PixelEndcapName::diskName(), spr::find(), SiPixelLorentzAngleCalibrationHistograms::FPixnewBlade_, SiPixelLorentzAngleCalibrationHistograms::FPixnewDetIds_, SiPixelLorentzAngleCalibrationHistograms::FPixnewDisk_, SiPixelLorentzAngleCalibrationHistograms::FPixnewmodulename_, GeomDet::geographicalId(), relativeConstraints::geom, geomEsToken_, edm::EventSetup::getData(), PixelBarrelName::getDetId(), PixelEndcapName::getDetId(), hists_, mps_fire::i, l1ctLayer2EG_cff::id, pixelTopology::layer, PixelBarrelName::layerName(), LogDebug, genParticles_cff::map, callgraph::module, PixelBarrelName::moduleName(), newmodulelist_, SiPixelLorentzAngleCalibrationHistograms::nLadders_, SiPixelLorentzAngleCalibrationHistograms::nlay, SiPixelLorentzAngleCalibrationHistograms::nModules_, PixelSubdetector::PixelBarrel, TrackerTopology::pxbLayer(), TrackerTopology::pxbModule(), DetId::rawId(), siPixelLAEsToken_, topoEsTokenBR_, tTopo, and parallelization::uint.

232  {
233  // geometry
234 
235  const TrackerGeometry* geom = &iSetup.getData(geomEsToken_);
236  tTopo = &iSetup.getData(topoEsTokenBR_);
239  hists_.nlay = geom->numberOfLayers(PixelSubdetector::PixelBarrel);
240  hists_.nModules_.resize(hists_.nlay);
241  hists_.nLadders_.resize(hists_.nlay);
242  for (int i = 0; i < hists_.nlay; i++) {
243  hists_.nModules_[i] = map.getPXBModules(i + 1);
244  hists_.nLadders_[i] = map.getPXBLadders(i + 1);
245  }
246 
247  // list of modules already filled, then return (we already entered here)
248  if (!hists_.BPixnewDetIds_.empty() || !hists_.FPixnewDetIds_.empty())
249  return;
250 
251  if (!newmodulelist_.empty()) {
252  for (auto const& modulename : newmodulelist_) {
253  if (modulename.find("BPix_") != std::string::npos) {
254  PixelBarrelName bn(modulename, true);
255  const auto& detId = bn.getDetId(tTopo);
256  hists_.BPixnewmodulename_.push_back(modulename);
257  hists_.BPixnewDetIds_.push_back(detId.rawId());
258  hists_.BPixnewModule_.push_back(bn.moduleName());
259  hists_.BPixnewLayer_.push_back(bn.layerName());
260  } else if (modulename.find("FPix_") != std::string::npos) {
261  PixelEndcapName en(modulename, true);
262  const auto& detId = en.getDetId(tTopo);
263  hists_.FPixnewmodulename_.push_back(modulename);
264  hists_.FPixnewDetIds_.push_back(detId.rawId());
265  hists_.FPixnewDisk_.push_back(en.diskName());
266  hists_.FPixnewBlade_.push_back(en.bladeName());
267  }
268  }
269  }
270 
271  uint count = 0;
272  for (const auto& id : hists_.BPixnewDetIds_) {
273  LogDebug("SiPixelLorentzAnglePCLHarvesterMCS") << id;
274  count++;
275  }
276  LogDebug("SiPixelLorentzAnglePCLHarvesterMCS") << "Stored a total of " << count << " new detIds.";
277 
278  // list of modules already filled, return (we already entered here)
279  if (!hists_.detIdsList.empty())
280  return;
281 
282  std::vector<uint32_t> treatedIndices;
283 
284  for (const auto& det : geom->detsPXB()) {
285  const PixelGeomDetUnit* pixelDet = dynamic_cast<const PixelGeomDetUnit*>(det);
286  const auto& layer = tTopo->pxbLayer(pixelDet->geographicalId());
287  const auto& module = tTopo->pxbModule(pixelDet->geographicalId());
288  int i_index = module + (layer - 1) * hists_.nModules_[layer - 1];
289 
290  uint32_t rawId = pixelDet->geographicalId().rawId();
291 
292  // if the detId is already accounted for in the special class, do not attach it
293  if (std::find(hists_.BPixnewDetIds_.begin(), hists_.BPixnewDetIds_.end(), rawId) != hists_.BPixnewDetIds_.end())
294  continue;
295  if (std::find(treatedIndices.begin(), treatedIndices.end(), i_index) != treatedIndices.end()) {
296  hists_.detIdsList[i_index].push_back(rawId);
297  } else {
298  hists_.detIdsList.insert(std::pair<uint32_t, std::vector<uint32_t>>(i_index, {rawId}));
299  treatedIndices.push_back(i_index);
300  }
301  }
302 
303  count = 0;
304  for (const auto& i : treatedIndices) {
305  for (const auto& id : hists_.detIdsList[i]) {
306  LogDebug("SiPixelLorentzAnglePCLHarvesterMCS") << id;
307  count++;
308  };
309  }
310  LogDebug("SiPixelLorentzAnglePCLHarvesterMCS") << "Stored a total of " << count << " detIds.";
311 }
unsigned int pxbLayer(const DetId &id) const
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomEsToken_
std::unordered_map< uint32_t, std::vector< uint32_t > > detIdsList
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoEsTokenBR_
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
const edm::ESGetToken< SiPixelLorentzAngle, SiPixelLorentzAngleRcd > siPixelLAEsToken_
unsigned int pxbModule(const DetId &id) const
SiPixelLorentzAngleCalibrationHistograms hists_
#define LogDebug(id)

◆ dqmEndJob()

void SiPixelLorentzAnglePCLHarvesterMCS::dqmEndJob ( DQMStore::IBooker iBooker,
DQMStore::IGetter iGetter 
)
overrideprivatevirtual

Implements DQMEDHarvester.

Definition at line 313 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

References SiPixelLAHarvestMCS::FitFPixMuH::add(), cms::cuda::assert(), SiPixelLAHarvestMCS::FPixMuH::bfield, dqm::implementation::IBooker::book1D(), dqm::implementation::NavigatorBase::cd(), currentLorentzAngle_, cond::service::PoolDBOutputService::currentTime(), dqmDir_, cppFunctionSkipper::exception, f, f1_, findMean(), SiPixelLAHarvestMCS::FitFPixMuH::fit(), fitMCSHistogram(), fitParametersInitValuesMuHFitMap_, dqm-mbProfile::format, fpixMuHResults, dqm::implementation::IGetter::get(), getIndex(), SiPixelLorentzAngle::getLorentzAngles(), SiPixelLAHarvestMCS::FitFPixMuH::getMuH(), SiPixelLAHarvestMCS::FitFPixMuH::getMuHErr(), SiPixelLorentzAngleCalibrationHistograms::h_fpixAngleSize_, SiPixelLorentzAngleCalibrationHistograms::h_fpixDeltaMuH_, SiPixelLorentzAngleCalibrationHistograms::h_fpixFitStatusMuH_, SiPixelLorentzAngleCalibrationHistograms::h_fpixMagField_, SiPixelLorentzAngleCalibrationHistograms::h_fpixMean_, SiPixelLorentzAngleCalibrationHistograms::h_fpixMeanHistoFitStatus_, SiPixelLorentzAngleCalibrationHistograms::h_fpixMinClusterSizeCotAngle_, SiPixelLorentzAngleCalibrationHistograms::h_fpixMuH_, SiPixelLorentzAngleCalibrationHistograms::h_fpixNhitsClusterSizeCotAngle_, SiPixelLorentzAngleCalibrationHistograms::h_fpixRelDeltaMuH_, hists_, heavyIonCSV_trainingSettings::idx, edm::Service< T >::isAvailable(), SiPixelLAHarvestMCS::kFitConverged, SiPixelLAHarvestMCS::kFitNotPerformed, SiStripSimParameters_cfi::LorentzAngle, visualization-live-secondInstance_cfg::m, reco_skim_cfg_mod::maxSize, SiPixelLAHarvestMCS::MCSFitFunction(), minHitsCut_, SiPixelLorentzAngleCalibrationHistograms::nAngles_, seedmultiplicitymonitor_newtracking_cfi::nBins, SiPixelLorentzAngleCalibrationHistograms::nPanels_, SiPixelLorentzAngleCalibrationHistograms::nRings_, SiPixelLorentzAngleCalibrationHistograms::nSides_, AlCaHLTBitMon_ParallelJobs::p, PixelEndcapName::pannelName(), PixelSubdetector::PixelEndcap, alignCSCRings::r, recordName_, relativeConstraints::ring, PixelEndcapName::ringName(), alignCSCRings::s, dqm::impl::MonitorElement::setBinContent(), dqm::impl::MonitorElement::setBinError(), dqm::impl::MonitorElement::setBinLabel(), dqm::implementation::NavigatorBase::setCurrentFolder(), SiPixelLAHarvestMCS::FPixMuH::shiftx, SiPixelLAHarvestMCS::FPixMuH::shiftx_err, SiPixelLAHarvestMCS::FPixMuH::shifty, SiPixelLAHarvestMCS::FPixMuH::shifty_err, Validation_hcalonly_cfi::sign, SiPixelLAHarvestMCS::FitFPixMuH::size(), mps_update::status, AlCaHLTBitMon_QueryRunRegistry::string, cond::impl::to_string(), tTopo, relativeConstraints::value, cms::Exception::what(), and cond::service::PoolDBOutputService::writeOneIOV().

313  {
314  iGetter.cd();
315  iGetter.setCurrentFolder(dqmDir_);
316 
317  // get mean and size-angle hists, book summary hists
318  std::string hname;
321  iBooker.book1D("fpixMeanHistoFitStatus",
322  "fit status by angles/rings/panels/sides; angle/ring/panel/side; fit status",
323  nBins,
324  -0.5,
325  nBins - 0.5);
327  iBooker.book1D("fpixMinClusterSizeCotAngle",
328  "cot angle of minimal cluster size by angles/rings/panels/sides; angle/ring/panel/side; ",
329  nBins,
330  -0.5,
331  nBins - 0.5);
333  iBooker.book1D("fpixNhitsClusterSizeCotAngle",
334  "number of hits by angles/rings/panels/sides; angle/ring/panel/side; ",
335  nBins,
336  -0.5,
337  nBins - 0.5);
338 
339  std::string binNameAlpha;
340  std::string binNameBeta;
341 
342  const auto& prefix_ = fmt::sprintf("%s/FPix", dqmDir_);
343  int histsCounter = 0;
344  int nHistoExpected = 0;
345  for (int r = 0; r < hists_.nRings_; ++r) {
346  for (int p = 0; p < hists_.nPanels_; ++p) {
347  for (int s = 0; s < hists_.nSides_; ++s) {
348  int idx = getIndex(false, r, p, s);
349  int idxBeta = getIndex(true, r, p, s);
350  nHistoExpected++;
351  hname = fmt::format("{}/R{}_P{}_z{}_alphaMean", dqmDir_, r + 1, p + 1, s + 1);
352  if ((hists_.h_fpixMean_[idx] = iGetter.get(hname)) == nullptr) {
353  edm::LogError("SiPixelLorentzAnglePCLHarvesterMCS::dqmEndJob")
354  << "Failed to retrieve " << hname << " histogram";
355  } else
356  histsCounter++;
357 
358  nHistoExpected++;
359  hname = fmt::format("{}/R{}_P{}_z{}_betaMean", dqmDir_, r + 1, p + 1, s + 1);
360  if ((hists_.h_fpixMean_[idxBeta] = iGetter.get(hname)) == nullptr) {
361  edm::LogError("SiPixelLorentzAnglePCLHarvesterMCS::dqmEndJob")
362  << "Failed to retrieve " << hname << " histogram";
363  } else
364  histsCounter++;
365 
366  nHistoExpected++;
367  hname = fmt::format("{}/R{}_P{}_z{}_alpha", prefix_, r + 1, p + 1, s + 1);
368  if ((hists_.h_fpixAngleSize_[idx] = iGetter.get(hname)) == nullptr) {
369  edm::LogError("SiPixelLorentzAnglePCLHarvesterMCS::dqmEndJob")
370  << "Failed to retrieve " << hname << " histogram";
371  } else
372  histsCounter++;
373 
374  nHistoExpected++;
375  hname = fmt::format("{}/R{}_P{}_z{}_beta", prefix_, r + 1, p + 1, s + 1);
376  if ((hists_.h_fpixAngleSize_[idxBeta] = iGetter.get(hname)) == nullptr) {
377  edm::LogError("SiPixelLorentzAnglePCLHarvesterMCS::dqmEndJob")
378  << "Failed to retrieve " << hname << " histogram";
379  } else
380  histsCounter++;
381 
382  for (int m = 0; m < 3; ++m) {
383  nHistoExpected++;
384  hname = fmt::format("{}/R{}_P{}_z{}_B{}", prefix_, r + 1, p + 1, s + 1, m);
385  if ((hists_.h_fpixMagField_[m][idx] = iGetter.get(hname)) == nullptr) {
386  edm::LogError("SiPixelLorentzAnglePCLHarvesterMCS::dqmEndJob")
387  << "Failed to retrieve " << hname << " histogram";
388  } else
389  histsCounter++;
390  }
391 
392  // set labels & init summary histos
393  int binAlpha = idx + 1;
394  int binBeta = idxBeta + 1;
395  char sign = s == 0 ? '-' : '+';
396  binNameAlpha = fmt::sprintf("#alpha: R%d_P%d_z%c", r + 1, p + 1, sign);
397  binNameBeta = fmt::sprintf("#beta:R%d_P%d_z%c", r + 1, p + 1, sign);
398  hists_.h_fpixMeanHistoFitStatus_->setBinLabel(binAlpha, binNameAlpha);
399  hists_.h_fpixMeanHistoFitStatus_->setBinLabel(binBeta, binNameBeta);
402 
403  hists_.h_fpixMinClusterSizeCotAngle_->setBinLabel(binAlpha, binNameAlpha);
404  hists_.h_fpixMinClusterSizeCotAngle_->setBinLabel(binBeta, binNameBeta);
405  hists_.h_fpixNhitsClusterSizeCotAngle_->setBinLabel(binAlpha, binNameAlpha);
406  hists_.h_fpixNhitsClusterSizeCotAngle_->setBinLabel(binBeta, binNameBeta);
407  }
408  }
409  }
410 
411  if (histsCounter != nHistoExpected) {
412  edm::LogError("SiPixelLorentzAnglePCLHarvesterMCS::dqmEndJob")
413  << "Failed to retrieve all histograms, expected 56 got " << histsCounter;
414  return;
415  }
416 
417  // book hervesting hists
418  iBooker.setCurrentFolder(fmt::format("{}Harvesting", dqmDir_));
419  int nBinsMuH = hists_.nRings_ * hists_.nPanels_;
421  "fpixFitStatusMuH", "muH fit status by rings/panels; ring/panel; fitStatus", nBinsMuH, -0.5, nBinsMuH - 0.5);
423  iBooker.book1D("fpixMuH", "muH by rings/panels; ring/panel; #muH [1/T]", nBinsMuH, -0.5, nBinsMuH - 0.5);
424  hists_.h_fpixDeltaMuH_ = iBooker.book1D(
425  "fpixDeltaMuH", "#Delta muH by rings/panels; ring/panel; #Delta #muH [1/T]", nBinsMuH, -0.5, nBinsMuH - 0.5);
426  hists_.h_fpixRelDeltaMuH_ = iBooker.book1D("fpixRelDeltaMuH",
427  "#Delta #muH/#muH by rings/panels; ring/panel; #Delta #muH/#MuH",
428  nBinsMuH,
429  -0.5,
430  nBinsMuH - 0.5);
431  std::string binName;
432  for (int r = 0; r < hists_.nRings_; ++r) {
433  for (int p = 0; p < hists_.nPanels_; ++p) {
434  int idx = r * hists_.nPanels_ + p + 1;
435  binName = fmt::sprintf("R%d_P%d", r + 1, p + 1);
438  hists_.h_fpixMuH_->setBinLabel(idx, binName);
441  }
442  }
443 
444  // make and fit profile hists, fit muH
445  int nSizeBins = hists_.h_fpixAngleSize_[0]->getNbinsY();
446  double minSize = hists_.h_fpixAngleSize_[0]->getAxisMin(2);
447  double maxSize = hists_.h_fpixAngleSize_[0]->getAxisMax(2);
448  TH1D* h_slice = new TH1D("h_slice", "slice of cot_angle histogram", nSizeBins, minSize, maxSize);
449  f1_ = std::make_unique<TF1>("f1", SiPixelLAHarvestMCS::MCSFitFunction, -3., 3., 5);
450  f1_->SetParNames("Offset", "RMS Constant", "SlopeL", "cot(angle)_min", "SlopeR");
451 
452  for (int r = 0; r < hists_.nRings_; ++r) {
453  for (int p = 0; p < hists_.nPanels_; ++p) {
456  for (int s = 0; s < hists_.nSides_; ++s) {
457  int idx = getIndex(false, r, p, s);
458  int idxBeta = getIndex(true, r, p, s);
459  int binAlpha = idx + 1;
460  int binBeta = idxBeta + 1;
461 
462  int entriesAlpha = hists_.h_fpixAngleSize_[idx]->getEntries();
463  int entriesBeta = hists_.h_fpixAngleSize_[idxBeta]->getEntries();
464  hists_.h_fpixNhitsClusterSizeCotAngle_->setBinContent(binAlpha, entriesAlpha);
467  findMean(hists_.h_fpixAngleSize_[idxBeta], hists_.h_fpixMean_[idxBeta], h_slice);
468 
469  SiPixelLAHarvestMCS::fitStatus statusAlphaFit = entriesAlpha < minHitsCut_
472  SiPixelLAHarvestMCS::fitStatus statusBetaFit = entriesBeta < minHitsCut_
474  : fitMCSHistogram(hists_.h_fpixMean_[idxBeta]);
475 
476  hists_.h_fpixMeanHistoFitStatus_->setBinContent(binAlpha, statusAlphaFit);
477  hists_.h_fpixMeanHistoFitStatus_->setBinContent(binBeta, statusBetaFit);
478 
479  if (entriesAlpha < minHitsCut_ || entriesBeta < minHitsCut_)
480  continue;
481 
482  assert(strcmp(f1_->GetName(), "f1") == 0);
483 
484  if (statusAlphaFit == SiPixelLAHarvestMCS::kFitConverged &&
485  statusBetaFit == SiPixelLAHarvestMCS::kFitConverged) {
486  double shiftX = hists_.h_fpixMean_[idx]->getTH1()->GetFunction("f1")->GetParameter(3);
487  double errShiftX = hists_.h_fpixMean_[idx]->getTH1()->GetFunction("f1")->GetParError(3);
488  double shiftY = hists_.h_fpixMean_[idxBeta]->getTH1()->GetFunction("f1")->GetParameter(3);
489  double errShiftY = hists_.h_fpixMean_[idxBeta]->getTH1()->GetFunction("f1")->GetParError(3);
490 
492  hists_.h_fpixMinClusterSizeCotAngle_->setBinError(binAlpha, errShiftX);
494  hists_.h_fpixMinClusterSizeCotAngle_->setBinError(binBeta, errShiftY);
495 
496  fmh.shiftx = shiftX;
497  fmh.shiftx_err = errShiftX;
498  fmh.shifty = shiftY;
499  fmh.shifty_err = errShiftY;
500  fmh.bfield[0] = hists_.h_fpixMagField_[0][idx]->getMean();
501  fmh.bfield[1] = hists_.h_fpixMagField_[1][idx]->getMean();
502  fmh.bfield[2] = hists_.h_fpixMagField_[2][idx]->getMean();
503  fitMuH.add(fmh);
504  } // if fut converged
505  } // loop over z sides
506 
507  if (fitMuH.size() == hists_.nSides_) {
508  std::string fpixPartNames = "R" + std::to_string(r + 1) + "_P" + std::to_string(p + 1);
509  double initMuH = fitParametersInitValuesMuHFitMap_[fpixPartNames];
510  int status = fitMuH.fit(initMuH);
511  int idxMuH = r * hists_.nPanels_ + p + 1;
512  double muH = fitMuH.getMuH();
513  double muHErr = fitMuH.getMuHErr();
515  hists_.h_fpixMuH_->setBinContent(idxMuH, muH);
516  hists_.h_fpixMuH_->setBinError(idxMuH, muHErr);
517  fpixMuHResults.insert(std::make_pair(fpixPartNames, std::make_pair(muH, muH)));
518  }
519  }
520  }
521 
522  std::shared_ptr<SiPixelLorentzAngle> LorentzAngle = std::make_shared<SiPixelLorentzAngle>();
523 
524  bool isPayloadChanged{false};
525 
526  for (const auto& [id, value] : currentLorentzAngle_->getLorentzAngles()) {
527  DetId ID = DetId(id);
528  float muHForDB = value;
529  if (ID.subdetId() == PixelSubdetector::PixelEndcap) {
530  PixelEndcapName pen(ID, tTopo, true); // use det-id phaseq
531  int panel = pen.pannelName();
532  int ring = pen.ringName();
533  std::string fpixPartNames = "R" + std::to_string(ring) + "_P" + std::to_string(panel);
534  if (fpixMuHResults.find(fpixPartNames) != fpixMuHResults.end()) {
535  double measuredMuH = fpixMuHResults[fpixPartNames].first;
536  double deltaMuH = value - measuredMuH;
537  double deltaMuHoverMuH = deltaMuH / value;
538  int idxMuH = (ring - 1) * hists_.nPanels_ + panel;
539  hists_.h_fpixDeltaMuH_->setBinContent(idxMuH, deltaMuH);
540  hists_.h_fpixRelDeltaMuH_->setBinContent(idxMuH, deltaMuHoverMuH);
541  muHForDB = measuredMuH;
542  if (!isPayloadChanged && (deltaMuHoverMuH != 0.f))
543  isPayloadChanged = true;
544  }
545  } // if endcap
546  if (!LorentzAngle->putLorentzAngle(id, muHForDB)) {
547  edm::LogError("SiPixelLorentzAnglePCLHarvesterMCS")
548  << "[SiPixelLorentzAnglePCLHarvesterMCS::dqmEndJob]: detid (" << id << ") already exists";
549  }
550  }
551 
552  if (isPayloadChanged) {
553  // fill the DB object record
555  if (mydbservice.isAvailable()) {
556  try {
557  mydbservice->writeOneIOV(*LorentzAngle, mydbservice->currentTime(), recordName_);
558  } catch (const cond::Exception& er) {
559  edm::LogError("SiPixelLorentzAngleDB") << er.what();
560  } catch (const std::exception& er) {
561  edm::LogError("SiPixelLorentzAngleDB") << "caught std::exception " << er.what();
562  }
563  } else {
564  edm::LogError("SiPixelLorentzAngleDB") << "Service is unavailable";
565  }
566  } else {
567  edm::LogPrint("SiPixelLorentzAngleDB") << __PRETTY_FUNCTION__ << " there is no new valid measurement to append! ";
568  }
569 }
Base exception class for the object to relational access.
Definition: Exception.h:11
FitParametersInitValuesMuHFitMap fitParametersInitValuesMuHFitMap_
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
uint32_t ID
Definition: Definitions.h:24
int getIndex(bool isBetaAngle, int r, int p, int s)
std::string to_string(const V &value)
Definition: OMSAccess.h:77
const std::map< unsigned int, float > & getLorentzAngles() const
Log< level::Error, false > LogError
assert(be >=bs)
void findMean(dqm::reco::MonitorElement *h_2D, dqm::reco::MonitorElement *h_mean, TH1D *h_slice)
Hash writeOneIOV(const T &payload, Time_t time, const std::string &recordName)
double f[11][100]
Definition: value.py:1
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::Warning, true > LogPrint
Definition: DetId.h:17
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
Double_t MCSFitFunction(Double_t *x, Double_t *par)
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:712
SiPixelLAHarvestMCS::fitStatus fitMCSHistogram(dqm::reco::MonitorElement *h_mean)
bool isAvailable() const
Definition: Service.h:40
virtual void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
char const * what() const noexcept override
Definition: Exception.cc:103
SiPixelLorentzAngleCalibrationHistograms hists_

◆ fillDescriptions()

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

Definition at line 623 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

References edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, and AlCaHLTBitMon_QueryRunRegistry::string.

623  {
625  desc.setComment("Harvester module of the SiPixel Lorentz Angle PCL monitoring workflow for MinimalClusterSizeMethod");
626  desc.add<std::string>("dqmDir", "AlCaReco/SiPixelLorentzAngle")->setComment("the directory of PCL Worker output");
627  desc.add<std::vector<std::string>>("newmodulelist", {})->setComment("the list of DetIds for new sensors");
628  desc.add<std::vector<double>>("fitRange", {-1.5, 1.5})->setComment("range to perform the fit");
629  desc.add<std::vector<double>>("fitParameters", {1., 0.1, -1.6, 0., 1.6})
630  ->setComment("initial values for fit parameters");
631  desc.add<std::vector<double>>("fitParametersMuHFit", {0.08, 0.08, 0.08, 0.08})
632  ->setComment("initial values for fit parameters (muH fit)");
633  desc.add<int>("minHitsCut", 1000)->setComment("cut on minimum number of on-track hits to accept measurement");
634  desc.add<std::string>("record", "SiPixelLorentzAngleRcdMCS")->setComment("target DB record");
635  descriptions.addWithDefaultLabel(desc);
636 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)

◆ findMean()

void SiPixelLorentzAnglePCLHarvesterMCS::findMean ( dqm::reco::MonitorElement h_2D,
dqm::reco::MonitorElement h_mean,
TH1D *  h_slice 
)
private

Definition at line 572 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

References relativeConstraints::error, dqm::impl::MonitorElement::getBinContent(), dqm::impl::MonitorElement::getNbinsX(), dqm::impl::MonitorElement::getNbinsY(), mps_fire::i, dqmiolumiharvest::j, SiStripPI::mean, dqm::impl::MonitorElement::setBinContent(), and dqm::impl::MonitorElement::setBinError().

Referenced by dqmEndJob().

574  {
575  int n_x = h_2D->getNbinsX();
576  int n_y = h_2D->getNbinsY();
577 
578  for (int i = 1; i <= n_x; i++) {
579  h_slice->Reset("ICE");
580 
581  //loop over bins in size
582 
583  for (int j = 1; j <= n_y; j++) {
584  h_slice->SetBinContent(j, h_2D->getBinContent(i, j));
585  }
586  double mean = h_slice->GetMean();
587  double error = h_slice->GetMeanError();
588  h_mean->setBinContent(i, mean);
589  h_mean->setBinError(i, error);
590  } // end loop over bins in depth
591 }
virtual int getNbinsY() const
get # of bins in Y-axis
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
virtual int getNbinsX() const
get # of bins in X-axis
virtual void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
virtual double getBinContent(int binx) const
get content of bin (1-D)

◆ fitMCSHistogram()

SiPixelLAHarvestMCS::fitStatus SiPixelLorentzAnglePCLHarvesterMCS::fitMCSHistogram ( dqm::reco::MonitorElement h_mean)
private

Definition at line 594 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

References f1_, fitParametersInitValues_, dqm::impl::MonitorElement::getTH1(), SiPixelLAHarvestMCS::kFitConverged, SiPixelLAHarvestMCS::kFitFailed, SiPixelLAHarvestMCS::kNoFitResult, alignCSCRings::r, and theFitRange_.

Referenced by dqmEndJob().

594  {
596 
597  f1_->SetParameters(fitParametersInitValues_[0],
602 
603  int nFits = 0;
604  while (nFits < 5) {
605  nFits++;
606  double fitMin = f1_->GetParameter(3) + theFitRange_.first;
607  double fitMax = f1_->GetParameter(3) + theFitRange_.second;
608 
609  if (fitMin < -3)
610  fitMin = -3;
611  if (fitMax > 3)
612  fitMax = 3;
613 
614  TFitResultPtr r = h_mean->getTH1()->Fit(f1_.get(), "ERSM", "", fitMin, fitMax);
615  retVal = r == -1 ? SiPixelLAHarvestMCS::kNoFitResult
618  }
619  return retVal;
620 }

◆ getIndex()

int SiPixelLorentzAnglePCLHarvesterMCS::getIndex ( bool  isBetaAngle,
int  r,
int  p,
int  s 
)
private

Member Data Documentation

◆ currentLorentzAngle_

const SiPixelLorentzAngle* SiPixelLorentzAnglePCLHarvesterMCS::currentLorentzAngle_
private

Definition at line 184 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by beginRun(), and dqmEndJob().

◆ dqmDir_

const std::string SiPixelLorentzAnglePCLHarvesterMCS::dqmDir_
private

Definition at line 168 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by dqmEndJob().

◆ f1_

std::unique_ptr<TF1> SiPixelLorentzAnglePCLHarvesterMCS::f1_
private

Definition at line 181 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by dqmEndJob(), and fitMCSHistogram().

◆ fitParametersInitValues_

const std::vector<double> SiPixelLorentzAnglePCLHarvesterMCS::fitParametersInitValues_
private

◆ fitParametersInitValuesMuHFit_

const std::vector<double> SiPixelLorentzAnglePCLHarvesterMCS::fitParametersInitValuesMuHFit_
private

◆ fitParametersInitValuesMuHFitMap_

FitParametersInitValuesMuHFitMap SiPixelLorentzAnglePCLHarvesterMCS::fitParametersInitValuesMuHFitMap_
private

◆ fitRange_

const std::vector<double> SiPixelLorentzAnglePCLHarvesterMCS::fitRange_
private

◆ fpixMuHResults

FpixMuHResults SiPixelLorentzAnglePCLHarvesterMCS::fpixMuHResults
private

Definition at line 182 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by dqmEndJob().

◆ geomEsToken_

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> SiPixelLorentzAnglePCLHarvesterMCS::geomEsToken_
private

Definition at line 163 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by beginRun().

◆ hists_

SiPixelLorentzAngleCalibrationHistograms SiPixelLorentzAnglePCLHarvesterMCS::hists_
private

Definition at line 177 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by beginRun(), dqmEndJob(), and getIndex().

◆ magneticFieldToken_

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> SiPixelLorentzAnglePCLHarvesterMCS::magneticFieldToken_
private

Definition at line 166 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

◆ minHitsCut_

const int SiPixelLorentzAnglePCLHarvesterMCS::minHitsCut_
private

Definition at line 175 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by dqmEndJob().

◆ newmodulelist_

std::vector<std::string> SiPixelLorentzAnglePCLHarvesterMCS::newmodulelist_
private

Definition at line 169 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by beginRun().

◆ recordName_

const std::string SiPixelLorentzAnglePCLHarvesterMCS::recordName_
private

Definition at line 176 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by dqmEndJob().

◆ siPixelLAEsToken_

const edm::ESGetToken<SiPixelLorentzAngle, SiPixelLorentzAngleRcd> SiPixelLorentzAnglePCLHarvesterMCS::siPixelLAEsToken_
private

Definition at line 165 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by beginRun().

◆ theFitRange_

std::pair<double, double> SiPixelLorentzAnglePCLHarvesterMCS::theFitRange_ {-1.5, 1.5}
private

◆ topoEsTokenBR_

const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> SiPixelLorentzAnglePCLHarvesterMCS::topoEsTokenBR_
private

Definition at line 164 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by beginRun().

◆ topoEsTokenER_

const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> SiPixelLorentzAnglePCLHarvesterMCS::topoEsTokenER_
private

Definition at line 164 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

◆ tTopo

const TrackerTopology* SiPixelLorentzAnglePCLHarvesterMCS::tTopo
private

Definition at line 185 of file SiPixelLorentzAnglePCLHarvesterMCS.cc.

Referenced by beginRun(), and dqmEndJob().