SHARE
TWEET

CG303 Scaffolding Helices V2.50

Crashguard303 May 21st, 2012 84 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Scaffolding by Crashguard303
  2. -- Script request by Mat747
  3. -- Included faster band removing, submitted by rav3n_pl
  4.  
  5. -- Applies bands between segments,
  6. -- if their SPATIAL and INDEX distance is inbetween an user-specified range,
  7. -- resulting a relative position lock of these segments (scaffolding).
  8.  
  9. -- NOTE:
  10. -- At the moment, FoldIt doesn't allow us to set band lengths greater than 20.
  11. -- We can't apply bands between adjacent segments, so these are skipped
  12.  
  13. function YesNo(Bool)
  14.  local OS
  15.  
  16.  if Bool then
  17.    OS="yes"
  18.   else
  19.    OS="no"
  20.  end -- if BOOL
  21.  
  22.  return OS
  23. end -- function
  24.  
  25. function ss_check(SegA,SegB)
  26.  
  27.  local SegAss=structure.GetSecondaryStructure(SegA)
  28.  local SegBss=structure.GetSecondaryStructure(SegB)
  29.  local ss_flag=false
  30.  
  31.  if SegAss~=SegBss then -- if secondary structure is unequal
  32.    if Band_ss_mixed then -- And connecting mixed ss is okay
  33.     ss_flag=true
  34.    end -- if BandMixeed
  35.   else -- so if ss is equal
  36.    if Band_ss_equal[SegAss]then
  37.      ss_flag=true
  38.    end -- if Band_ss_equal
  39.  end -- if SegAss unequal
  40.  
  41.  return ss_flag
  42. end -- function
  43.  
  44. function DistanceCheck(k,l)
  45.  local k=k
  46.  local l=l
  47.  local Distance=structure.GetDistance(k,l) -- get distance
  48.  local DistanceFlag=false
  49.  
  50.  if Distance>=MinSdist then -- above or equal minimum?
  51.   if Distance<=MaxSdist then -- below or equal maximum?
  52.    DistanceFlag=true
  53.   end -- if Distance
  54.  end -- if Distance
  55.  if Band_Invert_Result then DistanceFlag=not(DistanceFlag) end -- Invert result, if desired
  56.  
  57. return Distance,DistanceFlag
  58. end -- function
  59.  
  60. function Scaffolding()
  61.  print("Executing...")
  62.  
  63.  if Band_DeleteAll_Before then
  64.   print("Deleting old bands.")
  65.   band.DeleteAll()
  66.  end
  67.  
  68.  local kFinish=NumSegs-MinIdist
  69.  
  70.  local k
  71.  for k=1,kFinish do -- k=first segment index to check
  72.   local lStart=k+MinIdist
  73.   local lFinish=k+MaxIdist
  74.   if lFinish>NumSegs then lFinish=NumSegs end
  75.  
  76.   local l
  77.   for l=lStart, lFinish do -- l=second segment index to check
  78.    Distance,DistanceFlag=DistanceCheck(k,l) -- Get distance and distance flag
  79.    if DistanceFlag then -- Does distance match?
  80.    if ss_check(k,l) then -- Do secondary structures match?
  81.    local OS="Connecting "..k..":"..l.." distance:"..Distance
  82.    print(OS) -- Show
  83.    band.AddBetweenSegments(k,l) -- Connect
  84.    local TempBandCount=band.GetCount() -- Get new band amount
  85.    Distance=Distance*Band_DistFactor -- Change distance value by applying Factor
  86.    band.SetGoalLength(TempBandCount,Distance) -- Change length of last band
  87.    band.SetStrength(TempBandCount,Band_Strength) -- Change strength of last band
  88.    end -- if ss_check
  89.    end -- if DistanceFlag
  90.   end -- l loop
  91.  end -- k loop
  92.  
  93.  print("Finished.")
  94. end -- function
  95.  
  96. function InputDialog ()
  97.  local ask = dialog.CreateDialog("Set parameters")
  98.  
  99.  ask.Band = dialog.AddLabel("Band which secondary structure:")
  100.  ask.Helixes = dialog.AddCheckbox("Helix-Helix", Band_ss_equal["H"])
  101.  ask.Sheets = dialog.AddCheckbox("Sheet-Sheet", Band_ss_equal["E"])
  102.  ask.Loops = dialog.AddCheckbox("Loop-Loop", Band_ss_equal["L"])
  103.  ask.Mixed = dialog.AddCheckbox("Mixed", Band_ss_mixed)
  104.  
  105.  ask.Distance = dialog.AddLabel("Band which distance:")
  106.  ask.MinIdist = dialog.AddSlider("Min INDEX:", MinIdist, 2, (NumSegs-1), 0)
  107.  ask.MaxIdist = dialog.AddSlider("Max INDEX:", MaxIdist, 2, (NumSegs-1), 0)
  108.  ask.MinSdist = dialog.AddSlider("Min SPATIAL:", MinSdist, 0, ((NumSegs-1)*4), 1)
  109.  ask.MaxSdist = dialog.AddSlider("Max SPATIAL:", MaxSdist, 0, ((NumSegs-1)*4), 1)
  110.  
  111.  ask.Properties = dialog.AddLabel("Band properties:")
  112.  ask.Band_DistFactor = dialog.AddSlider("Band Factor", Band_DistFactor, 0.0, 10.0, 1)
  113.  ask.Band_Strength = dialog.AddSlider("Band Strength", Band_Strength, 0.1, 10.0, 1)
  114.  ask.Band_DeleteAll_Before = dialog.AddCheckbox("Delete all other bands before", Band_DeleteAll_Before)
  115.  ask.Band_Invert_Result = dialog.AddCheckbox("Invert banding result (careful with this option!)", Band_Invert_Result)
  116.  
  117.  ask.OK = dialog.AddButton("OK", 1)
  118.  ask.Cancel = dialog.AddButton("Cancel", 0)
  119.  
  120.  if dialog.Show(ask)>0 then -- If OK was pressed
  121.    Band_ss_equal["H"]=ask.Helixes.value
  122.    Band_ss_equal["E"]=ask.Sheets.value
  123.    Band_ss_equal["L"]=ask.Loops.value
  124.    Band_ss_mixed=ask.Mixed.value
  125.  
  126.    MinIdist=ask.MinIdist.value
  127.    MaxIdist=ask.MaxIdist.value
  128.    MinSdist=ask.MinSdist.value
  129.    MaxSdist=ask.MaxSdist.value
  130.  
  131.    if MinIdist>MaxIdist then MinIdist,MaxIdist=MaxIdist,MinIdist end
  132.    -- If Min>Max, swap them because it wouldn't make sense
  133.  
  134.    if MinSdist>MaxSdist then MinSdist,MaxSdist=MaxSdist,MinSdist end
  135.    -- If Min>Max, swap them because it wouldn't make sense
  136.  
  137.    Band_DistFactor=ask.Band_DistFactor.value
  138.    Band_Strength=ask.Band_Strength.value
  139.    Band_DeleteAll_Before=ask.Band_DeleteAll_Before.value
  140.    Band_Invert_Result=ask.Band_Invert_Result.value
  141.  
  142.    return true
  143.   else  -- If OK was not pressed
  144.    print("Canceled.")
  145.    return false
  146.  end -- if dialog.Show(ask)
  147. end -- function
  148.  
  149. -- Default parameters:
  150. NumSegs=structure.GetCount()
  151.                                                        -- Get amount of segments
  152. Band_ss_equal={}
  153.                                                        -- Initialize table containing information which equal secondary structures are allowed to be banded
  154. Band_ss_equal["L"]=false
  155.                                                        -- Boolean value. If true, banding loop to loop is allowed
  156. Band_ss_equal["H"]=true
  157.                                                        -- Boolean value. If true, banding helix to helix is allowed
  158. Band_ss_equal["E"]=false
  159.                                                        -- Boolean value. If true, banding sheet to sheet is allowed
  160. Band_ss_mixed=false
  161.                                                        -- Boolean value. If true, banding mixed secondary structures is allowed
  162.  
  163.                                                        -- Note: If you change Band_ss_mixed,BandLoops,BandHelices AND BandSheets to false,
  164.                                                        -- NO band will be applied. You will just waste some of your precious time.
  165.  
  166. MinIdist=3
  167.                                                        -- Minimum INDEX segment distance to band, INTEGER value
  168.                                                        -- Minimum value:2,
  169.                                                        -- because the game doesn't connect bands if the segments are too close
  170. MaxIdist=4
  171. -- MaxIdist=NumSegs-1
  172.                                                        -- Maximum INDEX segment distance to band, INTEGER value
  173. MinSdist=4
  174.                                                        -- Minimum SPATIAL segment distance to band, FLOAT value
  175. MaxSdist=8
  176.                                                        -- Maximum SPATIAL segment distance to band, FLOAT value
  177. Band_DistFactor=1
  178.                                                        -- Factor, which changes the band length according to its spatial distance, float value, >=0
  179.                                                        -- values<1 pull segments together,
  180.                                                        -- values keep them in postion,
  181.                                                        -- values>1 push them apart
  182.  
  183. Band_Strength=1
  184.                                                        -- Band strength of the scaffold, float value
  185.  
  186.                                                        -- Examples:
  187.                                                        -- If a segment distance is 4, and factor is 2, the band length will be 8.
  188.                                                        -- If a segment distance is 4, and factor is .5, the band length will be 2.
  189. Band_DeleteAll_Before=false
  190.                                                        -- delete all bands before script start, boolean value
  191.                                                        -- If true, all existing bands are deleted before script is executed.
  192.                                                        -- If false, previous bands are kept, however.
  193.  
  194. Band_Invert_Result=false
  195.                                                        -- Distance inverting, boolean value
  196.                                                        -- Set this to true if you want to invert spatial distance banding
  197.                                                        -- Be careful with this option, it can create many bands if MinSdist and MaxSdist are close!
  198.  
  199. if InputDialog() then
  200.                                                        -- Show/change values with input dialog
  201.                                                        -- If OK was pressed
  202.   Scaffolding()
  203.                                                        -- call script with set parameters
  204. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top