Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/modeling/include/G4VFieldModel.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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"
 40 #include "G4PhysicalVolumesSearchScene.hh"
 41 
 42 #include <vector>
 43 
 44 class G4Field;
 45 
 46 class G4VFieldModel: public G4VModel {
 47 
 48 public: // With description
 49   
 50   enum Representation {fullArrow, lightArrow};
 51 
 52   G4VFieldModel
 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,
 75           const G4Point3D& position, G4double time,
 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...
 83   G4VFieldModel(const G4VFieldModel&);
 84   G4VFieldModel& operator=(const G4VFieldModel&);
 85 
 86   G4VisExtent fExtentForField;
 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 
 94   G4int fNDataPointsPerMaxHalfExtent;
 95   // No. of data points sampled per maximum half extent.
 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
102   G4int fArrow3DLineSegmentsPerCircle;
103   G4String fTypeOfField;                // "Electric" or "Magnetic" etc.
104   G4String fArrowPrefix;                // For attaching text label to arrows
105 };
106 
107 #endif
108