Добавлены точки наложения и индекс кадра вместо индекса пакета

This commit is contained in:
Пытков Роман
2025-09-19 21:59:58 +03:00
parent c9059f6df3
commit 38f3880be8
5 changed files with 76 additions and 20 deletions

View File

@@ -10,8 +10,9 @@ public record class Data(
double? Theta,
double? Smr,
double? MuWave,
string OverlayPoint,
bool? Artifact,
double? SignalQuality,
long PackageIndex,
long FrameIndex,
DateTime? TimeOfDataGenerate
);

View File

@@ -22,16 +22,21 @@ public class JsonData
public double? Smr { get; set; }
[JsonPropertyName("muWave")]
public double? MuWave { get; set; }
[JsonPropertyName("overlayPoint")]
public string overlayPoint { get; set; }
[JsonPropertyName("artifact")]
public bool? Artifact { get; set; }
[JsonPropertyName("signalQuality")]
public double? SignalQuality { get; set; }
[JsonPropertyName("packageIndex")]
public long PackageIndex { get; set; }
[JsonPropertyName("frameIndex")]
public long FrameIndex { get; set; }
[JsonPropertyName("timeOfDataGenerate")]
public DateTime? TimeOfDataGenerate { get; set; }
public JsonData() { }
public JsonData()
{
overlayPoint = "";
}
public JsonData(Data data)
{
@@ -44,9 +49,10 @@ public class JsonData
Theta = data.Theta;
Smr = data.Smr;
MuWave = data.MuWave;
overlayPoint = data.OverlayPoint;
Artifact = data.Artifact;
SignalQuality = data.SignalQuality;
PackageIndex = data.PackageIndex;
FrameIndex = data.FrameIndex;
TimeOfDataGenerate = data.TimeOfDataGenerate;
}
@@ -62,9 +68,10 @@ public class JsonData
Theta,
Smr,
MuWave,
overlayPoint,
Artifact,
SignalQuality,
PackageIndex,
FrameIndex,
TimeOfDataGenerate
);
}

View File

@@ -23,16 +23,21 @@ public class MessagePackData
public double? Smr { get; set; }
[Key("muWave")]
public double? MuWave { get; set; }
[Key("overlayPoint")]
public string overlayPoint { get; set; }
[Key("artifact")]
public bool? Artifact { get; set; }
[Key("signalQuality")]
public double? SignalQuality { get; set; }
[Key("packageIndex")]
public long PackageIndex { get; set; }
[Key("frameIndex")]
public long FrameIndex { get; set; }
[Key("timeOfDataGenerate")]
public DateTime? TimeOfDataGenerate { get; set; }
public MessagePackData() { }
public MessagePackData()
{
overlayPoint = "";
}
public MessagePackData(Data data)
{
@@ -45,9 +50,10 @@ public class MessagePackData
Theta = data.Theta;
Smr = data.Smr;
MuWave = data.MuWave;
overlayPoint = data.OverlayPoint;
Artifact = data.Artifact;
SignalQuality = data.SignalQuality;
PackageIndex = data.PackageIndex;
FrameIndex = data.FrameIndex;
TimeOfDataGenerate = data.TimeOfDataGenerate;
}
@@ -63,9 +69,10 @@ public class MessagePackData
Theta,
Smr,
MuWave,
overlayPoint,
Artifact,
SignalQuality,
PackageIndex,
FrameIndex,
TimeOfDataGenerate
);
}

40
Domain/OverlayPoints.cs Normal file
View File

@@ -0,0 +1,40 @@
namespace Domain;
public static class OverlayPoints
{
public static readonly string All = "ALL";
/// <summary>
/// Список всех точек наложения по схеме 10-20
/// </summary>
public static readonly string[] Points = {
"Fp1", "Fp2", "F3", "F4", "Fz", "C3", "C4", "Cz",
"P3", "P4", "Pz", "F7", "F8", "T3", "T4", "T5", "T6", "O1", "O2"
};
/// <summary>
/// Описания точек наложения
/// </summary>
public static readonly Dictionary<string, string> Descriptions = new()
{
{"Fp1", "переднелобные (prefrontal)"},
{"Fp2", "переднелобные (prefrontal)"},
{"F3", "лобные (frontal)"},
{"F4", "лобные (frontal)"},
{"Fz", "среднелобный"},
{"C3", "центральные (central)"},
{"C4", "центральные (central)"},
{"Cz", "центральный вертексный"},
{"P3", "теменные (parietal)"},
{"P4", "теменные (parietal)"},
{"Pz", "центральнотеменной"},
{"F7", "передневисочные"},
{"F8", "передневисочные"},
{"T3", "средневисочные (temporal)"},
{"T4", "средневисочные (temporal)"},
{"T5", "задневисочные"},
{"T6", "задневисочные"},
{"O1", "затылочная (occipital)"},
{"O2", "затылочная (occipital)"}
};
}

View File

@@ -31,25 +31,25 @@ public class DataGenerator
private void GenerateInBackground(CancellationToken token)
{
var firstData = GenerateRandomData(0);
var firstData = GenerateRandomData(0, "ALL");
_cache.AddLast(firstData);
_dict[firstData.PackageIndex] = firstData;
_dict[firstData.FrameIndex] = firstData;
while (!token.IsCancellationRequested)
{
//await Task.Delay(_generationInterval, token);
var first = _cache.First!.Value;
var last = _cache.Last!.Value;
if (last.PackageIndex - _maxRequestedIndex < _minNewPackages)
if (last.FrameIndex - _maxRequestedIndex < _minNewPackages)
{
var data = GenerateRandomData(last.PackageIndex + 1);
var data = GenerateRandomData(last.FrameIndex + 1, "ALL");
_cache.AddLast(data);
_dict[data.PackageIndex] = data;
_dict[data.FrameIndex] = data;
}
if (_maxRequestedIndex - first.PackageIndex > _maxPreviousPackages)
if (_maxRequestedIndex - first.FrameIndex > _maxPreviousPackages)
{
_cache.RemoveFirst();
_dict.TryRemove(first.PackageIndex, out _);
_dict.TryRemove(first.FrameIndex, out _);
}
//System.Console.WriteLine($"[{first.PackageIndex}; {last.PackageIndex}]");
}
@@ -62,7 +62,7 @@ public class DataGenerator
return res ? value : null;
}
private Data GenerateRandomData(long packageNumber)
private Data GenerateRandomData(long frameIndex, string overlayPoint)
{
var alpha = _random.NextDouble();
var beta = _random.NextDouble() * (1 - alpha);
@@ -79,9 +79,10 @@ public class DataGenerator
Theta: _random.NextDouble() < 0.1 ? null : theta,
Smr: _random.NextDouble() < 0.1 ? null : _random.NextDouble(),
MuWave: _random.NextDouble() < 0.1 ? null : _random.NextDouble(),
OverlayPoint: overlayPoint,
Artifact: _random.NextDouble() < 0.1 ? null : signalQuality < 0.5,
SignalQuality: _random.NextDouble() < 0.1 ? null : signalQuality,
PackageIndex: packageNumber,
FrameIndex: frameIndex,
TimeOfDataGenerate: _random.NextDouble() < 0.1 ? null : DateTime.Now
);
}