BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcSegInfoSterO.cxx
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2// File and Version Information:
3// $Id: MdcSegInfoSterO.cxx,v 1.18 2012/04/25 05:32:59 zhangy Exp $
4//
5// Description:
6//
7//
8// Environment:
9// Software developed for the BaBar Detector at the SLAC B-Factory.
10//
11// Authors:
12//
13// Copyright (C) 1996 The Board of Trustees of
14//
15// History:
16// Zhang Yao(zhangyao@ihep.ac.cn) Migrate to BESIII
17//
18// The Leland Stanford Junior University. All Rights Reserved.
19//------------------------------------------------------------------------
20
21#include "MdcTrkRecon/MdcSegInfoSterO.h"
22#include "CLHEP/Alist/AList.h"
23#include "CLHEP/Geometry/Point3D.h"
24#include "CLHEP/Geometry/Vector3D.h"
25#include "MdcData/MdcHit.h"
26#include "MdcData/MdcHitUse.h"
27#include "MdcGeom/BesAngle.h"
28#include "MdcGeom/Constants.h"
29#include "MdcGeom/MdcDetector.h"
30#include "MdcGeom/MdcSuperLayer.h"
31#include "MdcTrkRecon/MdcLine.h"
32#include "MdcTrkRecon/MdcSeg.h"
33#include "MdcTrkRecon/MdcSegWorks.h"
34#include "MdcTrkRecon/mdcTwoInv.h"
35#include "PatBField/BField.h"
36#include "TrkBase/TrkExchangePar.h"
37#include "TrkBase/TrkFit.h"
38#include "TrkBase/TrkHelixUtils.h"
39#include "TrkBase/TrkRecoTrk.h"
40#include <math.h>
41using std::endl;
42#ifndef ENABLE_BACKWARDS_COMPATIBILITY
43typedef HepGeom::Vector3D<double> HepVector3D;
44#endif
45
47//--------------------------------------------------------------------------
48bool MdcSegInfoSterO::parIsAngle( int i ) const {
49 //---------------------------------------------------------------------------
50 assert( i >= 0 && i < 2 );
51 return false;
52}
53//----------------------------------------------------------------------------
54int MdcSegInfoSterO::calcStereo( MdcSeg* parentSeg, const TrkRecoTrk& track,
55 MdcSegWorks& segStuff ) {
56 //----------------------------------------------------------------------------
57 const TrkFit* tkFit = track.fitResult();
58 if ( tkFit == 0 ) return 1;
59 TrkExchangePar par = tkFit->helix( 0.0 );
60 double Bz = track.bField().bFieldZ(); //??
61 return calcStereo( parentSeg, par, segStuff, Bz );
62}
63//----------------------------------------------------------------------------
65 MdcSegWorks& segStuff, double Bz ) {
66 //----------------------------------------------------------------------------
67 _debug = 0; // yzhang debug
68 // phiAx = approximate phi of axial track @ stereo slayer
69 // return 1 if calculation failed
70 const MdcSuperLayer* slayer = parentSeg->superlayer();
71
72 double kap = 0.5 * par.omega();
73 double d0 = par.d0();
74 BesAngle phi0( par.phi0() );
75 BesAngle phiSeg( parentSeg->phi() );
76 double radius = slayer->rEnd();
77 double dPhiZ = ( -1 ) * slayer->delPhiinv() * slayer->zEnd();
78 if ( _debug > 0 )
79 {
80 parentSeg->plotSeg();
81 std::cout << "delPhi " << slayer->delPhi() << " delPhiInv " << slayer->delPhiinv()
82 << " dPhiZ " << dPhiZ << " zEnd() " << slayer->zEnd() << " phiAx "
83 << segStuff.phiAx << " phiSeg " << phiSeg << " phiDiff "
84 << phiSeg - segStuff.phiAx << std::endl; // yzhang debug
85 }
86 bool lStraight = false;
87 if ( fabs( kap ) < 1.e-9 ) lStraight = true;
88
89 BesAngle phiDiff = phiSeg - segStuff.phiAx;
90 double zApprox = phiDiff.rad() * -dPhiZ;
91 if ( _debug > 0 )
92 {
93 std::cout << "zApp " << zApprox << std::endl; // yzhang debug
94 }
95 double delRad = slayer->stDip() * ( 1. - zApprox * zApprox * segStuff.wirLen2inv );
96 radius -= delRad;
97 double delPhiArg;
98 if ( lStraight ) { delPhiArg = delRad * d0 / ( radius * radius ); }
99 else { delPhiArg = -delRad * kap; }
100
101 //---------------------yzhang fix-------------------
102 MdcLine span( 12 );
103 int hitFit = 0;
104 bool szFaild = false;
105 double arcTemp = 0;
106
107 for ( int ihit = 0; ihit < parentSeg->nHit(); ihit++ )
108 {
109 //*** Calc. z and correct for stereo dip
110 // int szCode = zPosition(*(parentSeg->hit(ihit)), track,
111 // &span,hitFit,parentSeg->bunchTime());
112 int szCode = zPosition( *( parentSeg->hit( ihit ) ), par, &span, hitFit,
113 parentSeg->bunchTime(), Bz ); // yzhang delete 2011-05-11
114 // int szCode = -1;
115
116 // std::cout<< __FILE__ << " " << __LINE__ << " calcStereo szCode "<<szCode<<std::endl;
117 if ( szCode > 0 )
118 {
119 span.sigma[hitFit] = 1;
120 arcTemp += span.x[hitFit];
121 hitFit++;
122 }
123 else
124 {
125 szFaild = true;
126 if ( _debug > 0 )
127 {
128 parentSeg->hit( ihit )->mdcHit()->print( std::cout );
129 std::cout << "MdcSegInfoSterO hit " << ihit << " z calc faild"
130 << std::endl; // yzhang debug
131 }
132 }
133 }
134 if ( hitFit > 0 ) span.fit( hitFit );
135 // zhangy
136
137 // series expand for asin, dropping (delphiarg)**2 and higher terms
138 segStuff.phiAx += delPhiArg + 0.5 * delPhiArg * segStuff.phiArg * segStuff.phiArg;
139 phiDiff = phiSeg - segStuff.phiAx;
140 double z = phiDiff.rad() * -dPhiZ;
141 if ( _debug > 0 )
142 {
143 std::cout << "z " << z << std::endl; // yzhang debug
144 }
145 double ct, z0, arc;
146 if ( lStraight )
147 { // straight track
148 //*** Calculate parameters
149 double arg = radius * radius - d0 * d0;
150 if ( arg <= 0.0 ) return 1;
151 double rD0Root = sqrt( arg );
152 double rD0Rinv = 1. / rD0Root;
153 double rinv = 1. / radius;
154 // ct
155 double slope = parentSeg->slope();
156 ct = dPhiZ * ( rD0Root * slope + d0 * rinv ) * rinv;
157 // z0
158 arc = TrkHelixUtils::fltToRad( par, radius );
159 if ( arc == 0.0 ) return 1;
160 z0 = z - ct * arc;
161
162 if ( _debug > 0 )
163 {
164 std::cout << "in MdcSegInfoSterO : z0 " << z0 << " " << _errmat[0] << " ct " << ct << " "
165 << _errmat[1] << " arc " << arc << " " << _errmat[2] << endl; // yzhang debug
166 }
167 // calculate errors
168 double dctdm = dPhiZ * rD0Root * rinv;
169 double dctdD = -dPhiZ * rinv * ( slope * d0 * rD0Rinv - rinv );
170 double dzdm = -arc * dPhiZ * rD0Root * rinv;
171 double dzdphi = dPhiZ;
172 double dzdphi0 = -dPhiZ;
173 double dzdD = -dPhiZ + ct * d0 * rD0Rinv - arc * dctdD;
174
175 const double* inErr = parentSeg->errmat();
176 // z0
177 const HepMatrix trackErr = par.covariance();
178 _errmat[0] = dzdm * dzdm * inErr[2] + 2 * dzdm * dzdphi * inErr[1] +
179 dzdphi * dzdphi * inErr[0] + dzdD * dzdD * trackErr( 1, 1 ) +
180 dzdphi0 * dzdphi0 * trackErr( 2, 2 ) + 2 * dzdD * dzdphi0 * trackErr( 1, 2 );
181 if ( _errmat[0] < 0. ) _errmat[0] = 0.;
182
183 // ct
184 _errmat[2] = dctdm * dctdm * inErr[2] + dctdD * dctdD * trackErr( 1, 1 );
185 if ( _errmat[2] < 0. ) _errmat[2] = 0.;
186
187 // off-diag
188 _errmat[1] = dzdm * dctdm * inErr[2] + dzdphi * dctdm * inErr[1] +
189 dzdD * dctdD * trackErr( 1, 1 ) + dzdphi0 * dctdD * trackErr( 1, 2 );
190 }
191 else
192 { // curved track (treated as from origin)
193 //*** Calculate parameters
194 // ct
195 double arg = 1. - kap * kap * radius * radius;
196 if ( arg < 0.0 ) return 1;
197 double rKapRoot = sqrt( arg );
198 double rKapRinv = 1. / rKapRoot;
199 double ctFactor = -rKapRoot * -dPhiZ;
200 double slopeAx = kap * rKapRinv;
201 double slope = parentSeg->slope();
202
203 // std::cout<<"slopeAx="<<slopeAx<<" slopeSeg="<<slope
204 // <<"\n diff "<<slopeAx - slope
205 // <<" fac "<<ctFactor<<" rKapRoot "<<rKapRoot
206 // <<" dPhiZ "<<dPhiZ<<std::endl;//yzhang debug
207 // inner use szPozision
208 // if (slayer->index()>1 || szFaild)//inner chamber use sz algorithm
209 if ( szFaild )
210 { // use orinal algorithm
211 // original
212 ct = ( slopeAx - slope ) * ctFactor;
213 arc = TrkHelixUtils::fltToRad( par, radius );
214 if ( arc == 0.0 ) return 1;
215 z0 = z - ct * arc;
216 }
217 else
218 {
219 // yzhang use belle s/z
220 if ( !szFaild )
221 {
222 arc = arcTemp / hitFit;
223 ct = span.slope;
224 z0 = span.intercept;
225 }
226 else
227 {
228 ct = 999;
229 z0 = 999;
230 arc = 999;
231 }
232 }
233 if ( _debug > 0 )
234 { // yzhang debug
235 std::cout << "--slayer NO. " << slayer->index() << std::endl; // yzhang debug
236 std::cout << "ori ct " << ( slopeAx - slope ) * ctFactor << " z0 "
237 << z - ct * TrkHelixUtils::fltToRad( par, radius ) << " arc "
238 << TrkHelixUtils::fltToRad( par, radius ) << std::endl;
239 std::cout << "fix ct " << span.slope << " z0 " << span.intercept << " arc "
240 << arcTemp / hitFit << std::endl;
241 std::cout << "-------- " << std::endl; // yzhang debug
242 }
243 // Calculate errors -- eliminate a bunch of terms when I get around to it
244 double dctdm = dPhiZ * rKapRoot;
245 double dctdkap = -dPhiZ * ( 1 + radius * radius * kap * rKapRinv * slope );
246 double dzdm = arc * -dPhiZ * rKapRoot;
247 double dzdphi = dPhiZ;
248 double dzdkap = dPhiZ * radius * rKapRinv - arc * dctdkap -
249 ct * ( radius * rKapRinv / kap - arc / kap );
250 double dzdphi0 = -dPhiZ;
251
252 const double* inErr = parentSeg->errmat();
253 // z0
254 const HepMatrix trackErr = par.covariance();
255 _errmat[0] = dzdm * dzdm * inErr[2] + 2 * dzdm * dzdphi * inErr[1] +
256 dzdphi * dzdphi * inErr[0] + dzdkap * dzdkap * trackErr( 3, 3 ) +
257 dzdphi0 * dzdphi0 * trackErr( 2, 2 ) +
258 2 * dzdkap * dzdphi0 * trackErr( 2, 3 );
259 /*
260 std::cout<<"dzdm "<<dzdm
261 <<" inErr[2] "<<inErr[2]
262 <<" inErr[1] "<<inErr[1]
263 <<" inErr[0] "<<inErr[0]
264 <<" dzdphi "<<dzdphi
265 <<" dzdkap "<<dzdkap
266 <<" dzdphi0 "<<dzdphi0
267 <<" trackErr3,3 "<<trackErr(3,3)
268 <<" trackErr2,2 "<<trackErr(2,2)
269 <<" trackErr2,3 "<<trackErr(2,3)
270 <<std::endl;
271 */
272 if ( _errmat[0] < 0. ) _errmat[0] = 0.;
273
274 // ct
275 _errmat[2] = dctdm * dctdm * inErr[2] + dctdkap * dctdkap * trackErr( 3, 3 );
276 if ( _errmat[2] < 0. ) _errmat[2] = 0.;
277
278 // off-diag
279 _errmat[1] = dzdm * dctdm * inErr[2] + dzdphi * dctdm * inErr[1] +
280 dzdkap * dctdkap * trackErr( 3, 3 ) + dzdphi0 * dctdkap * trackErr( 2, 3 );
281
282 } // end branch on straight/curved
283
284 // Load parameters
285 _par0 = z0;
286 _par1 = ct;
287 _arc = arc;
288
289 long error = mdcTwoInv( _errmat, _inverr );
290 if ( error )
291 {
292 std::cout << " ErrMsg(warning)"
293 << "Failed to invert matrix -- MdcSegInfo::calcStereo" << endl
294 << _errmat[0] << " " << _errmat[1] << " " << _errmat[2] << std::endl;
295 }
296 return 0;
297}
298
300 int hitFit, double t0, double Bz ) const {
301
302 int debug = 0;
303
304 const MdcHit& h = *( hitUse.mdcHit() );
305
306 HepPoint3D fp( h.wire()->getWestPoint()->x(), h.wire()->getWestPoint()->y(),
307 h.wire()->getWestPoint()->z() );
308 HepPoint3D rp( h.wire()->getEastPoint()->x(), h.wire()->getEastPoint()->y(),
309 h.wire()->getEastPoint()->z() );
310
311 HepVector3D X = 0.5 * ( fp + rp );
312 if ( debug > 0 )
313 {
314 std::cout << "---------- " << std::endl; // yzhang debug
315 h.print( std::cout );
316 // h.wire()->print(std::cout);
317 std::cout << "fp rp " << fp << " " << rp << std::endl; // yzhang debug
318 std::cout << "Xmid " << X << std::endl; // yzhang debug
319 }
320 HepVector3D xx = HepVector3D( X.x(), X.y(), 0. );
321 // center of helix/circle
322 // change to belle param
323
324 double d0 = -par.d0();
325 double phi0 = ( par.phi0() - pi / 2 );
326 double _charge = -1;
327 if ( ( -1 ) * par.omega() / Bz > 0 ) _charge = 1;
328
329 double r;
330 if ( fabs( par.omega() ) < Constants::epsilon ) r = 9999.;
331 else r = 1 / par.omega();
332
333 double xc = sin( par.phi0() ) * ( -d0 + r ) * -1.; // z axis verse,x_babar = -x_belle
334 double yc = -1. * cos( par.phi0() ) * ( -d0 + r ) * -1; //???
335 HepPoint3D center( xc, yc, 0. );
336
337 HepVector3D yy = center - xx;
338 HepVector3D ww = HepVector3D( yy.x(), yy.y(), 0. );
339 double wwmag2 = ww.mag2();
340 double wwmag = sqrt( wwmag2 );
341 int ambig = hitUse.ambig();
342 // dirftDist
343 double driftdist = fabs( h.driftDist( t0, ambig ) );
344 HepVector3D lr( driftdist / wwmag * ww.x(), driftdist / wwmag * ww.y(), 0. );
345 if ( debug > 0 )
346 {
347 std::cout << "xc " << xc << " yc " << yc << " drfitdist " << driftdist << std::endl;
348 std::cout << "r1 " << r << " d0 " << d0 << " phi0 " << phi0 << std::endl; //
349 std::cout << "lr " << lr << " hit ambig " << hitUse.ambig() << " ambig " << ambig
350 << " left " << h.driftDist( 0, 1 ) << " right " << h.driftDist( 0, -1 )
351 << std::endl;
352 }
353
354 //...Check left or right...
355 HepPoint3D ORIGIN = HepPoint3D( 0., 0., 0. );
356 // ambig
357 //-1 right -phi direction driftDist-=lr
358 //, +1 left +phi directon driftDist+=lr
359 if ( ambig == 0 ) lr = ORIGIN;
360 if ( _charge * Bz < 0 )
361 { // yzhang
362 if ( ambig == -1 )
363 {
364 lr = -lr; // right
365 }
366 }
367 else
368 {
369 if ( ambig == 1 )
370 {
371 lr = -lr; // left
372 }
373 }
374 X += lr;
375
376 //...Prepare vectors...
377 // HepPoint3D center = _helix->center();
378 HepPoint3D tmp( -9999., -9999., 0. );
379 HepVector3D x = HepVector3D( X.x(), X.y(), 0. );
380 HepVector3D w = x - center;
381 // //modified the next sentence because the direction are different from belle.
382 HepVector3D V = h.wire()->zAxis();
383 HepVector3D v = HepVector3D( V.x(), V.y(), 0. );
384 double vmag2 = v.mag2();
385 // double vmag = sqrt(vmag2);
386
387 // double r = _helix->curv();
388 double wv = w.dot( v );
389 // wv = abs(wv);
390 double d2 = wv * wv - vmag2 * ( w.mag2() - r * r );
391 if ( debug > 0 )
392 {
393 std::cout << "X_fix " << X << " center " << center << std::endl;
394 std::cout << "V " << V << std::endl; // yzhang debug
395 std::cout << "w " << w << " v " << v << std::endl;
396 }
397 //...No crossing in R/Phi plane... This is too tight...
398
399 if ( d2 < 0. )
400 {
401 // hitUse.position(tmp);
402 if ( debug > 0 )
403 {
404 std::cout << "in MdcSegInfoSterO !!! stereo: 0. > d2 = " << d2 << " " << hitUse.ambig()
405 << std::endl;
406 }
407 return -1;
408 }
409 double d = sqrt( d2 );
410
411 //...Cal. length to crossing points...
412 double l[2];
413 if ( debug > 0 )
414 {
415 std::cout << "wv " << wv << " d " << d << " vmag2 " << vmag2 << std::endl; // yzhang debug
416 }
417 l[0] = ( -wv + d ) / vmag2;
418 l[1] = ( -wv - d ) / vmag2;
419
420 //...Cal. z of crossing points...
421 bool ok[2];
422 ok[0] = true;
423 ok[1] = true;
424 double z[2];
425 z[0] = X.z() + l[0] * V.z();
426 z[1] = X.z() + l[1] * V.z();
427 if ( debug > 0 )
428 { // yzhang debug
429 std::cout << "X.z " << X.z() << " V.z " << V.z() << std::endl;
430 std::cout << "l0, l1 = " << l[0] << ", " << l[1] << std::endl;
431 std::cout << "rpz " << rp.z() << " fpz " << fp.z() << std::endl;
432 std::cout << "z0 " << z[0] << " z1 " << z[1] << std::endl;
433 }
434 //...Check z position...
435 if ( hitUse.ambig() == 0 )
436 {
437 if ( debug > 0 ) std::cout << " ambig = 0 " << std::endl;
438 if ( z[0] > rp.z() + 20. || z[0] < fp.z() - 20. ) { ok[0] = false; }
439 if ( z[1] > rp.z() + 20. || z[1] < fp.z() - 20. ) { ok[1] = false; }
440 }
441 else
442 {
443 if ( debug > 0 ) std::cout << " ambig != 0 " << std::endl;
444 // if (z[0] > rp.z() || z[0] < fp.z() )
445 if ( fabs( z[0] / rp.z() ) > 1.05 ) { ok[0] = false; }
446 // if (z[1] > rp.z() || z[1] < fp.z() )
447 if ( fabs( z[1] / rp.z() ) > 1.05 ) { ok[1] = false; }
448 }
449 if ( ( !ok[0] ) && ( !ok[1] ) )
450 {
451 if ( debug > 0 && ( hitUse.ambig() != 0 ) && fabs( z[1] / rp.z() ) > 1.05 )
452 std::cout << " z[1] bad " << std::endl;
453 if ( debug > 0 && ( hitUse.ambig() != 0 ) && fabs( z[0] / rp.z() ) > 1.05 )
454 std::cout << " z[0] bad " << std::endl;
455 // hitUse.position(tmp);
456 if ( debug > 0 )
457 {
458 std::cout << " z[1] bad "
459 << "rpz " << rp.z() << " fpz " << fp.z() << "z0 " << z[0] << " z1 " << z[1]
460 << std::endl;
461 std::cout << " !ok[0] && !ok[1] return -2" << std::endl;
462 }
463 return -2;
464 }
465
466 //...Cal. xy position of crossing points...
467 HepVector3D p[2];
468 p[0] = x + l[0] * v;
469 p[1] = x + l[1] * v;
470
471 if ( debug > 0 )
472 {
473 std::cout << __FILE__ << " " << __LINE__ << " p0 " << p[0].x() << " " << p[0].y()
474 << std::endl;
475 std::cout << __FILE__ << " " << __LINE__ << " p1 " << p[1].x() << " " << p[1].y()
476 << std::endl;
477 std::cout << __FILE__ << " " << __LINE__ << " c " << center.x() << " " << center.y() << " "
478 << _charge << std::endl;
479 std::cout << __FILE__ << " " << __LINE__ << " p0 centerx*y " << center.x() * p[0].y()
480 << " centery*x" << center.y() * p[0].x() << std::endl;
481 std::cout << __FILE__ << " " << __LINE__ << " p1 centerx*y " << center.x() * p[1].y()
482 << " centery*x" << center.y() * p[1].x() << std::endl;
483 }
484
485 // delete for cosmic
486 // if (_charge * (center.x() * p[0].y() - center.y() * p[0].x()) < 0.){
487 // ok[0] = false;
488 // }
489 // if (_charge * (center.x() * p[1].y() - center.y() * p[1].x()) < 0.){
490 // ok[1] = false;
491 // }
492 // if ((! ok[0]) && (! ok[1])){
493 // if(debug>0) std::cout<< " !ok[0] && !ok[1] reuturn -3" <<std::endl;
494 // return -3;
495 // }
496
497 //...Which one is the best?... Study needed...
498 unsigned best = 0;
499 if ( ok[1] ) best = 1;
500 // std::cout<<"in MdcSegInfoSterO Zbelle "<<z[best]<<std::endl;//yzhang debug
501
502 //...Cal. arc length...
503 double cosdPhi = -center.dot( ( p[best] - center ).unit() ) / center.mag();
504 double dPhi;
505 if ( fabs( cosdPhi ) <= 1.0 ) { dPhi = acos( cosdPhi ); }
506 else if ( cosdPhi > 1.0 ) { dPhi = 0.0; }
507 else { dPhi = pi; }
508
509 //...Finish...
510 tmp.setX( abs( r * dPhi ) );
511 tmp.setY( z[best] );
512 // hitUse.position(tmp);
513
514 // z
515 span->y[hitFit] = z[best];
516 // if (ok[0]) span->y[hitFit] = p[0].mag();//r
517 // else if(ok[1]) span->y[hitFit] = p[1].mag();
518 // else span->y[hitFit] = tmp.mag();
519 span->x[hitFit] = abs( r * dPhi );
520 if ( hitUse.ambig() < 0 ) driftdist *= -1.;
521 span->sigma[hitFit] = h.sigma( driftdist, hitUse.ambig() );
522
523 if ( debug > 0 )
524 {
525 std::cout << "(" << h.layernumber() << "," << h.wirenumber() << ") s " << span->x[hitFit]
526 << " z " << span->y[hitFit] << std::endl; // yzhang debug
527 }
528 return 1;
529}
HepGeom::Vector3D< double > HepVector3D
double arg(const EvtComplex &c)
double pi
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
int mdcTwoInv(double matrix[3], double invmat[3])
const HepPoint3D ORIGIN
Constants.
Definition TMDCUtil.cxx:47
**********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
const MdcHit * mdcHit() const
Definition MdcHitUse.cxx:62
void print(std::ostream &o) const
double sigma(double, int, double, double, double) const
Definition MdcHit.cxx:183
double driftDist(double, int, double, double, double) const
Definition MdcHit.cxx:157
int fit(int nUse)
Definition MdcLine.cxx:10
int zPosition(MdcHitUse &hitUse, const TrkRecoTrk &track, MdcLine *span, int hitFit, double t0) const
bool parIsAngle(int i) const
int calcStereo(MdcSeg *parentSeg, const TrkRecoTrk &track, MdcSegWorks &segStuff)
void plotSeg() const
Definition MdcSeg.cxx:198
int nHit() const
Definition MdcSeg.cxx:372
virtual TrkExchangePar helix(double fltL) const =0
static double fltToRad(const TrkExchangePar &hel, double rad)
const TrkFit * fitResult() const