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
G4gspos.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, 13.10.99
30
31#include "G3G4Interface.hh"
32#include "G3VolTable.hh"
33#include "G3toG4.hh"
34#include "G3Pos.hh"
35#include "globals.hh"
36#include "G4SystemOfUnits.hh"
37
39 G4double pars[], G4int npar, G4int num,
40 G4double x, G4double y, G4double z, G4int irot, G4String vonly);
41
42void PG4gspos(G4String *tokens)
43{
44 // fill the parameter containers
45 G3fillParams(tokens,PTgspos);
46
47 // interpret the parameters
48 G4String name = Spar[0];
49 G4String moth = Spar[1];
50 G4String only = Spar[2];
51 G4int num = Ipar[0];
52 G4int irot = Ipar[1];
53 // all parameters are passed to G4gsxxx methods
54 // in G3 default units
55 //G4double x = Rpar[0]*cm;
56 //G4double y = Rpar[1]*cm;
57 //G4double z = Rpar[2]*cm;
58 G4double x = Rpar[0];
59 G4double y = Rpar[1];
60 G4double z = Rpar[2];
61
62 G4gspos(name, num, moth, x, y, z, irot, only);
63}
64
65void G4gspos(G4String vname, G4int num, G4String vmoth, G4double x,
66 G4double y, G4double z, G4int irot, G4String vonly)
67{
68 // find VTEs
69 G3VolTableEntry* vte = G3Vol.GetVTE(vname);
70 G3VolTableEntry* mvte = G3Vol.GetVTE(vmoth);
71
72 if (vte == 0) {
73 G4String text = "G4gspos: '" + vname + "' has no VolTableEntry";
74 G4Exception("G4gspos()", "G3toG40017", FatalException, text);
75 return;
76 }
77 else if (mvte == 0) {
78 G4String text = "G4gspos: '" + vmoth + "' has no VolTableEntry";
79 G4Exception("G4gspos()", "G3toG40018", FatalException, text);
80 return;
81 }
82 else {
83 if (!vte->HasNegPars()) {
84 // position vector
85 G4ThreeVector* offset = new G4ThreeVector(x*cm, y*cm, z*cm);
86
87 // create a G3Pos object and add it to the vte
88 G3Pos* aG3Pos = new G3Pos(vmoth, num, offset, irot, vonly);
89 vte->AddG3Pos(aG3Pos);
90
91 // loop over all mothers
92 for (G4int i=0; i<mvte->GetNoClones(); i++) {
93 // (mvte is retrieved from its "master" name
94 // -> there is no need to call GetMasterClone()
95 G3VolTableEntry* mvteClone = mvte->GetClone(i);
96 vte->AddMother(mvteClone);
97 mvteClone->AddDaughter(vte);
98 }
99 }
100 else {
101 // if vte has neg parameters
102 // a new vte clone copy is created for each mother (clone copy)
103 // and its parameters are derived from it if possible
104
105 G4CreateCloneVTE(vte, mvte, vte->GetRpar(), vte->GetNpar(), num,
106 x, y, z, irot, vonly);
107 }
108 }
109}
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 G4double Rpar[1000]
Definition: clparse.cc:67
G3G4DLL_API G4String Spar[1000]
Definition: clparse.cc:68
#define PTgspos
Definition: G3toG4.hh:53
@ FatalException
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
void G4CreateCloneVTE(G3VolTableEntry *vte, G3VolTableEntry *mvte, G4double pars[], G4int npar, G4int num, G4double x, G4double y, G4double z, G4int irot, G4String vonly)
Definition: G4gsposp.cc:193
void G4gspos(G4String vname, G4int num, G4String vmoth, G4double x, G4double y, G4double z, G4int irot, G4String vonly)
Definition: G4gspos.cc:65
void PG4gspos(G4String *tokens)
Definition: G4gspos.cc:42
Definition: G3Pos.hh:44
void AddMother(G3VolTableEntry *aDaughter)
G3VolTableEntry * GetClone(G4int i)
void AddG3Pos(G3Pos *aG3Pos)
G4double * GetRpar()
void AddDaughter(G3VolTableEntry *aDaughter)
G3VolTableEntry * GetVTE(const G4String &Vname)
Definition: G3VolTable.cc:54
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41