Author: [log in to unmask]
Date: Wed Dec 17 02:09:46 2014
New Revision: 3462
Log:
Cleanup base classes in event package. Make sure LCMetaData is handled better when reading from LCIO. Make LCMetaData required in base class constructors. (And other minor changes and improvements.)
Added:
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasPosition.java
Removed:
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HitWithPosition.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHitWithPosition.java
Modified:
projects/lcsim/trunk/cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/NNAlgoTest.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/CalorimeterHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/EventHeader.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasMetaData.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/Hit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/RawTrackerHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/SimTrackerHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseCalorimeterHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseLCSimEvent.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawCalorimeterHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawTrackerHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimCalorimeterHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimTrackerHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseTrackerHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/SamplingFractionManager.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOCalorimeterHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIORawTrackerHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimCalorimeterHit.java
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimTrackerHit.java
projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ResetCalorimeterHitEnergy.java
projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/MergeEventTools.java
projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/OverlayDriver.java
projects/lcsim/trunk/tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/SimTrackerHitReadoutDriver.java
Modified: projects/lcsim/trunk/cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/NNAlgoTest.java
=============================================================================
--- projects/lcsim/trunk/cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/NNAlgoTest.java (original)
+++ projects/lcsim/trunk/cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/NNAlgoTest.java Wed Dec 17 02:09:46 2014
@@ -252,7 +252,6 @@
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
- @Override
public void setMetaData(EventHeader.LCMetaData meta)
{
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/CalorimeterHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/CalorimeterHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/CalorimeterHit.java Wed Dec 17 02:09:46 2014
@@ -14,7 +14,7 @@
* @author Tony Johnson <[log in to unmask]>
* @author Jeremy McCormick <[log in to unmask]>
*/
-public interface CalorimeterHit extends HitWithPosition {
+public interface CalorimeterHit extends Hit {
/**
* Get the raw energy deposition in GeV.
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/EventHeader.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/EventHeader.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/EventHeader.java Wed Dec 17 02:09:46 2014
@@ -18,11 +18,6 @@
*/
public interface EventHeader extends MCEvent
{
- /**
- * Get the path to the file source for this event.
- */
- //String getInputFile();
-
/**
* Get the list of MC particles associated with this event.
*/
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasMetaData.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasMetaData.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasMetaData.java Wed Dec 17 02:09:46 2014
@@ -12,7 +12,7 @@
public interface HasMetaData
{
public LCMetaData getMetaData();
- public void setMetaData(LCMetaData meta);
+ //protected void setMetaData(LCMetaData meta);
// from LCMetaData
public Subdetector getSubdetector();
Added: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasPosition.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasPosition.java (added)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasPosition.java Wed Dec 17 02:09:46 2014
@@ -0,0 +1,10 @@
+package org.lcsim.event;
+
+import hep.physics.vec.Hep3Vector;
+
+public interface HasPosition {
+
+ Hep3Vector getPositionVec();
+
+ double[] getPosition();
+}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/Hit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/Hit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/Hit.java Wed Dec 17 02:09:46 2014
@@ -5,15 +5,17 @@
import org.lcsim.detector.identifier.Identifiable;
import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
-public interface Hit extends HasMetaData, HasDetectorElement, Identifiable
-{
- DetectorIdentifierHelper getDetectorIdentifierHelper();
+public interface Hit extends HasMetaData, HasDetectorElement, HasPosition, Identifiable {
- // FIXME: Should these methods using identifier go here?
- // All our hits have these fields but not necessarily
- // those produced from an external framework like Mokka.
- int getSystemId();
- BarrelEndcapFlag getBarrelEndcapFlag();
- int getLayerNumber();
+ DetectorIdentifierHelper getDetectorIdentifierHelper();
+
+ // FIXME: I don't think none of this below belongs here!
+
+ int getSystemId();
+
+ BarrelEndcapFlag getBarrelEndcapFlag();
+
+ int getLayerNumber();
+
int getIdentifierFieldValue(String field);
}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/RawTrackerHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/RawTrackerHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/RawTrackerHit.java Wed Dec 17 02:09:46 2014
@@ -8,9 +8,8 @@
* @author tonyj
* @version $Id: RawTrackerHit.java,v 1.10 2008/08/20 01:34:21 jeremy Exp $
*/
-public interface RawTrackerHit
-extends Hit
-{
+public interface RawTrackerHit extends Hit {
+
/**
* Returns a time measurement associated with the adc values.
* E.g. the t0 of the spectrum for the TPC. Subdetector dependent.
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/SimTrackerHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/SimTrackerHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/SimTrackerHit.java Wed Dec 17 02:09:46 2014
@@ -5,8 +5,8 @@
* @author Jeremy McCormick
* @version $Id: SimTrackerHit.java,v 1.21 2011/08/24 18:51:17 jeremy Exp $
*/
-public interface SimTrackerHit extends HitWithPosition
-{
+public interface SimTrackerHit extends Hit {
+
/**
* Get the layer number of the hit.
* @return The layer number of the hit.
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseCalorimeterHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseCalorimeterHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseCalorimeterHit.java Wed Dec 17 02:09:46 2014
@@ -1,6 +1,5 @@
package org.lcsim.event.base;
-import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Vector;
import org.lcsim.detector.IDetectorElement;
@@ -8,18 +7,17 @@
import org.lcsim.detector.identifier.Identifier;
import org.lcsim.event.CalorimeterHit;
import org.lcsim.geometry.IDDecoder;
+import org.lcsim.event.EventHeader.LCMetaData;
/**
* Base implementation of CalorimeterHit.
*
- * @author tonyj
- * @author jeremym
- * @version $Id: BaseCalorimeterHit.java,v 1.18 2013/02/05 00:18:00 jeremy Exp $
+ * @author Tony Johnson <[log in to unmask]>
+ * @author Jeremy McCormick <[log in to unmask]>
*/
-public class BaseCalorimeterHit extends BaseHitWithPosition implements CalorimeterHit
-{
+public class BaseCalorimeterHit extends BaseHit implements CalorimeterHit {
- private static final double UNSET_ENERGY = -1;
+ public static final double UNSET_ENERGY = Double.MIN_VALUE;
protected double rawEnergy = UNSET_ENERGY;
protected double correctedEnergy = UNSET_ENERGY;
protected double energyError;
@@ -27,29 +25,18 @@
protected long id;
protected int type;
- protected BaseCalorimeterHit()
- {
+ protected BaseCalorimeterHit() {
}
-
- public BaseCalorimeterHit(
- long id,
- double correctedEnergy,
- double time)
- {
- this.correctedEnergy = correctedEnergy;
- this.time = time;
- this.id = id;
- }
-
- public BaseCalorimeterHit(
- double rawEnergy,
+
+ public BaseCalorimeterHit(double rawEnergy,
double correctedEnergy,
double energyError,
double time,
long id,
- Hep3Vector positionVec,
- int type)
- {
+ Hep3Vector positionVec,
+ int type,
+ LCMetaData metaData) {
+
this.rawEnergy = rawEnergy;
this.correctedEnergy = correctedEnergy;
this.energyError = energyError;
@@ -57,143 +44,83 @@
this.id = id;
this.positionVec = positionVec;
this.type = type;
+
+ calculateCorrectedEnergy();
+ calculateRawEnergy();
+
+ setMetaData(metaData);
}
- public double getTime()
- {
+ public double getTime() {
return time;
}
- public int getType()
- {
+ public int getType() {
return type;
}
- public double getRawEnergy()
- {
- if (rawEnergy == UNSET_ENERGY) {
- throw new RuntimeException("No raw energy available for CalorimeterHit.");
- }
+ public double getRawEnergy() {
return rawEnergy;
}
-
- public double[] getPosition()
- {
- if (positionVec == null) {
- calculatePosition();
- }
- return super.getPosition();
- }
-
- public Hep3Vector getPositionVec()
- {
- if (positionVec == null) {
- calculatePosition();
- }
- return super.getPositionVec();
- }
-
- public double getCorrectedEnergy()
- {
- if (correctedEnergy == UNSET_ENERGY) {
- calculateCorrectedEnergy();
- }
+
+ public double getCorrectedEnergy() {
return correctedEnergy;
}
-
- public long getCellID()
- {
+
+ public long getCellID() {
return id;
}
- public int getLayerNumber()
- {
+ public int getLayerNumber() {
IDDecoder decoder = getIDDecoder();
decoder.setID(id);
return decoder.getLayer();
}
- private void calculateCorrectedEnergy()
- {
- getIDDecoder().setID(id);
- correctedEnergy = SamplingFractionManager.defaultInstance().getCorrectedEnergy(rawEnergy, getIDDecoder().getLayer(), getSubdetector());
+ public IIdentifier getIdentifier() {
+ if (packedID == null) {
+ packedID = new Identifier(id);
+ }
+ return packedID;
}
- private void calculatePosition()
- {
- if (getMetaData() != null) {
- IDDecoder decoder = getIDDecoder();
- decoder.setID(id);
- positionVec = new BasicHep3Vector(decoder.getPosition());
- } else {
- throw new RuntimeException("Can't calculate position. MetaData is null.");
- }
- }
-
- public IIdentifier getIdentifier()
- {
- if (compactId == null)
- compactId = new Identifier(id);
- return compactId;
- }
-
- public double getEnergyError()
- {
+ public double getEnergyError() {
return energyError;
}
- public void setType(int type)
- {
+ // FIXME: Remove?
+ public void setType(int type) {
this.type = type;
}
- public IDetectorElement getDetectorElement()
- {
- if (de == null)
- findDetectorElementByPosition();
- // setupDetectorElement();
- return de;
+ public IDetectorElement getDetectorElement() {
+ return detectorElement;
}
-
- public void setCorrectedEnergy(double correctedEnergy)
- {
- this.correctedEnergy = correctedEnergy;
+
+ private void calculateCorrectedEnergy() {
+ // Is the corrected energy unset?
+ if (correctedEnergy == UNSET_ENERGY) {
+ getIDDecoder().setID(id);
+ correctedEnergy = SamplingFractionManager.defaultInstance().getCorrectedEnergy(rawEnergy, getIDDecoder().getLayer(), getSubdetector());
+ }
}
-
- public void addCorrectedEnergy(double addEnergy)
- {
- this.correctedEnergy += addEnergy;
+
+ private void calculateRawEnergy() {
+ // Is the raw energy unset?
+ if (rawEnergy == UNSET_ENERGY) {
+ getIDDecoder().setID(id);
+ correctedEnergy = SamplingFractionManager.defaultInstance().getRawEnergy(rawEnergy, getIDDecoder().getLayer(), getSubdetector());
+ }
}
-
+
/**
* Conversion to String for printout.
- *
* @return String output.
*/
- public String toString()
- {
- StringBuffer sb = new StringBuffer("CalorimeterHitImpl: \n");
- sb.append("type: " + type + " energy: " + correctedEnergy + " energyError: " + energyError + "\n");
- sb.append("position: " + positionVec.x() + " " + positionVec.y() + " " + positionVec.z() + "\n");
- sb.append("id: " + id + " time: " + time);
+ public String toString() {
+ sb.append("type: " + type + ", energy: " + correctedEnergy + ", energyError: " + energyError + ", ");
+ sb.append("position: (" + positionVec.x() + ", " + positionVec.y() + ", " + positionVec.z() + "), ");
+ sb.append("id: 0x" + getIdentifier().toHexString() + ", time: " + time);
return sb.toString();
}
}
-
-/*
- * protected void setupDetectorElement() { Subdetector subdet = meta.getIDDecoder().getSubdetector();
- * IIdentifierHelper helper = subdet.getDetectorElement().getIdentifierHelper(); SegmentationBase seg =
- * (SegmentationBase)subdet.getIDDecoder(); String[] stripFields = seg.getSegmentationFieldNames(); if
- * (stripFields == null) throw new RuntimeException("stripFields is null"); IIdentifierDictionary dict =
- * helper.getIdentifierDictionary(); int nfields = dict.getNumberOfFields(); IExpandedIdentifier expId =
- * helper.unpack(getIdentifier()); for (int i=0; i<nfields; i++) { int idx =
- * dict.getFieldIndex(stripFields[i]); expId.setValue(idx, 0); } de = findDetectorElement(dict.pack(expId));
- * if (de == null) throw new RuntimeException("DetectorElement not found."); }
- *
- * private static IDetectorElement findDetectorElement(IIdentifier id) {
- * System.out.println("findDetectorElement - " + id.toHexString()); IDetectorElement de = null;
- * IDetectorElementContainer srch = DetectorElementStore.getInstance().find(id); if (srch.size() == 0) { throw
- * new RuntimeException("No DetectorElement found with id <" + id.toHexString() + ">."); } else if
- * (srch.size() == 1) { de = srch.get(0); } else if (srch.size() > 1) { for (IDetectorElement xde : srch) { if
- * (!xde.hasChildren()) { de = xde; break; } } } return de; }
- */
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHit.java Wed Dec 17 02:09:46 2014
@@ -1,5 +1,10 @@
package org.lcsim.event.base;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+
+import org.lcsim.detector.converter.compact.DeDetector;
+import org.lcsim.detector.DetectorElement;
import org.lcsim.detector.DetectorElementStore;
import org.lcsim.detector.DetectorIdentifierHelper;
import org.lcsim.detector.IDetectorElement;
@@ -14,38 +19,49 @@
import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
/**
- * A base class for hit-like objects.
+ * this is a base class for hit-like objects in a detector.
*
* @author Jeremy McCormick <[log in to unmask]>
*/
public abstract class BaseHit implements Hit {
- protected LCMetaData meta;
- protected IExpandedIdentifier expId;
- protected IIdentifier compactId;
- protected IDetectorElement de;
-
- /**
- * Get the metadata associated with this hit.
- *
+ protected LCMetaData metaData;
+ protected IExpandedIdentifier expandedID;
+ protected IIdentifier packedID;
+ protected IDetectorElement detectorElement;
+ protected Hep3Vector positionVec;
+
+ /**
+ * Get the metadata associated with this hit.
* @return The hit's metadata.
*/
public LCMetaData getMetaData() {
- return meta;
- }
-
- /**
- * Set the metadata associated with this hit. By default, this will not override an existing value.
+ return metaData;
+ }
+
+ /**
+ * Set the metadata associated with this hit.
*/
public void setMetaData(LCMetaData meta) {
- if (this.meta == null) {
- this.meta = meta;
- }
- }
-
- /**
- * Get the subdetector that this hit belongs to.
- *
+
+ this.metaData = meta;
+
+ if (this.detectorElement == null) {
+ // If the DE is not set yet, try to look it up by ID (might be null).
+ detectorElement = findDetectorElement(getIdentifier());
+ }
+
+ // Calculate the position of the hit. Might use DE.
+ calculatePosition();
+
+ if (this.detectorElement == null) {
+ // If DE is still null, attempt to find it from the position.
+ detectorElement = findDetectorElement(positionVec);
+ }
+ }
+
+ /**
+ * Get the subdetector of this hit.
* @return The Subdetector of this hit.
*/
public Subdetector getSubdetector() {
@@ -57,20 +73,16 @@
* @return The IDetectorElement for this hit.
*/
public IDetectorElement getDetectorElement() {
- if (de == null) {
- findDetectorElementByIdentifier();
- }
- return de;
+ return detectorElement;
}
/**
* Set the @see org.lcsim.detector.IDetectorElement of this hit. By default, this will not override an
* existing value.
*/
+ // FIXME: This probably should not be in the public API. Where is this actually called from?
public void setDetectorElement(IDetectorElement de) {
- if (this.de == null) {
- this.de = de;
- }
+ this.detectorElement = de;
}
/**
@@ -78,10 +90,10 @@
* @return The expanded identifier of this hit.
*/
public IExpandedIdentifier getExpandedIdentifier() {
- if (expId == null) {
- expId = getIdentifierHelper().unpack(getIdentifier());
- }
- return expId;
+ if (expandedID == null) {
+ expandedID = getIdentifierHelper().unpack(getIdentifier());
+ }
+ return expandedID;
}
/**
@@ -89,7 +101,7 @@
* @return The identifier of this hit.
*/
public IIdentifier getIdentifier() {
- return compactId;
+ return packedID;
}
/**
@@ -113,7 +125,7 @@
* @return The hit's id decoder.
*/
public IDDecoder getIDDecoder() {
- return meta.getIDDecoder();
+ return metaData.getIDDecoder();
}
/**
@@ -147,45 +159,84 @@
public int getIdentifierFieldValue(String field) {
return getIdentifierHelper().getValue(getIdentifier(), field);
}
-
- /**
- * Use the {@link IIdentifier} associated with this hit to find its DetectorElement
- * in the geometry hierarchy and set a member variable to point to it.
- */
- protected void findDetectorElementByIdentifier() {
- if (this.de == null) {
- IDetectorElementContainer srch = DetectorElementStore.getInstance().find(getIdentifier());
-
- if (srch.size() == 0) {
- throw new RuntimeException("No DetectorElement found for SimTrackerHit with id <" + getIdentifier().toHexString() + ">.");
- }
-
- if (srch.size() == 1) {
- this.de = srch.get(0);
- }
-
- // This can happen sometimes, because the identifiers are not guaranteed to be unique.
- if (srch.size() > 1) {
- // Pick the first leaf DetectorElement.
- for (IDetectorElement xde : srch) {
- if (!xde.hasChildren()) {
- this.de = xde;
- break;
+
+ /**
+ * Get the position of the hit. This may be different than the position of the hit's DetectorElement.
+ * @return The position of this hit as a double array of size 3.
+ */
+ public double[] getPosition() {
+ return positionVec.v();
+ }
+
+ /**
+ * Get the position of this hit in mm as a {@see hep.physics.vec.Hep3Vector}.
+ * @return The position vector of the hit in mm.
+ */
+ public Hep3Vector getPositionVec() {
+ return positionVec;
+ }
+
+ /**
+ * Calculate the position of the hit, depending on what variables are available on the object.
+ */
+ protected void calculatePosition() {
+ // Was there no position information provided explicitly?
+ if (positionVec == null) {
+ // Does the hit ID match the DetectorElement exatly?
+ if (this.detectorElement != null && this.detectorElement.getIdentifier().equals(getIdentifier())) {
+ // Set the position from the DetectorElement.
+ this.positionVec = detectorElement.getGeometry().getPosition();
+ } else {
+ // This is what should happen for IDs with virtual cell values.
+ // The IDDecoder needs to be used here if it is set on the hit.
+ if (this.metaData != null) {
+ IDDecoder decoder = this.getIDDecoder();
+ if (decoder != null) {
+ decoder.setID(this.getIdentifier().getValue());
+ this.positionVec = new BasicHep3Vector(decoder.getPosition());
}
}
}
}
}
-
- /**
- * Setup link to the DetectorElement using the hit's ID.
- */
- protected void setupDetectorElement() {
- try {
-
- //System.out.println("Assigned DetectorElement <" + de.getName() + "> to hit.");
- } catch (RuntimeException x) {
- throw new RuntimeException("Failed to find DetectorElement for hit.");
- }
- }
-}
+
+ /**
+ * Find a DetectorElement by global position.
+ * @param position The global position.
+ * @return The DetectorElement at position.
+ */
+ private IDetectorElement findDetectorElement(Hep3Vector position) {
+ IDetectorElement mommy;
+ if (this.metaData != null) {
+ // Use subdetector's volume as top.
+ mommy = this.getIDDecoder().getSubdetector().getDetectorElement();
+ } else {
+ // Use the world volume.
+ mommy = ((DetectorElement) DetectorElementStore.getInstance().get(0)).getTop().findDetectorElement(getPositionVec());
+ }
+ return mommy.findDetectorElement(this.positionVec);
+ }
+
+ /**
+ * Find a DetectorElement by its identifier.
+ * @param id The identifier.
+ * @return The DetectorElement matching the identifier.
+ */
+ private IDetectorElement findDetectorElement(IIdentifier id) {
+ IDetectorElement mommy;
+ if (this.metaData != null) {
+ // Use subdetector's volume as top.
+ mommy = this.getIDDecoder().getSubdetector().getDetectorElement();
+ } else {
+ // Use the world volume.
+ mommy = ((DetectorElement) DetectorElementStore.getInstance().get(0)).getTop();
+ }
+ IDetectorElementContainer detectorElements = mommy.findDetectorElement(id);
+ // FIXME: Beware! The container can be null, which should be fixed at some point (detector-framework).
+ if (detectorElements != null && detectorElements.size() == 1) {
+ return detectorElements.get(0);
+ } else {
+ return null;
+ }
+ }
+}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseLCSimEvent.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseLCSimEvent.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseLCSimEvent.java Wed Dec 17 02:09:46 2014
@@ -153,12 +153,14 @@
}
private void setCollectionMetaData(List collection, Class type, LCMetaData meta) {
- // System.out.println("setCollectionMetaData");
// Set MetaData on collection objects.
if (HasMetaData.class.isAssignableFrom(type)) {
for (Object o : collection) {
- if (o instanceof HasMetaData) {
- ((HasMetaData) o).setMetaData(meta);
+ if (o instanceof BaseHit) {
+ BaseHit hit = (BaseHit) o;
+ if (hit.getMetaData() == null) {
+ ((BaseHit) o).setMetaData(meta);
+ }
}
}
}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawCalorimeterHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawCalorimeterHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawCalorimeterHit.java Wed Dec 17 02:09:46 2014
@@ -9,7 +9,7 @@
*
* @author Jeremy McCormick <[log in to unmask]>
*/
-public class BaseRawCalorimeterHit extends BaseHitWithPosition implements RawCalorimeterHit {
+public class BaseRawCalorimeterHit extends BaseHit implements RawCalorimeterHit {
long id;
int amplitude;
@@ -22,14 +22,14 @@
this.id = id;
this.amplitude = amplitude;
this.timestamp = timestamp;
- this.compactId = new Identifier(id);
+ this.packedID = new Identifier(id);
}
public BaseRawCalorimeterHit(long id, int amplitude, int timestamp, IDetectorElement de) {
this.id = id;
this.amplitude = amplitude;
this.timestamp = timestamp;
- this.de = de;
+ this.detectorElement = de;
}
public long getCellID() {
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawTrackerHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawTrackerHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawTrackerHit.java Wed Dec 17 02:09:46 2014
@@ -15,10 +15,8 @@
* @author Jeremy McCormick <[log in to unmask]>
* @version $Id: BaseRawTrackerHit.java,v 1.13 2012/03/14 00:48:43 jeremy Exp $
*/
-public class BaseRawTrackerHit
-extends BaseHit
-implements RawTrackerHit
-{
+public class BaseRawTrackerHit extends BaseHit implements RawTrackerHit {
+
protected int time;
protected long cellId;
protected short[] adcValues;
@@ -29,7 +27,7 @@
int time,
short[] adcValues) {
this.cellId = id;
- this.compactId = new Identifier(id);
+ this.packedID = new Identifier(id);
this.time = time;
this.adcValues = adcValues;
}
@@ -45,8 +43,8 @@
this.cellId = cellId;
this.adcValues = adcValues;
this.simTrackerHits = simTrackerHits;
- this.compactId = new Identifier(cellId);
- this.de = detectorElement;
+ this.packedID = new Identifier(cellId);
+ this.detectorElement = detectorElement;
}
/**
@@ -82,9 +80,9 @@
{
IIdentifierHelper helper = null;
- if (de != null)
+ if (detectorElement != null)
{
- helper = de.getIdentifierHelper();
+ helper = detectorElement.getIdentifierHelper();
}
else if (simTrackerHits != null && simTrackerHits.size() > 0)
{
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimCalorimeterHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimCalorimeterHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimCalorimeterHit.java Wed Dec 17 02:09:46 2014
@@ -5,46 +5,35 @@
import java.util.ArrayList;
import java.util.List;
-import org.lcsim.detector.DetectorElementStore;
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.IDetectorElementContainer;
-import org.lcsim.detector.identifier.IExpandedIdentifier;
-import org.lcsim.detector.identifier.IIdentifier;
-import org.lcsim.detector.identifier.IIdentifierDictionary;
-import org.lcsim.detector.identifier.IIdentifierHelper;
import org.lcsim.event.EventHeader.LCMetaData;
import org.lcsim.event.MCParticle;
import org.lcsim.event.SimCalorimeterHit;
-import org.lcsim.geometry.Subdetector;
-import org.lcsim.geometry.segmentation.SegmentationBase;
-public class BaseSimCalorimeterHit extends BaseCalorimeterHit implements SimCalorimeterHit
-{
+public class BaseSimCalorimeterHit extends BaseCalorimeterHit implements SimCalorimeterHit {
protected int nContributions;
protected Object[] particle;
protected float[] energyContrib;
- protected float[] times;
+ protected float[] times;
protected int[] pdg;
protected List<float[]> steps;
-
- protected BaseSimCalorimeterHit()
- {}
-
- public BaseSimCalorimeterHit(
- long id,
+
+ protected BaseSimCalorimeterHit() {
+ }
+
+ public BaseSimCalorimeterHit(long id,
double rawEnergy,
double time,
Object[] mcparts,
float[] energies,
float[] times,
- int[] pdgs)
- {
+ int[] pdgs,
+ LCMetaData meta) {
// Base class fields.
super.id = id;
super.rawEnergy = rawEnergy;
super.time = time;
- super.positionVec = null;
-
+ super.positionVec = null;
+
// MCParticle contributions.
this.nContributions = mcparts.length;
this.particle = mcparts;
@@ -52,104 +41,91 @@
this.times = times;
this.pdg = pdgs;
this.steps = new ArrayList(nContributions);
+
+ setMetaData(meta);
}
-
+
/**
* New ctor with step positions.
*/
- public BaseSimCalorimeterHit(
- long id,
+ public BaseSimCalorimeterHit(long id,
double rawEnergy,
double time,
Object[] mcparts,
float[] energies,
float[] times,
- int[] pdgs,
- List<float[]> steps)
- {
+ int[] pdgs,
+ List<float[]> steps,
+ LCMetaData meta) {
// Base class fields.
super.id = id;
super.rawEnergy = rawEnergy;
super.time = time;
- super.positionVec = null;
-
+ super.positionVec = null;
+
// MCParticle contributions.
this.nContributions = mcparts.length;
this.particle = mcparts;
this.energyContrib = energies;
this.times = times;
this.pdg = pdgs;
- this.steps = steps;
+ this.steps = steps;
+
+ setMetaData(meta);
}
-
- public void shiftTime(double time)
- {
- super.time = this.getTime() + time;
- for (int i=0; i<times.length; i++)
- {
- times[i] += time;
- }
+
+ public void shiftTime(double time) {
+ super.time = this.getTime() + time;
+ for (int i = 0; i < times.length; i++) {
+ times[i] += time;
+ }
}
-
- public double getTime()
- {
+
+ public double getTime() {
// First check for explicit value that has been set.
- if (super.time != 0) return super.time;
-
+ if (super.time != 0)
+ return super.time;
+
// If the times array is empty, then there is no valid time to find.
- if (times.length == 0) return 0;
-
+ if (times.length == 0)
+ return 0;
+
// Find the earliest time from the array.
double t = times[0];
- for (int i=1; i<times.length; i++)
- {
- t = Math.min(t,times[i]);
+ for (int i = 1; i < times.length; i++) {
+ t = Math.min(t, times[i]);
}
-
+
// Cache the minimum time value to avoid repeating the above calculation.
super.time = t;
-
+
return t;
}
-
- public MCParticle getMCParticle(int index)
- {
+
+ public MCParticle getMCParticle(int index) {
Object p = particle[index];
- if (p instanceof SIORef) p = ((SIORef) p).getObject();
+ if (p instanceof SIORef)
+ p = ((SIORef) p).getObject();
return (MCParticle) p;
- }
+ }
- public double getContributedEnergy(int index)
- {
+ public double getContributedEnergy(int index) {
return energyContrib[index];
}
- public int getPDG(int index)
- {
+ public int getPDG(int index) {
return pdg[index];
}
- public double getContributedTime(int index)
- {
+ public double getContributedTime(int index) {
return times[index];
}
-
- public float[] getStepPosition(int index)
- {
+
+ public float[] getStepPosition(int index) {
return steps.get(index);
}
- public int getMCParticleCount()
- {
+ public int getMCParticleCount() {
return particle.length;
}
-
- /**
- * Set the metadata associated with this hit. By default, this will not override an existing value.
- */
- public void setMetaData(LCMetaData meta) {
- super.setMetaData(meta);
- setupDetectorElement();
- }
-
-}
+}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimTrackerHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimTrackerHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimTrackerHit.java Wed Dec 17 02:09:46 2014
@@ -13,11 +13,12 @@
/**
* A concrete implementation of SimTrackerHit.
+ *
* @author Jeremy McCormick
* @version $Id: BaseSimTrackerHit.java,v 1.19 2012/07/20 09:29:43 grefe Exp $
*/
-public class BaseSimTrackerHit extends BaseHitWithPosition implements SimTrackerHit
-{
+public class BaseSimTrackerHit extends BaseHit implements SimTrackerHit {
+
protected double[] position = new double[3];
protected double[] momentum = new double[3];
protected MCParticle mcparticle;
@@ -28,15 +29,16 @@
protected long id;
protected double pathLength;
private Hep3Vector startPoint, endPoint;
-
+
/**
* Constructor for subclasses
*/
- protected BaseSimTrackerHit()
- {}
-
+ protected BaseSimTrackerHit() {
+ }
+
/**
* Fully qualified constructor
+ *
* @param position The center point of the hit in Cartesian coordinates (x,y,z).
* @param momentum The momentum of the hit in GeV (px,py,pz).
* @param mcparticle The associated MCParticle. (may be null)
@@ -47,35 +49,24 @@
* @param meta The LCMetaData associated to this hit. (may be null)
* @param de The DetectorElement associated to this hit. (may be null)
*/
- public BaseSimTrackerHit(
- double[] position,
- double dEdx,
- double[] momentum,
- double pathLength,
- double time,
- int cellID,
- MCParticle mcparticle,
- LCMetaData meta,
- IDetectorElement de)
- {
- super(position);
+ public BaseSimTrackerHit(double[] position, double dEdx, double[] momentum, double pathLength, double time, int cellID, MCParticle mcparticle, LCMetaData meta, IDetectorElement de) {
+ positionVec = new BasicHep3Vector(position[0], position[1], position[2]);
+
if (position.length != 3)
throw new IllegalArgumentException("The position array is of the wrong size!");
- for (int i=0, n=this.position.length; i < n; i++)
- {
+ for (int i = 0, n = this.position.length; i < n; i++) {
this.position[i] = position[i];
- }
-
+ }
+
if (momentum == null)
throw new IllegalArgumentException("The momentum points to null!");
if (momentum.length != 3)
throw new IllegalArgumentException("The momentum array is of the wrong size!");
- for (int i=0, n=this.momentum.length; i < n; i++)
- {
+ for (int i = 0, n = this.momentum.length; i < n; i++) {
this.momentum[i] = momentum[i];
}
-
+
this.mcparticle = mcparticle;
this.time = time;
this.dEdx = dEdx;
@@ -83,107 +74,89 @@
// TODO need to properly set a 64bit ID
this.id = (long) cellID;
this.pathLength = pathLength;
- this.meta = meta;
- this.de = de;
+ this.metaData = meta;
+ this.detectorElement = de;
}
-
- /**
- * Set the metadata associated with this hit. By default, this will not override an existing value.
- */
- public void setMetaData(LCMetaData meta) {
- super.setMetaData(meta);
- findDetectorElementByIdentifier();
+
+ public void setTime(double time) {
+ this.time = time;
}
-
- public void setTime(double time) {
- this.time = time;
- }
-
- public int getLayer()
- {
+
+ public int getLayer() {
getIDDecoder().setID(getCellID());
return getIDDecoder().getLayer();
}
-
- public double[] getPoint()
- {
+
+ public double[] getPoint() {
return positionVec.v();
}
-
-// public double[] getPosition()
-// {
-// return getPoint();
-// }
- public double getTime()
- {
+ public double getTime() {
return time;
}
- public double getdEdx()
- {
+ public double getdEdx() {
return dEdx;
}
- public MCParticle getMCParticle()
- {
+ public MCParticle getMCParticle() {
return mcparticle;
}
- // @Deprecated
+ // @Deprecated
// Use {@link #getCellID64()} instead.
- public int getCellID()
- {
- return cellID0;
+ public int getCellID() {
+ return cellID0;
}
-
- public long getCellID64()
- {
+
+ public long getCellID64() {
return id;
}
-
+
public void setCellID64(long cellID) {
- id = cellID;
- }
-
- public double getPathLength()
- {
+ id = cellID;
+ }
+
+ public double getPathLength() {
return pathLength;
}
- public double[] getMomentum()
- {
+ public double[] getMomentum() {
return momentum;
- }
+ }
- public double[] getStartPoint()
- {
+ public double[] getStartPoint() {
if (startPoint == null)
computePoints();
return startPoint.v();
}
- public double[] getEndPoint()
- {
+ public double[] getEndPoint() {
if (endPoint == null)
computePoints();
return endPoint.v();
}
-
- private void computePoints()
- {
+
+ private void computePoints() {
Hep3Vector midpoint = new BasicHep3Vector(getPoint());
Hep3Vector direction = VecOp.unit(new BasicHep3Vector(getMomentum()));
- Hep3Vector half_length = VecOp.mult(getPathLength()/2.0,direction);
+ Hep3Vector halfLength = VecOp.mult(getPathLength() / 2.0, direction);
- startPoint = VecOp.add(midpoint,VecOp.mult(-1.0,half_length));
- endPoint = VecOp.add(midpoint,half_length);
+ startPoint = VecOp.add(midpoint, VecOp.mult(-1.0, halfLength));
+ endPoint = VecOp.add(midpoint, halfLength);
+ }
+
+ public IIdentifier getIdentifier() {
+ if (packedID == null)
+ packedID = new Identifier(id);
+ return packedID;
}
- public IIdentifier getIdentifier()
- {
- if (compactId == null)
- compactId = new Identifier(id);
- return compactId;
+ /**
+ * Get the {@see org.lcsim.detector.IDetectorElement} associated with this hit.
+ * @return The IDetectorElement for this hit.
+ */
+ public IDetectorElement getDetectorElement() {
+ return detectorElement;
}
-}
+}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseTrackerHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseTrackerHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseTrackerHit.java Wed Dec 17 02:09:46 2014
@@ -14,200 +14,201 @@
import org.lcsim.event.TrackerHit;
/**
- * // TODO add methods to add hits to this object.
- * // TODO decide what these hits should be.
+ * // TODO add methods to add hits to this object. // TODO decide what these hits should be.
+ *
* @author Norman Graf
*/
-public class BaseTrackerHit implements TrackerHit
-{
+public class BaseTrackerHit implements TrackerHit {
protected double[] _pos = new double[3];
protected double[] _covMatrix = new double[6];
protected double _time;
protected double _dedx;
- //TODO set up an enumeration to replace the integer type
+ // TODO set up an enumeration to replace the integer type
protected int _type;
- //TODO decide what this is a list of
- //TODO decide whether this should be a Set
+ // TODO decide what this is a list of
+ // TODO decide whether this should be a Set
protected List _rawHits = new ArrayList();
protected long id;
-
+
/** Creates a new instance of BaseTrackerHit */
- public BaseTrackerHit()
- {}
-
+ public BaseTrackerHit() {
+ }
+
/**
* fully qualified constructor
- * @param pos the position of this hit (x,y,z) in mm
- * @param cov the covariance matrix for the position measurement, packed as 6 elements.
- * @param t the time for this measurement in ns
- * @param e the energy deposit associated with this measurement, in GeV
- * @param type the type of this measurement. not yet defined.
- */
- public BaseTrackerHit(double[] pos, double[] cov, double t, double e, int type)
- {
+ *
+ * @param pos
+ * the position of this hit (x,y,z) in mm
+ * @param cov
+ * the covariance matrix for the position measurement, packed as 6 elements.
+ * @param t
+ * the time for this measurement in ns
+ * @param e
+ * the energy deposit associated with this measurement, in GeV
+ * @param type
+ * the type of this measurement. not yet defined.
+ */
+ public BaseTrackerHit(double[] pos, double[] cov, double t, double e, int type) {
_pos = pos;
_covMatrix = cov;
_time = t;
_dedx = e;
_type = type;
}
-
+
// include these setters since I don't know what the final inheriting classes will
// look like.
/**
* The (x,y,z) position of this measurement.
- * @param pos the position of this hit (x,y,z) in mm
- */
- public void setPosition(double[] pos)
- {
+ *
+ * @param pos
+ * the position of this hit (x,y,z) in mm
+ */
+ public void setPosition(double[] pos) {
_pos = pos;
}
-
+
/**
* The covariance matrix for the position measurement.
- * @param cov Packed array representing the symmetric covariance matrix (6 elements).
- */
- public void setCovarianceMatrix( double[] cov)
- {
+ *
+ * @param cov
+ * Packed array representing the symmetric covariance matrix (6 elements).
+ */
+ public void setCovarianceMatrix(double[] cov) {
_covMatrix = cov;
}
-
+
/**
* The time at which this measurement was made.
- * @param t the time in ns.
- */
- public void setTime(double t)
- {
+ *
+ * @param t
+ * the time in ns.
+ */
+ public void setTime(double t) {
_time = t;
}
-
+
/**
* The energy deposit associated with this measurement.
- * @param e The energy in GeV.
- */
- public void setEnergy(double e)
- {
+ *
+ * @param e
+ * The energy in GeV.
+ */
+ public void setEnergy(double e) {
_dedx = e;
}
-
+
/**
* The type of this measurement.
- * @param type Not yet defined.
- */
- public void setType(int type)
- {
+ *
+ * @param type
+ * Not yet defined.
+ */
+ public void setType(int type) {
_type = type;
}
-
+
/**
* Add the RawTrackerHit from which this TrackerHit originates
- * @param hit
- */
- public void addRawTrackerHit(RawTrackerHit hit)
- {
+ *
+ * @param hit
+ */
+ public void addRawTrackerHit(RawTrackerHit hit) {
_rawHits.add(hit);
}
-
+
/**
* Add the list of RawTrackerHits from which this TrackerHit originates
- * @param hits
- */
- public void addRawTrackerHits(List<RawTrackerHit> hits)
- {
+ *
+ * @param hits
+ */
+ public void addRawTrackerHits(List<RawTrackerHit> hits) {
_rawHits.addAll(hits);
- }
-
+ }
// TODO consider customizing based on hit type.
- public String toString()
- {
+ public String toString() {
String className = getClass().getName();
int lastDot = className.lastIndexOf('.');
- if(lastDot!=-1)className = className.substring(lastDot+1);
- StringBuffer sb = new StringBuffer(className+": Type: "+_type+"\n");
- sb.append("(x,y,z): "+_pos[0]+" "+_pos[1]+" "+_pos[2]+"\n");
+ if (lastDot != -1)
+ className = className.substring(lastDot + 1);
+ StringBuffer sb = new StringBuffer(className + ": Type: " + _type + "\n");
+ sb.append("(x,y,z): " + _pos[0] + " " + _pos[1] + " " + _pos[2] + "\n");
// TODO add in covariance matrix
- sb.append("dEdx: "+_dedx+" t: "+_time+"\n");
+ sb.append("dEdx: " + _dedx + " t: " + _time + "\n");
return sb.toString();
}
-
+
// TODO add convenience methods which extend the base interface.
// TODO return position as SpacePoint
// TODO return covariance matrix as Matrix
-
-//TrackerHit interface
+
+ // TrackerHit interface
/**
* The (x,y,z) hit position in [mm].
+ *
* @return the cartesian position of this point.
*/
- public double[] getPosition()
- {
+ public double[] getPosition() {
return _pos;
}
-
+
/**
* Covariance of the position (x,y,z) as a 6 element array.
+ *
* @return the packed covariance matrix
*/
- public double[] getCovMatrix()
- {
+ public double[] getCovMatrix() {
return _covMatrix;
}
-
+
/**
* The energy deposited by this hit in [GeV].
+ *
* @return the energy deposit associated with this hit.
*/
- public double getdEdx()
- {
+ public double getdEdx() {
return _dedx;
}
-
- /**
- * The time of the hit in [ns]. By convention, the earliest time of
- * energy deposition is used if this is a composite hit.
+
+ /**
+ * The time of the hit in [ns]. By convention, the earliest time of energy deposition is used if this is a composite hit.
+ *
* @return the time of this hit.
*/
- public double getTime()
- {
+ public double getTime() {
return _time;
}
-
- public double getEdepError()
- {
+
+ public double getEdepError() {
return 0.;
}
-
- public int getQuality()
- {
+
+ public int getQuality() {
return 0;
}
-
- /**
- * Type of hit. Mapping of integer types to type names
- * through collection parameters "TrackerHitTypeNames"
- * and "TrackerHitTypeValues".
+
+ /**
+ * Type of hit. Mapping of integer types to type names through collection parameters "TrackerHitTypeNames" and "TrackerHitTypeValues".
+ *
* @return the integer type of this hit.
*/
// TODO define what this type is.
- public int getType()
- {
+ public int getType() {
return _type;
}
-
+
// TODO fix the covariant return type.
/**
- * The raw data hits.
- * Check getType() to get actual data type.
+ * The raw data hits. Check getType() to get actual data type.
+ *
* @return the list of raw hits which contribute to this hit.
*/
- public List getRawHits()
- {
+ public List getRawHits() {
return _rawHits;
}
-
- public long getCellID()
- {
+
+ public long getCellID() {
return id;
- }
+ }
}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/SamplingFractionManager.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/SamplingFractionManager.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/SamplingFractionManager.java Wed Dec 17 02:09:46 2014
@@ -10,95 +10,91 @@
import org.lcsim.geometry.Subdetector;
/**
- * Currently assumes that each subdetector has a single sampling fraction. This
- * is obviously not true if the subdetector has more than one layering scheme,
- * or if a single "subdetector" represents more than one physical detector (e.g.
- * barrel and endcap).
+ * Currently assumes that each subdetector has a single sampling fraction. This is obviously not true if the subdetector has more than one layering scheme, or if a single "subdetector" represents more
+ * than one physical detector (e.g. barrel and endcap).
*
* @author tonyj
*/
-public class SamplingFractionManager
-{
- private static SamplingFractionManager theSamplingFractionManager = new SamplingFractionManager();
- private ConditionsManager manager;
-
- private SamplingFractionManager()
- {
- manager = ConditionsManager.defaultInstance();
- manager.registerConditionsConverter(new SamplingFractionConverter());
- }
-
- public static SamplingFractionManager defaultInstance()
- {
- return theSamplingFractionManager;
- }
-
- public double getCorrectedEnergy(double rawEnergy, int layer, Subdetector detector)
- {
- SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class,"SamplingFractions/" + detector.getName()).getCachedData();
- return sf.getCorrectedEnergy(rawEnergy,layer);
- }
- private static class SamplingFraction
- {
- private final double defaultSamplingFraction;
- private final boolean digital;
- private final Map<Integer,Double> layerMap = new HashMap<Integer,Double>();
-
- private SamplingFraction(ConditionsSet set)
- {
- defaultSamplingFraction = set.getDouble("samplingFraction");
- digital = set.getBoolean("digital",false);
- Pattern pattern = Pattern.compile("samplingFraction\\[((\\d+(-\\d+)?)(,\\d+(-\\d+)?)*)\\]");
- Pattern p2 = Pattern.compile(",?(\\d+)(-(\\d+))?");
-
- for (Object o : set.keySet())
- {
- String key = o.toString();
+public class SamplingFractionManager {
+
+ private static SamplingFractionManager theSamplingFractionManager = new SamplingFractionManager();
+ private ConditionsManager manager;
- // Get rid of embedded whitespace, and match
- Matcher matcher = pattern.matcher(key.replaceAll("\\s",""));
- if (matcher.matches())
- {
- double s = set.getDouble(key);
- String layers = matcher.group(1);
- Matcher m2 = p2.matcher(layers);
- while (m2.find())
- {
- int start = Integer.parseInt(m2.group(1));
- int end = m2.group(3) == null ? -1 : Integer.parseInt(m2.group(3));
- if (end > start)
- {
- for (int i=start; i<=end; i++)
- {
- layerMap.put(i,s);
- }
- }
- else
- {
- layerMap.put(start,s);
- }
- }
+ private SamplingFractionManager() {
+ manager = ConditionsManager.defaultInstance();
+ manager.registerConditionsConverter(new SamplingFractionConverter());
+ }
+
+ public static SamplingFractionManager defaultInstance() {
+ return theSamplingFractionManager;
+ }
+
+ public double getCorrectedEnergy(double rawEnergy, int layer, Subdetector detector) {
+ SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class, "SamplingFractions/" + detector.getName()).getCachedData();
+ return sf.getCorrectedEnergy(rawEnergy, layer);
+ }
+
+ public double getRawEnergy(double correctedEnergy, int layer, Subdetector detector) {
+ SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class, "SamplingFractions/" + detector.getName()).getCachedData();
+ return sf.getRawEnergy(correctedEnergy, layer);
+ }
+
+ private static class SamplingFraction {
+ private final double defaultSamplingFraction;
+ private final boolean digital;
+ private final Map<Integer, Double> layerMap = new HashMap<Integer, Double>();
+
+ private SamplingFraction(ConditionsSet set) {
+ defaultSamplingFraction = set.getDouble("samplingFraction");
+ digital = set.getBoolean("digital", false);
+ Pattern pattern = Pattern.compile("samplingFraction\\[((\\d+(-\\d+)?)(,\\d+(-\\d+)?)*)\\]");
+ Pattern p2 = Pattern.compile(",?(\\d+)(-(\\d+))?");
+
+ for (Object o : set.keySet()) {
+ String key = o.toString();
+
+ // Get rid of embedded whitespace, and match
+ Matcher matcher = pattern.matcher(key.replaceAll("\\s", ""));
+ if (matcher.matches()) {
+ double s = set.getDouble(key);
+ String layers = matcher.group(1);
+ Matcher m2 = p2.matcher(layers);
+ while (m2.find()) {
+ int start = Integer.parseInt(m2.group(1));
+ int end = m2.group(3) == null ? -1 : Integer.parseInt(m2.group(3));
+ if (end > start) {
+ for (int i = start; i <= end; i++) {
+ layerMap.put(i, s);
+ }
+ } else {
+ layerMap.put(start, s);
+ }
+ }
+ }
}
- }
- }
- double getCorrectedEnergy(double rawEnergy, int layer)
- {
- Double layerSF = layerMap.get(layer);
- double samplingFraction = layerSF == null ? defaultSamplingFraction : layerSF;
- return (digital ? 1 : rawEnergy)/samplingFraction;
- }
- }
- private static class SamplingFractionConverter implements ConditionsConverter<SamplingFraction>
- {
- public Class<SamplingFractionManager.SamplingFraction> getType()
- {
- return SamplingFraction.class;
- }
+ }
- public SamplingFractionManager.SamplingFraction getData(ConditionsManager manager, String name)
- {
- ConditionsSet conditions = manager.getConditions(name);
- return new SamplingFraction(conditions);
- }
- }
+ double getCorrectedEnergy(double rawEnergy, int layer) {
+ Double layerSF = layerMap.get(layer);
+ double samplingFraction = layerSF == null ? defaultSamplingFraction : layerSF;
+ return (digital ? 1 : rawEnergy) / samplingFraction;
+ }
+
+ double getRawEnergy(double correctedEnergy, int layer) {
+ Double layerSF = layerMap.get(layer);
+ double samplingFraction = layerSF == null ? defaultSamplingFraction : layerSF;
+ return (digital ? 1 : correctedEnergy) * samplingFraction;
+ }
+ }
+
+ private static class SamplingFractionConverter implements ConditionsConverter<SamplingFraction> {
+ public Class<SamplingFractionManager.SamplingFraction> getType() {
+ return SamplingFraction.class;
+ }
+
+ public SamplingFractionManager.SamplingFraction getData(ConditionsManager manager, String name) {
+ ConditionsSet conditions = manager.getConditions(name);
+ return new SamplingFraction(conditions);
+ }
+ }
}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOCalorimeterHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOCalorimeterHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOCalorimeterHit.java Wed Dec 17 02:09:46 2014
@@ -18,7 +18,6 @@
class SIOCalorimeterHit extends BaseCalorimeterHit {
SIOCalorimeterHit(SIOInputStream in, int flags, int version, LCMetaData meta) throws IOException {
- this.meta = meta;
int cellid0 = in.readInt();
int cellid1 = 0;
if (LCIOUtil.bitTest(flags, LCIOConstants.RCHBIT_ID1) || version == 8) {
@@ -50,6 +49,7 @@
in.readPTag(this);
}
}
+ setMetaData(meta);
}
static void write(CalorimeterHit hit, SIOOutputStream out, int flags) throws IOException {
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIORawTrackerHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIORawTrackerHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIORawTrackerHit.java Wed Dec 17 02:09:46 2014
@@ -28,11 +28,10 @@
SIORawTrackerHit(SIOInputStream in, int flags, int version, LCMetaData meta) throws IOException
{
- this.meta = meta;
int cellid0 = in.readInt();
int cellid1 = LCIOUtil.bitTest(flags,31) ? in.readInt() : 0;
cellId = ((long) cellid1)<<32 | cellid0;
- compactId = new Identifier(cellId);
+ packedID = new Identifier(cellId);
time = in.readInt();
int nAdc = in.readInt();
adcValues = new short[nAdc];
@@ -53,6 +52,7 @@
}
*/
in.readPTag(this);
+ setMetaData(meta);
}
static void write(RawTrackerHit hit, SIOOutputStream out, int flags) throws IOException
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimCalorimeterHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimCalorimeterHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimCalorimeterHit.java Wed Dec 17 02:09:46 2014
@@ -21,7 +21,6 @@
// constructor from LCIO data file
SIOSimCalorimeterHit(SIOInputStream in, int flags, int version, LCMetaData meta) throws IOException
{
- this.meta = meta;
int cellid0 = in.readInt();
int cellid1 = 0;
if (LCIOUtil.bitTest(flags,LCIOConstants.RCHBIT_ID1) || version==8) {
@@ -63,6 +62,7 @@
}
}
if ( version > 1000 ) in.readPTag(this);
+ setMetaData(meta);
}
static private float emptyPos[] = new float[3];
@@ -102,4 +102,4 @@
}
out.writePTag(hit);
}
-}
+}
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimTrackerHit.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimTrackerHit.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimTrackerHit.java Wed Dec 17 02:09:46 2014
@@ -24,9 +24,6 @@
SIOSimTrackerHit(SIOInputStream in, int flags, int version, LCMetaData meta) throws IOException
{
- // Metadata.
- this.meta = meta;
-
// Read in the two 32-bit cell IDs.
cellID0 = in.readInt();
if(version >= 1060)
@@ -44,7 +41,7 @@
position[0] = in.readDouble();
position[1] = in.readDouble();
position[2] = in.readDouble();
- setPosition(position);
+ positionVec = new BasicHep3Vector(position[0], position[1], position[2]);
// Energy.
dEdx = in.readFloat();
@@ -68,6 +65,8 @@
// Pointer tag.
if (version > 1000)
in.readPTag(this);
+
+ setMetaData(meta);
}
public MCParticle getMCParticle()
Modified: projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ResetCalorimeterHitEnergy.java
=============================================================================
--- projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ResetCalorimeterHitEnergy.java (original)
+++ projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ResetCalorimeterHitEnergy.java Wed Dec 17 02:09:46 2014
@@ -71,9 +71,7 @@
}
}
- BaseSimCalorimeterHit resetHit = new BaseSimCalorimeterHit(id, totalEnergy, time, mcparts, energies, times, pdgs, steps);
- //resetHit.setDetectorElement(hit.getDetectorElement());
- resetHit.setMetaData(metaData);
+ BaseSimCalorimeterHit resetHit = new BaseSimCalorimeterHit(id, totalEnergy, time, mcparts, energies, times, pdgs, steps, metaData);
resetHits.add(resetHit);
}
caloHitCollection.clear();
Modified: projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/MergeEventTools.java
=============================================================================
--- projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/MergeEventTools.java (original)
+++ projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/MergeEventTools.java Wed Dec 17 02:09:46 2014
@@ -248,7 +248,7 @@
}
}
- BaseSimCalorimeterHit copyHit = new BaseSimCalorimeterHit(id, rawEnergy, time, mcparts, energies, times, pdgs, steps);
+ BaseSimCalorimeterHit copyHit = new BaseSimCalorimeterHit(id, rawEnergy, time, mcparts, energies, times, pdgs, steps, metaData);
//copyHit.setDetectorElement(hit.getDetectorElement());
copyHit.setMetaData(metaData);
@@ -302,9 +302,7 @@
}
// need to set time to 0 so it is recalculated from the timeList
SimCalorimeterHit mergedHit = new BaseSimCalorimeterHit(hit.getCellID(),
- rawEnergy, 0., mcpList, eneList, timeList, pdgList, steps);
- //mergedHit.setDetectorElement(oldHit.getDetectorElement());
- mergedHit.setMetaData(metaData);
+ rawEnergy, 0., mcpList, eneList, timeList, pdgList, steps, metaData);
return mergedHit;
}
Modified: projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/OverlayDriver.java
=============================================================================
--- projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/OverlayDriver.java (original)
+++ projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/OverlayDriver.java Wed Dec 17 02:09:46 2014
@@ -23,11 +23,11 @@
import org.lcsim.detector.IDetectorElement;
import org.lcsim.event.EventHeader;
import org.lcsim.event.GenericObject;
-import org.lcsim.event.HitWithPosition;
import org.lcsim.event.MCParticle;
import org.lcsim.event.SimCalorimeterHit;
import org.lcsim.event.SimTrackerHit;
import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.event.Hit;
import org.lcsim.event.base.BaseMCParticle;
import org.lcsim.event.base.BaseSimCalorimeterHit;
import org.lcsim.event.base.BaseSimTrackerHit;
@@ -430,7 +430,7 @@
* the position of the given hit along a straight line.
* @param hit
*/
- static protected double getLosTof(HitWithPosition hit) {
+ static protected double getLosTof(Hit hit) {
return SpacePoint.distance(new SpacePoint(hit.getPositionVec()), interactionPoint)/c;
}
@@ -581,9 +581,7 @@
}
// need to set time to 0 so it is recalculated from the timeList
movedHit = new BaseSimCalorimeterHit(hit.getCellID(),
- rawEnergy, 0., mcArr, eneArr, timeArr, pdgArr, steps);
- //movedHit.setDetectorElement(hit.getDetectorElement());
- movedHit.setMetaData(collection);
+ rawEnergy, 0., mcArr, eneArr, timeArr, pdgArr, steps, collection);
} else {
double hitTime = hit.getTime() + time;
if (timeWindow > 0) {
@@ -734,10 +732,7 @@
}
}
- BaseSimCalorimeterHit copyHit = new BaseSimCalorimeterHit(id, rawEnergy, time, mcparts, energies, times, pdgs, steps);
- //copyHit.setDetectorElement(hit.getDetectorElement());
- copyHit.setMetaData(meta);
-
+ BaseSimCalorimeterHit copyHit = new BaseSimCalorimeterHit(id, rawEnergy, time, mcparts, energies, times, pdgs, steps, meta);
return copyHit;
}
@@ -851,9 +846,9 @@
}
// need to set time to 0 so it is recalculated from the timeList
SimCalorimeterHit mergedHit = new BaseSimCalorimeterHit(oldHit.getCellID(),
- rawEnergy, 0., mcpList, eneList, timeList, pdgList, steps);
+ rawEnergy, 0., mcpList, eneList, timeList, pdgList, steps, collection);
//mergedHit.setDetectorElement(oldHit.getDetectorElement());
- mergedHit.setMetaData(collection);
+ //mergedHit.setMetaData(collection);
// replace old hit with merged hit
signalCaloHits.remove(oldHit);
signalCaloHits.add(mergedHit);
Modified: projects/lcsim/trunk/tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/SimTrackerHitReadoutDriver.java
=============================================================================
--- projects/lcsim/trunk/tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/SimTrackerHitReadoutDriver.java (original)
+++ projects/lcsim/trunk/tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/SimTrackerHitReadoutDriver.java Wed Dec 17 02:09:46 2014
@@ -60,7 +60,7 @@
LCMetaData meta = header.getMetaData(collection);
if (canHandle(meta.getName())) {
for (SimTrackerHit hit : collection) {
- hit.setMetaData(meta);
+ //hit.setMetaData(meta);
hit.getDetectorElement().getReadout().addHit(hit);
if (debug) {
System.out.println("Driver assigned hit " + hit.getExpandedIdentifier().toString() + " to "
@@ -80,4 +80,4 @@
}
}
}
-}
+}
########################################################################
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
|