def writeSwarmDescription(self, csvPath, outPath, 
                    predictedField=None, swarmParams=None):
    """
    Writes swarm description file (JSON).
    :param csvPath: path to CSV data
    :param outPath: absolute or relative file path to write swarm JSON file 
    :param predictedField: (string)
    :param swarmParams: (dict) overrides any swarm params
    """
    if self._confluence is None:
      raise Exception("Missing Confluence! Cannot attempt operation requiring "
                      "data without first loading the data.")
    if predictedField is None:
      predictedField = self._predictedField
    fields = self._createFieldDescription()
    swarmDesc = createSwarmDescription(
      fields, csvPath, predictedField, swarmParams=swarmParams
    )
    with open(outPath, "w") as swarmOut:
      swarmOut.write(json.dumps(swarmDesc))
Writes swarm description file (JSON).
    :param csvPath: path to CSV data
    :param outPath: absolute or relative file path to write swarm JSON file 
    :param predictedField: (string)
    :param swarmParams: (dict) overrides any swarm params