BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
BDSFieldQuery.hh
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) BDSIM Collaboration, 2001 - 2026.
3
4This file is part of BDSIM.
5
6BDSIM is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published
8by the Free Software Foundation version 3 of the License.
9
10BDSIM is distributed in the hope that it will be useful, but
11WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
17*/
18#ifndef BDSFIELDQUERY_H
19#define BDSFIELDQUERY_H
20#include "BDSFieldQueryInfo.hh"
21
22#include "G4AffineTransform.hh"
23#include "G4ThreeVector.hh"
24#include "G4Types.hh"
25
26#include <fstream>
27#include <vector>
28
29class G4Navigator;
30class G4VPhysicalVolume;
31
32
42{
43public:
45 virtual ~BDSFieldQuery();
46
48 virtual void QueryField(const BDSFieldQueryInfo* query);
50 void QueryFields(const std::vector<BDSFieldQueryInfo*>& fieldQueries);
51
53 static void AttachWorldVolumeToNavigator(G4VPhysicalVolume* worldPVIn);
54
56 virtual void CleanUp();
57
58protected:
62 virtual void GetFieldValue(const G4ThreeVector& globalXYZ,
63 const G4ThreeVector& globalDirection,
64 G4double tGlobal,
65 G4double fieldValue[6]);
66
68 virtual void CheckIfFieldObjectSpecified(const BDSFieldQueryInfo* query) const;
69
70private:
73 const G4String& dimensionName,
74 const G4String& queryName) const;
75
77 void QuerySpecificPoints(const BDSFieldQueryInfo* query);
78
80 virtual void PrintBAndEInfo(const BDSFieldQueryInfo* query) const;
81
83 virtual void OpenFiles(const BDSFieldQueryInfo* query);
84
86 virtual void WriteHeader(std::ofstream& out, const BDSFieldQueryInfo* query) const;
87
89 virtual void CloseFiles();
90
92 G4ThreeVector LocalToGlobalPoint(const G4AffineTransform& localToGlobalTransform,
93 G4double xLocal,
94 G4double yLocal,
95 G4double zLocal) const;
96
98 void GlobalToLocalAxisField(const G4AffineTransform& globalToLocalTransform,
99 const G4double globalBEField[6],
100 G4double localBEField[6]);
101
103 virtual void WriteFieldValue(const G4ThreeVector& xyzGlobal,
104 G4double tGlobal,
105 const G4double fieldValue[6]);
106
107 std::ofstream oFileMagnetic;
108 std::ofstream oFileElectric;
109 G4bool queryMagnetic;
110 G4bool queryElectric;
111 G4bool writeX;
112 G4bool writeY;
113 G4bool writeZ;
114 G4bool writeT;
115
117 static G4Navigator* navigator;
118};
119
120#endif
Holder class for all information required for a field query.
Class for querying the Geant4 model for field at any point.
static G4Navigator * navigator
One navigator used - static so we can externally link it up to the world PV.
static void AttachWorldVolumeToNavigator(G4VPhysicalVolume *worldPVIn)
Setup the navigator w.r.t. to a world volume.
virtual void OpenFiles(const BDSFieldQueryInfo *query)
Open potentially both electric and magnetic field map files.
virtual void WriteHeader(std::ofstream &out, const BDSFieldQueryInfo *query) const
Utility to write required header information.
void QueryFields(const std::vector< BDSFieldQueryInfo * > &fieldQueries)
Vector version of above function. Unique output files for each query.
virtual void CleanUp()
Reset any member variables used during a query. Closes any files if open.
G4ThreeVector LocalToGlobalPoint(const G4AffineTransform &localToGlobalTransform, G4double xLocal, G4double yLocal, G4double zLocal) const
Apply a transform to the coordinates. Does not apply to time.
void CheckNStepsAndRange(const BDSFieldQueryInfo::QueryDimensionInfo &dimensionInfo, const G4String &dimensionName, const G4String &queryName) const
Throw an exception if the number of steps is >1 and the difference between max and min is 0.
virtual void CheckIfFieldObjectSpecified(const BDSFieldQueryInfo *query) const
Warn the user if the fieldObject variable is use when it shouldn't be.
void QuerySpecificPoints(const BDSFieldQueryInfo *query)
Different algorithm where we query a specific list of points defined in the query info object.
virtual void CloseFiles()
Close any files if open.
virtual void PrintBAndEInfo(const BDSFieldQueryInfo *query) const
Print out whether B and E files are being generated and which ones.
virtual void QueryField(const BDSFieldQueryInfo *query)
Query the field in the Geant4 model according to information in query.
virtual void GetFieldValue(const G4ThreeVector &globalXYZ, const G4ThreeVector &globalDirection, G4double tGlobal, G4double fieldValue[6])
virtual void WriteFieldValue(const G4ThreeVector &xyzGlobal, G4double tGlobal, const G4double fieldValue[6])
Write an entry ta line of the output file(s). The array is assumed to be Bx,By,Bz,...
void GlobalToLocalAxisField(const G4AffineTransform &globalToLocalTransform, const G4double globalBEField[6], G4double localBEField[6])
Convert a global field axis to a local one.