/// <summary> /// Extrapolates the linear decay of the log of the tail of the curve and integrates /// analitically from tMax to infinity to evaluate the steady state signal /// </summary> /// <param name="generator">NurbsGenerator</param> /// <param name="space_ref">spatial coordiante</param> /// <param name="op">optical Properties</param> /// <returns>Integral value of the curve extrapolated outside the time range</returns> private double ExtrapolateIntegralValueOutOfRange(INurbs generator, double space_ref, OpticalProperties op) { double area; double deltaT = 0.01;//ns double scalingFactor = GetScalingFactor(op, 3); double lR2 = Math.Log10(generator.ComputeSurfacePoint(generator.TimeValues.MaxValue, space_ref)); double lR1 = Math.Log10(generator.ComputeSurfacePoint(generator.TimeValues.MaxValue - deltaT, space_ref)); double slope = (lR2 - lR1) / (deltaT); double intercept = -slope * generator.TimeValues.MaxValue + lR1; area = -Math.Pow(10.0, intercept + slope * generator.TimeValues.MaxValue) * Math.Exp(-op.Mua * v * generator.TimeValues.MaxValue) / (slope - op.Mua); return(area); }
/// <summary> /// Constructor used to create an istance of NurbsForwardSolver /// with the same stub NurbsGenerator for all the NurbsGenerators. /// Used for Unit Tests of the class. /// </summary> /// <param name="generator">stub NurbsGenerator</param> public NurbsForwardSolver(INurbs generator) : this(generator, generator) { }
/// <summary> /// Constructor which creates an istance of NurbsForwardSolver setting /// the NurbsGenerators to the values passed as Input. /// </summary> /// <param name="rdGenerator">real domain NurbsGenerator</param> /// <param name="sfdGenerator">spatial frequancy domain generator</param> public NurbsForwardSolver(INurbs rdGenerator, INurbs sfdGenerator) { _rdGenerator = rdGenerator; _sfdGenerator = sfdGenerator; }