ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VFieldModel.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VFieldModel.hh
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
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. *
10 // * *
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. *
17 // * *
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 // ********************************************************************
25 //
26 // Michael Kelsey 31 January 2019
27 //
28 // Class Description:
29 //
30 // Abstract base class to implement drawing vector field geometries
31 // (e.g., electric, magnetic or gravity). Implementation extracted
32 // from G4MagneticFieldModel, with field-value access left pure
33 // virtual for implementation by base classes.
34 
35 #ifndef G4VFIELDMODEL_HH
36 #define G4VFIELDMODEL_HH
37 
38 #include "G4VModel.hh"
39 #include "G4Point3D.hh"
41 
42 #include <vector>
43 
44 class G4Field;
45 
46 class G4VFieldModel: public G4VModel {
47 
48 public: // With description
49 
51 
53  (const G4String& typeOfField, const G4String& symbol="",
54  const G4VisExtent& extentForField = G4VisExtent(),
55  const std::vector<G4PhysicalVolumesSearchScene::Findings>& pvFindings
56  = std::vector<G4PhysicalVolumesSearchScene::Findings>(),
57  G4int nDataPointsPerHalfScene = 10,
58  Representation representation = Representation::fullArrow,
59  G4int arrow3DLineSegmentsPerCircle = 6);
60  // typeOfField is "Electric" or "Magnetic" etc.
61  // symbol is "E" or "B" etc.
62 
63  virtual ~G4VFieldModel();
64 
65  virtual void DescribeYourselfTo(G4VGraphicsScene& sceneHandler);
66  // The main task of a model is to describe itself to the graphics scene.
67  // Note: It is in this function that the extent for drawing the filed must
68  // be calcualted. If fExtentForField is null, pick up the extent from
69  // the sceneHandler.
70 
71 protected:
72 
73  // Subclasses MUST implement this for their particular kind of field
74  virtual void GetFieldAtLocation(const G4Field* field,
76  G4Point3D& result) const = 0;
77  // The appropriate output from GetFieldValue should be filled into result.
78  // If (field==0), the function should do nothing; returning without error.
79 
80 private:
81 
82  // Private copy contructor and assignment to forbid use...
85 
87  // If null, get extent from scene handler in DescribeYourselfTo.
88 
89  std::vector<G4PhysicalVolumesSearchScene::Findings> fPVFindings;
90  // If empty, use fExtentForField alone for sampling and drawing.
91  // If non-empty, use fExtentForField alone for sampling, but only
92  // draw if sampling point is in the specified physical volume(s).
93 
95  // No. of data points sampled per maximum half scene.
96  // Note that total number of sampling points can be as high as
97  // (2*n+1)^3, which can get very big. However, fields are usually
98  // confined to only parts of the scene, so this may not be a problem.
99  // Sampling can be further limited with fExtentForField and/or fPVFindings.
100 
101  Representation fRepresentation; // Big arrows or just lines
103  G4String fTypeOfField; // "Electric" or "Magnetic" etc.
104  G4String fArrowPrefix; // For attaching text label to arrows
105 };
106 
107 #endif