2// ********************************************************************
 
    3// * License and Disclaimer                                           *
 
    5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 
    6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 
    7// * conditions of the Geant4 Software License,  included in the file *
 
    8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 
    9// * include a list of copyright holders.                             *
 
   11// * Neither the authors of this software system, nor their employing *
 
   12// * institutes,nor the agencies providing financial support for this *
 
   13// * work  make  any representation or  warranty, express or implied, *
 
   14// * regarding  this  software system or assume any liability for its *
 
   15// * use.  Please see the license in the file  LICENSE  and URL above *
 
   16// * for the full disclaimer and the limitation of liability.         *
 
   18// * This  code  implementation is the result of  the  scientific and *
 
   19// * technical work of the GEANT4 collaboration.                      *
 
   20// * By using,  copying,  modifying or  distributing the software (or *
 
   21// * any work based  on the software)  you  agree  to acknowledge its *
 
   22// * use  in  resulting  scientific  publications,  and indicate your *
 
   23// * acceptance of all terms of the Geant4 Software license.          *
 
   24// ********************************************************************
 
   26// G4MagHelicalStepper inline methods implementation
 
   28// Created: J.Apostolakis, CERN - 05.11.1998
 
   29// --------------------------------------------------------------------
 
   32G4MagHelicalStepper::LinearStep( const G4double  yIn[],
 
   34                                       G4double  yLinear[]) const
 
   36  // Linear Step in regions of no field
 
   38  G4double momentum_val = std::sqrt(yIn[3]*yIn[3]+yIn[4]*yIn[4]+yIn[5]*yIn[5]);
 
   39  G4double inv_momentum = 1.0 / momentum_val;
 
   42  for( auto i = 0; i < 3; ++i )
 
   44    yDir[i]   = inv_momentum * yIn[i+3];     
 
   45    yLinear[i]   = yIn[i] + h * yDir[i];
 
   46    yLinear[i+3] = yIn[i+3];
 
   51G4MagHelicalStepper::MagFieldEvaluate(const G4double y[],
 
   52                                      G4ThreeVector& Bfield )   
 
   55  GetEquationOfMotion()->GetFieldValue(y, B);
 
   56  Bfield = G4ThreeVector( B[0], B[1], B[2] );
 
   60G4MagHelicalStepper::GetInverseCurve(const G4double Momentum,
 
   63  constexpr G4double chargeFactor = 1.0 / (CLHEP::eplus*CLHEP::c_light);
 
   65  G4double  inv_momentum  = 1.0 / Momentum ;
 
   66  G4double particleCharge = fPtrMagEqOfMot->FCof() * chargeFactor;
 
   67  G4double fCoefficient   = -fUnitConstant  * particleCharge * inv_momentum;
 
   69  return fCoefficient*Bmag;
 
   72inline void G4MagHelicalStepper::SetAngCurve(const G4double Ang)
 
   77inline G4double G4MagHelicalStepper::GetAngCurve() const 
 
   82inline void G4MagHelicalStepper::SetCurve(const G4double Curve)
 
   87inline G4double G4MagHelicalStepper::GetCurve() const 
 
   92inline void G4MagHelicalStepper::SetRadHelix(const G4double Rad)
 
   97inline G4double G4MagHelicalStepper::GetRadHelix() const