BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
BDSCavityFactory.cc
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) Royal Holloway,
3University of London 2001 - 2022.
4
5This file is part of BDSIM.
6
7BDSIM is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published
9by the Free Software Foundation version 3 of the License.
10
11BDSIM is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#include "BDSCavityFactory.hh"
20#include "BDSCavityFactoryBase.hh"
21#include "BDSCavityFactoryElliptical.hh"
22#include "BDSCavityFactoryPillBox.hh"
23#include "BDSCavityFactoryRectangular.hh"
24#include "BDSCavityInfo.hh"
25#include "BDSCavityType.hh"
26#include "BDSDebug.hh"
27
28#include "globals.hh"
29
31
33{
34 if (!instance)
35 {instance = new BDSCavityFactory();}
36 return instance;
37}
38
40 elliptical(new BDSCavityFactoryElliptical()),
41 rectangular(new BDSCavityFactoryRectangular()),
42 pillBox(new BDSCavityFactoryPillBox())
43{;}
44
46{
47 delete elliptical;
48 delete rectangular;
49 delete pillBox;
50 instance = nullptr;
51}
52
53BDSCavityFactoryBase* BDSCavityFactory::GetAppropriateFactory(const BDSCavityType cavityType)
54{
56 switch (cavityType.underlying())
57 {
58 case BDSCavityType::elliptical:
59 {result = elliptical; break;}
60 case BDSCavityType::rectangular:
61 {result = rectangular; break;}
62 case BDSCavityType::pillbox:
63 {result = pillBox; break;}
64 default:
65 {break;}
66 }
67 return result;
68}
69
71 G4double totalChordLength,
72 const BDSCavityInfo* info,
73 G4Material* vacuumMaterial)
74{
75 BDSCavityFactoryBase* factory = GetAppropriateFactory(info->cavityType);
76
77 return factory->CreateCavity(name, totalChordLength, info, vacuumMaterial);
78}
Abstract base class for rf cavity geometry factories.
BDSCavity * CreateCavity(G4String name, G4double totalChordLength, const BDSCavityInfo *info, G4Material *vacuumMaterial)
Factory for elliptical SRF cavity geometry.
Factory for elliptical SRF cavity geometry.
Factory for elliptical SRF cavity geometry.
Interface to create any RF cavity geometry.
BDSCavityFactoryPillBox * pillBox
Point to factory this main interface owns.
static BDSCavityFactory * instance
Singleton instance.
BDSCavityFactoryRectangular * rectangular
Point to factory this main interface owns.
BDSCavityFactory()
Private constructor as singleton pattern.
static BDSCavityFactory * Instance()
Singleton accessor.
BDSCavityFactoryElliptical * elliptical
Point to factory this main interface owns.
BDSCavity * CreateCavity(const G4String &name, G4double totalChordLength, const BDSCavityInfo *info, G4Material *vacuumMaterial)
Main function to create a piece of cavity geometry.
Holder for all Geometrical information required to create an RF cavity.
BDSCavityType cavityType
Cavity type.
A holder class for an RF cavity piece of geometry.
Definition: BDSCavity.hh:39
type underlying() const
return underlying value (can be used in switch statement)