BOSS 7.1.1
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcSegInfoSterO Class Reference

#include <MdcSegInfoSterO.h>

+ Inheritance diagram for MdcSegInfoSterO:

Public Member Functions

 MdcSegInfoSterO ()
 
 ~MdcSegInfoSterO ()
 
double z0 () const
 
double ct () const
 
bool parIsAngle (int i) const
 
int calcStereo (MdcSeg *parentSeg, const TrkRecoTrk &track, MdcSegWorks &segStuff)
 
int calcStereo (MdcSeg *parentSeg, const TrkExchangePar &par, MdcSegWorks &segStuff, double Bz)
 
int zPosition (MdcHitUse &hitUse, const TrkRecoTrk &track, MdcLine *span, int hitFit, double t0) const
 
int zPosition (MdcHitUse &hitUse, const TrkExchangePar &par, MdcLine *span, int hitFit, double t0, double Bz) const
 
- Public Member Functions inherited from MdcSegInfo
 MdcSegInfo ()
 
virtual ~MdcSegInfo ()
 
const double * errmat () const
 
const double * inverr () const
 
double par (int i) const
 
double arc () const
 
void plotSegInfo () const
 

Additional Inherited Members

- Protected Attributes inherited from MdcSegInfo
double _par0
 
double _par1
 
double _errmat [3]
 
double _inverr [3]
 
double _arc
 

Detailed Description

Definition at line 34 of file MdcSegInfoSterO.h.

Constructor & Destructor Documentation

◆ MdcSegInfoSterO()

MdcSegInfoSterO::MdcSegInfoSterO ( )
inline

Definition at line 37 of file MdcSegInfoSterO.h.

37{ };

◆ ~MdcSegInfoSterO()

MdcSegInfoSterO::~MdcSegInfoSterO ( )
inline

Definition at line 38 of file MdcSegInfoSterO.h.

38{ };

Member Function Documentation

◆ calcStereo() [1/2]

int MdcSegInfoSterO::calcStereo ( MdcSeg * parentSeg,
const TrkExchangePar & par,
MdcSegWorks & segStuff,
double Bz )

Definition at line 63 of file MdcSegInfoSterO.cxx.

64 {
65 //----------------------------------------------------------------------------
66 _debug = 0;//yzhang debug
67 // phiAx = approximate phi of axial track @ stereo slayer
68 // return 1 if calculation failed
69 const MdcSuperLayer *slayer = parentSeg->superlayer();
70
71 double kap = 0.5 * par.omega();
72 double d0 = par.d0();
73 BesAngle phi0(par.phi0());
74 BesAngle phiSeg(parentSeg->phi());
75 double radius = slayer->rEnd();
76 double dPhiZ = (-1)*slayer->delPhiinv() * slayer->zEnd();
77 if (_debug >0){
78 parentSeg->plotSeg();
79 std::cout << "delPhi "<<slayer->delPhi()
80 <<" delPhiInv "<<slayer->delPhiinv()
81 <<" dPhiZ "<<dPhiZ
82 <<" zEnd() "<<slayer->zEnd()
83 <<" phiAx "<<segStuff.phiAx
84 <<" phiSeg "<<phiSeg
85 <<" phiDiff "<<phiSeg - segStuff.phiAx<< std::endl;//yzhang debug
86 }
87 bool lStraight = false;
88 if (fabs(kap)<1.e-9) lStraight = true;
89
90 BesAngle phiDiff = phiSeg - segStuff.phiAx;
91 double zApprox = phiDiff.rad() * -dPhiZ;
92 if (_debug >0){
93 std::cout<<"zApp "<<zApprox<<std::endl;//yzhang debug
94 }
95 double delRad = slayer->stDip() *
96 (1. - zApprox * zApprox * segStuff.wirLen2inv);
97 radius -= delRad;
98 double delPhiArg;
99 if (lStraight) {
100 delPhiArg = delRad * d0 / (radius*radius);
101 }else {
102 delPhiArg = -delRad * kap;
103 }
104
105
106 //---------------------yzhang fix-------------------
107 MdcLine span(12);
108 int hitFit=0;
109 bool szFaild = false;
110 double arcTemp=0;
111
112 for (int ihit = 0; ihit < parentSeg->nHit(); ihit++){
113 //*** Calc. z and correct for stereo dip
114 //int szCode = zPosition(*(parentSeg->hit(ihit)), track, &span,hitFit,parentSeg->bunchTime());
115 int szCode = zPosition(*(parentSeg->hit(ihit)), par, &span,hitFit,parentSeg->bunchTime(),Bz);//yzhang delete 2011-05-11
116 //int szCode = -1;
117
118 //std::cout<< __FILE__ << " " << __LINE__ << " calcStereo szCode "<<szCode<<std::endl;
119 if (szCode > 0){
120 span.sigma[hitFit] = 1;
121 arcTemp += span.x[hitFit];
122 hitFit ++;
123 }else{
124 szFaild = true;
125 if (_debug >0){
126 parentSeg->hit(ihit)->mdcHit()->print(std::cout);
127 std::cout<<"MdcSegInfoSterO hit "<<ihit<<" z calc faild"<<std::endl;//yzhang debug
128 }
129 }
130 }
131 if (hitFit >0) span.fit(hitFit);
132 //zhangy
133
134 // series expand for asin, dropping (delphiarg)**2 and higher terms
135 segStuff.phiAx += delPhiArg +
136 0.5 * delPhiArg * segStuff.phiArg * segStuff.phiArg;
137 phiDiff = phiSeg - segStuff.phiAx;
138 double z = phiDiff.rad() * -dPhiZ;
139 if (_debug >0){
140 std::cout<<"z "<<z<<std::endl;//yzhang debug
141 }
142 double ct, z0, arc;
143 if (lStraight) { //straight track
144 //*** Calculate parameters
145 double arg = radius*radius - d0*d0;
146 if (arg <= 0.0) return 1;
147 double rD0Root = sqrt(arg);
148 double rD0Rinv = 1. / rD0Root;
149 double rinv = 1./radius;
150 // ct
151 double slope = parentSeg->slope();
152 ct = dPhiZ * (rD0Root * slope + d0 * rinv) * rinv;
153 // z0
155 if (arc == 0.0) return 1;
156 z0 = z - ct * arc;
157
158 if (_debug>0){
159 std::cout << "in MdcSegInfoSterO : z0 "<<z0 <<" "<<_errmat[0]
160 <<" ct "<<ct<<" "<<_errmat[1]
161 <<" arc "<<arc<<" "<<_errmat[2]
162 <<endl;//yzhang debug
163 }
164 // calculate errors
165 double dctdm = dPhiZ * rD0Root * rinv;
166 double dctdD = -dPhiZ * rinv * (slope * d0 * rD0Rinv - rinv);
167 double dzdm = -arc * dPhiZ * rD0Root * rinv;
168 double dzdphi = dPhiZ;
169 double dzdphi0 = -dPhiZ;
170 double dzdD = -dPhiZ + ct * d0 * rD0Rinv - arc * dctdD;
171
172 const double *inErr = parentSeg->errmat();
173 //z0
174 const HepMatrix trackErr = par.covariance();
175 _errmat[0] = dzdm * dzdm * inErr[2] +
176 2 * dzdm * dzdphi * inErr[1] +
177 dzdphi * dzdphi * inErr[0] +
178 dzdD * dzdD * trackErr(1,1) +
179 dzdphi0 * dzdphi0 * trackErr(2,2) +
180 2 * dzdD * dzdphi0 * trackErr(1,2);
181 if (_errmat[0] < 0.) _errmat[0] = 0.;
182
183 //ct
184 _errmat[2] = dctdm * dctdm * inErr[2] +
185 dctdD * dctdD * trackErr(1,1);
186 if (_errmat[2] < 0.) _errmat[2] = 0.;
187
188 // off-diag
189 _errmat[1] = dzdm * dctdm * inErr[2] +
190 dzdphi * dctdm * inErr[1] +
191 dzdD * dctdD * trackErr(1,1) +
192 dzdphi0 * dctdD * trackErr(1,2);
193 }
194 else { // curved track (treated as from origin)
195 //*** Calculate parameters
196 // ct
197 double arg = 1. - kap*kap * radius*radius;
198 if (arg < 0.0) return 1;
199 double rKapRoot = sqrt(arg);
200 double rKapRinv = 1. / rKapRoot;
201 double ctFactor = -rKapRoot * -dPhiZ;
202 double slopeAx = kap * rKapRinv;
203 double slope = parentSeg->slope();
204
205 //std::cout<<"slopeAx="<<slopeAx<<" slopeSeg="<<slope
206 // <<"\n diff "<<slopeAx - slope
207 // <<" fac "<<ctFactor<<" rKapRoot "<<rKapRoot
208 // <<" dPhiZ "<<dPhiZ<<std::endl;//yzhang debug
209 //inner use szPozision
210 //if (slayer->index()>1 || szFaild)//inner chamber use sz algorithm
211 if (szFaild){ //use orinal algorithm
212 //original
213 ct = (slopeAx - slope) * ctFactor;
215 if (arc == 0.0) return 1;
216 z0 = z - ct * arc;
217 }else{
218 //yzhang use belle s/z
219 if (!szFaild){
220 arc = arcTemp/hitFit;
221 ct = span.slope;
222 z0 = span.intercept;
223 }else{
224 ct = 999;
225 z0 = 999;
226 arc = 999;
227 }
228 }
229 if (_debug >0){//yzhang debug
230 std::cout<<"--slayer NO. "<<slayer->index()<<std::endl;//yzhang debug
231 std::cout<<"ori ct "<<(slopeAx - slope) * ctFactor
232 <<" z0 "<<z - ct * TrkHelixUtils::fltToRad(par, radius)
233 <<" arc "<<TrkHelixUtils::fltToRad(par, radius)<<std::endl;
234 std::cout<<"fix ct "<<span.slope<<" z0 "<<span.intercept
235 <<" arc "<<arcTemp/hitFit<<std::endl;
236 std::cout<<"-------- "<<std::endl;//yzhang debug
237 }
238 // Calculate errors -- eliminate a bunch of terms when I get around to it
239 double dctdm = dPhiZ * rKapRoot;
240 double dctdkap = -dPhiZ * ( 1 + radius * radius * kap * rKapRinv * slope);
241 double dzdm = arc * -dPhiZ * rKapRoot;
242 double dzdphi = dPhiZ;
243 double dzdkap = dPhiZ * radius * rKapRinv - arc * dctdkap -
244 ct * ( radius * rKapRinv / kap - arc / kap);
245 double dzdphi0 = -dPhiZ ;
246
247 const double *inErr = parentSeg->errmat();
248 //z0
249 const HepMatrix trackErr = par.covariance();
250 _errmat[0] = dzdm * dzdm * inErr[2] +
251 2 * dzdm * dzdphi * inErr[1] +
252 dzdphi * dzdphi * inErr[0] +
253 dzdkap * dzdkap * trackErr(3,3) +
254 dzdphi0 * dzdphi0 * trackErr(2,2) +
255 2 * dzdkap * dzdphi0 * trackErr(2,3);
256 /*
257 std::cout<<"dzdm "<<dzdm
258 <<" inErr[2] "<<inErr[2]
259 <<" inErr[1] "<<inErr[1]
260 <<" inErr[0] "<<inErr[0]
261 <<" dzdphi "<<dzdphi
262 <<" dzdkap "<<dzdkap
263 <<" dzdphi0 "<<dzdphi0
264 <<" trackErr3,3 "<<trackErr(3,3)
265 <<" trackErr2,2 "<<trackErr(2,2)
266 <<" trackErr2,3 "<<trackErr(2,3)
267 <<std::endl;
268 */
269 if (_errmat[0] < 0.) _errmat[0] = 0.;
270
271 //ct
272 _errmat[2] = dctdm * dctdm * inErr[2] +
273 dctdkap * dctdkap * trackErr(3,3);
274 if (_errmat[2] < 0.) _errmat[2] = 0.;
275
276 //off-diag
277 _errmat[1] = dzdm * dctdm * inErr[2] +
278 dzdphi * dctdm * inErr[1] +
279 dzdkap * dctdkap * trackErr(3,3) +
280 dzdphi0 * dctdkap * trackErr(2,3);
281
282 } // end branch on straight/curved
283
284
285 // Load parameters
286 _par0 = z0;
287 _par1 = ct;
288 _arc = arc;
289
291 if (error) {
292 std::cout << " ErrMsg(warning)" << "Failed to invert matrix -- MdcSegInfo::calcStereo" <<
293 endl << _errmat[0] << " " << _errmat[1] << " " << _errmat[2]<< std::endl;
294 }
295 return 0;
296
297}
double arg(const EvtComplex &c)
double rad() const
Definition BesAngle.h:118
const MdcHit * mdcHit() const
Definition MdcHitUse.cxx:69
void print(std::ostream &o) const
Definition MdcHit.cxx:121
double ct() const
int zPosition(MdcHitUse &hitUse, const TrkRecoTrk &track, MdcLine *span, int hitFit, double t0) const
double z0() const
double _arc
Definition MdcSegInfo.h:53
double arc() const
Definition MdcSegInfo.h:44
double _par0
Definition MdcSegInfo.h:49
double _inverr[3]
Definition MdcSegInfo.h:52
double par(int i) const
Definition MdcSegInfo.h:43
double _errmat[3]
Definition MdcSegInfo.h:51
double _par1
Definition MdcSegInfo.h:50
double wirLen2inv
Definition MdcSegWorks.h:15
BesAngle phiAx
Definition MdcSegWorks.h:17
double phiArg
Definition MdcSegWorks.h:16
double bunchTime()
Definition MdcSeg.h:62
const MdcSuperLayer * superlayer() const
Definition MdcSeg.h:51
const double * errmat() const
Definition MdcSeg.h:50
void plotSeg() const
Definition MdcSeg.cxx:194
int nHit() const
Definition MdcSeg.cxx:368
double phi() const
Definition MdcSeg.h:46
double slope() const
Definition MdcSeg.h:47
MdcHitUse * hit(int i) const
Definition MdcSeg.h:77
double delPhiinv(void) const
int index(void) const
double delPhi(void) const
double stDip(void) const
double zEnd(void) const
double rEnd(void) const
static double fltToRad(const TrkExchangePar &hel, double rad)
int mdcTwoInv(double matrix[3], double invmat[3])
Definition mdcTwoInv.h:1
@ error
Definition Core.h:24
void slope()
Definition slope.cxx:12

◆ calcStereo() [2/2]

int MdcSegInfoSterO::calcStereo ( MdcSeg * parentSeg,
const TrkRecoTrk & track,
MdcSegWorks & segStuff )

Definition at line 53 of file MdcSegInfoSterO.cxx.

54 {
55 //----------------------------------------------------------------------------
56 const TrkFit* tkFit = track.fitResult();
57 if (tkFit == 0) return 1;
58 TrkExchangePar par = tkFit->helix(0.0);
59 double Bz = track.bField().bFieldZ();//??
60 return calcStereo(parentSeg, par, segStuff,Bz);
61}
int calcStereo(MdcSeg *parentSeg, const TrkRecoTrk &track, MdcSegWorks &segStuff)
virtual TrkExchangePar helix(double fltL) const =0
const BField & bField() const
Definition TrkRecoTrk.h:82
const TrkFit * fitResult() const

Referenced by calcStereo(), and MdcSegGrouperSt::fillWithSegs().

◆ ct()

double MdcSegInfoSterO::ct ( ) const
inline

◆ parIsAngle()

bool MdcSegInfoSterO::parIsAngle ( int i) const
virtual

Implements MdcSegInfo.

Definition at line 47 of file MdcSegInfoSterO.cxx.

47 {
48 //---------------------------------------------------------------------------
49 assert (i >= 0 && i < 2);
50 return false;
51}

◆ z0()

double MdcSegInfoSterO::z0 ( ) const
inline

Definition at line 40 of file MdcSegInfoSterO.h.

40{return _par0;}

Referenced by calcStereo(), MdcSegGrouperSt::fillWithSegs(), and MdcSegGrouperSt::incompWithGroup().

◆ zPosition() [1/2]

int MdcSegInfoSterO::zPosition ( MdcHitUse & hitUse,
const TrkExchangePar & par,
MdcLine * span,
int hitFit,
double t0,
double Bz ) const

Definition at line 299 of file MdcSegInfoSterO.cxx.

299 {
300
301 int debug =0;
302
303
304 const MdcHit & h = *(hitUse.mdcHit());
305
306 HepPoint3D fp ( h.wire()->getWestPoint()->x(),h.wire()->getWestPoint()->y(),h.wire()->getWestPoint()->z());
307 HepPoint3D rp ( h.wire()->getEastPoint()->x(),h.wire()->getEastPoint()->y(),h.wire()->getEastPoint()->z());
308
309
310 HepVector3D X = 0.5 * (fp + rp);
311 if(debug>0){
312 std::cout<<"---------- "<<std::endl;//yzhang debug
313 h.print(std::cout);
314 //h.wire()->print(std::cout);
315 std::cout<<"fp rp "<<fp<<" "<<rp<<std::endl;//yzhang debug
316 std::cout<<"Xmid "<<X<<std::endl;//yzhang debug
317 }
318 HepVector3D xx = HepVector3D(X.x(), X.y(), 0.);
319 //center of helix/circle
320 //change to belle param
321
322 double d0 = -par.d0();
323 double phi0 = (par.phi0()-pi/2);
324 double _charge = -1;
325 if((-1)*par.omega()/Bz > 0) _charge = 1;
326
327 double r;
328 if (fabs(par.omega())< Constants::epsilon) r = 9999.;
329 else r = 1/par.omega();
330
331 double xc = sin(par.phi0()) *(-d0+r) * -1.; //z axis verse,x_babar = -x_belle
332 double yc = -1.*cos(par.phi0()) *(-d0+r) * -1;//???
333 HepPoint3D center (xc, yc, 0. );
334
335 HepVector3D yy = center - xx;
336 HepVector3D ww = HepVector3D(yy.x(), yy.y(), 0.);
337 double wwmag2 = ww.mag2();
338 double wwmag = sqrt(wwmag2);
339 int ambig = hitUse.ambig();
340 //dirftDist
341 double driftdist = fabs( h.driftDist(t0,ambig) );
342 HepVector3D lr(driftdist/wwmag * ww.x(),
343 driftdist/wwmag * ww.y(), 0.);
344 if (debug >0){
345 std::cout<<"xc "<<xc << " yc "<<yc<< " drfitdist "<<driftdist<<std::endl;
346 std::cout<<"r1 "<<r <<" d0 "<<d0 <<" phi0 "<<phi0<<std::endl;//
347 std::cout<<"lr "<<lr<<" hit ambig "<<hitUse.ambig()<<" ambig "<<ambig
348 <<" left "<<h.driftDist(0,1)
349 <<" right "<<h.driftDist(0,-1)<<std::endl;
350 }
351
352 //...Check left or right...
353 HepPoint3D ORIGIN = HepPoint3D(0., 0., 0.);
354 //ambig
355 //-1 right -phi direction driftDist-=lr
356 //, +1 left +phi directon driftDist+=lr
357 if (ambig == 0) lr = ORIGIN;
358 if (_charge*Bz < 0){ //yzhang
359 if (ambig == -1){
360 lr = - lr;//right
361 }
362 }else{
363 if (ambig == 1){
364 lr = - lr;//left
365 }
366 }
367 X += lr;
368
369 //...Prepare vectors...
370 // HepPoint3D center = _helix->center();
371 HepPoint3D tmp(-9999., -9999., 0.);
372 HepVector3D x = HepVector3D(X.x(), X.y(), 0.);
373 HepVector3D w = x - center;
374 // //modified the next sentence because the direction are different from belle.
375 HepVector3D V = h.wire()->zAxis();
376 HepVector3D v = HepVector3D(V.x(), V.y(), 0.);
377 double vmag2 = v.mag2();
378 //double vmag = sqrt(vmag2);
379
380 //double r = _helix->curv();
381 double wv = w.dot(v);
382 // wv = abs(wv);
383 double d2 = wv * wv - vmag2 * (w.mag2() - r * r);
384 if (debug >0){
385 std::cout<<"X_fix "<<X<<" center "<<center<<std::endl;
386 std::cout<<"V "<<V<<std::endl;//yzhang debug
387 std::cout<<"w "<<w<<" v "<<v<<std::endl;
388 }
389 //...No crossing in R/Phi plane... This is too tight...
390
391 if (d2 < 0.) {
392 //hitUse.position(tmp);
393 if (debug>0){
394 std::cout << "in MdcSegInfoSterO !!! stereo: 0. > d2 = " << d2 << " "
395 << hitUse.ambig() << std::endl;
396 }
397 return -1;
398 }
399 double d = sqrt(d2);
400
401 //...Cal. length to crossing points...
402 double l[2];
403 if (debug >0){
404 std::cout<<"wv "<<wv<<" d "<<d<<" vmag2 "<<vmag2<<std::endl;//yzhang debug
405 }
406 l[0] = (- wv + d) / vmag2;
407 l[1] = (- wv - d) / vmag2;
408
409 //...Cal. z of crossing points...
410 bool ok[2];
411 ok[0] = true;
412 ok[1] = true;
413 double z[2];
414 z[0] = X.z() + l[0] * V.z();
415 z[1] = X.z() + l[1] * V.z();
416 if (debug >0){//yzhang debug
417 std::cout << "X.z "<<X.z()<<" V.z "<<V.z()<<std::endl;
418 std::cout << "l0, l1 = " << l[0] << ", " << l[1] << std::endl;
419 std::cout << "rpz " << rp.z() << " fpz " << fp.z() << std::endl;
420 std::cout << "z0 " << z[0] << " z1 " << z[1] << std::endl;
421 }
422 //...Check z position...
423 if (hitUse.ambig() == 0) {
424 if(debug>0)std::cout<< " ambig = 0 " <<std::endl;
425 if (z[0] > rp.z()+20. || z[0] < fp.z()-20.) {
426 ok[0] = false;
427 }
428 if (z[1] > rp.z()+20. || z[1] < fp.z()-20.) {
429 ok[1] = false;
430 }
431 } else {
432 if(debug>0)std::cout<< " ambig != 0 " <<std::endl;
433 // if (z[0] > rp.z() || z[0] < fp.z() )
434 if (fabs(z[0]/rp.z())>1.05 ) { ok[0] = false; }
435 //if (z[1] > rp.z() || z[1] < fp.z() )
436 if (fabs(z[1]/rp.z())>1.05 ) { ok[1] = false; }
437 }
438 if ((! ok[0]) && (! ok[1])) {
439 if(debug>0&&(hitUse.ambig()!=0)&&fabs(z[1]/rp.z())>1.05)std::cout<< " z[1] bad " << std::endl;
440 if(debug>0&&(hitUse.ambig()!=0)&&fabs(z[0]/rp.z())>1.05)std::cout<< " z[0] bad " << std::endl;
441 //hitUse.position(tmp);
442 if(debug>0) {
443 std::cout<< " z[1] bad " << "rpz " << rp.z() << " fpz " << fp.z()
444 << "z0 " << z[0] << " z1 " << z[1] << std::endl;
445 std::cout<< " !ok[0] && !ok[1] return -2" <<std::endl;
446 }
447 return -2;
448 }
449
450 //...Cal. xy position of crossing points...
451 HepVector3D p[2];
452 p[0] = x + l[0] * v;
453 p[1] = x + l[1] * v;
454
455 if(debug>0){
456 std::cout<<__FILE__<<" "<<__LINE__<< " p0 "<<p[0].x()<<" "<<p[0].y()<< std::endl;
457 std::cout<<__FILE__<<" "<<__LINE__<< " p1 "<<p[1].x()<<" "<<p[1].y()<< std::endl;
458 std::cout<<__FILE__<<" "<<__LINE__<< " c "<<center.x()<<" "<<center.y()<<" "<<_charge<< std::endl;
459 std::cout<<__FILE__<<" "<<__LINE__<< " p0 centerx*y "<<center.x() * p[0].y()<<" centery*x"<<center.y() * p[0].x()<< std::endl;
460 std::cout<<__FILE__<<" "<<__LINE__<< " p1 centerx*y "<<center.x() * p[1].y()<<" centery*x"<<center.y() * p[1].x()<< std::endl;
461 }
462
463 //delete for cosmic
464 //if (_charge * (center.x() * p[0].y() - center.y() * p[0].x()) < 0.){
465 // ok[0] = false;
466 //}
467 //if (_charge * (center.x() * p[1].y() - center.y() * p[1].x()) < 0.){
468 // ok[1] = false;
469 //}
470 //if ((! ok[0]) && (! ok[1])){
471 // if(debug>0) std::cout<< " !ok[0] && !ok[1] reuturn -3" <<std::endl;
472 // return -3;
473 //}
474
475 //...Which one is the best?... Study needed...
476 unsigned best = 0;
477 if (ok[1]) best = 1;
478 //std::cout<<"in MdcSegInfoSterO Zbelle "<<z[best]<<std::endl;//yzhang debug
479
480 //...Cal. arc length...
481 double cosdPhi = - center.dot((p[best] - center).unit()) / center.mag();
482 double dPhi;
483 if(fabs(cosdPhi)<=1.0) {
484 dPhi = acos(cosdPhi);
485 } else if (cosdPhi>1.0) {
486 dPhi = 0.0;
487 } else {
488 dPhi = pi;
489 }
490
491 //...Finish...
492 tmp.setX(abs(r * dPhi));
493 tmp.setY(z[best]);
494 //hitUse.position(tmp);
495
496 //z
497 span->y[hitFit] = z[best];
498 //if (ok[0]) span->y[hitFit] = p[0].mag();//r
499 //else if(ok[1]) span->y[hitFit] = p[1].mag();
500 //else span->y[hitFit] = tmp.mag();
501 span->x[hitFit] = abs(r * dPhi);
502 if (hitUse.ambig()<0) driftdist *= -1.;
503 span->sigma[hitFit] = h.sigma(driftdist,hitUse.ambig());
504
505 if (debug >0){
506 std::cout<<"("<<h.layernumber()<<","<<h.wirenumber()<<") s "<<span->x[hitFit]<<" z "<<span->y[hitFit]<<std::endl;//yzhang debug
507 }
508 return 1;
509}
HepGeom::Vector3D< double > HepVector3D
double sin(const BesAngle a)
Definition BesAngle.h:210
double cos(const BesAngle a)
Definition BesAngle.h:213
Double_t x[10]
double w
*******INTEGER m_nBinMax INTEGER m_NdiMax !No of bins in histogram for cell exploration division $ !Last vertex $ !Last active cell $ !Last cell in buffer $ !No of sampling when dividing cell $ !No of function total $ !Flag for random ceel for $ !Flag for type of for WtMax $ !Flag which decides whether vertices are included in the sampling $ entire domain is hyp !Maximum effective eevents per saves r n generator level $ !Flag for chat level in !Latex Output unit
Definition FoamA.h:90
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition KarLud.h:35
HepGeom::Point3D< double > HepPoint3D
const HepPoint3D ORIGIN
Constants.
Definition TMDCUtil.cxx:47
static const double epsilon
Definition Constants.h:46
int ambig() const
Definition MdcHitUse.h:32
unsigned layernumber() const
Definition MdcHit.h:61
unsigned wirenumber() const
Definition MdcHit.h:62
double sigma(double, int, double, double, double) const
Definition MdcHit.cxx:184
double driftDist(double, int, double, double, double) const
Definition MdcHit.cxx:156
const MdcSWire * wire() const
Definition MdcHit.h:57
double * x
Definition MdcLine.h:15
double * y
Definition MdcLine.h:16
double * sigma
Definition MdcLine.h:17
const Hep3Vector & zAxis(void) const
Definition MdcSWire.h:68
const HepPoint3D * getWestPoint(void) const
Definition MdcSWire.h:33
const HepPoint3D * getEastPoint(void) const
Definition MdcSWire.h:32
const float pi
Definition vector3.h:133

◆ zPosition() [2/2]

int MdcSegInfoSterO::zPosition ( MdcHitUse & hitUse,
const TrkRecoTrk & track,
MdcLine * span,
int hitFit,
double t0 ) const

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