diff --git a/benchmarks/beamline/Snakefile b/benchmarks/beamline/Snakefile
index 88de43c1819019fba167682fa4a27d3aef3f45f0..6c5639f385ff816ed10411edc267830482ba6ea4 100644
--- a/benchmarks/beamline/Snakefile
+++ b/benchmarks/beamline/Snakefile
@@ -1,10 +1,8 @@
rule beamline_sim:
input:
- macro="{test}GPS.mac",
+ macro="benchmarks/beamline/beamlineGPS.mac",
output:
- "/scratch/EIC/G4out/beamline/{test}Test{tag}.edm4hep.root",
- log:
- "/scratch/EIC/G4out/beamline/{test}Test{tag}.edm4hep.root.log",
+ "sim_output/beamline/beamlineTest{CAMPAIGN}.edm4hep.root",
shell:
"""
exec npsim \
@@ -16,17 +14,46 @@ rule beamline_sim:
"""
rule beamline_analysis:
- input:
- data="/scratch/EIC/G4out/beamline/{test}Test{tag}.edm4hep.root",
- script="{test}Analysis.C",
- output:
- "/scratch/EIC/ReconOut/beamline/{test}TestAnalysis{tag}.root"
- log:
- "/scratch/EIC/ReconOut/beamline/{test}TestAnalysis{tag}.root.log"
params:
xml=os.getenv("DETECTOR_PATH")+"/epic_ip6_extended.xml",
+ input:
+ script="benchmarks/beamline/beamlineAnalysis.C",
+ data="sim_output/beamline/beamlineTest{CAMPAIGN}.edm4hep.root",
+ output:
+ rootfile="sim_output/beamline/analysis/beamlineTestAnalysis{CAMPAIGN}.root",
+ beamspot_canvas="sim_output/beamline/analysis/beamspot_{CAMPAIGN}.png",
+ x_px_canvas="sim_output/beamline/analysis/x_px_{CAMPAIGN}.png",
+ y_py_canvas="sim_output/beamline/analysis/y_py_{CAMPAIGN}.png",
+ fitted_position_means_stdevs_canvas="sim_output/beamline/analysis/fitted_position_means_stdevs_{CAMPAIGN}.png",
+ fitted_momentum_means_stdevs_canvas="sim_output/beamline/analysis/fitted_momentum_means_stdevs_{CAMPAIGN}.png",
+ pipe_parameter_canvas="sim_output/beamline/analysis/pipe_parameter_{CAMPAIGN}.png",
shell:
"""
- root -l -b -q 'analysis.C("{input.data}", "{output}", "{params.xml}")'
+ root -l -b -q '{input.script}("{input.data}", "{output.rootfile}", "{params.xml}",
+ "{output.beamspot_canvas}", "{output.x_px_canvas}", "{output.y_py_canvas}",
+ "{output.fitted_position_means_stdevs_canvas}", "{output.fitted_momentum_means_stdevs_canvas}",
+ "{output.pipe_parameter_canvas}")'
"""
+rule beamline:
+ input:
+ [
+ "sim_output/beamline/analysis/beamlineTestAnalysis{CAMPAIGN}.root",
+ "sim_output/beamline/analysis/beamspot_{CAMPAIGN}.png",
+ "sim_output/beamline/analysis/x_px_{CAMPAIGN}.png",
+ "sim_output/beamline/analysis/y_py_{CAMPAIGN}.png",
+ "sim_output/beamline/analysis/fitted_position_means_stdevs_{CAMPAIGN}.png",
+ "sim_output/beamline/analysis/fitted_momentum_means_stdevs_{CAMPAIGN}.png",
+ "sim_output/beamline/analysis/pipe_parameter_{CAMPAIGN}.png",
+ ],
+ output:
+ directory("results/beamline/{CAMPAIGN}/")
+ shell:
+ """
+ mkdir {output}
+ cp {input} {output}
+ """
+
+rule beamline_local:
+ input:
+ "results/beamline/local/"
\ No newline at end of file
diff --git a/benchmarks/beamline/beamlineAnalysis.C b/benchmarks/beamline/beamlineAnalysis.C
index 32cd51cdce877c5fe9c70f7e755ba27e67d609d3..64b251b2e26b86856497fc71ad170f5df13953c7 100644
--- a/benchmarks/beamline/beamlineAnalysis.C
+++ b/benchmarks/beamline/beamlineAnalysis.C
@@ -21,7 +21,14 @@ using RNode = ROOT::RDF::RNode;
void beamlineAnalysis( TString inFile = "/scratch/EIC/G4out/beamline/beamlineTest.edm4hep.root",
TString outFile = "output.root",
- std::string compactName = "/home/simong/EIC/epic/install/share/epic/epic_ip6_extended.xml"){
+ std::string compactName = "/home/simong/EIC/epic/install/share/epic/epic_ip6_extended.xml",
+ TString beamspotCanvasName = "beamspot_canvas.png",
+ TString x_pxCanvasName = "x_px_canvas.png",
+ TString y_pyCanvasName = "y_py_canvas.png",
+ TString fittedPositionMeansCanvasName = "fitted_means_stddevs.png",
+ TString fittedMomentumMeansCanvasName = "fitted_momentum_means_stddevs.png",
+ TString pipeParamsCanvasName = "pipe_parameters.png"
+ ){
//Set ROOT style
gStyle->SetPadLeftMargin(0.1); // Set left margin
@@ -305,9 +312,9 @@ void beamlineAnalysis( TString inFile = "/scratch/EIC/G4out/beamline/b
}
// Save 2D canvases as pngs
- cXY->SaveAs("beamspot.png");
- cX->SaveAs("x_px.png");
- cY->SaveAs("y_py.png");
+ cXY->SaveAs(beamspotCanvasName);
+ cX->SaveAs(x_pxCanvasName);
+ cY->SaveAs(y_pyCanvasName);
// ---------------------------------------------------------------------------
// Create histograms showing the fitted means and standard deviations of the positions and momenta
@@ -375,7 +382,7 @@ void beamlineAnalysis( TString inFile = "/scratch/EIC/G4out/beamline/b
cFittedMeans->SetGrid();
cFittedMeans->Update();
// Save the canvas as a PNG file
- cFittedMeans->SaveAs("fitted_means_stddevs.png");
+ cFittedMeans->SaveAs(fittedPositionMeansCanvasName);
// Create a canvas for the fitted momentum means and standard deviations
TCanvas *cFittedMomentumMeans = new TCanvas("cFittedMomentumMeans", "Fitted Momentum Means and Std Deviation", 1200, 800);
@@ -391,7 +398,7 @@ void beamlineAnalysis( TString inFile = "/scratch/EIC/G4out/beamline/b
cFittedMomentumMeans->SetGrid();
cFittedMomentumMeans->Update();
// Save the canvas as a PNG file
- cFittedMomentumMeans->SaveAs("fitted_momentum_means_stddevs.png");
+ cFittedMomentumMeans->SaveAs(fittedMomentumMeansCanvasName);
// -----------------------------------------------------------------------------
@@ -432,7 +439,7 @@ void beamlineAnalysis( TString inFile = "/scratch/EIC/G4out/beamline/b
cPipeParams->SetGrid();
cPipeParams->Update();
// Save the canvas as a PNG file
- cPipeParams->SaveAs("pipe_parameters.png");
+ cPipeParams->SaveAs(pipeParamsCanvasName);
TFile *f = new TFile(outFile,"RECREATE");