diff --git a/app/imports/custom/vq/client/templates/VQ_DSS_schema.js b/app/imports/custom/vq/client/templates/VQ_DSS_schema.js index a3abb389..83f9054b 100644 --- a/app/imports/custom/vq/client/templates/VQ_DSS_schema.js +++ b/app/imports/custom/vq/client/templates/VQ_DSS_schema.js @@ -143,7 +143,7 @@ function applyRelevancePrefixes(relevanceMap) { dataShapes.schema.diagram.filteredClassList.forEach(cl => { if (!brpOriginalNames.has(cl.id)) brpOriginalNames.set(cl.id, cl.display_name); const r = relevanceMap.get(cl.id); - cl.display_name = (r !== undefined ? `R${r.toFixed(3)} - ` : '') + brpOriginalNames.get(cl.id); + cl.display_name = (r !== undefined ? `R${r.toFixed(4)} - ` : '') + brpOriginalNames.get(cl.id); }); } @@ -1040,11 +1040,11 @@ Template.VQ_DSS_schema.events({ const [fragmentClasses, rank] = await runFragmentAlgorithm(fragAlgorithm, fragEdgeWeightContext, mainClasses, fragSize, undefined, brpConfig); // Update list of chosen classes - _.each(dataShapes.schema.diagram.filteredClassList, function(cl) { - if ( fragmentClasses.includes(cl.id)) cl.sel = 1; - else cl.sel = 0; - }); - makeClassLists(); + _.each(dataShapes.schema.diagram.filteredClassList, function(cl) { + if ( fragmentClasses.includes(cl.id)) cl.sel = 1; + else cl.sel = 0; + }); + makeClassLists(); if (fragAlgorithm === "brp") sortAndApplyBRPRelevance(rank); }, 'click #calculateRelevance': async function() { @@ -1310,6 +1310,13 @@ Template.VQ_DSS_schema.events({ Template.VQ_DSS_schema.Properties.set((stdPropSelectedBackup || []).filter(matches)); Template.VQ_DSS_schema.RestProperties.set((stdPropRestBackup || []).filter(matches)); }, + 'mousedown #selectedClasses option, mousedown #restClasses option': function(e) { + const id = Number(e.currentTarget.value); + if (brpCentralityData && brpCentralityData.cpcListSimple){ + const classObj = brpCentralityData.cpcListSimple.get(id); + console.log("Class obj for", id, " is ", classObj); + } + }, // Suppress native multi-select highlight so only our gray edit-mode highlight is visible. 'mousedown #selectedProperties option, mousedown #restProperties option': function(e) { if (fragmentStdPropEditing.get()) e.preventDefault(); diff --git a/app/imports/custom/vq/client/templates/fragments.js b/app/imports/custom/vq/client/templates/fragments.js index 42349bdc..9122e1ff 100644 --- a/app/imports/custom/vq/client/templates/fragments.js +++ b/app/imports/custom/vq/client/templates/fragments.js @@ -168,11 +168,10 @@ async function getAdjFromCP(weightByCPCsum, useBothClasses) { // a neighbor with both standard and user-defined properties is counted in both. export async function getCPCAdjSimple(standardProperties = null, edgesInTriples = true, cntTransform = null, useInstanceCount = false) { const CPCs = await dataShapes.callServerFunction("xx_getCPCInfo", {main: {}}); - console.log("Returned CPCs from DSS"); const getProp = buildPropMetaGetter(); const isStandardProperty = makeIsStandardProperty(standardProperties); const cpcPropIds = [...new Set(CPCs.data.map(r => r.property_id))]; - console.log("getCPCAdjSimple: standardProperties =", standardProperties, "| sample CPC property_ids =", cpcPropIds.slice(0, 10), "| std matches =", standardProperties ? cpcPropIds.filter(id => standardProperties.map(Number).includes(Number(id))).length : "all (null)"); + console.log("getCPCAdjSimple: standardProperties =", standardProperties, "| std matches =", standardProperties ? cpcPropIds.filter(id => standardProperties.map(Number).includes(Number(id))) : "all (null)"); let classSizes = null; if (useInstanceCount) { @@ -667,14 +666,19 @@ export async function computeBRPRelevance(mainClasses, config = {}, rawAdj = und if (mainClasses.includes(classId)) { obj.centralityMeasure = mainClassBoost; } else { - const propTerm = - (maxStandardRels > 0 ? (obj.standardRelCount * propWeightStandart) / maxStandardRels : 0) + - (maxUserDefinedRels > 0 ? (obj.userDefinedRelCount * propWeightUserDefined) / maxUserDefinedRels : 0); + const standardPropTerm = maxStandardRels > 0 ? (obj.standardRelCount * propWeightStandart) / maxStandardRels : 0; + const userDefinedPropTerm = maxUserDefinedRels > 0 ? (obj.userDefinedRelCount * propWeightUserDefined) / maxUserDefinedRels : 0; + const propTerm = standardPropTerm + userDefinedPropTerm; + obj.propTerms = {standardPropTerm: standardPropTerm, userDefinedPropTerm: userDefinedPropTerm, sum: propTerm}; + const divisor = totalInstances > 0 ? (totalInstances - (obj.instanceCount ?? 0)) : (cpcListSimple.size - 1); - obj.centralityMeasure = - ((classWeightIncoming * obj.inCount) + (classWeightOutgoing * obj.outCount)) * propTerm / divisor; + obj.centralityDivisor = divisor; + + const classTerm = (classWeightIncoming * obj.inCount) + (classWeightOutgoing * obj.outCount); + obj.classTerm = classTerm; + obj.centralityMeasure = classTerm * propTerm / divisor; } });