lhe 0.4 → 0.5
raw patch · 2 files changed
+53/−17 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Data.LHE: parseEventFile :: String -> IO [Event]
- Data.LHE: parseEvents :: String -> ByteString -> [Event]
+ Data.LHE: instance Eq RawRun
+ Data.LHE: instance Show RawRun
+ Data.LHE: parse :: String -> ByteString -> (Run, [Event])
+ Data.LHE: parseFile :: String -> IO (Run, [Event])
Files
- Data/LHE.hs +52/−16
- lhe.cabal +1/−1
Data/LHE.hs view
@@ -6,8 +6,8 @@ -} module Data.LHE (- parseEventFile,- parseEvents,+ parseFile,+ parse, ) where import qualified Data.ByteString.Char8 as S@@ -17,18 +17,43 @@ import Data.LHA +data RawRun = RawRun [String] [[String]]+ deriving (Eq, Show)+ data RawEvent = RawEvent [String] [[String]] deriving (Eq, Show) -parseEventFile :: String -> IO [Event]-parseEventFile fname = do- S.readFile fname >>= return . parseEvents fname+parseFile :: String -> IO (Run, [Event])+parseFile fname = S.readFile fname >>= return . parse fname -parseEvents :: String -> S.ByteString -> [Event]-parseEvents fname dat =- let re = parseRawEvents fname dat in+parse :: String -> S.ByteString -> (Run, [Event])+parse fname dat =+ let doc = xmlParse fname $ S.unpack dat in+ (runFromDoc doc, eventsFromDoc doc)++runFromDoc = makeRun . rawRunFromDoc++eventsFromDoc d =+ let re = rawEventsFromDoc d in map makeEvent re +makeRun :: RawRun -> Run+makeRun (RawRun (bpdg1:bpdg2:be1:be2:pdfg1:pdfg2:pdfs1:pdfs2:idwt:nproc:[]) ps) = Run+ { runBeam = ( Beam (read bpdg1) (parseDouble be1) (read pdfg1) (read pdfs1)+ , Beam (read bpdg1) (parseDouble be1) (read pdfg1) (read pdfs1)+ )+ , idwt = read idwt+ , nProc = read nproc+ , procs = map makeProc ps+ }++makeProc :: [String] -> Subprocess+makeProc (d1:d2:d3:i1:[]) = Subprocess+ (parseDouble d1)+ (parseDouble d2)+ (parseDouble d3)+ (read i1)+ makeEvent :: RawEvent -> Event makeEvent (RawEvent (n:idpr:xwgt:scal:aqed:aqcd:[]) rps) = Event { nPart = read n@@ -56,24 +81,35 @@ } parseRawEventFile :: String -> IO [RawEvent]-parseRawEventFile fname = do- S.readFile fname >>= return . parseRawEvents fname+parseRawEventFile fname = S.readFile fname >>= return . parseRawEvents fname parseRawEvents :: String -> S.ByteString -> [RawEvent]-parseRawEvents fname dat =- let Document _ _ (Elem eName _ eList) _ = xmlParse fname (S.unpack dat) in- map (getRawEvent . getElem) $ filter isEvent eList+parseRawEvents fname dat = rawEventsFromDoc $ xmlParse fname $ S.unpack dat++getElem (CElem (Elem _ _ c) _) = head $ filter isCString c+ where isCString (CString _ _ _) = True+ isCString _ = False++rawEventsFromDoc (Document _ _ (Elem eName _ eList) _) =+ map (getRawEvent . getElem) $ filter isEvent eList where isEvent (CElem (Elem (N "event") _ _) _) = True isEvent _ = False- isCString (CString _ _ _) = True- isCString _ = False parseLine = words- getElem (CElem (Elem _ _ c) _) = head $ filter isCString c getRawEvent (CString _ eStr _) = let eLines = filter (\x -> length x > 2) $ lines eStr in RawEvent (parseLine $ head eLines) (map parseLine $ tail eLines) getRawEvent _ = RawEvent [] []++rawRunFromDoc (Document _ _ (Elem eName _ eList) _) =+ getRawRun $ getElem $ head $ filter isInit eList+ where+ isInit (CElem (Elem (N "init") _ _) _) = True+ isInit _ = False+ getRawRun (CString _ rStr _) =+ let rLines = filter (\x -> length x > 2) $ lines rStr in+ RawRun (words $ head rLines) (map words $ tail rLines)+ getRawRun _ = RawRun [] [] parseDouble :: String -> Double parseDouble = read . reverse . dropWhile (=='.') . reverse
lhe.cabal view
@@ -1,5 +1,5 @@ Name: lhe-Version: 0.4+Version: 0.5 Synopsis: Parser and writer for Les-Houches event files Description: This package implements a parser and writer for the Les-Houches event file format as described in hep-ph/0609017 License: MIT