GammaWare  Head Version for release 0.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
AgataGeometryTransformer.h
Go to the documentation of this file.
1 
2 #ifndef Gw_AgataGeometryTransformer
3 #define Gw_AgataGeometryTransformer
4 
5 #include "GwLogMessage.h"
6 
7 #ifndef ROOT_TArrayF
8 #include "TArrayF.h"
9 #endif
10 
11 #ifndef ROOT_TObject
12 #include "TObject.h"
13 #endif
14 
15 #ifndef ROOT_TString
16 #include "TString.h"
17 #endif
18 
19 class TGeoCombiTrans;
20 class TObjArray;
21 class TGeoVolume;
22 class TGeoMaterial;
23 
24 namespace Gw {
25 
30 class AgataGeometryTransformer : public TObject
31 {
32 
33 public:
34 
36  virtual ~AgataGeometryTransformer();
37 
38 
40  Bool_t ReadTransformations(const TString fileName);
41 
43  TGeoCombiTrans* FillTransMatrix(Double_t* trans, Double_t* rot);
44 
45  // Transformation methods
46 
49  void Global2Local(Int_t detID,
50  Double_t xg, Double_t yg, Double_t zg,
51  Double_t& xl, Double_t& yl, Double_t& zl) const;
52 
53  void Global2Local(Int_t detID,
54  Float_t xg, Float_t yg, Float_t zg,
55  Float_t& xl, Float_t& yl, Float_t& zl) const;
56 
59  void Local2Global(Int_t detID,
60  Double_t xl, Double_t yl, Double_t zl,
61  Double_t& xg, Double_t& yg, Double_t& zg) const;
62 
63  void Local2Global(Int_t detID,
64  Float_t xl, Float_t yl, Float_t zl,
65  Float_t& xg, Float_t& yg, Float_t& zg) const;
66 
67 
69  Int_t GetDepthId(Double_t z);
70 
72  Int_t GetSectorId(Double_t x, Double_t y);
73 
74 public:
75 
77 
91  static int BuildAgataCrystals(const char *filename = "asolid", const char *basecrysname = "gePoly");
92 
94 
102  static int BuildAgataClusters(const char *filename = "aclust", const char *baseclusname = "agataCluster", const char *basecrysname = "gePoly");
103 
105 
112  static TGeoVolume *BuildAgataDetector(const char *filename = "aeuler", const char *baseclusname = "agataCluster", const char *agataName = "Agata");
113 
115 
119  static TGeoVolume *ImportAgata(const char *asolid = "asolid", const char *aclust = "aclust", const char *aeuler = "aeuler",
120  const char *baseclusname = "agataCluster", const char* agataName = "Agata");
121 
123  static TGeoVolume* AddDanteModule(const Float_t dz= 0., const Float_t rotz1 = 0., const Float_t roty = 0., const Float_t rotz2 = 0,
124  const Float_t rotx = 0., const char* basemoduleName = "Module", const char *danteName = "Dante");
126  static TGeoVolume* AddBeamPipe(const Float_t dZ = 18, const Float_t minR = 2., const Float_t maxR = 2.3, const char *pipeName = "Pipe");
127 
129  static TGeoVolume* AddTarget(const Float_t dx = 0.8, const Float_t dy = 0.8, const Float_t dz = 0.05,
130  const char *targetName = "Target", TGeoMaterial* mat = 0x0);
132  static TGeoVolume* AddFloor(Float_t dx = 20, const Float_t dy = 0.1, const Float_t dz = 25, const char *floorName = "Floor");
133 
135  static TGeoVolume* AddPrismaMCP(const char *prismaName = "PrismaMCP", Float_t dx = 10., Float_t dy = 10., Float_t dz = 1.,
136  Float_t phi = 135., TGeoMaterial* mat = 0x0);
138  static TGeoVolume* AddPrismaQpole(const char *prismaName = "PrismaQpole", Float_t dz = 21., Float_t rmin = 15., Float_t rmax = 15.7);
139 
141  static TGeoVolume* AddPrismaDipoleOld(const char *prismaName = "PrismaDipole", Float_t dz = 10., Float_t rmin = 70.,
142  Float_t rmax = 170., Float_t phi1 = -20, Float_t phi2 = 65);
144  static TGeoVolume* AddPrismaDipole(const char *prismaName = "PrismaDipole", Float_t dx = 50., Float_t dy = 10.,Float_t dz = 1.);
145 
147  static TGeoVolume* AddPrismaMWPC(const char *prismaName = "PrismaMWPC", Float_t dzFcIc = 72., Float_t dx = 75., Float_t dy = 10.,
148  Float_t dz = 65., TGeoMaterial* mat = 0x0);
149 
151  static TGeoVolume* BuildAgata(const char* agataPath = "./", const char *asolid = "asolid", const char *aclust = "aclust", const char *aeuler = "aeuler",
152  const char *baseclusname = "agataCluster", const char* agataName = "Agata");
153 
155  static TGeoVolume* BuildDante(const char* danteConf = "Dante.conf", const char* basemoduleName = "Module", const char *danteName = "Dante");
156 
158  static TGeoVolume* BuildPrisma(const char* prismaConf = "solver.conf", Float_t dzMCP = 25., Float_t dzQpole = 54., Float_t dzDipole = 160., Float_t dzDipMWPC = 328.5, const char* nameMCP = "PrismaMCP",
159  const char* nameQPole = "PrismaQpole", const char* nameDipole = "PrismaDipole", const char* nameMWPC = "PrismaMWPC", const char* prismaName = "Prisma");
161  static void SetDefaultTransparency(Char_t transparency) { fgDefaultTransp = transparency; }
162 
163 //private:
164 
166  static Bool_t ReadPrismaConf(Float_t& dzMCP, Float_t& dzQpole, Float_t& dzDipole, Float_t& dzDipMWPC, const char* prismaConf = "solver.conf");
167 
168 private:
169 
170  TObjArray* fMatrixList;
171 
172  mutable LogMessage fLog;
173 
174 private:
175 
176  static const Int_t fgkMaxDetectorID;
177  static const Int_t fgkMaxDepthID;
178  static const Float_t fgkDepth[];
179  static const Char_t* fgkGeomName;
180  static const Char_t* fgkGeomTitle;
181  static Char_t fgDefaultTransp; // default transparency value
182 
183 };
184 } // end namespace
185 
186 #endif
187 
188 
189 
190 
191 
192 
193 
static TGeoVolume * AddPrismaQpole(const char *prismaName="PrismaQpole", Float_t dz=21., Float_t rmin=15., Float_t rmax=15.7)
Add Prisma Qpole.
static TGeoVolume * BuildAgataDetector(const char *filename="aeuler", const char *baseclusname="agataCluster", const char *agataName="Agata")
to build agata from a formatted text-file (aeuler)
static TGeoVolume * AddTarget(const Float_t dx=0.8, const Float_t dy=0.8, const Float_t dz=0.05, const char *targetName="Target", TGeoMaterial *mat=0x0)
Add beam pipe.
static TGeoVolume * AddPrismaDipole(const char *prismaName="PrismaDipole", Float_t dx=50., Float_t dy=10., Float_t dz=1.)
Add Prisma Dipole.
void Global2Local(Int_t detID, Double_t xg, Double_t yg, Double_t zg, Double_t &xl, Double_t &yl, Double_t &zl) const
Transform point from the global reference frame to the local reference frame of the detection id...
static TGeoVolume * AddDanteModule(const Float_t dz=0., const Float_t rotz1=0., const Float_t roty=0., const Float_t rotz2=0, const Float_t rotx=0., const char *basemoduleName="Module", const char *danteName="Dante")
Add Dante module geometry to the Agata-Geant4 world.
static TGeoVolume * AddPrismaDipoleOld(const char *prismaName="PrismaDipole", Float_t dz=10., Float_t rmin=70., Float_t rmax=170., Float_t phi1=-20, Float_t phi2=65)
Add Prisma Dipole.
static void SetDefaultTransparency(Char_t transparency)
Set Default tranparency.
static TGeoVolume * BuildPrisma(const char *prismaConf="solver.conf", Float_t dzMCP=25., Float_t dzQpole=54., Float_t dzDipole=160., Float_t dzDipMWPC=328.5, const char *nameMCP="PrismaMCP", const char *nameQPole="PrismaQpole", const char *nameDipole="PrismaDipole", const char *nameMWPC="PrismaMWPC", const char *prismaName="Prisma")
Build Prisma.
static TGeoVolume * AddPrismaMCP(const char *prismaName="PrismaMCP", Float_t dx=10., Float_t dy=10., Float_t dz=1., Float_t phi=135., TGeoMaterial *mat=0x0)
Add MCP.
Base class for a Log message.
Definition: GwLogMessage.h:94
AgataGeometryTransformer class that manage geometry transformations.
header file for GwLogMessage.cpp
static Bool_t ReadPrismaConf(Float_t &dzMCP, Float_t &dzQpole, Float_t &dzDipole, Float_t &dzDipMWPC, const char *prismaConf="solver.conf")
Read prisma configuration file.
TGeoCombiTrans * FillTransMatrix(Double_t *trans, Double_t *rot)
fill list of matrices
static TGeoVolume * BuildDante(const char *danteConf="Dante.conf", const char *basemoduleName="Module", const char *danteName="Dante")
Build Dante.
static TGeoVolume * AddBeamPipe(const Float_t dZ=18, const Float_t minR=2., const Float_t maxR=2.3, const char *pipeName="Pipe")
Add beam pipe.
static TGeoVolume * BuildAgata(const char *agataPath="./", const char *asolid="asolid", const char *aclust="aclust", const char *aeuler="aeuler", const char *baseclusname="agataCluster", const char *agataName="Agata")
For uniformity of names overload ImportAgata method.
Bool_t ReadTransformations(const TString fileName)
read transformations file
static TGeoVolume * ImportAgata(const char *asolid="asolid", const char *aclust="aclust", const char *aeuler="aeuler", const char *baseclusname="agataCluster", const char *agataName="Agata")
to import the agata geometry from the Agata world
static int BuildAgataClusters(const char *filename="aclust", const char *baseclusname="agataCluster", const char *basecrysname="gePoly")
to build agata clusters from a formatted text-file (aclust)
Int_t GetSectorId(Double_t x, Double_t y)
Get sector id from (x,y) position.
static int BuildAgataCrystals(const char *filename="asolid", const char *basecrysname="gePoly")
to build agata crytals from a formatted text-file (asolid)
Int_t GetDepthId(Double_t z)
Get sector depth from z position.
static TGeoVolume * AddFloor(Float_t dx=20, const Float_t dy=0.1, const Float_t dz=25, const char *floorName="Floor")
Add floor.
void Local2Global(Int_t detID, Double_t xl, Double_t yl, Double_t zl, Double_t &xg, Double_t &yg, Double_t &zg) const
Transform point from the local reference frame of the detection id to the global reference frame...
static TGeoVolume * AddPrismaMWPC(const char *prismaName="PrismaMWPC", Float_t dzFcIc=72., Float_t dx=75., Float_t dy=10., Float_t dz=65., TGeoMaterial *mat=0x0)
Add Multi Wire Proportional Chamber (MWPC)