1 | #include <iostream>
|
---|
2 |
|
---|
3 | #include <TString.h>
|
---|
4 |
|
---|
5 | #include "SolGeom.h"
|
---|
6 | #include "SolTrack.h"
|
---|
7 |
|
---|
8 | using namespace std;
|
---|
9 |
|
---|
10 | SolGeom::SolGeom()
|
---|
11 | {
|
---|
12 | //
|
---|
13 | // Magnetic field
|
---|
14 | //
|
---|
15 | fB = 2.0;
|
---|
16 | //
|
---|
17 | // Create arrays
|
---|
18 | //
|
---|
19 | ftyLay = new Int_t[fNlMax]; // Layer type 1 = R (barrel) or 2 = z (forward/backward)
|
---|
20 | fLyLabl = new TString[fNlMax]; // Layer label
|
---|
21 | fxMin = new Double_t[fNlMax]; // Minimum dimension z for barrel or R for forward
|
---|
22 | fxMax = new Double_t[fNlMax]; // Maximum dimension z for barrel or R for forward
|
---|
23 | frPos = new Double_t[fNlMax]; // R/z location of layer
|
---|
24 | fthLay = new Double_t[fNlMax]; // Thickness (meters)
|
---|
25 | frlLay = new Double_t[fNlMax]; // Radiation length (meters)
|
---|
26 | fnmLay = new Int_t[fNlMax]; // Number of measurements in layers (1D or 2D)
|
---|
27 | fstLayU = new Double_t[fNlMax]; // Stereo angle (rad) - 0(pi/2) = axial(z) layer - Upper side
|
---|
28 | fstLayL = new Double_t[fNlMax]; // Stereo angle (rad) - 0(pi/2) = axial(z) layer - Lower side
|
---|
29 | fsgLayU = new Double_t[fNlMax]; // Resolution Upper side (meters) - 0 = no measurement
|
---|
30 | fsgLayL = new Double_t[fNlMax]; // Resolution Lower side (meters) - 0 = no measurement
|
---|
31 | fflLay = new Bool_t[fNlMax]; // measurement flag = T, scattering only = F
|
---|
32 | //
|
---|
33 | // Load geometry info in SolGeom.h
|
---|
34 | //
|
---|
35 | fNlay = 0; // Actual number of layers
|
---|
36 | fBlay = 0; // Nr. of barrel layers
|
---|
37 | fFlay = 0; // Nr. of forward/backward layers
|
---|
38 | fNm = 0; // Nr. of measuring layers
|
---|
39 | }
|
---|
40 |
|
---|
41 | void SolGeom::Read(const char *data)
|
---|
42 | {
|
---|
43 | char strng[200];
|
---|
44 | int nbytes = 200;
|
---|
45 | FILE *fdata = fopen(data, "r");
|
---|
46 | if (!fdata)
|
---|
47 | {
|
---|
48 | cout << "SolGeom::GeoRead - can't open input file" << endl;
|
---|
49 | return;
|
---|
50 | }
|
---|
51 | Int_t tyLay;
|
---|
52 | char LyLabl[20];
|
---|
53 | float xMin;
|
---|
54 | float xMax;
|
---|
55 | float rPos;
|
---|
56 | float thLay;
|
---|
57 | float rlLay;
|
---|
58 | Int_t nmLay;
|
---|
59 | float stLayU;
|
---|
60 | float stLayL;
|
---|
61 | float sgLayU;
|
---|
62 | float sgLayL;
|
---|
63 | Int_t flLay;
|
---|
64 |
|
---|
65 | fNlay = 0;
|
---|
66 | while (fgets(strng, nbytes, fdata) != NULL)
|
---|
67 | {
|
---|
68 | cout << strng;
|
---|
69 | int status = sscanf(strng, "%d %s %g %g %g %g %g %d %g %g %g %g %d",
|
---|
70 | &tyLay, LyLabl, &xMin, &xMax, &rPos, &thLay,
|
---|
71 | &rlLay, &nmLay, &stLayU, &stLayL, &sgLayU, &sgLayL, &flLay);
|
---|
72 | ftyLay[fNlay] = tyLay;
|
---|
73 | fLyLabl[fNlay] = LyLabl;
|
---|
74 | fxMin[fNlay] = xMin;
|
---|
75 | fxMax[fNlay] = xMax;
|
---|
76 | frPos[fNlay] = rPos;
|
---|
77 | fthLay[fNlay] = thLay;
|
---|
78 | frlLay[fNlay] = rlLay;
|
---|
79 | fnmLay[fNlay] = nmLay;
|
---|
80 | fstLayU[fNlay] = stLayU;
|
---|
81 | fstLayL[fNlay] = stLayL;
|
---|
82 | fsgLayU[fNlay] = sgLayU;
|
---|
83 | fsgLayL[fNlay] = sgLayL;
|
---|
84 | fflLay[fNlay] = flLay;
|
---|
85 |
|
---|
86 | fNlay++;
|
---|
87 | if (tyLay == 1) fBlay++;
|
---|
88 | if (tyLay == 2) fFlay++;
|
---|
89 | if (flLay == 1) fNm++;
|
---|
90 |
|
---|
91 | }
|
---|
92 |
|
---|
93 | cout << "SolGeom::GeoRead completed with " << fNlay << " layers input" << endl;
|
---|
94 | }
|
---|
95 |
|
---|
96 | SolGeom::~SolGeom()
|
---|
97 | {
|
---|
98 | delete[] ftyLay;
|
---|
99 | delete[] fxMin;
|
---|
100 | delete[] fxMax;
|
---|
101 | delete[] frPos;
|
---|
102 | delete[] fthLay;
|
---|
103 | delete[] frlLay;
|
---|
104 | delete[] fnmLay;
|
---|
105 | delete[] fstLayU;
|
---|
106 | delete[] fstLayL;
|
---|
107 | delete[] fsgLayU;
|
---|
108 | delete[] fsgLayL;
|
---|
109 | delete[] fflLay;
|
---|
110 | }
|
---|