Index by: file name | procedure name | procedure call | annotation
gscope_ccClementine.tcl (annotations | original source)

#cL gscopublic/gscope_cc.tcl

proc RatioXMotifsPourTousOrganismes {} {
    foreach Org [lrange [MAMAsOrg "GetList"] 0 end] {
	Espionne [RatioXMotifs $Org]
    }    
}

proc RatioXMotifs {{Organisme ""} {Liste ""}} {
    #cL calcule les nombres de nuc dans les Xmotifs 0 1 2 et fait les ratios
    if {$Organisme==""} { set Organisme [MAMAsOrg] }
    set NbNtXMotifsFrame0 0
    set NbNtXMotifsFrame1 0
    set NbNtXMotifsFrame2 0
    #set NbNtTotal 0
    lappend FichierRatio "Organisme\tGene\tNbNtXMotif(Frame0)\tNbNtXMotif(Frame1)\tNbNtXMotif(Frame2)\tLongueurSequenceGene\tPourcentage(Frame0)\tPourcentage(Frame1)%\tPourcentage(Frame2)%"
    if {$Liste==""} { set Liste [lrange [ListeDesPABs] 0 end] }
    foreach Nom $Liste {
	#Espionne $Nom
	set LesOrga {}
	if {[info exists KduDF]} {unset KduDF}
	if {[info exists LesDFDu]} {unset LesDFDu}
	if {[info exists SequenceDu]} {unset SequenceDu}
	set F [GscopeFile $Nom nucalitfa]
	foreach Ligne [LesLignesDuFichier $F] {
	    if {[regexp {>} $Ligne]} {
		set Entete $Ligne
		lassign [split $Entete " "] Access
		regsub ">" $Access "" Access
		lassign [split $Access "_"] Gene Orga
		if {$Orga eq $Organisme} {
		    lappend LesOrga $Orga
		}
		if { ! [info exists SequenceDu($Orga)]} { set SequenceDu($Orga) "" }
	    } else {
		if {$Orga eq $Organisme} {
		    append SequenceDu($Orga) $Ligne
		}
	    }
	}
	foreach Orga $LesOrga {
	    set SequenceNonGap ""
	    set LongeurSequence 0
	    regsub -all {\-} $SequenceDu($Orga) "" SequenceNonGap
	    set LongueurSequence [string length $SequenceNonGap]
	    foreach Frame [list 0 1 2] {
		set SequenceNonGapDeLaFrame [string range $SequenceNonGap $Frame end]
		set XMotifsSequence [XMotifs $SequenceNonGapDeLaFrame 0]
		set LesDFDu($Frame) {}
		foreach {K V} $XMotifsSequence {
 		    foreach DF $V {
			lappend LesDFDu($Frame) $DF
			set KduDF($Frame,$DF) $K
		    }
		}
	    }
	}
	foreach Orga $LesOrga { 
	    foreach Frame [list 0 1 2] {
		set LesDFDu($Frame) [lsort -integer -index 0 $LesDFDu($Frame)]
		set NbLettreMotif($Frame) 0
		set LongueurMotif 0
		foreach DF $LesDFDu($Frame) {
		    lassign $DF D F
		    set LongueurMotif [expr $F-$D+3]
		    incr NbLettreMotif($Frame) $LongueurMotif
		}
		set Ratio($Frame) "$NbLettreMotif($Frame)/$LongueurSequence"
		if {$LongueurSequence!=0} {
		    set Pourcentage($Frame) [expr 100*$NbLettreMotif($Frame)/$LongueurSequence]
		} else {
		    set Pourcentage($Frame) "X"
		}
	    }
	    lappend FichierRatio "$Orga\t$Gene\t$NbLettreMotif(0)\t$NbLettreMotif(1)\t$NbLettreMotif(2)\t$LongueurSequence\t$Pourcentage(0)%\t$Pourcentage(1)%\t$Pourcentage(2)%"
	    #incr NbNtTotal $LongueurSequence
	    #lappend FichierRatio ""
	    #lappend ListeX0Motif $Pourcentage(0)
	    #lappend ListeX1Motif $Pourcentage(1)
	    #lappend ListeX2Motif $Pourcentage(2)
	    #lappend FichierRatio ""
	    #incr NbNtXMotifsFrame0 $NbLettreMotif(0)
	    #incr NbNtXMotifsFrame1 $NbLettreMotif(1)
	    #incr NbNtXMotifsFrame2 $NbLettreMotif(2)
	}
    }
    #Espionne "Repartition des pourcentages pour la frame 0 de $Organisme"
    #Histogramme $ListeX0Motif
    #Espionne "Repartition des pourcentages pour la frame 1 de $Organisme"
    #Histogramme $ListeX1Motif
    #Espionne "Repartition des pourcentages pour la frame 2 de $Organisme"
    #Histogramme $ListeX2Motif
    #Espionne $FichierRatio
    return [SauveLesLignes $FichierRatio dans "[RepertoireDuGenome]/fiches/RatioXMotifs${Orga}"]
}
 
proc PositionsLocalesVersGlobales {Sequence Position} {
    set L 0
    set G 0
    foreach C [split $Sequence ""] {
	if {$C!="-" && $C!="."} { incr L }
	incr G
	if {$L==$Position} { return $G }
    }
    return 0
}

proc SumOfPairsCL {Pilier} {
    set SumPairs 0
    set NbElements 0
    set Taille   [llength $Pilier]
    for {set i 0} {$i<$Taille} {incr i} {
	if {[lindex $Pilier $i]!="-"} {
	    incr NbElements 
	}
	for {set j [expr {$i+1}]} {$j<$Taille} {incr j} {
	    if {[lindex $Pilier $i]!="-" && [lindex $Pilier $j]!="-"} {
		if {[lindex $Pilier $i] eq [lindex $Pilier $j]} {
		    incr SumPairs 1
		}
	    }
	} 
    }
    return "$SumPairs $NbElements"
}

proc CalculSumOfPairs {{Liste ""}} {
    #Position NbMotifsFrame0 SumMotifsFrame0 RatioSumMotifs/Diviseur NbMotifsFrame1 SumMotifsFrame1 RatioSumMotifsFrame1/Diviseur NbMotifsFrame2 SumMotifsFrame2 RatioSumMotifsFrame2/Diviseur NbTotalMotifs NbLinesLignesParticipant SumPairs RatioSumPairs/Diviseur
    set SP "SumOfPairsCorrect"
    set RepSP "[RepertoireDuGenome]/$SP"
    file mkdir $RepSP
    if {$Liste==""} { set Liste [lrange [ListeDesPABs] 0 end] }
    foreach Nom $Liste {
	if {[file exists [GscopeFile $Nom $SP]]} { continue }
	if {[PasTouche $Nom]} { continue }
	Espionne $Nom
	set LesLignesDuFichier {}
	set LongueurSequence 0
	if {[info exists LesDFDu]   } { unset LesDFDu }
	if {[info exists SequenceDu]} { unset SequenceDu }
	if {[info exists LesPositionsFrame]} { unset LesPositionsFrame }
	if {[info exists LesPositionsMotifs]} { unset LesPositionsMotifs }
	if {[info exists LesPositionsSansTirets]} { unset LesPositionsSansTirets }
	if {[info exists PilierMotif]} { unset PilierMotif }
	if {[info exists InMotif]} { unset InMotif }
	if {[info exists Pilier]} { unset Pilier }
	if {[info exists NombreMotifs]} {unset NombreMotifs}
	if {[info exists RatioX]} {unset RatioX}
	set LesAccess [MAMAsSeq $Nom listof org]
	foreach Access $LesAccess {
	    set SequenceDu($Access) [MAMAsSeq $Nom $Access nuc gap]
	}
	foreach Access $LesAccess {
	    set SequenceNonGap [MAMAsSeq $Nom $Access nuc nogap]
	    foreach Frame [list 0 1 2] {
		set LesPositionsMotifs($Frame,$Access) {}
		set LesPositionsSansTirets($Frame,$Access) {}
		set XMotifsSequence [XMotifs $SequenceNonGap $Frame]
		set LesDFDu($Frame,$Access) {}
		foreach {K V} $XMotifsSequence {
		    foreach DF $V {
			lappend LesDFDu($Frame,$Access) $DF
		    }
		}
		if {$LesDFDu($Frame,$Access)=={}} { continue }
		set LesDFDu($Frame,$Access) [lsort -integer -index 0 $LesDFDu($Frame,$Access)]
		foreach DF $LesDFDu($Frame,$Access) {
		    lassign $DF D F
		    incr F 2
		    set DG [PositionsLocalesVersGlobales $SequenceDu($Access) $D]
		    set FG [PositionsLocalesVersGlobales $SequenceDu($Access) $F]
		    for {set i $DG} {$i<=$FG} {incr i} {
			lappend LesPositionsMotifs($Frame,$Access) $i
		    }
		}
		foreach P $LesPositionsMotifs($Frame,$Access) {
		    set B [string index $SequenceDu($Access) $P]
		    if {$B!="-"} {
			lappend LesPositionsSansTirets($Frame,$Access) $P
			set InMotif($Frame,$Access,$P) 1
		    }
		}
	    }
	}
	foreach Frame [list 0 1 2] {
	    foreach Access $LesAccess {
		LConcat LesPositionsFrame($Frame) $LesPositionsSansTirets($Frame,$Access)
	    }
	    set LesPositionsFrame($Frame) [lsort -integer -increasing $LesPositionsFrame($Frame)]
	}
	set LongueurSequence [string length $SequenceDu($Access)]
	for {set i 0} {$i<=$LongueurSequence} {incr i} {
	    foreach Access $LesAccess {
		set Nt [string index $SequenceDu($Access) $i]
		lappend Pilier($i) $Nt
		foreach Frame [list 0 1 2] {
		    if {[info exists InMotif($Frame,$Access,$i)]} {
			lappend PilierMotif($Frame,$i) $Nt
		    }
		}
	    }
	}
	for {set i 0} {$i<$LongueurSequence} {incr i} {
	    lassign [SumOfPairsCL $Pilier($i)] SommeDesPairs NbLignes
	    #Espionne "Nb de Lignes $NbLignes"

	    set Diviseur [expr {($NbLignes*($NbLignes-1))/2}]
	    #Espionne "Diviseur $Diviseur"
	    if {$Diviseur==0} {
		set RatioSommeNbLignes 0
		foreach Frame [list 0 1 2] {
		    set NombreMotifs($Frame) 0
		    set SumOfMotifs($Frame)  0
		    set RatioX($Frame) 0
		}
	    } else {
		foreach Frame [list 0 1 2] {
		    if {0} {
			set NombreMotifs($Frame) 0
			set SumOfMotifs($Frame) 0
			foreach Element $LesPositionsFrame($Frame) {
			    if {$i==$Element} { 
				incr NombreMotifs($Frame)
			    }
			}
			if {$NombreMotifs($Frame)>=2} {
			    for {set j 1} {$j<$NombreMotifs($Frame)} {incr j} {
				incr SumOfMotifs($Frame) $j
			    }
			}
		    } else {
			if { ! [info exists PilierMotif($Frame,$i)]} {
			    set NombreMotifs($Frame) 0
			    set SumOfMotifs($Frame)  0
			} else {
			    lassign [SumOfPairsCL $PilierMotif($Frame,$i)] SumOfMotifs($Frame) NombreMotifs($Frame)
			}
			set DiviseurFrame($Frame) [expr {($NombreMotifs($Frame)*($NombreMotifs($Frame)-1))/2}]
			if {$DiviseurFrame($Frame)==0} {
			    set RatioX($Frame) 0
			} else {
			    set RatioX($Frame) [expr {1.0*$SumOfMotifs($Frame)/$DiviseurFrame($Frame)}]
			}		    
			set RatioSommeNbLignes [expr {1.0*$SommeDesPairs/$Diviseur}]
		    }
		}
	    }
	    set ListeSumPairs "[expr {$i+1}]\t$NombreMotifs(0)\t$SumOfMotifs(0)\t$RatioX(0)\t$NombreMotifs(1)\t$SumOfMotifs(1)\t$RatioX(1)\t$NombreMotifs(2)\t$SumOfMotifs(2)\t$RatioX(2)\t[expr {$NombreMotifs(0)+$NombreMotifs(1)+$NombreMotifs(2)}]\t$NbLignes\t$SommeDesPairs\t$RatioSommeNbLignes"
	    #Espionne $ListeSumPairs
	    lappend LesLignesDuFichier $ListeSumPairs
	}
	SauveLesLignes $LesLignesDuFichier dans "$RepSP/$Nom"
	FinPasTouche $Nom
    }
}

proc StatistiquesXMotifs {} {
    foreach Nom [lrange [ListeDesPABs] 0 end] {
	set F [GscopeFile $Nom SumOfPairsCorrect]
	foreach Ligne [LesLignesDuFichier $F] {
	    lassign $Ligne Position NbMotifsFrame0 SumMotifsFrame0 RatioSumMotifsFrame0 NbMotifsFrame1 SumMotifsFrame1 RatioSumMotifsFrame1 NbMotifsFrame2 SumMotifsFrame2 RatioSumMotifsFrame2 NbTotalMotifs NbLignesParticipant SumPairs RatioSumPairs
	    lappend SumOfPairsTotal "$NbLignesParticipant $SumPairs $RatioSumPairs"
	    if {$NbMotifsFrame0>1} {
		lappend SumOfPairsXMotifs0 "$RatioSumMotifsFrame0 $RatioSumPairs"
	    } elseif {$NbMotifsFrame1>1} {
		lappend SumOfPairsXMotifs1 "$RatioSumMotifsFrame1 $RatioSumPairs"
	    } elseif {$NbMotifsFrame2>1} {
		lappend SumOfPairsXMotifs2 "$RatioSumMotifsFrame2 $RatioSumPairs"
	    }
	    if {$NbMotifsFrame0>0} {
		set RatioLignes0 [expr {(1.0*$NbMotifsFrame0/$NbLignesParticipant)}]
		lappend LignesXMotifs0 "$NbMotifsFrame0 $NbLignesParticipant $RatioLignes0"
	    } elseif {$NbMotifsFrame1>0} {
		set RatioLignes1 [expr {(1.0*$NbMotifsFrame1/$NbLignesParticipant)}]
		lappend LignesXMotifs1 "$NbMotifsFrame1 $NbLignesParticipant $RatioLignes1"
	    } elseif {$NbMotifsFrame2>0} {
		set RatioLignes2 [expr {(1.0*$NbMotifsFrame2/$NbLignesParticipant)}]
		lappend LignesXMotifs2 "$NbMotifsFrame2 $NbLignesParticipant $RatioLignes2"
	    }
	    
	}
    }
    file mkdir "[RepertoireDuGenome]/FichesGraph"
    SauveLesLignes $SumOfPairsXMotifs0 dans "[RepertoireDuGenome]/FichesGraph/SumOfPairs0"
    SauveLesLignes $SumOfPairsXMotifs1 dans "[RepertoireDuGenome]/FichesGraph/SumOfPairs1"
    SauveLesLignes $SumOfPairsXMotifs2 dans "[RepertoireDuGenome]/FichesGraph/SumOfPairs2"
    SauveLesLignes $SumOfPairsTotal    dans "[RepertoireDuGenome]/FichesGraph/SumOfPairs"
    SauveLesLignes $LignesXMotifs0     dans "[RepertoireDuGenome]/FichesGraph/RatioLignesXMotifs0"
    SauveLesLignes $LignesXMotifs1     dans "[RepertoireDuGenome]/FichesGraph/RatioLignesXMotifs1"
    SauveLesLignes $LignesXMotifs2     dans "[RepertoireDuGenome]/FichesGraph/RatioLignesXMotifs2"
}



Index by: file name | procedure name | procedure call | annotation
File generated 2022-04-05 at 12:55.