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