HLTmumutkVtxProducer

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
#ifndef HLTrigger_btau_HLTmumutkVtxProducer_h
#define HLTrigger_btau_HLTmumutkVtxProducer_h
//
// Package:    HLTrigger/btau
// Class:      HLTmumutkVtxProducer
//
/**\class HLTmumutkVtxProducer

 HLT Filter for b to (mumu) + X

 Implementation:
     <Notes on implementation>
*/

#include <memory>
#include <vector>

#include "FWCore/Framework/interface/stream/EDProducer.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h"
#include "DataFormats/TrackReco/interface/TrackFwd.h"
#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
#include "DataFormats/HLTReco/interface/TriggerRefsCollections.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include "TrackingTools/Records/interface/TransientTrackRecord.h"
#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
#include "MagneticField/Engine/interface/MagneticField.h"

namespace edm {
  class ConfigurationDescriptions;
}

// ----------------------------------------------------------------------

namespace reco {
  class Candidate;
  class Track;
}  // namespace reco

class FreeTrajectoryState;
class MagneticField;

class HLTmumutkVtxProducer : public edm::stream::EDProducer<> {
public:
  explicit HLTmumutkVtxProducer(const edm::ParameterSet&);
  ~HLTmumutkVtxProducer() override = default;

  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

  void produce(edm::Event&, const edm::EventSetup&) override;

private:
  bool overlap(const reco::TrackRef& trackref1, const reco::TrackRef& trackref2);
  static FreeTrajectoryState initialFreeState(const reco::Track&, const MagneticField*);
  bool checkPreviousCand(const reco::TrackRef& trackref, const std::vector<reco::RecoChargedCandidateRef>& ref2) const;

  const edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> transientTrackRecordToken_;

  const edm::InputTag muCandTag_;
  const edm::EDGetTokenT<reco::RecoChargedCandidateCollection> muCandToken_;
  const edm::InputTag trkCandTag_;
  const edm::EDGetTokenT<reco::RecoChargedCandidateCollection> trkCandToken_;
  const edm::InputTag previousCandTag_;
  const edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> previousCandToken_;

  const std::string mfName_;
  const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> idealMagneticFieldRecordToken_;

  const double thirdTrackMass_;
  const double maxEta_;
  const double minPt_;
  const double minInvMass_;
  const double maxInvMass_;
  const double minD0Significance_;
  const double overlapDR2_;

  const edm::InputTag beamSpotTag_;
  const edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
};

#endif