BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
|
An accelerator component for diagnostics screens e.g. OTR. Screen inside beam pipe. More...
#include <BDSMultilayerScreen.hh>
Public Member Functions | |
BDSMultilayerScreen (const G4TwoVector &xysizeIn, const G4String &nameIn) | |
void | AddScreenLayer (G4double thickness, G4String material, G4String name, G4int isSampler=0, G4double grooveWidth=0, G4double grooveSpatialFrequency=0) |
Construct and add a screen layer. | |
void | AddScreenLayer (BDSScreenLayer *layer, G4int isSampler=0) |
Add a premade screen layer - retains ownership of layer. | |
const G4ThreeVector & | GetSize () const |
Full size of screen in x,y,z. | |
BDSScreenLayer * | ScreenLayer (G4int layer) |
Get a particular screen layer by index. | |
BDSScreenLayer * | ScreenLayer (const G4String &layerName) |
Get a particular screen layer by name. | |
BDSScreenLayer * | LastLayer () const |
Get the last layer of the screen. | |
G4int | NLayers () const |
Size of the screen. | |
void | SetPhys (G4PVPlacement *physIn) |
Set a physical placement to member variable. | |
void | Build () |
Construct container, compute dimensions then place layers. | |
virtual void | Place (G4RotationMatrix *rot, const G4ThreeVector &pos, G4LogicalVolume *motherVol) |
Place the member logical volume 'log' with a given transform in a given mother volume. | |
void | ReflectiveSurface (G4int layer1, G4int layer2) |
Construct a reflective surface between two layers. | |
void | RoughSurface (G4int layer1, G4int layer2) |
Construct a rough surface between two layers. | |
Private Member Functions | |
void | ComputeDimensions () |
void | BuildMotherVolume () |
Build a container volume. | |
void | PlaceLayers () |
Place each layer in order in the container volume. | |
BDSMultilayerScreen ()=delete | |
Private default constructor to force use of provided one. | |
BDSMultilayerScreen (const BDSMultilayerScreen &)=delete | |
Private default constructor to force use of provided one. | |
BDSMultilayerScreen & | operator= (const BDSMultilayerScreen &)=delete |
Private default constructor to force use of provided one. | |
Private Attributes | |
G4TwoVector | xysize |
X,Y size of multilayer screen. | |
G4String | name |
Name of multilayer screen. | |
G4ThreeVector | size |
Extent. | |
std::vector< BDSScreenLayer * > | screenLayers |
Main storage of all layers. | |
std::map< G4String, BDSScreenLayer * > | screenLayerNames |
Map of names for looking up. | |
std::vector< G4double > | screenLayerZPos |
Cache of calculated z locations for layers. | |
BDSColourWheel * | colourWheel |
G4LogicalVolume * | log |
Geometrical objects: | |
G4PVPlacement * | phys |
Geometrical objects: | |
G4VSolid * | solid |
Geometrical objects: | |
An accelerator component for diagnostics screens e.g. OTR. Screen inside beam pipe.
Definition at line 43 of file BDSMultilayerScreen.hh.
BDSMultilayerScreen::BDSMultilayerScreen | ( | const G4TwoVector & | xysizeIn, |
const G4String & | nameIn | ||
) |
Definition at line 37 of file BDSMultilayerScreen.cc.
|
virtual |
Definition at line 51 of file BDSMultilayerScreen.cc.
void BDSMultilayerScreen::AddScreenLayer | ( | BDSScreenLayer * | layer, |
G4int | isSampler = 0 |
||
) |
Add a premade screen layer - retains ownership of layer.
Definition at line 81 of file BDSMultilayerScreen.cc.
References BDSScreenLayer::AssignSampler(), BDSColourWheel::Colour(), colourWheel, BDSScreenLayer::GetName(), screenLayerNames, screenLayers, and BDSColourWheel::Spin().
void BDSMultilayerScreen::AddScreenLayer | ( | G4double | thickness, |
G4String | material, | ||
G4String | name, | ||
G4int | isSampler = 0 , |
||
G4double | grooveWidth = 0 , |
||
G4double | grooveSpatialFrequency = 0 |
||
) |
Construct and add a screen layer.
Definition at line 58 of file BDSMultilayerScreen.cc.
References AddScreenLayer(), BDSSamplerRegistry::Instance(), BDSSamplerRegistry::NumberOfExistingSamplers(), and xysize.
Referenced by BDSScreen::AddScreenLayer(), and AddScreenLayer().
void BDSMultilayerScreen::Build | ( | ) |
Construct container, compute dimensions then place layers.
Definition at line 100 of file BDSMultilayerScreen.cc.
References BuildMotherVolume(), ComputeDimensions(), and PlaceLayers().
|
private |
Build a container volume.
Definition at line 200 of file BDSMultilayerScreen.cc.
References BDSMaterials::GetMaterial(), BDSGlobalConstants::Instance(), BDSMaterials::Instance(), log, name, size, and solid.
Referenced by Build().
|
private |
Calculate the extent of the multilayer screen given all the layers.
Definition at line 178 of file BDSMultilayerScreen.cc.
References name, screenLayers, screenLayerZPos, and size.
Referenced by Build().
|
inline |
Full size of screen in x,y,z.
Definition at line 61 of file BDSMultilayerScreen.hh.
References size.
|
inline |
Get the last layer of the screen.
Definition at line 67 of file BDSMultilayerScreen.hh.
References screenLayers.
Referenced by BDSScreen::AddScreenLayer().
|
inline |
|
virtual |
Place the member logical volume 'log' with a given transform in a given mother volume.
Definition at line 107 of file BDSMultilayerScreen.cc.
References log, and SetPhys().
|
private |
Place each layer in order in the container volume.
Definition at line 220 of file BDSMultilayerScreen.cc.
References log, screenLayers, and screenLayerZPos.
Referenced by Build().
void BDSMultilayerScreen::ReflectiveSurface | ( | G4int | layer1, |
G4int | layer2 | ||
) |
Construct a reflective surface between two layers.
Definition at line 122 of file BDSMultilayerScreen.cc.
References ScreenLayer().
void BDSMultilayerScreen::RoughSurface | ( | G4int | layer1, |
G4int | layer2 | ||
) |
Construct a rough surface between two layers.
Definition at line 154 of file BDSMultilayerScreen.cc.
References ScreenLayer().
BDSScreenLayer * BDSMultilayerScreen::ScreenLayer | ( | const G4String & | layerName | ) |
Get a particular screen layer by name.
Definition at line 91 of file BDSMultilayerScreen.cc.
References screenLayerNames.
|
inline |
Get a particular screen layer by index.
Definition at line 63 of file BDSMultilayerScreen.hh.
References screenLayers.
Referenced by ReflectiveSurface(), and RoughSurface().
|
inline |
Set a physical placement to member variable.
Definition at line 72 of file BDSMultilayerScreen.hh.
References phys.
Referenced by Place().
|
private |
Colour wheel that iterately supplies different colours - allows each layer to be clearly visualised.
Definition at line 117 of file BDSMultilayerScreen.hh.
Referenced by AddScreenLayer().
|
private |
Geometrical objects:
Definition at line 107 of file BDSMultilayerScreen.hh.
Referenced by BuildMotherVolume(), Place(), and PlaceLayers().
|
private |
Name of multilayer screen.
Definition at line 103 of file BDSMultilayerScreen.hh.
Referenced by BuildMotherVolume(), and ComputeDimensions().
|
private |
Geometrical objects:
Definition at line 108 of file BDSMultilayerScreen.hh.
Referenced by SetPhys().
|
private |
Map of names for looking up.
Definition at line 112 of file BDSMultilayerScreen.hh.
Referenced by AddScreenLayer(), and ScreenLayer().
|
private |
Main storage of all layers.
Definition at line 111 of file BDSMultilayerScreen.hh.
Referenced by AddScreenLayer(), ComputeDimensions(), LastLayer(), NLayers(), PlaceLayers(), and ScreenLayer().
|
private |
Cache of calculated z locations for layers.
Definition at line 113 of file BDSMultilayerScreen.hh.
Referenced by ComputeDimensions(), and PlaceLayers().
|
private |
Extent.
Definition at line 104 of file BDSMultilayerScreen.hh.
Referenced by BuildMotherVolume(), ComputeDimensions(), and GetSize().
|
private |
Geometrical objects:
Definition at line 109 of file BDSMultilayerScreen.hh.
Referenced by BuildMotherVolume().
|
private |
X,Y size of multilayer screen.
Definition at line 102 of file BDSMultilayerScreen.hh.
Referenced by AddScreenLayer().