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