Ignore:
Timestamp:
09/08/06 18:46:38 (6 years ago)
Author:
sys
Message:

Scoring Mlq

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Wsp_ModelingAssmnt/spaces/gen/modelBuilder/bs.doss/sma_assmntUnitMlqXhtmlTransf/xhtmlContent.xsl.xsl

    r6483 r6491  
    9393        load:function(pSession){ 
    9494                var vStr = (pSession!=null) ? scServices.assmntMgr.getResponse(this.fId, pSession, "pos") : null; 
    95                 var vList = vStr ? eval(vStr) : null; 
    9695<!-- Reset des tableaux 
    9796-->             for(var i=this.fGroupsC.length -1; i &gt;=0; i--) { 
     
    10099                } 
    101100<!-- Remplissage 
    102 -->             for(var i=0, len=this.fLabels.length; i &lt; len; i++) { 
    103                         var vLabelToAdd = vList ? vList[i] || {} : {}; 
    104                         vLabelToAdd.label = this.fLabels[i]; 
    105                         var vGroupCs = this.fGroupsC[vLabelToAdd.g||0]; 
    106                         if(vGroupCs.length == 1) vGroupCs[0].labelsToAdd[ "offs" in vLabelToAdd ? vLabelToAdd.offs : vGroupCs[0].labelsToAdd.length] = vLabelToAdd;  
    107                         else if("offs" in vLabelToAdd) vGroupCs[vLabelToAdd.offs].labelsToAdd.push(vLabelToAdd); 
    108                         // TODO else  
     101-->             if(vStr) { 
     102                        <!-- Reload un état 
     103-->                     var vList = eval(vStr); 
     104                        for(var i=0, len=this.fLabels.length; i &lt; len; i++) { 
     105                                var vLabelToAdd = vList[i]; 
     106                                vLabelToAdd.label = this.fLabels[i]; 
     107                                var vGroupC = this.fGroupsC[vLabelToAdd.g]; 
     108                                if(vGroupC.length == 1) vGroupC[0].labelsToAdd[vLabelToAdd.offs] = vLabelToAdd;  
     109                                else vGroupC[vLabelToAdd.offs].labelsToAdd.push(vLabelToAdd); 
     110                        } 
     111                } else { 
     112                        <!-- Aucun état enregistré, reset 
     113-->                     var vBasketC = this.fGroupsC[0]; 
     114                        for(var i=vBasketC.length-1; i &gt;=0; i--) for(var j=0, vLen=vBasketC[i]._Labels.length; j &lt; vLen; j++) vBasketC[i].labelsToAdd.push({label:vBasketC[i]._Labels[j]}); 
    109115                } 
    110116                scDragMgr.repopulateContainers("<xsl:value-of select="$vIdObj"/>"); 
     
    114120                        var vGroup = this.fGroupsC[i]; 
    115121                        var vOffset = 0; 
    116                         for(var j=vGroup.length-1; j &gt;=0; j--) { 
     122                        for(var j=0, vLenJ=vGroup.length; j &lt; vLenJ; j++) { 
    117123                                var vItems = scDragMgr.getLabels(vGroup[j]); 
    118                                 for(var k=vItems.length-1; k &gt;=0; k--) { 
     124                                for(var k=0, vLenK = vItems.length; k &lt; vLenK; k++) { 
    119125                                        vItems[k].rG = i; 
    120126                                        vItems[k].rO = vOffset++; 
     
    164170                        <xsl0:otherwise>this.fGroupsC = [scDragMgr.getContainers("<xsl:value-of select="$vIdObj"/>", document.getElementById("<xsl:value-of select="$vIdObj"/>_L"))]; 
    165171                </xsl0:otherwise> 
    166                 </xsl0:choose>this.initSeq(this.getOnLoadSeq());  
     172                </xsl0:choose><!-- Mémorisation de la position initiale des labels dans _Labels. 
     173-->             for(var i = this.fGroupsC[0].length-1; i &gt;=0; i--) this.fGroupsC[0][i]._Labels = scDragMgr.getLabels(this.fGroupsC[0][i]); 
     174                this.initSeq(this.getOnLoadSeq());  
    167175                var vNodeRoot = document.getElementById("<xsl:value-of select="$vIdObj"/>_A"); 
    168176                vNodeRoot.style.display = "block";  
     
    347355                                </xsl0:when> 
    348356                                <xsl0:when test="$vInteraction='matchTarget'"> 
    349                         vLabel.className = (vLabel.sG == vLabel.rG <xsl0:if test="sm:scoreComputing/sm:orderingScoring/@algorithm='distance'"> &amp;&amp; vLabel.sO == vLabel.rO</xsl0:if>) ? "<xsl0:value-of select="si(sm:resultDisplaying/@classIfRight, sm:resultDisplaying/@classIfRight, 'assmntResult_Right')"/>" : "<xsl0:value-of select="si(sm:resultDisplaying/@classIfWrong, sm:resultDisplaying/@classIfWrong, 'assmntResult_Wrong')"/>"; 
     357                        vLabel.className = (vLabel.sG == vLabel.rG <xsl0:if test="sm:scoreComputing/sm:orderingScoring/@algorithm"> &amp;&amp; vLabel.sO == vLabel.rO</xsl0:if>) ? "<xsl0:value-of select="si(sm:resultDisplaying/@classIfRight, sm:resultDisplaying/@classIfRight, 'assmntResult_Right')"/>" : "<xsl0:value-of select="si(sm:resultDisplaying/@classIfWrong, sm:resultDisplaying/@classIfWrong, 'assmntResult_Wrong')"/>"; 
    350358                                </xsl0:when> 
    351359                        </xsl0:choose> 
     
    413421-->             this.computeScore = function() { 
    414422<!-- Calcul du score 
    415 -->             <xsl0:if test="$vInteraction='orderLabels' or sm:scoreComputing/sm:orderingScoring/@algorithm='distance'"> 
    416                 function scoreOrder(pLabels) { 
    417                         var vMax, vErr; 
     423-->             <xsl0:choose> 
     424                <xsl0:when test="sm:scoreComputing/sm:orderingScoring/@algorithm='distance'"> 
     425                function scoreOrder(pLabels, pGroup) { 
     426                        var vMax=0, vErr=0; 
    418427                        var vD = pLabels.length-1; 
    419                         for(var i=pLabels.length -1; i &gt;=0; i--) { 
    420                                 vErr += Math.abs(pLabels[i].sO - pLabels[i].gO); 
     428                        for(var i=vD; i &gt;=0; i--) { 
     429                                if(pGroup &amp;&amp; pGroup!=pLabels[i].rG) return 0; 
     430                                vErr += Math.abs(pLabels[i].sO - pLabels[i].rO); 
    421431                                vMax += Math.abs(vD); 
    422432                                vD = vD - 2; 
    423433                        } 
    424                         return (vMax - vErr) / vMax; 
    425                 } 
    426                 </xsl0:if> 
     434                        return vMax&gt;0 ? (vMax - vErr) / vMax : 0; 
     435                } 
     436                </xsl0:when> 
     437                <xsl0:when test="$vInteraction='orderLabels' or sm:scoreComputing/sm:orderingScoring/@algorithm='boolean'"> 
     438                function scoreOrder(pLabels, pGroup) { 
     439                        for(var i=pLabels.length-1; i &gt;=0; i--) { 
     440                                if(pGroup &amp;&amp; pGroup!=pLabels[i].rG) return 0; 
     441                                if(pLabels[i].sO != pLabels[i].rO) return 0; 
     442                        } 
     443                        return 1; 
     444                } 
     445                </xsl0:when> 
     446                </xsl0:choose> 
    427447                        <xsl0:choose> 
    428                                 <xsl0:when test="$vInteraction='orderLabels'">var vList = this.fGroupsC[this.fGroupsC.length-1]; 
     448                                <xsl0:when test="$vInteraction='orderLabels'"> 
    429449                this.fMinPts = 0; 
    430                 this.fMaxPts = vList.length; 
    431                 this.fScorePts = Math.round(scoreOrder(this.fLabels) * vList.length); 
     450                this.fMaxPts = this.fLabels.length; 
     451                this.fScorePts = Math.floor(scoreOrder(this.fLabels, this.fGroupsC.length-1) * this.fLabels.length); 
    432452                                </xsl0:when> 
    433453                                <xsl0:when test="$vInteraction='associateLabels'">this.fMinPts = 0; 
    434                 this.fMaxPts = this.fGroupsC.length; 
     454                this.fMaxPts = this.fGroupsC.length - 1; 
    435455                this.fScorePts = 0; 
    436456                var vWrong = {}; 
    437457                var vLists = {}; 
    438                 for(var i=this.fGroupsC.length-1; i &gt;=1; i--) {vLists[i] = []; this.fGroupsC[i].isRight=true;}; 
    439                 for(var i=this.fLabels.length -1; i &gt;=0; i--) { 
    440                         vLists[this.fLabels[i].sG][this.fLabels[i].rO] = this.fLabels[i]; 
    441                 } 
    442                 for(var i=this.fGroupsC.length-1; i &gt;=1; i--) { 
    443                         var vList = this.fGroupsC[i]; 
    444                         var j=vList.length-1; 
    445                         for(; j &gt;=1; j--) if(vList[j].rG != vList[0].rG) {this.fGroupsC[vList[0].rG].isRight = false; this.fGroupsC[vList[j].rG].isRight = false;} 
    446                 } 
    447                 for(var i=this.fGroupsC.length-1; i &gt;=1; i--) if(this.fGroupsC[i].isRight) this.fScorePts += <xsl0:value-of select="si(sm:scoreComputing/sm:orderingScoring/@algorithm='distance', 'scoreOrder(vLists[i])', '1')"/>; 
     458                for(var i=this.fGroupsC.length-1; i &gt;=1; i--) this.fGroupsC[i].isRight=true; 
     459                loopLabels: 
     460                for(var i=this.fLabels.length-1; i &gt;=0; i--) { 
     461                        var vSG = this.fLabels[i].sG; 
     462                        if(this.fGroupsC[vSG].isRight) { 
     463                                var vRG = this.fLabels[i].rG; 
     464                                if(vRG==0) {this.fGroupsC[vSG].isRight=false; continue loopLabels;} 
     465                                if(! vLists[vSG]) vLists[vSG] = []; 
     466                                else for(var j = vLists[vSG].length-1; j &gt;=0; j--) if(vLists[vSG][j].rG != vRG) { 
     467                                        this.fGroupsC[vSG].isRight = false; 
     468                                        continue loopLabels; 
     469                                }<!-- On regarde si d'autres labels ne seraient pas dans ce group 
     470-->                             for(var j=this.fLabels.length-1; j &gt;=0; j--) if(i!=j &amp;&amp; this.fLabels[j].rG == vRG &amp;&amp; this.fLabels[j].sG != vSG) { 
     471                                        this.fGroupsC[vSG].isRight = false; 
     472                                        this.fGroupsC[this.fLabels[j].sG].isRight = false; 
     473                                        continue loopLabels; 
     474                                } 
     475                                vLists[vSG].push(this.fLabels[i]); 
     476                        } 
     477                } 
     478                for(var i=this.fGroupsC.length-1; i &gt;=1; i--) if(this.fGroupsC[i].isRight) this.fScorePts += <xsl0:value-of select="si(sm:scoreComputing/sm:orderingScoring/@algorithm, 'scoreOrder(vLists[i])', '1')"/>; 
    448479                                        </xsl0:when> 
    449480                                        <xsl0:when test="$vInteraction='matchTarget'">this.fMinPts = 0; 
     
    453484                        if(this.fLabels[i].sG == this.fLabels[i].rG) this.fScorePts += 1; 
    454485                } 
    455                 <xsl0:if test="sm:scoreComputing/sm:orderingScoring/@algorithm='distance'">for(var i=this.fGroupsC.length-1; i &gt;=1; i--) { 
     486                <xsl0:if test="sm:scoreComputing/sm:orderingScoring/@algorithm">for(var i=this.fGroupsC.length-1; i &gt;=1; i--) { 
    456487                        var vList = []; 
    457488                        var j=this.fLabels.length -1; 
     
    462493                                } 
    463494                        } 
    464                         if(j&lt;0) this.fScorePts += Math.round(scoreOrder(vList)*vList.length); 
     495                        if(j&lt;0) this.fScorePts += Math.floor(scoreOrder(vList)*vList.length); 
    465496                } 
    466497                this.fScorePts /= 2; 
Note: See TracChangeset for help on using the changeset viewer.