static void Main(string[] args)
        {
            FlashLFQEngine engine = new FlashLFQEngine();

            engine.globalStopwatch.Start();

            if (!engine.ReadPeriodicTable(null))
            {
                return;
            }

            if (!engine.ParseArgs(args))
            {
                return;
            }

            if (!engine.ReadIdentificationsFromTSV())
            {
                return;
            }

            engine.ConstructIndexTemplateFromIdentifications();

            Parallel.For(0, engine.filePaths.Length,
                         new ParallelOptions {
                MaxDegreeOfParallelism = 1
            },
                         fileNumber =>
            {
                if (!engine.Quantify(null, engine.filePaths[fileNumber]) && !engine.silent)
                {
                    Console.WriteLine("Error quantifying file " + engine.filePaths[fileNumber]);
                }
                GC.Collect();
            }
                         );

            if (engine.mbr)
            {
                engine.RetentionTimeCalibrationAndErrorCheckMatchedFeatures();
            }

            if (!engine.WriteResults("_FlashLFQ_", true, true, true))
            {
                return;
            }

            if (!engine.silent)
            {
                Console.WriteLine("All done");
            }

            if (!engine.silent)
            {
                Console.WriteLine("Analysis time: " + engine.globalStopwatch.Elapsed.Hours + "h " + engine.globalStopwatch.Elapsed.Minutes + "m " +
                                  engine.globalStopwatch.Elapsed.Seconds + "s");
            }

            if (engine.pause)
            {
                Console.ReadKey();
            }
        }