CMS 3D CMS Logo

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

#include <Alignment/OfflineValidation/plugins/DiMuonVertexValidation.cc>

Inheritance diagram for DiMuonVertexValidation:
edm::one::EDAnalyzer< edm::one::SharedResources > edm::one::EDAnalyzerBase edm::EDConsumerBase

Public Member Functions

 DiMuonVertexValidation (const edm::ParameterSet &)
 
 ~DiMuonVertexValidation () override
 
- Public Member Functions inherited from edm::one::EDAnalyzer< edm::one::SharedResources >
 EDAnalyzer ()=default
 
 EDAnalyzer (const EDAnalyzer &)=delete
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
const EDAnalyzeroperator= (const EDAnalyzer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
- Public Member Functions inherited from edm::one::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDAnalyzerBase () 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
 
ESResolverIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESResolverIndex > 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
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

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

Private Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void beginJob () override
 
void endJob () override
 
const reco::VertexfindClosestVertex (const TransientVertex aTransVtx, const reco::VertexCollection *vertices) const
 

Private Attributes

edm::EDGetTokenT< reco::TrackCollectionalcaRecoToken_
 
edm::ParameterSet CosPhi3DConfiguration_
 
DiLeptonHelp::PlotsVsKinematics CosPhi3DPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
 
edm::ParameterSet CosPhiConfiguration_
 
DiLeptonHelp::PlotsVsKinematics CosPhiPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
 
edm::ParameterSet DiMuMassConfiguration_
 
TH1F * hCosPhi3D_
 
TH1F * hCosPhi_
 
TH1F * hCosPhiInv3D_
 
TH1F * hCosPhiInv_
 
TH1F * hCutFlow_
 
TH1F * hInvMass_
 
TH1F * hSVDist3D_
 
TH1F * hSVDist3DSig_
 
TH1F * hSVDist_
 
TH1F * hSVDistSig_
 
TH1F * hSVProb_
 
TH1F * hTrackInvMass_
 
float maxSVdist_
 
edm::EDGetTokenT< reco::MuonCollectionmuonsToken_
 
DiLeptonHelp::Counts myCounts
 
std::vector< double > pTthresholds_
 
edm::EDGetTokenT< reco::TrackCollectiontracksToken_
 
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecordttbESToken_
 
const bool useClosestVertex_
 
const bool useReco_
 
edm::EDGetTokenT< reco::VertexCollectionvertexToken_
 
edm::ParameterSet VtxDist3DConfiguration_
 
DiLeptonHelp::PlotsVsKinematics VtxDist3DPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
 
edm::ParameterSet VtxDist3DSigConfiguration_
 
DiLeptonHelp::PlotsVsKinematics VtxDist3DSigPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
 
edm::ParameterSet VtxDistConfiguration_
 
DiLeptonHelp::PlotsVsKinematics VtxDistPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
 
edm::ParameterSet VtxDistSigConfiguration_
 
DiLeptonHelp::PlotsVsKinematics VtxDistSigPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
 
edm::ParameterSet VtxProbConfiguration_
 
DiLeptonHelp::PlotsVsKinematics VtxProbPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
 
DiLeptonHelp::PlotsVsKinematics ZMassPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
 

Additional Inherited Members

- Public Types inherited from edm::one::EDAnalyzerBase
typedef EDAnalyzerBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- 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 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)
 

Detailed Description

Description: Class to perform validation Tracker Alignment Validations by means of a PV and the SV constructed with a di-muon pair

Definition at line 63 of file DiMuonVertexValidation.cc.

Constructor & Destructor Documentation

◆ DiMuonVertexValidation()

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

Definition at line 149 of file DiMuonVertexValidation.cc.

References alcaRecoToken_, edm::ParameterSet::getParameter(), TFileService::kSharedResource, maxSVdist_, muonsToken_, pTthresholds_, jetUpdater_cfi::sort, and useReco_.

150  : useReco_(iConfig.getParameter<bool>("useReco")),
151  useClosestVertex_(iConfig.getParameter<bool>("useClosestVertex")),
152  pTthresholds_(iConfig.getParameter<std::vector<double>>("pTThresholds")),
153  maxSVdist_(iConfig.getParameter<double>("maxSVdist")),
154  CosPhiConfiguration_(iConfig.getParameter<edm::ParameterSet>("CosPhiConfig")),
155  CosPhi3DConfiguration_(iConfig.getParameter<edm::ParameterSet>("CosPhi3DConfig")),
156  VtxProbConfiguration_(iConfig.getParameter<edm::ParameterSet>("VtxProbConfig")),
157  VtxDistConfiguration_(iConfig.getParameter<edm::ParameterSet>("VtxDistConfig")),
158  VtxDist3DConfiguration_(iConfig.getParameter<edm::ParameterSet>("VtxDist3DConfig")),
159  VtxDistSigConfiguration_(iConfig.getParameter<edm::ParameterSet>("VtxDistSigConfig")),
160  VtxDist3DSigConfiguration_(iConfig.getParameter<edm::ParameterSet>("VtxDist3DSigConfig")),
161  DiMuMassConfiguration_(iConfig.getParameter<edm::ParameterSet>("DiMuMassConfig")),
162  ttbESToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))),
163  tracksToken_(consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("tracks"))),
164  vertexToken_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("vertices"))) {
165  if (useReco_) {
166  muonsToken_ = mayConsume<reco::MuonCollection>(iConfig.getParameter<edm::InputTag>("muons"));
167  } else {
168  alcaRecoToken_ = mayConsume<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("muonTracks"));
169  }
170 
171  usesResource(TFileService::kSharedResource);
172 
173  // sort the vector of thresholds
174  std::sort(pTthresholds_.begin(), pTthresholds_.end(), [](const double& lhs, const double& rhs) { return lhs > rhs; });
175 
176  edm::LogInfo("DiMuonVertexValidation") << __FUNCTION__;
177  for (const auto& thr : pTthresholds_) {
178  edm::LogInfo("DiMuonVertexValidation") << " Threshold: " << thr << " ";
179  }
180  edm::LogInfo("DiMuonVertexValidation") << "Max SV distance: " << maxSVdist_ << " ";
181 }
static const std::string kSharedResource
Definition: TFileService.h:76
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
edm::ParameterSet VtxProbConfiguration_
edm::ParameterSet DiMuMassConfiguration_
edm::ParameterSet VtxDist3DConfiguration_
edm::ParameterSet VtxDistConfiguration_
edm::ParameterSet VtxDist3DSigConfiguration_
edm::EDGetTokenT< reco::MuonCollection > muonsToken_
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > ttbESToken_
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
Log< level::Info, false > LogInfo
edm::EDGetTokenT< reco::TrackCollection > tracksToken_
edm::ParameterSet VtxDistSigConfiguration_
edm::ParameterSet CosPhiConfiguration_
edm::ParameterSet CosPhi3DConfiguration_
std::vector< double > pTthresholds_
edm::EDGetTokenT< reco::TrackCollection > alcaRecoToken_

◆ ~DiMuonVertexValidation()

DiMuonVertexValidation::~DiMuonVertexValidation ( )
overridedefault

Member Function Documentation

◆ analyze()

void DiMuonVertexValidation::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivatevirtual

Implements edm::one::EDAnalyzerBase.

Definition at line 190 of file DiMuonVertexValidation.cc.

References alcaRecoToken_, TransientTrackBuilder::build(), ALCARECOTkAlJpsiMuMu_cff::charge, cmToum, CosPhi3DPlots, CosPhiPlots, TransientVertex::degreesOfFreedom(), PbPb_ZMuSkimMuonDPG_cff::deltaR, VertexDistanceXY::distance(), VertexDistance3D::distance(), HLT_2023v12_cff::distance, Measurement1D::error(), DiLeptonHelp::Counts::eventsAfterDist, DiLeptonHelp::Counts::eventsAfterEta, DiLeptonHelp::Counts::eventsAfterMult, DiLeptonHelp::Counts::eventsAfterPt, DiLeptonHelp::Counts::eventsAfterVtx, DiLeptonHelp::Counts::eventsTotal, DiLeptonHelp::PlotsVsKinematics::fillPlots(), findClosestVertex(), edm::EventSetup::getData(), hCosPhi3D_, hCosPhi_, reco::TrackBase::highPurity, hInvMass_, hSVDist3D_, hSVDist3DSig_, hSVDist_, hSVDistSig_, hSVProb_, hTrackInvMass_, mps_fire::i, iEvent, createfilelist::int, edm::HandleBase::isValid(), reco::Vertex::isValid(), TransientVertex::isValid(), LogDebug, maxSVdist_, mumass2, muonsToken_, myCounts, reco::Vertex::position(), TransientVertex::position(), edm::Handle< T >::product(), DiDispStaMuonMonitor_cfi::pt, reco::LeafCandidate::pt(), pTthresholds_, jetUpdater_cfi::sort, mathSSE::sqrt(), submitPVValidationJobs::t, FrontierCondition_GT_autoExpress_cfi::t0, RandomServiceHelper::t1, to_string(), TransientVertex::totalChiSquared(), HLT_2023v12_cff::track, tracksToken_, ttbESToken_, useClosestVertex_, useReco_, Measurement1D::value(), trackerHitRTTI::vector, KalmanVertexFitter::vertex(), vertexToken_, AlignmentTracksFromVertexSelector_cfi::vertices, VtxDist3DPlots, VtxDist3DSigPlots, VtxDistPlots, VtxDistSigPlots, VtxProbPlots, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and ZMassPlots.

190  {
191  using namespace edm;
192 
194 
195  // the di-muon tracks
196  std::vector<const reco::Track*> myTracks;
197 
198  // if we have to start from scratch from RECO data-tier
199  if (useReco_) {
200  // select the good muons
201  std::vector<const reco::Muon*> myGoodMuonVector;
202  for (const auto& muon : iEvent.get(muonsToken_)) {
203  const reco::TrackRef t = muon.innerTrack();
204  if (!t.isNull()) {
205  if (t->quality(reco::TrackBase::highPurity)) {
206  if (t->chi2() / t->ndof() <= 2.5 && t->numberOfValidHits() >= 5 &&
207  t->hitPattern().numberOfValidPixelHits() >= 2 && t->quality(reco::TrackBase::highPurity))
208  myGoodMuonVector.emplace_back(&muon);
209  }
210  }
211  }
212 
213  LogDebug("DiMuonVertexValidation") << "myGoodMuonVector size: " << myGoodMuonVector.size() << std::endl;
214  std::sort(myGoodMuonVector.begin(), myGoodMuonVector.end(), [](const reco::Muon*& lhs, const reco::Muon*& rhs) {
215  return lhs->pt() > rhs->pt();
216  });
217 
218  // just check the ordering
219  for (const auto& muon : myGoodMuonVector) {
220  LogDebug("DiMuonVertexValidation") << "pT: " << muon->pt() << " ";
221  }
222  LogDebug("DiMuonVertexValidation") << std::endl;
223 
224  // reject if there's no Z
225  if (myGoodMuonVector.size() < 2)
226  return;
227 
229 
230  if ((myGoodMuonVector[0]->pt()) < pTthresholds_[0] || (myGoodMuonVector[1]->pt() < pTthresholds_[1]))
231  return;
232 
235 
236  if (myGoodMuonVector[0]->charge() * myGoodMuonVector[1]->charge() > 0)
237  return;
238 
239  const auto& m1 = myGoodMuonVector[1]->p4();
240  const auto& m0 = myGoodMuonVector[0]->p4();
241  const auto& mother = m0 + m1;
242 
243  float invMass = mother.M();
244  hInvMass_->Fill(invMass);
245 
246  // just copy the top two muons
247  std::vector<const reco::Muon*> theZMuonVector;
248  theZMuonVector.reserve(2);
249  theZMuonVector.emplace_back(myGoodMuonVector[1]);
250  theZMuonVector.emplace_back(myGoodMuonVector[0]);
251 
252  // do the matching of Z muons with inner tracks
253  unsigned int i = 0;
254  for (const auto& muon : theZMuonVector) {
255  i++;
256  float minD = 1000.;
257  const reco::Track* theMatch = nullptr;
258  for (const auto& track : iEvent.get(tracksToken_)) {
259  float D = ::deltaR(muon->eta(), muon->phi(), track.eta(), track.phi());
260  if (D < minD) {
261  minD = D;
262  theMatch = &track;
263  }
264  }
265  LogDebug("DiMuonVertexValidation") << "pushing new track: " << i << std::endl;
266  myTracks.emplace_back(theMatch);
267  }
268  } else {
269  // we start directly with the pre-selected ALCARECO tracks
270  for (const auto& muon : iEvent.get(alcaRecoToken_)) {
271  myTracks.emplace_back(&muon);
272  }
273  }
274 
275 #ifdef EDM_ML_DEBUG
276  for (const auto& track : myTracks) {
277  edm::LogVerbatim("DiMuonVertexValidation") << __PRETTY_FUNCTION__ << " pT: " << track->pt() << " GeV"
278  << " , pT error: " << track->ptError() << " GeV"
279  << " , eta: " << track->eta() << " , phi: " << track->phi() << std::endl;
280  }
281 #endif
282 
283  LogDebug("DiMuonVertexValidation") << "selected tracks: " << myTracks.size() << std::endl;
284 
285  const TransientTrackBuilder* theB = &iSetup.getData(ttbESToken_);
286  TransientVertex aTransientVertex;
287  std::vector<reco::TransientTrack> tks;
288 
289  if (myTracks.size() != 2)
290  return;
291 
292  const auto& t1 = myTracks[1]->momentum();
293  const auto& t0 = myTracks[0]->momentum();
294  const auto& ditrack = t1 + t0;
295 
296  const auto& tplus = myTracks[0]->charge() > 0 ? myTracks[0] : myTracks[1];
297  const auto& tminus = myTracks[0]->charge() < 0 ? myTracks[0] : myTracks[1];
298 
299  TLorentzVector p4_tplus(tplus->px(), tplus->py(), tplus->pz(), sqrt((tplus->p() * tplus->p()) + mumass2));
300  TLorentzVector p4_tminus(tminus->px(), tminus->py(), tminus->pz(), sqrt((tminus->p() * tminus->p()) + mumass2));
301 
302 #ifdef EDM_ML_DEBUG
303  // Define a lambda function to convert TLorentzVector to a string
304  auto tLorentzVectorToString = [](const TLorentzVector& vector) {
305  return std::to_string(vector.Px()) + " " + std::to_string(vector.Py()) + " " + std::to_string(vector.Pz()) + " " +
306  std::to_string(vector.E());
307  };
308 
309  edm::LogVerbatim("DiMuonVertexValidation") << "mu+" << tLorentzVectorToString(p4_tplus) << std::endl;
310  edm::LogVerbatim("DiMuonVertexValidation") << "mu-" << tLorentzVectorToString(p4_tminus) << std::endl;
311 #endif
312 
313  const auto& Zp4 = p4_tplus + p4_tminus;
314  float track_invMass = Zp4.M();
315  hTrackInvMass_->Fill(track_invMass);
316 
317  // creat the pair of TLorentVectors used to make the plos
318  std::pair<TLorentzVector, TLorentzVector> tktk_p4 = std::make_pair(p4_tplus, p4_tminus);
319 
320  // fill the z->mm mass plots
321  ZMassPlots.fillPlots(track_invMass, tktk_p4);
322 
323  math::XYZPoint ZpT(ditrack.x(), ditrack.y(), 0);
324  math::XYZPoint Zp(ditrack.x(), ditrack.y(), ditrack.z());
325 
326  for (const auto& track : myTracks) {
327  reco::TransientTrack trajectory = theB->build(track);
328  tks.push_back(trajectory);
329  }
330 
331  KalmanVertexFitter kalman(true);
332  aTransientVertex = kalman.vertex(tks);
333 
334  double SVProb = TMath::Prob(aTransientVertex.totalChiSquared(), (int)aTransientVertex.degreesOfFreedom());
335 
336  LogDebug("DiMuonVertexValidation") << " vertex prob: " << SVProb << std::endl;
337 
338  hSVProb_->Fill(SVProb);
339 
340  if (!aTransientVertex.isValid())
341  return;
342 
344 
345  // fill the VtxProb plots
346  VtxProbPlots.fillPlots(SVProb, tktk_p4);
347 
348  math::XYZPoint MainVertex(0, 0, 0);
349  const reco::Vertex* theClosestVertex = nullptr;
350  // get collection of reconstructed vertices from event
351  edm::Handle<reco::VertexCollection> vertexHandle = iEvent.getHandle(vertexToken_);
352  if (vertexHandle.isValid()) {
353  const reco::VertexCollection* vertices = vertexHandle.product();
354  theClosestVertex = this->findClosestVertex(aTransientVertex, vertices);
355  } else {
356  edm::LogWarning("DiMuonVertexMonitor") << "invalid vertex collection encountered Skipping event!";
357  return;
358  }
359 
360  reco::Vertex TheMainVertex;
361  if (!useClosestVertex_ || theClosestVertex == nullptr) {
362  // if the closest vertex is not available, or explicitly not chosen
363  TheMainVertex = vertexHandle.product()->front();
364  } else {
365  TheMainVertex = *theClosestVertex;
366  }
367 
368  MainVertex.SetXYZ(TheMainVertex.position().x(), TheMainVertex.position().y(), TheMainVertex.position().z());
369  const math::XYZPoint myVertex(
370  aTransientVertex.position().x(), aTransientVertex.position().y(), aTransientVertex.position().z());
371  const math::XYZPoint deltaVtx(
372  MainVertex.x() - myVertex.x(), MainVertex.y() - myVertex.y(), MainVertex.z() - myVertex.z());
373 
374 #ifdef EDM_ML_DEBUG
375  edm::LogVerbatim("DiMuonVertexValidation")
376  << "mm vertex position:" << aTransientVertex.position().x() << "," << aTransientVertex.position().y() << ","
377  << aTransientVertex.position().z();
378 
379  edm::LogVerbatim("DiMuonVertexValidation") << "main vertex position:" << TheMainVertex.position().x() << ","
380  << TheMainVertex.position().y() << "," << TheMainVertex.position().z();
381 #endif
382 
383  if (TheMainVertex.isValid()) {
384  // Z Vertex distance in the xy plane
385 
386  VertexDistanceXY vertTool;
387  double distance = vertTool.distance(aTransientVertex, TheMainVertex).value();
388  double dist_err = vertTool.distance(aTransientVertex, TheMainVertex).error();
389 
390  hSVDist_->Fill(distance * cmToum);
391  hSVDistSig_->Fill(distance / dist_err);
392 
393  // fill the VtxDist plots
395 
396  // fill the VtxDisSig plots
397  VtxDistSigPlots.fillPlots(distance / dist_err, tktk_p4);
398 
399  // Z Vertex distance in 3D
400 
401  VertexDistance3D vertTool3D;
402  double distance3D = vertTool3D.distance(aTransientVertex, TheMainVertex).value();
403  double dist3D_err = vertTool3D.distance(aTransientVertex, TheMainVertex).error();
404 
405  hSVDist3D_->Fill(distance3D * cmToum);
406  hSVDist3DSig_->Fill(distance3D / dist3D_err);
407 
408  // fill the VtxDist3D plots
409  VtxDist3DPlots.fillPlots(distance3D * cmToum, tktk_p4);
410 
411  // fill the VtxDisSig plots
412  VtxDist3DSigPlots.fillPlots(distance3D / dist3D_err, tktk_p4);
413 
414  LogDebug("DiMuonVertexValidation") << "distance: " << distance << "+/-" << dist_err << std::endl;
415  // cut on the PV - SV distance
416  if (distance * cmToum < maxSVdist_) {
418 
419  double cosphi = (ZpT.x() * deltaVtx.x() + ZpT.y() * deltaVtx.y()) /
420  (sqrt(ZpT.x() * ZpT.x() + ZpT.y() * ZpT.y()) *
421  sqrt(deltaVtx.x() * deltaVtx.x() + deltaVtx.y() * deltaVtx.y()));
422 
423  double cosphi3D = (Zp.x() * deltaVtx.x() + Zp.y() * deltaVtx.y() + Zp.z() * deltaVtx.z()) /
424  (sqrt(Zp.x() * Zp.x() + Zp.y() * Zp.y() + Zp.z() * Zp.z()) *
425  sqrt(deltaVtx.x() * deltaVtx.x() + deltaVtx.y() * deltaVtx.y() + deltaVtx.z() * deltaVtx.z()));
426 
427  LogDebug("DiMuonVertexValidation") << "cos(phi) = " << cosphi << std::endl;
428 
429  hCosPhi_->Fill(cosphi);
430  hCosPhi3D_->Fill(cosphi3D);
431 
432 #ifdef EDM_ML_DEBUG
433  edm::LogVerbatim("DiMuonVertexValidation")
434  << "distance " << distance * cmToum << " cosphi3D:" << cosphi3D << std::endl;
435 #endif
436 
437  // fill the cosphi plots
438  CosPhiPlots.fillPlots(cosphi, tktk_p4);
439 
440  // fill the VtxDisSig plots
441  CosPhi3DPlots.fillPlots(cosphi3D, tktk_p4);
442  }
443  }
444 }
Log< level::Info, true > LogVerbatim
float totalChiSquared() const
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
double pt() const final
transverse momentum
GlobalPoint position() const
Measurement1D distance(const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const override
DiLeptonHelp::Counts myCounts
T z() const
Definition: PV3DBase.h:61
static constexpr float mumass2
const Point & position() const
position
Definition: Vertex.h:127
T const * product() const
Definition: Handle.h:70
DiLeptonHelp::PlotsVsKinematics CosPhiPlots
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
DiLeptonHelp::PlotsVsKinematics VtxDist3DPlots
float degreesOfFreedom() const
DiLeptonHelp::PlotsVsKinematics VtxDist3DSigPlots
static std::string to_string(const XMLCh *ch)
reco::TransientTrack build(const reco::Track *p) const
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
int iEvent
Definition: GenABIO.cc:224
bool isValid() const
T sqrt(T t)
Definition: SSEVec.h:19
DiLeptonHelp::PlotsVsKinematics VtxDistSigPlots
static constexpr float cmToum
edm::EDGetTokenT< reco::MuonCollection > muonsToken_
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > ttbESToken_
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
Measurement1D distance(const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const override
edm::EDGetTokenT< reco::TrackCollection > tracksToken_
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:141
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
DiLeptonHelp::PlotsVsKinematics VtxProbPlots
bool isValid() const
Definition: HandleBase.h:70
double value() const
Definition: Measurement1D.h:25
const reco::Vertex * findClosestVertex(const TransientVertex aTransVtx, const reco::VertexCollection *vertices) const
DiLeptonHelp::PlotsVsKinematics CosPhi3DPlots
HLT enums.
double error() const
Definition: Measurement1D.h:27
std::vector< double > pTthresholds_
DiLeptonHelp::PlotsVsKinematics VtxDistPlots
void fillPlots(const float val, const std::pair< TLorentzVector, TLorentzVector > &momenta)
Log< level::Warning, false > LogWarning
DiLeptonHelp::PlotsVsKinematics ZMassPlots
edm::EDGetTokenT< reco::TrackCollection > alcaRecoToken_
bool isValid() const
Tells whether the vertex is valid.
Definition: Vertex.h:72
#define LogDebug(id)

◆ beginJob()

void DiMuonVertexValidation::beginJob ( )
overrideprivatevirtual

Reimplemented from edm::one::EDAnalyzerBase.

Definition at line 447 of file DiMuonVertexValidation.cc.

References DiLeptonHelp::PlotsVsKinematics::bookFromPSet(), CosPhi3DConfiguration_, CosPhi3DPlots, CosPhiConfiguration_, CosPhiPlots, DiMuMassConfiguration_, compareTotals::fs, hCosPhi3D_, hCosPhi_, hCosPhiInv3D_, hCosPhiInv_, hCutFlow_, hInvMass_, hSVDist3D_, hSVDist3DSig_, hSVDist_, hSVDistSig_, hSVProb_, hTrackInvMass_, mps_fire::i, myCounts, names, AlCaHLTBitMon_QueryRunRegistry::string, VtxDist3DConfiguration_, VtxDist3DPlots, VtxDist3DSigConfiguration_, VtxDist3DSigPlots, VtxDistConfiguration_, VtxDistPlots, VtxDistSigConfiguration_, VtxDistSigPlots, VtxProbConfiguration_, VtxProbPlots, DiLeptonHelp::Counts::zeroAll(), and ZMassPlots.

447  {
449 
450  // clang-format off
451  TH1F::SetDefaultSumw2(kTRUE);
452  hSVProb_ = fs->make<TH1F>("VtxProb", ";ZV vertex probability;N(#mu#mu pairs)", 100, 0., 1.);
453 
454  hSVDist_ = fs->make<TH1F>("VtxDist", ";PV-ZV xy distance [#mum];N(#mu#mu pairs)", 100, 0., 300.);
455  hSVDistSig_ = fs->make<TH1F>("VtxDistSig", ";PV-ZV xy distance signficance;N(#mu#mu pairs)", 100, 0., 5.);
456 
457  hSVDist3D_ = fs->make<TH1F>("VtxDist3D", ";PV-ZV 3D distance [#mum];N(#mu#mu pairs)", 100, 0., 300.);
458  hSVDist3DSig_ = fs->make<TH1F>("VtxDist3DSig", ";PV-ZV 3D distance signficance;N(#mu#mu pairs)", 100, 0., 5.);
459 
460  hInvMass_ = fs->make<TH1F>("InvMass", ";M(#mu#mu) [GeV];N(#mu#mu pairs)", 70., 50., 120.);
461  hTrackInvMass_ = fs->make<TH1F>("TkTkInvMass", ";M(tk,tk) [GeV];N(tk tk pairs)", 70., 50., 120.);
462 
463  hCosPhi_ = fs->make<TH1F>("CosPhi", ";cos(#phi_{xy});N(#mu#mu pairs)", 50, -1., 1.);
464  hCosPhi3D_ = fs->make<TH1F>("CosPhi3D", ";cos(#phi_{3D});N(#mu#mu pairs)", 50, -1., 1.);
465 
466  hCosPhiInv_ = fs->make<TH1F>("CosPhiInv", ";inverted cos(#phi_{xy});N(#mu#mu pairs)", 50, -1., 1.);
467  hCosPhiInv3D_ = fs->make<TH1F>("CosPhiInv3D", ";inverted cos(#phi_{3D});N(#mu#mu pairs)", 50, -1., 1.);
468  // clang-format on
469 
470  // 2D Maps
471 
472  TFileDirectory dirCosPhi = fs->mkdir("CosPhiPlots");
474 
475  TFileDirectory dirCosPhi3D = fs->mkdir("CosPhi3DPlots");
477 
478  TFileDirectory dirVtxProb = fs->mkdir("VtxProbPlots");
480 
481  TFileDirectory dirVtxDist = fs->mkdir("VtxDistPlots");
483 
484  TFileDirectory dirVtxDist3D = fs->mkdir("VtxDist3DPlots");
486 
487  TFileDirectory dirVtxDistSig = fs->mkdir("VtxDistSigPlots");
489 
490  TFileDirectory dirVtxDist3DSig = fs->mkdir("VtxDist3DSigPlots");
492 
493  TFileDirectory dirInvariantMass = fs->mkdir("InvariantMassPlots");
495 
496  // cut flow
497 
498  hCutFlow_ = fs->make<TH1F>("hCutFlow", "cut flow;cut step;events left", 6, -0.5, 5.5);
499  std::string names[6] = {"Total", "Mult.", ">pT", "<eta", "hasVtx", "VtxDist"};
500  for (unsigned int i = 0; i < 6; i++) {
501  hCutFlow_->GetXaxis()->SetBinLabel(i + 1, names[i].c_str());
502  }
503 
504  myCounts.zeroAll();
505 }
edm::ParameterSet VtxProbConfiguration_
DiLeptonHelp::Counts myCounts
DiLeptonHelp::PlotsVsKinematics CosPhiPlots
edm::ParameterSet DiMuMassConfiguration_
edm::ParameterSet VtxDist3DConfiguration_
DiLeptonHelp::PlotsVsKinematics VtxDist3DPlots
edm::ParameterSet VtxDistConfiguration_
const std::string names[nVars_]
DiLeptonHelp::PlotsVsKinematics VtxDist3DSigPlots
edm::ParameterSet VtxDist3DSigConfiguration_
DiLeptonHelp::PlotsVsKinematics VtxDistSigPlots
edm::ParameterSet VtxDistSigConfiguration_
DiLeptonHelp::PlotsVsKinematics VtxProbPlots
edm::ParameterSet CosPhiConfiguration_
DiLeptonHelp::PlotsVsKinematics CosPhi3DPlots
edm::ParameterSet CosPhi3DConfiguration_
DiLeptonHelp::PlotsVsKinematics VtxDistPlots
void bookFromPSet(const TFileDirectory &fs, const edm::ParameterSet &hpar)
DiLeptonHelp::PlotsVsKinematics ZMassPlots

◆ endJob()

void DiMuonVertexValidation::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::one::EDAnalyzerBase.

Definition at line 508 of file DiMuonVertexValidation.cc.

References DiLeptonHelp::Counts::eventsAfterDist, DiLeptonHelp::Counts::eventsAfterEta, DiLeptonHelp::Counts::eventsAfterMult, DiLeptonHelp::Counts::eventsAfterPt, DiLeptonHelp::Counts::eventsAfterVtx, DiLeptonHelp::Counts::eventsTotal, hCosPhi3D_, hCosPhi_, hCosPhiInv3D_, hCosPhiInv_, hCutFlow_, mps_fire::i, myCounts, and DiLeptonHelp::Counts::printCounts().

Referenced by o2olib.O2ORunMgr::executeJob().

508  {
510 
511  hCutFlow_->SetBinContent(1, myCounts.eventsTotal);
512  hCutFlow_->SetBinContent(2, myCounts.eventsAfterMult);
513  hCutFlow_->SetBinContent(3, myCounts.eventsAfterPt);
514  hCutFlow_->SetBinContent(4, myCounts.eventsAfterEta);
515  hCutFlow_->SetBinContent(5, myCounts.eventsAfterVtx);
516  hCutFlow_->SetBinContent(6, myCounts.eventsAfterDist);
517 
518  TH1F::SetDefaultSumw2(kTRUE);
519  const unsigned int nBinsX = hCosPhi_->GetNbinsX();
520  for (unsigned int i = 1; i <= nBinsX; i++) {
521  //float binContent = hCosPhi_->GetBinContent(i);
522  float invertedBinContent = hCosPhi_->GetBinContent(nBinsX + 1 - i);
523  float invertedBinError = hCosPhi_->GetBinError(nBinsX + 1 - i);
524  hCosPhiInv_->SetBinContent(i, invertedBinContent);
525  hCosPhiInv_->SetBinError(i, invertedBinError);
526 
527  //float binContent3D = hCosPhi3D_->GetBinContent(i);
528  float invertedBinContent3D = hCosPhi3D_->GetBinContent(nBinsX + 1 - i);
529  float invertedBinError3D = hCosPhi3D_->GetBinError(nBinsX + 1 - i);
530  hCosPhiInv3D_->SetBinContent(i, invertedBinContent3D);
531  hCosPhiInv3D_->SetBinError(i, invertedBinError3D);
532  }
533 }
DiLeptonHelp::Counts myCounts

◆ fillDescriptions()

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

Definition at line 565 of file DiMuonVertexValidation.cc.

References edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, ProducerED_cfi::InputTag, or, and AlCaHLTBitMon_QueryRunRegistry::string.

565  {
567  desc.ifValue(edm::ParameterDescription<bool>("useReco", true, true),
568  true >> edm::ParameterDescription<edm::InputTag>("muons", edm::InputTag("muons"), true) or
570  "muonTracks", edm::InputTag("ALCARECOTkAlDiMuon"), true))
571  ->setComment("If useReco is true need to specify the muon tracks, otherwise take the ALCARECO Inner tracks");
572  //desc.add<bool>("useReco",true);
573  //desc.add<edm::InputTag>("muons", edm::InputTag("muons"));
574  //desc.add<edm::InputTag>("muonTracks", edm::InputTag("ALCARECOTkAlDiMuon"));
575  desc.add<edm::InputTag>("tracks", edm::InputTag("generalTracks"));
576  desc.add<edm::InputTag>("vertices", edm::InputTag("offlinePrimaryVertices"));
577  desc.add<std::vector<double>>("pTThresholds", {30., 10.});
578  desc.add<bool>("useClosestVertex", true);
579  desc.add<double>("maxSVdist", 50.);
580 
581  {
582  edm::ParameterSetDescription psDiMuMass;
583  psDiMuMass.add<std::string>("name", "DiMuMass");
584  psDiMuMass.add<std::string>("title", "M(#mu#mu)");
585  psDiMuMass.add<std::string>("yUnits", "[GeV]");
586  psDiMuMass.add<int>("NxBins", 24);
587  psDiMuMass.add<int>("NyBins", 50);
588  psDiMuMass.add<double>("ymin", 70.);
589  psDiMuMass.add<double>("ymax", 120.);
590  desc.add<edm::ParameterSetDescription>("DiMuMassConfig", psDiMuMass);
591  }
592  {
594  psCosPhi.add<std::string>("name", "CosPhi");
595  psCosPhi.add<std::string>("title", "cos(#phi_{xy})");
596  psCosPhi.add<std::string>("yUnits", "");
597  psCosPhi.add<int>("NxBins", 50);
598  psCosPhi.add<int>("NyBins", 50);
599  psCosPhi.add<double>("ymin", -1.);
600  psCosPhi.add<double>("ymax", 1.);
601  desc.add<edm::ParameterSetDescription>("CosPhiConfig", psCosPhi);
602  }
603  {
604  edm::ParameterSetDescription psCosPhi3D;
605  psCosPhi3D.add<std::string>("name", "CosPhi3D");
606  psCosPhi3D.add<std::string>("title", "cos(#phi_{3D})");
607  psCosPhi3D.add<std::string>("yUnits", "");
608  psCosPhi3D.add<int>("NxBins", 50);
609  psCosPhi3D.add<int>("NyBins", 50);
610  psCosPhi3D.add<double>("ymin", -1.);
611  psCosPhi3D.add<double>("ymax", 1.);
612  desc.add<edm::ParameterSetDescription>("CosPhi3DConfig", psCosPhi3D);
613  }
614  {
616  psVtxProb.add<std::string>("name", "VtxProb");
617  psVtxProb.add<std::string>("title", "Prob(#chi^{2}_{SV})");
618  psVtxProb.add<std::string>("yUnits", "");
619  psVtxProb.add<int>("NxBins", 50);
620  psVtxProb.add<int>("NyBins", 50);
621  psVtxProb.add<double>("ymin", 0);
622  psVtxProb.add<double>("ymax", 1.);
623  desc.add<edm::ParameterSetDescription>("VtxProbConfig", psVtxProb);
624  }
625  {
627  psVtxDist.add<std::string>("name", "VtxDist");
628  psVtxDist.add<std::string>("title", "d_{xy}(PV,SV)");
629  psVtxDist.add<std::string>("yUnits", "[#mum]");
630  psVtxDist.add<int>("NxBins", 50);
631  psVtxDist.add<int>("NyBins", 100);
632  psVtxDist.add<double>("ymin", 0);
633  psVtxDist.add<double>("ymax", 300.);
634  desc.add<edm::ParameterSetDescription>("VtxDistConfig", psVtxDist);
635  }
636  {
637  edm::ParameterSetDescription psVtxDist3D;
638  psVtxDist3D.add<std::string>("name", "VtxDist3D");
639  psVtxDist3D.add<std::string>("title", "d_{3D}(PV,SV)");
640  psVtxDist3D.add<std::string>("yUnits", "[#mum]");
641  psVtxDist3D.add<int>("NxBins", 50);
642  psVtxDist3D.add<int>("NyBins", 250);
643  psVtxDist3D.add<double>("ymin", 0);
644  psVtxDist3D.add<double>("ymax", 500.);
645  desc.add<edm::ParameterSetDescription>("VtxDist3DConfig", psVtxDist3D);
646  }
647  {
648  edm::ParameterSetDescription psVtxDistSig;
649  psVtxDistSig.add<std::string>("name", "VtxDistSig");
650  psVtxDistSig.add<std::string>("title", "d_{xy}(PV,SV)/#sigma_{dxy}(PV,SV)");
651  psVtxDistSig.add<std::string>("yUnits", "");
652  psVtxDistSig.add<int>("NxBins", 50);
653  psVtxDistSig.add<int>("NyBins", 100);
654  psVtxDistSig.add<double>("ymin", 0);
655  psVtxDistSig.add<double>("ymax", 5.);
656  desc.add<edm::ParameterSetDescription>("VtxDistSigConfig", psVtxDistSig);
657  }
658  {
659  edm::ParameterSetDescription psVtxDist3DSig;
660  psVtxDist3DSig.add<std::string>("name", "VtxDist3DSig");
661  psVtxDist3DSig.add<std::string>("title", "d_{3D}(PV,SV)/#sigma_{d3D}(PV,SV)");
662  psVtxDist3DSig.add<std::string>("yUnits", "");
663  psVtxDist3DSig.add<int>("NxBins", 50);
664  psVtxDist3DSig.add<int>("NyBins", 100);
665  psVtxDist3DSig.add<double>("ymin", 0);
666  psVtxDist3DSig.add<double>("ymax", 5.);
667  desc.add<edm::ParameterSetDescription>("VtxDist3DSigConfig", psVtxDist3DSig);
668  }
669 
670  descriptions.addWithDefaultLabel(desc);
671 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
ParameterDescriptionBase * add(U const &iLabel, T const &value)

◆ findClosestVertex()

const reco::Vertex * DiMuonVertexValidation::findClosestVertex ( const TransientVertex  aTransVtx,
const reco::VertexCollection vertices 
) const
private

Definition at line 536 of file DiMuonVertexValidation.cc.

References counter, VertexDistance3D::distance(), TransientVertex::isValid(), Measurement1D::value(), AlignmentTracksFromVertexSelector_cfi::vertices, and L1BJetProducer_cff::vtx.

Referenced by analyze().

537  {
538  reco::Vertex* defaultVtx = nullptr;
539 
540  if (!aTransVtx.isValid())
541  return defaultVtx;
542 
543  // find the closest vertex to the secondary vertex in 3D
544  VertexDistance3D vertTool3D;
545  float minD = 9999.;
546  int closestVtxIndex = 0;
547  int counter = 0;
548  for (const auto& vtx : *vertices) {
549  double dist3D = vertTool3D.distance(aTransVtx, vtx).value();
550  if (dist3D < minD) {
551  minD = dist3D;
552  closestVtxIndex = counter;
553  }
554  counter++;
555  }
556 
557  if ((*vertices).at(closestVtxIndex).isValid()) {
558  return &(vertices->at(closestVtxIndex));
559  } else {
560  return defaultVtx;
561  }
562 }
bool isValid() const
Measurement1D distance(const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const override
double value() const
Definition: Measurement1D.h:25
static std::atomic< unsigned int > counter

Member Data Documentation

◆ alcaRecoToken_

edm::EDGetTokenT<reco::TrackCollection> DiMuonVertexValidation::alcaRecoToken_
private

Definition at line 132 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and DiMuonVertexValidation().

◆ CosPhi3DConfiguration_

edm::ParameterSet DiMuonVertexValidation::CosPhi3DConfiguration_
private

Definition at line 87 of file DiMuonVertexValidation.cc.

Referenced by beginJob().

◆ CosPhi3DPlots

DiLeptonHelp::PlotsVsKinematics DiMuonVertexValidation::CosPhi3DPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
private

Definition at line 116 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ CosPhiConfiguration_

edm::ParameterSet DiMuonVertexValidation::CosPhiConfiguration_
private

Definition at line 86 of file DiMuonVertexValidation.cc.

Referenced by beginJob().

◆ CosPhiPlots

Definition at line 115 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ DiMuMassConfiguration_

edm::ParameterSet DiMuonVertexValidation::DiMuMassConfiguration_
private

Definition at line 93 of file DiMuonVertexValidation.cc.

Referenced by beginJob().

◆ hCosPhi3D_

TH1F* DiMuonVertexValidation::hCosPhi3D_
private

Definition at line 104 of file DiMuonVertexValidation.cc.

Referenced by analyze(), beginJob(), and endJob().

◆ hCosPhi_

TH1F* DiMuonVertexValidation::hCosPhi_
private

Definition at line 103 of file DiMuonVertexValidation.cc.

Referenced by analyze(), beginJob(), and endJob().

◆ hCosPhiInv3D_

TH1F* DiMuonVertexValidation::hCosPhiInv3D_
private

Definition at line 106 of file DiMuonVertexValidation.cc.

Referenced by beginJob(), and endJob().

◆ hCosPhiInv_

TH1F* DiMuonVertexValidation::hCosPhiInv_
private

Definition at line 105 of file DiMuonVertexValidation.cc.

Referenced by beginJob(), and endJob().

◆ hCutFlow_

TH1F* DiMuonVertexValidation::hCutFlow_
private

Definition at line 111 of file DiMuonVertexValidation.cc.

Referenced by beginJob(), and endJob().

◆ hInvMass_

TH1F* DiMuonVertexValidation::hInvMass_
private

Definition at line 108 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ hSVDist3D_

TH1F* DiMuonVertexValidation::hSVDist3D_
private

Definition at line 100 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ hSVDist3DSig_

TH1F* DiMuonVertexValidation::hSVDist3DSig_
private

Definition at line 101 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ hSVDist_

TH1F* DiMuonVertexValidation::hSVDist_
private

Definition at line 98 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ hSVDistSig_

TH1F* DiMuonVertexValidation::hSVDistSig_
private

Definition at line 99 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ hSVProb_

TH1F* DiMuonVertexValidation::hSVProb_
private

Definition at line 97 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ hTrackInvMass_

TH1F* DiMuonVertexValidation::hTrackInvMass_
private

Definition at line 109 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ maxSVdist_

float DiMuonVertexValidation::maxSVdist_
private

Definition at line 82 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and DiMuonVertexValidation().

◆ muonsToken_

edm::EDGetTokenT<reco::MuonCollection> DiMuonVertexValidation::muonsToken_
private

Definition at line 130 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and DiMuonVertexValidation().

◆ myCounts

DiLeptonHelp::Counts DiMuonVertexValidation::myCounts
private

Definition at line 77 of file DiMuonVertexValidation.cc.

Referenced by analyze(), beginJob(), and endJob().

◆ pTthresholds_

std::vector<double> DiMuonVertexValidation::pTthresholds_
private

Definition at line 81 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and DiMuonVertexValidation().

◆ tracksToken_

edm::EDGetTokenT<reco::TrackCollection> DiMuonVertexValidation::tracksToken_
private

Definition at line 126 of file DiMuonVertexValidation.cc.

Referenced by analyze().

◆ ttbESToken_

const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> DiMuonVertexValidation::ttbESToken_
private

Definition at line 124 of file DiMuonVertexValidation.cc.

Referenced by analyze().

◆ useClosestVertex_

const bool DiMuonVertexValidation::useClosestVertex_
private

Definition at line 80 of file DiMuonVertexValidation.cc.

Referenced by analyze().

◆ useReco_

const bool DiMuonVertexValidation::useReco_
private

Definition at line 79 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and DiMuonVertexValidation().

◆ vertexToken_

edm::EDGetTokenT<reco::VertexCollection> DiMuonVertexValidation::vertexToken_
private

Definition at line 127 of file DiMuonVertexValidation.cc.

Referenced by analyze().

◆ VtxDist3DConfiguration_

edm::ParameterSet DiMuonVertexValidation::VtxDist3DConfiguration_
private

Definition at line 90 of file DiMuonVertexValidation.cc.

Referenced by beginJob().

◆ VtxDist3DPlots

DiLeptonHelp::PlotsVsKinematics DiMuonVertexValidation::VtxDist3DPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
private

Definition at line 119 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ VtxDist3DSigConfiguration_

edm::ParameterSet DiMuonVertexValidation::VtxDist3DSigConfiguration_
private

Definition at line 92 of file DiMuonVertexValidation.cc.

Referenced by beginJob().

◆ VtxDist3DSigPlots

DiLeptonHelp::PlotsVsKinematics DiMuonVertexValidation::VtxDist3DSigPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
private

Definition at line 121 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ VtxDistConfiguration_

edm::ParameterSet DiMuonVertexValidation::VtxDistConfiguration_
private

Definition at line 89 of file DiMuonVertexValidation.cc.

Referenced by beginJob().

◆ VtxDistPlots

DiLeptonHelp::PlotsVsKinematics DiMuonVertexValidation::VtxDistPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
private

Definition at line 118 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ VtxDistSigConfiguration_

edm::ParameterSet DiMuonVertexValidation::VtxDistSigConfiguration_
private

Definition at line 91 of file DiMuonVertexValidation.cc.

Referenced by beginJob().

◆ VtxDistSigPlots

DiLeptonHelp::PlotsVsKinematics DiMuonVertexValidation::VtxDistSigPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
private

Definition at line 120 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ VtxProbConfiguration_

edm::ParameterSet DiMuonVertexValidation::VtxProbConfiguration_
private

Definition at line 88 of file DiMuonVertexValidation.cc.

Referenced by beginJob().

◆ VtxProbPlots

DiLeptonHelp::PlotsVsKinematics DiMuonVertexValidation::VtxProbPlots = DiLeptonHelp::PlotsVsKinematics(DiLeptonHelp::MM)
private

Definition at line 117 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().

◆ ZMassPlots

Definition at line 122 of file DiMuonVertexValidation.cc.

Referenced by analyze(), and beginJob().