Как заставить G4 делать в случае наличия поля то, что надо, а не то, что ему захочется
Здесь (http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/ForApplicationDeveloper/html/Detector/electroMagneticField.html) вообще ничего не понятно! Можете попробовать разобраться сами, но я предупредил.
Иерархия объектов, отвечающих за транспорт в поле, такая: G4TransportationManager (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4TransportationManager.hh&FileDir=geometry/navigation/include) содержит в себе G4FieldManager (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4FieldManager.hh&FileDir=geometry/magneticfield/include), который отвечает за поле для всех объемов. Кроме того каждый G4LogicalVolume (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4LogicalVolume.hh&FileDir=geometry/management/include) может иметь свой собственный G4FieldManager. А может и не иметь. Если все же имеет, то все дочерние объемы наследуют это поле, если не оговорено обратное (посредством собственного G4FieldManager).
Каждый G4FieldManager содержит в себе G4Field (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4Field.hh&FileDir=geometry/magneticfield/include), который имеет виртуальный метод GetFieldValue(const double Point[4], double *fieldVal). Point -- это 4-вектор (x, y, z, t), таким образом поле может зависеть от времени. fieldVal это массив из шести компонент. Первые три это Bx, By, Bz -- напряженности магнитного поля, дальше Ex, Ey, Ez -- электрическое поле. Все в глобальных координатах и внутренних единицах G4. То есть, например, можно написать Bx == 100*gauss.
Кроме того G4FieldManager имеет объект G4ChordFinder (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4ChordFinder.hh&FileDir=geometry/magneticfield/include), который занимается рассчетом траектории. Всю работу за G4ChordFinder на самом деле выполняет его член G4MagInt_Driver (IntegrationDriver), вызывает свои члены G4MagIntegratorStepper (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4MagIntegratorStepper.hh&FileDir=geometry/magneticfield/include) и G4EquationOfMotion (http://pcitapiww.cern.ch/asdcgi/geant4/SRM/G4GenDoc.exe.pl?flag=2&FileName=G4EquationOfMotion.hh&FileDir=geometry/magneticfield/include). Первый является решалкой ОДУ, второй необходимо менять крайне редко.
Виртуальности
Из всех них G4Field, G4MagIntegratorStepper и G4EquationOfMotion являются виртуальными абстракными классами.
G4Field бывает (по мере убывания виртуальности):
- G4ElectroMagneticField,
- G4ElectricField, G4MagneticField,
- G4HarmonicPolMagField, G4LineCurrentMagField, G4QuadrupoleMagField, G4UniformElectricField, G4UniformMagField.
G4MagIntegratorStepper можно выбирать между
- G4CashKarpRKF45,
- G4ClassicalRK4,
- G4ExplicitEuler,
- G4ImplicitEuler,
- G4SimpleHeum,
- G4SimpleRunge,
- G4RKG3_Stepper
и семейством G4MagHelicalStepper, которое можно применять только в случае постоянного магнитного поля. В него входят
- G4ExactHelixStepper,
- G4HelixExplicitEuler,
- G4HelixHeum,
- G4HelixImplicitEuler и
- G4HelixSimpleRunge.
G4EquationOfMotion чаще всего бывает G4Mag_UsualEqRhs. Для электрического поля -- G4EqMagElectricField.
Параметры, которые влияют на трекинг в поле:
DeltaChord в FieldManager DeltaIntersection в FieldManager EpsMaxStep в FieldManager EpsMinStep в FieldManager MinimalStep в IntegratorDriver, но можно устанавливать и в ChordFinder LargestAcceptableStep в TransportationManager
Первые четыре должны быть где-то одного порядка и никак не меньше 10-9 м.