forked from root-project/root
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TGeoMCGeometry.h
152 lines (129 loc) · 6.78 KB
/
TGeoMCGeometry.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// @(#)root/vmc:$Id$
// Authors: Al;ice collaboration 25/06/2002
/*************************************************************************
* Copyright (C) 2006, Rene Brun and Fons Rademakers. *
* Copyright (C) 2002, ALICE Experiment at CERN. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TGeoMCGeometry
#define ROOT_TGeoMCGeometry
//
// Class TGeoMCGeometry
// --------------------
// Implementation of the TVirtualMCGeometry interface
// for building TGeo geometry.
//
#include "Rtypes.h"
#include "TVirtualMCGeometry.h"
class TGeoManager;
class TGeoHMatrix;
class TArrayD;
class TString;
class TGeoMCGeometry : public TVirtualMCGeometry {
public:
TGeoMCGeometry(const char* name, const char* title,
Bool_t g3CompatibleVolumeNames = false);
TGeoMCGeometry();
virtual ~TGeoMCGeometry();
// detector composition
virtual void Material(Int_t& kmat, const char* name, Double_t a,
Double_t z, Double_t dens, Double_t radl, Double_t absl,
Float_t* buf, Int_t nwbuf);
virtual void Material(Int_t& kmat, const char* name, Double_t a,
Double_t z, Double_t dens, Double_t radl, Double_t absl,
Double_t* buf, Int_t nwbuf);
virtual void Mixture(Int_t& kmat, const char *name, Float_t *a,
Float_t *z, Double_t dens, Int_t nlmat, Float_t *wmat);
virtual void Mixture(Int_t& kmat, const char *name, Double_t *a,
Double_t *z, Double_t dens, Int_t nlmat, Double_t *wmat);
virtual void Medium(Int_t& kmed, const char *name, Int_t nmat,
Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd,
Double_t stemax, Double_t deemax, Double_t epsil,
Double_t stmin, Float_t* ubuf, Int_t nbuf);
virtual void Medium(Int_t& kmed, const char *name, Int_t nmat,
Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd,
Double_t stemax, Double_t deemax, Double_t epsil,
Double_t stmin, Double_t* ubuf, Int_t nbuf);
virtual void Matrix(Int_t& krot, Double_t thetaX, Double_t phiX,
Double_t thetaY, Double_t phiY, Double_t thetaZ,
Double_t phiZ);
// functions from GGEOM
virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,
Float_t *upar, Int_t np);
virtual Int_t Gsvolu(const char *name, const char *shape, Int_t nmed,
Double_t *upar, Int_t np);
virtual void Gsdvn(const char *name, const char *mother, Int_t ndiv,
Int_t iaxis);
virtual void Gsdvn2(const char *name, const char *mother, Int_t ndiv,
Int_t iaxis, Double_t c0i, Int_t numed);
virtual void Gsdvt(const char *name, const char *mother, Double_t step,
Int_t iaxis, Int_t numed, Int_t ndvmx);
virtual void Gsdvt2(const char *name, const char *mother, Double_t step,
Int_t iaxis, Double_t c0, Int_t numed, Int_t ndvmx);
virtual void Gsord(const char *name, Int_t iax);
virtual void Gspos(const char *name, Int_t nr, const char *mother,
Double_t x, Double_t y, Double_t z, Int_t irot,
const char *konly);
virtual void Gsposp(const char *name, Int_t nr, const char *mother,
Double_t x, Double_t y, Double_t z, Int_t irot,
const char *konly, Float_t *upar, Int_t np);
virtual void Gsposp(const char *name, Int_t nr, const char *mother,
Double_t x, Double_t y, Double_t z, Int_t irot,
const char *konly, Double_t *upar, Int_t np);
virtual void Gsbool(const char* /*onlyVolName*/, const char* /*manyVolName*/) {}
// functions for access to geometry
//
// Return the Transformation matrix between the volume specified by
// the path volumePath and the top or master volume.
virtual Bool_t GetTransformation(const TString& volumePath,
TGeoHMatrix& matrix);
// Return the name of the shape and its parameters for the volume
// specified by the volume name.
virtual Bool_t GetShape(const TString& volumePath,
TString& shapeType, TArrayD& par);
// Returns the material parameters for the volume specified by
// the volume name.
virtual Bool_t GetMaterial(const TString& volumeName,
TString& name, Int_t& imat,
Double_t& a, Double_t& z, Double_t& density,
Double_t& radl, Double_t& inter, TArrayD& par);
// Returns the medium parameters for the volume specified by the
// volume name.
virtual Bool_t GetMedium(const TString& volumeName,
TString& name, Int_t& imed,
Int_t& nmat, Int_t& isvol, Int_t& ifield,
Double_t& fieldm, Double_t& tmaxfd, Double_t& stemax,
Double_t& deemax, Double_t& epsil, Double_t& stmin,
TArrayD& par);
// functions for drawing
//virtual void DrawOneSpec(const char* name);
//virtual void Gsatt(const char* name, const char* att, Int_t val);
//virtual void Gdraw(const char*,Double_t theta, Double_t phi,
// Double_t psi, Double_t u0, Double_t v0,
// Double_t ul, Double_t vl);
// Euclid
//virtual void WriteEuclid(const char*, const char*, Int_t, Int_t);
// get methods
virtual Int_t VolId(const char* volName) const;
virtual const char* VolName(Int_t id) const;
virtual Int_t MediumId(const char* mediumName) const;
virtual Int_t NofVolumes() const;
virtual Int_t NofVolDaughters(const char* volName) const;
virtual const char* VolDaughterName(const char* volName, Int_t i) const;
virtual Int_t VolDaughterCopyNo(const char* volName, Int_t i) const;
virtual Int_t VolId2Mate(Int_t id) const;
private:
TGeoMCGeometry(const TGeoMCGeometry& /*rhs*/);
TGeoMCGeometry& operator=(const TGeoMCGeometry& /*rhs*/);
TGeoManager* GetTGeoManager() const;
Double_t* CreateDoubleArray(Float_t* array, Int_t size) const;
void Vname(const char *name, char *vname) const;
/// Option to convert volumes names to be compatible with G3
Bool_t fG3CompatibleVolumeNames;
static TGeoMCGeometry* fgInstance; ///< Singleton instance
ClassDef(TGeoMCGeometry,2) // VMC TGeo Geometry builder
};
#endif