CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackProbabilityTagInfo.h
Go to the documentation of this file.
1 #ifndef BTauReco_BJetTagTrackProbability_h
2 #define BTauReco_BJetTagTrackProbability_h
3 
8 
9 namespace reco {
10 
12  {
13  public:
14 
16  std::vector<double> probability2d,
17  std::vector<double> probability3d,
18  std::vector<int> trackOrder2d,
19  std::vector<int> trackOrder3d,const JetTracksAssociationRef & jtaRef) : JTATagInfo(jtaRef),
20  m_probability2d(probability2d),
21  m_probability3d(probability3d),
22  m_trackOrder2d(trackOrder2d),
23  m_trackOrder3d(trackOrder3d) {}
24 
26 
28 
29 int factorial(int n) const
30 {
31  if(n<2) return 1;
32  else return n*factorial(n-1);
33 }
34 
35  virtual float probability(size_t n,int ip) const
36  {
37  if(ip == 0)
38  {
39  if(n <m_probability3d.size())
40  return m_probability3d[n];
41  }
42  else
43  {
44  if(n <m_probability2d.size())
45  return m_probability2d[n];
46  }
47  return -10.;
48  }
49 
50  virtual float jetProbability(int ip, float minTrackProb) const
51 {
52 
53  const std::vector<double> * vp;
54  if(ip==0) vp= &m_probability3d;
55  else vp= &m_probability2d;
56  const std::vector<double> & v =*vp;
57 
58  int ngoodtracks=v.size();
59  double SumJet=0.;
60 
61  for(std::vector<double>::const_iterator q = v.begin(); q != v.end(); q++){
62  SumJet+=(*q>minTrackProb)?log(*q):log(minTrackProb);
63  }
64 
65  double ProbJet;
66  double Loginvlog=0;
67 
68  if(SumJet<0.){
69  if(ngoodtracks>=2){
70  Loginvlog=log(-SumJet);
71  }
72  double Prob=1.;
73  for(int l=1; l!=ngoodtracks; l++){
74 
75  Prob+=exp(l*Loginvlog-log(1.*factorial(l)));
76  }
77  double LogProb=log(Prob);
78  ProbJet=
79  std::min(exp(std::max(LogProb+SumJet,-30.)),1.);
80  }else{
81  ProbJet=1.;
82  }
83  if(ProbJet>1)
84  std::cout << "ProbJet too high: " << ProbJet << std::endl;
85 
86  //double LogProbJet=-log(ProbJet);
87  //return 1.-ProbJet;
88  return -log10(ProbJet)/4.;
89 }
90 
91 
100  virtual float discriminator(int ipType, float minProb) const { return jetProbability(ipType,minProb); }
101 
102  virtual int selectedTracks(int ipType) const
103  {
104  if(ipType == 0) return m_probability3d.size();
105  else return m_probability2d.size();
106  }
107  virtual int trackIndex(size_t n,int ip) const
108  {
109  if(ip == 0)
110  {
111  if(n <m_probability3d.size())
112  return m_trackOrder3d[n];
113  }
114  else
115  {
116  if(n <m_probability2d.size())
117  return m_trackOrder2d[n];
118  }
119  return 0;
120  }
121 
122  virtual const Track & track(size_t n,int ipType) const
123  {
124  return *tracks()[trackIndex(n,ipType)];
125  }
126 
127  virtual TrackProbabilityTagInfo* clone() const { return new TrackProbabilityTagInfo( * this ); }
128 
129  private:
130  std::vector<double> m_probability2d; //
131  std::vector<double> m_probability3d; // create a smarter container instead of
132  std::vector<int> m_trackOrder2d; // this pair of vectors.
133  std::vector<int> m_trackOrder3d; //
134  };
135 
136 //typedef edm::ExtCollection< TrackProbabilityTagInfo,JetTagCollection> TrackProbabilityExtCollection;
137 //typedef edm::OneToOneAssociation<JetTagCollection, TrackProbabilityTagInfo> TrackProbabilityExtCollection;
138 
140 
141 }
142 #endif
virtual float jetProbability(int ip, float minTrackProb) const
virtual float probability(size_t n, int ip) const
virtual float discriminator(int ipType, float minProb) const
#define min(a, b)
Definition: mlp_lapack.h:161
virtual TrackProbabilityTagInfo * clone() const
clone
virtual TrackRefVector tracks(void) const
returns a list of tracks associated to the jet
Definition: JTATagInfo.h:21
const T & max(const T &a, const T &b)
TrackProbabilityTagInfo(std::vector< double > probability2d, std::vector< double > probability3d, std::vector< int > trackOrder2d, std::vector< int > trackOrder3d, const JetTracksAssociationRef &jtaRef)
const JetTracksAssociationRef & jtaRef(void) const
Definition: JTATagInfo.h:22
virtual int trackIndex(size_t n, int ip) const
#define DECLARE_EDM_REFS(class_name)
Definition: RefMacros.h:10
tuple cout
Definition: gather_cfg.py:121
virtual const Track & track(size_t n, int ipType) const
virtual int selectedTracks(int ipType) const
mathSSE::Vec4< T > v