set pdbLine "" set previousResidueNumber 1 set isFirstResidue 1 set isLastResidue 0 set pdbBlock "" set isAtEndOfResidueBlock 0 set inputPdbFile [open "/Users/charlesjanac/desktop/URL050.txt" r] proc readOneBlock {inputPdbFile} { global pdbLine global isAtEndOfResidueBlock global previousResidueNumber global isLastResidue global pdbBlock set pdbBlock "" while {![eof $inputPdbFile]} { if {$isAtEndOfResidueBlock} { set pdbLine [gets $inputPdbFile] } else {set isAtEndOfResidueBlock 1} if {[regexp {^TER } $pdbLine]} { set isLastResidue 1 set pdbLine "" return $pdbBlock } elseif {[regexp {^ATOM \s*} $pdbLine] || [regexp {^HETATM \s*} $pdbLine]} { if {![regexp "ATOM\(.*?\)\[AUCG\]\\s\\w...$previousResidueNumber\\s\\s\\s" $pdbLine]} { set previousResidueNumber [string range $pdbLine 25 25] set isAtEndOfResidueBlock 0 return $pdbBlock } else {set pdbBlock "$pdbBlock \n$pdbLine" #puts $pdbBlock } } } } while {!$isAtEndOfResidueBlock} { readOneBlock $inputPdbFile regsub -lineanchor -all {(?!(^ATOM)(.*))[AUCG]\s\w} $pdbBlock R& pdbBlock if {$isLastResidue & $isFirstResidue} { regsub -lineanchor -all {(?!(^ATOM)(.*))R[AUCG]} $pdbBlock &N pdbBlock set isFirstResidue 1 #puts $outputPdbFile $pdbBlock puts $pdbBlock } elseif {$isFirstResidue} { regsub -lineanchor -all {(?!(^ATOM)(.*))R[AUCG]} $pdbBlock &5 pdbBlock set isFirstResidue 0 #puts $outputPdbFile $pdbBlock puts $pdbBlock } elseif {$isLastResidue} { regsub -lineanchor -all {(?!(^ATOM)(.*))R[AUCG]} $pdbBlock &3 pdbBlock set isFirstResidue 1 #set isLastResidue 0 #puts $outputPdbFile $pdbBlock set isAtEndOfResidueBlock 0 puts $pdbBlock } else {puts $pdbBlock} }