go-hep.org/x/hep@v0.38.1/slha/example/go-slha-basic/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  package main
     6  
     7  import (
     8  	"flag"
     9  	"fmt"
    10  	"log"
    11  	"os"
    12  
    13  	"go-hep.org/x/hep/slha"
    14  )
    15  
    16  func handle(err error) {
    17  	if err != nil {
    18  		log.Panicf("**error: %+v\n", err)
    19  	}
    20  }
    21  
    22  func main() {
    23  	log.SetFlags(0)
    24  	log.SetPrefix("slha: ")
    25  
    26  	flag.Usage = func() {
    27  		fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
    28  		fmt.Fprintf(os.Stderr, " $ %s <path-to-SLHA-file>\n", os.Args[0])
    29  		flag.PrintDefaults()
    30  	}
    31  
    32  	flag.Parse()
    33  	if flag.NArg() <= 0 {
    34  		log.Printf("**error** need an input file name\n")
    35  		flag.Usage()
    36  		os.Exit(1)
    37  	}
    38  
    39  	fname := flag.Arg(0)
    40  
    41  	f, err := os.Open(fname)
    42  	if err != nil {
    43  		log.Printf("could not open file [%s]: %v\n", fname, err)
    44  		os.Exit(1)
    45  	}
    46  	defer f.Close()
    47  
    48  	data, err := slha.Decode(f)
    49  	if err != nil {
    50  		log.Printf("could not decode file [%s]: %v\n", fname, err)
    51  		os.Exit(1)
    52  	}
    53  
    54  	spinfo := data.Blocks.Get("SPINFO")
    55  	if spinfo != nil {
    56  		value, err := spinfo.Get(1)
    57  		handle(err)
    58  		fmt.Printf("spinfo: %s -- %q\n", value.Interface(), value.Comment())
    59  	}
    60  
    61  	modsel := data.Blocks.Get("MODSEL")
    62  	if modsel != nil {
    63  		value, err := modsel.Get(1)
    64  		handle(err)
    65  		fmt.Printf("modsel: %d -- %q\n", value.Interface(), value.Comment())
    66  	}
    67  
    68  	mass := data.Blocks.Get("MASS")
    69  	if mass != nil {
    70  		value, err := mass.Get(5)
    71  		handle(err)
    72  		fmt.Printf("mass[pdgid=5]: %v -- %q\n", value.Interface(), value.Comment())
    73  	}
    74  
    75  	nmix := data.Blocks.Get("NMIX")
    76  	if nmix != nil {
    77  		value, err := nmix.Get(1, 2)
    78  		handle(err)
    79  		fmt.Printf("nmix[1,2] = %v -- %q\n", value.Interface(), value.Comment())
    80  	}
    81  }
    82  
    83  // Output:
    84  // spinfo: SOFTSUSY -- "spectrum calculator"
    85  // modsel: 1 -- "sugra"
    86  // mass[pdgid=5]: 4.88991651 -- "b-quark pole mass calculated from mb(mb)_Msbar"
    87  // nmix[1,2] = -0.0531103553 -- "N_12"