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