LCFIVertex  0.7.2
paramsignificance.cpp
1 #include <algo/inc/paramsignificance.h>
2 #include <inc/track.h>
3 #include <inc/event.h>
4 #include <inc/trackstate.h>
5 #include <inc/jet.h>
6 #include <util/inc/helixrep.h>
7 #include <util/inc/projection.h>
8 #include <util/inc/string.h>
9 #include <vector>
10 #include <string>
11 #include <map>
12 
13 
14 
15 namespace vertex_lcfi
16 {
17 
18  using std::string;
19 
21  {
22  //Initialise default parameters
23  _LayersHit = 5;
24  _AllbutOneLayersMomentumCut = 2;
25  _AllLayersMomentumCut = 1;
26  _ParameterNames.push_back("LayersHit");
27  _ParameterNames.push_back("AllbutOneLayersMomentumCut");
28  _ParameterNames.push_back("AllLayersMomentumCut");
29 
30 
31  }
32 
33 
34 
36  {
37  return _Name;
38  }
39 
40  std::vector<string> ParameterSignificance::parameterNames() const
41  {
42  return _ParameterNames;
43  }
44 
45  std::vector<string> ParameterSignificance::parameterValues() const
46  {
47  _ParameterValues.clear();
48  _ParameterValues.push_back(makeString(_LayersHit));
49  _ParameterValues.push_back(makeString(_AllbutOneLayersMomentumCut));
50  _ParameterValues.push_back(makeString(_AllLayersMomentumCut));
51  _ParameterValues.push_back(makeString(_TwoTrackPidCut));
52  return _ParameterValues;
53  }
54 
55  void ParameterSignificance::setStringParameter(const string & Parameter, const string & Value)
56  {
57  this->badParameter(Parameter);
58  }
59 
60  void ParameterSignificance::setDoubleParameter(const string & Parameter, const double Value)
61  {
62 
63  if (Parameter == "LayersHit")
64  {
65  _LayersHit = Value;
66  return;
67  }
68  if (Parameter == "AllbutOneLayersMomentumCut")
69  {
70  _AllbutOneLayersMomentumCut = Value;
71  return;
72  }
73  if (Parameter == "AllLayersMomentumCut")
74  {
75  _AllLayersMomentumCut = Value;
76  return;
77  }
78  this->badParameter(Parameter);
79  }
80 
81  void ParameterSignificance::setPointerParameter(const string & Parameter, void * Value)
82  {
83  if (Parameter == "TwoTrackPidCut")
84  {
85  _TwoTrackPidCut = (std::map<PidCutType,std::vector<vertex_lcfi::Track*> >*) Value;
86  }
87  else this->badParameter(Parameter);
88  }
89 
90  std::map<SignificanceType ,double> ParameterSignificance::calculateFor(Jet* MyJet) const
91  {
92  double maxsig = -100;
93  double maxsig2 = -100;
94  double momentum = 0;
95  double maxmom = 0;
96  double maxmom2 = 0;
97  double maxz0 = -100;
98  double maxz02 = -100;
99 
100  double mommin4 = _AllbutOneLayersMomentumCut;
101  double mommin5 = _AllLayersMomentumCut;
102  std::map<SignificanceType,double> ResultMap;
103 
104  for (std::vector<Track*>::const_iterator iTrack= (MyJet->tracks().begin()); iTrack != (MyJet->tracks().end()) ;++iTrack)
105  {
106  momentum = (*iTrack)->momentum().mag();
107 
108  if ( (momentum > mommin4 && (*iTrack)->hitsInSubDetectors()[0] == (_LayersHit-1))|| (momentum > mommin5 && (*iTrack)->hitsInSubDetectors()[0] >= _LayersHit ))
109  {
110 
111  //check that we have not assigned this track to a gamma or to a Ks
112 
113  std::vector<Track*>::const_iterator iTrack2 = find((*_TwoTrackPidCut)[Gamma].begin(),(*_TwoTrackPidCut)[Gamma].end(), (*iTrack));
114  std::vector<Track*>::const_iterator iTrack3 = find((*_TwoTrackPidCut)[KShort].begin(),(*_TwoTrackPidCut)[KShort].end(), (*iTrack));
115 
116 
117  if(iTrack3 == (*_TwoTrackPidCut)[KShort].end() && iTrack2 == (*_TwoTrackPidCut)[Gamma].end() )
118  {
119  double d0significance = (*iTrack)->signedSignificance(RPhi,MyJet);
120  double z0significance = (*iTrack)->signedSignificance(Z,MyJet);
121 
122  if (d0significance > maxsig)
123  {
124  maxsig2 = maxsig;
125  maxmom2 = maxmom;
126  maxz02 = maxz0;
127  maxsig = d0significance;
128  maxmom = momentum;
129  maxz0 = z0significance;
130  }
131  else if(d0significance > maxsig2)
132  {
133  maxsig2 = d0significance;
134  maxmom2 = momentum;
135  maxz02 = z0significance;
136  }
137 
138  }
139 
140  }
141  }
142 
143  ResultMap[D0SigTrack1] = maxsig;
144  ResultMap[D0SigTrack2] = maxsig2;
145  ResultMap[Z0SigTrack1] = maxz0;
146  ResultMap[Z0SigTrack2] = maxz02;
147  ResultMap[MomentumTrack1] = maxmom;
148  ResultMap[MomentumTrack2] = maxmom2;
149 
150  //return distance
151  return ResultMap;
152  }
153 
154 }
std::map< SignificanceType, double > calculateFor(Jet *MyJet) const
Run the algorithm on a jet.
void setDoubleParameter(const string &Parameter, const double Value)
Set Double Parameter.
std::vector< string > parameterNames() const
Parameter Names.
const std::vector< Track * > & tracks() const
Tracks.
Definition: jet.cpp:23
std::vector< string > parameterValues() const
Parameter Values.
void setStringParameter(const string &Parameter, const string &Value)
Set String Parameter.
void setPointerParameter(const string &Parameter, void *Value)
Set Pointer Parameter.