diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bba1ae5f6d6785f90e6ea35fd29b8a915cb7d810..17b92796498871b5468676237659bc589f5451f1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,7 +32,7 @@ stages: get_data: stage: data_init tags: - - sodium + - silicon script: - mkdir -p results - mkdir -p sim_output @@ -41,10 +41,11 @@ generate_config: stage: config needs: ["get_data"] tags: - - sodium + - silicon script: - mkdir -p config && ./bin/gen_ci_config -p test_ -i dummy > config/dummy_config.yml - mkdir -p config && ./bin/gen_ci_config -p clustering_ -i clustering > config/clustering_config.yml + - mkdir -p config && ./bin/gen_ci_config -p ecal_ -i ecal > config/ecal_config.yml dummy-pipeline: stage: run @@ -64,6 +65,15 @@ clustering-pipeline: job: generate_config strategy: depend +ecal-pipeline: + stage: run + needs: ["generate_config"] + trigger: + include: + - artifact: config/ecal_config.yml + job: generate_config + strategy: depend + #crystal_electron_simulation: # stage: run # needs: ["get_data"] @@ -82,7 +92,7 @@ clustering-pipeline: final_report: stage: finish tags: - - sodium + - silicon needs: ["clustering-pipeline","dummy-pipeline"] script: - echo "It was a success!" diff --git a/bin/gen_ci_config b/bin/gen_ci_config index 096b41045fd2af6fb47f50926e85a6a9f084c47d..cad4d51f37bc80ef58786b95bb30d79eaeef8d49 100755 --- a/bin/gen_ci_config +++ b/bin/gen_ci_config @@ -3,7 +3,7 @@ set -o nounset set -o errexit BENCHMARK_SCRIPT_DIR=./dummy -CI_TAG=sodium +CI_TAG=silicon CI_JOB_PREFIX=test_ CI_FAILURE="true" diff --git a/clustering/emcal_electrons.sh b/clustering/emcal_electrons.sh deleted file mode 100644 index f699796f5b9ac1e745025ee8d7ac5c3be7c0a48b..0000000000000000000000000000000000000000 --- a/clustering/emcal_electrons.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -git clone https://eicweb.phy.anl.gov/EIC/datasets.git datasets -ln -s datasets/data -git clone https://eicweb.phy.anl.gov/EIC/detectors/topside.git -mkdir topside/build && cd topside/build -cmake ../. -DCMAKE_INSTALL_PREFIX=/usr/local && make -j30 install -cd ../.. -ls -lrth -root -b -q "datasets/emcal_electrons.cxx(1e6, \"emcal_uniform_electrons.hepmc\")" -cd topside && ls -l -npsim --runType batch --numberOfEvents 100000 --compactFile topside.xml --inputFiles ../emcal_uniform_electrons.hepmc --outputFile sim_emcal_electrons.root -pwd -ls -lrth ../ -xenv -x /usr/local/Juggler.xenv gaudirun.py options/example_crystal.py -cd .. -ls -lrth -echo " directory: " -pwd -mkdir -p results -root -b -q "./scripts/makeplot.C(\"topside/sim_emcal_electrons_output.root\")" - diff --git a/ecal/emcal_electrons.sh b/ecal/emcal_electrons.sh new file mode 100644 index 0000000000000000000000000000000000000000..73b0e56ffb55f60b2a976cf23a765fd1b1a4a658 --- /dev/null +++ b/ecal/emcal_electrons.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +export JUGGLER_FILE_NAME_TAG="emcal_uniform_electrons" +export JUGGLER_N_EVENTS=1000 +export JUGGLER_DETECTOR="topside" +export JUGGLER_GEN_FILE="${JUGGLER_FILE_NAME_TAG}.hepmc" +export JUGGLER_SIM_FILE="sim_${JUGGLER_FILE_NAME_TAG}.root" +export JUGGLER_REC_FILE="rec_${JUGGLER_FILE_NAME_TAG}.root" + +git clone https://eicweb.phy.anl.gov/EIC/datasets.git datasets +root -b -q "datasets/emcal_electrons.cxx(1e4, \"${JUGGLER_FILE_NAME_TAG}.hepmc\")" + +git clone https://eicweb.phy.anl.gov/EIC/detectors/${JUGGLER_DETECTOR}.git +mkdir ${JUGGLER_DETECTOR}/build +pushd ${JUGGLER_DETECTOR}/build +cmake ../. -DCMAKE_INSTALL_PREFIX=/usr/local && make -j30 install +popd + +pushd ${JUGGLER_DETECTOR} +ls -l +# run geant4 simulations +npsim --runType batch \ + --numberOfEvents ${JUGGLER_N_EVENTS} \ + --compactFile ${JUGGLER_DETECTOR}.xml \ + --inputFiles ../${JUGGLER_FILE_NAME_TAG}.hepmc \ + --outputFile ${JUGGLER_SIM_FILE} +# Need to figure out how to pass file name to juggler from the commandline + +xenv -x /usr/local/Juggler.xenv gaudirun.py ../ecal/options/example_crystal.py + +popd + +pwd +mkdir -p results +root -b -q "./scripts/makeplot.C(\"${JUGGLER_DETECTOR}/${JUGGLER_SIM_FILE}\")" + diff --git a/ecal/options/crystal_calorimeter_reco.py b/ecal/options/crystal_calorimeter_reco.py new file mode 100644 index 0000000000000000000000000000000000000000..5717dd9eb3d719989a447f011aa3bb3ae597be5c --- /dev/null +++ b/ecal/options/crystal_calorimeter_reco.py @@ -0,0 +1,34 @@ +from Gaudi.Configuration import * + +from GaudiKernel.DataObjectHandleBase import DataObjectHandleBase +from Configurables import ApplicationMgr, EICDataSvc, PodioOutput, GeoSvc +from GaudiKernel import SystemOfUnits as units + +geo_service = GeoSvc("GeoSvc", detectors=["topside.xml"]) +podioevent = EICDataSvc("EventDataSvc", inputs=["sim_emcal_electrons.root"], OutputLevel=DEBUG) + +from Configurables import PodioInput +from Configurables import Jug__Digi__CrystalEndcapsDigi as CrystalEndcapsDigi +from Configurables import Jug__Reco__CrystalEndcapsReco as CrystalEndcapsReco +from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster +from Configurables import Jug__Reco__ClusterRecoCoG as RecoCoG + +podioinput = PodioInput("PodioReader", collections=["mcparticles","CrystalEcalHits"], OutputLevel=DEBUG) +emcaldigi = CrystalEndcapsDigi("ecal_digi", inputHitCollection="CrystalEcalHits", outputHitCollection="RawDigiEcalHits") +emcalreco = CrystalEndcapsReco("ecal_reco", inputHitCollection="RawDigiEcalHits", outputHitCollection="RecoEcalHits", + minModuleEdep=1.0*units.MeV) +emcalcluster = IslandCluster("emcal_cluster", inputHitCollection="RecoEcalHits", outputClusterCollection="EcalClusters", + minClusterCenterEdep=30*units.MeV, groupRange=2.0) +clusterreco = RecoCoG("cluster_reco", clusterCollection="EcalClusters", logWeightBase=4.2, moduleDimZName="CrystalBox_z_length") + +out = PodioOutput("out", filename="sim_emcal_electrons_output.root") + +out.outputCommands = ["keep *"] + +ApplicationMgr( + TopAlg = [podioinput, emcaldigi, emcalreco, emcalcluster, clusterreco, out], + EvtSel = 'NONE', + EvtMax = 100000, + ExtSvc = [podioevent], + OutputLevel=DEBUG + ) diff --git a/ecal/options/example_crystal.py b/ecal/options/example_crystal.py new file mode 100644 index 0000000000000000000000000000000000000000..ae5675dab6fafe85a0d1b994479a9ce5e608f01d --- /dev/null +++ b/ecal/options/example_crystal.py @@ -0,0 +1,44 @@ +from Gaudi.Configuration import * +import os + +from GaudiKernel.DataObjectHandleBase import DataObjectHandleBase +from Configurables import ApplicationMgr, EICDataSvc, PodioOutput, GeoSvc +from GaudiKernel import SystemOfUnits as units + +detector_name = "topside" +if "JUGGLER_DETECTOR" in os.environ : + detector_name = str(os.environ["JUGGLER_DETECTOR"]) + +# todo add checks +input_sim_file = str(os.environ["JUGGLER_SIM_FILE"]) +output_rec_file = str(os.environ["JUGGLER_REC_FILE"]) +n_events = str(os.environ["JUGGLER_N_EVENTS"]) + +geo_service = GeoSvc("GeoSvc", detectors=["{}.xml".format(detector_name)]) +podioevent = EICDataSvc("EventDataSvc", inputs=[input_sim_file], OutputLevel=DEBUG) + +from Configurables import PodioInput +from Configurables import Jug__Digi__CrystalEndcapsDigi as CrystalEndcapsDigi +from Configurables import Jug__Reco__CrystalEndcapsReco as CrystalEndcapsReco +from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster +from Configurables import Jug__Reco__ClusterRecoCoG as RecoCoG + +podioinput = PodioInput("PodioReader", collections=["mcparticles","CrystalEcalHits"], OutputLevel=DEBUG) +emcaldigi = CrystalEndcapsDigi("ecal_digi", inputHitCollection="CrystalEcalHits", outputHitCollection="RawDigiEcalHits") +emcalreco = CrystalEndcapsReco("ecal_reco", inputHitCollection="RawDigiEcalHits", outputHitCollection="RecoEcalHits", + minModuleEdep=1.0*units.MeV) +emcalcluster = IslandCluster("emcal_cluster", inputHitCollection="RecoEcalHits", outputClusterCollection="EcalClusters", + minClusterCenterEdep=30*units.MeV, groupRange=2.0) +clusterreco = RecoCoG("cluster_reco", clusterCollection="EcalClusters", logWeightBase=4.2, moduleDimZName="CrystalBox_z_length") + +out = PodioOutput("out", filename=output_rec_file) + +out.outputCommands = ["keep *"] + +ApplicationMgr( + TopAlg = [podioinput, emcaldigi, emcalreco, emcalcluster, clusterreco, out], + EvtSel = 'NONE', + EvtMax = n_events, + ExtSvc = [podioevent], + OutputLevel=DEBUG + )