public static void run(XicParameters parameters)
        {
            var jsonString       = File.ReadAllText(parameters.jsonFilePath, Encoding.UTF8);
            var validationErrors = JSONParser.ValidateJson(jsonString);

            if (!validationErrors.IsNullOrEmpty())
            {
                var validationMessage = new StringBuilder("JSON validation error(s):\n");
                foreach (var validationError in validationErrors)
                {
                    if (validationError.ToString().Contains("ExcludedSchemaValidates"))
                    {
                        validationMessage.Append(
                            "Use M/Z and tolerance, M/Z start and M/Z end or sequence and tolerance, not a combination (with optional RT start and/or end).\n");
                    }

                    validationMessage.Append(
                        $"element start line number: {validationError.LineNumber}\n{validationError.ToString()}");
                }

                throw new RawFileParserException(validationMessage.ToString());
            }

            var xicData = JSONParser.ParseJSON(jsonString);

            foreach (string rawFile in parameters.rawFileList)
            {
                var dataInstance = new XicData(xicData);
                XicReader.ReadXic(rawFile, parameters.base64, dataInstance);

                if (parameters.stdout)
                {
                    StdOutputXicData(dataInstance);
                }
                else
                {
                    // if outputDirectory has been defined, put output there.
                    string directory;
                    if (parameters.outputDirectory != null)
                    {
                        directory = parameters.outputDirectory;
                    }
                    // otherwise put output files into the same directory as the raw file input
                    else
                    {
                        directory = Path.GetDirectoryName(rawFile);
                    }

                    var outputFileName = Path.Combine(directory ?? throw new NoNullAllowedException(),
                                                      Path.GetFileNameWithoutExtension(rawFile) + ".json");

                    OutputXicData(dataInstance, outputFileName);
                }
            }
        }
        public XicParameters(XicParameters copy)
        {
            help        = copy.help;
            rawFileList = new ArrayList();
            foreach (string fileName in copy.rawFileList)
            {
                rawFileList.Add(fileName);
            }

            jsonFilePath     = copy.jsonFilePath;
            outputDirectory  = copy.outputDirectory;
            printJsonExample = copy.printJsonExample;
            outputFileName   = copy.outputFileName;
            base64           = copy.base64;
            stdout           = copy.stdout;
        }