Skip to content

Commit

Permalink
Merge remote-tracking branch 'downstream/GUI' into gain-conv-fix
Browse files Browse the repository at this point in the history
  • Loading branch information
JacobPalecki committed Oct 16, 2020
2 parents 0f30065 + a84a394 commit 4ec037a
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 70 deletions.
136 changes: 70 additions & 66 deletions grapher/Models/Calculations/AccelCalculator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ public class AccelCalculator
{
#region Structs

public struct MagnitudeData
public struct SimulatedMouseInput
{
public double magnitude;
public double velocity;
public double time;
public int x;
public int y;
}
Expand All @@ -31,11 +32,11 @@ public AccelCalculator(Field dpi, Field pollRate)

#region Properties

public ReadOnlyCollection<MagnitudeData> MagnitudesCombined { get; private set; }
public ReadOnlyCollection<SimulatedMouseInput> SimulatedInputCombined { get; private set; }

public ReadOnlyCollection<MagnitudeData> MagnitudesX { get; private set; }
public ReadOnlyCollection<SimulatedMouseInput> SimulatedInputX { get; private set; }

public ReadOnlyCollection<MagnitudeData> MagnitudesY { get; private set; }
public ReadOnlyCollection<SimulatedMouseInput> SimulatedInputY { get; private set; }

public Field DPI { get; private set; }

Expand All @@ -57,7 +58,7 @@ public AccelCalculator(Field dpi, Field pollRate)

#region Methods

public void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection<MagnitudeData> magnitudeData)
public void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection<SimulatedMouseInput> simulatedInputData)
{
double lastInputMagnitude = 0;
double lastOutputMagnitude = 0;
Expand All @@ -71,19 +72,19 @@ public void Calculate(AccelChartData data, ManagedAccel accel, double starter, I
int index = 0;
int logIndex = 0;

foreach (var magnitudeDatum in magnitudeData)
foreach (var simulatedInputDatum in simulatedInputData)
{
if (magnitudeDatum.magnitude <= 0)
if (simulatedInputDatum.velocity <= 0)
{
continue;
}

var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, MeasurementTime);
var output = accel.Accelerate(simulatedInputDatum.x, simulatedInputDatum.y, simulatedInputDatum.time);
var outMagnitude = Magnitude(output.Item1, output.Item2);

if (!data.VelocityPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.VelocityPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.VelocityPoints.Add(magnitudeDatum.magnitude, outMagnitude);
data.VelocityPoints.Add(simulatedInputDatum.velocity, outMagnitude);
}
else
{
Expand All @@ -97,7 +98,7 @@ public void Calculate(AccelChartData data, ManagedAccel accel, double starter, I
logIndex++;
}

var ratio = outMagnitude / magnitudeDatum.magnitude;
var ratio = outMagnitude / simulatedInputDatum.velocity;

if (ratio > maxRatio)
{
Expand All @@ -109,7 +110,7 @@ public void Calculate(AccelChartData data, ManagedAccel accel, double starter, I
minRatio = ratio;
}

var inDiff = magnitudeDatum.magnitude - lastInputMagnitude;
var inDiff = simulatedInputDatum.velocity - lastInputMagnitude;
var outDiff = outMagnitude - lastOutputMagnitude;
var slope = inDiff > 0 ? outDiff / inDiff : starter;

Expand All @@ -123,17 +124,17 @@ public void Calculate(AccelChartData data, ManagedAccel accel, double starter, I
minSlope = slope;
}

if (!data.AccelPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.AccelPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.AccelPoints.Add(magnitudeDatum.magnitude, ratio);
data.AccelPoints.Add(simulatedInputDatum.velocity, ratio);
}

if (!data.GainPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.GainPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.GainPoints.Add(magnitudeDatum.magnitude, slope);
data.GainPoints.Add(simulatedInputDatum.velocity, slope);
}

lastInputMagnitude = magnitudeDatum.magnitude;
lastInputMagnitude = simulatedInputDatum.velocity;
lastOutputMagnitude = outMagnitude;
index += 1;
}
Expand All @@ -153,7 +154,7 @@ public void Calculate(AccelChartData data, ManagedAccel accel, double starter, I
data.MinGain = minSlope;
}

public void CalculateCombinedDiffSens(AccelData data, ManagedAccel accel, DriverSettings settings, ICollection<MagnitudeData> magnitudeData)
public void CalculateCombinedDiffSens(AccelData data, ManagedAccel accel, DriverSettings settings, ICollection<SimulatedMouseInput> simulatedInputData)
{
double lastInputMagnitude = 0;
double lastOutputMagnitudeX = 0;
Expand All @@ -171,22 +172,22 @@ public void CalculateCombinedDiffSens(AccelData data, ManagedAccel accel, Driver
int index = 0;
int logIndex = 0;

foreach (var magnitudeDatum in magnitudeData)
foreach (var simulatedInputDatum in simulatedInputData)
{
if (magnitudeDatum.magnitude <= 0)
if (simulatedInputDatum.velocity <= 0)
{
continue;
}

var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, MeasurementTime);
var output = accel.Accelerate(simulatedInputDatum.x, simulatedInputDatum.y, simulatedInputDatum.time);
var outputWithoutSens = StripThisSens(output.Item1, output.Item2);
var magnitudeWithoutSens = Magnitude(outputWithoutSens.Item1, outputWithoutSens.Item2);

var ratio = magnitudeWithoutSens / magnitudeDatum.magnitude;
var ratio = magnitudeWithoutSens / simulatedInputDatum.velocity;

if (!data.Combined.VelocityPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.Combined.VelocityPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.Combined.VelocityPoints.Add(magnitudeDatum.magnitude, magnitudeWithoutSens);
data.Combined.VelocityPoints.Add(simulatedInputDatum.velocity, magnitudeWithoutSens);
}
else
{
Expand Down Expand Up @@ -223,20 +224,20 @@ public void CalculateCombinedDiffSens(AccelData data, ManagedAccel accel, Driver
minRatio = yRatio;
}

if (!data.X.AccelPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.X.AccelPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.X.AccelPoints.Add(magnitudeDatum.magnitude, xRatio);
data.X.AccelPoints.Add(simulatedInputDatum.velocity, xRatio);
}

if (!data.Y.AccelPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.Y.AccelPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.Y.AccelPoints.Add(magnitudeDatum.magnitude, yRatio);
data.Y.AccelPoints.Add(simulatedInputDatum.velocity, yRatio);
}

var xOut = xRatio * magnitudeDatum.magnitude;
var yOut = yRatio * magnitudeDatum.magnitude;
var xOut = xRatio * simulatedInputDatum.velocity;
var yOut = yRatio * simulatedInputDatum.velocity;

var inDiff = magnitudeDatum.magnitude - lastInputMagnitude;
var inDiff = simulatedInputDatum.velocity - lastInputMagnitude;
var xOutDiff = xOut - lastOutputMagnitudeX;
var yOutDiff = yOut - lastOutputMagnitudeY;
var xSlope = inDiff > 0 ? xOutDiff / inDiff : settings.sensitivity.x;
Expand All @@ -262,27 +263,27 @@ public void CalculateCombinedDiffSens(AccelData data, ManagedAccel accel, Driver
minSlope = ySlope;
}

if (!data.X.VelocityPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.X.VelocityPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.X.VelocityPoints.Add(magnitudeDatum.magnitude, xOut);
data.X.VelocityPoints.Add(simulatedInputDatum.velocity, xOut);
}

if (!data.Y.VelocityPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.Y.VelocityPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.Y.VelocityPoints.Add(magnitudeDatum.magnitude, yOut);
data.Y.VelocityPoints.Add(simulatedInputDatum.velocity, yOut);
}

if (!data.X.GainPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.X.GainPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.X.GainPoints.Add(magnitudeDatum.magnitude, xSlope);
data.X.GainPoints.Add(simulatedInputDatum.velocity, xSlope);
}

if (!data.Y.GainPoints.ContainsKey(magnitudeDatum.magnitude))
if (!data.Y.GainPoints.ContainsKey(simulatedInputDatum.velocity))
{
data.Y.GainPoints.Add(magnitudeDatum.magnitude, ySlope);
data.Y.GainPoints.Add(simulatedInputDatum.velocity, ySlope);
}

lastInputMagnitude = magnitudeDatum.magnitude;
lastInputMagnitude = simulatedInputDatum.velocity;
lastOutputMagnitudeX = xOut;
lastOutputMagnitudeY = yOut;
index += 1;
Expand All @@ -303,53 +304,56 @@ public void CalculateCombinedDiffSens(AccelData data, ManagedAccel accel, Driver
data.Combined.MinGain = minSlope;
}

public ReadOnlyCollection<MagnitudeData> GetMagnitudes()
public ReadOnlyCollection<SimulatedMouseInput> GetSimulatedInput()
{
var magnitudes = new List<MagnitudeData>();
var magnitudes = new List<SimulatedMouseInput>();
for (int i = 0; i < CombinedMaxVelocity; i+=Increment)
{
for (int j = 0; j <= i; j+=Increment)
{
MagnitudeData magnitudeData;
magnitudeData.magnitude = Magnitude(i, j);
magnitudeData.x = i;
magnitudeData.y = j;
magnitudes.Add(magnitudeData);
SimulatedMouseInput mouseInputData;
mouseInputData.x = i;
mouseInputData.y = j;
mouseInputData.time = MeasurementTime;
mouseInputData.velocity = Velocity(i, j, mouseInputData.time);
magnitudes.Add(mouseInputData);
}
}

magnitudes.Sort((m1, m2) => m1.magnitude.CompareTo(m2.magnitude));
magnitudes.Sort((m1, m2) => m1.velocity.CompareTo(m2.velocity));

return magnitudes.AsReadOnly();
}

public ReadOnlyCollection<MagnitudeData> GetMagnitudesX()
public ReadOnlyCollection<SimulatedMouseInput> GetSimulatInputX()
{
var magnitudes = new List<MagnitudeData>();
var magnitudes = new List<SimulatedMouseInput>();

for (int i = 0; i < XYMaxVelocity; i+=Increment)
{
MagnitudeData magnitudeData;
magnitudeData.magnitude = i;
magnitudeData.x = i;
magnitudeData.y = 0;
magnitudes.Add(magnitudeData);
SimulatedMouseInput mouseInputData;
mouseInputData.x = i;
mouseInputData.y = 0;
mouseInputData.time = MeasurementTime;
mouseInputData.velocity = Velocity(i, 0, mouseInputData.time);
magnitudes.Add(mouseInputData);
}

return magnitudes.AsReadOnly();
}

public ReadOnlyCollection<MagnitudeData> GetMagnitudesY()
public ReadOnlyCollection<SimulatedMouseInput> GetSimulatedInputY()
{
var magnitudes = new List<MagnitudeData>();
var magnitudes = new List<SimulatedMouseInput>();

for (int i = 0; i < XYMaxVelocity; i+=Increment)
{
MagnitudeData magnitudeData;
magnitudeData.magnitude = i;
magnitudeData.x = 0;
magnitudeData.y = i;
magnitudes.Add(magnitudeData);
SimulatedMouseInput mouseInputData;
mouseInputData.x = 0;
mouseInputData.y = i;
mouseInputData.time = MeasurementTime;
mouseInputData.velocity = Velocity(0, i, mouseInputData.time);
magnitudes.Add(mouseInputData);
}

return magnitudes.AsReadOnly();
Expand Down Expand Up @@ -407,9 +411,9 @@ public void ScaleByMouseSettings()
Increment = ratio > 1 ? (int) Math.Floor(ratio) : 1;
MeasurementTime = Increment == 1 ? 1 / ratio : 1;
XYMaxVelocity = CombinedMaxVelocity * Constants.XYToCombinedRatio;
MagnitudesCombined = GetMagnitudes();
MagnitudesX = GetMagnitudesX();
MagnitudesY = GetMagnitudesY();
SimulatedInputCombined = GetSimulatedInput();
SimulatedInputX = GetSimulatInputX();
SimulatedInputY = GetSimulatedInputY();
}

#endregion Methods
Expand Down
2 changes: 1 addition & 1 deletion grapher/Models/Charts/ChartState/CombinedState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public override void Bind()

public override void Calculate(ManagedAccel accel, DriverSettings settings)
{
Calculator.Calculate(Data.Combined, accel, settings.sensitivity.x, Calculator.MagnitudesCombined);
Calculator.Calculate(Data.Combined, accel, settings.sensitivity.x, Calculator.SimulatedInputCombined);
}
}
}
2 changes: 1 addition & 1 deletion grapher/Models/Charts/ChartState/XYOneGraphState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public override void Bind()

public override void Calculate(ManagedAccel accel, DriverSettings settings)
{
Calculator.CalculateCombinedDiffSens(Data, accel, settings, Calculator.MagnitudesCombined);
Calculator.CalculateCombinedDiffSens(Data, accel, settings, Calculator.SimulatedInputCombined);
}
}
}
4 changes: 2 additions & 2 deletions grapher/Models/Charts/ChartState/XYTwoGraphState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ public override void Bind()

public override void Calculate(ManagedAccel accel, DriverSettings settings)
{
Calculator.Calculate(Data.X, accel, settings.sensitivity.x, Calculator.MagnitudesX);
Calculator.Calculate(Data.Y, accel, settings.sensitivity.y, Calculator.MagnitudesY);
Calculator.Calculate(Data.X, accel, settings.sensitivity.x, Calculator.SimulatedInputX);
Calculator.Calculate(Data.Y, accel, settings.sensitivity.y, Calculator.SimulatedInputY);
}
}
}

0 comments on commit 4ec037a

Please sign in to comment.