From a09bdb36e482aabdd88de6b9c4405b696e22d56b Mon Sep 17 00:00:00 2001 From: Alexander Serdyukov Date: Wed, 22 Apr 2026 05:21:24 +0400 Subject: [PATCH 1/6] Tried adding .hic conversion using hictk --- src/app/core/net/api/RequestManager.ts | 18 ++ src/app/core/net/api/request.ts | 10 + src/app/core/net/api/response.ts | 28 +++ src/app/core/net/dto/responseDTO.ts | 31 +++ .../upper_ribbon/CoolerConverter.vue | 190 +++++++++++++++++- .../components/upper_ribbon/NavigationBar.vue | 13 +- .../converter/ConverterStatusChecker.vue | 81 +++++++- .../converter/CoolerFileSelector.vue | 4 +- 8 files changed, 354 insertions(+), 21 deletions(-) diff --git a/src/app/core/net/api/RequestManager.ts b/src/app/core/net/api/RequestManager.ts index 3288288..bc63ad6 100644 --- a/src/app/core/net/api/RequestManager.ts +++ b/src/app/core/net/api/RequestManager.ts @@ -29,6 +29,7 @@ import { import { HiCTAPIRequestDTO } from "../dto/requestDTO"; import { ConversionJobResponseDTO, + ConversionToolchainStatusResponseDTO, CurrentSignalRangeResponseDTO, FastaLinkResponseDTO, NameMappingResponseDTO, @@ -52,6 +53,7 @@ import { LinkFASTARequest, ListAGPFilesRequest, ListCoolerFilesRequest, + ListConvertibleMatrixFilesRequest, ListFilesDetailedRequest, ListFASTAFilesRequest, ListFilesRequest, @@ -70,6 +72,7 @@ import { StartConversionJobRequest, ListConversionJobsRequest, GetConversionJobRequest, + GetConversionToolchainStatusRequest, StopConversionJobRequest, RenameContigRequest, RenameScaffoldRequest, @@ -103,6 +106,7 @@ import { } from "./request"; import { ConversionJobResponse, + ConversionToolchainStatusResponse, CurrentSignalRangeResponse, FastaLinkResponse, FileEntryResponse, @@ -398,6 +402,13 @@ class RequestManager { return response.data as string[]; } + public async listConvertibleMatrices(): Promise { + const response = await this.sendRequest( + new ListConvertibleMatrixFilesRequest() + ); + return response.data as string[]; + } + public async listTrackFiles(): Promise { const response = await this.sendRequest(new ListTrackFilesRequest()); return response.data as string[]; @@ -688,6 +699,13 @@ class RequestManager { ); } + public async getConversionToolchainStatus(): Promise { + return this.sendRequest(new GetConversionToolchainStatusRequest()).then( + (response) => + new ConversionToolchainStatusResponseDTO(response.data).toEntity() + ); + } + public async renameContig( contigId: number, newName: string | null diff --git a/src/app/core/net/api/request.ts b/src/app/core/net/api/request.ts index 696b7e6..b482460 100644 --- a/src/app/core/net/api/request.ts +++ b/src/app/core/net/api/request.ts @@ -73,6 +73,10 @@ class ListCoolerFilesRequest implements HiCTAPIRequest { requestPath = "/list_coolers"; } +class ListConvertibleMatrixFilesRequest implements HiCTAPIRequest { + requestPath = "/list_convertible_matrices"; +} + class ListTrackFilesRequest implements HiCTAPIRequest { requestPath = "/tracks/list_files"; } @@ -205,6 +209,10 @@ class StopConversionJobRequest implements HiCTAPIRequest { } } +class GetConversionToolchainStatusRequest implements HiCTAPIRequest { + requestPath = "/convert/toolchain"; +} + class SetContrastRangeRequest implements HiCTAPIRequest { requestPath = "/set_contrast_range"; @@ -546,11 +554,13 @@ export { AttachSessionRequest, CloseFileRequest, ListCoolerFilesRequest, + ListConvertibleMatrixFilesRequest, StartConversionJobRequest, StartBatchConversionJobsRequest, ListConversionJobsRequest, GetConversionJobRequest, StopConversionJobRequest, + GetConversionToolchainStatusRequest, RenameContigRequest, RenameScaffoldRequest, ExportNameMappingRequest, diff --git a/src/app/core/net/api/response.ts b/src/app/core/net/api/response.ts index 3ad4e51..dc5cbf1 100644 --- a/src/app/core/net/api/response.ts +++ b/src/app/core/net/api/response.ts @@ -42,6 +42,10 @@ class ConversionJobResponse { public readonly sourceFilename: string, public readonly outputFilename: string, public readonly direction: string, + public readonly currentStage: string, + public readonly currentStageLabel: string, + public readonly stageDetail: string, + public readonly stageProgress: number, public readonly overallProgress: number, public readonly resolutionProgress: number, public readonly currentResolution: number, @@ -51,11 +55,34 @@ class ConversionJobResponse { public readonly resolutionEtaMillis: number, public readonly inputSizeBytes: number, public readonly outputSizeBytes: number, + public readonly toolchainSource: string, + public readonly toolchainSummary: string, + public readonly toolchainNotices: string[], + public readonly toolchainCitations: string[], public readonly logs: string[], public readonly error: string ) {} } +class ConversionToolchainStatusResponse { + public constructor( + public readonly platform: string, + public readonly source: string, + public readonly supportedPlatform: boolean, + public readonly hicConversionAvailable: boolean, + public readonly hictkAvailable: boolean, + public readonly hictkCommand: string | null, + public readonly coolerAvailable: boolean, + public readonly coolerCommand: string | null, + public readonly pythonAvailable: boolean, + public readonly pythonCommand: string | null, + public readonly summary: string, + public readonly notices: string[], + public readonly citations: string[], + public readonly limitations: string[] + ) {} +} + class NameMappingResponse { public constructor( public readonly contigs: { @@ -301,6 +328,7 @@ export { CurrentSignalRangeResponse, TilePOSTResponse, ConversionJobResponse, + ConversionToolchainStatusResponse, NameMappingResponse, TrackSummaryResponse, TrackBinBlockResponse, diff --git a/src/app/core/net/dto/responseDTO.ts b/src/app/core/net/dto/responseDTO.ts index e2c79b3..ebb1b06 100644 --- a/src/app/core/net/dto/responseDTO.ts +++ b/src/app/core/net/dto/responseDTO.ts @@ -21,6 +21,7 @@ import { ConversionJobResponse, + ConversionToolchainStatusResponse, CurrentSignalRangeResponse, FileEntryResponse, FastaLinkCompatibilityResponse, @@ -95,6 +96,10 @@ class ConversionJobResponseDTO extends InboundDTO { this.json["sourceFilename"] as string, this.json["outputFilename"] as string, this.json["direction"] as string, + (this.json["currentStage"] as string) ?? "", + (this.json["currentStageLabel"] as string) ?? "", + (this.json["stageDetail"] as string) ?? "", + (this.json["stageProgress"] as number) ?? 0, this.json["overallProgress"] as number, this.json["resolutionProgress"] as number, this.json["currentResolution"] as number, @@ -104,12 +109,37 @@ class ConversionJobResponseDTO extends InboundDTO { this.json["resolutionEtaMillis"] as number, this.json["inputSizeBytes"] as number, this.json["outputSizeBytes"] as number, + (this.json["toolchainSource"] as string) ?? "", + (this.json["toolchainSummary"] as string) ?? "", + (this.json["toolchainNotices"] as string[]) ?? [], + (this.json["toolchainCitations"] as string[]) ?? [], (this.json["logs"] as string[]) ?? [], (this.json["error"] as string) ?? "" ); } } +class ConversionToolchainStatusResponseDTO extends InboundDTO { + public toEntity(): ConversionToolchainStatusResponse { + return new ConversionToolchainStatusResponse( + (this.json["platform"] as string) ?? "unknown", + (this.json["source"] as string) ?? "unknown", + Boolean(this.json["supportedPlatform"] ?? false), + Boolean(this.json["hicConversionAvailable"] ?? false), + Boolean(this.json["hictkAvailable"] ?? false), + (this.json["hictkCommand"] as string) ?? null, + Boolean(this.json["coolerAvailable"] ?? false), + (this.json["coolerCommand"] as string) ?? null, + Boolean(this.json["pythonAvailable"] ?? false), + (this.json["pythonCommand"] as string) ?? null, + (this.json["summary"] as string) ?? "", + (this.json["notices"] as string[]) ?? [], + (this.json["citations"] as string[]) ?? [], + (this.json["limitations"] as string[]) ?? [] + ); + } +} + class NameMappingResponseDTO extends InboundDTO { public toEntity(): NameMappingResponse { return new NameMappingResponse( @@ -421,6 +451,7 @@ export { CurrentSignalRangeResponseDTO, TilePOSTResponseDTO, ConversionJobResponseDTO, + ConversionToolchainStatusResponseDTO, NameMappingResponseDTO, TrackSummaryResponseDTO, TrackQueryResponseDTO, diff --git a/src/app/ui/components/upper_ribbon/CoolerConverter.vue b/src/app/ui/components/upper_ribbon/CoolerConverter.vue index 84291cb..2e1da1a 100644 --- a/src/app/ui/components/upper_ribbon/CoolerConverter.vue +++ b/src/app/ui/components/upper_ribbon/CoolerConverter.vue @@ -29,9 +29,9 @@ data-backdrop="static" >