From ed46b70cc5e388d64bd57e89721206af1f0a45d7 Mon Sep 17 00:00:00 2001 From: Tommy Date: Thu, 7 May 2026 00:19:10 -0400 Subject: [PATCH 1/3] Updated and implement radiation config --- CHANGELOG.md | 3 +- .../atomic/config/logic/ConfigRadiation.java | 336 ++++++++++++------ 2 files changed, 228 insertions(+), 111 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34406c0..7040ef1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,13 @@ # Changelog -## [3.2.0] - 2026-05-02 +## [3.2.0] - ### ADDED - FML Version checker using curseupdate API. ### CHANGED - Updated forge gradle to Cleanroom RFG Template. - Changed version construction to unified mod_version gradle property. +- Updated radiation config to use FML configuration system. ### Added - Follows the [KeepAChangelog Convention](https://keepachangelog.com/en/1.1.0/) diff --git a/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java b/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java index 698d900..7551531 100644 --- a/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java +++ b/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java @@ -1,164 +1,280 @@ package com.builtbroken.atomic.config.logic; import com.builtbroken.atomic.AtomicScience; -import com.builtbroken.atomic.proxy.ContentProxy; -import net.minecraftforge.common.config.Configuration; - -import java.io.File; +import net.minecraftforge.common.config.Config; /** - * Main config for the mod - * + * Main config for the radiation system. * * Created by Dark(DarkGuardsman, Robert) on 4/18/2018. */ -public class ConfigRadiation extends ContentProxy +@Config(modid = AtomicScience.DOMAIN, name = AtomicScience.DOMAIN + "/logic/radiation") +@Config.LangKey("config.atomicscience:radiation.title") +public class ConfigRadiation { //------------------------------------------------------------------------------- - //--------- Data for generating config values ----------------------------------- + //--------- Constants used to compute default config values --------------------- //------------------------------------------------------------------------------- - //Value used to convert Mev to 1 RAD (should be equal to Mev / 624151 * 100) - //1 erg = 624151 Mev - //1 rad = 100 erg + // Value used to convert MeV to 1 RAD (Mev / 624151 * 100) + // 1 erg = 624151 MeV, 1 rad = 100 erg + @Config.Ignore public static final double MeV_per_RAD = 6.24E7; - //Mega eV per gram of material - public static float MEV_GRAM_U238 = 4.267f; //https://en.wikipedia.org/wiki/Uranium-238 - public static float MEV_GRAM_U235 = 4.679f; //https://en.wikipedia.org/wiki/Uranium-235 - public static float MEV_GRAM_U234 = 4.679f; - - //mass in grams of sample items % of material - public static float MASS_U238_SAMPLE = 500; - public static float MASS_U235_SAMPLE = 500; - public static float MASS_U234_SAMPLE = 500; - - //Activity (number of decays per tick) - public static float ACTIVITY_U238 = 12445; //TODO get actual numbers, then scale - public static float ACTIVITY_U235 = 80011; //TODO get actual numbers, then scale - public static float ACTIVITY_U234 = 80011; + // Mega eV per gram of material + @Config.Ignore + public static final float MEV_GRAM_U238 = 4.267f; //https://en.wikipedia.org/wiki/Uranium-238 + @Config.Ignore + public static final float MEV_GRAM_U235 = 4.679f; //https://en.wikipedia.org/wiki/Uranium-235 + @Config.Ignore + public static final float MEV_GRAM_U234 = 4.679f; + + // Mass in grams of sample items % of material + @Config.Ignore + public static final float MASS_U238_SAMPLE = 500; + @Config.Ignore + public static final float MASS_U235_SAMPLE = 500; + @Config.Ignore + public static final float MASS_U234_SAMPLE = 500; + + // Activity (number of decays per tick) + @Config.Ignore + public static final float ACTIVITY_U238 = 12445; //TODO get actual numbers, then scale + @Config.Ignore + public static final float ACTIVITY_U235 = 80011; //TODO get actual numbers, then scale + @Config.Ignore + public static final float ACTIVITY_U234 = 80011; + + // Radiation per hour (mass * energy * decay_rate / MeV to rad) + @Config.Ignore + public static final float RAD_U234 = (float) (MASS_U234_SAMPLE * MEV_GRAM_U234 * ACTIVITY_U234 / MeV_per_RAD); //alpha radiation + @Config.Ignore + public static final float RAD_U235 = (float) (MASS_U235_SAMPLE * MEV_GRAM_U235 * ACTIVITY_U235 / MeV_per_RAD); //alpha radiation + @Config.Ignore + public static final float RAD_U238 = (float) (MASS_U238_SAMPLE * MEV_GRAM_U238 * ACTIVITY_U238 / MeV_per_RAD); //alpha radiation //------------------------------------------------------------------------------- //------------------------------------------------------------------------------- - //Start of configs TODO CONFIG + // Enable / disable toggles //------------------------------------------------------------------------------- - /** Enable radiation events */ + @Config.Name("enable_exposure") + @Config.Comment("(true -> on, false -> off) Enables event handling used to apply radiation to entities and update damage effects.") + @Config.LangKey("config.atomicscience:radiation.enable_exposure") public static boolean ENABLE_EXPOSURE = true; - /** Enable radiation map */ + @Config.Name("enable_map") + @Config.Comment("(true -> on, false -> off) Enables events used to update the radiation map. If disabled other radiation systems will stop working as well.") + @Config.LangKey("config.atomicscience:radiation.enable_map") public static boolean ENABLE_MAP = true; - /** Enable tracking of inventories for radiation */ + // TODO not yet implemented + @Config.Name("enable_inventory") + @Config.Comment("(true -> on, false -> off) Enables tracking of inventories for radiation.") + @Config.LangKey("config.atomicscience:radiation.enable_inventory") public static boolean ENABLE_INVENTORY = true; - /** Enable tracking of entity items (dropped items) */ + @Config.Name("enable_entity_items") + @Config.Comment("(true -> on, false -> off) Enables tracking of entity items (dropped items) for radiation.") + @Config.LangKey("config.atomicscience:radiation.enable_entity_items") public static boolean ENABLE_ENTITY_ITEMS = true; - /** Enable tracking of inventories for entities */ + // TODO not yet implemented + @Config.Name("enable_entity") + @Config.Comment("(true -> on, false -> off) Enables tracking of entities for radiation.") + @Config.LangKey("config.atomicscience:radiation.enable_entity") public static boolean ENABLE_ENTITY = true; - /** Time to wait from last radiation remove to remove again */ - public static int RAD_REMOVE_TIMER = 5 * 60 * 20; //5mins - /** Amount of radiation to remove (as a percentage) */ + + //------------------------------------------------------------------------------- + // Map settings + //------------------------------------------------------------------------------- + + @Config.Name("map_update_range") + @Config.Comment("Max range to update radiation values when a radiation source has changed.") + @Config.LangKey("config.atomicscience:radiation.map_update_range") + @Config.RangeInt(min = 10, max = 100) + public static int MAX_UPDATE_RANGE = 50; + + @Config.Name("material_to_radiation") + @Config.Comment("Conversion rate of material on the map to radiation values produced. Value is material -> milli-rad.\n" + + "Keep value low as map is limited to ~2.7 billion. Example (good): 0.01 * 10000 = 100") + @Config.LangKey("config.atomicscience:radiation.material_to_radiation") + @Config.RangeDouble(min = 0.0001, max = 100) + public static float MAP_VALUE_TO_MILI_RAD = 0.01f; + + + //------------------------------------------------------------------------------- + // Entity / player settings + //------------------------------------------------------------------------------- + + @Config.Name("rad_remove_timer") + @Config.Comment("Amount of time in ticks (20 ticks a second) to wait before removing radiation.") + @Config.LangKey("config.atomicscience:radiation.rad_remove_timer") + @Config.RangeInt(min = 1) + public static int RAD_REMOVE_TIMER = 5 * 60 * 20; //5 mins + + @Config.Name("rad_remove_percentage") + @Config.Comment("Percentage of radiation to remove each removal cycle.") + @Config.LangKey("config.atomicscience:radiation.rad_remove_percentage") + @Config.RangeDouble(min = 0, max = 1) public static float RAD_REMOVE_PERCENTAGE = 0.05f; + + @Config.Name("rad_remove_lower_limit") + @Config.Comment("Amount that once below, radiation is set to zero.") + @Config.LangKey("config.atomicscience:radiation.rad_remove_lower_limit") + @Config.RangeDouble(min = 0, max = 100000) public static float RAD_REMOVE_LOWER_LIMIT = 1f; - /** Amount of rads required to kill the player */ + @Config.Name("death_radiation_point") + @Config.Comment("Amount of rads required to kill the player.") + @Config.LangKey("config.atomicscience:radiation.death_radiation_point") + @Config.RangeDouble(min = 1) public static float RADIATION_DEATH_POINT = 10000; - /** Amount of rads required to start causing problems */ + @Config.Name("sickness_radiation_point") + @Config.Comment("Amount of rads required to start causing radiation sickness.") + @Config.LangKey("config.atomicscience:radiation.sickness_radiation_point") + @Config.RangeDouble(min = 1) public static float RADIATION_SICKNESS_POINT = 1000; - /** Amount of rads required to start causing problems */ + @Config.Name("weakness_radiation_point") + @Config.Comment("Amount of rads required to start causing weakness.") + @Config.LangKey("config.atomicscience:radiation.weakness_radiation_point") + @Config.RangeDouble(min = 1) public static float RADIATION_WEAKNESS_POINT = 5000; - /** Amount of rads required to start causing problems */ + @Config.Name("confusion_radiation_point") + @Config.Comment("Amount of rads required to start causing confusion.") + @Config.LangKey("config.atomicscience:radiation.confusion_radiation_point") + @Config.RangeDouble(min = 1) public static float RADIATION_CONFUSION_POINT = 8000; - //Scale value to convert RADs to REMs - //RBE -> relative biological effectiveness (how each type relates to xray & gamma) - //https://community.dur.ac.uk/ian.terry/teaching/nplab/dose_test.htm - public static float RBE_XRAY_RADIATION = 1; //will go through entity - public static float RBE_GAMMA_RADIATION = 1; //will go through entity - public static float RBE_NEURTONS_FAST = 10; //will go through entity - public static float RBE_NEURTONS_SLOW = 5; //will go through entity - public static float RBE_ALPHA_RADIATION = 20; //stopped by anything - public static float RBE_BETA_RADIATION = 10; //stopped by entity - //Radiation per hour (mass * energy * decay_rate / MeV to rad - public static float RAD_U234 = (float) (MASS_U234_SAMPLE * MEV_GRAM_U234 * ACTIVITY_U234 / MeV_per_RAD); //alpha radiation - public static float RAD_U235 = (float) (MASS_U235_SAMPLE * MEV_GRAM_U235 * ACTIVITY_U235 / MeV_per_RAD); //alpha radiation - public static float RAD_U238 = (float) (MASS_U238_SAMPLE * MEV_GRAM_U238 * ACTIVITY_U238 / MeV_per_RAD); //alpha radiation + //------------------------------------------------------------------------------- + // TODO not yet implemented + //------------------------------------------------------------------------------- + // Relative biological effectiveness (RBE) + // Scale value to convert RADs to REMs + // https://community.dur.ac.uk/ian.terry/teaching/nplab/dose_test.htm + //------------------------------------------------------------------------------- + + @Config.Name("rbe_xray") + @Config.Comment("Relative biological effectiveness for X-ray radiation (passes through entity).") + @Config.LangKey("config.atomicscience:radiation.rbe_xray") + @Config.RangeDouble(min = 0) + public static float RBE_XRAY_RADIATION = 1; + + @Config.Name("rbe_gamma") + @Config.Comment("Relative biological effectiveness for gamma radiation (passes through entity).") + @Config.LangKey("config.atomicscience:radiation.rbe_gamma") + @Config.RangeDouble(min = 0) + public static float RBE_GAMMA_RADIATION = 1; + + @Config.Name("rbe_neutrons_fast") + @Config.Comment("Relative biological effectiveness for fast neutron radiation (passes through entity).") + @Config.LangKey("config.atomicscience:radiation.rbe_neutrons_fast") + @Config.RangeDouble(min = 0) + public static float RBE_NEURTONS_FAST = 10; + + @Config.Name("rbe_neutrons_slow") + @Config.Comment("Relative biological effectiveness for slow neutron radiation (passes through entity).") + @Config.LangKey("config.atomicscience:radiation.rbe_neutrons_slow") + @Config.RangeDouble(min = 0) + public static float RBE_NEURTONS_SLOW = 5; + + @Config.Name("rbe_alpha") + @Config.Comment("Relative biological effectiveness for alpha radiation (stopped by anything).") + @Config.LangKey("config.atomicscience:radiation.rbe_alpha") + @Config.RangeDouble(min = 0) + public static float RBE_ALPHA_RADIATION = 20; + + @Config.Name("rbe_beta") + @Config.Comment("Relative biological effectiveness for beta radiation (stopped by entity).") + @Config.LangKey("config.atomicscience:radiation.rbe_beta") + @Config.RangeDouble(min = 0) + public static float RBE_BETA_RADIATION = 10; + - /** How many points of map radioactive material converts to 1 RAD */ - public static float MAP_VALUE_TO_MILI_RAD = 0.01f; //100 material to 1/1000th of a RAD (material is a placeholder values since grams will not work) + //------------------------------------------------------------------------------- + // Block radiation decay + //------------------------------------------------------------------------------- + @Config.Name("decay_per_block") + @Config.Comment("Fraction of radiation absorbed per default material block.") + @Config.LangKey("config.atomicscience:radiation.decay_per_block") + @Config.RangeDouble(min = 0, max = 1) + public static float RADIATION_DECAY_PER_BLOCK = 0.05f; + + @Config.Name("decay_per_fluid") + @Config.Comment("Fraction of radiation absorbed per fluid block.") + @Config.LangKey("config.atomicscience:radiation.decay_per_fluid") + @Config.RangeDouble(min = 0, max = 1) + public static float RADIATION_DECAY_PER_FLUID = 0.15f; + + @Config.Name("decay_metal") + @Config.Comment("Fraction of radiation absorbed by metal blocks.") + @Config.LangKey("config.atomicscience:radiation.decay_metal") + @Config.RangeDouble(min = 0, max = 1) + public static float RADIATION_DECAY_METAL = 0.50f; + + @Config.Name("decay_stone") + @Config.Comment("Fraction of radiation absorbed by stone blocks.") + @Config.LangKey("config.atomicscience:radiation.decay_stone") + @Config.RangeDouble(min = 0, max = 1) + public static float RADIATION_DECAY_STONE = 0.20f; + + + //------------------------------------------------------------------------------- + // Radioactive material values + // Amount of radioactive material present inside each source, used to calculate emitted radiation. + //------------------------------------------------------------------------------- + + @Config.Name("mat_u234") + @Config.Comment("Radiation material value for a U234 pellet.") + @Config.LangKey("config.atomicscience:radiation.mat_u234") + @Config.RangeInt(min = 1) public static int RADIOACTIVE_MAT_VALUE_U234 = (int) Math.ceil(RAD_U235 / MAP_VALUE_TO_MILI_RAD); + + @Config.Name("mat_u235") + @Config.Comment("Radiation material value for a U235 pellet.") + @Config.LangKey("config.atomicscience:radiation.mat_u235") + @Config.RangeInt(min = 1) public static int RADIOACTIVE_MAT_VALUE_U235 = (int) Math.ceil(RAD_U235 / MAP_VALUE_TO_MILI_RAD); + + @Config.Name("mat_u238") + @Config.Comment("Radiation material value for a U238 pellet.") + @Config.LangKey("config.atomicscience:radiation.mat_u238") + @Config.RangeInt(min = 1) public static int RADIOACTIVE_MAT_VALUE_U238 = (int) Math.ceil(RAD_U238 / MAP_VALUE_TO_MILI_RAD); + @Config.Name("mat_yellowcake") + @Config.Comment("Radiation material value for yellowcake.") + @Config.LangKey("config.atomicscience:radiation.mat_yellowcake") + @Config.RangeInt(min = 1) public static int RADIOACTIVE_MAT_VALUE_YELLOW_CAKE = RADIOACTIVE_MAT_VALUE_U235 / 10; + + @Config.Name("mat_fuel_rod") + @Config.Comment("Radiation material value for a fission fuel rod.") + @Config.LangKey("config.atomicscience:radiation.mat_fuel_rod") + @Config.RangeInt(min = 1) public static int RADIOACTIVE_MAT_VALUE_FUEL_ROD = RADIOACTIVE_MAT_VALUE_U235 * 100; + + @Config.Name("mat_breeder_rod") + @Config.Comment("Radiation material value for a fission breeder rod.") + @Config.LangKey("config.atomicscience:radiation.mat_breeder_rod") + @Config.RangeInt(min = 1) public static int RADIOACTIVE_MAT_VALUE_BREEDER_ROD = RADIOACTIVE_MAT_VALUE_FUEL_ROD / 10; + @Config.Name("reactor_fuel_rod") + @Config.Comment("Radiation value for a fuel rod inside a reactor.") + @Config.LangKey("config.atomicscience:radiation.reactor_fuel_rod") + @Config.RangeInt(min = 1) public static int RADIOACTIVE_REACTOR_VALUE_FUEL_ROD = RADIOACTIVE_MAT_VALUE_FUEL_ROD * 100; - public static int RADIOACTIVE_REACTOR_VALUE_BREEDER_ROD = RADIOACTIVE_MAT_VALUE_BREEDER_ROD * 100; - - /** Max distance in meters to update radiation on the map. */ - public static int MAX_UPDATE_RANGE = 50; - public static float RADIATION_DECAY_PER_BLOCK = 0.05f; - public static float RADIATION_DECAY_PER_FLUID = 0.15f; - public static float RADIATION_DECAY_METAL = 0.50f; - public static float RADIATION_DECAY_STONE = 0.20f; - - public ConfigRadiation() - { - super("config.rad"); - } - - @Override - public void preInit() - { - Configuration configuration = new Configuration(new File(AtomicScience.configFolder, "Radiation.cfg"), AtomicScience.VERSION); - configuration.load(); - ENABLE_EXPOSURE = configuration.getBoolean("enable_exposure", Configuration.CATEGORY_GENERAL, ENABLE_EXPOSURE, - "(true -> on, false -> off) Enabled event handling used to apply radiation to entities and update damage effects."); - - ENABLE_MAP = configuration.getBoolean("enable_map", Configuration.CATEGORY_GENERAL, ENABLE_MAP, - "(true -> on, false -> off) Enabled events used to update the radiation map. If disabled other radiation systems will stop working as well. " + - "However, the mod is playable as this is just related to radiation used to harm entities, machines, and items."); - - //Map settings - final String cat_map = "rad_map"; - MAX_UPDATE_RANGE = configuration.getInt("map_update_range", cat_map, MAX_UPDATE_RANGE, 10, 100, - "Max range to update radiation values when a radiation source has changed."); - - MAP_VALUE_TO_MILI_RAD = configuration.getFloat("material_to_radiation", cat_map, MAP_VALUE_TO_MILI_RAD, 0.0001f, 100, - "Conversation rate of material on the map to radiation values produced. Value is material -> milli-rad. " + - "Keep value low as map is limited to ~2.7 billion for values. Meaning values to large will not function." + - "Example (good) 0.01 * 10000 = 100"); - - //Entity settings - final String cat_entity = "entity"; - RAD_REMOVE_TIMER = configuration.getInt("rad_remove_timer", cat_entity, RAD_REMOVE_TIMER, 1, Integer.MAX_VALUE, - "Amount of time in ticks (20 ticks a second) to wait before removing radiation"); - - RAD_REMOVE_PERCENTAGE = configuration.getFloat("rad_remove_percentage", cat_entity, RAD_REMOVE_PERCENTAGE, 0, 1, "Percentage of radiation to remove each removal cycle"); - RAD_REMOVE_LOWER_LIMIT = configuration.getFloat("rad_remove_lower_limit", cat_entity, RAD_REMOVE_LOWER_LIMIT, 0, 100000, "Amount that once below radiation is set to zero"); - - RADIATION_DEATH_POINT = configuration.getFloat("death_radiation_point", cat_entity, RADIATION_DEATH_POINT, 1, Integer.MAX_VALUE, "Amount of radiation before the player dies"); - - //Material settings - final String cat_rad_mat = "source_rad_material_values"; - configuration.setCategoryComment(cat_rad_mat, "Amount of radioactive material present inside of each source. This value is used to calculate radiation to emmit."); - RADIOACTIVE_MAT_VALUE_U235 = configuration.getInt("U235", cat_rad_mat, RADIOACTIVE_MAT_VALUE_U235, 1, Integer.MAX_VALUE, "Radiation material value for U235 pellet"); - RADIOACTIVE_MAT_VALUE_U238 = configuration.getInt("U238", cat_rad_mat, RADIOACTIVE_MAT_VALUE_U238, 1, Integer.MAX_VALUE, "Radiation material value for U238 pellet"); - RADIOACTIVE_MAT_VALUE_YELLOW_CAKE = configuration.getInt("yellowcake", cat_rad_mat, RADIOACTIVE_MAT_VALUE_YELLOW_CAKE, 1, Integer.MAX_VALUE, "Radiation material value for yellowcake"); - RADIOACTIVE_MAT_VALUE_FUEL_ROD = configuration.getInt("fuel_rod", cat_rad_mat, RADIOACTIVE_MAT_VALUE_FUEL_ROD, 1, Integer.MAX_VALUE, "Radiation material value for fission fuel rod"); - RADIOACTIVE_MAT_VALUE_BREEDER_ROD = configuration.getInt("breeder_rod", cat_rad_mat, RADIOACTIVE_MAT_VALUE_BREEDER_ROD, 1, Integer.MAX_VALUE, "Radiation material value for fission breeder rod"); - - configuration.save(); - } + @Config.Name("reactor_breeder_rod") + @Config.Comment("Radiation value for a breeder rod inside a reactor.") + @Config.LangKey("config.atomicscience:radiation.reactor_breeder_rod") + @Config.RangeInt(min = 1) + public static int RADIOACTIVE_REACTOR_VALUE_BREEDER_ROD = RADIOACTIVE_MAT_VALUE_BREEDER_ROD * 100; } From 12ffb4ca858782860a25174feea899f4584531a7 Mon Sep 17 00:00:00 2001 From: Tommy Date: Thu, 7 May 2026 00:24:14 -0400 Subject: [PATCH 2/3] Pull radiation config back to config root. --- .../com/builtbroken/atomic/config/logic/ConfigRadiation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java b/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java index 7551531..dfb495a 100644 --- a/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java +++ b/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java @@ -8,7 +8,7 @@ * * Created by Dark(DarkGuardsman, Robert) on 4/18/2018. */ -@Config(modid = AtomicScience.DOMAIN, name = AtomicScience.DOMAIN + "/logic/radiation") +@Config(modid = AtomicScience.DOMAIN, name = AtomicScience.DOMAIN + "/radiation") @Config.LangKey("config.atomicscience:radiation.title") public class ConfigRadiation { From 4fd62c08b023fbfc99996074e393b2caa2235b05 Mon Sep 17 00:00:00 2001 From: Tommy Date: Thu, 7 May 2026 00:38:56 -0400 Subject: [PATCH 3/3] Remove per class credits --- .../com/builtbroken/atomic/config/logic/ConfigRadiation.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java b/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java index dfb495a..b6fa189 100644 --- a/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java +++ b/src/main/java/com/builtbroken/atomic/config/logic/ConfigRadiation.java @@ -5,8 +5,6 @@ /** * Main config for the radiation system. - * - * Created by Dark(DarkGuardsman, Robert) on 4/18/2018. */ @Config(modid = AtomicScience.DOMAIN, name = AtomicScience.DOMAIN + "/radiation") @Config.LangKey("config.atomicscience:radiation.title")