Skip to content
Snippets Groups Projects
Unverified Commit a1ab43f1 authored by Arnaud HUBER's avatar Arnaud HUBER Committed by GitHub
Browse files

Merge pull request #1 from ahuber33/save

Commit #2 le 10/01/2024 [AIFIRA2023Sim.0.1.0]
parents 383c7d03 886e8ac1
No related branches found
No related tags found
No related merge requests found
Showing
with 535 additions and 587 deletions
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
\ No newline at end of file
{
"C_Cpp.errorSquiggles": "disabled"
}
\ No newline at end of file
......@@ -67,9 +67,6 @@ set(PROJECT_SRC
${CMAKE_CURRENT_SOURCE_DIR}/src/AIFIRA2023SimRunAction.cc
${CMAKE_CURRENT_SOURCE_DIR}/src/AIFIRA2023SimSteppingAction.cc
${CMAKE_CURRENT_SOURCE_DIR}/src/AIFIRA2023SimTrackInformation.cc
${CMAKE_CURRENT_SOURCE_DIR}/src/FiberParameterisation.cc
${CMAKE_CURRENT_SOURCE_DIR}/src/FastSimModelOpFiber.cc
${CMAKE_CURRENT_SOURCE_DIR}/src/SimG4FastSimOpFiberRegion.cc
)
set(PROJECT_HEADER
......@@ -84,9 +81,6 @@ set(PROJECT_HEADER
${CMAKE_CURRENT_SOURCE_DIR}/include/AIFIRA2023SimRunAction.hh
${CMAKE_CURRENT_SOURCE_DIR}/include/AIFIRA2023SimSteppingAction.hh
${CMAKE_CURRENT_SOURCE_DIR}/include/AIFIRA2023SimTrackInformation.hh
${CMAKE_CURRENT_SOURCE_DIR}/include/FiberParameterisation.hh
${CMAKE_CURRENT_SOURCE_DIR}/include/FastSimModelOpFiber.hh
${CMAKE_CURRENT_SOURCE_DIR}/include/SimG4FastSimOpFiberRegion.hh
)
#----------------------------------------------------------------------------
......
# AIFIRA2023Sim for AIFIRA2023 Experiment [huber@cenbg.in2p3.fr, huberarnaud@gmail.com]
# INSTRUCTIONS TO USE THE SIMULATION
#- Download the VMWare [Geant4.11.0.2] (https://heberge.lp2ib.in2p3.fr/G4VM/index.html) !
#- Copy all the files from AIFIRA2023_Simulation folder [ici] (https://github.com/ahuber33/AIFIRA2023_Simulation) !
#- Create a build folder in the AIFIRA2023_Simulation folder and go inside.
#- Use this command : '''cmake -DGeant4_DIR=$G4COMP ../''' and compile it with make
#- The executable AIFIRA2023Sim will be add to your bin folder
#- If you want to have a visualization, launch this command : '''./AIFIRA2023Sim [name of ROOT file ]'''. It will generate 1 particle according to the vis.mac with QT and you will have a ROOT file with the name you gave in response located in the Resultats folder.
#- If you want to have statistics without the visualization, use this command : '''./AIFIRA2023Sim [name of ROOT file] [number of events generated] [name of macro]'''. Personnaly, I used the vrml.mac but you can create another one. Just to remember that you need to write the name of your macro when you launch the simulation.
#- An AIFIRA2023Sim.cfg file is located in bin directory. All the dimensions necessary are in this file to avoid recompilation when you want to change some parameters. If you add some other dimensions, don't forget to add the variables in Geometry.cc.
#- Based on G4EmStandardPhysics_option3 with additional Optical part.
#- DO NOT HESITATE TO REPORT BUGS OR ANY IDEAS THAT WILL IMPROVE THE SIMULATION !!!!
# Commit #1 le 09/01/2024 [AIFIRA2023Sim.0.1.0]
## - Simulation issue de la version TP_Simulation.0.9.0 -> Commit initial avec changement des noms des fichiers et des variables
## INSTRUCTIONS TO USE THE SIMULATION
- Download the VMWare [Geant4.11.0.2](https://heberge.lp2ib.in2p3.fr/G4VM/index.html)
- Copy all the files from AIFIRA2023_Simulation folder [ici](https://github.com/ahuber33/AIFIRA2023_Simulation)
- Create a build folder in the AIFIRA2023_Simulation folder and go inside.
- Use this command :
```
cmake -DGeant4_DIR=$G4COMP ../
make -j4
```
- The executable AIFIRA2023Sim will be add to your bin folder
- If you want to have a visualization, launch this command :
```
./AIFIRA2023Sim [name of ROOT file ]
```
It will generate 1 particle according to the vis.mac with QT and you will have a ROOT file with the name you gave in response located in the Resultats folder.
- If you want to have statistics without the visualization, use this command :
```
./AIFIRA2023Sim [name of ROOT file] [number of events generated] [name of macro]
```
Personnaly, I used the vrml.mac but you can create another one. Just to remember that you need to write the name of your macro when you launch the simulation.
- An AIFIRA2023Sim.cfg file is located in bin directory. All the dimensions necessary are in this file to avoid recompilation when you want to change some parameters. If you add some other dimensions, don't forget to add the variables in Geometry.cc.
- Based on G4EmStandardPhysics_option3 with additional Optical part.
- DO NOT HESITATE TO REPORT BUGS OR ANY IDEAS THAT WILL IMPROVE THE SIMULATION !!!!
## Commit #1 le 09/01/2024 [AIFIRA2023Sim.0.0.0]
- Simulation issue de la version TP_Simulation.0.9.0 -> Commit initial avec changement des noms des fichiers et des variables
## Commit #1 le 10/01/2024 [AIFIRA2023Sim.0.1.0]
1 Allègement du code issus de TP_Simulation afin de ne garder que l'essentiel
- Suppression des fichiers relatifs aux fibres optiques
- Suppression des fichiers liées à d'autres géométries
- Suppression du code liés aux champs électriques & magnétiques
- Suppression des modèles physiques liés au transport des ions (AddIonGasModels)
- Suppression des éléments permettant d'optimiser le parcours des photons dans les fibres
- Allègement des fonctions utilisées
- Allègement des variables utilisées
2 Importation code analyse reconstruction lentille
\ No newline at end of file
#include "Reconstruction_Traj_Lentille.hh"
void Reconstruction_Traj_Lentille()
{
gStyle->SetOptStat(0);
float x[NbinsX], ex[NbinsX], y[NbinsX], ey[NbinsX];
float x_new[1500], y_new[1500], ex_new[1500], ey_new[1500];
float xE[NbinsX], exE[NbinsX], yE[NbinsX], eyE[NbinsX];
float xNph[NbinsX], exNph[NbinsX], yNph[NbinsX], eyNph[NbinsX];
float distance = 300;
string filename = "Config1_He2+.root";
//string filename = "proton_EJ262_5mm_lens_75mm_300mm_CMOS_Exp_30MeV.root";
string filename_out_Nph = "Etudes_lentilles/Graph_Nph_proton_ZnS_0.2mm_5mm_lens_75mm_300mm_CMOS_Exp_30MeV.root";
string filename_out_Resolution = "Etudes_lentilles/Graph_Resolution_proton_ZnS_0.2mm_5mm_lens_75mm_300mm_CMOS_Exp_30MeV.root";
string filename_out = "../../../Images/TPSim/Analyses_Scintillateurs/Lentille/Results_proton_ZnS_0.2mm_5mm_lens_75mm_300mm_CMOS_Exp_30MeV.png";
cout << "\nStart of 2D Histogram reconstruction !!!" << endl;
TH2F* Pos = Histo_Reconstruction_2D(filename.c_str(), "2D", distance);
cout << "End of 2D Histogram reconstruction !!!" << endl;
cout << "\nStart of EPos Histogram reconstruction !!!" << endl;
TH2F* EPos = Histo_Reconstruction_Energie_Position(filename.c_str(), "Energie Position", distance);
cout << "End of EPos Histogram reconstruction !!!" << endl;
TH1F* Estart = Histo_Reconstruction_Estart(filename.c_str());
cout << "\nStart of Resolution part !!! " << endl;
// RESOLUTION PART
TH1D *ProjY = new TH1D("ProjY", "ProjY", 1000, 0, 100);
Draw_ProjY_Test(EPos, ProjY, 300);
int n=0;
for (int i=200; i<1200; i++)
{
EPos->ProjectionY("ProjY", i, i, "");
ProjY->Fit(fit_gaus_Energie, "QN");
mean = fit_gaus_Energie->GetParameter(1);
sigma = fit_gaus_Energie->GetParameter(2);
Resolution = sigma/mean;
Chi2 = fit_gaus_Energie->GetChisquare();
Ndf = fit_gaus_Energie->GetNDF();
Chi2Ndf = Chi2/Ndf;
// cout << "Mean = " << mean << endl;
// cout << "Sigma = " << sigma << endl;
// cout << "Resolution = " << Resolution << endl;
// cout << "Chi2/Ndf = " << Chi2Ndf << endl;
if(Chi2Ndf >0.5 && Chi2Ndf <60 && mean >0 && mean <120 && sigma/mean <1)
{
y[n] = fit_gaus_Energie->GetParameter(1);
ey[n] = fit_gaus_Energie->GetParameter(2);
if(ey[n] <0.1)ey[n]=0.1;
xE[n] = y[n];
exE[n] = fit_gaus_Energie->GetParError(1);
if(exE[n] >20)exE[n]=0;
yE[n] = Resolution;
//if(yE[n] >0.1)yE[n]=-0.1;
eyE[n] = fit_gaus_Energie->GetParError(2)/ey[n] + fit_gaus_Energie->GetParError(1)/y[n];
if(eyE[n] >0.1)eyE[n]=0;
//cout << "\nResolution[" << i << "] = " << yE[n] << endl;
//cout << "Chi2/Ndf[" << i << "] = " << Chi2Ndf << endl;
n++;
}
}
cout << " n = " << n << endl;
gResolution = new TGraphErrors(n, xE, yE, exE, eyE);
cout << "End of Resolution part !!! " << endl;
cout << "\nStart of Nph part !!! " << endl;
// NPH PART
TH1D *ProjX = new TH1D("ProjX", "ProjX", 1500, 0, 150);
Draw_ProjX_Test(EPos, ProjX, Estart, 1062);
int nbis=0;
for (int i=10; i<1200; i++)
{
EPos->ProjectionX("ProjX", i, i, "");
fitX = new TF1("fitX", "gaus", 0, ProjX->GetMean(1) + 2*ProjX->GetRMS(1));
fitX->SetParameter(1, ProjX->GetMean(1));
fitX->SetParameter(2, ProjX->GetRMS(1));
ProjX->Fit(fitX, "QR");
fitX1 = new TF1("fitX1", "gaus", fitX->GetParameter(1)-4*fitX->GetParameter(2), fitX->GetParameter(1)+0.5*fitX->GetParameter(2));
ProjX->Fit(fitX1, "QR");
Eval_Energy = fitX1->Eval(fitX1->GetParameter(1))/2;
if (Eval_Energy != Eval_Energy) continue; //test NaN condition !!!
NEvents = Estart->Integral(i, i);
x_new[nbis] = (i-0.5)/10;
ex_new[nbis] = 0.5;
y_new[nbis] = Eval_Energy/NEvents;
ey_new[nbis] = y_new[nbis] * ((sqrt(Eval_Energy)/Eval_Energy) + (sqrt(NEvents)/NEvents));
Chi2 = fitX1->GetChisquare();
Ndf = fitX1->GetNDF();
Chi2Ndf = Chi2/Ndf;
// cout << "\ni = " << i << endl;
// cout << "Eval = " << Eval_Energy << endl;
// cout << "Nevents = " << NEvents << endl;
// cout << "Nph = " << Eval_Energy/NEvents << endl;
// cout << "Chi2/NdF = " << Chi2Ndf << endl;
nbis++;
}
Nph = new TGraphErrors(nbis, x_new, y_new, ex_new, ey_new);
cout << "End of Nph part !!! " << endl;
// DRAW AND SAVE
Draw_Results(Estart, Pos, EPos, gResolution, Nph);
//Save_Results(filename_out, filename_out_Resolution, filename_out_Nph);
}
//float pitch = 6.5e-3; //ORCA
float pitch = 20e-3; //CMOS
//float pitch = 50e-3; //IP
float PosX = 30;
float PosY = 20;
int NbinsX=PosX/pitch;
int NbinsY=PosY/pitch;
float mean, sigma, Resolution, Chi2, Ndf, Chi2Ndf, Eval1, Eval2, MeanEval, Eval_Energy, NEvents =0;
TF1* fit_gaus_Energie = new TF1("fit_gaus_Energie", "gaus", 0, 150);
TF1*fitX;
TF1*fitX1;
TCanvas* c1;
TGraphErrors* Nph;
TGraphErrors* gResolution;
TH2F* Histo_Reconstruction_2D(const char* filename, const char* name, float d)
{
TH2F* h = new TH2F(name, name, NbinsX, -PosX/2, PosX/2, NbinsY, -PosY/2, PosY/2);
TFile* file = new TFile(filename);
std::vector<float>* x=0;
std::vector<float>* y=0;
std::vector<float>* px=0;
std::vector<float>* py=0;
float xnew, ynew=0;
TTree *Tree = (TTree*)file->Get("Optical");
Tree->SetBranchAddress("DetectorPositionX", &x);
Tree->SetBranchAddress("DetectorPositionY", &y);
Tree->SetBranchAddress("MomentumX", &px);
Tree->SetBranchAddress("MomentumY", &py);
const int Entries = Tree->GetEntries();
for(int i=0; i<Entries; i++)
//for(int i=0; i<1; i++)
{
x->clear();
y->clear();
px->clear();
py->clear();
Tree->GetEntry(i);
for(int j=0; j<(x->size()); j++)
{
xnew = x->at(j) - px->at(j)*d;
ynew = y->at(j) - py->at(j)*d;
// cout << "\nx[" << j << "] = " << x->at(j) << endl;
// cout << "y[" << j << "] = " << y->at(j) << endl;
// cout << "px[" << j << "] = " << px->at(j) << endl;
// cout << "py[" << j << "] = " << py->at(j) << endl;
// cout << "xnew[" << j << "] = " << xnew << endl;
// cout << "ynew[" << j << "] = " << ynew << endl;
h->Fill(xnew, ynew);
}
}
file->Close();
return h;
}
TH2F* Histo_Reconstruction_Energie_Position(const char* filename, const char* name, float d)
{
TH2F* h = new TH2F(name, name, NbinsX, -PosX/2, PosX/2, 2000, 0, 200);
TFile* file = new TFile(filename);
std::vector<float>* x=0;
std::vector<float>* px=0;
float xnew=0;
float E=0;
TTree *Tree = (TTree*)file->Get("Optical");
Tree->SetBranchAddress("DetectorPositionX", &x);
Tree->SetBranchAddress("MomentumX", &px);
Tree->SetBranchAddress("IncidentE", &E);
const int Entries = Tree->GetEntries();
for(int i=0; i<Entries; i++)
{
x->clear();
px->clear();
Tree->GetEntry(i);
for(int j=0; j<(x->size()); j++)
{
xnew = x->at(j) - px->at(j)*d;
h->Fill(xnew,E/1000);
}
}
file->Close();
return h;
}
TH1F* Histo_Reconstruction_Estart(const char* filename)
{
TFile* file = new TFile(filename);
TTree *Tree = (TTree*)file->Get("Optical");
float E=0;
Tree->SetBranchAddress("IncidentE", &E);
const int Entries = Tree->GetEntries();
TH1F* h = new TH1F("E_start", "E_start", 2000, 0, 200);
for(int i=0; i<Entries; i++)
{
Tree->GetEntry(i);
h->Fill(E/1000);
}
return h;
}
void Draw_ProjY_Test(TH2F* EPos, TH1D* ProjY, Int_t bin)
{
EPos->ProjectionY("ProjY", bin, bin, "");
new TCanvas;
ProjY->Draw();
ProjY->Fit(fit_gaus_Energie, "R");
mean = fit_gaus_Energie->GetParameter(1);
sigma = fit_gaus_Energie->GetParameter(2);
Resolution = sigma/mean;
Chi2 = fit_gaus_Energie->GetChisquare();
Ndf = fit_gaus_Energie->GetNDF();
Chi2Ndf = Chi2/Ndf;
cout << "Mean = " << mean << endl;
cout << "Sigma = " << sigma << endl;
cout << "Resolution = " << Resolution << endl;
cout << "Chi2/Ndf = " << Chi2Ndf << endl;
}
void Draw_ProjX_Test(TH2F* EPos, TH1D* ProjX, TH1F* Estart, Int_t bin)
{
EPos->ProjectionX("ProjX", bin, bin, "");
fitX = new TF1("fitX", "gaus", 0, ProjX->GetMean(1) + 2*ProjX->GetRMS(1));
fitX->SetParameter(1, ProjX->GetMean(1));
fitX->SetParameter(2, ProjX->GetRMS(1));
new TCanvas;
ProjX->Draw();
ProjX->Fit(fitX, "QR");
fitX1 = new TF1("fitX1", "gaus", fitX->GetParameter(1)-3*fitX->GetParameter(2), fitX->GetParameter(1)+0.5*fitX->GetParameter(2));
ProjX->Fit(fitX1, "R");
Eval_Energy = fitX1->Eval(fitX1->GetParameter(1))/2;
NEvents = Estart->Integral(bin, bin);
cout << "Eval = " << Eval_Energy << endl;
cout << "Nevents = " << NEvents << endl;
cout << "Nph = " << Eval_Energy/NEvents << endl;
cout << "GetMean = " << ProjX->GetMean(1) << endl;;
}
TH2F *Histo_Parabole_Optique(const char* filename, const char* name)
{
TFile* file = new TFile(filename);
TTree *Tree = (TTree*)file->Get("Optical");
std::vector<float>* x=0;
std::vector<float>* y=0;
Tree->SetBranchAddress("DetectorPositionX", &x);
Tree->SetBranchAddress("DetectorPositionY", &y);
//Tree->SetBranchAddress("PositionX", &x);
//Tree->SetBranchAddress("PositionY", &y);
const int Entries = Tree->GetEntries();
TH2F* h = new TH2F(name, name, NbinsX, -PosX/2, PosX/2, NbinsY, -PosY/2, PosY/2);
//TH2F* h = new TH2F(name, name, 1000, -20, 120, 1000, -20, 120);
for(int i=0; i<Entries; i++)
{
x->clear();
y->clear();
Tree->GetEntry(i);
for(int j=0; j<(x->size()); j++)
{
h->Fill(x->at(j),y->at(j));
}
}
//file->Close();
return h;
}
void Draw_Results(TH1F* Estart, TH2F* Pos, TH2F* EPos, TGraphErrors* gResolution, TGraphErrors* Nph)
{
c1 = new TCanvas("RESULTS", "RESULTS", 0, 0, 3500, 1800);
TPad *pad1 = new TPad("pad1", "", 0, 0.66, 0.31, 1);
TPad *pad2 = new TPad("pad2", "", 0.33, 0.66, 0.64, 1);
TPad *pad3 = new TPad("pad3", "", 0.66, 0.66, 0.99, 1);
TPad *pad4 = new TPad("pad4", "", 0., 0., 0.49, 0.65);
TPad *pad5 = new TPad("pad5", "", 0.51, 0., 0.99, 0.65);
//TPad *pad6 = new TPad("pad6", "", 0.31, 0., 0.6, 0.24);
pad1->Draw();
pad1->SetGridx();
pad1->SetGridy();
pad2->Draw();
pad2->SetLogz();
pad3->Draw();
pad3->SetLogz();
pad4->Draw();
pad4->SetGridx();
pad4->SetGridy();
pad5->Draw();
pad5->SetLogy();
pad5->SetGridx();
pad5->SetGridy();
//pad6->Draw();
pad1->cd();
Estart->Draw();
Estart->SetTitle("");
Estart->GetXaxis()->SetRangeUser(0, 120);
Estart->GetXaxis()->SetTitle("Incident Energy [MeV]");
Estart->GetYaxis()->SetTitle("dN/dE");
pad2->cd();
Pos->Draw("colz");
Pos->SetTitle("");
Pos->GetXaxis()->SetTitle("X Position [mm]");
Pos->GetYaxis()->SetTitle("Y Position [mm]");
pad3->cd();
EPos->Draw("colz");
EPos->SetTitle("");
EPos->GetYaxis()->SetRangeUser(0, 120);
EPos->GetXaxis()->SetTitle("X Position [mm]");
EPos->GetYaxis()->SetTitle("Incident Energy [MeV]");
pad4->cd();
gResolution->Draw("APE2");
gResolution->SetTitle("");
gResolution->GetYaxis()->SetLimits(0, 0.5);
gResolution->GetYaxis()->SetRangeUser(0, 0.5);
gResolution->GetXaxis()->SetLimits(0, 100);
gResolution->GetXaxis()->SetTitle("Incident Energy [MeV]");
gResolution->GetYaxis()->SetTitle("Energy Resolution");
gResolution->GetYaxis()->SetDecimals(2);
gResolution->SetFillColor(kRed);
gResolution->SetFillStyle(3002);
gResolution->SetLineColor(kRed);
gResolution->SetMarkerColor(kRed);
gResolution->SetLineWidth(2);
pad5->cd();
Nph->Draw("APE2");
Nph->SetTitle("");
Nph->GetYaxis()->SetRangeUser(0.01, 10);
Nph->GetXaxis()->SetRangeUser(0, 100);
Nph->GetXaxis()->SetTitle("Incident Energy [MeV]");
Nph->GetYaxis()->SetTitle("Nph [photons/pixel/particles_{detected}]");
Nph->SetFillColor(kRed);
Nph->SetMarkerColor(kRed);
Nph->SetFillStyle(3001);
Nph->SetLineColor(kRed);
Nph->SetLineWidth(3);
}
void Save_Results(string filename_out, string filename_out_Resolution, string filename_out_Nph)
{
c1->SaveAs(filename_out.c_str());
TFile file_out_Nph(filename_out_Nph.c_str(), "RECREATE");
Nph->Write();
file_out_Nph.Close();
TFile file_out_Resolution(filename_out_Resolution.c_str(), "RECREATE");
gResolution->Write();
file_out_Resolution.Close();
}
No preview for this file type
#----------Common variables----------
ScintillatorLength 40 mm
ScintillatorWidth 40 mm
ScintillatorThickness 0.1 mm
ZnSThickness 0. mm
DetectorLength 30.0 mm
DetectorWidth 20.0 mm
DetectorThickness 2.0 um
AirGap 1.0 um
\ No newline at end of file
lightyieldZnS 46500
#lightyieldZnS 0
#lightyield 8700
lightyield 0
lightyieldNoWaSH 9000
lightyield 870
#scintIndexconst 1.59
scalingfactor_low 1.0
scalingfactor_high 1.0
#paint_ref_coeff 0.95
#mylar_ref_coeff 0.95
#scintAbsorbconst 5.0 m
Air_Index 1.
File deleted
#----------Common variables----------
TeflonThickness 0.6 mm
AirGapTeflon 0.05 mm
MylarThickness 0.012 mm
AirGapMylar 0.1 mm
GlueThickness 0.3 mm
ScintillatorLength 600 mm
ScintillatorThickness 0.001 mm
ZnSThickness 0. mm
ZnSLGThickness 0. mm
DetectorLength 51.6 mm
DetectorWidth 34.0 mm
DetectorThickness 2 um
LensThickness 0 mm
LensTranslation 0 mm
DetectorTranslation 175 mm
# ElectricField Plates dimensions
EF_Value 1000 kilovolt/m
EF_Dist_between_plates 10. mm
EF_Thickness_plates 1.0 mm
EF_Length_plates 200. mm
EF_Width_plates 55.0 mm
# MagneticField Plates dimensions
MF_Value 0.78 tesla
MF_Dist_between_plates 5. mm
MF_Thickness_plates 10.0 mm
MF_Length_plates 40. mm
MF_Width_plates 40. mm
# Pinhole dimensions
Pinhole_radius_ext 4.0 cm
Pinhole_radius_int 0.1 mm
Pinhole_thickness 40.0 mm
#Positions of Plates
Dist_between_plates 10 mm
Dist_EFPlates_Detector 200. mm
Dist_pinhole_MFPlates 1 mm
translation_pinhole 15.4 mm
#Fibers
Fiber_geometry 0 #0=round & 1=square
Fiber_multi_cladding 1 #0 or 1 to activate
Fiber_number_per_line 500
Fiber_space 0.01 mm
Fiber_width 0.2 mm
Fiber_cladding_ratio 0.02
Fiber_length 1 m
#ACTIVATION G4FastTrack
G4FAST 1
......@@ -21,7 +21,7 @@
# To superimpose all of the events from a given run:
/vis/scene/endOfEventAction accumulate
/tracking/verbose 2
/tracking/verbose 1
/run/verbose 1
......@@ -48,13 +48,14 @@
# PART TO SIMULATE 1 MEV ELECTRON !!!!!!!!
/gps/particle proton
#/gps/particle geantino
/gps/pos/type Point
#/gps/pos/centre 0.0 0.0 1104.9 mm
/gps/pos/centre 0.0 0.0 -300 mm
#/gps/pos/centre 0.0 -100. 200 mm
#/gps/pos/centre 0.0 -100. 58.6 mm
#/gps/particle proton
/gps/particle geantino
#/gps/pos/type Point
/gps/pos/type Plane
/gps/pos/centre 0.0 0.0 -300.0 mm
/gps/pos/shape Circle
/gps/pos/radius 1 mm
/gps/energy 1.2 MeV
/gps/direction 0.0 0.0 1.0
#/gps/ang/type cos
......@@ -67,46 +68,10 @@
#/gps/ang/maxtheta 0.001 rad
#/gps/ang/maxtheta 0.03 rad
#/gps/ene/type Arb
#/gps/hist/type arb
#/gps/hist/file Spectre_CELIA_Mo.txt
#/gps/hist/inter Lin
#/gps/particle ion
#/gps/ion 2 4 1
#/grdm/nucleusLimits 60 60 27 27
# #/gps/pos/centre 20 15. -0.0 mm
#/gps/pos/centre 0.0 -1104 0.0 mm
#/gps/pos/centre 0. -289.778 -77.646 mm
#/gps/pos/centre 0.0 -7.7645714 -28.97777479 cm
# /gps/particle ion
# /gps/ion 55 137 0 0
# /grdm/nucleusLimits 137 137 55 55
# /gps/ang/type cos
# /gps/ang/rot1 -1 0 0
# /gps/pos/type Volume
# /gps/pos/shape Cylinder
# #/gps/pos/centre -9.25 0. 0. mm
# #/gps/pos/centre -5.24 40. -20. mm
# /gps/pos/centre -5.25 40. -20. mm
# /gps/pos/radius 22 mm
# /gps/pos/halfz 0.0005 mm
# # /gps/particle ion
# # /gps/ion 27 60 0 0
# # /grdm/nucleusLimits 60 60 27 27
# /gps/particle geantino
# /gps/energy 0.6 MeV
# /gps/direction 1.0 0.0 0.0
# /gps/pos/rot1 0 0 1
# /gps/pos/rot2 0 1 0
# /gps/ang/rot1 0 0 1
# /gps/ang/rot2 0 1 0
# #/gps/ang/type iso
/run/beamOn 1
/run/beamOn 100
......@@ -48,96 +48,21 @@
######################################################
### PART TO SIMULATE PARTICLE WITH GPS (no setgun) ###
######################################################
/gps/number 1
# PART TO SIMULATE 1 MEV ELECTRON !!!!!!!!
# #/gps/particle geantino
# /gps/particle e-
# /gps/pos/type Point
# #/gps/pos/centre 20 15. -100.0 mm
# /gps/pos/centre -5.5 0 0.0 mm
# #/gps/pos/centre 100.0 111.0 78.4 mm
# #/gps/direction 0.0 0.0 1.0
# /gps/direction 1.0 0.0 0.0
# /gps/energy 0.6 MeV
#/gps/particle e-
#/gps/pos/type Plane
#/gps/pos/shape Rectangle
#/gps/pos/centre 0. 0. -116 mm
#/gps/pos/halfx 128 mm
#/gps/pos/halfy 128 mm
#/gps/direction 0.0 0.0 1.0
#/gps/energy 1. MeV
# /gps/pos/type Volume
# /gps/pos/shape Cylinder
# #/gps/pos/centre -5.45 0. 0. mm
# #/gps/pos/centre -4.9 0. 0. mm
# #/gps/pos/centre -5.25 0. 0. mm
# /gps/pos/centre -5.25 40. 20. mm
# #40 20 => Position 5
# #-40 20 => Position 4
# #-40 -20 => Position 2
# #40 -20 => Position 3
# /gps/pos/radius 22 mm
# /gps/pos/halfz 0.0005 mm
# /gps/particle ion
# /gps/ion 27 60 0 0
# /grdm/nucleusLimits 60 60 27 27
# #/gps/particle e-
# /gps/energy 0. MeV
# /gps/pos/rot1 0 0 1
# /gps/pos/rot2 0 1 0
# /gps/ang/rot1 0 0 1
# /gps/ang/rot2 0 1 0
# /gps/ang/type iso
# #/gps/direction 1.0 0.0 0.0
# /gps/particle ion
# /gps/ion 55 137 0 0
# /grdm/nucleusLimits 137 137 55 55
#/gps/particle e-
#/gps/pos/type Point
#/gps/pos/centre 0 0. -300.0 mm
#/gps/pos/centre 0.0 0.0 -100.0 mm
#/gps/ang/type iso
#/gps/energy 5000.0 keV
#/gps/direction 0.0 0.0 1.0
# #/gps/pos/type Point
# /gps/pos/centre 0 300. 0.0 mm
# #/gps/direction 0.0 -1.0 0.0
# /gps/ang/type iso
# /gps/energy 667.0 keV
######################################################
### PART TO SIMULATE PARTICLE WITH GPS (no setgun) ###
######################################################
/gps/number 1
/gps/particle proton
/gps/pos/type Point
#/gps/pos/type Point
/gps/pos/type Plane
/gps/pos/centre 0.0 0.0 -300.0 mm
#/gps/pos/centre 0. 0.0 -6000.0 mm
#/gps/pos/centre -0. -200.0 0 mm
#/gps/energy 5 MeV
#/gps/direction 0.0 0.0 1.0
/gps/ang/type cos
/gps/ang/rot1 -1 0 0
/gps/ang/maxtheta 0.001 rad
/gps/pos/shape Circle
/gps/pos/radius 0.1 mm
/gps/energy 2.5 MeV
/gps/direction 0.0 0.0 1.0
#/gps/ang/type cos
#/gps/ang/rot1 -1 0 0
#/gps/ang/maxtheta 0.001 rad
#/gps/ang/maxtheta 0.0005 rad #100µm pin 0.000327 for 100%
......@@ -155,10 +80,10 @@
#/gps/ene/gradient 0
#/gps/ene/intercept 1
/gps/ene/type Exp
/gps/ene/min 100 keV
/gps/ene/max 110. MeV
/gps/ene/ezero 30 MeV
#/gps/ene/type Exp
#/gps/ene/min 100 keV
#/gps/ene/max 110. MeV
#/gps/ene/ezero 30 MeV
#/gps/ene/min 10 keV
#/gps/ene/max 150. MeV
#/gps/ene/ezero 30 MeV
......
......@@ -35,17 +35,9 @@ struct RunTallyOptical {
int Failed;
//int WLS;
int Detected;
std::vector<float>ExitLightPositionX;
std::vector<float>ExitLightPositionY;
std::vector<float>LensPositionX;
std::vector<float>LensPositionY;
std::vector<float>DetectorPositionX;
std::vector<float>DetectorPositionY;
std::vector<float>PositionZ;
std::vector<float>PhotonTrajectoryX;
std::vector<float>PhotonTrajectoryY;
std::vector<float>PhotonTrajectoryZ;
std::vector<int>PhotonTrajectoryNStep;
std::vector<float>MomentumX;
std::vector<float>MomentumY;
std::vector<float>MomentumZ;
......@@ -113,17 +105,9 @@ public:
int GetEscaped(){return StatsOptical.Escaped;}
void CountFailed(){StatsOptical.Failed++;}
int GetFailed(){return StatsOptical.Failed;}
void FillPhotonExitLightPositionX(G4float e){StatsOptical.ExitLightPositionX.push_back(e);}
void FillPhotonExitLightPositionY(G4float e){StatsOptical.ExitLightPositionY.push_back(e);}
void FillPhotonLensPositionX(G4float e){StatsOptical.LensPositionX.push_back(e);}
void FillPhotonLensPositionY(G4float e){StatsOptical.LensPositionY.push_back(e);}
void FillPhotonDetectorPositionX(G4float e){StatsOptical.DetectorPositionX.push_back(e);}
void FillPhotonDetectorPositionY(G4float e){StatsOptical.DetectorPositionY.push_back(e);}
void FillPhotonPositionZ(G4float e){StatsOptical.PositionZ.push_back(e);}
void FillPhotonTrajectoryX(G4float e){StatsOptical.PhotonTrajectoryX.push_back(e);}
void FillPhotonTrajectoryY(G4float e){StatsOptical.PhotonTrajectoryY.push_back(e);}
void FillPhotonTrajectoryZ(G4float e){StatsOptical.PhotonTrajectoryZ.push_back(e);}
void FillPhotonTrajectoryNStep(G4int e){StatsOptical.PhotonTrajectoryNStep.push_back(e);}
void FillPhotonFinalState(G4int e){StatsOptical.FinalState.push_back(e);}
void FillPhotonMomentumX(G4float e){StatsOptical.MomentumX.push_back(e);}
void FillPhotonMomentumY(G4float e){StatsOptical.MomentumY.push_back(e);}
......@@ -139,15 +123,7 @@ public:
void SetPhotonCreationAngle(G4float e){Photon_creation_angle=e;}
float GetPhotonCreationAngle(){return Photon_creation_angle;}
void FillFiberAngleDetection(G4float e){StatsOptical.Angle_detection.push_back(e);}
void SetTrackLengthFastSimulated(G4float a){TrackLengthFastSimulated=a;}
float GetTrackLengthFastSimulated(){return TrackLengthFastSimulated;}
void AddPhotonTrajectoryNStep(){PhotonTrajectoryNStep++;}
void ClearPhotonTrajectoryNStep(){PhotonTrajectoryNStep=0;}
int GetPhotonTrajectoryNStep(){return PhotonTrajectoryNStep;}
int GetSizePhotonTrajectoryNStep(){return StatsOptical.PhotonTrajectoryNStep.size();}
int GetSizePhotonTrajectoryX(){return StatsOptical.PhotonTrajectoryX.size();}
void SetAirIndex(G4float a){Air_Index = a;}
float GetAirIndex(){return Air_Index;}
//Functions for TP Tree
void SetParticuleID(G4double a){StatsTP.ParticuleID =a;}
......@@ -179,10 +155,7 @@ private:
RunTallyOptical StatsOptical;
RunTallyTP StatsTP;
G4String suffixe;
float TrackLengthFastSimulated;
int PhotonTrajectoryNStep;
float Photon_creation_angle;
float Air_Index;
......
......@@ -59,61 +59,18 @@ private:
// Logical Volumes
G4LogicalVolume *LogicalWorld;
G4LogicalVolume *LogicalHolder;
G4LogicalVolume *LogicalFibersHolder;
G4LogicalVolume *LogicalGM_LND;
G4LogicalVolume *LogicalSc;
G4LogicalVolume *LogicalZnS;
G4LogicalVolume *LogicalZnSLG;
G4LogicalVolume *LogicalTeflon;
G4LogicalVolume *LogicalMylar;
G4LogicalVolume *LogicalGlue;
G4LogicalVolume *LogicalPM;
G4LogicalVolume *LogicalPhotocathode;
G4LogicalVolume *LogicalLaBr3;
G4LogicalVolume *LogicalPMMA;
G4LogicalVolume *LogicalBoitierAlu;
G4LogicalVolume *LogicalEFPlates;
G4LogicalVolume *LogicalVolumeEFPlates;
G4LogicalVolume *LogicalMFPlates;
G4LogicalVolume *LogicalVolumeMFPlates;
G4LogicalVolume *LogicalPinhole;
G4LogicalVolume *LogicalCoreFiber;
G4LogicalVolume *LogicalInnerCladdingFiber;
G4LogicalVolume *LogicalOuterCladdingFiber;
G4LogicalVolume *LogicalFiber;
G4LogicalVolume *LogicalLens;
G4LogicalVolume *LogicalLens2;
// Physical volumes
G4VPhysicalVolume *PhysicalWorld;
G4VPhysicalVolume *PhysicalHolder;
G4VPhysicalVolume *PhysicalFibersHolder;
G4VPhysicalVolume *PhysicalGM_LND;
G4VPhysicalVolume *PhysicalSc;
G4VPhysicalVolume *PhysicalZnS;
G4VPhysicalVolume *PhysicalZnSLG;
G4VPhysicalVolume *PhysicalTeflon;
G4VPhysicalVolume *PhysicalMylar;
G4VPhysicalVolume *PhysicalGlue;
G4VPhysicalVolume *PhysicalPM;
G4VPhysicalVolume *PhysicalPhotocathode;
G4VPhysicalVolume *PhysicalPMMA;
G4VPhysicalVolume *PhysicalBoitierAlu;
G4VPhysicalVolume *PhysicalEFPlates;
G4VPhysicalVolume *PhysicalVolumeEFPlates;
G4VPhysicalVolume *PhysicalMFPlates;
G4VPhysicalVolume *PhysicalVolumeMFPlates;
G4VPhysicalVolume *PhysicalPinhole;
G4VPhysicalVolume *PhysicalCoreFiber;
G4VPhysicalVolume *PhysicalInnerCladdingFiber;
G4VPhysicalVolume *PhysicalOuterCladdingFiber;
G4VPhysicalVolume *PhysicalCoreFiberBunch[1000000];
G4VPhysicalVolume *PhysicalInnerCladdingFiberBunch[1000000];
G4VPhysicalVolume *PhysicalOuterCladdingFiberBunch[1000000];
G4VPhysicalVolume *PhysicalLens;
G4VPhysicalVolume *PhysicalLens2;
// Optical surfaces
G4OpticalSurface *OpticalTeflon;
......@@ -135,62 +92,16 @@ private:
// G4LogicalSkinSurface *SSScintillateur;
// Dimension values
G4double EF_Value;
G4double EF_Dist_between_plates;
G4double EF_Thickness_plates;
G4double EF_Length_plates;
G4double EF_Width_plates;
G4double MF_Value;
G4double MF_Dist_between_plates;
G4double MF_Thickness_plates;
G4double MF_Length_plates;
G4double MF_Width_plates;
G4double Dist_between_plates;
G4double Dist_EFPlates_Detector;
G4double Dist_pinhole_MFPlates;
G4double translation_pinhole;
G4double ScintillatorThickness;
G4double AirGap;
G4double ZnSThickness;
G4double ZnSLGThickness;
G4double DetectorThickness;
G4double DetectorTranslation;
G4double LensTranslation;
G4double LensThickness;
G4double PinholeThickness;
G4double FiberLength;
G4double FiberWidth;
G4double FiberSpace;
G4double FiberCladdingRatio;
G4double FiberNumberPerLine;
G4double InnerCladdingFiberRadius;
G4double OuterCladdingFiberRadius;
G4double InnerCladdingFiberWidth;
G4int NbOfFibers;
G4double FiberSpacing;
G4double FiberWidthCore;
G4double FiberWidthCladding;
G4double FiberMultiCladding;
G4double FiberGeometry;
G4double WidthBunchFibers;
G4int ActivationG4FAST;
// Dimensions PLACEMENTS
G4double Z_Position_MFPlates;
G4double Z_Position_EFPlates;
G4double Z_Position_ZnS;
G4double Z_Position_Sc;
G4double Z_Position_ZnSLG;
G4double Z_Position_Photocathode;
G4double Z_Position_Fiber;
G4double Z_Position_Lens;
// wrapping
G4double TeflonGap;
G4double TeflonThickness;
G4double MylarGap;
G4double MylarThickness;
// glue
G4double GlueThickness;
};
#endif
......@@ -144,15 +144,8 @@ private:
G4double scintAbsorbconst;
G4double scintIndexconst;
G4double scalingfactor_low;
G4double scalingfactor_high;
G4double pop_scalingfactor_low;
G4double pop_scalingfactor_high;
G4double lightyield;
G4double lightyieldZnS;
G4double lightyieldNoWaSH;
G4double paint_ref_coeff;
G4double mylar_ref_coeff;
G4double pWavelength;
G4double ratio;
G4float Air_Index;
......
......@@ -19,8 +19,6 @@ protected:
virtual void ConstructParticle();
virtual void ConstructProcess();
virtual void ConstructOp();
virtual void AddIonGasModels();
virtual void AddParameterisation();
virtual void SetCuts();
protected:
//virtual void ConstructBosons();
......
#ifndef FastSimModelOpFiber_h
#define FastSimModelOpFiber_h 1
#include "G4VFastSimulationModel.hh"
#include "G4OpBoundaryProcess.hh"
#include "G4GenericMessenger.hh"
#include "G4OpBoundaryProcess.hh"
#include "G4Material.hh"
class Geometry;
class FastSimModelOpFiber : public G4VFastSimulationModel {
public:
FastSimModelOpFiber(G4String, G4Region*, G4double);
~FastSimModelOpFiber();
virtual G4bool IsApplicable(const G4ParticleDefinition&);
virtual G4bool ModelTrigger(const G4FastTrack&);
virtual void DoIt(const G4FastTrack&, G4FastStep&);
void AddCoreTrackLength(G4double a){CoreTrackLength+=a;}
void SetCoreMaterial(G4Material* mat) { fCoreMaterial = mat; }
private:
void DefineCommands();
bool checkTotalInternalReflection(const G4Track* track);
G4double CalculateVelocityForOpticalPhoton(const G4Track* track);
void setOpBoundaryProc(const G4Track* track);
void getCoreMaterial(const G4Track* track);
void reset();
G4GenericMessenger* fMessenger;
G4OpBoundaryProcess* fOpBoundaryProc;
G4Material* fCoreMaterial;
G4bool fProcAssigned;
G4bool fSquareGeometry;
G4int fSafety;
G4int fSafetyFiberCore;
G4double fTrkLength;
G4double fNtransport;
G4double fTransportUnit;
G4double fTrkLengthBis;
G4double fTrkLengthTer;
G4ThreeVector fFiberAxis;
G4bool fKill;
G4int fNtotIntRefl;
G4int fTrackId;
G4double FiberMultiCladding;
G4double CoreTrackLength;
};
#endif
/// FiberParametrisation.hh
//// Auteur: Arnaud HUBER for ENL group <huber@cenbg.in2p3.fr>
//// Copyright: 2022 (C) Projet RATP - ENL [LP2IB] - CELIA
#ifndef FiberParameterisation_h
#define FiberParameterisation_h 1
#include "globals.hh"
#include "G4VPVParameterisation.hh"
class G4VPhysicalVolume;
class G4Box;
// Dummy declarations to get rid of warnings ...
class G4Trd;
class G4Trap;
class G4Cons;
class G4Orb;
class G4Sphere;
class G4Ellipsoid;
class G4Torus;
class G4Para;
class G4Hype;
class G4Tubs;
class G4Polycone;
class G4Polyhedra;
/// A parameterisation that describes a series of boxes along Z.
///
/// The boxes have equal width, & their lengths are a linear equation.
/// They are spaced an equal distance apart, starting from given location.
class FiberParameterisation : public G4VPVParameterisation
{
public:
FiberParameterisation(G4int noFibers,
G4double startZ,
G4double spacing,
G4double widthFiber,
G4double length);
~FiberParameterisation() override;
void ComputeTransformation (const G4int copyNo,
G4VPhysicalVolume* physVol) const override;
void ComputeDimensions (G4Box & trackerLayer, const G4int copyNo,
const G4VPhysicalVolume* physVol) const override;
void ComputeDimensions (G4Tubs & trackerLayer, const G4int copyNo,
const G4VPhysicalVolume* physVol) const override;
private: // Dummy declarations to get rid of warnings ...
//void ComputeDimensions (G4Box&,const G4int,
// const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Trd&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Trap&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Cons&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Sphere&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Orb&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Ellipsoid&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Torus&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Para&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Hype&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Polycone&,const G4int,
const G4VPhysicalVolume*) const override {}
void ComputeDimensions (G4Polyhedra&,const G4int,
const G4VPhysicalVolume*) const override {}
private:
G4int fNoFibers;
G4double fStart;
G4double fLength; // Length fiber
G4double fSpacing; // The distance between the Fibers' center
G4double fWidth; // Case of Squared Fiber
};
#endif
......@@ -36,70 +36,21 @@ public:
public:
// Functions to call this geometry in x_blockGeometry.cc
G4LogicalVolume *GetCoreRoundFiber();
G4LogicalVolume *GetInnerCladdingRoundFiber();
G4LogicalVolume *GetOuterCladdingRoundFiber();
G4LogicalVolume *GetCoreSquareFiber();
G4LogicalVolume *GetCladdingSquareFiber();
G4LogicalVolume *GetScTest();
G4LogicalVolume *GetEFPlates();
G4LogicalVolume *GetVolumeEFPlates();
G4LogicalVolume *GetMFPlates();
G4LogicalVolume *GetVolumeMFPlates();
G4LogicalVolume *GetPinhole();
G4LogicalVolume *GetLaBr3();
G4LogicalVolume *GetSc();
G4LogicalVolume *GetZnS();
G4LogicalVolume *GetZnSLG();
G4LogicalVolume *GetPhotocathode();
G4LogicalVolume *GetRoundPhotocathode();
G4LogicalVolume *GetLens();
// Functions that can be called to return various scint dimensions
//****************COMMON********************
// wrapping
G4double GetTeflonThickness(){return TeflonThickness;}
G4double GetAirGapTeflon(){return AirGapTeflon;}
G4double GetMylarThickness(){return MylarThickness;}
G4double GetAirGapMylar(){return AirGapMylar;}
// glue
G4double GetGlueThickness(){return GlueThickness;}
// ElectricField Plates
G4double GetEFValue(){return EF_Value;}
G4double GetEFDistBetweenPlates(){return EF_Dist_between_plates;}
G4double GetEFPlatesThickness(){return EF_Thickness_plates;}
G4double GetEFPlatesLength(){return EF_Length_plates;}
G4double GetEFPlatesWidth(){return EF_Width_plates;}
// MagneticField Plates
G4double GetMFValue(){return MF_Value;}
G4double GetMFDistBetweenPlates(){return MF_Dist_between_plates;}
G4double GetMFPlatesThickness(){return MF_Thickness_plates;}
G4double GetMFPlatesLength(){return MF_Length_plates;}
G4double GetMFPlatesWidth(){return MF_Width_plates;}
// Position of Plates
G4double GetDistBetweenPlates(){return Dist_between_plates;}
G4double GetEFPlatesDetector(){return Dist_EFPlates_Detector;}
G4double GetPinholeMFPlates(){return Dist_pinhole_MFPlates;}
G4double GetPinholeThickness(){return Pinhole_thickness;}
G4double GetTranslationPinhole(){return translation_pinhole;}
G4double GetAirGap(){return AirGap;}
// Position of Detector
G4double GetScintillatorThickness(){return ScintillatorThickness;}
G4double GetZnSThickness(){return ZnSThickness;}
G4double GetZnSLGThickness(){return ZnSLGThickness;}
G4double GetDetectorThickness(){return DetectorThickness;}
G4double GetDetectorTranslation(){return DetectorTranslation;}
G4double GetLensTranslation(){return LensTranslation;}
G4double GetLensThickness(){return LensThickness;}
G4double GetFiberLength(){return Fiber_length;}
G4double GetFiberWidth(){return Fiber_width;}
G4double GetFiberSpace(){return Fiber_space;}
G4double GetFiberCladdingRatio(){return Fiber_cladding_ratio;}
G4double GetFiberNumberPerLine(){return Fiber_number_per_line;}
G4int GetFiberMultiCladdingOption(){return Fiber_multi_cladding;}
G4int GetFiberGeometry(){return Fiber_geometry;}
G4int GetActivationG4FAST(){return Activation_G4FAST;}
private:
......@@ -117,62 +68,16 @@ private:
G4LogicalVolume *LogicalVolume;
G4double ScintillatorLength;
G4double ScintillatorWidth;
G4double ScintillatorThickness;
G4double ZnSThickness;
G4double ZnSLGThickness;
G4double DetectorLength;
G4double DetectorWidth;
G4double DetectorThickness;
G4double DetectorTranslation;
G4double LensTranslation;
G4double LensThickness;
// Physical Dimensions
// wrapping
G4double AirGapTeflon;
G4double TeflonThickness;
G4double AirGapMylar;
G4double MylarThickness;
// glue
G4double GlueThickness;
//ElectricField Plates
G4double EF_Value;
G4double EF_Dist_between_plates;
G4double EF_Thickness_plates;
G4double EF_Length_plates;
G4double EF_Width_plates;
//MagneticField Plates
G4double MF_Value;
G4double MF_Dist_between_plates;
G4double MF_Thickness_plates;
G4double MF_Length_plates;
G4double MF_Width_plates;
//Pinhole
G4double Pinhole_radius_ext;
G4double Pinhole_radius_int;
G4double Pinhole_thickness;
//Position of Plates
G4double Dist_between_plates;
G4double Dist_EFPlates_Detector;
G4double Dist_pinhole_MFPlates;
G4double translation_pinhole;
//Fibers
G4int Fiber_geometry;
G4int Fiber_multi_cladding;
G4double Fiber_number_per_line;
G4double Fiber_cladding_ratio;
G4double Fiber_length;
G4double Fiber_width;
G4double Fiber_space;
//G4FastTrack
G4int Activation_G4FAST;
G4double AirGap;
// Other
G4VisAttributes *clear;
......
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