Print

Print


Commit in projects/lcsim/trunk/cal-calib/src/main/java/org/lcsim/cal/calib on MAIN
PandoraPfoSamplingFractionAnalysislDriver.java+122-1333299 -> 3300
check for MC particle null pointer

projects/lcsim/trunk/cal-calib/src/main/java/org/lcsim/cal/calib
PandoraPfoSamplingFractionAnalysislDriver.java 3299 -> 3300
--- projects/lcsim/trunk/cal-calib/src/main/java/org/lcsim/cal/calib/PandoraPfoSamplingFractionAnalysislDriver.java	2014-09-03 21:09:50 UTC (rev 3299)
+++ projects/lcsim/trunk/cal-calib/src/main/java/org/lcsim/cal/calib/PandoraPfoSamplingFractionAnalysislDriver.java	2014-09-03 21:10:53 UTC (rev 3300)
@@ -62,7 +62,9 @@
 
     boolean _isHcalDigital = false;
 
-    /** Creates a new instance of SamplingFractionAnalysisDriver */
+    /**
+     * Creates a new instance of SamplingFractionAnalysisDriver
+     */
     public PandoraPfoSamplingFractionAnalysislDriver()
     {
         _tree = aida.tree();
@@ -71,14 +73,11 @@
     protected void process(EventHeader event)
     {
 
-        if (!_initialized)
-        {
+        if (!_initialized) {
             ConditionsManager mgr = ConditionsManager.defaultInstance();
-            try
-            {
+            try {
                 _cond = mgr.getConditions("CalorimeterCalibration");
-            } catch (ConditionsSetNotFoundException e)
-            {
+            } catch (ConditionsSetNotFoundException e) {
                 System.out.println("ConditionSet CalorimeterCalibration not found for detector " + mgr.getDetector());
                 System.out.println("Please check that this properties file exists for this detector ");
             }
@@ -86,11 +85,10 @@
             _ecalLayering = _cond.getDoubleArray("ECalLayering");
             _useFirstLayer = _cond.getDouble("IsFirstEmLayerSampling") == 1.;
 
-
             ConditionsSet hcalProperties = mgr.getConditions("SamplingFractions/HcalBarrel");
-           
+
             _isHcalDigital = hcalProperties.getBoolean("digital");
-            System.out.println("HCal is "+(_isHcalDigital==true ? "" : "not")+" read out digitally");
+            System.out.println("HCal is " + (_isHcalDigital == true ? "" : "not") + " read out digitally");
 
             System.out.println("initialized...");
 
@@ -103,148 +101,142 @@
         MCParticle mcpart = null;
         // Look for the most energetic final state particle
         for (MCParticle myMCP : mcparts) {
-        	if (myMCP.getGeneratorStatus() == MCParticle.FINAL_STATE) {
-        		if (mcpart == null) {
-        			mcpart = myMCP;
-        		} else if (mcpart.getEnergy() < myMCP.getEnergy()) {
-        			mcpart = myMCP;
-        		}
-        	}
+            if (myMCP.getGeneratorStatus() == MCParticle.FINAL_STATE) {
+                if (mcpart == null) {
+                    mcpart = myMCP;
+                } else if (mcpart.getEnergy() < myMCP.getEnergy()) {
+                    mcpart = myMCP;
+                }
+            }
         }
-        
-        String particleType = mcpart.getType().getName();
-        double mcEnergy = mcpart.getEnergy();
-        long mcIntegerEnergy = Math.round(mcEnergy);
-        boolean meV = false;
-        if (mcEnergy < .99)
-        {
-            mcIntegerEnergy = Math.round(mcEnergy * 1000);
-            meV = true;
-        }
+        if (mcpart != null) {
+            String particleType = mcpart.getType().getName();
+            double mcEnergy = mcpart.getEnergy();
+            long mcIntegerEnergy = Math.round(mcEnergy);
+            boolean meV = false;
+            if (mcEnergy < .99) {
+                mcIntegerEnergy = Math.round(mcEnergy * 1000);
+                meV = true;
+            }
 
         // to derive the sampling fractions, want access to the raw energies
-        // create a map keyed on ID for the SimCalorimeterHits
-        // use the ID of the CalorimeterHits in the clusters to fetch them back
+            // create a map keyed on ID for the SimCalorimeterHits
+            // use the ID of the CalorimeterHits in the clusters to fetch them back
+            Map<Long, SimCalorimeterHit> simCalHitMap = new HashMap<Long, SimCalorimeterHit>();
 
-        Map<Long, SimCalorimeterHit> simCalHitMap = new HashMap<Long, SimCalorimeterHit>();
-
-        List<List<SimCalorimeterHit>> collections = event.get(SimCalorimeterHit.class);
-        for (List<SimCalorimeterHit> collection : collections)
-        {
-            for (SimCalorimeterHit hit : collection)
-            {
-                simCalHitMap.put(hit.getCellID(), hit);
+            List<List<SimCalorimeterHit>> collections = event.get(SimCalorimeterHit.class);
+            for (List<SimCalorimeterHit> collection : collections) {
+                for (SimCalorimeterHit hit : collection) {
+                    simCalHitMap.put(hit.getCellID(), hit);
+                }
             }
-        }
 
-        _tree.mkdirs(particleType);
-        _tree.cd(particleType);
-        _tree.mkdirs(mcIntegerEnergy + (meV ? "_MeV" : "_GeV"));
-        _tree.cd(mcIntegerEnergy + (meV ? "_MeV" : "_GeV"));
+            _tree.mkdirs(particleType);
+            _tree.cd(particleType);
+            _tree.mkdirs(mcIntegerEnergy + (meV ? "_MeV" : "_GeV"));
+            _tree.cd(mcIntegerEnergy + (meV ? "_MeV" : "_GeV"));
 
-        if (mcpart.getSimulatorStatus().isDecayedInCalorimeter())
-        {
-            List<ReconstructedParticle> rpCollection = event.get(ReconstructedParticle.class, "PandoraPFOCollection");
-            if (_debug)
-                System.out.println("found " + rpCollection.size() + " ReconstructedParticles");
-            // System.out.println("Found "+rpCollection.size()+" ReconstructedParticles");
+            if (mcpart.getSimulatorStatus().isDecayedInCalorimeter()) {
+                List<ReconstructedParticle> rpCollection = event.get(ReconstructedParticle.class, "PandoraPFOCollection");
+                if (_debug) {
+                    System.out.println("found " + rpCollection.size() + " ReconstructedParticles");
+                }
+                // System.out.println("Found "+rpCollection.size()+" ReconstructedParticles");
 //            aida.cloud1D("Number of ReconstructedParticles found").fill(rpCollection.size());
-            if (rpCollection.size() == 1)
-            {
+                if (rpCollection.size() == 1) {
 
-                for (ReconstructedParticle p : rpCollection)
-                {
-                    if (_debug)
-                        System.out.println("  energy " + p.getEnergy());
-                }
-                // fetch the highest energy RP (usually the first)
-                ReconstructedParticle p = rpCollection.get(0);
-                List<Cluster> clusters = p.getClusters();
-                if (_debug)
-                    System.out.println("found " + clusters.size() + " clusters");
-                aida.histogram1D("number of found clusters", 10, -0.5, 9.5).fill(clusters.size());
-                // proceed only if we found a single cluster above threshold
-                if (clusters.size() > 0)
-                {
-                    int nHCalHits = 0;
-                    for (Cluster c : clusters)
-                    {
-                        aida.cloud1D("Highest energy cluster energy").fill(c.getEnergy());
-                        aida.cloud1D("Highest energy cluster number of cells").fill(c.getCalorimeterHits().size());
-
-                        double clusterEnergy = c.getEnergy();
-                        double mcMass = mcpart.getType().getMass();
-                        // subtract the mass to get kinetic energy...
-                        double expectedEnergy = mcEnergy;
-                        // In case of protons and neutrons we expect only the kinetic energy in the shower
-                        if (mcpart.getPDGID() == 2212 || mcpart.getPDGID() == 2112) {
-                        	expectedEnergy = mcEnergy - mcMass;
+                    for (ReconstructedParticle p : rpCollection) {
+                        if (_debug) {
+                            System.out.println("  energy " + p.getEnergy());
                         }
+                    }
+                    // fetch the highest energy RP (usually the first)
+                    ReconstructedParticle p = rpCollection.get(0);
+                    List<Cluster> clusters = p.getClusters();
+                    if (_debug) {
+                        System.out.println("found " + clusters.size() + " clusters");
+                    }
+                    aida.histogram1D("number of found clusters", 10, -0.5, 9.5).fill(clusters.size());
+                    // proceed only if we found a single cluster above threshold
+                    if (clusters.size() > 0) {
+                        int nHCalHits = 0;
+                        for (Cluster c : clusters) {
+                            aida.cloud1D("Highest energy cluster energy").fill(c.getEnergy());
+                            aida.cloud1D("Highest energy cluster number of cells").fill(c.getCalorimeterHits().size());
+
+                            double clusterEnergy = c.getEnergy();
+                            double mcMass = mcpart.getType().getMass();
+                            // subtract the mass to get kinetic energy...
+                            double expectedEnergy = mcEnergy;
+                            // In case of protons and neutrons we expect only the kinetic energy in the shower
+                            if (mcpart.getPDGID() == 2212 || mcpart.getPDGID() == 2112) {
+                                expectedEnergy = mcEnergy - mcMass;
+                            }
 //                System.out.println(mcpart.getType().getName()+" "+expectedEnergy);
-                        aida.cloud1D("measured - predicted energy").fill(clusterEnergy - expectedEnergy);
+                            aida.cloud1D("measured - predicted energy").fill(clusterEnergy - expectedEnergy);
 
                         // let's now break down the cluster by component.
-                        // this analysis uses:
-                        // 1.) first 20 EM layers
-                        // 2.) next 10 EM layers
-                        // 3.) Had layers
-                        List<CalorimeterHit> hits = c.getCalorimeterHits();
-                        double[] vals = new double[4];
-                        double clusterEnergySum = 0.;
-                        double rawEnergySum = 0.;
-                        for (CalorimeterHit hit : hits)
-                        {
-                            long id = hit.getCellID();
-                            IDDecoder decoder = hit.getIDDecoder();
-                            decoder.setID(id);
-                            SimCalorimeterHit simHit = simCalHitMap.get(id);
-                            double rawEnergy = simHit.getRawEnergy();
-                            double correctedEnergy = hit.getCorrectedEnergy();
-                            int layer = decoder.getLayer();
-                            String detectorName = decoder.getSubdetector().getName();
+                            // this analysis uses:
+                            // 1.) first 20 EM layers
+                            // 2.) next 10 EM layers
+                            // 3.) Had layers
+                            List<CalorimeterHit> hits = c.getCalorimeterHits();
+                            double[] vals = new double[4];
+                            double clusterEnergySum = 0.;
+                            double rawEnergySum = 0.;
+                            for (CalorimeterHit hit : hits) {
+                                long id = hit.getCellID();
+                                IDDecoder decoder = hit.getIDDecoder();
+                                decoder.setID(id);
+                                SimCalorimeterHit simHit = simCalHitMap.get(id);
+                                double rawEnergy = simHit.getRawEnergy();
+                                double correctedEnergy = hit.getCorrectedEnergy();
+                                int layer = decoder.getLayer();
+                                String detectorName = decoder.getSubdetector().getName();
 //                        System.out.println(detectorName);
-                            int caltype = 0;
-                            // FIXME Hard-coded name.
-                            if (detectorName.toUpperCase().startsWith("ECAL"))
-                            {
-                                for (int i = 1; i < _ecalLayering.length + 1; ++i)
-                                {
-                                    if (layer >= _ecalLayering[i - 1])
-                                        caltype = i - 1;
+                                int caltype = 0;
+                                // FIXME Hard-coded name.
+                                if (detectorName.toUpperCase().startsWith("ECAL")) {
+                                    for (int i = 1; i < _ecalLayering.length + 1; ++i) {
+                                        if (layer >= _ecalLayering[i - 1]) {
+                                            caltype = i - 1;
+                                        }
+                                    }
                                 }
-                            }
-                            // FIXME Hard-coded name.
-                            if (detectorName.toUpperCase().startsWith("HCAL"))
-                            {
-                                caltype = 3;
-                                nHCalHits +=1;
-                            }
+                                // FIXME Hard-coded name.
+                                if (detectorName.toUpperCase().startsWith("HCAL")) {
+                                    caltype = 3;
+                                    nHCalHits += 1;
+                                }
 //                        System.out.println("layer "+layer+" caltype "+caltype);
-                            clusterEnergy += hit.getCorrectedEnergy();
+                                clusterEnergy += hit.getCorrectedEnergy();
 //                            vals[caltype] += hit.getCorrectedEnergy();
-                            vals[caltype] += rawEnergy;
-                        } // end of loop over hits in cluster
-                        if(_isHcalDigital == true) vals[3] = nHCalHits;
-                        if(_debug) System.out.println("vals: "+vals[0]+" " +vals[1]+" "+vals[2]+" "+vals[3]);
+                                vals[caltype] += rawEnergy;
+                            } // end of loop over hits in cluster
+                            if (_isHcalDigital == true) {
+                                vals[3] = nHCalHits;
+                            }
+                            if (_debug) {
+                                System.out.println("vals: " + vals[0] + " " + vals[1] + " " + vals[2] + " " + vals[3]);
+                            }
                         // set up linear least squares:
-                        // expectedEnergy = a*E1 + b*E2 +c*E3
-                        for (int j = 0; j < 3; ++j)
-                        {
-                            _vec[j] += expectedEnergy * vals[j + 1];
-                            for (int k = 0; k < 3; ++k)
-                            {
-                                _acc[j][k] += vals[j + 1] * vals[k + 1];
+                            // expectedEnergy = a*E1 + b*E2 +c*E3
+                            for (int j = 0; j < 3; ++j) {
+                                _vec[j] += expectedEnergy * vals[j + 1];
+                                for (int k = 0; k < 3; ++k) {
+                                    _acc[j][k] += vals[j + 1] * vals[k + 1];
+                                }
                             }
                         }
-                    }
-                } // end of cluster loop
-            } // end of one RP cut
+                    } // end of cluster loop
+                } // end of one RP cut
 //
 ////            event.put("All Calorimeter Hits",allHits);
 ////            event.put("Hits To Cluster",hitsToCluster);
 //            event.put("Found Clusters", clusters);
 //            } // end of ReconstructedParticle loop
-        }// end of check on decays outside tracker volume
+            }// end of check on decays outside tracker volume
+        }
         _tree.cd("/");
     }
 
@@ -255,18 +247,15 @@
         Matrix A = new Matrix(_acc, 3, 3);
         A.print(6, 4);
         Matrix b = new Matrix(3, 1);
-        for (int i = 0; i < 3; ++i)
-        {
+        for (int i = 0; i < 3; ++i) {
             b.set(i, 0, _vec[i]);
         }
         b.print(6, 4);
-        try
-        {
+        try {
             Matrix x = A.solve(b);
             x.print(6, 4);
             System.out.println("SamplingFractions: " + 1. / x.get(0, 0) + ", " + 1. / x.get(1, 0) + ", " + 1. / x.get(2, 0));//+ ", " + 1. / x.get(3, 0));
-        } catch (Exception e)
-        {
+        } catch (Exception e) {
             e.printStackTrace();
 //            System.out.println("try reducing dimensionality...");
 //            Matrix Ap = new Matrix(_acc, 2, 2);
SVNspam 0.1


Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1