Initial commit from prod-batam

This commit is contained in:
mario
2025-05-27 10:51:12 +07:00
commit f85e7e3f91
3361 changed files with 304290 additions and 0 deletions

View File

@@ -0,0 +1,350 @@
import {
ctAXIAL,
ctCORONAL,
ctSAGITTAL,
fusionAXIAL,
fusionCORONAL,
fusionSAGITTAL,
mipSAGITTAL,
ptAXIAL,
ptCORONAL,
ptSAGITTAL,
} from './utils/hpViewports';
/**
* represents a 3x4 viewport layout configuration. The layout displays CT axial, sagittal, and coronal
* images in the first row, PT axial, sagittal, and coronal images in the second row, and fusion axial,
* sagittal, and coronal images in the third row. The fourth column is fully spanned by a MIP sagittal
* image, covering all three rows. It has synchronizers for windowLevel for all CT and PT images, and
* also camera synchronizer for each orientation
*/
const stage1: AppTypes.HangingProtocol.ProtocolStage = {
name: 'default',
id: 'default',
viewportStructure: {
layoutType: 'grid',
properties: {
rows: 3,
columns: 4,
layoutOptions: [
{
x: 0,
y: 0,
width: 1 / 4,
height: 1 / 3,
},
{
x: 1 / 4,
y: 0,
width: 1 / 4,
height: 1 / 3,
},
{
x: 2 / 4,
y: 0,
width: 1 / 4,
height: 1 / 3,
},
{
x: 0,
y: 1 / 3,
width: 1 / 4,
height: 1 / 3,
},
{
x: 1 / 4,
y: 1 / 3,
width: 1 / 4,
height: 1 / 3,
},
{
x: 2 / 4,
y: 1 / 3,
width: 1 / 4,
height: 1 / 3,
},
{
x: 0,
y: 2 / 3,
width: 1 / 4,
height: 1 / 3,
},
{
x: 1 / 4,
y: 2 / 3,
width: 1 / 4,
height: 1 / 3,
},
{
x: 2 / 4,
y: 2 / 3,
width: 1 / 4,
height: 1 / 3,
},
{
x: 3 / 4,
y: 0,
width: 1 / 4,
height: 1,
},
],
},
},
viewports: [
ctAXIAL,
ctSAGITTAL,
ctCORONAL,
ptAXIAL,
ptSAGITTAL,
ptCORONAL,
fusionAXIAL,
fusionSAGITTAL,
fusionCORONAL,
mipSAGITTAL,
],
createdDate: '2021-02-23T18:32:42.850Z',
};
/**
* The layout displays CT axial image in the top-left viewport, fusion axial image
* in the top-right viewport, PT axial image in the bottom-left viewport, and MIP
* sagittal image in the bottom-right viewport. The layout follows a simple grid
* pattern with 2 rows and 2 columns. It includes synchronizers as well.
*/
const stage2 = {
name: 'Fusion 2x2',
id: 'Fusion-2x2',
viewportStructure: {
layoutType: 'grid',
properties: {
rows: 2,
columns: 2,
},
},
viewports: [ctAXIAL, fusionAXIAL, ptAXIAL, mipSAGITTAL],
};
/**
* The top row displays CT images in axial, sagittal, and coronal orientations from
* left to right, respectively. The bottom row displays PT images in axial, sagittal,
* and coronal orientations from left to right, respectively.
* The layout follows a simple grid pattern with 2 rows and 3 columns.
* It includes synchronizers as well.
*/
const stage3: AppTypes.HangingProtocol.ProtocolStage = {
name: '2x3-layout',
id: '2x3-layout',
viewportStructure: {
layoutType: 'grid',
properties: {
rows: 2,
columns: 3,
},
},
viewports: [ctAXIAL, ctSAGITTAL, ctCORONAL, ptAXIAL, ptSAGITTAL, ptCORONAL],
};
/**
* In this layout, the top row displays PT images in coronal, sagittal, and axial
* orientations from left to right, respectively, followed by a MIP sagittal image
* that spans both rows on the rightmost side. The bottom row displays fusion images
* in coronal, sagittal, and axial orientations from left to right, respectively.
* There is no viewport in the bottom row's rightmost position, as the MIP sagittal viewport
* from the top row spans the full height of both rows.
* It includes synchronizers as well.
*/
const stage4: AppTypes.HangingProtocol.ProtocolStage = {
name: '2x4-layout',
id: '2x4-layout',
viewportStructure: {
layoutType: 'grid',
properties: {
rows: 2,
columns: 4,
layoutOptions: [
{
x: 0,
y: 0,
width: 1 / 4,
height: 1 / 2,
},
{
x: 1 / 4,
y: 0,
width: 1 / 4,
height: 1 / 2,
},
{
x: 2 / 4,
y: 0,
width: 1 / 4,
height: 1 / 2,
},
{
x: 3 / 4,
y: 0,
width: 1 / 4,
height: 1,
},
{
x: 0,
y: 1 / 2,
width: 1 / 4,
height: 1 / 2,
},
{
x: 1 / 4,
y: 1 / 2,
width: 1 / 4,
height: 1 / 2,
},
{
x: 2 / 4,
y: 1 / 2,
width: 1 / 4,
height: 1 / 2,
},
],
},
},
viewports: [
ptCORONAL,
ptSAGITTAL,
ptAXIAL,
mipSAGITTAL,
fusionCORONAL,
fusionSAGITTAL,
fusionAXIAL,
],
};
/**
* This layout displays three fusion viewports: axial, sagittal, and coronal.
* It follows a simple grid pattern with 1 row and 3 columns.
*/
// const stage0: AppTypes.HangingProtocol.ProtocolStage = {
// name: 'Fusion 1x3',
// viewportStructure: {
// layoutType: 'grid',
// properties: {
// rows: 1,
// columns: 3,
// },
// },
// viewports: [fusionAXIAL, fusionSAGITTAL, fusionCORONAL],
// };
const ptCT: AppTypes.HangingProtocol.Protocol = {
id: '@ohif/extension-tmtv.hangingProtocolModule.ptCT',
locked: true,
name: 'Default',
createdDate: '2021-02-23T19:22:08.894Z',
modifiedDate: '2022-10-04T19:22:08.894Z',
availableTo: {},
editableBy: {},
imageLoadStrategy: 'interleaveTopToBottom', // "default" , "interleaveTopToBottom", "interleaveCenter"
protocolMatchingRules: [
{
attribute: 'ModalitiesInStudy',
constraint: {
contains: ['CT', 'PT'],
},
},
{
attribute: 'StudyDescription',
constraint: {
contains: 'PETCT',
},
},
{
attribute: 'StudyDescription',
constraint: {
contains: 'PET/CT',
},
},
],
displaySetSelectors: {
ctDisplaySet: {
seriesMatchingRules: [
{
attribute: 'Modality',
constraint: {
equals: {
value: 'CT',
},
},
required: true,
},
{
attribute: 'isReconstructable',
constraint: {
equals: {
value: true,
},
},
required: true,
},
{
attribute: 'SeriesDescription',
constraint: {
contains: 'CT',
},
},
{
attribute: 'SeriesDescription',
constraint: {
contains: 'CT WB',
},
},
],
},
ptDisplaySet: {
seriesMatchingRules: [
{
attribute: 'Modality',
constraint: {
equals: 'PT',
},
required: true,
},
{
attribute: 'isReconstructable',
constraint: {
equals: {
value: true,
},
},
required: true,
},
{
attribute: 'SeriesDescription',
constraint: {
contains: 'Corrected',
},
},
{
weight: 2,
attribute: 'SeriesDescription',
constraint: {
doesNotContain: {
value: 'Uncorrected',
},
},
},
],
},
},
stages: [stage1, stage2, stage3, stage4],
numberOfPriorsReferenced: -1,
};
function getHangingProtocolModule() {
return [
{
name: ptCT.id,
protocol: ptCT,
},
];
}
export default getHangingProtocolModule;