ROOT logo
//*--Author A.Rustamov

#include "halignmentgdata.h"
#include "hgeomvertexfit.h"
#include "hgeomrotation.h"
#include "hgeomtransform.h"
#include <iostream>

 using namespace std;

ClassImp(HAlignmentGData)

// This object is keeping always one plane, and one line
// Here plane is defined with its normal vector (Aplane, Bplane,Cplane) and
// a dummy point on it (Xp,Yp,Zp)
// Aplane*X+Bplane*Y+Cplane*z+Dplane=0
// Dplane defined as D=-(Aplane*Xp+Bplane*Yp+Cplane*Zp);

HAlignmentGData* HAlignmentGData::oneInstance = NULL;

HAlignmentGData::HAlignmentGData()
{
  ;
}
 
HAlignmentGData* HAlignmentGData::Instance()
{
  if(oneInstance) return oneInstance;
  else
    {
      oneInstance = new HAlignmentGData();
      return oneInstance;
    }
}

void HAlignmentGData::DeleteInstance()
{
  if(oneInstance)
    {
      delete oneInstance;
      oneInstance = NULL;
    }
}

Float_t HAlignmentGData::CalcDistanceToPlane (HGeomVector point)
{
  HGeomVector normal(Aplane, Bplane, Cplane);
  Float_t dist=(normal.scalarProduct(point) + Dplane)/normal.length();

  return dist;
}

HGeomVector HAlignmentGData::CalcIntersection ()
{
  HGeomVector normal(Aplane, Bplane, Cplane); 
  Float_t t = -1.*(normal.scalarProduct(POINT)+Dplane)/normal.scalarProduct(DIRPOINT);
  Float_t xInt = POINT.getX() + t*DIRPOINT.getX();
  Float_t yInt = POINT.getY() + t*DIRPOINT.getY();
  Float_t zInt = POINT.getZ() + t*DIRPOINT.getZ();
  return HGeomVector(xInt, yInt, zInt);
}

Float_t HAlignmentGData::CalcDistanceToLine(HGeomVector point)
{
  HGeomVector dist=((point - POINT).vectorProduct(DIRPOINT));
  return dist.length(); 
}

HGeomVector HAlignmentGData::CalcVertex()  
{
  HGeomVertexFit fit;
  HGeomVector Vertex(-100.,-100.,-100.);
  fit.reset();
  fit.addLine(vertexPoint1,vertexPointDir1);
  fit.addLine(vertexPoint2,vertexPointDir2);
  fit.getVertex(Vertex);
  return Vertex;	
}

void HAlignmentGData::SetPlane(HGeomVector pNormal, HGeomVector pPoint)
{
  Aplane = pNormal.getX();
  Bplane = pNormal.getY();
  Cplane = pNormal.getZ();
  Xp = pPoint.getX();
  Yp = pPoint.getY();
  Zp = pPoint.getZ();
  Dplane = -1.*(pNormal.scalarProduct(pPoint));
}

void  HAlignmentGData::SetPlane(HGeomTransform trans)
{
  const HGeomRotation& rot = trans.getRotMatrix();
  const HGeomVector&   shift = trans.getTransVector();
  HGeomVector pNormal(rot(2),rot(5),rot(8));
  HGeomVector pPoint = shift;
  SetPlane(pNormal,pPoint);
}

void HAlignmentGData::SetLine(HGeomVector point, HGeomVector dirPoint)
{
  POINT = point;
  DIRPOINT = dirPoint;
  DIRPOINT/= DIRPOINT.length();
}

void HAlignmentGData::SetVertexLine1(HGeomVector point1, HGeomVector dir1)
{
  vertexPoint1    = point1;
  vertexPointDir1 = dir1;
  vertexPointDir1/= vertexPointDir1.length();  
}
void HAlignmentGData::SetVertexLine2(HGeomVector point2, HGeomVector dir2)
{
  vertexPoint2   = point2;
  vertexPointDir2 = dir2;
  vertexPointDir2/= vertexPointDir2.length();
}
 halignmentgdata.cc:1
 halignmentgdata.cc:2
 halignmentgdata.cc:3
 halignmentgdata.cc:4
 halignmentgdata.cc:5
 halignmentgdata.cc:6
 halignmentgdata.cc:7
 halignmentgdata.cc:8
 halignmentgdata.cc:9
 halignmentgdata.cc:10
 halignmentgdata.cc:11
 halignmentgdata.cc:12
 halignmentgdata.cc:13
 halignmentgdata.cc:14
 halignmentgdata.cc:15
 halignmentgdata.cc:16
 halignmentgdata.cc:17
 halignmentgdata.cc:18
 halignmentgdata.cc:19
 halignmentgdata.cc:20
 halignmentgdata.cc:21
 halignmentgdata.cc:22
 halignmentgdata.cc:23
 halignmentgdata.cc:24
 halignmentgdata.cc:25
 halignmentgdata.cc:26
 halignmentgdata.cc:27
 halignmentgdata.cc:28
 halignmentgdata.cc:29
 halignmentgdata.cc:30
 halignmentgdata.cc:31
 halignmentgdata.cc:32
 halignmentgdata.cc:33
 halignmentgdata.cc:34
 halignmentgdata.cc:35
 halignmentgdata.cc:36
 halignmentgdata.cc:37
 halignmentgdata.cc:38
 halignmentgdata.cc:39
 halignmentgdata.cc:40
 halignmentgdata.cc:41
 halignmentgdata.cc:42
 halignmentgdata.cc:43
 halignmentgdata.cc:44
 halignmentgdata.cc:45
 halignmentgdata.cc:46
 halignmentgdata.cc:47
 halignmentgdata.cc:48
 halignmentgdata.cc:49
 halignmentgdata.cc:50
 halignmentgdata.cc:51
 halignmentgdata.cc:52
 halignmentgdata.cc:53
 halignmentgdata.cc:54
 halignmentgdata.cc:55
 halignmentgdata.cc:56
 halignmentgdata.cc:57
 halignmentgdata.cc:58
 halignmentgdata.cc:59
 halignmentgdata.cc:60
 halignmentgdata.cc:61
 halignmentgdata.cc:62
 halignmentgdata.cc:63
 halignmentgdata.cc:64
 halignmentgdata.cc:65
 halignmentgdata.cc:66
 halignmentgdata.cc:67
 halignmentgdata.cc:68
 halignmentgdata.cc:69
 halignmentgdata.cc:70
 halignmentgdata.cc:71
 halignmentgdata.cc:72
 halignmentgdata.cc:73
 halignmentgdata.cc:74
 halignmentgdata.cc:75
 halignmentgdata.cc:76
 halignmentgdata.cc:77
 halignmentgdata.cc:78
 halignmentgdata.cc:79
 halignmentgdata.cc:80
 halignmentgdata.cc:81
 halignmentgdata.cc:82
 halignmentgdata.cc:83
 halignmentgdata.cc:84
 halignmentgdata.cc:85
 halignmentgdata.cc:86
 halignmentgdata.cc:87
 halignmentgdata.cc:88
 halignmentgdata.cc:89
 halignmentgdata.cc:90
 halignmentgdata.cc:91
 halignmentgdata.cc:92
 halignmentgdata.cc:93
 halignmentgdata.cc:94
 halignmentgdata.cc:95
 halignmentgdata.cc:96
 halignmentgdata.cc:97
 halignmentgdata.cc:98
 halignmentgdata.cc:99
 halignmentgdata.cc:100
 halignmentgdata.cc:101
 halignmentgdata.cc:102
 halignmentgdata.cc:103
 halignmentgdata.cc:104
 halignmentgdata.cc:105
 halignmentgdata.cc:106
 halignmentgdata.cc:107
 halignmentgdata.cc:108
 halignmentgdata.cc:109
 halignmentgdata.cc:110
 halignmentgdata.cc:111
 halignmentgdata.cc:112
 halignmentgdata.cc:113
 halignmentgdata.cc:114
 halignmentgdata.cc:115
 halignmentgdata.cc:116
 halignmentgdata.cc:117
 halignmentgdata.cc:118