[quote=134629:@Antonio Rinaldi]Your doing something wrong
join is really much more faster than simple concatenation[/quote]

Well, I’m always open for suggestions but going from this
[code] // if a seq end in “R” or “K” then it is replaced with “R_”, then split, so the last array entry would be empty
// seq = “MLK_DEHTR_WASR_QLCK_ILTVADESSAKPDK_ASSR_”
fragments = split( seq, “" ) // return array
if fragments( fragments.Ubound ) = "” then fragments.Remove( fragments.Ubound )
// so now we have all the fragments like in a complete digest but nicely lined up one after the other in the fragments array
Prot.NumberOfPeptidesInCompleteDigest = fragments.Ubound + 1 // number of fragments for complete digest
// now turn the fragments into peptides with 0, 1, or 2 missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound // create peptides with no missed dcleavage
seq = fragments( fragmentNumber )
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 0, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = fragments.Ubound + 1 // number of fragments for digest
// ******************************************************************
// to implement: this general formula:
'// Prot.NumberOfPeptidesInDigest = CalculateTotalNumberOfFragments( NumberOfCleavageSites, MaxNumberOfMissedCleavages )
’
'Prot.NumberOfPeptidesInDigest = CalculateTotalNumberOfFragments( fragments.Ubound, DigestSettings.MaxNumberMissedCleavages )
if DigestSettings.MaxNumberMissedCleavages > 0 then // so create peptides with one missed cleavage
for fragmentNumber as integer = 0 to fragments.Ubound - 1 // make peptides for ONE missed cleavage
seq = fragments( fragmentNumber ) + fragments( fragmentNumber + 1)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 1, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 2* ( fragments.Ubound + 1 ) - 1 // number of fragments for digest
end if
if DigestSettings.MaxNumberMissedCleavages > 1 then // so create peptides with two missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound - 2 // make peptides for TWO missed cleavage
seq = fragments( fragmentNumber ) + fragments( fragmentNumber + 1) + fragments( fragmentNumber + 2)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 2, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 3 * ( fragments.Ubound + 1 ) - 3 // number of fragments for digest
end if
if DigestSettings.MaxNumberMissedCleavages > 2 then // so create peptides with three missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound - 3 // make peptides for TWO missed cleavage
seq = fragments( fragmentNumber ) + fragments( fragmentNumber + 1) + fragments( fragmentNumber + 2) + fragments( fragmentNumber + 3)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 3, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 4 * ( fragments.Ubound + 1 ) - 6 // number of fragments for digest
end if
if DigestSettings.MaxNumberMissedCleavages > 3 then // so create peptides with four missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound - 4 // make peptides for TWO missed cleavage
seq = fragments( fragmentNumber ) + fragments( fragmentNumber + 1) + fragments( fragmentNumber + 2) + fragments( fragmentNumber + 3) + fragments( fragmentNumber + 4)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 4, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 5 * ( fragments.Ubound + 1 ) - 10 // number of fragments for digest
end if
if DigestSettings.MaxNumberMissedCleavages > 4 then // 5 is the max so create peptides with five missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound - 5 // make peptides for TWO missed cleavage
seq = fragments( fragmentNumber ) + fragments( fragmentNumber + 1) + fragments( fragmentNumber + 2) + fragments( fragmentNumber + 3) + fragments( fragmentNumber + 4) + fragments( fragmentNumber + 5)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 5, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 6 * ( fragments.Ubound + 1 ) - 15 // number of fragments for digest
end if[/code]
to this
[code] // if a seq end in “R” or “K” then it is replaced with “R_”, then split, so the last array entry would be empty
// seq = “MLK_DEHTR_WASR_QLCK_ILTVADESSAKPDK_ASSR_”
fragments = split( seq, “" ) // return array
if fragments( fragments.Ubound ) = "” then fragments.Remove( fragments.Ubound )
// so now we have all the fragments like in a complete digest but nicely lined up one after the other in the fragments array
Prot.NumberOfPeptidesInCompleteDigest = fragments.Ubound + 1 // number of fragments for complete digest
// now turn the fragments into peptides with 0, 1, or 2 missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound // create peptides with no missed dcleavage
seq = fragments( fragmentNumber )
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 0, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = fragments.Ubound + 1 // number of fragments for digest
// ******************************************************************
// to implement: this general formula:
'// Prot.NumberOfPeptidesInDigest = CalculateTotalNumberOfFragments( NumberOfCleavageSites, MaxNumberOfMissedCleavages )
’
'Prot.NumberOfPeptidesInDigest = CalculateTotalNumberOfFragments( fragments.Ubound, DigestSettings.MaxNumberMissedCleavages )
if DigestSettings.MaxNumberMissedCleavages > 0 then // so create peptides with one missed cleavage
for fragmentNumber as integer = 0 to fragments.Ubound - 1 // make peptides for ONE missed cleavage
fragArray.Append fragments( fragmentNumber )
fragArray.Append fragments( fragmentNumber + 1)
seq = join( fragArray, "" )
ReDim fragArray(-1)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 1, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 2* ( fragments.Ubound + 1 ) - 1 // number of fragments for digest
end if
if DigestSettings.MaxNumberMissedCleavages > 1 then // so create peptides with two missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound - 2 // make peptides for TWO missed cleavage
fragArray.Append fragments( fragmentNumber )
fragArray.Append fragments( fragmentNumber + 1)
fragArray.Append fragments( fragmentNumber + 2)
seq = join( fragArray, "" )
ReDim fragArray(-1)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 2, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 3 * ( fragments.Ubound + 1 ) - 3 // number of fragments for digest
end if
if DigestSettings.MaxNumberMissedCleavages > 2 then // so create peptides with three missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound - 3 // make peptides for TWO missed cleavage
fragArray.Append fragments( fragmentNumber )
fragArray.Append fragments( fragmentNumber + 1)
fragArray.Append fragments( fragmentNumber + 2)
fragArray.Append fragments( fragmentNumber + 3)
seq = join( fragArray, "" )
ReDim fragArray(-1)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 3, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 4 * ( fragments.Ubound + 1 ) - 6 // number of fragments for digest
end if
if DigestSettings.MaxNumberMissedCleavages > 3 then // so create peptides with four missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound - 4 // make peptides for TWO missed cleavage
fragArray.Append fragments( fragmentNumber )
fragArray.Append fragments( fragmentNumber + 1)
fragArray.Append fragments( fragmentNumber + 2)
fragArray.Append fragments( fragmentNumber + 3)
fragArray.Append fragments( fragmentNumber + 4)
seq = join( fragArray, "" )
ReDim fragArray(-1)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 4, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 5 * ( fragments.Ubound + 1 ) - 10 // number of fragments for digest
end if
if DigestSettings.MaxNumberMissedCleavages > 4 then // 5 is the max so create peptides with five missed cleavages
for fragmentNumber as integer = 0 to fragments.Ubound - 5 // make peptides for TWO missed cleavage
fragArray.Append fragments( fragmentNumber )
fragArray.Append fragments( fragmentNumber + 1)
fragArray.Append fragments( fragmentNumber + 2)
fragArray.Append fragments( fragmentNumber + 3)
fragArray.Append fragments( fragmentNumber + 4)
fragArray.Append fragments( fragmentNumber + 5)
seq = join( fragArray, "" )
ReDim fragArray(-1)
CreatePeptidesFromFragmentsAndAddToPeptideList( seq, 5, fragmentNumber, Prot, fragments )
next
Prot.NumberOfPeptidesInDigest = 6 * ( fragments.Ubound + 1 ) - 15 // number of fragments for digest
end if[/code]
doesn’t make much difference.
Btw I found that string concatenation in Xojo is about twice as fast as it was in REAL.studio.