FairRoot/PandaRoot
PndRadMapPlane.cxx
Go to the documentation of this file.
1 
2 
3 #include "PndRadMapPlane.h"
4 #include <TMath.h>
5 #include <TFile.h>
6 
7 #include <iostream>
8 #include <iomanip>
9 #include <utility>
10 
11 //#include "G4UnitsTable.hh"
12 
13 #define verbose true
14 
15 //ClassImp(PndRadMapPlane);
16 
18  SetNormal(TVector3(0, 0, 0));
19  SetDistance(0);
20  corner1 = TVector3(0, 0, 0);
21  corner2 = TVector3(0, 0, 0);
22  corner3 = TVector3(0, 0, 0);
23 }
24 
25 PndRadMapPlane::PndRadMapPlane(TVector3 _corner1, TVector3 _corner2, TVector3 _corner3,
26  double dist){
27  corner1 = _corner1;
28  corner2 = _corner2;
29  corner3 = _corner3;
30  TVector3 dpv1 = corner2-corner1;
31  TVector3 dpv2 = corner3-corner1;
32  TVector3 n = (dpv1.Cross(dpv2)).Unit();
33  SetNormal(n);
34  SetDistance(dist);
35 }
36 
38 
39  // TVector3 corner1, corner2, corner3, axis;
40  switch (plane){
41  case XY: case YX:
42  corner1.SetXYZ( 1, 1, dist);
43  corner2.SetXYZ(-1, 1, dist);
44  corner3.SetXYZ(-1, -1, dist);
45  break;
46 
47  case XZ: case ZX:
48  corner1.SetXYZ( 1, dist, 1);
49  corner2.SetXYZ( -1, dist, 1);
50  corner3.SetXYZ( -1, dist, -1);
51  break;
52 
53  case YZ: case ZY:
54  corner1.SetXYZ(dist, 1, 1);
55  corner2.SetXYZ(dist, -1, 1);
56  corner3.SetXYZ(dist,- 1, -1);
57  break;
58  };
59 
60  switch (ax){
61  case Xx:
62  _axis.SetXYZ(1, 0, 0);
63  break;
64  case Yy:
65  _axis.SetXYZ(0, 1, 0);
66  break;
67  case Zz:
68  _axis.SetXYZ(0, 0, 1);
69  break;
70  };
71 
72  corner1.Rotate(rot, _axis);
73  corner2.Rotate(rot, _axis);
74  corner3.Rotate(rot, _axis);
75 
76  TVector3 dpv1 = corner2-corner1;
77  TVector3 dpv2 = corner3-corner1;
78  TVector3 n = (dpv1.Cross(dpv2)).Unit();
79  SetNormal(n);
80 }
81 
83  switch(i){
84  case 1:
85  return Corner1();
86  case 2:
87  return Corner2();
88  case 3:
89  return Corner3();
90  default:
91  return TVector3(0, 0, 0);
92  }
93 }
94 
95 
96 
97 TVector3 PndRadMapPlane::LineIntersection(TVector3 begline, TVector3 endline){
98  // plane: (p-corner1)*n = 0
99  // line: p=t*(end-beg)+beg
100  // (t*(end-beg) + beg - corner1)*n=0
101  // t*(end-beg)*n+(beg-corner1)*n=0
102  // n*(corner1-beg)/(n*(end-beg))=t
103  TVector3 diffl = endline-begline;
104  float nDotBeg = normal*(corner1-begline);
105  float nDotDiff = normal*diffl;
106  float tt = nDotBeg/nDotDiff;
107 
108  TVector3 ixp = begline + tt*diffl;
109 
110  return ixp;
111 
112 }
113 
114 
115 
TVector3 Corner2()
Int_t i
Definition: run_full.C:25
TVector3 LineIntersection(TVector3 begline, TVector3 endline)
int n
void SetNormal(TVector3 n)
TVector3 GetCorner(int i)
TVector3 corner2
Double_t
TVector3 corner3
axis
Definition: PndRadMapPlane.h:9
void SetDistance(double d)
orientation
TGeoRotation rot
TVector3 Corner3()
TVector3 Corner1()
TVector3 corner1