4#include "KVFAZIABlock.h"
8#include "KVMultiDetArray.h"
36 centre_cross_thick = 0.12;
39 si_centre = 0.5 * centre_cross_thick + 0.5 * si_holder_side;
40 front_frame_depth = 0.3;
41 frame_depth_300 = 0.273;
42 frame_depth_500 = 0.24;
43 frame_edge_depth = 0.16;
44 si300_position = -0.5 * frame_depth_300 + frame_edge_depth;
45 si500_position = -0.5 * frame_depth_500 + frame_edge_depth;
46 full_width = front_frame_depth + frame_depth_300 + frame_depth_500;
49 full_length_quartet = full_width + dist_si2_csi + csi_depth;
52 dist_csi_sarco = 4.25;
56 sarco_epaisseur = 0.4;
69 TVector3 placement(2.231625, 2.230525, 99.950350);
74 double trans_z = GetNominalDistanceTargetBlockCentre();
78 TVector3 Q2(-placement.
X(), placement.
Y(), placement.
Z());
80 Q1.
SetMag(100 - front_frame_depth - frame_edge_depth);
81 Q2.
SetMag(100 - front_frame_depth - frame_edge_depth);
82 fTotSidWBld = frame_side + (Q1 - Q2).
Mag();
94 for (
Int_t nq = 1; nq <= 4; nq += 1) {
96 Centre.
SetXYZ(placement.
X()*tx[nq - 1], placement.
Y()*ty[nq - 1], placement.
Z());
105 AddNode(MakeSarco(), 1,
new TGeoTranslation(0, 0, 0.5 * (full_length_quartet + sarco_length) + dist_csi_sarco));
119 std::vector<TVector3> coins;
120 double sep = separation / 2.;
123 coins.emplace_back(-
sep,
sep + front_side, -depth / 2);
124 coins.emplace_back(
sep,
sep + front_side, -depth / 2);
125 coins.emplace_back(
sep, -
sep - front_side, -depth / 2);
126 coins.emplace_back(-
sep, -
sep - front_side, -depth / 2);
133 for (
int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
134 std::vector<double> coords;
136 for (
auto&
vec : coins) {
137 coords.push_back(
vec.X());
138 coords.push_back(
vec.Y());
140 for (std::vector<TVector3>::iterator
vec = coins.begin();
vec != coins.end(); ++
vec) {
141 coords.push_back(
vec->X());
142 coords.push_back(
vec->Y());
164 std::vector<TVector3> coins;
165 double sep = separation / 2.;
168 coins.emplace_back(-
sep - front_side,
sep, -depth / 2);
169 coins.emplace_back(-
sep,
sep, -depth / 2);
170 coins.emplace_back(-
sep, -
sep, -depth / 2);
171 coins.emplace_back(-
sep - front_side, -
sep, -depth / 2);
178 for (
int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
179 std::vector<double> coords;
181 for (
auto&
vec : coins) {
182 coords.push_back(
vec.X());
183 coords.push_back(
vec.Y());
185 for (std::vector<TVector3>::iterator
vec = coins.begin();
vec != coins.end(); ++
vec) {
186 coords.push_back(
vec->X());
187 coords.push_back(
vec->Y());
209 std::vector<TVector3> coins;
210 double sep = separation / 2.;
213 coins.emplace_back(
sep,
sep, -depth / 2);
214 coins.emplace_back(
sep + front_side,
sep, -depth / 2);
215 coins.emplace_back(
sep + front_side, -
sep, -depth / 2);
216 coins.emplace_back(
sep, -
sep, -depth / 2);
223 for (
int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
224 std::vector<double> coords;
226 for (
auto&
vec : coins) {
227 coords.push_back(
vec.X());
228 coords.push_back(
vec.Y());
230 for (std::vector<TVector3>::iterator
vec = coins.begin();
vec != coins.end(); ++
vec) {
231 coords.push_back(
vec->X());
232 coords.push_back(
vec->Y());
252 std::vector<TVector3> coins;
253 double sep = separation / 2.;
258 coins.emplace_back(-
sep - front_side,
sep + front_side, -depth / 2);
259 coins.emplace_back(-
sep,
sep + front_side, -depth / 2);
260 coins.emplace_back(-
sep,
sep, -depth / 2);
261 coins.emplace_back(-
sep - front_side,
sep, -depth / 2);
263 coins.push_back(
TVector3(-
sep - front_side,
sep + front_side, -depth / 2));
272 coins.emplace_back(
sep,
sep + front_side, -depth / 2);
273 coins.emplace_back(
sep + front_side,
sep + front_side, -depth / 2);
274 coins.emplace_back(
sep + front_side,
sep, -depth / 2);
275 coins.emplace_back(
sep,
sep, -depth / 2);
278 coins.push_back(
TVector3(
sep + front_side,
sep + front_side, -depth / 2));
286 coins.emplace_back(
sep, -
sep, -depth / 2);
287 coins.emplace_back(
sep + front_side, -
sep, -depth / 2);
288 coins.emplace_back(
sep + front_side, -
sep - front_side, -depth / 2);
289 coins.emplace_back(
sep, -
sep - front_side, -depth / 2);
293 coins.push_back(
TVector3(
sep + front_side, -
sep - front_side, -depth / 2));
300 coins.emplace_back(-
sep - front_side, -
sep, -depth / 2);
301 coins.emplace_back(-
sep, -
sep, -depth / 2);
302 coins.emplace_back(-
sep, -
sep - front_side, -depth / 2);
303 coins.emplace_back(-
sep - front_side, -
sep - front_side, -depth / 2);
308 coins.push_back(
TVector3(-
sep - front_side, -
sep - front_side, -depth / 2));
311 for (
int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
312 std::vector<double> coords;
314 for (
auto&
vec : coins) {
315 coords.push_back(
vec.X());
316 coords.push_back(
vec.Y());
318 for (std::vector<TVector3>::iterator
vec = coins.begin();
vec != coins.end(); ++
vec) {
319 coords.push_back(
vec->X());
320 coords.push_back(
vec->Y());
342 0.5 * ergal_edge_depth);
351 ergal_frame->
AddNode(erg_b, 1);
396 si300frame->
AddNode(ergal_frame_300, 1);
410 si500frame->
AddNode(ergal_frame_500, 1);
434 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)
TGeoVolume * MakeCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
Part of aluminium frame which holds the CsI.
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()
Description of physical materials used to construct detectors & targets; interface to range tables.
virtual TGeoMedium * GetGeoMedium(const Char_t *="")
static TGeoHMatrix * GetVolumePositioningMatrix(Double_t distance, Double_t theta, Double_t phi, TGeoTranslation *postTrans=nullptr)
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 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()