Icon representing a recipe

Recipe: nicm25.htf.BlizzardsBurner v1.00

created by Nicm25

Profile


Name
nicm25.htf.BlizzardsBurner v1.00
ID
104841
Shared with
Public
Parent
None
Children
None
Created on
June 14, 2021 at 12:00 PM UTC
Updated on
June 14, 2021 at 12:00 PM UTC
Description

freeze surface like a title! (nullable segment select, number threshold, boolean boneonly, boolean asone, boolean resetfreezes)

Best for


Code


-- created by Nicm25; function pldc() local retd=dialog.CreateDialog("BlizzardsBurner Ver 1.00") retd.la=dialog.AddLabel(" inside.. ..none.. ..outside") retd.si=dialog.AddSlider("threshold",0.5,-1.0,1.0,2) retd.ck=dialog.AddCheckbox("bone only",false) retd.ca=dialog.AddCheckbox("as one",false) retd.cr=dialog.AddCheckbox("reset freezes",true) retd.bt=dialog.AddButton("OK",1) return retd end function plfa(avx,avy,avz) local lc=1 local retv=0.0 for lc=avx,avy do if avz-lc>1.5 or avz-lc<-1.5 then retv=structure.GetDistance(avz,lc)+retv end end return retv end function plfb(avx,avy) local retv=(avy>1.0 and 2.0-avx or avx)-avy return retv>0.0 and(retv>0.25 and 2 or 1)or 0 end function plfc(avx,avy,avz,ava,avb) local lc=1 local lfx=avz-(avz>2.5 and 2 or 0) selection.DeselectAll() for lc=1,avy-avx+1 do if ava[lc]>lfx-0.5 and(avz<2.5 or avb[avx+lc-1]>0.5) then selection.Select(avx+lc-1) end end end function plss() local lc=1 local retd={} for lc=1,structure.GetCount() do retd[lc]=selection.IsSelected(lc) and 1 or 0 end return retd end function run(avs,avx,avy,avz,ava) local segs=1 local sege=0 local stcc=0.0 local stco=0.0 local stct={} local stcv={} local lc=0 local setbb=false local setth=0.0 if avx<-1.001 or avx>1.001 then return 1 end setbb=avy and true or false if ava then freeze.UnfreezeAll() end setth=1.0-avx*2.0 if setth>1.0 then setth=4.001-setth end sege=#avs if not(avz) then for lc=segs+1,sege do if structure.GetDistance(lc-1,lc)>7.5 then segs=lc end if avs[lc]>0.5 then break end end for lc=1+segs,sege do if avs[lc]>0.5 then sege=#avs elseif structure.GetDistance(lc-1,lc)>7.5 and #avs-sege<0.5 then sege=lc-1 end end end if sege-segs<3.5 then print("not supported small peptide") return 1 end stcv[1]=0.0 stcv[2]=plfa(segs,sege,segs) stcv[3]=plfa(segs,sege,segs+1) stcc=(stcv[2]-stcv[3]-structure.GetDistance(segs+1,segs+2))/(sege-segs+1) stct[1]=plfb(stcc*0.25-0.25,setth) for lc=segs+1,sege-1 do stcv[1]=stcv[2] stcv[2]=stcv[3] stcv[3]=0.0 if structure.IsLocked(lc) then stcc=-10.0 else if stcv[1]<1.0 then stcv[1]=plfa(segs,sege,lc-1) end if stcv[2]<1.0 then stcv[2]=plfa(segs,sege,lc) end stcv[3]=plfa(segs,sege,lc+1) stcv[4]=structure.GetDistance(lc-1,lc+1) stcc=stcv[2]/(sege-segs+1) stco=stcv[1]+stcv[3]-stcv[4]*2.0 if lc-segs>1.5 then stco=stco+structure.GetDistance(lc-2,lc-1) end if sege-lc>1.5 then stco=stco+structure.GetDistance(lc+1,lc+2) end stco=stco/((sege-segs+1)*2.0) stcc=(stcc-stco)/(8.0-stcv[4]) end stct[lc-segs+1]=plfb(stcc,setth) end stcc=plfa(segs,sege,sege)-plfa(segs,sege,sege-1)-structure.GetDistance(sege-2,sege-1) stcc=stcc/(sege-segs+1) stct[sege-segs+1]=plfb(stcc*0.25-0.25,setth) lc=selection.GetCount()>1.5 and 2 or 0 plfc(segs,sege,lc+1,stct,avs) if setbb then freeze.FreezeSelected(true,false) else freeze.FreezeSelected(false,true) plfc(segs,sege,lc+2,stct,avs) freeze.FreezeSelected(true,true) end selection.DeselectAll() return 0 end local lfi=0 local tdr=pldc() lfi=dialog.Show(tdr) if lfi>0.5 then lfi=run(plss(),tdr.si.value,tdr.ck.value,tdr.ca.value,tdr.cr.value) if lfi>0.5 then print("terminated by exception error") end end

Comments


Nicm25 Lv 1

thank you for your interest.
this is by product of bootstrap, where i prepare tools myself from beginning
and my personal 'Hand Tools, Freeze such package'(htf).

In this little script, freezing surface as expose to cold air like title,
can also freeze inside.
5 arguments
select: currently selected segment will be this argument(not in dialog), if none select is 'all apply'.
threshold: based on considering surface and inside, you can adjust to freezing range.
range: -1.0-1.0, default: 0.5, function: 1.0 is freeze to outside, -1.0 is freeze to not inside, 0.0 is almost none
boneonly: set whether to backbone only.
default: false, function: false is both freezes, true is backbone only
asone: set whether to target only or as one when considering surface and inside.
default: false, function: false is target, true is as one
resetfreezes: set whether to running reset freezes.
default: true, function: false is none, true is run reset freezes
int return: whether it was successfully. function: 0 is okay, else is problem