ATLAS Offline Software
Loading...
Searching...
No Matches
ToyDetectorFactory Class Reference

#include <ToyDetectorFactory.h>

Inheritance diagram for ToyDetectorFactory:
Collaboration diagram for ToyDetectorFactory:

Public Member Functions

 ToyDetectorFactory (StoreGateSvc *pDetStore)
 ~ToyDetectorFactory ()
virtual void create (GeoPhysVol *world)
virtual const ToyDetectorManagergetDetectorManager () const

Private Member Functions

const ToyDetectorFactoryoperator= (const ToyDetectorFactory &right)
 ToyDetectorFactory (const ToyDetectorFactory &right)

Private Attributes

ToyDetectorManagerm_detectorManager
StoreGateSvcm_detectorStore

Detailed Description

Definition at line 10 of file ToyDetectorFactory.h.

Constructor & Destructor Documentation

◆ ToyDetectorFactory() [1/2]

ToyDetectorFactory::ToyDetectorFactory ( StoreGateSvc * pDetStore)

Definition at line 47 of file ToyDetectorFactory.cxx.

48 :m_detectorManager(NULL),
49 m_detectorStore(detStore)
50{
51}
StoreGateSvc * m_detectorStore
ToyDetectorManager * m_detectorManager

◆ ~ToyDetectorFactory()

ToyDetectorFactory::~ToyDetectorFactory ( )

Definition at line 54 of file ToyDetectorFactory.cxx.

55{
56
57}

◆ ToyDetectorFactory() [2/2]

ToyDetectorFactory::ToyDetectorFactory ( const ToyDetectorFactory & right)
private

Member Function Documentation

◆ create()

void ToyDetectorFactory::create ( GeoPhysVol * world)
virtual

Definition at line 62 of file ToyDetectorFactory.cxx.

63{
64 m_detectorManager=new ToyDetectorManager();
65
66 #ifndef BUILDVP1LIGHT
67 StoredMaterialManager* materialManager = nullptr;
68 if (StatusCode::SUCCESS != m_detectorStore->retrieve(materialManager, std::string("MATERIALS"))) {
69 return;
70 }
71 #endif
72
73 //-----------------------------------------------------------------------------------//
74 // Get the materials that we shall use. //
75 // ----------------------------------------------------------------------------------//
76
77 #if defined BUILDVP1LIGHT
78 // Bogus densities.
79 double densityOfAir=0.1, densityOfPolystyrene=0.2;
80 const GeoMaterial *air = new GeoMaterial("Air Toy",densityOfAir);
81 const GeoMaterial *poly = new GeoMaterial("std::Polystyrene",densityOfPolystyrene);
82 #else
83 // Read from database.
84 const GeoMaterial *air = materialManager->getMaterial("std::Air");
85 const GeoMaterial *poly = materialManager->getMaterial("std::Polystyrene");
86 #endif
87
88 //-----------------------------------------------------------------------------------//
89 // Next make the box that describes the shape of the toy volume: //
90 // //
91 const GeoBox *toyBox = new GeoBox(800*SYSTEM_OF_UNITS::cm,800*SYSTEM_OF_UNITS::cm, 1000*SYSTEM_OF_UNITS::cm); //
92 // //
93 // Bundle this with a material into a logical volume: //
94 // //
95 const GeoLogVol *toyLog = new GeoLogVol("ToyLog", toyBox, air); //
96 // //
97 // ..And create a physical volume: //
98 // //
99 GeoPhysVol *toyPhys = new GeoPhysVol(toyLog); //
100 // //
101 // Add this to the list of top level physical volumes: //
102 // //
103 m_detectorManager->addTreeTop(toyPhys); //
104 //-----------------------------------------------------------------------------------//
105
106 //-----------------------------------------------------------------------------------//
107 // Daughters //
108 // //
109 // //
110 const GeoTube *ringTube = new GeoTube(500*SYSTEM_OF_UNITS::cm, 1000*SYSTEM_OF_UNITS::cm, 5.0*SYSTEM_OF_UNITS::cm); //
111 // //
112 // Bundle this with a material into a logical volume: //
113 // //
114 const GeoLogVol *ringLog = new GeoLogVol("RingLog", ringTube, air); //
115 // //
116 // Make 100 of these within the volume of the toy: //
117 // //
118 GeoSerialDenominator *ringName = new GeoSerialDenominator("RING"); //
119 toyPhys->add(ringName); //
120 for (int i=0;i<100;i++) { //
121 GeoFullPhysVol *ringPhys = new GeoFullPhysVol(ringLog); //
122 GeoAlignableTransform *xform = new GeoAlignableTransform(GeoTrf::TranslateZ3D((i-50)*20*SYSTEM_OF_UNITS::cm));
123 toyPhys->add(xform); //
124 toyPhys->add(ringPhys); //
125 m_detectorManager->addCentralScrutinizer(new CentralScrutinizer(ringPhys)); //
126 } //
127 //-----------------------------------------------------------------------------------//
128
129
130 //-----------------------------------------------------------------------------------//
131 // Now, in addition to active daughters add some passive material. This is done //
132 // here using the "SerialTransformer," our way of parameterizing volumes. It //
133 // does not need to be done this way.. but we want to provide an example of //
134 // parametrizations in the Toy //
135 //-----------------------------------------------------------------------------------//
136
137 GeoBox *sPass = new GeoBox(5.0*SYSTEM_OF_UNITS::cm, 30*SYSTEM_OF_UNITS::cm, 30*SYSTEM_OF_UNITS::cm);
138 GeoLogVol *lPass = new GeoLogVol("Passive", sPass, poly);
139 GeoPhysVol *pPass = new GeoPhysVol(lPass);
140
141 GeoBox *sIPass = new GeoBox(4*SYSTEM_OF_UNITS::cm, 25*SYSTEM_OF_UNITS::cm, 25*SYSTEM_OF_UNITS::cm);
142 GeoLogVol *lIPass = new GeoLogVol("InnerPassive", sIPass, air);
143 GeoPhysVol *pIPass = new GeoPhysVol(lIPass);
144
145 pPass->add(pIPass);
146
147 const unsigned int NPLATES=100;
148 Variable i;
149 Sin sin;
150 GENFUNCTION f = 360*SYSTEM_OF_UNITS::deg/NPLATES*i;
151 GENFUNCTION g = sin(4*f);
152 GENFUNCTION h = -g;
153 TRANSFUNCTION t1 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(1100*SYSTEM_OF_UNITS::cm)*Pow(GeoTrf::TranslateZ3D(800*SYSTEM_OF_UNITS::cm),g);
154 TRANSFUNCTION t2 = Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(1100*SYSTEM_OF_UNITS::cm)*Pow(GeoTrf::TranslateZ3D(800*SYSTEM_OF_UNITS::cm),h);
155
156 //-----------------------------------------------------------------------------------//
157 // Inside, by the way, the serial transformer will evaluate the functions: //
158 // HepTransform3D xf = t1(i), for i=1,NPLATES.... //
159 //-----------------------------------------------------------------------------------//
160
161 GeoSerialDenominator *pass1Name = new GeoSerialDenominator("PASSIVE-1-");
162 GeoSerialTransformer *s1 = new GeoSerialTransformer(pPass,&t1, NPLATES);
163 toyPhys->add(pass1Name);
164 toyPhys->add(s1);
165
166 GeoSerialDenominator *pass2Name = new GeoSerialDenominator("PASSIVE-2-");
167 GeoSerialTransformer *s2 = new GeoSerialTransformer(pPass,&t2, NPLATES);
168 toyPhys->add(pass2Name);
169 toyPhys->add(s2);
170
171
172 //------------------------------------------------------------------------------------//
173 // Now insert all of this into the world... //
174 GeoNameTag *tag = new GeoNameTag("Toy"); //
175 world->add(tag); //
176 world->add(toyPhys); //
177 //------------------------------------------------------------------------------------//
178}
virtual const GeoMaterial * getMaterial(const std::string &name)=0
std::vector< ALFA_RawDataContainer_p1 > t2
std::vector< ALFA_RawDataCollection_p1 > t1

◆ getDetectorManager()

const ToyDetectorManager * ToyDetectorFactory::getDetectorManager ( ) const
virtual

Definition at line 180 of file ToyDetectorFactory.cxx.

181{
182 return m_detectorManager;
183}

◆ operator=()

const ToyDetectorFactory & ToyDetectorFactory::operator= ( const ToyDetectorFactory & right)
private

Member Data Documentation

◆ m_detectorManager

ToyDetectorManager* ToyDetectorFactory::m_detectorManager
private

Definition at line 33 of file ToyDetectorFactory.h.

◆ m_detectorStore

StoreGateSvc* ToyDetectorFactory::m_detectorStore
private

Definition at line 35 of file ToyDetectorFactory.h.


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