internal static IWittyerSettings ParsePrivate(string[] args) { var parameters = new WittyerParameters(); var ndeskParser = new NdeskOptionParser(parameters, args); var unparsed = ndeskParser.UnparsedArgs; if (unparsed.Count > 0) { Console.WriteLine("Warning: Unparsed args: " + string.Join(" ", unparsed)); } if (parameters._isDisplayVersion.Argument) { Console.WriteLine($"witty.er {CurrentVersion}"); Console.WriteLine(parameters.AdditionalHelpHeader); Environment.Exit(0); } if (parameters._configFile.IsArgumentAssigned) { if (parameters._configOptions.Any(x => x.IsArgumentAssigned)) { Console.Error.WriteLine( "Config file argument cannot be used in combination with arguments for bin sizes, basepair distance, " + "percent distance, included filters, excluded filters, variant types, or include bed. Exiting."); Environment.Exit(1); } var fi = parameters._configFile.Argument; if (!fi.ExistsNow()) { Console.WriteLine( $"Config file {fi.FullName} did not exist! Generating default config file in its place. Rerun with exactly same command line and it will work this time."); File.WriteAllText(fi.FullName, InputSpec.GenerateDefaultInputSpecs( parameters.Mode == EvaluationMode.CrossTypeAndSimpleCounting).SerializeToString()); Environment.Exit(0); } var configText = File.ReadAllText(parameters._configFile.Argument.FullName); if (string.IsNullOrWhiteSpace(configText)) { Console.Error.WriteLine("Bad Config file passed in at " + fi.FullName); Environment.Exit(1); } parameters.InputSpecs = JsonConvert .DeserializeObject <IEnumerable <InputSpec> >(configText, InputSpecConverter.Create()) .ToImmutableDictionary(x => x.VariantType, x => x); } else { var generatedSpecs = InputSpec.GenerateCustomInputSpecs( parameters.Mode != EvaluationMode.CrossTypeAndSimpleCounting, parameters._variantTypes.Argument, parameters._binSizes.Argument, parameters._basepairDistance.Argument, parameters._percentDistance.Argument, parameters._excludedFilters.Argument, parameters._includedFilters.Argument, parameters._bedFile.Argument); if (!parameters._basepairDistance.IsArgumentAssigned) // keep default { generatedSpecs = generatedSpecs.Select(i => i.VariantType == WittyerType.Insertion ? InputSpec.Create(i.VariantType, i.BinSizes, DefaultInsertionSpec.BasepairDistance, i.PercentDistance, i.ExcludedFilters, i.IncludedFilters, i.IncludedRegions) : i); } parameters.InputSpecs = generatedSpecs.ToImmutableDictionary(s => s.VariantType, s => s); } if (parameters.Mode == EvaluationMode.CrossTypeAndSimpleCounting && parameters.InputSpecs.Keys.Any(s => s.IsCopyNumberVariant)) { Console.WriteLine( $"Warning: {WittyerType.CopyNumberGain} and/or {WittyerType.CopyNumberLoss}" + $" setting given when using {EvaluationMode.CrossTypeAndSimpleCounting}" + " mode! This setting will be ignored."); } ValidateRequiredParameters(parameters._inputVcf); ValidateRequiredParameters(parameters._truthVcf); return(parameters); }
public static IWittyerSettings Parse(string[] args) => WittyerParameters.ParsePrivate(args);