From 4e084b57a255ea615548a2b83cc73af9d84598b3 Mon Sep 17 00:00:00 2001 From: Zachary W Sweger Date: Sat, 13 Jan 2024 15:53:07 -0500 Subject: [PATCH 001/173] add benchmarks/u_rho --- .gitlab-ci.yml | 1 + benchmarks/u_rho/Snakefile | 90 +++ benchmarks/u_rho/analysis/pleaseIncludeMe.h | 115 +++ benchmarks/u_rho/analysis/uchannelrho.cxx | 392 ++++++++++ benchmarks/u_rho/benchmark_output/README | 1 + benchmarks/u_rho/config.yml | 23 + benchmarks/u_rho/figures/README | 1 + benchmarks/u_rho/macros/RiceStyle.h | 684 ++++++++++++++++++ .../u_rho/macros/plot_rho_physics_benchmark.C | 210 ++++++ 9 files changed, 1517 insertions(+) create mode 100644 benchmarks/u_rho/Snakefile create mode 100644 benchmarks/u_rho/analysis/pleaseIncludeMe.h create mode 100644 benchmarks/u_rho/analysis/uchannelrho.cxx create mode 100644 benchmarks/u_rho/benchmark_output/README create mode 100644 benchmarks/u_rho/config.yml create mode 100644 benchmarks/u_rho/figures/README create mode 100644 benchmarks/u_rho/macros/RiceStyle.h create mode 100644 benchmarks/u_rho/macros/plot_rho_physics_benchmark.C diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 62211ceb..04722cd7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -117,6 +117,7 @@ include: - local: 'benchmarks/dvcs/config.yml' - local: 'benchmarks/tcs/config.yml' - local: 'benchmarks/u_omega/config.yml' + - local: 'benchmarks/u_rho/config.yml' - local: 'benchmarks/single/config.yml' - local: 'benchmarks/backgrounds/config.yml' diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile new file mode 100644 index 00000000..9db9adc5 --- /dev/null +++ b/benchmarks/u_rho/Snakefile @@ -0,0 +1,90 @@ +import os + +from snakemake.remote.S3 import RemoteProvider as S3RemoteProvider + + +S3 = S3RemoteProvider( + endpoint_url="https://dtn01.sdcc.bnl.gov:9000", + access_key_id=os.environ["S3_ACCESS_KEY"], + secret_access_key=os.environ["S3_SECRET_KEY"], +) + + +rule uchannelrho_compile: + input: + "analysis/uchannelrho_cxx.so", + + +rule uchannelrho_campaign_reco_get: + input: + lambda wildcards: S3.remote(f"eictest/EPIC/RECO/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), + output: + "benchmark_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + shell: + """ +echo "Getting file for INDEX {wildcards.INDEX}" +ln {input} {output} +""" + + +rule uchannelrho_analysis: + input: + script="analysis/uchannelrho.cxx", + #script_compiled="analysis/uchannelrho_cxx.so", + data="benchmark_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + output: + plots="benchmark_output/campaign_23.12.0_{INDEX}_eicrecon.edm4eic/plots.root", + shell: + """ +mkdir -p $(dirname "{output.plots}") +root -l -b -q '{input.script}+("{input.data}","{output.plots}")' +""" + + +rule uchannelrho_combine: + input: + #lambda wildcards: [f"benchmark_output/campaign_23.12.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], + lambda wildcards: expand( + "benchmark_output/campaign_23.12.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", + INDEX=range(int(wildcards.N)), + ), + wildcard_constraints: + N="\d+", + output: + "benchmark_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + shell: + """ +hadd {output} {input} +""" + + +ruleorder: uchannelrho_combine > uchannelrho_analysis + + +rule uchannelrho_plots: + input: + script="macros/plot_rho_physics_benchmark.C", + plots="benchmark_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + output: + "benchmark_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", + shell: + """ +if [ ! -d "{input.plots}_figures" ]; then + mkdir "{input.plots}_figures" + echo "{input.plots}_figures directory created successfully." +else + echo "{input.plots}_figures directory already exists." +fi +root -l -b -q '{input.script}("{input.plots}")' +#cp {input.plots}_figures/*.pdf figures/ +""" + + +# Couple examples of invocation: + +rule uchannelrho_run_over_a_campaign: + input: + "benchmark_output/figures/plots_benchmark_rho_dsigmadt.pdf", + message: + "See output in {input[0]}" + diff --git a/benchmarks/u_rho/analysis/pleaseIncludeMe.h b/benchmarks/u_rho/analysis/pleaseIncludeMe.h new file mode 100644 index 00000000..63267698 --- /dev/null +++ b/benchmarks/u_rho/analysis/pleaseIncludeMe.h @@ -0,0 +1,115 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "ROOT/RDataFrame.hxx" +#include +#include +#include +#include + +#include "TFile.h" +#include "TLorentzVector.h" + +#include "TLorentzRotation.h" +#include "TVector2.h" +#include "TVector3.h" + +#include "fmt/color.h" +#include "fmt/core.h" + +// #include "nlohmann/json.hpp" +#include "edm4eic/InclusiveKinematicsData.h" +#include "edm4eic/ReconstructedParticleData.h" +#include "edm4hep/MCParticleData.h" + +#define PI 3.1415926 +#define MASS_ELECTRON 0.00051 +#define MASS_PROTON 0.93827 +#define MASS_PION 0.13957 +#define MASS_KAON 0.493667 +#define MASS_AU197 183.45406466643374 + +auto getNtrk(const std::vector& parts) +{ + std::vector mult; + int n=0; + for(auto& i1 : parts){ + if(i1.charge!=0) n++; + } + mult.push_back( n ); + return mult; +} +auto getNtrkMC(const std::vector& parts) +{ + std::vector mult; + int n=0; + for(auto& i1 : parts){ + if(i1.charge!=0 && i1.generatorStatus==1) n++; + } + mult.push_back( n ); + return mult; +} +auto momenta_from_chargedparticles(const std::vector& parts) { + std::vector momenta; + for(auto& i1 : parts){ + TVector3 trk(i1.momentum.x,i1.momentum.y,i1.momentum.z); + if(i1.charge!=0) momenta.push_back(trk); + } + return momenta; +} +auto momenta_from_mcparticles(const std::vector& parts) { + std::vector momenta; + for(auto& i1 : parts){ + TVector3 trk(i1.momentum.x,i1.momentum.y,i1.momentum.z); + if(i1.charge!=0 && i1.generatorStatus==1) momenta.push_back(trk); + } + return momenta; +} +auto pt_resolution(const std::vector& mcs, + const std::vector& recos){ + + std::vector resolution; + for(auto& i1: recos){ + TVector3 trk(i1.momentum.x,i1.momentum.y,i1.momentum.z); + if(i1.charge==0) continue; + double minR=99; + TVector3 matchMCtrk(-99,-99,-99); + for(auto& i2 : mcs){ + TVector3 trkMC(i2.momentum.x,i2.momentum.y,i2.momentum.z); + if(i2.charge!=0 && i2.generatorStatus==1){ + if(trk.DeltaR(trkMC) < minR ){ + minR=trk.DeltaR(trkMC); + matchMCtrk=trkMC; + } + } + } + double res= (matchMCtrk.Perp()-trk.Perp()) / matchMCtrk.Perp(); + resolution.push_back( res ); + + } + + return resolution; +} +auto getPt(const std::vector& tracks) +{ + std::vector Pt; + for(auto& i1 : tracks){Pt.push_back(i1.Perp());} + return Pt; +} +auto getEta(const std::vector& tracks) +{ + std::vector eta; + for(auto& i1 : tracks){eta.push_back(i1.Eta());} + return eta; +} +auto getPhi(const std::vector& tracks) +{ + std::vector Phi; + for(auto& i1 : tracks){Phi.push_back(i1.Phi());} + return Phi; +} \ No newline at end of file diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx new file mode 100644 index 00000000..71f18b09 --- /dev/null +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -0,0 +1,392 @@ +#include "pleaseIncludeMe.h" + +auto giveme_t_method_L(TLorentzVector eIn, + TLorentzVector eOut, + TLorentzVector pIn, + TLorentzVector vmOut) +{ + TLorentzVector aInVec(pIn.Px(),pIn.Py(),pIn.Pz(),sqrt(pIn.Px()*pIn.Px() + pIn.Py()*pIn.Py() + pIn.Pz()*pIn.Pz() + MASS_PROTON*MASS_PROTON) ); + double method_L = 0; + TLorentzVector a_beam_scattered = aInVec-(vmOut+eOut-eIn); + double p_Aplus = a_beam_scattered.E()+a_beam_scattered.Pz(); + double p_TAsquared = TMath::Power(a_beam_scattered.Pt(),2); + double p_Aminus = (MASS_PROTON*MASS_PROTON + p_TAsquared) / p_Aplus; + TLorentzVector a_beam_scattered_corr; + a_beam_scattered_corr.SetPxPyPzE(a_beam_scattered.Px(),a_beam_scattered.Py(),(p_Aplus-p_Aminus)/2., (p_Aplus+p_Aminus)/2. ); + method_L = -(a_beam_scattered_corr-aInVec).Mag2(); + + return method_L; +} + +auto giveme_u(TLorentzVector pIn, TLorentzVector vmOut){ + double uvalue = -(vmOut-pIn).Mag2(); + return uvalue; +} + + +int uchannelrho(TString rec_file, TString outputfile) +{ + +// read our configuration +auto tree = new TChain("events"); +TString name_of_input = (TString) rec_file; +std::cout << "Input file = " << name_of_input << endl; +tree->Add(name_of_input); +TTreeReader tree_reader(tree); // !the tree reader + +TTreeReaderArray mc_genStatus_array = {tree_reader, "MCParticles.generatorStatus"}; +// MC particle pz array for each MC particle +TTreeReaderArray mc_px_array = {tree_reader, "MCParticles.momentum.x"}; +TTreeReaderArray mc_py_array = {tree_reader, "MCParticles.momentum.y"}; +TTreeReaderArray mc_pz_array = {tree_reader, "MCParticles.momentum.z"}; +TTreeReaderArray mc_endx_array = {tree_reader, "MCParticles.endpoint.x"}; +TTreeReaderArray mc_endy_array = {tree_reader, "MCParticles.endpoint.y"}; +TTreeReaderArray mc_endz_array = {tree_reader, "MCParticles.endpoint.z"}; +TTreeReaderArray mc_mass_array = {tree_reader, "MCParticles.mass"}; +TTreeReaderArray mc_pdg_array = {tree_reader, "MCParticles.PDG"}; + +//Reconstructed EcalEndcapNClusters +TTreeReaderArray em_energy_array = {tree_reader, "EcalEndcapNClusters.energy"}; +TTreeReaderArray em_x_array = {tree_reader, "EcalEndcapNClusters.position.x"}; +TTreeReaderArray em_y_array = {tree_reader, "EcalEndcapNClusters.position.y"}; +TTreeReaderArray emhits_x_array = {tree_reader, "EcalEndcapNRecHits.position.x"}; +TTreeReaderArray emhits_y_array = {tree_reader, "EcalEndcapNRecHits.position.y"}; +TTreeReaderArray emhits_energy_array = {tree_reader, "EcalEndcapNRecHits.energy"}; + +TTreeReaderArray em_rec_id_array = {tree_reader, "EcalEndcapNClusterAssociations.recID"}; +TTreeReaderArray em_sim_id_array = {tree_reader, "EcalEndcapNClusterAssociations.simID"}; + +// Reconstructed particles pz array for each reconstructed particle +TTreeReaderArray reco_px_array = {tree_reader, "ReconstructedChargedParticles.momentum.x"}; +TTreeReaderArray reco_py_array = {tree_reader, "ReconstructedChargedParticles.momentum.y"}; +TTreeReaderArray reco_pz_array = {tree_reader, "ReconstructedChargedParticles.momentum.z"}; +TTreeReaderArray reco_charge_array = {tree_reader, "ReconstructedChargedParticles.charge"}; + +TTreeReaderArray rec_id = {tree_reader, "ReconstructedChargedParticleAssociations.recID"}; +TTreeReaderArray sim_id = {tree_reader, "ReconstructedChargedParticleAssociations.simID"}; + +TTreeReaderArray reco_PDG = {tree_reader,"ReconstructedChargedParticles.PDG"}; + +TString output_name_dir = outputfile; +cout << "Output file = " << output_name_dir << endl; +TFile* output = new TFile(output_name_dir,"RECREATE"); + +//events +TH1D* h_Q2_e = new TH1D("h_Q2_e",";Q^{2}_{e,MC}",100,0,20); +TH1D* h_y_e = new TH1D("h_y_e",";y_{e,MC}",100,0,1); +TH1D* h_energy_MC = new TH1D("h_energy_MC",";E_{MC} (GeV)",100,0,20); +TH1D* h_t_MC = new TH1D("h_t_MC",";t_{MC}; counts",1000,0,5); + +TH1D* h_Q2REC_e = new TH1D("h_Q2REC_e",";Q^{2}_{e,REC}",100,0,20); +TH1D* h_yREC_e = new TH1D("h_yREC_e",";y_{e,REC}",100,0,1); +TH1D* h_energy_REC = new TH1D("h_energy_REC",";E_{REC} (GeV)",100,0,20); +TH1D* h_trk_energy_REC = new TH1D("h_trk_energy_REC",";E_{REC} (GeV)",100,0,20); +TH1D* h_trk_Epz_REC = new TH1D("h_trk_Epz_REC",";E - p_{z} (GeV)",200,0,50); + +//track +TH1D* h_eta = new TH1D("h_eta",";#eta",100,-5,5); +TH2D* h_trk_energy_res = new TH2D("h_trk_energy_res",";E_{MC} (GeV); E_{MC}-E_{REC}/E_{MC} track-base ",100,0,20,1000,-1,1); +TH2D* h_trk_Pt_res = new TH2D("h_trk_Pt_res",";p_{T,MC} (GeV); P_{T,MC}-P_{T,REC}/P_{T,MC} track-base ",100,0,15,1000,-1,1); +TH1D* h_Epz_REC = new TH1D("h_Epz_REC",";E - p_{z} (GeV)",200,0,50); + +//VM & t +TH1D* h_VM_mass_MC = new TH1D("h_VM_mass_MC",";mass (GeV)",200,0,4); +TH1D* h_VM_mass_REC = new TH1D("h_VM_mass_REC",";mass (GeV)",200,0,4); +TH1D* h_VM_mass_REC_justpions = new TH1D("h_VM_mass_REC_justpions",";mass (GeV)",200,0,4); +TH1D* h_VM_pt_REC = new TH1D("h_VM_pt_REC",";p_{T} (GeV/c)",200,0,2); +TH2D* h_VM_res = new TH2D("h_VM_res",";p_{T,MC} (GeV); p_{T,MC}-E_{T,REC}/p_{T,MC}",100,0,2,1000,-1,1); +TH1D* h_t_REC = new TH1D("h_t_REC",";t_{REC} (GeV^{2}); counts",1000,0,5); +TH1D* h_t_trk_REC = new TH1D("h_t_trk_REC",";t_{REC}(GeV^{2}) track-base; counts",1000,0,5); +TH1D* h_t_combo_REC = new TH1D("h_t_combo_REC",";t_{combo,REC}(GeV^{2}); counts",1000,0,5); +TH2D* h_t_res = new TH2D("h_t_res",";t_{MC} (GeV^{2}); t_{MC}-t_{REC}/t_{MC}",1000,0,5,1000,-10,10); +TH2D* h_trk_t_res = new TH2D("h_trk_t_res",";t_{MC} (GeV^{2}); t_{MC}-t_{REC}/t_{MC} track-base",1000,0,5,1000,-10,10); +TH2D* h_t_2D = new TH2D("h_t_2D",";t_{MC} (GeV^{2}); t_{REC} (GeV^{2}) track-base",1000,0,5,1000,0,5); +TH2D* h_t_REC_2D = new TH2D("h_t_REC_2D",";t_{trk,REC} (GeV^{2}); t_{EEMC,REC} (GeV^{2})",1000,0,5,1000,0,5); +TH2D* h_t_RECMC_2D = new TH2D("h_t_RECMC_2D",";t_{MC} (GeV^{2}); t_{trk,REC} / t_{EEMC,REC} ",1000,0,5,200,-10,10); +TH2D* h_VM_endpointXY_MC = new TH2D("h_VM_endpointXY_MC",";x (cm); y (cm)",1000,-300,300,1000,-300,300); +TH1D* h_VM_endpointZ_MC = new TH1D("h_VM_endpointZ_MC",";z (cm); counts",1000,0,1000); +TH2D* h_u_REC_2D = new TH2D("h_u_REC_2D",";-#it{u}_{MC} (GeV^{2}); -#it{u}_{REC} (GeV^{2})",1000,0,5,1000,0,5); +double umin = -1.0; +double umax = 5.0; +int n_ubins = 100; +double u_binwidth = (umax-umin)/((double)n_ubins); +TH1D* h_u_REC = new TH1D("h_u_REC", ";-#it{u}_{REC} (GeV^{2}); dN/d|#it{u}| (GeV^{-2} scaled)",n_ubins,umin,umax); +TH1D* h_u_MC = new TH1D("h_u_MC", ";-#it{u}_{MC} (GeV^{2}); dN/d|#it{u}| (GeV^{-2} scaled)",n_ubins,umin,umax); + +//energy clus +TH2D* h_emClus_position_REC = new TH2D("h_emClus_position_REC",";x (mm);y (mm)",80,-800,800,80,-800,800); +TH2D* h_emHits_position_REC = new TH2D("h_emHits_position_REC",";x (mm);y (mm)",80,-800,800,80,-800,800); +TH2D* h_energy_res = new TH2D("h_energy_res",";E_{MC} (GeV); E_{MC}-E_{REC}/E_{MC} emcal",100,0,20,1000,-1,1); +TH1D* h_energy_calibration_REC = new TH1D("h_energy_calibration_REC",";E (GeV)",200,0,2); +TH1D* h_EoverP_REC = new TH1D("h_EoverP_REC",";E/p",200,0,2); +TH1D* h_ClusOverHit_REC = new TH1D("h_ClusOverHit_REC",";cluster energy / new cluster energy",200,0,2); + +cout<<"There are "<GetEntries()<<" events!!!!!!!"<GetEntries()); +while (tree_reader.Next()) { + + /* + Beam particles + */ + TLorentzVector ebeam(0,0,0,0); + TLorentzVector pbeam(0,0,0,0); + + TLorentzVector vmMC(0,0,0,0); + TLorentzVector piplusMC(0,0,0,0); + TLorentzVector piminusMC(0,0,0,0); + + //MC level + TLorentzVector scatMC(0,0,0,0); + unsigned int mc_elect_index=-1; + double maxPt=-99.; + for(unsigned int imc=0;imcmaxPt){ + maxPt=mctrk.Perp(); + mc_elect_index=imc; + scatMC.SetVectM(mctrk,mc_mass_array[imc]); + } + if(mc_pdg_array[imc]==211 + && mc_genStatus_array[imc]==1){ piplusMC.SetVectM(mctrk,MASS_PION); h_VM_endpointXY_MC->Fill(mc_endx_array[imc],mc_endy_array[imc]); h_VM_endpointZ_MC->Fill(mc_endz_array[imc]);} + if(mc_pdg_array[imc]==-211 + && mc_genStatus_array[imc]==1){ piminusMC.SetVectM(mctrk,MASS_PION); h_VM_endpointXY_MC->Fill(mc_endx_array[imc],mc_endy_array[imc]); h_VM_endpointZ_MC->Fill(mc_endz_array[imc]);} + } + vmMC=piplusMC+piminusMC; + //protection. + if(ebeam.E()==pbeam.E() && ebeam.E()==0) { + std::cout << "problem with MC incoming beams" << std::endl; + continue; + } + TLorentzVector qbeam=ebeam-scatMC; + double Q2=-(qbeam).Mag2(); + double pq=pbeam.Dot(qbeam); + double y= pq/pbeam.Dot(ebeam); + + //MC level phase space cut + //if(Q2<1.||Q2>10.) continue; + //if(y<0.01||y>0.85) continue; + + h_Q2_e->Fill(Q2); + h_y_e->Fill(y); + h_energy_MC->Fill(scatMC.E()); + + double t_MC=0.; + if(vmMC.E()!=0) + { + double method_E = -(qbeam-vmMC).Mag2(); + t_MC=method_E; + h_t_MC->Fill( method_E ); + h_VM_mass_MC->Fill(vmMC.M()); + } + + //rec level + //leading cluster + double maxEnergy=-99.; + double xpos=-999.; + double ypos=-999.; + for(unsigned int iclus=0;iclusmaxEnergy){ + maxEnergy=em_energy_array[iclus]; + xpos=em_x_array[iclus]; + ypos=em_y_array[iclus]; + } + } + //leading hit energy + double maxHitEnergy=0.01;//threshold 10 MeV + double xhitpos=-999.; + double yhitpos=-999.; + int hit_index=-1; + for(unsigned int ihit=0;ihitmaxHitEnergy){ + maxHitEnergy=emhits_energy_array[ihit]; + xhitpos=emhits_x_array[ihit]; + yhitpos=emhits_y_array[ihit]; + hit_index=ihit; + } + } + //sum over all 3x3 towers around the leading tower + double xClus=xhitpos*maxHitEnergy; + double yClus=yhitpos*maxHitEnergy; + for(unsigned int ihit=0;ihit0.01) { + maxHitEnergy+=hitenergy;//clustering around leading tower 3 crystal = 60mm. + xClus+=x*hitenergy; + yClus+=y*hitenergy; + } + } + + h_ClusOverHit_REC->Fill( maxEnergy / maxHitEnergy ); + //weighted average cluster position. + xClus = xClus/maxHitEnergy; + yClus = yClus/maxHitEnergy; + double radius=sqrt(xClus*xClus+yClus*yClus); + //if( radius>550. ) continue; //geometric acceptance cut + //4.4% energy calibration. + double clusEnergy=1.044*maxHitEnergy; + + h_energy_REC->Fill(clusEnergy); + //ratio of reco / truth Energy + h_energy_calibration_REC->Fill( clusEnergy / scatMC.E() ); + //energy resolution + double res= (scatMC.E()-clusEnergy)/scatMC.E(); + h_energy_res->Fill(scatMC.E(), res); + h_emClus_position_REC->Fill(xpos,ypos);//default clustering position + h_emHits_position_REC->Fill(xClus,yClus); //self clustering position + + //association of rec level scat' e + int rec_elect_index=-1; + for(unsigned int i=0;imaxP){ + //track-base 4 vector + maxP=trk.Mag(); + scatREC.SetVectM(trk,MASS_ELECTRON); + + //use emcal energy to define 4 vector + double p = sqrt(clusEnergy*clusEnergy- MASS_ELECTRON*MASS_ELECTRON ); + double eta=scatREC.Eta(); + double phi=scatREC.Phi(); + double pt = TMath::Sin(scatREC.Theta())*p; + scatClusEREC.SetPtEtaPhiM(pt,eta,phi,MASS_ELECTRON); + } + } + //loop over track again; + for(unsigned int itrk=0;itrkpi+pi- daughters; + h_eta->Fill(trk.Eta()); + //if(fabs(trk.Eta())<3.0){ + if(reco_charge_array[itrk]>0){ piplusREC.SetVectM(trk,MASS_PION); if(reco_PDG[itrk]==211)isPiPlusFound=true;} + if(reco_charge_array[itrk]<0){ piminusREC.SetVectM(trk,MASS_PION); if(reco_PDG[itrk]==-211)isPiMinusFound=true;} + //} + } + } + //4vector of VM; + if(piplusREC.E()!=0. && piminusREC.E()!=0.){ + vmREC=piplusREC+piminusREC; + } + + //track-base e' energy REC; + h_trk_energy_REC->Fill(scatMCmatchREC.E()); + + //track-base e' energy resolution; + res= (scatMC.E()-scatMCmatchREC.E())/scatMC.E(); + h_trk_energy_res->Fill(scatMC.E(), res); + + //track-base e' pt resolution; + res= (scatMC.Pt()-scatMCmatchREC.Pt())/scatMC.Pt(); + h_trk_Pt_res->Fill(scatMC.Pt(), res); + + //track-base Epz scat' e + double EpzREC= (scatMCmatchREC+hfs).E() - (scatMCmatchREC+hfs).Pz(); + h_trk_Epz_REC->Fill( EpzREC ); + + //EEMC cluster Epz scat' e + EpzREC= (scatClusEREC+hfs).E() - (scatClusEREC+hfs).Pz(); + h_Epz_REC->Fill( EpzREC ); + + //E over p + double EoverP=scatClusEREC.E() / scatMCmatchREC.P(); + h_EoverP_REC->Fill( EoverP ); + + //cluster-base DIS kine; + TLorentzVector qbeamREC=ebeam-scatClusEREC; + double Q2REC=-(qbeamREC).Mag2(); + double pqREC=pbeam.Dot(qbeamREC); + double yREC= pqREC/pbeam.Dot(ebeam); + h_Q2REC_e->Fill(Q2REC); + h_yREC_e->Fill(yREC); + + //Event selection: + //if( EpzREC<27||EpzREC>40 ) continue; + //if( EoverP<0.8||EoverP>1.18 ) continue; + + //MC level phase space cut + //if(Q2REC<1.||Q2REC>10.) continue; + //if(yREC<0.01||yREC>0.85) continue; + + //VM rec + if(vmREC.E()==0) continue; + double rho_mass = vmREC.M(); + h_VM_mass_REC->Fill(rho_mass); + if(isPiMinusFound && isPiPlusFound){ h_VM_mass_REC_justpions->Fill(rho_mass);} + h_VM_pt_REC->Fill(vmREC.Pt()); + + //2 versions: track and energy cluster: + double t_trk_REC = giveme_t_method_L(ebeam,scatMCmatchREC,pbeam,vmREC); + double t_REC = giveme_t_method_L(ebeam,scatClusEREC,pbeam,vmREC); + h_t_trk_REC->Fill( t_trk_REC ); + h_t_REC->Fill( t_REC ); + h_t_REC_2D->Fill(t_trk_REC,t_REC); + double u_REC = giveme_u(pbeam,vmREC); + double u_MC = giveme_u(pbeam,vmMC); + h_u_REC_2D->Fill(u_MC,u_REC); + h_u_REC->Fill(u_REC); + h_u_MC->Fill(u_MC); + if( (t_trk_REC/t_REC) > 0.5 && (t_trk_REC/t_REC) < 1.5 ){ + h_t_combo_REC->Fill( (t_trk_REC+t_REC)/2. );//w=1./(fabs(1.0-(t_trk_REC/t_REC))) + } + h_t_RECMC_2D->Fill(t_MC,t_trk_REC/t_REC); + + //t track resolution + res= (t_MC-t_trk_REC)/t_MC; + h_trk_t_res->Fill(t_MC, res); + + //t EEMC resolution; + res= (t_MC-t_REC)/t_MC; + h_t_res->Fill(t_MC, res); + + //2D t + h_t_2D->Fill(t_MC,t_trk_REC); + + //VM pt resolution; + res= (vmMC.Pt()-vmREC.Pt())/vmMC.Pt(); + h_VM_res->Fill(vmMC.Pt(), res); + +} +h_u_REC->Scale(1.0/u_binwidth); +h_u_MC->Scale(1.0/u_binwidth); + +output->Write(); +output->Close(); + +return 0; +} diff --git a/benchmarks/u_rho/benchmark_output/README b/benchmarks/u_rho/benchmark_output/README new file mode 100644 index 00000000..57520d16 --- /dev/null +++ b/benchmarks/u_rho/benchmark_output/README @@ -0,0 +1 @@ +This directory contains benchmark outputs diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml new file mode 100644 index 00000000..9bb6f956 --- /dev/null +++ b/benchmarks/u_rho/config.yml @@ -0,0 +1,23 @@ +u_channel_rho:compile: + stage: compile + extends: .compile_benchmark + script: + - snakemake --cores 1 uchannelrho_compile + +#u_channel_rho:sim: +# extends: .det_benchmark +# stage: simulate +# script: +# - echo "I will be simulating u-channel rho events here!" +# - echo $LOCAL_DATA_PATH/u_channel_rho + +u_channel_rho:bench: + extends: .det_benchmark + stage: benchmarks + needs: + - ["u_channel_rho:compile"] + script: + - echo "I will be analyzing events here!" + - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf figures/ + - echo "Finished" diff --git a/benchmarks/u_rho/figures/README b/benchmarks/u_rho/figures/README new file mode 100644 index 00000000..f9ab956b --- /dev/null +++ b/benchmarks/u_rho/figures/README @@ -0,0 +1 @@ +This directory contains benchmark figures diff --git a/benchmarks/u_rho/macros/RiceStyle.h b/benchmarks/u_rho/macros/RiceStyle.h new file mode 100644 index 00000000..11e267dc --- /dev/null +++ b/benchmarks/u_rho/macros/RiceStyle.h @@ -0,0 +1,684 @@ +#include +#include +#include +#include + +#include "TGaxis.h" +#include "TString.h" +#include "TF1.h" +#include "TH1.h" +#include "TH2.h" +#include "TH3.h" +#include "TMath.h" +#include "TTree.h" +#include "TChain.h" +#include "TFile.h" +#include "TCanvas.h" +#include "TSystem.h" +#include "TROOT.h" +#include "TGraph.h" +#include "TGraphErrors.h" +#include "TGraphAsymmErrors.h" +#include "TMultiGraph.h" +#include "TCanvas.h" +#include "TPad.h" +#include "TLegend.h" +#include "TLatex.h" +#include "TLine.h" +#include "TAxis.h" +#include "TGraph.h" +#include "TGraphErrors.h" +#include "TLorentzVector.h" +#include "TFitResult.h" +#include "TFitResultPtr.h" +#include "TMatrixDSym.h" +#include "TMatrixD.h" +#include "TArrow.h" + +void RiceStyle(){ + +std::cout << "Welcome to Rice Heavy Ion group!! " << std::endl; + +} + +//make Canvas + +TCanvas* makeCanvas(const char* name, const char *title, bool doLogx = false, bool doLogy = false ){ + + // Start with a canvas + TCanvas *canvas = new TCanvas(name,title, 1, 1 ,600 ,600 ); + // General overall stuff + canvas->SetFillColor (0); + canvas->SetBorderMode (0); + canvas->SetBorderSize (10); + // Set margins to reasonable defaults + canvas->SetLeftMargin (0.13); + canvas->SetRightMargin (0.10); + canvas->SetTopMargin (0.10); + canvas->SetBottomMargin (0.13); + // Setup a frame which makes sense + canvas->SetFrameFillStyle (0); + canvas->SetFrameLineStyle (0); + canvas->SetFrameBorderMode(0); + canvas->SetFrameBorderSize(10); + canvas->SetFrameFillStyle (0); + canvas->SetFrameLineStyle (0); + canvas->SetFrameBorderMode(0); + canvas->SetFrameBorderSize(10); + + if( doLogy == true ) gPad->SetLogy(1); + if( doLogx == true ) gPad->SetLogx(1); + + gPad->SetTicks(); + + return canvas; +} + +TCanvas* makeMultiCanvas(const char* name, + const char* title, + int nRows, + int nColumns +){ + + double ratio = nRows/nColumns; + + TCanvas* canvas = new TCanvas( name, title, 1, 1, 400*nRows, 400*nColumns ); + canvas->SetFillColor (0); + canvas->SetBorderMode (0); + canvas->SetBorderSize (10); + // Set margins to reasonable defaults + canvas->SetLeftMargin (0.30); + canvas->SetRightMargin (0.10); + canvas->SetTopMargin (0.10); + canvas->SetBottomMargin (0.30); + // Setup a frame which makes sense + canvas->SetFrameFillStyle (0); + canvas->SetFrameLineStyle (0); + canvas->SetFrameBorderMode(0); + canvas->SetFrameBorderSize(10); + canvas->SetFrameFillStyle (0); + canvas->SetFrameLineStyle (0); + canvas->SetFrameBorderMode(0); + canvas->SetFrameBorderSize(10); + + canvas->Divide(nRows,nColumns,0.01,0.01); + + gPad->SetLeftMargin(0.3); + gPad->SetBottomMargin(0.3); + return canvas; + +} + +void saveCanvas(TCanvas* c, TString dir, TString filename) +{ + TDatime* date = new TDatime(); + //c->Print(Form("../%s/%s_%d.eps",dir.Data(),filename.Data(),date->GetDate())); + //c->Print(Form("../%s/%s_%d.gif",dir.Data(),filename.Data(),date->GetDate())); + c->Print(Form("../%s/%s_%d.pdf",dir.Data(),filename.Data(),date->GetDate())); + //c->Print(Form("../%s/%s_%d.C",dir.Data(),filename.Data(),date->GetDate())); + c->Print(Form("../%s/%s_%d.png",dir.Data(),filename.Data(),date->GetDate())); +} + +void initSubPad(TPad* pad, int i) +{ + //printf("Pad: %p, index: %d\n",pad,i); + + pad->cd(i); + TPad *tmpPad = (TPad*) pad->GetPad(i); + tmpPad->SetLeftMargin (0.20); + tmpPad->SetTopMargin (0.06); + tmpPad->SetRightMargin (0.08); + tmpPad->SetBottomMargin(0.15); + return; +} + +vector makeMultiPad(const int num){//we only have 4,6,8 options for now + + cout << "num: "<< num << endl; + vector temp; + + TPad* pad[ num ]; + + double setting1[] = {0.0, 0.35, 0.56, 1.0}; + double setting2[] = {0.0, 0.35, 0.40, 0.7, 1.0 }; + double setting3[] = {0.0, 0.35, 0.3, 0.533, 0.766, 1.0}; + + if ( num == 4 ){ + + pad[0] = new TPad("pad20", "pad20",setting1[0], setting1[1], setting1[2], setting1[3]); + pad[1] = new TPad("pad21", "pad21",setting1[2], setting1[1], setting1[3], setting1[3]); + pad[2] = new TPad("pad28", "pad28",setting1[0], setting1[0], setting1[2], setting1[1]); + pad[3] = new TPad("pad29", "pad29",setting1[2], setting1[0], setting1[3], setting1[1]); + + for(int i = 0; i < num; i++){ + + pad[i]->SetLeftMargin(0.0); + pad[i]->SetRightMargin(0); + pad[i]->SetTopMargin(0.0); + pad[i]->SetBottomMargin(0); + pad[i]->Draw(); + gPad->SetTicks(); + + } + + pad[0]->SetLeftMargin(0.265); + pad[2]->SetLeftMargin(0.265); + + pad[1]->SetRightMargin(0.05); + pad[3]->SetRightMargin(0.05); + + pad[0]->SetTopMargin(0.02); + pad[1]->SetTopMargin(0.02); + + pad[2]->SetBottomMargin(0.3); + pad[3]->SetBottomMargin(0.3); + + } + else if( num == 6 ){ + + pad[0] = new TPad("pad10", "pad10",setting2[0], setting2[1], setting2[2], setting2[4]); + pad[1] = new TPad("pad11", "pad11",setting2[2], setting2[1], setting2[3], setting2[4]); + pad[2] = new TPad("pad12", "pad12",setting2[3], setting2[1], setting2[4], setting2[4]); + + pad[3] = new TPad("pad18", "pad18", setting2[0], setting2[0], setting2[2], setting2[1]); + pad[4] = new TPad("pad19", "pad19", setting2[2], setting2[0], setting2[3], setting2[1]); + pad[5] = new TPad("pad110", "pad110",setting2[3], setting2[0], setting2[4], setting2[1]); + + for(int i = 0; i < num; i++){ + + pad[i]->SetLeftMargin(0.0); + pad[i]->SetRightMargin(0); + pad[i]->SetTopMargin(0.0); + pad[i]->SetBottomMargin(0); + pad[i]->SetTicks(); + pad[i]->Draw(); + + } + + pad[0]->SetLeftMargin(0.265); + pad[3]->SetLeftMargin(0.265); + + pad[2]->SetRightMargin(0.05); + pad[5]->SetRightMargin(0.05); + + pad[0]->SetTopMargin(0.02); + pad[1]->SetTopMargin(0.02); + pad[2]->SetTopMargin(0.02); + + pad[3]->SetBottomMargin(0.30); + pad[4]->SetBottomMargin(0.30); + pad[5]->SetBottomMargin(0.30); + + } + else if( num == 8 ){ + + pad[0] = new TPad("pad10", "pad10",setting3[0], setting3[1], setting3[2], setting3[5]); + pad[1] = new TPad("pad11", "pad11",setting3[2], setting3[1], setting3[3], setting3[5]); + pad[2] = new TPad("pad12", "pad12",setting3[3], setting3[1], setting3[4], setting3[5]); + pad[3] = new TPad("pad13", "pad13",setting3[4], setting3[1], setting3[5], setting3[5]); + + pad[4] = new TPad("pad18", "pad18", setting3[0], setting3[0], setting3[2], setting3[1]); + pad[5] = new TPad("pad19", "pad19", setting3[2], setting3[0], setting3[3], setting3[1]); + pad[6] = new TPad("pad110", "pad110",setting3[3], setting3[0], setting3[4], setting3[1]); + pad[7] = new TPad("pad111", "pad111",setting3[4], setting3[0], setting3[5], setting3[1]); + + for( int i = 0; i < num; i++ ){ + + pad[i]->SetLeftMargin(0.0); + pad[i]->SetRightMargin(0); + pad[i]->SetTopMargin(0.0); + pad[i]->SetBottomMargin(0); + pad[i]->SetTicks(); + pad[i]->Draw(); + } + + pad[0]->SetLeftMargin(0.265); + pad[4]->SetLeftMargin(0.265); + + pad[3]->SetRightMargin(0.05); + pad[7]->SetRightMargin(0.05); + + pad[0]->SetTopMargin(0.05); + pad[1]->SetTopMargin(0.05); + pad[2]->SetTopMargin(0.05); + pad[3]->SetTopMargin(0.05); + + pad[4]->SetBottomMargin(0.30); + pad[5]->SetBottomMargin(0.30); + pad[6]->SetBottomMargin(0.30); + pad[7]->SetBottomMargin(0.30); + } + + for( int i = 0; i < num; i++){ + + temp.push_back( pad[i] ); + } + + return temp; +} + +TH1D* makeHist(const char*name, const char*title, const char*xtit, const char*ytit, const int nBins, const double lower, const double higher, EColor color = kBlack ){ + + TH1D* temp = new TH1D(name, title, nBins, lower, higher); + + temp->SetMarkerSize(1.0); + temp->SetMarkerStyle(20); + temp->SetMarkerColor(color); + temp->SetLineColor(color); + temp->SetStats(kFALSE); + + temp->GetXaxis()->SetTitle( xtit ); + temp->GetXaxis()->SetTitleSize(0.05); + temp->GetXaxis()->SetTitleFont(42); + temp->GetXaxis()->SetTitleOffset(1.25); + temp->GetXaxis()->SetLabelSize(0.05); + temp->GetXaxis()->SetLabelOffset(0.01); + temp->GetXaxis()->SetLabelFont(42); + temp->GetXaxis()->SetLabelColor(kBlack); + temp->GetXaxis()->CenterTitle(); + + temp->GetYaxis()->SetTitle( ytit ); + temp->GetYaxis()->SetTitleSize(0.05); + temp->GetYaxis()->SetTitleFont(42); + temp->GetYaxis()->SetTitleOffset(1.4); + temp->GetYaxis()->SetLabelSize(0.05); + temp->GetYaxis()->SetLabelOffset(0.01); + temp->GetYaxis()->SetLabelFont(42); + temp->GetYaxis()->SetLabelColor(kBlack); + temp->GetYaxis()->CenterTitle(); + + return temp; +} + +TH1D* makeHistDifferentBins(const char*name, const char*title, const char*xtit, const char*ytit, const int nBins, double bins[], EColor color = kBlack ){ + + TH1D* temp = new TH1D(name, title, nBins, bins); + + temp->SetMarkerSize(1.0); + temp->SetMarkerStyle(20); + temp->SetMarkerColor(color); + temp->SetLineColor(color); + temp->SetStats(kFALSE); + + temp->GetXaxis()->SetTitle( xtit ); + temp->GetXaxis()->SetTitleSize(0.05); + temp->GetXaxis()->SetTitleFont(42); + temp->GetXaxis()->SetTitleOffset(1.25); + temp->GetXaxis()->SetLabelSize(0.05); + temp->GetXaxis()->SetLabelOffset(0.01); + temp->GetXaxis()->SetLabelFont(42); + temp->GetXaxis()->SetLabelColor(kBlack); + temp->GetXaxis()->CenterTitle(); + + temp->GetYaxis()->SetTitle( ytit ); + temp->GetYaxis()->SetTitleSize(0.05); + temp->GetYaxis()->SetTitleFont(42); + temp->GetYaxis()->SetTitleOffset(1.4); + temp->GetYaxis()->SetLabelSize(0.05); + temp->GetYaxis()->SetLabelOffset(0.01); + temp->GetYaxis()->SetLabelFont(42); + temp->GetYaxis()->SetLabelColor(kBlack); + temp->GetYaxis()->CenterTitle(); + + return temp; +} + +void fixedFontHist1D(TH1 * h, Float_t xoffset=1.5, Float_t yoffset=2.3) +{ + h->SetLabelFont(43,"X"); + h->SetLabelFont(43,"Y"); + //h->SetLabelOffset(0.01); + h->SetLabelSize(16); + h->SetTitleFont(43); + h->SetTitleSize(20); + h->SetLabelSize(15,"Y"); + h->SetTitleFont(43,"Y"); + h->SetTitleSize(20,"Y"); + h->SetTitleOffset(xoffset,"X"); + h->SetTitleOffset(yoffset,"Y"); + h->GetXaxis()->CenterTitle(); + h->GetYaxis()->CenterTitle(); + +} + +TH2D* make2DHist( const char*name, + const char*title, + const char*xtit, + const char*ytit, + const int nxbins, + const double xlow, + const double xhigh, + const int nybins, + const double ylow, + const double yhigh +){ + + TH2D* temp2D = new TH2D(name, title, nxbins, xlow, xhigh, nybins, ylow, yhigh); + + temp2D->SetMarkerSize(1.0); + temp2D->SetMarkerStyle(20); + temp2D->SetMarkerColor(kBlack); + temp2D->SetLineColor(kBlack); + temp2D->SetStats(kFALSE); + + temp2D->GetXaxis()->SetTitle( xtit ); + temp2D->GetXaxis()->SetTitleSize(0.04); + temp2D->GetXaxis()->SetTitleFont(42); + temp2D->GetXaxis()->SetTitleOffset(1.4); + temp2D->GetXaxis()->SetLabelSize(0.04); + temp2D->GetXaxis()->SetLabelOffset(0.01); + temp2D->GetXaxis()->SetLabelFont(42); + temp2D->GetXaxis()->SetLabelColor(kBlack); + + temp2D->GetYaxis()->SetTitle( ytit ); + temp2D->GetYaxis()->SetTitleSize(0.04); + temp2D->GetYaxis()->SetTitleFont(42); + temp2D->GetYaxis()->SetTitleOffset(1.7); + temp2D->GetYaxis()->SetLabelSize(0.04); + temp2D->GetYaxis()->SetLabelOffset(0.01); + temp2D->GetYaxis()->SetLabelFont(42); + temp2D->GetYaxis()->SetLabelColor(kBlack); + + return temp2D; + +} + +void fixedFontHist(TH2D * h, Float_t xoffset=0.9, Float_t yoffset=2.7) +{ + h->SetLabelFont(43,"X"); + h->SetLabelFont(43,"Y"); + //h->SetLabelOffset(0.01); + h->SetLabelSize(16); + h->SetTitleFont(43); + h->SetTitleSize(20); + h->SetLabelSize(15,"Y"); + h->SetTitleFont(43,"Y"); + h->SetTitleSize(17,"Y"); + h->SetTitleOffset(xoffset,"X"); + h->SetTitleOffset(yoffset,"Y"); + h->GetXaxis()->CenterTitle(); + h->GetYaxis()->CenterTitle(); +} +void make_dNdX( TH1D* hist ){ + + for(int i=0;iGetNbinsX();i++){ + double value = hist->GetBinContent(i+1); + double error = hist->GetBinError(i+1); + double binwidth = hist->GetBinWidth(i+1); + + hist->SetBinContent(i+1, value / binwidth ); + hist->SetBinError(i+1, error / binwidth ); + } +} + +double calColError(double Ea, double Eb, double Sa, double Sb){ + + double temp = Ea/Eb; + double temp2 = (Sa*Sa)/(Ea*Ea) + (Sb*Sb)/(Eb*Eb); + double temp3 = (2.*Sa*Sa)/(Ea*Eb); + + return temp*(sqrt(TMath::Abs(temp2-temp3)) ); +} + +TH1D* make_systematicRatio(TH1D* hist1, TH1D* hist2){ + + TH1D* hist_ratio = (TH1D*) hist1->Clone("hist_ratio"); + + if( hist1->GetNbinsX() != hist2->GetNbinsX() ){ + std::cout << "Not compatible binning, abort!" << std::endl; + return 0; + } + + for(int ibin=0;ibinGetNbinsX();ibin++){ + double value_a = hist1->GetBinContent(ibin+1); + double error_a = hist1->GetBinError(ibin+1); + + double value_b = hist2->GetBinContent(ibin+1); + double error_b = hist2->GetBinError(ibin+1); + + hist_ratio->SetBinContent(ibin+1, value_a / value_b ); + hist_ratio->SetBinError(ibin+1, calColError(value_a, value_b, error_a, error_b) ); + } + + return hist_ratio; +} + +TLegend* makeLegend(){ + + TLegend *w2 = new TLegend(0.65,0.15,0.90,0.45); + w2->SetLineColor(kWhite); + w2->SetFillColor(0); + return w2; + +} + +TGraphAsymmErrors* makeEfficiency(TH1D* hist1, TH1D* hist2, const char*Draw = "cp", EColor color = kBlack ){ + + TGraphAsymmErrors* temp = new TGraphAsymmErrors(); + temp->Divide( hist1, hist2, Draw ); + temp->SetMarkerStyle(20); + temp->SetMarkerColor(color); + temp->SetLineColor(color); + + return temp; + +} + +TLatex* makeLatex(const char* txt, double x, double y){ + + TLatex* r = new TLatex(x, y, txt); + r->SetTextSize(0.05); + r->SetNDC(); + return r; + +} + +void drawBox(TH1D* hist1, double sys, bool doPercentage, double xe= 0.05){ + + TBox* temp_box[100]; + int bins = hist1->GetNbinsX(); + + for(int deta = 0; deta < bins; deta++){ + + double value = hist1->GetBinContent(deta+1); + double bincenter = hist1->GetBinCenter(deta+1); + double sys_temp = 0.; + + if( doPercentage ) sys_temp = value*sys; + else sys_temp = sys; + + temp_box[deta] = new TBox(bincenter-xe,value-sys_temp,bincenter+xe,value+sys_temp); + temp_box[deta]->SetFillColorAlpha(kGray+2,0.4); + temp_box[deta]->SetFillStyle(1001); + temp_box[deta]->SetLineWidth(0); + temp_box[deta]->Draw("same"); + } + +} + +void drawBoxRatio(TH1D* hist1, TH1D* hist2, double sys, bool doPercentage){ + + TBox* temp_box[100]; + double xe = 0.08; + + int bins = hist1->GetNbinsX(); + + for(int deta = 0; deta < bins; deta++){ + + if(deta > 6) continue; + + double factor = hist2->GetBinContent(deta+1); + double value = hist1->GetBinContent(deta+1); + double bincenter = hist1->GetBinCenter(deta+1); + + if( doPercentage ) sys = sqrt((value*0.045)*(value*0.045)); + else sys = sys; + + double sys_temp; + sys_temp = sys; + + temp_box[deta] = new TBox(bincenter-xe,value-sys_temp,bincenter+xe,value+sys_temp); + temp_box[deta]->SetFillColorAlpha(kGray+2,0.4); + temp_box[deta]->SetFillStyle(1001); + temp_box[deta]->SetLineWidth(0); + temp_box[deta]->Draw("same"); + + } + +} + +void drawBoxTGraphRatio(TGraphErrors* gr1, int bins, double sys, bool doPercentage){ + + double xe[11]; + TBox* box1[11]; + + for(int mult = 0; mult < bins; mult++){ + + if( mult < 6 ){ + + xe[mult] = 15*log(1.1*(mult+1)); + if(mult == 0) xe[mult] = 10; + } + if( mult == 6) xe[mult] = 37; + if( mult == 7) xe[mult] = 50; + if( mult == 8) xe[mult] = 50; + if( mult == 9) xe[mult] = 63; + if( mult == 10) xe[mult] = 73; + + + double x1; + double value1; + gr1->GetPoint(mult, x1, value1); + + double ye = sys; + if( doPercentage ) ye = sqrt((value1*0.045)*(value1*0.045)); + else ye = sys; + + box1[mult] = new TBox(x1-xe[mult],value1-ye,x1+xe[mult],value1+ye); + box1[mult]->SetFillColorAlpha(kGray+2,0.4); + box1[mult]->SetFillStyle(1001); + box1[mult]->SetLineWidth(0); + box1[mult]->SetLineColor(kRed); + box1[mult]->Draw("SAME"); + + } + +} + +void drawBoxTGraph(TGraphErrors* gr1, int bins, double sys, bool doPercentage, bool doConstantWidth){ + + double xe[100]; + TBox* box1[100]; + + for(int mult = 0; mult < bins; mult++){ + + if(!doConstantWidth){ + if( mult < 6 ){ + + xe[mult] = 15*log(1.1*(mult+1)); + if(mult == 0) xe[mult] = 10; + } + if( mult == 6) xe[mult] = 37; + if( mult == 7) xe[mult] = 50; + if( mult == 8) xe[mult] = 50; + if( mult == 9) xe[mult] = 63; + if( mult == 10) xe[mult] = 73; + } + else{ xe[mult] = 0.02;} + + + double x1; + double value1; + gr1->GetPoint(mult, x1, value1); + + double ye = sys; + if( doPercentage ) ye = value1 * sys; + else ye = sys; + + box1[mult] = new TBox(x1-xe[mult],value1-ye,x1+xe[mult],value1+ye); + box1[mult]->SetFillColorAlpha(kGray+2,0.4); + box1[mult]->SetFillStyle(1001); + box1[mult]->SetLineWidth(0); + box1[mult]->SetLineColor(kBlack); + box1[mult]->Draw("LSAME"); + + } +} + +void drawBoxTGraph_alt(TGraphErrors* gr1, int bins, double sys, bool doPercentage, bool doConstantWidth){ + + double xe[100]; + TBox* box1[100]; + + for(int mult = 0; mult < bins; mult++){ + + if(!doConstantWidth){ + if( mult < 6 ){ + + xe[mult] = 15*log(1.1*(mult+1)); + if(mult == 0) xe[mult] = 10; + } + if( mult == 6) xe[mult] = 37; + if( mult == 7) xe[mult] = 50; + if( mult == 8) xe[mult] = 50; + if( mult == 9) xe[mult] = 63; + if( mult == 10) xe[mult] = 73; + } + else{ xe[mult] = 0.005;} + + + double x1; + double value1; + gr1->GetPoint(mult, x1, value1); + + double ye = sys; + if( doPercentage ) ye = value1 * sys; + else ye = sys; + + box1[mult] = new TBox(x1-xe[mult],value1-ye,x1+xe[mult],value1+ye); + box1[mult]->SetFillColorAlpha(kGray+2,0.4); + box1[mult]->SetFillStyle(1001); + box1[mult]->SetLineWidth(0); + box1[mult]->SetLineColor(kRed); + box1[mult]->Draw("SAME"); + + } +} + + +void drawBoxTGraphDiff(TGraphErrors* gr1, TGraphErrors* gr2, int bins, double sys, bool doPercentage){ + + double xe[11]; + TBox* box1[11]; + TBox* box2[11]; + + for(int mult = 0; mult < bins; mult++){ + + xe[mult] = 10*log(1.1*(mult+1)); + if(mult == 0) xe[mult] = 7; + + double x1; + double value1; + gr1->GetPoint(mult, x1, value1); + + double x2; + double value2; + gr2->GetPoint(mult, x2, value2); + + double value = value2 - value1; + + double ye = sys; + if( doPercentage ) ye = sqrt((value*0.045)*(value*0.045)+sys*sys); + else ye = sys; + + box1[mult] = new TBox(x1-xe[mult],value-ye,x1+xe[mult],value+ye); + box1[mult]->SetFillColorAlpha(kGray+2,0.4); + box1[mult]->SetFillStyle(1001); + box1[mult]->SetLineWidth(0); + box1[mult]->SetLineColor(kRed); + box1[mult]->Draw("SAME"); + + } + +} + \ No newline at end of file diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C new file mode 100644 index 00000000..dd397aea --- /dev/null +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -0,0 +1,210 @@ +#include "RiceStyle.h" +using namespace std; +void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combined.root"){ + Ssiz_t dotPosition = filename.Last('.'); + TString figure_directory = filename(0, dotPosition); + figure_directory += "_figures"; + + TFile* file = new TFile(filename); + TString vm_label="#rho^{0}"; + TString daug_label="#pi^{+}#pi^{-}"; + //t distribution + TH1D* h_t_MC = (TH1D*) file->Get("h_t_MC"); + TH1D* h_t_REC = (TH1D*) file->Get("h_t_REC"); + TH1D* h_t_trk_REC = (TH1D*) file->Get("h_t_trk_REC"); + TH1D* h_t_combo_REC = (TH1D*) file->Get("h_t_combo_REC"); + //mass distribution + TH1D* h_VM_mass_MC = (TH1D*) file->Get("h_VM_mass_MC"); + TH1D* h_VM_mass_REC = (TH1D*) file->Get("h_VM_mass_REC"); + TH1D* h_VM_mass_REC_justpions = (TH1D*) file->Get("h_VM_mass_REC_justpions"); + //mass distribution + TH1D* h_dNdu_MC = (TH1D*) file->Get("h_u_MC"); + TH1D* h_dNdu_REC = (TH1D*) file->Get("h_u_REC"); + + + TCanvas* c1 = new TCanvas("c1","c1",1,1,600,600); + gPad->SetLogy(1); + gPad->SetTicks(); + gPad->SetLeftMargin(0.15); + gPad->SetBottomMargin(0.15); + gPad->SetRightMargin(0.01); + TH1D* base1 = makeHist("base1", "", "|#it{t} | (GeV^{2})", "dN/d|#it{t} | (GeV^{-2}) ", 100,0,5.0,kBlack); + base1->GetYaxis()->SetRangeUser(8e-2, 8e5); + base1->GetXaxis()->SetTitleColor(kBlack); + fixedFontHist1D(base1,1.,1.2); + base1->GetYaxis()->SetTitleSize(base1->GetYaxis()->GetTitleSize()*1.5); + base1->GetXaxis()->SetTitleSize(base1->GetXaxis()->GetTitleSize()*1.5); + base1->GetYaxis()->SetLabelSize(base1->GetYaxis()->GetLabelSize()*1.5); + base1->GetXaxis()->SetLabelSize(base1->GetXaxis()->GetLabelSize()*1.5); + base1->GetXaxis()->SetNdivisions(4,4,0); + base1->GetYaxis()->SetNdivisions(5,5,0); + base1->Draw(); + + h_t_MC->Draw("same"); + + h_t_REC->SetMarkerStyle(20); + h_t_REC->Draw("PEsame"); + + h_t_trk_REC->SetFillColorAlpha(kBlue,0.4); + h_t_trk_REC->SetFillStyle(1001); + h_t_trk_REC->SetMarkerStyle(24); + h_t_trk_REC->SetMarkerColor(kBlue); + // h_t_trk_REC->Draw("PE3same"); + + h_t_combo_REC->SetFillColorAlpha(kRed,0.4); + h_t_combo_REC->SetFillStyle(1001); + h_t_combo_REC->SetMarkerStyle(24); + h_t_combo_REC->SetMarkerColor(kRed); + // h_t_combo_REC->Draw("PE3same"); + + TLatex* r42 = new TLatex(0.18, 0.91, "ep 10#times100 GeV"); + r42->SetNDC(); + r42->SetTextSize(22); + r42->SetTextFont(43); + r42->SetTextColor(kBlack); + r42->Draw("same"); + + TLatex* r43 = new TLatex(0.9,0.91, "EPIC"); + r43->SetNDC(); + r43->SetTextSize(0.04); + r43->Draw("same"); + + TLatex* r44 = new TLatex(0.53, 0.78, "10^{-3}2 GeV"); + r44->SetNDC(); + r44->SetTextSize(20); + r44->SetTextFont(43); + r44->SetTextColor(kBlack); + r44->Draw("same"); + + TLatex* r44_2 = new TLatex(0.63, 0.83, ""+vm_label+" #rightarrow "+daug_label); + r44_2->SetNDC(); + r44_2->SetTextSize(30); + r44_2->SetTextFont(43); + r44_2->SetTextColor(kBlack); + r44_2->Draw("same"); + + TLegend *w7 = new TLegend(0.58,0.68,0.93,0.76); + w7->SetLineColor(kWhite); + w7->SetFillColor(0); + w7->SetTextSize(17); + w7->SetTextFont(45); + w7->AddEntry(h_t_MC, "eSTARlight "+vm_label+" MC ", "L"); + w7->AddEntry(h_t_REC, "eSTARlight "+vm_label+" RECO ", "P"); + w7->Draw("same"); + + //c1->Print("./benchmark_output/figures/benchmark_rho_dsigmadt.pdf"); + TString figure1name = figure_directory+"/benchmark_rho_dsigmadt.pdf"; + c1->Print(figure1name); + + TCanvas* c2 = new TCanvas("c2","c2",1,1,600,600); + gPad->SetTicks(); + gPad->SetLeftMargin(0.18); + gPad->SetBottomMargin(0.18); + gPad->SetRightMargin(0.01); + TH1D* base2 = makeHist("base2", "", "#pi^{+}#pi^{-} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); + base2->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC->GetMaximum())); + base2->GetXaxis()->SetTitleColor(kBlack); + fixedFontHist1D(base2,1.,1.2); + base2->GetYaxis()->SetTitleSize(base2->GetYaxis()->GetTitleSize()*1.5); + base2->GetXaxis()->SetTitleSize(base2->GetXaxis()->GetTitleSize()*1.5); + base2->GetYaxis()->SetLabelSize(base2->GetYaxis()->GetLabelSize()*1.5); + base2->GetXaxis()->SetLabelSize(base2->GetXaxis()->GetLabelSize()*1.5); + base2->GetXaxis()->SetNdivisions(4,4,0); + base2->GetYaxis()->SetNdivisions(5,5,0); + base2->GetYaxis()->SetTitleOffset(1.3); + base2->Draw(); + + TH1D* h_VM_mass_REC_justprotons = (TH1D*)h_VM_mass_REC->Clone("h_VM_mass_REC_justprotons"); + for(int ibin=1; ibinGetNbinsX(); ibin++){ + h_VM_mass_REC_justprotons->SetBinContent(ibin,h_VM_mass_REC_justprotons->GetBinContent(ibin) - h_VM_mass_REC_justpions->GetBinContent(ibin)); + } + + h_VM_mass_MC->SetFillColorAlpha(kBlack,0.2); + h_VM_mass_REC->SetFillColorAlpha(kMagenta,0.2); + //h_VM_mass_REC_justpions->SetFillColorAlpha(kViolet+10,0.2); + h_VM_mass_MC->SetLineColor(kBlack); + h_VM_mass_REC->SetLineColor(kMagenta); + h_VM_mass_REC_justpions->SetLineColor(kViolet+10); + h_VM_mass_REC_justprotons->SetLineColor(kRed); + h_VM_mass_MC->SetLineWidth(2); + h_VM_mass_REC->SetLineWidth(2); + h_VM_mass_REC_justpions->SetLineWidth(2); + h_VM_mass_REC_justprotons->SetLineWidth(2); + + h_VM_mass_REC->Scale(3.0); + h_VM_mass_REC_justpions->Scale(3.0); + h_VM_mass_REC_justprotons->Scale(3.0); + + h_VM_mass_MC->Draw("HIST E same"); + h_VM_mass_REC->Draw("HIST E same"); + h_VM_mass_REC_justpions->Draw("HIST same"); + h_VM_mass_REC_justprotons->Draw("HIST same"); + + r42->Draw("same"); + r43->Draw("same"); + r44->Draw("same"); + r44_2->Draw("same"); + + TLegend *w8 = new TLegend(0.58,0.63,0.93,0.76); + w8->SetLineColor(kWhite); + w8->SetFillColor(0); + w8->SetTextSize(17); + w8->SetTextFont(45); + w8->AddEntry(h_VM_mass_MC, "eSTARlight "+vm_label+" MC ", "L"); + w8->AddEntry(h_VM_mass_REC, vm_label+" RECO#times3", "L"); + w8->AddEntry(h_VM_mass_REC_justpions, vm_label+" RECO#times3 (#pi^{-}#pi^{+})", "L"); + w8->AddEntry(h_VM_mass_REC_justprotons, vm_label+" RECO#times3 (#pi^{-}p)", "L"); + w8->Draw("same"); + + TString figure2name = figure_directory+"/benchmark_rho_mass.pdf"; + c2->Print(figure2name); + + + TCanvas* c3 = new TCanvas("c3","c3",1,1,600,600); + gPad->SetTicks(); + gPad->SetLogy(1); + gPad->SetLeftMargin(0.18); + gPad->SetBottomMargin(0.18); + gPad->SetRightMargin(0.01); + TH1D* base3 = makeHist("base3", "", "-#it{u} (GeV^{2})", "dN/d#it{u} (GeV^{-2} scaled)", 100,-0.25,3.05,kBlack); + base3->GetYaxis()->SetRangeUser(0.5, 2.5*(h_dNdu_MC->GetMaximum())); + base3->GetXaxis()->SetTitleColor(kBlack); + fixedFontHist1D(base3,1.,1.2); + base3->GetYaxis()->SetTitleSize(base3->GetYaxis()->GetTitleSize()*1.5); + base3->GetXaxis()->SetTitleSize(base3->GetXaxis()->GetTitleSize()*1.5); + base3->GetYaxis()->SetLabelSize(base3->GetYaxis()->GetLabelSize()*1.5); + base3->GetXaxis()->SetLabelSize(base3->GetXaxis()->GetLabelSize()*1.5); + base3->GetYaxis()->SetTitleOffset(1.2); + base3->GetXaxis()->SetNdivisions(4,4,0); + base3->GetYaxis()->SetNdivisions(5,5,0); + base3->Draw(); + + h_dNdu_MC->SetFillColorAlpha(kBlack,0); + h_dNdu_REC->SetFillColorAlpha(kMagenta,0); + h_dNdu_MC->SetLineColor(kBlack); + h_dNdu_REC->SetLineColor(kMagenta); + h_dNdu_MC->SetLineWidth(2); + h_dNdu_REC->SetLineWidth(2); + + h_dNdu_MC->Draw("HIST E same"); + h_dNdu_REC->Draw("HIST E same"); + + r42->Draw("same"); + r43->Draw("same"); + r44->Draw("same"); + r44_2->Draw("same"); + + TLegend *w9 = new TLegend(0.58,0.68,0.93,0.76); + w9->SetLineColor(kWhite); + w9->SetFillColor(0); + w9->SetTextSize(17); + w9->SetTextFont(45); + w9->AddEntry(h_dNdu_MC, "eSTARlight "+vm_label+" MC ", "L"); + w9->AddEntry(h_dNdu_REC, "eSTARlight "+vm_label+" RECO ", "L"); + w9->Draw("same"); + + TString figure3name = figure_directory+"/benchmark_rho_dNdu.pdf"; + c3->Print(figure3name); + + +} From 0f6d327096436630215d7ca7d88b5bb7af1f3be5 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sat, 13 Jan 2024 15:27:39 -0600 Subject: [PATCH 002/173] Update config.yml for phy benchmark --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 9bb6f956..eac3645e 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -5,14 +5,14 @@ u_channel_rho:compile: - snakemake --cores 1 uchannelrho_compile #u_channel_rho:sim: -# extends: .det_benchmark +# extends: .phy_benchmark # stage: simulate # script: # - echo "I will be simulating u-channel rho events here!" # - echo $LOCAL_DATA_PATH/u_channel_rho u_channel_rho:bench: - extends: .det_benchmark + extends: .phy_benchmark stage: benchmarks needs: - ["u_channel_rho:compile"] From 6841030a940d19e176d4d4540e03cbe07339031a Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sat, 13 Jan 2024 15:51:23 -0600 Subject: [PATCH 003/173] Updated config.yml to include results task --- benchmarks/u_rho/config.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index eac3645e..8d414448 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -11,13 +11,18 @@ u_channel_rho:compile: # - echo "I will be simulating u-channel rho events here!" # - echo $LOCAL_DATA_PATH/u_channel_rho -u_channel_rho:bench: +u_channel_rho:generate: extends: .phy_benchmark - stage: benchmarks + stage: generate needs: - ["u_channel_rho:compile"] script: - echo "I will be analyzing events here!" - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf figures/ - echo "Finished" + +u_channel_rho:results: + stage: collect + needs: ["u_channel_rho:simulate"] + script: + - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf figures/ From 91f2abe1da2adeb52b5ae782a1363eda534b53a6 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sat, 13 Jan 2024 15:57:04 -0600 Subject: [PATCH 004/173] Update config.yml Updated config.yml to include simulate task --- benchmarks/u_rho/config.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 8d414448..7bfae3f9 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -21,6 +21,18 @@ u_channel_rho:generate: - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - echo "Finished" +u_channel_rho:simulate: + stage: simulate + extends: .phy_benchmark + needs: ["u_channel_rho:generate"] + timeout: 96 hour + script: + - echo "The simulate task in config.yml does nothing for now" + retry: + max: 2 + when: + - runner_system_failure + u_channel_rho:results: stage: collect needs: ["u_channel_rho:simulate"] From b622c994c672f4424cc67e085881a67d8f5c5e7e Mon Sep 17 00:00:00 2001 From: Zachary W Sweger Date: Sat, 13 Jan 2024 18:00:05 -0500 Subject: [PATCH 005/173] Editing figures directory --- benchmarks/u_rho/config.yml | 7 +++++-- benchmarks/u_rho/figures/README | 1 - 2 files changed, 5 insertions(+), 3 deletions(-) delete mode 100644 benchmarks/u_rho/figures/README diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 7bfae3f9..f607b36f 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -19,7 +19,10 @@ u_channel_rho:generate: script: - echo "I will be analyzing events here!" - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - echo "Finished" + - echo "Finished, copying over figures now" + - mkdir results + - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/ + - echo "Finished copying!" u_channel_rho:simulate: stage: simulate @@ -37,4 +40,4 @@ u_channel_rho:results: stage: collect needs: ["u_channel_rho:simulate"] script: - - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf figures/ + - echo "The results rule does in config.yml does nothing for now" diff --git a/benchmarks/u_rho/figures/README b/benchmarks/u_rho/figures/README deleted file mode 100644 index f9ab956b..00000000 --- a/benchmarks/u_rho/figures/README +++ /dev/null @@ -1 +0,0 @@ -This directory contains benchmark figures From 33eaf51237bed5642edfc34cbe900d13e48192cf Mon Sep 17 00:00:00 2001 From: Zachary W Sweger Date: Sat, 13 Jan 2024 18:45:21 -0500 Subject: [PATCH 006/173] Edited the compile rule in the Snakefile to actually compile the script --- benchmarks/u_rho/Snakefile | 6 +++++- benchmarks/u_rho/analysis/pleaseIncludeMe.h | 3 ++- benchmarks/u_rho/analysis/uchannelrho.cxx | 7 ++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 9db9adc5..d2b97f17 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -12,7 +12,11 @@ S3 = S3RemoteProvider( rule uchannelrho_compile: input: - "analysis/uchannelrho_cxx.so", + "analysis/uchannelrho.cxx", + shell: + """ +root -l -b -q '{input}++' +""" rule uchannelrho_campaign_reco_get: diff --git a/benchmarks/u_rho/analysis/pleaseIncludeMe.h b/benchmarks/u_rho/analysis/pleaseIncludeMe.h index 63267698..eb05ba11 100644 --- a/benchmarks/u_rho/analysis/pleaseIncludeMe.h +++ b/benchmarks/u_rho/analysis/pleaseIncludeMe.h @@ -11,6 +11,7 @@ #include #include #include +#include #include "TFile.h" #include "TLorentzVector.h" @@ -112,4 +113,4 @@ auto getPhi(const std::vector& tracks) std::vector Phi; for(auto& i1 : tracks){Phi.push_back(i1.Phi());} return Phi; -} \ No newline at end of file +} diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index 71f18b09..51c507b6 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -24,8 +24,13 @@ auto giveme_u(TLorentzVector pIn, TLorentzVector vmOut){ } -int uchannelrho(TString rec_file, TString outputfile) +int uchannelrho(TString rec_file="input.root", TString outputfile="output.root") { +if (gSystem->AccessPathName(rec_file.Data()) != 0) { + // File does not exist + cout< Date: Sun, 14 Jan 2024 14:29:57 -0600 Subject: [PATCH 007/173] Update config.yml Testing removing analysis compilation from u-channel rho pipeline --- benchmarks/u_rho/config.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index f607b36f..be9c24eb 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -1,8 +1,8 @@ -u_channel_rho:compile: - stage: compile - extends: .compile_benchmark - script: - - snakemake --cores 1 uchannelrho_compile +#u_channel_rho:compile: +# stage: compile +# extends: .compile_benchmark +# script: +# - snakemake --cores 1 uchannelrho_compile #u_channel_rho:sim: # extends: .phy_benchmark From 3890737da70bed1c4b3109dbf3dd9d4a65dab318 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 14 Jan 2024 14:42:28 -0600 Subject: [PATCH 008/173] Update config.yml Reimplemented compilation step --- benchmarks/u_rho/config.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index be9c24eb..f607b36f 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -1,8 +1,8 @@ -#u_channel_rho:compile: -# stage: compile -# extends: .compile_benchmark -# script: -# - snakemake --cores 1 uchannelrho_compile +u_channel_rho:compile: + stage: compile + extends: .compile_benchmark + script: + - snakemake --cores 1 uchannelrho_compile #u_channel_rho:sim: # extends: .phy_benchmark From 543dc4536e23ff048b7c292eab926ea043366749 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 14 Jan 2024 14:52:52 -0600 Subject: [PATCH 009/173] Update Snakefile Updated compile step in snakefile --- benchmarks/u_rho/Snakefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index d2b97f17..a4c0c961 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -13,6 +13,8 @@ S3 = S3RemoteProvider( rule uchannelrho_compile: input: "analysis/uchannelrho.cxx", + output: + "analysis/uchannelrho_cxx.so", shell: """ root -l -b -q '{input}++' From f44fd828bf99bff44a5abebd84efb8699948c139 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 14 Jan 2024 14:58:48 -0600 Subject: [PATCH 010/173] Update Snakefile Edited compile rule --- benchmarks/u_rho/Snakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index a4c0c961..bc74fcfc 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -12,9 +12,9 @@ S3 = S3RemoteProvider( rule uchannelrho_compile: input: - "analysis/uchannelrho.cxx", + ROOT_BUILD_DIR_PREFIX + "analysis/uchannelrho.cxx", output: - "analysis/uchannelrho_cxx.so", + ROOT_BUILD_DIR_PREFIX + "analysis/uchannelrho_cxx.so", shell: """ root -l -b -q '{input}++' From 873a0caef5c9a07cc5364b4636880b534699bad2 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 14 Jan 2024 15:08:05 -0600 Subject: [PATCH 011/173] Update Snakefile Updated file paths --- benchmarks/u_rho/Snakefile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index bc74fcfc..b04a2a0a 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -12,9 +12,7 @@ S3 = S3RemoteProvider( rule uchannelrho_compile: input: - ROOT_BUILD_DIR_PREFIX + "analysis/uchannelrho.cxx", - output: - ROOT_BUILD_DIR_PREFIX + "analysis/uchannelrho_cxx.so", + "benchmarks/u_rho/analysis/uchannelrho.cxx", shell: """ root -l -b -q '{input}++' @@ -35,8 +33,8 @@ ln {input} {output} rule uchannelrho_analysis: input: - script="analysis/uchannelrho.cxx", - #script_compiled="analysis/uchannelrho_cxx.so", + script="benchmarks/u_rho/analysis/uchannelrho.cxx", + #script_compiled=ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho_cxx.so", data="benchmark_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", output: plots="benchmark_output/campaign_23.12.0_{INDEX}_eicrecon.edm4eic/plots.root", @@ -69,7 +67,7 @@ ruleorder: uchannelrho_combine > uchannelrho_analysis rule uchannelrho_plots: input: - script="macros/plot_rho_physics_benchmark.C", + script="benchmarks/u_rho/macros/plot_rho_physics_benchmark.C", plots="benchmark_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", output: "benchmark_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", From 0c2496cdedcaf169011c002f7a5f7811c03c6490 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 14 Jan 2024 15:12:07 -0600 Subject: [PATCH 012/173] Update Snakefile Updated compile path --- benchmarks/u_rho/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index b04a2a0a..3a681e51 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -12,7 +12,7 @@ S3 = S3RemoteProvider( rule uchannelrho_compile: input: - "benchmarks/u_rho/analysis/uchannelrho.cxx", + ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho.cxx", shell: """ root -l -b -q '{input}++' From 3f0bead06792952411a43c7fd3cbbc44157d6396 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sun, 14 Jan 2024 17:01:25 -0500 Subject: [PATCH 013/173] Snakefile: include benchmarks/u_rho/Snakefile --- Snakefile | 1 + flake.lock | 224 +++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 46 +++++++++++ 3 files changed, 271 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/Snakefile b/Snakefile index 7389e85f..93cbf7ee 100644 --- a/Snakefile +++ b/Snakefile @@ -18,3 +18,4 @@ root -l -b -q -e '.L {input}+' """ include: "benchmarks/diffractive_vm/Snakefile" +include: "benchmarks/u_rho/Snakefile" diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..f887dbf2 --- /dev/null +++ b/flake.lock @@ -0,0 +1,224 @@ +{ + "nodes": { + "acts-src": { + "flake": false, + "locked": { + "lastModified": 1668160771, + "narHash": "sha256-VW9kERAp/ILMmTWV9oVCjxcjERn7NG049sqbkJBmhkg=", + "owner": "acts-project", + "repo": "acts", + "rev": "3b4b5c741c8541491d496a36b917b00b344d52d1", + "type": "github" + }, + "original": { + "owner": "acts-project", + "ref": "v21.1.0", + "repo": "acts", + "type": "github" + } + }, + "dd4hep-src": { + "flake": false, + "locked": { + "lastModified": 1698160069, + "narHash": "sha256-vROAG965klhuqQOipddVxRwSVdMI9c7a0zmEKPsNmQs=", + "owner": "AIDASoft", + "repo": "DD4hep", + "rev": "ff4c726c90084b378cd9dc413ae2114e829002a7", + "type": "github" + }, + "original": { + "owner": "AIDASoft", + "ref": "v01-27", + "repo": "DD4hep", + "type": "github" + } + }, + "edm4eic-src": { + "flake": false, + "locked": { + "lastModified": 1692107245, + "narHash": "sha256-pM+0WXyNxMCfUZaHm4EXOeZAVgUc0+6c9pURr7HVtgo=", + "owner": "eic", + "repo": "EDM4eic", + "rev": "b46ba9a94d2c1fd4ef722c23348d87a51923e3fe", + "type": "github" + }, + "original": { + "owner": "eic", + "ref": "v2.1.0", + "repo": "EDM4eic", + "type": "github" + } + }, + "edm4hep-src": { + "flake": false, + "locked": { + "lastModified": 1689002358, + "narHash": "sha256-qtw8VfYintpbwIeLqDX/KRSHJDJlBXy8VcD4UmCr4ho=", + "owner": "key4hep", + "repo": "EDM4hep", + "rev": "3cf4537fc2d882dd78425510de14f9915fe79786", + "type": "github" + }, + "original": { + "owner": "key4hep", + "ref": "v00-10", + "repo": "EDM4hep", + "type": "github" + } + }, + "eicrecon-src": { + "flake": false, + "locked": { + "lastModified": 1694749174, + "narHash": "sha256-3Zk4+jO59P1a4WnGbw1QolYpVbA5nI2uhksQqNCZsis=", + "owner": "eic", + "repo": "EICrecon", + "rev": "9f08a4136ea2a78b35cc050fd2f46472fe0a87d8", + "type": "github" + }, + "original": { + "owner": "eic", + "ref": "v1.5.1", + "repo": "EICrecon", + "type": "github" + } + }, + "epic-nix": { + "inputs": { + "acts-src": "acts-src", + "dd4hep-src": "dd4hep-src", + "edm4eic-src": "edm4eic-src", + "edm4hep-src": "edm4hep-src", + "eicrecon-src": "eicrecon-src", + "epic-src": "epic-src", + "flake-compat": "flake-compat", + "jana2-src": "jana2-src", + "nixpkgs": "nixpkgs", + "podio-src": "podio-src", + "site-overlay": "site-overlay" + }, + "locked": { + "lastModified": 1698423649, + "narHash": "sha256-L6jy7UUBF93YdAaUz25Rp2OC/1B7D1TnuxOKqMWVmYE=", + "owner": "veprbl", + "repo": "epic-nix", + "rev": "10b354c66a327d721e8e962eb953dabe23af252d", + "type": "github" + }, + "original": { + "owner": "veprbl", + "repo": "epic-nix", + "type": "github" + } + }, + "epic-src": { + "flake": false, + "locked": { + "lastModified": 1691540088, + "narHash": "sha256-EKll4cCfIpSxr5NBjpIMvufAacxOUP/w0/B2mSg/TQA=", + "owner": "eic", + "repo": "epic", + "rev": "206677e12660535280438fefed67aae5b90223a1", + "type": "github" + }, + "original": { + "owner": "eic", + "ref": "23.08.0", + "repo": "epic", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "jana2-src": { + "flake": false, + "locked": { + "lastModified": 1689969274, + "narHash": "sha256-P9SZxtsqhwhYJ9X00v5EDToKKJsCvfLgWICB2bjJDD8=", + "owner": "JeffersonLab", + "repo": "JANA2", + "rev": "0d2b4a292c8111b383ebe91f2604a6cb480e5291", + "type": "github" + }, + "original": { + "owner": "JeffersonLab", + "ref": "v2.1.1", + "repo": "JANA2", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1663235518, + "narHash": "sha256-q8zLK6rK/CLXEguaPgm9yQJcY0VQtOBhAT9EV2UFK/A=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2277e4c9010b0f27585eb0bed0a86d7cbc079354", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "podio-src": { + "flake": false, + "locked": { + "lastModified": 1693417048, + "narHash": "sha256-ydrzgMyKq+TPEgzPek44NHLwTweQM02ijYo9Gp7zqlQ=", + "owner": "AIDASoft", + "repo": "podio", + "rev": "b870add0f37c5169fecc18be565644b15375a26d", + "type": "github" + }, + "original": { + "owner": "AIDASoft", + "ref": "v00-16-07", + "repo": "podio", + "type": "github" + } + }, + "root": { + "inputs": { + "epic-nix": "epic-nix", + "nixpkgs": [ + "epic-nix", + "nixpkgs" + ] + } + }, + "site-overlay": { + "locked": { + "lastModified": 1692478388, + "narHash": "sha256-uVx/EVDRrXYjqHSZcpDbeNWG4mA0at11xi/dnN7xyEk=", + "owner": "veprbl", + "repo": "empty-overlay-flake", + "rev": "a29c5c5670303cd98cc976072af11e9ad7daecb3", + "type": "github" + }, + "original": { + "owner": "veprbl", + "repo": "empty-overlay-flake", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..7fde96fe --- /dev/null +++ b/flake.nix @@ -0,0 +1,46 @@ +{ + inputs.epic-nix.url = "github:veprbl/epic-nix"; + + inputs.nixpkgs.follows = "epic-nix/nixpkgs"; + + outputs = { self, epic-nix, nixpkgs }: + let + + inherit (nixpkgs) lib; + supportedSystems = [ "x86_64-linux" "x86_64-darwin" ]; + + in + { + + devShells = lib.genAttrs supportedSystems + (system: + with import nixpkgs { + inherit system; + overlays = [ epic-nix.overlays.default ]; + }; + { + default = + mkShell { + buildInputs = + (builtins.attrValues epic-nix.packages.${system}) + ++ (with epic-nix.packages.${system}; [ + geant4.data.G4EMLOW + geant4.data.G4ENSDFSTATE + geant4.data.G4ENSDFSTATE + geant4.data.G4PARTICLEXS + geant4.data.G4PhotonEvaporation + ]) + ++ [ + nlohmann_json + snakemake + ]; + shellHook = '' + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${lib.makeLibraryPath [ fmt ]} + export S3_ACCESS_KEY="eicS3read" + export S3_SECRET_KEY="eicS3read" + ''; + }; + }); + + }; +} From 0d284a93095799e14285d0ae308a212394be3a29 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sun, 14 Jan 2024 17:02:15 -0500 Subject: [PATCH 014/173] benchmarks/u_rho/Snakefile: change compile rule to use common definition --- benchmarks/u_rho/Snakefile | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 3a681e51..7fe5092f 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -12,11 +12,7 @@ S3 = S3RemoteProvider( rule uchannelrho_compile: input: - ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho.cxx", - shell: - """ -root -l -b -q '{input}++' -""" + ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho_cxx.so", rule uchannelrho_campaign_reco_get: From 27c4c07f5a02f950bc1fb3280b742acb7148394f Mon Sep 17 00:00:00 2001 From: Zachary W Sweger Date: Fri, 10 May 2024 14:22:45 -0400 Subject: [PATCH 015/173] Added B0 reco QA plots --- benchmarks/u_rho/analysis/uchannelrho.cxx | 178 +++++- .../u_rho/macros/plot_rho_physics_benchmark.C | 525 +++++++++++++++++- 2 files changed, 679 insertions(+), 24 deletions(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index 51c507b6..37cb61d7 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -61,6 +61,11 @@ TTreeReaderArray emhits_energy_array = {tree_reader, "EcalEndcapNRecHits. TTreeReaderArray em_rec_id_array = {tree_reader, "EcalEndcapNClusterAssociations.recID"}; TTreeReaderArray em_sim_id_array = {tree_reader, "EcalEndcapNClusterAssociations.simID"}; +//B0 Tracker hits +TTreeReaderArray reco_x_array = {tree_reader, "MCParticles.endpoint.x"};//= {tree_reader, "B0TrackerHits.position.x"}; +TTreeReaderArray reco_y_array = {tree_reader, "MCParticles.endpoint.y"};//= {tree_reader, "B0TrackerHits.position.y"}; +TTreeReaderArray reco_z_array = {tree_reader, "MCParticles.endpoint.z"};//= {tree_reader, "B0TrackerHits.position.z"}; + // Reconstructed particles pz array for each reconstructed particle TTreeReaderArray reco_px_array = {tree_reader, "ReconstructedChargedParticles.momentum.x"}; TTreeReaderArray reco_py_array = {tree_reader, "ReconstructedChargedParticles.momentum.y"}; @@ -93,11 +98,47 @@ TH1D* h_eta = new TH1D("h_eta",";#eta",100,-5,5); TH2D* h_trk_energy_res = new TH2D("h_trk_energy_res",";E_{MC} (GeV); E_{MC}-E_{REC}/E_{MC} track-base ",100,0,20,1000,-1,1); TH2D* h_trk_Pt_res = new TH2D("h_trk_Pt_res",";p_{T,MC} (GeV); P_{T,MC}-P_{T,REC}/P_{T,MC} track-base ",100,0,15,1000,-1,1); TH1D* h_Epz_REC = new TH1D("h_Epz_REC",";E - p_{z} (GeV)",200,0,50); +TH2D* h_Acceptance_REC = new TH2D("h_Acceptance_REC",";#eta; p_{T}(GeV/c REC)",500,0,10,500,0,10); +TH2D* h_Acceptance_angular_REC = new TH2D("h_Acceptance_angular_REC",";#phi (radians); #theta (mrad)",100,0,6.4,200,0,100); +TH2D* h_Acceptance_angular_RECPI = new TH2D("h_Acceptance_angular_RECPI",";#phi (radians); #theta (mrad)",100,0,6.4,200,0,100); +TH2D* h_Acceptance_angular_RECPIP = new TH2D("h_Acceptance_angular_RECPIP",";#phi (radians); #theta (mrad)",100,0,6.4,200,0,100); +TH2D* h_Acceptance_angular_RECPIM = new TH2D("h_Acceptance_angular_RECPIM",";#phi (radians); #theta (mrad)",100,0,6.4,200,0,100); +TH2D* h_Acceptance_xy_RECPI = new TH2D("h_Acceptance_xy_RECPI",";x(mm); y(mm)",1000,-1000,1000,1000,-1000,1000); +TH2D* h_Acceptance_angular_MC = new TH2D("h_Acceptance_angular_MC" ,";#phi (radians); #theta (mrad)",500,0,6.4,500,0,100); +TH2D* h_etavseta_MC = new TH2D("h_etavseta_MC",";#eta(#pi^{+} MC); #eta(#pi^{-} MC)",250,0,10,250,0,10); +TH2D* h_etavseta_REC = new TH2D("h_etavseta_REC",";#eta(#pi^{+} REC); #eta(#pi^{-} REC)",250,0,10,250,0,10); + +TProfile2D* h_effEtaPtPi = new TProfile2D("h_effEtaPtPi",";#eta; p_{T}(GeV/c)",50,4,6,30,0,1.6); +TProfile2D* h_effEtaPtPip = new TProfile2D("h_effEtaPtPip",";#eta; p_{T}(GeV/c)",50,4,6,30,0,1.6); +TProfile2D* h_effEtaPtPim = new TProfile2D("h_effEtaPtPim",";#eta; p_{T}(GeV/c)",50,4,6,30,0,1.6); + +TProfile2D* h_effPhiEtaPi = new TProfile2D("h_effPhiEtaPi",";#phi (rad);#eta",50,0,6.4,50,4,6); +TProfile2D* h_effPhiEtaPip = new TProfile2D("h_effPhiEtaPip",";#phi (rad);#eta",50,0,6.4,50,4,6); +TProfile2D* h_effPhiEtaPim = new TProfile2D("h_effPhiEtaPim",";#phi (rad);#eta",50,0,6.4,50,4,6); + +TH2D* h_RecoMomPi = new TH2D("h_RecoMomPi", ";p (GeV/c) MC;p (GeV/c) reco.",100,0,100,100,0,100); +TH2D* h_RecoMomPip = new TH2D("h_RecoMomPip",";p (GeV/c) MC;p (GeV/c) reco.",100,0,100,100,0,100); +TH2D* h_RecoMomPim = new TH2D("h_RecoMomPim",";p (GeV/c) MC;p (GeV/c) reco.",100,0,100,100,0,100); + +TH2D* h_RecoTransMomPi = new TH2D("h_RecoTransMomPi", ";p_{T} (GeV/c) MC;p_{T} (GeV/c) reco.",100,0,1.6,100,0,1.6); +TH2D* h_RecoTransMomPip = new TH2D("h_RecoTransMomPip",";p_{T} (GeV/c) MC;p_{T} (GeV/c) reco.",100,0,1.6,100,0,1.6); +TH2D* h_RecoTransMomPim = new TH2D("h_RecoTransMomPim",";p_{T} (GeV/c) MC;p_{T} (GeV/c) reco.",100,0,1.6,100,0,1.6); + +TH1D* h_PiMomRecoQuality = new TH1D("h_PiMomRecoQuality",";(p_{reco}-p_{MC})/p_{MC};counts",500,-1,1); +TH1D* h_PipMomRecoQuality = new TH1D("h_PipMomRecoQuality",";(p_{reco}-p_{MC})/p_{MC};counts",500,-1,1); +TH1D* h_PimMomRecoQuality = new TH1D("h_PimMomRecoQuality",";(p_{reco}-p_{MC})/p_{MC};counts",500,-1,1); +TH1D* h_PiTransMomRecoQuality = new TH1D("h_PiTransMomRecoQuality",";(p_{T,reco}-p_{T,MC})/p_{T,MC};counts",500,-1,1); +TH1D* h_PipTransMomRecoQuality = new TH1D("h_PipTransMomRecoQuality",";(p_{T,reco}-p_{T,MC})/p_{T,MC};counts",500,-1,1); +TH1D* h_PimTransMomRecoQuality = new TH1D("h_PimTransMomRecoQuality",";(p_{T,reco}-p_{T,MC})/p_{T,MC};counts",500,-1,1); //VM & t TH1D* h_VM_mass_MC = new TH1D("h_VM_mass_MC",";mass (GeV)",200,0,4); +TH1D* h_VM_mass_MC_etacut = new TH1D("h_VM_mass_MC_etacut",";mass (GeV)",200,0,4); TH1D* h_VM_mass_REC = new TH1D("h_VM_mass_REC",";mass (GeV)",200,0,4); +TH1D* h_VM_mass_REC_etacut = new TH1D("h_VM_mass_REC_etacut",";mass (GeV)",200,0,4); TH1D* h_VM_mass_REC_justpions = new TH1D("h_VM_mass_REC_justpions",";mass (GeV)",200,0,4); +TH1D* h_VM_mass_REC_justpionsB0 = new TH1D("h_VM_mass_REC_justpionsB0",";mass (GeV)",200,0,4); +TH1D* h_VM_mass_REC_notjustpionsB0 = new TH1D("h_VM_mass_REC_notjustpionsB0",";mass (GeV)",200,0,4); TH1D* h_VM_pt_REC = new TH1D("h_VM_pt_REC",";p_{T} (GeV/c)",200,0,2); TH2D* h_VM_res = new TH2D("h_VM_res",";p_{T,MC} (GeV); p_{T,MC}-E_{T,REC}/p_{T,MC}",100,0,2,1000,-1,1); TH1D* h_t_REC = new TH1D("h_t_REC",";t_{REC} (GeV^{2}); counts",1000,0,5); @@ -116,6 +157,9 @@ double umax = 5.0; int n_ubins = 100; double u_binwidth = (umax-umin)/((double)n_ubins); TH1D* h_u_REC = new TH1D("h_u_REC", ";-#it{u}_{REC} (GeV^{2}); dN/d|#it{u}| (GeV^{-2} scaled)",n_ubins,umin,umax); +TH1D* h_u_REC_justpions = new TH1D("h_u_REC_justpions", ";-#it{u}_{REC} (GeV^{2}); dN/d|#it{u}| (GeV^{-2} scaled)",n_ubins,umin,umax); +TH1D* h_u_REC_justpionsB0 = new TH1D("h_u_REC_justpionsB0", ";-#it{u}_{REC} (GeV^{2}); dN/d|#it{u}| (GeV^{-2} scaled)",n_ubins,umin,umax); +TH1D* h_u_REC_notjustpionsB0 = new TH1D("h_u_REC_notjustpionsB0", ";-#it{u}_{REC} (GeV^{2}); dN/d|#it{u}| (GeV^{-2} scaled)",n_ubins,umin,umax); TH1D* h_u_MC = new TH1D("h_u_MC", ";-#it{u}_{MC} (GeV^{2}); dN/d|#it{u}| (GeV^{-2} scaled)",n_ubins,umin,umax); //energy clus @@ -126,6 +170,9 @@ TH1D* h_energy_calibration_REC = new TH1D("h_energy_calibration_REC",";E (GeV)", TH1D* h_EoverP_REC = new TH1D("h_EoverP_REC",";E/p",200,0,2); TH1D* h_ClusOverHit_REC = new TH1D("h_ClusOverHit_REC",";cluster energy / new cluster energy",200,0,2); +// +TH1D* h_numPositiveTracks = new TH1D("h_numPositiveTracks",";number of positive tracks;counts",10,-0.5,9.5); + cout<<"There are "<GetEntries()<<" events!!!!!!!"<GetEntries()); while (tree_reader.Next()) { @@ -146,6 +193,7 @@ while (tree_reader.Next()) { double maxPt=-99.; for(unsigned int imc=0;imcFill(mc_endx_array[imc],mc_endy_array[imc]); h_VM_endpointZ_MC->Fill(mc_endz_array[imc]);} - if(mc_pdg_array[imc]==-211 - && mc_genStatus_array[imc]==1){ piminusMC.SetVectM(mctrk,MASS_PION); h_VM_endpointXY_MC->Fill(mc_endx_array[imc],mc_endy_array[imc]); h_VM_endpointZ_MC->Fill(mc_endz_array[imc]);} + if(mc_pdg_array[imc]==211 && mc_genStatus_array[imc]==1){ + piplusMC.SetVectM(mctrk,MASS_PION); + h_VM_endpointXY_MC->Fill(mc_endx_array[imc],mc_endy_array[imc]); + h_VM_endpointZ_MC->Fill(mc_endz_array[imc]); + double phi = mctrk.Phi()>0 ? mctrk.Phi() : mctrk.Phi()+6.2831853; + h_Acceptance_angular_MC->Fill(phi,1000.0*mctrk.Theta()); + } + if(mc_pdg_array[imc]==-211 && mc_genStatus_array[imc]==1){ + piminusMC.SetVectM(mctrk,MASS_PION); + h_VM_endpointXY_MC->Fill(mc_endx_array[imc],mc_endy_array[imc]); + h_VM_endpointZ_MC->Fill(mc_endz_array[imc]); + double phi = mctrk.Phi()>0 ? mctrk.Phi() : mctrk.Phi()+6.2831853; + h_Acceptance_angular_MC->Fill(phi,1000.0*mctrk.Theta()); + } } vmMC=piplusMC+piminusMC; + h_etavseta_MC->Fill(piplusMC.Eta(),piminusMC.Eta()); //protection. if(ebeam.E()==pbeam.E() && ebeam.E()==0) { std::cout << "problem with MC incoming beams" << std::endl; @@ -188,6 +247,8 @@ while (tree_reader.Next()) { t_MC=method_E; h_t_MC->Fill( method_E ); h_VM_mass_MC->Fill(vmMC.M()); + if(piplusMC.Theta()>0.009 && piplusMC.Theta()<0.013 && + piminusMC.Theta()>0.009 && piminusMC.Theta()<0.013 ) h_VM_mass_MC_etacut->Fill(vmMC.M()); } //rec level @@ -262,12 +323,16 @@ while (tree_reader.Next()) { TLorentzVector scatClusEREC(0,0,0,0); TLorentzVector hfs(0,0,0,0); TLorentzVector particle(0,0,0,0); + TLorentzVector protonREC(0,0,0,0); + TLorentzVector protonRECasifpion(0,0,0,0); TLorentzVector piplusREC(0,0,0,0); TLorentzVector piminusREC(0,0,0,0); TLorentzVector vmREC(0,0,0,0); + TLorentzVector vmRECfromproton(0,0,0,0); bool isPiMinusFound = false; bool isPiPlusFound = false; + bool isProtonFound = false; double maxP=-1.; //track loop @@ -291,23 +356,91 @@ while (tree_reader.Next()) { } } //loop over track again; + int numpositivetracks = 0; for(unsigned int itrk=0;itrkpi+pi- daughters; h_eta->Fill(trk.Eta()); //if(fabs(trk.Eta())<3.0){ - if(reco_charge_array[itrk]>0){ piplusREC.SetVectM(trk,MASS_PION); if(reco_PDG[itrk]==211)isPiPlusFound=true;} + if(reco_charge_array[itrk]>0){ + numpositivetracks++; + if(reco_PDG[itrk]==211){ + piplusREC.SetVectM(trk,MASS_PION); + isPiPlusFound=true; + } + if(reco_PDG[itrk]==2212){ + protonREC.SetVectM(trk,MASS_PROTON); + protonRECasifpion.SetVectM(trk,MASS_PION); + isProtonFound=true; + } + } if(reco_charge_array[itrk]<0){ piminusREC.SetVectM(trk,MASS_PION); if(reco_PDG[itrk]==-211)isPiMinusFound=true;} //} + double pt = sqrt(reco_px_array[itrk]*reco_px_array[itrk] + reco_py_array[itrk]*reco_py_array[itrk]); + h_Acceptance_REC->Fill(fabs(trk.Eta()),pt); + double phi = trk.Phi()>0 ? trk.Phi() : trk.Phi()+6.2831853; + h_Acceptance_angular_REC->Fill(phi,1000.0*trk.Theta()); + if(reco_PDG[itrk]==211 || reco_PDG[itrk]==-211) h_Acceptance_angular_RECPI->Fill(phi,1000.0*trk.Theta()); + if(reco_PDG[itrk]==211) h_Acceptance_angular_RECPIP->Fill(phi,1000.0*trk.Theta()); + if(reco_PDG[itrk]==-211) h_Acceptance_angular_RECPIM->Fill(phi,1000.0*trk.Theta()); } } + h_numPositiveTracks->Fill(numpositivetracks); + //loop over B0 hits + for(unsigned int ihit=0; ihitFill(hit.X(),hit.Y()); + } //4vector of VM; if(piplusREC.E()!=0. && piminusREC.E()!=0.){ vmREC=piplusREC+piminusREC; } + if(protonRECasifpion.E()!=0. && piminusREC.E()!=0.){ + vmRECfromproton=protonRECasifpion+piminusREC; + } + + //pion reconstruction + double thispipeff = (isPiPlusFound) ? 1.0 : 0.0; + double thispimeff = (isPiMinusFound) ? 1.0 : 0.0; + h_effEtaPtPi ->Fill(piplusMC.Eta(), piplusMC.Pt(), thispipeff); + h_effEtaPtPi ->Fill(piminusMC.Eta(),piminusMC.Pt(),thispimeff); + h_effEtaPtPip->Fill(piplusMC.Eta(), piplusMC.Pt(), thispipeff); + h_effEtaPtPim->Fill(piminusMC.Eta(),piminusMC.Pt(),thispimeff); + // + double thispipphi = piplusMC.Phi()>0 ? piplusMC.Phi() : piplusMC.Phi()+6.2831853; + double thispimphi = piminusMC.Phi()>0 ? piminusMC.Phi() : piminusMC.Phi()+6.2831853; + if(piplusMC.Pt() >0.2) h_effPhiEtaPi ->Fill(thispipphi, piplusMC.Eta(), thispipeff); + if(piminusMC.Pt()>0.2) h_effPhiEtaPi ->Fill(thispimphi,piminusMC.Eta(),thispimeff); + if(piplusMC.Pt() >0.2) h_effPhiEtaPip->Fill(thispipphi, piplusMC.Eta(), thispipeff); + if(piminusMC.Pt()>0.2) h_effPhiEtaPim->Fill(thispimphi,piminusMC.Eta(),thispimeff); + // + if(isPiPlusFound) h_RecoMomPi ->Fill(piplusMC.P() ,piplusREC.P() ); + if(isPiMinusFound) h_RecoMomPi ->Fill(piminusMC.P(),piminusREC.P()); + if(isPiPlusFound) h_RecoMomPip->Fill(piplusMC.P() ,piplusREC.P() ); + if(isPiMinusFound) h_RecoMomPim->Fill(piminusMC.P(),piminusREC.P()); + // + if(isPiPlusFound) h_RecoTransMomPi ->Fill(piplusMC.Pt() ,piplusREC.Pt() ); + if(isPiMinusFound) h_RecoTransMomPi ->Fill(piminusMC.Pt(),piminusREC.Pt()); + if(isPiPlusFound) h_RecoTransMomPip->Fill(piplusMC.Pt() ,piplusREC.Pt() ); + if(isPiMinusFound) h_RecoTransMomPim->Fill(piminusMC.Pt(),piminusREC.Pt()); + // + if(isPiPlusFound){ + h_PiMomRecoQuality->Fill((piplusREC.P()-piplusMC.P())/piplusMC.P()); + h_PipMomRecoQuality->Fill((piplusREC.P()-piplusMC.P())/piplusMC.P()); + h_PiTransMomRecoQuality->Fill((piplusREC.Pt()-piplusMC.Pt())/piplusMC.Pt()); + h_PipTransMomRecoQuality->Fill((piplusREC.Pt()-piplusMC.Pt())/piplusMC.Pt()); + } + if(isPiMinusFound){ + h_PiMomRecoQuality->Fill((piminusREC.P()-piminusMC.P())/piminusMC.P()); + h_PimMomRecoQuality->Fill((piminusREC.P()-piminusMC.P())/piminusMC.P()); + h_PiTransMomRecoQuality->Fill((piminusREC.Pt()-piminusMC.Pt())/piminusMC.Pt()); + h_PimTransMomRecoQuality->Fill((piminusREC.Pt()-piminusMC.Pt())/piminusMC.Pt()); + } //track-base e' energy REC; h_trk_energy_REC->Fill(scatMCmatchREC.E()); @@ -349,10 +482,19 @@ while (tree_reader.Next()) { //if(yREC<0.01||yREC>0.85) continue; //VM rec - if(vmREC.E()==0) continue; + if(vmREC.E()==0 && vmRECfromproton.E()==0) continue; double rho_mass = vmREC.M(); + double rho_mass_fromproton = vmRECfromproton.M(); h_VM_mass_REC->Fill(rho_mass); - if(isPiMinusFound && isPiPlusFound){ h_VM_mass_REC_justpions->Fill(rho_mass);} + h_VM_mass_REC->Fill(rho_mass_fromproton); + if(piplusMC.Theta()>0.009 && piplusMC.Theta()<0.013 && + piminusMC.Theta()>0.009 && piminusMC.Theta()<0.013 ) h_VM_mass_REC_etacut->Fill(vmREC.M()); + if(piplusREC.Eta()>3.9 && piminusREC.Eta()>3.9) h_VM_mass_REC_notjustpionsB0->Fill(rho_mass); + if(isPiMinusFound && isPiPlusFound){ + h_VM_mass_REC_justpions->Fill(rho_mass); + h_etavseta_REC->Fill(piplusREC.Eta(),piminusREC.Eta()); + if(piplusREC.Eta()>3.9 && piminusREC.Eta()>3.9) h_VM_mass_REC_justpionsB0->Fill(rho_mass); + } h_VM_pt_REC->Fill(vmREC.Pt()); //2 versions: track and energy cluster: @@ -362,13 +504,28 @@ while (tree_reader.Next()) { h_t_REC->Fill( t_REC ); h_t_REC_2D->Fill(t_trk_REC,t_REC); double u_REC = giveme_u(pbeam,vmREC); + double u_REC_fromproton = giveme_u(pbeam,vmRECfromproton); double u_MC = giveme_u(pbeam,vmMC); + //4vector of VM; + if(piplusREC.E()!=0. && piminusREC.E()!=0.){ + h_u_REC->Fill(u_REC); + h_u_REC_justpions->Fill(u_REC); + } + if(protonRECasifpion.E()!=0. && piminusREC.E()!=0.){ + h_u_REC->Fill(u_REC_fromproton); + } h_u_REC_2D->Fill(u_MC,u_REC); - h_u_REC->Fill(u_REC); + /*h_u_REC->Fill(u_REC); + if(piplusREC.Eta()>3.9 && piminusREC.Eta()>3.9) h_u_REC_notjustpionsB0->Fill(u_REC); + if(isPiMinusFound && isPiPlusFound){ + h_u_REC_justpions->Fill(u_REC); + if(piplusREC.Eta()>3.9 && piminusREC.Eta()>3.9) h_u_REC_justpionsB0->Fill(u_REC); + } + */ h_u_MC->Fill(u_MC); if( (t_trk_REC/t_REC) > 0.5 && (t_trk_REC/t_REC) < 1.5 ){ h_t_combo_REC->Fill( (t_trk_REC+t_REC)/2. );//w=1./(fabs(1.0-(t_trk_REC/t_REC))) - } + } h_t_RECMC_2D->Fill(t_MC,t_trk_REC/t_REC); //t track resolution @@ -388,6 +545,9 @@ while (tree_reader.Next()) { } h_u_REC->Scale(1.0/u_binwidth); +h_u_REC_justpions->Scale(1.0/u_binwidth); +h_u_REC_justpionsB0->Scale(1.0/u_binwidth); +h_u_REC_notjustpionsB0->Scale(1.0/u_binwidth); h_u_MC->Scale(1.0/u_binwidth); output->Write(); diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index dd397aea..6182c238 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -7,7 +7,7 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin TFile* file = new TFile(filename); TString vm_label="#rho^{0}"; - TString daug_label="#pi^{+}#pi^{-}"; + TString daug_label="#pi^{#plus}#pi^{#minus}"; //t distribution TH1D* h_t_MC = (TH1D*) file->Get("h_t_MC"); TH1D* h_t_REC = (TH1D*) file->Get("h_t_REC"); @@ -17,9 +17,27 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin TH1D* h_VM_mass_MC = (TH1D*) file->Get("h_VM_mass_MC"); TH1D* h_VM_mass_REC = (TH1D*) file->Get("h_VM_mass_REC"); TH1D* h_VM_mass_REC_justpions = (TH1D*) file->Get("h_VM_mass_REC_justpions"); - //mass distribution + //mass distribution within B0 + TH1D* h_VM_mass_MC_etacut = (TH1D*) file->Get("h_VM_mass_MC_etacut"); + TH1D* h_VM_mass_REC_etacut = (TH1D*) file->Get("h_VM_mass_REC_etacut"); + //dN/du distribution TH1D* h_dNdu_MC = (TH1D*) file->Get("h_u_MC"); TH1D* h_dNdu_REC = (TH1D*) file->Get("h_u_REC"); + TH1D* h_dNdu_REC_justpions = (TH1D*) file->Get("h_u_REC_justpions"); + //efficiencies + TProfile2D* h_effEtaPtPi = (TProfile2D*) file->Get("h_effEtaPtPi"); + TProfile2D* h_effEtaPtPip = (TProfile2D*) file->Get("h_effEtaPtPip"); + TProfile2D* h_effEtaPtPim = (TProfile2D*) file->Get("h_effEtaPtPim"); + TProfile2D* h_effPhiEtaPi = (TProfile2D*) file->Get("h_effPhiEtaPi"); + TProfile2D* h_effPhiEtaPip = (TProfile2D*) file->Get("h_effPhiEtaPip"); + TProfile2D* h_effPhiEtaPim = (TProfile2D*) file->Get("h_effPhiEtaPim"); + //reco quality + TH2D* h_RecoMomPi = (TH2D*) file->Get("h_RecoMomPi"); + TH2D* h_RecoMomPip= (TH2D*) file->Get("h_RecoMomPip"); + TH2D* h_RecoMomPim= (TH2D*) file->Get("h_RecoMomPim"); + TH2D* h_RecoTransMomPi = (TH2D*) file->Get("h_RecoTransMomPi"); + TH2D* h_RecoTransMomPip= (TH2D*) file->Get("h_RecoTransMomPip"); + TH2D* h_RecoTransMomPim= (TH2D*) file->Get("h_RecoTransMomPim"); TCanvas* c1 = new TCanvas("c1","c1",1,1,600,600); @@ -76,7 +94,7 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin r44->SetTextColor(kBlack); r44->Draw("same"); - TLatex* r44_2 = new TLatex(0.63, 0.83, ""+vm_label+" #rightarrow "+daug_label); + TLatex* r44_2 = new TLatex(0.5, 0.83, ""+vm_label+" #rightarrow "+daug_label+" eSTARlight"); r44_2->SetNDC(); r44_2->SetTextSize(30); r44_2->SetTextFont(43); @@ -101,7 +119,7 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); gPad->SetRightMargin(0.01); - TH1D* base2 = makeHist("base2", "", "#pi^{+}#pi^{-} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); + TH1D* base2 = makeHist("base2", "", "#pi^{#plus}#pi^{#minus} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); base2->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC->GetMaximum())); base2->GetXaxis()->SetTitleColor(kBlack); fixedFontHist1D(base2,1.,1.2); @@ -150,16 +168,16 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin w8->SetFillColor(0); w8->SetTextSize(17); w8->SetTextFont(45); - w8->AddEntry(h_VM_mass_MC, "eSTARlight "+vm_label+" MC ", "L"); - w8->AddEntry(h_VM_mass_REC, vm_label+" RECO#times3", "L"); - w8->AddEntry(h_VM_mass_REC_justpions, vm_label+" RECO#times3 (#pi^{-}#pi^{+})", "L"); - w8->AddEntry(h_VM_mass_REC_justprotons, vm_label+" RECO#times3 (#pi^{-}p)", "L"); + w8->AddEntry(h_VM_mass_MC, ""+vm_label+" MC ", "L"); + w8->AddEntry(h_VM_mass_REC, vm_label+" reco.#times3", "L"); + w8->AddEntry(h_VM_mass_REC_justpions, vm_label+" reco.#times3 (#pi^{#minus}#pi^{#plus})", "L"); + w8->AddEntry(h_VM_mass_REC_justprotons, vm_label+" reco.#times3 (#pi^{#minus}p)", "L"); w8->Draw("same"); TString figure2name = figure_directory+"/benchmark_rho_mass.pdf"; c2->Print(figure2name); - + ///////////////////// Figure 3 TCanvas* c3 = new TCanvas("c3","c3",1,1,600,600); gPad->SetTicks(); gPad->SetLogy(1); @@ -167,7 +185,7 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin gPad->SetBottomMargin(0.18); gPad->SetRightMargin(0.01); TH1D* base3 = makeHist("base3", "", "-#it{u} (GeV^{2})", "dN/d#it{u} (GeV^{-2} scaled)", 100,-0.25,3.05,kBlack); - base3->GetYaxis()->SetRangeUser(0.5, 2.5*(h_dNdu_MC->GetMaximum())); + base3->GetYaxis()->SetRangeUser(0.5, 100*(h_dNdu_MC->GetMaximum())); base3->GetXaxis()->SetTitleColor(kBlack); fixedFontHist1D(base3,1.,1.2); base3->GetYaxis()->SetTitleSize(base3->GetYaxis()->GetTitleSize()*1.5); @@ -179,32 +197,509 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin base3->GetYaxis()->SetNdivisions(5,5,0); base3->Draw(); - h_dNdu_MC->SetFillColorAlpha(kBlack,0); - h_dNdu_REC->SetFillColorAlpha(kMagenta,0); h_dNdu_MC->SetLineColor(kBlack); h_dNdu_REC->SetLineColor(kMagenta); + h_dNdu_REC_justpions->SetLineColor(kBlue); h_dNdu_MC->SetLineWidth(2); h_dNdu_REC->SetLineWidth(2); + h_dNdu_REC_justpions->SetLineWidth(2); h_dNdu_MC->Draw("HIST E same"); h_dNdu_REC->Draw("HIST E same"); + h_dNdu_REC_justpions->Draw("HIST E same"); r42->Draw("same"); r43->Draw("same"); r44->Draw("same"); r44_2->Draw("same"); - TLegend *w9 = new TLegend(0.58,0.68,0.93,0.76); + TF1* fit_mc = new TF1("fit_mc", "[0]*exp([1]*x)",0.2, 1.2); + TF1* fit_rec = new TF1("fit_rec", "[0]*exp([1]*x)",0.2, 1.2); + TF1* fit_recpi = new TF1("fit_recpi", "[0]*exp([1]*x)",0.2, 1.2); + fit_mc->SetLineColor(kBlack); + fit_rec->SetLineColor(kMagenta); + fit_recpi->SetLineColor(kBlue); + fit_mc->SetLineWidth(3); + fit_rec->SetLineWidth(3); + fit_recpi->SetLineWidth(3); + TFitResultPtr r1 = h_dNdu_MC->Fit("fit_mc","RLMSIN"); + TFitResultPtr r2 = h_dNdu_REC->Fit("fit_rec","RLMSIN"); + TFitResultPtr r3 = h_dNdu_REC_justpions->Fit("fit_recpi","RLMSIN"); + double alpha_mc = r1->Parameter(1); + double alpha_rec = r2->Parameter(1); + double alpha_recpi = r3->Parameter(1); + fit_mc->Draw("SAME"); + fit_rec->Draw("SAME"); + fit_recpi->Draw("SAME"); + + TH1I* hwhite = new TH1I("hwhite","hwhite",1,0,1); + hwhite->SetLineColor(kWhite); + TLegend *w9 = new TLegend(0.53,0.61,0.86,0.76); w9->SetLineColor(kWhite); w9->SetFillColor(0); w9->SetTextSize(17); w9->SetTextFont(45); - w9->AddEntry(h_dNdu_MC, "eSTARlight "+vm_label+" MC ", "L"); - w9->AddEntry(h_dNdu_REC, "eSTARlight "+vm_label+" RECO ", "L"); + w9->AddEntry(hwhite, "~exp[#alpha(-#it{u})]", "L"); + w9->AddEntry(h_dNdu_MC, vm_label+Form(" MC, #alpha=%.1fGeV^{-2}",alpha_mc), "L"); + w9->AddEntry(h_dNdu_REC, vm_label+Form(" reco. #alpha=%.1fGeV^{-2}",alpha_rec), "L"); + w9->AddEntry(h_dNdu_REC_justpions, vm_label+Form(" reco. (#pi^{#minus}#pi^{#plus}), #alpha=%.1fGeV^{-2}",alpha_recpi), "L"); w9->Draw("same"); TString figure3name = figure_directory+"/benchmark_rho_dNdu.pdf"; c3->Print(figure3name); + ///////////////////// Figure 4 + TCanvas* c4 = new TCanvas("c4","c4",1,1,600,600); + gPad->SetTicks(); + gPad->SetLeftMargin(0.18); + gPad->SetBottomMargin(0.18); + gPad->SetRightMargin(0.01); + TH1D* base4 = makeHist("base4", "", "#pi^{#plus}#pi^{#minus} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); + base4->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC_etacut->GetMaximum())); + base4->GetXaxis()->SetTitleColor(kBlack); + fixedFontHist1D(base4,1.,1.2); + base4->GetYaxis()->SetTitleSize(base4->GetYaxis()->GetTitleSize()*1.5); + base4->GetXaxis()->SetTitleSize(base4->GetXaxis()->GetTitleSize()*1.5); + base4->GetYaxis()->SetLabelSize(base4->GetYaxis()->GetLabelSize()*1.5); + base4->GetXaxis()->SetLabelSize(base4->GetXaxis()->GetLabelSize()*1.5); + base4->GetXaxis()->SetNdivisions(4,4,0); + base4->GetYaxis()->SetNdivisions(5,5,0); + base4->GetYaxis()->SetTitleOffset(1.3); + base4->Draw(); + + h_VM_mass_MC_etacut->SetFillColorAlpha(kBlack,0.2); + h_VM_mass_REC_etacut->SetFillColorAlpha(kMagenta,0.2); + h_VM_mass_MC_etacut->SetLineColor(kBlack); + h_VM_mass_REC_etacut->SetLineColor(kMagenta); + h_VM_mass_MC_etacut->SetLineWidth(2); + h_VM_mass_REC_etacut->SetLineWidth(2); + + h_VM_mass_MC_etacut->Draw("HIST E same"); + h_VM_mass_REC_etacut->Draw("HIST E same"); + + double minbineff = h_VM_mass_MC_etacut->FindBin(0.6); + double maxbineff = h_VM_mass_MC_etacut->FindBin(1.0); + double thiseff = 100.0*(1.0*h_VM_mass_REC_etacut->Integral(minbineff,maxbineff))/(1.0*h_VM_mass_MC_etacut->Integral(minbineff,maxbineff)); + + r42->Draw("same"); + r43->Draw("same"); + r44->Draw("same"); + r44_2->Draw("same"); + + TLegend *w10 = new TLegend(0.58,0.62,0.93,0.7); + w10->SetLineColor(kWhite); + w10->SetFillColor(0); + w10->SetTextSize(17); + w10->SetTextFont(45); + w10->AddEntry(h_VM_mass_MC_etacut, vm_label+" MC ", "L"); + w10->AddEntry(h_VM_mass_REC_etacut, vm_label+" reco. (#pi^{#minus}#pi^{#plus})", "L"); + w10->Draw("same"); + + TLatex* anglelabel = new TLatex(0.59, 0.73, "9<#theta_{#pi^{#pm},MC}<13 mrad"); + anglelabel->SetNDC(); + anglelabel->SetTextSize(20); + anglelabel->SetTextFont(43); + anglelabel->SetTextColor(kBlack); + anglelabel->Draw("same"); + + TLatex* efflabel = new TLatex(0.59, 0.55, "reco. eff (0.6SetNDC(); + efflabel->SetTextSize(20); + efflabel->SetTextFont(43); + efflabel->SetTextColor(kBlack); + efflabel->Draw("same"); + TLatex* effnlabel = new TLatex(0.59, 0.51, Form(" = %.0f%%",thiseff)); + effnlabel->SetNDC(); + effnlabel->SetTextSize(20); + effnlabel->SetTextFont(43); + effnlabel->SetTextColor(kBlack); + effnlabel->Draw("same"); + + TString figure4name = figure_directory+"/benchmark_rho_mass_cuts.pdf"; + c4->Print(figure4name); + + ///////////////////// Figure 5 + TCanvas* c5 = new TCanvas("c5","c5",1,1,700,560); + TPad* p5 = new TPad("p5","Pad5",0.,0.,1.,1.); + p5->Divide(3,2,0,0); + p5->Draw(); + gStyle->SetPalette(kBlueRedYellow); + gStyle->SetOptStat(0); + + h_effEtaPtPi ->GetXaxis()->SetLabelSize(h_effEtaPtPi ->GetXaxis()->GetLabelSize()*1.8); + h_effEtaPtPip ->GetXaxis()->SetLabelSize(h_effEtaPtPip ->GetXaxis()->GetLabelSize()*1.8); + h_effEtaPtPim ->GetXaxis()->SetLabelSize(h_effEtaPtPim ->GetXaxis()->GetLabelSize()*1.8); + h_effEtaPtPi ->GetYaxis()->SetLabelSize(h_effEtaPtPi ->GetYaxis()->GetLabelSize()*1.8); + h_effEtaPtPim ->GetZaxis()->SetLabelSize(h_effEtaPtPim ->GetZaxis()->GetLabelSize()*1.8); + h_effEtaPtPim ->GetZaxis()->SetTitleSize(h_effEtaPtPim ->GetZaxis()->GetTitleSize()*1.8); + h_effPhiEtaPi ->GetXaxis()->SetLabelSize(h_effPhiEtaPi ->GetXaxis()->GetLabelSize()*1.8); + h_effPhiEtaPip->GetXaxis()->SetLabelSize(h_effPhiEtaPip->GetXaxis()->GetLabelSize()*1.8); + h_effPhiEtaPim->GetXaxis()->SetLabelSize(h_effPhiEtaPim->GetXaxis()->GetLabelSize()*1.8); + h_effPhiEtaPi ->GetYaxis()->SetLabelSize(h_effPhiEtaPi ->GetYaxis()->GetLabelSize()*1.8); + h_effPhiEtaPim->GetZaxis()->SetLabelSize(h_effPhiEtaPim->GetZaxis()->GetLabelSize()*1.8); + h_effPhiEtaPim->GetZaxis()->SetTitleSize(h_effPhiEtaPim->GetZaxis()->GetTitleSize()*1.8); + + fixedFontHist1D(h_effEtaPtPi,1.,1.2); + fixedFontHist1D(h_effEtaPtPip,1.,1.2); + fixedFontHist1D(h_effEtaPtPim,1.,1.2); + fixedFontHist1D(h_effPhiEtaPi,1.,1.2); + fixedFontHist1D(h_effPhiEtaPip,1.,1.2); + fixedFontHist1D(h_effPhiEtaPim,1.,1.2); + + p5->cd(1); + TVirtualPad* p51 = p5->cd(1); + p51->SetTopMargin(0.08); + p51->SetRightMargin(0); + p51->SetLeftMargin(0.21); + p51->SetBottomMargin(0.2); + h_effEtaPtPi->GetXaxis()->SetRangeUser(3.9,6.05); + h_effEtaPtPi->GetYaxis()->SetRangeUser(0,1.7); + h_effEtaPtPi->GetZaxis()->SetRangeUser(0,1); + h_effEtaPtPi->GetXaxis()->SetNdivisions(5); + h_effEtaPtPi->GetYaxis()->SetNdivisions(5); + h_effEtaPtPi->SetContour(99); + h_effEtaPtPi->Draw("COLZ"); + TLatex* pilabel = new TLatex(0.81, 0.75, "#pi^{#pm}"); + pilabel->SetNDC(); + pilabel->SetTextSize(40); + pilabel->SetTextFont(43); + pilabel->SetTextColor(kBlack); + pilabel->Draw("same"); + TLatex* r44fig5c = new TLatex(0.21, 0.93, "ep 10#times100 GeV #rho^{0}#rightarrow#pi^{#plus}#pi^{#minus}"); + r44fig5c->SetNDC(); + r44fig5c->SetTextSize(15); + r44fig5c->SetTextFont(43); + r44fig5c->SetTextColor(kBlack); + r44fig5c->Draw("same"); + + p5->cd(2); + TVirtualPad* p52 = p5->cd(2); + p52->SetTopMargin(0.08); + p52->SetRightMargin(0); + p52->SetLeftMargin(0); + p52->SetBottomMargin(0.2); + h_effEtaPtPip->GetXaxis()->SetRangeUser(4.05,6.05); + h_effEtaPtPip->GetYaxis()->SetRangeUser(0,1.7); + h_effEtaPtPip->GetZaxis()->SetRangeUser(0,1); + h_effEtaPtPip->GetXaxis()->SetNdivisions(5); + h_effEtaPtPip->GetYaxis()->SetNdivisions(5); + h_effEtaPtPip->SetContour(99); + h_effEtaPtPip->Draw("COLZ"); + TLatex* piplabel = new TLatex(0.81, 0.75, "#pi^{#plus}"); + piplabel->SetNDC(); + piplabel->SetTextSize(40); + piplabel->SetTextFont(43); + piplabel->SetTextColor(kBlack); + piplabel->Draw("same"); + TLatex* r44fig5a = new TLatex(0.01, 0.93, "eSTARlight 10^{-3}SetNDC(); + r44fig5a->SetTextSize(15); + r44fig5a->SetTextFont(43); + r44fig5a->SetTextColor(kBlack); + r44fig5a->Draw("same"); + + p5->cd(3); + TVirtualPad* p53 = p5->cd(3); + p53->SetTopMargin(0.08); + p53->SetRightMargin(0.2); + p53->SetLeftMargin(0); + p53->SetBottomMargin(0.2); + h_effEtaPtPim->SetTitle(";#eta;;efficiency"); + h_effEtaPtPim->GetXaxis()->SetRangeUser(4.05,6.05); + h_effEtaPtPim->GetYaxis()->SetRangeUser(0,1.7); + h_effEtaPtPim->GetZaxis()->SetRangeUser(0,1); + h_effEtaPtPim->GetXaxis()->SetNdivisions(5); + h_effEtaPtPim->GetYaxis()->SetNdivisions(5); + h_effEtaPtPim->SetContour(99); + h_effEtaPtPim->Draw("COLZ"); + TLatex* pimlabel = new TLatex(0.62, 0.75, "#pi^{#minus}"); + pimlabel->SetNDC(); + pimlabel->SetTextSize(40); + pimlabel->SetTextFont(43); + pimlabel->SetTextColor(kBlack); + pimlabel->Draw("same"); + TLatex* r43fig5 = new TLatex(0.68,0.93, "EPIC"); + r43fig5->SetNDC(); + r43fig5->SetTextSize(0.07); + r43fig5->Draw("same"); + TLatex* r44fig5b = new TLatex(0.01, 0.93, "W>2 GeV"); + r44fig5b->SetNDC(); + r44fig5b->SetTextSize(15); + r44fig5b->SetTextFont(43); + r44fig5b->SetTextColor(kBlack); + r44fig5b->Draw("same"); + + p5->cd(4); + TVirtualPad* p54 = p5->cd(4); + p54->SetTopMargin(0.05); + p54->SetRightMargin(0); + p54->SetLeftMargin(0.2); + p54->SetBottomMargin(0.21); + h_effPhiEtaPi->GetXaxis()->SetRangeUser(0,6.2); + h_effPhiEtaPi->GetYaxis()->SetRangeUser(4,6); + h_effPhiEtaPi->GetZaxis()->SetRangeUser(0,1); + h_effPhiEtaPi->GetXaxis()->SetNdivisions(8); + h_effPhiEtaPi->GetYaxis()->SetNdivisions(5); + h_effPhiEtaPi->SetContour(99); + h_effPhiEtaPi->Draw("COLZ"); + TLatex* pilabela = new TLatex(0.3, 0.82, "#pi^{#pm}"); + TLatex* pilabelb = new TLatex(0.5, 0.84, "(p_{T}>0.2 GeV/c)"); + pilabela->SetNDC(); + pilabelb->SetNDC(); + pilabela->SetTextSize(40); + pilabelb->SetTextSize(15); + pilabela->SetTextFont(43); + pilabelb->SetTextFont(43); + pilabela->SetTextColor(kWhite); + pilabelb->SetTextColor(kWhite); + pilabela->Draw("same"); + pilabelb->Draw("same"); + + p5->cd(5); + TVirtualPad* p55 = p5->cd(5); + p55->SetTopMargin(0.05); + p55->SetRightMargin(0); + p55->SetLeftMargin(0); + p55->SetBottomMargin(0.2); + h_effPhiEtaPip->GetXaxis()->SetRangeUser(0.15,6.2); + h_effPhiEtaPip->GetYaxis()->SetRangeUser(4,6); + h_effPhiEtaPip->GetZaxis()->SetRangeUser(0,1); + h_effPhiEtaPip->GetXaxis()->SetNdivisions(8); + h_effPhiEtaPip->GetYaxis()->SetNdivisions(5); + h_effPhiEtaPip->SetContour(99); + h_effPhiEtaPip->Draw("COLZ"); + TLatex* piplabela = new TLatex(0.2, 0.82, "#pi^{#plus}"); + TLatex* piplabelb = new TLatex(0.4, 0.84, "(p_{T}>0.2 GeV/c)"); + piplabela->SetNDC(); + piplabelb->SetNDC(); + piplabela->SetTextSize(40); + piplabelb->SetTextSize(15); + piplabela->SetTextFont(43); + piplabelb->SetTextFont(43); + piplabela->SetTextColor(kWhite); + piplabelb->SetTextColor(kWhite); + piplabela->Draw("same"); + piplabelb->Draw("same"); + + p5->cd(6); + TVirtualPad* p56 = p5->cd(6); + p56->SetTopMargin(0.05); + p56->SetRightMargin(0.2); + p56->SetLeftMargin(0); + p56->SetBottomMargin(0.2); + h_effPhiEtaPim->SetTitle(";#phi (rad);;efficiency"); + h_effPhiEtaPim->GetXaxis()->SetRangeUser(0.15,6.2); + h_effPhiEtaPim->GetYaxis()->SetRangeUser(4,6); + h_effPhiEtaPim->GetZaxis()->SetRangeUser(0,1); + h_effPhiEtaPim->GetXaxis()->SetNdivisions(8); + h_effPhiEtaPim->GetYaxis()->SetNdivisions(5); + h_effPhiEtaPim->SetContour(99); + h_effPhiEtaPim->Draw("COLZ"); + TLatex* pimlabela = new TLatex(0.1, 0.82, "#pi^{#minus}"); + TLatex* pimlabelb = new TLatex(0.25, 0.84, "(p_{T}>0.2 GeV/c)"); + pimlabela->SetNDC(); + pimlabelb->SetNDC(); + pimlabela->SetTextSize(40); + pimlabelb->SetTextSize(15); + pimlabela->SetTextFont(43); + pimlabelb->SetTextFont(43); + pimlabela->SetTextColor(kWhite); + pimlabelb->SetTextColor(kWhite); + pimlabela->Draw("same"); + pimlabelb->Draw("same"); + + TString figure5name = figure_directory+"/benchmark_rho_efficiencies.pdf"; + c5->Print(figure5name); + + ///////////////////// Figure 6 + TCanvas* c6 = new TCanvas("c6","c6",1,1,700,560); + TPad* p6 = new TPad("p6","Pad5",0.,0.,1.,1.); + p6->Divide(3,2,0,0); + p6->Draw(); + gStyle->SetPalette(kBlueRedYellow); + gStyle->SetOptStat(0); + + h_RecoMomPi ->GetXaxis()->SetLabelSize(h_RecoMomPi ->GetXaxis()->GetLabelSize()*1.8); + h_RecoMomPip ->GetXaxis()->SetLabelSize(h_RecoMomPip ->GetXaxis()->GetLabelSize()*1.8); + h_RecoMomPim ->GetXaxis()->SetLabelSize(h_RecoMomPim ->GetXaxis()->GetLabelSize()*1.8); + h_RecoMomPi ->GetYaxis()->SetLabelSize(h_RecoMomPi ->GetYaxis()->GetLabelSize()*1.8); + h_RecoMomPim ->GetZaxis()->SetLabelSize(h_RecoMomPim ->GetZaxis()->GetLabelSize()*1.8); + h_RecoMomPim ->GetZaxis()->SetTitleSize(h_RecoMomPim ->GetZaxis()->GetTitleSize()*1.8); + h_RecoTransMomPi ->GetXaxis()->SetLabelSize(h_RecoTransMomPi ->GetXaxis()->GetLabelSize()*1.8); + h_RecoTransMomPip->GetXaxis()->SetLabelSize(h_RecoTransMomPip->GetXaxis()->GetLabelSize()*1.8); + h_RecoTransMomPim->GetXaxis()->SetLabelSize(h_RecoTransMomPim->GetXaxis()->GetLabelSize()*1.8); + h_RecoTransMomPi ->GetYaxis()->SetLabelSize(h_RecoTransMomPi ->GetYaxis()->GetLabelSize()*1.8); + h_RecoTransMomPim->GetZaxis()->SetLabelSize(h_RecoTransMomPim->GetZaxis()->GetLabelSize()*1.8); + h_RecoTransMomPim->GetZaxis()->SetTitleSize(h_RecoTransMomPim->GetZaxis()->GetTitleSize()*1.8); + + fixedFontHist1D(h_RecoMomPi,1.,1.2); + fixedFontHist1D(h_RecoMomPip,1.,1.2); + fixedFontHist1D(h_RecoMomPim,1.,1.2); + fixedFontHist1D(h_RecoTransMomPi,1.,1.2); + fixedFontHist1D(h_RecoTransMomPip,1.,1.2); + fixedFontHist1D(h_RecoTransMomPim,1.,1.2); + + double maxz = h_RecoMomPi->GetMaximum(); + double maxzt = h_RecoTransMomPi->GetMaximum(); + + p6->cd(1); + TVirtualPad* p61 = p6->cd(1); + p61->SetLogz(); + p61->SetTopMargin(0.08); + p61->SetRightMargin(0); + p61->SetLeftMargin(0.21); + p61->SetBottomMargin(0.2); + h_RecoMomPi->GetXaxis()->SetRangeUser(0,99); + h_RecoMomPi->GetYaxis()->SetRangeUser(0,99); + h_RecoMomPi->GetZaxis()->SetRangeUser(1,maxz); + h_RecoMomPi->GetXaxis()->SetNdivisions(5); + h_RecoMomPi->GetYaxis()->SetNdivisions(5); + h_RecoMomPi->SetContour(99); + h_RecoMomPi->Draw("COLZ"); + TBox* box1 = new TBox(7,70,32,95); + box1->SetLineColor(kBlack); + box1->SetFillColor(kWhite); + box1->Draw("l same"); + TLatex* pilabelz = new TLatex(0.3, 0.75, "#pi^{#pm}"); + pilabelz->SetNDC(); + pilabelz->SetTextSize(40); + pilabelz->SetTextFont(43); + pilabelz->SetTextColor(kBlack); + pilabelz->Draw("same"); + r44fig5c->Draw("same"); + + p6->cd(2); + TVirtualPad* p62 = p6->cd(2); + p62->SetLogz(); + p62->SetTopMargin(0.08); + p62->SetRightMargin(0); + p62->SetLeftMargin(0); + p62->SetBottomMargin(0.2); + h_RecoMomPip->GetXaxis()->SetRangeUser(1,99); + h_RecoMomPip->GetYaxis()->SetRangeUser(0,99); + h_RecoMomPip->GetZaxis()->SetRangeUser(1,maxz); + h_RecoMomPip->GetXaxis()->SetNdivisions(5); + h_RecoMomPip->GetYaxis()->SetNdivisions(5); + h_RecoMomPip->SetContour(99); + h_RecoMomPip->Draw("COLZ"); + TBox* box2 = new TBox(9,70,30,95); + box2->SetLineColor(kBlack); + box2->SetFillColor(kWhite); + box2->Draw("l same"); + TLatex* piplabelz = new TLatex(0.11, 0.75, "#pi^{#plus}"); + piplabelz->SetNDC(); + piplabelz->SetTextSize(40); + piplabelz->SetTextFont(43); + piplabelz->SetTextColor(kBlack); + piplabelz->Draw("same"); + r44fig5a->Draw("same"); + + p6->cd(3); + TVirtualPad* p63 = p6->cd(3); + p63->SetLogz(); + p63->SetTopMargin(0.08); + p63->SetRightMargin(0.2); + p63->SetLeftMargin(0); + p63->SetBottomMargin(0.2); + h_RecoMomPim->SetTitle(";p (GeV/c) MC;;counts"); + h_RecoMomPim->GetXaxis()->SetRangeUser(1,99); + h_RecoMomPim->GetYaxis()->SetRangeUser(0,99); + h_RecoMomPim->GetZaxis()->SetRangeUser(1,maxz); + h_RecoMomPim->GetXaxis()->SetNdivisions(5); + h_RecoMomPim->GetYaxis()->SetNdivisions(5); + h_RecoMomPim->SetContour(99); + h_RecoMomPim->Draw("COLZ"); + TBox* box3 = new TBox(12,70,40,95); + box3->SetLineColor(kBlack); + box3->SetFillColor(kWhite); + box3->Draw("l same"); + TLatex* pimlabelz = new TLatex(0.12, 0.75, "#pi^{#minus}"); + pimlabelz->SetNDC(); + pimlabelz->SetTextSize(40); + pimlabelz->SetTextFont(43); + pimlabelz->SetTextColor(kBlack); + pimlabelz->Draw("same"); + r43fig5->Draw("same"); + r44fig5b->Draw("same"); + + p6->cd(4); + TVirtualPad* p64 = p6->cd(4); + p64->SetLogz(); + p64->SetTopMargin(0.05); + p64->SetRightMargin(0); + p64->SetLeftMargin(0.21); + p64->SetBottomMargin(0.2); + h_RecoTransMomPi->GetXaxis()->SetRangeUser(0.01,1.49); + h_RecoTransMomPi->GetYaxis()->SetRangeUser(0,1.49); + h_RecoTransMomPi->GetZaxis()->SetRangeUser(1,maxzt); + h_RecoTransMomPi->GetXaxis()->SetNdivisions(5); + h_RecoTransMomPi->GetYaxis()->SetNdivisions(5); + h_RecoTransMomPi->SetContour(99); + h_RecoTransMomPi->Draw("COLZ"); + TBox* box4 = new TBox(0.15,1.15,0.5,1.45); + box4->SetLineColor(kBlack); + box4->SetFillColor(kWhite); + box4->Draw("l same"); + TLatex* pilabelaa = new TLatex(0.3, 0.8, "#pi^{#pm}"); + pilabelaa->SetNDC(); + pilabelaa->SetTextSize(40); + pilabelaa->SetTextFont(43); + pilabelaa->SetTextColor(kBlack); + pilabelaa->Draw("same"); + + p6->cd(5); + TVirtualPad* p65 = p6->cd(5); + p65->SetLogz(); + p65->SetTopMargin(0.05); + p65->SetRightMargin(0); + p65->SetLeftMargin(0); + p65->SetBottomMargin(0.2); + h_RecoTransMomPip->GetXaxis()->SetRangeUser(0.02,1.49); + h_RecoTransMomPip->GetYaxis()->SetRangeUser(0,1.49); + h_RecoTransMomPip->GetZaxis()->SetRangeUser(1,maxzt); + h_RecoTransMomPip->GetXaxis()->SetNdivisions(5); + h_RecoTransMomPip->GetYaxis()->SetNdivisions(5); + h_RecoTransMomPip->SetContour(99); + h_RecoTransMomPip->Draw("COLZ"); + TBox* box5 = new TBox(0.1,1.15,0.4,1.45); + box5->SetLineColor(kBlack); + box5->SetFillColor(kWhite); + box5->Draw("l same"); + TLatex* piplabelaz = new TLatex(0.1, 0.8, "#pi^{#plus}"); + piplabelaz->SetNDC(); + piplabelaz->SetTextSize(40); + piplabelaz->SetTextFont(43); + piplabelaz->SetTextColor(kBlack); + piplabelaz->Draw("same"); + + p6->cd(6); + TVirtualPad* p66 = p6->cd(6); + p66->SetLogz(); + p66->SetTopMargin(0.05); + p66->SetRightMargin(0.2); + p66->SetLeftMargin(0); + p66->SetBottomMargin(0.2); + h_RecoTransMomPim->SetTitle(";p_{T} (GeV/c) MC;;counts"); + h_RecoTransMomPim->GetXaxis()->SetRangeUser(0.02,1.49); + h_RecoTransMomPim->GetYaxis()->SetRangeUser(0,1.49); + h_RecoTransMomPim->GetZaxis()->SetRangeUser(1,maxz); + h_RecoTransMomPim->GetXaxis()->SetNdivisions(5); + h_RecoTransMomPim->GetYaxis()->SetNdivisions(5); + h_RecoTransMomPim->SetContour(99); + h_RecoTransMomPim->Draw("COLZ"); + TBox* box6 = new TBox(0.13,1.15,0.5,1.45); + box6->SetLineColor(kBlack); + box6->SetFillColor(kWhite); + box6->Draw("l same"); + TLatex* pimlabelaz = new TLatex(0.1, 0.8, "#pi^{#minus}"); + pimlabelaz->SetNDC(); + pimlabelaz->SetTextSize(40); + pimlabelaz->SetTextFont(43); + pimlabelaz->SetTextColor(kBlack); + pimlabelaz->Draw("same"); + + TString figure6name = figure_directory+"/benchmark_rho_recoquality.pdf"; + c6->Print(figure6name); + } From 2781a0839afde0919716ccb82cba5daa07c19b84 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 13:37:15 -0700 Subject: [PATCH 016/173] Attempt at loading common_bench --- benchmarks/u_rho/analysis/pleaseIncludeMe.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/benchmarks/u_rho/analysis/pleaseIncludeMe.h b/benchmarks/u_rho/analysis/pleaseIncludeMe.h index eb05ba11..3779eb42 100644 --- a/benchmarks/u_rho/analysis/pleaseIncludeMe.h +++ b/benchmarks/u_rho/analysis/pleaseIncludeMe.h @@ -28,6 +28,8 @@ #include "edm4eic/ReconstructedParticleData.h" #include "edm4hep/MCParticleData.h" +#include "common_bench/benchmark.h" + #define PI 3.1415926 #define MASS_ELECTRON 0.00051 #define MASS_PROTON 0.93827 From 1cf4d1a022927e044b006e67452dd605c37de12f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 13:58:12 -0700 Subject: [PATCH 017/173] Attempt at setting benchmark status flag --- benchmarks/u_rho/analysis/uchannelrho.cxx | 36 +++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index 37cb61d7..53aecf78 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -32,6 +32,35 @@ if (gSystem->AccessPathName(rec_file.Data()) != 0) { return 0; } +void setbenchstatus(double eff){ + ///////////// Set benchmark status! + // create our test definition + // test_tag + common_bench::Test rho_reco_eff_test{ + { + {"name", "rho_reconstruction_efficiency"}, + {"title", "rho Reconstruction Efficiency for rho -> pi+pi- in the B0"}, + {"description", "u-channel rho->pi+pi- reconstruction efficiency " + "when both pions should be within B0 acceptance"}, + {"quantity", "efficiency"}, + {"target", "0.9"} + } + }; //these 2 need to be consistent + double eff_target = 0.9; //going to find a way to use the same variable + + if(eff<0 || eff>1){ + rho_reco_eff_test.error(-1); + }else if(eff > eff_target){ + rho_reco_eff_test.pass(eff); + }else{ + rho_reco_eff_test.fail(eff); + } + + + // write out our test data + common_bench::write_test(rho_reco_eff_test, fmt::format("rhorecoeff.json", output_prefix)); +} + // read our configuration auto tree = new TChain("events"); TString name_of_input = (TString) rec_file; @@ -550,8 +579,15 @@ h_u_REC_justpionsB0->Scale(1.0/u_binwidth); h_u_REC_notjustpionsB0->Scale(1.0/u_binwidth); h_u_MC->Scale(1.0/u_binwidth); +double minbineff = h_VM_mass_MC_etacut->FindBin(0.6); +double maxbineff = h_VM_mass_MC_etacut->FindBin(1.0); +double rhorecoeff = (1.0*h_VM_mass_REC_etacut->Integral(minbineff,maxbineff))/(1.0*h_VM_mass_MC_etacut->Integral(minbineff,maxbineff)); + output->Write(); output->Close(); + +setbenchstatus(rhorecoeff); + return 0; } From 77901e3ce6896cb0fb807718adb7ced9fef9f02d Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 14:00:40 -0700 Subject: [PATCH 018/173] Update json file name --- benchmarks/u_rho/analysis/uchannelrho.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index 53aecf78..b5ce71a4 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -33,7 +33,7 @@ if (gSystem->AccessPathName(rec_file.Data()) != 0) { } void setbenchstatus(double eff){ - ///////////// Set benchmark status! + ///////////// Set benchmark status! // create our test definition // test_tag common_bench::Test rho_reco_eff_test{ @@ -58,7 +58,7 @@ void setbenchstatus(double eff){ // write out our test data - common_bench::write_test(rho_reco_eff_test, fmt::format("rhorecoeff.json", output_prefix)); + common_bench::write_test(rho_reco_eff_test, "rhorecoeff.json"); } // read our configuration From 72f7c119b93e7dc5f09077679048ae7cf1432663 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 14:20:48 -0700 Subject: [PATCH 019/173] changed benchmark status function from void to int --- benchmarks/u_rho/analysis/uchannelrho.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index b5ce71a4..95327a99 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -32,7 +32,7 @@ if (gSystem->AccessPathName(rec_file.Data()) != 0) { return 0; } -void setbenchstatus(double eff){ +int setbenchstatus(double eff){ ///////////// Set benchmark status! // create our test definition // test_tag @@ -56,9 +56,9 @@ void setbenchstatus(double eff){ rho_reco_eff_test.fail(eff); } - // write out our test data common_bench::write_test(rho_reco_eff_test, "rhorecoeff.json"); + return 0; } // read our configuration From 6024dd5270fc3052a51bd67f5fe34fc9c012215f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 14:43:24 -0700 Subject: [PATCH 020/173] fixed benchmark status definition location --- benchmarks/u_rho/analysis/uchannelrho.cxx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index 95327a99..da6483cf 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -23,15 +23,6 @@ auto giveme_u(TLorentzVector pIn, TLorentzVector vmOut){ return uvalue; } - -int uchannelrho(TString rec_file="input.root", TString outputfile="output.root") -{ -if (gSystem->AccessPathName(rec_file.Data()) != 0) { - // File does not exist - cout<AccessPathName(rec_file.Data()) != 0) { + // File does not exist + cout< Date: Fri, 10 May 2024 14:54:37 -0700 Subject: [PATCH 021/173] Update RiceStyle.h to include common_bench --- benchmarks/u_rho/macros/RiceStyle.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/benchmarks/u_rho/macros/RiceStyle.h b/benchmarks/u_rho/macros/RiceStyle.h index 11e267dc..c1eec35a 100644 --- a/benchmarks/u_rho/macros/RiceStyle.h +++ b/benchmarks/u_rho/macros/RiceStyle.h @@ -35,6 +35,8 @@ #include "TMatrixD.h" #include "TArrow.h" +#include "common_bench/benchmark.h" + void RiceStyle(){ std::cout << "Welcome to Rice Heavy Ion group!! " << std::endl; @@ -681,4 +683,4 @@ void drawBoxTGraphDiff(TGraphErrors* gr1, TGraphErrors* gr2, int bins, double sy } } - \ No newline at end of file + From 1ed0eb9e6d07c883f6e4e9d3542422d8ac5b5b03 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 14:57:12 -0700 Subject: [PATCH 022/173] Moved benchmark status flag to plotting macro --- .../u_rho/macros/plot_rho_physics_benchmark.C | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 6182c238..18403da6 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -1,5 +1,35 @@ #include "RiceStyle.h" using namespace std; + +int setbenchstatus(double eff){ + ///////////// Set benchmark status! + // create our test definition + // test_tag + common_bench::Test rho_reco_eff_test{ + { + {"name", "rho_reconstruction_efficiency"}, + {"title", "rho Reconstruction Efficiency for rho -> pi+pi- in the B0"}, + {"description", "u-channel rho->pi+pi- reconstruction efficiency " + "when both pions should be within B0 acceptance"}, + {"quantity", "efficiency"}, + {"target", "0.9"} + } + }; //these 2 need to be consistent + double eff_target = 0.9; //going to find a way to use the same variable + + if(eff<0 || eff>1){ + rho_reco_eff_test.error(-1); + }else if(eff > eff_target){ + rho_reco_eff_test.pass(eff); + }else{ + rho_reco_eff_test.fail(eff); + } + + // write out our test data + common_bench::write_test(rho_reco_eff_test, "rhorecoeff.json"); + return 0; +} + void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combined.root"){ Ssiz_t dotPosition = filename.Last('.'); TString figure_directory = filename(0, dotPosition); @@ -701,5 +731,7 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin TString figure6name = figure_directory+"/benchmark_rho_recoquality.pdf"; c6->Print(figure6name); + double rhorecoeff = thiseff/100.0; + setbenchstatus(rhorecoeff); } From 2d1d432e5a40f18420a5781f559a437edb84c5ca Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 14:58:16 -0700 Subject: [PATCH 023/173] Removed status flag from analysis code --- benchmarks/u_rho/analysis/uchannelrho.cxx | 37 ----------------------- 1 file changed, 37 deletions(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index da6483cf..00cf98dd 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -23,36 +23,6 @@ auto giveme_u(TLorentzVector pIn, TLorentzVector vmOut){ return uvalue; } -int setbenchstatus(double eff){ - ///////////// Set benchmark status! - // create our test definition - // test_tag - common_bench::Test rho_reco_eff_test{ - { - {"name", "rho_reconstruction_efficiency"}, - {"title", "rho Reconstruction Efficiency for rho -> pi+pi- in the B0"}, - {"description", "u-channel rho->pi+pi- reconstruction efficiency " - "when both pions should be within B0 acceptance"}, - {"quantity", "efficiency"}, - {"target", "0.9"} - } - }; //these 2 need to be consistent - double eff_target = 0.9; //going to find a way to use the same variable - - if(eff<0 || eff>1){ - rho_reco_eff_test.error(-1); - }else if(eff > eff_target){ - rho_reco_eff_test.pass(eff); - }else{ - rho_reco_eff_test.fail(eff); - } - - // write out our test data - common_bench::write_test(rho_reco_eff_test, "rhorecoeff.json"); - return 0; -} - - int uchannelrho(TString rec_file="input.root", TString outputfile="output.root") { if (gSystem->AccessPathName(rec_file.Data()) != 0) { @@ -579,15 +549,8 @@ h_u_REC_justpionsB0->Scale(1.0/u_binwidth); h_u_REC_notjustpionsB0->Scale(1.0/u_binwidth); h_u_MC->Scale(1.0/u_binwidth); -double minbineff = h_VM_mass_MC_etacut->FindBin(0.6); -double maxbineff = h_VM_mass_MC_etacut->FindBin(1.0); -double rhorecoeff = (1.0*h_VM_mass_REC_etacut->Integral(minbineff,maxbineff))/(1.0*h_VM_mass_MC_etacut->Integral(minbineff,maxbineff)); - output->Write(); output->Close(); - -setbenchstatus(rhorecoeff); - return 0; } From dcbb867c00fd29c2c9966949a919320d7d1f79e9 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 14:58:55 -0700 Subject: [PATCH 024/173] Removed unnecessary dependency from pleaseIncludeMe.h --- benchmarks/u_rho/analysis/pleaseIncludeMe.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/benchmarks/u_rho/analysis/pleaseIncludeMe.h b/benchmarks/u_rho/analysis/pleaseIncludeMe.h index 3779eb42..eb05ba11 100644 --- a/benchmarks/u_rho/analysis/pleaseIncludeMe.h +++ b/benchmarks/u_rho/analysis/pleaseIncludeMe.h @@ -28,8 +28,6 @@ #include "edm4eic/ReconstructedParticleData.h" #include "edm4hep/MCParticleData.h" -#include "common_bench/benchmark.h" - #define PI 3.1415926 #define MASS_ELECTRON 0.00051 #define MASS_PROTON 0.93827 From 593e7366570e5d4c3e5680aae3768c9512cb8526 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 17:13:51 -0700 Subject: [PATCH 025/173] Added pdf explaining various benchmark plots --- benchmarks/u_rho/BenchmarkPlotsExplained.pdf | Bin 0 -> 112779 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 benchmarks/u_rho/BenchmarkPlotsExplained.pdf diff --git a/benchmarks/u_rho/BenchmarkPlotsExplained.pdf b/benchmarks/u_rho/BenchmarkPlotsExplained.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bdae335b38c19b9f0221c12618b5aa9754d1c8ae GIT binary patch literal 112779 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

Riz0%~d07+$I4F328M&R#rEW=( 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 literal 0 HcmV?d00001 From fceba974f8b78c0f721cb334378fdee7a9073fa1 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 17:15:01 -0700 Subject: [PATCH 026/173] Copy to plot explainer to artifacts --- benchmarks/u_rho/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index f607b36f..1afe8930 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -22,6 +22,7 @@ u_channel_rho:generate: - echo "Finished, copying over figures now" - mkdir results - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/ + - cp BenchmarkPlotsExplained.pdf results/ - echo "Finished copying!" u_channel_rho:simulate: From 42525a64159b3796373bbaa96ca495b59c1ae37b Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 10 May 2024 17:30:16 -0700 Subject: [PATCH 027/173] removed plot explainer from artifacts --- benchmarks/u_rho/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 1afe8930..f607b36f 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -22,7 +22,6 @@ u_channel_rho:generate: - echo "Finished, copying over figures now" - mkdir results - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/ - - cp BenchmarkPlotsExplained.pdf results/ - echo "Finished copying!" u_channel_rho:simulate: From a6029948e6f7f12f5ad8c5d2e92a05ed138b5403 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 11:51:51 -0700 Subject: [PATCH 028/173] Test reading produced json file --- benchmarks/u_rho/Snakefile | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 7fe5092f..44d34987 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -76,6 +76,7 @@ else echo "{input.plots}_figures directory already exists." fi root -l -b -q '{input.script}("{input.plots}")' +cat *.json #cp {input.plots}_figures/*.pdf figures/ """ From e9c1e49e6193472fe327e968eb85c82eed4eaab3 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 13:00:26 -0700 Subject: [PATCH 029/173] Testing benchmark failure status --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 18403da6..db55990f 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -732,6 +732,7 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin c6->Print(figure6name); double rhorecoeff = thiseff/100.0; + rhorecoeff = rhorecoeff/5.0;//Test benchmark status failure setbenchstatus(rhorecoeff); } From d77a9dc536ee35cd52bdd6173f3ea01733b8db46 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 13:08:04 -0700 Subject: [PATCH 030/173] Update plot_rho_physics_benchmark.C Second attempt at failure status --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index db55990f..16c35cd8 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -731,8 +731,7 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin TString figure6name = figure_directory+"/benchmark_rho_recoquality.pdf"; c6->Print(figure6name); - double rhorecoeff = thiseff/100.0; - rhorecoeff = rhorecoeff/5.0;//Test benchmark status failure + double rhorecoeff = thiseff/500.0; setbenchstatus(rhorecoeff); } From 71106b85d0ce50ec581b42b25954352fc0e26c23 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 15:29:14 -0700 Subject: [PATCH 031/173] Copying json file to results directory --- benchmarks/u_rho/Snakefile | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 44d34987..1035d9dd 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -77,6 +77,7 @@ else fi root -l -b -q '{input.script}("{input.plots}")' cat *.json +cp *.json results/ #cp {input.plots}_figures/*.pdf figures/ """ From 723d96fcca4ff41c500f6e7c9b8b38706c28ba94 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 15:31:00 -0700 Subject: [PATCH 032/173] Update .gitlab-ci.yml to include u_rho --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 04722cd7..55f4c5e0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -129,6 +129,7 @@ summary: - "dvcs:results" - "tcs:results" - "u_omega:results" + - "u_rho:results" - "single:results" - "backgrounds:results" script: From 2e2bb101c6ffc23d1354fcaf9a8ee8ce1d0fe80f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 15:35:15 -0700 Subject: [PATCH 033/173] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 55f4c5e0..3e627ea8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -128,8 +128,8 @@ summary: - "dis:results" - "dvcs:results" - "tcs:results" - - "u_omega:results" - "u_rho:results" + - "u_omega:results" - "single:results" - "backgrounds:results" script: From 3151f34787da270b1d6a70135fd52d1e544e07b8 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 15:37:37 -0700 Subject: [PATCH 034/173] Update .gitlab-ci.yml --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3e627ea8..04722cd7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -128,7 +128,6 @@ summary: - "dis:results" - "dvcs:results" - "tcs:results" - - "u_rho:results" - "u_omega:results" - "single:results" - "backgrounds:results" From 25ca1163d0151ad0e98c572456668c550b5c62db Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 15:46:56 -0700 Subject: [PATCH 035/173] Update results collection in u_rho --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index f607b36f..675e31bc 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -40,4 +40,4 @@ u_channel_rho:results: stage: collect needs: ["u_channel_rho:simulate"] script: - - echo "The results rule does in config.yml does nothing for now" + - collect_tests.py u_rho From 709d1cc95afebcb17bfe19f8d40196c403aa7440 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 16:16:48 -0700 Subject: [PATCH 036/173] Update snakefile json results --- benchmarks/u_rho/Snakefile | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 1035d9dd..44d34987 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -77,7 +77,6 @@ else fi root -l -b -q '{input.script}("{input.plots}")' cat *.json -cp *.json results/ #cp {input.plots}_figures/*.pdf figures/ """ From e279ac4e6801b14768538fbdc956e220870f6edf Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 16:17:53 -0700 Subject: [PATCH 037/173] Test copying json from config.yml --- benchmarks/u_rho/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 675e31bc..097cf4dc 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -22,6 +22,7 @@ u_channel_rho:generate: - echo "Finished, copying over figures now" - mkdir results - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/ + - cp *.json results/ - echo "Finished copying!" u_channel_rho:simulate: From b2ac92b977d8045c3b07b27afbf9046f712f07b6 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 16:44:16 -0700 Subject: [PATCH 038/173] Update json filename --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 16c35cd8..2e35ead6 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -26,7 +26,7 @@ int setbenchstatus(double eff){ } // write out our test data - common_bench::write_test(rho_reco_eff_test, "rhorecoeff.json"); + common_bench::write_test(rho_reco_eff_test, "benchmark.json"); return 0; } From 9b00d4f1502212ac566ab186abdbd2a1452e679f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 17:07:32 -0700 Subject: [PATCH 039/173] Update .gitlab-ci.yml with u_rho results --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 04722cd7..00544730 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -129,6 +129,7 @@ summary: - "dvcs:results" - "tcs:results" - "u_omega:results" + - "u_channel_rho:results" - "single:results" - "backgrounds:results" script: From 7f95f8a89bf45f899f0fc7f418ddaeb57e228870 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 17:15:12 -0700 Subject: [PATCH 040/173] remove results task in config.yml --- benchmarks/u_rho/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 097cf4dc..5b54927b 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -41,4 +41,5 @@ u_channel_rho:results: stage: collect needs: ["u_channel_rho:simulate"] script: - - collect_tests.py u_rho + #- collect_tests.py u_rho + - echo "The results task in config.yml does nothing for now" From 03059ffb419a58c0b44e86db9f46f5e99401af8f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 20:53:43 -0700 Subject: [PATCH 041/173] Create benchmark.json --- benchmarks/u_rho/benchmark.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 benchmarks/u_rho/benchmark.json diff --git a/benchmarks/u_rho/benchmark.json b/benchmarks/u_rho/benchmark.json new file mode 100644 index 00000000..7cad552c --- /dev/null +++ b/benchmarks/u_rho/benchmark.json @@ -0,0 +1,6 @@ +{ + "name": "u-Channel Rho", + "title": "u-Channel Rho Benchmarks", + "description": "Benchmark for u-channel rho production", + "target": "0.9" +} From 5dc6979fd91f154734a4d872ed8b71d06ca0772b Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 20:57:41 -0700 Subject: [PATCH 042/173] Update json file name --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 2e35ead6..6e784c54 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -26,7 +26,7 @@ int setbenchstatus(double eff){ } // write out our test data - common_bench::write_test(rho_reco_eff_test, "benchmark.json"); + common_bench::write_test(rho_reco_eff_test, "u_rho_eff.json"); return 0; } From e087009c45968eadaa12c79a759e71918b1d53ce Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 12 May 2024 21:27:11 -0700 Subject: [PATCH 043/173] Update config.yml to have active results rule --- benchmarks/u_rho/config.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 5b54927b..d393ef57 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -22,7 +22,7 @@ u_channel_rho:generate: - echo "Finished, copying over figures now" - mkdir results - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/ - - cp *.json results/ + - cp u_rho_eff.json results/ - echo "Finished copying!" u_channel_rho:simulate: @@ -41,5 +41,4 @@ u_channel_rho:results: stage: collect needs: ["u_channel_rho:simulate"] script: - #- collect_tests.py u_rho - - echo "The results task in config.yml does nothing for now" + - collect_tests.py u_rho From dbc0b46583f67b1f19ffdaf52a051837e4a626ce Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 14 May 2024 21:00:55 -0700 Subject: [PATCH 044/173] Update config.yml test --- benchmarks/u_rho/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index d393ef57..03f80bcb 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -42,3 +42,4 @@ u_channel_rho:results: needs: ["u_channel_rho:simulate"] script: - collect_tests.py u_rho + - echo "Finished collecting!" From 30d586037184c13752bd3bd02d8de2e9e0cb660f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 14 May 2024 21:04:46 -0700 Subject: [PATCH 045/173] Test commenting out diffractive_vm bench --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 00544730..d8ebd5c1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -111,7 +111,7 @@ common:detector: - runner_system_failure include: - - local: 'benchmarks/diffractive_vm/config.yml' + #- local: 'benchmarks/diffractive_vm/config.yml' - local: 'benchmarks/dis/config.yml' #- local: 'benchmarks/dvmp/config.yml' - local: 'benchmarks/dvcs/config.yml' @@ -124,7 +124,7 @@ include: summary: stage: finish needs: - - "diffractive_vm:results" + #- "diffractive_vm:results" - "dis:results" - "dvcs:results" - "tcs:results" From 8f308254e0ddcc43830e9afa57b962cbb63e150e Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Wed, 15 May 2024 13:17:27 -0700 Subject: [PATCH 046/173] Dont copy json to results --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 03f80bcb..3cdedc8d 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -22,7 +22,7 @@ u_channel_rho:generate: - echo "Finished, copying over figures now" - mkdir results - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/ - - cp u_rho_eff.json results/ + #- cp u_rho_eff.json results/ - echo "Finished copying!" u_channel_rho:simulate: From 9be9a1b721cf18963758b073684f84b5cbc76563 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Wed, 15 May 2024 15:11:15 -0700 Subject: [PATCH 047/173] Move json to benchmark_outputs --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 6e784c54..2c5dffb2 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -26,7 +26,7 @@ int setbenchstatus(double eff){ } // write out our test data - common_bench::write_test(rho_reco_eff_test, "u_rho_eff.json"); + common_bench::write_test(rho_reco_eff_test, "./benchmark_output/u_rho_eff.json"); return 0; } From 84d3dc3f42e6e0e39aac63c63dbd1f86666967b0 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Wed, 15 May 2024 15:39:52 -0700 Subject: [PATCH 048/173] Update snakefile for json path --- benchmarks/u_rho/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 44d34987..3b80456d 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -76,7 +76,7 @@ else echo "{input.plots}_figures directory already exists." fi root -l -b -q '{input.script}("{input.plots}")' -cat *.json +cat benchmark_output/*.json #cp {input.plots}_figures/*.pdf figures/ """ From 0e8988a8c6f4a41e674f8416869da7fde1e09818 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Wed, 15 May 2024 23:05:02 -0700 Subject: [PATCH 049/173] Update results path --- benchmarks/u_rho/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 3cdedc8d..6516f389 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -21,7 +21,8 @@ u_channel_rho:generate: - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - echo "Finished, copying over figures now" - mkdir results - - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/ + - mkdir results/u_rho + - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ #- cp u_rho_eff.json results/ - echo "Finished copying!" From be8ad9afbb7969d188a33a79c72eb1dea6d81d2e Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Wed, 15 May 2024 23:07:08 -0700 Subject: [PATCH 050/173] Move json file to results/u_rho --- benchmarks/u_rho/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 6516f389..c0e6352d 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -23,6 +23,7 @@ u_channel_rho:generate: - mkdir results - mkdir results/u_rho - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - cp benchmark_output/u_rho_eff.json results/u_rho/ #- cp u_rho_eff.json results/ - echo "Finished copying!" From 012621223868a62b9849d87b4f18f7f7c2428c91 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 11:24:01 -0700 Subject: [PATCH 051/173] Update pipeline stages --- benchmarks/u_rho/config.yml | 48 ++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index c0e6352d..0d5bfcb9 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -4,28 +4,15 @@ u_channel_rho:compile: script: - snakemake --cores 1 uchannelrho_compile -#u_channel_rho:sim: -# extends: .phy_benchmark -# stage: simulate -# script: -# - echo "I will be simulating u-channel rho events here!" -# - echo $LOCAL_DATA_PATH/u_channel_rho - u_channel_rho:generate: extends: .phy_benchmark stage: generate needs: - ["u_channel_rho:compile"] script: - - echo "I will be analyzing events here!" - - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - echo "Finished, copying over figures now" - - mkdir results - - mkdir results/u_rho - - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - - cp benchmark_output/u_rho_eff.json results/u_rho/ - #- cp u_rho_eff.json results/ - - echo "Finished copying!" + - echo "Gathering events here!" + - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots.root + - echo "Finished, gathering events" u_channel_rho:simulate: stage: simulate @@ -39,9 +26,36 @@ u_channel_rho:simulate: when: - runner_system_failure +u_channel_rho:reconstruct: + stage: reconstruct + extends: .phy_benchmark + needs: ["u_channel_rho:simulate"] + timeout: 96 hour + script: + - echo "The reconstruct task in config.yml does nothing for now" + retry: + max: 2 + when: + - runner_system_failure + +u_channel_rho:analyze: + extends: .phy_benchmark + stage: analyze + needs: + - ["u_channel_rho:reconstruct"] + script: + - echo "I will be analyzing events here!" + - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - echo "Finished, copying over figures now" + - mkdir results + - mkdir results/u_rho + - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - cp benchmark_output/u_rho_eff.json results/u_rho/ + - echo "Finished copying!" + u_channel_rho:results: stage: collect - needs: ["u_channel_rho:simulate"] + needs: ["u_channel_rho:analyze"] script: - collect_tests.py u_rho - echo "Finished collecting!" From 12780d45b48b4cb7401de34c3f1f75c5641694ea Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 11:26:39 -0700 Subject: [PATCH 052/173] Trigger pipeline again --- benchmarks/u_rho/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 0d5bfcb9..d1c954e8 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -1,3 +1,4 @@ + u_channel_rho:compile: stage: compile extends: .compile_benchmark From 552c7cb8301b26bfdaa28901d8518ee26cf597a9 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 12:31:35 -0700 Subject: [PATCH 053/173] Trigger pipelines --- benchmarks/u_rho/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index d1c954e8..0d5bfcb9 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -1,4 +1,3 @@ - u_channel_rho:compile: stage: compile extends: .compile_benchmark From 7122355d027d805070ed518de5760423b6e10497 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:02:53 -0700 Subject: [PATCH 054/173] Create setup.config --- benchmarks/u_rho/setup.config | 1 + 1 file changed, 1 insertion(+) create mode 100644 benchmarks/u_rho/setup.config diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config new file mode 100644 index 00000000..dc21f31c --- /dev/null +++ b/benchmarks/u_rho/setup.config @@ -0,0 +1 @@ +USE_SIMULATION_CAMPAIGN=true From e4b74c86d9673ac4111c3ff697523891829e344b Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:08:13 -0700 Subject: [PATCH 055/173] Update pipelines with setup.config --- benchmarks/u_rho/config.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 0d5bfcb9..c818b9eb 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -11,7 +11,13 @@ u_channel_rho:generate: - ["u_channel_rho:compile"] script: - echo "Gathering events here!" - - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots.root + - config_file=./setup.config + - source $config_file + - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then + - echo "Using simulation campaign so skipping this step!" + - else + - echo "Not using simulation campaign but still skipping this step!" + - fi - echo "Finished, gathering events" u_channel_rho:simulate: @@ -32,7 +38,7 @@ u_channel_rho:reconstruct: needs: ["u_channel_rho:simulate"] timeout: 96 hour script: - - echo "The reconstruct task in config.yml does nothing for now" + - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots.root retry: max: 2 when: From bceed8748cddeeaf10d1dcb4bbdde4d2549768fa Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:17:39 -0700 Subject: [PATCH 056/173] Update setup.config path --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index c818b9eb..8402ba39 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -11,7 +11,7 @@ u_channel_rho:generate: - ["u_channel_rho:compile"] script: - echo "Gathering events here!" - - config_file=./setup.config + - config_file=benchmarks/u_rho/setup.config - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" From d0a27895b58d71d6e65b18d07b9ca4edd1a01d42 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:19:29 -0700 Subject: [PATCH 057/173] While testing dont simulate all benchmarks --- .gitlab-ci.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d8ebd5c1..fbedbf8d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -114,24 +114,24 @@ include: #- local: 'benchmarks/diffractive_vm/config.yml' - local: 'benchmarks/dis/config.yml' #- local: 'benchmarks/dvmp/config.yml' - - local: 'benchmarks/dvcs/config.yml' - - local: 'benchmarks/tcs/config.yml' - - local: 'benchmarks/u_omega/config.yml' + #- local: 'benchmarks/dvcs/config.yml' + #- local: 'benchmarks/tcs/config.yml' + #- local: 'benchmarks/u_omega/config.yml' - local: 'benchmarks/u_rho/config.yml' - local: 'benchmarks/single/config.yml' - - local: 'benchmarks/backgrounds/config.yml' + #- local: 'benchmarks/backgrounds/config.yml' summary: stage: finish needs: #- "diffractive_vm:results" - "dis:results" - - "dvcs:results" - - "tcs:results" - - "u_omega:results" + #- "dvcs:results" + #- "tcs:results" + #- "u_omega:results" - "u_channel_rho:results" - "single:results" - - "backgrounds:results" + #- "backgrounds:results" script: - collect_benchmarks.py - find results -print | sort | tee summary.txt From a6f152bd0ed53b686409d6277b33e1ea0e1d576f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:26:47 -0700 Subject: [PATCH 058/173] Update config.yml steps --- benchmarks/u_rho/config.yml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 8402ba39..97b92810 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -18,7 +18,7 @@ u_channel_rho:generate: - else - echo "Not using simulation campaign but still skipping this step!" - fi - - echo "Finished, gathering events" + - echo "Finished gathering events" u_channel_rho:simulate: stage: simulate @@ -26,7 +26,15 @@ u_channel_rho:simulate: needs: ["u_channel_rho:generate"] timeout: 96 hour script: - - echo "The simulate task in config.yml does nothing for now" + - echo "Simulating detector response here!" + - config_file=benchmarks/u_rho/setup.config + - source $config_file + - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then + - echo "Using simulation campaign so skipping this step!" + - else + - echo "Not using simulation campaign but still skipping this step!" + - fi + - echo "Finished simulating detector response" retry: max: 2 when: @@ -38,7 +46,16 @@ u_channel_rho:reconstruct: needs: ["u_channel_rho:simulate"] timeout: 96 hour script: - - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots.root + - echo "Performing reconstruction here!" + - config_file=benchmarks/u_rho/setup.config + - source $config_file + - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then + - echo "Using simulation campaign so grabbing files from S3" + - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots.root + - else + - echo "Not using simulation campaign!" + - fi + - echo "Finished reconstruction" retry: max: 2 when: From e83c35551b973df8aacf5c204fd632e8dd79e4a7 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:35:22 -0700 Subject: [PATCH 059/173] Update config.yml test --- benchmarks/u_rho/config.yml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 97b92810..37024018 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -50,8 +50,7 @@ u_channel_rho:reconstruct: - config_file=benchmarks/u_rho/setup.config - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - - echo "Using simulation campaign so grabbing files from S3" - - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots.root + - echo "Using simulation campaign so skipping this step!" - else - echo "Not using simulation campaign!" - fi @@ -68,11 +67,20 @@ u_channel_rho:analyze: - ["u_channel_rho:reconstruct"] script: - echo "I will be analyzing events here!" - - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - echo "Finished, copying over figures now" - mkdir results - mkdir results/u_rho - - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - config_file=benchmarks/u_rho/setup.config + - source $config_file + - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then + - echo "Using simulation campaign!" + - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - else + - echo "Not using simulation campaign!" + - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - fi + - echo "Finished, copying over json now" - cp benchmark_output/u_rho_eff.json results/u_rho/ - echo "Finished copying!" From 6f4b747f6cd9382b0f9ace5e803d18977c4b4de8 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:43:32 -0700 Subject: [PATCH 060/173] Update Snakefile to get evgen files --- benchmarks/u_rho/Snakefile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 3b80456d..6d1fe417 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -26,6 +26,17 @@ echo "Getting file for INDEX {wildcards.INDEX}" ln {input} {output} """ +rule uchannelrho_campaign_raw_get: + input: + lambda wildcards: S3.remote(f"eictest/EPIC/EVGEN/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root"), + output: + "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", + shell: + """ +echo "Getting file for INDEX {wildcards.INDEX}" +ln {input} {output} +""" + rule uchannelrho_analysis: input: From 66ae24b0298f13a7a596e694b3a5ca46fd0c02f1 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:46:35 -0700 Subject: [PATCH 061/173] Test grabbing evgen files from S3 --- benchmarks/u_rho/config.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 37024018..9d673f4f 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -16,7 +16,9 @@ u_channel_rho:generate: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else - - echo "Not using simulation campaign but still skipping this step!" + - echo "Not using simulation campaign so grab raw events from S3!" + - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + - ls benchmarks/u_rho/benchmark_output/* - fi - echo "Finished gathering events" From 37b2b0507d6b25aaf62934ed65300932c1017468 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:50:21 -0700 Subject: [PATCH 062/173] Test not using simulation campaign --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index dc21f31c..962817a8 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1 +1 @@ -USE_SIMULATION_CAMPAIGN=true +USE_SIMULATION_CAMPAIGN=false From f78c710bc66288fdbb3063b32284ab07b740e382 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 14:56:24 -0700 Subject: [PATCH 063/173] Fix Snakefile get evgen --- benchmarks/u_rho/Snakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 6d1fe417..dcf76593 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -28,12 +28,12 @@ ln {input} {output} rule uchannelrho_campaign_raw_get: input: - lambda wildcards: S3.remote(f"eictest/EPIC/EVGEN/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root"), + S3.remote(f"eictest/EPIC/EVGEN/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root"), output: "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", shell: """ -echo "Getting file for INDEX {wildcards.INDEX}" +echo "Getting afterburned event-generator file" ln {input} {output} """ From 16ba69e83a24c67984870d8dac8563e3b0a2a70c Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 15:01:59 -0700 Subject: [PATCH 064/173] Fix Snakefile again --- benchmarks/u_rho/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index dcf76593..6e5eb107 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -28,7 +28,7 @@ ln {input} {output} rule uchannelrho_campaign_raw_get: input: - S3.remote(f"eictest/EPIC/EVGEN/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root"), + S3.remote(f"eictest/EPIC/EVGEN/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root"), output: "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", shell: From 33949e9d9143191165bdf6ffd81a013b5d89a0b1 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 16:10:06 -0700 Subject: [PATCH 065/173] Update Snakefile check --- benchmarks/u_rho/Snakefile | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 6e5eb107..9cc29f15 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -24,6 +24,7 @@ rule uchannelrho_campaign_reco_get: """ echo "Getting file for INDEX {wildcards.INDEX}" ln {input} {output} +ls benchmark_output/ """ rule uchannelrho_campaign_raw_get: From 9bdc0faee416918f1f34e3d02694fb71a13a6a03 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 16:29:00 -0700 Subject: [PATCH 066/173] Fix snakefile check --- benchmarks/u_rho/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 9cc29f15..c32e02e2 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -24,7 +24,6 @@ rule uchannelrho_campaign_reco_get: """ echo "Getting file for INDEX {wildcards.INDEX}" ln {input} {output} -ls benchmark_output/ """ rule uchannelrho_campaign_raw_get: @@ -36,6 +35,7 @@ rule uchannelrho_campaign_raw_get: """ echo "Getting afterburned event-generator file" ln {input} {output} +ls benchmark_output/ """ From 47439f9859f481714c27a4431ab2f223193a9323 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 16:39:10 -0700 Subject: [PATCH 067/173] Test detector simulation response --- benchmarks/u_rho/config.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 9d673f4f..1ef20bd5 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -34,7 +34,15 @@ u_channel_rho:simulate: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else - - echo "Not using simulation campaign but still skipping this step!" + - echo "Running Geant4" + - ddsim --runType batch \ + - --part.minimalKineticEnergy 1000*GeV \ + - --filter.tracker edep0 \ + - -v WARNING \ + - --numberOfEvents 5 \ + - --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ + - --inputFiles benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root \ + - --outputFile benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root - fi - echo "Finished simulating detector response" retry: From 511fa0343c4ad95fa9a46faf75deedbf0b8737f4 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 16 May 2024 17:18:31 -0700 Subject: [PATCH 068/173] ddsim attempt 2 --- benchmarks/u_rho/config.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 1ef20bd5..32ace7e2 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -35,14 +35,7 @@ u_channel_rho:simulate: - echo "Using simulation campaign so skipping this step!" - else - echo "Running Geant4" - - ddsim --runType batch \ - - --part.minimalKineticEnergy 1000*GeV \ - - --filter.tracker edep0 \ - - -v WARNING \ - - --numberOfEvents 5 \ - - --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ - - --inputFiles benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root \ - - --outputFile benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root + - ddsim --runType batch --part.minimalKineticEnergy 1000*GeV --filter.tracker edep0 -v WARNING --numberOfEvents 5 --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml --inputFiles benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root --outputFile benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root - fi - echo "Finished simulating detector response" retry: From 78cfaca4cdb788e87006cec2557e72d5940df1ad Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 11:06:20 -0700 Subject: [PATCH 069/173] Create simulate.sh --- benchmarks/u_rho/simulate.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 benchmarks/u_rho/simulate.sh diff --git a/benchmarks/u_rho/simulate.sh b/benchmarks/u_rho/simulate.sh new file mode 100644 index 00000000..9065bf00 --- /dev/null +++ b/benchmarks/u_rho/simulate.sh @@ -0,0 +1,21 @@ +#!/bin/bash +source strict-mode.sh + +source benchmarks/u_rho/setup.config + + +# Simulate +/usr/bin/time -v \ +ddsim --runType run \ + --printLevel WARNING \ + --enableGun \ + --steeringFile ${JUGGLER_GEN_FILE} \ + --numberOfEvents ${JUGGLER_N_EVENTS} \ + --part.minimalKineticEnergy 1*TeV \ + --filter.tracker edep0 \ + --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ + --outputFile ${JUGGLER_SIM_FILE} +if [[ "$?" -ne "0" ]] ; then + echo "ERROR running ddsim" + exit 1 +fi From f46baff484ce664b111e4be5c154596d348d3b9a Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 11:08:45 -0700 Subject: [PATCH 070/173] Update config.yml with simulate.sh --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 32ace7e2..f083d0a8 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -35,7 +35,7 @@ u_channel_rho:simulate: - echo "Using simulation campaign so skipping this step!" - else - echo "Running Geant4" - - ddsim --runType batch --part.minimalKineticEnergy 1000*GeV --filter.tracker edep0 -v WARNING --numberOfEvents 5 --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml --inputFiles benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root --outputFile benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root + - bash benchmarks/u_rho/simulate.sh - fi - echo "Finished simulating detector response" retry: From f6f2d810e40829c510e46c6baa8595a4e9f96332 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 11:14:51 -0700 Subject: [PATCH 071/173] Update setup.config --- benchmarks/u_rho/setup.config | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 962817a8..8a9b6f3f 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1 +1,11 @@ +#!/bin/bash +source strict-mode.sh + USE_SIMULATION_CAMPAIGN=false + +if [[ ! -n "${JUGGLER_N_EVENTS}" ]] ; then + export JUGGLER_N_EVENTS=5 +fi + +export JUGGLER_IN_FILE="benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root" +export JUGGLER_OUT_FILE="benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root" From 3369486b09030eb15a60ea6b655c441377aa9ea4 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 11:17:54 -0700 Subject: [PATCH 072/173] Fix simulate.sh --- benchmarks/u_rho/simulate.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/benchmarks/u_rho/simulate.sh b/benchmarks/u_rho/simulate.sh index 9065bf00..ae162ab8 100644 --- a/benchmarks/u_rho/simulate.sh +++ b/benchmarks/u_rho/simulate.sh @@ -8,13 +8,12 @@ source benchmarks/u_rho/setup.config /usr/bin/time -v \ ddsim --runType run \ --printLevel WARNING \ - --enableGun \ - --steeringFile ${JUGGLER_GEN_FILE} \ --numberOfEvents ${JUGGLER_N_EVENTS} \ --part.minimalKineticEnergy 1*TeV \ --filter.tracker edep0 \ --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ - --outputFile ${JUGGLER_SIM_FILE} + --inputFile ${JUGGLER_IN_FILE} \ + --outputFile ${JUGGLER_OUT_FILE} if [[ "$?" -ne "0" ]] ; then echo "ERROR running ddsim" exit 1 From 7a973b19c93ea015e7ef9147837db243cf3c4a53 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 11:57:57 -0700 Subject: [PATCH 073/173] Update simulate.sh --- benchmarks/u_rho/simulate.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/benchmarks/u_rho/simulate.sh b/benchmarks/u_rho/simulate.sh index ae162ab8..1d25ab87 100644 --- a/benchmarks/u_rho/simulate.sh +++ b/benchmarks/u_rho/simulate.sh @@ -1,8 +1,11 @@ #!/bin/bash source strict-mode.sh -source benchmarks/u_rho/setup.config +source benchmarks/u_rho/setup.config $* +if [ -f ${JUGGLER_IN_FILE} ]; then + echo "Input simulation file does ${JUGGLER_IN_FILE} not exist." +fi # Simulate /usr/bin/time -v \ From 0af915f2f344759a0d2603ddb122d6bbe6556aa1 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 12:30:19 -0700 Subject: [PATCH 074/173] Update simulate.sh --inputFiles --- benchmarks/u_rho/simulate.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/benchmarks/u_rho/simulate.sh b/benchmarks/u_rho/simulate.sh index 1d25ab87..a8c64152 100644 --- a/benchmarks/u_rho/simulate.sh +++ b/benchmarks/u_rho/simulate.sh @@ -4,18 +4,20 @@ source strict-mode.sh source benchmarks/u_rho/setup.config $* if [ -f ${JUGGLER_IN_FILE} ]; then - echo "Input simulation file does ${JUGGLER_IN_FILE} not exist." + echo "ERROR: Input simulation file does ${JUGGLER_IN_FILE} not exist." +else + echo "GOOD: Input simulation file ${JUGGLER_IN_FILE} exists!" fi # Simulate /usr/bin/time -v \ -ddsim --runType run \ - --printLevel WARNING \ +ddsim --runType batch \ + -v WARNING \ --numberOfEvents ${JUGGLER_N_EVENTS} \ - --part.minimalKineticEnergy 1*TeV \ + --part.minimalKineticEnergy 100*GeV \ --filter.tracker edep0 \ --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ - --inputFile ${JUGGLER_IN_FILE} \ + --inputFiles ${JUGGLER_IN_FILE} \ --outputFile ${JUGGLER_OUT_FILE} if [[ "$?" -ne "0" ]] ; then echo "ERROR running ddsim" From fed7c8a168f6dea14331210302f2edc566df3e81 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 12:36:16 -0700 Subject: [PATCH 075/173] Update simulate.sh --- benchmarks/u_rho/simulate.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/u_rho/simulate.sh b/benchmarks/u_rho/simulate.sh index a8c64152..e006c5ea 100644 --- a/benchmarks/u_rho/simulate.sh +++ b/benchmarks/u_rho/simulate.sh @@ -10,7 +10,6 @@ else fi # Simulate -/usr/bin/time -v \ ddsim --runType batch \ -v WARNING \ --numberOfEvents ${JUGGLER_N_EVENTS} \ From 28f548ddaf5c499e27edcf5328c708547d53d182 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 12:57:42 -0700 Subject: [PATCH 076/173] Update config.yml to require common:detector --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index f083d0a8..fe985178 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -25,8 +25,8 @@ u_channel_rho:generate: u_channel_rho:simulate: stage: simulate extends: .phy_benchmark - needs: ["u_channel_rho:generate"] - timeout: 96 hour + needs: ["common:detector"] + timeout: 10 hour script: - echo "Simulating detector response here!" - config_file=benchmarks/u_rho/setup.config From ae4318ebd073d984b880a0fe98482d335bfd8bf1 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 13:50:36 -0700 Subject: [PATCH 077/173] Test update config.yml --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index fe985178..16f06343 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -25,7 +25,7 @@ u_channel_rho:generate: u_channel_rho:simulate: stage: simulate extends: .phy_benchmark - needs: ["common:detector"] + needs: ["common:detector", "u_channel_rho:generate"] timeout: 10 hour script: - echo "Simulating detector response here!" From 8a8bcfd5bd2faec1ca4461d9e74e9f036b2c67e6 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 14:12:12 -0700 Subject: [PATCH 078/173] Test update config.yml again --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 16f06343..42e75262 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -17,8 +17,7 @@ u_channel_rho:generate: - echo "Using simulation campaign so skipping this step!" - else - echo "Not using simulation campaign so grab raw events from S3!" - - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - - ls benchmarks/u_rho/benchmark_output/* + #- snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - fi - echo "Finished gathering events" @@ -34,6 +33,7 @@ u_channel_rho:simulate: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else + - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - echo "Running Geant4" - bash benchmarks/u_rho/simulate.sh - fi From 79886ae704054ec73a00395768beb81d67ea6a6c Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 14:29:52 -0700 Subject: [PATCH 079/173] Update config.yml --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 42e75262..1d4c7aba 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -17,7 +17,7 @@ u_channel_rho:generate: - echo "Using simulation campaign so skipping this step!" - else - echo "Not using simulation campaign so grab raw events from S3!" - #- snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - fi - echo "Finished gathering events" @@ -33,7 +33,7 @@ u_channel_rho:simulate: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else - - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + #- snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - echo "Running Geant4" - bash benchmarks/u_rho/simulate.sh - fi From f225f830fcdf8d9965d65f3506fbb2f898c98332 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 14:32:06 -0700 Subject: [PATCH 080/173] Update Snakefile input path --- benchmarks/u_rho/Snakefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index c32e02e2..51d25991 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -36,6 +36,10 @@ rule uchannelrho_campaign_raw_get: echo "Getting afterburned event-generator file" ln {input} {output} ls benchmark_output/ +mkdir -p input/u_rho +cp {output} input/u_rho/ +echo "File in input/u_rho/:" +ls input/u_rho/ """ From ce5f8eb26849bf6fb9e505f9f826f9a8430b1acc Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 14:33:01 -0700 Subject: [PATCH 081/173] Update setup.config input path --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 8a9b6f3f..9fa405af 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -7,5 +7,5 @@ if [[ ! -n "${JUGGLER_N_EVENTS}" ]] ; then export JUGGLER_N_EVENTS=5 fi -export JUGGLER_IN_FILE="benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root" +export JUGGLER_IN_FILE="input/u_rho/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root" export JUGGLER_OUT_FILE="benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root" From 77954ba04cbe865b6633484b500553ab76b38f90 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 14:40:09 -0700 Subject: [PATCH 082/173] Update config.yml tasks --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 1d4c7aba..42e75262 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -17,7 +17,7 @@ u_channel_rho:generate: - echo "Using simulation campaign so skipping this step!" - else - echo "Not using simulation campaign so grab raw events from S3!" - - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + #- snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - fi - echo "Finished gathering events" @@ -33,7 +33,7 @@ u_channel_rho:simulate: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else - #- snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - echo "Running Geant4" - bash benchmarks/u_rho/simulate.sh - fi From e28b7c0ba96b26835a0a7a2be0270afe55531e16 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 15:06:25 -0700 Subject: [PATCH 083/173] Add simulate rule in Snakefile --- benchmarks/u_rho/Snakefile | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 51d25991..0fd4f9c9 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -36,10 +36,36 @@ rule uchannelrho_campaign_raw_get: echo "Getting afterburned event-generator file" ln {input} {output} ls benchmark_output/ -mkdir -p input/u_rho -cp {output} input/u_rho/ -echo "File in input/u_rho/:" -ls input/u_rho/ +""" + +rule uchannelrho_simulate: + input: + "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", + output: + "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root", + shell: + """ +echo "Simulating detector response!" +source strict-mode.sh +source benchmarks/u_rho/setup.config $* +if [ -f ${JUGGLER_IN_FILE} ]; then + echo "ERROR: Input simulation file does ${JUGGLER_IN_FILE} not exist." +else + echo "GOOD: Input simulation file ${JUGGLER_IN_FILE} exists!" +fi +# Simulate +ddsim --runType batch \ + -v WARNING \ + --numberOfEvents ${JUGGLER_N_EVENTS} \ + --part.minimalKineticEnergy 100*GeV \ + --filter.tracker edep0 \ + --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ + --inputFiles {input} \ + --outputFile {output} +if [[ "$?" -ne "0" ]] ; then + echo "ERROR running ddsim" + exit 1 +fi """ From a3ea2ab146919816b6a50d5e437e043ce9bbc94f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 15:08:12 -0700 Subject: [PATCH 084/173] Update config.yml with snakemake simulate rule --- benchmarks/u_rho/config.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 42e75262..d9b05ec6 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -17,7 +17,7 @@ u_channel_rho:generate: - echo "Using simulation campaign so skipping this step!" - else - echo "Not using simulation campaign so grab raw events from S3!" - #- snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - fi - echo "Finished gathering events" @@ -33,9 +33,8 @@ u_channel_rho:simulate: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else - - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - echo "Running Geant4" - - bash benchmarks/u_rho/simulate.sh + - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root - fi - echo "Finished simulating detector response" retry: From a405c876dd9f170214c1e7bb4eccd0591f9db6ac Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 15:23:23 -0700 Subject: [PATCH 085/173] Fix Snakefile --- benchmarks/u_rho/Snakefile | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 0fd4f9c9..6d19e48b 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -35,7 +35,7 @@ rule uchannelrho_campaign_raw_get: """ echo "Getting afterburned event-generator file" ln {input} {output} -ls benchmark_output/ +ls benchmark_output/* """ rule uchannelrho_simulate: @@ -43,20 +43,20 @@ rule uchannelrho_simulate: "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", output: "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root", + params: + N_EVENTS=100 shell: """ echo "Simulating detector response!" -source strict-mode.sh -source benchmarks/u_rho/setup.config $* -if [ -f ${JUGGLER_IN_FILE} ]; then - echo "ERROR: Input simulation file does ${JUGGLER_IN_FILE} not exist." +if [ -f {input} ]; then + echo "ERROR: Input simulation file does {input} not exist." else - echo "GOOD: Input simulation file ${JUGGLER_IN_FILE} exists!" + echo "GOOD: Input simulation file {input} exists!" fi # Simulate ddsim --runType batch \ -v WARNING \ - --numberOfEvents ${JUGGLER_N_EVENTS} \ + --numberOfEvents {params.N_EVENTS} \ --part.minimalKineticEnergy 100*GeV \ --filter.tracker edep0 \ --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ From 7b3541ce5ea0f659fc7e5ae752e420479321b342 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 15:37:41 -0700 Subject: [PATCH 086/173] Update Snakefile to refer to simulate.sh --- benchmarks/u_rho/Snakefile | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 6d19e48b..0d0b92dc 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -48,24 +48,7 @@ rule uchannelrho_simulate: shell: """ echo "Simulating detector response!" -if [ -f {input} ]; then - echo "ERROR: Input simulation file does {input} not exist." -else - echo "GOOD: Input simulation file {input} exists!" -fi -# Simulate -ddsim --runType batch \ - -v WARNING \ - --numberOfEvents {params.N_EVENTS} \ - --part.minimalKineticEnergy 100*GeV \ - --filter.tracker edep0 \ - --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ - --inputFiles {input} \ - --outputFile {output} -if [[ "$?" -ne "0" ]] ; then - echo "ERROR running ddsim" - exit 1 -fi +bash benchmarks/u_rho/simulate.sh {input} {output} {params.N_EVENTS} """ From d93ccaf82d8dca549bb29b9918b1bd7a1761aab4 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 15:38:45 -0700 Subject: [PATCH 087/173] Update simulate.sh --- benchmarks/u_rho/simulate.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/benchmarks/u_rho/simulate.sh b/benchmarks/u_rho/simulate.sh index e006c5ea..3e75375e 100644 --- a/benchmarks/u_rho/simulate.sh +++ b/benchmarks/u_rho/simulate.sh @@ -3,6 +3,10 @@ source strict-mode.sh source benchmarks/u_rho/setup.config $* +JUGGLER_IN_FILE=$1 +JUGGLER_OUT_FILE=$2 +JUGGLER_N_EVENTS=$3 + if [ -f ${JUGGLER_IN_FILE} ]; then echo "ERROR: Input simulation file does ${JUGGLER_IN_FILE} not exist." else From 21fdaa3b656d44c1675570a4b20951732a9d51d7 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 15:39:09 -0700 Subject: [PATCH 088/173] Update setup.config --- benchmarks/u_rho/setup.config | 7 ------- 1 file changed, 7 deletions(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 9fa405af..5ce9fa11 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -2,10 +2,3 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=false - -if [[ ! -n "${JUGGLER_N_EVENTS}" ]] ; then - export JUGGLER_N_EVENTS=5 -fi - -export JUGGLER_IN_FILE="input/u_rho/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root" -export JUGGLER_OUT_FILE="benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root" From c71d1fa0d6d939c0622ab33a6094d2b0219b319e Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 15:56:17 -0700 Subject: [PATCH 089/173] Update config.yml reconstruction --- benchmarks/u_rho/config.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index d9b05ec6..0d5e628f 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -46,7 +46,7 @@ u_channel_rho:reconstruct: stage: reconstruct extends: .phy_benchmark needs: ["u_channel_rho:simulate"] - timeout: 96 hour + timeout: 10 hour script: - echo "Performing reconstruction here!" - config_file=benchmarks/u_rho/setup.config @@ -54,7 +54,8 @@ u_channel_rho:reconstruct: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else - - echo "Not using simulation campaign!" + - echo "Running eicrecon!" + - bash reconstruct.sh - fi - echo "Finished reconstruction" retry: From b2c8cd91f6ebf2a4690b1538e593d4e6d0d67711 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 15:57:55 -0700 Subject: [PATCH 090/173] Create reconstruct.sh --- benchmarks/u_rho/reconstruct.sh | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 benchmarks/u_rho/reconstruct.sh diff --git a/benchmarks/u_rho/reconstruct.sh b/benchmarks/u_rho/reconstruct.sh new file mode 100644 index 00000000..742a081e --- /dev/null +++ b/benchmarks/u_rho/reconstruct.sh @@ -0,0 +1,25 @@ +#!/bin/bash +source strict-mode.sh + +source benchmarks/u_rho/setup.config $* + +# Reconstruct +if [ ${RECO} == "eicrecon" ] ; then + eicrecon ${JUGGLER_SIM_FILE} -Ppodio:output_file=${JUGGLER_REC_FILE} + if [[ "$?" -ne "0" ]] ; then + echo "ERROR running eicrecon" + exit 1 + fi +fi + +if [[ ${RECO} == "juggler" ]] ; then + gaudirun.py options/reconstruction.py || [ $? -eq 4 ] + if [ "$?" -ne "0" ] ; then + echo "ERROR running juggler" + exit 1 + fi +fi + +if [ -f jana.dot ] ; then cp jana.dot ${JUGGLER_REC_FILE_BASE}.dot ; fi + +rootls -t ${JUGGLER_REC_FILE_BASE}.tree.edm4eic.root From ca99ad4d167f6ad6294496ef21414717a3be9206 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 16:05:05 -0700 Subject: [PATCH 091/173] Update setup.config --- benchmarks/u_rho/setup.config | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 5ce9fa11..9a81f743 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -2,3 +2,11 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=false + +N_EVENTS=100 + +INPUT_FILE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root +OUTPUT_FILE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root + +REC_FILE_BASE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim +REC_FILE=${JUGGLER_REC_FILE_BASE}.edm4eic.root From 787da258aaa431ca32674fc556da1677ef5976cc Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 16:06:26 -0700 Subject: [PATCH 092/173] Update config.yml --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 0d5e628f..6ebccfd8 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -34,7 +34,7 @@ u_channel_rho:simulate: - echo "Using simulation campaign so skipping this step!" - else - echo "Running Geant4" - - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root + - bash benchmarks/u_rho/simulate.sh - fi - echo "Finished simulating detector response" retry: @@ -55,7 +55,7 @@ u_channel_rho:reconstruct: - echo "Using simulation campaign so skipping this step!" - else - echo "Running eicrecon!" - - bash reconstruct.sh + - bash benchmarks/u_rho/reconstruct.sh - fi - echo "Finished reconstruction" retry: From f0233f0bdd7e38472fdddafcb057d0e77a12d2ea Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 16:09:25 -0700 Subject: [PATCH 093/173] Update simulate.sh --- benchmarks/u_rho/simulate.sh | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/benchmarks/u_rho/simulate.sh b/benchmarks/u_rho/simulate.sh index 3e75375e..ce22d3c1 100644 --- a/benchmarks/u_rho/simulate.sh +++ b/benchmarks/u_rho/simulate.sh @@ -3,25 +3,21 @@ source strict-mode.sh source benchmarks/u_rho/setup.config $* -JUGGLER_IN_FILE=$1 -JUGGLER_OUT_FILE=$2 -JUGGLER_N_EVENTS=$3 - -if [ -f ${JUGGLER_IN_FILE} ]; then - echo "ERROR: Input simulation file does ${JUGGLER_IN_FILE} not exist." +if [ -f ${INPUT_FILE} ]; then + echo "ERROR: Input simulation file does ${INPUT_FILE} not exist." else - echo "GOOD: Input simulation file ${JUGGLER_IN_FILE} exists!" + echo "GOOD: Input simulation file ${INPUT_FILE} exists!" fi # Simulate ddsim --runType batch \ -v WARNING \ - --numberOfEvents ${JUGGLER_N_EVENTS} \ + --numberOfEvents ${N_EVENTS} \ --part.minimalKineticEnergy 100*GeV \ --filter.tracker edep0 \ --compactFile ${DETECTOR_PATH}/${DETECTOR_CONFIG}.xml \ - --inputFiles ${JUGGLER_IN_FILE} \ - --outputFile ${JUGGLER_OUT_FILE} + --inputFiles ${INPUT_FILE} \ + --outputFile ${OUTPUT_FILE} if [[ "$?" -ne "0" ]] ; then echo "ERROR running ddsim" exit 1 From 27989e615f14fe3ab0d035293bc932417d4f53e2 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 16:10:55 -0700 Subject: [PATCH 094/173] Update config.yml --- benchmarks/u_rho/config.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 6ebccfd8..7889a4a0 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -16,8 +16,7 @@ u_channel_rho:generate: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else - - echo "Not using simulation campaign so grab raw events from S3!" - - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + - echo "Not using simulation campaign so grab raw events from S3 in the next step!" - fi - echo "Finished gathering events" @@ -33,6 +32,8 @@ u_channel_rho:simulate: - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign so skipping this step!" - else + - echo "Grabbing raw events from S3" + - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - echo "Running Geant4" - bash benchmarks/u_rho/simulate.sh - fi From 0e70fb1005ad8cabff4b31378f5941a6b0ebd4f7 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 16:12:24 -0700 Subject: [PATCH 095/173] Update reconstruct.sh --- benchmarks/u_rho/reconstruct.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmarks/u_rho/reconstruct.sh b/benchmarks/u_rho/reconstruct.sh index 742a081e..a119e2d5 100644 --- a/benchmarks/u_rho/reconstruct.sh +++ b/benchmarks/u_rho/reconstruct.sh @@ -5,7 +5,7 @@ source benchmarks/u_rho/setup.config $* # Reconstruct if [ ${RECO} == "eicrecon" ] ; then - eicrecon ${JUGGLER_SIM_FILE} -Ppodio:output_file=${JUGGLER_REC_FILE} + eicrecon ${OUTPUT_FILE} -Ppodio:output_file=${REC_FILE} if [[ "$?" -ne "0" ]] ; then echo "ERROR running eicrecon" exit 1 @@ -20,6 +20,6 @@ if [[ ${RECO} == "juggler" ]] ; then fi fi -if [ -f jana.dot ] ; then cp jana.dot ${JUGGLER_REC_FILE_BASE}.dot ; fi +if [ -f jana.dot ] ; then cp jana.dot ${REC_FILE_BASE}.dot ; fi -rootls -t ${JUGGLER_REC_FILE_BASE}.tree.edm4eic.root +rootls -t ${REC_FILE_BASE}.tree.edm4eic.root From bff24011081c17f8690c8985b43b7a86f1db3c71 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 16:26:20 -0700 Subject: [PATCH 096/173] Update setup.config --- benchmarks/u_rho/setup.config | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 9a81f743..55ab2a6f 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -5,8 +5,9 @@ USE_SIMULATION_CAMPAIGN=false N_EVENTS=100 -INPUT_FILE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root -OUTPUT_FILE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root +FILE_BASE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree +INPUT_FILE=${FILE_BASE}.root +OUTPUT_FILE=${FILE_BASE}.detectorsim.root -REC_FILE_BASE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim -REC_FILE=${JUGGLER_REC_FILE_BASE}.edm4eic.root +REC_FILE_BASE=${FILE_BASE}.detectorsim.edm4eic +REC_FILE=${REC_FILE_BASE}.root From 079078a8608252acc43a282971190654f21fe8c5 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 16:47:29 -0700 Subject: [PATCH 097/173] Update analyze rule --- benchmarks/u_rho/config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 7889a4a0..0f4433c6 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -81,8 +81,7 @@ u_channel_rho:analyze: - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else - echo "Not using simulation campaign!" - - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - bash benchmarks/u_rho/analyze.sh - fi - echo "Finished, copying over json now" - cp benchmark_output/u_rho_eff.json results/u_rho/ From 26d9035cd2106394d2e4f90f31eb9d0f0c66fe2a Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 16:47:50 -0700 Subject: [PATCH 098/173] Update setup.config --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 55ab2a6f..76eeb4df 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -5,7 +5,7 @@ USE_SIMULATION_CAMPAIGN=false N_EVENTS=100 -FILE_BASE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree +FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree INPUT_FILE=${FILE_BASE}.root OUTPUT_FILE=${FILE_BASE}.detectorsim.root From 3d36c7fa09e013bb819302549e663330452a5519 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 17:06:26 -0700 Subject: [PATCH 099/173] Update setup.config --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 76eeb4df..55ab2a6f 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -5,7 +5,7 @@ USE_SIMULATION_CAMPAIGN=false N_EVENTS=100 -FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree +FILE_BASE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree INPUT_FILE=${FILE_BASE}.root OUTPUT_FILE=${FILE_BASE}.detectorsim.root From e5e1db880e429d930951617d62d71b757427427a Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 17:25:05 -0700 Subject: [PATCH 100/173] Create analyze.sh --- benchmarks/u_rho/analyze.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 benchmarks/u_rho/analyze.sh diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh new file mode 100644 index 00000000..8a996aeb --- /dev/null +++ b/benchmarks/u_rho/analyze.sh @@ -0,0 +1,23 @@ +#!/bin/bash +source strict-mode.sh + +source benchmarks/u_rho/setup.config $* + +OUTPUT_PLOTS_DIR=benchmark_output/nocampaign +mkdir -p ${OUTPUT_PLOTS_DIR} +# Analyze +/usr/bin/time -v \ +root -l -b -q benchmarks/u_rho/analysis/uchannelrho.cxx+("${REC_FILE}","${OUTPUT_PLOTS_DIR}/plots.root") +if [[ "$?" -ne "0" ]] ; then + echo "ERROR analysis failed" + exit 1 +fi + +if [ ! -d "${OUTPUT_PLOTS_DIR}_figures" ]; then + mkdir "${OUTPUT_PLOTS_DIR}_figures" + echo "${OUTPUT_PLOTS_DIR}_figures directory created successfully." +else + echo "${OUTPUT_PLOTS_DIR}_figures directory already exists." +fi +root -l -b -q benchmarks/u_rho/macros/plot_rho_physics_benchmark.C("${OUTPUT_PLOTS_DIR}/plots.root") +cat benchmark_output/*.json From 85e85f3d459a9897ddf4fcb07f4209c2c6ff1759 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 17 May 2024 17:40:49 -0700 Subject: [PATCH 101/173] Test getting mirrored file from XRootD --- benchmarks/u_rho/setup.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 55ab2a6f..bd18b384 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -6,7 +6,8 @@ USE_SIMULATION_CAMPAIGN=false N_EVENTS=100 FILE_BASE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree -INPUT_FILE=${FILE_BASE}.root +#INPUT_FILE=${FILE_BASE}.root +INPUT_FILE=root://dtn-eic.jlab.org//work/eic2/EPIC/EVGEN/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root OUTPUT_FILE=${FILE_BASE}.detectorsim.root REC_FILE_BASE=${FILE_BASE}.detectorsim.edm4eic From 3da8ee301c7ed944cb94fc39bbe976f442f31cd2 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 19 May 2024 16:13:08 -0700 Subject: [PATCH 102/173] Update setup.config with sim_output --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index bd18b384..66539cd9 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -5,7 +5,7 @@ USE_SIMULATION_CAMPAIGN=false N_EVENTS=100 -FILE_BASE=benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree +FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root INPUT_FILE=root://dtn-eic.jlab.org//work/eic2/EPIC/EVGEN/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root OUTPUT_FILE=${FILE_BASE}.detectorsim.root From 6b82b2d37192500c1eb4bba5420d8ef5544df59c Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Sun, 19 May 2024 16:14:59 -0700 Subject: [PATCH 103/173] Update plot_rho_physics_benchmark.C with sim_output --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 2c5dffb2..e2d3fdca 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -26,11 +26,11 @@ int setbenchstatus(double eff){ } // write out our test data - common_bench::write_test(rho_reco_eff_test, "./benchmark_output/u_rho_eff.json"); + common_bench::write_test(rho_reco_eff_test, "./sim_output/u_rho_eff.json"); return 0; } -void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combined.root"){ +void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.root"){ Ssiz_t dotPosition = filename.Last('.'); TString figure_directory = filename(0, dotPosition); figure_directory += "_figures"; @@ -140,7 +140,7 @@ void plot_rho_physics_benchmark(TString filename="./benchmark_output/plot_combin w7->AddEntry(h_t_REC, "eSTARlight "+vm_label+" RECO ", "P"); w7->Draw("same"); - //c1->Print("./benchmark_output/figures/benchmark_rho_dsigmadt.pdf"); + //c1->Print("./sim_output/figures/benchmark_rho_dsigmadt.pdf"); TString figure1name = figure_directory+"/benchmark_rho_dsigmadt.pdf"; c1->Print(figure1name); From 007b14a0b60c65e8889aae02cb3768c2c12f637a Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 21 May 2024 14:00:39 -0700 Subject: [PATCH 104/173] Update Snakefile with sim_output --- benchmarks/u_rho/Snakefile | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 0d0b92dc..9ff3aa27 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -19,7 +19,7 @@ rule uchannelrho_campaign_reco_get: input: lambda wildcards: S3.remote(f"eictest/EPIC/RECO/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), output: - "benchmark_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + "sim_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", shell: """ echo "Getting file for INDEX {wildcards.INDEX}" @@ -30,19 +30,19 @@ rule uchannelrho_campaign_raw_get: input: S3.remote(f"eictest/EPIC/EVGEN/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root"), output: - "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", + "sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", shell: """ echo "Getting afterburned event-generator file" ln {input} {output} -ls benchmark_output/* +ls sim_output/* """ rule uchannelrho_simulate: input: - "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", + "sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", output: - "benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root", + "sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root", params: N_EVENTS=100 shell: @@ -56,9 +56,9 @@ rule uchannelrho_analysis: input: script="benchmarks/u_rho/analysis/uchannelrho.cxx", #script_compiled=ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho_cxx.so", - data="benchmark_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + data="sim_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", output: - plots="benchmark_output/campaign_23.12.0_{INDEX}_eicrecon.edm4eic/plots.root", + plots="sim_output/campaign_23.12.0_{INDEX}_eicrecon.edm4eic/plots.root", shell: """ mkdir -p $(dirname "{output.plots}") @@ -68,15 +68,15 @@ root -l -b -q '{input.script}+("{input.data}","{output.plots}")' rule uchannelrho_combine: input: - #lambda wildcards: [f"benchmark_output/campaign_23.12.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], + #lambda wildcards: [f"sim_output/campaign_23.12.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], lambda wildcards: expand( - "benchmark_output/campaign_23.12.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", + "sim_output/campaign_23.12.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", INDEX=range(int(wildcards.N)), ), wildcard_constraints: N="\d+", output: - "benchmark_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + "sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", shell: """ hadd {output} {input} @@ -89,9 +89,9 @@ ruleorder: uchannelrho_combine > uchannelrho_analysis rule uchannelrho_plots: input: script="benchmarks/u_rho/macros/plot_rho_physics_benchmark.C", - plots="benchmark_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + plots="sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", output: - "benchmark_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", + "sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", shell: """ if [ ! -d "{input.plots}_figures" ]; then @@ -101,7 +101,7 @@ else echo "{input.plots}_figures directory already exists." fi root -l -b -q '{input.script}("{input.plots}")' -cat benchmark_output/*.json +cat sim_output/*.json #cp {input.plots}_figures/*.pdf figures/ """ @@ -110,7 +110,7 @@ cat benchmark_output/*.json rule uchannelrho_run_over_a_campaign: input: - "benchmark_output/figures/plots_benchmark_rho_dsigmadt.pdf", + "sim_output/figures/plots_benchmark_rho_dsigmadt.pdf", message: "See output in {input[0]}" From 2377170a5b3ae9a8210ab5e9e22298dc494c8a60 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 21 May 2024 14:01:28 -0700 Subject: [PATCH 105/173] Update config.yml with sim_output --- benchmarks/u_rho/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 0f4433c6..79a15a71 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -33,7 +33,7 @@ u_channel_rho:simulate: - echo "Using simulation campaign so skipping this step!" - else - echo "Grabbing raw events from S3" - - snakemake --cores 2 benchmark_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + - snakemake --cores 2 sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - echo "Running Geant4" - bash benchmarks/u_rho/simulate.sh - fi @@ -77,14 +77,14 @@ u_channel_rho:analyze: - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign!" - - snakemake --cores 2 benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - cp benchmark_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - snakemake --cores 2 sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - cp sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else - echo "Not using simulation campaign!" - bash benchmarks/u_rho/analyze.sh - fi - echo "Finished, copying over json now" - - cp benchmark_output/u_rho_eff.json results/u_rho/ + - cp sim_output/u_rho_eff.json results/u_rho/ - echo "Finished copying!" u_channel_rho:results: From 024bf75c466f04775a37d5e88bf013ba1b187265 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 21 May 2024 14:08:55 -0700 Subject: [PATCH 106/173] Trigger pipelines --- benchmarks/u_rho/analyze.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index 8a996aeb..71fe8540 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -1,6 +1,7 @@ #!/bin/bash source strict-mode.sh + source benchmarks/u_rho/setup.config $* OUTPUT_PLOTS_DIR=benchmark_output/nocampaign From 9883e1fd965d702fd72dec42ff1b1f2fc2be4063 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 21 May 2024 14:38:44 -0700 Subject: [PATCH 107/173] Trigger pipelines again --- benchmarks/u_rho/analyze.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index 71fe8540..8a996aeb 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -1,7 +1,6 @@ #!/bin/bash source strict-mode.sh - source benchmarks/u_rho/setup.config $* OUTPUT_PLOTS_DIR=benchmark_output/nocampaign From 091e603e6202d67f9d366b3d351f016743d46fab Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 21 May 2024 14:49:45 -0700 Subject: [PATCH 108/173] Update analyze.sh with sim_output --- benchmarks/u_rho/analyze.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index 8a996aeb..9faf6868 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -3,7 +3,7 @@ source strict-mode.sh source benchmarks/u_rho/setup.config $* -OUTPUT_PLOTS_DIR=benchmark_output/nocampaign +OUTPUT_PLOTS_DIR=sim_output/nocampaign mkdir -p ${OUTPUT_PLOTS_DIR} # Analyze /usr/bin/time -v \ @@ -20,4 +20,4 @@ else echo "${OUTPUT_PLOTS_DIR}_figures directory already exists." fi root -l -b -q benchmarks/u_rho/macros/plot_rho_physics_benchmark.C("${OUTPUT_PLOTS_DIR}/plots.root") -cat benchmark_output/*.json +cat sim_output/*.json From 844145b222c6956c8465279bb90901686f45bf1f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 21 May 2024 14:54:28 -0700 Subject: [PATCH 109/173] Update config.yml with sim_output pdf path --- benchmarks/u_rho/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 79a15a71..10396941 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -82,6 +82,7 @@ u_channel_rho:analyze: - else - echo "Not using simulation campaign!" - bash benchmarks/u_rho/analyze.sh + - cp sim_output/nocampaign/**.pdf results/u_rho/ - fi - echo "Finished, copying over json now" - cp sim_output/u_rho_eff.json results/u_rho/ From 3fc00d3a3817f46e9948a8c52d4454026cc93bd7 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 23 May 2024 14:42:42 -0700 Subject: [PATCH 110/173] Trigger pipelines --- benchmarks/u_rho/analyze.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index 9faf6868..68c5a31b 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -1,6 +1,7 @@ #!/bin/bash source strict-mode.sh + source benchmarks/u_rho/setup.config $* OUTPUT_PLOTS_DIR=sim_output/nocampaign From 2deb74de7657211acbb8bfb7e78a0d72d22c9a90 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 24 May 2024 11:50:27 -0700 Subject: [PATCH 111/173] Update Snakefile paths test --- benchmarks/u_rho/Snakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 9ff3aa27..175bc641 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -30,12 +30,12 @@ rule uchannelrho_campaign_raw_get: input: S3.remote(f"eictest/EPIC/EVGEN/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root"), output: - "sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", + "../../sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", shell: """ echo "Getting afterburned event-generator file" ln {input} {output} -ls sim_output/* +ls ../../sim_output/* """ rule uchannelrho_simulate: From 5a814c44bc9f7332c21d2ea0a65387db2a652920 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 24 May 2024 11:53:19 -0700 Subject: [PATCH 112/173] Change config.yml with updated snakefile arg --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 10396941..40cdc4b2 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -33,7 +33,7 @@ u_channel_rho:simulate: - echo "Using simulation campaign so skipping this step!" - else - echo "Grabbing raw events from S3" - - snakemake --cores 2 sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root + - snakemake --cores 2 ../../sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root - echo "Running Geant4" - bash benchmarks/u_rho/simulate.sh - fi From 7722e27a3ee65c55b99e4651bf375adab98df403 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 24 May 2024 22:08:29 -0700 Subject: [PATCH 113/173] Update reconstruct.sh rec file --- benchmarks/u_rho/reconstruct.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmarks/u_rho/reconstruct.sh b/benchmarks/u_rho/reconstruct.sh index a119e2d5..2b7a4c10 100644 --- a/benchmarks/u_rho/reconstruct.sh +++ b/benchmarks/u_rho/reconstruct.sh @@ -22,4 +22,5 @@ fi if [ -f jana.dot ] ; then cp jana.dot ${REC_FILE_BASE}.dot ; fi -rootls -t ${REC_FILE_BASE}.tree.edm4eic.root +#rootls -t ${REC_FILE_BASE}.tree.edm4eic.root +rootls -t ${REC_FILE} From d94a8eb8d0e4f43e13a23fb1528e3536189fe6bb Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 24 May 2024 23:04:37 -0700 Subject: [PATCH 114/173] Update `mkdir` to `mkdir -p` to avoid errors --- benchmarks/u_rho/config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 40cdc4b2..ba1ce8f3 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -71,8 +71,7 @@ u_channel_rho:analyze: - ["u_channel_rho:reconstruct"] script: - echo "I will be analyzing events here!" - - mkdir results - - mkdir results/u_rho + - mkdir -p results/u_rho - config_file=benchmarks/u_rho/setup.config - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then From a684cd0ea481bf83f33e6d5fd60d0375ea362cbd Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 24 May 2024 23:33:58 -0700 Subject: [PATCH 115/173] Fix quotes in analyze.sh --- benchmarks/u_rho/analyze.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index 68c5a31b..1ed762b9 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -8,7 +8,7 @@ OUTPUT_PLOTS_DIR=sim_output/nocampaign mkdir -p ${OUTPUT_PLOTS_DIR} # Analyze /usr/bin/time -v \ -root -l -b -q benchmarks/u_rho/analysis/uchannelrho.cxx+("${REC_FILE}","${OUTPUT_PLOTS_DIR}/plots.root") +root -l -b -q "benchmarks/u_rho/analysis/uchannelrho.cxx+(\"${REC_FILE}\",\"${OUTPUT_PLOTS_DIR}/plots.root\")" if [[ "$?" -ne "0" ]] ; then echo "ERROR analysis failed" exit 1 From 59a88ab7ed85d15b6f6cd53cd7731a5df95d05b5 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 24 May 2024 23:45:21 -0700 Subject: [PATCH 116/173] Update quotes again in analyze.sh --- benchmarks/u_rho/analyze.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index 1ed762b9..bccfa012 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -20,5 +20,5 @@ if [ ! -d "${OUTPUT_PLOTS_DIR}_figures" ]; then else echo "${OUTPUT_PLOTS_DIR}_figures directory already exists." fi -root -l -b -q benchmarks/u_rho/macros/plot_rho_physics_benchmark.C("${OUTPUT_PLOTS_DIR}/plots.root") +root -l -b -q "benchmarks/u_rho/macros/plot_rho_physics_benchmark.C(\"${OUTPUT_PLOTS_DIR}/plots.root\")" cat sim_output/*.json From 244cfcb3e998d8b0636736110be8d8f5037622ee Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Mon, 27 May 2024 19:31:25 -0700 Subject: [PATCH 117/173] Update figures path --- benchmarks/u_rho/analyze.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index bccfa012..84d15169 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -14,11 +14,11 @@ if [[ "$?" -ne "0" ]] ; then exit 1 fi -if [ ! -d "${OUTPUT_PLOTS_DIR}_figures" ]; then - mkdir "${OUTPUT_PLOTS_DIR}_figures" - echo "${OUTPUT_PLOTS_DIR}_figures directory created successfully." +if [ ! -d "${OUTPUT_PLOTS_DIR}/plots_figures" ]; then + mkdir "${OUTPUT_PLOTS_DIR}/plots_figures" + echo "${OUTPUT_PLOTS_DIR}/plots_figures directory created successfully." else - echo "${OUTPUT_PLOTS_DIR}_figures directory already exists." + echo "${OUTPUT_PLOTS_DIR}/plots_figures directory already exists." fi root -l -b -q "benchmarks/u_rho/macros/plot_rho_physics_benchmark.C(\"${OUTPUT_PLOTS_DIR}/plots.root\")" cat sim_output/*.json From 811cf93f55d6f0264cf80f18d72bd2d976040883 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 28 May 2024 00:26:08 -0700 Subject: [PATCH 118/173] Update config.yml figures path --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index ba1ce8f3..2e6a5f52 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -81,7 +81,7 @@ u_channel_rho:analyze: - else - echo "Not using simulation campaign!" - bash benchmarks/u_rho/analyze.sh - - cp sim_output/nocampaign/**.pdf results/u_rho/ + - cp sim_output/nocampaign/plots_figures/*.pdf results/u_rho/ - fi - echo "Finished, copying over json now" - cp sim_output/u_rho_eff.json results/u_rho/ From ed044590856ddc2fa631db5702af51c89254bb0d Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 11:28:41 -0700 Subject: [PATCH 119/173] Test using simulation campaign --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 66539cd9..c733c444 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1,7 +1,7 @@ #!/bin/bash source strict-mode.sh -USE_SIMULATION_CAMPAIGN=false +USE_SIMULATION_CAMPAIGN=true N_EVENTS=100 From 003369e4f82aa4cdf908aac03cb026478ff1754f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 11:34:26 -0700 Subject: [PATCH 120/173] Update Snakefile paths --- benchmarks/u_rho/Snakefile | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 175bc641..6a902f71 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -19,7 +19,7 @@ rule uchannelrho_campaign_reco_get: input: lambda wildcards: S3.remote(f"eictest/EPIC/RECO/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), output: - "sim_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + "../../sim_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", shell: """ echo "Getting file for INDEX {wildcards.INDEX}" @@ -40,9 +40,9 @@ ls ../../sim_output/* rule uchannelrho_simulate: input: - "sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", + "../../sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.root", output: - "sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root", + "../../sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree.detectorsim.root", params: N_EVENTS=100 shell: @@ -56,9 +56,9 @@ rule uchannelrho_analysis: input: script="benchmarks/u_rho/analysis/uchannelrho.cxx", #script_compiled=ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho_cxx.so", - data="sim_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + data="../../sim_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", output: - plots="sim_output/campaign_23.12.0_{INDEX}_eicrecon.edm4eic/plots.root", + plots="../../sim_output/campaign_23.12.0_{INDEX}_eicrecon.edm4eic/plots.root", shell: """ mkdir -p $(dirname "{output.plots}") @@ -68,15 +68,15 @@ root -l -b -q '{input.script}+("{input.data}","{output.plots}")' rule uchannelrho_combine: input: - #lambda wildcards: [f"sim_output/campaign_23.12.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], + #lambda wildcards: [f"../../sim_output/campaign_23.12.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], lambda wildcards: expand( - "sim_output/campaign_23.12.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", + "../../sim_output/campaign_23.12.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", INDEX=range(int(wildcards.N)), ), wildcard_constraints: N="\d+", output: - "sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + "../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", shell: """ hadd {output} {input} @@ -89,9 +89,9 @@ ruleorder: uchannelrho_combine > uchannelrho_analysis rule uchannelrho_plots: input: script="benchmarks/u_rho/macros/plot_rho_physics_benchmark.C", - plots="sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + plots="../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", output: - "sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", + "../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", shell: """ if [ ! -d "{input.plots}_figures" ]; then @@ -101,7 +101,7 @@ else echo "{input.plots}_figures directory already exists." fi root -l -b -q '{input.script}("{input.plots}")' -cat sim_output/*.json +cat ../../sim_output/*.json #cp {input.plots}_figures/*.pdf figures/ """ From 11140d18dfb746b1dc13a549deb36e08249d6bd8 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 11:38:48 -0700 Subject: [PATCH 121/173] Update config.yml paths --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 2e6a5f52..5f2e4a51 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -76,7 +76,7 @@ u_channel_rho:analyze: - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign!" - - snakemake --cores 2 sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - snakemake --cores 2 ../../sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - cp sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else - echo "Not using simulation campaign!" From b19dd5666bbc976a24fdf84428bb852d334180a7 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 12:30:30 -0700 Subject: [PATCH 122/173] Update Snakefile paths --- benchmarks/u_rho/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 6a902f71..c5b5092c 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -89,7 +89,7 @@ ruleorder: uchannelrho_combine > uchannelrho_analysis rule uchannelrho_plots: input: script="benchmarks/u_rho/macros/plot_rho_physics_benchmark.C", - plots="../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + plots="sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", output: "../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", shell: From abaf607251d7657a9cc3a0668c68cf2bee1d3c60 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 12:50:20 -0700 Subject: [PATCH 123/173] Update config.yml json path --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 5f2e4a51..ced2043a 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -84,7 +84,7 @@ u_channel_rho:analyze: - cp sim_output/nocampaign/plots_figures/*.pdf results/u_rho/ - fi - echo "Finished, copying over json now" - - cp sim_output/u_rho_eff.json results/u_rho/ + - cp benchmarks/u_rho/benchmark_output/u_rho_eff.json results/u_rho/ - echo "Finished copying!" u_channel_rho:results: From 67a943ae25623ce9edcbb10d553f9bf7032fd797 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 12:50:44 -0700 Subject: [PATCH 124/173] Update Snakefile --- benchmarks/u_rho/Snakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index c5b5092c..a723045d 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -89,7 +89,7 @@ ruleorder: uchannelrho_combine > uchannelrho_analysis rule uchannelrho_plots: input: script="benchmarks/u_rho/macros/plot_rho_physics_benchmark.C", - plots="sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + plots="../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", output: "../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", shell: @@ -101,7 +101,7 @@ else echo "{input.plots}_figures directory already exists." fi root -l -b -q '{input.script}("{input.plots}")' -cat ../../sim_output/*.json +cat ./benchmark_output/*.json #cp {input.plots}_figures/*.pdf figures/ """ From 315548e335ee96f9c35e6b87b9c45cb371b15808 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 12:51:29 -0700 Subject: [PATCH 125/173] Update plot_rho_physics_benchmark.C --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index e2d3fdca..1bcb24aa 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -26,7 +26,7 @@ int setbenchstatus(double eff){ } // write out our test data - common_bench::write_test(rho_reco_eff_test, "./sim_output/u_rho_eff.json"); + common_bench::write_test(rho_reco_eff_test, "./benchmark_output/u_rho_eff.json"); return 0; } From 70bedee61aa91c61d2a0f946a69047aaa3416cbc Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 15:10:58 -0700 Subject: [PATCH 126/173] Update Snakefile --- benchmarks/u_rho/Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index a723045d..dc47204a 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -101,7 +101,7 @@ else echo "{input.plots}_figures directory already exists." fi root -l -b -q '{input.script}("{input.plots}")' -cat ./benchmark_output/*.json +cat benchmark_output/*.json #cp {input.plots}_figures/*.pdf figures/ """ From d92fac0168fd4d032b1cd68cf71ea0c63e2af456 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 15:23:46 -0700 Subject: [PATCH 127/173] Update config.yml paths --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index ced2043a..5212e2da 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -84,7 +84,7 @@ u_channel_rho:analyze: - cp sim_output/nocampaign/plots_figures/*.pdf results/u_rho/ - fi - echo "Finished, copying over json now" - - cp benchmarks/u_rho/benchmark_output/u_rho_eff.json results/u_rho/ + - cp benchmark_output/u_rho_eff.json results/u_rho/ - echo "Finished copying!" u_channel_rho:results: From 3f72be7330ce8bce18d8e48fefc537fbc16403f7 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 15:30:54 -0700 Subject: [PATCH 128/173] Update config.yml --- benchmarks/u_rho/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 5212e2da..2ae65286 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -72,6 +72,7 @@ u_channel_rho:analyze: script: - echo "I will be analyzing events here!" - mkdir -p results/u_rho + - mkdir -p benchmark_output - config_file=benchmarks/u_rho/setup.config - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then From 23f85947ba84809859d6dae62e9a92c8a0d17423 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 15:39:27 -0700 Subject: [PATCH 129/173] Update config.yml path --- benchmarks/u_rho/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 2ae65286..ee82501a 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -77,6 +77,7 @@ u_channel_rho:analyze: - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign!" + - mkdir -p sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures - snakemake --cores 2 ../../sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - cp sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else From 72d95735e60344e8d2c715533390ee5b7abc1f6e Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 15:47:49 -0700 Subject: [PATCH 130/173] Update config.yml test --- benchmarks/u_rho/config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index ee82501a..16ad1abb 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -77,9 +77,8 @@ u_channel_rho:analyze: - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign!" - - mkdir -p sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures - snakemake --cores 2 ../../sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - cp sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - cp ../../sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else - echo "Not using simulation campaign!" - bash benchmarks/u_rho/analyze.sh From bc0f334d1d2e1ea1013c1aa9b4d685d103352ece Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 16:11:32 -0700 Subject: [PATCH 131/173] Delete flake.lock --- flake.lock | 224 ----------------------------------------------------- 1 file changed, 224 deletions(-) delete mode 100644 flake.lock diff --git a/flake.lock b/flake.lock deleted file mode 100644 index f887dbf2..00000000 --- a/flake.lock +++ /dev/null @@ -1,224 +0,0 @@ -{ - "nodes": { - "acts-src": { - "flake": false, - "locked": { - "lastModified": 1668160771, - "narHash": "sha256-VW9kERAp/ILMmTWV9oVCjxcjERn7NG049sqbkJBmhkg=", - "owner": "acts-project", - "repo": "acts", - "rev": "3b4b5c741c8541491d496a36b917b00b344d52d1", - "type": "github" - }, - "original": { - "owner": "acts-project", - "ref": "v21.1.0", - "repo": "acts", - "type": "github" - } - }, - "dd4hep-src": { - "flake": false, - "locked": { - "lastModified": 1698160069, - "narHash": "sha256-vROAG965klhuqQOipddVxRwSVdMI9c7a0zmEKPsNmQs=", - "owner": "AIDASoft", - "repo": "DD4hep", - "rev": "ff4c726c90084b378cd9dc413ae2114e829002a7", - "type": "github" - }, - "original": { - "owner": "AIDASoft", - "ref": "v01-27", - "repo": "DD4hep", - "type": "github" - } - }, - "edm4eic-src": { - "flake": false, - "locked": { - "lastModified": 1692107245, - "narHash": "sha256-pM+0WXyNxMCfUZaHm4EXOeZAVgUc0+6c9pURr7HVtgo=", - "owner": "eic", - "repo": "EDM4eic", - "rev": "b46ba9a94d2c1fd4ef722c23348d87a51923e3fe", - "type": "github" - }, - "original": { - "owner": "eic", - "ref": "v2.1.0", - "repo": "EDM4eic", - "type": "github" - } - }, - "edm4hep-src": { - "flake": false, - "locked": { - "lastModified": 1689002358, - "narHash": "sha256-qtw8VfYintpbwIeLqDX/KRSHJDJlBXy8VcD4UmCr4ho=", - "owner": "key4hep", - "repo": "EDM4hep", - "rev": "3cf4537fc2d882dd78425510de14f9915fe79786", - "type": "github" - }, - "original": { - "owner": "key4hep", - "ref": "v00-10", - "repo": "EDM4hep", - "type": "github" - } - }, - "eicrecon-src": { - "flake": false, - "locked": { - "lastModified": 1694749174, - "narHash": "sha256-3Zk4+jO59P1a4WnGbw1QolYpVbA5nI2uhksQqNCZsis=", - "owner": "eic", - "repo": "EICrecon", - "rev": "9f08a4136ea2a78b35cc050fd2f46472fe0a87d8", - "type": "github" - }, - "original": { - "owner": "eic", - "ref": "v1.5.1", - "repo": "EICrecon", - "type": "github" - } - }, - "epic-nix": { - "inputs": { - "acts-src": "acts-src", - "dd4hep-src": "dd4hep-src", - "edm4eic-src": "edm4eic-src", - "edm4hep-src": "edm4hep-src", - "eicrecon-src": "eicrecon-src", - "epic-src": "epic-src", - "flake-compat": "flake-compat", - "jana2-src": "jana2-src", - "nixpkgs": "nixpkgs", - "podio-src": "podio-src", - "site-overlay": "site-overlay" - }, - "locked": { - "lastModified": 1698423649, - "narHash": "sha256-L6jy7UUBF93YdAaUz25Rp2OC/1B7D1TnuxOKqMWVmYE=", - "owner": "veprbl", - "repo": "epic-nix", - "rev": "10b354c66a327d721e8e962eb953dabe23af252d", - "type": "github" - }, - "original": { - "owner": "veprbl", - "repo": "epic-nix", - "type": "github" - } - }, - "epic-src": { - "flake": false, - "locked": { - "lastModified": 1691540088, - "narHash": "sha256-EKll4cCfIpSxr5NBjpIMvufAacxOUP/w0/B2mSg/TQA=", - "owner": "eic", - "repo": "epic", - "rev": "206677e12660535280438fefed67aae5b90223a1", - "type": "github" - }, - "original": { - "owner": "eic", - "ref": "23.08.0", - "repo": "epic", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "jana2-src": { - "flake": false, - "locked": { - "lastModified": 1689969274, - "narHash": "sha256-P9SZxtsqhwhYJ9X00v5EDToKKJsCvfLgWICB2bjJDD8=", - "owner": "JeffersonLab", - "repo": "JANA2", - "rev": "0d2b4a292c8111b383ebe91f2604a6cb480e5291", - "type": "github" - }, - "original": { - "owner": "JeffersonLab", - "ref": "v2.1.1", - "repo": "JANA2", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1663235518, - "narHash": "sha256-q8zLK6rK/CLXEguaPgm9yQJcY0VQtOBhAT9EV2UFK/A=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "2277e4c9010b0f27585eb0bed0a86d7cbc079354", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "podio-src": { - "flake": false, - "locked": { - "lastModified": 1693417048, - "narHash": "sha256-ydrzgMyKq+TPEgzPek44NHLwTweQM02ijYo9Gp7zqlQ=", - "owner": "AIDASoft", - "repo": "podio", - "rev": "b870add0f37c5169fecc18be565644b15375a26d", - "type": "github" - }, - "original": { - "owner": "AIDASoft", - "ref": "v00-16-07", - "repo": "podio", - "type": "github" - } - }, - "root": { - "inputs": { - "epic-nix": "epic-nix", - "nixpkgs": [ - "epic-nix", - "nixpkgs" - ] - } - }, - "site-overlay": { - "locked": { - "lastModified": 1692478388, - "narHash": "sha256-uVx/EVDRrXYjqHSZcpDbeNWG4mA0at11xi/dnN7xyEk=", - "owner": "veprbl", - "repo": "empty-overlay-flake", - "rev": "a29c5c5670303cd98cc976072af11e9ad7daecb3", - "type": "github" - }, - "original": { - "owner": "veprbl", - "repo": "empty-overlay-flake", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} From 204c20865a8543df91d41634c2148d8e18c60398 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 16:12:08 -0700 Subject: [PATCH 132/173] Delete flake.nix --- flake.nix | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 flake.nix diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 7fde96fe..00000000 --- a/flake.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ - inputs.epic-nix.url = "github:veprbl/epic-nix"; - - inputs.nixpkgs.follows = "epic-nix/nixpkgs"; - - outputs = { self, epic-nix, nixpkgs }: - let - - inherit (nixpkgs) lib; - supportedSystems = [ "x86_64-linux" "x86_64-darwin" ]; - - in - { - - devShells = lib.genAttrs supportedSystems - (system: - with import nixpkgs { - inherit system; - overlays = [ epic-nix.overlays.default ]; - }; - { - default = - mkShell { - buildInputs = - (builtins.attrValues epic-nix.packages.${system}) - ++ (with epic-nix.packages.${system}; [ - geant4.data.G4EMLOW - geant4.data.G4ENSDFSTATE - geant4.data.G4ENSDFSTATE - geant4.data.G4PARTICLEXS - geant4.data.G4PhotonEvaporation - ]) - ++ [ - nlohmann_json - snakemake - ]; - shellHook = '' - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${lib.makeLibraryPath [ fmt ]} - export S3_ACCESS_KEY="eicS3read" - export S3_SECRET_KEY="eicS3read" - ''; - }; - }); - - }; -} From 4783623b2888f0b6c32cf4c7b6732af56145786e Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 16:14:13 -0700 Subject: [PATCH 133/173] Delete benchmarks/u_rho/benchmark_output/README --- benchmarks/u_rho/benchmark_output/README | 1 - 1 file changed, 1 deletion(-) delete mode 100644 benchmarks/u_rho/benchmark_output/README diff --git a/benchmarks/u_rho/benchmark_output/README b/benchmarks/u_rho/benchmark_output/README deleted file mode 100644 index 57520d16..00000000 --- a/benchmarks/u_rho/benchmark_output/README +++ /dev/null @@ -1 +0,0 @@ -This directory contains benchmark outputs From 6d201d1e165921f7badd652cf140a27f781729b8 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 17:04:31 -0700 Subject: [PATCH 134/173] Test dynamic simulations again --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index c733c444..66539cd9 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1,7 +1,7 @@ #!/bin/bash source strict-mode.sh -USE_SIMULATION_CAMPAIGN=true +USE_SIMULATION_CAMPAIGN=false N_EVENTS=100 From 80bc11869522bfa5082b83f1a1654d29daa0317d Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 30 May 2024 18:56:37 -0700 Subject: [PATCH 135/173] Update analyze.sh json path --- benchmarks/u_rho/analyze.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index 84d15169..4cda9071 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -21,4 +21,4 @@ else echo "${OUTPUT_PLOTS_DIR}/plots_figures directory already exists." fi root -l -b -q "benchmarks/u_rho/macros/plot_rho_physics_benchmark.C(\"${OUTPUT_PLOTS_DIR}/plots.root\")" -cat sim_output/*.json +cat benchmark_output/*.json From 5eef38532b19aeded0ae596184fd39e605a5db91 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 31 May 2024 14:37:15 -0700 Subject: [PATCH 136/173] Add latex files to explain the benchmark plots --- benchmarks/u_rho/bench.tex | 55 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 benchmarks/u_rho/bench.tex diff --git a/benchmarks/u_rho/bench.tex b/benchmarks/u_rho/bench.tex new file mode 100644 index 00000000..a7712191 --- /dev/null +++ b/benchmarks/u_rho/bench.tex @@ -0,0 +1,55 @@ +%====================================================================% +% BENCH.TEX % +% Written by Zachary Sweger % +%====================================================================% + %\documentclass[final,3p]{elsarticle} +\documentclass{bench} + + + +% A useful Journal macro +\def\Journal#1#2#3#4{{#1} {\bf #2}, #3 (#4)} + +\NewDocumentCommand{\codeword}{v}{% +\texttt{\textcolor{black}{#1}}% +} + +% Some other macros used in the sample text +\def\st{\scriptstyle} +\def\sst{\scriptscriptstyle} +\def\epp{\epsilon^{\prime}} +\def\vep{\varepsilon} +\def\vp{{\bf p}} +\def\be{\begin{equation}} +\def\ee{\end{equation}} +\def\bea{\begin{eqnarray}} +\def\eea{\end{eqnarray}} +\def\CPbar{\hbox{{\rm CP}\hskip-1.80em{/}}} + + +\begin{document} +\title{$u$-channel $\rho^0$ Benchmark Figures} + + +\maketitle + +\codeword{benchmark_rho_mass.pdf}: +This figure shows the reconstruction of the $\rho^0$ mass. The \textbf{black} histogram is the invariant mass of each MC $\pi^+\pi^-$ pair after being processed by the afterburner. The \textbf{\textcolor{blue}{blue}} histogram is the invariant mass of reconstructed $\pi^+\pi^-$ pairs with no cuts on acceptance. PDG codes were used to select pions, although this PID is unrealistic. In the absence of PID, the $\rho^0$ will be reconstructed from each oppositely-charged track. The dominant combinatorial background from this approach comes from pairing protons with the $\pi^-$. This $m_{p\pi^-}$ background is shown by the red histogram. The sum of the signal and background is shown in +\textbf{\textcolor{magenta}{magenta}}. + + +\codeword{benchmark_rho_mass_cuts.pdf}: +This figure shows $\rho^0$ mass reconstruction for events in which both MC-level pions should be within the B0 acceptance (9$<\theta<$13 mrad with respect to the hadron beam pipe). The \textbf{black} histogram is the invariant mass of each MC $\pi^+\pi^-$ pair which passes this $\theta$ cut after being processed by the afterburner. The \textbf{\textcolor{magenta}{magenta}} histogram is the invariant mass of reconstructed $\pi^+\pi^-$ pairs for these same events. PDG codes were used to select pions. The \textbf{\textcolor{magenta}{magenta}} and \textbf{black} distributions were integrated over $0.6 Date: Fri, 31 May 2024 14:38:19 -0700 Subject: [PATCH 137/173] Add format file for latex file --- benchmarks/u_rho/bench.cls | 166 +++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 benchmarks/u_rho/bench.cls diff --git a/benchmarks/u_rho/bench.cls b/benchmarks/u_rho/bench.cls new file mode 100644 index 00000000..13e49564 --- /dev/null +++ b/benchmarks/u_rho/bench.cls @@ -0,0 +1,166 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% BENCH.CLS % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\LoadClass[11pt]{article} +\ProvidesClass{bench} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Making the Title, with definitions for date, abstract etc % +% This part written by David Cassel % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\@aabuffer{} +\def\author #1{\expandafter\def\expandafter\@aabuffer\expandafter +{\@aabuffer \small\rm #1\relax \par}} +\def\address#1{\expandafter\def\expandafter\@aabuffer\expandafter +{\@aabuffer \small\it #1\relax +\\ +\Photo +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\par\vspace{1em}}} + +\def\maketitle{ +\begin{center} + {\bf \@title \par} + \vskip 2em % Vertical space after title. + \@aabuffer\relax +\end{center} \par +\gdef\@aabuffer{} +} + +\def\abstracts#1{ +\begin{center} +{\begin{minipage}{5.2truein} + \footnotesize + \parindent=0pt #1\par + \end{minipage}}\end{center} + \vskip 2em \par} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Margins, textwidths, indentations etc % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\fussy +\flushbottom +\parindent 0.25in +%\oddsidemargin 4mm +%\evensidemargin 4mm +%\topmargin=0mm +%\headheight=0mm +%\headsep=0mm +%\footskip=5mm +%\textheight = 240mm +%\textwidth = 160mm +%\RequirePackage[a4paper,hmargin=1.5cm,vmargin={1.5cm,1.5cm}]{geometry} +\RequirePackage[a4paper,margin=2.5cm]{geometry} +\RequirePackage[english]{babel} +\RequirePackage{graphicx,url} +\RequirePackage[colorlinks=true,urlcolor=blue,linkcolor=black,citecolor=black]{hyperref} +% for BibTeX - sorted numerical labels by order of first citation. +\bibliographystyle{unsrt} + +\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus + -.2ex}{2.3ex plus .2ex}{\bf }} +\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus + -.2ex}{1.5ex plus .2ex}{\it }} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% alpha footnotes, no running heads and silly citations. % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\thefootnote{\alph{footnote}} +\def\@makefnmark{{$\!^{\@thefnmark}$}} + +\pagestyle{empty} + + +\renewenvironment{thebibliography}[1] + {\begin{list}{\arabic{enumi}.} + {\usecounter{enumi}\setlength{\parsep}{0pt} + \setlength{\itemsep}{0pt} + \settowidth + {\labelwidth}{#1.}\sloppy}}{\end{list}} + +%--------------------------------------------------------------------------- +%FOLLOWING THREE COMMANDS ARE FOR `LIST' COMMAND. +\topsep=0in\parsep=0in\itemsep=0in + +\newcounter{arabiclistc} +\newenvironment{arabiclist} + {\setcounter{arabiclistc}{0} + \begin{list}{\arabic{arabiclistc}} + {\usecounter{arabiclistc} + \setlength{\parsep}{0pt} + \setlength{\itemsep}{0pt}}}{\end{list}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ACKNOWLEDGEMENT: this portion is from John Hershberger % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout + {\string\citation{#2}}\fi +\def\@citea{}\@cite{\@for\@citeb:=#2\do + {\@citea\def\@citea{,}\@ifundefined + {b@\@citeb}{{\bf ?}\@warning + {Citation `\@citeb' on page \thepage \space undefined}} + {\csname b@\@citeb\endcsname}}}{#1}} + +\newif\if@cghi +\def\cite{\@cghitrue\@ifnextchar [{\@tempswatrue + \@citex}{\@tempswafalse\@citex[]}} +\def\citelow{\@cghifalse\@ifnextchar [{\@tempswatrue + \@citex}{\@tempswafalse\@citex[]}} +\def\@cite#1#2{{$\!^{#1}$\if@tempswa\typeout + {IJCGA warning: optional citation argument + ignored: `#2'} \fi}} +\newcommand{\citeup}{\cite} + +\setcounter{secnumdepth}{2} + +\def\baselinestretch{1.0} +\ifx\selectfont\undefined +\@normalsize\else\let\glb@currsize=\relax\selectfont +\fi + +\ifx\selectfont\undefined +\def\@singlespacing{% +\def\baselinestretch{1}\ifx\@currsize\normalsize\@normalsize\else\@currsize\fi% +} +\else +\def\@singlespacing{\def\baselinestretch{1}\let\glb@currsize=\relax\selectfont} +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Footnote size table and figure captions % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \footnotesize + \expandafter\let\expandafter\@tempa\csname @make#1caption\endcsname + \ifx\@tempa\relax\let\@tempa\@makecaption\fi + \@tempa{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} +% +% Here is the content of a .sty file containing definitions using the above +% hook. +% +% The following is the same as the \@makecaption in book.sty: +\long\def\@makefigurecaption#1#2{% + \vskip 10pt + \setbox\@tempboxa\hbox{#1 -- {\footnotesize #2}}% + \ifdim \wd\@tempboxa >\hsize #1 -- {\footnotesize #2}\par \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil} % + \fi + } +% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% END OF FILE bench.cls % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% From e441e0a2d42adaa5c190d7df53de15f2a351d422 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sun, 2 Jun 2024 20:09:49 -0400 Subject: [PATCH 138/173] compile manual with tectonic --- benchmarks/u_rho/Snakefile | 17 +++++++++++++++++ benchmarks/u_rho/config.yml | 1 + 2 files changed, 18 insertions(+) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index dc47204a..ca4121c5 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -1,6 +1,7 @@ import os from snakemake.remote.S3 import RemoteProvider as S3RemoteProvider +from snakemake.remote.HTTP import RemoteProvider as HTTPRemoteProvider S3 = S3RemoteProvider( @@ -15,6 +16,22 @@ rule uchannelrho_compile: ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho_cxx.so", +rule uchannelrho_compile_manual: + input: + tar=HTTPRemoteProvider().remote("https://github.com/tectonic-typesetting/tectonic/releases/download/tectonic%400.15.0/tectonic-0.15.0-x86_64-unknown-linux-musl.tar.gz"), + cls=workflow.source_path("bench.cls"), + tex=workflow.source_path("bench.tex"), + output: + temp("tectonic"), + cls_tmp=temp("bench.cls"), + pdf="results/bench.pdf", + shell: """ +tar zxf {input.tar} +cp {input.cls} {output.cls_tmp} # copy to local directory +./tectonic {input.tex} --outdir="$(dirname {output.pdf})" +""" + + rule uchannelrho_campaign_reco_get: input: lambda wildcards: S3.remote(f"eictest/EPIC/RECO/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 16ad1abb..d67df188 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -94,3 +94,4 @@ u_channel_rho:results: script: - collect_tests.py u_rho - echo "Finished collecting!" + - snakemake --cores 1 uchannelrho_compile_manual From 47cfb7cc302b69c6f796806af296106e59a60717 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sun, 2 Jun 2024 20:10:02 -0400 Subject: [PATCH 139/173] use time from any path --- benchmarks/u_rho/analyze.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/analyze.sh b/benchmarks/u_rho/analyze.sh index 4cda9071..388d0035 100644 --- a/benchmarks/u_rho/analyze.sh +++ b/benchmarks/u_rho/analyze.sh @@ -7,7 +7,7 @@ source benchmarks/u_rho/setup.config $* OUTPUT_PLOTS_DIR=sim_output/nocampaign mkdir -p ${OUTPUT_PLOTS_DIR} # Analyze -/usr/bin/time -v \ +command time -v \ root -l -b -q "benchmarks/u_rho/analysis/uchannelrho.cxx+(\"${REC_FILE}\",\"${OUTPUT_PLOTS_DIR}/plots.root\")" if [[ "$?" -ne "0" ]] ; then echo "ERROR analysis failed" From 86e0c09f7f77d9eb269fa55febe9a8fdc1d101a1 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Mon, 3 Jun 2024 11:59:39 -0700 Subject: [PATCH 140/173] Change location of latex compilation I want the pdf file explaining each of the benchmark figures to be located in the same artifacts folder as the figures --- benchmarks/u_rho/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index d67df188..8d7dfc9b 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -87,6 +87,7 @@ u_channel_rho:analyze: - echo "Finished, copying over json now" - cp benchmark_output/u_rho_eff.json results/u_rho/ - echo "Finished copying!" + - snakemake --cores 1 uchannelrho_compile_manual u_channel_rho:results: stage: collect @@ -94,4 +95,3 @@ u_channel_rho:results: script: - collect_tests.py u_rho - echo "Finished collecting!" - - snakemake --cores 1 uchannelrho_compile_manual From f22669e2519b42429232fcc7023c9fe5e0ef421e Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Mon, 3 Jun 2024 14:49:57 -0700 Subject: [PATCH 141/173] Test 10k events --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 66539cd9..c0bd1e87 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -3,7 +3,7 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=false -N_EVENTS=100 +N_EVENTS=10000 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From 218067632af8fbb4abbdaa62a689b0aa006ead63 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 7 Jun 2024 12:46:38 -0700 Subject: [PATCH 142/173] Update config.yml with May sim campaign --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 8d7dfc9b..343d66e8 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -77,8 +77,8 @@ u_channel_rho:analyze: - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign!" - - snakemake --cores 2 ../../sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - cp ../../sim_output/campaign_23.12.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - snakemake --cores 2 ../../sim_output/campaign_24.05.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - cp ../../sim_output/campaign_24.05.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else - echo "Not using simulation campaign!" - bash benchmarks/u_rho/analyze.sh From af2f2f9ac8aae7760f6db3e026366955e6cacf2d Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 7 Jun 2024 12:47:57 -0700 Subject: [PATCH 143/173] Update Snakefile with May sim campaign --- benchmarks/u_rho/Snakefile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index ca4121c5..73e471e4 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -34,9 +34,9 @@ cp {input.cls} {output.cls_tmp} # copy to local directory rule uchannelrho_campaign_reco_get: input: - lambda wildcards: S3.remote(f"eictest/EPIC/RECO/23.12.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), + lambda wildcards: S3.remote(f"eictest/EPIC/RECO/24.05.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), output: - "../../sim_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + "../../sim_output/campaign_24.05.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", shell: """ echo "Getting file for INDEX {wildcards.INDEX}" @@ -73,9 +73,9 @@ rule uchannelrho_analysis: input: script="benchmarks/u_rho/analysis/uchannelrho.cxx", #script_compiled=ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho_cxx.so", - data="../../sim_output/campaign_23.12.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + data="../../sim_output/campaign_24.05.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", output: - plots="../../sim_output/campaign_23.12.0_{INDEX}_eicrecon.edm4eic/plots.root", + plots="../../sim_output/campaign_24.05.0_{INDEX}_eicrecon.edm4eic/plots.root", shell: """ mkdir -p $(dirname "{output.plots}") @@ -85,15 +85,15 @@ root -l -b -q '{input.script}+("{input.data}","{output.plots}")' rule uchannelrho_combine: input: - #lambda wildcards: [f"../../sim_output/campaign_23.12.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], + #lambda wildcards: [f"../../sim_output/campaign_24.05.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], lambda wildcards: expand( - "../../sim_output/campaign_23.12.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", + "../../sim_output/campaign_24.05.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", INDEX=range(int(wildcards.N)), ), wildcard_constraints: N="\d+", output: - "../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + "../../sim_output/campaign_24.05.0_combined_{N}files_eicrecon.edm4eic.plots.root", shell: """ hadd {output} {input} @@ -106,9 +106,9 @@ ruleorder: uchannelrho_combine > uchannelrho_analysis rule uchannelrho_plots: input: script="benchmarks/u_rho/macros/plot_rho_physics_benchmark.C", - plots="../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots.root", + plots="../../sim_output/campaign_24.05.0_combined_{N}files_eicrecon.edm4eic.plots.root", output: - "../../sim_output/campaign_23.12.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", + "../../sim_output/campaign_24.05.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", shell: """ if [ ! -d "{input.plots}_figures" ]; then From 43dea4fa192d6a775c107072bf4243606e16fd35 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 7 Jun 2024 12:48:37 -0700 Subject: [PATCH 144/173] Test use May sim campaign --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index c0bd1e87..1a604452 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1,7 +1,7 @@ #!/bin/bash source strict-mode.sh -USE_SIMULATION_CAMPAIGN=false +USE_SIMULATION_CAMPAIGN=true N_EVENTS=10000 From fa91afe8dea45f1573c9b3b8fe5a76f0f19dcbf8 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 7 Jun 2024 13:02:27 -0700 Subject: [PATCH 145/173] Update config.yml with April campaign --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 343d66e8..2f8dca92 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -77,8 +77,8 @@ u_channel_rho:analyze: - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign!" - - snakemake --cores 2 ../../sim_output/campaign_24.05.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - cp ../../sim_output/campaign_24.05.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - snakemake --cores 2 ../../sim_output/campaign_24.04.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - cp ../../sim_output/campaign_24.04.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else - echo "Not using simulation campaign!" - bash benchmarks/u_rho/analyze.sh From ec78fcf8c98c14339ee7eaf986b75d91c43ab611 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 7 Jun 2024 13:03:50 -0700 Subject: [PATCH 146/173] Test April campaign --- benchmarks/u_rho/Snakefile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 73e471e4..66ba40c2 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -34,9 +34,9 @@ cp {input.cls} {output.cls_tmp} # copy to local directory rule uchannelrho_campaign_reco_get: input: - lambda wildcards: S3.remote(f"eictest/EPIC/RECO/24.05.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), + lambda wildcards: S3.remote(f"eictest/EPIC/RECO/24.04.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), output: - "../../sim_output/campaign_24.05.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + "../../sim_output/campaign_24.04.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", shell: """ echo "Getting file for INDEX {wildcards.INDEX}" @@ -73,9 +73,9 @@ rule uchannelrho_analysis: input: script="benchmarks/u_rho/analysis/uchannelrho.cxx", #script_compiled=ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho_cxx.so", - data="../../sim_output/campaign_24.05.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + data="../../sim_output/campaign_24.04.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", output: - plots="../../sim_output/campaign_24.05.0_{INDEX}_eicrecon.edm4eic/plots.root", + plots="../../sim_output/campaign_24.04.0_{INDEX}_eicrecon.edm4eic/plots.root", shell: """ mkdir -p $(dirname "{output.plots}") @@ -85,15 +85,15 @@ root -l -b -q '{input.script}+("{input.data}","{output.plots}")' rule uchannelrho_combine: input: - #lambda wildcards: [f"../../sim_output/campaign_24.05.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], + #lambda wildcards: [f"../../sim_output/campaign_24.04.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], lambda wildcards: expand( - "../../sim_output/campaign_24.05.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", + "../../sim_output/campaign_24.04.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", INDEX=range(int(wildcards.N)), ), wildcard_constraints: N="\d+", output: - "../../sim_output/campaign_24.05.0_combined_{N}files_eicrecon.edm4eic.plots.root", + "../../sim_output/campaign_24.04.0_combined_{N}files_eicrecon.edm4eic.plots.root", shell: """ hadd {output} {input} @@ -106,9 +106,9 @@ ruleorder: uchannelrho_combine > uchannelrho_analysis rule uchannelrho_plots: input: script="benchmarks/u_rho/macros/plot_rho_physics_benchmark.C", - plots="../../sim_output/campaign_24.05.0_combined_{N}files_eicrecon.edm4eic.plots.root", + plots="../../sim_output/campaign_24.04.0_combined_{N}files_eicrecon.edm4eic.plots.root", output: - "../../sim_output/campaign_24.05.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", + "../../sim_output/campaign_24.04.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", shell: """ if [ ! -d "{input.plots}_figures" ]; then From 66fc5f13985551282d7deb8c9445b9613fd8ec88 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Mon, 1 Jul 2024 14:51:03 -0700 Subject: [PATCH 147/173] Test ReconstructedChargedRealPIDParticles --- benchmarks/u_rho/analysis/uchannelrho.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index 00cf98dd..7f5612ee 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -66,15 +66,15 @@ TTreeReaderArray reco_y_array = {tree_reader, "MCParticles.endpoint.y"}; TTreeReaderArray reco_z_array = {tree_reader, "MCParticles.endpoint.z"};//= {tree_reader, "B0TrackerHits.position.z"}; // Reconstructed particles pz array for each reconstructed particle -TTreeReaderArray reco_px_array = {tree_reader, "ReconstructedChargedParticles.momentum.x"}; -TTreeReaderArray reco_py_array = {tree_reader, "ReconstructedChargedParticles.momentum.y"}; -TTreeReaderArray reco_pz_array = {tree_reader, "ReconstructedChargedParticles.momentum.z"}; -TTreeReaderArray reco_charge_array = {tree_reader, "ReconstructedChargedParticles.charge"}; +TTreeReaderArray reco_px_array = {tree_reader, "ReconstructedChargedRealPIDParticles.momentum.x"}; +TTreeReaderArray reco_py_array = {tree_reader, "ReconstructedChargedRealPIDParticles.momentum.y"}; +TTreeReaderArray reco_pz_array = {tree_reader, "ReconstructedChargedRealPIDParticles.momentum.z"}; +TTreeReaderArray reco_charge_array = {tree_reader, "ReconstructedChargedRealPIDParticles.charge"}; TTreeReaderArray rec_id = {tree_reader, "ReconstructedChargedParticleAssociations.recID"}; TTreeReaderArray sim_id = {tree_reader, "ReconstructedChargedParticleAssociations.simID"}; -TTreeReaderArray reco_PDG = {tree_reader,"ReconstructedChargedParticles.PDG"}; +TTreeReaderArray reco_PDG = {tree_reader,"ReconstructedChargedRealPIDParticles.PDG"}; TString output_name_dir = outputfile; cout << "Output file = " << output_name_dir << endl; From 95b18dab41d8dc27228966b7ac2298b6bfcdbb48 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Mon, 1 Jul 2024 14:51:47 -0700 Subject: [PATCH 148/173] Test on live data --- benchmarks/u_rho/setup.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 1a604452..bf421064 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1,9 +1,9 @@ #!/bin/bash source strict-mode.sh -USE_SIMULATION_CAMPAIGN=true +USE_SIMULATION_CAMPAIGN=false -N_EVENTS=10000 +N_EVENTS=1000 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From 09db4a9efa4c3ccf6485460163aa602ee3f475b0 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 2 Jul 2024 10:30:20 -0700 Subject: [PATCH 149/173] Test truth PID using chargedParticleAssociations --- benchmarks/u_rho/analysis/uchannelrho.cxx | 45 +++++++++++++++++------ 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index 7f5612ee..8d25fe24 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -66,15 +66,15 @@ TTreeReaderArray reco_y_array = {tree_reader, "MCParticles.endpoint.y"}; TTreeReaderArray reco_z_array = {tree_reader, "MCParticles.endpoint.z"};//= {tree_reader, "B0TrackerHits.position.z"}; // Reconstructed particles pz array for each reconstructed particle -TTreeReaderArray reco_px_array = {tree_reader, "ReconstructedChargedRealPIDParticles.momentum.x"}; -TTreeReaderArray reco_py_array = {tree_reader, "ReconstructedChargedRealPIDParticles.momentum.y"}; -TTreeReaderArray reco_pz_array = {tree_reader, "ReconstructedChargedRealPIDParticles.momentum.z"}; -TTreeReaderArray reco_charge_array = {tree_reader, "ReconstructedChargedRealPIDParticles.charge"}; - +TTreeReaderArray reco_px_array = {tree_reader, "ReconstructedChargedParticles.momentum.x"}; +TTreeReaderArray reco_py_array = {tree_reader, "ReconstructedChargedParticles.momentum.y"}; +TTreeReaderArray reco_pz_array = {tree_reader, "ReconstructedChargedParticles.momentum.z"}; +TTreeReaderArray reco_charge_array = {tree_reader, "ReconstructedChargedParticles.charge"}; + TTreeReaderArray rec_id = {tree_reader, "ReconstructedChargedParticleAssociations.recID"}; TTreeReaderArray sim_id = {tree_reader, "ReconstructedChargedParticleAssociations.simID"}; -TTreeReaderArray reco_PDG = {tree_reader,"ReconstructedChargedRealPIDParticles.PDG"}; +TTreeReaderArray reco_PDG = {tree_reader,"ReconstructedChargedParticles.PDG"}; TString output_name_dir = outputfile; cout << "Output file = " << output_name_dir << endl; @@ -189,6 +189,9 @@ while (tree_reader.Next()) { //MC level TLorentzVector scatMC(0,0,0,0); unsigned int mc_elect_index=-1; + unsigned int mc_pim_index=-1; + unsigned int mc_pip_index=-1; + unsigned int mc_pro_index=-1; double maxPt=-99.; for(unsigned int imc=0;imcFill(mc_endx_array[imc],mc_endy_array[imc]); h_VM_endpointZ_MC->Fill(mc_endz_array[imc]); @@ -212,12 +216,16 @@ while (tree_reader.Next()) { h_Acceptance_angular_MC->Fill(phi,1000.0*mctrk.Theta()); } if(mc_pdg_array[imc]==-211 && mc_genStatus_array[imc]==1){ + mc_pim_index=imc; piminusMC.SetVectM(mctrk,MASS_PION); h_VM_endpointXY_MC->Fill(mc_endx_array[imc],mc_endy_array[imc]); h_VM_endpointZ_MC->Fill(mc_endz_array[imc]); double phi = mctrk.Phi()>0 ? mctrk.Phi() : mctrk.Phi()+6.2831853; h_Acceptance_angular_MC->Fill(phi,1000.0*mctrk.Theta()); } + if(mc_pdg_array[imc]==2212 && mc_genStatus_array[imc]==1){ + mc_pro_index=imc; + } } vmMC=piplusMC+piminusMC; h_etavseta_MC->Fill(piplusMC.Eta(),piminusMC.Eta()); @@ -316,6 +324,15 @@ while (tree_reader.Next()) { rec_elect_index = rec_id[i]; } } + //association of rec level pions and proton + int rec_pim_index=-1; + int rec_pip_index=-1; + int rec_pro_index=-1; + for(unsigned int i=0;i0){ numpositivetracks++; - if(reco_PDG[itrk]==211){ + if(truthPID==211){ piplusREC.SetVectM(trk,MASS_PION); isPiPlusFound=true; } - if(reco_PDG[itrk]==2212){ + if(truthPID==2212){ protonREC.SetVectM(trk,MASS_PROTON); protonRECasifpion.SetVectM(trk,MASS_PION); isProtonFound=true; } } - if(reco_charge_array[itrk]<0){ piminusREC.SetVectM(trk,MASS_PION); if(reco_PDG[itrk]==-211)isPiMinusFound=true;} + if(reco_charge_array[itrk]<0){ piminusREC.SetVectM(trk,MASS_PION); if(truthPID==-211)isPiMinusFound=true;} //} double pt = sqrt(reco_px_array[itrk]*reco_px_array[itrk] + reco_py_array[itrk]*reco_py_array[itrk]); h_Acceptance_REC->Fill(fabs(trk.Eta()),pt); double phi = trk.Phi()>0 ? trk.Phi() : trk.Phi()+6.2831853; h_Acceptance_angular_REC->Fill(phi,1000.0*trk.Theta()); - if(reco_PDG[itrk]==211 || reco_PDG[itrk]==-211) h_Acceptance_angular_RECPI->Fill(phi,1000.0*trk.Theta()); - if(reco_PDG[itrk]==211) h_Acceptance_angular_RECPIP->Fill(phi,1000.0*trk.Theta()); - if(reco_PDG[itrk]==-211) h_Acceptance_angular_RECPIM->Fill(phi,1000.0*trk.Theta()); + if(truthPID==211 || truthPID==-211) h_Acceptance_angular_RECPI->Fill(phi,1000.0*trk.Theta()); + if(truthPID==211) h_Acceptance_angular_RECPIP->Fill(phi,1000.0*trk.Theta()); + if(truthPID==-211) h_Acceptance_angular_RECPIM->Fill(phi,1000.0*trk.Theta()); } } h_numPositiveTracks->Fill(numpositivetracks); From c14158253b60836cb8e4f5de0bc893c7fceea5b7 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 2 Jul 2024 10:30:54 -0700 Subject: [PATCH 150/173] Test on 100 samples --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index bf421064..66539cd9 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -3,7 +3,7 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=false -N_EVENTS=1000 +N_EVENTS=100 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From ae61bc9634bd9732be3709d74403a0b664b263ae Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Wed, 7 Aug 2024 21:12:04 -0700 Subject: [PATCH 151/173] Saeahram's fix to uchannelrho.cxx --- benchmarks/u_rho/analysis/uchannelrho.cxx | 46 +++++++++-------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index 8d25fe24..a3516500 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -70,10 +70,12 @@ TTreeReaderArray reco_px_array = {tree_reader, "ReconstructedChargedParti TTreeReaderArray reco_py_array = {tree_reader, "ReconstructedChargedParticles.momentum.y"}; TTreeReaderArray reco_pz_array = {tree_reader, "ReconstructedChargedParticles.momentum.z"}; TTreeReaderArray reco_charge_array = {tree_reader, "ReconstructedChargedParticles.charge"}; - + TTreeReaderArray rec_id = {tree_reader, "ReconstructedChargedParticleAssociations.recID"}; TTreeReaderArray sim_id = {tree_reader, "ReconstructedChargedParticleAssociations.simID"}; +TTreeReaderArray reco_type = {tree_reader,"ReconstructedChargedParticles.type"}; + TTreeReaderArray reco_PDG = {tree_reader,"ReconstructedChargedParticles.PDG"}; TString output_name_dir = outputfile; @@ -189,9 +191,6 @@ while (tree_reader.Next()) { //MC level TLorentzVector scatMC(0,0,0,0); unsigned int mc_elect_index=-1; - unsigned int mc_pim_index=-1; - unsigned int mc_pip_index=-1; - unsigned int mc_pro_index=-1; double maxPt=-99.; for(unsigned int imc=0;imcFill(mc_endx_array[imc],mc_endy_array[imc]); h_VM_endpointZ_MC->Fill(mc_endz_array[imc]); @@ -216,16 +214,12 @@ while (tree_reader.Next()) { h_Acceptance_angular_MC->Fill(phi,1000.0*mctrk.Theta()); } if(mc_pdg_array[imc]==-211 && mc_genStatus_array[imc]==1){ - mc_pim_index=imc; piminusMC.SetVectM(mctrk,MASS_PION); h_VM_endpointXY_MC->Fill(mc_endx_array[imc],mc_endy_array[imc]); h_VM_endpointZ_MC->Fill(mc_endz_array[imc]); double phi = mctrk.Phi()>0 ? mctrk.Phi() : mctrk.Phi()+6.2831853; h_Acceptance_angular_MC->Fill(phi,1000.0*mctrk.Theta()); } - if(mc_pdg_array[imc]==2212 && mc_genStatus_array[imc]==1){ - mc_pro_index=imc; - } } vmMC=piplusMC+piminusMC; h_etavseta_MC->Fill(piplusMC.Eta(),piminusMC.Eta()); @@ -324,15 +318,6 @@ while (tree_reader.Next()) { rec_elect_index = rec_id[i]; } } - //association of rec level pions and proton - int rec_pim_index=-1; - int rec_pip_index=-1; - int rec_pro_index=-1; - for(unsigned int i=0;ipi+pi- daughters; @@ -388,25 +376,26 @@ while (tree_reader.Next()) { //if(fabs(trk.Eta())<3.0){ if(reco_charge_array[itrk]>0){ numpositivetracks++; - if(truthPID==211){ + if ((sim_id[itrk - failed]==4 || sim_id[itrk - failed]==5) && reco_charge_array[itrk - failed]==1){ + // if(reco_PDG[itrk]==211){ piplusREC.SetVectM(trk,MASS_PION); isPiPlusFound=true; } - if(truthPID==2212){ + if(sim_id[itrk - failed]==3){ protonREC.SetVectM(trk,MASS_PROTON); protonRECasifpion.SetVectM(trk,MASS_PION); isProtonFound=true; } } - if(reco_charge_array[itrk]<0){ piminusREC.SetVectM(trk,MASS_PION); if(truthPID==-211)isPiMinusFound=true;} + if(reco_charge_array[itrk]<0){ piminusREC.SetVectM(trk,MASS_PION); if((sim_id[itrk - failed]==4 || sim_id[itrk - failed]==5) && reco_charge_array[itrk - failed]==-1)isPiMinusFound=true;} //} double pt = sqrt(reco_px_array[itrk]*reco_px_array[itrk] + reco_py_array[itrk]*reco_py_array[itrk]); h_Acceptance_REC->Fill(fabs(trk.Eta()),pt); double phi = trk.Phi()>0 ? trk.Phi() : trk.Phi()+6.2831853; h_Acceptance_angular_REC->Fill(phi,1000.0*trk.Theta()); - if(truthPID==211 || truthPID==-211) h_Acceptance_angular_RECPI->Fill(phi,1000.0*trk.Theta()); - if(truthPID==211) h_Acceptance_angular_RECPIP->Fill(phi,1000.0*trk.Theta()); - if(truthPID==-211) h_Acceptance_angular_RECPIM->Fill(phi,1000.0*trk.Theta()); + if(sim_id[itrk - failed]==4 || sim_id[itrk - failed]==5) h_Acceptance_angular_RECPI->Fill(phi,1000.0*trk.Theta()); + if((sim_id[itrk - failed]==4 || sim_id[itrk - failed]==5) && reco_charge_array[itrk - failed]==1) h_Acceptance_angular_RECPIP->Fill(phi,1000.0*trk.Theta()); + if((sim_id[itrk - failed]==4 || sim_id[itrk - failed]==5) && reco_charge_array[itrk - failed]==-1) h_Acceptance_angular_RECPIM->Fill(phi,1000.0*trk.Theta()); } } h_numPositiveTracks->Fill(numpositivetracks); @@ -575,3 +564,4 @@ output->Close(); return 0; } + From 17c9415d5463faa7f1ff87dcab1ee9f22c9cfbfb Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 8 Aug 2024 11:36:50 -0700 Subject: [PATCH 152/173] Try 1000 events --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 66539cd9..bf421064 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -3,7 +3,7 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=false -N_EVENTS=100 +N_EVENTS=1000 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From 102f7b8eff1d29fd7de7505b9f6594349519376d Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 8 Aug 2024 14:27:31 -0700 Subject: [PATCH 153/173] Test simulation campaign --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index bf421064..4bdf2bab 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1,7 +1,7 @@ #!/bin/bash source strict-mode.sh -USE_SIMULATION_CAMPAIGN=false +USE_SIMULATION_CAMPAIGN=true N_EVENTS=1000 From fe4daeea029e80ce2b917f2b011e6aa1e0c39f30 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 8 Aug 2024 14:29:01 -0700 Subject: [PATCH 154/173] Update to July sim campaign --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index 2f8dca92..bdc8e2ab 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -77,8 +77,8 @@ u_channel_rho:analyze: - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign!" - - snakemake --cores 2 ../../sim_output/campaign_24.04.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - cp ../../sim_output/campaign_24.04.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - snakemake --cores 2 ../../sim_output/campaign_24.07.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - cp ../../sim_output/campaign_24.07.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else - echo "Not using simulation campaign!" - bash benchmarks/u_rho/analyze.sh From cb835596f7540b090e9f6412249439d772088d2f Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 8 Aug 2024 14:30:32 -0700 Subject: [PATCH 155/173] Update Snakefile to July campaign --- benchmarks/u_rho/Snakefile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/benchmarks/u_rho/Snakefile b/benchmarks/u_rho/Snakefile index 66ba40c2..e6323337 100644 --- a/benchmarks/u_rho/Snakefile +++ b/benchmarks/u_rho/Snakefile @@ -34,9 +34,9 @@ cp {input.cls} {output.cls_tmp} # copy to local directory rule uchannelrho_campaign_reco_get: input: - lambda wildcards: S3.remote(f"eictest/EPIC/RECO/24.04.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), + lambda wildcards: S3.remote(f"eictest/EPIC/RECO/24.07.0/epic_craterlake/EXCLUSIVE/UCHANNEL_RHO/10x100/rho_10x100_uChannel_Q2of0to10_hiDiv.{wildcards.INDEX}.eicrecon.tree.edm4eic.root"), output: - "../../sim_output/campaign_24.04.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + "../../sim_output/campaign_24.07.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", shell: """ echo "Getting file for INDEX {wildcards.INDEX}" @@ -73,9 +73,9 @@ rule uchannelrho_analysis: input: script="benchmarks/u_rho/analysis/uchannelrho.cxx", #script_compiled=ROOT_BUILD_DIR_PREFIX + "benchmarks/u_rho/analysis/uchannelrho_cxx.so", - data="../../sim_output/campaign_24.04.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", + data="../../sim_output/campaign_24.07.0_rho_10x100_uChannel_Q2of0to10_hiDiv_{INDEX}_eicrecon.edm4eic.root", output: - plots="../../sim_output/campaign_24.04.0_{INDEX}_eicrecon.edm4eic/plots.root", + plots="../../sim_output/campaign_24.07.0_{INDEX}_eicrecon.edm4eic/plots.root", shell: """ mkdir -p $(dirname "{output.plots}") @@ -85,15 +85,15 @@ root -l -b -q '{input.script}+("{input.data}","{output.plots}")' rule uchannelrho_combine: input: - #lambda wildcards: [f"../../sim_output/campaign_24.04.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], + #lambda wildcards: [f"../../sim_output/campaign_24.07.0_{ix:04d}_eicrecon.edm4eic/plots.root" for ix in range(int(wildcards.NUM_FILES))], lambda wildcards: expand( - "../../sim_output/campaign_24.04.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", + "../../sim_output/campaign_24.07.0_{INDEX:04d}_eicrecon.edm4eic/plots.root", INDEX=range(int(wildcards.N)), ), wildcard_constraints: N="\d+", output: - "../../sim_output/campaign_24.04.0_combined_{N}files_eicrecon.edm4eic.plots.root", + "../../sim_output/campaign_24.07.0_combined_{N}files_eicrecon.edm4eic.plots.root", shell: """ hadd {output} {input} @@ -106,9 +106,9 @@ ruleorder: uchannelrho_combine > uchannelrho_analysis rule uchannelrho_plots: input: script="benchmarks/u_rho/macros/plot_rho_physics_benchmark.C", - plots="../../sim_output/campaign_24.04.0_combined_{N}files_eicrecon.edm4eic.plots.root", + plots="../../sim_output/campaign_24.07.0_combined_{N}files_eicrecon.edm4eic.plots.root", output: - "../../sim_output/campaign_24.04.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", + "../../sim_output/campaign_24.07.0_combined_{N}files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf", shell: """ if [ ! -d "{input.plots}_figures" ]; then From e939bc573866a54f1789dc834751bda720f35f5c Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 8 Aug 2024 14:40:07 -0700 Subject: [PATCH 156/173] Update z axis label sizes --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 1bcb24aa..ef6e2d1d 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -360,13 +360,13 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo h_effEtaPtPip ->GetXaxis()->SetLabelSize(h_effEtaPtPip ->GetXaxis()->GetLabelSize()*1.8); h_effEtaPtPim ->GetXaxis()->SetLabelSize(h_effEtaPtPim ->GetXaxis()->GetLabelSize()*1.8); h_effEtaPtPi ->GetYaxis()->SetLabelSize(h_effEtaPtPi ->GetYaxis()->GetLabelSize()*1.8); - h_effEtaPtPim ->GetZaxis()->SetLabelSize(h_effEtaPtPim ->GetZaxis()->GetLabelSize()*1.8); + h_effEtaPtPim ->GetZaxis()->SetLabelSize(h_effEtaPtPim ->GetZaxis()->GetLabelSize()*0.8); h_effEtaPtPim ->GetZaxis()->SetTitleSize(h_effEtaPtPim ->GetZaxis()->GetTitleSize()*1.8); h_effPhiEtaPi ->GetXaxis()->SetLabelSize(h_effPhiEtaPi ->GetXaxis()->GetLabelSize()*1.8); h_effPhiEtaPip->GetXaxis()->SetLabelSize(h_effPhiEtaPip->GetXaxis()->GetLabelSize()*1.8); h_effPhiEtaPim->GetXaxis()->SetLabelSize(h_effPhiEtaPim->GetXaxis()->GetLabelSize()*1.8); h_effPhiEtaPi ->GetYaxis()->SetLabelSize(h_effPhiEtaPi ->GetYaxis()->GetLabelSize()*1.8); - h_effPhiEtaPim->GetZaxis()->SetLabelSize(h_effPhiEtaPim->GetZaxis()->GetLabelSize()*1.8); + h_effPhiEtaPim->GetZaxis()->SetLabelSize(h_effPhiEtaPim->GetZaxis()->GetLabelSize()*0.8); h_effPhiEtaPim->GetZaxis()->SetTitleSize(h_effPhiEtaPim->GetZaxis()->GetTitleSize()*1.8); fixedFontHist1D(h_effEtaPtPi,1.,1.2); @@ -553,13 +553,13 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo h_RecoMomPip ->GetXaxis()->SetLabelSize(h_RecoMomPip ->GetXaxis()->GetLabelSize()*1.8); h_RecoMomPim ->GetXaxis()->SetLabelSize(h_RecoMomPim ->GetXaxis()->GetLabelSize()*1.8); h_RecoMomPi ->GetYaxis()->SetLabelSize(h_RecoMomPi ->GetYaxis()->GetLabelSize()*1.8); - h_RecoMomPim ->GetZaxis()->SetLabelSize(h_RecoMomPim ->GetZaxis()->GetLabelSize()*1.8); + h_RecoMomPim ->GetZaxis()->SetLabelSize(h_RecoMomPim ->GetZaxis()->GetLabelSize()*0.8); h_RecoMomPim ->GetZaxis()->SetTitleSize(h_RecoMomPim ->GetZaxis()->GetTitleSize()*1.8); h_RecoTransMomPi ->GetXaxis()->SetLabelSize(h_RecoTransMomPi ->GetXaxis()->GetLabelSize()*1.8); h_RecoTransMomPip->GetXaxis()->SetLabelSize(h_RecoTransMomPip->GetXaxis()->GetLabelSize()*1.8); h_RecoTransMomPim->GetXaxis()->SetLabelSize(h_RecoTransMomPim->GetXaxis()->GetLabelSize()*1.8); h_RecoTransMomPi ->GetYaxis()->SetLabelSize(h_RecoTransMomPi ->GetYaxis()->GetLabelSize()*1.8); - h_RecoTransMomPim->GetZaxis()->SetLabelSize(h_RecoTransMomPim->GetZaxis()->GetLabelSize()*1.8); + h_RecoTransMomPim->GetZaxis()->SetLabelSize(h_RecoTransMomPim->GetZaxis()->GetLabelSize()*0.8); h_RecoTransMomPim->GetZaxis()->SetTitleSize(h_RecoTransMomPim->GetZaxis()->GetTitleSize()*1.8); fixedFontHist1D(h_RecoMomPi,1.,1.2); From ad0641f2c932ce46c1c0f68a8493691361a6a47d Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 8 Aug 2024 20:04:00 -0700 Subject: [PATCH 157/173] July campaign has fewer files. Reduce to 45 --- benchmarks/u_rho/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/config.yml b/benchmarks/u_rho/config.yml index bdc8e2ab..2a4684d9 100644 --- a/benchmarks/u_rho/config.yml +++ b/benchmarks/u_rho/config.yml @@ -77,8 +77,8 @@ u_channel_rho:analyze: - source $config_file - if [ "$USE_SIMULATION_CAMPAIGN" = true ] ; then - echo "Using simulation campaign!" - - snakemake --cores 2 ../../sim_output/campaign_24.07.0_combined_60files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf - - cp ../../sim_output/campaign_24.07.0_combined_60files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ + - snakemake --cores 2 ../../sim_output/campaign_24.07.0_combined_45files_eicrecon.edm4eic.plots_figures/benchmark_rho_mass.pdf + - cp ../../sim_output/campaign_24.07.0_combined_45files_eicrecon.edm4eic.plots_figures/*.pdf results/u_rho/ - else - echo "Not using simulation campaign!" - bash benchmarks/u_rho/analyze.sh From a98485ef411677cfe2c4145b6e84f0ac27eed403 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 8 Aug 2024 21:27:30 -0700 Subject: [PATCH 158/173] Editing benchmark plot labels --- .../u_rho/macros/plot_rho_physics_benchmark.C | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index ef6e2d1d..2c61ad04 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -360,14 +360,14 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo h_effEtaPtPip ->GetXaxis()->SetLabelSize(h_effEtaPtPip ->GetXaxis()->GetLabelSize()*1.8); h_effEtaPtPim ->GetXaxis()->SetLabelSize(h_effEtaPtPim ->GetXaxis()->GetLabelSize()*1.8); h_effEtaPtPi ->GetYaxis()->SetLabelSize(h_effEtaPtPi ->GetYaxis()->GetLabelSize()*1.8); - h_effEtaPtPim ->GetZaxis()->SetLabelSize(h_effEtaPtPim ->GetZaxis()->GetLabelSize()*0.8); - h_effEtaPtPim ->GetZaxis()->SetTitleSize(h_effEtaPtPim ->GetZaxis()->GetTitleSize()*1.8); + h_effEtaPtPim ->GetZaxis()->SetLabelSize(h_effEtaPtPim ->GetZaxis()->GetLabelSize()*0.5); + h_effEtaPtPim ->GetZaxis()->SetTitleSize(h_effEtaPtPim ->GetZaxis()->GetTitleSize()*0.5); h_effPhiEtaPi ->GetXaxis()->SetLabelSize(h_effPhiEtaPi ->GetXaxis()->GetLabelSize()*1.8); h_effPhiEtaPip->GetXaxis()->SetLabelSize(h_effPhiEtaPip->GetXaxis()->GetLabelSize()*1.8); h_effPhiEtaPim->GetXaxis()->SetLabelSize(h_effPhiEtaPim->GetXaxis()->GetLabelSize()*1.8); h_effPhiEtaPi ->GetYaxis()->SetLabelSize(h_effPhiEtaPi ->GetYaxis()->GetLabelSize()*1.8); - h_effPhiEtaPim->GetZaxis()->SetLabelSize(h_effPhiEtaPim->GetZaxis()->GetLabelSize()*0.8); - h_effPhiEtaPim->GetZaxis()->SetTitleSize(h_effPhiEtaPim->GetZaxis()->GetTitleSize()*1.8); + h_effPhiEtaPim->GetZaxis()->SetLabelSize(h_effPhiEtaPim->GetZaxis()->GetLabelSize()*0.5); + h_effPhiEtaPim->GetZaxis()->SetTitleSize(h_effPhiEtaPim->GetZaxis()->GetTitleSize()*0.5); fixedFontHist1D(h_effEtaPtPi,1.,1.2); fixedFontHist1D(h_effEtaPtPip,1.,1.2); @@ -449,8 +449,12 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo pimlabel->SetTextColor(kBlack); pimlabel->Draw("same"); TLatex* r43fig5 = new TLatex(0.68,0.93, "EPIC"); - r43fig5->SetNDC(); - r43fig5->SetTextSize(0.07); + //r43fig5->SetNDC(); + //r43fig5->SetTextSize(0.07); + r43fig5->SetNDC(); + r43fig5->SetTextSize(15); + r43fig5->SetTextFont(43); + r43fig5->SetTextColor(kBlack); r43fig5->Draw("same"); TLatex* r44fig5b = new TLatex(0.01, 0.93, "W>2 GeV"); r44fig5b->SetNDC(); @@ -553,14 +557,14 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo h_RecoMomPip ->GetXaxis()->SetLabelSize(h_RecoMomPip ->GetXaxis()->GetLabelSize()*1.8); h_RecoMomPim ->GetXaxis()->SetLabelSize(h_RecoMomPim ->GetXaxis()->GetLabelSize()*1.8); h_RecoMomPi ->GetYaxis()->SetLabelSize(h_RecoMomPi ->GetYaxis()->GetLabelSize()*1.8); - h_RecoMomPim ->GetZaxis()->SetLabelSize(h_RecoMomPim ->GetZaxis()->GetLabelSize()*0.8); - h_RecoMomPim ->GetZaxis()->SetTitleSize(h_RecoMomPim ->GetZaxis()->GetTitleSize()*1.8); + h_RecoMomPim ->GetZaxis()->SetLabelSize(h_RecoMomPim ->GetZaxis()->GetLabelSize()*0.5); + h_RecoMomPim ->GetZaxis()->SetTitleSize(h_RecoMomPim ->GetZaxis()->GetTitleSize()*0.5); h_RecoTransMomPi ->GetXaxis()->SetLabelSize(h_RecoTransMomPi ->GetXaxis()->GetLabelSize()*1.8); h_RecoTransMomPip->GetXaxis()->SetLabelSize(h_RecoTransMomPip->GetXaxis()->GetLabelSize()*1.8); h_RecoTransMomPim->GetXaxis()->SetLabelSize(h_RecoTransMomPim->GetXaxis()->GetLabelSize()*1.8); h_RecoTransMomPi ->GetYaxis()->SetLabelSize(h_RecoTransMomPi ->GetYaxis()->GetLabelSize()*1.8); - h_RecoTransMomPim->GetZaxis()->SetLabelSize(h_RecoTransMomPim->GetZaxis()->GetLabelSize()*0.8); - h_RecoTransMomPim->GetZaxis()->SetTitleSize(h_RecoTransMomPim->GetZaxis()->GetTitleSize()*1.8); + h_RecoTransMomPim->GetZaxis()->SetLabelSize(h_RecoTransMomPim->GetZaxis()->GetLabelSize()*0.5); + h_RecoTransMomPim->GetZaxis()->SetTitleSize(h_RecoTransMomPim->GetZaxis()->GetTitleSize()*0.5); fixedFontHist1D(h_RecoMomPi,1.,1.2); fixedFontHist1D(h_RecoMomPip,1.,1.2); From 46d8e3f9745267961877a8c8d0c5d79cfa3e21fc Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 12:32:14 -0700 Subject: [PATCH 159/173] Update EPIC label --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 2c61ad04..f40e7a48 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -448,7 +448,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo pimlabel->SetTextFont(43); pimlabel->SetTextColor(kBlack); pimlabel->Draw("same"); - TLatex* r43fig5 = new TLatex(0.68,0.93, "EPIC"); + TLatex* r43fig5 = new TLatex(0.66,0.93, "#bf{EPIC}"); //r43fig5->SetNDC(); //r43fig5->SetTextSize(0.07); r43fig5->SetNDC(); From b4a6f2d0f44f5f491b2d923c9eaa2a8189ed3375 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 12:45:16 -0700 Subject: [PATCH 160/173] Get rid of dN/dt plot --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index f40e7a48..5eb65143 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -141,8 +141,8 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo w7->Draw("same"); //c1->Print("./sim_output/figures/benchmark_rho_dsigmadt.pdf"); - TString figure1name = figure_directory+"/benchmark_rho_dsigmadt.pdf"; - c1->Print(figure1name); + /*TString figure1name = figure_directory+"/benchmark_rho_dsigmadt.pdf"; + c1->Print(figure1name);*/ TCanvas* c2 = new TCanvas("c2","c2",1,1,600,600); gPad->SetTicks(); From 33384597f1b662940ae9b09ece3fea2dc64379cd Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 13:06:07 -0700 Subject: [PATCH 161/173] Test proton reco fix --- benchmarks/u_rho/analysis/uchannelrho.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/analysis/uchannelrho.cxx b/benchmarks/u_rho/analysis/uchannelrho.cxx index a3516500..b787421a 100644 --- a/benchmarks/u_rho/analysis/uchannelrho.cxx +++ b/benchmarks/u_rho/analysis/uchannelrho.cxx @@ -381,7 +381,7 @@ while (tree_reader.Next()) { piplusREC.SetVectM(trk,MASS_PION); isPiPlusFound=true; } - if(sim_id[itrk - failed]==3){ + if(sim_id[itrk - failed]==6){ protonREC.SetVectM(trk,MASS_PROTON); protonRECasifpion.SetVectM(trk,MASS_PION); isProtonFound=true; From 72d732487574992f3aa1a35006e1e16b935fefa6 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 13:16:55 -0700 Subject: [PATCH 162/173] Get rid of dN/dt plot second attempt --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 5eb65143..500c97df 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -141,8 +141,8 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo w7->Draw("same"); //c1->Print("./sim_output/figures/benchmark_rho_dsigmadt.pdf"); - /*TString figure1name = figure_directory+"/benchmark_rho_dsigmadt.pdf"; - c1->Print(figure1name);*/ + TString figure1name = figure_directory+"/benchmark_rho_dsigmadt.pdf"; + //c1->Print(figure1name); TCanvas* c2 = new TCanvas("c2","c2",1,1,600,600); gPad->SetTicks(); From 73064ef605be830218ed13b6ebad26257405f861 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 13:19:56 -0700 Subject: [PATCH 163/173] Update bench status test --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 500c97df..d1e80979 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -735,7 +735,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo TString figure6name = figure_directory+"/benchmark_rho_recoquality.pdf"; c6->Print(figure6name); - double rhorecoeff = thiseff/500.0; + double rhorecoeff = thiseff/100.0; setbenchstatus(rhorecoeff); } From 37a62d1fbd785168e706547f2c186fc62dde96a5 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 13:47:54 -0700 Subject: [PATCH 164/173] Update bench plot labels --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index d1e80979..85cc94fd 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -112,9 +112,10 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo r42->SetTextColor(kBlack); r42->Draw("same"); - TLatex* r43 = new TLatex(0.9,0.91, "EPIC"); + TLatex* r43 = new TLatex(0.9,0.91, "#bf{EPIC}"); r43->SetNDC(); - r43->SetTextSize(0.04); + //r43->SetTextSize(0.04); + r43->SetTextSize(22); r43->Draw("same"); TLatex* r44 = new TLatex(0.53, 0.78, "10^{-3}2 GeV"); @@ -124,7 +125,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo r44->SetTextColor(kBlack); r44->Draw("same"); - TLatex* r44_2 = new TLatex(0.5, 0.83, ""+vm_label+" #rightarrow "+daug_label+" eSTARlight"); + TLatex* r44_2 = new TLatex(0.5, 0.83, ""+vm_label+" #rightarrow "+daug_label+" eSTARlightfjdklaf"); r44_2->SetNDC(); r44_2->SetTextSize(30); r44_2->SetTextFont(43); @@ -141,13 +142,14 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo w7->Draw("same"); //c1->Print("./sim_output/figures/benchmark_rho_dsigmadt.pdf"); - TString figure1name = figure_directory+"/benchmark_rho_dsigmadt.pdf"; + //TString figure1name = figure_directory+"/benchmark_rho_dsigmadt.pdf"; //c1->Print(figure1name); TCanvas* c2 = new TCanvas("c2","c2",1,1,600,600); gPad->SetTicks(); gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); + gPad->SetTopMargin(0.15); gPad->SetRightMargin(0.01); TH1D* base2 = makeHist("base2", "", "#pi^{#plus}#pi^{#minus} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); base2->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC->GetMaximum())); @@ -213,6 +215,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo gPad->SetLogy(1); gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); + gPad->SetTopMargin(0.15); gPad->SetRightMargin(0.01); TH1D* base3 = makeHist("base3", "", "-#it{u} (GeV^{2})", "dN/d#it{u} (GeV^{-2} scaled)", 100,-0.25,3.05,kBlack); base3->GetYaxis()->SetRangeUser(0.5, 100*(h_dNdu_MC->GetMaximum())); @@ -283,6 +286,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo gPad->SetTicks(); gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); + gPad->SetTopMargin(0.15); gPad->SetRightMargin(0.01); TH1D* base4 = makeHist("base4", "", "#pi^{#plus}#pi^{#minus} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); base4->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC_etacut->GetMaximum())); From 2fc026dd61d4a767705ec0c1dafaf0175b85c0b7 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 14:06:33 -0700 Subject: [PATCH 165/173] Update plots top margin --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 85cc94fd..50c8754c 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -125,7 +125,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo r44->SetTextColor(kBlack); r44->Draw("same"); - TLatex* r44_2 = new TLatex(0.5, 0.83, ""+vm_label+" #rightarrow "+daug_label+" eSTARlightfjdklaf"); + TLatex* r44_2 = new TLatex(0.5, 0.83, ""+vm_label+" #rightarrow "+daug_label+" eSTARlight"); r44_2->SetNDC(); r44_2->SetTextSize(30); r44_2->SetTextFont(43); @@ -149,7 +149,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo gPad->SetTicks(); gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); - gPad->SetTopMargin(0.15); + gPad->SetTopMargin(0.05); gPad->SetRightMargin(0.01); TH1D* base2 = makeHist("base2", "", "#pi^{#plus}#pi^{#minus} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); base2->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC->GetMaximum())); @@ -215,7 +215,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo gPad->SetLogy(1); gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); - gPad->SetTopMargin(0.15); + gPad->SetTopMargin(0.10); gPad->SetRightMargin(0.01); TH1D* base3 = makeHist("base3", "", "-#it{u} (GeV^{2})", "dN/d#it{u} (GeV^{-2} scaled)", 100,-0.25,3.05,kBlack); base3->GetYaxis()->SetRangeUser(0.5, 100*(h_dNdu_MC->GetMaximum())); @@ -286,7 +286,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo gPad->SetTicks(); gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); - gPad->SetTopMargin(0.15); + gPad->SetTopMargin(0.07); gPad->SetRightMargin(0.01); TH1D* base4 = makeHist("base4", "", "#pi^{#plus}#pi^{#minus} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); base4->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC_etacut->GetMaximum())); From 1700b7758594efb13c72f37d28dd85e17ec73cb8 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 14:19:32 -0700 Subject: [PATCH 166/173] Final top margin fix --- benchmarks/u_rho/macros/plot_rho_physics_benchmark.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C index 50c8754c..f868ccbb 100644 --- a/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C +++ b/benchmarks/u_rho/macros/plot_rho_physics_benchmark.C @@ -149,7 +149,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo gPad->SetTicks(); gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); - gPad->SetTopMargin(0.05); + gPad->SetTopMargin(0.10); gPad->SetRightMargin(0.01); TH1D* base2 = makeHist("base2", "", "#pi^{#plus}#pi^{#minus} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); base2->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC->GetMaximum())); @@ -286,7 +286,7 @@ void plot_rho_physics_benchmark(TString filename="./sim_output/plot_combined.roo gPad->SetTicks(); gPad->SetLeftMargin(0.18); gPad->SetBottomMargin(0.18); - gPad->SetTopMargin(0.07); + gPad->SetTopMargin(0.10); gPad->SetRightMargin(0.01); TH1D* base4 = makeHist("base4", "", "#pi^{#plus}#pi^{#minus} inv. mass (GeV)", "counts", 100,0.05,2.05,kBlack); base4->GetYaxis()->SetRangeUser(0.5, 1.2*(h_VM_mass_MC_etacut->GetMaximum())); From 2a7aa709297a123fb0c7daca2eacc4f1debcc6f1 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Fri, 9 Aug 2024 14:35:14 -0700 Subject: [PATCH 167/173] Test bench with 5k events --- benchmarks/u_rho/setup.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 4bdf2bab..34bed0eb 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1,9 +1,9 @@ #!/bin/bash source strict-mode.sh -USE_SIMULATION_CAMPAIGN=true +USE_SIMULATION_CAMPAIGN=false -N_EVENTS=1000 +N_EVENTS=5000 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From 4cd11cd80ddfa7c660d817e6c84f072bbba38ca0 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 13 Aug 2024 14:54:16 -0700 Subject: [PATCH 168/173] Hello California! (and John!) Demonstration of benchmark for CA Consortium Meeting, using simulation campaign --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 34bed0eb..74dd0201 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -1,7 +1,7 @@ #!/bin/bash source strict-mode.sh -USE_SIMULATION_CAMPAIGN=false +USE_SIMULATION_CAMPAIGN=true N_EVENTS=5000 From 4e5830f02b4674ebc1c4d4707ec0e0e273799686 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 17 Sep 2024 16:28:10 -0700 Subject: [PATCH 169/173] Hello tutorial attendees! --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 74dd0201..7d27dcfc 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -3,7 +3,7 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=true -N_EVENTS=5000 +N_EVENTS=6000 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From 2dc2aeda1b7cd00ffcac7f6ad933e73fd249ffad Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Wed, 18 Sep 2024 20:56:18 -0700 Subject: [PATCH 170/173] Hello tutorial attendees! :) --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 7d27dcfc..74dd0201 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -3,7 +3,7 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=true -N_EVENTS=6000 +N_EVENTS=5000 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From 69e8fc4dc992dce6e2bb0e895c56a5cbf7e03147 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Thu, 19 Sep 2024 15:38:26 -0700 Subject: [PATCH 171/173] Hello tutorial attendees! --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 74dd0201..4bdf2bab 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -3,7 +3,7 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=true -N_EVENTS=5000 +N_EVENTS=1000 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From 10644c4281ac1718579bd78a708d44fe6adf9f43 Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Mon, 30 Sep 2024 21:19:06 -0700 Subject: [PATCH 172/173] Try to trigger pipelines --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index 4bdf2bab..b64c1f68 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -3,7 +3,7 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=true -N_EVENTS=1000 +N_EVENTS=500 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root From 9f28e0c2744429bcb9e4cecf830c0b0bf519edba Mon Sep 17 00:00:00 2001 From: Zachary Sweger Date: Tue, 1 Oct 2024 20:35:42 -0700 Subject: [PATCH 173/173] Trigger pipelines again --- benchmarks/u_rho/setup.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/u_rho/setup.config b/benchmarks/u_rho/setup.config index b64c1f68..5b091d4b 100644 --- a/benchmarks/u_rho/setup.config +++ b/benchmarks/u_rho/setup.config @@ -3,7 +3,7 @@ source strict-mode.sh USE_SIMULATION_CAMPAIGN=true -N_EVENTS=500 +N_EVENTS=600 FILE_BASE=sim_output/rho_10x100_uChannel_Q2of0to10_hiDiv.hepmc3.tree #INPUT_FILE=${FILE_BASE}.root