1 | #ifndef G__SOLGEOM_H
|
---|
2 | #define G__SOLGEOM_H
|
---|
3 |
|
---|
4 | #include <Rtypes.h>
|
---|
5 | #include <TString.h>
|
---|
6 |
|
---|
7 | // Class to create geometry for solenoid geometry
|
---|
8 | // Simplified implementations with cylindrical and disk layers
|
---|
9 | //
|
---|
10 | // Author: F. Bedeschi, INFN - Pisa
|
---|
11 |
|
---|
12 | class SolGeom{
|
---|
13 | //
|
---|
14 | // Units are m
|
---|
15 | //
|
---|
16 | private:
|
---|
17 | const Int_t fNlMax = 200; // Maximum number of layers
|
---|
18 |
|
---|
19 | // B field
|
---|
20 | Double_t fB; // B field in Tesla
|
---|
21 |
|
---|
22 | // Barrel layer properties
|
---|
23 | Int_t fNlay; // Total number of layers
|
---|
24 | Int_t fBlay; // Number of barrel layers
|
---|
25 | Int_t fFlay; // Number of forward/backward layers
|
---|
26 | Int_t fNm; // Nr. measurement layers
|
---|
27 | Int_t *ftyLay; // Layer type 1 = R (barrel) or 2 = z (forward/backward)
|
---|
28 | TString *fLyLabl; // Layer label
|
---|
29 | // Barrel: PIPE, VTXLOW, VTXHIGH, DCHCANI, DCH, DCHCANO, BSILWRP, MAG, BPRESH
|
---|
30 | // Fw/Bw: VTXDSK, DCHWALL, FSILWRP, FRAD, FPRESH
|
---|
31 | Double_t *fxMin; // Minimum dimension z for barrel or R for forward
|
---|
32 | Double_t *fxMax; // Maximum dimension z for barrel or R for forward
|
---|
33 | Double_t *frPos; // R/z location of layer
|
---|
34 | Double_t *fthLay; // Thickness (meters)
|
---|
35 | Double_t *frlLay; // Radiation length (meters)
|
---|
36 | Int_t *fnmLay; // Number of measurements in layers (1D or 2D)
|
---|
37 | Double_t *fstLayU; // Stereo angle (rad) - 0(pi/2) = axial(z) layer - Upper side
|
---|
38 | Double_t *fstLayL; // Stereo angle (rad) - 0(pi/2) = axial(z) layer - Lower side
|
---|
39 | Double_t *fsgLayU; // Resolution Upper side (meters) - 0 = no measurement
|
---|
40 | Double_t *fsgLayL; // Resolution Lower side (meters) - 0 = no measurement
|
---|
41 | Bool_t *fflLay; // measurement flag = T, scattering only = F
|
---|
42 | //
|
---|
43 | //
|
---|
44 | Double_t fRmin; // Radius of first barrel layer
|
---|
45 | Double_t fZminPos; // Z of first disk in positive direction
|
---|
46 | Double_t fZminNeg; // Z of first disk in negative direction
|
---|
47 | void SetMinBoundaries(); // define inner box for fast simulation
|
---|
48 |
|
---|
49 | public:
|
---|
50 | SolGeom();
|
---|
51 | ~SolGeom();
|
---|
52 |
|
---|
53 | void Read(const char *data);
|
---|
54 |
|
---|
55 | Double_t B() { return fB; }
|
---|
56 | Int_t Nl() { return fNlay; }
|
---|
57 | Int_t Nm() { return fNm; }
|
---|
58 | Int_t NBl() { return fBlay; }
|
---|
59 | TString lLabl(Int_t nlayer) { return fLyLabl[nlayer]; }
|
---|
60 | Int_t lTyp(Int_t nlayer) { return ftyLay[nlayer]; }
|
---|
61 | Double_t lxMin(Int_t nlayer) { return fxMin[nlayer]; }
|
---|
62 | Double_t lxMax(Int_t nlayer) { return fxMax[nlayer]; }
|
---|
63 | Double_t lPos(Int_t nlayer) { return frPos[nlayer]; }
|
---|
64 | Double_t lTh(Int_t nlayer) { return fthLay[nlayer]; }
|
---|
65 | Double_t lX0(Int_t nlayer) { return frlLay[nlayer]; }
|
---|
66 | Int_t lND(Int_t nlayer) { return fnmLay[nlayer]; }
|
---|
67 | Double_t lStU(Int_t nlayer) { return fstLayU[nlayer]; }
|
---|
68 | Double_t lStL(Int_t nlayer) { return fstLayL[nlayer]; }
|
---|
69 | Double_t lSgU(Int_t nlayer) { return fsgLayU[nlayer]; }
|
---|
70 | Double_t lSgL(Int_t nlayer) { return fsgLayL[nlayer]; }
|
---|
71 | Bool_t isMeasure(Int_t nlayer) { return fflLay[nlayer]; }
|
---|
72 | //
|
---|
73 | // Define cylindrical box to use for fast simulation
|
---|
74 | //
|
---|
75 | Double_t GetRmin() { return fRmin; }
|
---|
76 | Double_t GetZminPos() { return fZminPos; }
|
---|
77 | Double_t GetZminNeg() { return fZminNeg; }
|
---|
78 | };
|
---|
79 |
|
---|
80 | #endif
|
---|