BOSS 7.0.3
BESIII Offline Software System
Loading...
Searching...
No Matches
HoughStereo Class Reference

#include <HoughStereo.h>

Public Member Functions

 HoughStereo (double bunchTime, Hough2D *circle, HoughRecHit *rechit)
 
void setAmb (int i)
 
int cald ()
 
void calcu (double x1, double y1, double xc, double yc, double rc, double x_east, double y_east, double z_east, double x_west, double y_west, double z_west, double &theta, double &l, double &z)
 
void setRecHit ()
 
void print ()
 
Hough2DgetCircle () const
 
HoughRecHitgetRecHit () const
 
double getlLeft () const
 
double getlRight () const
 
double getzLeft () const
 
double getzRight () const
 
 HoughStereo (double bunchTime, Hough2D *circle, HoughRecHit *rechit)
 
void setAmb (int i)
 
int cald ()
 
void calcu (double x1, double y1, double xc, double yc, double rc, double x_east, double y_east, double z_east, double x_west, double y_west, double z_west, double &theta, double &l, double &z)
 
void setRecHit ()
 
void print ()
 
Hough2DgetCircle () const
 
HoughRecHitgetRecHit () const
 
double getlLeft () const
 
double getlRight () const
 
double getzLeft () const
 
double getzRight () const
 

Static Public Attributes

static int m_debug =0
 

Detailed Description

Constructor & Destructor Documentation

◆ HoughStereo() [1/2]

HoughStereo::HoughStereo ( double  bunchTime,
Hough2D circle,
HoughRecHit rechit 
)

Definition at line 9 of file HoughStereo.cxx.

9 :_bunchTime(bunchTime),_circle(circle),_rechit(rechit){
10 _lleft=-99;
11 _zleft=-99;
12 _lright=-99;
13 _zright=-99;
14 _ambig=0;
15 _charge=circle->getCharge();
16}

◆ HoughStereo() [2/2]

HoughStereo::HoughStereo ( double  bunchTime,
Hough2D circle,
HoughRecHit rechit 
)

Member Function Documentation

◆ calcu() [1/2]

void HoughStereo::calcu ( double  x1,
double  y1,
double  xc,
double  yc,
double  rc,
double  x_east,
double  y_east,
double  z_east,
double  x_west,
double  y_west,
double  z_west,
double &  theta,
double &  l,
double &  z 
)

Definition at line 119 of file HoughStereo.cxx.

119 {
120 //rphi -> sz
121 if(xc==0||x1-xc==0){
122 theta=0;
123 }
124 else{
125 theta=M_PI-atan2(y1-yc,x1-xc)+atan2(yc,xc);
126 if(theta>2*M_PI){
127 theta=theta-2*M_PI;
128 }
129 if(theta<0){
130 theta=theta+2*M_PI;
131 }
132 }
133 if(_charge == 1 ) theta = 2*M_PI-theta;
134
135 double d1=sqrt((x1-x_west)*(x1-x_west)+(y1-y_west)*(y1-y_west));
136 double d2=sqrt((x_east-x_west)*(x_east-x_west)+(y_east-y_west)*(y_east-y_west));
137// cout<<"d1/d2 "<<d1/d2<<" "<<d1<<" "<<d2<<endl;
138// cout<<"zw ze "<<z_west<<" "<<z_east<<endl;
139 z = z_west-(z_west-z_east)*d1/d2;
140 l = rc*theta;
141}
#define M_PI
Definition: TConstant.h:4

Referenced by cald().

◆ calcu() [2/2]

void HoughStereo::calcu ( double  x1,
double  y1,
double  xc,
double  yc,
double  rc,
double  x_east,
double  y_east,
double  z_east,
double  x_west,
double  y_west,
double  z_west,
double &  theta,
double &  l,
double &  z 
)

◆ cald() [1/2]

int HoughStereo::cald ( )

Definition at line 23 of file HoughStereo.cxx.

23 {
24 bool ok_ambig[2];
25 bool ok[2][2];
26 ok_ambig[0]=true;
27 ok_ambig[1]=true;
28 ok[0][0]=false;
29 ok[0][1]=false;
30 ok[1][0]=false;
31 ok[1][1]=false;
32 double xeast = _rechit->getEastPoint().x();
33 double xwest = _rechit->getWestPoint().x();
34 double yeast = _rechit->getEastPoint().y();
35 double ywest = _rechit->getWestPoint().y();
36 double zeast = _rechit->getEastPoint().z();
37 double zwest = _rechit->getWestPoint().z();
38// cout<<"xeast xwest "<<xeast<<" "<<xwest<<endl;
39 double k = (ywest-yeast)/(xwest-xeast);
40 double b = -k*xeast+yeast;
41 // cout<<" k b "<<k<<" "<<b<<endl;
42 double xc = _circle->getCirX();
43 double yc = _circle->getCirY();
44 double rc = _circle->getCirR();
45// cout<<"xc yc rc "<<xc<<" "<<yc<<" "<<rc<<endl;
46 double drift = _rechit->getDriftDist();
47 //double drift = _rechit->getDriftDistTruth();
48// cout<<"drift "<<_rechit->getDriftDist()<<endl;
49// cout<<"driftTruth "<<_rechit->getDriftDistTruth()<<endl;
50 double x1(999),y1(999);
51 double x2(999),y2(999);
52 double a = k*k+1;
53 double b1 = -2*(xc+k*yc-k*b);
54 double c1 = xc*xc+(yc-b)*(yc-b)-(rc+drift)*(rc+drift);
55 double c2 = xc*xc+(yc-b)*(yc-b)-(rc-drift)*(rc-drift);
56 double delta1 = (b1*b1-4*a*c1);
57 double delta2 = (b1*b1-4*a*c2);
58 if( delta1 <0 ) ok_ambig[0] = false;
59 if( delta2 <0 ) ok_ambig[1] = false;
60 // cout<<"(b1*b1-4*a*c1) "<<(b1*b1-4*a*c1)<<endl;
61 // cout<<"(b1*b1-4*a*c2) "<<(b1*b1-4*a*c2)<<endl;
62 if( delta1>=0 ) {
63 double x1_0 = ( -b1+sqrt(delta1) ) /(2*a);
64 double x1_1 = ( -b1-sqrt(delta1) ) /(2*a);
65// cout<<"x1 0 1 "<<x1_0<<" "<<x1_1<<endl;
66 if( (xeast>=x1_0 && xwest<=x1_0) or (xeast<=x1_0 && xwest>=x1_0) ) ok[0][0] = true;
67 if ( (xeast>=x1_1 && xwest<=x1_1) or (xeast<=x1_1 && xwest>=x1_1) ) ok[0][1]=true;
68 if( ok[0][0] == true && ok[0][1]==false ) x1 = x1_0;
69 if( ok[0][0] == false && ok[0][1]==true ) x1 = x1_1;
70 if( ok[0][0] == true && ok[0][1]==true ) {
71 x1 = x1_0; //??good
72// cout<<" error both ok "<<endl;
73 }
74 if( ok[0][0] == false && ok[0][1]==false ) ok_ambig[0] = false;
75 y1 = k*x1+b;
76 double theta1 = 0;
77 double l1= 0;
78 double z1= 0;
79 if(ok_ambig[0]==true) {
80 calcu(x1,y1,xc,yc,rc,xeast,yeast,zeast,xwest,ywest,zwest,theta1,l1,z1);
81 if(m_debug>0) cout<<" theta1 l1 z1 "<<theta1<<" "<<l1<<" "<<z1<<endl;
82 _zleft = z1;
83 _lleft = l1;
84 }
85 }
86
87 if( delta2>=0){
88 double x2_0 = ( -b1+sqrt(delta2) ) /(2*a);
89 double x2_1 = ( -b1-sqrt(delta2) ) /(2*a);
90// cout<<"x2 0 1 "<<x2_0<<" "<<x2_1<<endl;
91 if( (xeast>=x2_0 && xwest<=x2_0) or (xeast<=x2_0 && xwest>=x2_0) ) ok[1][0] = true;
92 if ( (xeast>=x2_1 && xwest<=x2_1) or (xeast<=x2_1 && xwest>=x2_1) ) ok[1][1]=true;
93 if( ok[1][0] == true && ok[1][1]==false ) x2 = x2_0;
94 if( ok[1][0] == false && ok[1][1]==true ) x2 = x2_1;
95 if( ok[1][0] == true && ok[1][1]==true ) {
96 x2 = x2_0;
97// cout<<" error both ok "<<endl;
98 }
99 if( ok[1][0] == false && ok[1][1]==false ) ok_ambig[1] = false;
100 y2 = k*x2+b;
101 double theta2 = 0;
102 double l2= 0;
103 double z2= 0;
104 if(ok_ambig[1]==true) {
105 calcu(x2,y2,xc,yc,rc,xeast,yeast,zeast,xwest,ywest,zwest,theta2,l2,z2);
106 if(m_debug>0) cout<<" theta2 l2 z2 "<<theta2<<" "<<l2<<" "<<z2<<endl;
107 _zright = z2;
108 _lright = l2;
109 }
110 }
111 if( ok_ambig[0] == true && ok_ambig[1] == false ) return -1;
112 if( ok_ambig[0] == false && ok_ambig[1] == true ) return 1;
113 if( ok_ambig[0] == true && ok_ambig[1] == true ) return 2;
114 if( ok_ambig[0] == false && ok_ambig[1] == false ) return 0;
115 //cout<<" ztruth : "<<_rechit->getZTruth()<<endl;
116}
void calcu(double x1, double y1, double xc, double yc, double rc, double x_east, double y_east, double z_east, double x_west, double y_west, double z_west, double &theta, double &l, double &z)

Referenced by HoughTrack::calzs().

◆ cald() [2/2]

int HoughStereo::cald ( )

◆ getCircle() [1/2]

Hough2D * HoughStereo::getCircle ( ) const
inline

Definition at line 20 of file InstallArea/include/MdcHoughFinder/MdcHoughFinder/HoughStereo.h.

20{return _circle;}

◆ getCircle() [2/2]

Hough2D * HoughStereo::getCircle ( ) const
inline

◆ getlLeft() [1/2]

double HoughStereo::getlLeft ( ) const
inline

Definition at line 22 of file InstallArea/include/MdcHoughFinder/MdcHoughFinder/HoughStereo.h.

22{return _lleft;}

◆ getlLeft() [2/2]

double HoughStereo::getlLeft ( ) const
inline

◆ getlRight() [1/2]

double HoughStereo::getlRight ( ) const
inline

Definition at line 23 of file InstallArea/include/MdcHoughFinder/MdcHoughFinder/HoughStereo.h.

23{return _lright;}

◆ getlRight() [2/2]

double HoughStereo::getlRight ( ) const
inline

◆ getRecHit() [1/2]

HoughRecHit * HoughStereo::getRecHit ( ) const
inline

Definition at line 21 of file InstallArea/include/MdcHoughFinder/MdcHoughFinder/HoughStereo.h.

21{return _rechit;}

◆ getRecHit() [2/2]

HoughRecHit * HoughStereo::getRecHit ( ) const
inline

◆ getzLeft() [1/2]

double HoughStereo::getzLeft ( ) const
inline

Definition at line 24 of file InstallArea/include/MdcHoughFinder/MdcHoughFinder/HoughStereo.h.

24{return _zleft;}

◆ getzLeft() [2/2]

double HoughStereo::getzLeft ( ) const
inline

◆ getzRight() [1/2]

double HoughStereo::getzRight ( ) const
inline

Definition at line 25 of file InstallArea/include/MdcHoughFinder/MdcHoughFinder/HoughStereo.h.

25{return _zright;}

◆ getzRight() [2/2]

double HoughStereo::getzRight ( ) const
inline

◆ print() [1/2]

void HoughStereo::print ( )

Definition at line 275 of file HoughStereo.cxx.

275 {
276 cout<<"Hit"<<"("<<_rechit->getLayerId()<<","<<_rechit->getWireId()<<") "<<_rechit->getStyle()<<endl;
277 cout<<" left: "<<_lleft<<","<<_zleft<<endl;
278 cout<<" right: "<<_lright<<","<<_zright<<endl;
279}

Referenced by HoughTrack::calzs().

◆ print() [2/2]

void HoughStereo::print ( )

◆ setAmb() [1/2]

void HoughStereo::setAmb ( int  i)

Definition at line 17 of file HoughStereo.cxx.

17 {
18 //initial
19 _ambig=i;
20}

◆ setAmb() [2/2]

void HoughStereo::setAmb ( int  i)

◆ setRecHit() [1/2]

void HoughStereo::setRecHit ( )

Definition at line 269 of file HoughStereo.cxx.

269 {
270 _rechit->setzAmb( 0 , _zleft);
271 _rechit->setsAmb( 0 , _lleft);
272 _rechit->setzAmb( 1 , _zright);
273 _rechit->setsAmb( 1 , _lright);
274}

Referenced by HoughTrack::calzs().

◆ setRecHit() [2/2]

void HoughStereo::setRecHit ( )

Member Data Documentation

◆ m_debug

int HoughStereo::m_debug =0
static

The documentation for this class was generated from the following files: