19#ifndef BDSCRYSTALFACTORY_H
20#define BDSCRYSTALFACTORY_H
22#include "BDSCrystal.hh"
23#include "BDSCrystalInfo.hh"
24#include "BDSFactoryBase.hh"
27#include "G4RotationMatrix.hh"
91 G4double& sweepAngle)
const;
95 G4double xBendingRadius,
102 G4VSolid* crystalSolid;
103 G4LogicalVolume* crystalLV;
104 G4ThreeVector placementOffset;
105 G4RotationMatrix* placementRotation;
Abstract base class for crystal factory classes.
void CommonConstruction(const G4String &nameIn, const BDSCrystalInfo *recipe)
Common construction tasks.
const G4int nPoints
Number of points to split torus into.
void CalculateSolidAngles(G4double bendingAngle, G4double &startAngle, G4double &sweepAngle) const
const G4double maxStepFactor
Fraction of length for maximum step in user limits.
BDSCrystal * CreateCrystalBox(const G4String &nameIn, const BDSCrystalInfo *recipe)
Create box geometry for a crystal.
BDSCrystal * CreateCrystalCylinder(const G4String &nameIn, const BDSCrystalInfo *recipe)
Create cylinder geometry for a crystal.
BDSExtent CalculateExtents(G4double bendingAngle, G4double xBendingRadius, G4double xThickness, const BDSCrystalInfo *recipe) const
Produce an extent for a curved crystal.
BDSCrystal * CreateCrystalTorus(const G4String &nameIn, const BDSCrystalInfo *recipe)
Create torus geometry for a cyrstal.
BDSCrystal * CreateCrystal(const G4String &nameIn, const BDSCrystalInfo *recipe)
Main interface to create a crystal.
BDSCrystal * BuildCrystalObject(const BDSCrystalInfo *recipe, const BDSExtent &extent)
build beampipe and register logical volumes
void SetUserLimits(G4double length)
Set user limits.
void SetVisAttributes()
Set visual attributes.
Holder for all information required to create a crystal.
An object for both a crystal from a factory.
Holder for +- extents in 3 dimensions.
Common temporary storage for all factories no matter what geometry.