00001
00002
00003
00004
00005
00006
00007 #ifndef BDSMagFieldSQL_h
00008 #define BDSMagFieldSQL_h
00009
00010 #include <fstream>
00011 #include <iostream>
00012 #include <list>
00013 #include <map>
00014 #include <vector>
00015
00016 #include "G4Types.hh"
00017 #include "G4MagneticField.hh"
00018
00019 #include "G4VPhysicalVolume.hh"
00020 #include "G4Navigator.hh"
00021 #include "G4TouchableHistory.hh"
00022 #include "G4TouchableHistoryHandle.hh"
00023 #include "BDSMagField.hh"
00024
00025 class BDSMagFieldSQL : public BDSMagField
00026 {
00027 public:
00028
00029 #if 0
00030 BDSMagFieldSQL(const G4String& FieldFile, G4double aMarkerLength,
00031 std::list<G4String> Quadvol, std::list<G4double> aQuadBgrad,
00032 std::list<G4String> Sextvol, std::list<G4double> aSextBgrad,
00033 std::list<G4String> Octvol, std::list<G4double> aOctBgrad,
00034 std::list<G4String> Fieldvol, std::list<G4ThreeVector> aUniformField);
00035 #endif
00036
00037 BDSMagFieldSQL(const G4String& aFieldFile,
00038 G4double aMarkerLength,
00039 std::map<G4String, G4double> aQuadVolBgrad,
00040 std::map<G4String, G4double> aSextVolBgrad,
00041 std::map<G4String, G4double> aOctVolBgrad,
00042 std::map<G4String, G4ThreeVector> aUniformFieldVolField,
00043 G4bool aHasNPoleFields, G4bool aHasUniformField);
00044
00045 virtual ~BDSMagFieldSQL();
00046
00047
00048
00049 void GetFieldValue( const G4double Point[4],G4double *Bfield ) const;
00050
00051 G4bool GetHasNPoleFields();
00052 G4bool GetHasUniformField();
00053 G4bool GetHasFieldMap();
00054
00055 void Prepare(G4VPhysicalVolume *referenceVolume);
00056
00057 private:
00058 G4Navigator* itsIRNavigator;
00059 G4bool itsHasNPoleFields;
00060 G4bool itsHasUniformField;
00061 G4bool itsHasFieldMap;
00062
00063 std::ofstream ofs;
00064 std::ifstream ifs;
00065
00066 G4double itsMarkerLength;
00067 G4String FieldFile;
00068
00069
00070 std::list<G4double> itsQuadBgrad;
00071 std::list<G4String> itsQuadVol;
00072 std::list<G4double> itsSextBgrad;
00073 std::list<G4String> itsSextVol;
00074 std::list<G4double> itsOctBgrad;
00075 std::list<G4String> itsOctVol;
00076
00077
00078 std::list<G4ThreeVector> itsUniformField;
00079 std::list<G4String> itsFieldVol;
00080
00081
00082 std::map<G4String, G4ThreeVector> itsUniformFieldVolField;
00083 std::map<G4String, G4double> itsQuadVolBgrad;
00084 std::map<G4String, G4double> itsSextVolBgrad;
00085 std::map<G4String, G4double> itsOctVolBgrad;
00086
00087
00088 std::vector<G4double> itsBz;
00089 std::vector<G4double> itsZ;
00090 std::vector<G4double> itsBr_over_r;
00091 std::vector<G4double> itsdBz_by_dz;
00092 double itsdz;
00093 };
00094
00095 #endif