Hi, Dave
Why do you use 2 parenthesis before "with-open" in the first variant?
And, as I know, it's not good practice to use def inside functions. Use let
instead.
I also advice you to split your program to smaller functions.
Can you describe, what your program must do? Because don't understand :(

On Thu, Aug 5, 2010 at 9:28 PM, Dave <david.dreisigme...@gmail.com> wrote:

> Hi,
>
> I don't understand why this doesn't work:
>
> (ns dpa
>  (:gen-class)
>  (:use [incanter.core :only ( matrix )]
>        [clojure.core :only ( defn doseq line-seq println with-open )]
>        [clojure.contrib.string :only ( blank? substring? )]
>  (:import (java.io BufferedReader FileReader)))
>
> (defn process-dpa-file
>  "This makes the matrix of CA coordinates from a pdb file."
>  [pdb-file chains]
>  (def hold-coords [])
>  ((with-open [rdr (BufferedReader. (FileReader. pdb-file))]
>      (doseq [^String line (line-seq rdr)]
>    ;; Make sure the file line is the correct length
>    ;; We only want the atom entries
>    ;; We don't want any repeated measurements for an atom
>    ;; Is it a CA?
>    ;; Are we using this chain?
>    (if (and (= (.length line) 80)
>             (= (str (.substring line 0 4) (.substring line 26 27)
> (.substring line 13 15)) "ATOM CA")
>             (substring? (.substring line 21 22) chains))
>      ;; This are the CA coordinates
>      (def hold-coords (into hold-coords [ (Double. (.substring line
> 30 37))
>                                           (Double. (.substring line 38 45))
>                                           (Double. (.substring line 46 53))
> ] )))))
>   (matrix hold-coords 3)))
>
>
> dpa> (def my-mat (process-dpa-file "/Users/daviddreisigmeyer/MyStuff/
> DPA_release_12-JUL-2010/1RD8.pdb" "A") )
> No message.
>  [Thrown class java.lang.NullPointerException]
>
> Restarts:
>  0: [QUIT] Quit to the SLIME top level
>
> Backtrace:
>  0: dpa$process_dpa_file.invoke(NO_SOURCE_FILE:1)
>  1: clojure.lang.AFn.applyToHelper(AFn.java:165)
>  2: clojure.lang.AFn.applyTo(AFn.java:151)
>  3: clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2901)
>  4: clojure.lang.Compiler$DefExpr.eval(Compiler.java:361)
>  5: clojure.lang.Compiler.eval(Compiler.java:5424)
>  6: clojure.lang.Compiler.eval(Compiler.java:5386)
>  7: clojure.core$eval.invoke(core.clj:2382)
>  8: swank.commands.basic$eval_region.invoke(basic.clj:47)
>  9: swank.commands.basic$eval_region.invoke(basic.clj:37)
>  10: swank.commands.basic$eval799$listener_eval__800.invoke(basic.clj:
> 71)
>  11: clojure.lang.Var.invoke(Var.java:365)
>  12: dpa$eval9236.invoke(NO_SOURCE_FILE)
>  13: clojure.lang.Compiler.eval(Compiler.java:5419)
>  14: clojure.lang.Compiler.eval(Compiler.java:5386)
>  15: clojure.core$eval.invoke(core.clj:2382)
>  16: swank.core$eval_in_emacs_package.invoke(core.clj:90)
>  17: swank.core$eval_for_emacs.invoke(core.clj:237)
>  18: clojure.lang.Var.invoke(Var.java:373)
>  19: clojure.lang.AFn.applyToHelper(AFn.java:169)
>  20: clojure.lang.Var.applyTo(Var.java:482)
>  21: clojure.core$apply.invoke(core.clj:540)
>  22: swank.core$eval_from_control.invoke(core.clj:97)
>  23: swank.core$eval_loop.invoke(core.clj:102)
>  24: swank.core$spawn_repl_thread$fn__484$fn__485.invoke(core.clj:307)
>  25: clojure.lang.AFn.applyToHelper(AFn.java:159)
>  26: clojure.lang.AFn.applyTo(AFn.java:151)
>  27: clojure.core$apply.invoke(core.clj:540)
>  28: swank.core$spawn_repl_thread$fn__484.doInvoke(core.clj:304)
>  29: clojure.lang.RestFn.invoke(RestFn.java:398)
>  30: clojure.lang.AFn.run(AFn.java:24)
>  31: java.lang.Thread.run(Thread.java:637)
>
>
>
> But, this does work:
>
> (defn process-dpa-file
>  "This makes the matrix of CA coordinates from a pdb file."
>  [pdb-file chains]
>  (def hold-coords [])
>  (doseq [^String line (read-lines pdb-file)]
>    ;; Make sure the file line is the correct length
>    ;; We only want the atom entries
>    ;; We don't want any repeated measurements for an atom
>    ;; Is it a CA?
>    ;; Are we using this chain?
>    (if (and (= (.length line) 80)
>             (= (str (.substring line 0 4) (.substring line 26 27)
> (.substring line 13 15)) "ATOM CA")
>             (substring? (.substring line 21 22) chains))
>      ;; This are the CA coordinates
>      (def hold-coords (into hold-coords [ (Double. (.substring line
> 30 37))
>                                           (Double. (.substring line 38 45))
>                                           (Double. (.substring line 46 53))
> ] ))))
>  (matrix hold-coords 3))
>
> dpa> (def my-mat (process-dpa-file "/Users/daviddreisigmeyer/MyStuff/
> DPA_release_12-JUL-2010/1RD8.pdb" "A") )
> #'dpa/my-mat
>
>
> I'd certainly appreciate any comments on the code in general.  I only
> have a Matlab/R/Fortran 95 background.
>
> Thanks,
>
> -Dave
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to