44unsigned int G4AssemblyVolume::fsInstanceCounter = 0;
73 unsigned int howmany = fTriplets.size();
76 for(
unsigned int i = 0; i < howmany; i++ )
79 if( pRotToClean != 0 )
87 howmany = fPVStore.size();
90 for(
unsigned int j = 0; j < howmany; j++ )
115 if( pRotation != 0 ) { *toStore = *pRotation; }
118 fTriplets.push_back( toAdd );
136 G4bool isReflection =
false;
137 if (scale(0,0)*scale(1,1)*scale(2,2) < 0.) { isReflection =
true; }
140 fTriplets.push_back( toAdd );
152 if( pRotation != 0 ) { *toStore = *pRotation; }
155 fTriplets.push_back( toAdd );
175 G4bool isReflection =
false;
176 if (scale(0,0)*scale(1,1)*scale(2,2) < 0.) { isReflection =
true; }
179 fTriplets.push_back( toAdd );
226 unsigned int numberOfDaughters;
228 if( copyNumBase == 0 )
234 numberOfDaughters = copyNumBase;
243 std::vector<G4AssemblyTriplet> triplets = pAssembly->fTriplets;
245 for(
unsigned int i = 0; i < triplets.size(); i++ )
248 triplets[i].GetTranslation() );
249 if ( triplets[i].IsReflection() ) { Ta = Ta *
G4ReflectZ3D(); }
253 if ( triplets[i].GetVolume() )
265 std::stringstream pvName;
271 << triplets[i].GetVolume()->GetName().c_str()
282 pvName.str().c_str(),
283 triplets[i].GetVolume(),
286 numberOfDaughters + i,
291 fPVStore.push_back( pvPlaced.first );
292 if ( pvPlaced.second ) { fPVStore.push_back( pvPlaced.second ); }
294 else if ( triplets[i].GetAssembly() )
299 Tfinal, i*100+copyNumBase, surfCheck );
305 "Triplet has no volume and no assembly");
324 if( pRotationInMother == 0 )
333 translationInMother );
334 MakeImprint(
this, pMotherLV, transform, copyNumBase, surfCheck);
348 MakeImprint(
this, pMotherLV, transformation, copyNumBase, surfCheck);
353 return G4AssemblyVolume::fsInstanceCounter;
358 G4AssemblyVolume::fsInstanceCounter = value;
363 G4AssemblyVolume::fsInstanceCounter++;
368 G4AssemblyVolume::fsInstanceCounter--;
std::pair< G4VPhysicalVolume *, G4VPhysicalVolume * > G4PhysicalVolumesPair
CLHEP::HepRotation G4RotationMatrix
static DLL_API const HepRotation IDENTITY
unsigned int GetImprintsCount() const
void MakeImprint(G4LogicalVolume *pMotherLV, G4ThreeVector &translationInMother, G4RotationMatrix *pRotationInMother, G4int copyNumBase=0, G4bool surfCheck=false)
void InstanceCountMinus()
void SetAssemblyID(unsigned int value)
void AddPlacedAssembly(G4AssemblyVolume *pAssembly, G4Transform3D &transformation)
unsigned int GetAssemblyID() const
void SetInstanceCount(unsigned int value)
void AddPlacedVolume(G4LogicalVolume *pPlacedVolume, G4ThreeVector &translation, G4RotationMatrix *rotation)
void SetImprintsCount(unsigned int value)
unsigned int GetInstanceCount() const
G4int GetNoDaughters() const
static G4ReflectionFactory * Instance()
G4PhysicalVolumesPair Place(const G4Transform3D &transform3D, const G4String &name, G4LogicalVolume *LV, G4LogicalVolume *motherLV, G4bool isMany, G4int copyNo, G4bool surfCheck=false)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)