go-hep.org/x/hep@v0.38.1/hepmc/go-hepmc-dump/main.go (about) 1 // Copyright ©2017 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // go-hepmc-dump is a simple command to dump in an almost human-friendly format 6 // the content of a hepmc file. 7 // ex: 8 // 9 // $ go-hepmc-dump foo.hepmc | head -n20 10 // 11 // ________________________________________________________________________________ 12 // GenEvent: #0000 ID= 111 SignalProcessGenVertex Barcode: 0 13 // 14 // Momentum units: GEV Position units: MM 15 // Cross Section: 2.666668e+12 +/- 2.666668e+12 16 // Entries this event: 129 vertices, 241 particles. 17 // Beam Particle barcodes: 1 2 18 // RndmState(0)= 19 // Wgts(1)=(0,1.000000) 20 // EventScale 1.438780e+00 [energy] alphaQCD=4.519907e-01 alphaQED=7.472465e-03 21 // GenParticle Legend 22 // Barcode PDG ID ( Px, Py, Pz, E ) Stat DecayVtx 23 // 24 // ________________________________________________________________________________ 25 // GenVertex: -1 ID: 0 (X,cT):0 26 // 27 // I: 1 7 21 -5.87e-14, 9.60e-15, 3.41e+01, 3.41e+01 42 -1 28 // O: 1 3 21 0.00e+00, 0.00e+00, 3.41e+01, 3.41e+01 21 -3 29 // 30 // GenVertex: -2 ID: 0 (X,cT):0 31 // 32 // I: 1 8 21 3.20e-14, 0.00e+00,-7.23e+01, 7.23e+01 41 -2 33 // O: 2 4 21 0.00e+00, 0.00e+00,-1.19e+00, 1.19e+00 21 -3 34 // 11 21 9.42e-01,-1.56e-01,-7.11e+01, 7.11e+01 43 -12 35 package main 36 37 import ( 38 "errors" 39 "fmt" 40 "io" 41 "log" 42 "os" 43 44 "go-hep.org/x/hep/hepmc" 45 ) 46 47 func main() { 48 log.SetPrefix("hepmc-dump: ") 49 log.SetFlags(0) 50 51 var ( 52 err error 53 r io.ReadCloser 54 w io.Writer = os.Stdout 55 ) 56 57 switch len(os.Args) { 58 case 1: 59 r = os.Stdin 60 case 2: 61 r, err = os.Open(os.Args[1]) 62 if err != nil { 63 log.Fatal(err) 64 } 65 defer r.Close() 66 default: 67 } 68 69 err = dump(w, r) 70 if err != nil { 71 log.Fatal(err) 72 } 73 } 74 75 func dump(w io.Writer, r io.Reader) error { 76 dec := hepmc.NewDecoder(r) 77 for { 78 var ( 79 evt hepmc.Event 80 err = dec.Decode(&evt) 81 ) 82 if errors.Is(err, io.EOF) { 83 return nil 84 } 85 if err != nil { 86 return fmt.Errorf("error decoding event: %w", err) 87 } 88 err = evt.Print(w) 89 if err != nil { 90 return fmt.Errorf("error printing event: %w", err) 91 } 92 93 err = hepmc.Delete(&evt) 94 if err != nil { 95 return fmt.Errorf("error deleting event: %w", err) 96 } 97 } 98 }