2 #include "../include/vertexfunctionsimple.h"
4 #include "../include/gausstube.h"
5 #include "../include/gaussellipsoid.h"
7 namespace vertex_lcfi {
namespace ZVTOP
10 VertexFunctionSimple::VertexFunctionSimple(std::vector<Track*> & Tracks)
12 for (std::vector<Track*>::iterator iTrack = Tracks.begin();iTrack != Tracks.end();++iTrack)
14 GaussTube* element=
new GaussTube(*iTrack);
15 _AllElements.push_back(element);
16 _Tubes.push_back(element);
17 _ElementsNewedByThis.push_back(element);
23 VertexFunctionSimple::VertexFunctionSimple(std::vector<Track*> & Tracks, InteractionPoint* IP)
25 for (std::vector<Track*>::iterator iTrack = Tracks.begin();iTrack != Tracks.end();++iTrack)
27 GaussTube* element=
new GaussTube(*iTrack);
28 _AllElements.push_back(element);
29 _Tubes.push_back(element);
30 _ElementsNewedByThis.push_back(element);
34 GaussEllipsoid* element=
new GaussEllipsoid(IP);
35 _AllElements.push_back(element);
37 _ElementsNewedByThis.push_back(element);
45 VertexFunctionSimple::~VertexFunctionSimple()
47 for (std::vector<VertexFunctionElement*>::iterator iElement = _ElementsNewedByThis.begin();iElement != _ElementsNewedByThis.end();++iElement)
51 double VertexFunctionSimple::valueAt(
const Vector3 & Point)
const
53 double SumOfTubes = 0;
54 double SumOfSquaredTubes = 0;
55 for (std::vector<GaussTube*>::const_iterator iTube = _Tubes.begin();iTube != _Tubes.end();++iTube)
57 double Tube = (*iTube)->
valueAt(Point);
59 SumOfSquaredTubes += (Tube*Tube);
63 IPValue = _Ellipsoid->
valueAt(Point);
65 return IPValue + SumOfTubes - ( ((IPValue*IPValue)+SumOfSquaredTubes) / (IPValue+SumOfTubes));
double valueAt(const Vector3 &Point) const
Calculate the value of the ellipsoid at a point.