/// <summary>
        /// Generates the factor file row.
        /// </summary>
        /// <param name="ticker">The ticker.</param>
        /// <param name="sidContext">The sid context.</param>
        /// <param name="factorFile">The factor file.</param>
        /// <param name="tradeBar">The trade bar.</param>
        /// <param name="fineAvailableDates">The fine available dates.</param>
        /// <param name="fineFundamentalFolder">The fine fundamental folder.</param>
        /// <returns></returns>
        private static string GenerateFactorFileRow(string ticker, SecurityIdentifierContext sidContext, CorporateFactorProvider factorFile, TradeBar tradeBar, IEnumerable <DateTime> fineAvailableDates, DirectoryInfo fineFundamentalFolder)
        {
            var  date               = tradeBar.Time;
            var  factorFileRow      = factorFile?.GetScalingFactors(date);
            var  dollarVolume       = Math.Truncate(tradeBar.Close * tradeBar.Volume);
            var  priceFactor        = factorFileRow?.PriceFactor.Normalize() ?? 1m;
            var  splitFactor        = factorFileRow?.SplitFactor.Normalize() ?? 1m;
            bool hasFundamentalData = CheckFundamentalData(date, sidContext.MapFile, fineAvailableDates, fineFundamentalFolder);

            // sid,symbol,close,volume,dollar volume,has fundamental data,price factor,split factor
            var coarseFileLine = $"{sidContext.SID},{ticker.ToUpperInvariant()},{tradeBar.Close.Normalize()},{tradeBar.Volume.Normalize()},{Math.Truncate(dollarVolume)},{hasFundamentalData},{priceFactor},{splitFactor}";

            return(coarseFileLine);
        }