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