text: from argschema import ArgSchema, ArgSchemaParser 
  from argschema.schemas import DefaultSchema
  from argschema.fields import Nested, InputDir, String, Float, Dict, Int
  
  
  known_conditions = {
      "0": {
          "duration": 1.0,
          "name": "fast_pulses",
          "condition": "2.5 ms pulses at 10 Hz"
      },
      "1": {
          "duration": 0.005,
          "name": "pulse",
          "condition": "a single square pulse"
      },
      "2": {
          "duration": 0.01,
          "name": "pulse",
          "condition": "a single square pulse"
      },
      "3": {
          "duration": 1.0,
          "name": "raised_cosine",
          "condition": "half-period of a cosine wave"
      }
  }
  
  
  class Condition(DefaultSchema):
      duration = Float(required=True)
      name = String(required=True)
      condition = String(required=True)
  
  
  class InputParameters(ArgSchema):
      opto_pickle_path = String(required=True, help='path to file containing optotagging information')
      sync_h5_path = String(required=True, help='path to h5 file containing syncronization information')
      output_opto_table_path = String(required=True, help='the optotagging stimulation table will be written here')    
      conditions = Dict(String, Nested(Condition), default=known_conditions)
  
  
  class OutputSchema(DefaultSchema):
      input_parameters = Nested(InputParameters, description=('Input parameters the module was run with'), required=True) 
  
  
  class OutputParameters(OutputSchema):
      output_opto_table_path = String(required=True, help='path to optotagging stimulation table')