// Copyright 2000, CERN, Geneva, Switzerland package hep.physics.yappi; import java.util.*; public class DecayChannel implements Comparable { private String name; DecayGroup group; String texName; String fraction; // to keep significant digits String posError; // to keep significant digits String negError; // to keep significant digits double confidenceLevel; double scaleFactor; String P; String PUnit; private List decayParticles; // of DecayProducts public DecayChannel(String name, String fraction) { this.name = name; this.fraction = fraction; decayParticles = new ArrayList(); } public String getName() { return name; } public String getTexName() { return texName; } public DecayGroup getDecayGroup() { return group; } public double getFraction() { try { return Double.parseDouble(fraction); } catch (Exception nfe) { return Double.NaN; } } public String getFractionAsString() { return fraction; } public double getPosError() { try { return Double.parseDouble(posError); } catch (Exception nfe) { return Double.NaN; } } public String getPosErrorAsString() { return posError; } public double getNegError() { try { return Double.parseDouble(negError); } catch (Exception nfe) { return Double.NaN; } } public String getNegErrorAsString() { return negError; } public double getConfidenceLevel() { return confidenceLevel; } public double getScaleFactor() { return scaleFactor; } public String getP() { return P; } public String getPUnit() { return PUnit; } public void addDecayParticle(DecayProduct decayProduct) { decayParticles.add(decayProduct); } public Iterator getDecayParticles() { return decayParticles.iterator(); } public int compareTo(Object obj) { DecayChannel channel = (DecayChannel)obj; double f1 = getFraction(); double f2 = channel.getFraction(); if (Double.isNaN(f1)) { if (Double.isNaN(f2)) { // both NaN String s1 = getFractionAsString(); String s2 = channel.getFractionAsString(); if ((s1 == null) && (s2 == null)) return 0; if (s1 == null) return -1; if (s2 == null) return +1; if (s1.startsWith("<")) { if (s2.startsWith("<")) { // both start with < Double d = new Double(s1.substring(1)); return -d.compareTo(new Double(s2.substring(1))); } else { // s1 starts with < return +1; } } else if (s2.startsWith("<")) { return -1; } // real strings return -(s1.compareTo(s2)); } else { // f1 is NaN return +1; } } else if (Double.isNaN(f2)) { // f2 is NaN return -1; } // System.out.println(f1+", "+f2); // both are real numbers return (f1 < f2) ? +1 : (f1 == f2) ? 0 : -1; } }