BPHDecayVertex

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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
#ifndef HeavyFlavorAnalysis_RecoDecay_BPHDecayVertex_h
#define HeavyFlavorAnalysis_RecoDecay_BPHDecayVertex_h
/** \class BPHDecayVertex
 *
 *  Description: 
 *     Mid-level base class to reconstruct decay vertex
 *
 *  \author Paolo Ronchese INFN Padova
 *
 */

//----------------------
// Base Class Headers --
//----------------------
#include "HeavyFlavorAnalysis/RecoDecay/interface/BPHDecayMomentum.h"

class BPHEventSetupWrapper;

namespace edm {
  class EventSetup;
}

namespace reco {
  class TransientTrack;
  class Vertex;
}  // namespace reco

//------------------------------------
// Collaborating Class Declarations --
//------------------------------------
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "RecoVertex/VertexPrimitives/interface/VertexFitter.h"

//---------------
// C++ Headers --
//---------------
#include <vector>
#include <map>
#include <string>

//              ---------------------
//              -- Class Interface --
//              ---------------------

class BPHDecayVertex : public virtual BPHDecayMomentum {
public:
  /** Constructors are protected
   *  this object can exist only as part of a derived class
   */
  // deleted copy constructor and assignment operator
  BPHDecayVertex(const BPHDecayVertex& x) = delete;
  BPHDecayVertex& operator=(const BPHDecayVertex& x) = delete;

  /** Destructor
   */
  ~BPHDecayVertex() override;

  /** Operations
   */

  /// check for valid reconstructed vertex
  virtual bool validTracks() const;
  virtual bool validVertex() const;

  /// get reconstructed vertex
  virtual const reco::Vertex& vertex(VertexFitter<5>* fitter = nullptr,
                                     const reco::BeamSpot* bs = nullptr,
                                     const GlobalPoint* priorPos = nullptr,
                                     const GlobalError* priorError = nullptr) const;

  /// get list of Tracks
  const std::vector<const reco::Track*>& tracks() const;

  /// get Track for a daughter
  const reco::Track* getTrack(const reco::Candidate* cand) const;

  /// get Track mode for a daughter
  char getTMode(const reco::Candidate* cand) const;

  /// get list of TransientTracks
  const std::vector<reco::TransientTrack>& transientTracks() const;

  /// get TransientTrack for a daughter
  reco::TransientTrack* getTransientTrack(const reco::Candidate* cand) const;

  /// retrieve EventSetup
  const BPHEventSetupWrapper* getEventSetup() const;

  /// retrieve track search list
  const std::string& getTrackSearchList(const reco::Candidate* cand) const;

protected:
  // constructor
  BPHDecayVertex(const BPHEventSetupWrapper* es, int daugNum = 2, int compNum = 2);
  // pointer used to retrieve informations from other bases
  BPHDecayVertex(const BPHDecayVertex* ptr, const BPHEventSetupWrapper* es);

  // add a simple particle giving it a name and specifying an option list
  // to search for the associated track
  virtual void addV(const std::string& name, const reco::Candidate* daug, const std::string& searchList, double mass);
  // add a previously reconstructed particle giving it a name
  virtual void addV(const std::string& name, const BPHRecoConstCandPtr& comp);

  // utility function used to cash reconstruction results
  void setNotUpdated() const override;

private:
  // EventSetup needed to build TransientTrack
  const BPHEventSetupWrapper* evSetup;

  // map linking particles to associated track search list
  std::map<const reco::Candidate*, std::string> searchMap;

  // reconstruction results cache
  mutable bool oldTracks;
  mutable bool oldTTracks;
  mutable bool oldVertex;
  mutable bool validTks;
  mutable std::vector<const reco::Track*> rTracks;
  mutable std::vector<reco::TransientTrack> trTracks;
  mutable std::map<const reco::Candidate*, const reco::Track*> tkMap;
  mutable std::map<const reco::Candidate*, char> tmMap;
  mutable std::map<const reco::Candidate*, reco::TransientTrack*> ttMap;
  mutable reco::Vertex fittedVertex;
  mutable VertexFitter<5>* savedFitter;
  mutable const reco::BeamSpot* savedBS;
  mutable const GlobalPoint* savedPP;
  mutable const GlobalError* savedPE;

  // create TransientTrack and fit vertex
  virtual void fTracks() const;
  virtual void fTTracks() const;
  virtual void fitVertex(VertexFitter<5>* fitter,
                         const reco::BeamSpot* bs,
                         const GlobalPoint* priorPos,
                         const GlobalError* priorError) const;
};

#endif