@equinor/esv-intersection 3.0.3 → 3.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +11 -11
- package/dist/components/axis.d.ts +0 -47
- package/dist/components/index.d.ts +0 -1
- package/dist/control/ExtendedCurveInterpolator.d.ts +0 -58
- package/dist/control/IntersectionReferenceSystem.d.ts +0 -96
- package/dist/control/LayerManager.d.ts +0 -76
- package/dist/control/MainController.d.ts +0 -154
- package/dist/control/ZoomPanHandler.d.ts +0 -158
- package/dist/control/index.d.ts +0 -5
- package/dist/control/interfaces.d.ts +0 -37
- package/dist/control/overlay.d.ts +0 -20
- package/dist/datautils/colortable.d.ts +0 -1
- package/dist/datautils/findsample.d.ts +0 -2
- package/dist/datautils/index.d.ts +0 -6
- package/dist/datautils/interfaces.d.ts +0 -63
- package/dist/datautils/picks.d.ts +0 -74
- package/dist/datautils/schematicShapeGenerator.d.ts +0 -59
- package/dist/datautils/seismicimage.d.ts +0 -45
- package/dist/datautils/surfacedata.d.ts +0 -10
- package/dist/datautils/trajectory.d.ts +0 -14
- package/dist/layers/CalloutCanvasLayer.d.ts +0 -60
- package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts +0 -22
- package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts +0 -27
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts +0 -20
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts +0 -26
- package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts +0 -17
- package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts +0 -24
- package/dist/layers/GeomodelCanvasLayer.d.ts +0 -28
- package/dist/layers/GeomodelLabelsLayer.d.ts +0 -49
- package/dist/layers/GeomodelLayerV2.d.ts +0 -12
- package/dist/layers/GridLayer.d.ts +0 -29
- package/dist/layers/ImageCanvasLayer.d.ts +0 -20
- package/dist/layers/ReferenceLineLayer.d.ts +0 -29
- package/dist/layers/SchematicLayer.d.ts +0 -113
- package/dist/layers/SeismicCanvasLayer.d.ts +0 -18
- package/dist/layers/WellborePathLayer.d.ts +0 -17
- package/dist/layers/base/CanvasLayer.d.ts +0 -19
- package/dist/layers/base/HTMLLayer.d.ts +0 -13
- package/dist/layers/base/Layer.d.ts +0 -69
- package/dist/layers/base/PixiLayer.d.ts +0 -32
- package/dist/layers/base/SVGLayer.d.ts +0 -13
- package/dist/layers/base/index.d.ts +0 -5
- package/dist/layers/index.d.ts +0 -16
- package/dist/layers/schematicInterfaces.d.ts +0 -209
- package/dist/utils/arc-length.d.ts +0 -23
- package/dist/utils/binary-search.d.ts +0 -8
- package/dist/utils/color.d.ts +0 -5
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/root-finder.d.ts +0 -34
- package/dist/utils/text.d.ts +0 -14
- package/dist/utils/vectorUtils.d.ts +0 -15
- package/dist/vendor/pixi-dashed-line/index.d.ts +0 -57
- package/src/components/axis.ts +0 -247
- package/src/components/index.ts +0 -1
- package/src/control/ExtendedCurveInterpolator.ts +0 -155
- package/src/control/IntersectionReferenceSystem.ts +0 -391
- package/src/control/LayerManager.ts +0 -294
- package/src/control/MainController.ts +0 -296
- package/src/control/ZoomPanHandler.ts +0 -436
- package/src/control/index.ts +0 -5
- package/src/control/interfaces.ts +0 -42
- package/src/control/overlay.ts +0 -118
- package/src/datautils/colortable.ts +0 -14
- package/src/datautils/findsample.ts +0 -64
- package/src/datautils/index.ts +0 -6
- package/src/datautils/interfaces.ts +0 -68
- package/src/datautils/picks.ts +0 -328
- package/src/datautils/schematicShapeGenerator.ts +0 -1008
- package/src/datautils/seismicimage.ts +0 -180
- package/src/datautils/surfacedata.ts +0 -318
- package/src/datautils/trajectory.ts +0 -206
- package/src/layers/CalloutCanvasLayer.ts +0 -338
- package/src/layers/CustomDisplayObjects/ComplexRope.ts +0 -45
- package/src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts +0 -190
- package/src/layers/CustomDisplayObjects/FixedWidthSimpleRope.ts +0 -41
- package/src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts +0 -149
- package/src/layers/CustomDisplayObjects/UniformTextureStretchRope.ts +0 -39
- package/src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts +0 -174
- package/src/layers/GeomodelCanvasLayer.ts +0 -176
- package/src/layers/GeomodelLabelsLayer.ts +0 -619
- package/src/layers/GeomodelLayerV2.ts +0 -110
- package/src/layers/GridLayer.ts +0 -145
- package/src/layers/ImageCanvasLayer.ts +0 -55
- package/src/layers/ReferenceLineLayer.ts +0 -185
- package/src/layers/SchematicLayer.ts +0 -872
- package/src/layers/SeismicCanvasLayer.ts +0 -46
- package/src/layers/WellborePathLayer.ts +0 -129
- package/src/layers/base/CanvasLayer.ts +0 -102
- package/src/layers/base/HTMLLayer.ts +0 -70
- package/src/layers/base/Layer.ts +0 -217
- package/src/layers/base/PixiLayer.ts +0 -190
- package/src/layers/base/SVGLayer.ts +0 -63
- package/src/layers/base/index.ts +0 -5
- package/src/layers/index.ts +0 -16
- package/src/layers/schematicInterfaces.ts +0 -472
- package/src/utils/arc-length.ts +0 -66
- package/src/utils/binary-search.ts +0 -26
- package/src/utils/color.ts +0 -22
- package/src/utils/index.ts +0 -1
- package/src/utils/root-finder.ts +0 -78
- package/src/utils/text.ts +0 -88
- package/src/utils/vectorUtils.ts +0 -67
- package/src/vendor/pixi-dashed-line/index.ts +0 -394
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Survey data from SDMA
|
|
3
|
-
*/
|
|
4
|
-
export interface SurveySample {
|
|
5
|
-
md: number;
|
|
6
|
-
tvd: number;
|
|
7
|
-
easting: number;
|
|
8
|
-
northing: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Strat unit element as retrieved from SDMA
|
|
13
|
-
*/
|
|
14
|
-
export interface StratUnit {
|
|
15
|
-
identifier: string;
|
|
16
|
-
stratUnitParent: string;
|
|
17
|
-
colorR: null | number;
|
|
18
|
-
colorG: null | number;
|
|
19
|
-
colorB: null | number;
|
|
20
|
-
topAge: number;
|
|
21
|
-
baseAge: number;
|
|
22
|
-
stratUnitLevel: number;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Surfaces meta data as received from surface API with surface values injected
|
|
27
|
-
*/
|
|
28
|
-
export interface SurfaceMetaAndValues {
|
|
29
|
-
data: {
|
|
30
|
-
values: number[];
|
|
31
|
-
};
|
|
32
|
-
visualSettings: {
|
|
33
|
-
displayName: string;
|
|
34
|
-
crossSection: string;
|
|
35
|
-
colors: {
|
|
36
|
-
crossSection: string;
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Surfaces lines ready for drawing by geomodel layer
|
|
43
|
-
*/
|
|
44
|
-
export interface SurfaceLine {
|
|
45
|
-
id?: string;
|
|
46
|
-
label: string;
|
|
47
|
-
color: number | string; // Color is passed to pixi.js and accepts both CSS color strings and hex color value
|
|
48
|
-
data: number[][];
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Surfaces areas ready for drawing by geomodel layer
|
|
53
|
-
*/
|
|
54
|
-
export interface SurfaceArea {
|
|
55
|
-
id?: string;
|
|
56
|
-
label: string;
|
|
57
|
-
color: number | string; // Color is passed to pixi.js and accepts both CSS color strings and hex color value
|
|
58
|
-
data: number[][];
|
|
59
|
-
exclude?: boolean;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Surfaces lines and areas ready for drawing by geomodel layer
|
|
64
|
-
*/
|
|
65
|
-
export interface SurfaceData {
|
|
66
|
-
lines: SurfaceLine[];
|
|
67
|
-
areas: SurfaceArea[];
|
|
68
|
-
}
|
package/src/datautils/picks.ts
DELETED
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
import { Annotation } from '../interfaces';
|
|
2
|
-
|
|
3
|
-
type Pick = {
|
|
4
|
-
pickIdentifier?: string;
|
|
5
|
-
confidence: string | null;
|
|
6
|
-
depthReferencePoint: string;
|
|
7
|
-
md: number;
|
|
8
|
-
mdUnit: string;
|
|
9
|
-
tvd: number;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
type PickWithId = {
|
|
13
|
-
identifier: string;
|
|
14
|
-
} & Pick;
|
|
15
|
-
|
|
16
|
-
type Unit = {
|
|
17
|
-
identifier: string;
|
|
18
|
-
top: string;
|
|
19
|
-
base: string;
|
|
20
|
-
baseAge: number;
|
|
21
|
-
topAge: number;
|
|
22
|
-
colorR: number;
|
|
23
|
-
colorG: number;
|
|
24
|
-
colorB: number;
|
|
25
|
-
stratUnitLevel: number;
|
|
26
|
-
lithologyType: number;
|
|
27
|
-
stratUnitParent: number;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
type UnitDto = {
|
|
31
|
-
unitName: string;
|
|
32
|
-
topSurface: string;
|
|
33
|
-
baseSurface: string;
|
|
34
|
-
ageBase: number;
|
|
35
|
-
ageTop: number;
|
|
36
|
-
color: {
|
|
37
|
-
r: number;
|
|
38
|
-
g: number;
|
|
39
|
-
b: number;
|
|
40
|
-
};
|
|
41
|
-
level: number;
|
|
42
|
-
lithType: number;
|
|
43
|
-
parent: number;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
type PickAndUnit = PickWithId & UnitDto;
|
|
47
|
-
|
|
48
|
-
type PairedPickAndUnit = {
|
|
49
|
-
name: string;
|
|
50
|
-
mdEntry: number;
|
|
51
|
-
tvdEntry: number;
|
|
52
|
-
color: { r: number; g: number; b: number };
|
|
53
|
-
level: number;
|
|
54
|
-
entryPick: PickAndUnit;
|
|
55
|
-
mdExit: number;
|
|
56
|
-
tvdExit: number;
|
|
57
|
-
exitPick: PickAndUnit;
|
|
58
|
-
confidenceEntry: string;
|
|
59
|
-
confidenceExit: string;
|
|
60
|
-
from?: number;
|
|
61
|
-
to?: number;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const mapPick = (p: PickWithId, groupName: string): Annotation => ({
|
|
65
|
-
title: p.pickIdentifier || p.identifier,
|
|
66
|
-
group: groupName,
|
|
67
|
-
label: `${p.md} ${p.mdUnit} ${p.depthReferencePoint}`,
|
|
68
|
-
color: groupName === 'strat-picks' ? '#227' : 'rgba(0,0,0,0.8)',
|
|
69
|
-
md: p.md,
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
function getReferencePicks(picks: PickWithId[]): Annotation[] {
|
|
73
|
-
if (!picks) {
|
|
74
|
-
return [];
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return picks.map((p: PickWithId) => mapPick(p, 'ref-picks'));
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function getEntryPicks(formationPicks: PairedPickAndUnit[]): Annotation[] {
|
|
81
|
-
if (!formationPicks) {
|
|
82
|
-
return [];
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return formationPicks
|
|
86
|
-
.filter((d: PairedPickAndUnit) => d.entryPick.md === d.from)
|
|
87
|
-
.map((p: PairedPickAndUnit) => mapPick(p.entryPick, 'strat-picks'));
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function getFilteredExitPicks(formationPicks: PairedPickAndUnit[]): Annotation[] {
|
|
91
|
-
if (!formationPicks) {
|
|
92
|
-
return [];
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return (
|
|
96
|
-
formationPicks
|
|
97
|
-
.filter((d: PairedPickAndUnit) => formationPicks.findIndex((p: PairedPickAndUnit) => Math.abs(p.entryPick.md - d.exitPick.md) < 0.5) === -1)
|
|
98
|
-
.map((p: PairedPickAndUnit) => mapPick(p.exitPick, 'strat-picks'))
|
|
99
|
-
// Remove duplicates from unitpicks filling in gaps in formation
|
|
100
|
-
.filter((obj: Annotation, i: number, array: Annotation[]) => i === array.findIndex((v: Annotation) => v.title === obj.title && v.md === obj.md))
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export const getPicksData = (picksData: { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] }): Annotation[] =>
|
|
105
|
-
[...getReferencePicks(picksData.nonUnitPicks), ...getEntryPicks(picksData.unitPicks), ...getFilteredExitPicks(picksData.unitPicks)].sort(
|
|
106
|
-
(a, b) => a.md - b.md,
|
|
107
|
-
);
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* @param {Unit} u
|
|
111
|
-
*/
|
|
112
|
-
const unitDto = (u: Unit): UnitDto => ({
|
|
113
|
-
unitName: u.identifier,
|
|
114
|
-
topSurface: u.top,
|
|
115
|
-
baseSurface: u.base,
|
|
116
|
-
ageBase: u.baseAge,
|
|
117
|
-
ageTop: u.topAge,
|
|
118
|
-
color: {
|
|
119
|
-
r: u.colorR === null ? 255 : u.colorR,
|
|
120
|
-
g: u.colorG === null ? 255 : u.colorG,
|
|
121
|
-
b: u.colorB === null ? 255 : u.colorB,
|
|
122
|
-
},
|
|
123
|
-
level: u.stratUnitLevel,
|
|
124
|
-
lithType: u.lithologyType,
|
|
125
|
-
parent: u.stratUnitParent,
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
*
|
|
130
|
-
* @param {number} from
|
|
131
|
-
* @param {number} to
|
|
132
|
-
* @param {{ from: number; to: number; itm: PairedPickAndUnit }[]} arr
|
|
133
|
-
* @param {number} arr.to
|
|
134
|
-
* @param {number} arr.from
|
|
135
|
-
* @returns {[number, number][]}
|
|
136
|
-
*/
|
|
137
|
-
function findGaps(from: number, to: number, arr: { from: number; to: number; itm: PairedPickAndUnit }[]): [number, number][] {
|
|
138
|
-
if (arr.length === 0) {
|
|
139
|
-
return [[from, to]];
|
|
140
|
-
}
|
|
141
|
-
const gaps: [number, number][] = [];
|
|
142
|
-
let d = from;
|
|
143
|
-
let i = 0;
|
|
144
|
-
while (d < to && i < arr.length) {
|
|
145
|
-
const itm = arr[i];
|
|
146
|
-
if (itm.from > d) {
|
|
147
|
-
gaps.push([d, Math.min(itm.from, to)]);
|
|
148
|
-
}
|
|
149
|
-
d = Math.min(to, Math.max(from, itm.to));
|
|
150
|
-
i += 1;
|
|
151
|
-
}
|
|
152
|
-
if (d < to) {
|
|
153
|
-
gaps.push([d, to]);
|
|
154
|
-
}
|
|
155
|
-
return gaps;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* @param {Unit[]} units
|
|
160
|
-
* @returns {UnitDto[]}
|
|
161
|
-
*/
|
|
162
|
-
const transformStratColumn = (units: Unit[]): UnitDto[] => units.map(unitDto);
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Join picks data with strat column units
|
|
166
|
-
* @param {Pick[]} picks picks
|
|
167
|
-
* @param {Unit[]} stratColumn strat column
|
|
168
|
-
*/
|
|
169
|
-
function joinPicksAndStratColumn(picks: Pick[], stratColumn: Unit[]): { joined: PickAndUnit[]; nonUnitPicks: PickWithId[] } {
|
|
170
|
-
const transformed = transformStratColumn(stratColumn);
|
|
171
|
-
const nonUnitPicks: PickWithId[] = [];
|
|
172
|
-
const joined: PickAndUnit[] = [];
|
|
173
|
-
picks.forEach((p: Pick) => {
|
|
174
|
-
const matches = transformed.filter((u: UnitDto) => p.pickIdentifier.search(new RegExp(`(${u.topSurface}|${u.baseSurface})`, 'i')) !== -1);
|
|
175
|
-
if (matches.length > 0) {
|
|
176
|
-
matches.forEach((u: UnitDto) =>
|
|
177
|
-
joined.push({
|
|
178
|
-
md: p.md,
|
|
179
|
-
tvd: p.tvd,
|
|
180
|
-
identifier: p.pickIdentifier,
|
|
181
|
-
confidence: p.confidence,
|
|
182
|
-
mdUnit: p.mdUnit,
|
|
183
|
-
depthReferencePoint: p.depthReferencePoint,
|
|
184
|
-
...u,
|
|
185
|
-
}),
|
|
186
|
-
);
|
|
187
|
-
} else {
|
|
188
|
-
nonUnitPicks.push({ identifier: p.pickIdentifier, ...p });
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
return { joined, nonUnitPicks };
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Find matching pairs of entry/exit picks
|
|
197
|
-
* @param {PickAndUnit[]} joined picks joined with strat column units
|
|
198
|
-
*/
|
|
199
|
-
function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
|
|
200
|
-
// pair picks by unit name
|
|
201
|
-
const pairs = [];
|
|
202
|
-
let current = null;
|
|
203
|
-
|
|
204
|
-
const sorted = joined
|
|
205
|
-
.filter((d: PickAndUnit) => d.level)
|
|
206
|
-
.sort((a: PickAndUnit, b: PickAndUnit) => a.unitName.localeCompare(b.unitName) || a.md - b.md || a.ageTop - b.ageTop);
|
|
207
|
-
|
|
208
|
-
while (sorted.length > 0) {
|
|
209
|
-
current = sorted.shift();
|
|
210
|
-
const name = current.identifier;
|
|
211
|
-
let pairWithName: string;
|
|
212
|
-
|
|
213
|
-
const isTop = name === current.topSurface;
|
|
214
|
-
const isBase = name === current.baseSurface;
|
|
215
|
-
|
|
216
|
-
if (isTop) {
|
|
217
|
-
pairWithName = current.baseSurface;
|
|
218
|
-
} else if (isBase) {
|
|
219
|
-
pairWithName = current.topSurface;
|
|
220
|
-
} else {
|
|
221
|
-
console.warn(`Unable to match ${name} with top or base surface, ignored`);
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
let top: PickAndUnit;
|
|
226
|
-
let base: PickAndUnit;
|
|
227
|
-
|
|
228
|
-
const pairWith = sorted.find((p: PickAndUnit) => p.identifier === pairWithName);
|
|
229
|
-
if (!pairWith) {
|
|
230
|
-
console.warn(`Unable to find ${pairWithName} pick for ${name}`);
|
|
231
|
-
if (isTop) {
|
|
232
|
-
top = current;
|
|
233
|
-
base = joined
|
|
234
|
-
.filter((d: PickAndUnit) => d.level)
|
|
235
|
-
.sort((a: PickAndUnit, b: PickAndUnit) => a.md - b.md)
|
|
236
|
-
.find((p: PickAndUnit) => p.md > top.md);
|
|
237
|
-
if (base) {
|
|
238
|
-
console.warn(`Using ${base.identifier} as base for ${name}`);
|
|
239
|
-
} else {
|
|
240
|
-
console.warn(`Unable to find a base pick for ${name} pick at ${top.md}, ignored`);
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
} else if (isBase) {
|
|
244
|
-
base = current;
|
|
245
|
-
top = joined
|
|
246
|
-
.filter((d: PickAndUnit) => d.level)
|
|
247
|
-
.sort((a: PickAndUnit, b: PickAndUnit) => b.md - a.md)
|
|
248
|
-
.find((p: PickAndUnit) => p.md < base.md);
|
|
249
|
-
if (top) {
|
|
250
|
-
console.warn(`Using ${top.identifier} as top for ${name}`);
|
|
251
|
-
} else {
|
|
252
|
-
console.warn(`Unable to find a top pick for ${name} pick at ${base.md}, ignored`);
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
} else {
|
|
256
|
-
console.warn(`${name} ignored`);
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
} else {
|
|
260
|
-
top = isTop ? current : pairWith;
|
|
261
|
-
base = isTop ? pairWith : current;
|
|
262
|
-
|
|
263
|
-
if (top.md > base.md) {
|
|
264
|
-
[top, base] = [base, top];
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
sorted.splice(sorted.indexOf(pairWith), 1);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
pairs.push(<PairedPickAndUnit>{
|
|
271
|
-
name: top.unitName,
|
|
272
|
-
mdEntry: top.md,
|
|
273
|
-
tvdEntry: top.tvd,
|
|
274
|
-
color: top.color,
|
|
275
|
-
level: top.level,
|
|
276
|
-
entryPick: top,
|
|
277
|
-
mdExit: base.md,
|
|
278
|
-
tvdExit: base.tvd,
|
|
279
|
-
exitPick: base,
|
|
280
|
-
confidenceEntry: top.confidence,
|
|
281
|
-
confidenceExit: base.confidence,
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
return pairs;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* Transform data for formation track
|
|
290
|
-
* @param {Pick[]} picks picks
|
|
291
|
-
* @param {Unit[]} stratColumn strat column
|
|
292
|
-
*/
|
|
293
|
-
export function transformFormationData(picks: Pick[], stratColumn: Unit[]): { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] } {
|
|
294
|
-
const { joined, nonUnitPicks } = joinPicksAndStratColumn(picks, stratColumn);
|
|
295
|
-
const pairs = pairJoinedPicks(joined);
|
|
296
|
-
|
|
297
|
-
const itemstack = pairs
|
|
298
|
-
.filter((d: PairedPickAndUnit) => d.mdEntry < d.mdExit)
|
|
299
|
-
.sort((a, b) => a.mdEntry - b.mdEntry || a.level - b.level)
|
|
300
|
-
.reverse();
|
|
301
|
-
|
|
302
|
-
// flatten groups of unit picks, so that the highest level is
|
|
303
|
-
// given presedence over lower levels for overlapping picks.
|
|
304
|
-
const unitPicks = [];
|
|
305
|
-
while (itemstack.length > 0) {
|
|
306
|
-
const first = itemstack.pop();
|
|
307
|
-
const group: PairedPickAndUnit[] = [];
|
|
308
|
-
while (itemstack.length > 0 && itemstack[itemstack.length - 1].level > first.level) {
|
|
309
|
-
group.push(itemstack.pop());
|
|
310
|
-
}
|
|
311
|
-
group.reverse();
|
|
312
|
-
group.push(first);
|
|
313
|
-
const arr: { from: number; to: number; itm: PairedPickAndUnit }[] = [];
|
|
314
|
-
group.forEach((itm: PairedPickAndUnit) => {
|
|
315
|
-
const gaps = findGaps(itm.mdEntry, itm.mdExit, arr);
|
|
316
|
-
arr.push(...gaps.map((g) => ({ from: g[0], to: g[1], itm })));
|
|
317
|
-
});
|
|
318
|
-
arr.sort((a, b) => a.from - b.from);
|
|
319
|
-
unitPicks.push(
|
|
320
|
-
...arr.map((d) => ({
|
|
321
|
-
from: d.from,
|
|
322
|
-
to: d.to,
|
|
323
|
-
...d.itm,
|
|
324
|
-
})),
|
|
325
|
-
);
|
|
326
|
-
}
|
|
327
|
-
return { unitPicks, nonUnitPicks };
|
|
328
|
-
}
|