#include "halignmentggeom.h"
#include "halignmentgdata.h"
#include <iostream>
using namespace std;
ClassImp(HAlignmentGGeom)
HAlignmentGGeom::HAlignmentGGeom()
{
Init();
}
HAlignmentGGeom::~HAlignmentGGeom()
{
Clear();
}
void HAlignmentGGeom::Clear()
{
;
}
void HAlignmentGGeom::Init()
{
alignData=HAlignmentGData::Instance();
}
Float_t HAlignmentGGeom::CalcDistanceToPlane(HGeomVector point, HGeomVector pNormal, HGeomVector pPoint)
{
alignData->SetPlane(pNormal, pPoint);
return alignData->CalcDistanceToPlane(point);
}
Float_t HAlignmentGGeom::CalcDistanceToPlane(HGeomVector point, HGeomTransform trans)
{
alignData->SetPlane(trans);
return alignData->CalcDistanceToPlane(point);
}
Float_t HAlignmentGGeom::CalcDistanceToLine(HGeomVector point, HGeomVector point1, HGeomVector point2 )
{
alignData->SetLine(point1, point2-point1);
return alignData->CalcDistanceToLine(point);
}
HGeomVector HAlignmentGGeom::CalcVertex(HGeomVector point1, HGeomVector dir1,
HGeomVector point2, HGeomVector dir2)
{
alignData->SetVertexLine1(point1, dir1);
alignData->SetVertexLine2(point2, dir2);
return alignData->CalcVertex();
}
HGeomVector HAlignmentGGeom::CalcIntersection(HGeomVector point1, HGeomVector point2,
HGeomVector pNormal, HGeomVector pPoint)
{
alignData->SetLine(point1, point2-point1);
alignData->SetPlane(pNormal, pPoint);
return alignData->CalcIntersection();
}
HGeomVector HAlignmentGGeom::CalcIntersection(HGeomVector point1, HGeomVector point2,
HGeomTransform trans)
{
alignData->SetLine(point1, point2-point1);
alignData->SetPlane(trans);
return alignData->CalcIntersection();
}
Float_t HAlignmentGGeom::CalcVectorDistance(HGeomVector dir, HGeomVector point1, HGeomVector point2)
{
HGeomVector DIR=(point2-point1);
DIR/=DIR.length();
return (dir-DIR).length();
}
Float_t HAlignmentGGeom::GetTheta(const HGeomTransform &trans, const Float_t& theta, const Float_t& phi)
{
Float_t X=sin(theta)*cos(phi);
Float_t Y=sin(theta)*sin(phi);
Float_t Z=cos(theta);
HGeomVector dir(X,Y,Z);
HGeomRotation rot = trans.getRotMatrix();
dir= trans.transTo(dir) + rot.inverse()*trans.getTransVector();
return atan2(sqrt(dir.getX()*dir.getX()+dir.getY()*dir.getY()), dir.getZ());
}
Float_t HAlignmentGGeom::GetPhi(const HGeomTransform& trans,const Float_t& theta,const Float_t& phi)
{
Float_t X=sin(theta)*cos(phi);
Float_t Y=sin(theta)*sin(phi);
Float_t Z=cos(theta);
HGeomVector dir(X,Y,Z);
HGeomRotation rot=trans.getRotMatrix();
dir= trans.transTo(dir) + rot.inverse()*trans.getTransVector();
return atan2(dir.getY(),dir.getX());
}