Quellcode durchsuchen

Issue #805: debug logs; externalBuilder

cycle20 vor 1 Jahr
Ursprung
Commit
d0e1b7452f

+ 1 - 0
src/RcsbFv3D/RcsbFv3DAssembly.tsx

@@ -59,6 +59,7 @@ export class RcsbFv3DAssembly extends RcsbFv3DAbstract<
 
     constructor(params: RcsbFv3DAssemblyInterface) {
         const elementId: string = params.elementId ?? uniqid("RcsbFv3D_");
+        console.log({ PARAMS: params.additionalConfig });
         super({
             elementId: params.elementId ?? elementId,
             sequenceConfig:{

+ 2 - 3
src/RcsbFvSequence/SequenceViews/RcsbView/PfvManagerFactoryImplementation/AssemblyPfvManagerFactory.tsx

@@ -65,6 +65,7 @@ class AssemblyPfvManager extends AbstractPfvManager<{instanceSequenceConfig?: In
                 },100);
             });
         });
+        console.log({ ADD_CONFIG: this.additionalConfig });
         const operatorNameContainer: DataContainer<string> = new DataContainer<string>(config.defaultOperatorName);
         if(this.stateManager.assemblyModelSate.get("entryId") != null) {
             this.module = await buildInstanceSequenceFv(
@@ -110,9 +111,7 @@ class AssemblyPfvManager extends AbstractPfvManager<{instanceSequenceConfig?: In
                 {
                     ...this.additionalConfig,
                     boardConfig: this.boardConfigContainer.get(),
-                    externalTrackBuilder:{
-                        filterFeatures: this.filterFeatures.bind(this)
-                    }
+                    externalTrackBuilder: this.additionalConfig?.externalTrackBuilder
                 }
             );
         }

+ 106 - 0
src/examples/assembly-tm/index.ts

@@ -0,0 +1,106 @@
+
+import {RcsbFv3DAssembly} from "../../RcsbFv3D/RcsbFv3DAssembly";
+import {
+    AlignmentResponse,
+    AnnotationFeatures,
+    Type
+} from "@rcsb/rcsb-api-tools/build/RcsbGraphQL/Types/Borrego/GqlTypes";
+import {RcsbFvDisplayTypes, RcsbFvRowConfigInterface} from "@rcsb/rcsb-saguaro";
+import {PolymerEntityInstanceInterface} from "@rcsb/rcsb-saguaro-app/build/dist/RcsbCollectTools/DataCollectors/PolymerEntityInstancesCollector";
+
+document.addEventListener("DOMContentLoaded", function(event) {
+
+    function getJsonFromUrl() {
+        const url = location.search;
+        var query = url.substring(1);
+        var result: any = {};
+        query.split("&").forEach(function(part) {
+            var item = part.split("=");
+            result[item[0]] = decodeURIComponent(item[1]);
+        });
+        return result;
+    }
+
+    const args: {pdbId:string} = getJsonFromUrl().pdbId ? getJsonFromUrl() : {pdbId:"1A6D"};
+    const defaultAsymId = "A"
+    const config = {
+        entryId: args.pdbId,
+        title: "Title " + args.pdbId,
+        subtitle: "Subtitle for " + args.pdbId,
+        asymId: defaultAsymId
+    };
+
+    const panel3d = new RcsbFv3DAssembly({
+        elementId: "null",
+        config: config,
+        instanceSequenceConfig:{
+            dropdownTitle: "Chain",
+            module: "interface",
+            defaultValue: defaultAsymId,
+            onChangeCallback: (context, module)=>{
+               console.log(context);
+            }
+        },
+        additionalConfig: {
+            boardConfig: {
+                elementClickCallBack: (e) => {
+                    console.log(`Element clicked ${e?.type}`)
+                }
+            },
+            externalTrackBuilder:externalTrackBuilder()
+        },
+        useOperatorsFlag: true
+    });
+    panel3d.render();
+
+});
+
+function externalTrackBuilder(){
+    let myComputedTrack: RcsbFvRowConfigInterface = {
+        trackId: "blockTrack",
+        trackHeight: 20,
+        trackColor: "#F9F9F9",
+        titleFlagColor: "#48a1b3",
+        displayType: RcsbFvDisplayTypes.BLOCK,
+        displayColor: "#56e0f5",
+        rowTitle: "COMPUTED",
+        trackData: []
+    };
+    console.log('COMPUTED track', myComputedTrack);
+    return {
+        processAlignmentAndFeatures(data: { annotations?: Array<AnnotationFeatures>; alignments?: AlignmentResponse }): Promise<void> {
+            console.log('PROCESS...', data);
+            return new Promise<void>(resolve => {
+                myComputedTrack.trackData = [];
+                data.annotations?.forEach(a=>{
+                    a.features?.forEach(f=>{
+                        if(f!=null && f.type === Type.Site){
+                            if(f.feature_positions)
+                                myComputedTrack.trackData?.push( ...f.feature_positions?.map(p=>({
+                                    begin:p?.beg_seq_id ?? 0,
+                                    end:p?.end_seq_id ?? undefined
+                                })))
+                        }
+                    })
+                });
+                resolve(void 0);
+            })
+
+        },
+        addTo(tracks: { alignmentTracks?: Array<RcsbFvRowConfigInterface>; annotationTracks?: Array<RcsbFvRowConfigInterface>; rcsbContext?: Partial<PolymerEntityInstanceInterface>; }): Promise<void> {
+            console.log('addTo(): TRACKS...', tracks);
+            return new Promise<void>(resolve => {
+                if (tracks.rcsbContext?.asymId === "A" && myComputedTrack?.trackData && myComputedTrack.trackData.length > 0) {
+                    tracks.annotationTracks?.push(myComputedTrack);
+                }
+                resolve(void 0);
+            })
+        },
+        filterFeatures(data: {annotations: Array<AnnotationFeatures>; rcsbContext:Partial<PolymerEntityInstanceInterface>}): Promise<Array<AnnotationFeatures>> {
+            console.log('filterFeatures(): DATA...', data);
+            return new Promise<Array<AnnotationFeatures>>(resolve => {
+                resolve(data.annotations);
+            })
+        }
+    }
+}

+ 5 - 1
src/examples/assembly/index.ts

@@ -59,15 +59,17 @@ function externalTrackBuilder(){
     let myComputedTrack: RcsbFvRowConfigInterface = {
         trackId: "blockTrack",
         trackHeight: 20,
-        trackColor: "#F9F9F9",
+        trackColor: "#000000",
         titleFlagColor: "#48a1b3",
         displayType: RcsbFvDisplayTypes.BLOCK,
         displayColor: "#56e0f5",
         rowTitle: "COMPUTED",
         trackData: []
     };
+    console.log('COMPUTED track', myComputedTrack);
     return {
         processAlignmentAndFeatures(data: { annotations?: Array<AnnotationFeatures>; alignments?: AlignmentResponse }): Promise<void> {
+            console.log('Process alignment...', data);
             return new Promise<void>(resolve => {
                 myComputedTrack.trackData = [];
                 data.annotations?.forEach(a=>{
@@ -86,6 +88,7 @@ function externalTrackBuilder(){
 
         },
         addTo(tracks: { alignmentTracks?: Array<RcsbFvRowConfigInterface>; annotationTracks?: Array<RcsbFvRowConfigInterface>; rcsbContext?: Partial<PolymerEntityInstanceInterface>; }): Promise<void> {
+            console.log('addTo(): TRACKS...', tracks);
             return new Promise<void>(resolve => {
                 if (tracks.rcsbContext?.asymId === "A" && myComputedTrack?.trackData && myComputedTrack.trackData.length > 0) {
                     tracks.annotationTracks?.push(myComputedTrack);
@@ -94,6 +97,7 @@ function externalTrackBuilder(){
             })
         },
         filterFeatures(data: {annotations: Array<AnnotationFeatures>; rcsbContext:Partial<PolymerEntityInstanceInterface>}): Promise<Array<AnnotationFeatures>> {
+            console.log('filterFeatures(): DATA...', data);
             return new Promise<Array<AnnotationFeatures>>(resolve => {
                 resolve(data.annotations);
             })