KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
KVFAZIAZERO.cpp
1//Created by KVClassFactory on Tue Jan 27 11:38:09 2015
2//Author: ,,,
3
4#include "KVFAZIAZERO.h"
5#include "KVUnits.h"
6#include "KVFAZIABlock.h"
7#include "TSystem.h"
8#include "KVEnv.h"
9
10#include <TGeoMatrix.h>
11
13
14
15// BEGIN_HTML <!--
16/* -->
17<h2>KVFAZIAZERO</h2>
18<h4>Description of the FAZIA set up</h4>
19<!-- */
20// --> END_HTML
22
23
24
26
28{
29 // Default constructor
30}
31
32
33
36
38{
39 // Destructor
40}
41
42
43
46
48{
49 //Defined number of blocks, the distance from the target and the minimum polar angle
50 fNblocks = 6;
51 fFDist = 100.;
52 fFThetaMin = 1.65;
53}
54
55
56
62
64{
65 // Telescope for elastic scattering monitoring
66 // Two 5mm diameter silicon detectors of 525um thickness
67 // placed 2m20 from the target at theta=1.84deg phi=-90deg.
68 // distance between centres of detectors = 1mm
69
70 KVMaterial silicon("Si");
71
72 const double radius = 2 * KVUnits::cm;
73
74 const double thick = 525 * KVUnits::um;
75 const double centre_dist = 6 * KVUnits::cm;
76
77 TGeoVolume* pl1 = gGeoManager->MakeTube("PL1", silicon.GetGeoMedium(), 0., radius, thick / 2);
78 TGeoVolume* pl2 = gGeoManager->MakeTube("PL2", silicon.GetGeoMedium(), 0., radius, thick / 2);
80 telpl1->AddNode(pl1, 1, new TGeoTranslation(0, 0, -centre_dist / 2));
81 telpl1->AddNode(pl2, 2, new TGeoTranslation(0, 0, centre_dist / 2));
82 gGeoManager->GetTopVolume()->AddNode(telpl1, 998);
83
84// TGeoVolume* pl2 = gGeoManager->MakeTube("PL2", silicon.GetGeoMedium(), 0., radius, thick / 2);
85// gGeoManager->GetTopVolume()->AddNode(pl2, 999, new TGeoTranslation(0,0,-centre_dist / 2));
86}
87
88
89
90
96
98{
99 //Build geometry of FAZIASYM
100 //All telescopes are : Si(300µm)-Si(500µm)-CsI(10cm)
101 //No attempt has been made to implement real thicknesses
102 //
103 Info("BuildFAZIA", "Compact geometry, %f cm from target + 2BLK around 20 degrees",
104 fFDist);
105
107
108 Double_t distance_block_cible = fFDist * KVUnits::cm;
109
110 KVFAZIABlock* block = new KVFAZIABlock;
111
112 Double_t theta = 0;
113 Double_t phi = 0;
114
115 Double_t theta_min = fFThetaMin;//smallest lab polar angle in degrees
116 Double_t centre_hole = 2.*tan(theta_min * TMath::DegToRad()) * distance_block_cible;
117 Double_t dx = (block->GetTotalSideWithBlindage()) / 2.;
118
119 TVector3 centre;
120 for (Int_t bb = 0; bb < fNblocks; bb += 1) {
121
122 if (bb == 1) centre.SetXYZ(-1 * (dx - centre_hole / 2), -dx - centre_hole / 2, distance_block_cible);
123 else if (bb == 2) centre.SetXYZ(-1 * (dx + centre_hole / 2), dx - centre_hole / 2, distance_block_cible);
124 else if (bb == 3) centre.SetXYZ(-1 * (-dx + centre_hole / 2), dx + centre_hole / 2, distance_block_cible);
125 else if (bb == 0) centre.SetXYZ(-1 * (-dx - centre_hole / 2), -dx + centre_hole / 2, distance_block_cible);
126 else if (bb == 4) centre.SetXYZ(0, -25, distance_block_cible);
127 else if (bb == 5) centre.SetXYZ(0, 25, distance_block_cible);
128 else {
129 Warning("BuildFAZIA", "Block position definition is done only for %d blocks", fNblocks);
130 }
131 theta = centre.Theta() * TMath::RadToDeg();
132 phi = centre.Phi() * TMath::RadToDeg();
133 printf("BLK #%d => theta=%1.2lf - phi=%1.2lf\n", bb, theta, phi);
134
135 top->AddNode(block, bb,
137 block->GetNominalDistanceTargetBlockCentre(distance_block_cible),
138 theta,
139 phi
140 )
141 );
142 }
143
144// trans.SetDz(250* KVUnits::cm + thick_si1 / 2.);
145// h = trans;
146// ph = new TGeoHMatrix(h);
147// top->AddNode(block, 4, ph);
148
149
150 // add telescope for elastic scattering monitoring
152 // Change default geometry import angular range for rutherford telescope
153 SetGeometryImportParameters(.25, 1., 0.5) ;
154}
155
156
157
159
161{
162
164// env.SetValue("RUTH_SI_1", "SI1-RUTH");
165// env.SetValue("RUTH_SI_2", "SI2-RUTH");
166
167}
168
169
int Int_t
double Double_t
R__EXTERN TGeoManager * gGeoManager
Extension of TEnv to allow the writing of comments in the file.
Definition KVEnv.h:17
Standard geometry of 16-telescope FAZIA block.
Double_t GetNominalDistanceTargetBlockCentre(double dist_SI1=100.) const
Double_t GetTotalSideWithBlindage() const
FAZIA setup, FAZIAZERO experiment.
Definition KVFAZIAZERO.h:16
virtual void SetNameOfDetectors(KVEnv &env)
void PlasticDetectors()
virtual ~KVFAZIAZERO()
Destructor.
virtual void BuildFAZIA()
virtual void GetGeometryParameters()
Defined number of blocks, the distance from the target and the minimum polar angle.
Double_t fFDist
distance of FAZIA detectors from target (in cm)
Definition KVFAZIA.h:36
void SetGeometryImportParameters(Double_t dt=0.25, Double_t dp=1.0, Double_t tmin=2., Double_t pmin=0, Double_t tmax=20., Double_t pmax=360., Double_t xorg=0, Double_t yorg=0, Double_t zorg=0)
Definition KVFAZIA.h:238
Double_t fFThetaMin
minimum polar angle for compact geometry (in degrees)
Definition KVFAZIA.h:37
virtual void SetNameOfDetectors(KVEnv &env)
Definition KVFAZIA.cpp:304
Int_t fNblocks
number of blocks
Definition KVFAZIA.h:38
Description of physical materials used to construct detectors & targets; interface to range tables.
Definition KVMaterial.h:94
virtual TGeoMedium * GetGeoMedium(const Char_t *="")
static TGeoHMatrix * GetVolumePositioningMatrix(Double_t distance, Double_t theta, Double_t phi, TGeoTranslation *postTrans=nullptr)
TGeoVolume * MakeTube(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz)
TGeoVolumeAssembly * MakeVolumeAssembly(const char *name)
TGeoVolume * GetTopVolume() const
TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="") override
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
virtual void Warning(const char *method, const char *msgfmt,...) const
virtual void Info(const char *method, const char *msgfmt,...) const
void SetXYZ(Double_t x, Double_t y, Double_t z)
Double_t Phi() const
Double_t Theta() const
RVec< PromoteType< T > > tan(const RVec< T > &v)
const long double um
Definition KVUnits.h:68
const long double cm
Definition KVUnits.h:66
constexpr Double_t DegToRad()
constexpr Double_t RadToDeg()
ClassImp(TPyArg)