#!/usr/bin/env python # -*- coding: utf-8 -*- ####################################################################### # A note to the model developer: # # Below is a sample python dictionary format that could be imported into the ./sep_json_write.py script. # You can create your own dictionary (with the proper keys and structure, see below). # # You MUST name the dictionary variable sep_forecast_submission_dataDict, as it is below. # You MUST save it to a file named input_sep.py. # input_sep.py MUST be in the same directory as the sep_json_writer.py script. # # Then run the ./sep_json_writer.py with the --import-data-dictionary option. # # It will output a JSON file named according to your choice, or with the # default naming convention of ...json. ####################################################################### sep_forecast_submission_dataDict = { "contacts": [ # (Req) Model developer/administrator point(s) of contact # name (Req) Contact name in case of datastream issues or model questions. # email (Req) Contact email { "name": "Model Developer Name", "email": "developer@email.com" }, # to have more than one contact duplicate this line ], "model": { "short_name": "Short name for your model", # Short name or acronym of model to appear on scoreboard. Consider including version number, if needed "spase_id": "spase://CCMC/SimulationModel/MODEL_NAME/VERSION" # URL of full model description metadata in CCMC metadata registry in SPASE format }, "issue_time": "YYYY-MM-DDTHH:MMZ", # the time your model run was completed and forecast was issued. "mode": "forecast", "triggers": [ # (Opt) Fill in if forecast is issued based on a trigger { "cme": { "start_time": "YYYY-MM-DDTHH:MMZ", # (Req if 'cme' trigger) Timestamp of 1st coronagraph image CME is visible in "liftoff_time": "YYYY-MM-DDTHH:MMZ", # (Opt) Timestamp of coronagraph image with 1st indication of CME liftoff (used by CACTUS) "lat": 0, # CME latitude (deg) "lon": 0, # CME longtiude (deg) "pa": 0, # (Opt) CME plane-of-sky position angle (measured from solar north in degrees counter-clockwise) "half_width": 0, # CME half-width (deg) "speed": 0, # CME speed (km/s) "acceleration": 0, # (Opt) CME acceleration (km/s^2) "height": 0, # CME height at which above parameters derived (solar radii) "time_at_height": { # (Opt) "time":"YYYY-MM-DDTHH:MMZ", # (Req if 'time_at_height' used) CME time at specified height "height": 0 # (Req if 'time_at_height' used) in solar radii }, "coordinates": "None", # (Req if 'lat' or 'lon' used) Coordinate system for above CME parameters "catalog": "None", # (Opt) Name of catalog where CME information was pulled from. allowed values: ARTEMIS, DONKI, HELCATS, JHU APL, CACTUS_NRL, CACTUS_SIDC, CORIMP, SEEDS, SOHO_CDAW, STEREO_COR1 (contact us to add a new catalog name) "urls": [ # List of urls where CME information can be found, or information was pulled from # (e.g., https://kauai.ccmc.gsfc.nasa.gov/DONKI/view/CME/13107/4") "None", # duplicate this line to provide more than one URL for this cme event ] } }, { "flare": { "last_data_time": "YYYY-MM-DDTHH:MMZ", # (Req if 'flare' trigger) Last time data timestamp used to create forecast "start_time": "YYYY-MM-DDTHH:MMZ", # (Req if 'flare' trigger) Flare start time "peak_time": "YYYY-MM-DDTHH:MMZ", # (Opt) Flare peak time "end_time": "YYYY-MM-DDTHH:MMZ", # (Opt) Flare end time "location": "None", # (Opt) Flare location in Stonyhurst coordinates. use N00W00/S00E00 format "intensity": 0, # (Opt) Flare intensity (W/m^2) "integrated_intensity": 0, # (Opt) Flare integrated intensity (J/m^2) "noaa_region": 0, # (Opt) Associated NOAA active region number (including the preceding 1) "urls": [ # (Opt) List of urls where flare information can be found, or information was pulled from # (e.g., https://kauai.ccmc.gsfc.nasa.gov/DONKI/view/CME/13107/4") "None", # duplicate this line to provide more than one URL for this flare event ] } }, { "cme_simulation": { # (Opt) "model": "None", # (Req, if cme simulation trigger) Model name "simulation_completion_time": "YYYY-MM-DDTHH:MMZ", # (Opt) Simulation completion time "urls": [ # (Opt) List of urls where simulation information can be found, or information was pulled from # (e.g., https://kauai.ccmc.gsfc.nasa.gov/DONKI/view/CME/13107/4") "None", # duplicate this line to provide more than one URL for this cme simulation ] } }, { "particle_intensity": { # (Opt) "observatory": "None", # (Req, if particle intensity trigger) Name of observatory data is from "instrument": "None", # (Req, if particle intensity trigger) Name of instrument data is from "last_data_time": "YYYY-MM-DDTHH:MMZ", # (Req, if particle intensity trigger) Last time data timestamp used to create forecast "ongoing_events": [ # (Opt) If an ongoing event triggers your forecast, list the properties you used # start_time (Req, if ongoing_event used) start time # threshold (Req, if ongoing_event used) threshold used to define the event in pfu # energy_min (Req, if ongoing_event used) min of energy channel range in MeV # energy_max (Req, if ongoing_event used) max of energy channel range in MeV. -1 represented an unbounded integral channel { "start_time": "YYYY-MM-DDTHH:MMZ", "threshold": 0, "energy_min": 0, "energy_max": 0 }, # duplicate for more ongoing events ] } } ], "forecasts": [ # (Req, can have more than one) # If you have more than one forecast, duplicate this section starting with the 'beginning of forecast' line through the 'end of forecast' marker and fill in. { # beginning of forecast. "energy_channel": { # (Req) Each forecast is defined by the enegry channel specified "min": 0, # (Req) min of energy channel range "max": 0, # (Req) max of energy channel range. -1 represented an unbounded integral channel "units": "MeV" # (Req) energy channel units }, "species": "None", # (Req) allowed values: electron, proton, helium, helium3, helium4, oxygen, iron, ion "location": "None", # (Req) allowed values: mercury, venus, earth, mars, psp, stereoa, stereob, dawn, juno, L1, L2, L4, L5 "prediction_window": { # (Req) "start_time": "YYYY-MM-DDTHH:MMZ", # (Req) start of forecast prediction window (cannot be earlier than forecast issue time) "end_time": "YYYY-MM-DDTHH:MMZ" # (Req) end of forecast prediction window }, "peak_intensity": { # (Opt) "intensity": 0, # (Req, if peak_intensity) forecast peak intensity value "units": "pfu", # (Req, if peak_intensity) forecast peak intensity value units "uncertainty": 0, # (Opt) forecast peak intensity uncertainty value (same units as peak intensity) "time": "YYYY-MM-DDTHH:MMZ" # (Opt) forecast time for reaching peak intensity value }, "peak_intensity_esp": { # (Opt) "intensity": 0, # (Req, if peak_intensity_esp) forecast peak intensity ESP value "units": "pfu", # (Req, if peak_intensity_esp) forecast peak intensity ESP value units "time": "YYYY-MM-DDTHH:MMZ" # (Opt) forecast time for reaching peak intensity ESP value }, "fluence": { # (Opt) "fluence_value": 0, # (Req, if fluence) forecast fluence value "units": "pfu"# (Req, if fluence) forecast fluence units }, "event_length": { # (Opt) must fall within prediction window "start_time": "YYYY-MM-DDTHH:MMZ", # (Req, if event_length used) forecast energetic particle event start time ("onset" time) "end_time": "YYYY-MM-DDTHH:MMZ", # (Opt) forecast energetic particle event end time "threshold": 0, # (Req, if event_length used) threshold used to extract start and end times "threshold_units": "pfu" # (Req, if event_length used) units of threshold }, "threshold_crossings": [ # (Opt) # crossing_time (Req, if threshold_crossings used) forecast threshold crossing time # uncertainty (Opt) forecast crossing time uncertainty in hours # threshold (Req, if threshold_crossings used) particle intensity threshold value crossing time refers to # threshold_units (Req, if threshold_crossings used) units of threshold { "crossing_time": "YYYY-MM-DDTHH:MMZ", "uncertainty": 0, "threshold": 0, "threshold_units": "pfu" }, # duplicate line as needed ], "probabilities": [ # (Opt) # probability_value (Req, if probabilities used) forecast probability value # uncertainty (Opt) forecast probability uncertainty in percent # threshold (Req, if probabilities used) particle intensity threshold value probability forecast refers to # threshold_units (Req, if probabilities used) units of threshold { "probability_value": 0, "uncertainty": 0, "threshold": 0, "threshold_units": "pfu"}, # duplicate line as needed ], "all_clear": { # (Opt) If you do not provide all-clear forecast leave 'all_clear_boolean' with a None value "all_clear_boolean": "None", # (Req, if all_clear is used) set to 'true' or 'false' # "There are three situations for setting all_clear_boolean=true: # (1) for >10MeV energy channel, your forecast of peak intensity OR threshold crossing OR probability exceeds 10 pfu; # (2) for the >100MeV energy channel, your forecast of peak intensity OR threshold crossing OR probability exceeds 1 pfu; # (3) for your custom (non-integral) energy channel, your forecast peak intensity OR threshold crossing OR probability # exceeds your custom threshold. # NOTE: If either (1) or (2) are true, your model is issuing an overall NOT all clear forecast. # If both (1) and (2) are false, your model is issuing an overall all clear forecast. # Custom cases (3) are being stored but will not be used to display all clear forecasts # without an approximation to the >10 MeV and >100 MeV integral energy channels." "threshold": 0, # (Req, if all_clear is used) particle intensity threshold value all_clear_boolean refers to. # Can be (1) 10 pfu (2) 1 pfu (3) custom "threshold_units": "pfu", # (Req, if all_clear is used) units of threshold "probability_threshold": 0 # (Opt) probability threshold value all_clear_boolean refers to. # Must specify this threshold if setting all_clear_boolean based on probability forecast. }, "sep_profile": "filename_energychannel.txt", # (Opt) Text file with 2 columns: datetime string, SEP intensity for this energy channel "native_id": "None" # (Opt) specify only if forecast has a native id from your model run }, # end of forecast ] } # end of sep_forecast_submission_dataDict