Print

Print


Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/HansWenzel/DualCorrection on MAIN
DRFunctionFactory.java+172added 1.1


lcsim-contrib/src/main/java/org/lcsim/contrib/HansWenzel/DualCorrection
DRFunctionFactory.java added at 1.1
diff -N DRFunctionFactory.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ DRFunctionFactory.java	16 Dec 2009 17:20:26 -0000	1.1
@@ -0,0 +1,172 @@
+/*
+ * this class returns the electron, erenkov and dualreadout correction for
+ * a specific detector configuration
+ */
+package org.lcsim.contrib.HansWenzel.DualCorrection;
+
+import hep.aida.IFunction;
+import hep.aida.IFunctionFactory;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author wenzel
+ */
+final public class DRFunctionFactory {
+
+    private AIDA aida;
+    private IFunctionFactory functionFactory;
+    static DRFunctionFactory mof;
+    private static Map<DetectorConfiguration, ArrayList<IFunction>> mp;
+
+    /**
+    use very simple singleton pattern to make
+    sure that only one instance of this class.
+     */
+    public static DRFunctionFactory getInstance() {
+        if (mof == null) {
+            mof = new DRFunctionFactory();
+        }
+        return mof;
+    }
+
+    private DRFunctionFactory() {
+        aida = AIDA.defaultInstance();
+        functionFactory = aida.analysisFactory().createFunctionFactory(aida.tree());
+        mp = new HashMap<DetectorConfiguration, ArrayList<IFunction>>();
+        ArrayList<IFunction> al = new ArrayList<IFunction>();
+        // the following is not really elegant and should be replaced by a routine that reads
+        // the parameters of the correction functions from a file.
+        //
+        DetectorConfiguration dualcor = new DetectorConfiguration("ccal02", "BGO", 7.13, 1.65, "Digis", 0.02, 0.02, "LCPhys");
+        IFunction Corfu = functionFactory.createFunctionByName("dc_ccal02_digis_LCPhys", "p3");
+        Corfu.setParameter("p0", 0.52415);
+        Corfu.setParameter("p1", 0.37964);
+        Corfu.setParameter("p2", -0.60463);
+        Corfu.setParameter("p3", 0.66544);
+        al.add(Corfu);
+        IFunction Cerfu = functionFactory.createFunctionByName("cc_ccal02_digis_LCPhys", "p1");
+        Cerfu.setParameter("p0", 8.5701e-3);
+        Cerfu.setParameter("p1", 7677.7);
+        al.add(Cerfu);
+        IFunction efu = functionFactory.createFunctionByName("ec_ccal02_digis_LCPhys", "p1");
+        efu.setParameter("p0", 7.6521e-3);
+        efu.setParameter("p1", 1.0046);
+        al.add(efu);
+        mp.put(dualcor, al);
+        al = new ArrayList<IFunction>();
+        dualcor = new DetectorConfiguration("ccal02", "BGO", 7.13, 1.65, "Digis", 0.02, 0.02, "BGSP_BERT");
+        Corfu = functionFactory.createFunctionByName("ccal02_digis_QGSP_BERT", "p3");
+        Corfu.setParameter("p0", 0.53412);
+        Corfu.setParameter("p1", 0.56611);
+        Corfu.setParameter("p2", -0.57106);
+        Corfu.setParameter("p3", 0.37394);
+        al.add(Corfu);
+        // adding or set elements in Map by put method key and value pair
+        Cerfu = functionFactory.createFunctionByName("cc_ccal02_digis_QGSP_BERT", "p1");
+        Cerfu.setParameter("p0", 7.1940e-3);
+        Cerfu.setParameter("p1", 7620.7);
+        al.add(Cerfu);
+        efu = functionFactory.createFunctionByName("ec_ccal02_digis_QGSP_BERT", "p1");
+        efu.setParameter("p0", 7.2194e-3);
+        efu.setParameter("p1", 1.0047);
+        al.add(efu);
+        mp.put(dualcor, al);
+        al = new ArrayList<IFunction>();
+        dualcor = new DetectorConfiguration("ccal02", "BGO", 15., 1.65, "Digis", 0.02, 0.02, "LCPhys");
+        Corfu = functionFactory.createFunctionByName("ccal02_digis_LCPhys_d15", "p3");
+        Corfu.setParameter("p0", 0.59275);
+        Corfu.setParameter("p1", -0.063934);
+        Corfu.setParameter("p2", 0.46452);
+        Corfu.setParameter("p3", -0.025751);
+        al.add(Corfu);
+        // adding or set elements in Map by put method key and value pair
+        Cerfu = functionFactory.createFunctionByName("cc_ccal02_digis_LCPhys_d15", "p1");
+        Cerfu.setParameter("p0", 6.3057e-3);
+        Cerfu.setParameter("p1", 16584.);
+        al.add(Cerfu);
+        efu = functionFactory.createFunctionByName("ec_ccal02_digis_LCPhys_d15", "p1");
+        efu.setParameter("p0", 1.1773e-3);
+        efu.setParameter("p1", 1.0033);
+        al.add(efu);
+        mp.put(dualcor, al);
+    }
+
+    public void print() {
+        System.out.println("Currently " + mp.size() + " Detector Configurations are available");
+        //Get Map in Set interface to get key and value
+        Set s = mp.entrySet();
+        //Move next key and value of Map by iterator
+        Iterator it = s.iterator();
+        while (it.hasNext()) {
+            // key=value separator this by Map.Entry to get key and value
+            Map.Entry m = (Map.Entry) it.next();
+            // getKey is used to get key of Map
+            DetectorConfiguration key = (DetectorConfiguration) m.getKey();
+            key.print();
+            // getValue is used to get value of key in Map
+            ArrayList<IFunction> map = (ArrayList<IFunction>) m.getValue();
+            IFunction value = map.get(0);
+            System.out.println("Nr of Parameters:         " + value.numberOfParameters());
+            System.out.println("Name of Function:         " + value.title());
+            double[] params = value.parameters();
+            for (int i = 0; i < params.length; i++) {
+                System.out.println(params[i]);
+            }
+            value = map.get(1);
+            System.out.println("Nr of Parameters:         " + value.numberOfParameters());
+            System.out.println("Name of Function:         " + value.title());
+            double[] params1 = value.parameters();
+            for (int i = 0; i < params1.length; i++) {
+                System.out.println(params1[i]);
+            }
+            value = map.get(2);
+            System.out.println("Nr of Parameters:         " + value.numberOfParameters());
+            System.out.println("Name of Function:         " + value.title());
+            double[] params2 = value.parameters();
+            for (int i = 0; i < params2.length; i++) {
+                System.out.println(params2[i]);
+            }
+        }
+    }
+// get dual readout correction function
+    public IFunction getdcFunction(DetectorConfiguration dc) {
+        IFunction refunc = null;
+        if (mp.containsKey(dc)) {
+            ArrayList<IFunction> map = (ArrayList<IFunction>) mp.get(dc);
+            refunc = (IFunction) map.get(0);
+        }
+        return refunc;
+    }
+// get cerenkov scale
+    public IFunction getccFunction(DetectorConfiguration dc) {
+        IFunction refunc = null;
+        if (mp.containsKey(dc)) {
+            ArrayList<IFunction> map = (ArrayList<IFunction>) mp.get(dc);
+            refunc = (IFunction) map.get(2);
+        }
+        return refunc;
+    }
+// get electron scale:
+    public IFunction getecFunction(DetectorConfiguration dc) {
+        IFunction refunc = null;
+        if (mp.containsKey(dc)) {
+            ArrayList<IFunction> map = (ArrayList<IFunction>) mp.get(dc);
+            refunc = (IFunction) map.get(1);
+        }
+        return refunc;
+    }
+/// check if there is an entry for a given DetectorConfiguration
+    boolean checkdc(DetectorConfiguration dc) {
+        if (mp.containsKey(dc)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
CVSspam 0.2.8