Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
nptool
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
np
nptool
Commits
7f980506
Commit
7f980506
authored
4 years ago
by
flavigny
Browse files
Options
Downloads
Patches
Plain Diff
* Add a macro to calculate distance Target-Strasse detectors
parent
fc4a0675
No related branches found
No related tags found
No related merge requests found
Pipeline
#76973
passed
4 years ago
Stage: build-NPLib
Stage: build-NPSimulation
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
Projects/Strasse/CalculateDetectorOffset.C
+255
-0
255 additions, 0 deletions
Projects/Strasse/CalculateDetectorOffset.C
with
255 additions
and
0 deletions
Projects/Strasse/CalculateDetectorOffset.C
0 → 100644
+
255
−
0
View file @
7f980506
#include
<iostream>
#include
<ctime>
#include
<cstdlib>
using
namespace
std
;
// ROOT headers
#include
"TString.h"
// nptool headers
#include
"NPInputParser.h"
using
namespace
NPL
;
void
CalculateDetectorOffset
(
const
char
*
fname
=
"strasse_optimized"
){
// 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
);
}
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 //
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
;
if
(
starget
.
size
()
==
1
){
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"
);
}
else
{
cout
<<
"ERROR: Target token list incomplete, check your input file"
<<
endl
;
exit
(
1
);
}
}
//////////////////////////////////////////////////
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
+
InnerTotalLength
/
2
.
-
Inner_Wafer_GuardRing
-
Inner_PCB_UpstreamWidth
;
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
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment