diff --git a/README.md b/README.md index f1663ba3d91b95326992dd6ca5b1248146e482d0..4186a2780d7855892bfb46c0009f13c712283f97 100644 --- a/README.md +++ b/README.md @@ -31,19 +31,18 @@ See [common_bench](https://eicweb.phy.anl.gov/EIC/benchmarks/common_bench) for d Here we setup to use our local build of the `juggler` library. First set some environment variables. ``` -export JUGGLER_INSTALL_PREFIX=$HOME/stow/juggler # if developing algorithms +export JUGGLER_INSTALL_PREFIX=/usr/local export JUGGLER_DETECTOR=athena # athena is the default export BEAMLINE_CONFIG=ip6 # ip6 is the default ``` ``` -git@eicweb.phy.anl.gov:EIC/benchmarks/physics_benchmarks.git && cd physics_benchmarks +git clone https://eicweb.phy.anl.gov/EIC/benchmarks/physics_benchmarks.git && cd physics_benchmarks git clone https://eicweb.phy.anl.gov/EIC/benchmarks/common_bench.git setup source setup/bin/env.sh && ./setup/bin/install_common.sh source .local/bin/env.sh && build_detector.sh mkdir_local_data_link sim_output -mkdir -p results -mkdir -p config +mkdir -p results config ``` diff --git a/benchmarks/dvcs/config.yml b/benchmarks/dvcs/config.yml index 9b00dfebafd6f75f413700ef4f9d7565c1bf3957..204101bcc678c86c26faa21564afcef11dc5c33f 100644 --- a/benchmarks/dvcs/config.yml +++ b/benchmarks/dvcs/config.yml @@ -2,7 +2,7 @@ dvcs:process: stage: process extends: .phy_benchmark tags: - - s3 + - phy needs: ["common:detector"] script: - compile_analyses.py dvcs diff --git a/benchmarks/synchrotron/analysis/synchrotron_sim.cxx b/benchmarks/synchrotron/analysis/synchrotron_sim.cxx index 00b0835b404c389f7b4b794758378842b8498dbb..f60a77b871598708b38b6db5beeb6a0ed2840653 100644 --- a/benchmarks/synchrotron/analysis/synchrotron_sim.cxx +++ b/benchmarks/synchrotron/analysis/synchrotron_sim.cxx @@ -6,6 +6,7 @@ #include "ROOT/RDataFrame.hxx" #include "Math/Vector4D.h" #include "TCanvas.h" +#include "TSystem.h" #include <nlohmann/json.hpp> using json = nlohmann::json; @@ -27,15 +28,31 @@ void synchrotron_sim(const char* fname = "sim_synchrotron.root"){ ROOT::EnableImplicitMT(); ROOT::RDataFrame df("events", fname); - // Define variables - auto df0 = df - .Define("n_VertexBarrelHits", "VertexBarrelHits.size()") - .Define("n_VertexEndcapHits", "VertexEndcapHits.size()") - ; - - auto n_VertexBarrelHits = df0.Mean("n_VertexBarrelHits"); - auto n_VertexEndcapHits = df0.Mean("n_VertexEndcapHits"); - - std::cout << "n_VertexBarrelHits = " << *n_VertexBarrelHits << " / ev" << std::endl; - std::cout << "n_VertexEndcapHits = " << *n_VertexEndcapHits << " / ev" << std::endl; + // Detector version + std::string detector_version("default"); + const char* juggler_detector_version = gSystem->Getenv("JUGGLER_DETECTOR_VERSION"); + if (juggler_detector_version) { + detector_version = juggler_detector_version; + } + + if (detector_version == "acadia") { + // Define variables + auto df0 = df + .Define("n_VertexBarrelHits", "VertexBarrelHits.size()") + .Define("n_VertexEndcapHits", "VertexEndcapHits.size()") + ; + auto n_VertexBarrelHits = df0.Mean("n_VertexBarrelHits"); + auto n_VertexEndcapHits = df0.Mean("n_VertexEndcapHits"); + std::cout << "n_VertexBarrelHits = " << *n_VertexBarrelHits << " / ev" << std::endl; + std::cout << "n_VertexEndcapHits = " << *n_VertexEndcapHits << " / ev" << std::endl; + } else if (detector_version == "canyonlands") { + // Define variables + auto df0 = df + .Define("n_VertexBarrelHits", "VertexBarrelHits.size()") + ; + auto n_VertexBarrelHits = df0.Mean("n_VertexBarrelHits"); + std::cout << "n_VertexBarrelHits = " << *n_VertexBarrelHits << " / ev" << std::endl; + } else { + std::cout << "Detector version " << detector_version << " not supported in synchrotron_sim.cxx" << std::endl; + } } diff --git a/benchmarks/u_omega/config.yml b/benchmarks/u_omega/config.yml index 40d5f4be7fc677d18f10492de31b484ace90d422..6b47401ab86c4b7a4b486e803ecede98275aa6e0 100644 --- a/benchmarks/u_omega/config.yml +++ b/benchmarks/u_omega/config.yml @@ -2,7 +2,7 @@ u_omega:process: stage: process extends: .phy_benchmark tags: - - s3 + - phy needs: ["common:detector"] script: - compile_analyses.py u_omega diff --git a/options/reconstruction.py b/options/reconstruction.py index dee12c7af34b397bccbbd8203046858df3e13e88..84e04b4ca229a7f51261d22d81a5fe23c63be5ac 100644 --- a/options/reconstruction.py +++ b/options/reconstruction.py @@ -8,11 +8,17 @@ import json detector_name = "athena" if "JUGGLER_DETECTOR" in os.environ : - detector_name = str(os.environ["JUGGLER_DETECTOR"]) + detector_name = str(os.environ["JUGGLER_DETECTOR"]) detector_path = "" if "DETECTOR_PATH" in os.environ : - detector_path = str(os.environ["DETECTOR_PATH"]) + detector_path = str(os.environ["DETECTOR_PATH"]) + +detector_version = 'default' +if "JUGGLER_DETECTOR_VERSION" in os.environ: + env_version = str(os.environ["JUGGLER_DETECTOR_VERSION"]) + if 'acadia' in env_version: + detector_version = 'acadia' compact_path = os.path.join(detector_path, detector_name) @@ -45,7 +51,15 @@ services = [] # auditor service services.append(AuditorSvc("AuditorSvc", Auditors=['ChronoAuditor', 'MemStatAuditor'])) # geometry service -services.append(GeoSvc("GeoSvc", detectors=["{}.xml".format(compact_path)], OutputLevel=WARNING)) +## only have material maps for acadia right now +if detector_version == 'acadia': + services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_name)], + materials="config/material-maps.json", + OutputLevel=WARNING)) +else: + services.append(GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_name)], + #materials="config/material-maps.json", + OutputLevel=WARNING)) # data service services.append(EICDataSvc("EventDataSvc", inputs=input_sims, OutputLevel=WARNING)) @@ -100,22 +114,25 @@ from Configurables import Jug__Reco__ParticleCollector as ParticleCollector # branches needed from simulation root file sim_coll = [ - "mcparticles", - "EcalEndcapNHits", - "EcalEndcapPHits", - "EcalBarrelHits", - "EcalBarrelScFiHits", - "HcalBarrelHits", - "HcalEndcapPHits", - "HcalEndcapNHits", - "TrackerEndcapHits", - "TrackerBarrelHits", - "GEMTrackerEndcapHits", - "VertexBarrelHits", - "VertexEndcapHits", - "DRICHHits", - "MRICHHits" + 'mcparticles', + 'EcalEndcapNHits', + 'EcalEndcapPHits', + 'EcalBarrelHits', + 'EcalBarrelScFiHits', + 'HcalBarrelHits', + 'HcalEndcapPHits', + 'HcalEndcapNHits', + 'TrackerEndcapHits', + 'TrackerBarrelHits', + 'GEMTrackerEndcapHits', + 'VertexBarrelHits', + 'DRICHHits', ] +if 'acadia' in detector_version: + sim_coll.append('VertexEndcapHits') + sim_coll.append('MRICHHits') +else: + sim_coll.append('MPGDTrackerBarrelHits') # list of algorithms algorithms = [] @@ -499,11 +516,18 @@ vtx_b_digi = TrackerDigi("vtx_b_digi", timeResolution=8) algorithms.append(vtx_b_digi) -vtx_ec_digi = TrackerDigi("vtx_ec_digi", - inputHitCollection="VertexEndcapHits", - outputHitCollection="VertexEndcapRawHits", - timeResolution=8) -algorithms.append(vtx_ec_digi) +if 'acadia' in detector_version: + vtx_ec_digi = TrackerDigi("vtx_ec_digi", + inputHitCollection="VertexEndcapHits", + outputHitCollection="VertexEndcapRawHits", + timeResolution=8) + algorithms.append( vtx_ec_digi ) +else: + mm_b_digi = TrackerDigi("mm_b_digi", + inputHitCollection="MPGDTrackerBarrelHits", + outputHitCollection="MPGDTrackerBarrelRawHits", + timeResolution=8) + algorithms.append( mm_b_digi ) gem_ec_digi = TrackerDigi("gem_ec_digi", inputHitCollection="GEMTrackerEndcapHits", @@ -527,26 +551,37 @@ vtx_b_reco = TrackerHitReconstruction("vtx_b_reco", outputHitCollection="VertexBarrelRecHits") algorithms.append(vtx_b_reco) -vtx_ec_reco = TrackerHitReconstruction("vtx_ec_reco", - inputHitCollection = vtx_ec_digi.outputHitCollection, - outputHitCollection="VertexEndcapRecHits") -algorithms.append(vtx_ec_reco) +if 'acadia' in detector_version: + vtx_ec_reco = TrackerHitReconstruction("vtx_ec_reco", + inputHitCollection = vtx_ec_digi.outputHitCollection, + outputHitCollection="VertexEndcapRecHits") + algorithms.append( vtx_ec_reco ) +else: + mm_b_reco = TrackerHitReconstruction("mm_b_reco", + inputHitCollection = mm_b_digi.outputHitCollection, + outputHitCollection="MPGDTrackerBarrelRecHits") + algorithms.append( mm_b_reco ) gem_ec_reco = TrackerHitReconstruction("gem_ec_reco", inputHitCollection=gem_ec_digi.outputHitCollection, outputHitCollection="GEMTrackerEndcapRecHits") algorithms.append(gem_ec_reco) -# Tracking hit collector +input_tracking_hits = [ + str(trk_b_reco.outputHitCollection), + str(trk_ec_reco.outputHitCollection), + str(vtx_b_reco.outputHitCollection), + str(gem_ec_reco.outputHitCollection) ] +if 'acadia' in detector_version: + input_tracking_hits.append(str(vtx_ec_reco.outputHitCollection)) +else: + input_tracking_hits.append(str(mm_b_reco.outputHitCollection)) + trk_hit_col = TrackingHitsCollector("trk_hit_col", - inputTrackingHits=[ - str(trk_b_reco.outputHitCollection), - str(trk_ec_reco.outputHitCollection), - str(vtx_b_reco.outputHitCollection), - str(vtx_ec_reco.outputHitCollection), - str(gem_ec_reco.outputHitCollection) ], - trackingHits="trackingHits") -algorithms.append(trk_hit_col) + inputTrackingHits=input_tracking_hits, + trackingHits="trackingHits", + OutputLevel=VERBOSE) +algorithms.append( trk_hit_col ) # Hit Source linker sourcelinker = TrackerSourceLinker("trk_srcslnkr", @@ -634,22 +669,16 @@ algorithms.append(drich_reco) # outputClusterCollection="ForwardRICHClusters") # MRICH -mrich_digi = PhotoMultiplierDigi("mrich_digi", - inputHitCollection="MRICHHits", - outputHitCollection="MRICHRawHits", - quantumEfficiency=[(a*units.eV, b) for a, b in qe_data]) -algorithms.append(mrich_digi) - -mrich_reco = PhotoMultiplierReco("mrich_reco", - inputHitCollection=mrich_digi.outputHitCollection, - outputHitCollection="MRICHRecHits") -algorithms.append(mrich_reco) - -# FIXME -#mrich_cluster = PhotoRingClusters("drich_cluster", -# inputHitCollection=pmtreco.outputHitCollection, -# #inputTrackCollection="ReconstructedParticles", -# outputClusterCollection="ForwardRICHClusters") +if 'acadia' in detector_version: + mrich_digi = PhotoMultiplierDigi("mrich_digi", + inputHitCollection="MRICHHits", + outputHitCollection="MRICHRawHits", + quantumEfficiency=[(a*units.eV, b) for a, b in qe_data]) + algorithms.append(mrich_digi) + mrich_reco = PhotoMultiplierReco("mrich_reco", + inputHitCollection=mrich_digi.outputHitCollection, + outputHitCollection="MRICHRecHits") + algorithms.append(mrich_reco) # Electron kinematics electron_incl_kin = InclusiveKinematicsElectron("electron_incl_kin", diff --git a/options/reconstruction.raw.py b/options/reconstruction.raw.py index a4013e8025bfb5de6f6d359a89e6530398c53a30..dc706826c1f5cb06d7d6649312f80ba484f58a11 100644 --- a/options/reconstruction.raw.py +++ b/options/reconstruction.raw.py @@ -8,11 +8,17 @@ import json detector_name = "athena" if "JUGGLER_DETECTOR" in os.environ : - detector_name = str(os.environ["JUGGLER_DETECTOR"]) + detector_name = str(os.environ["JUGGLER_DETECTOR"]) detector_path = "" if "DETECTOR_PATH" in os.environ : - detector_path = str(os.environ["DETECTOR_PATH"]) + detector_path = str(os.environ["DETECTOR_PATH"]) + +detector_version = 'default' +if "JUGGLER_DETECTOR_VERSION" in os.environ: + env_version = str(os.environ["JUGGLER_DETECTOR_VERSION"]) + if 'acadia' in env_version: + detector_version = 'acadia' compact_path = os.path.join(detector_path, detector_name) @@ -42,21 +48,25 @@ from Configurables import Jug__Digi__SiliconTrackerDigi as TrackerDigi # branches needed from simulation root file sim_coll = [ - "EcalEndcapNHits", - "EcalEndcapPHits", - "EcalBarrelHits", - "EcalBarrelScFiHits", - "HcalBarrelHits", - "HcalEndcapPHits", - "HcalEndcapNHits", - "TrackerEndcapHits", - "TrackerBarrelHits", - "GEMTrackerEndcapHits", - "VertexBarrelHits", - "VertexEndcapHits", - "DRICHHits", - "MRICHHits" + 'mcparticles', + 'EcalEndcapNHits', + 'EcalEndcapPHits', + 'EcalBarrelHits', + 'EcalBarrelScFiHits', + 'HcalBarrelHits', + 'HcalEndcapPHits', + 'HcalEndcapNHits', + 'TrackerEndcapHits', + 'TrackerBarrelHits', + 'GEMTrackerEndcapHits', + 'VertexBarrelHits', + 'DRICHHits', ] +if 'acadia' in detector_version: + sim_coll.append('VertexEndcapHits') + sim_coll.append('MRICHHits') +else: + sim_coll.append('MPGDTrackerBarrelHits') # list of algorithms algorithms = [] @@ -177,11 +187,18 @@ vtx_b_digi = TrackerDigi("vtx_b_digi", timeResolution=8) algorithms.append(vtx_b_digi) -vtx_ec_digi = TrackerDigi("vtx_ec_digi", - inputHitCollection="VertexEndcapHits", - outputHitCollection="VertexEndcapRawHits", - timeResolution=8) -algorithms.append(vtx_ec_digi) +if 'acadia' in detector_version: + vtx_ec_digi = TrackerDigi("vtx_ec_digi", + inputHitCollection="VertexEndcapHits", + outputHitCollection="VertexEndcapRawHits", + timeResolution=8) + algorithms.append( vtx_ec_digi ) +else: + mm_b_digi = TrackerDigi("mm_b_digi", + inputHitCollection="MPGDTrackerBarrelHits", + outputHitCollection="MPGDTrackerBarrelRawHits", + timeResolution=8) + algorithms.append( mm_b_digi ) gem_ec_digi = TrackerDigi("gem_ec_digi", inputHitCollection="GEMTrackerEndcapHits", @@ -197,11 +214,12 @@ drich_digi = PhotoMultiplierDigi("drich_digi", algorithms.append(drich_digi) # MRICH -mrich_digi = PhotoMultiplierDigi("mrich_digi", - inputHitCollection="MRICHHits", - outputHitCollection="MRICHRawHits", - quantumEfficiency=[(a*units.eV, b) for a, b in qe_data]) -algorithms.append(mrich_digi) +if 'acadia' in detector_version: + mrich_digi = PhotoMultiplierDigi("mrich_digi", + inputHitCollection="MRICHHits", + outputHitCollection="MRICHRawHits", + quantumEfficiency=[(a*units.eV, b) for a, b in qe_data]) + algorithms.append(mrich_digi) # Output podout = PodioOutput("out", filename=output_rec)