using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tango.BL.Dispensing { /// /// Represents an IDS pack dispensing calculator base class. /// /// public abstract class DispensingCalcBase : IDispensingCalc { /// /// Calculates the required nanoliter per centimeter. /// /// The liquid volume. /// public virtual double CalculateNanoliterPerCentimeter(LiquidVolume liquidVolume) { if (liquidVolume.Configuration != null && liquidVolume.RML != null && liquidVolume.ProcessParametersTable != null) { return (liquidVolume.Volume / 100d) * (liquidVolume.LiquidMaxNanoliterPerCentimeter); } else { return 0d; } } public virtual double CalculateNanoliterPerCentimeter(double volume, double maxNanoliterPerCentimeter) { return (volume / 100d) * maxNanoliterPerCentimeter; } /// /// Calculates the required nanoliter per second. /// /// The liquid volume. /// public virtual double CalculateNanoliterPerSecond(LiquidVolume liquidVolume) { if (liquidVolume.ProcessParametersTable != null) { return CalculateNanoliterPerCentimeter(liquidVolume) * liquidVolume.ProcessParametersTable.DyeingSpeed; } else { return 0d; } } /// /// Calculates the required pulses per second. /// /// The liquid volume. /// public virtual double CalculatePulsePerSecond(LiquidVolume liquidVolume) { return CalculateNanoliterPerSecond(liquidVolume) / liquidVolume.NanoliterPerStep / (double)liquidVolume.DispenserStepDivision; } /// /// Calculates the required full pulses per second. /// /// The liquid volume. /// public double CalculatePulsePerSecondFull(LiquidVolume liquidVolume) { return CalculateNanoliterPerSecond(liquidVolume) / liquidVolume.NanoliterPerStep; } /// /// Coerces the specified liquid volume. /// /// The liquid volume. /// public virtual double CoerceVolume(LiquidVolume liquidVolume) { return liquidVolume.Volume; } } }