Skip to content

Commit

Permalink
automatic update
Browse files Browse the repository at this point in the history
  • Loading branch information
mmoda-esg-bot committed Aug 16, 2024
1 parent 80bb8b5 commit 28d2d7a
Show file tree
Hide file tree
Showing 2 changed files with 303 additions and 14 deletions.
237 changes: 237 additions & 0 deletions tools/crbeam/Generate_events.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
#!/usr/bin/env python
# coding: utf-8

# flake8: noqa

import json
import os
import shutil

from oda_api.json import CustomJSONEncoder

# oda:usesResource oda:CRBeamS3 .
# oda:CRBeamS3 a oda:S3 .
# oda:CRBeamS3 oda:resourceBindingEnvVarName "S3_CREDENTIALS" .

src_name = "1ES 1215+303" # http://odahub.io/ontology#AstrophysicalObject

z_start = 0.13 # http://odahub.io/ontology#Float
Npart = 10000 # http://odahub.io/ontology#Integer ; oda:lower_limit 1 ; oda:upper_limit 100000
particle_type = "gamma" # http://odahub.io/ontology#String ; oda:allowed_value "gamma","electron","proton"
Emax = 50 # http://odahub.io/ontology#Energy_TeV
Emin = 0.01 # http://odahub.io/ontology#Energy_TeV
EminSource = 0.01 # http://odahub.io/ontology#Energy_TeV
Gamma = 2.0 # http://odahub.io/ontology#Float
EGMF_fG = 100 # http://odahub.io/ontology#Float
lmaxEGMF_Mpc = 5 # http://odahub.io/ontology#Float
jet_half_size = 180.0 # http://odahub.io/ontology#degree
jet_direction = 0.0 # http://odahub.io/ontology#degree
psf = 180.0 # http://odahub.io/ontology#degree
window_size_RA = 4.0 # http://odahub.io/ontology#degree
window_size_DEC = 4.0 # http://odahub.io/ontology#degree
EBL = "Franceschini 2017" # http://odahub.io/ontology#String ; oda:allowed_value "Franceschini 2017","Stecker 2016 lower limit","Stecker 2016 upper limit","Inoue 2012 Baseline","Inoue 2012 lower limit","Inoue 2012 upper limit"

_galaxy_wd = os.getcwd()

with open("inputs.json", "r") as fd:
inp_dic = json.load(fd)
if "_data_product" in inp_dic.keys():
inp_pdic = inp_dic["_data_product"]
else:
inp_pdic = inp_dic

for vn, vv in inp_pdic.items():
if vn != "_selector":
globals()[vn] = type(globals()[vn])(vv)

get_ipython().run_cell_magic( # noqa: F821
"bash",
"",
"if [ ! -f utils.py ]\nthen\n git clone https://gitlab.renkulab.io/astronomy/mmoda/crbeam.git tmp_src\n cp tmp_src/*.sh tmp_src/*.py ./\nfi\n",
)

from astropy.coordinates import SkyCoord
from astropy.table import Table
from oda_api.api import ProgressReporter
from oda_api.data_products import ODAAstropyTable
from utils import find_redshift

if z_start <= 0:
z_start = find_redshift(src_name)

source = SkyCoord.from_name(src_name, frame="icrs", parse=False, cache=True)

pr = ProgressReporter()
pr.report_progress(
stage="Initialization",
progress=0,
substage="spectra",
subprogress=30,
message="some message",
)

import light_curve as lc
import numpy as np
from crbeam import CRbeam

EGMF = EGMF_fG * 1e-15

# internal units are eV
Emax *= 1e12
Emin *= 1e12
EminSource *= 1e12

background = {
"Franceschini 2017": 12,
"Stecker 2016 lower limit": 10,
"Stecker 2016 upper limit": 11,
"Inoue 2012 Baseline": 3,
"Inoue 2012 lower limit": 4,
"Inoue 2012 upper limit": 5,
}[EBL]

prog = CRbeam(
z=z_start,
nparticles=Npart,
primary=particle_type,
emax=Emax,
emin=Emin,
emin_source=EminSource,
EGMF=EGMF,
lmaxEGMF=lmaxEGMF_Mpc,
background=background,
)
cmd = prog.command
cmd

# Here is one way to call CRbeam without global cache
# prog.run(force_overwrite=False)
# Here we call CRbeam with global cache
# prog.run_cached(overwrite_local_cache=True)
# to clear s3 cache run the following command
# prog.remove_cache()

# To report the progress we will split running CRbeam into 10 parts
n_steps = 10
# Initialize multistep simulation
data_exists = not prog.start_multistage_run(
overwrite_local_cache=True, n_steps=n_steps
)
proceed = not data_exists

if proceed:
for step in range(n_steps):
pr.report_progress(
stage="Running Simulation", progress=100 * step // n_steps
)
proceed = prog.simulation_step()
# todo: report progress using rest API
pr.report_progress(stage="Running Simulation", progress=100)

assert not proceed, "must be completed before this cell"
if not data_exists:
prog.end_multistep_run()

def adjust_weights(mc_file, power):
# converting weights to mimic required injection spectrum power
header = ""
with open(mc_file, "rt") as lines:
for line in lines:
if len(line) > 0 and line[0] == "#":
header += line[1:].strip() + "\n"
else:
break
weight_col = 2
E_src_col = 12
data = np.loadtxt(mc_file)
weight = data[:, weight_col - 1]
E_src = data[:, E_src_col - 1]
orig_power = (
prog.power_law
) # CRBeam is always called with fixed power=1 to optimize cache usage
weight *= np.power(E_src / Emax, -(power - orig_power))
output_file = f"{mc_file}_p{power}"
np.savetxt(output_file, data, header=header.strip(), fmt="%.6g")
return output_file

# this code will not execute program since files already exist on server
# prog.run(force_overwrite=False)

# one can upload cache explicitely by call
# prog.upload_cache()

pr.report_progress(stage="Building Plots and Tables", progress=0)

print(prog.output_path)
get_ipython().system("ls {prog.output_path}") # noqa: F821

mc_file = prog.output_path + "/photon"

if Emax != EminSource:
mc_file = adjust_weights(mc_file, Gamma)

# rotating the beam

if EGMF > 0:
from mc_rotate import mc_rotate

mc_rotated_file = mc_rotate(
mc_file, jet_half_size, jet_direction, psf_deg=psf
)
else:
mc_rotated_file = mc_file
mc_rotated_file

# reading the source distance in Mpc from the data file
T_Mpc = lc.get_distance_Mpc(mc_file)
T_Mpc

from oda_api.data_products import ODAAstropyTable

d = np.genfromtxt(mc_rotated_file, skip_header=3)
# E/eV,weight,Theta,Phi,dT_raw/T dT_calc/T,z_cascade_production,N_interactions,z_src,E_src/eV,z_prod
names = (
"E/eV",
"weight",
"Theta",
"Phi",
"dT_raw/T",
"dT_calc/T",
"z_cascade_production",
"N_interactions",
"z_src",
"E_src/eV",
"z_prod",
)
res = ODAAstropyTable(Table(d, names=names))

pr.report_progress(stage="Building Plots and Tables", progress=100)

Event_file = res # http://odahub.io/ontology#ODAAstropyTable

# output gathering
_galaxy_meta_data = {}
_oda_outs = []
_oda_outs.append(
("out_Generate_events_Event_file", "Event_file_galaxy.output", Event_file)
)

for _outn, _outfn, _outv in _oda_outs:
_galaxy_outfile_name = os.path.join(_galaxy_wd, _outfn)
if isinstance(_outv, str) and os.path.isfile(_outv):
shutil.move(_outv, _galaxy_outfile_name)
_galaxy_meta_data[_outn] = {"ext": "_sniff_"}
elif getattr(_outv, "write_fits_file", None):
_outv.write_fits_file(_galaxy_outfile_name)
_galaxy_meta_data[_outn] = {"ext": "fits"}
elif getattr(_outv, "write_file", None):
_outv.write_file(_galaxy_outfile_name)
_galaxy_meta_data[_outn] = {"ext": "_sniff_"}
else:
with open(_galaxy_outfile_name, "w") as fd:
json.dump(_outv, fd, cls=CustomJSONEncoder)
_galaxy_meta_data[_outn] = {"ext": "json"}

with open(os.path.join(_galaxy_wd, "galaxy.json"), "w") as fd:
json.dump(_galaxy_meta_data, fd)
print("*** Job finished successfully ***")
80 changes: 66 additions & 14 deletions tools/crbeam/crbeam_astro_tool.xml
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
<tool id="crbeam_astro_tool" name="CRbeam" version="0.0.1+galaxy0" profile="23.0">
<requirements>
<requirement type="package" version="3.29.6">cmake</requirement>
<requirement type="package" version="12.3.0">gfortran</requirement>
<requirement type="package" version="3.30.2">cmake</requirement>
<requirement type="package" version="12.4.0">gfortran</requirement>
<requirement type="package" version="2.7">gsl</requirement>
<requirement type="package" version="1.7.0">compilers</requirement>
<requirement type="package" version="16.1.0">pyarrow</requirement>
<requirement type="package" version="17.0.0">pyarrow</requirement>
<requirement type="package" version="6.0">unzip</requirement>
<requirement type="package" version="2.2.2">pandas</requirement>
<requirement type="package" version="1.2.20">oda-api</requirement>
<requirement type="package" version="3.9.0">matplotlib</requirement>
<requirement type="package" version="2.32.3">requests</requirement>
<requirement type="package" version="0.4.7">astroquery</requirement>
<requirement type="package" version="7.0.0">rdflib</requirement>
<requirement type="package" version="4.12.3">beautifulsoup4</requirement>
<requirement type="package" version="2.0.0">sparqlwrapper</requirement>
<requirement type="package" version="3.3">networkx</requirement>
<requirement type="package" version="1.11.4">scipy</requirement>
<requirement type="package" version="8.26.0">ipython</requirement>
<requirement type="package" version="1.2.21">oda-api</requirement>
<requirement type="package" version="3.9.2">matplotlib</requirement>
<!--Requirements string 'nb2workflow[cwl,service,rdf,mmoda]>=1.3.30
' can't be converted automatically. Please add the galaxy/conda requirement manually or modify the requirements file!-->
<requirement type="package" version="7.16.4">nbconvert</requirement>
<requirement type="package" version="0.13.2">seaborn</requirement>
<requirement type="package" version="7.2.7">minio</requirement>
<requirement type="package" version="1.15.0">specutils</requirement>
<requirement type="package" version="1.16.0">specutils</requirement>
<requirement type="package" version="1.11.4">scipy</requirement>
<requirement type="package" version="1.2">gammapy</requirement>
<requirement type="package" version="0.4.7">astroquery</requirement>
<requirement type="package" version="5.3">astropy</requirement>
</requirements>
<command detect_errors="exit_code">ipython '$__tool_directory__/${_data_product._selector}.py'</command>
Expand All @@ -33,9 +28,39 @@
<inputs>
<conditional name="_data_product">
<param name="_selector" type="select" label="Data Product">
<option value="CRbeam" selected="true">CRbeam</option>
<option value="Generate_events" selected="true">Generate_events</option>
<option value="CRbeam" selected="false">CRbeam</option>
<option value="model_CTA_events" selected="false">model_CTA_events</option>
</param>
<when value="Generate_events">
<param name="src_name" type="text" value="1ES 1215+303" label="src_name" />
<param name="z_start" type="float" value="0.13" label="z_start" />
<param name="Npart" type="integer" value="10000" label="Npart" min="1" max="100000" />
<param name="particle_type" type="select" label="particle_type">
<option value="electron">electron</option>
<option value="gamma" selected="true">gamma</option>
<option value="proton">proton</option>
</param>
<param name="Emax" type="float" value="50" label="Emax (unit: TeV)" />
<param name="Emin" type="float" value="0.01" label="Emin (unit: TeV)" />
<param name="EminSource" type="float" value="0.01" label="EminSource (unit: TeV)" />
<param name="Gamma" type="float" value="2.0" label="Gamma" />
<param name="EGMF_fG" type="float" value="100" label="EGMF_fG" />
<param name="lmaxEGMF_Mpc" type="float" value="5" label="lmaxEGMF_Mpc" />
<param name="jet_half_size" type="float" value="180.0" label="jet_half_size (unit: deg)" />
<param name="jet_direction" type="float" value="0.0" label="jet_direction (unit: deg)" />
<param name="psf" type="float" value="180.0" label="psf (unit: deg)" />
<param name="window_size_RA" type="float" value="4.0" label="window_size_RA (unit: deg)" />
<param name="window_size_DEC" type="float" value="4.0" label="window_size_DEC (unit: deg)" />
<param name="EBL" type="select" label="EBL">
<option value="Franceschini 2017" selected="true">Franceschini 2017</option>
<option value="Inoue 2012 Baseline">Inoue 2012 Baseline</option>
<option value="Inoue 2012 lower limit">Inoue 2012 lower limit</option>
<option value="Inoue 2012 upper limit">Inoue 2012 upper limit</option>
<option value="Stecker 2016 lower limit">Stecker 2016 lower limit</option>
<option value="Stecker 2016 upper limit">Stecker 2016 upper limit</option>
</param>
</when>
<when value="CRbeam">
<param name="src_name" type="text" value="NGC 1365" label="src_name" />
<param name="z_start" type="float" value="0" label="z_start" />
Expand Down Expand Up @@ -97,6 +122,9 @@
</conditional>
</inputs>
<outputs>
<data label="${tool.name} -&gt; Generate_events Event_file" name="out_Generate_events_Event_file" format="auto" from_work_dir="Event_file_galaxy.output">
<filter>_data_product['_selector'] == 'Generate_events'</filter>
</data>
<data label="${tool.name} -&gt; CRbeam spectrum_png" name="out_CRbeam_spectrum_png" format="auto" from_work_dir="spectrum_png_galaxy.output">
<filter>_data_product['_selector'] == 'CRbeam'</filter>
</data>
Expand Down Expand Up @@ -132,6 +160,30 @@
</data>
</outputs>
<tests>
<test expect_num_outputs="1">
<conditional name="_data_product">
<param name="_selector" value="Generate_events" />
<param name="src_name" value="1ES 1215+303" />
<param name="z_start" value="0.13" />
<param name="Npart" value="10000" />
<param name="particle_type" value="gamma" />
<param name="Emax" value="50" />
<param name="Emin" value="0.01" />
<param name="EminSource" value="0.01" />
<param name="Gamma" value="2.0" />
<param name="EGMF_fG" value="100" />
<param name="lmaxEGMF_Mpc" value="5" />
<param name="jet_half_size" value="180.0" />
<param name="jet_direction" value="0.0" />
<param name="psf" value="180.0" />
<param name="window_size_RA" value="4.0" />
<param name="window_size_DEC" value="4.0" />
<param name="EBL" value="Franceschini 2017" />
</conditional>
<assert_stdout>
<has_text text="*** Job finished successfully ***" />
</assert_stdout>
</test>
<test expect_num_outputs="9">
<conditional name="_data_product">
<param name="_selector" value="CRbeam" />
Expand Down

0 comments on commit 28d2d7a

Please sign in to comment.