2#include "Resources/Resources.h"
3#include "Services/Variables.h"
4#include "../Systems/DataSetSystem.h"
6#include "../SwathPathResamplingPositions.h"
8#include "Foundation/Memory/MemoryBuffer.h"
18 struct BeamGroupComponent;
25 const uint32_t chunkIndex,
26 const float pathSpacing,
27 const float beamSpacing,
35 chunkIndex(chunkIndex),
36 pathSpacing(pathSpacing),
37 beamSpacing(beamSpacing),
38 bufferCapacity(dataData.persistent->config.capacity),
39 maxBeamUpsample(context->
variables->get(
"echo.maxBeamUpsample")->getFloat()),
40 coordSys(dataData.persistent->config.coordSys)
42 const auto & dataConf = dataData.persistent->config;
43 const auto & buffer = dataData.persistent->buffer;
46 assert(groupComp.majorCount == 1);
47 assert(groupComp.minorCount > 0);
49 beamCount = std::max(2u, groupComp.minorCount);
50 directionX.resize(beamCount);
51 directionY.resize(beamCount);
53 beams = groupComp.beams;
55 if (groupComp.minorCount == 1) {
56 const uint32_t ix = beams.back();
61 const auto sx = yXpand ? 0.f : 0.5f*dataConf.beamWidthX[ix];
62 const auto sy = yXpand ? 0.5f*dataConf.beamWidthY[ix] : 0.f;
64 directionX[0] = dataConf.directionX[ix] - sx;
65 directionY[0] = dataConf.directionY[ix] - sy;
67 directionX[1] = dataConf.directionX[ix] + sx;
68 directionY[1] = dataConf.directionY[ix] + sy;
73 for (uint32_t k = 0; k < beamCount; k++) {
74 const auto ix = beams[k];
75 directionX[k] = dataConf.directionX[ix];
76 directionY[k] = dataConf.directionY[ix];
81 const auto chunk = chunks.getChunks()[chunkIndex];
82 tail = (chunk.flags & SwathPathChunkFlag::Tail) != 0;
83 head = (chunk.flags & SwathPathChunkFlag::Head) != 0;
85 const auto & resamplingPositions_src = resPos.getEntries();
86 bix_a = resamplingPositions_src[chunk.support.a].bufferIndex;
87 bix_b = resamplingPositions_src[chunk.support.b].bufferIndex;
88 sliceA = (chunk.extent.a - chunk.support.a);
89 sliceB = (chunk.extent.b - chunk.support.a);
96 sliceCount = (bix_b - bix_a + 1 + dataConf.capacity) % dataConf.capacity;
97 if (pathSpacing != 0.f) {
99 sliceCount = sliceCount + 1;
101 resamplingPositions.resize(chunk.support.b - chunk.support.a + 1);
102 for (uint32_t i = 0; i < resamplingPositions.size(); i++) {
103 resamplingPositions[i] = resamplingPositions_src[chunk.support.a + i];
105 assert(sliceA <= resamplingPositions.size());
106 assert(sliceB <= resamplingPositions.size());
109 assert(sliceA <= sliceCount);
110 assert(sliceB <= sliceCount);
113 metaPings.resize(sliceCount);
114 for (uint32_t i = 0; i < sliceCount; i++) {
115 uint32_t k = (bix_a + i) % dataConf.capacity;
116 metaPings[i] = buffer.metaPings[k];
123 : context(other.context),
124 pathSpacing(other.pathSpacing),
125 beamSpacing(other.beamSpacing),
126 chunkIndex(other.chunkIndex),
127 bufferCapacity(other.bufferCapacity),
128 beamCount(other.beamCount),
129 sliceCount(other.sliceCount),
130 sliceA(other.sliceA),
131 sliceB(other.sliceB),
134 coordSys(other.coordSys),
135 directionX(other.directionX),
136 directionY(other.directionY),
137 maxBeamUpsample(other.maxBeamUpsample),
141 resamplingPositions.copy(other.resamplingPositions);
142 metaPings.copy(other.metaPings);
148 const uint32_t chunkIndex;
149 const uint32_t bufferCapacity;
150 const float pathSpacing;
151 const float beamSpacing;
152 const float maxBeamUpsample;
163 std::vector<uint32_t> beams;
164 const uint32_t coordSys;
165 std::vector<float> directionX;
166 std::vector<float> directionY;
A Context instance contains all the services, systems and runtime components needed to use Cogs.
std::unique_ptr< class Variables > variables
Variables service instance.
Contains all Cogs related functionality.