BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes
BDSMultilayerScreen Class Reference

An accelerator component for diagnostics screens e.g. OTR. Screen inside beam pipe. More...

#include <BDSMultilayerScreen.hh>

Collaboration diagram for BDSMultilayerScreen:
Collaboration graph

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.
 
BDSScreenLayerScreenLayer (G4int layer)
 Get a particular screen layer by index.
 
BDSScreenLayerScreenLayer (const G4String &layerName)
 Get a particular screen layer by name.
 
BDSScreenLayerLastLayer () 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.
 
BDSMultilayerScreenoperator= (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.
 
BDSColourWheelcolourWheel
 
G4LogicalVolume * log
 Geometrical objects:
 
G4PVPlacement * phys
 Geometrical objects:
 
G4VSolid * solid
 Geometrical objects:
 

Detailed Description

An accelerator component for diagnostics screens e.g. OTR. Screen inside beam pipe.

Author
Lawrence Deacon

Definition at line 43 of file BDSMultilayerScreen.hh.

Constructor & Destructor Documentation

◆ BDSMultilayerScreen()

BDSMultilayerScreen::BDSMultilayerScreen ( const G4TwoVector &  xysizeIn,
const G4String &  nameIn 
)

Definition at line 37 of file BDSMultilayerScreen.cc.

◆ ~BDSMultilayerScreen()

BDSMultilayerScreen::~BDSMultilayerScreen ( )
virtual

Definition at line 51 of file BDSMultilayerScreen.cc.

Member Function Documentation

◆ AddScreenLayer() [1/2]

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().

Here is the call graph for this function:

◆ AddScreenLayer() [2/2]

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Build()

void BDSMultilayerScreen::Build ( )

Construct container, compute dimensions then place layers.

Definition at line 100 of file BDSMultilayerScreen.cc.

References BuildMotherVolume(), ComputeDimensions(), and PlaceLayers().

Here is the call graph for this function:

◆ BuildMotherVolume()

void BDSMultilayerScreen::BuildMotherVolume ( )
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeDimensions()

void BDSMultilayerScreen::ComputeDimensions ( )
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().

Here is the caller graph for this function:

◆ GetSize()

const G4ThreeVector & BDSMultilayerScreen::GetSize ( ) const
inline

Full size of screen in x,y,z.

Definition at line 61 of file BDSMultilayerScreen.hh.

References size.

◆ LastLayer()

BDSScreenLayer * BDSMultilayerScreen::LastLayer ( ) const
inline

Get the last layer of the screen.

Definition at line 67 of file BDSMultilayerScreen.hh.

References screenLayers.

Referenced by BDSScreen::AddScreenLayer().

Here is the caller graph for this function:

◆ NLayers()

G4int BDSMultilayerScreen::NLayers ( ) const
inline

Size of the screen.

Definition at line 69 of file BDSMultilayerScreen.hh.

References screenLayers.

◆ Place()

void BDSMultilayerScreen::Place ( G4RotationMatrix *  rot,
const G4ThreeVector &  pos,
G4LogicalVolume *  motherVol 
)
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().

Here is the call graph for this function:

◆ PlaceLayers()

void BDSMultilayerScreen::PlaceLayers ( )
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().

Here is the caller graph for this function:

◆ ReflectiveSurface()

void BDSMultilayerScreen::ReflectiveSurface ( G4int  layer1,
G4int  layer2 
)

Construct a reflective surface between two layers.

Definition at line 122 of file BDSMultilayerScreen.cc.

References ScreenLayer().

Here is the call graph for this function:

◆ RoughSurface()

void BDSMultilayerScreen::RoughSurface ( G4int  layer1,
G4int  layer2 
)

Construct a rough surface between two layers.

Definition at line 154 of file BDSMultilayerScreen.cc.

References ScreenLayer().

Here is the call graph for this function:

◆ ScreenLayer() [1/2]

BDSScreenLayer * BDSMultilayerScreen::ScreenLayer ( const G4String &  layerName)

Get a particular screen layer by name.

Definition at line 91 of file BDSMultilayerScreen.cc.

References screenLayerNames.

◆ ScreenLayer() [2/2]

BDSScreenLayer * BDSMultilayerScreen::ScreenLayer ( G4int  layer)
inline

Get a particular screen layer by index.

Definition at line 63 of file BDSMultilayerScreen.hh.

References screenLayers.

Referenced by ReflectiveSurface(), and RoughSurface().

Here is the caller graph for this function:

◆ SetPhys()

void BDSMultilayerScreen::SetPhys ( G4PVPlacement *  physIn)
inline

Set a physical placement to member variable.

Definition at line 72 of file BDSMultilayerScreen.hh.

References phys.

Referenced by Place().

Here is the caller graph for this function:

Field Documentation

◆ colourWheel

BDSColourWheel* BDSMultilayerScreen::colourWheel
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().

◆ log

G4LogicalVolume* BDSMultilayerScreen::log
private

Geometrical objects:

Definition at line 107 of file BDSMultilayerScreen.hh.

Referenced by BuildMotherVolume(), Place(), and PlaceLayers().

◆ name

G4String BDSMultilayerScreen::name
private

Name of multilayer screen.

Definition at line 103 of file BDSMultilayerScreen.hh.

Referenced by BuildMotherVolume(), and ComputeDimensions().

◆ phys

G4PVPlacement* BDSMultilayerScreen::phys
private

Geometrical objects:

Definition at line 108 of file BDSMultilayerScreen.hh.

Referenced by SetPhys().

◆ screenLayerNames

std::map<G4String, BDSScreenLayer*> BDSMultilayerScreen::screenLayerNames
private

Map of names for looking up.

Definition at line 112 of file BDSMultilayerScreen.hh.

Referenced by AddScreenLayer(), and ScreenLayer().

◆ screenLayers

std::vector<BDSScreenLayer*> BDSMultilayerScreen::screenLayers
private

Main storage of all layers.

Definition at line 111 of file BDSMultilayerScreen.hh.

Referenced by AddScreenLayer(), ComputeDimensions(), LastLayer(), NLayers(), PlaceLayers(), and ScreenLayer().

◆ screenLayerZPos

std::vector<G4double> BDSMultilayerScreen::screenLayerZPos
private

Cache of calculated z locations for layers.

Definition at line 113 of file BDSMultilayerScreen.hh.

Referenced by ComputeDimensions(), and PlaceLayers().

◆ size

G4ThreeVector BDSMultilayerScreen::size
private

Extent.

Definition at line 104 of file BDSMultilayerScreen.hh.

Referenced by BuildMotherVolume(), ComputeDimensions(), and GetSize().

◆ solid

G4VSolid* BDSMultilayerScreen::solid
private

Geometrical objects:

Definition at line 109 of file BDSMultilayerScreen.hh.

Referenced by BuildMotherVolume().

◆ xysize

G4TwoVector BDSMultilayerScreen::xysize
private

X,Y size of multilayer screen.

Definition at line 102 of file BDSMultilayerScreen.hh.

Referenced by AddScreenLayer().


The documentation for this class was generated from the following files: