65 {
66 if ( part > 2 || part < 0 )
67 {
68 cout << "BAD part id from MucRecLineFit" << endl;
69 return -1;
70 }
71
72 int status = -1;
73 float c, d, sigc, sigd;
74
75 if ( part != 1 )
76 {
77 for (
int i = 0; i <
n; i++ )
78 {
80
82
83 }
84 status =
LineFit(
x, y,
w,
n, a, b, chisq, siga, sigb );
85
86 }
87 else
88 {
89 if ( orient == 0 )
90 {
91
92 for (
int i = 0; i <
n; i++ )
93 {
95 y[i] -= gap0r;
96 }
97 status =
LineFit( y,
x,
w,
n, &c, &d, chisq, &sigc, &sigd );
98
99
100
101
102
103
104 *a = 1 / c;
105 *b = -1 * d / c;
106 *siga = 1 / c / c * sigc;
107
108 *sigb = sigd;
109 }
110 else
111 {
112
113 if ( seg == 0 || seg == 4 )
114 {
116 for (
int i = 0; i <
n; i++ ) {
x[i] -= gap0x; }
117 status =
LineFit(
x, y,
w,
n, a, b, chisq, siga, sigb );
118 }
119 else if ( seg == 2 || seg == 6 )
120 {
122 for (
int i = 0; i <
n; i++ ) { y[i] -= gap0y; }
123 status =
LineFit( y,
x,
w,
n, &c, &d, chisq, &sigc, &sigd );
124
125 *a = 1 / c;
126 *b = -1 * d / c;
127 *siga = 1 / c / c * sigc;
128
129 *sigb = sigd;
130 }
131 else
132 {
133 for (
int i = 0; i <
n; i++ )
134 {
135 float temp = ( y[i] +
x[i] ) / sqrt( 2.0 );
136 y[i] = ( y[i] -
x[i] ) / sqrt( 2.0 );
138 }
139
140 if ( seg == 1 || seg == 5 )
141 {
142 for (
int i = 0; i <
n; i++ )
143 {
144 float gap0x =
147 }
148 status =
LineFit(
x, y,
w,
n, a, b, chisq, siga, sigb );
149 }
150 else if ( seg == 3 || seg == 7 )
151 {
152 for (
int i = 0; i <
n; i++ )
153 {
154 float gap0y =
156 y[i] -= gap0y;
157 }
158 status =
LineFit( y,
x,
w,
n, a, b, chisq, siga, sigb );
159 }
160 }
161 }
162 }
163
164 return status;
165}
HepPoint3D GetCenter() const
Get gap center position in global coordinate.
MucGeoGap * GetGap(const int part, const int seg, const int gap) const
Get a pointer to the gap identified by (part,seg,gap).
static MucGeoGeneral * Instance()
Get a pointer to the single instance of MucGeoGeneral.
int LineFit(float x[], float y[], float w[], int n, float *a, float *b, float *chisq, float *siga, float *sigb)