/* Copyright 2008-2009, Technische Universitaet Muenchen,
Authors: Christian Hoeppner & Sebastian Neubert
This file is part of GENFIT.
GENFIT is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GENFIT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with GENFIT. If not, see .
*/
#include "TVector3.h"
#include "trackProximity.h"
#include "Track.h"
double trkDist(Track* trk1, Track* trk2){
TVector3 d=trk1->getPos()-trk2->getPos();
return d.Mag();
}
void trackProximity(Track* trk1, Track* trk2){
// TODO: make accuracy configurable!
// a simple newtonian search.
double h=0.01;
double m1=999999;
double s1=0;
int steps=0;
double oldd=999999;
double d=99999;
while(oldd>d && steps<100){
trk1->stepalong(s1);
trk2->gotoPoint(trk1->getPos());
oldd=d;
++steps;
d=trkDist(trk1,trk2);
trk1->stepalong(h);
trk2->gotoPoint(trk1->getPos());
double d1=trkDist(trk1,trk2);
m1=(d1-d)/h;
if(TMath::Abs(m1)<1E-4)break;
s1=-d/m1;
// limit stepsize to max 180cm
if(TMath::Abs(s1)>200)s1= s1>0 ? 180 : -180;
//std::cout<<"d="<