Logo ROOT  
Reference Guide
nucleus.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_gl
3 /// Model of a nucleus built from TGeo classes.
4 ///
5 /// \macro_code
6 ///
7 /// \author Otto Schaile
8 
9 void nucleus(Int_t nProtons = 40,Int_t nNeutrons = 60)
10 {
11  Double_t NeutronRadius = 60,
12  ProtonRadius = 60,
13  NucleusRadius,
14  distance = 60;
15  Double_t vol = nProtons + nNeutrons;
16  vol = 3 * vol / (4 * TMath::Pi());
17 
18  NucleusRadius = distance * TMath::Power(vol, 1./3.);
19 // cout << "NucleusRadius: " << NucleusRadius << endl;
20 
21  TGeoManager * geom = new TGeoManager("nucleus", "Model of a nucleus");
22  geom->SetNsegments(40);
23  TGeoMaterial *matEmptySpace = new TGeoMaterial("EmptySpace", 0, 0, 0);
24  TGeoMaterial *matProton = new TGeoMaterial("Proton" , .938, 1., 10000.);
25  TGeoMaterial *matNeutron = new TGeoMaterial("Neutron" , .935, 0., 10000.);
26 
27  TGeoMedium *EmptySpace = new TGeoMedium("Empty", 1, matEmptySpace);
28  TGeoMedium *Proton = new TGeoMedium("Proton", 1, matProton);
29  TGeoMedium *Neutron = new TGeoMedium("Neutron",1, matNeutron);
30 
31 // the space where the nucleus lives (top container volume)
32 
33  Double_t worldx = 200.;
34  Double_t worldy = 200.;
35  Double_t worldz = 200.;
36 
37  TGeoVolume *top = geom->MakeBox("WORLD", EmptySpace, worldx, worldy, worldz);
38  geom->SetTopVolume(top);
39 
40  TGeoVolume * proton = geom->MakeSphere("proton", Proton, 0., ProtonRadius);
41  TGeoVolume * neutron = geom->MakeSphere("neutron", Neutron, 0., NeutronRadius);
42  proton->SetLineColor(kRed);
43  neutron->SetLineColor(kBlue);
44 
45  Double_t x, y, z, dummy;
46  Int_t i = 0;
47  while ( i< nProtons) {
48  gRandom->Rannor(x, y);
49  gRandom->Rannor(z,dummy);
50  if ( TMath::Sqrt(x*x + y*y + z*z) < 1) {
51  x = (2 * x - 1) * NucleusRadius;
52  y = (2 * y - 1) * NucleusRadius;
53  z = (2 * z - 1) * NucleusRadius;
54  top->AddNode(proton, i, new TGeoTranslation(x, y, z));
55  i++;
56  }
57  }
58  i = 0;
59  while ( i < nNeutrons) {
60  gRandom->Rannor(x, y);
61  gRandom->Rannor(z,dummy);
62  if ( TMath::Sqrt(x*x + y*y + z*z) < 1) {
63  x = (2 * x - 1) * NucleusRadius;
64  y = (2 * y - 1) * NucleusRadius;
65  z = (2 * z - 1) * NucleusRadius;
66  top->AddNode(neutron, i + nProtons, new TGeoTranslation(x, y, z));
67  i++;
68  }
69  }
70  geom->CloseGeometry();
71  geom->SetVisLevel(4);
72  top->Draw("ogl");
73 }
TGeoManager::SetVisLevel
void SetVisLevel(Int_t level=3)
set default level down to which visualization is performed
Definition: TGeoManager.cxx:2248
TGeoManager::MakeBox
TGeoVolume * MakeBox(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz)
Make in one step a volume pointing to a box shape with given medium.
Definition: TGeoManager.cxx:2918
TGeoManager::CloseGeometry
void CloseGeometry(Option_t *option="d")
Closing geometry implies checking the geometry validity, fixing shapes with negative parameters (run-...
Definition: TGeoManager.cxx:1359
TMath::Sqrt
Double_t Sqrt(Double_t x)
Definition: TMath.h:691
Int_t
int Int_t
Definition: RtypesCore.h:45
TGeoVolume::AddNode
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a TGeoNode to the list of nodes.
Definition: TGeoVolume.cxx:932
x
Double_t x[n]
Definition: legend1.C:17
TGeoTranslation
Class describing translations.
Definition: TGeoMatrix.h:122
TGeoMaterial
Base class describing materials.
Definition: TGeoMaterial.h:36
TGeoManager::SetNsegments
void SetNsegments(Int_t nseg)
Set number of segments for approximating circles in drawing.
Definition: TGeoManager.cxx:3339
TRandom::Rannor
virtual void Rannor(Float_t &a, Float_t &b)
Return 2 numbers distributed following a gaussian with mean=0 and sigma=1.
Definition: TRandom.cxx:489
TGeoManager::SetTopVolume
void SetTopVolume(TGeoVolume *vol)
Set the top volume and corresponding node as starting point of the geometry.
Definition: TGeoManager.cxx:3397
TMath::Pi
constexpr Double_t Pi()
Definition: TMath.h:37
TGeoVolume::Draw
virtual void Draw(Option_t *option="")
draw top volume according to option
Definition: TGeoVolume.cxx:1146
TMath::Power
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Definition: TMath.h:735
gRandom
R__EXTERN TRandom * gRandom
Definition: TRandom.h:62
TGeoManager::MakeSphere
TGeoVolume * MakeSphere(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t themin=0, Double_t themax=180, Double_t phimin=0, Double_t phimax=360)
Make in one step a volume pointing to a sphere shape with given medium.
Definition: TGeoManager.cxx:2937
y
Double_t y[n]
Definition: legend1.C:17
kRed
@ kRed
Definition: Rtypes.h:66
Double_t
double Double_t
Definition: RtypesCore.h:59
dummy
static RooMathCoreReg dummy
Definition: RooMathCoreReg.cxx:27
kBlue
@ kBlue
Definition: Rtypes.h:66
TGeoMedium
Media are used to store properties related to tracking and which are useful only when using geometry ...
Definition: TGeoMedium.h:24
TGeoVolume::SetLineColor
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TGeoVolume.cxx:2035
TGeoManager
The manager class for any TGeo geometry.
Definition: TGeoManager.h:45
TGeoVolume
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition: TGeoVolume.h:49