"ReadMe.md" did not exist on "aa007f128550964b75da4e8cb655f964efcfe155"
Newer
Older
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
// ROOT headers
#include "TString.h"
// nptool headers
#include "NPInputParser.h"
using namespace NPL;
// void CalculateDetectorOffset(const char * fname = "./geometry/strasse_July2021"){
void CalculateDetectorOffset(const char* fname = "./geometry/strasse_June2022") {
// Open output ROOT file from NPTool simulation run
string path = "";
string inFileName = fname;
inFileName += ".detector";
InputParser* inParser = new InputParser(inFileName, true);
vector<NPL::InputBlock*> blocks_info = inParser->GetAllBlocksWithTokenAndValue("Strasse", "Info");
if (blocks_info.size() > 1) {
cout << "ERROR: can only accepte one info block, " << blocks_info.size() << " info block founds." << endl;
exit(1);
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
vector<string> info = {"Inner_Wafer_Length",
"Inner_Wafer_Width",
"Inner_Wafer_Thickness",
"Inner_Wafer_AlThickness",
"Inner_Wafer_PADExternal",
"Inner_Wafer_PADInternal",
"Inner_Wafer_GuardRing",
"Inner_PCB_PortWidth",
"Inner_PCB_StarboardWidth",
"Inner_PCB_BevelAngle",
"Inner_PCB_UpstreamWidth",
"Inner_PCB_DownstreamWidth",
"Inner_PCB_MidWidth",
"Inner_PCB_Thickness",
"Inner_Wafer_TransverseStrips",
"Inner_Wafer_LongitudinalStrips",
"Outer_Wafer_Length",
"Outer_Wafer_Width",
"Outer_Wafer_Thickness",
"Outer_Wafer_AlThickness",
"Outer_Wafer_PADExternal",
"Outer_Wafer_PADInternal",
"Outer_Wafer_GuardRing",
"Outer_PCB_PortWidth",
"Outer_PCB_StarboardWidth",
"Outer_PCB_BevelAngle",
"Outer_PCB_UpstreamWidth",
"Outer_PCB_DownstreamWidth",
"Outer_PCB_MidWidth",
"Outer_PCB_Thickness",
"Outer_Wafer_TransverseStrips",
"Outer_Wafer_LongitudinalStrips",
"Chamber_Thickness",
"Chamber_Cylinder_Length",
"Chamber_Radius",
"Chamber_ExitTube_Radius",
"Chamber_ExitTube_Length",
"Chamber_Flange_Inner_Radius",
"Chamber_Sphere_Radius",
"Chamber_Sphere_Shift"};
////////////////////
// Inner Detector //
////////////////////
// Wafer parameter
double Inner_Wafer_Length = -999;
double Inner_Wafer_Width = -999;
double Inner_Wafer_Thickness = -999;
double Inner_Wafer_AlThickness = -999;
double Inner_Wafer_PADExternal = -999;
double Inner_Wafer_PADInternal = -999;
double Inner_Wafer_GuardRing = -999;
// PCB parameter
double Inner_PCB_PortWidth = -999;
double Inner_PCB_StarboardWidth = -999;
double Inner_PCB_BevelAngle = -999;
double Inner_PCB_UpstreamWidth = -999;
double Inner_PCB_DownstreamWidth = -999;
double Inner_PCB_MidWidth = -999;
double Inner_PCB_Thickness = -999;
double Inner_Wafer_TransverseStrips = -999;
double Inner_Wafer_LongitudinalStrips = -999;
////////////////////
// Outer Detector //
////////////////////
// Wafer parameter
double Outer_Wafer_Length = -999;
double Outer_Wafer_Width = -999;
double Outer_Wafer_Thickness = -999;
double Outer_Wafer_AlThickness = -999;
double Outer_Wafer_PADExternal = -999;
double Outer_Wafer_PADInternal = -999;
double Outer_Wafer_GuardRing = -999;
// PCB parameter
double Outer_PCB_PortWidth = -999;
double Outer_PCB_StarboardWidth = -999;
double Outer_PCB_BevelAngle = -999;
double Outer_PCB_UpstreamWidth = -999;
double Outer_PCB_DownstreamWidth = -999;
double Outer_PCB_MidWidth = -999;
double Outer_PCB_Thickness = -999;
double Outer_Wafer_TransverseStrips = -999;
double Outer_Wafer_LongitudinalStrips = -999;
// Vacuum Chamber //
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
double Chamber_Thickness = -999;
double Chamber_Cylinder_Length = -999;
double Chamber_Radius = -999;
double Chamber_ExitTube_Radius = -999;
double Chamber_ExitTube_Length = -999;
double Chamber_Flange_Inner_Radius = -999;
double Chamber_Sphere_Radius = -999;
double Chamber_Sphere_Shift = -999;
if (blocks_info[0]->HasTokenList(info)) {
cout << endl << "//// Strasse info block" << endl;
Inner_Wafer_Length = blocks_info[0]->GetDouble("Inner_Wafer_Length", "mm");
Inner_Wafer_Width = blocks_info[0]->GetDouble("Inner_Wafer_Width", "mm");
Inner_Wafer_Thickness = blocks_info[0]->GetDouble("Inner_Wafer_Thickness", "micrometer");
Inner_Wafer_AlThickness = blocks_info[0]->GetDouble("Inner_Wafer_AlThickness", "micrometer");
Inner_Wafer_PADExternal = blocks_info[0]->GetDouble("Inner_Wafer_PADExternal", "mm");
Inner_Wafer_PADInternal = blocks_info[0]->GetDouble("Inner_Wafer_PADInternal", "mm");
Inner_Wafer_GuardRing = blocks_info[0]->GetDouble("Inner_Wafer_GuardRing", "mm");
Inner_Wafer_TransverseStrips = blocks_info[0]->GetInt("Inner_Wafer_TransverseStrips");
Inner_Wafer_LongitudinalStrips = blocks_info[0]->GetInt("Inner_Wafer_LongitudinalStrips");
Inner_PCB_PortWidth = blocks_info[0]->GetDouble("Inner_PCB_PortWidth", "mm");
Inner_PCB_StarboardWidth = blocks_info[0]->GetDouble("Inner_PCB_StarboardWidth", "mm");
Inner_PCB_BevelAngle = blocks_info[0]->GetDouble("Inner_PCB_BevelAngle", "mm");
Inner_PCB_UpstreamWidth = blocks_info[0]->GetDouble("Inner_PCB_UpstreamWidth", "mm");
Inner_PCB_DownstreamWidth = blocks_info[0]->GetDouble("Inner_PCB_DownstreamWidth", "mm");
Inner_PCB_MidWidth = blocks_info[0]->GetDouble("Inner_PCB_MidWidth", "mm");
Inner_PCB_Thickness = blocks_info[0]->GetDouble("Inner_PCB_Thickness", "mm");
Outer_Wafer_Length = blocks_info[0]->GetDouble("Outer_Wafer_Length", "mm");
Outer_Wafer_Width = blocks_info[0]->GetDouble("Outer_Wafer_Width", "mm");
Outer_Wafer_Thickness = blocks_info[0]->GetDouble("Outer_Wafer_Thickness", "mm");
Outer_Wafer_AlThickness = blocks_info[0]->GetDouble("Outer_Wafer_AlThickness", "micrometer");
Outer_Wafer_PADExternal = blocks_info[0]->GetDouble("Outer_Wafer_PADExternal", "mm");
Outer_Wafer_PADInternal = blocks_info[0]->GetDouble("Outer_Wafer_PADInternal", "mm");
Outer_Wafer_GuardRing = blocks_info[0]->GetDouble("Outer_Wafer_GuardRing", "mm");
Outer_Wafer_TransverseStrips = blocks_info[0]->GetInt("Outer_Wafer_TransverseStrips");
Outer_Wafer_LongitudinalStrips = blocks_info[0]->GetInt("Outer_Wafer_LongitudinalStrips");
Outer_PCB_PortWidth = blocks_info[0]->GetDouble("Outer_PCB_PortWidth", "mm");
Outer_PCB_StarboardWidth = blocks_info[0]->GetDouble("Outer_PCB_StarboardWidth", "mm");
Outer_PCB_BevelAngle = blocks_info[0]->GetDouble("Outer_PCB_BevelAngle", "deg");
Outer_PCB_UpstreamWidth = blocks_info[0]->GetDouble("Outer_PCB_UpstreamWidth", "mm");
Outer_PCB_DownstreamWidth = blocks_info[0]->GetDouble("Outer_PCB_DownstreamWidth", "mm");
Outer_PCB_MidWidth = blocks_info[0]->GetDouble("Outer_PCB_MidWidth", "mm");
Outer_PCB_Thickness = blocks_info[0]->GetDouble("Outer_PCB_Thickness", "mm");
Chamber_Thickness = blocks_info[0]->GetDouble("Chamber_Thickness", "mm");
Chamber_Cylinder_Length = blocks_info[0]->GetDouble("Chamber_Cylinder_Length", "mm");
Chamber_Radius = blocks_info[0]->GetDouble("Chamber_Radius", "mm");
Chamber_ExitTube_Radius = blocks_info[0]->GetDouble("Chamber_ExitTube_Radius", "mm");
Chamber_ExitTube_Length = blocks_info[0]->GetDouble("Chamber_ExitTube_Length", "mm");
Chamber_Flange_Inner_Radius = blocks_info[0]->GetDouble("Chamber_Flange_Inner_Radius", "mm");
Chamber_Sphere_Radius = blocks_info[0]->GetDouble("Chamber_Sphere_Radius", "mm");
Chamber_Sphere_Shift = blocks_info[0]->GetDouble("Chamber_Sphere_Shift", "mm");
}
vector<NPL::InputBlock*> starget = inParser->GetAllBlocksWithToken("Target");
double TargetThickness = -999;
double TargetX = -999;
double TargetY = -999;
double TargetZ = -999;
cout << "//// TARGET ////" << endl;
cout << "//// Solid Target found " << endl;
vector<string> token = {"Thickness", "Radius", "Material", "Angle", "X", "Y", "Z"};
if (starget[0]->HasTokenList(token)) {
TargetThickness = starget[0]->GetDouble("Thickness", "mm");
TargetX = starget[0]->GetDouble("X", "mm");
TargetY = starget[0]->GetDouble("Y", "mm");
TargetZ = starget[0]->GetDouble("Z", "mm");
cout << "ERROR: Target token list incomplete, check your input file" << endl;
exit(1);
}
}
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
//////////////////////////////////////////////////
double d_TargetFront_InnerActive = 15; // mm
double d_TargetFront_OuterActive = 43; // mm
double InnerTotalLength =
Inner_PCB_UpstreamWidth + Inner_Wafer_Length * 2 + Inner_PCB_MidWidth + Inner_PCB_DownstreamWidth;
double d_TargetCenter_InnerCenter = -TargetThickness / 2. + d_TargetFront_InnerActive - Inner_Wafer_GuardRing -
Inner_PCB_UpstreamWidth + InnerTotalLength / 2.;
double OuterTotalLength =
Outer_PCB_UpstreamWidth + Outer_Wafer_Length * 2 + Outer_PCB_MidWidth + Outer_PCB_DownstreamWidth;
double d_TargetCenter_OuterCenter = -TargetThickness / 2. + d_TargetFront_OuterActive + OuterTotalLength / 2. -
Outer_Wafer_GuardRing - Outer_PCB_UpstreamWidth;
cout << endl;
cout << "---------- INPUT DISTANCES (mm) -------------" << endl;
cout << endl;
cout << "Target Thickness : " << TargetThickness << endl;
cout << "Beginning Target - Beginning Inner Active : " << d_TargetFront_InnerActive << endl;
cout << "Beginning Target - Beginning Outer Active : " << d_TargetFront_OuterActive << endl;
cout << endl;
cout << "--------- CALCULATED DISTANCES (mm) -----------" << endl;
cout << "InnerTotalLength = " << InnerTotalLength << endl;
cout << "d_TargetCenter_InnerCenter = " << d_TargetCenter_InnerCenter << endl;
cout << endl;
cout << "OuterTotalLength = " << OuterTotalLength << endl;
cout << "d_TargetCenter_OuterCenter = " << d_TargetCenter_OuterCenter << endl;
cout << endl;
cout << "---------------------------------- -----------" << endl;
cout << "Remark: this calculation assumes that the center of target is at (0,0,0)" << endl;
}