#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" }