Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G3VolTableEntry.hh
Go to the documentation of this file.
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//
27// $Id$
28//
29// ----------------------
30// Class description:
31//
32// This class is a temporary representation of G3 volume.
33// Its methods enables successive updating of its instances
34// during the phase of filling the G3 tables (defining G3 geometry,
35// eg. by parsing the G3 input via clparse.cc).
36// See G3VolTable class description, too.
37//
38// Data members:
39// fVname volume name;
40// fShape G3 shape name;
41// fRpar array of G3 volumes parameters;
42// fNpar number of G3 volumes parameters;
43// fNmed G3 tracking medium number;
44// fSolid the G4VSolid of this volume;
45// fLV the G4LogicalVolume;
46// fHasNegPars true if G3 volume was defined with incomplete
47// parameters;
48// fDaughters vector of daughter VTEs (VTEs of volumes placed inside
49// this volume);
50// fMothers vector of mother VTEs (VTEs of volumes inside which this
51// volume is placed);
52// fClones vector of clone VTEs (see explanation below);
53// fG3Pos vector of G3 positions (G3Pos objects)
54// fDivision G3Division object created in case the G4 volume
55// was defined as division;
56//
57// Clone volumes:
58// In case a G3 volume (e.g. XYZ) has changed its solid parameters
59// with its new position (placement with GSPOSP) a new G3VolTableEntry
60// (associated with this new solid) with a new name (XYZ_N)
61// is created and registered as a clone volume in the fClones vector
62// data member of its master G3VolTableEntry object.
63
64// ----------------------
65//
66// by I.Hrivnacova, 13.10.99
67
68#ifndef G3VOLTABLEENTRY_HH
69#define G3VOLTABLEENTRY_HH 1
70
71#include "globals.hh"
72#include "G3Pos.hh"
73#include "G3Division.hh"
74#include <vector>
75
76class G4LogicalVolume;
77class G4Material;
78class G4VSolid;
79
81{
82 public: // with description
83
84 G3VolTableEntry(G4String& vname, G4String& shape, G4double* rpar,
85 G4int npar, G4int nmed, G4VSolid* solid,
86 G4bool hasNegPars);
87 virtual ~G3VolTableEntry();
88
89 // operators
90 G4bool operator == ( const G3VolTableEntry& vte) const;
91
92 // methods
93 void AddG3Pos(G3Pos* aG3Pos);
94 void AddDaughter(G3VolTableEntry* aDaughter);
95 void AddMother(G3VolTableEntry* aDaughter);
96 void AddClone(G3VolTableEntry* aDaughter);
97 void AddOverlap(G3VolTableEntry* aOverlap);
98 void ReplaceDaughter(G3VolTableEntry* vteOld, G3VolTableEntry* vteNew);
99 void ReplaceMother(G3VolTableEntry* vteOld, G3VolTableEntry* vteNew);
101 G3VolTableEntry* FindMother(const G4String& vname);
102 G3VolTableEntry* FindClone(const G4String& vname);
103 void PrintSolidInfo();
104
105 // set methods
106 void SetName(G4String name);
107 void SetLV(G4LogicalVolume* lv);
108 void SetSolid(G4VSolid* solid);
109 void SetNmed(G4int nmed);
110 void SetNRpar(G4int npar, G4double* Rpar);
111 void SetDivision(G3Division* division);
112 void SetHasNegPars(G4bool hasNegPars);
113 void SetHasMANY(G4bool hasMANY);
114 void ClearG3PosCopy(G4int copy);
115 void ClearDivision();
116
117 // get methods
120 G4int GetNmed();
121 G4int GetNpar();
122 G4double* GetRpar();
123 G4int NPCopies();
124 G3Pos* GetG3PosCopy(G4int copy=0);
127 G4bool HasMANY();
137 // return the first mother - to be removed
140 std::vector<G3VolTableEntry*>* GetOverlaps();
141
142 private:
143 G4String fVname;
144 G4String fShape;
145 G4double* fRpar;
146 G4int fNpar;
147 G4int fNmed;
148 G4VSolid* fSolid;
149 G4LogicalVolume* fLV;
150 G4bool fHasNegPars;
151 G4bool fHasMANY;
152 std::vector<G3VolTableEntry*> fDaughters;
153 std::vector<G3VolTableEntry*> fMothers;
154 std::vector<G3VolTableEntry*> fClones;
155 std::vector<G3VolTableEntry*> fOverlaps;
156 std::vector<G3Pos*> fG3Pos;
157 G3Division* fDivision;
158};
159
160// inline methods
161
163{ fDivision = division; }
164
166{ return fDivision; }
167
168#endif
G3G4DLL_API G4double Rpar[1000]
Definition: clparse.cc:67
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
Definition: G3Pos.hh:44
void AddClone(G3VolTableEntry *aDaughter)
void AddMother(G3VolTableEntry *aDaughter)
std::vector< G3VolTableEntry * > * GetOverlaps()
void SetDivision(G3Division *division)
void SetName(G4String name)
void SetNmed(G4int nmed)
G3VolTableEntry * FindMother(const G4String &vname)
G3VolTableEntry * GetMasterClone()
G4VSolid * GetSolid()
G3Division * GetDivision()
G3VolTableEntry * FindClone(const G4String &vname)
G3VolTableEntry * FindDaughter(const G4String &vname)
G3VolTableEntry * GetClone(G4int i)
void ReplaceDaughter(G3VolTableEntry *vteOld, G3VolTableEntry *vteNew)
void ReplaceMother(G3VolTableEntry *vteOld, G3VolTableEntry *vteNew)
void AddG3Pos(G3Pos *aG3Pos)
G4bool operator==(const G3VolTableEntry &vte) const
void SetHasNegPars(G4bool hasNegPars)
G4double * GetRpar()
void SetNRpar(G4int npar, G4double *Rpar)
void AddOverlap(G3VolTableEntry *aOverlap)
void ClearG3PosCopy(G4int copy)
void AddDaughter(G3VolTableEntry *aDaughter)
G4LogicalVolume * GetLV()
virtual ~G3VolTableEntry()
void SetSolid(G4VSolid *solid)
G3VolTableEntry * GetMother()
void SetLV(G4LogicalVolume *lv)
G3Pos * GetG3PosCopy(G4int copy=0)
G3VolTableEntry * GetDaughter(G4int i)
void SetHasMANY(G4bool hasMANY)