From f79b0a1e9ba90364be9af11f9e2d9397321b852c Mon Sep 17 00:00:00 2001 From: Wouter Deconinck <wdconinc@gmail.com> Date: Wed, 23 Mar 2022 19:35:30 +0000 Subject: [PATCH] New geometry --- .clang-format | 112 ++++ .gitignore | 26 + .gitlab-ci.yml | 140 +++++ CMakeLists.txt | 37 ++ README.md | 6 +- bin/dawn_tweak | 149 +++++ bin/generate_prim_file | 156 +++++ bin/make_dawn_views | 99 ++++ compact/beamline.xml | 55 ++ compact/colors.xml | 24 + compact/definitions.xml | 6 + compact/display.xml | 40 ++ compact/electron_tracker.xml | 146 +++++ compact/elements.xml | 885 ++++++++++++++++++++++++++++ compact/fields.xml | 18 + compact/materials.xml | 222 +++++++ compact/photon_calorimeter.xml | 49 ++ compton.xml | 56 ++ scripts/checkOverlaps.py | 45 ++ src/CylindricalDipoleMagnet_geo.cpp | 99 ++++ src/Tracker_geo.cpp | 263 +++++++++ views/generate_prim_files.yml | 40 ++ views/view50.yml | 41 ++ views/view50/generate_eps | 75 +++ 24 files changed, 2787 insertions(+), 2 deletions(-) create mode 100644 .clang-format create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 CMakeLists.txt create mode 100755 bin/dawn_tweak create mode 100755 bin/generate_prim_file create mode 100755 bin/make_dawn_views create mode 100644 compact/beamline.xml create mode 100644 compact/colors.xml create mode 100644 compact/definitions.xml create mode 100644 compact/display.xml create mode 100644 compact/electron_tracker.xml create mode 100644 compact/elements.xml create mode 100644 compact/fields.xml create mode 100644 compact/materials.xml create mode 100644 compact/photon_calorimeter.xml create mode 100644 compton.xml create mode 100755 scripts/checkOverlaps.py create mode 100644 src/CylindricalDipoleMagnet_geo.cpp create mode 100644 src/Tracker_geo.cpp create mode 100644 views/generate_prim_files.yml create mode 100644 views/view50.yml create mode 100755 views/view50/generate_eps diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..05b10dc --- /dev/null +++ b/.clang-format @@ -0,0 +1,112 @@ +--- +Language: Cpp +BasedOnStyle: Chromium +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: true +AlignConsecutiveDeclarations: true +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 120 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +IndentPPDirectives: None +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: All +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +ReflowComments: true +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +#SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never +... + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..21b41f3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +!*.png + +*.prim +*/*.eps +*/*/*.eps +*/*/*.png +*/*/*.pdf +*.root +build/* +.DAWN* +*/*.pyc +**.pyc + +images/* +doc/* + +accelerator +eic + +*.swp + +fieldmaps + +manifest.txt +acts.txt +acts2.txt diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..f8ab71a --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,140 @@ +image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:latest + +workflow: + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + - if: '$CI_PIPELINE_SOURCE == "web"' + - if: '$CI_PIPELINE_SOURCE == "webide"' + - if: '$CI_COMMIT_BRANCH == "master"' + - if: '$CI_COMMIT_TAG' + +default: + before_script: + - source .local/bin/env.sh + artifacts: + expire_in: 72 hours + paths: + - .local/detector + - .local/lib + - .local/bin + - .local/include + - .local/share + - results + - config + - images + - doc + - juggler.env + - geo + reports: + dotenv: juggler.env + +stages: + - config + - initialize + - build + - test + - docs + - collect + - finalize + - deploy + +common:setup: + stage: config + rules: + - if: '$CI_SERVER_HOST == "eicweb.phy.anl.gov"' + before_script: + - git clone https://eicweb.phy.anl.gov/EIC/benchmarks/common_bench.git setup + script: + - | + source setup/bin/env.sh && ./setup/bin/install_common.sh + export BEAMLINE_CONFIG="compton" + if [[ -z "${JUGGLER_DETECTOR}" ]]; then + export JUGGLER_DETECTOR="compton" + fi + if [[ "x${CI_PIPELINE_SOURCE}" == "xmerge_request_event" || "$CI_COMMIT_BRANCH" == "master" ]]; then + export BEAMLINE_CONFIG_VERSION=${CI_COMMIT_REF_NAME} + echo "BEAMLINE_CONFIG = ${BEAMLINE_CONFIG}" + echo "BEAMLINE_CONFIG_VERSION = ${CI_COMMIT_REF_NAME}" + echo "JUGGLER_DETECTOR = ${JUGGLER_DETECTOR}" + # add to env file testing + echo "BEAMLINE_CONFIG_VERSION=$CI_COMMIT_REF_NAME" >> juggler.env + echo "BEAMLINE_CONFIG=$BEAMLINE_CONFIG" >> juggler.env + echo "JUGGLER_DETECTOR=$JUGGLER_DETECTOR" >> juggler.env + # if specific juggler version is requested + if [[ -n "${JUGGLER_DETECTOR_VERSION}" ]]; then + echo "JUGGLER_DETECTOR_VERSION = ${CI_COMMIT_REF_NAME}" + echo "JUGGLER_DETECTOR_VERSION=$CI_COMMIT_REF_NAME" >> juggler.env + fi + fi + - | + source .local/bin/env.sh + mkdir -p build && cd build && cmake ../. -DCMAKE_INSTALL_PREFIX=${LOCAL_PREFIX} && make -j20 || exit -1 + make install && cd .. + mkdir_local_data_link sim_output + ls -lrth + print_env.sh + +common:detector: + stage: initialize + needs: ["common:setup"] + script: + - source .local/bin/env.sh + - mkdir_local_data_link sim_output + - mkdir -p results + - mkdir -p config + - mkdir -p doc + - mkdir -p geo + - print_env.sh + +.views: + stage: docs + before_script: + - source .local/bin/env.sh + - env + - pip3 install psutil + needs: + - ["common:detector"] + +# include: +# - local: 'views/generate_prim_files.yml' +# - local: 'views/view50.yml' + +dump_constants: + stage: test + needs: + - ["common:detector"] + script: + - npdet_info dump compton.xml | tee doc/constants.out + +dump_geometry: + stage: test + needs: + - common:detector + script: + - echo "dumping geometry" + - mkdir -p geo + - dd_web_display --output geo/detector_geo_full.root compton.xml + - echo "Geometry viewer at https://eic.phy.anl.gov/geoviewer/index.htm?file=https://eicweb.phy.anl.gov/EIC/detectors/compton/-/jobs/${CI_JOB_ID}/artifacts/raw/geo/detector_geo_full.root?job=dump_geometry&item=default;1&opt=transp30;zoom75;ROTY290;ROTZ350;trz0;trr0;ctrl;all&" + +xmllint: + stage: test + needs: + - ["common:detector"] + script: + - xmllint compact/*.xml compton.xml > /dev/null + +overlap_check: + stage: test + needs: + - ["common:detector"] + script: + - checkOverlaps -c compton.xml + +overlap_check_geant4: + stage: test + needs: + - ["common:detector"] + script: + - python scripts/checkOverlaps.py -c compton.xml | tee doc/overlap_check_geant4.out + - echo "$(cat doc/overlap_check_geant4.out | grep GeomVol1002 | wc -l) overlaps..." + - if [[ "$(cat doc/overlap_check_geant4.out | grep GeomVol1002 | wc -l)" -gt "0" ]] ; then echo "Overlaps exist!" && false ; fi diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..0f29899 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,37 @@ +cmake_minimum_required(VERSION 3.12 FATAL_ERROR) + +# CMP0074: find_package() uses <PackageName>_ROOT variables +cmake_policy(SET CMP0074 NEW) + +PROJECT(compton + LANGUAGES CXX + DESCRIPTION "EIC Compton Detector Description in DD4hep" + ) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror") + +find_package(DD4hep REQUIRED COMPONENTS DDCore DDG4) + +#----------------------------------------------------------------------------------- +set(a_lib_name Compton) +dd4hep_configure_output() + +dd4hep_add_plugin(${a_lib_name} + SOURCES + src/CylindricalDipoleMagnet_geo.cpp + src/Tracker_geo.cpp + USES ROOT::Core ROOT::Gdml + ) +target_link_libraries(${a_lib_name} + PUBLIC DD4hep::DDCore DD4hep::DDRec DD4hep::DDG4 + ) + +#----------------------------------------------------------------------------------- +install(DIRECTORY compact/ + DESTINATION share/${PROJECT_NAME}/compact + FILES_MATCHING PATTERN "*.xml" + ) +install(FILES compton.xml + DESTINATION share/${PROJECT_NAME}/ + ) diff --git a/README.md b/README.md index b674212..da0635c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ -# Compton +# EIC Compton Detector Description in DD4hep + +- [Compton geometry](https://eic.phy.anl.gov/geoviewer/index.htm?file=https://eicweb.phy.anl.gov/EIC/detectors/compton/-/jobs/artifacts/master/raw/geo/detector_geo_full.root?job=dump_geometry&item=default;1&opt=clipxyz;transp30;zoom75;ROTY290;ROTZ350;trz0;trr0;ctrl;all&) + -EIC Compton Detector Description in DD4hep \ No newline at end of file diff --git a/bin/dawn_tweak b/bin/dawn_tweak new file mode 100755 index 0000000..35e6ea0 --- /dev/null +++ b/bin/dawn_tweak @@ -0,0 +1,149 @@ +#!/bin/bash + +#git clone --depth 1 https://eicweb.phy.anl.gov/EIC/datasets.git +export DAWN_PS_PREVIEWER="ls" + +OUT_FILE=".DAWN_1.history" + +function print_the_help { + echo "USAGE: ${0} [-s <skip_events>] -d <dawn_run_dir> " + echo " OPTIONS: " + echo " -x targeted x coordinate position" + echo " -y targeted x coordinate position" + echo " -z targeted x coordinate position" + echo " --theta viewing angle" + echo " --phi viewing angle" + echo " -m,--mag magnification" + echo " --draw draw style " + echo " -d,--dawn-dir <dawn_run_dir> Directory with the .DAWN files and a generate script " + exit +} + +function yes_or_no { + while true; do + read -p "$* [y/n]: " yn + case $yn in + [Yy]*) return 0 ;; + [Nn]*) echo "No entered" ; return 1 ;; + esac + done +} + +if [[ $# -eq 0 ]] ; then + print_the_help + exit +fi + +SKIP_EVENTS=0 +DETECTOR_ONLY=0 +FILE_TAG="view" +DAWN_RUN_DIR="." + + +POSITIONAL=() +while [[ $# -gt 0 ]] +do + key="$1" + + case $key in + -h|--help) + shift # past argument + print_the_help + ;; + -x) + echo "updating x coordinate to ${2}" + sed -i '5d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '5i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + -y) + echo "updating y coordinate to ${2}" + sed -i '6d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '6i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + -z) + echo "updating z coordinate to ${2}" + sed -i '7d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '7i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + --theta) + echo "updating theta angle to ${2}" + sed -i '3d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '3i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + --phi) + echo "updating phi angle to ${2}" + sed -i '2d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '2i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + --mag) + echo "updating magnification to ${2}" + sed -i '8d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '8i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + --draw) + echo "updating drawing to ${2}" + sed -i '9d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '9i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + --light-theta) + echo "updating drawing to ${2}" + sed -i '19d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '19i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + --light-phi) + echo "updating drawing to ${2}" + sed -i '18d' ${DAWN_RUN_DIR}/${OUT_FILE} + sed -i '18i'${2} ${DAWN_RUN_DIR}/${OUT_FILE} + shift # past argument + shift # past value + ;; + -i|--input) + OUT_FILE="$2" + shift # past argument + shift # past value + ;; + -o|--ouput-dir) + OUTPUT_DIR="$2" + shift # past argument + shift # past value + ;; + -D|--detector-only) + DETECTOR_ONLY=1 + shift # past argument + #shift # past value + ;; + -d|--dawn-dir) + DAWN_RUN_DIR=$2 + shift # past argument + shift # past value + ;; + -t|--tag) + FILE_TAG=$2 + shift # past argument + shift # past value + ;; + *) # unknown option + #POSITIONAL+=("$1") # save it in an array for later + echo "unknown option $1" + print_the_help + shift # past argument + ;; + esac +done +set -- "${POSITIONAL[@]}" # restore positional parameters diff --git a/bin/generate_prim_file b/bin/generate_prim_file new file mode 100755 index 0000000..614d1d0 --- /dev/null +++ b/bin/generate_prim_file @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 + +# same as make_dawn_views but stops at generating the prim file. +# W. Armstrong (ANL), original bash script +# C. Peng (ANL), translate to python and add flexible run time for simulation + +import os +import signal +import subprocess +import argparse +import atexit +import time +from datetime import datetime +import fcntl +import psutil + + +def readline_nonblocking(output): + fd = output.fileno() + fl = fcntl.fcntl(fd, fcntl.F_GETFL) + fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK) + try: + return output.readline() + except: + return '' + + +# arguments +parser = argparse.ArgumentParser() + +parser.add_argument('-c', '--compact-file', type=str, dest='compact', + default=os.path.join(os.environ.get('DETECTOR_PATH', '.'), 'athena.xml'), + help='Top level compact file for detectors') + +parser.add_argument('-s', '--skip', type=int, + default=0, + help='Number of events number to skip in the input') + +parser.add_argument('-i', '--input', type=str, + default='scripts/input_data/few_events.hepmc', + help='Input hepmc file') + +parser.add_argument('-o', '--output-dir', type=str, dest='out_dir', + default='sim_output', + help='output directory') + +parser.add_argument('-D', '--detector-only', action='store_true', dest='detector_only', + help='only generate the prim files for the detector geometry') + +parser.add_argument('-t', '--tag', type=str,dest='file_tag', + default='view', + help='Output file tag') + +parser.add_argument('--timeout', type=int, + default=60, + help='Timeout in seconds') + +parser.add_argument('passthrough', nargs='*') + +args = parser.parse_args() + +macro = 'macro/dawn_picture.mac' if args.detector_only else 'macro/dawn_picture2.mac' + +# raise error if cannot create a temporary working dir +# os.makedirs('dawn_view_tmp', exist_ok=False) +os.makedirs(args.out_dir, exist_ok=True) + +# use absolute path so the chdir does not affect them +args.input = os.path.abspath(args.input) +args.out_dir = os.path.abspath(args.out_dir) +args.compact = os.path.abspath(args.compact) +macro = os.path.abspath(macro) + +prim_file = 'g4_0000.prim' +dawn_env = os.environ.copy() +dawn_env['DAWN_BATCH'] = 'a' +# sdir = os.path.dirname(os.path.realpath(__file__)) + +# Using a python warpper such as npsim introduces some problem in managing the subprocess. +# The process1 managed by subprocess will generate another process with proc2_pid = proc1_pid + 1, which will not +# be terminated by terminating or killing the process1. +# In addition, running Geant4 with vis mode will never exit automatically (it waits for input). +# Thus the created process 2 will occupy the system resources. +sim_cmd = ['npsim', '--runType', 'vis', + '--compact', args.compact, + '--inputFiles', args.input, + '--outputFile', 'derp.root', + '--numberOfEvents', '1', + '--skipNEvents', str(args.skip), + '--macroFile', macro] + +start = datetime.now() +elapse = datetime.now() - start +last_update = datetime.now() +finished = False + +# run simulation +print(' '.join(sim_cmd)) +p = subprocess.Popen(args=sim_cmd, env=dawn_env, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) +__child_pid = p.pid +while elapse.seconds < args.timeout: + line = readline_nonblocking(p.stdout) + elapse = datetime.now() - start + time_left = args.timeout - elapse.seconds + time_str = '[{:02d}:{:02d}]'.format(elapse.seconds // 60, elapse.seconds % 60) + + if time_left < 10: + print('{} === TIMEOUT ===: Terminating in {:d} seconds'.format(time_str, time_left)) + + if line: + decoded_line = line.decode('utf-8').strip() + print('{} {}'.format(time_str, decoded_line)) + # what we are looking for + if decoded_line == 'File {} is generated.'.format(prim_file): + print('{} === FINISHED ===: Got the prim file, terminating.'.format(time_str)) + finished = True + break + if decoded_line == 'Idle>': + p.stdin.write(b'exit') + break + # do not sleep + continue + + # ended early before file + if p.poll() is not None: + print(p.poll()) + break + + time.sleep(1) + +p.kill() +# use to kill the subprocess generated from the python wrapper +# this is unsafe so maybe more checks required +for proc in psutil.process_iter(): + pinfo = proc.as_dict(attrs=['pid', 'name', 'create_time']) + if pinfo['pid'] == p.pid + 1 and pinfo['name'] == 'python': + print('kill {}, generated from {}'.format(pinfo, p.pid)) + os.kill(pinfo['pid'], signal.SIGTERM) + +line = b'stderr outputs:\n' +while line: + print(line.decode('utf-8'), end='') + line = readline_nonblocking(p.stderr) + +if finished: + print('Simulation finished') +else: + print('Simulation failed') + exit(1) + +# move the prim files (which can be quite large) +# to the local pipeline storage path +os.system('mv g4_0000.prim {}/{}.prim'.format(args.out_dir,args.file_tag)) + + diff --git a/bin/make_dawn_views b/bin/make_dawn_views new file mode 100755 index 0000000..4844cc3 --- /dev/null +++ b/bin/make_dawn_views @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 + +# get dawn view of detectors +# W. Armstrong (ANL), original bash script +# C. Peng (ANL), translate to python and add flexible run time for simulation + +import os +import signal +import subprocess +import argparse +import atexit +import time +from datetime import datetime +import fcntl +import psutil + + +def readline_nonblocking(output): + fd = output.fileno() + fl = fcntl.fcntl(fd, fcntl.F_GETFL) + fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK) + try: + return output.readline() + except: + return '' + + +# arguments +parser = argparse.ArgumentParser() + +parser.add_argument('-c', '--compact-file', type=str, dest='compact', + default=os.path.join(os.environ.get('DETECTOR_PATH', '.'), 'athena.xml'), + help='Top level compact file for detectors') + +parser.add_argument('-s', '--skip', type=int, + default=0, + help='Number of events number to skip in the input') + +parser.add_argument('-i', '--input', type=str, dest='input', + default='sim_output', + help='Input hepmc file') + +parser.add_argument('-o', '--output-dir', type=str, dest='out_dir', + default='images', + help='output directory') + +parser.add_argument('-D', '--detector-only', action='store_true', dest='detector_only', + help='only generate the prim files for the detector geometry') + +parser.add_argument('-d', '--dawn-dir', type=str, dest='dawn_dir', + default='scripts/view1', + help='Directory to dawn script dir (with .DAWN files and a generate_eps script)') + +parser.add_argument('-t', '--tag', type=str,dest='file_tag', + default='view', + help='Output file tag') + +parser.add_argument('--timeout', type=int, + default=60, + help='Timeout in seconds') + +parser.add_argument('passthrough', nargs='*') + +args = parser.parse_args() + +macro = 'macro/dawn_picture.mac' if args.detector_only else 'macro/dawn_picture2.mac' + +# raise error if cannot create a temporary working dir +# os.makedirs('dawn_view_tmp', exist_ok=False) +os.makedirs(args.out_dir, exist_ok=True) + +# use absolute path so the chdir does not affect them +args.input = os.path.abspath(args.input) +args.out_dir = os.path.abspath(args.out_dir) +args.compact = os.path.abspath(args.compact) +macro = os.path.abspath(macro) + +prim_file = 'g4_0000.prim' +dawn_env = os.environ.copy() +dawn_env['DAWN_BATCH'] = 'a' +# sdir = os.path.dirname(os.path.realpath(__file__)) + + +# generate DAWN images +out_dir = os.path.abspath(args.out_dir) +input_file = os.path.abspath(args.input) +#prim_file = '{}/{}.prim'.format(input_dir,args.file_tag) +#prim_file = os.path.abspath(prim_file) +owd = os.getcwd() +os.chdir(args.dawn_dir) +subprocess.run(['pwd']) +subprocess.run(['./generate_eps', '-t', args.file_tag, '-i', input_file] + args.passthrough) +subprocess.run(['ls', '-lrth']) + +# upload the results +os.system('cp *.pdf {}'.format(out_dir)) +os.system('cp *.png {}'.format(out_dir)) +os.chdir(owd) + diff --git a/compact/beamline.xml b/compact/beamline.xml new file mode 100644 index 0000000..e8a70aa --- /dev/null +++ b/compact/beamline.xml @@ -0,0 +1,55 @@ +<lccdd> + + <define> + <comment> + name center_x center_y center_z rin(z-in) rin(z-out) dout length angle B gradient +## [m] [m] [m] [m] [m] [m] [m] [rad] [T] [T/m] +QF Q12EF_5 0.106325 0 -97.391559 0.06 0.06 0.5 0.6 -0.0243670556 0 5.5494223 +DB D21EF_5 0.151178 0 -95.1303785 0.06 0.06 0.5 2.923301 -0.0173520834 -0.080044540 0 +QF Q11EF_5 0.184809 0 -92.8690025 0.06 0.06 0.5 0.6 -0.0103371112 0 -5.5555556 +DB D22EF_5 0.197934 0 -90.6074145 0.06 0.06 0.5 2.923301 -0.00332213905 -0.080044540 0 +QF Q10EF_5 0.1998355 0 -88.34579 0.06 0.06 0.5 0.6 0.0036928331 0 3.2112834 +QF Q9EF_5 0.181002 0 -83.245825 0.06 0.06 0.5 0.6 0.0036928331 0 -4.7576278 +QF Q8EF_5 0.1621685 0 -78.145859 0.06 0.06 0.5 0.6 0.0036928331 0 3.6308806 +QF Q7EF_5 0.143335 0 -73.045894 0.06 0.06 0.5 0.6 0.0036928331 0 -3.7604250 +QF Q6EF_5 0.124502 0 -67.945929 0.06 0.06 0.5 0.6 0.0036928331 0 4.9568612 +QF Q5EF_5 0.1056685 0 -62.845964 0.06 0.06 0.5 0.6 0.0036928331 0 -5.4330528 +QF Q4EF_5 0.07391 0 -54.246022 0.06 0.06 0.5 0.6 0.0036928331 0 4.8666389 +QF CRAB_HF 1.3617469 0 -52.730505 0.1 0.1 1.6 15.06 0.0142039188 0 0 +QF Q3PF 1.2423663 0 -44.326352 0.06 0.06 0.5 0.75 0.0142039188 0 -9.21047 +DB B2PF 1.1657280 0 -40.752284 0.06 0.06 0.5 4.400000 0.025962030 -4.902576321 0 +QF QF3_PF 1.4907171 0 -61.809831 0.06 0.06 0.5 2.100484 0.0142039188 0 -36.58538 +QF YO5_TQ5 1.6006513 0 -69.549030 0.06 0.06 0.5 0.75 0.0142039188 0 0 +QF YO5_QD5 1.6157219 0 -70.609974 0.06 0.06 0.5 1.11 0.0142039188 0 82.97421 +DB YO5_DH5 1.6430920 0 -78.027114 0.1 0.1 0.5 8.698449 -0.0039 -3.782030724 0 +QF YO5_TQ4 1.5833771 0 -84.384146 0.06 0.06 0.5 0.75 -0.0216599742 0 0 +QF Q3EF_5 0.027554847 0 -41.693231 0.06 0.06 0.5 0.6 0.0036928331 0 -1.7423111 + </comment> + <constant name="D21EF_5_XPosition" value="0.151178*m"/> + <constant name="D21EF_5_ZPosition" value="-95.1303785*m"/> + <constant name="D21EF_5_InnerRadius" value="6.0*cm"/> + <constant name="D21EF_5_RotationAngle" value="-0.0173520834*rad"/> + <constant name="D21EF_5_Length" value="2.923301*m"/> + <constant name="D21EF_5_Bmax" value="-0.080044540*tesla"/> + <constant name="D21EF_5_GradientMax" value="0.0*tesla/m"/> + </define> + + <detectors> + <detector id="100" name="D21EF_5_BeamlineMagnet" vis="FFMagnetVis" type="compton_CylindricalDipoleMagnet"> + <placement x="D21EF_5_XPosition" y="0*m" z="D21EF_5_ZPosition" theta="D21EF_5_RotationAngle" /> + <dimensions x="D21EF_5_InnerRadius*4" y="D21EF_5_InnerRadius*4" z="D21EF_5_Length" r="D21EF_5_InnerRadius*2.0" /> + <apperture x="D21EF_5_InnerRadius" y="D21EF_5_InnerRadius" r="D21EF_5_InnerRadius" /> + <coil vis="MagnetCoilVis" dx="2*cm" dy="1.5*cm" /> + </detector> + </detectors> + + <fields> + <field name="D21EF_5_Magnet" type="MultipoleMagnet"> + <position x="D21EF_5_XPosition" y="0" z="D21EF_5_ZPosition"/> + <rotation x="0" y="D21EF_5_RotationAngle" z="0"/> + <shape type="Tube" rmin="0.0" rmax="D21EF_5_InnerRadius" dz="D21EF_5_Length*0.5"/> + <coefficient coefficient="D21EF_5_Bmax" skew="0.0*tesla"/> + <coefficient coefficient="D21EF_5_GradientMax" skew="0.0*tesla/cm"/> + </field> + </fields> +</lccdd> diff --git a/compact/colors.xml b/compact/colors.xml new file mode 100644 index 0000000..402c7bf --- /dev/null +++ b/compact/colors.xml @@ -0,0 +1,24 @@ +<display> + + <comment> + Colors tweaked to be displayable by geoViewer + </comment> + <vis name="AnlGreen" alpha="1" r="100/256" g="200/256" b="0/256"/> + <vis name="AnlViolet" alpha="1" r="100/256" g="0/256" b="150/256"/> + <vis name="AnlProcess_Blue" alpha="1" r="0/256" g="100/256" b="202/256"/> + <vis name="AnlOrange" alpha="1" r="255/256" g="121/256" b="0"/> + <vis name="AnlRed" alpha="1" r="205/256" g="45/256 " b="45/256"/> + <vis name="AnlGold" alpha="1" r="248/256" g="188/256" b="0/256"/> + <vis name="AnlBlue" alpha="1" r="0/256" g="96/256" b="156/256"/> + <vis name="AnlTeal" alpha="1" r="0/256" g="161/256" b="156/256"/> + <vis name="AnlGray" alpha="1" r="102/256" g="102/256" b="102/256"/> + <vis name="AnlLight_Gray" alpha="1" r="209/256" g="209/256" b="209/256"/> + <vis name="AnlLightGray" ref="AnlLight_Gray" /> + <vis name="AnlDarkRed" alpha="1" r="161/256" g="45/256" b="45/256"/> + <vis name="AnlDarkGreen" alpha="1" r="0" g="110/256" b="50/256"/> + <vis name="AnlDarkBlue" alpha="1" r="45/256" g="45/256" b="110/256"/> + <vis name="AnlDelta_Red" ref="AnlDarkRed"/> + <vis name="AnlDelta_Green" ref="AnlDarkGreen"/> + <vis name="AnlDelta_Blue" ref="AnlDarkBlue"/> + +</display> diff --git a/compact/definitions.xml b/compact/definitions.xml new file mode 100644 index 0000000..f08fccf --- /dev/null +++ b/compact/definitions.xml @@ -0,0 +1,6 @@ + <define> + <constant name="IPBeampipe_rmax" value="2.5*25.4*mm/2.0"/> + <constant name="Beampipe_rmax" value="IPBeampipe_rmax"/> + <constant name="BeampipeOD" value="2.0*IPBeampipe_rmax"/> + </define> + diff --git a/compact/display.xml b/compact/display.xml new file mode 100644 index 0000000..daa71d0 --- /dev/null +++ b/compact/display.xml @@ -0,0 +1,40 @@ + <display> + + <comment> + See compact/compton_colors.xml for list of colors. + </comment> + <vis name="InvisibleNoDaughters" showDaughters="false" visible="false"/> + <vis name="InvisibleWithDaughters" showDaughters="true" visible="false"/> + + <comment> + Tracker visualizations + </comment> + <vis name="TrackerVis" ref="AnlRed" /> + <vis name="TrackerSupportVis" ref="AnlBlue" visible="true" showDaughters="false"/> + <vis name="TrackerShieldingVis" ref="AnlGray" visible="true" showDaughters="false"/> + <vis name="TrackerServiceVis" ref="AnlGold" visible="true" showDaughters="false"/> + <vis name="TrackerLayerVis" ref="TrackerVis" visible="true" showDaughters="true"/> + <vis name="TrackerModuleVis" ref="TrackerLayerVis" visible="true" showDaughters="true"/> + <vis name="TrackerSurfaceVis" ref="TrackerLayerVis" visible="true" showDaughters="true"/> + + <comment> + Calorimeter visualization + </comment> + + <comment> + Calorimeter visualizations + </comment> + <vis name="PreVis" ref="AnlGold" showDaughters="true" visible="true"/> + <vis name="PreLayerVis" ref="PreVis" showDaughters="true" visible="true"/> + <vis name="PreModuleVis" ref="PreLayerVis" showDaughters="true" visible="true"/> + <vis name="PreRadiatorVis" ref="PreModuleVis" showDaughters="true" visible="true"/> + <vis name="PreReadoutVis" ref="TrackerSurfaceVis" showDaughters="true" visible="true"/> + + <comment> + Magnet/beamline visualization + </comment> + <vis name="MagnetVis" ref="AnlGreen" showDaughters="true" visible="true"/> + <vis name="MagnetCoilVis" ref="AnlRed" showDaughters="true" visible="true"/> + <vis name="BeamPipeVis" ref="AnlLight_Gray" showDaughters="true" visible="true"/> + + </display> diff --git a/compact/electron_tracker.xml b/compact/electron_tracker.xml new file mode 100644 index 0000000..f31add9 --- /dev/null +++ b/compact/electron_tracker.xml @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8"?> +<lccdd> + <define> + <comment> + Compton Electron Tracker + </comment> + + <comment> + - The detector length based on the 0.2*m step size and 4 layers. + </comment> + <constant name="electron_tracker_length" value="60.0*cm"/> + <constant name="electron_tracker_zoffset" value="10.0*cm"/> + <constant name="electron_tracker_center_zpos" value="6.2*m"/> + <constant name="electron_tracker_center_xpos" value="-0.16000052*m" /> + <constant name="electron_tracker_zmin" value="electron_tracker_center_zpos - electron_tracker_length/2.0 "/> + <constant name="electron_tracker_rotation" value="ionCrossingAngle"/> + <comment> + average of station 2 and 3 x postions below... + </comment> + <constant name="electron_trackerSlope_x" value="0.0249974*m" /> + <constant name="electron_tracker_nlayers" value="4"/> + <constant name="electron_tracker_dz" value="electron_tracker_length/(electron_tracker_nlayers-1)"/> + + <comment> + This angle is the angle subtended in phi for each trap segment. + </comment> + <constant name="electron_trackerLayer_nModules" value="36"/> + <constant name="electron_trackerLayerSmallMod_nModules" value="electron_trackerLayer_nModules/6"/> + <constant name="electron_trackerModOpeningAngle" value="360.0*degree/electron_trackerLayer_nModules"/> + <constant name="electron_trackerLayerBigMod_nModules" value="electron_trackerLayer_nModules - electron_trackerLayerSmallMod_nModules"/> + <constant name="electron_trackerLayerBigMod_phi0" value="(electron_trackerLayerSmallMod_nModules/2.0 + 0.5)*electron_trackerModOpeningAngle + Pi"/> + <constant name="electron_trackerLayerSmallMod_phi0" value="(electron_trackerLayerSmallMod_nModules/2.0 - 0.5)*electron_trackerModOpeningAngle + Pi"/> + + <constant name="electron_trackerMod1Inner_z" value="1.0*cm" /> + <constant name="electron_trackerMod1Inner_r" value="3.5*cm" /> + <constant name="electron_trackerMod1Outer_r" value="15.0*cm"/> + <constant name="electron_trackerMod1_x1" value="2.0*electron_trackerMod1Inner_r*sin(electron_trackerModOpeningAngle/2.0)"/> + <constant name="electron_trackerMod1_x2" value="2.0*electron_trackerMod1Outer_r*sin(electron_trackerModOpeningAngle/2.0)"/> + <constant name="electron_trackerMod1_y" value="electron_trackerMod1Outer_r*cos(electron_trackerModOpeningAngle/2.0) - electron_trackerMod1Inner_r"/> + + <constant name="electron_trackerMod1SmallOuter_r" value="10.0*cm"/> + <constant name="electron_trackerMod1Small_x2" value="2.0*electron_trackerMod1SmallOuter_r*sin(electron_trackerModOpeningAngle/2.0)"/> + <constant name="electron_trackerMod1Small_y" value="electron_trackerMod1SmallOuter_r*cos(electron_trackerModOpeningAngle/2.0) - electron_trackerMod1Inner_r"/> + + <constant name="electron_trackerMod2SmallOuter_r" value="11.0*cm"/> + <constant name="electron_trackerMod2Small_x2" value="2.0*electron_trackerMod2SmallOuter_r*sin(electron_trackerModOpeningAngle/2.0)"/> + <constant name="electron_trackerMod2Small_y" value="electron_trackerMod2SmallOuter_r*cos(electron_trackerModOpeningAngle/2.0) - electron_trackerMod1Inner_r"/> + + <constant name="electron_trackerMod3SmallOuter_r" value="11.0*cm"/> + <constant name="electron_trackerMod3Small_x2" value="2.0*electron_trackerMod3SmallOuter_r*sin(electron_trackerModOpeningAngle/2.0)"/> + <constant name="electron_trackerMod3Small_y" value="electron_trackerMod3SmallOuter_r*cos(electron_trackerModOpeningAngle/2.0) - electron_trackerMod1Inner_r"/> + + <constant name="electron_trackerMod4SmallOuter_r" value="12.0*cm"/> + <constant name="electron_trackerMod4Small_x2" value="2.0*electron_trackerMod4SmallOuter_r*sin(electron_trackerModOpeningAngle/2.0)"/> + <constant name="electron_trackerMod4Small_y" value="electron_trackerMod4SmallOuter_r*cos(electron_trackerModOpeningAngle/2.0) - electron_trackerMod1Inner_r"/> + + </define> + + <detectors> + + <detector + id="electron_tracker_Station_1_ID" + name="electron_tracker" + type="electron_tracker" + readout="ElectronTrackerHits" + vis="TrackerVis"> + <position x="electron_tracker_center_xpos" y="0" z="electron_tracker_center_zpos"/> + <rotation x="0*rad" y="electron_tracker_rotation" z="0*rad"/> + <module name="Module1" vis="TrackerModuleVis"> <!-- AnlProcess_Blue--> + <trd x1="electron_trackerMod1_x1/2.0" x2="electron_trackerMod1_x2/2.0" z="electron_trackerMod1_y/2"/> + <comment> Back-to-front </comment> + <module_component thickness="0.12*mm" material="CarbonFiber" vis="TrackerSupportVis" /> + <module_component thickness="0.3*mm" material="SiliconOxide" vis="TrackerSurfaceVis" sensitive="true"/> + </module> + <module name="SmallModule1" vis="TrackerModuleVis"> + <trd x1="electron_trackerMod1_x1/2.0" x2="electron_trackerMod1Small_x2/2.0" z="electron_trackerMod1Small_y/2"/> + <module_component thickness="0.12*mm" material="CarbonFiber" vis="TrackerSupportVis" /> + <module_component thickness="0.3*mm" material="SiliconOxide" vis="TrackerSurfaceVis" sensitive="true"/> + </module> + <module name="SmallModule2" vis="TrackerModuleVis"> + <trd x1="electron_trackerMod1_x1/2.0" x2="electron_trackerMod2Small_x2/2.0" z="electron_trackerMod2Small_y/2"/> + <module_component thickness="0.12*mm" material="CarbonFiber" vis="TrackerSupportVis" /> + <module_component thickness="0.3*mm" material="SiliconOxide" vis="TrackerSurfaceVis" sensitive="true"/> + </module> + <module name="SmallModule3" vis="TrackerModuleVis"> + <trd x1="electron_trackerMod1_x1/2.0" x2="electron_trackerMod3Small_x2/2.0" z="electron_trackerMod3Small_y/2"/> + <module_component thickness="0.12*mm" material="CarbonFiber" vis="TrackerSupportVis" /> + <module_component thickness="0.3*mm" material="SiliconOxide" vis="TrackerSurfaceVis" sensitive="true"/> + </module> + <module name="SmallModule4" vis="TrackerModuleVis"> + <trd x1="electron_trackerMod1_x1/2.0" x2="electron_trackerMod4Small_x2/2.0" z="electron_trackerMod4Small_y/2"/> + <module_component thickness="0.12*mm" material="CarbonFiber" vis="TrackerSupportVis" /> + <module_component thickness="0.3*mm" material="SiliconOxide" vis="TrackerSurfaceVis" sensitive="true"/> + </module> + <layer id="1"> + <envelope vis="TrackerLayerVis" rmin="electron_trackerMod1Inner_r" rmax="electron_trackerMod1Outer_r" length="1.0*cm" + zstart="-electron_tracker_length/2.0" /> + <ring phi0="electron_trackerLayerBigMod_phi0" dphi="electron_trackerModOpeningAngle" + r="electron_trackerMod1Inner_r+electron_trackerMod1_y/2.0" zstart="0.0*mm" + nmodules="electron_trackerLayerBigMod_nModules" dz="0 * mm" module="Module1" /> + <ring phi0="-electron_trackerLayerSmallMod_phi0" dphi="electron_trackerModOpeningAngle" + r="electron_trackerMod1Inner_r+electron_trackerMod1Small_y/2.0" zstart="0.0*mm" + nmodules="electron_trackerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule1" /> + </layer> + <layer id="2" > + <envelope vis="TrackerLayerVis" rmin="electron_trackerMod1Inner_r" rmax="electron_trackerMod1Outer_r" length="1.0*cm" + zstart="-electron_tracker_length/2.0 + 1.0*electron_tracker_dz" /> + <ring phi0="electron_trackerLayerBigMod_phi0" dphi="electron_trackerModOpeningAngle" + r="electron_trackerMod1Inner_r+electron_trackerMod1_y/2.0" zstart="0.0*mm" + nmodules="electron_trackerLayerBigMod_nModules" dz="0 * mm" module="Module1" /> + <ring phi0="-electron_trackerLayerSmallMod_phi0" dphi="electron_trackerModOpeningAngle" + r="electron_trackerMod1Inner_r+electron_trackerMod2Small_y/2.0" zstart="0.0*mm" + nmodules="electron_trackerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule2" /> + </layer> + <layer id="3" > + <envelope vis="TrackerLayerVis" rmin="electron_trackerMod1Inner_r" rmax="electron_trackerMod1Outer_r" length="1.0*cm" + zstart="-electron_tracker_length/2.0 + 2.0*electron_tracker_dz" /> + <ring phi0="electron_trackerLayerBigMod_phi0" dphi="electron_trackerModOpeningAngle" + r="electron_trackerMod1Inner_r+electron_trackerMod1_y/2.0" zstart="0.0*mm" + nmodules="electron_trackerLayerBigMod_nModules" dz="0 * mm" module="Module1" /> + <ring phi0="-electron_trackerLayerSmallMod_phi0" dphi="electron_trackerModOpeningAngle" + r="electron_trackerMod1Inner_r+electron_trackerMod3Small_y/2.0" zstart="0.0*mm" + nmodules="electron_trackerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule3" /> + </layer> + <layer id="4" > + <envelope vis="TrackerLayerVis" rmin="electron_trackerMod1Inner_r" rmax="electron_trackerMod1Outer_r" length="1.0*cm" + zstart="-electron_tracker_length/2.0 + 3.0*electron_tracker_dz" /> + <ring phi0="electron_trackerLayerBigMod_phi0" dphi="electron_trackerModOpeningAngle" + r="electron_trackerMod1Inner_r+electron_trackerMod1_y/2.0" zstart="0.0*mm" + nmodules="electron_trackerLayerBigMod_nModules" dz="0 * mm" module="Module1" /> + <ring phi0="-electron_trackerLayerSmallMod_phi0" dphi="electron_trackerModOpeningAngle" + r="electron_trackerMod1Inner_r+electron_trackerMod4Small_y/2.0" zstart="0.0*mm" + nmodules="electron_trackerLayerSmallMod_nModules" dz="0 * mm" module="SmallModule4" /> + </layer> + </detector> + + </detectors> + + <readouts> + <readout name="ElectronTrackerHits"> + <segmentation type="CartesianGridXZ" grid_size_x="0.020*mm" grid_size_z="0.020*mm" /> + <id>system:8,layer:4,module:12,sensor:2,x:32:-16,z:-16</id> + </readout> + </readouts> + +</lccdd> diff --git a/compact/elements.xml b/compact/elements.xml new file mode 100644 index 0000000..3fb9b9d --- /dev/null +++ b/compact/elements.xml @@ -0,0 +1,885 @@ +<?xml version="1.0" encoding="UTF-8"?> +<materials> + <element Z="89" formula="Ac" name="Ac"> + <atom type="A" unit="g/mol" value="227.028"/> + </element> + <material formula="Ac" name="Actinium" state="solid"> + <RL type="X0" unit="cm" value="0.601558"/> + <NIL type="lambda" unit="cm" value="21.2048"/> + <D type="density" unit="g/cm3" value="10.07"/> + <composite n="1" ref="Ac"/> + </material> + <element Z="47" formula="Ag" name="Ag"> + <atom type="A" unit="g/mol" value="107.868"/> + </element> + <material formula="Ag" name="Silver" state="solid"> + <RL type="X0" unit="cm" value="0.854292"/> + <NIL type="lambda" unit="cm" value="15.8546"/> + <D type="density" unit="g/cm3" value="10.5"/> + <composite n="1" ref="Ag"/> + </material> + <element Z="13" formula="Al" name="Al"> + <atom type="A" unit="g/mol" value="26.9815"/> + </element> + <material formula="Al" name="Aluminum" state="solid"> + <RL type="X0" unit="cm" value="8.89632"/> + <NIL type="lambda" unit="cm" value="38.8766"/> + <D type="density" unit="g/cm3" value="2.699"/> + <composite n="1" ref="Al"/> + </material> + <element Z="95" formula="Am" name="Am"> + <atom type="A" unit="g/mol" value="243.061"/> + </element> + <material formula="Am" name="Americium" state="solid"> + <RL type="X0" unit="cm" value="0.42431"/> + <NIL type="lambda" unit="cm" value="15.9812"/> + <D type="density" unit="g/cm3" value="13.67"/> + <composite n="1" ref="Am"/> + </material> + <element Z="18" formula="Ar" name="Ar"> + <atom type="A" unit="g/mol" value="39.9477"/> + </element> + <material formula="Ar" name="Argon" state="gas"> + <RL type="X0" unit="cm" value="11762.1"/> + <NIL type="lambda" unit="cm" value="71926"/> + <D type="density" unit="g/cm3" value="0.00166201"/> + <composite n="1" ref="Ar"/> + </material> + <element Z="33" formula="As" name="As"> + <atom type="A" unit="g/mol" value="74.9216"/> + </element> + <material formula="As" name="Arsenic" state="solid"> + <RL type="X0" unit="cm" value="2.0838"/> + <NIL type="lambda" unit="cm" value="25.7324"/> + <D type="density" unit="g/cm3" value="5.73"/> + <composite n="1" ref="As"/> + </material> + <element Z="85" formula="At" name="At"> + <atom type="A" unit="g/mol" value="209.987"/> + </element> + <material formula="At" name="Astatine" state="solid"> + <RL type="X0" unit="cm" value="0.650799"/> + <NIL type="lambda" unit="cm" value="22.3202"/> + <D type="density" unit="g/cm3" value="9.32"/> + <composite n="1" ref="At"/> + </material> + <element Z="79" formula="Au" name="Au"> + <atom type="A" unit="g/mol" value="196.967"/> + </element> + <material formula="Au" name="Gold" state="solid"> + <RL type="X0" unit="cm" value="0.334436"/> + <NIL type="lambda" unit="cm" value="10.5393"/> + <D type="density" unit="g/cm3" value="19.32"/> + <composite n="1" ref="Au"/> + </material> + <element Z="5" formula="B" name="B"> + <atom type="A" unit="g/mol" value="10.811"/> + </element> + <material formula="B" name="Boron" state="solid"> + <RL type="X0" unit="cm" value="22.2307"/> + <NIL type="lambda" unit="cm" value="32.2793"/> + <D type="density" unit="g/cm3" value="2.37"/> + <composite n="1" ref="B"/> + </material> + <element Z="56" formula="Ba" name="Ba"> + <atom type="A" unit="g/mol" value="137.327"/> + </element> + <material formula="Ba" name="Barium" state="solid"> + <RL type="X0" unit="cm" value="2.37332"/> + <NIL type="lambda" unit="cm" value="51.6743"/> + <D type="density" unit="g/cm3" value="3.5"/> + <composite n="1" ref="Ba"/> + </material> + <element Z="4" formula="Be" name="Be"> + <atom type="A" unit="g/mol" value="9.01218"/> + </element> + <material formula="Be" name="Beryllium" state="solid"> + <RL type="X0" unit="cm" value="35.276"/> + <NIL type="lambda" unit="cm" value="39.4488"/> + <D type="density" unit="g/cm3" value="1.848"/> + <composite n="1" ref="Be"/> + </material> + <element Z="83" formula="Bi" name="Bi"> + <atom type="A" unit="g/mol" value="208.98"/> + </element> + <material formula="Bi" name="Bismuth" state="solid"> + <RL type="X0" unit="cm" value="0.645388"/> + <NIL type="lambda" unit="cm" value="21.3078"/> + <D type="density" unit="g/cm3" value="9.747"/> + <composite n="1" ref="Bi"/> + </material> + <element Z="97" formula="Bk" name="Bk"> + <atom type="A" unit="g/mol" value="247.07"/> + </element> + <material formula="Bk" name="Berkelium" state="solid"> + <RL type="X0" unit="cm" value="0.406479"/> + <NIL type="lambda" unit="cm" value="15.6902"/> + <D type="density" unit="g/cm3" value="14"/> + <composite n="1" ref="Bk"/> + </material> + <element Z="35" formula="Br" name="Br"> + <atom type="A" unit="g/mol" value="79.9035"/> + </element> + <material formula="Br" name="Bromine" state="gas"> + <RL type="X0" unit="cm" value="1615.12"/> + <NIL type="lambda" unit="cm" value="21299"/> + <D type="density" unit="g/cm3" value="0.0070721"/> + <composite n="1" ref="Br"/> + </material> + <element Z="6" formula="C" name="C"> + <atom type="A" unit="g/mol" value="12.0107"/> + </element> + <material formula="C" name="Carbon" state="solid"> + <RL type="X0" unit="cm" value="21.3485"/> + <NIL type="lambda" unit="cm" value="40.1008"/> + <D type="density" unit="g/cm3" value="2"/> + <composite n="1" ref="C"/> + </material> + <element Z="20" formula="Ca" name="Ca"> + <atom type="A" unit="g/mol" value="40.078"/> + </element> + <material formula="Ca" name="Calcium" state="solid"> + <RL type="X0" unit="cm" value="10.4151"/> + <NIL type="lambda" unit="cm" value="77.3754"/> + <D type="density" unit="g/cm3" value="1.55"/> + <composite n="1" ref="Ca"/> + </material> + <element Z="48" formula="Cd" name="Cd"> + <atom type="A" unit="g/mol" value="112.411"/> + </element> + <material formula="Cd" name="Cadmium" state="solid"> + <RL type="X0" unit="cm" value="1.03994"/> + <NIL type="lambda" unit="cm" value="19.46"/> + <D type="density" unit="g/cm3" value="8.65"/> + <composite n="1" ref="Cd"/> + </material> + <element Z="58" formula="Ce" name="Ce"> + <atom type="A" unit="g/mol" value="140.115"/> + </element> + <material formula="Ce" name="Cerium" state="solid"> + <RL type="X0" unit="cm" value="1.19506"/> + <NIL type="lambda" unit="cm" value="27.3227"/> + <D type="density" unit="g/cm3" value="6.657"/> + <composite n="1" ref="Ce"/> + </material> + <element Z="98" formula="Cf" name="Cf"> + <atom type="A" unit="g/mol" value="251.08"/> + </element> + <material formula="Cf" name="Californium" state="solid"> + <RL type="X0" unit="cm" value="0.568328"/> + <NIL type="lambda" unit="cm" value="22.085"/> + <D type="density" unit="g/cm3" value="10"/> + <composite n="1" ref="Cf"/> + </material> + <element Z="17" formula="Cl" name="Cl"> + <atom type="A" unit="g/mol" value="35.4526"/> + </element> + <material formula="Cl" name="Chlorine" state="gas"> + <RL type="X0" unit="cm" value="6437.34"/> + <NIL type="lambda" unit="cm" value="38723.9"/> + <D type="density" unit="g/cm3" value="0.00299473"/> + <composite n="1" ref="Cl"/> + </material> + <element Z="96" formula="Cm" name="Cm"> + <atom type="A" unit="g/mol" value="247.07"/> + </element> + <material formula="Cm" name="Curium" state="solid"> + <RL type="X0" unit="cm" value="0.428706"/> + <NIL type="lambda" unit="cm" value="16.2593"/> + <D type="density" unit="g/cm3" value="13.51"/> + <composite n="1" ref="Cm"/> + </material> + <element Z="27" formula="Co" name="Co"> + <atom type="A" unit="g/mol" value="58.9332"/> + </element> + <material formula="Co" name="Cobalt" state="solid"> + <RL type="X0" unit="cm" value="1.53005"/> + <NIL type="lambda" unit="cm" value="15.2922"/> + <D type="density" unit="g/cm3" value="8.9"/> + <composite n="1" ref="Co"/> + </material> + <element Z="24" formula="Cr" name="Cr"> + <atom type="A" unit="g/mol" value="51.9961"/> + </element> + <material formula="Cr" name="Chromium" state="solid"> + <RL type="X0" unit="cm" value="2.0814"/> + <NIL type="lambda" unit="cm" value="18.1933"/> + <D type="density" unit="g/cm3" value="7.18"/> + <composite n="1" ref="Cr"/> + </material> + <element Z="55" formula="Cs" name="Cs"> + <atom type="A" unit="g/mol" value="132.905"/> + </element> + <material formula="Cs" name="Cesium" state="solid"> + <RL type="X0" unit="cm" value="4.4342"/> + <NIL type="lambda" unit="cm" value="95.317"/> + <D type="density" unit="g/cm3" value="1.873"/> + <composite n="1" ref="Cs"/> + </material> + <element Z="29" formula="Cu" name="Cu"> + <atom type="A" unit="g/mol" value="63.5456"/> + </element> + <material formula="Cu" name="Copper" state="solid"> + <RL type="X0" unit="cm" value="1.43558"/> + <NIL type="lambda" unit="cm" value="15.5141"/> + <D type="density" unit="g/cm3" value="8.96"/> + <composite n="1" ref="Cu"/> + </material> + <element Z="66" formula="Dy" name="Dy"> + <atom type="A" unit="g/mol" value="162.497"/> + </element> + <material formula="Dy" name="Dysprosium" state="solid"> + <RL type="X0" unit="cm" value="0.85614"/> + <NIL type="lambda" unit="cm" value="22.2923"/> + <D type="density" unit="g/cm3" value="8.55"/> + <composite n="1" ref="Dy"/> + </material> + <element Z="68" formula="Er" name="Er"> + <atom type="A" unit="g/mol" value="167.256"/> + </element> + <material formula="Er" name="Erbium" state="solid"> + <RL type="X0" unit="cm" value="0.788094"/> + <NIL type="lambda" unit="cm" value="21.2923"/> + <D type="density" unit="g/cm3" value="9.066"/> + <composite n="1" ref="Er"/> + </material> + <element Z="63" formula="Eu" name="Eu"> + <atom type="A" unit="g/mol" value="151.964"/> + </element> + <material formula="Eu" name="Europium" state="solid"> + <RL type="X0" unit="cm" value="1.41868"/> + <NIL type="lambda" unit="cm" value="35.6178"/> + <D type="density" unit="g/cm3" value="5.243"/> + <composite n="1" ref="Eu"/> + </material> + <element Z="9" formula="F" name="F"> + <atom type="A" unit="g/mol" value="18.9984"/> + </element> + <material formula="F" name="Fluorine" state="gas"> + <RL type="X0" unit="cm" value="20838.2"/> + <NIL type="lambda" unit="cm" value="59094.3"/> + <D type="density" unit="g/cm3" value="0.00158029"/> + <composite n="1" ref="F"/> + </material> + <element Z="26" formula="Fe" name="Fe"> + <atom type="A" unit="g/mol" value="55.8451"/> + </element> + <material formula="Fe" name="Iron" state="solid"> + <RL type="X0" unit="cm" value="1.75749"/> + <NIL type="lambda" unit="cm" value="16.959"/> + <D type="density" unit="g/cm3" value="7.874"/> + <composite n="1" ref="Fe"/> + </material> + <element Z="87" formula="Fr" name="Fr"> + <atom type="A" unit="g/mol" value="223.02"/> + </element> + <material formula="Fr" name="Francium" state="solid"> + <RL type="X0" unit="cm" value="6.18826"/> + <NIL type="lambda" unit="cm" value="212.263"/> + <D type="density" unit="g/cm3" value="1"/> + <composite n="1" ref="Fr"/> + </material> + <element Z="31" formula="Ga" name="Ga"> + <atom type="A" unit="g/mol" value="69.7231"/> + </element> + <material formula="Ga" name="Gallium" state="solid"> + <RL type="X0" unit="cm" value="2.1128"/> + <NIL type="lambda" unit="cm" value="24.3351"/> + <D type="density" unit="g/cm3" value="5.904"/> + <composite n="1" ref="Ga"/> + </material> + <element Z="64" formula="Gd" name="Gd"> + <atom type="A" unit="g/mol" value="157.252"/> + </element> + <material formula="Gd" name="Gadolinium" state="solid"> + <RL type="X0" unit="cm" value="0.947208"/> + <NIL type="lambda" unit="cm" value="23.9377"/> + <D type="density" unit="g/cm3" value="7.9004"/> + <composite n="1" ref="Gd"/> + </material> + <element Z="32" formula="Ge" name="Ge"> + <atom type="A" unit="g/mol" value="72.6128"/> + </element> + <material formula="Ge" name="Germanium" state="solid"> + <RL type="X0" unit="cm" value="2.3013"/> + <NIL type="lambda" unit="cm" value="27.3344"/> + <D type="density" unit="g/cm3" value="5.323"/> + <composite n="1" ref="Ge"/> + </material> + <element Z="1" formula="H" name="H"> + <atom type="A" unit="g/mol" value="1.00794"/> + </element> + <material formula="H" name="Hydrogen" state="gas"> + <RL type="X0" unit="cm" value="752776"/> + <NIL type="lambda" unit="cm" value="421239"/> + <D type="density" unit="g/cm3" value="8.3748e-05"/> + <composite n="1" ref="H"/> + </material> + <element Z="2" formula="He" name="He"> + <atom type="A" unit="g/mol" value="4.00264"/> + </element> + <material formula="He" name="Helium" state="gas"> + <RL type="X0" unit="cm" value="567113"/> + <NIL type="lambda" unit="cm" value="334266"/> + <D type="density" unit="g/cm3" value="0.000166322"/> + <composite n="1" ref="He"/> + </material> + <element Z="72" formula="Hf" name="Hf"> + <atom type="A" unit="g/mol" value="178.485"/> + </element> + <material formula="Hf" name="Hafnium" state="solid"> + <RL type="X0" unit="cm" value="0.517717"/> + <NIL type="lambda" unit="cm" value="14.7771"/> + <D type="density" unit="g/cm3" value="13.31"/> + <composite n="1" ref="Hf"/> + </material> + <element Z="80" formula="Hg" name="Hg"> + <atom type="A" unit="g/mol" value="200.599"/> + </element> + <material formula="Hg" name="Mercury" state="solid"> + <RL type="X0" unit="cm" value="0.475241"/> + <NIL type="lambda" unit="cm" value="15.105"/> + <D type="density" unit="g/cm3" value="13.546"/> + <composite n="1" ref="Hg"/> + </material> + <element Z="67" formula="Ho" name="Ho"> + <atom type="A" unit="g/mol" value="164.93"/> + </element> + <material formula="Ho" name="Holmium" state="solid"> + <RL type="X0" unit="cm" value="0.822447"/> + <NIL type="lambda" unit="cm" value="21.8177"/> + <D type="density" unit="g/cm3" value="8.795"/> + <composite n="1" ref="Ho"/> + </material> + <element Z="53" formula="I" name="I"> + <atom type="A" unit="g/mol" value="126.904"/> + </element> + <material formula="I" name="Iodine" state="solid"> + <RL type="X0" unit="cm" value="1.72016"/> + <NIL type="lambda" unit="cm" value="35.6583"/> + <D type="density" unit="g/cm3" value="4.93"/> + <composite n="1" ref="I"/> + </material> + <element Z="49" formula="In" name="In"> + <atom type="A" unit="g/mol" value="114.818"/> + </element> + <material formula="In" name="Indium" state="solid"> + <RL type="X0" unit="cm" value="1.21055"/> + <NIL type="lambda" unit="cm" value="23.2468"/> + <D type="density" unit="g/cm3" value="7.31"/> + <composite n="1" ref="In"/> + </material> + <element Z="77" formula="Ir" name="Ir"> + <atom type="A" unit="g/mol" value="192.216"/> + </element> + <material formula="Ir" name="Iridium" state="solid"> + <RL type="X0" unit="cm" value="0.294142"/> + <NIL type="lambda" unit="cm" value="9.01616"/> + <D type="density" unit="g/cm3" value="22.42"/> + <composite n="1" ref="Ir"/> + </material> + <element Z="19" formula="K" name="K"> + <atom type="A" unit="g/mol" value="39.0983"/> + </element> + <material formula="K" name="Potassium" state="solid"> + <RL type="X0" unit="cm" value="20.0871"/> + <NIL type="lambda" unit="cm" value="138.041"/> + <D type="density" unit="g/cm3" value="0.862"/> + <composite n="1" ref="K"/> + </material> + <element Z="36" formula="Kr" name="Kr"> + <atom type="A" unit="g/mol" value="83.7993"/> + </element> + <material formula="Kr" name="Krypton" state="gas"> + <RL type="X0" unit="cm" value="3269.44"/> + <NIL type="lambda" unit="cm" value="43962.9"/> + <D type="density" unit="g/cm3" value="0.00347832"/> + <composite n="1" ref="Kr"/> + </material> + <element Z="57" formula="La" name="La"> + <atom type="A" unit="g/mol" value="138.905"/> + </element> + <material formula="La" name="Lanthanum" state="solid"> + <RL type="X0" unit="cm" value="1.32238"/> + <NIL type="lambda" unit="cm" value="29.441"/> + <D type="density" unit="g/cm3" value="6.154"/> + <composite n="1" ref="La"/> + </material> + <element Z="3" formula="Li" name="Li"> + <atom type="A" unit="g/mol" value="6.94003"/> + </element> + <material formula="Li" name="Lithium" state="solid"> + <RL type="X0" unit="cm" value="154.997"/> + <NIL type="lambda" unit="cm" value="124.305"/> + <D type="density" unit="g/cm3" value="0.534"/> + <composite n="1" ref="Li"/> + </material> + <element Z="71" formula="Lu" name="Lu"> + <atom type="A" unit="g/mol" value="174.967"/> + </element> + <material formula="Lu" name="Lutetium" state="solid"> + <RL type="X0" unit="cm" value="0.703651"/> + <NIL type="lambda" unit="cm" value="19.8916"/> + <D type="density" unit="g/cm3" value="9.84"/> + <composite n="1" ref="Lu"/> + </material> + <element Z="12" formula="Mg" name="Mg"> + <atom type="A" unit="g/mol" value="24.305"/> + </element> + <material formula="Mg" name="Magnesium" state="solid"> + <RL type="X0" unit="cm" value="14.3859"/> + <NIL type="lambda" unit="cm" value="58.7589"/> + <D type="density" unit="g/cm3" value="1.74"/> + <composite n="1" ref="Mg"/> + </material> + <element Z="25" formula="Mn" name="Mn"> + <atom type="A" unit="g/mol" value="54.938"/> + </element> + <material formula="Mn" name="Manganese" state="solid"> + <RL type="X0" unit="cm" value="1.96772"/> + <NIL type="lambda" unit="cm" value="17.8701"/> + <D type="density" unit="g/cm3" value="7.44"/> + <composite n="1" ref="Mn"/> + </material> + <element Z="42" formula="Mo" name="Mo"> + <atom type="A" unit="g/mol" value="95.9313"/> + </element> + <material formula="Mo" name="Molybdenum" state="solid"> + <RL type="X0" unit="cm" value="0.959107"/> + <NIL type="lambda" unit="cm" value="15.6698"/> + <D type="density" unit="g/cm3" value="10.22"/> + <composite n="1" ref="Mo"/> + </material> + <element Z="7" formula="N" name="N"> + <atom type="A" unit="g/mol" value="14.0068"/> + </element> + <material formula="N" name="Nitrogen" state="gas"> + <RL type="X0" unit="cm" value="32602.2"/> + <NIL type="lambda" unit="cm" value="72430.3"/> + <D type="density" unit="g/cm3" value="0.0011652"/> + <composite n="1" ref="N"/> + </material> + <element Z="11" formula="Na" name="Na"> + <atom type="A" unit="g/mol" value="22.9898"/> + </element> + <material formula="Na" name="Sodium" state="solid"> + <RL type="X0" unit="cm" value="28.5646"/> + <NIL type="lambda" unit="cm" value="102.463"/> + <D type="density" unit="g/cm3" value="0.971"/> + <composite n="1" ref="Na"/> + </material> + <element Z="41" formula="Nb" name="Nb"> + <atom type="A" unit="g/mol" value="92.9064"/> + </element> + <material formula="Nb" name="Niobium" state="solid"> + <RL type="X0" unit="cm" value="1.15783"/> + <NIL type="lambda" unit="cm" value="18.4846"/> + <D type="density" unit="g/cm3" value="8.57"/> + <composite n="1" ref="Nb"/> + </material> + <element Z="60" formula="Nd" name="Nd"> + <atom type="A" unit="g/mol" value="144.236"/> + </element> + <material formula="Nd" name="Neodymium" state="solid"> + <RL type="X0" unit="cm" value="1.11667"/> + <NIL type="lambda" unit="cm" value="26.6308"/> + <D type="density" unit="g/cm3" value="6.9"/> + <composite n="1" ref="Nd"/> + </material> + <element Z="10" formula="Ne" name="Ne"> + <atom type="A" unit="g/mol" value="20.18"/> + </element> + <material formula="Ne" name="Neon" state="gas"> + <RL type="X0" unit="cm" value="34504.8"/> + <NIL type="lambda" unit="cm" value="114322"/> + <D type="density" unit="g/cm3" value="0.000838505"/> + <composite n="1" ref="Ne"/> + </material> + <element Z="28" formula="Ni" name="Ni"> + <atom type="A" unit="g/mol" value="58.6933"/> + </element> + <material formula="Ni" name="Nickel" state="solid"> + <RL type="X0" unit="cm" value="1.42422"/> + <NIL type="lambda" unit="cm" value="15.2265"/> + <D type="density" unit="g/cm3" value="8.902"/> + <composite n="1" ref="Ni"/> + </material> + <element Z="93" formula="Np" name="Np"> + <atom type="A" unit="g/mol" value="237.048"/> + </element> + <material formula="Np" name="Neptunium" state="solid"> + <RL type="X0" unit="cm" value="0.289676"/> + <NIL type="lambda" unit="cm" value="10.6983"/> + <D type="density" unit="g/cm3" value="20.25"/> + <composite n="1" ref="Np"/> + </material> + <element Z="8" formula="O" name="O"> + <atom type="A" unit="g/mol" value="15.9994"/> + </element> + <material formula="O" name="Oxygen" state="gas"> + <RL type="X0" unit="cm" value="25713.8"/> + <NIL type="lambda" unit="cm" value="66233.9"/> + <D type="density" unit="g/cm3" value="0.00133151"/> + <composite n="1" ref="O"/> + </material> + <element Z="76" formula="Os" name="Os"> + <atom type="A" unit="g/mol" value="190.225"/> + </element> + <material formula="Os" name="Osmium" state="solid"> + <RL type="X0" unit="cm" value="0.295861"/> + <NIL type="lambda" unit="cm" value="8.92553"/> + <D type="density" unit="g/cm3" value="22.57"/> + <composite n="1" ref="Os"/> + </material> + <element Z="15" formula="P" name="P"> + <atom type="A" unit="g/mol" value="30.9738"/> + </element> + <material formula="P" name="Phosphorus" state="solid"> + <RL type="X0" unit="cm" value="9.63879"/> + <NIL type="lambda" unit="cm" value="49.9343"/> + <D type="density" unit="g/cm3" value="2.2"/> + <composite n="1" ref="P"/> + </material> + <element Z="91" formula="Pa" name="Pa"> + <atom type="A" unit="g/mol" value="231.036"/> + </element> + <material formula="Pa" name="Protactinium" state="solid"> + <RL type="X0" unit="cm" value="0.38607"/> + <NIL type="lambda" unit="cm" value="13.9744"/> + <D type="density" unit="g/cm3" value="15.37"/> + <composite n="1" ref="Pa"/> + </material> + <element Z="82" formula="Pb" name="Pb"> + <atom type="A" unit="g/mol" value="207.217"/> + </element> + <material formula="Pb" name="Lead" state="solid"> + <RL type="X0" unit="cm" value="0.561253"/> + <NIL type="lambda" unit="cm" value="18.2607"/> + <D type="density" unit="g/cm3" value="11.35"/> + <composite n="1" ref="Pb"/> + </material> + <element Z="46" formula="Pd" name="Pd"> + <atom type="A" unit="g/mol" value="106.415"/> + </element> + <material formula="Pd" name="Palladium" state="solid"> + <RL type="X0" unit="cm" value="0.765717"/> + <NIL type="lambda" unit="cm" value="13.7482"/> + <D type="density" unit="g/cm3" value="12.02"/> + <composite n="1" ref="Pd"/> + </material> + <element Z="61" formula="Pm" name="Pm"> + <atom type="A" unit="g/mol" value="144.913"/> + </element> + <material formula="Pm" name="Promethium" state="solid"> + <RL type="X0" unit="cm" value="1.04085"/> + <NIL type="lambda" unit="cm" value="25.4523"/> + <D type="density" unit="g/cm3" value="7.22"/> + <composite n="1" ref="Pm"/> + </material> + <element Z="84" formula="Po" name="Po"> + <atom type="A" unit="g/mol" value="208.982"/> + </element> + <material formula="Po" name="Polonium" state="solid"> + <RL type="X0" unit="cm" value="0.661092"/> + <NIL type="lambda" unit="cm" value="22.2842"/> + <D type="density" unit="g/cm3" value="9.32"/> + <composite n="1" ref="Po"/> + </material> + <element Z="59" formula="Pr" name="Pr"> + <atom type="A" unit="g/mol" value="140.908"/> + </element> + <material formula="Pr" name="Praseodymium" state="solid"> + <RL type="X0" unit="cm" value="1.1562"/> + <NIL type="lambda" unit="cm" value="27.1312"/> + <D type="density" unit="g/cm3" value="6.71"/> + <composite n="1" ref="Pr"/> + </material> + <element Z="78" formula="Pt" name="Pt"> + <atom type="A" unit="g/mol" value="195.078"/> + </element> + <material formula="Pt" name="Platinum" state="solid"> + <RL type="X0" unit="cm" value="0.305053"/> + <NIL type="lambda" unit="cm" value="9.46584"/> + <D type="density" unit="g/cm3" value="21.45"/> + <composite n="1" ref="Pt"/> + </material> + <element Z="94" formula="Pu" name="Pu"> + <atom type="A" unit="g/mol" value="244.064"/> + </element> + <material formula="Pu" name="Plutonium" state="solid"> + <RL type="X0" unit="cm" value="0.298905"/> + <NIL type="lambda" unit="cm" value="11.0265"/> + <D type="density" unit="g/cm3" value="19.84"/> + <composite n="1" ref="Pu"/> + </material> + <element Z="88" formula="Ra" name="Ra"> + <atom type="A" unit="g/mol" value="226.025"/> + </element> + <material formula="Ra" name="Radium" state="solid"> + <RL type="X0" unit="cm" value="1.22987"/> + <NIL type="lambda" unit="cm" value="42.6431"/> + <D type="density" unit="g/cm3" value="5"/> + <composite n="1" ref="Ra"/> + </material> + <element Z="37" formula="Rb" name="Rb"> + <atom type="A" unit="g/mol" value="85.4677"/> + </element> + <material formula="Rb" name="Rubidium" state="solid"> + <RL type="X0" unit="cm" value="7.19774"/> + <NIL type="lambda" unit="cm" value="100.218"/> + <D type="density" unit="g/cm3" value="1.532"/> + <composite n="1" ref="Rb"/> + </material> + <element Z="75" formula="Re" name="Re"> + <atom type="A" unit="g/mol" value="186.207"/> + </element> + <material formula="Re" name="Rhenium" state="solid"> + <RL type="X0" unit="cm" value="0.318283"/> + <NIL type="lambda" unit="cm" value="9.5153"/> + <D type="density" unit="g/cm3" value="21.02"/> + <composite n="1" ref="Re"/> + </material> + <element Z="45" formula="Rh" name="Rh"> + <atom type="A" unit="g/mol" value="102.906"/> + </element> + <material formula="Rh" name="Rhodium" state="solid"> + <RL type="X0" unit="cm" value="0.746619"/> + <NIL type="lambda" unit="cm" value="13.2083"/> + <D type="density" unit="g/cm3" value="12.41"/> + <composite n="1" ref="Rh"/> + </material> + <element Z="86" formula="Rn" name="Rn"> + <atom type="A" unit="g/mol" value="222.018"/> + </element> + <material formula="Rn" name="Radon" state="gas"> + <RL type="X0" unit="cm" value="697.777"/> + <NIL type="lambda" unit="cm" value="23532"/> + <D type="density" unit="g/cm3" value="0.00900662"/> + <composite n="1" ref="Rn"/> + </material> + <element Z="44" formula="Ru" name="Ru"> + <atom type="A" unit="g/mol" value="101.065"/> + </element> + <material formula="Ru" name="Ruthenium" state="solid"> + <RL type="X0" unit="cm" value="0.764067"/> + <NIL type="lambda" unit="cm" value="13.1426"/> + <D type="density" unit="g/cm3" value="12.41"/> + <composite n="1" ref="Ru"/> + </material> + <element Z="16" formula="S" name="S"> + <atom type="A" unit="g/mol" value="32.0661"/> + </element> + <material formula="S" name="Sulfur" state="solid"> + <RL type="X0" unit="cm" value="9.74829"/> + <NIL type="lambda" unit="cm" value="55.6738"/> + <D type="density" unit="g/cm3" value="2"/> + <composite n="1" ref="S"/> + </material> + <element Z="51" formula="Sb" name="Sb"> + <atom type="A" unit="g/mol" value="121.76"/> + </element> + <material formula="Sb" name="Antimony" state="solid"> + <RL type="X0" unit="cm" value="1.30401"/> + <NIL type="lambda" unit="cm" value="25.8925"/> + <D type="density" unit="g/cm3" value="6.691"/> + <composite n="1" ref="Sb"/> + </material> + <element Z="21" formula="Sc" name="Sc"> + <atom type="A" unit="g/mol" value="44.9559"/> + </element> + <material formula="Sc" name="Scandium" state="solid"> + <RL type="X0" unit="cm" value="5.53545"/> + <NIL type="lambda" unit="cm" value="41.609"/> + <D type="density" unit="g/cm3" value="2.989"/> + <composite n="1" ref="Sc"/> + </material> + <element Z="34" formula="Se" name="Se"> + <atom type="A" unit="g/mol" value="78.9594"/> + </element> + <material formula="Se" name="Selenium" state="solid"> + <RL type="X0" unit="cm" value="2.64625"/> + <NIL type="lambda" unit="cm" value="33.356"/> + <D type="density" unit="g/cm3" value="4.5"/> + <composite n="1" ref="Se"/> + </material> + <element Z="14" formula="Si" name="Si"> + <atom type="A" unit="g/mol" value="28.0854"/> + </element> + <material formula="Si" name="Silicon" state="solid"> + <RL type="X0" unit="cm" value="9.36607"/> + <NIL type="lambda" unit="cm" value="45.7531"/> + <D type="density" unit="g/cm3" value="2.33"/> + <composite n="1" ref="Si"/> + </material> + <element Z="62" formula="Sm" name="Sm"> + <atom type="A" unit="g/mol" value="150.366"/> + </element> + <material formula="Sm" name="Samarium" state="solid"> + <RL type="X0" unit="cm" value="1.01524"/> + <NIL type="lambda" unit="cm" value="24.9892"/> + <D type="density" unit="g/cm3" value="7.46"/> + <composite n="1" ref="Sm"/> + </material> + <element Z="50" formula="Sn" name="Sn"> + <atom type="A" unit="g/mol" value="118.71"/> + </element> + <material formula="Sn" name="Tin" state="solid"> + <RL type="X0" unit="cm" value="1.20637"/> + <NIL type="lambda" unit="cm" value="23.4931"/> + <D type="density" unit="g/cm3" value="7.31"/> + <composite n="1" ref="Sn"/> + </material> + <element Z="38" formula="Sr" name="Sr"> + <atom type="A" unit="g/mol" value="87.6166"/> + </element> + <material formula="Sr" name="Strontium" state="solid"> + <RL type="X0" unit="cm" value="4.237"/> + <NIL type="lambda" unit="cm" value="61.0238"/> + <D type="density" unit="g/cm3" value="2.54"/> + <composite n="1" ref="Sr"/> + </material> + <element Z="73" formula="Ta" name="Ta"> + <atom type="A" unit="g/mol" value="180.948"/> + </element> + <material formula="Ta" name="Tantalum" state="solid"> + <RL type="X0" unit="cm" value="0.409392"/> + <NIL type="lambda" unit="cm" value="11.8846"/> + <D type="density" unit="g/cm3" value="16.654"/> + <composite n="1" ref="Ta"/> + </material> + <element Z="65" formula="Tb" name="Tb"> + <atom type="A" unit="g/mol" value="158.925"/> + </element> + <material formula="Tb" name="Terbium" state="solid"> + <RL type="X0" unit="cm" value="0.893977"/> + <NIL type="lambda" unit="cm" value="23.0311"/> + <D type="density" unit="g/cm3" value="8.229"/> + <composite n="1" ref="Tb"/> + </material> + <element Z="43" formula="Tc" name="Tc"> + <atom type="A" unit="g/mol" value="97.9072"/> + </element> + <material formula="Tc" name="Technetium" state="solid"> + <RL type="X0" unit="cm" value="0.833149"/> + <NIL type="lambda" unit="cm" value="14.0185"/> + <D type="density" unit="g/cm3" value="11.5"/> + <composite n="1" ref="Tc"/> + </material> + <element Z="52" formula="Te" name="Te"> + <atom type="A" unit="g/mol" value="127.603"/> + </element> + <material formula="Te" name="Tellurium" state="solid"> + <RL type="X0" unit="cm" value="1.41457"/> + <NIL type="lambda" unit="cm" value="28.1797"/> + <D type="density" unit="g/cm3" value="6.24"/> + <composite n="1" ref="Te"/> + </material> + <element Z="90" formula="Th" name="Th"> + <atom type="A" unit="g/mol" value="232.038"/> + </element> + <material formula="Th" name="Thorium" state="solid"> + <RL type="X0" unit="cm" value="0.51823"/> + <NIL type="lambda" unit="cm" value="18.353"/> + <D type="density" unit="g/cm3" value="11.72"/> + <composite n="1" ref="Th"/> + </material> + <element Z="22" formula="Ti" name="Ti"> + <atom type="A" unit="g/mol" value="47.8667"/> + </element> + <material formula="Ti" name="Titanium" state="solid"> + <RL type="X0" unit="cm" value="3.5602"/> + <NIL type="lambda" unit="cm" value="27.9395"/> + <D type="density" unit="g/cm3" value="4.54"/> + <composite n="1" ref="Ti"/> + </material> + <element Z="81" formula="Tl" name="Tl"> + <atom type="A" unit="g/mol" value="204.383"/> + </element> + <material formula="Tl" name="Thallium" state="solid"> + <RL type="X0" unit="cm" value="0.547665"/> + <NIL type="lambda" unit="cm" value="17.6129"/> + <D type="density" unit="g/cm3" value="11.72"/> + <composite n="1" ref="Tl"/> + </material> + <element Z="69" formula="Tm" name="Tm"> + <atom type="A" unit="g/mol" value="168.934"/> + </element> + <material formula="Tm" name="Thulium" state="solid"> + <RL type="X0" unit="cm" value="0.754428"/> + <NIL type="lambda" unit="cm" value="20.7522"/> + <D type="density" unit="g/cm3" value="9.321"/> + <composite n="1" ref="Tm"/> + </material> + <element Z="92" formula="U" name="U"> + <atom type="A" unit="g/mol" value="238.029"/> + </element> + <material formula="U" name="Uranium" state="solid"> + <RL type="X0" unit="cm" value="0.31663"/> + <NIL type="lambda" unit="cm" value="11.4473"/> + <D type="density" unit="g/cm3" value="18.95"/> + <composite n="1" ref="U"/> + </material> + <element Z="23" formula="V" name="V"> + <atom type="A" unit="g/mol" value="50.9415"/> + </element> + <material formula="V" name="Vanadium" state="solid"> + <RL type="X0" unit="cm" value="2.59285"/> + <NIL type="lambda" unit="cm" value="21.2187"/> + <D type="density" unit="g/cm3" value="6.11"/> + <composite n="1" ref="V"/> + </material> + <element Z="74" formula="W" name="W"> + <atom type="A" unit="g/mol" value="183.842"/> + </element> + <material formula="W" name="Tungsten" state="solid"> + <RL type="X0" unit="cm" value="0.350418"/> + <NIL type="lambda" unit="cm" value="10.3057"/> + <D type="density" unit="g/cm3" value="19.3"/> + <composite n="1" ref="W"/> + </material> + <element Z="54" formula="Xe" name="Xe"> + <atom type="A" unit="g/mol" value="131.292"/> + </element> + <material formula="Xe" name="Xenon" state="gas"> + <RL type="X0" unit="cm" value="1546.2"/> + <NIL type="lambda" unit="cm" value="32477.9"/> + <D type="density" unit="g/cm3" value="0.00548536"/> + <composite n="1" ref="Xe"/> + </material> + <element Z="39" formula="Y" name="Y"> + <atom type="A" unit="g/mol" value="88.9058"/> + </element> + <material formula="Y" name="Yttrium" state="solid"> + <RL type="X0" unit="cm" value="2.32943"/> + <NIL type="lambda" unit="cm" value="34.9297"/> + <D type="density" unit="g/cm3" value="4.469"/> + <composite n="1" ref="Y"/> + </material> + <element Z="70" formula="Yb" name="Yb"> + <atom type="A" unit="g/mol" value="173.038"/> + </element> + <material formula="Yb" name="Ytterbium" state="solid"> + <RL type="X0" unit="cm" value="1.04332"/> + <NIL type="lambda" unit="cm" value="28.9843"/> + <D type="density" unit="g/cm3" value="6.73"/> + <composite n="1" ref="Yb"/> + </material> + <element Z="30" formula="Zn" name="Zn"> + <atom type="A" unit="g/mol" value="65.3955"/> + </element> + <material formula="Zn" name="Zinc" state="solid"> + <RL type="X0" unit="cm" value="1.74286"/> + <NIL type="lambda" unit="cm" value="19.8488"/> + <D type="density" unit="g/cm3" value="7.133"/> + <composite n="1" ref="Zn"/> + </material> + <element Z="40" formula="Zr" name="Zr"> + <atom type="A" unit="g/mol" value="91.2236"/> + </element> + <material formula="Zr" name="Zirconium" state="solid"> + <RL type="X0" unit="cm" value="1.56707"/> + <NIL type="lambda" unit="cm" value="24.2568"/> + <D type="density" unit="g/cm3" value="6.506"/> + <composite n="1" ref="Zr"/> + </material> +</materials> diff --git a/compact/fields.xml b/compact/fields.xml new file mode 100644 index 0000000..79e195f --- /dev/null +++ b/compact/fields.xml @@ -0,0 +1,18 @@ +<geant4_setup> + <properties> + <attributes name="geant4_field" + id="0" + type="Geant4FieldSetup" + object="D21EF_5_Magnet" + global="true" + min_chord_step="0.001*mm" + delta_chord="0.025*mm" + delta_intersection="1e-06*mm" + delta_one_step="0.00001*mm" + eps_min="1.0e-6" + eps_max="1.0e-5" + stepper="HelixSimpleRunge" + equation="Mag_UsualEqRhs"> + </attributes> + </properties> +</geant4_setup> diff --git a/compact/materials.xml b/compact/materials.xml new file mode 100644 index 0000000..72961aa --- /dev/null +++ b/compact/materials.xml @@ -0,0 +1,222 @@ +<?xml version="1.0" encoding="UTF-8"?> +<materials> + <!-- + Air by weight from + + http://www.engineeringtoolbox.com/air-composition-24_212.html + --> + <material name="Air"> + <D type="density" unit="g/cm3" value="0.0012"/> + <fraction n="0.754" ref="N"/> + <fraction n="0.234" ref="O"/> + <fraction n="0.012" ref="Ar"/> + </material> + <!-- We model vakuum just as very thin air --> + <material name="Vacuum"> + <D type="density" unit="g/cm3" value="0.0000000001"/> + <fraction n="0.754" ref="N"/> + <fraction n="0.234" ref="O"/> + <fraction n="0.012" ref="Ar"/> + </material> + <material name="Epoxy"> + <D type="density" value="1.3" unit="g/cm3"/> + <composite n="44" ref="H"/> + <composite n="15" ref="C"/> + <composite n="7" ref="O"/> + </material> + <material name="Quartz"> + <D type="density" value="2.2" unit="g/cm3"/> + <composite n="1" ref="Si"/> + <composite n="2" ref="O"/> + </material> + <material name="G10"> + <D type="density" value="1.7" unit="g/cm3"/> + <fraction n="0.08" ref="Cl"/> + <fraction n="0.773" ref="Quartz"/> + <fraction n="0.147" ref="Epoxy"/> + </material> + <material name="Polystyrene"> + <D value="1.032" unit="g/cm3"/> + <composite n="19" ref="C"/> + <composite n="21" ref="H"/> + </material> + <material name="Steel235"> + <D value="7.85" unit="g/cm3"/> + <fraction n="0.998" ref="Fe"/> + <fraction n=".002" ref="C"/> + </material> + <material name="SiliconOxide"> + <D type="density" value="2.65" unit="g/cm3"/> + <composite n="1" ref="Si"/> + <composite n="2" ref="O"/> + </material> + <material name="BoronOxide"> + <D type="density" value="2.46" unit="g/cm3"/> + <composite n="2" ref="B"/> + <composite n="3" ref="O"/> + </material> + <material name="SodiumOxide"> + <D type="density" value="2.65" unit="g/cm3"/> + <composite n="2" ref="Na"/> + <composite n="1" ref="O"/> + </material> + <material name="AluminumOxide"> + <D type="density" value="3.89" unit="g/cm3"/> + <composite n="2" ref="Al"/> + <composite n="3" ref="O"/> + </material> + <material name="SiliconNitride"> + <D type="density" value="3.17" unit="g/cm3"/> + <composite n="3" ref="Si"/> + <composite n="4" ref="N"/> + </material> + <material name="PyrexGlass"> + <D type="density" value="2.23" unit="g/cm3"/> + <fraction n="0.806" ref="SiliconOxide"/> + <fraction n="0.130" ref="BoronOxide"/> + <fraction n="0.040" ref="SodiumOxide"/> + <fraction n="0.023" ref="AluminumOxide"/> + </material> + <material name="CarbonFiber"> + <D type="density" value="1.5" unit="g/cm3"/> + <fraction n="0.65" ref="C"/> + <fraction n="0.35" ref="Epoxy"/> + </material> + <material name="CarbonFiber_50D"> + <D type="density" value="0.75" unit="g/cm3"/> + <fraction n="0.65" ref="C"/> + <fraction n="0.35" ref="Epoxy"/> + </material> + <material name="Rohacell31"> + <D type="density" value="0.032" unit="g/cm3"/> + <composite n="9" ref="C"/> + <composite n="13" ref="H"/> + <composite n="2" ref="O"/> + <composite n="1" ref="N"/> + </material> + <material name="Rohacell31_50D"> + <D type="density" value="0.016" unit="g/cm3"/> + <composite n="9" ref="C"/> + <composite n="13" ref="H"/> + <composite n="2" ref="O"/> + <composite n="1" ref="N"/> + </material> + <material name="RPCGasDefault" state="gas"> + <D type="density" value="0.0037" unit="g/cm3"/> + <composite n="209" ref="C"/> + <composite n="239" ref="H"/> + <composite n="381" ref="F"/> + </material> + <material name="PolystyreneFoam"> + <D type="density" value="0.0056" unit="g/cm3"/> + <fraction n="1.0" ref="Polystyrene"/> + </material> + <material name="Kapton"> + <D value="1.43" unit="g/cm3"/> + <composite n="22" ref="C"/> + <composite n="10" ref="H"/> + <composite n="2" ref="N"/> + <composite n="5" ref="O"/> + </material> + <material name="PEEK"> + <D value="1.37" unit="g/cm3"/> + <composite n="19" ref="C"/> + <composite n="12" ref="H"/> + <composite n="3" ref="O"/> + </material> + <material name="TungstenDens23"> + <D value="17.7" unit="g / cm3"/> + <fraction n="0.925" ref="W"/> + <fraction n="0.066" ref="Ni"/> + <fraction n="0.009" ref="Fe"/> + </material> + <material name="TungstenDens24"> + <D value="17.8" unit="g / cm3"/> + <fraction n="0.93" ref="W"/> + <fraction n="0.061" ref="Ni"/> + <fraction n="0.009" ref="Fe"/> + </material> + <material name="TungstenDens25"> + <D value="18.2" unit="g / cm3"/> + <fraction n="0.950" ref="W"/> + <fraction n="0.044" ref="Ni"/> + <fraction n="0.006" ref="Fe"/> + </material> + <material name="CarbonFiber_25percent"> + <D type="density" value="0.375" unit="g / cm3"/> + <fraction n="1.0" ref="CarbonFiber"/> + </material> + <material name="CarbonFiber_15percent"> + <D type="density" value="0.225" unit="g / cm3"/> + <fraction n="1.0" ref="CarbonFiber"/> + </material> + <material name="Rohacell31_50percent"> + <D type="density" value="0.016" unit="g / cm3"/> + <fraction n="1.0" ref="Rohacell31"/> + </material> + <material name="Rohacell31_15percent"> + <D type="density" value="0.0048" unit="g / cm3"/> + <fraction n="1.0" ref="Rohacell31"/> + </material> + <material name="BoratedPolyethylene5"> + <D value="0.93" unit="g / cm3"/> + <fraction n="0.612" ref="C"/> + <fraction n="0.222" ref="O"/> + <fraction n="0.116" ref="H"/> + <fraction n="0.050" ref="B"/> + </material> + <material name="SiliconCarbide"> + <D value="3.1" unit="g / cm3"/> + <composite n="1" ref="Si"/> + <composite n="1" ref="C"/> + </material> + <material name="SiliconCarbide_6percent"> + <D value="0.186" unit="g / cm3"/> + <fraction n="1.0" ref="SiliconCarbide"/> + </material> + <material name="PlasticScint"> + <D type="density" unit="g/cm3" value="1.032"/> + <composite n="9" ref="C"/> + <composite n="10" ref="H"/> + </material> + <material name="PbWO4"> + <D type="density" value="8.3" unit="g / cm3"/> + <composite n="1" ref="Pb"/> + <composite n="1" ref="W"/> + <composite n="4" ref="O"/> + </material> + <material name="StainlessSteel"> + <D type="density" value="8.3" unit="g / cm3"/> + <fraction n="0.74" ref="Fe"/> + <fraction n="0.18" ref="Cr"/> + <fraction n="0.08" ref="Ni"/> + </material> + <material name="ZDC_Tungsten"> + <D type="density" value="18.73" unit="g / cm3"/> + <fraction n="0.943" ref="W"/> + <fraction n="0.038" ref="Ni"/> + <fraction n="0.019" ref="Cu"/> + </material> + <material name="ZDC_EpoxyGlue"> + <D type="density" value="1.38" unit="g/cm3"/> + <composite n="8" ref="H"/> + <composite n="10" ref="C"/> + <composite n="4" ref="O"/> + </material> + <material name="ZDC_Scintillator"> + <D type="density" value="1.032" unit="g/cm3"/> + <composite n="8" ref="C"/> + <composite n="8" ref="H"/> + </material> + <material name="ZDC_WSciFiMixture"> + <D type="density" value="10.17" unit="g/cm3"/> + <composite n="0.950" ref="W"/> + <composite n="0.009" ref="H"/> + <composite n="0.041" ref="C"/> + </material> + <material name="WSciFi_UCLA_Abs"> + <D type="density" value="12.4" unit="g / cm3"/> + <fraction n="0.96" ref="W"/> + <fraction n="0.04" ref="Polystyrene"/> + </material> +</materials> diff --git a/compact/photon_calorimeter.xml b/compact/photon_calorimeter.xml new file mode 100644 index 0000000..0374939 --- /dev/null +++ b/compact/photon_calorimeter.xml @@ -0,0 +1,49 @@ +<lccdd> + <comment> + Compton Photon Calorimeter + </comment> + + <detectors> + <detector + id="photon_calorimeter_ID" + name="photon_calorimeter" + vis="photon_calorimeter_vis" + type="CrystalCalorimeter" + readout="PhotonCalorimeterHits"> + <position + x="photon_calorimeter_x_position" + y="photon_calorimeter_y_position" + z="photon_calorimeter_z_position" + /> + <rotation + x="photon_calorimeter_x_angle" + y="photon_calorimeter_y_angle" + z="photon_calorimeter_z_angle" + /> + <dimensions + x="photon_calorimeter_width" + z="photon_calorimeter_length" + /> + <layer repeat="ffi_ZDC_SiWSciFi_NRepeat"> + <slice name="Silicon_1_slice" material="Silicon" thickness="ffi_ZDC_Silicon_1_Thickness" vis="RedVis" sensitive="true"/> + <slice name="Glue_1_slice" material="ZDC_EpoxyGlue" thickness="ffi_ZDC_Glue_1_Thickness" vis="AnlGold"/> + <slice name="FPC_slice" material="ZDC_EpoxyGlue" thickness="ffi_ZDC_FPC_Thickness" vis="AnlGold"/> + <slice name="Air_1_slice" material="Air" thickness="ffi_ZDC_Air_1_Thickness" vis="InvisibleNoDaughters"/> + <slice name="WSciFi_slice" material="ZDC_WSciFiMixture" thickness="ffi_ZDC_WSciFi_Thickness" vis="AnlGold" sensitive="true"/> <!-- now this is a WSciFi mixture --> + <slice name="Air_2_slice" material="Air" thickness="ffi_ZDC_Air_2_Thickness" vis="InvisibleNoDaughters"/> + </layer> + </detector> + </detectors> + + <readouts> + <readout name="PhotonCalorimeterHits"> + <segmentation + name="PbWO4_grid" + type="CartesianGridXY" + grid_size_x="2.0*cm" + grid_size_y="2.0*cm" + /> + <id>system:8,layer:12,slice:12,x:32:-16,y:-16</id> + </readout> + </readouts> +</lccdd> diff --git a/compton.xml b/compton.xml new file mode 100644 index 0000000..f28b4df --- /dev/null +++ b/compton.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<lccdd> + <define> + <constant name="Pi" value="3.14159265359"/> + <constant name="world_side" value="30*m"/> + <constant name="world_x" value="world_side"/> + <constant name="world_y" value="world_side"/> + <constant name="world_z" value="100*m"/> + <constant name="BeamPipeB0_ID" value="1"/> + <constant name="BeamPipe_ID" value="2"/> + + <include ref="compact/definitions.xml" /> + + <comment> + + ===================================== + (170-179) Compton Detectors + ===================================== + + Photon Tracker ID: 170 - 171 + Photon Calorimeter ID: 172 - 173 + Electron Tracker ID: 175 - 179 + + </comment> + <constant name="photon_tracker_ID" value="170"/> + <constant name="photon_calorimeter_ID" value="172"/> + <constant name="electron_tracker_1_ID" value="175"/> + <constant name="electron_tracker_2_ID" value="176"/> + <constant name="electron_tracker_3_ID" value="177"/> + <constant name="electron_tracker_4_ID" value="178"/> + + <comment> + ===================================== + (180-189) Forward Beamline Magnets + ===================================== + </comment> + + </define> + + <includes> + <gdmlFile ref="compact/elements.xml"/> + <gdmlFile ref="compact/materials.xml"/> + </includes> + + <display> + <include ref="compact/colors.xml" /> + <include ref="compact/display.xml" /> + </display> + + <!--include ref="compact/photon_tracker.xml" /--> + <!--include ref="compact/photon_calorimeter.xml" /--> + <!--include ref="compact/electron_tracker.xml"/--> + + <include ref="compact/beamline.xml" /> + +</lccdd> diff --git a/scripts/checkOverlaps.py b/scripts/checkOverlaps.py new file mode 100755 index 0000000..512ee81 --- /dev/null +++ b/scripts/checkOverlaps.py @@ -0,0 +1,45 @@ +from __future__ import absolute_import, unicode_literals +import os +import time +import logging + +import argparse +parser = argparse.ArgumentParser( + prog='checkOverlaps.py', + description='''Runs geant overlap checking ''', + epilog=''' + This program runs geant4 to find geometry overlaps. + ''') +parser.add_argument("-c", "--compact", help="compact detector file",default="athena.xml") +parser.add_argument("-r", "--resolution", help="number of points on surface",default="10000") +parser.add_argument("-t", "--tolerance", help="minimum distance (in mm) to report overlaps",default="0.1") +parser.add_argument("-v", "--verbose", help="print output", action='store_true') + +args = parser.parse_args() + +import DDG4 +from g4units import keV, GeV, mm, ns, MeV + +def run(): + kernel = DDG4.Kernel() + description = kernel.detectorDescription() + kernel.loadGeometry(str("file:" + args.compact)) + + DDG4.importConstants(description) + + geant4 = DDG4.Geant4(kernel) + ui = geant4.setupCshUI(ui=None) + ui.Commands = [ + '/geometry/test/resolution {}'.format(args.resolution), + '/geometry/test/tolerance {}'.format(args.tolerance), + '/geometry/test/verbosity {}'.format(1 if args.verbose else 0), + '/geometry/test/run' + ] + kernel.configure() + kernel.initialize() + kernel.run() + kernel.terminate() + + +if __name__ == "__main__": + run() diff --git a/src/CylindricalDipoleMagnet_geo.cpp b/src/CylindricalDipoleMagnet_geo.cpp new file mode 100644 index 0000000..8d83ddd --- /dev/null +++ b/src/CylindricalDipoleMagnet_geo.cpp @@ -0,0 +1,99 @@ +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DD4hep/Shapes.h" +#include "TMath.h" +#include "DDRec/Surface.h" +#include "DDRec/DetectorData.h" +#include "XML/Layering.h" + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::rec; +using namespace ROOT::Math; + +static Ref_t build_magnet(Detector& dtor, xml_h e, SensitiveDetector /* sens */) { + xml_det_t x_det = e; + int det_id = x_det.id(); + string det_name = x_det.nameStr(); + xml_dim_t pos = x_det.child(_U(placement)); + double pos_x = pos.x(); + double pos_y = pos.y(); + double pos_z = pos.z(); + double pos_theta = pos.attr<double>(_U(theta)); + xml_dim_t dims = x_det.dimensions(); + double dim_r = dims.r(); + double dim_z = dims.z(); + xml_dim_t apperture = x_det.child(_Unicode(apperture)); + double app_r = apperture.r(); + xml_dim_t coil = x_det.child(_Unicode(coil)); + double coil_x = coil.dx(); + double coil_y = coil.dy(); + Material iron = dtor.material("Vacuum"); + Material niobium = dtor.material("Vacuum"); + + //std::cout << det_name << " positioned at z=" << pos.z() << ", x=" << pos.x() << "\n"; + + DetElement sdet(det_name, det_id); + Assembly assembly(det_name + "_assembly"); + + const string module_name = "Quad_magnet"; + + const string yoke_vis = dd4hep::getAttrOrDefault(x_det, _Unicode(vis), "GreenVis"); + const string coil_vis = dd4hep::getAttrOrDefault(coil, _Unicode(vis), "RedVis"); + + sdet.setAttributes(dtor, assembly, x_det.regionStr(), x_det.limitsStr(), yoke_vis); + + // -- yoke + Tube yoke_tube(app_r + coil_y, dim_r, 0.5*dim_z); + Volume yoke_vol("yoke_vol", yoke_tube, iron); + auto yoke_pv = assembly.placeVolume(yoke_vol); + yoke_pv.addPhysVolID("element", 1); + DetElement yoke_de(sdet, "yoke_de", 1); + yoke_de.setPlacement(yoke_pv); + yoke_de.setAttributes(dtor, yoke_vol, x_det.regionStr(), x_det.limitsStr(), yoke_vis); + + // -- coils + double offset = 1.5 * coil_x; + double appc_r = app_r + 0.5 * coil_y; + double offset_angle = atan(offset / appc_r); + + Tube longrod(app_r, app_r + coil_y, 0.5*dim_z, atan(coil_x / app_r)); + Tube connector(app_r, app_r + coil_y , coil_y, 0.5*M_PI - offset_angle); + + UnionSolid coil1(longrod, longrod, Transform3D(RotationZ(-offset_angle))); + UnionSolid coil2(coil1, longrod, Transform3D(RotationZ(0.5*M_PI))); + UnionSolid coil3(coil2, longrod, Transform3D(RotationZ(M_PI))); + UnionSolid coil4(coil3, longrod, Transform3D(RotationZ(1.5*M_PI))); + + UnionSolid coil5(coil4, longrod, Transform3D(RotationZ(0.5*M_PI - offset_angle))); + UnionSolid coil6(coil5, longrod, Transform3D(RotationZ(M_PI - offset_angle))); + UnionSolid coil7(coil6, longrod, Transform3D(RotationZ(1.5*M_PI - offset_angle))); + + UnionSolid coil8(coil7, connector, Transform3D(Translation3D(0.0, 0.0, -0.5*dim_z + coil_y))); + UnionSolid coil9(coil8, connector, Transform3D(Translation3D(0.0, 0.0, -0.5*dim_z + coil_y) * RotationZ(0.5*M_PI))); + UnionSolid coil10(coil9, connector, Transform3D(Translation3D(0.0, 0.0, -0.5*dim_z + coil_y) * RotationZ(M_PI))); + UnionSolid coil11(coil10, connector, Transform3D(Translation3D(0.0, 0.0, -0.5*dim_z + coil_y) * RotationZ(1.5*M_PI))); + UnionSolid coil12(coil11, connector, Transform3D(Translation3D(0.0, 0.0, 0.5*dim_z - coil_y))); + UnionSolid coil13(coil12, connector, Transform3D(Translation3D(0.0, 0.0, 0.5*dim_z - coil_y) * RotationZ(0.5*M_PI))); + UnionSolid coil14(coil13, connector, Transform3D(Translation3D(0.0, 0.0, 0.5*dim_z - coil_y) * RotationZ(M_PI))); + UnionSolid coil15(coil14, connector, Transform3D(Translation3D(0.0, 0.0, 0.5*dim_z - coil_y) * RotationZ(1.5*M_PI))); + + Volume coil_vol("coil_vol", coil14, niobium); + + auto coil_pos = Transform3D(RotationZ(0.5*M_PI - offset_angle)); + auto coil_pv = assembly.placeVolume(coil_vol, coil_pos); + DetElement coil_de(sdet, "coil_de", 2); + coil_de.setAttributes(dtor, coil_vol, x_det.regionStr(), x_det.limitsStr(), coil_vis); + coil_de.setPlacement(coil_pv); + + // -- finishing steps + auto final_pos = Transform3D(Translation3D(pos_x, pos_y, pos_z) * RotationY(pos_theta)); + auto pv = dtor.pickMotherVolume(sdet).placeVolume(assembly, final_pos); + pv.addPhysVolID("system", det_id); + sdet.setPlacement(pv); + + assembly->GetShape()->ComputeBBox(); + return sdet; +} + +DECLARE_DETELEMENT(compton_CylindricalDipoleMagnet, build_magnet) diff --git a/src/Tracker_geo.cpp b/src/Tracker_geo.cpp new file mode 100644 index 0000000..dea1491 --- /dev/null +++ b/src/Tracker_geo.cpp @@ -0,0 +1,263 @@ +#include <map> +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +#include "DD4hep/Shapes.h" +#include "DDRec/Surface.h" +#include "DDRec/DetectorData.h" +#include "XML/Layering.h" +#include "XML/Utilities.h" + + +#include "Acts/Plugins/DD4hep/ActsExtension.hpp" +#include "Acts/Definitions/Units.hpp" + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::rec; +using namespace dd4hep::detail; + +/*! Tracker. + * + * @author Whitney Armstrong + * + */ +static Ref_t create_tracker(Detector& description, xml_h e, SensitiveDetector sens) +{ + typedef vector<PlacedVolume> Placements; + xml_det_t x_det = e; + Material vacuum = description.vacuum(); + int det_id = x_det.id(); + string det_name = x_det.nameStr(); + //bool reflect = false; + DetElement sdet(det_name, det_id); + Assembly assembly(det_name); + xml::Component pos = x_det.position(); + xml::Component rot = x_det.rotation(); + + + //Material air = description.material("Air"); + // Volume assembly (det_name,Box(10000,10000,10000),vacuum); + Volume motherVol = description.pickMotherVolume(sdet); + int m_id = 0, c_id = 0, n_sensor = 0; + PlacedVolume pv; + + map<string, Volume> modules; + map<string, Placements> sensitives; + map<string, std::vector<VolPlane>> volplane_surfaces; + map<string, std::array<double, 2>> module_thicknesses; + + Acts::ActsExtension* detWorldExt = new Acts::ActsExtension(); + detWorldExt->addType("endcap", "detector"); + sdet.addExtension<Acts::ActsExtension>(detWorldExt); + + //assembly.setVisAttributes(description.invisible()); + sens.setType("tracker"); + + for (xml_coll_t mi(x_det, _U(module)); mi; ++mi, ++m_id) { + xml_comp_t x_mod = mi; + string m_nam = x_mod.nameStr(); + xml_comp_t trd = x_mod.trd(); + + double posY; + double x1 = trd.x1(); + double x2 = trd.x2(); + double z = trd.z(); + double y1, y2, total_thickness = 0.; + xml_coll_t ci(x_mod, _U(module_component)); + for (ci.reset(), total_thickness = 0.0; ci; ++ci) + total_thickness += xml_comp_t(ci).thickness(); + + y1 = y2 = total_thickness / 2; + Trapezoid m_solid(x1, x2, y1, y2, z); + Volume m_volume(m_nam, m_solid, vacuum); + m_volume.setVisAttributes(description.visAttributes(x_mod.visStr())); + + Solid frame_s; + if(x_mod.hasChild("frame")){ + // build frame from trd (assumed to be smaller) + xml_comp_t m_frame = x_mod.child(_U(frame)); + xml_comp_t f_pos = m_frame.child(_U(position)); + xml_comp_t frame_trd = m_frame.trd(); + double frame_thickness = getAttrOrDefault(m_frame, _U(thickness), total_thickness); + double frame_x1 = frame_trd.x1(); + double frame_x2 = frame_trd.x2(); + double frame_z = frame_trd.z(); + // make the frame match the total thickness if thickness attribute is not given + Trapezoid f_solid1(x1, x2,frame_thickness / 2.0, frame_thickness / 2.0, z); + Trapezoid f_solid(frame_x1, frame_x2, frame_thickness / 2.0, frame_thickness / 2.0, frame_z) ; + SubtractionSolid frame_shape(f_solid1, f_solid); + frame_s = frame_shape; + + Material f_mat = description.material(m_frame.materialStr()); + Volume f_vol(m_nam + "_frame", frame_shape, f_mat); + //f_vol.setVisAttributes(description.visAttributes(m_frame.visStr())); + + // figure out how to best place + pv = m_volume.placeVolume(f_vol, Position(f_pos.x(), f_pos.y(), f_pos.z())); + } + + double thickness_so_far = 0.0; + double thickness_sum = -total_thickness/2.0; + for (ci.reset(), n_sensor = 1, c_id = 0, posY = -y1; ci; ++ci, ++c_id) { + xml_comp_t c = ci; + double c_thick = c.thickness(); + auto comp_x1 = getAttrOrDefault(c, _Unicode(x1), x1); + auto comp_x2 = getAttrOrDefault(c, _Unicode(x2), x2); + auto comp_height = getAttrOrDefault(c, _Unicode(height), z); + + Material c_mat = description.material(c.materialStr()); + string c_name = _toString(c_id, "component%d"); + + Trapezoid comp_s1(comp_x1, comp_x2, c_thick / 2e0, c_thick / 2e0, comp_height); + Solid comp_shape = comp_s1; + if(frame_s.isValid()) { + comp_shape = SubtractionSolid( comp_s1, frame_s); + } + Volume c_vol(c_name, comp_shape, c_mat); + + c_vol.setVisAttributes(description.visAttributes(c.visStr())); + pv = m_volume.placeVolume(c_vol, Position(0, posY + c_thick / 2, 0)); + if (c.isSensitive()) { + //std::cout << " adding sensitive volume" << c_name << "\n"; + sdet.check(n_sensor > 2, "SiTrackerEndcap2::fromCompact: " + c_name + " Max of 2 modules allowed!"); + pv.addPhysVolID("sensor", n_sensor); + sens.setType("tracker"); + c_vol.setSensitiveDetector(sens); + sensitives[m_nam].push_back(pv); + ++n_sensor; + + module_thicknesses[m_nam] = {thickness_so_far + c_thick/2.0, total_thickness-thickness_so_far - c_thick/2.0}; + // -------- create a measurement plane for the tracking surface attched to the sensitive volume ----- + Vector3D u(-1., 0., 0.); + Vector3D v(0., -1., 0.); + Vector3D n(0., 0., 1.); + // Vector3D o( 0. , 0. , 0. ) ; + + // compute the inner and outer thicknesses that need to be assigned to the tracking surface + // depending on wether the support is above or below the sensor + double inner_thickness = module_thicknesses[m_nam][0]; + double outer_thickness = module_thicknesses[m_nam][1]; + + SurfaceType type(SurfaceType::Sensitive); + + // if( isStripDetector ) + // type.setProperty( SurfaceType::Measurement1D , true ) ; + + VolPlane surf(c_vol, type, inner_thickness, outer_thickness, u, v, n); //,o ) ; + volplane_surfaces[m_nam].push_back(surf); + } + posY += c_thick; + thickness_sum += c_thick; + thickness_so_far += c_thick; + } + modules[m_nam] = m_volume; + } + + for (xml_coll_t li(x_det, _U(layer)); li; ++li) { + xml_comp_t x_layer(li); + int l_id = x_layer.id(); + int mod_num = 1; + + xml_comp_t l_env = x_layer.child(_U(envelope)); + string layer_name = det_name + std::string("_layer") + std::to_string(l_id); + + std::string layer_vis = l_env.attr<std::string>(_Unicode(vis)); + //double layer_rmin = l_env.attr<double>(_Unicode(rmin)); + //double layer_rmax = l_env.attr<double>(_Unicode(rmax)); + double layer_length = l_env.attr<double>(_Unicode(length)); + double layer_zstart = l_env.attr<double>(_Unicode(zstart)); + double layer_center_z = layer_zstart + layer_length/2.0; + //printout(INFO,"ROOTGDMLParse","+++ Read geometry from GDML file file:%s",input.c_str()); + //std::cout << "SiTracker Endcap layer " << l_id << " zstart = " << layer_zstart/dd4hep::mm << "mm ( " << layer_length/dd4hep::mm << " mm thick )\n"; + + Assembly layer_vol(layer_name); + //assembly.placeVolume(layer_assembly); + //Tube layer_tub(layer_rmin, layer_rmax, layer_length / 2); + //Volume layer_vol(layer_name, layer_tub, air); // Create the layer envelope volume. + //layer_vol.setVisAttributes(description.visAttributes(layer_vis)); + //layer_vol.setVisAttributes(description.visAttributes(x_layer.visStr())); + + PlacedVolume layer_pv; + //if (reflect) { + // layer_pv = + // assembly.placeVolume(layer_vol, Transform3D(RotationZYX(0.0, -M_PI, 0.0), Position(0, 0, -layer_center_z))); + // layer_pv.addPhysVolID("barrel", 3).addPhysVolID("layer", l_id); + // layer_name += "_N"; + //} else { + layer_pv = assembly.placeVolume(layer_vol, Position(0, 0, layer_center_z)); + layer_pv.addPhysVolID("layer", l_id); + layer_name += "_P"; + //} + DetElement layer_element(sdet, layer_name, l_id); + layer_element.setPlacement(layer_pv); + Acts::ActsExtension* layerExtension = new Acts::ActsExtension(); + layerExtension->addType("layer", "layer"); + //layerExtension->addType("axes", "definitions", "XZY"); + //layerExtension->addType("sensitive disk", "layer"); + //layerExtension->addType("axes", "definitions", "XZY"); + layer_element.addExtension<Acts::ActsExtension>(layerExtension); + + for (xml_coll_t ri(x_layer, _U(ring)); ri; ++ri) { + xml_comp_t x_ring = ri; + double r = x_ring.r(); + double phi0 = x_ring.phi0(0); + double zstart = x_ring.zstart(); + double dz = x_ring.dz(0); + int nmodules = x_ring.nmodules(); + string m_nam = x_ring.moduleStr(); + Volume m_vol = modules[m_nam]; + double iphi = 2 * M_PI / nmodules; + double dphi = dd4hep::getAttrOrDefault(x_ring,_Unicode(dphi),iphi); + double phi = phi0; + Placements& sensVols = sensitives[m_nam]; + + for (int k = 0; k < nmodules; ++k) { + string m_base = _toString(l_id, "layer%d") + _toString(mod_num, "_module%d"); + double x = -r * std::cos(phi); + double y = -r * std::sin(phi); + + //if (!reflect) { + DetElement module(layer_element, m_base + "_pos", det_id); + pv = layer_vol.placeVolume( + m_vol, Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, zstart + dz))); + pv.addPhysVolID("layer", l_id).addPhysVolID("module", mod_num); + module.setPlacement(pv); + for (size_t ic = 0; ic < sensVols.size(); ++ic) { + PlacedVolume sens_pv = sensVols[ic]; + DetElement comp_elt(module, sens_pv.volume().name(), mod_num); + comp_elt.setPlacement(sens_pv); + //std::cout << " adding ACTS extension" << "\n"; + Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("XZY"); + comp_elt.addExtension<Acts::ActsExtension>(moduleExtension); + volSurfaceList(comp_elt)->push_back(volplane_surfaces[m_nam][ic]); + } + //} else { + // pv = layer_vol.placeVolume( + // m_vol, Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, -zstart - dz))); + // pv.addPhysVolID("layer", l_id).addPhysVolID("module", mod_num); + // DetElement r_module(layer_element, m_base + "_neg", det_id); + // r_module.setPlacement(pv); + // for (size_t ic = 0; ic < sensVols.size(); ++ic) { + // PlacedVolume sens_pv = sensVols[ic]; + // DetElement comp_elt(r_module, sens_pv.volume().name(), mod_num); + // comp_elt.setPlacement(sens_pv); + ////std::cout << " adding ACTS extension" << "\n"; + // Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("XZY"); + // comp_elt.addExtension<Acts::ActsExtension>(moduleExtension); + // } + //} + dz = -dz; + phi += dphi; + ++mod_num; + } + } + } + Transform3D posAndRot(RotationZYX(rot.z(), rot.y(), rot.x()), Position(pos.x(), pos.y(), pos.z())); + pv = motherVol.placeVolume(assembly,posAndRot ); + pv.addPhysVolID("system", det_id); + sdet.setPlacement(pv); + return sdet; +} + +// clang-format off +DECLARE_DETELEMENT(electron_tracker, create_tracker) diff --git a/views/generate_prim_files.yml b/views/generate_prim_files.yml new file mode 100644 index 0000000..3f1c758 --- /dev/null +++ b/views/generate_prim_files.yml @@ -0,0 +1,40 @@ +view_prim:detector_only: + extends: .views + stage: test + script: + - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -D -t detector_view -c compton.xml + - ls -lrth && ls -lrth ${LOCAL_DATA_PATH} + +view_prim:ev001: + extends: .views + stage: test + rules: + - if: '$DETECTOR_EVENT_VIEWS == "ON"' + script: + - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -t view_ev001 -s 1 -c compton.xml + +view_prim:ev002: + extends: .views + stage: test + rules: + - if: '$DETECTOR_EVENT_VIEWS == "ON"' + script: + - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -t view_ev002 -s 2 -c compton.xml + +view_prim:ev003: + extends: .views + stage: test + rules: + - if: '$DETECTOR_EVENT_VIEWS == "ON"' + script: + - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -t view_ev003 -s 3 -c compton.xml + +view_prim:ev004: + extends: .views + stage: test + rules: + - if: '$DETECTOR_EVENT_VIEWS == "ON"' + script: + - ./bin/generate_prim_file -o ${LOCAL_DATA_PATH} -t view_ev004 -s 4 -c compton.xml + + diff --git a/views/view50.yml b/views/view50.yml new file mode 100644 index 0000000..e68a799 --- /dev/null +++ b/views/view50.yml @@ -0,0 +1,41 @@ +dawn_view_50:detector: + extends: .views + needs: + - job: view_prim:detector_only + optional: false + script: + - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/detector_view.prim -t view50 -d views/view50 -D + +dawn_view_50:ev001: + extends: .views + rules: + - if: '$DETECTOR_EVENT_VIEWS == "ON"' + needs: + - job: view_prim:ev001 + optional: true + script: + - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev001.prim -t view50_ev001 -d views/view50 -s 1 + +dawn_view_50:ev002: + extends: .views + rules: + - if: '$DETECTOR_EVENT_VIEWS == "ON"' + needs: + - job: view_prim:ev002 + optional: true + script: + - ./bin/make_dawn_views -i ${LOCAL_DATA_PATH}/view_ev002.prim -t view50_ev002 -d views/view50 -s 2 + +view_50: + stage: collect + needs: + - job: dawn_view_50:detector + optional: false + - job: dawn_view_50:ev001 + optional: true + - job: dawn_view_50:ev002 + optional: true + script: + - ls -lrth * + - ls -lrth images/* + diff --git a/views/view50/generate_eps b/views/view50/generate_eps new file mode 100755 index 0000000..d089567 --- /dev/null +++ b/views/view50/generate_eps @@ -0,0 +1,75 @@ +#!/bin/bash + +#export DAWN_PS_PREVIEWER="derp" + +function print_the_help { + echo "USAGE: $0 <PRIM_FILE> " + echo " OPTIONS: " + echo " -t,--tag filename tag (default: view1)" + exit +} + +FILE_TAG="view01" +INPUT_FILE="../../g4_0000.prim" + + +POSITIONAL=() +while [[ $# -gt 0 ]] +do + key="$1" + + case $key in + -h|--help) + shift # past argument + print_the_help + ;; + -t|--tag) + FILE_TAG="$2" + shift # past argument + shift # past value + ;; + -i|--input) + INPUT_FILE="$2" + shift # past argument + shift # past value + ;; + *) # unknown option + #POSITIONAL+=("$1") # save it in an array for later + echo "unknown option $1" + print_the_help + shift # past argument + ;; + esac +done +set -- "${POSITIONAL[@]}" # restore positional parameters + + +#cp ${INPUT_FILE} ${FILE_TAG}.prim +dawncut 0 1 0 1 ${INPUT_FILE} ${FILE_TAG}.prim +#dawncut 0 -1 0 1 ${FILE_TAG}_temp0.prim ${FILE_TAG}.prim +#dawncut -1 0 0 1 ${INPUT_FILE} ${FILE_TAG}.prim +# dawncut 1 0 0 1 ${INPUT_FILE} ${FILE_TAG}_temp0.prim +# dawncut -1 0 0 1 ${FILE_TAG}_temp0.prim ${FILE_TAG}.prim +../../bin/dawn_tweak --mag 4 -z 15000 --draw 3 --theta 90 --phi 40 --light-theta 180 --light-phi 90 + +dawn -d ${FILE_TAG}.prim +ps2pdf ${FILE_TAG}.eps ${FILE_TAG}_full.pdf +gs -o ${FILE_TAG}.pdf -sDEVICE=pdfwrite \ + -c "[/CropBox [51 250 550 590] /PAGES pdfmark" \ + -f ${FILE_TAG}_full.pdf + +pdftoppm ${FILE_TAG}.pdf ${FILE_TAG} -png -singlefile -cropbox -thinlinemode solid -aaVector yes -r 600 + +# Top view +#dawncut 0 -1 0 1 ${INPUT_FILE} ${FILE_TAG}.prim +dawncut 0 1 0 1 ${INPUT_FILE} ${FILE_TAG}_temp0.prim +dawncut 0 -1 0 1 ${FILE_TAG}_temp0.prim ${FILE_TAG}.prim +../../bin/dawn_tweak --mag 10 --draw 1 --theta 270 --phi 90 +dawn -d ${FILE_TAG}.prim +ps2pdf ${FILE_TAG}.eps ${FILE_TAG}_top_full.pdf +gs -o ${FILE_TAG}_top.pdf -sDEVICE=pdfwrite \ + -c "[/CropBox [51 250 550 590] /PAGES pdfmark" \ + -f ${FILE_TAG}_top_full.pdf + +pdftoppm ${FILE_TAG}_top.pdf ${FILE_TAG}_top -png -singlefile -cropbox -thinlinemode solid -aaVector yes + -- GitLab