From b8161780e4ab25e18a3bf4e382aef8529d518b78 Mon Sep 17 00:00:00 2001 From: Javier Galan Date: Thu, 6 Oct 2022 11:21:45 +0200 Subject: [PATCH 1/8] 11.Xrays adding validation for Fe55 peak --- .github/workflows/validation.yml | 9 ++++- examples/11.Xrays/Fe55.rml | 64 ++++++++++++++++++++++++++++++++ examples/11.Xrays/ValidateFe55.C | 19 ++++++++++ 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 examples/11.Xrays/Fe55.rml create mode 100644 examples/11.Xrays/ValidateFe55.C diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index d8175223..f34b1324 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -366,13 +366,20 @@ jobs: with: path: ${{ env.REST_PATH }} key: ${{ env.BRANCH_NAME }}-${{ github.sha }} - - name: Run example + - name: Launching Gammas run: | source ${{ env.REST_PATH }}/thisREST.sh cd ${{ env.REST_PATH }}/examples/restG4/11.Xrays/ restG4 xrays.rml -o xrays_simulation.root restManager --c analysis.rml --f xrays_simulation.root --o xrays_simulation_analysis.root restRoot -b -q GetQE.C'("xrays_simulation_analysis.root")' + - name: Launching Fe55 source + run: | + source ${{ env.REST_PATH }}/thisREST.sh + cd ${{ env.REST_PATH }}/examples/restG4/11.Xrays/ + restG4 Fe55.rml -o Fe55_simulation.root + restManager --c analysis.rml --f Fe55_simulation.root --o Fe55_simulation_analysis.root + restRoot -b -q ValidateFe55.C'("Fe55_simulation_analysis.root")' restG4-examples-12: name: "Example 12: Generators" diff --git a/examples/11.Xrays/Fe55.rml b/examples/11.Xrays/Fe55.rml new file mode 100644 index 00000000..fc71eed3 --- /dev/null +++ b/examples/11.Xrays/Fe55.rml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // Use only one EM physics list + + + + + + + + + + + + + + + + + + + diff --git a/examples/11.Xrays/ValidateFe55.C b/examples/11.Xrays/ValidateFe55.C new file mode 100644 index 00000000..57a57ef2 --- /dev/null +++ b/examples/11.Xrays/ValidateFe55.C @@ -0,0 +1,19 @@ +Int_t ValidateFe55(std::string fName) { + TRestRun run(fName); + + TRestAnalysisTree* aTree = run.GetAnalysisTree(); + + aTree->Draw("g4Ana_totalEdep"); + + TH1D* h = (TH1D*)aTree->GetHistogram(); + + Int_t peakCounts = h->Integral(h->FindFixBin(5.7), h->FindFixBin(5.9)); + + if (peakCounts < 1600 || peakCounts > 1750) { + std::cout << "Problem on Fe55 gamma peak identification." << std::endl; + std::cout << "Peak counts found : " << peakCounts << std::endl; + std::cout << "The result should be in the range ( 1600, 1750 )" << std::endl; + } + + return 0; +} From ba33b006122fb6f615ea5851bf667ccf7f7d7b00 Mon Sep 17 00:00:00 2001 From: Javier Galan Date: Thu, 6 Oct 2022 11:27:00 +0200 Subject: [PATCH 2/8] Updating README.md --- examples/11.Xrays/README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/examples/11.Xrays/README.md b/examples/11.Xrays/README.md index 80c4f95b..34ae29dc 100644 --- a/examples/11.Xrays/README.md +++ b/examples/11.Xrays/README.md @@ -9,11 +9,16 @@ This example uses an x-ray gun with photons in the (0,15)keV range hitting a gas This example implements a simple geometry based on a cylinder full of a Xenon gas mixture. #### Testing the example + +There are two independent examples that exploit this detector geometry + +##### Example 1. Launching gammas + Execute the following to launch the x-rays ``` restG4 xrays.rml -restManager --c analsis.rml --f RestG4_xrays_00001_ArgonISO.root +restManager --c analysis.rml --f RestG4_xrays_00001_ArgonISO.root ``` The script GetQE.C will produce few histograms with the calculated efficiency: @@ -21,3 +26,14 @@ The script GetQE.C will produce few histograms with the calculated efficiency: ``` restRoot -b -q GetQE.C'("Run_g4Analysis_00001_xrays.root")' ``` + +##### Example 2. Fe55 isotropic source generator + +Execute the following to launch the Fe55 source events + +``` +restG4 Fe55.rml -o RestG4_Fe55_ArgonISO.root +restManager --c analysis.rml --f RestG4_Fe55_ArgonISO.root +``` + +The `ValidationFe55.C` is used on the pipeline to verify that the number of events inside the peak remains correct. From b0fb52c432ad389c3ccc3958936d2e361f491fc9 Mon Sep 17 00:00:00 2001 From: Javier Galan Date: Thu, 6 Oct 2022 11:52:11 +0200 Subject: [PATCH 3/8] Uploading example 14.DetectorResponse --- .../14.DetectorResponse/DetectorResponse.rml | 59 ++++++++++++++++++ .../14.DetectorResponse/ValidateResponse.C | 20 ++++++ examples/14.DetectorResponse/analysis.rml | 28 +++++++++ .../geometry/geometry.gdml | 28 +++++++++ .../14.DetectorResponse/geometry/setup.gdml | 36 +++++++++++ .../images/PureXenonResponse.png | Bin 0 -> 49639 bytes .../14.DetectorResponse/launchResponse.sh | 5 ++ 7 files changed, 176 insertions(+) create mode 100644 examples/14.DetectorResponse/DetectorResponse.rml create mode 100644 examples/14.DetectorResponse/ValidateResponse.C create mode 100644 examples/14.DetectorResponse/analysis.rml create mode 100644 examples/14.DetectorResponse/geometry/geometry.gdml create mode 100644 examples/14.DetectorResponse/geometry/setup.gdml create mode 100644 examples/14.DetectorResponse/images/PureXenonResponse.png create mode 100644 examples/14.DetectorResponse/launchResponse.sh diff --git a/examples/14.DetectorResponse/DetectorResponse.rml b/examples/14.DetectorResponse/DetectorResponse.rml new file mode 100644 index 00000000..6c1cac02 --- /dev/null +++ b/examples/14.DetectorResponse/DetectorResponse.rml @@ -0,0 +1,59 @@ + + + + %options are : essential silent, warning, info, debug + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/14.DetectorResponse/ValidateResponse.C b/examples/14.DetectorResponse/ValidateResponse.C new file mode 100644 index 00000000..16bf350d --- /dev/null +++ b/examples/14.DetectorResponse/ValidateResponse.C @@ -0,0 +1,20 @@ +Int_t ValidateResponse(std::string fName) { + TRestRun run(fName); + TRestAnalysisTree* aTree = run.GetAnalysisTree(); + aTree->Draw("g4Ana_totalEdep"); + TH1D* h = (TH1D*)aTree->GetHistogram(); + + TRestGeant4Metadata* md = (TRestGeant4Metadata*)run.GetMetadataClass("TRestGeant4Metadata"); + + Double_t efficiency = h->Integral() / md->GetNumberOfEvents(); + + Double_t efficiencyReference = 0.91; + std::cout << "Overall efficiency : " << efficiency << std::endl; + + if (TMath::Abs(efficiency - efficiencyReference) > 0.03) { + cout << "The efficiency does not match the reference value of " << efficiencyReference << endl; + return 1; + } + + return 0; +} diff --git a/examples/14.DetectorResponse/analysis.rml b/examples/14.DetectorResponse/analysis.rml new file mode 100644 index 00000000..a29a59d4 --- /dev/null +++ b/examples/14.DetectorResponse/analysis.rml @@ -0,0 +1,28 @@ + + + + %options are : essential silent, warning, info, debug + + + + + + + + + + + + + + + + // observables = all will add all NON `custom` observables + + + + + diff --git a/examples/14.DetectorResponse/geometry/geometry.gdml b/examples/14.DetectorResponse/geometry/geometry.gdml new file mode 100644 index 00000000..3733bc11 --- /dev/null +++ b/examples/14.DetectorResponse/geometry/geometry.gdml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/14.DetectorResponse/geometry/setup.gdml b/examples/14.DetectorResponse/geometry/setup.gdml new file mode 100644 index 00000000..c6c208ff --- /dev/null +++ b/examples/14.DetectorResponse/geometry/setup.gdml @@ -0,0 +1,36 @@ + + + + + + ]> + + + + + + + + + + + + + + + + + + + + &materials; + + &geometry; + + + + + + diff --git a/examples/14.DetectorResponse/images/PureXenonResponse.png b/examples/14.DetectorResponse/images/PureXenonResponse.png new file mode 100644 index 0000000000000000000000000000000000000000..39304714926e3b62b93b5a52812540e558322f3b GIT binary patch literal 49639 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 literal 0 HcmV?d00001 diff --git a/examples/14.DetectorResponse/launchResponse.sh b/examples/14.DetectorResponse/launchResponse.sh new file mode 100644 index 00000000..117f72ca --- /dev/null +++ b/examples/14.DetectorResponse/launchResponse.sh @@ -0,0 +1,5 @@ +export GDML_PRESSURE=1.5 +export GDML_NEON_PCT=30 +export GDML_DRIFT=3 +export GDML_DETECTOR_SIZE=6 +restG4 DetectorResponse.rml From ea168cae4cad49991c7b5279cab536b4bdc697cd Mon Sep 17 00:00:00 2001 From: Javier Galan Date: Thu, 6 Oct 2022 11:52:49 +0200 Subject: [PATCH 4/8] 14.DetectorReponse/README.md upload --- examples/14.DetectorResponse/README.md | 53 ++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 examples/14.DetectorResponse/README.md diff --git a/examples/14.DetectorResponse/README.md b/examples/14.DetectorResponse/README.md new file mode 100644 index 00000000..359901e2 --- /dev/null +++ b/examples/14.DetectorResponse/README.md @@ -0,0 +1,53 @@ +**Date:** 30/September/2022 + +**Author:** Javier Galan (javier.galan@unizar.es) + +#### Detector geometry + +This example implements a simple geometry composed by a `detector` box representing a gaseous TPC active volume. The detector has a squared shaped defined by the system variable `GDML_DETECTOR_SIZE` in cm, and a drift distance (defined on the z coordinate) of size `GDML_DRIFT`. + +The geometry defines a gas mixture made of Neon and Xenon, the pressure and composition of this mixture can be controlled using `GDML_PRESSURE` in bar, and `GDML_NEON_PCT`. + +#### Event generator + +The event generator will launch photons parallel to the z-axis towards the center of the detector. The energy of those photons will be homogeneously distributed between 0 and 15 keV. + +#### Testing the example + +Execute the following to generate a dataset. + +``` +export GDML_PRESSURE=1.5 +export GDML_NEON_PCT=30 +export GDML_DRIFT=3 +export GDML_DETECTOR_SIZE=6 +restG4 DetectorResponse.rml +``` + +or simply use the bash script + +``` +source launchResponse.sh +``` + +Then, populate the analysis tree by executing + +``` +restManager --c g4Analysis.rml --f Input.root --o Output.root +``` + +where `Input.root` is the file previously generated by `restG4`. + +Then open and explore the file using: + +``` +restRoot Output.root +[0] new TBrowser +``` + +#### Results + +The execution of the example should produce the following result for pure xenon. + +![PureXenon](images/PureXenonResponse.png) + From c690a4fb2b643c39423410c0d3a0f662756b524a Mon Sep 17 00:00:00 2001 From: Javier Galan Date: Thu, 6 Oct 2022 11:55:56 +0200 Subject: [PATCH 5/8] Adding validation for 14.DetectorResponse example --- .github/workflows/validation.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index f34b1324..5a1d922e 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -423,6 +423,28 @@ jobs: restG4 Neutrons.rml -o Neutrons.root -e 1 restRoot -b -q Validate.C'("Neutrons.root")' + restG4-examples-14: + name: "Example 14: DetectorResponse" + runs-on: ubuntu-latest + container: + image: ghcr.io/lobis/root-geant4-garfield:rest-for-physics + needs: [ check-installation, restG4-examples-10 ] + steps: + - uses: actions/checkout@v3 + - name: Restore cache + uses: actions/cache@v3 + id: framework-install-restG4-cache + with: + path: ${{ env.REST_PATH }} + key: ${{ env.BRANCH_NAME }}-${{ github.sha }} + - name: Run example + run: | + source ${{ env.REST_PATH }}/thisREST.sh + cd ${{ env.REST_PATH }}/examples/restG4/14.DetectorResponse/ + source launchResponse.sh + restManager --c analysis.rml --f RestG4_XenonNeon_30Pct_1.5bar_Drift3cm_Size6cm.root + restRoot -b -q ValidateResponse.C'("G4Analysis_XenonNeon_30Pct_1.5bar_Drift3cm_Size6cm.root")' + # Reference version of Geant4 framework-install-reference: From 49f79f88f9ec6fb63a60ced20e2c67658c52bb61 Mon Sep 17 00:00:00 2001 From: Javier Galan Date: Fri, 7 Oct 2022 09:33:59 +0200 Subject: [PATCH 6/8] 14.DetectorResponse. Generalizing the example for any gas --- .gitignore | 1 + examples/14.DetectorResponse/DetectorResponse.rml | 6 +++--- examples/14.DetectorResponse/geometry/geometry.gdml | 2 +- examples/14.DetectorResponse/geometry/setup.gdml | 2 +- examples/14.DetectorResponse/launchResponse.sh | 1 + 5 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..4ea40f83 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.root diff --git a/examples/14.DetectorResponse/DetectorResponse.rml b/examples/14.DetectorResponse/DetectorResponse.rml index 6c1cac02..1a05ab0a 100644 --- a/examples/14.DetectorResponse/DetectorResponse.rml +++ b/examples/14.DetectorResponse/DetectorResponse.rml @@ -8,17 +8,17 @@ - + - + - + diff --git a/examples/14.DetectorResponse/geometry/geometry.gdml b/examples/14.DetectorResponse/geometry/geometry.gdml index 3733bc11..25a8f053 100644 --- a/examples/14.DetectorResponse/geometry/geometry.gdml +++ b/examples/14.DetectorResponse/geometry/geometry.gdml @@ -6,7 +6,7 @@ - + diff --git a/examples/14.DetectorResponse/geometry/setup.gdml b/examples/14.DetectorResponse/geometry/setup.gdml index c6c208ff..fe057ce8 100644 --- a/examples/14.DetectorResponse/geometry/setup.gdml +++ b/examples/14.DetectorResponse/geometry/setup.gdml @@ -1,5 +1,5 @@ - + diff --git a/examples/14.DetectorResponse/launchResponse.sh b/examples/14.DetectorResponse/launchResponse.sh index 117f72ca..ce7b62ab 100644 --- a/examples/14.DetectorResponse/launchResponse.sh +++ b/examples/14.DetectorResponse/launchResponse.sh @@ -1,3 +1,4 @@ +export GDML_GAS="XenonNeon" export GDML_PRESSURE=1.5 export GDML_NEON_PCT=30 export GDML_DRIFT=3 From 22101cc1b49a27e7b0fcbb9016d60951cb44769f Mon Sep 17 00:00:00 2001 From: Javier Galan Date: Fri, 7 Oct 2022 10:40:47 +0200 Subject: [PATCH 7/8] 14.DetectorResponse. Merging into a single geometry file --- .../14.DetectorResponse/DetectorResponse.rml | 3 +- examples/14.DetectorResponse/geometry.gdml | 56 +++++++++++++++++++ .../geometry/geometry.gdml | 28 ---------- .../14.DetectorResponse/geometry/setup.gdml | 36 ------------ .../14.DetectorResponse/launchResponse.sh | 6 +- 5 files changed, 62 insertions(+), 67 deletions(-) create mode 100644 examples/14.DetectorResponse/geometry.gdml delete mode 100644 examples/14.DetectorResponse/geometry/geometry.gdml delete mode 100644 examples/14.DetectorResponse/geometry/setup.gdml diff --git a/examples/14.DetectorResponse/DetectorResponse.rml b/examples/14.DetectorResponse/DetectorResponse.rml index 1a05ab0a..e36d7a26 100644 --- a/examples/14.DetectorResponse/DetectorResponse.rml +++ b/examples/14.DetectorResponse/DetectorResponse.rml @@ -15,7 +15,7 @@ - + @@ -32,7 +32,6 @@ - diff --git a/examples/14.DetectorResponse/geometry.gdml b/examples/14.DetectorResponse/geometry.gdml new file mode 100644 index 00000000..8d96747a --- /dev/null +++ b/examples/14.DetectorResponse/geometry.gdml @@ -0,0 +1,56 @@ + + + + + + ]> + + + + + + + + + + + + + + + + + + &materials; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/14.DetectorResponse/geometry/geometry.gdml b/examples/14.DetectorResponse/geometry/geometry.gdml deleted file mode 100644 index 25a8f053..00000000 --- a/examples/14.DetectorResponse/geometry/geometry.gdml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/14.DetectorResponse/geometry/setup.gdml b/examples/14.DetectorResponse/geometry/setup.gdml deleted file mode 100644 index fe057ce8..00000000 --- a/examples/14.DetectorResponse/geometry/setup.gdml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - ]> - - - - - - - - - - - - - - - - - - - - &materials; - - &geometry; - - - - - - diff --git a/examples/14.DetectorResponse/launchResponse.sh b/examples/14.DetectorResponse/launchResponse.sh index ce7b62ab..9032476c 100644 --- a/examples/14.DetectorResponse/launchResponse.sh +++ b/examples/14.DetectorResponse/launchResponse.sh @@ -1,6 +1,10 @@ +# Xenon. Following the britannica.com the xenon density is 5.887mg/cm3 at 1atm and 0 degrees celsius +export GDML_TARGET_DENSITY=5.887 +# Neon. Following britannica.com the neon density is 0.889mg/cm3 at 1atm and 0 degrees celsius --> +export GDML_QUENCHER_DENSITY=0.8999 export GDML_GAS="XenonNeon" export GDML_PRESSURE=1.5 -export GDML_NEON_PCT=30 +export GDML_QUENCHER_PCT=30 export GDML_DRIFT=3 export GDML_DETECTOR_SIZE=6 restG4 DetectorResponse.rml From 265b9945a1604f4ff11c80390d84e017a306e366 Mon Sep 17 00:00:00 2001 From: Javier Galan Date: Fri, 7 Oct 2022 10:45:40 +0200 Subject: [PATCH 8/8] 14.DetectorResponse. Fixing issue on DetectorResponse.rml --- examples/14.DetectorResponse/DetectorResponse.rml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/14.DetectorResponse/DetectorResponse.rml b/examples/14.DetectorResponse/DetectorResponse.rml index e36d7a26..93d8d38a 100644 --- a/examples/14.DetectorResponse/DetectorResponse.rml +++ b/examples/14.DetectorResponse/DetectorResponse.rml @@ -8,7 +8,7 @@ - +