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 // G4PVDivisionFactory Implementation file << 27 // 26 // 28 // Author: Ivana Hrivnacova, 04.05.2004 (Ivan << 27 // $Id: G4PVDivisionFactory.cc,v 1.2 2006/06/29 18:18:33 gunter Exp $ >> 28 // GEANT4 tag $Name: geant4-08-01-patch-01 $ >> 29 // >> 30 // class G4PVDivisionFactory Implementation file >> 31 // >> 32 // Author: Ivana Hrivnacova, 4.5.2004 (Ivana.Hrivnacova@cern.ch) 29 // ------------------------------------------- 33 // -------------------------------------------------------------------- 30 34 31 #include "G4PVDivisionFactory.hh" 35 #include "G4PVDivisionFactory.hh" 32 #include "G4PVDivision.hh" 36 #include "G4PVDivision.hh" 33 #include "G4VDivisionParameterisation.hh" 37 #include "G4VDivisionParameterisation.hh" 34 38 35 //____________________________________________ 39 //_____________________________________________________________________________ 36 40 >> 41 G4PVDivisionFactory::G4PVDivisionFactory() >> 42 : G4VPVDivisionFactory() >> 43 { >> 44 // Protected singleton constructor. >> 45 // --- >> 46 } >> 47 >> 48 //_____________________________________________________________________________ >> 49 >> 50 G4PVDivisionFactory::~G4PVDivisionFactory() >> 51 { >> 52 } >> 53 >> 54 //_____________________________________________________________________________ >> 55 37 G4PVDivisionFactory* G4PVDivisionFactory::GetI 56 G4PVDivisionFactory* G4PVDivisionFactory::GetInstance() 38 { 57 { 39 if (fgInstance == nullptr) << 58 static G4PVDivisionFactory theFactory; >> 59 if (!fgInstance) 40 { 60 { 41 fgInstance = new G4PVDivisionFactory; << 61 fgInstance = &theFactory; 42 } 62 } 43 return dynamic_cast<G4PVDivisionFactory*>(fg << 63 return &theFactory; 44 } 64 } 45 65 46 //____________________________________________ 66 //_____________________________________________________________________________ 47 67 48 G4VPhysicalVolume* 68 G4VPhysicalVolume* 49 G4PVDivisionFactory::CreatePVDivision(const G4 69 G4PVDivisionFactory::CreatePVDivision(const G4String& pName, 50 G4LogicalVolume* 70 G4LogicalVolume* pLogical, 51 G4LogicalVolume* 71 G4LogicalVolume* pMotherLogical, 52 const EAxis pAxis 72 const EAxis pAxis, 53 const G4int nRepl 73 const G4int nReplicas, 54 const G4double wi 74 const G4double width, 55 const G4double of 75 const G4double offset ) 56 { 76 { 57 // Create division - with number of division 77 // Create division - with number of divisions and width 58 // --- 78 // --- 59 79 60 return new G4PVDivision(pName, pLogical, pMo 80 return new G4PVDivision(pName, pLogical, pMotherLogical, 61 pAxis, nReplicas, wi 81 pAxis, nReplicas, width, offset); 62 } 82 } 63 83 64 //____________________________________________ 84 //_____________________________________________________________________________ 65 85 66 G4VPhysicalVolume* 86 G4VPhysicalVolume* 67 G4PVDivisionFactory::CreatePVDivision(const G4 87 G4PVDivisionFactory::CreatePVDivision(const G4String& pName, 68 G4LogicalVolume* 88 G4LogicalVolume* pLogical, 69 G4LogicalVolume* 89 G4LogicalVolume* pMotherLogical, 70 const EAxis pAxis 90 const EAxis pAxis, 71 const G4int nRepl 91 const G4int nReplicas, 72 const G4double of 92 const G4double offset ) 73 { 93 { 74 // Create division - with number of division 94 // Create division - with number of divisions 75 // --- 95 // --- 76 96 77 return new G4PVDivision(pName, pLogical, pMo 97 return new G4PVDivision(pName, pLogical, pMotherLogical, 78 pAxis, nReplicas, of 98 pAxis, nReplicas, offset); 79 } 99 } 80 100 81 //____________________________________________ 101 //_____________________________________________________________________________ 82 102 83 G4VPhysicalVolume* 103 G4VPhysicalVolume* 84 G4PVDivisionFactory::CreatePVDivision(const G4 104 G4PVDivisionFactory::CreatePVDivision(const G4String& pName, 85 G4LogicalVolume* 105 G4LogicalVolume* pLogical, 86 G4LogicalVolume* 106 G4LogicalVolume* pMotherLogical, 87 const EAxis pAxis 107 const EAxis pAxis, 88 const G4double wi 108 const G4double width, 89 const G4double of 109 const G4double offset ) 90 { 110 { 91 // Create division - with width 111 // Create division - with width 92 // --- 112 // --- 93 113 94 return new G4PVDivision(pName, pLogical, pMo 114 return new G4PVDivision(pName, pLogical, pMotherLogical, 95 pAxis, width, offset 115 pAxis, width, offset); 96 } 116 } 97 117 98 //____________________________________________ 118 //_____________________________________________________________________________ 99 119 100 G4VPhysicalVolume* 120 G4VPhysicalVolume* 101 G4PVDivisionFactory::CreatePVDivision(const G4 121 G4PVDivisionFactory::CreatePVDivision(const G4String& pName, 102 G4LogicalVolume* 122 G4LogicalVolume* pLogical, 103 G4LogicalVolume* 123 G4LogicalVolume* pMotherLogical, 104 const G4VPVParame 124 const G4VPVParameterisation* param) 105 { 125 { 106 // Create division - with parameterisation 126 // Create division - with parameterisation 107 // --- 127 // --- 108 128 109 // Get parameterisation data 129 // Get parameterisation data 110 // 130 // 111 const auto divParam = dynamic_cast<const G4V << 131 const G4VDivisionParameterisation* divParam >> 132 = dynamic_cast<const G4VDivisionParameterisation*>(param); 112 133 113 if (divParam == nullptr) << 134 if (!divParam) 114 { 135 { 115 G4Exception("G4PVDivisionFactory::CreatePV 136 G4Exception("G4PVDivisionFactory::CreatePVDivision()", 116 "GeomDiv0001", FatalException, << 137 "WrongType", FatalException, 117 "Unexpected parameterisation t << 138 "Unexpected parameterisation type !"); 118 return nullptr; << 119 } 139 } 120 else << 121 { << 122 EAxis axis = divParam->GetAxis(); << 123 G4int nofDivisions = divParam->GetNoDiv(); << 124 G4double width = divParam->GetWidth(); << 125 G4double offset = divParam->GetOffset(); << 126 140 127 return new G4PVDivision(pName, pLogical, p << 141 EAxis axis = divParam->GetAxis(); 128 axis, nofDivisions << 142 G4int nofDivisions = divParam->GetNoDiv(); 129 } << 143 G4double width = divParam->GetWidth(); >> 144 G4double offset = divParam->GetOffset(); >> 145 >> 146 return new G4PVDivision(pName, pLogical, pMotherLogical, >> 147 axis, nofDivisions, width, offset); 130 } 148 } 131 149 132 //____________________________________________ 150 //_____________________________________________________________________________ 133 151 134 G4bool G4PVDivisionFactory::IsPVDivision(const 152 G4bool G4PVDivisionFactory::IsPVDivision(const G4VPhysicalVolume* pv) const 135 { 153 { 136 // Returns true if pv is division 154 // Returns true if pv is division 137 // --- 155 // --- 138 156 139 return dynamic_cast<const G4PVDivision*>(pv) << 157 if (dynamic_cast<const G4PVDivision*>(pv)) >> 158 return true; >> 159 else >> 160 return false; 140 } 161 } 141 162 142 163