Advertisement
Guest User

histo-1p.awk

a guest
Feb 13th, 2012
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. #!/usr/bin/awk -f
  2.  
  3. function frac(a) { return a-int(a+1e-10) }
  4. function mod(a,b) { return b*frac(a/b) }
  5. function round(a,b) { return b*int(int(a/b+0.5)+1) }
  6. function bound(x,a,b) { return x<a ? a : x>b?b:x }
  7.  
  8. #function getbin(x,max,n) { return int(bound(x*n/max,0,n)+offs) }
  9. function getbin(x,max,n) { return x<0 ? -1 : x>max ? n+1 : int(x*n/max+offs) }
  10.  
  11. function putdat(x, max,n, bins, weight) {
  12. i=getbin(x,max,n)
  13. # print i,x,max,n
  14. bins["n"]+=weight
  15. bins[i,0]+=weight
  16. }
  17.  
  18. function pline(i) { return i<19 ? $(i+5) : $(i+6) }
  19. function bparty(i) { return pline(i-1+19) }
  20.  
  21. function fact(n) {
  22. if(lastn && n==lastn) { return lastfact }
  23. res = n<=0.5?1:n*fact(n-1)
  24. lastn=n
  25. lastfact=res
  26. return res
  27. }
  28.  
  29. function pow(a,b) { return a>0?exp(b*log(a)):0 }
  30.  
  31. BEGIN {
  32. OFS="\t"; FS="\t"
  33. binn=200
  34. itern=2
  35. fail_p=0.017
  36.  
  37. nd_target=3
  38. print "#", "itern=" itern, "nd_target=" nd_target, "fail_p=" fail_p, "binn=" binn
  39. }
  40.  
  41. /^[^#U]/ {
  42. all=pline(3)+pline(4)+pline(5)
  43. normp=pline(1)+0
  44. normb=pline(2)+0
  45. er=bparty(6)
  46. sr=bparty(1)
  47. #if(normp==0) normp=1
  48. #turn=100*all/(normp+rand()-0.5)
  49. if(all==0) all=1
  50. for(iter=0; iter<itern; iter++) {
  51. erp=100*(er+rand()-0.5)/(all+rand()-0.5)
  52.  
  53. # putdat(erp, 100,binn, bin, 1)
  54. if(pline(9)==nd_target) putdat(erp, 100,binn, bin, 1)
  55. putdat(erp, 100,binn, binmod, pow(fail_p*all,nd_target)/fact(nd_target)*exp(-fail_p*all))
  56. } }
  57.  
  58. END {
  59. print "# total=" bin["n"] " modtotal=" binmod["n"]
  60. for(i=-1; i<=binn+1; i++) {
  61. print (i+0.5-offs)*100/binn, bin[i,0]/itern+0, binmod[i,0]/itern+0
  62. }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement