| 78 | } |
| 79 | |
| 80 | DataPointCollection StatisticsConverterService::convert( |
| 81 | TimelineStatistics const& data, |
| 82 | uint64_t timestep, |
| 83 | double time, |
| 84 | std::optional<TimelineStatistics> const& lastData, |
| 85 | std::optional<uint64_t> lastTimestep) |
| 86 | { |
| 87 | DataPointCollection result; |
| 88 | result.time = time; |
| 89 | |
| 90 | auto now = std::chrono::system_clock::now(); |
| 91 | auto unixEpoch = std::chrono::time_point<std::chrono::system_clock>(); |
| 92 | result.systemClock = toDouble(std::chrono::duration_cast<std::chrono::seconds>(now - unixEpoch).count()); |
| 93 | |
| 94 | result.numCells = getDataPointBySummation(data.timestep.numCells); |
| 95 | result.numSelfReplicators = getDataPointBySummation(data.timestep.numSelfReplicators); |
| 96 | result.numColonies = getDataPointBySummation(data.timestep.numColonies); |
| 97 | result.numViruses = getDataPointBySummation(data.timestep.numViruses); |
| 98 | result.numFreeCells = getDataPointBySummation(data.timestep.numFreeCells); |
| 99 | result.numParticles = getDataPointBySummation(data.timestep.numParticles); |
| 100 | result.averageGenomeCells = getDataPointByAveraging(data.timestep.numGenomeCells, data.timestep.numSelfReplicators); |
| 101 | result.averageGenomeComplexity = getDataPointByAveraging(data.timestep.genomeComplexity, data.timestep.numSelfReplicators); |
| 102 | result.varianceGenomeComplexity = getDataPointBySummation(data.timestep.genomeComplexityVariance); |
| 103 | result.maxGenomeComplexityOfColonies = getDataPointByMaximation(data.timestep.maxGenomeComplexityOfColonies); |
| 104 | result.totalEnergy = getDataPointBySummation(data.timestep.totalEnergy); |
| 105 | |
| 106 | auto deltaTimesteps = lastTimestep ? toDouble(timestep) - toDouble(*lastTimestep) : 1.0; |
| 107 | if (deltaTimesteps < NEAR_ZERO) { |
| 108 | deltaTimesteps = 1.0; |
| 109 | } |
| 110 | |
| 111 | auto lastDataValue = lastData.value_or(data); |
| 112 | ColorVector<int> numNonFreeCells; |
| 113 | for (int i = 0; i < MAX_COLORS; ++i) { |
| 114 | numNonFreeCells[i] = data.timestep.numCells[i] - data.timestep.numFreeCells[i]; |
| 115 | } |
| 116 | result.numCreatedCells = |
| 117 | getDataPointForProcessProperty(data.accumulated.numCreatedCells, lastDataValue.accumulated.numCreatedCells, numNonFreeCells, deltaTimesteps); |
| 118 | result.numAttacks = |
| 119 | getDataPointForProcessProperty(data.accumulated.numAttacks, lastDataValue.accumulated.numAttacks, numNonFreeCells, deltaTimesteps); |
| 120 | result.numMuscleActivities = getDataPointForProcessProperty( |
| 121 | data.accumulated.numMuscleActivities, lastDataValue.accumulated.numMuscleActivities, numNonFreeCells, deltaTimesteps); |
| 122 | result.numDefenderActivities = getDataPointForProcessProperty( |
| 123 | data.accumulated.numDefenderActivities, lastDataValue.accumulated.numDefenderActivities, numNonFreeCells, deltaTimesteps); |
| 124 | result.numTransmitterActivities = getDataPointForProcessProperty( |
| 125 | data.accumulated.numTransmitterActivities, lastDataValue.accumulated.numTransmitterActivities, numNonFreeCells, deltaTimesteps); |
| 126 | result.numInjectionActivities = getDataPointForProcessProperty( |
| 127 | data.accumulated.numInjectionActivities, lastDataValue.accumulated.numInjectionActivities, numNonFreeCells, deltaTimesteps); |
| 128 | result.numCompletedInjections = getDataPointForProcessProperty( |
| 129 | data.accumulated.numCompletedInjections, lastDataValue.accumulated.numCompletedInjections, numNonFreeCells, deltaTimesteps); |
| 130 | result.numNervePulses = |
| 131 | getDataPointForProcessProperty(data.accumulated.numNervePulses, lastDataValue.accumulated.numNervePulses, numNonFreeCells, deltaTimesteps); |
| 132 | result.numNeuronActivities = getDataPointForProcessProperty( |
| 133 | data.accumulated.numNeuronActivities, lastDataValue.accumulated.numNeuronActivities, numNonFreeCells, deltaTimesteps); |
| 134 | result.numSensorActivities = getDataPointForProcessProperty( |
| 135 | data.accumulated.numSensorActivities, lastDataValue.accumulated.numSensorActivities, numNonFreeCells, deltaTimesteps); |
| 136 | result.numSensorMatches = getDataPointForProcessProperty( |
| 137 | data.accumulated.numSensorMatches, lastDataValue.accumulated.numSensorMatches, numNonFreeCells, deltaTimesteps); |
nothing calls this directly
no test coverage detected