/// <summary>
 /// Constructor
 /// </summary>
 public SpectraManagerCache(PHRPReader.PeptideMassCalculator peptideMassCalculator)
 {
     _mzMLManager = new MzMLManager(peptideMassCalculator);
     _dtaManager  = new DtaManager(peptideMassCalculator);
     RegisterEvents(_dtaManager);
     RegisterEvents(_mzMLManager);
 }
        /// <summary>
        /// Determine the input spectrum file path, given psmResultsFilePath
        /// </summary>
        /// <param name="psmResultsFilePath">_fht.txt or _syn.txt file</param>
        /// <param name="datasetName">Dataset name</param>
        /// <returns></returns>
        public string GetSpectrumFilePath(string psmResultsFilePath, string datasetName)
        {
            var psmResultsFile = new FileInfo(psmResultsFilePath);

            if (psmResultsFile.Directory == null)
            {
                throw new DirectoryNotFoundException("Unable to determine the parent directory for " + psmResultsFilePath);
            }

            var directoriesToCheck = new List <DirectoryInfo> {
                psmResultsFile.Directory
            };

            if (psmResultsFile.Directory.Parent != null)
            {
                directoriesToCheck.Add(psmResultsFile.Directory.Parent);
            }

            foreach (var directory in directoriesToCheck)
            {
                var mzMLFile = MzMLManager.GetFilePath(directory, datasetName);
                var dtaFile  = DtaManager.GetFilePath(directory, datasetName);

                if (File.Exists(mzMLFile))
                {
                    return(mzMLFile);
                }
                if (File.Exists(dtaFile))
                {
                    return(dtaFile);
                }
            }

            // _dta.txt or .mzML file not found (checked both the directory with the dataset file and the parent directory)

            OnErrorEvent(string.Format("Could not find the spectra file for dataset \"{0}\" in {1} or one directory up", datasetName, psmResultsFile.Directory.FullName));

            return(null);
        }