Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:03:47

0001 #ifndef DataFormats_BTauReco_BJetTagTrackCounting_h
0002 #define DataFormats_BTauReco_BJetTagTrackCounting_h
0003 
0004 #include "DataFormats/BTauReco/interface/RefMacros.h"
0005 #include "DataFormats/JetReco/interface/JetTracksAssociation.h"
0006 
0007 #include "DataFormats/BTauReco/interface/JTATagInfo.h"
0008 
0009 namespace reco {
0010 
0011   class TrackCountingTagInfo : public JTATagInfo {
0012   public:
0013     TrackCountingTagInfo(const std::vector<double>& significance2d,
0014                          const std::vector<double>& significance3d,
0015                          const std::vector<int>& trackOrder2d,
0016                          const std::vector<int>& trackOrder3d,
0017                          const JetTracksAssociationRef& jtaRef)
0018         : JTATagInfo(jtaRef),
0019           m_significance2d(significance2d),
0020           m_significance3d(significance3d),
0021           m_trackOrder2d(trackOrder2d),
0022           m_trackOrder3d(trackOrder3d) {}
0023 
0024     TrackCountingTagInfo() {}
0025 
0026     ~TrackCountingTagInfo() override {}
0027 
0028     /* virtual const Track & track(size_t n,int ipType) const
0029   {
0030     return tracks()[trackIndex(n,ipType)];
0031   } */
0032 
0033     virtual float significance(size_t n, int ip) const {
0034       if (ip == 0) {
0035         if (n < m_significance3d.size())
0036           return m_significance3d[n];
0037       } else {
0038         if (n < m_significance2d.size())
0039           return m_significance2d[n];
0040       }
0041       return -10.;
0042     }
0043 
0044     virtual int trackIndex(size_t n, int ip) const {
0045       if (ip == 0) {
0046         if (n < m_significance3d.size())
0047           return m_trackOrder3d[n];
0048       } else {
0049         if (n < m_significance2d.size())
0050           return m_trackOrder2d[n];
0051       }
0052       return 0;
0053     }
0054 
0055     /**
0056   Recompute discriminator using nth track i.p. significance.
0057   ipType = 0 means 3d impact parameter
0058   ipType = 1 means transverse impact parameter
0059  */
0060     virtual float discriminator(size_t nth, int ipType) const { return significance(nth - 1, ipType); }
0061 
0062     virtual int selectedTracks(int ipType) const {
0063       if (ipType == 0)
0064         return m_significance3d.size();
0065       else
0066         return m_significance2d.size();
0067     }
0068 
0069     TrackCountingTagInfo* clone() const override { return new TrackCountingTagInfo(*this); }
0070 
0071   private:
0072     std::vector<double> m_significance2d;  //create a smarter container instead of
0073     std::vector<double> m_significance3d;  //create a smarter container instead of
0074     std::vector<int> m_trackOrder2d;       // this  pair of vectors.
0075     std::vector<int> m_trackOrder3d;       // this  pair of vectors.
0076   };
0077 
0078   //typedef edm::ExtCollection< TrackCountingTagInfo,JetTagCollection> TrackCountingExtCollection;
0079   //typedef edm::OneToOneAssociation<JetTagCollection, TrackCountingTagInfo> TrackCountingExtCollection;
0080 
0081   DECLARE_EDM_REFS(TrackCountingTagInfo)
0082 
0083 }  // namespace reco
0084 
0085 #endif  // DataFormats_BTauReco_BJetTagTrackCounting_h