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