4 #include "KVFAZIABlock.h"
6 #include "KVMaterial.h"
76 TVector3 placement(2.231625, 2.230525, 99.950350);
85 TVector3 Q2(-placement.
X(), placement.
Y(), placement.
Z());
101 for (
Int_t nq = 1; nq <= 4; nq += 1) {
103 Centre.
SetXYZ(placement.
X()*tx[nq - 1], placement.
Y()*ty[nq - 1], placement.
Z());
126 std::vector<TVector3> coins;
127 double sep = separation / 2.;
130 coins.emplace_back(-
sep,
sep + front_side, -depth / 2);
131 coins.emplace_back(
sep,
sep + front_side, -depth / 2);
132 coins.emplace_back(
sep, -
sep - front_side, -depth / 2);
133 coins.emplace_back(-
sep, -
sep - front_side, -depth / 2);
140 for (
int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
141 std::vector<double> coords;
143 for (
auto&
vec : coins) {
144 coords.push_back(
vec.X());
145 coords.push_back(
vec.Y());
147 for (std::vector<TVector3>::iterator
vec = coins.begin();
vec != coins.end(); ++
vec) {
148 coords.push_back(
vec->X());
149 coords.push_back(
vec->Y());
171 std::vector<TVector3> coins;
172 double sep = separation / 2.;
175 coins.emplace_back(-
sep - front_side,
sep, -depth / 2);
176 coins.emplace_back(-
sep,
sep, -depth / 2);
177 coins.emplace_back(-
sep, -
sep, -depth / 2);
178 coins.emplace_back(-
sep - front_side, -
sep, -depth / 2);
185 for (
int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
186 std::vector<double> coords;
188 for (
auto&
vec : coins) {
189 coords.push_back(
vec.X());
190 coords.push_back(
vec.Y());
192 for (std::vector<TVector3>::iterator
vec = coins.begin();
vec != coins.end(); ++
vec) {
193 coords.push_back(
vec->X());
194 coords.push_back(
vec->Y());
216 std::vector<TVector3> coins;
217 double sep = separation / 2.;
220 coins.emplace_back(
sep,
sep, -depth / 2);
221 coins.emplace_back(
sep + front_side,
sep, -depth / 2);
222 coins.emplace_back(
sep + front_side, -
sep, -depth / 2);
223 coins.emplace_back(
sep, -
sep, -depth / 2);
230 for (
int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
231 std::vector<double> coords;
233 for (
auto&
vec : coins) {
234 coords.push_back(
vec.X());
235 coords.push_back(
vec.Y());
237 for (std::vector<TVector3>::iterator
vec = coins.begin();
vec != coins.end(); ++
vec) {
238 coords.push_back(
vec->X());
239 coords.push_back(
vec->Y());
259 std::vector<TVector3> coins;
260 double sep = separation / 2.;
265 coins.emplace_back(-
sep - front_side,
sep + front_side, -depth / 2);
266 coins.emplace_back(-
sep,
sep + front_side, -depth / 2);
267 coins.emplace_back(-
sep,
sep, -depth / 2);
268 coins.emplace_back(-
sep - front_side,
sep, -depth / 2);
270 coins.push_back(
TVector3(-
sep - front_side,
sep + front_side, -depth / 2));
279 coins.emplace_back(
sep,
sep + front_side, -depth / 2);
280 coins.emplace_back(
sep + front_side,
sep + front_side, -depth / 2);
281 coins.emplace_back(
sep + front_side,
sep, -depth / 2);
282 coins.emplace_back(
sep,
sep, -depth / 2);
285 coins.push_back(
TVector3(
sep + front_side,
sep + front_side, -depth / 2));
293 coins.emplace_back(
sep, -
sep, -depth / 2);
294 coins.emplace_back(
sep + front_side, -
sep, -depth / 2);
295 coins.emplace_back(
sep + front_side, -
sep - front_side, -depth / 2);
296 coins.emplace_back(
sep, -
sep - front_side, -depth / 2);
300 coins.push_back(
TVector3(
sep + front_side, -
sep - front_side, -depth / 2));
307 coins.emplace_back(-
sep - front_side, -
sep, -depth / 2);
308 coins.emplace_back(-
sep, -
sep, -depth / 2);
309 coins.emplace_back(-
sep, -
sep - front_side, -depth / 2);
310 coins.emplace_back(-
sep - front_side, -
sep - front_side, -depth / 2);
315 coins.push_back(
TVector3(-
sep - front_side, -
sep - front_side, -depth / 2));
318 for (
int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
319 std::vector<double> coords;
321 for (
auto&
vec : coins) {
322 coords.push_back(
vec.X());
323 coords.push_back(
vec.Y());
325 for (std::vector<TVector3>::iterator
vec = coins.begin();
vec != coins.end(); ++
vec) {
326 coords.push_back(
vec->X());
327 coords.push_back(
vec->Y());
349 0.5 * ergal_edge_depth);
358 ergal_frame->
AddNode(erg_b, 1);
403 si300frame->
AddNode(ergal_frame_300, 1);
417 si500frame->
AddNode(ergal_frame_500, 1);
441 for (
int tel_num = 1; tel_num <= 4; ++tel_num) {
R__EXTERN TGeoManager * gGeoManager
char * Form(const char *fmt,...)
Standard geometry of 16-telescope FAZIA block.
TGeoVolume * MakeLeftCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
Part of aluminium frame which holds the CsI.
std::vector< double > GetCoordsCSI(int tel_num, double front_side, double separation, double distPlane, double depth)
virtual void Build()
Set default dimensions for all parts of geometry.
TGeoVolume * MakeCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
Part of aluminium frame which holds the CsI.
Double_t GetNominalDistanceTargetBlockCentre(double dist_SI1=100.) const
double centre_cross_thick
TGeoVolume * MakeErgalFrame(double frame_depth, double ergal_edge_depth)
double full_length_quartet
TGeoVolume * MakeRightCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
Part of aluminium frame which holds the CsI.
TGeoVolume * MakeQuartet()
static TGeoHMatrix * GetFAZIAVolumePositioningMatrix(Double_t distance, Double_t theta, Double_t phi, TGeoTranslation *postTrans=nullptr)
Description of physical materials used to construct detectors & targets; interface to range tables.
virtual TGeoMedium * GetGeoMedium(const Char_t *="")
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=nullptr)
TGeoVolume * MakeBox(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz)
TGeoMedium * GetMedium(const char *medium) const
TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="") override
virtual void SetMedium(TGeoMedium *medium)
virtual void SetName(const char *name)
TObject * Last() const override
void SetXYZ(Double_t x, Double_t y, Double_t z)
T Mag(const SVector< T, D > &rhs)
constexpr Double_t RadToDeg()