LCFIVertex  0.7.2
zvkin.cpp
1 #include <algo/inc/zvkin.h>
2 
3 #include <zvtop/include/vertexfinderghost.h>
4 #include <zvtop/include/candidatevertex.h>
5 #include <zvtop/include/interactionpoint.h>
6 #include <inc/vertex.h>
7 #include <inc/jet.h>
8 #include <inc/event.h>
9 #include <inc/decaychain.h>
10 #include <inc/trackstate.h>
11 #include <inc/track.h>
12 #include <util/inc/memorymanager.h>
13 #include <util/inc/vector3.h>
14 #include <util/inc/matrix.h>
15 #include <util/inc/string.h>
16 #include <string>
17 #include <vector>
18 #include <list>
19 using std::string;
20 
21 using namespace vertex_lcfi::ZVTOP;
22 using namespace vertex_lcfi::util;
23 
24 namespace vertex_lcfi
25 {
26 
28  {
29  //Default Values
30  //TODO FILL THIS
31  }
32 
33  string ZVKIN::name() const
34  {
35  return "ZVKIN";
36  }
37 
38  std::vector<string> ZVKIN::parameterNames() const
39  {
40  std::vector<string> paramNames;
41  paramNames.push_back("UseEventIP");
42  paramNames.push_back("MinimumProbability");
43  paramNames.push_back("InitialGhostWidth");
44  paramNames.push_back("MaxChi2Allowed");
45  paramNames.push_back("AutoJetAxis");
46  paramNames.push_back("JetAxisX");
47  paramNames.push_back("JetAxisY");
48  paramNames.push_back("JetAxisZ");
49  return paramNames;
50  }
51 
52  std::vector<string> ZVKIN::parameterValues() const
53  {
54  std::vector<string> paramValues;
55  paramValues.push_back(makeString(_UseEventIP));
56  paramValues.push_back(makeString(_MinimumProbability));
57  paramValues.push_back(makeString(_InitialGhostWidth));
58  paramValues.push_back(makeString(_MaxChi2Allowed));
59  paramValues.push_back(makeString(_AutoJetAxis));
60  paramValues.push_back(makeString(_JetAxis.x()));
61  paramValues.push_back(makeString(_JetAxis.y()));
62  paramValues.push_back(makeString(_JetAxis.z()));
63  return paramValues;
64  }
65 
66  void ZVKIN::setStringParameter(const string & Parameter, const string & Value)
67  {
68  if (Parameter == "AutoJetAxis")
69  {
70  if (Value == "TRUE")
71  {
72  _AutoJetAxis = 1;
73  return;
74  }
75  if (Value == "FALSE")
76  {
77  _AutoJetAxis = 0;
78  return;
79  }
80  //TODO Throw Something
81  }
82  if (Parameter == "UseEventIP")
83  {
84  if (Value == "TRUE")
85  {
86  _UseEventIP = 1;
87  return;
88  }
89  if (Value == "FALSE")
90  {
91  _UseEventIP = 0;
92  return;
93  }
94  //TODO Throw Something
95  }
96  this->badParameter(Parameter);
97  }
98 
99  void ZVKIN::setDoubleParameter(const string & Parameter, const double Value)
100  {
101  if (Parameter == "MinimumProbability")
102  {
103  _MinimumProbability = Value;
104  return;
105  }
106  if (Parameter == "InitialGhostWidth")
107  {
108  _InitialGhostWidth = Value;
109  return;
110  }
111  if (Parameter == "MaxChi2Allowed")
112  {
113  _MaxChi2Allowed = Value;
114  return;
115  }
116  if (Parameter == "JetAxisX")
117  {
118  _JetAxis.x() = Value;
119  return;
120  }
121  if (Parameter == "JetAxisY")
122  {
123  _JetAxis.y() = Value;
124  return;
125  }
126  if (Parameter == "JetAxisZ")
127  {
128  _JetAxis.z() = Value;
129  return;
130  }
131  this->badParameter(Parameter);
132  }
133 
134  void ZVKIN::setPointerParameter(const string & Parameter, void * Value)
135  {
136  this->badParameter(Parameter);
137  }
138 
140  {
141  InteractionPoint* IP;
142  //Make the IP object for zvtop
143  if (_UseEventIP == 1)
144  {
145  IP = new InteractionPoint(MyJet->event()->interactionPoint(),MyJet->event()->interactionPointError());
146  MemoryManager<InteractionPoint>::Event()->registerObject(IP);
147  }
148  else
149  {
150  SymMatrix3x3 ipcov;
151  ipcov.clear();
152  double ie = 10.0/1000.0;
153  ipcov(0,0)=ie*ie;
154  ipcov(1,1)=ie*ie;
155  ipcov(2,2)=ie*ie;
156  /*
157  ipcov(0,0)=0.0005*0.0005;
158  ipcov(1,1)=0.0005*0.0005;
159  ipcov(2,2)=0.002*0.002;
160  */
161  //TODO Make these parameters of this class (not hard wired)
162  IP = new InteractionPoint(Vector3(0,0,0),ipcov);
163  MemoryManager<InteractionPoint>::Event()->registerObject(IP);
164  }
165 
166  //Make the jet axis parameter
167  Vector3 JetAxis(0,0,0);
168  if (_AutoJetAxis == 1)
169  {
170  //Automatic - Just loop over tracks and sum momentum
171  for (std::vector<Track*>::const_iterator iTrack = MyJet->tracks().begin();
172  iTrack != MyJet->tracks().end(); ++iTrack)
173  {
174  JetAxis=JetAxis.add((*iTrack)->momentum());
175  }
176  //Make unit vector
177  JetAxis = JetAxis.unit();
178  }
179  else
180  {
181  //Non auto - use parameter
182  JetAxis = _JetAxis;
183  }
184 
185  //Run ZVKIN - result is in order of 3D distance from IP
186  VertexFinderGhost VFinder(MyJet->tracks(),IP);
187  VFinder.seedDirection() = JetAxis;
188  VFinder.minimumProbability() = _MinimumProbability;
189  VFinder.initialGhostWidth() = _InitialGhostWidth;
190  VFinder.maxChi2Allowed() = _MaxChi2Allowed;
191  std::list<CandidateVertex*> CVResult = VFinder.findVertices();
192  Track* GhostTrack = VFinder.lastGhost();
193  //Make Vertex objects from CandidateVertices
194  std::vector<Vertex*> VResult;
195  for (std::list<CandidateVertex*>::iterator iCV = CVResult.begin();iCV != CVResult.end();++iCV)
196  {
197  Vertex* MyVertex;
198  if (!(*iCV)->interactionPoint())
199  {
200  MyVertex = new Vertex(*iCV,MyJet->event());
201  }
202  else
203  {
204  std::vector<Track*> Tracks;
205  for (std::vector<TrackState*>::const_iterator iTrack = (*iCV)->trackStateList().begin();
206  iTrack != (*iCV)->trackStateList().end(); ++iTrack)
207  {
208  Tracks.push_back((*iTrack)->parentTrack());
209  }
210  //TODO Fix chi2,prob value
211  MyVertex = new Vertex(MyJet->event(), Tracks, (*iCV)->interactionPoint()->position(), (*iCV)->interactionPoint()->errorMatrix(), (bool)(*iCV)->interactionPoint(),0,0);
212  }
213  MemoryManager<Vertex>::Event()->registerObject(MyVertex);
214  //Remove the ghost!
215  MyVertex->removeTrack(GhostTrack);
216  VResult.push_back(MyVertex);
217  }
218 
219  //Make DecayChain from vertices
220  DecayChain* MyDecayChain = new DecayChain(MyJet, std::vector<Track*>(), VResult);
221  MemoryManager<DecayChain>::Event()->registerObject(MyDecayChain);
222  return MyDecayChain;
223  }
224 }
bool removeTrack(Track *RTrack)
Remove Track.
Definition: vertex.cpp:37
std::vector< string > parameterNames() const
Parameter Names.
Definition: zvkin.cpp:38
const std::vector< Track * > & tracks() const
Tracks.
Definition: jet.cpp:23
void setDoubleParameter(const string &Parameter, const double Value)
Set Double Parameter.
Definition: zvkin.cpp:99
string name() const
Name.
Definition: zvkin.cpp:33
Event * event() const
Event.
Definition: jet.cpp:18
void setStringParameter(const string &Parameter, const string &Value)
Set String Parameter.
Definition: zvkin.cpp:66
DecayChain * calculateFor(Jet *MyJet) const
Run the algorithm on a jet.
Definition: zvkin.cpp:139
static MemoryManager< T > * Event()
Returns the Event duration singleton instance of the MemoryManager for type T.
ZVKIN()
Default Constructor.
Definition: zvkin.cpp:27
void setPointerParameter(const string &Parameter, void *Value)
Set Pointer Parameter.
Definition: zvkin.cpp:134
std::vector< string > parameterValues() const
Parameter Values.
Definition: zvkin.cpp:52
Unique Track representation.
const SymMatrix3x3 & interactionPointError() const
Interaction Point position error.
Definition: event.cpp:55
const Vector3 & interactionPoint() const
Interaction Point position.
Definition: event.cpp:50