63{
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
75
76
77 #if defined BUILDVP1LIGHT
78
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
84 const GeoMaterial *air = materialManager->
getMaterial(
"std::Air");
85 const GeoMaterial *poly = materialManager->
getMaterial(
"std::Polystyrene");
86 #endif
87
88
89
90
91 const GeoBox *toyBox = new GeoBox(800*SYSTEM_OF_UNITS::cm,800*SYSTEM_OF_UNITS::cm, 1000*SYSTEM_OF_UNITS::cm);
92
93
94
95 const GeoLogVol *toyLog = new GeoLogVol("ToyLog", toyBox, air);
96
97
98
99 GeoPhysVol *toyPhys = new GeoPhysVol(toyLog);
100
101
102
104
105
106
107
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
113
114 const GeoLogVol *ringLog = new GeoLogVol("RingLog", ringTube, air);
115
116
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);
126 }
127
128
129
130
131
132
133
134
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;
150 GENFUNCTION
f = 360*SYSTEM_OF_UNITS::deg/NPLATES*
i;
151 GENFUNCTION
g =
sin(4*f);
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
158
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
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