   "Create a FormaValue."
   [fire short long tstat & break]
   {:pre [(instance? forma.schema.FireValue fire)
-         (every? #(instance? java.lang.Double %) [short long tstat])
-         (or (not break) (instance? java.lang.Double (first break)))]}
+         (every? float? [short long tstat])
+         (or (not break) (float? (first break)))]}
   (let [[break] break
         forma-value (FormaValue. fire short long tstat)]
     (if break

  "Create a ModisChunkLocation."
  [s-res h v id size]
  {:pre [(instance? java.lang.String s-res)
         (every? #(instance? java.lang.Long %) [h v id size])]}
  (ModisChunkLocation. s-res h v id size))

(defn ModisPixelLocation*
  "Create a ModisPixelLocation."
  [s-res h v sample line]
  {:pre [(instance? java.lang.String s-res)
         (every? #(or (instance? java.lang.Long %)
                      (instance? java.lang.Integer %))
                 [h v sample line])]}
  (ModisPixelLocation. s-res h v sample line))

(defn TimeSeries*
  "Create a TimeSeries."
  ([start vals]
    {:pre [(every? #(instance? java.lang.Long %) [start])
           (coll? vals)]}
    (let [elems (count vals)]
      (TimeSeries* start
                   (dec (+ start (count vals)))
                   vals)))
  ([start end val]
    {:pre [(every? #(instance? java.lang.Long %) [start end])
           (coll? val)]}
    (let [series (if (coll? val) (pack val) val)]
      (TimeSeries. start end (mk-array-value series)))))

  java.lang.Iterable
  (pack [[v :as xs]]
    (cond (= forma.schema.FormaValue (type v)) (forma-array xs)
          (= forma.schema.FireValue (type v)) (fire-array xs)
          (integer? v) (int-struct xs)
          (float? v) (double-struct xs))))

(extend-protocol ITimeSeries
  TimeSeries
