Skip to content
Snippets Groups Projects
Commit 7f980506 authored by flavigny's avatar flavigny
Browse files

* 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
#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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment