hps-java/src/main/java/org/lcsim/hps/analysis/ecal
diff -u -r1.5 -r1.6
--- HPSEcalPlotsDriver.java 18 Jul 2011 21:02:46 -0000 1.5
+++ HPSEcalPlotsDriver.java 27 Jul 2011 23:33:44 -0000 1.6
@@ -3,6 +3,7 @@
import hep.aida.ICloud1D;
import hep.aida.ICloud2D;
import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
import hep.physics.vec.Hep3Vector;
import java.util.ArrayList;
@@ -12,13 +13,16 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.Map.Entry;
+import java.util.Set;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
import org.lcsim.event.CalorimeterHit;
import org.lcsim.event.Cluster;
import org.lcsim.event.EventHeader;
import org.lcsim.event.MCParticle;
+import org.lcsim.event.util.ParticleTypeClassifier;
import org.lcsim.units.SystemOfUnits;
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
@@ -27,7 +31,7 @@
* Diagnostic plots for HPS ECal.
*
* @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: HPSEcalPlotsDriver.java,v 1.5 2011/07/18 21:02:46 jeremy Exp $
+ * @version $Id: HPSEcalPlotsDriver.java,v 1.6 2011/07/27 23:33:44 jeremy Exp $
*/
public class HPSEcalPlotsDriver extends Driver
{
@@ -38,7 +42,11 @@
// MCParticle plots.
ICloud1D primaryEPlot;
- ICloud1D fsPlot;
+ ICloud1D fsCountPlot;
+ ICloud1D fsEPlot;
+ ICloud1D fsGammaEPlot;
+ ICloud1D fsElectronEPlot;
+ ICloud1D fsPositronEPlot;
// CalHit plots.
IHistogram1D hitEPlot;
@@ -53,6 +61,10 @@
ICloud1D timePlot;
ICloud1D hitCountPlot;
ICloud1D idCountPlot;
+ ICloud1D crystalXPlot;
+ ICloud1D crystalYPlot;
+ //ICloud2D cellXYPlot;
+ IHistogram2D crystalXYPlot;
// Cluster plots.
IHistogram1D nclusPlot;
@@ -60,7 +72,7 @@
ICloud1D clusTotEPlot;
ICloud1D leadClusEPlot;
ICloud1D leadClus2EPlot;
- ICloud1D clusResTop3Plot;
+ //ICloud1D clusResTop3Plot;
IHistogram1D clusHitPlot;
ICloud1D clusSeedEPlot;
ICloud1D clusSeedDistPlot;
@@ -119,6 +131,21 @@
public void startOfData()
{
+ fsCountPlot = aida.cloud1D("MCParticle: Number of Final State Particles");
+ fsCountPlot.annotation().addItem("xAxisLabel", "Number of FS Particles");
+
+ fsEPlot = aida.cloud1D("MCParticle: FS Particle E");
+ fsEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
+
+ fsGammaEPlot = aida.cloud1D("MCParticle: FS Gamma E");
+ fsGammaEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
+
+ fsElectronEPlot = aida.cloud1D("MCParticle: FS Electron E");
+ fsElectronEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
+
+ fsPositronEPlot = aida.cloud1D("MCParticle: FS Positron E");
+ fsPositronEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
+
timePlot = aida.cloud1D(ecalCollectionName + " : Hit Time");
timePlot.annotation().addItem("yAxisScale", "log");
timePlot.annotation().addItem("xAxisLabel", "Time [ns]");
@@ -157,9 +184,16 @@
hitXZPlot.annotation().addItem("xAxisLabel", "X [mm]");
hitXZPlot.annotation().addItem("yAxisLabel", "Z [mm]");
- fsPlot = aida.cloud1D("MCParticle: Number of Final State Particles");
- fsPlot.annotation().addItem("xAxisLabel", "Number of FS Particles");
+ crystalXPlot = aida.cloud1D(ecalCollectionName + " : X Field Value");
+ crystalXPlot.annotation().addItem("xAxisLabel", "Number of Entries");
+
+ crystalYPlot = aida.cloud1D(ecalCollectionName + " : Y Field Value");
+ crystalYPlot.annotation().addItem("xAxisLabel", "Number of Entries");
+ crystalXYPlot = aida.histogram2D(
+ ecalCollectionName + " : X & Y ID Values",
+ 46, -23., 23., 5, 1., 6.);
+
clusEPlot = aida.cloud1D(ecalClusterCollectionName + " : Cluster E");
clusEPlot.annotation().addItem("xAxisLabel", "E [GeV]");
@@ -181,8 +215,8 @@
clusTotEPlot = aida.cloud1D(ecalClusterCollectionName + " : Total Clus E in Event");
clusTotEPlot.annotation().addItem("xAxisLabel", "E [GeV]");
- clusResTop3Plot = aida.cloud1D(ecalClusterCollectionName + " : Total Clus E Residual with Top 3 Particles");
- clusResTop3Plot.annotation().addItem("xAxisLabel", "E [GeV]");
+ //clusResTop3Plot = aida.cloud1D(ecalClusterCollectionName + " : Total Clus E Residual with Top 3 Particles");
+ //clusResTop3Plot.annotation().addItem("xAxisLabel", "E [GeV]");
clusHitPlot = aida.histogram1D(ecalClusterCollectionName + " : Number of Clusters per Hit", 5, 1, 6);
clusHitPlot.annotation().addItem("xAxisLabel", "Number of Clusters");
@@ -197,28 +231,51 @@
clusNHits = aida.histogram1D(ecalClusterCollectionName + " : Number of Hits per Cluster", 13, 0, 13);
clusNHits.annotation().addItem("xAxisLabel", "Number of Hits");
- leadClusAndPrimaryPlot = aida.cloud2D(ecalClusterCollectionName + " : Lead Cluster E vs Highest Primary Particle E");
+ leadClusAndPrimaryPlot = aida.cloud2D(ecalClusterCollectionName + " : Lead Cluster E vs Highest Primary Particle E");
}
-
+
public void process(EventHeader event)
{
// sum and max vars
double esum = 0;
double emax = 0;
double tmax = 0;
-
+
// Loop over hits from ECal collection.
List<CalorimeterHit> hits = event.get(CalorimeterHit.class, ecalCollectionName);
int nhits = hits.size();
+
+ // Get ID helper.
+ IIdentifierHelper helper =
+ event.getMetaData(hits).getIDDecoder().getSubdetector().getDetectorElement().getIdentifierHelper();
// MCParticles
List<MCParticle> mcparticles = event.get(MCParticle.class).get(0);
// Final State particles.
- List<MCParticle> fsParticles = getFinalStateParticles(mcparticles);
+ List<MCParticle> fsParticles = makeGenFSParticleList(mcparticles);
//System.out.println("fsParticles="+fsParticles.size());
- fsPlot.fill(fsParticles.size());
+ fsCountPlot.fill(fsParticles.size());
+
+ for (MCParticle fs : fsParticles)
+ {
+ double fsE = fs.getEnergy();
+ int fsPdg = fs.getPDGID();
+ fsEPlot.fill(fsE);
+ if (ParticleTypeClassifier.isElectron(fsPdg))
+ {
+ fsElectronEPlot.fill(fsE);
+ }
+ else if (ParticleTypeClassifier.isPositron(fsPdg))
+ {
+ fsPositronEPlot.fill(fsE);
+ }
+ else if (ParticleTypeClassifier.isPhoton(fsPdg))
+ {
+ fsGammaEPlot.fill(fsE);
+ }
+ }
// Sort MCParticles on energy.
Collections.sort(fsParticles, new MCParticleEComparator());
@@ -279,8 +336,16 @@
ids.add(hit.getCellID());
- // incr E sum
+ // Add to ECal energy sum.
esum += eraw;
+
+ // X and Y identifier values.
+ IIdentifier id = hit.getIdentifier();
+ int ix = helper.unpack(id).getValue(helper.getFieldIndex("ix"));
+ int iy = helper.unpack(id).getValue(helper.getFieldIndex("iy"));
+ crystalXPlot.fill(ix);
+ crystalYPlot.fill(iy);
+ crystalXYPlot.fill(ix, iy);
}
hitUnder100MeVPlot.fill(nhits100MeV);
@@ -413,7 +478,7 @@
return primary;
}
- private static List<MCParticle> getFinalStateParticles(List<MCParticle> mcparticles)
+ private static List<MCParticle> makeGenFSParticleList(List<MCParticle> mcparticles)
{
List<MCParticle> fsParticles = new ArrayList<MCParticle>();
for (MCParticle mcparticle : mcparticles)
hps-java/src/main/java/org/lcsim/hps/recon/tracking/kalman
diff -u -r1.2 -r1.3
--- FullFitKalman.java 7 Jul 2011 20:57:38 -0000 1.2
+++ FullFitKalman.java 27 Jul 2011 23:33:44 -0000 1.3
@@ -1,41 +1,30 @@
package org.lcsim.hps.recon.tracking.kalman;
-import org.lcsim.recon.tracking.trfbase.Propagator;
-import org.lcsim.recon.tracking.trfbase.PropDir;
-import org.lcsim.recon.tracking.trfbase.PropStat;
-import org.lcsim.recon.tracking.trfbase.Hit;
-import org.lcsim.recon.tracking.trfbase.ETrack;
-import org.lcsim.recon.tracking.trfbase.TrackError;
-import org.lcsim.recon.tracking.trfbase.Surface;
-import java.util.*;
-
-import org.lcsim.recon.tracking.trffit.HTrack;
-import org.lcsim.recon.tracking.trffit.FullFitter;
-
-
-import org.lcsim.recon.tracking.trfcyl.SurfCylinder;
-import org.lcsim.recon.tracking.trfcyl.ThinCylMs;
-
-import org.lcsim.recon.tracking.trfzp.SurfZPlane;
-import org.lcsim.recon.tracking.trfzp.ThinZPlaneMs;
+import java.util.Iterator;
+import java.util.List;
-//
-//import org.lcsim.contrib.RobKutschke.TRFSelfTest.util.SurfaceCode;
-//import org.lcsim.contrib.RobKutschke.TRFSelfTest.util.VTUtil;
import org.lcsim.contrib.RobKutschke.TRFSelfTest.util.RKDebug;
-//import org.lcsim.contrib.RobKutschke.TRFSelfTest.util.RKZot;
-
-//
-//import org.lcsim.contrib.RobKutschke.ToyConfig.*;
-
import org.lcsim.contrib.RobKutschke.TRFSelfTest.util.SurfaceCode;
import org.lcsim.contrib.RobKutschke.TRFSelfTest.util.VTUtil;
+import org.lcsim.recon.tracking.trfbase.ETrack;
+import org.lcsim.recon.tracking.trfbase.Hit;
+import org.lcsim.recon.tracking.trfbase.PropDir;
+import org.lcsim.recon.tracking.trfbase.PropStat;
+import org.lcsim.recon.tracking.trfbase.Propagator;
+import org.lcsim.recon.tracking.trfbase.Surface;
+import org.lcsim.recon.tracking.trfbase.TrackError;
import org.lcsim.recon.tracking.trfcyl.HitCylPhi;
import org.lcsim.recon.tracking.trfcyl.HitCylPhiZ2D;
+import org.lcsim.recon.tracking.trfcyl.SurfCylinder;
+import org.lcsim.recon.tracking.trfcyl.ThinCylMs;
import org.lcsim.recon.tracking.trffit.AddFitKalman;
+import org.lcsim.recon.tracking.trffit.FullFitter;
+import org.lcsim.recon.tracking.trffit.HTrack;
import org.lcsim.recon.tracking.trfxyp.ThinXYPlaneMs;
import org.lcsim.recon.tracking.trfzp.HitZPlane1;
import org.lcsim.recon.tracking.trfzp.HitZPlane2;
+import org.lcsim.recon.tracking.trfzp.SurfZPlane;
+import org.lcsim.recon.tracking.trfzp.ThinZPlaneMs;
import org.lcsim.util.aida.AIDA;
/**
@@ -50,10 +39,10 @@
* increased appropriately if the fitter is applied repeatedly to
* a single track.
*
- *@author $Author: mgraham $
- *@version $Id: FullFitKalman.java,v 1.2 2011/07/07 20:57:38 mgraham Exp $
+ *@author $Author: jeremy $
+ *@version $Id: FullFitKalman.java,v 1.3 2011/07/27 23:33:44 jeremy Exp $
*
- * Date $Date: 2011/07/07 20:57:38 $
+ * Date $Date: 2011/07/27 23:33:44 $
*
*/
public class FullFitKalman extends FullFitter {
hps-java/src/main/java/org/lcsim/hps/recon/tracking/kalman
diff -u -r1.2 -r1.3
--- KalmanGeom.java 7 Jul 2011 20:57:38 -0000 1.2
+++ KalmanGeom.java 27 Jul 2011 23:33:44 -0000 1.3
@@ -8,8 +8,6 @@
import org.lcsim.event.TrackerHit;
import org.lcsim.geometry.Detector;
-
-//import org.lcsim.recon.tracking.trfbase.PropDir;
import org.lcsim.recon.tracking.trfbase.Propagator;
import org.lcsim.recon.tracking.trfbase.PropDispatch;
import org.lcsim.recon.tracking.trfcyl.PropCyl;
@@ -20,14 +18,10 @@
import org.lcsim.recon.tracking.trfcylplane.PropCylZ;
import org.lcsim.recon.tracking.trfcylplane.PropZCyl;
-//import org.lcsim.contrib.RobKutschke.TRF.trfdca.PropDCAZ;
-//import org.lcsim.contrib.RobKutschke.TRF.trfdca.PropZDCA;
-
import org.lcsim.recon.tracking.trfcyl.SurfCylinder;
import org.lcsim.recon.tracking.trfdca.SurfDCA;
import org.lcsim.recon.tracking.trfzp.SurfZPlane;
-//import org.lcsim.contrib.RobKutschke.ToyConfig.*;
import org.lcsim.detector.ILogicalVolume;
import org.lcsim.detector.IPhysicalVolume;
import org.lcsim.detector.solids.ISolid;
@@ -48,10 +42,10 @@
* to the callers in a convenient form.
*
*
- *@author $Author: mgraham $
- *@version $Id: KalmanGeom.java,v 1.2 2011/07/07 20:57:38 mgraham Exp $
+ *@author $Author: jeremy $
+ *@version $Id: KalmanGeom.java,v 1.3 2011/07/27 23:33:44 jeremy Exp $
*
- * Date $Date: 2011/07/07 20:57:38 $
+ * Date $Date: 2011/07/27 23:33:44 $
*
*/
/* To make the Kalman filter work for any detector, the type of hit that is
hps-java/src/main/java/org/lcsim/hps/users/mgraham
diff -u -r1.2 -r1.3
--- KalmanGeom.java 7 Jul 2011 20:57:39 -0000 1.2
+++ KalmanGeom.java 27 Jul 2011 23:33:44 -0000 1.3
@@ -1,6 +1,5 @@
package org.lcsim.hps.users.mgraham;
-//import org.lcsim.HPSKalmanFilter.*;
import hep.physics.matrix.BasicMatrix;
import hep.physics.matrix.SymmetricMatrix;
import hep.physics.vec.Hep3Vector;
@@ -9,7 +8,6 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-//import org.lcsim.HPSKalmanFilter.ShapeDispatcher;
import org.lcsim.contrib.RobKutschke.TRF.trfdca.PropDCAZ;
import org.lcsim.detector.IDetectorElement;
@@ -20,8 +18,6 @@
import org.lcsim.hps.recon.tracking.kalman.PropXYXY;
import org.lcsim.hps.recon.tracking.kalman.ShapeDispatcher;
-
-//import org.lcsim.recon.tracking.trfbase.PropDir;
import org.lcsim.recon.tracking.trfbase.Propagator;
import org.lcsim.recon.tracking.trfbase.PropDispatch;
import org.lcsim.recon.tracking.trfcyl.PropCyl;
@@ -32,14 +28,10 @@
import org.lcsim.recon.tracking.trfcylplane.PropCylZ;
import org.lcsim.recon.tracking.trfcylplane.PropZCyl;
-//import org.lcsim.contrib.RobKutschke.TRF.trfdca.PropDCAZ;
-//import org.lcsim.contrib.RobKutschke.TRF.trfdca.PropZDCA;
-
import org.lcsim.recon.tracking.trfcyl.SurfCylinder;
import org.lcsim.recon.tracking.trfdca.SurfDCA;
import org.lcsim.recon.tracking.trfzp.SurfZPlane;
-//import org.lcsim.contrib.RobKutschke.ToyConfig.*;
import org.lcsim.detector.ILogicalVolume;
import org.lcsim.detector.IPhysicalVolume;
import org.lcsim.detector.IReadout;
@@ -71,10 +63,10 @@
* to the callers in a convenient form.
*
*
- *@author $Author: mgraham $
- *@version $Id: KalmanGeom.java,v 1.2 2011/07/07 20:57:39 mgraham Exp $
+ *@author $Author: jeremy $
+ *@version $Id: KalmanGeom.java,v 1.3 2011/07/27 23:33:44 jeremy Exp $
*
- * Date $Date: 2011/07/07 20:57:39 $
+ * Date $Date: 2011/07/27 23:33:44 $
*
*/
/* To make the Kalman filter work for any detector, the type of hit that is