Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // >> 27 // $Id: G4gspos.cc,v 1.13 2006/06/29 18:14:42 gunter Exp $ >> 28 // GEANT4 tag $Name: geant4-08-03-patch-01 $ 27 // 29 // 28 // by I.Hrivnacova, 13.10.99 30 // by I.Hrivnacova, 13.10.99 29 31 30 #include "G3G4Interface.hh" 32 #include "G3G4Interface.hh" 31 #include "G3VolTable.hh" 33 #include "G3VolTable.hh" 32 #include "G3toG4.hh" 34 #include "G3toG4.hh" 33 #include "G3Pos.hh" 35 #include "G3Pos.hh" 34 #include "globals.hh" 36 #include "globals.hh" 35 #include "G4SystemOfUnits.hh" << 36 37 37 void G4CreateCloneVTE(G3VolTableEntry* vte, G3 38 void G4CreateCloneVTE(G3VolTableEntry* vte, G3VolTableEntry* mvte, 38 G4double pars[], G4int npar, G4i 39 G4double pars[], G4int npar, G4int num, 39 G4double x, G4double y, G4double 40 G4double x, G4double y, G4double z, G4int irot, G4String vonly); 40 41 41 void PG4gspos(G4String *tokens) << 42 void PG4gspos(G4String tokens[]) 42 { 43 { 43 // fill the parameter containers 44 // fill the parameter containers 44 G3fillParams(tokens,PTgspos); 45 G3fillParams(tokens,PTgspos); 45 46 46 // interpret the parameters 47 // interpret the parameters 47 G4String name = Spar[0]; 48 G4String name = Spar[0]; 48 G4String moth = Spar[1]; 49 G4String moth = Spar[1]; 49 G4String only = Spar[2]; 50 G4String only = Spar[2]; 50 G4int num = Ipar[0]; 51 G4int num = Ipar[0]; 51 G4int irot = Ipar[1]; 52 G4int irot = Ipar[1]; 52 // all parameters are passed to G4gsxx 53 // all parameters are passed to G4gsxxx methods 53 // in G3 default units 54 // in G3 default units 54 //G4double x = Rpar[0]*cm; 55 //G4double x = Rpar[0]*cm; 55 //G4double y = Rpar[1]*cm; 56 //G4double y = Rpar[1]*cm; 56 //G4double z = Rpar[2]*cm; 57 //G4double z = Rpar[2]*cm; 57 G4double x = Rpar[0]; 58 G4double x = Rpar[0]; 58 G4double y = Rpar[1]; 59 G4double y = Rpar[1]; 59 G4double z = Rpar[2]; 60 G4double z = Rpar[2]; 60 61 61 G4gspos(name, num, moth, x, y, z, irot, on 62 G4gspos(name, num, moth, x, y, z, irot, only); 62 } 63 } 63 64 64 void G4gspos(G4String vname, G4int num, G4Stri 65 void G4gspos(G4String vname, G4int num, G4String vmoth, G4double x, 65 G4double y, G4double z, G4int iro 66 G4double y, G4double z, G4int irot, G4String vonly) 66 { 67 { 67 // find VTEs 68 // find VTEs 68 G3VolTableEntry* vte = G3Vol.GetVTE(vname); 69 G3VolTableEntry* vte = G3Vol.GetVTE(vname); 69 G3VolTableEntry* mvte = G3Vol.GetVTE(vmoth); 70 G3VolTableEntry* mvte = G3Vol.GetVTE(vmoth); 70 71 71 if (vte == 0) { 72 if (vte == 0) { 72 G4String text = "G4gspos: '" + vname + "' << 73 G4Exception("G4gspos: '" + vname + "' has no VolTableEntry"); 73 G4Exception("G4gspos()", "G3toG40017", Fat << 74 return; << 75 } 74 } 76 else if (mvte == 0) { 75 else if (mvte == 0) { 77 G4String text = "G4gspos: '" + vmoth + "' << 76 G4Exception("G4gspos: '" + vmoth + "' has no VolTableEntry"); 78 G4Exception("G4gspos()", "G3toG40018", Fat << 79 return; << 80 } 77 } 81 else { 78 else { 82 if (!vte->HasNegPars()) { 79 if (!vte->HasNegPars()) { 83 // position vector 80 // position vector 84 G4ThreeVector* offset = new G4ThreeVecto 81 G4ThreeVector* offset = new G4ThreeVector(x*cm, y*cm, z*cm); 85 82 86 // create a G3Pos object and add it to t 83 // create a G3Pos object and add it to the vte 87 G3Pos* aG3Pos = new G3Pos(vmoth, num, of 84 G3Pos* aG3Pos = new G3Pos(vmoth, num, offset, irot, vonly); 88 vte->AddG3Pos(aG3Pos); 85 vte->AddG3Pos(aG3Pos); 89 86 90 // loop over all mothers 87 // loop over all mothers 91 for (G4int i=0; i<mvte->GetNoClones(); i 88 for (G4int i=0; i<mvte->GetNoClones(); i++) { 92 // (mvte is retrieved f 89 // (mvte is retrieved from its "master" name 93 // -> there is no need 90 // -> there is no need to call GetMasterClone() 94 G3VolTableEntry* mvteClone = mvte->Get 91 G3VolTableEntry* mvteClone = mvte->GetClone(i); 95 vte->AddMother(mvteClone); 92 vte->AddMother(mvteClone); 96 mvteClone->AddDaughter(vte); 93 mvteClone->AddDaughter(vte); 97 } 94 } 98 } 95 } 99 else { 96 else { 100 // if vte has neg parameters 97 // if vte has neg parameters 101 // a new vte clone copy is created for e 98 // a new vte clone copy is created for each mother (clone copy) 102 // and its parameters are derived from i 99 // and its parameters are derived from it if possible 103 100 104 G4CreateCloneVTE(vte, mvte, vte->GetRpar 101 G4CreateCloneVTE(vte, mvte, vte->GetRpar(), vte->GetNpar(), num, 105 x, y, z, irot, vonly); 102 x, y, z, irot, vonly); 106 } 103 } 107 } 104 } 108 } 105 } 109 106