BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
BesMagneticField Class Reference

#include <BesMagneticField.hh>

Inheritance diagram for BesMagneticField:

Public Member Functions

 BesMagneticField ()
 ~BesMagneticField ()
void GetFieldValue (const double Point[3], double *Bfield) const
void SetStepperType (G4int i)
void SetStepper ()
void SetMinStep (G4double s)
void InitialiseAll ()
void CreateStepperAndChordFinder ()
void SetDeltaOneStep (double newvalue)
void SetDeltaIntersection (double newvalue)
void SetMinimumEpsilonStep (double newvalue)
void SetMaximumEpsilonStep (double newvalue)

Protected Attributes

G4FieldManager * fFieldManager
G4ChordFinder * fChordFinder
G4Mag_UsualEqRhs * fEquation
G4MagIntegratorStepper * fStepper
G4int fStepperType
G4double fMinStep
BesMagneticFieldMessengerfFieldMessenger
IBesMagFieldSvcm_pIMF

Detailed Description

Definition at line 55 of file BesMagneticField.hh.

Constructor & Destructor Documentation

◆ BesMagneticField()

BesMagneticField::BesMagneticField ( )

Definition at line 82 of file BesMagneticField.cc.

82 : fChordFinder( 0 ), fStepper( 0 ), m_pIMF( 0 ) {
83 ISvcLocator* svcLocator = Gaudi::svcLocator();
84 StatusCode sc = svcLocator->service( "MagneticFieldSvc", m_pIMF );
85 if ( sc != StatusCode::SUCCESS )
86 { G4cout << "Unable to open Magnetic field service" << G4endl; }
88}
G4MagIntegratorStepper * fStepper
G4ChordFinder * fChordFinder
IBesMagFieldSvc * m_pIMF

◆ ~BesMagneticField()

BesMagneticField::~BesMagneticField ( )

Definition at line 90 of file BesMagneticField.cc.

90 {
91 if ( fFieldMessenger ) delete fFieldMessenger;
92 if ( fChordFinder ) delete fChordFinder;
93 if ( fEquation ) delete fEquation;
94 if ( fStepper ) delete fStepper;
95}
G4Mag_UsualEqRhs * fEquation
BesMagneticFieldMessenger * fFieldMessenger

Member Function Documentation

◆ CreateStepperAndChordFinder()

void BesMagneticField::CreateStepperAndChordFinder ( )

Definition at line 139 of file BesMagneticField.cc.

139 {
140 SetStepper();
141 G4cout << "The minimal step is equal to " << fMinStep / mm << " mm" << G4endl;
142
143 fFieldManager->SetDetectorField( this );
144
145 if ( fChordFinder ) delete fChordFinder;
146
147 fChordFinder = new G4ChordFinder( this, fMinStep, fStepper );
148
149 fChordFinder->SetDeltaChord( 0.25 * mm );
150 fFieldManager->SetChordFinder( fChordFinder );
151 fFieldManager->SetDeltaOneStep( 1.0e-2 * mm );
152 fFieldManager->SetDeltaIntersection( 1.0e-3 * mm );
153 fFieldManager->SetMinimumEpsilonStep( 5.0e-5 );
154 fFieldManager->SetMaximumEpsilonStep( 1.0e-3 );
155
156 G4PropagatorInField* fieldPropagator =
157 G4TransportationManager::GetTransportationManager()->GetPropagatorInField();
158 G4cout << "LargestAcceptableStep is " << fieldPropagator->GetLargestAcceptableStep() / m
159 << G4endl;
160 // read some values
161 G4cout << "field has created" << G4endl;
162 G4cout << "fDelta_One_Step_Value is " << fFieldManager->GetDeltaOneStep() << G4endl;
163 G4cout << "fDelta_Intersection_Val is " << fFieldManager->GetDeltaIntersection() << G4endl;
164 G4cout << "fEpsilonMin is " << fFieldManager->GetMinimumEpsilonStep() << G4endl;
165 G4cout << "fEpsilonMax is " << fFieldManager->GetMaximumEpsilonStep() << G4endl;
166 return;
167}
G4FieldManager * fFieldManager

Referenced by InitialiseAll().

◆ GetFieldValue()

void BesMagneticField::GetFieldValue ( const double Point[3],
double * Bfield ) const

Definition at line 98 of file BesMagneticField.cc.

98 {
99 double x = Point[0];
100 double y = Point[1];
101 double z = Point[2];
102
103 HepPoint3D r( x, y, z );
104 HepVector3D b;
105
106 if ( ReadBoostRoot::GetField() == 2 ) m_pIMF->fieldVector( r, b );
107 else m_pIMF->uniFieldVector( r, b );
108
109 Bfield[0] = b.x();
110 Bfield[1] = b.y();
111 Bfield[2] = b.z();
112
113 // caogf debug
114 // ofstream haha("field_out.dat",ios_base::app);
115 // haha<<x/mm<<" "<<y/mm<<" "<<z/mm<<" "<<Bfield[0]/tesla<<" "<<Bfield[1]/tesla<<"
116 //"<<Bfield[2]/tesla<<G4endl; haha.close();
117}
HepGeom::Vector3D< double > HepVector3D
HepGeom::Point3D< double > HepPoint3D
Double_t x[10]

◆ InitialiseAll()

void BesMagneticField::InitialiseAll ( )

Definition at line 122 of file BesMagneticField.cc.

122 {
123
124 fFieldMessenger = new BesMagneticFieldMessenger( this );
125 fEquation = new G4Mag_UsualEqRhs( this );
126
127 fMinStep = 0.01 * mm; // minimal step of 1 mm is default
128
129 fStepperType = 4; // ClassicalRK4 is default stepper
130 fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
131 G4cout << "before CreateStepperAndChordFinder" << G4endl;
133}

Referenced by BesMagneticField().

◆ SetDeltaIntersection()

void BesMagneticField::SetDeltaIntersection ( double newvalue)

Definition at line 229 of file BesMagneticField.cc.

229 {
230 fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
231 fFieldManager->SetDeltaIntersection( newvalue );
232}

◆ SetDeltaOneStep()

void BesMagneticField::SetDeltaOneStep ( double newvalue)

Definition at line 225 of file BesMagneticField.cc.

225 {
226 fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
227 fFieldManager->SetDeltaOneStep( newvalue );
228}

◆ SetMaximumEpsilonStep()

void BesMagneticField::SetMaximumEpsilonStep ( double newvalue)

Definition at line 237 of file BesMagneticField.cc.

237 {
238 fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
239 fFieldManager->SetMaximumEpsilonStep( newvalue );
240}

◆ SetMinimumEpsilonStep()

void BesMagneticField::SetMinimumEpsilonStep ( double newvalue)

Definition at line 233 of file BesMagneticField.cc.

233 {
234 fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
235 fFieldManager->SetMinimumEpsilonStep( newvalue );
236}

◆ SetMinStep()

void BesMagneticField::SetMinStep ( G4double s)
inline

Definition at line 66 of file BesMagneticField.hh.

66{ fMinStep = s; }
XmlRpcServer s

◆ SetStepper()

void BesMagneticField::SetStepper ( )

Definition at line 174 of file BesMagneticField.cc.

174 {
175 if ( fStepper ) delete fStepper;
176
177 switch ( fStepperType )
178 {
179 case 0:
180 fStepper = new G4ExplicitEuler( fEquation );
181 G4cout << "G4ExplicitEuler is called" << G4endl;
182 break;
183 case 1:
184 fStepper = new G4ImplicitEuler( fEquation );
185 G4cout << "G4ImplicitEuler is called" << G4endl;
186 break;
187 case 2:
188 fStepper = new G4SimpleRunge( fEquation );
189 G4cout << "G4SimpleRunge is called" << G4endl;
190 break;
191 case 3:
192 fStepper = new G4SimpleHeum( fEquation );
193 G4cout << "G4SimpleHeum is called" << G4endl;
194 break;
195 case 4:
196 fStepper = new G4ClassicalRK4( fEquation );
197 G4cout << "G4ClassicalRK4 (default) is called" << G4endl;
198 break;
199 case 5:
200 fStepper = new G4HelixExplicitEuler( fEquation );
201 G4cout << "G4HelixExplicitEuler is called" << G4endl;
202 break;
203 case 6:
204 fStepper = new G4HelixImplicitEuler( fEquation );
205 G4cout << "G4HelixImplicitEuler is called" << G4endl;
206 break;
207 case 7:
208 fStepper = new G4HelixSimpleRunge( fEquation );
209 G4cout << "G4HelixSimpleRunge is called" << G4endl;
210 break;
211 case 8:
212 fStepper = new G4CashKarpRKF45( fEquation );
213 G4cout << "G4CashKarpRKF45 is called" << G4endl;
214 break;
215 case 9:
216 fStepper = new G4RKG3_Stepper( fEquation );
217 G4cout << "G4RKG3_Stepper is called" << G4endl;
218 break;
219 default: fStepper = 0;
220 }
221 return;
222}

Referenced by CreateStepperAndChordFinder().

◆ SetStepperType()

void BesMagneticField::SetStepperType ( G4int i)
inline

Definition at line 62 of file BesMagneticField.hh.

62{ fStepperType = i; }

Member Data Documentation

◆ fChordFinder

G4ChordFinder* BesMagneticField::fChordFinder
protected

◆ fEquation

G4Mag_UsualEqRhs* BesMagneticField::fEquation
protected

Definition at line 79 of file BesMagneticField.hh.

Referenced by InitialiseAll(), SetStepper(), and ~BesMagneticField().

◆ fFieldManager

G4FieldManager* BesMagneticField::fFieldManager
protected

◆ fFieldMessenger

BesMagneticFieldMessenger* BesMagneticField::fFieldMessenger
protected

Definition at line 86 of file BesMagneticField.hh.

Referenced by InitialiseAll(), and ~BesMagneticField().

◆ fMinStep

G4double BesMagneticField::fMinStep
protected

Definition at line 84 of file BesMagneticField.hh.

Referenced by CreateStepperAndChordFinder(), InitialiseAll(), and SetMinStep().

◆ fStepper

G4MagIntegratorStepper* BesMagneticField::fStepper
protected

◆ fStepperType

G4int BesMagneticField::fStepperType
protected

Definition at line 82 of file BesMagneticField.hh.

Referenced by InitialiseAll(), SetStepper(), and SetStepperType().

◆ m_pIMF

IBesMagFieldSvc* BesMagneticField::m_pIMF
protected

Definition at line 87 of file BesMagneticField.hh.

Referenced by BesMagneticField(), and GetFieldValue().


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