Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4gsdvn.cc
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// by I.Hrivnacova, V.Berejnoi, 29 Oct 99
30
31#include "G3G4Interface.hh"
32#include "G3Division.hh"
33#include "G3VolTableEntry.hh"
34#include "G3VolTable.hh"
35#include "globals.hh"
36#include "G3toG4.hh"
37
38void PG4gsdvn(G4String *tokens)
39{
40 // fill the parameter containers
41 G3fillParams(tokens,PTgsdvn);
42
43 // interpret the parameters
44 G4String vname = Spar[0];
45 G4String vmoth = Spar[1];
46 G4int ndiv = Ipar[0];
47 G4int iaxis = Ipar[1];
48
49 G4gsdvn(vname, vmoth, ndiv, iaxis);
50}
51
53 G3DivType divType, G4int nofDivisions, G4int iaxis, G4int,
54 G4double c0, G4double step)
55{
56 G3VolTableEntry* vte=0;
57
58 // loop over all mothers
59 for (G4int i=0; i<mvte->GetNoClones(); i++) {
60 G3VolTableEntry* mvteClone = mvte->GetClone(i);
61 G4String shape = mvteClone->GetShape();
62 G4int nmed = mvteClone->GetNmed();
63 G4String mvteName = mvteClone->GetName();
64
65 G4String newName = vname;
66 if (i>0) {
67 char index[5]; sprintf(index, "%d", i);
68 newName.append(gSeparator); newName = newName + index;
69 }
70
71 // create new VTE with 0 solid
72 // and let vol table know about it
73 G3VolTableEntry* vteClone
74 = new G3VolTableEntry(newName, shape, 0, 0, nmed, 0, true);
75 G3Vol.PutVTE(vteClone);
76
77 // set mother <-> daughter
78 // (mother/daughter are reset in case an envelope
79 // needs to be created in G3Division::UpdateVTE)
80 mvteClone->AddDaughter(vteClone);
81 vteClone->AddMother(mvteClone);
82
83 // create new G3Division
84 G3Division* division
85 = new G3Division(divType, vteClone, mvteClone,
86 nofDivisions, iaxis, nmed, c0, step);
87
88 // set division to vte and update it
89 vteClone->SetDivision(division);
90 division->UpdateVTE();
91
92 if (i == 0) {
93 // keep the first clone copy
94 vte = vteClone;
95 }
96 else {
97 // let vte know about this clone copy
98 vte->AddClone(vteClone);
99 }
100 }
101}
102
103void G4gsdvn(G4String vname, G4String vmoth, G4int ndiv, G4int iaxis)
104{
105 // find mother VTE
106 G3VolTableEntry* mvte = G3Vol.GetVTE(vmoth);
107
108 if (mvte == 0) {
109 G4String text = "G4gsdvn:'" + vmoth + "' has no VolTableEntry";
110 G4Exception("G4gsdvn()", "G3toG40013", FatalException, text);
111 return;
112 }
113 else {
114 // a new vte clone copy with division is created
115 // for each mother (clone copy)
116
117 G4CreateCloneVTEWithDivision(vname, mvte, kDvn, ndiv, iaxis, 0, 0., 0.);
118 }
119}
G3DivType
Definition: G3Division.hh:53
@ kDvn
Definition: G3Division.hh:53
G3G4DLL_API G3VolTable G3Vol
Definition: clparse.cc:54
G3G4DLL_API G4int Ipar[1000]
Definition: clparse.cc:66
void G3fillParams(G4String *tokens, const char *ptypes)
Definition: clparse.cc:219
G3G4DLL_API G4String Spar[1000]
Definition: clparse.cc:68
#define PTgsdvn
Definition: G3toG4.hh:57
G3G4DLL_API char gSeparator
@ FatalException
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
void G4CreateCloneVTEWithDivision(G4String vname, G3VolTableEntry *mvte, G3DivType divType, G4int nofDivisions, G4int iaxis, G4int, G4double c0, G4double step)
Definition: G4gsdvn.cc:52
void G4gsdvn(G4String vname, G4String vmoth, G4int ndiv, G4int iaxis)
Definition: G4gsdvn.cc:103
void PG4gsdvn(G4String *tokens)
Definition: G4gsdvn.cc:38
void UpdateVTE()
Definition: G3Division.cc:95
void AddClone(G3VolTableEntry *aDaughter)
void AddMother(G3VolTableEntry *aDaughter)
void SetDivision(G3Division *division)
G3VolTableEntry * GetClone(G4int i)
void AddDaughter(G3VolTableEntry *aDaughter)
G3VolTableEntry * PutVTE(G3VolTableEntry *aVTE)
Definition: G3VolTable.cc:76
G3VolTableEntry * GetVTE(const G4String &Vname)
Definition: G3VolTable.cc:54
G4String & append(const G4String &)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41