Script latest-files.scm

From CCP4 wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
;; find the most recently created file from the given glob and dir
;;
;; return #f on no-such-file
;; 
(define most-recently-created-file
  (lambda (glob-str dir)

    (define add-dir-prefix
      (lambda (file)
	(if (string? file)
	    (append-dir-file dir file)
	    file)))

    (let ((files (glob glob-str dir)))

      (format #t "most-recently-created-file sees files: ~s by globbing ~s in ~s ~%" files
	      glob-str dir)

      (let loop ((files files)
                 (latest-file #f)
                 (latest-mtime 0))

        (cond
         ((null? files) (add-dir-prefix latest-file))
         (else 
          (let ((this-mtime (stat:mtime (stat (add-dir-prefix (car files))))))
            (if (> this-mtime latest-mtime)
                (loop (cdr files)
                      (car files)
                      this-mtime)
                (loop (cdr files)
                      latest-file
                      latest-mtime)))))))))

;; load latest mtz and pdb files in this directory.
;; 
(define load-latest-files
  (lambda ()

    ;; If pdb-file and mtz-file are strings, then try to load them
    ;; into coot.
    (define load-latest-pdb-mtz-files
      (lambda (pdb-file-name mtz-file-name)
	
	(if (string? pdb-file-name)
	    (if (file-exists? pdb-file-name)
		(handle-read-draw-molecule-with-recentre pdb-file-name 0)))
	
	(if (string? mtz-file-name)
	    (if (file-exists? mtz-file-name)
		(auto-read-make-and-draw-maps mtz-file-name)))))
    
    ; main line
    (load-latest-pdb-mtz-files
     (most-recently-created-file "*.pdb" ".")
     (most-recently-created-file "*.mtz" "."))))