Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4PVPlacement 27 // 28 // Class description: 29 // 30 // Class representing a single volume position 31 // to a mother volume. 32 33 // 24.07.95 P.Kent, First non-stub version. 34 // ------------------------------------------- 35 #ifndef G4PVPLACEMENT_HH 36 #define G4PVPLACEMENT_HH 1 37 38 #include "G4VPhysicalVolume.hh" 39 #include "G4Transform3D.hh" 40 41 class G4PVPlacement : public G4VPhysicalVolume 42 { 43 public: 44 45 G4PVPlacement(G4RotationMatrix* pRot, 46 const G4ThreeVector& tlate, 47 G4LogicalVolume* pCurrentLog 48 const G4String& pName, 49 G4LogicalVolume* pMotherLogi 50 G4bool pMany, 51 G4int pCopyNo, 52 G4bool pSurfChk = false); 53 // Initialise a single volume, positione 54 // *pRot and traslated by tlate, relativ 55 // mother volume pMotherLogical. 56 // If pRot=nullptr the volume is unrotat 57 // The physical volume is added to the m 58 // Arguments particular to G4PVPlacement 59 // pMany Currently NOT used. For futur 60 // is meant to be considered an 61 // pCopyNo should be set to 0 for the 62 // pSurfChk if true activates check fo 63 // This is a very natural way of definin 64 // especially useful when creating subde 65 // not placed until a later stage of the 66 67 G4PVPlacement(const G4Transform3D& Transfo 68 G4LogicalVolume* pCurr 69 const G4String& pName, 70 G4LogicalVolume* pMoth 71 G4bool pMany, 72 G4int pCopyNo, 73 G4bool pSurfChk = fals 74 // Additional constructor, which expects 75 // the direct rotation and translation o 76 // The G4Transform3D argument should be 77 // i) First rotating it to align the so 78 // reference of its mother volume *p 79 // ii) Then placing the solid at the loc 80 // with respect to the origin of the 81 // mother volume. 82 // [ This is useful for the people who p 83 // of moving objects in a given refere 84 // All other arguments are the same as f 85 86 G4PVPlacement(G4RotationMatrix* pRot, 87 const G4ThreeVector& tlate, 88 const G4String& pName, 89 G4LogicalVolume* pLogical, 90 G4VPhysicalVolume* pMother, 91 G4bool pMany, 92 G4int pCopyNo, 93 G4bool pSurfChk = false); 94 // A simple variation of the 1st constru 95 // mother volume as a pointer to its phy 96 // logical volume. The effect is exactly 97 98 G4PVPlacement(const G4Transform3D& Transfo 99 const G4String& pName, 100 G4LogicalVolume* pLogi 101 G4VPhysicalVolume* pMo 102 G4bool pMany, 103 G4int pCopyNo, 104 G4bool pSurfChk = fals 105 // Utilises both variations above (from 106 // The effect is the same as for the 2nd 107 108 ~G4PVPlacement() override; 109 // Default destructor. 110 111 inline G4int GetCopyNo() const override { 112 113 void SetCopyNo(G4int CopyNo) override; 114 // Gets and sets the copy number of the 115 116 G4bool CheckOverlaps(G4int res = 1000, G4d 117 G4bool verbose = true 118 // Verifies if the placed volume is over 119 // daughters or with the mother volume. 120 // for the number of points to be genera 121 // A tolerance for the precision of the 122 // by default it is set to maximum preci 123 // Reports a maximum of overlaps errors 124 // Returns true if the volume is overlap 125 126 G4PVPlacement(__void__&); 127 // Fake default constructor for usage re 128 // persistency for clients requiring pre 129 // persistifiable objects. 130 131 G4PVPlacement(const G4PVPlacement&) = dele 132 G4PVPlacement& operator=(const G4PVPlaceme 133 // Copy constructor and assignment opera 134 135 G4bool IsMany() const override; 136 G4bool IsReplicated() const override; 137 G4bool IsParameterised() const override; 138 G4VPVParameterisation* GetParameterisation 139 void GetReplicationData(EAxis& axis, 140 G4int& nReplicas, 141 G4double& width, 142 G4double& offset, 143 G4bool& consuming) 144 G4bool IsRegularStructure() const override 145 G4int GetRegularStructureId() const overri 146 147 EVolume VolumeType() const override; 148 149 private: 150 151 static G4RotationMatrix* NewPtrRotMatrix(c 152 // Auxiliary function for 2nd constructo 153 // Creates a new RotMatrix on the heap ( 154 // its argument into it. 155 156 private: 157 158 G4bool fmany = false; // flag for overla 159 G4bool fallocatedRotM = false; // flag fo 160 G4int fcopyNo = 0; // for identificat 161 }; 162 163 #endif 164