53ZHelix::ZHelix( Double_t Azim, Double_t QovR, Double_t QxDh, Double_t refx, Double_t refy,
54 Double_t refz, Double_t TDip, Double_t phii, Double_t phio, Float_t Chi2,
55 Int_t NDoF,
EZHelixRangeType RangeType, Double_t RangeMin, Double_t RangeMax )
59 if ( gDebug ) cout <<
"ZHelix normal ctor called" << endl;
79 SetRange( RangeType, RangeMin, RangeMax );
125 TString opt = option;
133 if (
fQovR >= 0 ) sign = -1;
137 Double_t degrad = TMath::Pi() / 180.0;
138 Double_t segment = 1. * degrad;
151 Int_t nSeg = Int_t( TMath::Abs( df ) / segment ) + 1;
157 segment = 0.01 * degrad;
158 nSeg = Int_t( TMath::Abs( df ) / segment ) + 1;
163 segment = TMath::Abs( df ) / nSeg;
165 Double_t phi, x, y, z, r;
166 TPolyLine3D::SetPolyLine( nSeg + 1 );
168 if ( opt.Contains(
"3D" ) )
171 for ( Int_t i = 0; i <= nSeg; i++ )
173 phi =
fRange[0] + segment * i * sign;
175 TPolyLine3D::SetPoint( i, x, y, z );
178 else if ( opt.Contains(
"XY" ) )
181 for ( Int_t i = 0; i <= nSeg; i++ )
183 phi =
fRange[0] + segment * i * sign;
185 TPolyLine3D::SetPoint( i, x, y, 0 );
188 else if ( opt.Contains(
"ZR" ) )
197 for ( Int_t i = 0; i <= nSeg; i++ )
201 phi =
fRange[0] + segment * i * sign;
205 TPolyLine3D::SetPoint( i, z, r, 0 );
211 if ( isgn != 0 )
fRSign = TMath::Sign( 1, isgn );
216 Float_t z, r, rref, rdisp;
225 for ( Int_t i = 0; i <= nSeg; i++ )
228 r = GetP()[i * 3 + 1];
235 for ( Int_t i = 0; i <= nSeg; i++ )
238 r = GetP()[i * 3 + 1];
240 if (
fRSign < 0 ) rdisp += 2 * rref;
305 ( -TMath::Power( r, 2 ) + 1 / TMath::Power(
fQovR, 2 ) + TMath::Power( k, 2 ) );
307 if ( ( my_value < -1 ) || ( my_value > 1 ) )
return 999999999;
308 Double_t my_phi = TMath::ACos( my_value );
321 this->
Phi2XYZ( phi1, x1, y1, z1 );
322 this->
Phi2XYZ( phi2, x2, y2, z2 );
326 if ( TMath::Sign( 1.,
fTDip ) == TMath::Sign( 1., ( z1 -
fRefZ ) ) )
330 if ( TMath::Sign( 1.,
fTDip ) == TMath::Sign( 1., ( z2 -
fRefZ ) ) )
333 if ( TMath::Abs( z1 -
fRefZ ) <= TMath::Abs( z2 -
fRefZ ) ) phi =
phi1;