CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
HIPixelMedianVtxProducer Class Reference

#include <HIPixelMedianVtxProducer.h>

Inheritance diagram for HIPixelMedianVtxProducer:
edm::one::EDProducer<> edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 HIPixelMedianVtxProducer (const edm::ParameterSet &ps)
 
void produce (edm::Event &ev, const edm::EventSetup &es) override
 
 ~HIPixelMedianVtxProducer () override
 
- Public Member Functions inherited from edm::one::EDProducer<>
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () 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 &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
ESProxyIndex const * esGetTokenIndices (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::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void beginJob () override
 

Private Attributes

int theFitBinning
 
double theFitMaxZ
 
int theFitThreshold
 
int thePeakFindBinning
 
double thePeakFindMaxZ
 
unsigned int thePeakFindThresh
 
double thePtMin
 
edm::EDGetTokenT< reco::TrackCollectiontheTrackCollection
 

Additional Inherited Members

- Public Types inherited from edm::one::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
 
- 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 inherited from edm::ProducerBase
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 declare what type of product will make and with which optional label More...
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
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)
 
template<Transition B>
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 (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (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)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 

Detailed Description

Definition at line 15 of file HIPixelMedianVtxProducer.h.

Constructor & Destructor Documentation

◆ HIPixelMedianVtxProducer()

HIPixelMedianVtxProducer::HIPixelMedianVtxProducer ( const edm::ParameterSet ps)
explicit

Definition at line 22 of file HIPixelMedianVtxProducer.cc.

23  : theTrackCollection(consumes<reco::TrackCollection>(ps.getParameter<edm::InputTag>("TrackCollection"))),
24  thePtMin(ps.getParameter<double>("PtMin")),
25  thePeakFindThresh(ps.getParameter<unsigned int>("PeakFindThreshold")),
26  thePeakFindMaxZ(ps.getParameter<double>("PeakFindMaxZ")),
27  thePeakFindBinning(ps.getParameter<int>("PeakFindBinsPerCm")),
28  theFitThreshold(ps.getParameter<int>("FitThreshold")),
29  theFitMaxZ(ps.getParameter<double>("FitMaxZ")),
30  theFitBinning(ps.getParameter<int>("FitBinsPerCm")) {
31  produces<reco::VertexCollection>();
32 
33  //In order to make fitting ROOT histograms thread safe
34  // one must call this undocumented function
35  TMinuitMinimizer::UseStaticMinuit(false);
36 }

◆ ~HIPixelMedianVtxProducer()

HIPixelMedianVtxProducer::~HIPixelMedianVtxProducer ( )
inlineoverride

Definition at line 18 of file HIPixelMedianVtxProducer.h.

18 {};

Member Function Documentation

◆ beginJob()

void HIPixelMedianVtxProducer::beginJob ( void  )
inlineoverrideprivatevirtual

Reimplemented from edm::one::EDProducerBase.

Definition at line 22 of file HIPixelMedianVtxProducer.h.

22 {};

◆ produce()

void HIPixelMedianVtxProducer::produce ( edm::Event ev,
const edm::EventSetup es 
)
overridevirtual

Implements edm::one::EDProducerBase.

Definition at line 39 of file HIPixelMedianVtxProducer.cc.

39  {
40  // Get pixel tracks
43  const reco::TrackCollection tracks_ = *(trackCollection.product());
44 
45  // Select tracks above minimum pt
46  std::vector<const reco::Track*> tracks;
47  for (unsigned int i = 0; i < tracks_.size(); i++) {
48  if (tracks_[i].pt() < thePtMin && std::fabs(tracks_[i].vz()) < 100000.)
49  continue;
50  reco::TrackRef recTrack(trackCollection, i);
51  tracks.push_back(&(*recTrack));
52  }
53 
54  LogTrace("MinBiasTracking") << " [VertexProducer] selected tracks: " << tracks.size() << " (out of " << tracks_.size()
55  << ") above pt = " << thePtMin;
56 
57  // Output vertex collection
58  auto vertices = std::make_unique<reco::VertexCollection>();
59 
60  // No tracks -> return empty collection
61  if (tracks.empty()) {
62  ev.put(std::move(vertices));
63  return;
64  }
65 
66  // Sort tracks according to vertex z position
67  std::sort(tracks.begin(), tracks.end(), ComparePairs());
68 
69  // Calculate median vz
70  float med;
71  if (tracks.size() % 2 == 0)
72  med = (tracks[tracks.size() / 2 - 1]->vz() + tracks[tracks.size() / 2]->vz()) / 2;
73  else
74  med = tracks[tracks.size() / 2]->vz();
75 
76  LogTrace("MinBiasTracking") << " [vertex position] median = " << med << " cm";
77 
78  // In high multiplicity events, fit around most probable position
79  if (tracks.size() > thePeakFindThresh) {
80  // Find maximum bin
81  TH1F hmax("hmax", "hmax", thePeakFindBinning * 2.0 * thePeakFindMaxZ, -1.0 * thePeakFindMaxZ, thePeakFindMaxZ);
82 
83  for (std::vector<const reco::Track*>::const_iterator track = tracks.begin(); track != tracks.end(); track++)
84  if (fabs((*track)->vz()) < thePeakFindMaxZ)
85  hmax.Fill((*track)->vz());
86 
87  int maxBin = hmax.GetMaximumBin();
88 
89  LogTrace("MinBiasTracking") << " [vertex position] most prob = " << hmax.GetBinCenter(maxBin) << " cm";
90 
91  // Find 3-bin weighted average
92  float num = 0.0, denom = 0.0;
93  for (int i = -1; i <= 1; i++) {
94  num += hmax.GetBinContent(maxBin + i) * hmax.GetBinCenter(maxBin + i);
95  denom += hmax.GetBinContent(maxBin + i);
96  }
97 
98  if (denom == 0) {
100  err(2, 2) = 0.1 * 0.1;
101  reco::Vertex ver(reco::Vertex::Point(0, 0, 99999.), err, 0, 0, 1);
102  vertices->push_back(ver);
103  ev.put(std::move(vertices));
104  return;
105  }
106 
107  float nBinAvg = num / denom;
108 
109  // Center fit at 3-bin weighted average around max bin
110  med = nBinAvg;
111 
112  LogTrace("MinBiasTracking") << " [vertex position] 3-bin weighted average = " << nBinAvg << " cm";
113  }
114 
115  // Bin vz-values around most probable value (or median) for fitting
116  TH1F histo("histo", "histo", theFitBinning * 2.0 * theFitMaxZ, -1.0 * theFitMaxZ, theFitMaxZ);
117  histo.Sumw2();
118 
119  for (std::vector<const reco::Track*>::const_iterator track = tracks.begin(); track != tracks.end(); track++)
120  if (fabs((*track)->vz() - med) < theFitMaxZ)
121  histo.Fill((*track)->vz() - med);
122 
123  LogTrace("MinBiasTracking") << " [vertex position] most prob for fit = "
124  << med + histo.GetBinCenter(histo.GetMaximumBin()) << " cm";
125 
126  // If there are very few entries, don't do the fit
127  if (histo.GetEntries() <= theFitThreshold) {
128  LogTrace("MinBiasTracking") << " [vertex position] Fewer than" << theFitThreshold
129  << " entries in fit histogram. Returning median.";
130 
132  err(2, 2) = 0.1 * 0.1;
133  reco::Vertex ver(reco::Vertex::Point(0, 0, med), err, 0, 1, 1);
134  vertices->push_back(ver);
135  ev.put(std::move(vertices));
136  return;
137  }
138 
139  // Otherwise, there are enough entries to refine the estimate with a fit
140  TF1 f1("f1", "[0]*exp(-0.5 * ((x-[1])/[2])^2) + [3]");
141  f1.SetParameters(10., 0., 0.02, 0.002 * tracks.size());
142  f1.SetParLimits(1, -0.1, 0.1);
143  f1.SetParLimits(2, 0.001, 0.05);
144  f1.SetParLimits(3, 0.0, 0.005 * tracks.size());
145 
146  histo.Fit(&f1, "QN SERIAL");
147 
148  LogTrace("MinBiasTracking") << " [vertex position] fitted = " << med + f1.GetParameter(1) << " +- "
149  << f1.GetParError(1) << " cm";
150 
152  err(2, 2) = f1.GetParError(1) * f1.GetParError(1);
153  reco::Vertex ver(reco::Vertex::Point(0, 0, med + f1.GetParameter(1)), err, 0, 1, 1);
154  vertices->push_back(ver);
155 
156  ev.put(std::move(vertices));
157  return;
158 }

References makePileupJSON::denom, runTheMatrix::err, ev, DeadROC_duringRun::f1, timingPdfMaker::histo, mps_fire::i, LogTrace, cms::cuda::allocator::maxBin, eostools::move(), EgammaValidation_cff::num, DiDispStaMuonMonitor_cfi::pt, tools::TF1, theFitBinning, theFitMaxZ, theFitThreshold, thePeakFindBinning, thePeakFindMaxZ, thePeakFindThresh, thePtMin, theTrackCollection, HLT_2018_cff::track, duplicaterechits_cfi::trackCollection, PDWG_EXOHSCP_cff::tracks, and pwdgSkimBPark_cfi::vertices.

Member Data Documentation

◆ theFitBinning

int HIPixelMedianVtxProducer::theFitBinning
private

Definition at line 31 of file HIPixelMedianVtxProducer.h.

Referenced by produce().

◆ theFitMaxZ

double HIPixelMedianVtxProducer::theFitMaxZ
private

Definition at line 30 of file HIPixelMedianVtxProducer.h.

Referenced by produce().

◆ theFitThreshold

int HIPixelMedianVtxProducer::theFitThreshold
private

Definition at line 29 of file HIPixelMedianVtxProducer.h.

Referenced by produce().

◆ thePeakFindBinning

int HIPixelMedianVtxProducer::thePeakFindBinning
private

Definition at line 28 of file HIPixelMedianVtxProducer.h.

Referenced by produce().

◆ thePeakFindMaxZ

double HIPixelMedianVtxProducer::thePeakFindMaxZ
private

Definition at line 27 of file HIPixelMedianVtxProducer.h.

Referenced by produce().

◆ thePeakFindThresh

unsigned int HIPixelMedianVtxProducer::thePeakFindThresh
private

Definition at line 26 of file HIPixelMedianVtxProducer.h.

Referenced by produce().

◆ thePtMin

double HIPixelMedianVtxProducer::thePtMin
private

Definition at line 25 of file HIPixelMedianVtxProducer.h.

Referenced by produce().

◆ theTrackCollection

edm::EDGetTokenT<reco::TrackCollection> HIPixelMedianVtxProducer::theTrackCollection
private

Definition at line 22 of file HIPixelMedianVtxProducer.h.

Referenced by produce().

PDWG_EXOHSCP_cff.tracks
tracks
Definition: PDWG_EXOHSCP_cff.py:28
mps_fire.i
i
Definition: mps_fire.py:355
HIPixelMedianVtxProducer::theFitThreshold
int theFitThreshold
Definition: HIPixelMedianVtxProducer.h:29
makePileupJSON.denom
denom
Definition: makePileupJSON.py:147
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
reco::Vertex::Error
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:44
HIPixelMedianVtxProducer::thePeakFindBinning
int thePeakFindBinning
Definition: HIPixelMedianVtxProducer.h:28
timingPdfMaker.histo
histo
Definition: timingPdfMaker.py:279
HIPixelMedianVtxProducer::thePeakFindMaxZ
double thePeakFindMaxZ
Definition: HIPixelMedianVtxProducer.h:27
tools.TF1
TF1
Definition: tools.py:23
edm::Handle< reco::TrackCollection >
edm::Ref< TrackCollection >
HIPixelMedianVtxProducer::theTrackCollection
edm::EDGetTokenT< reco::TrackCollection > theTrackCollection
Definition: HIPixelMedianVtxProducer.h:22
ComparePairs
Definition: HIPixelMedianVtxProducer.h:34
HIPixelMedianVtxProducer::theFitMaxZ
double theFitMaxZ
Definition: HIPixelMedianVtxProducer.h:30
duplicaterechits_cfi.trackCollection
trackCollection
Definition: duplicaterechits_cfi.py:4
runTheMatrix.err
err
Definition: runTheMatrix.py:288
cms::cuda::allocator::maxBin
constexpr unsigned int maxBin
Definition: getCachingDeviceAllocator.h:20
HIPixelMedianVtxProducer::thePeakFindThresh
unsigned int thePeakFindThresh
Definition: HIPixelMedianVtxProducer.h:26
EgammaValidation_cff.num
num
Definition: EgammaValidation_cff.py:34
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
HIPixelMedianVtxProducer::thePtMin
double thePtMin
Definition: HIPixelMedianVtxProducer.h:25
reco::Vertex::Point
math::XYZPoint Point
point in the space
Definition: Vertex.h:40
eostools.move
def move(src, dest)
Definition: eostools.py:511
HIPixelMedianVtxProducer::theFitBinning
int theFitBinning
Definition: HIPixelMedianVtxProducer.h:31
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
HLT_2018_cff.track
track
Definition: HLT_2018_cff.py:10352
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
DeadROC_duringRun.f1
f1
Definition: DeadROC_duringRun.py:219
edm::InputTag
Definition: InputTag.h:15
reco::TrackCollection
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
reco::Vertex
Definition: Vertex.h:35
pwdgSkimBPark_cfi.vertices
vertices
Definition: pwdgSkimBPark_cfi.py:7