CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonCocktails.cc
Go to the documentation of this file.
2 #include "TMath.h"
3 //#include "CommonTools/Statistics/interface/ChiSquaredProbability.h"
5 
6 #include <TROOT.h>
7 
8 //
9 // return the TeV-optimized refit track
10 //
12  const reco::TrackRef& trackerTrack,
13  const reco::TrackToTrackMap tevMap1,
14  const reco::TrackToTrackMap tevMap2,
15  const reco::TrackToTrackMap tevMap3 ) {
16 
17  std::vector<reco::TrackRef> refit(4);
18  bool ok[4];
19  ok[0] = true; // Assume tracker track OK.
20 
21  reco::TrackToTrackMap::const_iterator gmrTrack = tevMap1.find(combinedTrack);
22  reco::TrackToTrackMap::const_iterator fmsTrack = tevMap2.find(combinedTrack);
23  reco::TrackToTrackMap::const_iterator pmrTrack = tevMap3.find(combinedTrack);
24 
25  ok[1] = gmrTrack != tevMap1.end();
26  ok[2] = fmsTrack != tevMap2.end();
27  ok[3] = pmrTrack != tevMap3.end();
28 
29  double prob[4];
30  int chosen=3;
31 
32  if (ok[0]) refit[0] = trackerTrack;
33  if (ok[1]) refit[1] = (*gmrTrack).val;
34  if (ok[2]) refit[2] = (*fmsTrack).val;
35  if (ok[3]) refit[3] = (*pmrTrack).val;
36 
37  for (unsigned int i=0; i<4; i++)
38  prob[i] = (ok[i] && refit[i]->numberOfValidHits())
39  ? trackProbability(refit[i]) : 0.0;
40 
41 // std::cout << "Probabilities: " << prob[0] << " " << prob[1] << " " << prob[2] << " " << prob[3] << std::endl;
42 
43  if (prob[3]==0.){
44  if (prob[2]>0.){
45  chosen=2;
46  } else {
47  if (prob[1]>0.){
48  chosen=1;
49  } else {
50  if (prob[0]>0.) chosen=0;
51  }
52  }
53  }
54  if ( prob[0]>0. && prob[3]>0. && ((prob[3]-prob[0]) > 30.) ) chosen=0;
55  if ( prob[2]>0. && ((prob[chosen]-prob[2]) > 0.) ) chosen=2;
56 
57  return refit.at(chosen);
58 }
59 
60 //
61 // return the TeV-optimized refit track (older version)
62 //
64  const reco::TrackRef& trackerTrack,
65  const reco::TrackToTrackMap tevMap1,
66  const reco::TrackToTrackMap tevMap2,
67  const reco::TrackToTrackMap tevMap3 ) {
68 
69  std::vector<reco::TrackRef> refit(4);
71  bool ok[4];
72  ok[0] = true; // Assume tracker track OK.
73 
74  reco::TrackToTrackMap::const_iterator gmrTrack = tevMap1.find(combinedTrack);
75  reco::TrackToTrackMap::const_iterator fmsTrack = tevMap2.find(combinedTrack);
76  reco::TrackToTrackMap::const_iterator pmrTrack = tevMap3.find(combinedTrack);
77 
78  ok[1] = gmrTrack != tevMap1.end();
79  ok[2] = fmsTrack != tevMap2.end();
80  ok[3] = pmrTrack != tevMap3.end();
81 
82  double prob[4];
83 
84  if (ok[0]) refit[0] = trackerTrack;
85  if (ok[1]) refit[1] = (*gmrTrack).val;
86  if (ok[2]) refit[2] = (*fmsTrack).val;
87  if (ok[3]) refit[3] = (*pmrTrack).val;
88 
89  for (unsigned int i=0; i<4; i++)
90  prob[i] = (ok[i] && refit[i]->numberOfValidHits())
91  ? trackProbability(refit[i]) : 0.0;
92 
93 // std::cout << "Probabilities: " << prob[0] << " " << prob[1] << " " << prob[2] << " " << prob[3] << std::endl;
94 
95  if (prob[1] ) result = refit[1];
96  if ((prob[1] == 0) && prob[3]) result = refit[3];
97 
98  if (prob[1] && prob[3] && ((prob[1] - prob[3]) > 0.05 )) result = refit[3];
99 
100  if (prob[0] && prob[2] && fabs(prob[2] - prob[0]) > 30.) {
101  result = refit[0];
102  return result;
103  }
104 
105  if ((prob[1] == 0) && (prob[3] == 0) && prob[2]) result = refit[2];
106 
107  reco::TrackRef tmin;
108  double probmin = 0.0;
109 
110  if (prob[1] && prob[3]) {
111  probmin = prob[3]; tmin = refit[3];
112  if ( prob[1] < prob[3] ) { probmin = prob[1]; tmin = refit[1]; }
113  } else if ((prob[3] == 0) && prob[1]) {
114  probmin = prob[1]; tmin = refit[1];
115  } else if ((prob[1] == 0) && prob[3]) {
116  probmin = prob[3]; tmin = refit[3];
117  }
118 
119  if (probmin && prob[2] && ( (probmin - prob[2]) > 3.5 )) {
120  result = refit[2];
121  }
122 
123  return result;
124 }
125 
126 //
127 // return the TeV-optimized refit track for the muon
128 //
130  const reco::TrackToTrackMap tevMap1,
131  const reco::TrackToTrackMap tevMap2,
132  const reco::TrackToTrackMap tevMap3 ) {
133  return muon::tevOptimized(muon.combinedMuon(), muon.track(),
134  tevMap1, tevMap2, tevMap3);
135 }
136 
137 //
138 // return the TeV-optimized refit track for the muon (older version)
139 //
141  const reco::TrackToTrackMap tevMap1,
142  const reco::TrackToTrackMap tevMap2,
143  const reco::TrackToTrackMap tevMap3 ) {
144  return muon::tevOptimizedOld(muon.combinedMuon(), muon.track(),
145  tevMap1, tevMap2, tevMap3);
146 }
147 
148 //
149 // calculate the tail probability (-ln(P)) of a fit
150 //
152 
153  int nDOF = (int)track->ndof();
154  if ( nDOF > 0 && track->chi2()> 0) {
155  return -log(TMath::Prob(track->chi2(), nDOF));
156  } else {
157  return 0.0;
158  }
159 
160 }
161 
162 
int i
Definition: DBlmapReader.cc:9
const_iterator end() const
last iterator over the map (read only)
const_iterator find(const key_type &k) const
find element with specified reference key
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:39
reco::TrackRef tevOptimized(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const reco::TrackToTrackMap tevMap1, const reco::TrackToTrackMap tevMap2, const reco::TrackToTrackMap tevMap3)
reco::TrackRef tevOptimizedOld(const reco::TrackRef &combinedTrack, const reco::TrackRef &trackerTrack, const reco::TrackToTrackMap tevMap1, const reco::TrackToTrackMap tevMap2, const reco::TrackToTrackMap tevMap3)
tuple result
Definition: query.py:137
virtual TrackRef combinedMuon() const
reference to a stand-alone muon Track
Definition: Muon.h:45
Log< T >::type log(const T &t)
Definition: Log.h:22
double trackProbability(const reco::TrackRef track)