GeomConverter/sandbox
diff -N DetectorIdHelper.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ DetectorIdHelper.java 24 Aug 2007 23:44:23 -0000 1.1
@@ -0,0 +1,510 @@
+package org.lcsim.detector;
+
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierDictionary;
+import org.lcsim.detector.identifier.IdentifierHelper;
+import org.lcsim.detector.identifier.IIdentifierDictionary.FieldNotFoundException;
+import org.lcsim.detector.identifier.IIdentifierDictionary.InvalidIndexException;
+
+public class DetectorIdHelper
+extends IdentifierHelper
+{
+ // Index of system field in the dictionary.
+ int systemIndex=-1;
+
+ // Index of barrel field in the dictionary.
+ int barrelIndex=-1;
+
+ // Barrel or endcap flag.
+ public final static int BARREL=0;
+ public final static int ENDCAP_POSITIVE=1;
+ public final static int ENDCAP_NEGATIVE=-1;
+
+ // Subsystem id values.
+ public final static int UNKNOWN=0;
+ public final static int VTX=1;
+ public final static int SIT=2;
+ public final static int TPC=3;
+ public final static int ECAL=4;
+ public final static int HCAL=5;
+ public final static int MUON=6;
+ public final static int FORWARD=7;
+ public final static int LUMI=8;
+
+ // Barrel or endcap.
+ IIdentifier barrelId;
+ IIdentifier endcapPositiveId;
+ IIdentifier endcapNegativeId;
+
+ // Vertex detector.
+ IIdentifier vtxId;
+ IIdentifier vtxBarrelId;
+ IIdentifier vtxEndcapPositiveId;
+ IIdentifier vtxEndcapNegativeId;
+
+ // Silicon tracker.
+ IIdentifier sitId;
+ IIdentifier sitBarrelId;
+ IIdentifier sitEndcapPositiveId;
+ IIdentifier sitEndcapNegativeId;
+
+ // TPC.
+ IIdentifier tpcId;
+
+ // Ecal.
+ IIdentifier ecalId;
+ IIdentifier ecalBarrelId;
+ IIdentifier ecalEndcapPositiveId;
+ IIdentifier ecalEndcapNegativeId;
+
+ // Hcal.
+ IIdentifier hcalId;
+ IIdentifier hcalBarrelId;
+ IIdentifier hcalEndcapPositiveId;
+ IIdentifier hcalEndcapNegativeId;
+
+ // Muon.
+ IIdentifier muonId;
+ IIdentifier muonBarrelId;
+ IIdentifier muonEndcapPositiveId;
+ IIdentifier muonEndcapNegativeId;
+
+ // Forward calorimeter.
+ IIdentifier forwardId;
+
+ // Luminosity monitor.
+ IIdentifier lumiId;
+
+ DetectorIdHelper(IIdentifierDictionary dict) throws FieldNotFoundException, InvalidIndexException
+ {
+ super(dict);
+
+ systemIndex = dict.getFieldIndex("system");
+ barrelIndex = dict.getFieldIndex("barrel");
+
+ barrelId = makeBarrelId(BARREL);
+ endcapPositiveId = makeBarrelId(ENDCAP_POSITIVE);
+ endcapNegativeId = makeBarrelId(ENDCAP_NEGATIVE);
+
+ vtxId = makeSubsysId(VTX);
+ vtxBarrelId = makeSubsysId(VTX,BARREL);
+ vtxEndcapPositiveId = makeSubsysId(VTX,ENDCAP_POSITIVE);
+ vtxEndcapNegativeId = makeSubsysId(VTX,ENDCAP_NEGATIVE);
+
+ sitId = makeSubsysId(SIT);
+ sitBarrelId = makeSubsysId(SIT,BARREL);
+ sitEndcapPositiveId = makeSubsysId(SIT,ENDCAP_POSITIVE);
+ sitEndcapNegativeId = makeSubsysId(SIT,ENDCAP_NEGATIVE);
+
+ tpcId = makeSubsysId(TPC);
+
+ ecalId = makeSubsysId(ECAL);
+ ecalBarrelId = makeSubsysId(ECAL,BARREL);
+ ecalEndcapPositiveId = makeSubsysId(ECAL,ENDCAP_POSITIVE);
+ ecalEndcapNegativeId = makeSubsysId(ECAL,ENDCAP_NEGATIVE);
+
+ hcalId = makeSubsysId(HCAL);
+ hcalBarrelId = makeSubsysId(HCAL,BARREL);
+ hcalEndcapPositiveId = makeSubsysId(HCAL,ENDCAP_POSITIVE);
+ hcalEndcapNegativeId = makeSubsysId(HCAL,ENDCAP_NEGATIVE);
+
+ muonId = makeSubsysId(MUON);
+ muonId = makeSubsysId(HCAL);
+ muonBarrelId = makeSubsysId(MUON,BARREL);
+ muonEndcapPositiveId = makeSubsysId(MUON,ENDCAP_POSITIVE);
+ muonEndcapNegativeId = makeSubsysId(MUON,ENDCAP_NEGATIVE);
+
+ forwardId = makeSubsysId(FORWARD);
+
+ lumiId = makeSubsysId(LUMI);
+ }
+
+ private IIdentifier makeSubsysId(int system) throws InvalidIndexException
+ {
+ IExpandedIdentifier expid =
+ new ExpandedIdentifier(getIdentifierDictionary().getNumberOfFields());
+ expid.setValue(systemIndex, system);
+ IIdentifier id = pack(expid);
+ return id;
+ }
+
+ private IIdentifier makeSubsysId(int system, int barrel) throws InvalidIndexException
+ {
+ IExpandedIdentifier expid =
+ new ExpandedIdentifier(getIdentifierDictionary().getNumberOfFields());
+ expid.setValue(systemIndex, system);
+ expid.setValue(barrelIndex, barrel);
+ IIdentifier id = pack(expid);
+ return id;
+ }
+
+ private IIdentifier makeBarrelId(int barrel) throws InvalidIndexException
+ {
+ IExpandedIdentifier expid =
+ new ExpandedIdentifier(getIdentifierDictionary().getNumberOfFields());
+ expid.setValue(barrelIndex, barrel);
+ IIdentifier id = pack(expid);
+ return id;
+ }
+
+ private boolean compareSystem(IIdentifier id, int system)
+ {
+ try {
+ return unpack(id).getValue(systemIndex) == system;
+ }
+ catch (InvalidIndexException x)
+ {
+ throw new RuntimeException(x);
+ }
+ }
+
+ public IIdentifier getBarrelId()
+ {
+ return barrelId;
+ }
+
+ public IIdentifier getEndcapPositiveId()
+ {
+ return endcapPositiveId;
+ }
+
+ public IIdentifier getEndcapNegativeId()
+ {
+ return endcapNegativeId;
+ }
+
+ public IIdentifier getVtxId()
+ {
+ return vtxId;
+ }
+
+ public IIdentifier getVtxBarrelId()
+ {
+ return vtxBarrelId;
+ }
+
+ public IIdentifier getVtxEndcapPositiveId()
+ {
+ return vtxEndcapPositiveId;
+ }
+
+ public IIdentifier getVtxEndcapNegativeId()
+ {
+ return vtxEndcapNegativeId;
+ }
+
+ public IIdentifier getSitId()
+ {
+ return sitId;
+ }
+
+ public IIdentifier getSitBarrelId()
+ {
+ return sitBarrelId;
+ }
+
+ public IIdentifier getSitEndcapPositiveId()
+ {
+ return sitEndcapPositiveId;
+ }
+
+ public IIdentifier getSitEndcapNegativeId()
+ {
+ return sitEndcapNegativeId;
+ }
+
+ public IIdentifier getTpcId()
+ {
+ return tpcId;
+ }
+
+ public IIdentifier getEcalId()
+ {
+ return ecalId;
+ }
+
+ public IIdentifier getEcalBarrelId()
+ {
+ return ecalBarrelId;
+ }
+
+ public IIdentifier getEcalEndcapNegativeId()
+ {
+ return ecalEndcapNegativeId;
+ }
+
+ public IIdentifier getEcalEndcapPositiveId()
+ {
+ return ecalEndcapPositiveId;
+ }
+
+ public IIdentifier getHcalId()
+ {
+ return hcalId;
+ }
+
+ public IIdentifier getHcalBarrelId()
+ {
+ return hcalBarrelId;
+ }
+
+ public IIdentifier getHcalEndcapNegativeId()
+ {
+ return hcalEndcapNegativeId;
+ }
+
+ public IIdentifier getHcalEndcapPositiveId()
+ {
+ return hcalEndcapPositiveId;
+ }
+
+ public IIdentifier getMuonId()
+ {
+ return muonId;
+ }
+
+ public IIdentifier getMuonBarrelId()
+ {
+ return muonBarrelId;
+ }
+
+ public IIdentifier getMuonEndcapNegativeId()
+ {
+ return muonEndcapNegativeId;
+ }
+
+ public IIdentifier getMuonEndcapPositiveId()
+ {
+ return muonEndcapPositiveId;
+ }
+
+ public IIdentifier getFowardId()
+ {
+ return forwardId;
+ }
+
+ public IIdentifier getLumiId()
+ {
+ return lumiId;
+ }
+
+ public boolean isBarrel(IIdentifier i)
+ {
+ try {
+ return unpack(i).getValue(barrelIndex) == BARREL;
+ }
+ catch (InvalidIndexException x)
+ {
+ throw new RuntimeException(x);
+ }
+ }
+
+ public boolean isEndcap(IIdentifier i)
+ {
+ return isEndcapPositive(i) || isEndcapNegative(i);
+ }
+
+ public boolean isEndcapPositive(IIdentifier i)
+ {
+ try {
+ return unpack(i).getValue(barrelIndex) == ENDCAP_POSITIVE;
+ }
+ catch (InvalidIndexException x)
+ {
+ throw new RuntimeException(x);
+ }
+ }
+
+ public boolean isEndcapNegative(IIdentifier i)
+ {
+ try {
+ return unpack(i).getValue(barrelIndex) == ENDCAP_NEGATIVE;
+ }
+ catch (InvalidIndexException x)
+ {
+ throw new RuntimeException(x);
+ }
+ }
+
+ public boolean isTracker(IIdentifier i)
+ {
+ return isVtx(i) || isTpc(i) || isSit(i);
+ }
+
+ public boolean isTrackerBarrel(IIdentifier i)
+ {
+ return isTracker(i) && isBarrel(i);
+ }
+
+ public boolean isTrackerEndcapPositive(IIdentifier i)
+ {
+ return isTracker(i) && isEndcapPositive(i);
+ }
+
+ public boolean isTrackerEndcapNegative(IIdentifier i)
+ {
+ return isTracker(i) && isEndcapNegative(i);
+ }
+
+ public boolean isCalorimeter(IIdentifier i)
+ {
+ return isEcal(i) || isHcal(i) || isMuon(i) || isForward(i) || isLumi(i);
+ }
+
+ public boolean isCalorimeterBarrel(IIdentifier i)
+ {
+ return isCalorimeter(i) && isBarrel(i);
+ }
+
+ public boolean isCalorimeterEndcapPositive(IIdentifier i)
+ {
+ return isCalorimeter(i) && isEndcapPositive(i);
+ }
+
+ public boolean isCalorimeterEndcapNegative(IIdentifier i)
+ {
+ return isCalorimeter(i) && isEndcapNegative(i);
+ }
+
+ public boolean isVtx(IIdentifier i)
+ {
+ return compareSystem(i,VTX);
+ }
+
+ public boolean isVtxBarrel(IIdentifier i)
+ {
+ return isVtx(i) && isBarrel(i);
+ }
+
+ public boolean isVtxEndcap(IIdentifier i)
+ {
+ return compareSystem(i,VTX) && isEndcap(i);
+ }
+
+ public boolean isVtxEndcapPositive(IIdentifier i)
+ {
+ return isVtx(i) && isEndcapPositive(i);
+ }
+
+ public boolean isVtxEndcapNegative(IIdentifier i)
+ {
+ return isVtx(i) && isEndcapNegative(i);
+ }
+
+ public boolean isSit(IIdentifier i)
+ {
+ return compareSystem(i,SIT);
+ }
+
+ public boolean isSitBarrel(IIdentifier i)
+ {
+ return isSit(i) && isBarrel(i);
+ }
+
+ public boolean isSitEndcap(IIdentifier i)
+ {
+ return isSit(i) && isEndcap(i);
+ }
+
+ public boolean isSitEndcapPositive(IIdentifier i)
+ {
+ return isSit(i) && isEndcapPositive(i);
+ }
+
+ public boolean isSitEndcapNegative(IIdentifier i)
+ {
+ return isSit(i) && isEndcapNegative(i);
+ }
+
+ public boolean isTpc(IIdentifier i)
+ {
+ return compareSystem(i,TPC);
+ }
+
+ public boolean isEcal(IIdentifier i)
+ {
+ return compareSystem(i,ECAL);
+ }
+
+ public boolean isEcalBarrel(IIdentifier i)
+ {
+ return isEcal(i) && isBarrel(i);
+ }
+
+ public boolean isEcalEndcap(IIdentifier i)
+ {
+ return compareSystem(i,ECAL) && isEndcap(i);
+ }
+
+ public boolean isEcalEndcapPositive(IIdentifier i)
+ {
+ return isEcal(i) && isEndcapPositive(i);
+ }
+
+ public boolean isEcalEndcapNegative(IIdentifier i)
+ {
+ return isEcal(i) && isEndcapNegative(i);
+ }
+
+ public boolean isHcal(IIdentifier i)
+ {
+ return compareSystem(i,HCAL);
+ }
+
+ public boolean isHcalBarrel(IIdentifier i)
+ {
+ return isHcal(i) && isBarrel(i);
+ }
+
+ public boolean isHcalEndcap(IIdentifier i)
+ {
+ return isHcal(i) && isEndcap(i);
+ }
+
+ public boolean isHcalEndcapPositive(IIdentifier i)
+ {
+ return isHcal(i) && isEndcapPositive(i);
+ }
+
+ public boolean isHcalEndcapNegative(IIdentifier i)
+ {
+ return isHcal(i) && isEndcapNegative(i);
+ }
+
+ public boolean isMuon(IIdentifier i)
+ {
+ return compareSystem(i,MUON);
+ }
+
+ public boolean isMuonBarrel(IIdentifier i)
+ {
+ return isMuon(i) && isBarrel(i);
+ }
+
+ public boolean isMuonEndcap(IIdentifier i)
+ {
+ return isMuon(i) && isEndcap(i);
+ }
+
+ public boolean isMuonEndcapPositive(IIdentifier i)
+ {
+ return isMuon(i) && isEndcapPositive(i);
+ }
+
+ public boolean isMuonEndcapNegative(IIdentifier i)
+ {
+ return isMuon(i) && isMuonEndcapNegative(i);
+ }
+
+ public boolean isForward(IIdentifier i)
+ {
+ return compareSystem(i,FORWARD);
+ }
+
+ public boolean isLumi(IIdentifier i)
+ {
+ return compareSystem(i,LUMI);
+ }
+}
\ No newline at end of file