CGEM BOSS 6.6.5.i
BESIII Offline Software System
Loading...
Searching...
No Matches
Lpav Class Reference

#include <Lpav.h>

+ Inheritance diagram for Lpav:

Classes

class  Singular
 
class  Singular_c
 

Public Member Functions

 Lpav ()
 
virtual ~Lpav ()
 
void calculate_average (void)
 
void calculate_average3 (void)
 
void calculate_average (double x, double y, double w=1)
 
void calculate_average3 (double x, double y, double w=1)
 
double calculate_lpar (void)
 
double calculate_lpar3 (void)
 
double fit ()
 
double fit (double x, double y, double w=1)
 
void clear ()
 
void add_point (double x, double y, double w=1)
 
void add_point_frac (double x, double y, double w, double f)
 
double nc () const
 
HepSymMatrix cov (int=0) const
 
HepSymMatrix cov_c (int=0) const
 
int extrapolate (double, double &, double &) const
 
double similarity (double, double) const
 
double delta_chisq (double x, double y, double w=1) const
 
double chisq () const
 
double prob () const
 
double chi_deg () const
 
const Lpavoperator= (const Lpav &)
 
const Lpavoperator= (const Lpar &)
 
const Lpavoperator+= (const Lpav &)
 
- Public Member Functions inherited from Lpar
 Lpar ()
 
virtual ~Lpar ()
 
const Lparoperator= (const Lpar &)
 
void neg ()
 
void circle (double x1, double y1, double x2, double y2, double x3, double y3)
 
double kappa () const
 
double radius () const
 
HepVector center () const
 
double s (double x, double y) const
 
double d (double x, double y) const
 
double dr (double x, double y) const
 
double s (double r, int dir=0) const
 
double phi (double r, int dir=0) const
 
int sd (double r, double x, double y, double limit, double &s, double &d) const
 
HepVector Hpar (const HepPoint3D &pivot) const
 

Friends

std::ostream & operator<< (std::ostream &o, const Lpav &s)
 
Lpav operator+ (const Lpav &la1, const Lpav &la2)
 

Detailed Description

Constructor & Destructor Documentation

◆ Lpav()

Lpav::Lpav ( )

◆ ~Lpav()

Lpav::~Lpav ( )
virtual

Definition at line 59 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

60{
61}

Member Function Documentation

◆ add_point()

◆ add_point_frac()

void Lpav::add_point_frac ( double x,
double y,
double w,
double f )

Definition at line 581 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

581 {
582 register double wi = w * a;
583 m_wsum += wi;
584 m_xsum += wi * xi;
585 m_ysum += wi * yi;
586 m_xxsum += wi * xi * xi;
587 m_yysum += wi * yi * yi;
588 m_xysum += wi * xi * yi;
589 register double rri = ( xi * xi + yi * yi );
590 register double wrri = wi * rri;
591 m_xrrsum += wrri * xi;
592 m_yrrsum += wrri * yi;
593 m_rrrrsum += wrri * rri;
594 m_nc += a;
595}

◆ calculate_average() [1/2]

void Lpav::calculate_average ( double x,
double y,
double w = 1 )

Definition at line 84 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

84 {
85 if(m_wsum<=0) return;
86 m_wsum_temp = m_wsum + wi;
87 double rri(xi * xi + yi * yi);
88 double wrri(wi * rri);
89 double wsum_inv(1/m_wsum_temp);
90 m_xav = (m_xsum + wi * xi) * wsum_inv;
91 m_yav = (m_ysum + wi * yi) * wsum_inv;
92
93 double xxav((m_xxsum + wi * xi * xi) * wsum_inv);
94 double yyav((m_yysum + wi * yi * yi) * wsum_inv);
95 double xyav((m_xysum + wi * xi * yi) * wsum_inv);
96 double xrrav((m_xrrsum + xi * wrri) * wsum_inv);
97 double yrrav((m_yrrsum + yi * wrri) * wsum_inv);
98 double rrrrav((m_rrrrsum + wrri * rri) * wsum_inv);
99
100 calculate_average_n(xxav, yyav, xyav, xrrav, yrrav, rrrrav);
101
102}

◆ calculate_average() [2/2]

void Lpav::calculate_average ( void )

Definition at line 104 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

104 {
105 if(m_wsum<=0) return;
106 m_wsum_temp = m_wsum;
107 double wsum_inv(1/m_wsum_temp);
108 m_xav = m_xsum * wsum_inv;
109 m_yav = m_ysum * wsum_inv;
110
111 double xxav(m_xxsum * wsum_inv);
112 double yyav(m_yysum * wsum_inv);
113 double xyav(m_xysum * wsum_inv);
114 double xrrav(m_xrrsum * wsum_inv);
115 double yrrav(m_yrrsum * wsum_inv);
116 double rrrrav(m_rrrrsum * wsum_inv);
117
118 calculate_average_n(xxav, yyav, xyav, xrrav, yrrav, rrrrav);
119}

Referenced by fit(), and fit().

◆ calculate_average3() [1/2]

void Lpav::calculate_average3 ( double x,
double y,
double w = 1 )

Definition at line 190 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

190 {
191 if(m_wsum<=0) return;
192 m_wsum_temp = m_wsum + wi;
193 double wsum_inv(1/m_wsum_temp);
194 double rri(xi * xi + yi * yi);
195 m_xav = (m_xsum + wi * xi) * wsum_inv;
196 m_yav = (m_ysum + wi * yi) * wsum_inv;
197
198 m_rscale = 1;
199 m_cosrot = 1;
200 m_sinrot = 0;
201 m_xxavp = (m_xxsum + wi * xi * xi) * wsum_inv;
202 m_xyavp = (m_xysum + wi * xi * yi) * wsum_inv;
203 m_yyavp = (m_yysum + wi * yi * yi) * wsum_inv;
204 double wrri(wi * rri);
205 m_xrravp = (m_xrrsum + xi * wrri) * wsum_inv;
206 m_yrravp = (m_yrrsum + yi * wrri) * wsum_inv;
207 m_rrrravp = (m_rrrrsum + rri * wrri) * wsum_inv;
208}

◆ calculate_average3() [2/2]

void Lpav::calculate_average3 ( void )

Definition at line 210 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

210 {
211 if(m_wsum<=0) return;
212 m_wsum_temp = m_wsum;
213 double wsum_inv(1/m_wsum_temp);
214 m_xav = m_xsum * wsum_inv;
215 m_yav = m_ysum * wsum_inv;
216
217 m_rscale = 1;
218 m_cosrot = 1;
219 m_sinrot = 0;
220 m_xxavp = m_xxsum * wsum_inv;
221 m_xyavp = m_xysum * wsum_inv;
222 m_yyavp = m_yysum * wsum_inv;
223 m_xrravp = m_xrrsum * wsum_inv;
224 m_yrravp = m_yrrsum * wsum_inv;
225 m_rrrravp = m_rrrrsum * wsum_inv;
226}

Referenced by fit(), and fit().

◆ calculate_lpar()

double Lpav::calculate_lpar ( void )

Definition at line 313 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

313 {
314 double lambda = solve_lambda();
315// changed on Oct-13-93
316// if (lambda<=0) return -1;
317 if (lambda<0) return -1;
318 double h11 = m_xxavp - lambda;
319 double h22 = m_yyavp - lambda;
320 if (h11==0.0) return -1;
321 double h14 = m_xrravp;
322 double h24 = m_yrravp;
323 double h34 = 1 + 2 * lambda;
324 double rootsq = (h14*h14/h11/h11) + 4 * h34;
325 if ( std::fabs(h22) > std::fabs(h24) ) {
326 if(h22==0.0) return -1;
327 double ratio = h24/h22;
328 rootsq += ratio * ratio ;
329 m_kappa = 1/std::sqrt(rootsq);
330 m_beta = - ratio * m_kappa;
331 } else {
332 if(h24==0.0) return -1;
333 double ratio = h22 / h24;
334 rootsq = 1 + ratio * ratio * rootsq;
335 m_beta = 1 / std::sqrt(rootsq);
336 m_beta = h24>0 ? -m_beta : m_beta;
337 m_kappa = -ratio * m_beta;
338 }
339 m_alpha = - (h14/h11)*m_kappa;
340 m_gamma = - h34 * m_kappa;
341// if (lambda<0.0001) {
342// cout << " lambda=" << lambda << " h34=" << h34
343// << " rootsq=" << rootsq << " h22=" << h22
344// << " h11=" << h11 << " h14=" << h14 << " h24=" << h24 <<
345// " " << *this << endl;
346// }
347//
348//C TRANSFORM THESE INTO THE LAB COORDINATE SYSTEM
349//
350//C FIRST GET KAPPA AND GAMMA BACK TO REAL DIMENSIONS
351//
352 scale(m_rscale);
353//
354//C NEXT ROTATE ALPHA AND BETA
355//
356 rotate(m_cosrot, -m_sinrot);
357//
358//C THEN TRANSLATE BY (XAV,YAV)
359//
360 move(-m_xav, -m_yav);
361 if (m_yrravp < 0) neg();
362 if (lambda>=0) m_chisq = lambda * m_wsum_temp * m_rscale * m_rscale;
363 return lambda;
364}

Referenced by fit(), and fit().

◆ calculate_lpar3()

double Lpav::calculate_lpar3 ( void )

Definition at line 366 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

366 {
367 double lambda = solve_lambda3();
368// changed on Oct-13-93
369// if (lambda<=0) return -1;
370 if (lambda<0) return -1;
371 double h11 = m_xxavp - lambda;
372 double h22 = m_yyavp - lambda;
373 double h14 = m_xrravp;
374 double h24 = m_yrravp;
375 m_gamma = 0;
376 double h12 = m_xyavp;
377 double det = h11*h22-h12*h12;
378 if (det!=0) {
379 double r1 = (h14*h22-h24*h12)/(det);
380 double r2 = (h24*h11-h14*h12)/(det);
381 double kinvsq = r1*r1 + r2*r2;
382 m_kappa = std::sqrt(1/kinvsq);
383 if(h11!=0) m_alpha = -m_kappa * r1;
384 else m_alpha = 1;
385 if(h22!=0) m_beta = -m_kappa * r2;
386 else m_beta = 1;
387 } else {
388 m_kappa = 0;
389 if (h11!=0 && h22!=0) {
390 m_beta = 1/std::sqrt(1+h12*h12/h11/h11);
391 m_alpha = std::sqrt(1-m_beta*m_beta);
392 } else if (h11!=0) {
393 m_beta = 1;
394 m_alpha = 0;
395 } else {
396 m_beta = 0;
397 m_alpha = 1;
398 }
399 }
400 if((m_alpha*m_xav + m_beta*m_yav) *
401 (m_beta*m_xav - m_alpha*m_yav)<0) neg();
402// if (std::fabs(m_alpha)<0.01 && std::fabs(m_beta)<0.01) {
403// cout << " lambda=" << lambda << " " << *this << endl;
404// }
405 if (lambda>=0) m_chisq = lambda * m_wsum_temp * m_rscale * m_rscale;
406 return lambda;
407}

Referenced by fit(), and fit().

◆ chi_deg()

double Lpav::chi_deg ( ) const

Definition at line 657 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

657 {
658 if (m_nc<=3) return -1;
659 else return m_chisq/(m_nc-3);
660}

◆ chisq()

double Lpav::chisq ( ) const
inline

◆ clear()

void Lpav::clear ( )
inline

Definition at line 194 of file TrackUtil/TrackUtil-00-00-12/TrackUtil/Lpav.h.

194 {
195 m_wsum = m_xsum = m_ysum = m_xxsum = m_yysum = m_xysum
196 = m_xrrsum = m_yrrsum = m_rrrrsum = m_rscale = m_nc = 0;
197 m_chisq = -1;
198}

Referenced by Lpav(), FTTrack::r_phi2Fit(), FTTrack::r_phi3Fit(), FTTrack::r_phi4Fit(), FTTrack::r_phiFit(), and FTTrack::r_phiReFit().

◆ cov()

HepSymMatrix Lpav::cov ( int inv = 0) const

Definition at line 441 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

444{
445#else
446{
447 HepSymMatrix vret(4);
448#endif
449 vret(1,1) = m_xxsum;
450 vret(2,1) = m_xysum;
451 vret(2,2) = m_yysum;
452 vret(3,1) = m_xsum;
453 vret(3,2) = m_ysum;
454 vret(3,3) = m_wsum;
455 vret(4,1) = m_xrrsum;
456 vret(4,2) = m_yrrsum;
457 vret(4,3) = m_xxsum + m_yysum;
458 vret(4,4) = m_rrrrsum;
459 if(inv==0) {
460// int i=vret.Inv();
461 int i;
462 vret.invert(i);
463 if (i!=0) {
464 std::cerr << "Lpav::cov:could not invert nc=" << m_nc << vret;
465#ifdef HAVE_EXCEPTION
466 THROW(Lpav::cov,Singular);
467#endif
468 }
469 }
470 return vret;
471}
HepSymMatrix cov(int=0) const

Referenced by extrapolate(), and similarity().

◆ cov_c()

HepSymMatrix Lpav::cov_c ( int inv = 0) const

Definition at line 473 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

476{
477#else
478{
479 HepSymMatrix vret(3);
480#endif
481#ifdef HAVE_EXCEPTION
482 try {
483#endif
484 vret = cov(1).similarity(dldc());
485#ifdef HAVE_EXCEPTION
486 }
487 catch (Lpav::Singular) {
488 THROW(Lpav::cov_c1,Singular_c);
489 }
490#endif
491 if(inv==0) {
492// int i = vret.Inv();
493 int i;
494 vret.invert(i);
495 if (i!=0) {
496 std::cerr << "Lpav::cov_c:could not invert " << vret;
497#ifdef HAVE_EXCEPTION
498 THROW(Lpav::cov_c2,Singular_c);
499#endif
500 }
501 }
502 return vret;
503}

◆ delta_chisq()

double Lpav::delta_chisq ( double x,
double y,
double w = 1 ) const

Definition at line 662 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

662 {
663 double sim = similarity(x,y);
664 if(sim<0) return -1;
665 double d = d0(x,y);
666 double delta = std::sqrt(d) * w / (1 + sim * w);
667 return delta;
668}
double d(double x, double y) const
double similarity(double, double) const

◆ extrapolate()

int Lpav::extrapolate ( double r,
double & phi,
double & dphi ) const

Definition at line 505 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

505 {
506 double x, y;
507 if (m_chisq<0) return -1;
508 if (xy(r, x, y)!=0) return -1;
509 phi = std::atan2(y,x);
510 if (phi<0) phi += (2*M_PI);
511 HepVector v(4);
512 v(1) = x;
513 v(2) = y;
514 v(3) = 1;
515 v(4) = r * r;
516// HepSymMatrix l = cov().similarityT(v);
517#ifdef HAVE_EXCEPTION
518 try {
519#endif
520// HepSymMatrix l = cov().similarity(v.T());
521// // cout << "delta d^2=" << l(1,1);
522// if (l(1,1)>0) {
523 double l = cov().similarity(v);
524 if(l>0) {
525 double ls = std::sqrt(l);
526 dphi = ls / r;
527 // cout << " delta d=" << ls << " dphi=" << dphi;
528 }
529#ifdef HAVE_EXCEPTION
530 }
531 catch (Lpav::Singular) {
532 return -1;
533 }
534#endif
535// cout << endl;
536 return 0;
537}
Double_t x[10]
**********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
#define M_PI
Definition TConstant.h:4
double phi(double r, int dir=0) const

◆ fit() [1/2]

double Lpav::fit ( void )

Definition at line 425 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

425 {
426 if (m_nc<=3) return -1;
427 m_chisq = -1;
428 double q;
429 if (m_nc<4) {
431 q = calculate_lpar3();
432 if (q>0) m_chisq = q * m_wsum_temp * m_rscale * m_rscale;
433 } else {
435 q = calculate_lpar();
436 if (q>0) m_chisq = q * m_wsum_temp * m_rscale * m_rscale;
437 }
438 return m_chisq;
439}
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
Definition KKsem.h:33

Referenced by TCircleFitter::fit(), TCircle::fitForCurl(), FTTrack::r_phi2Fit(), FTTrack::r_phi3Fit(), FTTrack::r_phi4Fit(), FTTrack::r_phiFit(), and FTTrack::r_phiReFit().

◆ fit() [2/2]

double Lpav::fit ( double x,
double y,
double w = 1 )

Definition at line 409 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

409 {
410 if (m_nc<=3) return -1;
411 m_chisq = -1;
412 double q;
413 if (m_nc<4) {
414 calculate_average3(x,y,w);
415 double q = calculate_lpar3();
416 if (q>0) m_chisq = q * m_wsum_temp * m_rscale * m_rscale;
417 } else {
418 calculate_average(x,y,w);
419 q = calculate_lpar();
420 if (q>0) m_chisq = q * m_wsum_temp * m_rscale * m_rscale;
421 }
422 return m_chisq;
423}

◆ nc()

double Lpav::nc ( ) const
inline

◆ operator+=()

const Lpav & Lpav::operator+= ( const Lpav & la1)

Definition at line 613 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

613 {
614 m_wsum += la1.m_wsum;
615 m_xsum += la1.m_xsum;
616 m_ysum += la1.m_ysum;
617 m_xxsum += la1.m_xxsum;
618 m_yysum += la1.m_yysum;
619 m_xysum += la1.m_xysum;
620 m_xrrsum += la1.m_xrrsum;
621 m_yrrsum += la1.m_yrrsum;
622 m_rrrrsum += la1.m_rrrrsum;
623 m_nc += la1.m_nc;
624 return *this;
625}

◆ operator=() [1/2]

const Lpav & Lpav::operator= ( const Lpar & )

◆ operator=() [2/2]

const Lpav & Lpav::operator= ( const Lpav & lp)
inline

Definition at line 133 of file TrackUtil/TrackUtil-00-00-12/TrackUtil/Lpav.h.

133 {
134 Lpar::operator=(lp);
135 m_wsum = lp.m_wsum;
136 m_xsum = lp.m_xsum;
137 m_ysum = lp.m_ysum;
138 m_xxsum = lp.m_xxsum;
139 m_yysum = lp.m_yysum;
140 m_xysum = lp.m_xysum;
141 m_xrrsum = lp.m_xrrsum;
142 m_yrrsum = lp.m_yrrsum;
143 m_rrrrsum = lp.m_rrrrsum;
144
145 m_wsum_temp = lp. m_wsum_temp;
146 m_xav = lp.m_xav;
147 m_yav = lp.m_yav;
148 m_xyavp = lp.m_xyavp;
149
150 m_rscale = lp. m_rscale;
151 m_xxavp = lp.m_xxavp;
152 m_yyavp = lp.m_yyavp;
153 m_xrravp = lp.m_xrravp;
154 m_yrravp = lp.m_yrravp;
155 m_rrrravp = lp.m_rrrravp;
156 m_sinrot = lp.m_sinrot;
157 m_cosrot = lp.m_cosrot;
158
159 m_nc = lp. m_nc;
160 m_chisq = lp.m_chisq;
161 return *this;
162}
const Lpar & operator=(const Lpar &)

◆ prob()

double Lpav::prob ( ) const

Definition at line 648 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

648 {
649 if (m_nc<=3) return 0;
650 if (m_chisq<0) return 0;
651 float c = m_chisq;
652 int nci = (int)m_nc - 3;
653 double p = (double) prob_(&c, &nci);
654 return p;
655}
float prob_(float *, int *)

◆ similarity()

double Lpav::similarity ( double x,
double y ) const

Definition at line 539 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

539 {
540 if (m_nc<=3) return -1;
541 HepVector v(4);
542 v(1) = x;
543 v(2) = y;
544 v(3) = 1;
545 v(4) = x * x + y * y;
546 double l;
547#ifdef HAVE_EXCEPTION
548 try {
549#endif
550 l = cov().similarity(v);
551#ifdef HAVE_EXCEPTION
552 }
553 catch (Lpav::Singular) {
554 return -1;
555 }
556#endif
557 return l;
558}

Referenced by delta_chisq().

Friends And Related Symbol Documentation

◆ operator+

Lpav operator+ ( const Lpav & la1,
const Lpav & la2 )
friend

Definition at line 627 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

630{
631#else
632{
633 Lpav la;
634#endif
635 la.m_wsum = la1.m_wsum + la2.m_wsum;
636 la.m_xsum = la1.m_xsum + la2.m_xsum;
637 la.m_ysum = la1.m_ysum + la2.m_ysum;
638 la.m_xxsum = la1.m_xxsum + la2.m_xxsum;
639 la.m_yysum = la1.m_yysum + la2.m_yysum;
640 la.m_xysum = la1.m_xysum + la2.m_xysum;
641 la.m_xrrsum = la1.m_xrrsum + la2.m_xrrsum;
642 la.m_yrrsum = la1.m_yrrsum + la2.m_yrrsum;
643 la.m_rrrrsum = la1.m_rrrrsum + la2.m_rrrrsum;
644 la.m_nc = la1.m_nc + la2.m_nc;
645 return la;
646}

◆ operator<<

std::ostream & operator<< ( std::ostream & o,
const Lpav & s )
friend

Definition at line 238 of file TrackUtil/TrackUtil-00-00-12/src/Lpav.cxx.

238 {
239// o << "wsum=" << a.m_wsum << " xsum=" << a.m_xsum << " ysum=" << a.m_ysum
240// << " xxsum=" << a.m_xxsum << " xysum=" << a.m_xysum
241// << " yysum=" << a.m_yysum
242// << " xrrsum=" << a.m_xrrsum << " yrrsum=" << a.m_yrrsum
243// << " rrrrsum=" << a.m_rrrrsum;
244// o << " rscale=" << a.m_rscale
245// << " xxavp=" << a.m_xxavp << " yyavp=" << a.m_yyavp
246// << " xrravp=" << a.m_xrravp << " yrravp=" << a.m_yrravp
247// << " rrrravp=" << a.m_rrrravp << " cosrot=" << a.m_cosrot
248// << " sinrot=" << a.m_sinrot
249// << endl;
250 o << " nc=" << a.m_nc << " chisq=" << a.m_chisq << " " << (Lpar&) a;
251 return o;
252}

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