Author: [log in to unmask]
Date: Wed Mar 9 11:43:24 2016
New Revision: 4278
Log:
[HPSJAVA-662] Remove tabs from java, xml and lcsim files.
Modified:
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalCellIDPrintDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalClusterPlots.java
java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalHitPlots.java
java/trunk/analysis/src/main/java/org/hps/analysis/ecal/FEEClusterPlotter.java
java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalFADCPlotsDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalTriggerPlotsDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSMCParticlePlotsDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripMollerEventsDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/DataTriggerSimDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerData.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerModule.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerDiagnosticDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterEvent.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterMatchedPair.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterStatModule.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/DetailedClusterEvent.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/DiagnosticSnapshot.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/GeneralStatModule.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/RunDiagStats.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerDiagStats.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerEvent.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerStatModule.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/event/TriggerPlotsModule.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/ComponentUtils.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/OutputLogger.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/Pair.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/PairTrigger.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/SinglesTrigger.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/Trigger.java
java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDiagnosticUtil.java
java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-3/compact.xml
java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4-1/compact.xml
java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4-1/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw.xml
java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4/compact.xml
java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L2-3-4_tu_rw.xml
java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-5-1/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw.xml
java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-5-2/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-HPS-EngRun2015-Nominal-v1-4-1-100k-L456_L123_L234_L345_L123_L456_tu_rwIter0Iter1Iter2Iter3Iter4Iter5.xml
java/trunk/detector-data/detectors/HPS-Proposal2014-v3-2pt2-0zOffset/compact.xml
java/trunk/detector-data/detectors/HPS-TestRun-v5/compact.xml
java/trunk/detector-data/detectors/HPS-TestRun-v6/compact.xml
java/trunk/detector-data/detectors/HPS-TestRun-v7-2/compact.xml
java/trunk/detector-data/detectors/HPS-TestRun-v7-3/compact.xml
java/trunk/detector-data/detectors/HPS-TestRun-v7/compact.xml
java/trunk/detector-data/detectors/HPS-TestRun-v8-4/compact.xml
java/trunk/detector-data/detectors/HPS-TestRun-v8-5/compact.xml
java/trunk/detector-data/detectors/HPS-TestRun-v8/compact.xml
java/trunk/detector-data/detectors/HPSTestRunTracker2014-v0/compact.xml
java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java
java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2014ConverterBase.java
java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTrackerConverter.java
java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/subdetector/HpsTracker2.java
java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/subdetector/SvtStereoLayer.java
java/trunk/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsTestRunSiSensor.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014JavaBuilder.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/IHPSTrackerJavaBuilder.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/IHPSTrackerLCDDBuilder.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/JavaGhostSurveyVolume.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/JavaSurveyVolume.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/LCDDGhostSurveyVolume.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/LCDDSurveyVolume.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/MilleParameter.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolumeImpl.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolumeVisualization.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SvtAlignmentConstantsReader.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSMuonCalorimeter2.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014.java
java/trunk/detector-model/src/main/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.java
java/trunk/detector-model/src/test/java/org/lcsim/detector/converter/compact/HPSTracker2ConverterTest.java
java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014LCDDTest.java
java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014LCDDTest.java
java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014v1LCDDTest.java
java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014v1SurveyLCDDTest.java
java/trunk/detector-model/src/test/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014Test.java
java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTest.xml
java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml
java/trunk/distribution/src/main/java/org/hps/HPSJavaProperties.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Association.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Cluster.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/EcalHit.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Event.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/io/EventManager.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/EventDisplayOutputDriver.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/LCIOBridgeDriver.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/DataFileViewer.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/FileViewer.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PDataEventViewer.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/Viewer.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/BooleanMap.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/ColorScale.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/CrystalEvent.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/CrystalListener.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/DatabaseCheck.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/GradientScale.java
java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/MultiGradientScale.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ClockSingleton.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCEcalReadoutDriver.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerVariableDriver.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/MollerTriggerDriver.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/OccupancyAnalysisDriver.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ReadoutTrigger.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/RingBuffer.java
java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TimeEvolutionEcalReadoutDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalConverterDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalEdepToTriggerConverterDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalOnlineRawConverter.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalOnlineRawConverterDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalPedestalCalculator.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalTimeWalk.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/IterateGainFactorDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterPositionCorrection.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterer.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterer.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterer.java
java/trunk/evio/src/main/java/org/hps/evio/DummyEventBuilder.java
java/trunk/evio/src/main/java/org/hps/evio/EcalHitWriter.java
java/trunk/evio/src/main/java/org/hps/evio/EvioReader.java
java/trunk/evio/src/main/java/org/hps/evio/RfFitFunction.java
java/trunk/evio/src/main/java/org/hps/evio/RfHit.java
java/trunk/evio/src/main/java/org/hps/evio/TestRunReconToEvio.java
java/trunk/evio/src/test/java/org/hps/evio/LCSimEngRunEventBuilderTest.java
java/trunk/evio/src/test/java/org/hps/evio/LCSimTestRunEventBuilderTest.java
java/trunk/evio/src/test/java/org/hps/evio/SvtEvioReaderTest.java
java/trunk/integration-tests/src/test/java/org/hps/test/it/SimpleSvtReadoutTest.java
java/trunk/integration-tests/src/test/resources/org/hps/ecalreadoutsim/EcalReadoutSimTest.lcsim
java/trunk/integration-tests/src/test/resources/org/hps/steering/test/Dummy.lcsim
java/trunk/integration-tests/src/test/resources/org/hps/steering/test/EcalReadoutSimTest.lcsim
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTCellIDPrintDriver.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTHitRecoCorrelations.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTHitReconstructionPlots.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtTimingInPlots.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/BasicMonitoringPlotsDriver.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplayWithRawWaveform.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalFeeMonitor.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalPedestalViewer.java
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalWindowPlotsXY.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTablePanel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTriggerTablePanel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTwoColumnTablePanel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ClusterTablePanel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ComponentUtils.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/DiagnosticUpdatable.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/EfficiencyTablePanel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/PairTablePanel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ShifterTrigPanel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ShifterTrigWindow.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/SinglesTablePanel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/TableTextModel.java
java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/TriggerDiagnosticGUIDriver.java
java/trunk/parent/pom.xml
java/trunk/recon/src/main/java/org/hps/recon/filtering/CosmicPMTFilter.java
java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalGainCalibFilter.java
java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java
java/trunk/recon/src/main/java/org/hps/recon/filtering/MinimumHitsFilter.java
java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserScalerAndEpicsFilter.java
java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
java/trunk/recon/src/main/java/org/hps/recon/particle/SimpleParticleID.java
java/trunk/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java
java/trunk/recon/src/main/java/org/hps/recon/vertexing/BaseSimpleVertexer.java
java/trunk/recon/src/main/java/org/hps/recon/vertexing/BilliorVertex.java
java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoLineVertexer.java
java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoParticleVertexer.java
java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoTrackFringeVertexer.java
java/trunk/recon/src/test/java/org/hps/recon/particle/HpsReconParticleDriverTest.java
java/trunk/record-util/src/main/java/org/hps/record/daqconfig/DAQConfigDriver.java
java/trunk/record-util/src/main/java/org/hps/record/daqconfig/EvioDAQParser.java
java/trunk/record-util/src/main/java/org/hps/record/daqconfig/FADCConfig.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPData.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPNumberedTrigger.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPPairTrigger.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPSinglesTrigger.java
java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerModule.java
java/trunk/steering-files/src/main/resources/org/hps/steering/analysis/StarterAnalysis.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitoringApp.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceStandalone.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringFinal.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringOnly.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014TightPairs.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutNoPileup.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToEvio.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014TruthReadoutToLcio.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/readout/LcioToEvio.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/readout/TestRunNoPileup.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToEvio.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngineeringRun2015FullRecon.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedAnalysisFromEvio.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedOnlineOfflineComparison.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/ClusterRecon.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EcalFeeViewer.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EcalSimReadout.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngRun2015FullReconMC_FEE.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngineeringRun2015EcalOnly.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngineeringRun2015_FEEIter_Filter.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/QuickEcalReadout.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/EcalScoring.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/HitTimes.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/PairsSkimmer.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/SmallHits.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/TridentMCSkim.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/ecal_fadc_bkgd.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/raw_triggers.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/phansson/TestRunOfflineRecon.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/rafo/TestSteering.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/MollerBeamtilt.lcsim
java/trunk/tracking/src/main/java/org/hps/recon/tracking/DumbShaperFit.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/NearestNeighborRMSClusterer.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/NoiselessReadoutChip.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/SVTBadChannelFilterDriver.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackResidualsData.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackTimeData.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/WTrack.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLEventData.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLFileIO.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLStripClusterData.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblData.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblPoint.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblUtils.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/HpsGblRefitter.java
java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/TruthResiduals.java
java/trunk/tracking/src/main/java/org/hps/svt/alignment/BuildCompact.java
java/trunk/tracking/src/main/java/org/hps/svt/alignment/BuildMillepedeCompact.java
java/trunk/tracking/src/main/java/org/hps/svt/alignment/MillepedeCompactDump.java
java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Test-All.xml
java/trunk/tracking/src/test/java/org/hps/recon/tracking/HelicalTrackHitDriverTest.java
java/trunk/tracking/src/test/java/org/hps/recon/tracking/TruthResidualTest.java
java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitFunction.java
java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitterDriver.java
java/trunk/users/src/main/java/org/hps/users/baltzell/RfHit.java
java/trunk/users/src/main/java/org/hps/users/celentan/LedOnlineOfflineComparisonDriver.java
java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java
java/trunk/users/src/main/java/org/hps/users/celentan/StripChartTest.java
java/trunk/users/src/main/java/org/hps/users/holly/ClusterDriver.java
java/trunk/users/src/main/java/org/hps/users/holly/EcalClusterICPosition.java
java/trunk/users/src/main/java/org/hps/users/holly/EcalClustererCosmics.java
java/trunk/users/src/main/java/org/hps/users/holly/EcalRawConverter.java
java/trunk/users/src/main/java/org/hps/users/holly/HPSEcalClusterIC.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/ClusterAnalysisDriver.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/CountTriggersDriver.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/EvioAnalysis.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/FADCAnalysisDriver.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/HPSEcalDataPlotsDriver.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/InvariantMassPairDriver.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/MTETriggerPlotsFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/ParticleMCAnalysisDriver.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/PlotsFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/RafoAnalysis.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/TridentTrackDriver.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerPlotsModule.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerProcessAnalysisDriver.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/AddPlots.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot1D.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot2D.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotFormatModule.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotsFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/InvariantMassPlotsFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/MTEPlotFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/MTETriggerPlotsFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/ParticleMCAnalysisPlotsFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/RafoTridentFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/SingleTriggerPlotsFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/TridentTrackFormatter.java
java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/TriggerPlotsFormat.java
java/trunk/users/src/main/java/org/hps/users/luca/FADCVariableTriggerFEEDriver.java
java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger.java
java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger2.java
java/trunk/users/src/main/java/org/hps/users/luca/LCIOReadScript.java
java/trunk/users/src/main/java/org/hps/users/luca/rate.java
java/trunk/users/src/main/java/org/hps/users/luca/ratesim.java
java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalAnalogPrintDriver.java
java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalDigitalPrintDriver.java
java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalRawTrackerHitPrintDriver.java
java/trunk/users/src/main/java/org/hps/users/meeg/HPSGenericRawTrackerHitPrintDriver.java
java/trunk/users/src/main/java/org/hps/users/meeg/LCIOTrackAnalysis.java
java/trunk/users/src/main/java/org/hps/users/mgraham/HPSTrackerHit.java
java/trunk/users/src/main/java/org/hps/users/mgraham/SVTRawTrackerHitThresholdDriver.java
java/trunk/users/src/main/java/org/hps/users/omoreno/EcalScoringPlaneDriver.java
java/trunk/users/src/main/java/org/hps/users/omoreno/ExtrapolationAnalysis.java
java/trunk/users/src/main/java/org/hps/users/omoreno/LheToStdhep.java
java/trunk/users/src/main/java/org/hps/users/omoreno/PlotUtils.java
java/trunk/users/src/main/java/org/hps/users/omoreno/ReconstructedParticleChecker.java
java/trunk/users/src/main/java/org/hps/users/omoreno/SharedHitAnalysis.java
java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java
java/trunk/users/src/main/java/org/hps/users/omoreno/SvtDataRates.java
java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitCorrelations.java
java/trunk/users/src/main/java/org/hps/users/omoreno/SvtQA.java
java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java
java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackRecoEfficiency.java
java/trunk/users/src/main/java/org/hps/users/omoreno/TestRunTrackReconEfficiency.java
java/trunk/users/src/main/java/org/hps/users/phansson/FastTrackResidualDriver.java
java/trunk/users/src/main/java/org/hps/users/phansson/GblResidualDriver.java
java/trunk/users/src/main/java/org/hps/users/phansson/SimpleResiduals.java
java/trunk/users/src/main/java/org/hps/users/phansson/gbl/GBLDriver.java
java/trunk/users/src/main/java/org/hps/users/phansson/gbl/HpsGblFitter.java
java/trunk/users/src/main/java/org/hps/users/phansson/testrun/TrigRateDriver.java
java/trunk/users/src/main/java/org/hps/users/phansson/tools/TrackingGeometryChecker.java
java/trunk/users/src/main/java/org/hps/users/rafo/test1.java
java/trunk/users/src/main/java/org/hps/users/spaul/GetChargeFromScalersMultirun.java
java/trunk/users/src/main/java/org/hps/users/spaul/HitrateHistograms.java
java/trunk/users/src/main/java/org/hps/users/spaul/PulserFilter.java
java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java
java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/BinGenerator.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/CustomBinning.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/DisplayHistograms.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/EcalUtil.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ExtractFormFactors.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FEESpectrumGenerator.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FormFactor.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MottIntegral.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MultipleScattering.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinning.java
java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinningXY.java
java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitAllProfiles.java
java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitMollerPyPzGraphs.java
java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltAnalysis.java
java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltFitter.java
java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerStdhepTest.java
java/trunk/util/src/main/java/org/hps/util/ConvertToStdhep.java
java/trunk/util/src/main/java/org/hps/util/DumpLHEEventsToASCII.java
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java Wed Mar 9 11:43:24 2016
@@ -102,10 +102,10 @@
@Override
protected void detectorChanged(Detector detector) {
- BeamEnergyCollection beamEnergyCollection =
- this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();
- double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
- //this.getConditionsManager().getCachedConditions(org.hps.conditions.EcalChannelCollection.class, "ecal_channels").
+ BeamEnergyCollection beamEnergyCollection =
+ this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();
+ double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
+ //this.getConditionsManager().getCachedConditions(org.hps.conditions.EcalChannelCollection.class, "ecal_channels").
LOGGER.info("EcalMonitoring::detectorChanged Setting up the plotter");
aida.tree().cd("/");
if (fillHitPlots) {
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java Wed Mar 9 11:43:24 2016
@@ -106,11 +106,11 @@
@Override
protected void detectorChanged(Detector detector) {
- BeamEnergyCollection beamEnergyCollection =
- this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();
- double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
-
-
+ BeamEnergyCollection beamEnergyCollection =
+ this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();
+ double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
+
+
LOGGER.info("Setting up the plotter");
aida.tree().cd("/");
String trkType="SeedTrack/";
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java Wed Mar 9 11:43:24 2016
@@ -322,8 +322,8 @@
beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2);
BeamEnergyCollection beamEnergyCollection =
- this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();
- ebeam = beamEnergyCollection.get(0).getBeamEnergy();
+ this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();
+ ebeam = beamEnergyCollection.get(0).getBeamEnergy();
aida.tree().cd("/");
String trkType = "SeedTrack/";
if (isGBL) {
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java Wed Mar 9 11:43:24 2016
@@ -8,8 +8,8 @@
import hep.aida.IHistogram2D;
import hep.aida.IPlotter;
import hep.aida.IPlotterStyle;
+import hep.physics.vec.BasicHep3Matrix;
import hep.physics.vec.Hep3Vector;
-import hep.physics.vec.BasicHep3Matrix;
import hep.physics.vec.VecOp;
import java.io.IOException;
@@ -18,6 +18,7 @@
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
+
import org.hps.conditions.beam.BeamEnergy.BeamEnergyCollection;
import org.hps.recon.tracking.TrackType;
import org.hps.recon.tracking.TrackUtils;
@@ -33,632 +34,730 @@
import org.lcsim.recon.tracking.seedtracker.SeedTrack;
/**
- * DQM driver V0 particles (i.e. e+e- pars) plots things like number of vertex
- * position an mass
+ * DQM driver V0 particles (i.e. e+e- pars) plots things like number of vertex position an mass
*
* @author mgraham on May 14, 2014
- *
*/
public class V0Monitoring extends DataQualityMonitor {
- private static Logger LOGGER = Logger.getLogger(V0Monitoring.class.getPackage().getName());
-
- String finalStateParticlesColName = "FinalStateParticles";
- String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
- String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
- String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates";
- String[] fpQuantNames = {"nV0_per_Event", "avg_BSCon_mass", "avg_BSCon_Vx", "avg_BSCon_Vy", "avg_BSCon_Vz", "sig_BSCon_Vx", "sig_BSCon_Vy", "sig_BSCon_Vz", "avg_BSCon_Chi2"};
- //some counters
- int nRecoEvents = 0;
- int nTotV0 = 0;
- int nTot2Ele = 0;
- //some summers
- double sumMass = 0.0;
- double sumVx = 0.0;
- double sumVy = 0.0;
- double sumVz = 0.0;
- double sumChi2 = 0.0;
-
- /* V0 Quantities */
- /* Mass, vertex, chi^2 of fit */
- /* unconstrained */
- IHistogram1D unconMass;
- IHistogram1D unconVx;
- IHistogram1D unconVy;
- IHistogram1D unconVz;
- IHistogram1D unconChi2;
- IHistogram2D unconVzVsChi2;
- IHistogram2D unconChi2VsTrkChi2;
- /* beamspot constrained */
-
- IHistogram1D nV0;
-
- IHistogram1D v0Time;
- IHistogram1D v0Dt;
- IHistogram2D trigTimeV0Time;
- IHistogram1D trigTime;
-
- IHistogram1D bsconMass;
- IHistogram1D bsconVx;
- IHistogram1D bsconVy;
- IHistogram1D bsconVz;
- IHistogram1D bsconChi2;
- IHistogram2D bsconVzVsChi2;
- IHistogram2D bsconChi2VsTrkChi2;
- /* target constrained */
- IHistogram1D tarconMass;
- IHistogram1D tarconVx;
- IHistogram1D tarconVy;
- IHistogram1D tarconVz;
- IHistogram1D tarconChi2;
- IHistogram2D tarconVzVsChi2;
- IHistogram2D tarconChi2VsTrkChi2;
-
- IHistogram2D pEleVspPos;
- IHistogram1D pEle;
- IHistogram1D pPos;
-
- IHistogram2D pEleVspPosWithCut;
- IHistogram2D pyEleVspyPos;
- IHistogram2D pxEleVspxPos;
-
- IHistogram2D VtxZVsMass;
- IHistogram2D VtxYVsVtxZ;
- IHistogram2D VtxXVsVtxZ;
- IHistogram2D VtxXVsVtxY;
- IHistogram2D VtxXVsVtxPx;
- IHistogram2D VtxYVsVtxPy;
- IHistogram2D VtxZVsVtxPx;
- IHistogram2D VtxZVsVtxPy;
- IHistogram2D VtxZVsVtxPz;
-
- IHistogram2D VtxZVsL1Iso;
- IHistogram2D VtxZVsTrkChi2;
-
- IHistogram2D pEleVspEle;
- IHistogram2D phiEleVsphiEle;
- IHistogram2D pyEleVspyEle;
- IHistogram2D pxEleVspxEle;
- IHistogram2D pEleVspEleNoBeam;
- IHistogram2D pyEleVspyEleNoBeam;
- IHistogram2D pxEleVspxEleNoBeam;
- IHistogram2D pEleVspEleMoller;
- IHistogram2D pEleVsthetaMoller;
- IHistogram2D thetaEleVsthetaMoller;
- IHistogram2D pEleVspEleBeamBeam;
- IHistogram2D pEleVsthetaBeamBeam;
- IHistogram2D thetaEleVsthetaBeamBeam;
-
- IHistogram1D mollerMass;
- IHistogram1D mollerMassVtxCut;
- IHistogram1D mollerVx;
- IHistogram1D mollerVy;
- IHistogram1D mollerVz;
- IHistogram1D mollerVzVtxCut;
- IHistogram2D mollerXVsVtxZ;
- IHistogram2D mollerYVsVtxZ;
- IHistogram2D mollerXVsVtxY;
-
- IHistogram1D mollerUx;
- IHistogram1D mollerUy;
-
-
-
- IHistogram1D sumChargeHisto;
- IHistogram1D numChargeHisto;
-
- private final String plotDir = "V0Monitoring/";
-
- private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
-
- double maxFactor = 1.25;
-
-
- double thetaMax = 0.06;
- double thetaMin = 0.015;
-
-
-
- double feeMomentumCut, v0ESumMinCut, v0MaxPCut, v0ESumMaxCut,
- molPSumMin, molPSumMax, beambeamCut;
-
-
-
- @Override
- protected void detectorChanged(Detector detector) {
-
- BeamEnergyCollection beamEnergyCollection =
- this.getConditionsManager().getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();
- double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
- feeMomentumCut = 0.75*beamEnergy; //GeV
-
- v0ESumMinCut = 0.8 * beamEnergy;
- v0ESumMaxCut = 1.25 * beamEnergy;
-
- v0MaxPCut = 1.05*beamEnergy;//GeV
- molPSumMin = 0.80*beamEnergy;
- molPSumMax = 1.25*beamEnergy;
- beambeamCut = 0.80*beamEnergy;
-
-
-
- beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2);
-
- LOGGER.info("Setting up the plotter");
- aida.tree().cd("/");
- String xtra = "Extras";
- String trkType = "SeedTrack/";
- if (isGBL)
- trkType = "GBLTrack/";
-
- double maxMass = .2*beamEnergy;
- double maxMassMoller = .1*Math.sqrt(beamEnergy);
- /* V0 Quantities */
- /* Mass, vertex, chi^2 of fit */
- /* unconstrained */
- unconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Invariant Mass (GeV)", 100, 0, maxMass);
- unconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
- unconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
- unconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
- unconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Chi2", 25, 0, 25);
- unconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
- unconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
- /* beamspot constrained */
- bsconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Mass (GeV)", 100, 0, maxMass);
- bsconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
- bsconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
- bsconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
- bsconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2", 25, 0, 25);
- bsconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
- bsconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
- /* target constrained */
- tarconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Mass (GeV)", 100, 0, maxMass);
- tarconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vx (mm)", 50, -1, 1);
- tarconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vy (mm)", 50, -1, 1);
- tarconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vz (mm)", 50, -10, 10);
- tarconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Chi2", 25, 0, 25);
- tarconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
- tarconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
-
- nV0 = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of V0 per event", 10, 0, 10);
- v0Time = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 mean time", 100, -25, 25);
- v0Dt = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 time difference", 100, -25, 25);
- trigTimeV0Time = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase vs. V0 mean time", 100, -25, 25, 6, 0, 24);
- trigTime = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase", 6, 0, 24);
-
- pEleVspPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
-
-
- pEle = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e)", 50, 0, beamEnergy * maxFactor);
- pPos = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(p)", 50, 0, beamEnergy * maxFactor);
-
- pEleVspPosWithCut = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p): Radiative", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
- pyEleVspyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Py(e) vs Py(p)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
- pxEleVspxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Px(e) vs Px(p)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
- VtxZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Mass", 50, 0, maxMass, 50, -50, 80);
- VtxXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vz", 100, -10, 10, 100, -50, 80);
- VtxYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Vz", 100, -5, 5, 100, -50, 80);
- VtxXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vy", 100, -10, 10, 100, -5, 5);
- VtxXVsVtxPx = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Px", 100, -0.1, 0.1, 100, -10, 10);
- VtxYVsVtxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Py", 100, -0.1, 0.1, 100, -5, 5);
- VtxZVsVtxPx = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Px", 100, -0.1, 0.1, 100, -50, 80);
- VtxZVsVtxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Py", 100, -0.1, 0.1, 100, -50, 80);
- VtxZVsVtxPz = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Pz", 100, 0.0, beamEnergy * maxFactor, 100, -50, 80);
- VtxZVsL1Iso = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs L1 Isolation", 100, 0.0, 5.0, 50, -50, 80);
- VtxZVsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Track Chi2", 50, 0, 50, 50, -50, 80);
- phiEleVsphiEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/phi(e) vs phi(e)", 50, -Math.PI, Math.PI, 50, -Math.PI, Math.PI);
- pyEleVspyEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
- pxEleVspxEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e)", 50, -0.02*beamEnergy, 0.06*beamEnergy, 50, -0.02*beamEnergy, 0.06*beamEnergy);
-
- // electron vs electron momentum with different cuts
- // 1) no cut
- // 2) cut out FEE
- // 3) cut out FEE and also cut on momentum sum
- // 4) cut out everything except FEE coincidentals
- pEleVspEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
- pEleVspEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) NoBeam", 50, 0, beambeamCut, 50, 0, beambeamCut);
- pEleVspEleMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) Moller", 50, 0, beambeamCut, 50, 0, beambeamCut);
- pEleVspEleBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, beambeamCut, beamEnergy * maxFactor);
-
- pyEleVspyEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e) NoBeam", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
- pxEleVspxEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e) NoBeam", 50, -0.02*beamEnergy, 0.06*beamEnergy, 50, -0.02*beamEnergy, 0.06*beamEnergy);
- sumChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Total Charge of Event", 5, -2, 3);
- numChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of Charged Particles", 6, 0, 6);
-
- pEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs Theta Moller", 50, 0, beambeamCut, 50, thetaMin, thetaMax);
- thetaEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Theta vs Theta Moller", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
- pEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs Theta BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, thetaMin, thetaMax);
- thetaEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Theta vs Theta BeamBeam", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
-
- mollerMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV)", 100, 0, maxMassMoller);
- mollerMassVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV): VtxCut", 100, 0, maxMassMoller);
- mollerVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx (mm)", 50, -10, 10);
- mollerVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy (mm)", 50, -2, 2);
- mollerVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm)", 50, -50, 50);
- mollerVzVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm): VtxCut", 50, -50, 50);
- mollerXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx vs Vz", 100, -5, 5, 100, -50, 50);
- mollerYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy vs Vz", 100, -2, 2, 100, -50, 50);
- mollerXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx vs Vy", 100, -5, 5, 100, -2, 2);
-
- mollerUx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Ux", 100, .015, .045);
- mollerUy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Uy", 100, -.01, .01);
-
- mollerHiP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(high)", 100, 0, beamEnergy*maxFactor);
- mollerLoP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(low)", 100, 0, beamEnergy*maxFactor);
-
- mollerEitherP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(either)", 100, 0, beamEnergy*maxFactor);
- mollerPsum = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Psum", 100, 0, beamEnergy*maxFactor);
-
- }
-
- IHistogram1D mollerHiP, mollerLoP, mollerEitherP, mollerPsum;
-
- @Override
- public void process(EventHeader event) {
- /* make sure everything is there */
- if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName))
- return;
- if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName))
- return;
- if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName))
- return;
- if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName))
- return;
-
- //check to see if this event is from the correct trigger (or "all");
- if (!matchTrigger(event))
- return;
-
- nRecoEvents++;
-
- RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
- RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);
-
- List<ReconstructedParticle> unonstrainedV0List = event.get(ReconstructedParticle.class, unconstrainedV0CandidatesColName);
- for (ReconstructedParticle uncV0 : unonstrainedV0List) {
- if (isGBL != TrackType.isGBL(uncV0.getType()))
- continue;
- Vertex uncVert = uncV0.getStartVertex();
- Hep3Vector pVtxRot = VecOp.mult(beamAxisRotation, uncV0.getMomentum());
- Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, uncVert.getPosition());
- double theta = Math.acos(pVtxRot.z() / pVtxRot.magnitude());
- double phi = Math.atan2(pVtxRot.y(), pVtxRot.x());
- unconVx.fill(vtxPosRot.x());
- unconVy.fill(vtxPosRot.y());
- unconVz.fill(vtxPosRot.z());
- unconMass.fill(uncV0.getMass());
- unconChi2.fill(uncVert.getChi2());
- unconVzVsChi2.fill(uncVert.getChi2(), vtxPosRot.z());
- unconChi2VsTrkChi2.fill(Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1).getTracks().get(0).getChi2()), uncVert.getChi2());
-
- VtxZVsMass.fill(uncV0.getMass(), vtxPosRot.z());
- VtxXVsVtxZ.fill(vtxPosRot.x(), vtxPosRot.z());
- VtxYVsVtxZ.fill(vtxPosRot.y(), vtxPosRot.z());
- VtxXVsVtxY.fill(vtxPosRot.x(), vtxPosRot.y());
- VtxXVsVtxPx.fill(pVtxRot.x(), vtxPosRot.x());
- VtxYVsVtxPy.fill(pVtxRot.y(), vtxPosRot.y());
- VtxZVsVtxPx.fill(pVtxRot.x(), vtxPosRot.z());
- VtxZVsVtxPy.fill(pVtxRot.y(), vtxPosRot.z());
- VtxZVsVtxPz.fill(pVtxRot.z(), vtxPosRot.z());
-
- //this always has 2 tracks.
- List<ReconstructedParticle> trks = uncV0.getParticles();
- // Track ele = trks.get(0).getTracks().get(0);
- // Track pos = trks.get(1).getTracks().get(0);
- // //if track #0 has charge>0 it's the electron! This seems mixed up, but remember the track
- // //charge is assigned assuming a positive B-field, while ours is negative
- // if (trks.get(0).getCharge() > 0) {
- // pos = trks.get(0).getTracks().get(0);
- // ele = trks.get(1).getTracks().get(0);
- // }
- // aida.histogram2D(plotDir + trkType + triggerType + "/" + "P(e) vs P(p)").fill(getMomentum(ele), getMomentum(pos));
- // aida.histogram2D(plotDir + trkType + triggerType + "/" + "Px(e) vs Px(p)").fill(ele.getTrackStates().get(0).getMomentum()[1], pos.getTrackStates().get(0).getMomentum()[1]);
- // aida.histogram2D(plotDir + trkType + triggerType + "/" + "Py(e) vs Py(p)").fill(ele.getTrackStates().get(0).getMomentum()[2], pos.getTrackStates().get(0).getMomentum()[2]);
- ReconstructedParticle ele = trks.get(0);
- ReconstructedParticle pos = trks.get(1);
- //ReconParticles have the charge correct.
- if (trks.get(0).getCharge() > 0) {
- pos = trks.get(0);
- ele = trks.get(1);
- }
- if (ele.getCharge() < 0 && pos.getCharge() > 0) {
- VtxZVsTrkChi2.fill(Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1).getTracks().get(0).getChi2()), uncVert.getPosition().z());
-
- Double[] eleIso = TrackUtils.getIsolations(ele.getTracks().get(0), hitToStrips, hitToRotated);
- Double[] posIso = TrackUtils.getIsolations(pos.getTracks().get(0), hitToStrips, hitToRotated);
- if (eleIso[0] != null && posIso[0] != null) {
- double eleL1Iso = Math.min(Math.abs(eleIso[0]), Math.abs(eleIso[1]));
- double posL1Iso = Math.min(Math.abs(posIso[0]), Math.abs(posIso[1]));
- double minL1Iso = Math.min(eleL1Iso, posL1Iso);
- VtxZVsL1Iso.fill(minL1Iso, uncVert.getPosition().z());
- }
-
- double pe = ele.getMomentum().magnitude();
- double pp = pos.getMomentum().magnitude();
- Hep3Vector pEleRot = VecOp.mult(beamAxisRotation, ele.getMomentum());
- Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, pos.getMomentum());
-
- pEleVspPos.fill(pe, pp);
- pEle.fill(pe);
- pPos.fill(pp);
-
-
- pxEleVspxPos.fill(pEleRot.x(), pPosRot.x());
- pyEleVspyPos.fill(pEleRot.y(), pPosRot.y());
- if (pe < v0MaxPCut && pp < v0MaxPCut && (pe + pp) > v0ESumMinCut && (pe + pp) < v0ESumMaxCut)//enrich radiative-like events
-
- pEleVspPosWithCut.fill(pe, pp);
- }
-
- double eleT = TrackUtils.getTrackTime(ele.getTracks().get(0), hitToStrips, hitToRotated);
- double posT = TrackUtils.getTrackTime(pos.getTracks().get(0), hitToStrips, hitToRotated);
- double meanT = (eleT + posT) / 2.0;
- v0Time.fill(meanT);
- v0Dt.fill(eleT - posT);
- trigTimeV0Time.fill(meanT, event.getTimeStamp() % 24);
- trigTime.fill(event.getTimeStamp() % 24);
- }
-
- List<ReconstructedParticle> beamConstrainedV0List = event.get(ReconstructedParticle.class, beamConV0CandidatesColName);
- nV0.fill(beamConstrainedV0List.size());
- for (ReconstructedParticle bsV0 : beamConstrainedV0List) {
-
- if (isGBL != TrackType.isGBL(bsV0.getType()))
- continue;
- nTotV0++;
- Vertex bsVert = bsV0.getStartVertex();
- Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, bsVert.getPosition());
- bsconVx.fill(vtxPosRot.x());
- bsconVy.fill(vtxPosRot.y());
- bsconVz.fill(vtxPosRot.z());
- bsconMass.fill(bsV0.getMass());
- bsconChi2.fill(bsVert.getChi2());
- bsconVzVsChi2.fill(bsVert.getChi2(), vtxPosRot.z());
- bsconChi2VsTrkChi2.fill(Math.max(bsV0.getParticles().get(0).getTracks().get(0).getChi2(), bsV0.getParticles().get(1).getTracks().get(0).getChi2()), bsVert.getChi2());
- sumMass += bsV0.getMass();
- sumVx += vtxPosRot.x();
- sumVy += vtxPosRot.y();
- sumVz += vtxPosRot.z();
- sumChi2 += bsVert.getChi2();
- }
-
- List<ReconstructedParticle> targetConstrainedV0List = event.get(ReconstructedParticle.class, targetV0ConCandidatesColName);
- for (ReconstructedParticle tarV0 : targetConstrainedV0List) {
-
- if (isGBL != TrackType.isGBL(tarV0.getType()))
- continue;
-
- Vertex tarVert = tarV0.getStartVertex();
- Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, tarVert.getPosition());
- tarconVx.fill(vtxPosRot.x());
- tarconVy.fill(vtxPosRot.y());
- tarconVz.fill(vtxPosRot.z());
- tarconMass.fill(tarV0.getMass());
- tarconChi2.fill(tarVert.getChi2());
- tarconVzVsChi2.fill(tarVert.getChi2(), vtxPosRot.z());
- tarconChi2VsTrkChi2.fill(Math.max(tarV0.getParticles().get(0).getTracks().get(0).getChi2(), tarV0.getParticles().get(1).getTracks().get(0).getChi2()), tarVert.getChi2());
- }
- List<ReconstructedParticle> finalStateParticles = event.get(ReconstructedParticle.class, finalStateParticlesColName);
- if (debug)
- LOGGER.info("This events has " + finalStateParticles.size() + " final state particles");
-
- ReconstructedParticle ele1 = null;
- ReconstructedParticle ele2 = null;
- int sumCharge = 0;
- int numChargedParticles = 0;
- for (ReconstructedParticle fsPart : finalStateParticles) {
- if (isGBL != TrackType.isGBL(fsPart.getType()))
- continue;
- if (debug)
- LOGGER.info("PDGID = " + fsPart.getParticleIDUsed() + "; charge = " + fsPart.getCharge() + "; pz = " + fsPart.getMomentum().x());
- double charge = fsPart.getCharge();
- sumCharge += charge;
- if (charge != 0) {
- numChargedParticles++;
- if (charge < 1)
- if (ele1 == null)
- ele1 = fsPart;
- else if (!hasSharedStrips(ele1, fsPart, hitToStrips, hitToRotated))
- ele2 = fsPart;
- }
- }
- sumChargeHisto.fill(sumCharge);
- numChargeHisto.fill(numChargedParticles);
-
- if (ele1 != null && ele2 != null) {
- Hep3Vector p1 = VecOp.mult(beamAxisRotation, ele1.getMomentum());
- Hep3Vector p2 = VecOp.mult(beamAxisRotation, ele2.getMomentum());
- // Hep3Vector beamAxis = new BasicHep3Vector(Math.sin(0.0305), 0, Math.cos(0.0305));
- // LOGGER.info(p1);
- // LOGGER.info(VecOp.mult(rot, p1));
-
- double theta1 = Math.acos(p1.z() / p1.magnitude());
- double theta2 = Math.acos(p2.z() / p2.magnitude());
- double phi1 = Math.atan2(p1.y(), p1.x());
- double phi2 = Math.atan2(p2.y(), p2.x());
- phiEleVsphiEle.fill(phi1, phi2);
- pEleVspEle.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
- pyEleVspyEle.fill(ele1.getMomentum().y(), ele2.getMomentum().y());
- pxEleVspxEle.fill(ele1.getMomentum().x(), ele2.getMomentum().x());
- //remove beam electrons
- if (ele1.getMomentum().magnitude() < beambeamCut && ele2.getMomentum().magnitude() < beambeamCut) {
- pEleVspEleNoBeam.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
- pyEleVspyEleNoBeam.fill(ele1.getMomentum().y(), ele2.getMomentum().y());
- pxEleVspxEleNoBeam.fill(ele1.getMomentum().x(), ele2.getMomentum().x());
- }
- //look at beam-beam events
- if (ele1.getMomentum().magnitude() > beambeamCut && ele2.getMomentum().magnitude() > beambeamCut) {
- pEleVspEleBeamBeam.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
- pEleVsthetaBeamBeam.fill(p1.magnitude(), theta1);
- pEleVsthetaBeamBeam.fill(p2.magnitude(), theta2);
- thetaEleVsthetaBeamBeam.fill(theta1, theta2);
- }
-
- //look at "Moller" events (if that's what they really are
- if (ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() > molPSumMin
- && ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() < molPSumMax
- && (p1.magnitude() < beambeamCut && p2.magnitude() < beambeamCut)) {
-
- Track ele1trk = ele1.getTracks().get(0);
- Track ele2trk = ele2.getTracks().get(0);
- SeedTrack stEle1 = TrackUtils.makeSeedTrackFromBaseTrack(ele1trk);
- SeedTrack stEle2 = TrackUtils.makeSeedTrackFromBaseTrack(ele2trk);
- BilliorTrack btEle1 = new BilliorTrack(stEle1.getSeedCandidate().getHelix());
- BilliorTrack btEle2 = new BilliorTrack(stEle2.getSeedCandidate().getHelix());
- BilliorVertex bv = fitVertex(btEle1, btEle2, TrackUtils.getBField(event.getDetector()).magnitude());
- // LOGGER.info("ee vertex: "+bv.toString());
- double invMass = bv.getParameters().get("invMass");
- mollerMass.fill(invMass);
- mollerVx.fill(bv.getPosition().x());
- mollerVy.fill(bv.getPosition().y());
- mollerVz.fill(bv.getPosition().z());
- mollerXVsVtxZ.fill(bv.getPosition().x(), bv.getPosition().z());
- mollerYVsVtxZ.fill(bv.getPosition().y(), bv.getPosition().z());
- mollerXVsVtxY.fill(bv.getPosition().x(), bv.getPosition().y());
-
- double ux = (ele1.getMomentum().x()+ele2.getMomentum().x())/(ele1.getMomentum().z()+ele2.getMomentum().z());
- double uy = (ele1.getMomentum().y()+ele2.getMomentum().y())/(ele1.getMomentum().z()+ele2.getMomentum().z());
- mollerUx.fill(ux);
- mollerUy.fill(uy);
-
- //higher and lower energy electrons in moller pair
- double pt1 = ele1.getMomentum().magnitude();
- double pt2 = ele2.getMomentum().magnitude();
- double ph = (pt1>pt2) ? pt1 : pt2;
- double pl = (pt1>pt2) ? pt2 : pt1;
-
- mollerHiP.fill(ph);
- mollerLoP.fill(pl);
-
- mollerEitherP.fill(ph);
- mollerEitherP.fill(pl);
- mollerPsum.fill(pt1+pt2);
-
-
- if (Math.abs(bv.getPosition().x()) < 2
- && Math.abs(bv.getPosition().y()) < 0.5) {
- mollerMassVtxCut.fill(invMass);
- mollerVzVtxCut.fill(bv.getPosition().z());
- }
- pEleVspEleMoller.fill(p1.magnitude(), p2.magnitude());
- pEleVsthetaMoller.fill(p1.magnitude(), theta1);
- pEleVsthetaMoller.fill(p2.magnitude(), theta2);
- thetaEleVsthetaMoller.fill(theta1, theta2);
- }
- }
- }
-
- @Override
- public void printDQMData() {
- LOGGER.info("V0Monitoring::printDQMData");
- for (Entry<String, Double> entry : monitoredQuantityMap.entrySet())
- LOGGER.info(entry.getKey() + " = " + entry.getValue());
- LOGGER.info("*******************************");
- }
-
- /**
- * Calculate the averages here and fill the map
- */
- @Override
- public void calculateEndOfRunQuantities() {
-
- IAnalysisFactory analysisFactory = IAnalysisFactory.create();
- IFitFactory fitFactory = analysisFactory.createFitFactory();
- IFitter fitter = fitFactory.createFitter("chi2");
- double[] init = {50.0, 0.0, 0.2, 1.0, 0.0};
- IFitResult resVx = fitVertexPosition(bsconVx, fitter, init, "range=\"(-0.5,0.5)\"");
- double[] init2 = {50.0, 0.0, 0.04, 1.0, 0.0};
- IFitResult resVy = fitVertexPosition(bsconVy, fitter, init2, "range=\"(-0.2,0.2)\"");
- double[] init3 = {50.0, 0.0, 3.0, 1.0, 0.0};
- IFitResult resVz = fitVertexPosition(bsconVz, fitter, init3, "range=\"(-6,6)\"");
-
- if (resVx != null && resVy != null & resVz != null) {
- double[] parsVx = resVx.fittedParameters();
- double[] parsVy = resVy.fittedParameters();
- double[] parsVz = resVz.fittedParameters();
-
- for (int i = 0; i < 5; i++)
- LOGGER.info("Vertex Fit Parameters: " + resVx.fittedParameterNames()[i] + " = " + parsVx[i] + "; " + parsVy[i] + "; " + parsVz[i]);
-
- IPlotter plotter = analysisFactory.createPlotterFactory().create("Vertex Position");
- plotter.createRegions(1, 3);
- IPlotterStyle pstyle = plotter.style();
- pstyle.legendBoxStyle().setVisible(false);
- pstyle.dataStyle().fillStyle().setColor("green");
- pstyle.dataStyle().lineStyle().setColor("black");
- plotter.region(0).plot(bsconVx);
- plotter.region(0).plot(resVx.fittedFunction());
- plotter.region(1).plot(bsconVy);
- plotter.region(1).plot(resVy.fittedFunction());
- plotter.region(2).plot(bsconVz);
- plotter.region(2).plot(resVz.fittedFunction());
- if (outputPlots)
- try {
- plotter.writeToFile(outputPlotDir + "vertex.png");
- } catch (IOException ex) {
- Logger.getLogger(V0Monitoring.class.getName()).log(Level.SEVERE, null, ex);
- }
-
- // monitoredQuantityMap.put(fpQuantNames[2], sumVx / nTotV0);
- // monitoredQuantityMap.put(fpQuantNames[3], sumVy / nTotV0);
- // monitoredQuantityMap.put(fpQuantNames[4], sumVz / nTotV0);
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[2], parsVx[1]);
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[3], parsVy[1]);
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[4], parsVz[1]);
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[5], parsVx[2]);
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[6], parsVy[2]);
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[7], parsVz[2]);
- }
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[0], (double) nTotV0 / nRecoEvents);
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[1], sumMass / nTotV0);
- monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[8], sumChi2 / nTotV0);
-
- }
-
- @Override
- public void printDQMStrings() {
- for (int i = 0; i < 9; i++)//TODO: do this in a smarter way...loop over the map
- LOGGER.info("ALTER TABLE dqm ADD " + fpQuantNames[i] + " double;");
- }
-
- IFitResult fitVertexPosition(IHistogram1D h1d, IFitter fitter, double[] init, String range
- ) {
- IFitResult ifr = null;
- try {
- ifr = fitter.fit(h1d, "g+p1", init, range);
- } catch (RuntimeException ex) {
- LOGGER.info(this.getClass().getSimpleName() + ": caught exception in fitGaussian");
- }
- return ifr;
- }
-
- private BilliorVertex fitVertex(BilliorTrack electron, BilliorTrack positron, double bField) {
- // Create a vertex fitter from the magnetic field.
- double[] beamSize = {0.001, 0.2, 0.02};
- BilliorVertexer vtxFitter = new BilliorVertexer(bField);
- // TODO: The beam size should come from the conditions database.
- vtxFitter.setBeamSize(beamSize);
-
- // Perform the vertexing based on the specified constraint.
- vtxFitter.doBeamSpotConstraint(false);
-
- // Add the electron and positron tracks to a track list for
- // the vertex fitter.
- List<BilliorTrack> billiorTracks = new ArrayList<BilliorTrack>();
-
- billiorTracks.add(electron);
-
- billiorTracks.add(positron);
-
- // Find and return a vertex based on the tracks.
- return vtxFitter.fitVertex(billiorTracks);
- }
-
- private static boolean hasSharedStrips(ReconstructedParticle vertex, RelationalTable hittostrip, RelationalTable hittorotated) {
- return hasSharedStrips(vertex.getParticles().get(0), vertex.getParticles().get(1), hittostrip, hittorotated);
- }
-
- private static boolean hasSharedStrips(ReconstructedParticle fs1, ReconstructedParticle fs2, RelationalTable hittostrip, RelationalTable hittorotated) {
- return TrackUtils.hasSharedStrips(fs1.getTracks().get(0), fs2.getTracks().get(0), hittostrip, hittorotated);
- }
+ private static Logger LOGGER = Logger.getLogger(V0Monitoring.class.getPackage().getName());
+
+ private static boolean hasSharedStrips(final ReconstructedParticle fs1, final ReconstructedParticle fs2,
+ final RelationalTable hittostrip, final RelationalTable hittorotated) {
+ return TrackUtils.hasSharedStrips(fs1.getTracks().get(0), fs2.getTracks().get(0), hittostrip, hittorotated);
+ }
+
+ private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
+ private final String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
+ private IHistogram1D bsconChi2;
+ private IHistogram2D bsconChi2VsTrkChi2;
+ private IHistogram1D bsconMass;
+ private IHistogram1D bsconVx;
+ private IHistogram1D bsconVy;
+ private IHistogram1D bsconVz;
+ private IHistogram2D bsconVzVsChi2;
+ private final String finalStateParticlesColName = "FinalStateParticles";
+ private final String[] fpQuantNames = {"nV0_per_Event", "avg_BSCon_mass", "avg_BSCon_Vx", "avg_BSCon_Vy",
+ "avg_BSCon_Vz", "sig_BSCon_Vx", "sig_BSCon_Vy", "sig_BSCon_Vz", "avg_BSCon_Chi2"};
+
+ private final double maxFactor = 1.25;
+ private IHistogram1D mollerHiP, mollerLoP, mollerEitherP, mollerPsum;
+ private IHistogram1D mollerMass;
+ private IHistogram1D mollerMassVtxCut;
+ private IHistogram1D mollerUx;
+ private IHistogram1D mollerUy;
+ private IHistogram1D mollerVx;
+
+ private IHistogram1D mollerVy;
+
+ private IHistogram1D mollerVz;
+ private IHistogram1D mollerVzVtxCut;
+ private IHistogram2D mollerXVsVtxY;
+ private IHistogram2D mollerXVsVtxZ;
+
+ private IHistogram2D mollerYVsVtxZ;
+ // some counters
+ private int nRecoEvents = 0;
+ private int nTotV0 = 0;
+ private IHistogram1D numChargeHisto;
+ private IHistogram1D nV0;
+ private IHistogram1D pEle;
+ private IHistogram2D pEleVspEle;
+ private IHistogram2D pEleVspEleBeamBeam;
+ private IHistogram2D pEleVspEleMoller;
+ private IHistogram2D pEleVspEleNoBeam;
+ private IHistogram2D pEleVspPos;
+ private IHistogram2D pEleVspPosWithCut;
+ private IHistogram2D pEleVsthetaBeamBeam;
+ private IHistogram2D pEleVsthetaMoller;
+
+ private IHistogram2D phiEleVsphiEle;
+ private final String plotDir = "V0Monitoring/";
+ private IHistogram1D pPos;
+
+ private IHistogram2D pxEleVspxEle;
+ private IHistogram2D pxEleVspxEleNoBeam;
+ private IHistogram2D pxEleVspxPos;
+
+ private IHistogram2D pyEleVspyEle;
+ private IHistogram2D pyEleVspyEleNoBeam;
+ private IHistogram2D pyEleVspyPos;
+ private IHistogram1D sumChargeHisto;
+ private double sumChi2 = 0.0;
+ // some summers
+ private double sumMass = 0.0;
+ private double sumVx = 0.0;
+ private double sumVy = 0.0;
+ private double sumVz = 0.0;
+
+ private IHistogram1D tarconChi2;
+ private IHistogram2D tarconChi2VsTrkChi2;
+
+ /* target constrained */
+ private IHistogram1D tarconMass;
+ private IHistogram1D tarconVx;
+ private IHistogram1D tarconVy;
+ private IHistogram1D tarconVz;
+ private IHistogram2D tarconVzVsChi2;
+ private final String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates";
+ private IHistogram2D thetaEleVsthetaBeamBeam;
+ private IHistogram2D thetaEleVsthetaMoller;
+ private final double thetaMax = 0.06;
+ private final double thetaMin = 0.015;
+ private IHistogram1D trigTime;
+ private IHistogram2D trigTimeV0Time;
+ private IHistogram1D unconChi2;
+
+ private IHistogram2D unconChi2VsTrkChi2;
+ /* beamspot constrained */
+ /* V0 Quantities */
+ /* Mass, vertex, chi^2 of fit */
+ /* unconstrained */
+ private IHistogram1D unconMass;
+ private final String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
+ private IHistogram1D unconVx;
+ private IHistogram1D unconVy;
+ private IHistogram1D unconVz;
+ private IHistogram2D unconVzVsChi2;
+ private IHistogram1D v0Dt;
+ private double v0ESumMinCut, v0MaxPCut, v0ESumMaxCut, molPSumMin, molPSumMax, beambeamCut;
+
+ private IHistogram1D v0Time;
+ private IHistogram2D VtxXVsVtxPx;
+
+ private IHistogram2D VtxXVsVtxY;
+ private IHistogram2D VtxXVsVtxZ;
+
+ private IHistogram2D VtxYVsVtxPy;
+
+ private IHistogram2D VtxYVsVtxZ;
+
+ private IHistogram2D VtxZVsL1Iso;
+
+ private IHistogram2D VtxZVsMass;
+ private IHistogram2D VtxZVsTrkChi2;
+
+ private IHistogram2D VtxZVsVtxPx;
+
+ private IHistogram2D VtxZVsVtxPy;
+
+ private IHistogram2D VtxZVsVtxPz;
+
+ /**
+ * Calculate the averages here and fill the map
+ */
+ @Override
+ public void calculateEndOfRunQuantities() {
+
+ final IAnalysisFactory analysisFactory = IAnalysisFactory.create();
+ final IFitFactory fitFactory = analysisFactory.createFitFactory();
+ final IFitter fitter = fitFactory.createFitter("chi2");
+ final double[] init = {50.0, 0.0, 0.2, 1.0, 0.0};
+ final IFitResult resVx = this.fitVertexPosition(bsconVx, fitter, init, "range=\"(-0.5,0.5)\"");
+ final double[] init2 = {50.0, 0.0, 0.04, 1.0, 0.0};
+ final IFitResult resVy = this.fitVertexPosition(bsconVy, fitter, init2, "range=\"(-0.2,0.2)\"");
+ final double[] init3 = {50.0, 0.0, 3.0, 1.0, 0.0};
+ final IFitResult resVz = this.fitVertexPosition(bsconVz, fitter, init3, "range=\"(-6,6)\"");
+
+ if (resVx != null && resVy != null & resVz != null) {
+ final double[] parsVx = resVx.fittedParameters();
+ final double[] parsVy = resVy.fittedParameters();
+ final double[] parsVz = resVz.fittedParameters();
+
+ for (int i = 0; i < 5; i++) {
+ LOGGER.info("Vertex Fit Parameters: " + resVx.fittedParameterNames()[i] + " = " + parsVx[i] + "; "
+ + parsVy[i] + "; " + parsVz[i]);
+ }
+
+ final IPlotter plotter = analysisFactory.createPlotterFactory().create("Vertex Position");
+ plotter.createRegions(1, 3);
+ final IPlotterStyle pstyle = plotter.style();
+ pstyle.legendBoxStyle().setVisible(false);
+ pstyle.dataStyle().fillStyle().setColor("green");
+ pstyle.dataStyle().lineStyle().setColor("black");
+ plotter.region(0).plot(bsconVx);
+ plotter.region(0).plot(resVx.fittedFunction());
+ plotter.region(1).plot(bsconVy);
+ plotter.region(1).plot(resVy.fittedFunction());
+ plotter.region(2).plot(bsconVz);
+ plotter.region(2).plot(resVz.fittedFunction());
+ if (outputPlots) {
+ try {
+ plotter.writeToFile(outputPlotDir + "vertex.png");
+ } catch (final IOException ex) {
+ Logger.getLogger(V0Monitoring.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+ // monitoredQuantityMap.put(fpQuantNames[2], sumVx / nTotV0);
+ // monitoredQuantityMap.put(fpQuantNames[3], sumVy / nTotV0);
+ // monitoredQuantityMap.put(fpQuantNames[4], sumVz / nTotV0);
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[2], parsVx[1]);
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[3], parsVy[1]);
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[4], parsVz[1]);
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[5], parsVx[2]);
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[6], parsVy[2]);
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[7], parsVz[2]);
+ }
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[0],
+ (double) nTotV0 / nRecoEvents);
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[1], sumMass
+ / nTotV0);
+ monitoredQuantityMap.put(beamConV0CandidatesColName + " " + triggerType + " " + fpQuantNames[8], sumChi2
+ / nTotV0);
+
+ }
+
+ @Override
+ protected void detectorChanged(final Detector detector) {
+
+ final BeamEnergyCollection beamEnergyCollection = this.getConditionsManager()
+ .getCachedConditions(BeamEnergyCollection.class, "beam_energies").getCachedData();
+ final double beamEnergy = beamEnergyCollection.get(0).getBeamEnergy();
+ v0ESumMinCut = 0.8 * beamEnergy;
+ v0ESumMaxCut = 1.25 * beamEnergy;
+
+ v0MaxPCut = 1.05 * beamEnergy;// GeV
+ molPSumMin = 0.80 * beamEnergy;
+ molPSumMax = 1.25 * beamEnergy;
+ beambeamCut = 0.80 * beamEnergy;
+
+ beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2);
+
+ // LOGGER.info("Setting up the plotter");
+ aida.tree().cd("/");
+ final String xtra = "Extras";
+ String trkType = "SeedTrack/";
+ if (isGBL) {
+ trkType = "GBLTrack/";
+ }
+
+ final double maxMass = .2 * beamEnergy;
+ final double maxMassMoller = .1 * Math.sqrt(beamEnergy);
+ /* V0 Quantities */
+ /* Mass, vertex, chi^2 of fit */
+ /* unconstrained */
+ unconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/"
+ + "Invariant Mass (GeV)", 100, 0, maxMass);
+ unconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/"
+ + "Vx (mm)", 50, -10, 10);
+ unconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/"
+ + "Vy (mm)", 50, -10, 10);
+ unconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/"
+ + "Vz (mm)", 50, -50, 50);
+ unconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/"
+ + "Chi2", 25, 0, 25);
+ unconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/"
+ + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
+ unconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName
+ + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
+ /* beamspot constrained */
+ bsconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/"
+ + "Mass (GeV)", 100, 0, maxMass);
+ bsconVx = aida.histogram1D(
+ plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
+ bsconVy = aida.histogram1D(
+ plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
+ bsconVz = aida.histogram1D(
+ plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
+ bsconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2",
+ 25, 0, 25);
+ bsconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/"
+ + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
+ bsconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/"
+ + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
+ /* target constrained */
+ tarconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/"
+ + "Mass (GeV)", 100, 0, maxMass);
+ tarconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/"
+ + "Vx (mm)", 50, -1, 1);
+ tarconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/"
+ + "Vy (mm)", 50, -1, 1);
+ tarconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/"
+ + "Vz (mm)", 50, -10, 10);
+ tarconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/"
+ + "Chi2", 25, 0, 25);
+ tarconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/"
+ + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
+ tarconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName
+ + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
+
+ nV0 = aida
+ .histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of V0 per event", 10, 0, 10);
+ v0Time = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 mean time", 100, -25, 25);
+ v0Dt = aida
+ .histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 time difference", 100, -25, 25);
+ trigTimeV0Time = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "Trigger phase vs. V0 mean time", 100, -25, 25, 6, 0, 24);
+ trigTime = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase", 6, 0, 24);
+
+ pEleVspPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p)", 50, 0,
+ beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
+
+ pEle = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e)", 50, 0, beamEnergy
+ * maxFactor);
+ pPos = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(p)", 50, 0, beamEnergy
+ * maxFactor);
+
+ pEleVspPosWithCut = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "P(e) vs P(p): Radiative", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
+ pyEleVspyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Py(e) vs Py(p)", 50,
+ -0.04 * beamEnergy, 0.04 * beamEnergy, 50, -0.04 * beamEnergy, 0.04 * beamEnergy);
+ pxEleVspxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Px(e) vs Px(p)", 50,
+ -0.04 * beamEnergy, 0.04 * beamEnergy, 50, -0.04 * beamEnergy, 0.04 * beamEnergy);
+ VtxZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Mass", 50, 0,
+ maxMass, 50, -50, 80);
+ VtxXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vz", 100, -10, 10,
+ 100, -50, 80);
+ VtxYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Vz", 100, -5, 5, 100,
+ -50, 80);
+ VtxXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vy", 100, -10, 10,
+ 100, -5, 5);
+ VtxXVsVtxPx = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Px", 100, -0.1, 0.1,
+ 100, -10, 10);
+ VtxYVsVtxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Py", 100, -0.1, 0.1,
+ 100, -5, 5);
+ VtxZVsVtxPx = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Px", 100, -0.1, 0.1,
+ 100, -50, 80);
+ VtxZVsVtxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Py", 100, -0.1, 0.1,
+ 100, -50, 80);
+ VtxZVsVtxPz = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Pz", 100, 0.0,
+ beamEnergy * maxFactor, 100, -50, 80);
+ VtxZVsL1Iso = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs L1 Isolation", 100,
+ 0.0, 5.0, 50, -50, 80);
+ VtxZVsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Track Chi2", 50,
+ 0, 50, 50, -50, 80);
+ phiEleVsphiEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/phi(e) vs phi(e)", 50, -Math.PI, Math.PI, 50, -Math.PI, Math.PI);
+ pyEleVspyEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Py(e) vs Py(e)", 50, -0.04 * beamEnergy, 0.04 * beamEnergy, 50, -0.04 * beamEnergy,
+ 0.04 * beamEnergy);
+ pxEleVspxEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Px(e) vs Px(e)", 50, -0.02 * beamEnergy, 0.06 * beamEnergy, 50, -0.02 * beamEnergy,
+ 0.06 * beamEnergy);
+
+ // electron vs electron momentum with different cuts
+ // 1) no cut
+ // 2) cut out FEE
+ // 3) cut out FEE and also cut on momentum sum
+ // 4) cut out everything except FEE coincidentals
+ pEleVspEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e)",
+ 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
+ pEleVspEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/P(e) vs P(e) NoBeam", 50, 0, beambeamCut, 50, 0, beambeamCut);
+ pEleVspEleMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/P(e) vs P(e) Moller", 50, 0, beambeamCut, 50, 0, beambeamCut);
+ pEleVspEleBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/P(e) vs P(e) BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, beambeamCut,
+ beamEnergy * maxFactor);
+
+ pyEleVspyEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Py(e) vs Py(e) NoBeam", 50, -0.04 * beamEnergy, 0.04 * beamEnergy, 50,
+ -0.04 * beamEnergy, 0.04 * beamEnergy);
+ pxEleVspxEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Px(e) vs Px(e) NoBeam", 50, -0.02 * beamEnergy, 0.06 * beamEnergy, 50,
+ -0.02 * beamEnergy, 0.06 * beamEnergy);
+ sumChargeHisto = aida.histogram1D(
+ plotDir + trkType + triggerType + "/" + xtra + "/" + "Total Charge of Event", 5, -2, 3);
+ numChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "Number of Charged Particles", 6, 0, 6);
+
+ pEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/P(e) vs Theta Moller", 50, 0, beambeamCut, 50, thetaMin, thetaMax);
+ thetaEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Theta vs Theta Moller", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
+ pEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/P(e) vs Theta BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, thetaMin, thetaMax);
+ thetaEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Theta vs Theta BeamBeam", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
+
+ mollerMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Moller Mass (GeV)", 100, 0, maxMassMoller);
+ mollerMassVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Moller Mass (GeV): VtxCut", 100, 0, maxMassMoller);
+ mollerVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx (mm)",
+ 50, -10, 10);
+ mollerVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy (mm)",
+ 50, -2, 2);
+ mollerVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm)",
+ 50, -50, 50);
+ mollerVzVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Moller Vz (mm): VtxCut", 50, -50, 50);
+ mollerXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Moller Vx vs Vz", 100, -5, 5, 100, -50, 50);
+ mollerYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Moller Vy vs Vz", 100, -2, 2, 100, -50, 50);
+ mollerXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Moller Vx vs Vy", 100, -5, 5, 100, -2, 2);
+
+ mollerUx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Moller Pair Momentum Direction Ux", 100, .015, .045);
+ mollerUy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/"
+ + "2 Electron/Moller Pair Momentum Direction Uy", 100, -.01, .01);
+
+ mollerHiP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(high)", 100, 0,
+ beamEnergy * maxFactor);
+ mollerLoP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(low)", 100, 0,
+ beamEnergy * maxFactor);
+
+ mollerEitherP = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(either)",
+ 100, 0, beamEnergy * maxFactor);
+ mollerPsum = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Psum", 100, 0,
+ beamEnergy * maxFactor);
+
+ }
+
+ private BilliorVertex fitVertex(final BilliorTrack electron, final BilliorTrack positron, final double bField) {
+ // Create a vertex fitter from the magnetic field.
+ final double[] beamSize = {0.001, 0.2, 0.02};
+ final BilliorVertexer vtxFitter = new BilliorVertexer(bField);
+ // TODO: The beam size should come from the conditions database.
+ vtxFitter.setBeamSize(beamSize);
+
+ // Perform the vertexing based on the specified constraint.
+ vtxFitter.doBeamSpotConstraint(false);
+
+ // Add the electron and positron tracks to a track list for
+ // the vertex fitter.
+ final List<BilliorTrack> billiorTracks = new ArrayList<BilliorTrack>();
+
+ billiorTracks.add(electron);
+
+ billiorTracks.add(positron);
+
+ // Find and return a vertex based on the tracks.
+ return vtxFitter.fitVertex(billiorTracks);
+ }
+
+ IFitResult fitVertexPosition(final IHistogram1D h1d, final IFitter fitter, final double[] init, final String range) {
+ IFitResult ifr = null;
+ try {
+ ifr = fitter.fit(h1d, "g+p1", init, range);
+ } catch (final RuntimeException ex) {
+ LOGGER.info(this.getClass().getSimpleName() + ": caught exception in fitGaussian");
+ }
+ return ifr;
+ }
+
+ @Override
+ public void printDQMData() {
+ LOGGER.info("V0Monitoring::printDQMData");
+ for (final Entry<String, Double> entry : monitoredQuantityMap.entrySet()) {
+ LOGGER.info(entry.getKey() + " = " + entry.getValue());
+ }
+ LOGGER.info("*******************************");
+ }
+
+ @Override
+ public void printDQMStrings() {
+ for (int i = 0; i < 9; i++) {
+ LOGGER.info("ALTER TABLE dqm ADD " + fpQuantNames[i] + " double;");
+ }
+ }
+
+ @Override
+ public void process(final EventHeader event) {
+ /* make sure everything is there */
+ if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName)) {
+ return;
+ }
+ if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName)) {
+ return;
+ }
+ if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName)) {
+ return;
+ }
+ if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName)) {
+ return;
+ }
+
+ // check to see if this event is from the correct trigger (or "all");
+ if (!this.matchTrigger(event)) {
+ return;
+ }
+
+ nRecoEvents++;
+
+ final RelationalTable<?, ?> hitToStrips = TrackUtils.getHitToStripsTable(event);
+ final RelationalTable<?, ?> hitToRotated = TrackUtils.getHitToRotatedTable(event);
+
+ final List<ReconstructedParticle> unonstrainedV0List = event.get(ReconstructedParticle.class,
+ unconstrainedV0CandidatesColName);
+ for (final ReconstructedParticle uncV0 : unonstrainedV0List) {
+ if (isGBL != TrackType.isGBL(uncV0.getType())) {
+ continue;
+ }
+ final Vertex uncVert = uncV0.getStartVertex();
+ final Hep3Vector pVtxRot = VecOp.mult(beamAxisRotation, uncV0.getMomentum());
+ final Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, uncVert.getPosition());
+ final double theta = Math.acos(pVtxRot.z() / pVtxRot.magnitude());
+ final double phi = Math.atan2(pVtxRot.y(), pVtxRot.x());
+ unconVx.fill(vtxPosRot.x());
+ unconVy.fill(vtxPosRot.y());
+ unconVz.fill(vtxPosRot.z());
+ unconMass.fill(uncV0.getMass());
+ unconChi2.fill(uncVert.getChi2());
+ unconVzVsChi2.fill(uncVert.getChi2(), vtxPosRot.z());
+ unconChi2VsTrkChi2.fill(
+ Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1)
+ .getTracks().get(0).getChi2()), uncVert.getChi2());
+
+ VtxZVsMass.fill(uncV0.getMass(), vtxPosRot.z());
+ VtxXVsVtxZ.fill(vtxPosRot.x(), vtxPosRot.z());
+ VtxYVsVtxZ.fill(vtxPosRot.y(), vtxPosRot.z());
+ VtxXVsVtxY.fill(vtxPosRot.x(), vtxPosRot.y());
+ VtxXVsVtxPx.fill(pVtxRot.x(), vtxPosRot.x());
+ VtxYVsVtxPy.fill(pVtxRot.y(), vtxPosRot.y());
+ VtxZVsVtxPx.fill(pVtxRot.x(), vtxPosRot.z());
+ VtxZVsVtxPy.fill(pVtxRot.y(), vtxPosRot.z());
+ VtxZVsVtxPz.fill(pVtxRot.z(), vtxPosRot.z());
+
+ // this always has 2 tracks.
+ final List<ReconstructedParticle> trks = uncV0.getParticles();
+ // Track ele = trks.get(0).getTracks().get(0);
+ // Track pos = trks.get(1).getTracks().get(0);
+ // //if track #0 has charge>0 it's the electron! This seems mixed up, but remember the track
+ // //charge is assigned assuming a positive B-field, while ours is negative
+ // if (trks.get(0).getCharge() > 0) {
+ // pos = trks.get(0).getTracks().get(0);
+ // ele = trks.get(1).getTracks().get(0);
+ // }
+ // aida.histogram2D(plotDir + trkType + triggerType + "/" + "P(e) vs P(p)").fill(getMomentum(ele),
+ // getMomentum(pos));
+ // aida.histogram2D(plotDir + trkType + triggerType + "/" +
+ // "Px(e) vs Px(p)").fill(ele.getTrackStates().get(0).getMomentum()[1],
+ // pos.getTrackStates().get(0).getMomentum()[1]);
+ // aida.histogram2D(plotDir + trkType + triggerType + "/" +
+ // "Py(e) vs Py(p)").fill(ele.getTrackStates().get(0).getMomentum()[2],
+ // pos.getTrackStates().get(0).getMomentum()[2]);
+ ReconstructedParticle ele = trks.get(0);
+ ReconstructedParticle pos = trks.get(1);
+ // ReconParticles have the charge correct.
+ if (trks.get(0).getCharge() > 0) {
+ pos = trks.get(0);
+ ele = trks.get(1);
+ }
+ if (ele.getCharge() < 0 && pos.getCharge() > 0) {
+ VtxZVsTrkChi2.fill(
+ Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1)
+ .getTracks().get(0).getChi2()), uncVert.getPosition().z());
+
+ final Double[] eleIso = TrackUtils.getIsolations(ele.getTracks().get(0), hitToStrips, hitToRotated);
+ final Double[] posIso = TrackUtils.getIsolations(pos.getTracks().get(0), hitToStrips, hitToRotated);
+ if (eleIso[0] != null && posIso[0] != null) {
+ final double eleL1Iso = Math.min(Math.abs(eleIso[0]), Math.abs(eleIso[1]));
+ final double posL1Iso = Math.min(Math.abs(posIso[0]), Math.abs(posIso[1]));
+ final double minL1Iso = Math.min(eleL1Iso, posL1Iso);
+ VtxZVsL1Iso.fill(minL1Iso, uncVert.getPosition().z());
+ }
+
+ final double pe = ele.getMomentum().magnitude();
+ final double pp = pos.getMomentum().magnitude();
+ final Hep3Vector pEleRot = VecOp.mult(beamAxisRotation, ele.getMomentum());
+ final Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, pos.getMomentum());
+
+ pEleVspPos.fill(pe, pp);
+ pEle.fill(pe);
+ pPos.fill(pp);
+
+ pxEleVspxPos.fill(pEleRot.x(), pPosRot.x());
+ pyEleVspyPos.fill(pEleRot.y(), pPosRot.y());
+ if (pe < v0MaxPCut && pp < v0MaxPCut && pe + pp > v0ESumMinCut && pe + pp < v0ESumMaxCut) {
+ pEleVspPosWithCut.fill(pe, pp);
+ }
+ }
+
+ final double eleT = TrackUtils.getTrackTime(ele.getTracks().get(0), hitToStrips, hitToRotated);
+ final double posT = TrackUtils.getTrackTime(pos.getTracks().get(0), hitToStrips, hitToRotated);
+ final double meanT = (eleT + posT) / 2.0;
+ v0Time.fill(meanT);
+ v0Dt.fill(eleT - posT);
+ trigTimeV0Time.fill(meanT, event.getTimeStamp() % 24);
+ trigTime.fill(event.getTimeStamp() % 24);
+ }
+
+ final List<ReconstructedParticle> beamConstrainedV0List = event.get(ReconstructedParticle.class,
+ beamConV0CandidatesColName);
+ nV0.fill(beamConstrainedV0List.size());
+ for (final ReconstructedParticle bsV0 : beamConstrainedV0List) {
+
+ if (isGBL != TrackType.isGBL(bsV0.getType())) {
+ continue;
+ }
+ nTotV0++;
+ final Vertex bsVert = bsV0.getStartVertex();
+ final Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, bsVert.getPosition());
+ bsconVx.fill(vtxPosRot.x());
+ bsconVy.fill(vtxPosRot.y());
+ bsconVz.fill(vtxPosRot.z());
+ bsconMass.fill(bsV0.getMass());
+ bsconChi2.fill(bsVert.getChi2());
+ bsconVzVsChi2.fill(bsVert.getChi2(), vtxPosRot.z());
+ bsconChi2VsTrkChi2.fill(
+ Math.max(bsV0.getParticles().get(0).getTracks().get(0).getChi2(), bsV0.getParticles().get(1)
+ .getTracks().get(0).getChi2()), bsVert.getChi2());
+ sumMass += bsV0.getMass();
+ sumVx += vtxPosRot.x();
+ sumVy += vtxPosRot.y();
+ sumVz += vtxPosRot.z();
+ sumChi2 += bsVert.getChi2();
+ }
+
+ final List<ReconstructedParticle> targetConstrainedV0List = event.get(ReconstructedParticle.class,
+ targetV0ConCandidatesColName);
+ for (final ReconstructedParticle tarV0 : targetConstrainedV0List) {
+
+ if (isGBL != TrackType.isGBL(tarV0.getType())) {
+ continue;
+ }
+
+ final Vertex tarVert = tarV0.getStartVertex();
+ final Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, tarVert.getPosition());
+ tarconVx.fill(vtxPosRot.x());
+ tarconVy.fill(vtxPosRot.y());
+ tarconVz.fill(vtxPosRot.z());
+ tarconMass.fill(tarV0.getMass());
+ tarconChi2.fill(tarVert.getChi2());
+ tarconVzVsChi2.fill(tarVert.getChi2(), vtxPosRot.z());
+ tarconChi2VsTrkChi2.fill(
+ Math.max(tarV0.getParticles().get(0).getTracks().get(0).getChi2(), tarV0.getParticles().get(1)
+ .getTracks().get(0).getChi2()), tarVert.getChi2());
+ }
+ final List<ReconstructedParticle> finalStateParticles = event.get(ReconstructedParticle.class,
+ finalStateParticlesColName);
+ if (debug) {
+ LOGGER.info("This events has " + finalStateParticles.size() + " final state particles");
+ }
+
+ ReconstructedParticle ele1 = null;
+ ReconstructedParticle ele2 = null;
+ int sumCharge = 0;
+ int numChargedParticles = 0;
+ for (final ReconstructedParticle fsPart : finalStateParticles) {
+ if (isGBL != TrackType.isGBL(fsPart.getType())) {
+ continue;
+ }
+ if (debug) {
+ LOGGER.info("PDGID = " + fsPart.getParticleIDUsed() + "; charge = " + fsPart.getCharge() + "; pz = "
+ + fsPart.getMomentum().x());
+ }
+ final double charge = fsPart.getCharge();
+ sumCharge += charge;
+ if (charge != 0) {
+ numChargedParticles++;
+ if (charge < 1) {
+ if (ele1 == null) {
+ ele1 = fsPart;
+ } else if (!hasSharedStrips(ele1, fsPart, hitToStrips, hitToRotated)) {
+ ele2 = fsPart;
+ }
+ }
+ }
+ }
+ sumChargeHisto.fill(sumCharge);
+ numChargeHisto.fill(numChargedParticles);
+
+ if (ele1 != null && ele2 != null) {
+ final Hep3Vector p1 = VecOp.mult(beamAxisRotation, ele1.getMomentum());
+ final Hep3Vector p2 = VecOp.mult(beamAxisRotation, ele2.getMomentum());
+ // Hep3Vector beamAxis = new BasicHep3Vector(Math.sin(0.0305), 0, Math.cos(0.0305));
+ // LOGGER.info(p1);
+ // LOGGER.info(VecOp.mult(rot, p1));
+
+ final double theta1 = Math.acos(p1.z() / p1.magnitude());
+ final double theta2 = Math.acos(p2.z() / p2.magnitude());
+ final double phi1 = Math.atan2(p1.y(), p1.x());
+ final double phi2 = Math.atan2(p2.y(), p2.x());
+ phiEleVsphiEle.fill(phi1, phi2);
+ pEleVspEle.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
+ pyEleVspyEle.fill(ele1.getMomentum().y(), ele2.getMomentum().y());
+ pxEleVspxEle.fill(ele1.getMomentum().x(), ele2.getMomentum().x());
+ // remove beam electrons
+ if (ele1.getMomentum().magnitude() < beambeamCut && ele2.getMomentum().magnitude() < beambeamCut) {
+ pEleVspEleNoBeam.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
+ pyEleVspyEleNoBeam.fill(ele1.getMomentum().y(), ele2.getMomentum().y());
+ pxEleVspxEleNoBeam.fill(ele1.getMomentum().x(), ele2.getMomentum().x());
+ }
+ // look at beam-beam events
+ if (ele1.getMomentum().magnitude() > beambeamCut && ele2.getMomentum().magnitude() > beambeamCut) {
+ pEleVspEleBeamBeam.fill(ele1.getMomentum().magnitude(), ele2.getMomentum().magnitude());
+ pEleVsthetaBeamBeam.fill(p1.magnitude(), theta1);
+ pEleVsthetaBeamBeam.fill(p2.magnitude(), theta2);
+ thetaEleVsthetaBeamBeam.fill(theta1, theta2);
+ }
+
+ // look at "Moller" events (if that's what they really are
+ if (ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() > molPSumMin
+ && ele1.getMomentum().magnitude() + ele2.getMomentum().magnitude() < molPSumMax
+ && p1.magnitude() < beambeamCut && p2.magnitude() < beambeamCut) {
+
+ final Track ele1trk = ele1.getTracks().get(0);
+ final Track ele2trk = ele2.getTracks().get(0);
+ final SeedTrack stEle1 = TrackUtils.makeSeedTrackFromBaseTrack(ele1trk);
+ final SeedTrack stEle2 = TrackUtils.makeSeedTrackFromBaseTrack(ele2trk);
+ final BilliorTrack btEle1 = new BilliorTrack(stEle1.getSeedCandidate().getHelix());
+ final BilliorTrack btEle2 = new BilliorTrack(stEle2.getSeedCandidate().getHelix());
+ final BilliorVertex bv = this.fitVertex(btEle1, btEle2, TrackUtils.getBField(event.getDetector())
+ .magnitude());
+ // LOGGER.info("ee vertex: "+bv.toString());
+ final double invMass = bv.getParameters().get("invMass");
+ mollerMass.fill(invMass);
+ mollerVx.fill(bv.getPosition().x());
+ mollerVy.fill(bv.getPosition().y());
+ mollerVz.fill(bv.getPosition().z());
+ mollerXVsVtxZ.fill(bv.getPosition().x(), bv.getPosition().z());
+ mollerYVsVtxZ.fill(bv.getPosition().y(), bv.getPosition().z());
+ mollerXVsVtxY.fill(bv.getPosition().x(), bv.getPosition().y());
+
+ final double ux = (ele1.getMomentum().x() + ele2.getMomentum().x())
+ / (ele1.getMomentum().z() + ele2.getMomentum().z());
+ final double uy = (ele1.getMomentum().y() + ele2.getMomentum().y())
+ / (ele1.getMomentum().z() + ele2.getMomentum().z());
+ mollerUx.fill(ux);
+ mollerUy.fill(uy);
+
+ // higher and lower energy electrons in moller pair
+ final double pt1 = ele1.getMomentum().magnitude();
+ final double pt2 = ele2.getMomentum().magnitude();
+ final double ph = pt1 > pt2 ? pt1 : pt2;
+ final double pl = pt1 > pt2 ? pt2 : pt1;
+
+ mollerHiP.fill(ph);
+ mollerLoP.fill(pl);
+
+ mollerEitherP.fill(ph);
+ mollerEitherP.fill(pl);
+ mollerPsum.fill(pt1 + pt2);
+
+ if (Math.abs(bv.getPosition().x()) < 2 && Math.abs(bv.getPosition().y()) < 0.5) {
+ mollerMassVtxCut.fill(invMass);
+ mollerVzVtxCut.fill(bv.getPosition().z());
+ }
+ pEleVspEleMoller.fill(p1.magnitude(), p2.magnitude());
+ pEleVsthetaMoller.fill(p1.magnitude(), theta1);
+ pEleVsthetaMoller.fill(p2.magnitude(), theta2);
+ thetaEleVsthetaMoller.fill(theta1, theta2);
+ }
+ }
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalCellIDPrintDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalCellIDPrintDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalCellIDPrintDriver.java Wed Mar 9 11:43:24 2016
@@ -19,63 +19,63 @@
*/
public class EcalCellIDPrintDriver extends Driver {
- Subdetector ecal;
- IDDecoder dec;
- String ecalName = "Ecal";
- String ecalCollectionName = "EcalReadoutHits";
- String outputFileName;
- PrintWriter outputStream = null;
+ Subdetector ecal;
+ IDDecoder dec;
+ String ecalName = "Ecal";
+ String ecalCollectionName = "EcalReadoutHits";
+ String outputFileName;
+ PrintWriter outputStream = null;
- public EcalCellIDPrintDriver() {
- }
+ public EcalCellIDPrintDriver() {
+ }
- public void setEcalCollectionName(String ecalCollectionName) {
- this.ecalCollectionName = ecalCollectionName;
- }
+ public void setEcalCollectionName(String ecalCollectionName) {
+ this.ecalCollectionName = ecalCollectionName;
+ }
- public void setEcalName(String ecalName) {
- this.ecalName = ecalName;
- }
+ public void setEcalName(String ecalName) {
+ this.ecalName = ecalName;
+ }
- public void setOutputFileName(String outputFileName) {
- this.outputFileName = outputFileName;
- }
+ public void setOutputFileName(String outputFileName) {
+ this.outputFileName = outputFileName;
+ }
- public void startOfData() {
- if (outputFileName != null) {
- try {
- outputStream = new PrintWriter(outputFileName);
- } catch (IOException ex) {
- throw new RuntimeException("Invalid outputFilePath!");
- }
- } else {
- outputStream = new PrintWriter(System.out, true);
- }
- }
+ public void startOfData() {
+ if (outputFileName != null) {
+ try {
+ outputStream = new PrintWriter(outputFileName);
+ } catch (IOException ex) {
+ throw new RuntimeException("Invalid outputFilePath!");
+ }
+ } else {
+ outputStream = new PrintWriter(System.out, true);
+ }
+ }
- public void detectorChanged(Detector detector) {
- // Get the Subdetector.
- ecal = (Subdetector) detector.getSubdetector(ecalName);
- dec = ecal.getIDDecoder();
- }
+ public void detectorChanged(Detector detector) {
+ // Get the Subdetector.
+ ecal = (Subdetector) detector.getSubdetector(ecalName);
+ dec = ecal.getIDDecoder();
+ }
- public void process(EventHeader event) {
- // Get the list of ECal hits.
- if (event.hasCollection(RawCalorimeterHit.class, ecalCollectionName)) {
- List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class, ecalCollectionName);
- //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
- for (RawCalorimeterHit hit : hits) {
- dec.setID(hit.getCellID());
- outputStream.printf("x=%d\ty=%d\n", dec.getValue("ix"), dec.getValue("iy"));
- }
- }
- if (event.hasCollection(RawTrackerHit.class, ecalCollectionName)) {
- List<RawTrackerHit> hits = event.get(RawTrackerHit.class, ecalCollectionName);
- //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
- for (RawTrackerHit hit : hits) {
- dec.setID(hit.getCellID());
- outputStream.printf("x=%d\ty=%d\n", dec.getValue("ix"), dec.getValue("iy"));
- }
- }
- }
+ public void process(EventHeader event) {
+ // Get the list of ECal hits.
+ if (event.hasCollection(RawCalorimeterHit.class, ecalCollectionName)) {
+ List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class, ecalCollectionName);
+ //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
+ for (RawCalorimeterHit hit : hits) {
+ dec.setID(hit.getCellID());
+ outputStream.printf("x=%d\ty=%d\n", dec.getValue("ix"), dec.getValue("iy"));
+ }
+ }
+ if (event.hasCollection(RawTrackerHit.class, ecalCollectionName)) {
+ List<RawTrackerHit> hits = event.get(RawTrackerHit.class, ecalCollectionName);
+ //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
+ for (RawTrackerHit hit : hits) {
+ dec.setID(hit.getCellID());
+ outputStream.printf("x=%d\ty=%d\n", dec.getValue("ix"), dec.getValue("iy"));
+ }
+ }
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalClusterPlots.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalClusterPlots.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalClusterPlots.java Wed Mar 9 11:43:24 2016
@@ -17,7 +17,7 @@
public class EcalClusterPlots extends Driver {
- //AIDAFrame plotterFrame;
+ //AIDAFrame plotterFrame;
String inputCollection = "EcalClusters";
AIDA aida = AIDA.defaultInstance();
IPlotter plotter, plotter2, plotter3, plotter4;
@@ -47,7 +47,7 @@
@Override
protected void detectorChanged(Detector detector) {
- //plotterFrame = new AIDAFrame();
+ //plotterFrame = new AIDAFrame();
//plotterFrame.setTitle("HPS ECal Cluster Plots");
// Setup the plotter.
@@ -172,6 +172,6 @@
@Override
public void endOfData() {
- //plotterFrame.dispose();
+ //plotterFrame.dispose();
}
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalHitPlots.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalHitPlots.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/EcalHitPlots.java Wed Mar 9 11:43:24 2016
@@ -192,8 +192,8 @@
} else if (AbstractIntData.getTag(data) == SSPData.BANK_TAG) {
//SSPData triggerData = new SSPData(data);
// TODO: TOP, BOTTOM, AND, and OR trigger are test
- // run-specific parameters and are not supported by
- // SSPData.
+ // run-specific parameters and are not supported by
+ // SSPData.
int orTrig = 0; //triggerData.getOrTrig();
if(orTrig != 0) {
for (int i = 0; i < 32; i++) {
@@ -237,7 +237,7 @@
double botTime = Double.POSITIVE_INFINITY;
double orTime = Double.POSITIVE_INFINITY;
for (CalorimeterHit hit : hits) {
- /*
+ /*
if (hit.getIdentifierFieldValue("iy") > 0) {
topX.fill(hit.getIdentifierFieldValue("ix"),hit.getPosition()[0]);
topY.fill(hit.getIdentifierFieldValue("iy"),hit.getPosition()[1]);
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/FEEClusterPlotter.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/FEEClusterPlotter.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/FEEClusterPlotter.java Wed Mar 9 11:43:24 2016
@@ -28,8 +28,8 @@
*/
public class FEEClusterPlotter extends Driver {
-
- //private AIDAFrame plotterFrame;
+
+ //private AIDAFrame plotterFrame;
private AIDA aida = AIDA.defaultInstance();
IPlotter plotter;
IAnalysisFactory fac = aida.analysisFactory();
@@ -53,7 +53,7 @@
aida.tree().cd("/");
for (EcalChannel cc : ecalConditions.getChannelCollection()) {
//aida.histogram1D(getHistoName(cc),200,0.5,1.3);
- aida.histogram1D(getHistoName(cc),200,0.9,2.8);
+ aida.histogram1D(getHistoName(cc),200,0.9,2.8);
}
}
@@ -67,39 +67,39 @@
//only keep singles triggers:
if (!event.hasCollection(GenericObject.class,"TriggerBank"))
- throw new Driver.NextEventException();
+ throw new Driver.NextEventException();
boolean isSingles=false;
for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
- {
- if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
- TIData tid = new TIData(gob);
- if (tid.isSingle0Trigger() || tid.isSingle1Trigger())
- {
- isSingles=true;
- break;
- }
+ {
+ if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
+ TIData tid = new TIData(gob);
+ if (tid.isSingle0Trigger() || tid.isSingle1Trigger())
+ {
+ isSingles=true;
+ break;
+ }
}
if (isSingles){
- List<Cluster> clusters = event.get(Cluster.class, inputCollection);
- for (Cluster clus : clusters) {
- List<CalorimeterHit> hits = clus.getCalorimeterHits();
- CalorimeterHit seed = hits.get(0);
-
- double seedE = seed.getCorrectedEnergy();
- double clusE = clus.getEnergy();
- double time = seed.getTime();
-
- //if ((seedE/clusE > 0.6) && seedE >0.45 && time>30 && time <70){
- if ((seedE/clusE > 0.6) && seedE >0.65 && time>30 && time <70){
-
- EcalChannel cc = findChannel(seed);
- aida.histogram1D(getHistoName(cc)).fill(clusE);
- }
- }
+ List<Cluster> clusters = event.get(Cluster.class, inputCollection);
+ for (Cluster clus : clusters) {
+ List<CalorimeterHit> hits = clus.getCalorimeterHits();
+ CalorimeterHit seed = hits.get(0);
+
+ double seedE = seed.getCorrectedEnergy();
+ double clusE = clus.getEnergy();
+ double time = seed.getTime();
+
+ //if ((seedE/clusE > 0.6) && seedE >0.45 && time>30 && time <70){
+ if ((seedE/clusE > 0.6) && seedE >0.65 && time>30 && time <70){
+
+ EcalChannel cc = findChannel(seed);
+ aida.histogram1D(getHistoName(cc)).fill(clusE);
+ }
+ }
}
}
-
+
public void setOutputPlots(String output) {
this.outputPlots = output;
}
@@ -121,5 +121,5 @@
Logger.getLogger(FEEClusterPlotter.class.getName()).log(Level.SEVERE, null, ex);
}
}
- }
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalFADCPlotsDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalFADCPlotsDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalFADCPlotsDriver.java Wed Mar 9 11:43:24 2016
@@ -20,90 +20,90 @@
*/
public class HPSEcalFADCPlotsDriver extends Driver {
- String edepCollectionName = "EcalHits";
- String rawCollectionName = null;
- String ecalCollectionName = null;
- String clusterCollectionName = "EcalClusters";
- AIDA aida = AIDA.defaultInstance();
- IHistogram1D edepE;
- IHistogram1D rawE;
- IHistogram1D ecalE;
- IHistogram1D clusterE;
- ICloud2D window_E;
- double edepThreshold = 0.05;
+ String edepCollectionName = "EcalHits";
+ String rawCollectionName = null;
+ String ecalCollectionName = null;
+ String clusterCollectionName = "EcalClusters";
+ AIDA aida = AIDA.defaultInstance();
+ IHistogram1D edepE;
+ IHistogram1D rawE;
+ IHistogram1D ecalE;
+ IHistogram1D clusterE;
+ ICloud2D window_E;
+ double edepThreshold = 0.05;
- public void setEdepThreshold(double edepThreshold) {
- this.edepThreshold = edepThreshold;
- }
+ public void setEdepThreshold(double edepThreshold) {
+ this.edepThreshold = edepThreshold;
+ }
- public void setRawCollectionName(String rawCollectionName) {
- this.rawCollectionName = rawCollectionName;
- }
+ public void setRawCollectionName(String rawCollectionName) {
+ this.rawCollectionName = rawCollectionName;
+ }
- public void setEcalCollectionName(String ecalCollectionName) {
- this.ecalCollectionName = ecalCollectionName;
- }
+ public void setEcalCollectionName(String ecalCollectionName) {
+ this.ecalCollectionName = ecalCollectionName;
+ }
- public void setClusterCollectionName(String clusterCollectionName) {
- this.clusterCollectionName = clusterCollectionName;
- }
+ public void setClusterCollectionName(String clusterCollectionName) {
+ this.clusterCollectionName = clusterCollectionName;
+ }
- public void startOfData() {
- edepE = aida.histogram1D(
- "FADC plots: " + edepCollectionName + " : Hits",
- 500, 0.0, 5.0);
- if (rawCollectionName != null) {
- rawE = aida.histogram1D(
- "FADC plots: " + rawCollectionName + " : Hits",
- 500, 0.0, 500.0);
- window_E = aida.cloud2D("FADC plots: " + rawCollectionName + " : Window vs. E");
- }
- if (ecalCollectionName != null) {
- ecalE = aida.histogram1D(
- "FADC plots: " + ecalCollectionName + " : Hits",
- 500, 0.0, 5.0);
- }
- clusterE = aida.histogram1D(
- "FADC plots: " + clusterCollectionName + " : Clusters",
- 500, 0.0, 5.0);
- }
+ public void startOfData() {
+ edepE = aida.histogram1D(
+ "FADC plots: " + edepCollectionName + " : Hits",
+ 500, 0.0, 5.0);
+ if (rawCollectionName != null) {
+ rawE = aida.histogram1D(
+ "FADC plots: " + rawCollectionName + " : Hits",
+ 500, 0.0, 500.0);
+ window_E = aida.cloud2D("FADC plots: " + rawCollectionName + " : Window vs. E");
+ }
+ if (ecalCollectionName != null) {
+ ecalE = aida.histogram1D(
+ "FADC plots: " + ecalCollectionName + " : Hits",
+ 500, 0.0, 5.0);
+ }
+ clusterE = aida.histogram1D(
+ "FADC plots: " + clusterCollectionName + " : Clusters",
+ 500, 0.0, 5.0);
+ }
- public void process(EventHeader event) {
- List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
- if (clusters == null)
- throw new RuntimeException("Missing cluster collection!");
+ public void process(EventHeader event) {
+ List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
+ if (clusters == null)
+ throw new RuntimeException("Missing cluster collection!");
- List<CalorimeterHit> edepHits = event.get(CalorimeterHit.class, edepCollectionName);
- if (edepHits == null)
- throw new RuntimeException("Missing hit collection!");
+ List<CalorimeterHit> edepHits = event.get(CalorimeterHit.class, edepCollectionName);
+ if (edepHits == null)
+ throw new RuntimeException("Missing hit collection!");
- if (rawCollectionName != null) {
- List<RawCalorimeterHit> rawHits = event.get(RawCalorimeterHit.class, rawCollectionName);
- if (rawHits == null)
- throw new RuntimeException("Missing hit collection!");
+ if (rawCollectionName != null) {
+ List<RawCalorimeterHit> rawHits = event.get(RawCalorimeterHit.class, rawCollectionName);
+ if (rawHits == null)
+ throw new RuntimeException("Missing hit collection!");
- for (RawCalorimeterHit hit : rawHits) {
- rawE.fill(hit.getAmplitude());
- //window_E.fill(hit.getAmplitude(),hit.getWindowSize());
- }
- }
+ for (RawCalorimeterHit hit : rawHits) {
+ rawE.fill(hit.getAmplitude());
+ //window_E.fill(hit.getAmplitude(),hit.getWindowSize());
+ }
+ }
- if (ecalCollectionName != null) {
- List<CalorimeterHit> ecalHits = event.get(CalorimeterHit.class, ecalCollectionName);
- if (ecalHits == null)
- throw new RuntimeException("Missing hit collection!");
+ if (ecalCollectionName != null) {
+ List<CalorimeterHit> ecalHits = event.get(CalorimeterHit.class, ecalCollectionName);
+ if (ecalHits == null)
+ throw new RuntimeException("Missing hit collection!");
- for (CalorimeterHit hit : ecalHits) {
- ecalE.fill(hit.getRawEnergy());
- }
- }
+ for (CalorimeterHit hit : ecalHits) {
+ ecalE.fill(hit.getRawEnergy());
+ }
+ }
- for (CalorimeterHit hit : edepHits) {
- if (hit.getRawEnergy() > edepThreshold)
- edepE.fill(hit.getRawEnergy());
- }
- for (Cluster cluster : clusters) {
- clusterE.fill(cluster.getEnergy());
- }
- }
+ for (CalorimeterHit hit : edepHits) {
+ if (hit.getRawEnergy() > edepThreshold)
+ edepE.fill(hit.getRawEnergy());
+ }
+ for (Cluster cluster : clusters) {
+ clusterE.fill(cluster.getEnergy());
+ }
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalTriggerPlotsDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalTriggerPlotsDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSEcalTriggerPlotsDriver.java Wed Mar 9 11:43:24 2016
@@ -23,7 +23,7 @@
* Exp $
*/
public class HPSEcalTriggerPlotsDriver extends Driver {
- // LCSim collection names.
+ // LCSim collection names.
String ecalCollectionName = "EcalHits";
String clusterCollectionName = "EcalClusters";
@@ -55,46 +55,46 @@
}
public void startOfData() {
- // Initialize a hit histogram for each declared energy.
- for(int e = 0; e < energyCut.length; e++) {
- hitXYPlot[e] = aida.histogram2D("Trigger Plots: " + ecalCollectionName +
- " : Hits above " + energyCut[e] + " MeV", 46, -23, 23, 11, -5.5, 5.5);
- }
- // Initialize the remaining plots.
+ // Initialize a hit histogram for each declared energy.
+ for(int e = 0; e < energyCut.length; e++) {
+ hitXYPlot[e] = aida.histogram2D("Trigger Plots: " + ecalCollectionName +
+ " : Hits above " + energyCut[e] + " MeV", 46, -23, 23, 11, -5.5, 5.5);
+ }
+ // Initialize the remaining plots.
crystalDeadTime = aida.histogram2D("Trigger Plots: " + ecalCollectionName +
- " : Crystal dead time", 46, -23, 23, 11, -5.5, 5.5);
+ " : Crystal dead time", 46, -23, 23, 11, -5.5, 5.5);
clusterHitXYPlot = aida.histogram2D("Trigger Plots: " + clusterCollectionName +
- " : Crystals in clusters", 47, -23.5, 23.5, 11, -5.5, 5.5);
+ " : Crystals in clusters", 47, -23.5, 23.5, 11, -5.5, 5.5);
seedHitXYPlot = aida.histogram2D("Trigger Plots: " + clusterCollectionName +
- " : Seed hits", 47, -23.5, 23.5, 11, -5.5, 5.5);
+ " : Seed hits", 47, -23.5, 23.5, 11, -5.5, 5.5);
triggerClusterHitXYPlot = aida.histogram2D("Trigger Plots: " + clusterCollectionName +
" : Crystals in clusters, with trigger", 47, -23.5, 23.5, 11, -5.5, 5.5);
triggerSeedHitXYPlot = aida.histogram2D("Trigger Plots: " + clusterCollectionName +
- " : Seed hits, with trigger", 47, -23.5, 23.5, 11, -5.5, 5.5);
+ " : Seed hits, with trigger", 47, -23.5, 23.5, 11, -5.5, 5.5);
}
public void process(EventHeader event) {
- // If the current event has the indicated hit collection,
- // use it as the hit list.
- List<CalorimeterHit> hits;
- if(event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
- hits = event.get(CalorimeterHit.class, ecalCollectionName);
- }
- // If it does not, then use an empty list to avoid crashing.
- else { hits = new ArrayList<CalorimeterHit>(0); }
-
- // If the current event has the indicated cluster collection,
- // use it as the cluster list.
- List<Cluster> clusters;
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- clusters = event.get(Cluster.class, clusterCollectionName);
- }
- // If it does not, then use an empty list to avoid crashing.
- else { clusters = new ArrayList<Cluster>(0); }
+ // If the current event has the indicated hit collection,
+ // use it as the hit list.
+ List<CalorimeterHit> hits;
+ if(event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
+ hits = event.get(CalorimeterHit.class, ecalCollectionName);
+ }
+ // If it does not, then use an empty list to avoid crashing.
+ else { hits = new ArrayList<CalorimeterHit>(0); }
+
+ // If the current event has the indicated cluster collection,
+ // use it as the cluster list.
+ List<Cluster> clusters;
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ clusters = event.get(Cluster.class, clusterCollectionName);
+ }
+ // If it does not, then use an empty list to avoid crashing.
+ else { clusters = new ArrayList<Cluster>(0); }
// Populate hit plots.
for (CalorimeterHit hit : hits) {
- // Get the hit crystal position.
+ // Get the hit crystal position.
int ix = hit.getIdentifierFieldValue("ix");
int iy = hit.getIdentifierFieldValue("iy");
double energy = hit.getRawEnergy();
@@ -102,9 +102,9 @@
// Loop through the energy plots and fill them if the hit
// is over the current energy threshold/
for(int e = 0; e < energyCut.length; e++) {
- if(energy > energyCut[e] * EcalUtils.MeV) {
- hitXYPlot[e].fill(ix - 0.5 * Math.signum(ix), iy);
- }
+ if(energy > energyCut[e] * EcalUtils.MeV) {
+ hitXYPlot[e].fill(ix - 0.5 * Math.signum(ix), iy);
+ }
}
// Generate the dead time plot.
@@ -121,8 +121,8 @@
// Populate cluster based plots.
for (Cluster cluster : clusters) {
- // Get the cluster's seed hit position.
- CalorimeterHit seed = cluster.getCalorimeterHits().get(0);
+ // Get the cluster's seed hit position.
+ CalorimeterHit seed = cluster.getCalorimeterHits().get(0);
int ix = seed.getIdentifierFieldValue("ix");
int iy = seed.getIdentifierFieldValue("iy");
@@ -135,7 +135,7 @@
// Populate the component hit histogram.
for (CalorimeterHit hit : cluster.getCalorimeterHits()) {
- // Get the component hit location.
+ // Get the component hit location.
ix = hit.getIdentifierFieldValue("ix");
iy = hit.getIdentifierFieldValue("iy");
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSMCParticlePlotsDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSMCParticlePlotsDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/ecal/HPSMCParticlePlotsDriver.java Wed Mar 9 11:43:24 2016
@@ -25,138 +25,138 @@
*/
public class HPSMCParticlePlotsDriver extends Driver {
- AIDA aida = AIDA.defaultInstance();
+ AIDA aida = AIDA.defaultInstance();
//private AIDAFrame pFrame;
IAnalysisFactory af = aida.analysisFactory();
public boolean _hideFrame = false;
// MCParticle plots.
- ICloud1D primaryEPlot;
- ICloud1D fsCountPlot;
- IHistogram1D fsCountVsEventPlot;
- ICloud1D fsCountTypePlot;
- ICloud1D fsCountEventTypePlot;
- ICloud1D fsCountEventTypePlot2;
- ICloud1D fsCountTypePlot500;
- IHistogram1D fsEPlot;
- IHistogram1D fsGammaEPlot;
- IHistogram1D fsElectronEPlot;
- IHistogram1D fsPositronEPlot;
- IHistogram1D fsThetayPlot;
- ICloud1D fsGammaThetaPlot;
- IHistogram1D fsGammaThetayPlot;
- IHistogram1D fsGammaThetayTrigPlot;
- ICloud2D fsGammaThetayEPlot;
- ICloud1D fsElectronThetaPlot;
- IHistogram1D fsElectronThetayPlot;
- IHistogram1D fsElectronThetayTrigPlot;
- ICloud2D fsElectronThetayEPlot;
- ICloud1D fsPositronThetaPlot;
- IHistogram1D fsPositronThetayPlot;
- IHistogram1D fsPositronThetayTrigPlot;
- ICloud2D fsPositronThetayEPlot;
+ ICloud1D primaryEPlot;
+ ICloud1D fsCountPlot;
+ IHistogram1D fsCountVsEventPlot;
+ ICloud1D fsCountTypePlot;
+ ICloud1D fsCountEventTypePlot;
+ ICloud1D fsCountEventTypePlot2;
+ ICloud1D fsCountTypePlot500;
+ IHistogram1D fsEPlot;
+ IHistogram1D fsGammaEPlot;
+ IHistogram1D fsElectronEPlot;
+ IHistogram1D fsPositronEPlot;
+ IHistogram1D fsThetayPlot;
+ ICloud1D fsGammaThetaPlot;
+ IHistogram1D fsGammaThetayPlot;
+ IHistogram1D fsGammaThetayTrigPlot;
+ ICloud2D fsGammaThetayEPlot;
+ ICloud1D fsElectronThetaPlot;
+ IHistogram1D fsElectronThetayPlot;
+ IHistogram1D fsElectronThetayTrigPlot;
+ ICloud2D fsElectronThetayEPlot;
+ ICloud1D fsPositronThetaPlot;
+ IHistogram1D fsPositronThetayPlot;
+ IHistogram1D fsPositronThetayTrigPlot;
+ ICloud2D fsPositronThetayEPlot;
ICloud1D eventEPlot;
- class MCParticleEComparator implements Comparator<MCParticle> {
-
- public int compare(MCParticle p1, MCParticle p2) {
- double e1 = p1.getEnergy();
- double e2 = p2.getEnergy();
- if (e1 < e2) {
- return -1;
- } else if (e1 == e2) {
- return 0;
- } else {
- return 1;
- }
- }
- }
+ class MCParticleEComparator implements Comparator<MCParticle> {
+
+ public int compare(MCParticle p1, MCParticle p2) {
+ double e1 = p1.getEnergy();
+ double e2 = p2.getEnergy();
+ if (e1 < e2) {
+ return -1;
+ } else if (e1 == e2) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+ }
public void setHideFrame(boolean hideFrame) {
this._hideFrame = hideFrame;
}
- @Override
- public void startOfData() {
- fsCountPlot = aida.cloud1D("MCParticle: Number of Final State Particles");
- fsCountPlot.annotation().addItem("xAxisLabel", "Number of FS Particles");
+ @Override
+ public void startOfData() {
+ fsCountPlot = aida.cloud1D("MCParticle: Number of Final State Particles");
+ fsCountPlot.annotation().addItem("xAxisLabel", "Number of FS Particles");
fsCountVsEventPlot = aida.histogram1D("MCParticle: Number of Final State Particles vs Event Nr", 501, -0.5, 500.5);
- fsCountVsEventPlot.annotation().addItem("xAxisLabel", "Event Number");
+ fsCountVsEventPlot.annotation().addItem("xAxisLabel", "Event Number");
fsCountTypePlot = aida.cloud1D("MCParticle: Number of Final State Particles Type");
- fsCountTypePlot.annotation().addItem("xAxisLabel", "Number of FS Particles of Type");
+ fsCountTypePlot.annotation().addItem("xAxisLabel", "Number of FS Particles of Type");
fsCountTypePlot500 = aida.cloud1D("MCParticle: Number of Final State Particles Type E>0.5GeV");
- fsCountTypePlot500.annotation().addItem("xAxisLabel", "Number of FS Particles of Type E>0.5GeV");
+ fsCountTypePlot500.annotation().addItem("xAxisLabel", "Number of FS Particles of Type E>0.5GeV");
fsCountEventTypePlot = aida.cloud1D("MCParticle: Number of Final State Types");
- fsCountEventTypePlot.annotation().addItem("xAxisLabel", "Number of FS Types");
+ fsCountEventTypePlot.annotation().addItem("xAxisLabel", "Number of FS Types");
fsCountEventTypePlot2 = aida.cloud1D("MCParticle: Number of Final State Types Gamma E>500");
- fsCountEventTypePlot2.annotation().addItem("xAxisLabel", "Number of FS Types Gamma E>500");
-
- fsEPlot = aida.histogram1D("MCParticle: FS Particle E",100,0,3);
- fsEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
-
- fsGammaEPlot = aida.histogram1D("MCParticle: FS Gamma E",100,0,3);
- fsGammaEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
-
- fsElectronEPlot = aida.histogram1D("MCParticle: FS Electron E",100,0,3);
- fsElectronEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
-
- fsPositronEPlot = aida.histogram1D("MCParticle: FS Positron E",100,0,3);
- fsPositronEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
-
- fsGammaThetaPlot = aida.cloud1D("MCParticle: FS Gamma Theta");
- fsGammaThetaPlot.annotation().addItem("xAxisLabel", "Particle angle [rad]");
+ fsCountEventTypePlot2.annotation().addItem("xAxisLabel", "Number of FS Types Gamma E>500");
+
+ fsEPlot = aida.histogram1D("MCParticle: FS Particle E",100,0,3);
+ fsEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
+
+ fsGammaEPlot = aida.histogram1D("MCParticle: FS Gamma E",100,0,3);
+ fsGammaEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
+
+ fsElectronEPlot = aida.histogram1D("MCParticle: FS Electron E",100,0,3);
+ fsElectronEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
+
+ fsPositronEPlot = aida.histogram1D("MCParticle: FS Positron E",100,0,3);
+ fsPositronEPlot.annotation().addItem("xAxisLabel", "Particle E [GeV]");
+
+ fsGammaThetaPlot = aida.cloud1D("MCParticle: FS Gamma Theta");
+ fsGammaThetaPlot.annotation().addItem("xAxisLabel", "Particle angle [rad]");
fsThetayPlot = aida.histogram1D("MCParticle: FS Particle Thetay",100,0,0.1);
- fsThetayPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsThetayPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
fsGammaThetayPlot = aida.histogram1D("MCParticle: FS Gamma Thetay",100,0,0.1);
- fsGammaThetayPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsGammaThetayPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
fsGammaThetayTrigPlot = aida.histogram1D("MCParticle: FS Gamma Thetay Trig",100,0,0.1);
- fsGammaThetayTrigPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsGammaThetayTrigPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
fsGammaThetayEPlot = aida.cloud2D("MCParticle: FS Gamma Thetay vs E");
- fsGammaThetayEPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
- fsGammaThetayEPlot.annotation().addItem("yAxisLabel", "Particle Energy [GeV]");
-
- fsElectronThetaPlot = aida.cloud1D("MCParticle: FS Electron Theta");
- fsElectronThetaPlot.annotation().addItem("xAxisLabel", "Particle angle [rad]");
+ fsGammaThetayEPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsGammaThetayEPlot.annotation().addItem("yAxisLabel", "Particle Energy [GeV]");
+
+ fsElectronThetaPlot = aida.cloud1D("MCParticle: FS Electron Theta");
+ fsElectronThetaPlot.annotation().addItem("xAxisLabel", "Particle angle [rad]");
fsElectronThetayPlot = aida.histogram1D("MCParticle: FS Electron Thetay",100,0,0.1);
- fsElectronThetayPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsElectronThetayPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
fsElectronThetayTrigPlot = aida.histogram1D("MCParticle: FS Electron Thetay Trig",100,0,0.1);
- fsElectronThetayTrigPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsElectronThetayTrigPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
fsElectronThetayEPlot = aida.cloud2D("MCParticle: FS Electron Thetay vs E");
- fsElectronThetayEPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
- fsElectronThetayEPlot.annotation().addItem("yAxisLabel", "Particle Energy [GeV]");
-
- fsPositronThetaPlot = aida.cloud1D("MCParticle: FS Positron Theta");
- fsPositronThetaPlot.annotation().addItem("xAxisLabel", "Particle angle [rad]");
+ fsElectronThetayEPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsElectronThetayEPlot.annotation().addItem("yAxisLabel", "Particle Energy [GeV]");
+
+ fsPositronThetaPlot = aida.cloud1D("MCParticle: FS Positron Theta");
+ fsPositronThetaPlot.annotation().addItem("xAxisLabel", "Particle angle [rad]");
fsPositronThetayPlot = aida.histogram1D("MCParticle: FS Positron Thetay",100,0,0.1);
- fsPositronThetayPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsPositronThetayPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
fsPositronThetayTrigPlot = aida.histogram1D("MCParticle: FS Positron Thetay Trig",100,0,0.1);
- fsPositronThetayTrigPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsPositronThetayTrigPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
fsPositronThetayEPlot = aida.cloud2D("MCParticle: FS Positron Thetay vs E");
- fsPositronThetayEPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
- fsPositronThetayEPlot.annotation().addItem("yAxisLabel", "Particle Energy [GeV]");
-
-
- primaryEPlot = aida.cloud1D("MCParticle: Highest Primary E in Event");
- primaryEPlot.annotation().addItem("xAxisLabel", "E [GeV]");
-
- eventEPlot = aida.cloud1D("MCParticle: Total Gen FS Electron E in Event");
- eventEPlot.annotation().addItem("xAxisLabel", "E [GeV]");
+ fsPositronThetayEPlot.annotation().addItem("xAxisLabel", "Particle Thetay angle [rad]");
+ fsPositronThetayEPlot.annotation().addItem("yAxisLabel", "Particle Energy [GeV]");
+
+
+ primaryEPlot = aida.cloud1D("MCParticle: Highest Primary E in Event");
+ primaryEPlot.annotation().addItem("xAxisLabel", "E [GeV]");
+
+ eventEPlot = aida.cloud1D("MCParticle: Total Gen FS Electron E in Event");
+ eventEPlot.annotation().addItem("xAxisLabel", "E [GeV]");
//pFrame = new AIDAFrame();
@@ -205,19 +205,19 @@
- }
-
- @Override
- public void process(EventHeader event) {
-
- // MCParticles
- List<MCParticle> mcparticles = event.get(MCParticle.class).get(0);
-
- // Final State particles.
- List<MCParticle> fsParticles = makeGenFSParticleList(mcparticles);
-
- //System.out.println("fsParticles="+fsParticles.size());
- fsCountPlot.fill(fsParticles.size());
+ }
+
+ @Override
+ public void process(EventHeader event) {
+
+ // MCParticles
+ List<MCParticle> mcparticles = event.get(MCParticle.class).get(0);
+
+ // Final State particles.
+ List<MCParticle> fsParticles = makeGenFSParticleList(mcparticles);
+
+ //System.out.println("fsParticles="+fsParticles.size());
+ fsCountPlot.fill(fsParticles.size());
for (int i=0;i<fsParticles.size();++i) fsCountVsEventPlot.fill(event.getEventNumber());
@@ -229,69 +229,69 @@
int[] ngammas = {0,0};
int count = 0;
double trigThr = 0.2;
- for (MCParticle fs : fsParticles) {
+ for (MCParticle fs : fsParticles) {
//System.out.println("Index " + count);
- double fsE = fs.getEnergy();
- double theta = Math.atan2(Math.sqrt(fs.getPX() * fs.getPX() + fs.getPY() * fs.getPY()), fs.getPZ());
- double thetay = Math.atan2(fs.getPY(), fs.getPZ());
- int fsPdg = fs.getPDGID();
- fsEPlot.fill(fsE);
+ double fsE = fs.getEnergy();
+ double theta = Math.atan2(Math.sqrt(fs.getPX() * fs.getPX() + fs.getPY() * fs.getPY()), fs.getPZ());
+ double thetay = Math.atan2(fs.getPY(), fs.getPZ());
+ int fsPdg = fs.getPDGID();
+ fsEPlot.fill(fsE);
this.fsThetayPlot.fill(Math.abs(thetay));
fsCountTypePlot.fill(fsPdg);
if(fsE>0.5) fsCountTypePlot500.fill(fsPdg);
- if (ParticleTypeClassifier.isElectron(fsPdg)) {
- fsElectronEPlot.fill(fsE);
- fsElectronThetaPlot.fill(theta);
- fsElectronThetayPlot.fill(Math.abs(thetay));
- if(fsE>trigThr) fsElectronThetayTrigPlot.fill(Math.abs(thetay));
- fsElectronThetayEPlot.fill(Math.abs(thetay),fsE);
+ if (ParticleTypeClassifier.isElectron(fsPdg)) {
+ fsElectronEPlot.fill(fsE);
+ fsElectronThetaPlot.fill(theta);
+ fsElectronThetayPlot.fill(Math.abs(thetay));
+ if(fsE>trigThr) fsElectronThetayTrigPlot.fill(Math.abs(thetay));
+ fsElectronThetayEPlot.fill(Math.abs(thetay),fsE);
nelectrons[0]++;
if(fsGammaEmax>0.5) nelectrons[1]++;
- } else if (ParticleTypeClassifier.isPositron(fsPdg)) {
- fsPositronEPlot.fill(fsE);
- fsPositronThetaPlot.fill(theta);
- fsPositronThetayPlot.fill(Math.abs(thetay));
- if(fsE>trigThr) fsPositronThetayTrigPlot.fill(Math.abs(thetay));
- fsPositronThetayEPlot.fill(Math.abs(thetay),fsE);
+ } else if (ParticleTypeClassifier.isPositron(fsPdg)) {
+ fsPositronEPlot.fill(fsE);
+ fsPositronThetaPlot.fill(theta);
+ fsPositronThetayPlot.fill(Math.abs(thetay));
+ if(fsE>trigThr) fsPositronThetayTrigPlot.fill(Math.abs(thetay));
+ fsPositronThetayEPlot.fill(Math.abs(thetay),fsE);
npositrons[0]++;
if(fsGammaEmax>0.5) npositrons[1]++;
- } else if (ParticleTypeClassifier.isPhoton(fsPdg)) {
- fsGammaEPlot.fill(fsE);
- fsGammaThetaPlot.fill(theta);
- fsGammaThetayPlot.fill(Math.abs(thetay));
- if(fsE>trigThr) fsGammaThetayTrigPlot.fill(Math.abs(thetay));
- fsGammaThetayEPlot.fill(Math.abs(thetay),fsE);
+ } else if (ParticleTypeClassifier.isPhoton(fsPdg)) {
+ fsGammaEPlot.fill(fsE);
+ fsGammaThetaPlot.fill(theta);
+ fsGammaThetayPlot.fill(Math.abs(thetay));
+ if(fsE>trigThr) fsGammaThetayTrigPlot.fill(Math.abs(thetay));
+ fsGammaThetayEPlot.fill(Math.abs(thetay),fsE);
ngammas[0]++;
if(fsGammaEmax>0.5) {
ngammas[1]++;
//System.out.println("Counting high E gamma at count "+ count);
}
- }
- }
+ }
+ }
fsCountEventTypePlot.fill(getEventTypeId(nelectrons[0],npositrons[0],ngammas[0]));
fsCountEventTypePlot2.fill(getEventTypeId(nelectrons[1],npositrons[1],ngammas[1]));
- // Sort MCParticles on energy.
- //Collections.sort(fsParticles, new MCParticleEComparator());
-
- // Energy of top two FS particles.
- //double e2 = fsParticles.get(0).getEnergy() + fsParticles.get(1).getEnergy();
-
- // Energy of top three FS particles.
- //double e3 = e2 + fsParticles.get(2).getEnergy();
-
- if (!fsParticles.isEmpty()) {
- // primary particle with most E
- double primaryE = getPrimary(fsParticles).getEnergy();
- primaryEPlot.fill(primaryE);
- }
-
- // event electron energy
- double eventE = getPrimaryElectronE(fsParticles);
- eventEPlot.fill(eventE);
- }
+ // Sort MCParticles on energy.
+ //Collections.sort(fsParticles, new MCParticleEComparator());
+
+ // Energy of top two FS particles.
+ //double e2 = fsParticles.get(0).getEnergy() + fsParticles.get(1).getEnergy();
+
+ // Energy of top three FS particles.
+ //double e3 = e2 + fsParticles.get(2).getEnergy();
+
+ if (!fsParticles.isEmpty()) {
+ // primary particle with most E
+ double primaryE = getPrimary(fsParticles).getEnergy();
+ primaryEPlot.fill(primaryE);
+ }
+
+ // event electron energy
+ double eventE = getPrimaryElectronE(fsParticles);
+ eventEPlot.fill(eventE);
+ }
public int getEventTypeId(int ne, int np, int ng) {
@@ -314,57 +314,57 @@
return 0;
}
- public double getHighestPhotonE(List<MCParticle> particles) {
- double Emax = -1;
+ public double getHighestPhotonE(List<MCParticle> particles) {
+ double Emax = -1;
double E=0;
int count = 0;
- for (MCParticle particle : particles) {
- if (ParticleTypeClassifier.isPhoton(particle.getPDGID())) {
- E = particle.getEnergy();
+ for (MCParticle particle : particles) {
+ if (ParticleTypeClassifier.isPhoton(particle.getPDGID())) {
+ E = particle.getEnergy();
if(E>Emax) {
Emax = E;
//System.out.println("Emax from photon with index " + count);
}
- count++;
+ count++;
}
- }
- return Emax;
- }
+ }
+ return Emax;
+ }
private double getPrimaryElectronE(List<MCParticle> particles) {
- double totalE = 0;
- for (MCParticle particle : particles) {
- if (Math.abs(particle.getPDGID()) == 11) {
- totalE += particle.getEnergy();
- }
- }
- return totalE;
- }
-
- private MCParticle getPrimary(List<MCParticle> particles) {
- double maxE = 0;
- MCParticle primary = null;
- for (MCParticle particle : particles) {
- if (particle.getEnergy() > maxE) {
- maxE = particle.getEnergy();
- primary = particle;
- }
- }
- return primary;
- }
-
- public static List<MCParticle> makeGenFSParticleList(List<MCParticle> mcparticles) {
- List<MCParticle> fsParticles = new ArrayList<MCParticle>();
- for (MCParticle mcparticle : mcparticles) {
- if (mcparticle.getGeneratorStatus() == MCParticle.FINAL_STATE) {
- double theta = Math.atan2(Math.sqrt(mcparticle.getPX() * mcparticle.getPX() + mcparticle.getPY() * mcparticle.getPY()), mcparticle.getPZ());
- if (theta > 1e-3) {
- fsParticles.add(mcparticle);
- }
- }
- }
- return fsParticles;
- }
+ double totalE = 0;
+ for (MCParticle particle : particles) {
+ if (Math.abs(particle.getPDGID()) == 11) {
+ totalE += particle.getEnergy();
+ }
+ }
+ return totalE;
+ }
+
+ private MCParticle getPrimary(List<MCParticle> particles) {
+ double maxE = 0;
+ MCParticle primary = null;
+ for (MCParticle particle : particles) {
+ if (particle.getEnergy() > maxE) {
+ maxE = particle.getEnergy();
+ primary = particle;
+ }
+ }
+ return primary;
+ }
+
+ public static List<MCParticle> makeGenFSParticleList(List<MCParticle> mcparticles) {
+ List<MCParticle> fsParticles = new ArrayList<MCParticle>();
+ for (MCParticle mcparticle : mcparticles) {
+ if (mcparticle.getGeneratorStatus() == MCParticle.FINAL_STATE) {
+ double theta = Math.atan2(Math.sqrt(mcparticle.getPX() * mcparticle.getPX() + mcparticle.getPY() * mcparticle.getPY()), mcparticle.getPZ());
+ if (theta > 1e-3) {
+ fsParticles.add(mcparticle);
+ }
+ }
+ }
+ return fsParticles;
+ }
public void endOfData() {
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripGoldenEventsDriver.java Wed Mar 9 11:43:24 2016
@@ -27,7 +27,7 @@
boolean skipEvent = false;
if (event.hasCollection(ReconstructedParticle.class, "UnconstrainedV0Candidates")) {
List<ReconstructedParticle> vertices = event.get(ReconstructedParticle.class, "UnconstrainedV0Candidates");
- //System.out.println("Thete are: "+vertices.size()+" Unconstrained V0 candidates");
+ //System.out.println("Thete are: "+vertices.size()+" Unconstrained V0 candidates");
if (vertices.size() > 1 || vertices.isEmpty()) {
skipEvent = true;
} else {
@@ -38,14 +38,14 @@
List<Track> trks = rp.getTracks();
// require each track to have six hits
if (trks.get(0).getTrackerHits().size() != 6) {
- //System.out.println("Thete are: "+trks.get(0).getTrackerHits().size()+" hits on Track");
+ //System.out.println("Thete are: "+trks.get(0).getTrackerHits().size()+" hits on Track");
skipEvent = true;
}
}
// require no other tracks in the event
if (event.get(Track.class, "MatchedTracks").size() > 2) {
skipEvent = true;
- //System.out.println("Thete are: "+event.get(Track.class, "MatchedTracks").size()+" Matched tracks");
+ //System.out.println("Thete are: "+event.get(Track.class, "MatchedTracks").size()+" Matched tracks");
}
// require no other clusters in the event
if (event.get(Cluster.class, "EcalClustersGTP").size() > 2) {
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripMollerEventsDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripMollerEventsDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/examples/StripMollerEventsDriver.java Wed Mar 9 11:43:24 2016
@@ -94,7 +94,7 @@
skipEvent = false;
}
}
- //System.out.println("Thete are: "+event.get(Track.class, "MatchedTracks").size()+" Matched tracks");
+ //System.out.println("Thete are: "+event.get(Track.class, "MatchedTracks").size()+" Matched tracks");
}
}
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/DataTriggerSimDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/DataTriggerSimDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/DataTriggerSimDriver.java Wed Mar 9 11:43:24 2016
@@ -54,448 +54,448 @@
* @see SimTriggerData
*/
public class DataTriggerSimDriver extends Driver {
- // Store the LCIO collection names for the needed objects.
- private boolean filterUnverifiable = false;
- private String bankCollectionName = "TriggerBank";
- private String clusterCollectionName = "EcalClusters";
- private String simTriggerCollectionName = "SimTriggers";
-
- // Store the SSP bank.
- private SSPData sspBank = null;
-
- // Store cluster verifiability parameters.
- private int nsa = 0;
- private int nsb = 0;
- private int windowWidth = 0;
-
- // Define trigger simulation modules.
- private boolean[] pairTriggerEnabled = new boolean[2];
- private boolean[] singlesTriggerEnabled = new boolean[2];
- private boolean[][] pairCutsEnabled = new boolean[2][7];
- private boolean[][] singlesCutsEnabled = new boolean[2][3];
- private TriggerModule[] pairsTrigger = new TriggerModule[2];
- private TriggerModule[] singlesTrigger = new TriggerModule[2];
-
- // Reference variables.
- private static final int ENERGY_MIN = TriggerDiagnosticUtil.SINGLES_ENERGY_MIN;
- private static final int ENERGY_MAX = TriggerDiagnosticUtil.SINGLES_ENERGY_MAX;
- private static final int HIT_COUNT = TriggerDiagnosticUtil.SINGLES_HIT_COUNT;
- private static final int ENERGY_SUM = TriggerDiagnosticUtil.PAIR_ENERGY_SUM;
- private static final int ENERGY_DIFF = TriggerDiagnosticUtil.PAIR_ENERGY_DIFF;
- private static final int ENERGY_SLOPE = TriggerDiagnosticUtil.PAIR_ENERGY_SLOPE;
- private static final int COPLANARITY = TriggerDiagnosticUtil.PAIR_COPLANARITY;
-
- /**
- * Connects the driver to the the <code>ConfigurationManager</code>
- * in order to obtain the correct trigger information. Trigger
- * settings are stored in the <code>TriggerModule</code> objects.
- */
- @Override
- public void startOfData() {
- // Define the first singles trigger.
- singlesTrigger[0] = new TriggerModule();
- singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.500);
- singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
- singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
-
- // Define the second singles trigger.
- singlesTrigger[1] = new TriggerModule();
- singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
- singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
- singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
-
- // Define the first pairs trigger.
- pairsTrigger[0] = new TriggerModule();
- pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
- pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
- pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 8.191);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 8.191);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.000);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.001);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 180);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 8);
-
- // Define the second pairs trigger.
- pairsTrigger[1] = new TriggerModule();
- pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
- pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
- pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 8.191);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 8.191);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.000);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.001);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 180);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 8);
-
- // Listen for the configuration manager to provide the real
- // trigger settings.
- ConfigurationManager.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // Get the DAQ configuration.
- DAQConfig daq = ConfigurationManager.getInstance();
-
- // Get cluster verifiability parameters.
- nsa = daq.getFADCConfig().getNSA();
- nsb = daq.getFADCConfig().getNSB();
- windowWidth = daq.getFADCConfig().getWindowWidth();
-
- // Load the DAQ settings from the configuration manager.
- singlesTrigger[0].loadDAQConfiguration(daq.getSSPConfig().getSingles1Config());
- singlesTrigger[1].loadDAQConfiguration(daq.getSSPConfig().getSingles2Config());
- pairsTrigger[0].loadDAQConfiguration(daq.getSSPConfig().getPair1Config());
- pairsTrigger[1].loadDAQConfiguration(daq.getSSPConfig().getPair2Config());
-
- // Get the trigger configurations from the DAQ.
- SinglesTriggerConfig[] singles = { daq.getSSPConfig().getSingles1Config(),
- daq.getSSPConfig().getSingles2Config() };
- PairTriggerConfig[] pairs = { daq.getSSPConfig().getPair1Config(),
- daq.getSSPConfig().getPair2Config() };
-
- // Update the enabled/disabled statuses.
- for(int i = 0; i < 2; i++) {
- // Set the trigger enabled status.
- pairTriggerEnabled[i] = pairs[i].isEnabled();
- singlesTriggerEnabled[i] = singles[i].isEnabled();
-
- // Set the singles cut statuses.
- singlesCutsEnabled[i][ENERGY_MIN] = singles[i].getEnergyMinCutConfig().isEnabled();
- singlesCutsEnabled[i][ENERGY_MAX] = singles[i].getEnergyMaxCutConfig().isEnabled();
- singlesCutsEnabled[i][HIT_COUNT] = singles[i].getHitCountCutConfig().isEnabled();
-
- // Set the pair cut statuses.
- pairCutsEnabled[i][ENERGY_MIN] = pairs[i].getEnergyMinCutConfig().isEnabled();
- pairCutsEnabled[i][ENERGY_MAX] = pairs[i].getEnergyMaxCutConfig().isEnabled();
- pairCutsEnabled[i][HIT_COUNT] = pairs[i].getHitCountCutConfig().isEnabled();
- pairCutsEnabled[i][3 + ENERGY_SUM] = pairs[i].getEnergySumCutConfig().isEnabled();
- pairCutsEnabled[i][3 + ENERGY_DIFF] = pairs[i].getEnergyDifferenceCutConfig().isEnabled();
- pairCutsEnabled[i][3 + ENERGY_SLOPE] = pairs[i].getEnergySlopeCutConfig().isEnabled();
- pairCutsEnabled[i][3 + COPLANARITY] = pairs[i].getCoplanarityCutConfig().isEnabled();
- }
- }
- });
- }
-
- /**
- * Processes an LCIO event and simulates triggers in the same manner
- * as the hardware for both <code>SSPCluster</code> objects as well
- * as <code>Cluster</code> objects reconstructed from FADC hits.
- * Triggers are then output to the data stream.
- * @param event - The <code>EventHeader</code> object representing
- * the current LCIO event.
- */
- @Override
- public void process(EventHeader event) {
- // If the DAQ configuration manager has not been initialized,
- // then no action can be performed.
- if(!ConfigurationManager.isInitialized()) {
- // Put an empty trigger results module into the data stream.
- SimTriggerData triggerData = new SimTriggerData();
- List<SimTriggerData> dataList = new ArrayList<SimTriggerData>(1);
- dataList.add(triggerData);
- event.put(simTriggerCollectionName, dataList, SimTriggerData.class, 0);
-
- // Nothing further can be done, since trigger settings are
- // not yet defined.
- return;
- }
-
- // Get the SSP bank.
- if(event.hasCollection(GenericObject.class, bankCollectionName)) {
- // Get the bank list.
- List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
-
- // Search through the banks and get the SSP and TI banks.
- for(GenericObject obj : bankList) {
- // If this is an SSP bank, parse it.
- if(AbstractIntData.getTag(obj) == SSPData.BANK_TAG) {
- sspBank = new SSPData(obj);
- }
- }
- }
-
- // Get a list of SSPClusters.
- List<SSPCluster> sspClusters = null;
- if(sspBank != null) { sspClusters = sspBank.getClusters(); }
- else { sspClusters = new ArrayList<SSPCluster>(0); }
-
- // Get reconstructed clusters.
- List<Cluster> reconClusters = null;
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- reconClusters = event.get(Cluster.class, clusterCollectionName);
- }
- else { reconClusters = new ArrayList<Cluster>(0); }
-
- // If only "verifiable" clusters should be used, test all the
- // reconstructed clusters for verifiability.
- if(filterUnverifiable) {
- // Create a list to store the verifiable clusters.
- List<Cluster> goodClusters = new ArrayList<Cluster>();
-
- // Iterate over all the clusters and test them to see if
- // they are verifiable.
- for(Cluster cluster : reconClusters) {
- if(TriggerDiagnosticUtil.isVerifiable(cluster, nsa, nsb, windowWidth)) {
- goodClusters.add(cluster);
- }
- }
-
- // Replace the old cluster list with the new one.
- reconClusters = goodClusters;
- }
-
- // Generate simulated triggers.
- SimTriggerModule<Cluster> reconModule = constructTriggers(reconClusters, Cluster.class);
- SimTriggerModule<SSPCluster> sspModule = constructTriggers(sspClusters, SSPCluster.class);
-
- // Insert the trigger results in the data stream.
- SimTriggerData triggerData = new SimTriggerData(reconModule, sspModule);
- List<SimTriggerData> dataList = new ArrayList<SimTriggerData>(1);
- dataList.add(triggerData);
- event.put(simTriggerCollectionName, dataList, SimTriggerData.class, 0);
- }
-
- /**
- * Constructs simulated triggers in the same manner as the hardware.
- * Method can accept either <code>Cluster</code> objects, any object
- * that is a subclass of <code>Cluster</code>, or objects of type
- * <code>SSPCluster</code>.
- * @param clusters - A <code>List</code> collection of the cluster
- * objects from which triggers are to be derived.
- * @param clusterType - The class of the cluster objects from which
- * triggers are to be derived. This can be <code>Cluster</code>,
- * <code>SSPCluster</code>, or a subclass thereof.
- * @return Returns a <code>SimTriggerModule</code> object containing
- * the simulated trigger results.
- * @throws IllegalArgumentException Occurs if the class of the
- * cluster objects is not of a supported type.
- *
- */
- private <E> SimTriggerModule<E> constructTriggers(List<E> clusters, Class<E> clusterType) throws IllegalArgumentException {
- // Verify that the cluster type is supported.
- if(!clusterType.equals(Cluster.class) && !clusterType.equals(SSPCluster.class)) {
- throw new IllegalArgumentException("Class \"" + clusterType.getSimpleName() + "\" is not a supported cluster type.");
- }
-
- // Store the singles and pair triggers.
- List<List<PairTrigger<E[]>>> pairTriggers = new ArrayList<List<PairTrigger<E[]>>>(2);
- pairTriggers.add(new ArrayList<PairTrigger<E[]>>());
- pairTriggers.add(new ArrayList<PairTrigger<E[]>>());
- List<List<SinglesTrigger<E>>> singlesTriggers = new ArrayList<List<SinglesTrigger<E>>>(2);
- singlesTriggers.add(new ArrayList<SinglesTrigger<E>>());
- singlesTriggers.add(new ArrayList<SinglesTrigger<E>>());
-
- // Run the clusters through the singles trigger to determine
- // whether or not they pass it.
- for(E cluster : clusters) {
- // Simulate each of the cluster singles triggers.
- triggerLoop:
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- // Track whether the cluster passed each singles cut.
- boolean passSeedLow = true;
- boolean passSeedHigh = true;
- boolean passClusterLow = false;
- boolean passClusterHigh = false;
- boolean passHitCount = false;
-
- // Perform the trigger cuts appropriately for the type
- // of cluster.
- if(cluster instanceof Cluster) {
- // Cast the cluster to the appropriate type.
- Cluster c = (Cluster) cluster;
-
- // Perform each trigger cut.
- passClusterLow = singlesTrigger[triggerNum].clusterTotalEnergyCutLow(c);
- passClusterHigh = singlesTrigger[triggerNum].clusterTotalEnergyCutHigh(c);
- passHitCount = singlesTrigger[triggerNum].clusterHitCountCut(c);
- } else if(cluster instanceof SSPCluster) {
- // Cast the cluster to the appropriate type.
- SSPCluster c = (SSPCluster) cluster;
-
- // Perform each trigger cut.
- passClusterLow = singlesTrigger[triggerNum].clusterTotalEnergyCutLow(c);
- passClusterHigh = singlesTrigger[triggerNum].clusterTotalEnergyCutHigh(c);
- passHitCount = singlesTrigger[triggerNum].clusterHitCountCut(c);
- }
-
- // Make a trigger to store the results.
- SinglesTrigger<E> trigger = new SinglesTrigger<E>(cluster, triggerNum);
- trigger.setStateSeedEnergyLow(passSeedLow);
- trigger.setStateSeedEnergyHigh(passSeedHigh);
- trigger.setStateClusterEnergyLow(passClusterLow);
- trigger.setStateClusterEnergyHigh(passClusterHigh);
- trigger.setStateHitCount(passHitCount);
-
- // A trigger will only be reported by the SSP if it
- // passes all of the enabled cuts for that trigger.
- // Check whether this trigger meets these conditions.
- if(singlesCutsEnabled[triggerNum][ENERGY_MIN] && !trigger.getStateClusterEnergyLow()) {
- continue triggerLoop;
- } if(singlesCutsEnabled[triggerNum][ENERGY_MAX] && !trigger.getStateClusterEnergyHigh()) {
- continue triggerLoop;
- } if(singlesCutsEnabled[triggerNum][HIT_COUNT] && !trigger.getStateHitCount()) {
- continue triggerLoop;
- }
-
- // Store the trigger.
- singlesTriggers.get(triggerNum).add(trigger);
- }
- }
-
- // Store cluster pairs.
- List<E[]> pairs = TriggerModule.getTopBottomPairs(clusters, clusterType);
-
- // Simulate the pair triggers and record the results.
- for(E[] pair : pairs) {
- // Simulate each of the cluster pair triggers.
- pairTriggerLoop:
- for(int triggerIndex = 0; triggerIndex < 2; triggerIndex++) {
- // Track whether the cluster passed each singles cut.
- boolean passSeedLow = true;
- boolean passSeedHigh = true;
- boolean passClusterLow = false;
- boolean passClusterHigh = false;
- boolean passHitCount = false;
- boolean passPairEnergySumLow = false;
- boolean passPairEnergySumHigh = false;
- boolean passPairEnergyDifference = false;
- boolean passPairEnergySlope = false;
- boolean passPairCoplanarity = false;
- boolean passTimeCoincidence = false;
-
- // Apply the trigger cuts appropriately according to the
- // cluster type.
- if(clusterType.equals(Cluster.class)) {
- // Cast the cluster object.
- Cluster[] reconPair = { (Cluster) pair[0], (Cluster) pair[1] };
-
- // Check that the pair passes the time coincidence cut.
- // If it does not, it is not a valid pair and should be
- // destroyed.
- if(!pairsTrigger[triggerIndex].pairTimeCoincidenceCut(reconPair)) {
- continue pairTriggerLoop;
- }
-
- passClusterLow = pairsTrigger[triggerIndex].clusterTotalEnergyCutLow(reconPair[0])
- && pairsTrigger[triggerIndex].clusterTotalEnergyCutLow(reconPair[1]);
- passClusterHigh = pairsTrigger[triggerIndex].clusterTotalEnergyCutHigh(reconPair[0])
- && pairsTrigger[triggerIndex].clusterTotalEnergyCutHigh(reconPair[1]);
- passHitCount = pairsTrigger[triggerIndex].clusterHitCountCut(reconPair[0])
- && pairsTrigger[triggerIndex].clusterHitCountCut(reconPair[1]);
- passPairEnergySumLow = pairsTrigger[triggerIndex].pairEnergySumCutLow(reconPair);
- passPairEnergySumHigh = pairsTrigger[triggerIndex].pairEnergySumCutHigh(reconPair);
- passPairEnergyDifference = pairsTrigger[triggerIndex].pairEnergyDifferenceCut(reconPair);
- passPairEnergySlope = pairsTrigger[triggerIndex].pairEnergySlopeCut(reconPair);
- passPairCoplanarity = pairsTrigger[triggerIndex].pairCoplanarityCut(reconPair);
- passTimeCoincidence = pairsTrigger[triggerIndex].pairTimeCoincidenceCut(reconPair);
- } else if(clusterType.equals(SSPCluster.class)) {
- // Cast the cluster object.
- SSPCluster[] sspPair = { (SSPCluster) pair[0], (SSPCluster) pair[1] };
-
- // Check that the pair passes the time coincidence cut.
- // If it does not, it is not a valid pair and should be
- // destroyed.
- if(!pairsTrigger[triggerIndex].pairTimeCoincidenceCut(sspPair)) {
- continue pairTriggerLoop;
- }
-
- // Perform each trigger cut.
- passClusterLow = pairsTrigger[triggerIndex].clusterTotalEnergyCutLow(sspPair[0])
- && pairsTrigger[triggerIndex].clusterTotalEnergyCutLow(sspPair[1]);
- passClusterHigh = pairsTrigger[triggerIndex].clusterTotalEnergyCutHigh(sspPair[0])
- && pairsTrigger[triggerIndex].clusterTotalEnergyCutHigh(sspPair[1]);
- passHitCount = pairsTrigger[triggerIndex].clusterHitCountCut(sspPair[0])
- && pairsTrigger[triggerIndex].clusterHitCountCut(sspPair[1]);
- passPairEnergySumLow = pairsTrigger[triggerIndex].pairEnergySumCutLow(sspPair);
- passPairEnergySumHigh = pairsTrigger[triggerIndex].pairEnergySumCutHigh(sspPair);
- passPairEnergyDifference = pairsTrigger[triggerIndex].pairEnergyDifferenceCut(sspPair);
- passPairEnergySlope = pairsTrigger[triggerIndex].pairEnergySlopeCut(sspPair);
- passPairCoplanarity = pairsTrigger[triggerIndex].pairCoplanarityCut(sspPair);
- passTimeCoincidence = pairsTrigger[triggerIndex].pairTimeCoincidenceCut(sspPair);
- }
-
- // Create a trigger from the results.
- PairTrigger<E[]> trigger = new PairTrigger<E[]>(pair, triggerIndex);
- trigger.setStateSeedEnergyLow(passSeedLow);
- trigger.setStateSeedEnergyHigh(passSeedHigh);
- trigger.setStateClusterEnergyLow(passClusterLow);
- trigger.setStateClusterEnergyHigh(passClusterHigh);
- trigger.setStateHitCount(passHitCount);
- trigger.setStateEnergySumLow(passPairEnergySumLow);
- trigger.setStateEnergySumHigh(passPairEnergySumHigh);
- trigger.setStateEnergyDifference(passPairEnergyDifference);
- trigger.setStateEnergySlope(passPairEnergySlope);
- trigger.setStateCoplanarity(passPairCoplanarity);
- trigger.setStateTimeCoincidence(passTimeCoincidence);
-
- // A trigger will only be reported by the SSP if it
- // passes all of the enabled cuts for that trigger.
- // Check whether this trigger meets these conditions.
- if(pairCutsEnabled[triggerIndex][ENERGY_MIN] && !trigger.getStateClusterEnergyLow()) {
- continue pairTriggerLoop;
- } if(pairCutsEnabled[triggerIndex][ENERGY_MAX] && !trigger.getStateClusterEnergyHigh()) {
- continue pairTriggerLoop;
- } if(pairCutsEnabled[triggerIndex][HIT_COUNT] && !trigger.getStateHitCount()) {
- continue pairTriggerLoop;
- } if(pairCutsEnabled[triggerIndex][3 + ENERGY_SUM] && !trigger.getStateEnergySum()) {
- continue pairTriggerLoop;
- } if(pairCutsEnabled[triggerIndex][3 + ENERGY_DIFF] && !trigger.getStateEnergyDifference()) {
- continue pairTriggerLoop;
- } if(pairCutsEnabled[triggerIndex][3 + ENERGY_SLOPE] && !trigger.getStateEnergySlope()) {
- continue pairTriggerLoop;
- } if(pairCutsEnabled[triggerIndex][3 + COPLANARITY] && !trigger.getStateCoplanarity()) {
- continue pairTriggerLoop;
- }
-
- // Add the trigger to the list.
- pairTriggers.get(triggerIndex).add(trigger);
- }
- }
-
- // Create a new simulated trigger module to contain the results.
- return new SimTriggerModule<E>(singlesTriggers.get(0), singlesTriggers.get(1),
- pairTriggers.get(0), pairTriggers.get(1));
- }
-
- /**
- * Sets the name of the LCIO collection containing the TI and SSP
- * banks.
- * @param bankCollectionName - The bank collection name.
- */
- public void setBankCollectionName(String bankCollectionName) {
- this.bankCollectionName = bankCollectionName;
- }
-
- /**
- * Sets the name of the LCIO collection containing the simulated
- * reconstructed clusters.
- * @param clusterCollectionName - The cluster collection name.
- */
- public void setClusterCollectionName(String clusterCollectionName) {
- this.clusterCollectionName = clusterCollectionName;
- }
-
- /**
- * Sets whether or not triggers should be formed using all clusters,
- * or only those that where the integration window for the cluster
- * is completely within the bounds of the event window.
- * @param state - <code>true</code> means that only clusters where
- * the entire cluster integration window is within the event time
- * window will be used, while <code>false</code> means that all
- * clusters will be used.
- */
- public void setFilterUnverifiableClusters(boolean state) {
- this.filterUnverifiable = state;
- }
-
- /**
- * Sets the name of the LCIO collection containing simulated triggers.
- * @param triggerCollection - The trigger collection name.
- */
- public void setTriggerCollectionName(String triggerCollection) {
- this.simTriggerCollectionName = triggerCollection;
- }
+ // Store the LCIO collection names for the needed objects.
+ private boolean filterUnverifiable = false;
+ private String bankCollectionName = "TriggerBank";
+ private String clusterCollectionName = "EcalClusters";
+ private String simTriggerCollectionName = "SimTriggers";
+
+ // Store the SSP bank.
+ private SSPData sspBank = null;
+
+ // Store cluster verifiability parameters.
+ private int nsa = 0;
+ private int nsb = 0;
+ private int windowWidth = 0;
+
+ // Define trigger simulation modules.
+ private boolean[] pairTriggerEnabled = new boolean[2];
+ private boolean[] singlesTriggerEnabled = new boolean[2];
+ private boolean[][] pairCutsEnabled = new boolean[2][7];
+ private boolean[][] singlesCutsEnabled = new boolean[2][3];
+ private TriggerModule[] pairsTrigger = new TriggerModule[2];
+ private TriggerModule[] singlesTrigger = new TriggerModule[2];
+
+ // Reference variables.
+ private static final int ENERGY_MIN = TriggerDiagnosticUtil.SINGLES_ENERGY_MIN;
+ private static final int ENERGY_MAX = TriggerDiagnosticUtil.SINGLES_ENERGY_MAX;
+ private static final int HIT_COUNT = TriggerDiagnosticUtil.SINGLES_HIT_COUNT;
+ private static final int ENERGY_SUM = TriggerDiagnosticUtil.PAIR_ENERGY_SUM;
+ private static final int ENERGY_DIFF = TriggerDiagnosticUtil.PAIR_ENERGY_DIFF;
+ private static final int ENERGY_SLOPE = TriggerDiagnosticUtil.PAIR_ENERGY_SLOPE;
+ private static final int COPLANARITY = TriggerDiagnosticUtil.PAIR_COPLANARITY;
+
+ /**
+ * Connects the driver to the the <code>ConfigurationManager</code>
+ * in order to obtain the correct trigger information. Trigger
+ * settings are stored in the <code>TriggerModule</code> objects.
+ */
+ @Override
+ public void startOfData() {
+ // Define the first singles trigger.
+ singlesTrigger[0] = new TriggerModule();
+ singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.500);
+ singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
+ singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
+
+ // Define the second singles trigger.
+ singlesTrigger[1] = new TriggerModule();
+ singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
+ singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
+ singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
+
+ // Define the first pairs trigger.
+ pairsTrigger[0] = new TriggerModule();
+ pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
+ pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
+ pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 8.191);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 8.191);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.000);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.001);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 180);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 8);
+
+ // Define the second pairs trigger.
+ pairsTrigger[1] = new TriggerModule();
+ pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
+ pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
+ pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 8.191);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 8.191);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.000);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.001);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 180);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 8);
+
+ // Listen for the configuration manager to provide the real
+ // trigger settings.
+ ConfigurationManager.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // Get the DAQ configuration.
+ DAQConfig daq = ConfigurationManager.getInstance();
+
+ // Get cluster verifiability parameters.
+ nsa = daq.getFADCConfig().getNSA();
+ nsb = daq.getFADCConfig().getNSB();
+ windowWidth = daq.getFADCConfig().getWindowWidth();
+
+ // Load the DAQ settings from the configuration manager.
+ singlesTrigger[0].loadDAQConfiguration(daq.getSSPConfig().getSingles1Config());
+ singlesTrigger[1].loadDAQConfiguration(daq.getSSPConfig().getSingles2Config());
+ pairsTrigger[0].loadDAQConfiguration(daq.getSSPConfig().getPair1Config());
+ pairsTrigger[1].loadDAQConfiguration(daq.getSSPConfig().getPair2Config());
+
+ // Get the trigger configurations from the DAQ.
+ SinglesTriggerConfig[] singles = { daq.getSSPConfig().getSingles1Config(),
+ daq.getSSPConfig().getSingles2Config() };
+ PairTriggerConfig[] pairs = { daq.getSSPConfig().getPair1Config(),
+ daq.getSSPConfig().getPair2Config() };
+
+ // Update the enabled/disabled statuses.
+ for(int i = 0; i < 2; i++) {
+ // Set the trigger enabled status.
+ pairTriggerEnabled[i] = pairs[i].isEnabled();
+ singlesTriggerEnabled[i] = singles[i].isEnabled();
+
+ // Set the singles cut statuses.
+ singlesCutsEnabled[i][ENERGY_MIN] = singles[i].getEnergyMinCutConfig().isEnabled();
+ singlesCutsEnabled[i][ENERGY_MAX] = singles[i].getEnergyMaxCutConfig().isEnabled();
+ singlesCutsEnabled[i][HIT_COUNT] = singles[i].getHitCountCutConfig().isEnabled();
+
+ // Set the pair cut statuses.
+ pairCutsEnabled[i][ENERGY_MIN] = pairs[i].getEnergyMinCutConfig().isEnabled();
+ pairCutsEnabled[i][ENERGY_MAX] = pairs[i].getEnergyMaxCutConfig().isEnabled();
+ pairCutsEnabled[i][HIT_COUNT] = pairs[i].getHitCountCutConfig().isEnabled();
+ pairCutsEnabled[i][3 + ENERGY_SUM] = pairs[i].getEnergySumCutConfig().isEnabled();
+ pairCutsEnabled[i][3 + ENERGY_DIFF] = pairs[i].getEnergyDifferenceCutConfig().isEnabled();
+ pairCutsEnabled[i][3 + ENERGY_SLOPE] = pairs[i].getEnergySlopeCutConfig().isEnabled();
+ pairCutsEnabled[i][3 + COPLANARITY] = pairs[i].getCoplanarityCutConfig().isEnabled();
+ }
+ }
+ });
+ }
+
+ /**
+ * Processes an LCIO event and simulates triggers in the same manner
+ * as the hardware for both <code>SSPCluster</code> objects as well
+ * as <code>Cluster</code> objects reconstructed from FADC hits.
+ * Triggers are then output to the data stream.
+ * @param event - The <code>EventHeader</code> object representing
+ * the current LCIO event.
+ */
+ @Override
+ public void process(EventHeader event) {
+ // If the DAQ configuration manager has not been initialized,
+ // then no action can be performed.
+ if(!ConfigurationManager.isInitialized()) {
+ // Put an empty trigger results module into the data stream.
+ SimTriggerData triggerData = new SimTriggerData();
+ List<SimTriggerData> dataList = new ArrayList<SimTriggerData>(1);
+ dataList.add(triggerData);
+ event.put(simTriggerCollectionName, dataList, SimTriggerData.class, 0);
+
+ // Nothing further can be done, since trigger settings are
+ // not yet defined.
+ return;
+ }
+
+ // Get the SSP bank.
+ if(event.hasCollection(GenericObject.class, bankCollectionName)) {
+ // Get the bank list.
+ List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
+
+ // Search through the banks and get the SSP and TI banks.
+ for(GenericObject obj : bankList) {
+ // If this is an SSP bank, parse it.
+ if(AbstractIntData.getTag(obj) == SSPData.BANK_TAG) {
+ sspBank = new SSPData(obj);
+ }
+ }
+ }
+
+ // Get a list of SSPClusters.
+ List<SSPCluster> sspClusters = null;
+ if(sspBank != null) { sspClusters = sspBank.getClusters(); }
+ else { sspClusters = new ArrayList<SSPCluster>(0); }
+
+ // Get reconstructed clusters.
+ List<Cluster> reconClusters = null;
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ reconClusters = event.get(Cluster.class, clusterCollectionName);
+ }
+ else { reconClusters = new ArrayList<Cluster>(0); }
+
+ // If only "verifiable" clusters should be used, test all the
+ // reconstructed clusters for verifiability.
+ if(filterUnverifiable) {
+ // Create a list to store the verifiable clusters.
+ List<Cluster> goodClusters = new ArrayList<Cluster>();
+
+ // Iterate over all the clusters and test them to see if
+ // they are verifiable.
+ for(Cluster cluster : reconClusters) {
+ if(TriggerDiagnosticUtil.isVerifiable(cluster, nsa, nsb, windowWidth)) {
+ goodClusters.add(cluster);
+ }
+ }
+
+ // Replace the old cluster list with the new one.
+ reconClusters = goodClusters;
+ }
+
+ // Generate simulated triggers.
+ SimTriggerModule<Cluster> reconModule = constructTriggers(reconClusters, Cluster.class);
+ SimTriggerModule<SSPCluster> sspModule = constructTriggers(sspClusters, SSPCluster.class);
+
+ // Insert the trigger results in the data stream.
+ SimTriggerData triggerData = new SimTriggerData(reconModule, sspModule);
+ List<SimTriggerData> dataList = new ArrayList<SimTriggerData>(1);
+ dataList.add(triggerData);
+ event.put(simTriggerCollectionName, dataList, SimTriggerData.class, 0);
+ }
+
+ /**
+ * Constructs simulated triggers in the same manner as the hardware.
+ * Method can accept either <code>Cluster</code> objects, any object
+ * that is a subclass of <code>Cluster</code>, or objects of type
+ * <code>SSPCluster</code>.
+ * @param clusters - A <code>List</code> collection of the cluster
+ * objects from which triggers are to be derived.
+ * @param clusterType - The class of the cluster objects from which
+ * triggers are to be derived. This can be <code>Cluster</code>,
+ * <code>SSPCluster</code>, or a subclass thereof.
+ * @return Returns a <code>SimTriggerModule</code> object containing
+ * the simulated trigger results.
+ * @throws IllegalArgumentException Occurs if the class of the
+ * cluster objects is not of a supported type.
+ *
+ */
+ private <E> SimTriggerModule<E> constructTriggers(List<E> clusters, Class<E> clusterType) throws IllegalArgumentException {
+ // Verify that the cluster type is supported.
+ if(!clusterType.equals(Cluster.class) && !clusterType.equals(SSPCluster.class)) {
+ throw new IllegalArgumentException("Class \"" + clusterType.getSimpleName() + "\" is not a supported cluster type.");
+ }
+
+ // Store the singles and pair triggers.
+ List<List<PairTrigger<E[]>>> pairTriggers = new ArrayList<List<PairTrigger<E[]>>>(2);
+ pairTriggers.add(new ArrayList<PairTrigger<E[]>>());
+ pairTriggers.add(new ArrayList<PairTrigger<E[]>>());
+ List<List<SinglesTrigger<E>>> singlesTriggers = new ArrayList<List<SinglesTrigger<E>>>(2);
+ singlesTriggers.add(new ArrayList<SinglesTrigger<E>>());
+ singlesTriggers.add(new ArrayList<SinglesTrigger<E>>());
+
+ // Run the clusters through the singles trigger to determine
+ // whether or not they pass it.
+ for(E cluster : clusters) {
+ // Simulate each of the cluster singles triggers.
+ triggerLoop:
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ // Track whether the cluster passed each singles cut.
+ boolean passSeedLow = true;
+ boolean passSeedHigh = true;
+ boolean passClusterLow = false;
+ boolean passClusterHigh = false;
+ boolean passHitCount = false;
+
+ // Perform the trigger cuts appropriately for the type
+ // of cluster.
+ if(cluster instanceof Cluster) {
+ // Cast the cluster to the appropriate type.
+ Cluster c = (Cluster) cluster;
+
+ // Perform each trigger cut.
+ passClusterLow = singlesTrigger[triggerNum].clusterTotalEnergyCutLow(c);
+ passClusterHigh = singlesTrigger[triggerNum].clusterTotalEnergyCutHigh(c);
+ passHitCount = singlesTrigger[triggerNum].clusterHitCountCut(c);
+ } else if(cluster instanceof SSPCluster) {
+ // Cast the cluster to the appropriate type.
+ SSPCluster c = (SSPCluster) cluster;
+
+ // Perform each trigger cut.
+ passClusterLow = singlesTrigger[triggerNum].clusterTotalEnergyCutLow(c);
+ passClusterHigh = singlesTrigger[triggerNum].clusterTotalEnergyCutHigh(c);
+ passHitCount = singlesTrigger[triggerNum].clusterHitCountCut(c);
+ }
+
+ // Make a trigger to store the results.
+ SinglesTrigger<E> trigger = new SinglesTrigger<E>(cluster, triggerNum);
+ trigger.setStateSeedEnergyLow(passSeedLow);
+ trigger.setStateSeedEnergyHigh(passSeedHigh);
+ trigger.setStateClusterEnergyLow(passClusterLow);
+ trigger.setStateClusterEnergyHigh(passClusterHigh);
+ trigger.setStateHitCount(passHitCount);
+
+ // A trigger will only be reported by the SSP if it
+ // passes all of the enabled cuts for that trigger.
+ // Check whether this trigger meets these conditions.
+ if(singlesCutsEnabled[triggerNum][ENERGY_MIN] && !trigger.getStateClusterEnergyLow()) {
+ continue triggerLoop;
+ } if(singlesCutsEnabled[triggerNum][ENERGY_MAX] && !trigger.getStateClusterEnergyHigh()) {
+ continue triggerLoop;
+ } if(singlesCutsEnabled[triggerNum][HIT_COUNT] && !trigger.getStateHitCount()) {
+ continue triggerLoop;
+ }
+
+ // Store the trigger.
+ singlesTriggers.get(triggerNum).add(trigger);
+ }
+ }
+
+ // Store cluster pairs.
+ List<E[]> pairs = TriggerModule.getTopBottomPairs(clusters, clusterType);
+
+ // Simulate the pair triggers and record the results.
+ for(E[] pair : pairs) {
+ // Simulate each of the cluster pair triggers.
+ pairTriggerLoop:
+ for(int triggerIndex = 0; triggerIndex < 2; triggerIndex++) {
+ // Track whether the cluster passed each singles cut.
+ boolean passSeedLow = true;
+ boolean passSeedHigh = true;
+ boolean passClusterLow = false;
+ boolean passClusterHigh = false;
+ boolean passHitCount = false;
+ boolean passPairEnergySumLow = false;
+ boolean passPairEnergySumHigh = false;
+ boolean passPairEnergyDifference = false;
+ boolean passPairEnergySlope = false;
+ boolean passPairCoplanarity = false;
+ boolean passTimeCoincidence = false;
+
+ // Apply the trigger cuts appropriately according to the
+ // cluster type.
+ if(clusterType.equals(Cluster.class)) {
+ // Cast the cluster object.
+ Cluster[] reconPair = { (Cluster) pair[0], (Cluster) pair[1] };
+
+ // Check that the pair passes the time coincidence cut.
+ // If it does not, it is not a valid pair and should be
+ // destroyed.
+ if(!pairsTrigger[triggerIndex].pairTimeCoincidenceCut(reconPair)) {
+ continue pairTriggerLoop;
+ }
+
+ passClusterLow = pairsTrigger[triggerIndex].clusterTotalEnergyCutLow(reconPair[0])
+ && pairsTrigger[triggerIndex].clusterTotalEnergyCutLow(reconPair[1]);
+ passClusterHigh = pairsTrigger[triggerIndex].clusterTotalEnergyCutHigh(reconPair[0])
+ && pairsTrigger[triggerIndex].clusterTotalEnergyCutHigh(reconPair[1]);
+ passHitCount = pairsTrigger[triggerIndex].clusterHitCountCut(reconPair[0])
+ && pairsTrigger[triggerIndex].clusterHitCountCut(reconPair[1]);
+ passPairEnergySumLow = pairsTrigger[triggerIndex].pairEnergySumCutLow(reconPair);
+ passPairEnergySumHigh = pairsTrigger[triggerIndex].pairEnergySumCutHigh(reconPair);
+ passPairEnergyDifference = pairsTrigger[triggerIndex].pairEnergyDifferenceCut(reconPair);
+ passPairEnergySlope = pairsTrigger[triggerIndex].pairEnergySlopeCut(reconPair);
+ passPairCoplanarity = pairsTrigger[triggerIndex].pairCoplanarityCut(reconPair);
+ passTimeCoincidence = pairsTrigger[triggerIndex].pairTimeCoincidenceCut(reconPair);
+ } else if(clusterType.equals(SSPCluster.class)) {
+ // Cast the cluster object.
+ SSPCluster[] sspPair = { (SSPCluster) pair[0], (SSPCluster) pair[1] };
+
+ // Check that the pair passes the time coincidence cut.
+ // If it does not, it is not a valid pair and should be
+ // destroyed.
+ if(!pairsTrigger[triggerIndex].pairTimeCoincidenceCut(sspPair)) {
+ continue pairTriggerLoop;
+ }
+
+ // Perform each trigger cut.
+ passClusterLow = pairsTrigger[triggerIndex].clusterTotalEnergyCutLow(sspPair[0])
+ && pairsTrigger[triggerIndex].clusterTotalEnergyCutLow(sspPair[1]);
+ passClusterHigh = pairsTrigger[triggerIndex].clusterTotalEnergyCutHigh(sspPair[0])
+ && pairsTrigger[triggerIndex].clusterTotalEnergyCutHigh(sspPair[1]);
+ passHitCount = pairsTrigger[triggerIndex].clusterHitCountCut(sspPair[0])
+ && pairsTrigger[triggerIndex].clusterHitCountCut(sspPair[1]);
+ passPairEnergySumLow = pairsTrigger[triggerIndex].pairEnergySumCutLow(sspPair);
+ passPairEnergySumHigh = pairsTrigger[triggerIndex].pairEnergySumCutHigh(sspPair);
+ passPairEnergyDifference = pairsTrigger[triggerIndex].pairEnergyDifferenceCut(sspPair);
+ passPairEnergySlope = pairsTrigger[triggerIndex].pairEnergySlopeCut(sspPair);
+ passPairCoplanarity = pairsTrigger[triggerIndex].pairCoplanarityCut(sspPair);
+ passTimeCoincidence = pairsTrigger[triggerIndex].pairTimeCoincidenceCut(sspPair);
+ }
+
+ // Create a trigger from the results.
+ PairTrigger<E[]> trigger = new PairTrigger<E[]>(pair, triggerIndex);
+ trigger.setStateSeedEnergyLow(passSeedLow);
+ trigger.setStateSeedEnergyHigh(passSeedHigh);
+ trigger.setStateClusterEnergyLow(passClusterLow);
+ trigger.setStateClusterEnergyHigh(passClusterHigh);
+ trigger.setStateHitCount(passHitCount);
+ trigger.setStateEnergySumLow(passPairEnergySumLow);
+ trigger.setStateEnergySumHigh(passPairEnergySumHigh);
+ trigger.setStateEnergyDifference(passPairEnergyDifference);
+ trigger.setStateEnergySlope(passPairEnergySlope);
+ trigger.setStateCoplanarity(passPairCoplanarity);
+ trigger.setStateTimeCoincidence(passTimeCoincidence);
+
+ // A trigger will only be reported by the SSP if it
+ // passes all of the enabled cuts for that trigger.
+ // Check whether this trigger meets these conditions.
+ if(pairCutsEnabled[triggerIndex][ENERGY_MIN] && !trigger.getStateClusterEnergyLow()) {
+ continue pairTriggerLoop;
+ } if(pairCutsEnabled[triggerIndex][ENERGY_MAX] && !trigger.getStateClusterEnergyHigh()) {
+ continue pairTriggerLoop;
+ } if(pairCutsEnabled[triggerIndex][HIT_COUNT] && !trigger.getStateHitCount()) {
+ continue pairTriggerLoop;
+ } if(pairCutsEnabled[triggerIndex][3 + ENERGY_SUM] && !trigger.getStateEnergySum()) {
+ continue pairTriggerLoop;
+ } if(pairCutsEnabled[triggerIndex][3 + ENERGY_DIFF] && !trigger.getStateEnergyDifference()) {
+ continue pairTriggerLoop;
+ } if(pairCutsEnabled[triggerIndex][3 + ENERGY_SLOPE] && !trigger.getStateEnergySlope()) {
+ continue pairTriggerLoop;
+ } if(pairCutsEnabled[triggerIndex][3 + COPLANARITY] && !trigger.getStateCoplanarity()) {
+ continue pairTriggerLoop;
+ }
+
+ // Add the trigger to the list.
+ pairTriggers.get(triggerIndex).add(trigger);
+ }
+ }
+
+ // Create a new simulated trigger module to contain the results.
+ return new SimTriggerModule<E>(singlesTriggers.get(0), singlesTriggers.get(1),
+ pairTriggers.get(0), pairTriggers.get(1));
+ }
+
+ /**
+ * Sets the name of the LCIO collection containing the TI and SSP
+ * banks.
+ * @param bankCollectionName - The bank collection name.
+ */
+ public void setBankCollectionName(String bankCollectionName) {
+ this.bankCollectionName = bankCollectionName;
+ }
+
+ /**
+ * Sets the name of the LCIO collection containing the simulated
+ * reconstructed clusters.
+ * @param clusterCollectionName - The cluster collection name.
+ */
+ public void setClusterCollectionName(String clusterCollectionName) {
+ this.clusterCollectionName = clusterCollectionName;
+ }
+
+ /**
+ * Sets whether or not triggers should be formed using all clusters,
+ * or only those that where the integration window for the cluster
+ * is completely within the bounds of the event window.
+ * @param state - <code>true</code> means that only clusters where
+ * the entire cluster integration window is within the event time
+ * window will be used, while <code>false</code> means that all
+ * clusters will be used.
+ */
+ public void setFilterUnverifiableClusters(boolean state) {
+ this.filterUnverifiable = state;
+ }
+
+ /**
+ * Sets the name of the LCIO collection containing simulated triggers.
+ * @param triggerCollection - The trigger collection name.
+ */
+ public void setTriggerCollectionName(String triggerCollection) {
+ this.simTriggerCollectionName = triggerCollection;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerData.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerData.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerData.java Wed Mar 9 11:43:24 2016
@@ -13,47 +13,47 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class SimTriggerData {
- private final SimTriggerModule<Cluster> reconTriggers;
- private final SimTriggerModule<SSPCluster> sspTriggers;
-
- /**
- * Instantiates a new <code>SimTriggerData</code> object with empty
- * trigger results modules.
- */
- SimTriggerData() {
- reconTriggers = new SimTriggerModule<Cluster>();
- sspTriggers = new SimTriggerModule<SSPCluster>();
- }
-
- /**
- * Instantiates a new <code>SimTriggerData</code> object that will
- * contain the argument trigger modules.
- * @param reconTriggers - The simulated reconstructed cluster
- * triggers module.
- * @param sspTriggers - The simulated SSP cluster triggers module.
- */
- SimTriggerData(SimTriggerModule<Cluster> reconTriggers, SimTriggerModule<SSPCluster> sspTriggers) {
- this.reconTriggers = reconTriggers;
- this.sspTriggers = sspTriggers;
- }
-
- /**
- * Gets the module containing all simulated SSP trigger data for
- * each of the four primary triggers.
- * @return Returns the trigger data in a <code>SimTriggerModule</code>
- * object.
- */
- public SimTriggerModule<SSPCluster> getSimSSPTriggers() {
- return sspTriggers;
- }
-
- /**
- * Gets the module containing all simulated LCSim trigger data for
- * each of the four primary triggers.
- * @return Returns the trigger data in a <code>SimTriggerModule</code>
- * object.
- */
- public SimTriggerModule<Cluster> getSimReconTriggers() {
- return reconTriggers;
- }
+ private final SimTriggerModule<Cluster> reconTriggers;
+ private final SimTriggerModule<SSPCluster> sspTriggers;
+
+ /**
+ * Instantiates a new <code>SimTriggerData</code> object with empty
+ * trigger results modules.
+ */
+ SimTriggerData() {
+ reconTriggers = new SimTriggerModule<Cluster>();
+ sspTriggers = new SimTriggerModule<SSPCluster>();
+ }
+
+ /**
+ * Instantiates a new <code>SimTriggerData</code> object that will
+ * contain the argument trigger modules.
+ * @param reconTriggers - The simulated reconstructed cluster
+ * triggers module.
+ * @param sspTriggers - The simulated SSP cluster triggers module.
+ */
+ SimTriggerData(SimTriggerModule<Cluster> reconTriggers, SimTriggerModule<SSPCluster> sspTriggers) {
+ this.reconTriggers = reconTriggers;
+ this.sspTriggers = sspTriggers;
+ }
+
+ /**
+ * Gets the module containing all simulated SSP trigger data for
+ * each of the four primary triggers.
+ * @return Returns the trigger data in a <code>SimTriggerModule</code>
+ * object.
+ */
+ public SimTriggerModule<SSPCluster> getSimSSPTriggers() {
+ return sspTriggers;
+ }
+
+ /**
+ * Gets the module containing all simulated LCSim trigger data for
+ * each of the four primary triggers.
+ * @return Returns the trigger data in a <code>SimTriggerModule</code>
+ * object.
+ */
+ public SimTriggerModule<Cluster> getSimReconTriggers() {
+ return reconTriggers;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerModule.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerModule.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/SimTriggerModule.java Wed Mar 9 11:43:24 2016
@@ -18,71 +18,71 @@
* @see DataTriggerSimDriver
*/
public class SimTriggerModule<E> {
- private final List<SinglesTrigger<E>> singles0;
- private final List<SinglesTrigger<E>> singles1;
- private final List<PairTrigger<E[]>> pair0;
- private final List<PairTrigger<E[]>> pair1;
-
- /**
- * Constructs a new <code>SimTriggerModule</code> with the no
- * triggers results for any triggers.
- */
- SimTriggerModule() {
- singles0 = new ArrayList<SinglesTrigger<E>>(0);
- singles1 = new ArrayList<SinglesTrigger<E>>(0);
- pair0 = new ArrayList<PairTrigger<E[]>>(0);
- pair1 = new ArrayList<PairTrigger<E[]>>(0);
- }
-
- /**
- * Constructs a new <code>SimTriggerModule</code> with the specified
- * trigger results for each of the four primary triggers.
- * @param singles0Triggers - The results for the singles 0 trigger.
- * @param singles1Triggers - The results for the singles 1 trigger.
- * @param pair0Triggers - The results for the pair 0 trigger.
- * @param pair1Triggers - The results for the pair 1 trigger.
- */
- SimTriggerModule(List<SinglesTrigger<E>> singles0Triggers, List<SinglesTrigger<E>> singles1Triggers,
- List<PairTrigger<E[]>> pair0Triggers, List<PairTrigger<E[]>> pair1Triggers) {
- this.singles0 = singles0Triggers;
- this.singles1 = singles1Triggers;
- this.pair0 = pair0Triggers;
- this.pair1 = pair1Triggers;
- }
-
- /**
- * Gets the simulated trigger results for the singles 0 trigger.
- * @return Returns the trigger results as a <code>List</code> of
- * <code>SinglesTrigger</code> objects.
- */
- public List<SinglesTrigger<E>> getSingles0Triggers() {
- return singles0;
- }
-
- /**
- * Gets the simulated trigger results for the singles 1 trigger.
- * @return Returns the trigger results as a <code>List</code> of
- * <code>SinglesTrigger</code> objects.
- */
- public List<SinglesTrigger<E>> getSingles1Triggers() {
- return singles1;
- }
-
- /**
- * Gets the simulated trigger results for the pair 0 trigger.
- * @return Returns the trigger results as a <code>List</code> of
- * <code>PairTrigger</code> objects.
- */
- public List<PairTrigger<E[]>> getPair0Triggers() {
- return pair0;
- }
-
- /**
- * Gets the simulated trigger results for the pair 1 trigger.
- * @return Returns the trigger results as a <code>List</code> of
- * <code>PairTrigger</code> objects.
- */
- public List<PairTrigger<E[]>> getPair1Triggers() {
- return pair1;
- }
+ private final List<SinglesTrigger<E>> singles0;
+ private final List<SinglesTrigger<E>> singles1;
+ private final List<PairTrigger<E[]>> pair0;
+ private final List<PairTrigger<E[]>> pair1;
+
+ /**
+ * Constructs a new <code>SimTriggerModule</code> with the no
+ * triggers results for any triggers.
+ */
+ SimTriggerModule() {
+ singles0 = new ArrayList<SinglesTrigger<E>>(0);
+ singles1 = new ArrayList<SinglesTrigger<E>>(0);
+ pair0 = new ArrayList<PairTrigger<E[]>>(0);
+ pair1 = new ArrayList<PairTrigger<E[]>>(0);
+ }
+
+ /**
+ * Constructs a new <code>SimTriggerModule</code> with the specified
+ * trigger results for each of the four primary triggers.
+ * @param singles0Triggers - The results for the singles 0 trigger.
+ * @param singles1Triggers - The results for the singles 1 trigger.
+ * @param pair0Triggers - The results for the pair 0 trigger.
+ * @param pair1Triggers - The results for the pair 1 trigger.
+ */
+ SimTriggerModule(List<SinglesTrigger<E>> singles0Triggers, List<SinglesTrigger<E>> singles1Triggers,
+ List<PairTrigger<E[]>> pair0Triggers, List<PairTrigger<E[]>> pair1Triggers) {
+ this.singles0 = singles0Triggers;
+ this.singles1 = singles1Triggers;
+ this.pair0 = pair0Triggers;
+ this.pair1 = pair1Triggers;
+ }
+
+ /**
+ * Gets the simulated trigger results for the singles 0 trigger.
+ * @return Returns the trigger results as a <code>List</code> of
+ * <code>SinglesTrigger</code> objects.
+ */
+ public List<SinglesTrigger<E>> getSingles0Triggers() {
+ return singles0;
+ }
+
+ /**
+ * Gets the simulated trigger results for the singles 1 trigger.
+ * @return Returns the trigger results as a <code>List</code> of
+ * <code>SinglesTrigger</code> objects.
+ */
+ public List<SinglesTrigger<E>> getSingles1Triggers() {
+ return singles1;
+ }
+
+ /**
+ * Gets the simulated trigger results for the pair 0 trigger.
+ * @return Returns the trigger results as a <code>List</code> of
+ * <code>PairTrigger</code> objects.
+ */
+ public List<PairTrigger<E[]>> getPair0Triggers() {
+ return pair0;
+ }
+
+ /**
+ * Gets the simulated trigger results for the pair 1 trigger.
+ * @return Returns the trigger results as a <code>List</code> of
+ * <code>PairTrigger</code> objects.
+ */
+ public List<PairTrigger<E[]>> getPair1Triggers() {
+ return pair1;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerDiagnosticDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerDiagnosticDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerDiagnosticDriver.java Wed Mar 9 11:43:24 2016
@@ -52,54 +52,54 @@
import org.lcsim.util.aida.AIDA;
public class TriggerDiagnosticDriver extends Driver {
- // Store the LCIO collection names for the needed objects.
- private String hitCollectionName = "EcalCalHits";
- private String bankCollectionName = "TriggerBank";
- private String clusterCollectionName = "EcalClusters";
- private String diagnosticCollectionName = "DiagnosticSnapshot";
- private static final int clusterCollectionFlag = 1 << LCIOConstants.CLBIT_HITS;
- private String[] singlesCandidateCollectionName = { "Singles0TriggerCandidates", "Singles1TriggerCandidates" };
- private String[] pairCandidateCollectionName = { "Pair0TriggerCandidates", "Pair1TriggerCandidates" };
-
- // Store the lists of parsed objects.
- private TIData tiBank;
- private SSPData sspBank;
- private List<SSPCluster> sspClusters;
- private List<Cluster> reconClusters = new ArrayList<Cluster>();
- private SimTriggerData triggerData = null;
-
- // Trigger modules for performing trigger analysis.
- //private int activeTrigger = -1;
- private boolean[] tiFlags = new boolean[6];
- private TriggerModule[] singlesTrigger = new TriggerModule[2];
- private TriggerModule[] pairsTrigger = new TriggerModule[2];
- private boolean[][] singlesCutsEnabled = new boolean[2][3];
- private boolean[][] pairCutsEnabled = new boolean[2][7];
- private boolean[] singlesTriggerEnabled = new boolean[2];
- private boolean[] pairTriggerEnabled = new boolean[2];
-
- // Verification settings.
- private int nsa = 100;
- private int nsb = 20;
- private int windowWidth = 200;
- private int hitAcceptance = 1;
- private int noiseThreshold = 50;
- private double energyAcceptance = 0.003;
- private boolean readDAQConfig = false;
- private int localWindowThreshold = 1000000000;
- private boolean performClusterVerification = true;
- private boolean performSinglesTriggerVerification = true;
- private boolean performPairTriggerVerification = true;
- private boolean enforceTimeCompliance = false;
-
- // Efficiency tracking variables.
- private RunDiagStats localStats = new RunDiagStats();
- private RunDiagStats globalStats = new RunDiagStats();
-
- // Track which clusters/pairs are trigger candidates.
- private List<List<Cluster>> singlesCandidates = new ArrayList<List<Cluster>>(2);
- private List<List<LCRelation>> pairCandidates = new ArrayList<List<LCRelation>>(2);
-
+ // Store the LCIO collection names for the needed objects.
+ private String hitCollectionName = "EcalCalHits";
+ private String bankCollectionName = "TriggerBank";
+ private String clusterCollectionName = "EcalClusters";
+ private String diagnosticCollectionName = "DiagnosticSnapshot";
+ private static final int clusterCollectionFlag = 1 << LCIOConstants.CLBIT_HITS;
+ private String[] singlesCandidateCollectionName = { "Singles0TriggerCandidates", "Singles1TriggerCandidates" };
+ private String[] pairCandidateCollectionName = { "Pair0TriggerCandidates", "Pair1TriggerCandidates" };
+
+ // Store the lists of parsed objects.
+ private TIData tiBank;
+ private SSPData sspBank;
+ private List<SSPCluster> sspClusters;
+ private List<Cluster> reconClusters = new ArrayList<Cluster>();
+ private SimTriggerData triggerData = null;
+
+ // Trigger modules for performing trigger analysis.
+ //private int activeTrigger = -1;
+ private boolean[] tiFlags = new boolean[6];
+ private TriggerModule[] singlesTrigger = new TriggerModule[2];
+ private TriggerModule[] pairsTrigger = new TriggerModule[2];
+ private boolean[][] singlesCutsEnabled = new boolean[2][3];
+ private boolean[][] pairCutsEnabled = new boolean[2][7];
+ private boolean[] singlesTriggerEnabled = new boolean[2];
+ private boolean[] pairTriggerEnabled = new boolean[2];
+
+ // Verification settings.
+ private int nsa = 100;
+ private int nsb = 20;
+ private int windowWidth = 200;
+ private int hitAcceptance = 1;
+ private int noiseThreshold = 50;
+ private double energyAcceptance = 0.003;
+ private boolean readDAQConfig = false;
+ private int localWindowThreshold = 1000000000;
+ private boolean performClusterVerification = true;
+ private boolean performSinglesTriggerVerification = true;
+ private boolean performPairTriggerVerification = true;
+ private boolean enforceTimeCompliance = false;
+
+ // Efficiency tracking variables.
+ private RunDiagStats localStats = new RunDiagStats();
+ private RunDiagStats globalStats = new RunDiagStats();
+
+ // Track which clusters/pairs are trigger candidates.
+ private List<List<Cluster>> singlesCandidates = new ArrayList<List<Cluster>>(2);
+ private List<List<LCRelation>> pairCandidates = new ArrayList<List<LCRelation>>(2);
+
// Verbose settings.
private boolean clusterFail = false;
private boolean singlesEfficiencyFail = false;
@@ -115,2125 +115,2125 @@
private int statPrintInterval = Integer.MAX_VALUE;
// Cut index arrays for trigger verification.
- private static final int ENERGY_MIN = TriggerDiagnosticUtil.SINGLES_ENERGY_MIN;
- private static final int ENERGY_MAX = TriggerDiagnosticUtil.SINGLES_ENERGY_MAX;
- private static final int HIT_COUNT = TriggerDiagnosticUtil.SINGLES_HIT_COUNT;
- private static final int ENERGY_SUM = TriggerDiagnosticUtil.PAIR_ENERGY_SUM;
- private static final int ENERGY_DIFF = TriggerDiagnosticUtil.PAIR_ENERGY_DIFF;
- private static final int ENERGY_SLOPE = TriggerDiagnosticUtil.PAIR_ENERGY_SLOPE;
- private static final int COPLANARITY = TriggerDiagnosticUtil.PAIR_COPLANARITY;
-
- // Track the total run time.
- private long startTime = -1;
- private long endTime = -1;
-
- // Cut names for logging.
- private static final String[][] cutNames = {
- { "E_min", "E_max", "hit count", "null" },
- { "E_sum", "E_diff", "E_slope", "coplanar" }
- };
-
- // Temporary AIDA Plots
- private TriggerPlotsModule globalTriggerPlots = new TriggerPlotsModule(0, 0);
- private static final int RECON = 0;
- private static final int SSP = 1;
- private static final int ALL = 0;
- private static final int MATCHED = 1;
- private static final int FAILED = 2;
- private AIDA aida = AIDA.defaultInstance();
- private IHistogram1D[][] clusterHitPlot = {
- {
- aida.histogram1D("Clustering/Recon Cluster Hit Count (All)", 9, 0.5, 9.5),
- aida.histogram1D("Clustering/Recon Cluster Hit Count (Matched)", 9, 0.5, 9.5),
- aida.histogram1D("Clustering/Recon Cluster Hit Count (Failed)", 9, 0.5, 9.5)
- },
- {
- aida.histogram1D("Clustering/SSP Cluster Hit Count (All)", 9, 0.5, 9.5),
- aida.histogram1D("Clustering/SSP Cluster Hit Count (Matched)", 9, 0.5, 9.5),
- aida.histogram1D("Clustering/SSP Cluster Hit Count (Failed)", 9, 0.5, 9.5)
- }
- };
- private IHistogram1D[][] clusterEnergyPlot = {
- {
- aida.histogram1D("Clustering/Recon Cluster Energy (All)", 300, 0.0, 3.0),
- aida.histogram1D("Clustering/Recon Cluster Energy (Matched)", 300, 0.0, 3.0),
- aida.histogram1D("Clustering/Recon Cluster Energy (Failed)", 300, 0.0, 3.0)
- },
- {
- aida.histogram1D("Clustering/SSP Cluster Energy (All)", 300, 0.0, 3.0),
- aida.histogram1D("Clustering/SSP Cluster Energy (Matched)", 300, 0.0, 3.0),
- aida.histogram1D("Clustering/SSP Cluster Energy (Failed)", 300, 0.0, 3.0)
- }
- };
- private IHistogram1D[][] clusterTimePlot = {
- {
- aida.histogram1D("Clustering/Recon Cluster Time (All)", 115, 0, 460),
- aida.histogram1D("Clustering/Recon Cluster Time (Matched)", 115, 0, 460),
- aida.histogram1D("Clustering/Recon Cluster Time (Failed)", 115, 0, 460)
- },
- {
- aida.histogram1D("Clustering/SSP Cluster Time (All)", 115, 0, 460),
- aida.histogram1D("Clustering/SSP Cluster Time (Matched)", 115, 0, 460),
- aida.histogram1D("Clustering/SSP Cluster Time (Failed)", 115, 0, 460)
- }
- };
- private IHistogram2D[][] clusterPositionPlot = {
- {
- aida.histogram2D("Clustering/Recon Cluster Position (All)", 47, -23.5, 23.5, 11, -5.5, 5.5),
- aida.histogram2D("Clustering/Recon Cluster Position (Matched)", 47, -23.5, 23.5, 11, -5.5, 5.5),
- aida.histogram2D("Clustering/Recon Cluster Position (Failed)", 47, -23.5, 23.5, 11, -5.5, 5.5)
- },
- {
- aida.histogram2D("Clustering/SSP Cluster Position (All)", 47, -23.5, 23.5, 11, -5.5, 5.5),
- aida.histogram2D("Clustering/SSP Cluster Position (Matched)", 47, -23.5, 23.5, 11, -5.5, 5.5),
- aida.histogram2D("Clustering/SSP Cluster Position (Failed)", 47, -23.5, 23.5, 11, -5.5, 5.5)
- }
- };
- private IHistogram2D[] energyhitDiffPlot = {
- aida.histogram2D("Clustering/Recon-SSP Energy-Hit Difference (All)", 21, -0.010, 0.010, 6, -3, 3),
- aida.histogram2D("Clustering/Recon-SSP Energy-Hit Difference (Matched)", 21, -0.010, 0.010, 6, -3, 3),
- aida.histogram2D("Clustering/Recon-SSP Energy-Hit Difference (Failed)", 21, -0.010, 0.010, 6, -3, 3)
- };
- private ICloud2D[] efficiencyTimeHist = {
- aida.cloud2D("Clustering/Cluster Efficiency vs. Time"),
- aida.cloud2D("Singles Trigger 0/Cluster Efficiency vs. Time"),
- aida.cloud2D("Singles Trigger 1/Cluster Efficiency vs. Time"),
- aida.cloud2D("Pair Trigger 0/Cluster Efficiency vs. Time"),
- aida.cloud2D("Pair Trigger 1/Cluster Efficiency vs. Time")
- };
-
- /**
- * Define the trigger modules. This should be replaced by parsing
- * the DAQ configuration at some point.
- */
- @Override
- public void startOfData() {
- // By default, all triggers and cuts are enabled.
- for(int i = 0; i < 2; i++) {
- // Enable the triggers.
- pairTriggerEnabled[i] = true;
- singlesTriggerEnabled[i] = true;
-
- // Enable the singles cuts.
- for(int j = 0; j < singlesCutsEnabled.length; j++) {
- singlesCutsEnabled[i][j] = true;
- }
-
- // Enable the pair cuts.
- for(int j = 0; j < pairCutsEnabled.length; j++) {
- pairCutsEnabled[i][j] = true;
- }
- }
-
- // If the DAQ configuration should be read, attach a listener
- // to track when it updates.
- if(readDAQConfig) {
- ConfigurationManager.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // Get the DAQ configuration.
- DAQConfig daq = ConfigurationManager.getInstance();
-
- // Update the plotting energy slope values.
- globalTriggerPlots.setEnergySlopeParamF(0, daq.getSSPConfig().getPair1Config().getEnergySlopeCutConfig().getParameterF());
- globalTriggerPlots.setEnergySlopeParamF(1, daq.getSSPConfig().getPair2Config().getEnergySlopeCutConfig().getParameterF());
-
- // Load the DAQ settings from the configuration manager.
- singlesTrigger[0].loadDAQConfiguration(daq.getSSPConfig().getSingles1Config());
- singlesTrigger[1].loadDAQConfiguration(daq.getSSPConfig().getSingles2Config());
- pairsTrigger[0].loadDAQConfiguration(daq.getSSPConfig().getPair1Config());
- pairsTrigger[1].loadDAQConfiguration(daq.getSSPConfig().getPair2Config());
- nsa = daq.getFADCConfig().getNSA();
- nsb = daq.getFADCConfig().getNSB();
- windowWidth = daq.getFADCConfig().getWindowWidth();
-
- // Get the trigger configurations from the DAQ.
- SinglesTriggerConfig[] singles = { daq.getSSPConfig().getSingles1Config(),
- daq.getSSPConfig().getSingles2Config() };
- PairTriggerConfig[] pairs = { daq.getSSPConfig().getPair1Config(),
- daq.getSSPConfig().getPair2Config() };
-
- // Update the enabled/disabled statuses.
- for(int i = 0; i < 2; i++) {
- // Set the trigger enabled status.
- pairTriggerEnabled[i] = pairs[i].isEnabled();
- singlesTriggerEnabled[i] = singles[i].isEnabled();
-
- // Set the singles cut statuses.
- singlesCutsEnabled[i][ENERGY_MIN] = singles[i].getEnergyMinCutConfig().isEnabled();
- singlesCutsEnabled[i][ENERGY_MAX] = singles[i].getEnergyMaxCutConfig().isEnabled();
- singlesCutsEnabled[i][HIT_COUNT] = singles[i].getHitCountCutConfig().isEnabled();
-
- // Set the pair cut statuses.
- pairCutsEnabled[i][ENERGY_MIN] = pairs[i].getEnergyMinCutConfig().isEnabled();
- pairCutsEnabled[i][ENERGY_MAX] = pairs[i].getEnergyMaxCutConfig().isEnabled();
- pairCutsEnabled[i][HIT_COUNT] = pairs[i].getHitCountCutConfig().isEnabled();
- pairCutsEnabled[i][3 + ENERGY_SUM] = pairs[i].getEnergySumCutConfig().isEnabled();
- pairCutsEnabled[i][3 + ENERGY_DIFF] = pairs[i].getEnergyDifferenceCutConfig().isEnabled();
- pairCutsEnabled[i][3 + ENERGY_SLOPE] = pairs[i].getEnergySlopeCutConfig().isEnabled();
- pairCutsEnabled[i][3 + COPLANARITY] = pairs[i].getCoplanarityCutConfig().isEnabled();
- }
-
- // Update the trigger plots values.
- globalTriggerPlots.setEnergySlopeParamF(0, daq.getSSPConfig().getPair1Config().getEnergySlopeCutConfig().getParameterF());
- globalTriggerPlots.setEnergySlopeParamF(1, daq.getSSPConfig().getPair2Config().getEnergySlopeCutConfig().getParameterF());
-
- // Print a DAQ configuration settings header.
- System.out.println();
- System.out.println();
- System.out.println("======================================================================");
- System.out.println("=== DAQ Configuration Settings =======================================");
- System.out.println("======================================================================");
- logSettings();
- }
- });
- }
-
- // Print the cluster verification header.
- System.out.println();
- System.out.println();
- System.out.println("======================================================================");
- System.out.println("=== Cluster/Trigger Verification Settings ============================");
- System.out.println("======================================================================");
-
- // Define the first singles trigger.
- singlesTrigger[0] = new TriggerModule();
- singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.500);
- singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
- singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
-
- // Define the second singles trigger.
- singlesTrigger[1] = new TriggerModule();
- singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
- singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
- singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
-
- // Define the first pairs trigger.
- pairsTrigger[0] = new TriggerModule();
- pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
- pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
- pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 8.191);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 8.191);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.000);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.001);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 180);
- pairsTrigger[0].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 8);
-
- // Define the second pairs trigger.
- pairsTrigger[1] = new TriggerModule();
- pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
- pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
- pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 8.191);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 8.191);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.000);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.001);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 180);
- pairsTrigger[1].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 8);
-
- // Print the initial settings.
- logSettings();
- }
-
- /**
- * Prints the total run statistics.
- */
- @Override
- public void endOfData() {
- // Output the statistics.
- logStatistics();
-
- /*
- // Calculate the values needed for the efficiency histogram.
- long totalTime = entryList.get(entryList.size()).time / 1000000000;
- int entries = (int) (totalTime / (localWindowThreshold / 1000000000)) + 1;
-
- // Generate a histogram containing the efficiencies.
- IHistogram1D[] efficiencyHist = new IHistogram1D[5];
- for(int i = 0; i < 5; i++) {
- efficiencyHist[i] = aida.histogram1D("Efficiency " + i, entries, 0.0, totalTime + (localWindowThreshold / 1000000000));
- }
-
- // Input the efficiencies.
- for(EfficiencyEntry entry : entryList) {
- for(int i = 0; i < 5; i++) {
- efficiencyHist[i].fill(entry.time / 1000000000, entry.efficiency[i]);
- }
- }
- */
- }
-
- /**
- * Gets the banks and clusters from the event.
- */
- @Override
- public void process(EventHeader event) {
- // ==========================================================
- // ==== Event Pre-Initialization ============================
- // ==========================================================
-
- // If DAQ settings are to be used, check if they are initialized
- // yet. If not, skip the event.
- if(readDAQConfig) {
- if(!ConfigurationManager.isInitialized()) {
- return;
- }
- }
-
- // Reset the candidate cluster lists.
- singlesCandidates.clear();
- singlesCandidates.add(new ArrayList<Cluster>());
- singlesCandidates.add(new ArrayList<Cluster>());
- pairCandidates.clear();
- pairCandidates.add(new ArrayList<LCRelation>());
- pairCandidates.add(new ArrayList<LCRelation>());
-
- // Increment the total event count.
- localStats.sawEvent(event.getTimeStamp());
- globalStats.sawEvent(event.getTimeStamp());
-
- // Print the statistics every so often during a run.
- if(globalStats.getEventCount() % statPrintInterval == 0) {
- logStatistics();
- }
-
- // Reset the output buffer and print flags.
- clusterFail = false;
- singlesInternalFail = false;
- singlesEfficiencyFail = false;
- pairInternalFail = false;
- pairEfficiencyFail = false;
- OutputLogger.clearLog();
-
- // Track the times.
- if(startTime == -1) { startTime = event.getTimeStamp(); }
- else { endTime = event.getTimeStamp(); }
-
-
-
- // ==========================================================
- // ==== Output GTP Information ==============================
- // ==========================================================
-
+ private static final int ENERGY_MIN = TriggerDiagnosticUtil.SINGLES_ENERGY_MIN;
+ private static final int ENERGY_MAX = TriggerDiagnosticUtil.SINGLES_ENERGY_MAX;
+ private static final int HIT_COUNT = TriggerDiagnosticUtil.SINGLES_HIT_COUNT;
+ private static final int ENERGY_SUM = TriggerDiagnosticUtil.PAIR_ENERGY_SUM;
+ private static final int ENERGY_DIFF = TriggerDiagnosticUtil.PAIR_ENERGY_DIFF;
+ private static final int ENERGY_SLOPE = TriggerDiagnosticUtil.PAIR_ENERGY_SLOPE;
+ private static final int COPLANARITY = TriggerDiagnosticUtil.PAIR_COPLANARITY;
+
+ // Track the total run time.
+ private long startTime = -1;
+ private long endTime = -1;
+
+ // Cut names for logging.
+ private static final String[][] cutNames = {
+ { "E_min", "E_max", "hit count", "null" },
+ { "E_sum", "E_diff", "E_slope", "coplanar" }
+ };
+
+ // Temporary AIDA Plots
+ private TriggerPlotsModule globalTriggerPlots = new TriggerPlotsModule(0, 0);
+ private static final int RECON = 0;
+ private static final int SSP = 1;
+ private static final int ALL = 0;
+ private static final int MATCHED = 1;
+ private static final int FAILED = 2;
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D[][] clusterHitPlot = {
+ {
+ aida.histogram1D("Clustering/Recon Cluster Hit Count (All)", 9, 0.5, 9.5),
+ aida.histogram1D("Clustering/Recon Cluster Hit Count (Matched)", 9, 0.5, 9.5),
+ aida.histogram1D("Clustering/Recon Cluster Hit Count (Failed)", 9, 0.5, 9.5)
+ },
+ {
+ aida.histogram1D("Clustering/SSP Cluster Hit Count (All)", 9, 0.5, 9.5),
+ aida.histogram1D("Clustering/SSP Cluster Hit Count (Matched)", 9, 0.5, 9.5),
+ aida.histogram1D("Clustering/SSP Cluster Hit Count (Failed)", 9, 0.5, 9.5)
+ }
+ };
+ private IHistogram1D[][] clusterEnergyPlot = {
+ {
+ aida.histogram1D("Clustering/Recon Cluster Energy (All)", 300, 0.0, 3.0),
+ aida.histogram1D("Clustering/Recon Cluster Energy (Matched)", 300, 0.0, 3.0),
+ aida.histogram1D("Clustering/Recon Cluster Energy (Failed)", 300, 0.0, 3.0)
+ },
+ {
+ aida.histogram1D("Clustering/SSP Cluster Energy (All)", 300, 0.0, 3.0),
+ aida.histogram1D("Clustering/SSP Cluster Energy (Matched)", 300, 0.0, 3.0),
+ aida.histogram1D("Clustering/SSP Cluster Energy (Failed)", 300, 0.0, 3.0)
+ }
+ };
+ private IHistogram1D[][] clusterTimePlot = {
+ {
+ aida.histogram1D("Clustering/Recon Cluster Time (All)", 115, 0, 460),
+ aida.histogram1D("Clustering/Recon Cluster Time (Matched)", 115, 0, 460),
+ aida.histogram1D("Clustering/Recon Cluster Time (Failed)", 115, 0, 460)
+ },
+ {
+ aida.histogram1D("Clustering/SSP Cluster Time (All)", 115, 0, 460),
+ aida.histogram1D("Clustering/SSP Cluster Time (Matched)", 115, 0, 460),
+ aida.histogram1D("Clustering/SSP Cluster Time (Failed)", 115, 0, 460)
+ }
+ };
+ private IHistogram2D[][] clusterPositionPlot = {
+ {
+ aida.histogram2D("Clustering/Recon Cluster Position (All)", 47, -23.5, 23.5, 11, -5.5, 5.5),
+ aida.histogram2D("Clustering/Recon Cluster Position (Matched)", 47, -23.5, 23.5, 11, -5.5, 5.5),
+ aida.histogram2D("Clustering/Recon Cluster Position (Failed)", 47, -23.5, 23.5, 11, -5.5, 5.5)
+ },
+ {
+ aida.histogram2D("Clustering/SSP Cluster Position (All)", 47, -23.5, 23.5, 11, -5.5, 5.5),
+ aida.histogram2D("Clustering/SSP Cluster Position (Matched)", 47, -23.5, 23.5, 11, -5.5, 5.5),
+ aida.histogram2D("Clustering/SSP Cluster Position (Failed)", 47, -23.5, 23.5, 11, -5.5, 5.5)
+ }
+ };
+ private IHistogram2D[] energyhitDiffPlot = {
+ aida.histogram2D("Clustering/Recon-SSP Energy-Hit Difference (All)", 21, -0.010, 0.010, 6, -3, 3),
+ aida.histogram2D("Clustering/Recon-SSP Energy-Hit Difference (Matched)", 21, -0.010, 0.010, 6, -3, 3),
+ aida.histogram2D("Clustering/Recon-SSP Energy-Hit Difference (Failed)", 21, -0.010, 0.010, 6, -3, 3)
+ };
+ private ICloud2D[] efficiencyTimeHist = {
+ aida.cloud2D("Clustering/Cluster Efficiency vs. Time"),
+ aida.cloud2D("Singles Trigger 0/Cluster Efficiency vs. Time"),
+ aida.cloud2D("Singles Trigger 1/Cluster Efficiency vs. Time"),
+ aida.cloud2D("Pair Trigger 0/Cluster Efficiency vs. Time"),
+ aida.cloud2D("Pair Trigger 1/Cluster Efficiency vs. Time")
+ };
+
+ /**
+ * Define the trigger modules. This should be replaced by parsing
+ * the DAQ configuration at some point.
+ */
+ @Override
+ public void startOfData() {
+ // By default, all triggers and cuts are enabled.
+ for(int i = 0; i < 2; i++) {
+ // Enable the triggers.
+ pairTriggerEnabled[i] = true;
+ singlesTriggerEnabled[i] = true;
+
+ // Enable the singles cuts.
+ for(int j = 0; j < singlesCutsEnabled.length; j++) {
+ singlesCutsEnabled[i][j] = true;
+ }
+
+ // Enable the pair cuts.
+ for(int j = 0; j < pairCutsEnabled.length; j++) {
+ pairCutsEnabled[i][j] = true;
+ }
+ }
+
+ // If the DAQ configuration should be read, attach a listener
+ // to track when it updates.
+ if(readDAQConfig) {
+ ConfigurationManager.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // Get the DAQ configuration.
+ DAQConfig daq = ConfigurationManager.getInstance();
+
+ // Update the plotting energy slope values.
+ globalTriggerPlots.setEnergySlopeParamF(0, daq.getSSPConfig().getPair1Config().getEnergySlopeCutConfig().getParameterF());
+ globalTriggerPlots.setEnergySlopeParamF(1, daq.getSSPConfig().getPair2Config().getEnergySlopeCutConfig().getParameterF());
+
+ // Load the DAQ settings from the configuration manager.
+ singlesTrigger[0].loadDAQConfiguration(daq.getSSPConfig().getSingles1Config());
+ singlesTrigger[1].loadDAQConfiguration(daq.getSSPConfig().getSingles2Config());
+ pairsTrigger[0].loadDAQConfiguration(daq.getSSPConfig().getPair1Config());
+ pairsTrigger[1].loadDAQConfiguration(daq.getSSPConfig().getPair2Config());
+ nsa = daq.getFADCConfig().getNSA();
+ nsb = daq.getFADCConfig().getNSB();
+ windowWidth = daq.getFADCConfig().getWindowWidth();
+
+ // Get the trigger configurations from the DAQ.
+ SinglesTriggerConfig[] singles = { daq.getSSPConfig().getSingles1Config(),
+ daq.getSSPConfig().getSingles2Config() };
+ PairTriggerConfig[] pairs = { daq.getSSPConfig().getPair1Config(),
+ daq.getSSPConfig().getPair2Config() };
+
+ // Update the enabled/disabled statuses.
+ for(int i = 0; i < 2; i++) {
+ // Set the trigger enabled status.
+ pairTriggerEnabled[i] = pairs[i].isEnabled();
+ singlesTriggerEnabled[i] = singles[i].isEnabled();
+
+ // Set the singles cut statuses.
+ singlesCutsEnabled[i][ENERGY_MIN] = singles[i].getEnergyMinCutConfig().isEnabled();
+ singlesCutsEnabled[i][ENERGY_MAX] = singles[i].getEnergyMaxCutConfig().isEnabled();
+ singlesCutsEnabled[i][HIT_COUNT] = singles[i].getHitCountCutConfig().isEnabled();
+
+ // Set the pair cut statuses.
+ pairCutsEnabled[i][ENERGY_MIN] = pairs[i].getEnergyMinCutConfig().isEnabled();
+ pairCutsEnabled[i][ENERGY_MAX] = pairs[i].getEnergyMaxCutConfig().isEnabled();
+ pairCutsEnabled[i][HIT_COUNT] = pairs[i].getHitCountCutConfig().isEnabled();
+ pairCutsEnabled[i][3 + ENERGY_SUM] = pairs[i].getEnergySumCutConfig().isEnabled();
+ pairCutsEnabled[i][3 + ENERGY_DIFF] = pairs[i].getEnergyDifferenceCutConfig().isEnabled();
+ pairCutsEnabled[i][3 + ENERGY_SLOPE] = pairs[i].getEnergySlopeCutConfig().isEnabled();
+ pairCutsEnabled[i][3 + COPLANARITY] = pairs[i].getCoplanarityCutConfig().isEnabled();
+ }
+
+ // Update the trigger plots values.
+ globalTriggerPlots.setEnergySlopeParamF(0, daq.getSSPConfig().getPair1Config().getEnergySlopeCutConfig().getParameterF());
+ globalTriggerPlots.setEnergySlopeParamF(1, daq.getSSPConfig().getPair2Config().getEnergySlopeCutConfig().getParameterF());
+
+ // Print a DAQ configuration settings header.
+ System.out.println();
+ System.out.println();
+ System.out.println("======================================================================");
+ System.out.println("=== DAQ Configuration Settings =======================================");
+ System.out.println("======================================================================");
+ logSettings();
+ }
+ });
+ }
+
+ // Print the cluster verification header.
+ System.out.println();
+ System.out.println();
+ System.out.println("======================================================================");
+ System.out.println("=== Cluster/Trigger Verification Settings ============================");
+ System.out.println("======================================================================");
+
+ // Define the first singles trigger.
+ singlesTrigger[0] = new TriggerModule();
+ singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.500);
+ singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
+ singlesTrigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
+
+ // Define the second singles trigger.
+ singlesTrigger[1] = new TriggerModule();
+ singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
+ singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
+ singlesTrigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
+
+ // Define the first pairs trigger.
+ pairsTrigger[0] = new TriggerModule();
+ pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
+ pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
+ pairsTrigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 8.191);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 8.191);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.000);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.001);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 180);
+ pairsTrigger[0].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 8);
+
+ // Define the second pairs trigger.
+ pairsTrigger[1] = new TriggerModule();
+ pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.000);
+ pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 8.191);
+ pairsTrigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 0);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 8.191);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 8.191);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.000);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.001);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 180);
+ pairsTrigger[1].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 8);
+
+ // Print the initial settings.
+ logSettings();
+ }
+
+ /**
+ * Prints the total run statistics.
+ */
+ @Override
+ public void endOfData() {
+ // Output the statistics.
+ logStatistics();
+
+ /*
+ // Calculate the values needed for the efficiency histogram.
+ long totalTime = entryList.get(entryList.size()).time / 1000000000;
+ int entries = (int) (totalTime / (localWindowThreshold / 1000000000)) + 1;
+
+ // Generate a histogram containing the efficiencies.
+ IHistogram1D[] efficiencyHist = new IHistogram1D[5];
+ for(int i = 0; i < 5; i++) {
+ efficiencyHist[i] = aida.histogram1D("Efficiency " + i, entries, 0.0, totalTime + (localWindowThreshold / 1000000000));
+ }
+
+ // Input the efficiencies.
+ for(EfficiencyEntry entry : entryList) {
+ for(int i = 0; i < 5; i++) {
+ efficiencyHist[i].fill(entry.time / 1000000000, entry.efficiency[i]);
+ }
+ }
+ */
+ }
+
+ /**
+ * Gets the banks and clusters from the event.
+ */
+ @Override
+ public void process(EventHeader event) {
+ // ==========================================================
+ // ==== Event Pre-Initialization ============================
+ // ==========================================================
+
+ // If DAQ settings are to be used, check if they are initialized
+ // yet. If not, skip the event.
+ if(readDAQConfig) {
+ if(!ConfigurationManager.isInitialized()) {
+ return;
+ }
+ }
+
+ // Reset the candidate cluster lists.
+ singlesCandidates.clear();
+ singlesCandidates.add(new ArrayList<Cluster>());
+ singlesCandidates.add(new ArrayList<Cluster>());
+ pairCandidates.clear();
+ pairCandidates.add(new ArrayList<LCRelation>());
+ pairCandidates.add(new ArrayList<LCRelation>());
+
+ // Increment the total event count.
+ localStats.sawEvent(event.getTimeStamp());
+ globalStats.sawEvent(event.getTimeStamp());
+
+ // Print the statistics every so often during a run.
+ if(globalStats.getEventCount() % statPrintInterval == 0) {
+ logStatistics();
+ }
+
+ // Reset the output buffer and print flags.
+ clusterFail = false;
+ singlesInternalFail = false;
+ singlesEfficiencyFail = false;
+ pairInternalFail = false;
+ pairEfficiencyFail = false;
+ OutputLogger.clearLog();
+
+ // Track the times.
+ if(startTime == -1) { startTime = event.getTimeStamp(); }
+ else { endTime = event.getTimeStamp(); }
+
+
+
+ // ==========================================================
+ // ==== Output GTP Information ==============================
+ // ==========================================================
+
// Print the verification header.
- OutputLogger.printNewLine(2);
- OutputLogger.println("======================================================================");
- OutputLogger.println("==== FADC/GTP Readout ================================================");
- OutputLogger.println("======================================================================");
-
- OutputLogger.println("FADC Hits:");
- for(CalorimeterHit hit : event.get(CalorimeterHit.class, "EcalCalHits")) {
- int ix = hit.getIdentifierFieldValue("ix");
- int iy = hit.getIdentifierFieldValue("iy");
- OutputLogger.printf("\tHit at (%3d, %3d) with %7.3f GeV at time %3.0f ns%n", ix, iy, hit.getCorrectedEnergy(), hit.getTime());
- }
- OutputLogger.printNewLine(2);
- OutputLogger.println("GTP Clusters:");
- for(Cluster cluster : event.get(Cluster.class, clusterCollectionName)) {
- OutputLogger.printf("\t%s%n", TriggerDiagnosticUtil.clusterToString(cluster));
- for(CalorimeterHit hit : cluster.getCalorimeterHits()) {
- int ix = hit.getIdentifierFieldValue("ix");
- int iy = hit.getIdentifierFieldValue("iy");
- OutputLogger.printf("\t\t> (%3d, %3d) :: %7.3f GeV%n", ix, iy, hit.getCorrectedEnergy());
- }
- }
-
-
-
- // ==========================================================
- // ==== Initialize the Event ================================
- // ==========================================================
-
+ OutputLogger.printNewLine(2);
+ OutputLogger.println("======================================================================");
+ OutputLogger.println("==== FADC/GTP Readout ================================================");
+ OutputLogger.println("======================================================================");
+
+ OutputLogger.println("FADC Hits:");
+ for(CalorimeterHit hit : event.get(CalorimeterHit.class, "EcalCalHits")) {
+ int ix = hit.getIdentifierFieldValue("ix");
+ int iy = hit.getIdentifierFieldValue("iy");
+ OutputLogger.printf("\tHit at (%3d, %3d) with %7.3f GeV at time %3.0f ns%n", ix, iy, hit.getCorrectedEnergy(), hit.getTime());
+ }
+ OutputLogger.printNewLine(2);
+ OutputLogger.println("GTP Clusters:");
+ for(Cluster cluster : event.get(Cluster.class, clusterCollectionName)) {
+ OutputLogger.printf("\t%s%n", TriggerDiagnosticUtil.clusterToString(cluster));
+ for(CalorimeterHit hit : cluster.getCalorimeterHits()) {
+ int ix = hit.getIdentifierFieldValue("ix");
+ int iy = hit.getIdentifierFieldValue("iy");
+ OutputLogger.printf("\t\t> (%3d, %3d) :: %7.3f GeV%n", ix, iy, hit.getCorrectedEnergy());
+ }
+ }
+
+
+
+ // ==========================================================
+ // ==== Initialize the Event ================================
+ // ==========================================================
+
// Print the verification header.
- OutputLogger.printNewLine(2);
- OutputLogger.println("======================================================================");
- OutputLogger.println("==== Cluster/Trigger Verification ====================================");
- OutputLogger.println("======================================================================");
-
-
-
- // ==========================================================
- // ==== Obtain SSP and TI Banks =============================
- // ==========================================================
-
- // Get the SSP clusters.
- if(event.hasCollection(GenericObject.class, bankCollectionName)) {
- // Get the bank list.
- List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
-
- // Search through the banks and get the SSP and TI banks.
- for(GenericObject obj : bankList) {
- // If this is an SSP bank, parse it.
- if(AbstractIntData.getTag(obj) == SSPData.BANK_TAG) {
- sspBank = new SSPData(obj);
- }
-
- // Otherwise, if this is a TI bank, parse it.
- else if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) {
- tiBank = new TIData(obj);
-
- tiFlags = new boolean[6];
- if(tiBank.isPulserTrigger()) {
- OutputLogger.println("Trigger type :: Pulser");
- tiFlags[TriggerDiagStats.PULSER] = true;
- } else if(tiBank.isSingle0Trigger()) {
- OutputLogger.println("Trigger type :: Singles 1");
- tiFlags[TriggerDiagStats.SINGLES0] = true;
- } else if(tiBank.isSingle1Trigger()) {
- OutputLogger.println("Trigger type :: Singles 2");
- tiFlags[TriggerDiagStats.SINGLES1] = true;
- } else if(tiBank.isPair0Trigger()) {
- OutputLogger.println("Trigger type :: Pair 1");
- tiFlags[TriggerDiagStats.PAIR0] = true;
- } else if(tiBank.isPair1Trigger()) {
- OutputLogger.println("Trigger type :: Pair 2");
- tiFlags[TriggerDiagStats.PAIR1] = true;
- } else if(tiBank.isCalibTrigger()) {
- OutputLogger.println("Trigger type :: Cosmic");
- tiFlags[TriggerDiagStats.COSMIC] = true;
- } else {
- System.err.println("TriggerDiagnosticDriver: Skipping event; no TI trigger source found.");
- return;
- }
-
- // Pass the TI triggers to the run statistical data
- // manager object.
- localStats.getTriggerStats().sawTITriggers(tiFlags);
- globalStats.getTriggerStats().sawTITriggers(tiFlags);
- }
- }
-
- // If there is an SSP bank, get the list of SSP clusters.
- if(sspBank != null) {
- sspClusters = sspBank.getClusters();
- if(sspClusters.size() == 1) {
- OutputLogger.println("1 SSP cluster found.");
- } else {
- OutputLogger.printf("%d SSP clusters found.%n", sspClusters.size());
- }
- }
- }
-
- // Make sure that both an SSP bank and a TI bank were found.
- if(tiBank == null || sspBank == null) {
- System.err.println("TriggerDiagnosticDriver :: SEVERE WARNING :: TI bank or SSP bank missing from event!");
- return;
- }
-
- // Output the event number and information.
- OutputLogger.printf("Event Number %d (%d)%n", sspBank.getEventNumber(), event.getEventNumber());
-
-
-
- // ==========================================================
- // ==== Establish Event Integrity ===========================
- // ==========================================================
-
- // Check that all of the required objects are present.
- if(sspBank == null) {
- OutputLogger.println("No SSP bank found for this event. No verification will be performed.");
- if(verbose) { OutputLogger.printLog(); }
- return;
- } if(tiBank == null) {
- OutputLogger.println("No TI bank found for this event. No verification will be performed.");
- if(verbose) { OutputLogger.printLog(); }
- return;
- }
-
-
-
- // ==========================================================
- // ==== Check the Noise Level ===============================
- // ==========================================================
-
- // Check if there are hits.
- if(event.hasCollection(CalorimeterHit.class, hitCollectionName)) {
- // Check if there are more hits than the noise threshold.
- if(event.get(CalorimeterHit.class, hitCollectionName).size() >= noiseThreshold) {
- localStats.sawNoiseEvent();
- globalStats.sawNoiseEvent();
- OutputLogger.println("Noise event detected. Skipping event...");
- if(verbose) { OutputLogger.printLog(); }
- return;
- }
- }
-
-
-
- // ==========================================================
- // ==== Obtain Reconstructed Clusters =======================
- // ==========================================================
-
- // Get the reconstructed clusters.
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Get the reconstructed clusters.
- List<Cluster> allClusters = event.get(Cluster.class, clusterCollectionName);
-
- // Keep only the clusters that can be verified.
- OutputLogger.println();
- OutputLogger.println("Process cluster for verifiability:");
- reconClusters.clear();
- for(Cluster reconCluster : allClusters) {
- // Check that the cluster is within the safe region of the
- // FADC readout window. If it is not, it will likely have
- // inaccurate energy or hit values and may not produce the
- // expected results.
- OutputLogger.printf("\t%s", TriggerDiagnosticUtil.clusterToString(reconCluster));
- if(isVerifiable(reconCluster)) {
- reconClusters.add(reconCluster);
- OutputLogger.println(" [ verifiable ]");
- } else { OutputLogger.println(" [ unverifiable ]"); }
- }
-
- // Output the number of verifiable clusters found.
- if(reconClusters.size() == 1) { OutputLogger.println("1 verifiable reconstructed cluster found."); }
- else { OutputLogger.printf("%d verifiable reconstructed clusters found.%n", reconClusters.size()); }
-
- // Output the number of unverifiable clusters found.
- int unverifiableClusters = allClusters.size() - reconClusters.size();
- if(unverifiableClusters == 1) { OutputLogger.println("1 unverifiable reconstructed cluster found."); }
- else { OutputLogger.printf("%d unverifiable reconstructed clusters found.%n", unverifiableClusters); }
- } else {
- reconClusters = new ArrayList<Cluster>(0);
- OutputLogger.printf("No reconstructed clusters were found for collection \"%s\" in this event.%n", clusterCollectionName);
- }
-
-
-
- // ==========================================================
- // ==== Perform Event Verification ==========================
- // ==========================================================
-
- // Perform the cluster verification step.
- if(performClusterVerification) { clusterVerification(); }
-
- // Get the simulated triggers.
- if(event.hasCollection(SimTriggerData.class, "SimTriggers")) {
- List<SimTriggerData> stdList = event.get(SimTriggerData.class, "SimTriggers");
- triggerData = stdList.get(0);
- }
-
- // Construct lists of triggers for the SSP clusters and the
- // reconstructed clusters.
- if(performSinglesTriggerVerification) {
- singlesTriggerVerification();
- }
- if(performPairTriggerVerification) {
- pairTriggerVerification();
- }
-
- // Track how many events failed due to each type of verification.
- if(clusterFail) {
- localStats.failedClusterEvent();
- globalStats.failedClusterEvent();
- } if(pairInternalFail || pairEfficiencyFail) {
- localStats.failedPairEvent();
- globalStats.failedPairEvent();
- } if(singlesInternalFail || singlesEfficiencyFail) {
- localStats.failedSinglesEvent();
- globalStats.failedSinglesEvent();
- }
-
-
-
- // ==========================================================
- // ==== Perform Event Write-Out =============================
- // ==========================================================
-
- if(verbose ||(clusterFail && printClusterFail) ||
- (singlesInternalFail && printSinglesTriggerInternalFail) ||
- (singlesEfficiencyFail && printSinglesTriggerEfficiencyFail) ||
- (pairInternalFail && printPairTriggerInternalFail) ||
- (pairEfficiencyFail && printPairTriggerEfficiencyFail)) {
- OutputLogger.printLog();
- }
-
-
-
- // ==========================================================
- // ==== Process Local Tracked Variables =====================
- // ==========================================================
- if(localStats.getDuration() > localWindowThreshold) {
- // Write a snapshot of the driver to the event stream.
- List<DiagnosticSnapshot> snapshotList = new ArrayList<DiagnosticSnapshot>(2);
- snapshotList.add(localStats.getSnapshot());
- snapshotList.add(globalStats.getSnapshot());
-
- // Push the snapshot to the data stream.
- event.put(diagnosticCollectionName, snapshotList);
-
- // Store values needed to calculate efficiency.
- int[] matched = {
- localStats.getClusterStats().getMatches(),
- localStats.getTriggerStats().getSingles0Stats().getMatchedReconSimulatedTriggers(),
- localStats.getTriggerStats().getSingles1Stats().getMatchedReconSimulatedTriggers(),
- localStats.getTriggerStats().getPair0Stats().getMatchedReconSimulatedTriggers(),
- localStats.getTriggerStats().getPair1Stats().getMatchedReconSimulatedTriggers()
- };
- int[] total = {
- localStats.getClusterStats().getReconClusterCount(),
- localStats.getTriggerStats().getSingles0Stats().getReconSimulatedTriggers(),
- localStats.getTriggerStats().getSingles1Stats().getReconSimulatedTriggers(),
- localStats.getTriggerStats().getPair0Stats().getReconSimulatedTriggers(),
- localStats.getTriggerStats().getPair1Stats().getReconSimulatedTriggers()
- };
-
- // Calculate the efficiencies and upper/lower errors.
- double[] efficiency = new double[5];
- for(int i = 0; i < 5; i++) {
- efficiency[i] = 1.0 * matched[i] / total[i];
- }
-
- // Get the time for the current snapshot. This is the total
- // run time before the snapshot plus half of the snapshot.
- long time = globalStats.getDuration() - (localStats.getDuration() / 2);
-
- // Add them to the appropriate cloud plot.
- for(int i = 0; i < 5; i++) { efficiencyTimeHist[i].fill(time, efficiency[i]); }
-
- // Clear the local statistical data.
- localStats.clear();
- }
-
-
-
- // ==========================================================
- // ==== Write the Candidate Triggers ========================
- // ==========================================================
-
- // Write the candidates to a collection.
- event.put(pairCandidateCollectionName[0], pairCandidates.get(0), LCRelation.class, 0);
- event.put(pairCandidateCollectionName[1], pairCandidates.get(1), LCRelation.class, 0);
- event.put(singlesCandidateCollectionName[0], singlesCandidates.get(0), Cluster.class, clusterCollectionFlag);
- event.put(singlesCandidateCollectionName[1], singlesCandidates.get(1), Cluster.class, clusterCollectionFlag);
- }
+ OutputLogger.printNewLine(2);
+ OutputLogger.println("======================================================================");
+ OutputLogger.println("==== Cluster/Trigger Verification ====================================");
+ OutputLogger.println("======================================================================");
+
+
+
+ // ==========================================================
+ // ==== Obtain SSP and TI Banks =============================
+ // ==========================================================
+
+ // Get the SSP clusters.
+ if(event.hasCollection(GenericObject.class, bankCollectionName)) {
+ // Get the bank list.
+ List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
+
+ // Search through the banks and get the SSP and TI banks.
+ for(GenericObject obj : bankList) {
+ // If this is an SSP bank, parse it.
+ if(AbstractIntData.getTag(obj) == SSPData.BANK_TAG) {
+ sspBank = new SSPData(obj);
+ }
+
+ // Otherwise, if this is a TI bank, parse it.
+ else if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) {
+ tiBank = new TIData(obj);
+
+ tiFlags = new boolean[6];
+ if(tiBank.isPulserTrigger()) {
+ OutputLogger.println("Trigger type :: Pulser");
+ tiFlags[TriggerDiagStats.PULSER] = true;
+ } else if(tiBank.isSingle0Trigger()) {
+ OutputLogger.println("Trigger type :: Singles 1");
+ tiFlags[TriggerDiagStats.SINGLES0] = true;
+ } else if(tiBank.isSingle1Trigger()) {
+ OutputLogger.println("Trigger type :: Singles 2");
+ tiFlags[TriggerDiagStats.SINGLES1] = true;
+ } else if(tiBank.isPair0Trigger()) {
+ OutputLogger.println("Trigger type :: Pair 1");
+ tiFlags[TriggerDiagStats.PAIR0] = true;
+ } else if(tiBank.isPair1Trigger()) {
+ OutputLogger.println("Trigger type :: Pair 2");
+ tiFlags[TriggerDiagStats.PAIR1] = true;
+ } else if(tiBank.isCalibTrigger()) {
+ OutputLogger.println("Trigger type :: Cosmic");
+ tiFlags[TriggerDiagStats.COSMIC] = true;
+ } else {
+ System.err.println("TriggerDiagnosticDriver: Skipping event; no TI trigger source found.");
+ return;
+ }
+
+ // Pass the TI triggers to the run statistical data
+ // manager object.
+ localStats.getTriggerStats().sawTITriggers(tiFlags);
+ globalStats.getTriggerStats().sawTITriggers(tiFlags);
+ }
+ }
+
+ // If there is an SSP bank, get the list of SSP clusters.
+ if(sspBank != null) {
+ sspClusters = sspBank.getClusters();
+ if(sspClusters.size() == 1) {
+ OutputLogger.println("1 SSP cluster found.");
+ } else {
+ OutputLogger.printf("%d SSP clusters found.%n", sspClusters.size());
+ }
+ }
+ }
+
+ // Make sure that both an SSP bank and a TI bank were found.
+ if(tiBank == null || sspBank == null) {
+ System.err.println("TriggerDiagnosticDriver :: SEVERE WARNING :: TI bank or SSP bank missing from event!");
+ return;
+ }
+
+ // Output the event number and information.
+ OutputLogger.printf("Event Number %d (%d)%n", sspBank.getEventNumber(), event.getEventNumber());
+
+
+
+ // ==========================================================
+ // ==== Establish Event Integrity ===========================
+ // ==========================================================
+
+ // Check that all of the required objects are present.
+ if(sspBank == null) {
+ OutputLogger.println("No SSP bank found for this event. No verification will be performed.");
+ if(verbose) { OutputLogger.printLog(); }
+ return;
+ } if(tiBank == null) {
+ OutputLogger.println("No TI bank found for this event. No verification will be performed.");
+ if(verbose) { OutputLogger.printLog(); }
+ return;
+ }
+
+
+
+ // ==========================================================
+ // ==== Check the Noise Level ===============================
+ // ==========================================================
+
+ // Check if there are hits.
+ if(event.hasCollection(CalorimeterHit.class, hitCollectionName)) {
+ // Check if there are more hits than the noise threshold.
+ if(event.get(CalorimeterHit.class, hitCollectionName).size() >= noiseThreshold) {
+ localStats.sawNoiseEvent();
+ globalStats.sawNoiseEvent();
+ OutputLogger.println("Noise event detected. Skipping event...");
+ if(verbose) { OutputLogger.printLog(); }
+ return;
+ }
+ }
+
+
+
+ // ==========================================================
+ // ==== Obtain Reconstructed Clusters =======================
+ // ==========================================================
+
+ // Get the reconstructed clusters.
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Get the reconstructed clusters.
+ List<Cluster> allClusters = event.get(Cluster.class, clusterCollectionName);
+
+ // Keep only the clusters that can be verified.
+ OutputLogger.println();
+ OutputLogger.println("Process cluster for verifiability:");
+ reconClusters.clear();
+ for(Cluster reconCluster : allClusters) {
+ // Check that the cluster is within the safe region of the
+ // FADC readout window. If it is not, it will likely have
+ // inaccurate energy or hit values and may not produce the
+ // expected results.
+ OutputLogger.printf("\t%s", TriggerDiagnosticUtil.clusterToString(reconCluster));
+ if(isVerifiable(reconCluster)) {
+ reconClusters.add(reconCluster);
+ OutputLogger.println(" [ verifiable ]");
+ } else { OutputLogger.println(" [ unverifiable ]"); }
+ }
+
+ // Output the number of verifiable clusters found.
+ if(reconClusters.size() == 1) { OutputLogger.println("1 verifiable reconstructed cluster found."); }
+ else { OutputLogger.printf("%d verifiable reconstructed clusters found.%n", reconClusters.size()); }
+
+ // Output the number of unverifiable clusters found.
+ int unverifiableClusters = allClusters.size() - reconClusters.size();
+ if(unverifiableClusters == 1) { OutputLogger.println("1 unverifiable reconstructed cluster found."); }
+ else { OutputLogger.printf("%d unverifiable reconstructed clusters found.%n", unverifiableClusters); }
+ } else {
+ reconClusters = new ArrayList<Cluster>(0);
+ OutputLogger.printf("No reconstructed clusters were found for collection \"%s\" in this event.%n", clusterCollectionName);
+ }
+
+
+
+ // ==========================================================
+ // ==== Perform Event Verification ==========================
+ // ==========================================================
+
+ // Perform the cluster verification step.
+ if(performClusterVerification) { clusterVerification(); }
+
+ // Get the simulated triggers.
+ if(event.hasCollection(SimTriggerData.class, "SimTriggers")) {
+ List<SimTriggerData> stdList = event.get(SimTriggerData.class, "SimTriggers");
+ triggerData = stdList.get(0);
+ }
+
+ // Construct lists of triggers for the SSP clusters and the
+ // reconstructed clusters.
+ if(performSinglesTriggerVerification) {
+ singlesTriggerVerification();
+ }
+ if(performPairTriggerVerification) {
+ pairTriggerVerification();
+ }
+
+ // Track how many events failed due to each type of verification.
+ if(clusterFail) {
+ localStats.failedClusterEvent();
+ globalStats.failedClusterEvent();
+ } if(pairInternalFail || pairEfficiencyFail) {
+ localStats.failedPairEvent();
+ globalStats.failedPairEvent();
+ } if(singlesInternalFail || singlesEfficiencyFail) {
+ localStats.failedSinglesEvent();
+ globalStats.failedSinglesEvent();
+ }
+
+
+
+ // ==========================================================
+ // ==== Perform Event Write-Out =============================
+ // ==========================================================
+
+ if(verbose ||(clusterFail && printClusterFail) ||
+ (singlesInternalFail && printSinglesTriggerInternalFail) ||
+ (singlesEfficiencyFail && printSinglesTriggerEfficiencyFail) ||
+ (pairInternalFail && printPairTriggerInternalFail) ||
+ (pairEfficiencyFail && printPairTriggerEfficiencyFail)) {
+ OutputLogger.printLog();
+ }
+
+
+
+ // ==========================================================
+ // ==== Process Local Tracked Variables =====================
+ // ==========================================================
+ if(localStats.getDuration() > localWindowThreshold) {
+ // Write a snapshot of the driver to the event stream.
+ List<DiagnosticSnapshot> snapshotList = new ArrayList<DiagnosticSnapshot>(2);
+ snapshotList.add(localStats.getSnapshot());
+ snapshotList.add(globalStats.getSnapshot());
+
+ // Push the snapshot to the data stream.
+ event.put(diagnosticCollectionName, snapshotList);
+
+ // Store values needed to calculate efficiency.
+ int[] matched = {
+ localStats.getClusterStats().getMatches(),
+ localStats.getTriggerStats().getSingles0Stats().getMatchedReconSimulatedTriggers(),
+ localStats.getTriggerStats().getSingles1Stats().getMatchedReconSimulatedTriggers(),
+ localStats.getTriggerStats().getPair0Stats().getMatchedReconSimulatedTriggers(),
+ localStats.getTriggerStats().getPair1Stats().getMatchedReconSimulatedTriggers()
+ };
+ int[] total = {
+ localStats.getClusterStats().getReconClusterCount(),
+ localStats.getTriggerStats().getSingles0Stats().getReconSimulatedTriggers(),
+ localStats.getTriggerStats().getSingles1Stats().getReconSimulatedTriggers(),
+ localStats.getTriggerStats().getPair0Stats().getReconSimulatedTriggers(),
+ localStats.getTriggerStats().getPair1Stats().getReconSimulatedTriggers()
+ };
+
+ // Calculate the efficiencies and upper/lower errors.
+ double[] efficiency = new double[5];
+ for(int i = 0; i < 5; i++) {
+ efficiency[i] = 1.0 * matched[i] / total[i];
+ }
+
+ // Get the time for the current snapshot. This is the total
+ // run time before the snapshot plus half of the snapshot.
+ long time = globalStats.getDuration() - (localStats.getDuration() / 2);
+
+ // Add them to the appropriate cloud plot.
+ for(int i = 0; i < 5; i++) { efficiencyTimeHist[i].fill(time, efficiency[i]); }
+
+ // Clear the local statistical data.
+ localStats.clear();
+ }
+
+
+
+ // ==========================================================
+ // ==== Write the Candidate Triggers ========================
+ // ==========================================================
+
+ // Write the candidates to a collection.
+ event.put(pairCandidateCollectionName[0], pairCandidates.get(0), LCRelation.class, 0);
+ event.put(pairCandidateCollectionName[1], pairCandidates.get(1), LCRelation.class, 0);
+ event.put(singlesCandidateCollectionName[0], singlesCandidates.get(0), Cluster.class, clusterCollectionFlag);
+ event.put(singlesCandidateCollectionName[1], singlesCandidates.get(1), Cluster.class, clusterCollectionFlag);
+ }
- public void setPrintResultsEveryNEvents(int n) {
- statPrintInterval = n;
- }
-
- public void setPrintOnClusterFailure(boolean state) {
- printClusterFail = state;
- }
-
- public void setPrintOnSinglesEfficiencyFailure(boolean state) {
- printSinglesTriggerEfficiencyFail = state;
- }
-
- public void setPrintOnSinglesSSPFailure(boolean state) {
- printSinglesTriggerInternalFail = state;
- }
-
- public void setPrintOnPairEfficiencyFailure(boolean state) {
- printPairTriggerEfficiencyFail = state;
- }
-
- public void setPrintOnPairSSPFailure(boolean state) {
- printPairTriggerInternalFail = state;
- }
-
- public void setVerbose(boolean state) {
- verbose = state;
- }
-
- public void setHitCollectionName(String hitCollectionName) {
- this.hitCollectionName = hitCollectionName;
- }
-
- public void setClusterCollectionName(String clusterCollectionName) {
- this.clusterCollectionName = clusterCollectionName;
- }
-
- public void setBankCollectionName(String bankCollectionName) {
- this.bankCollectionName = bankCollectionName;
- }
-
- public void setNoiseThresholdCount(int noiseHits) {
- noiseThreshold = noiseHits;
- }
-
- public void setHitAcceptanceWindow(int window) {
- hitAcceptance = window;
- }
-
- public void setEnergyAcceptanceWindow(double window) {
- energyAcceptance = window;
- }
-
- public void setEnforceStrictTimeCompliance(boolean state) {
- enforceTimeCompliance = state;
- }
-
- public void setReadDAQConfig(boolean state) {
- readDAQConfig = state;
- }
-
- public void setLocalWindowThresholdMilliseconds(int localWindowThreshold) {
- this.localWindowThreshold = localWindowThreshold;
- }
-
- /**
- * Attempts to match all reconstructed clusters that are safely
- * within the integration window with clusters reported by the SSP.
- * Method also tracks the ratio of valid reconstructed clusters to
- * matches found.<br/>
- * <br/>
- * Note that unmatched SSP clusters are ignored. Since these may
- * or may not correspond to reconstructed clusters that occur in
- * the forbidden time region, it is impossible to say whether or
- * not these legitimately failed to match or not.
- */
- private void clusterVerification() {
- // ==========================================================
- // ==== Initialize Cluster Verification =====================
- // ==========================================================
-
- // Print the cluster verification header.
- OutputLogger.printNewLine(2);
- OutputLogger.println("======================================================================");
- OutputLogger.println("=== Cluster Verification =============================================");
- OutputLogger.println("======================================================================");
-
-
-
- // ==========================================================
- // ==== Perform Cluster Matching ============================
- // ==========================================================
-
- // Track the number of cluster pairs that were matched and that
- // failed by failure type.
- DetailedClusterEvent event;
-
- if(enforceTimeCompliance) {
- event = matchClustersTimeCompliant(reconClusters, sspClusters, energyAcceptance, hitAcceptance);
- } else {
- event = matchClusters(reconClusters, sspClusters, energyAcceptance, hitAcceptance);
- }
-
- // Add the event results to the global results.
- localStats.getClusterStats().addEvent(event);
- globalStats.getClusterStats().addEvent(event);
- localStats.getClusterStats().sawSSPClusters(sspClusters.size());
- globalStats.getClusterStats().sawSSPClusters(sspClusters.size());
- localStats.getClusterStats().sawReconClusters(reconClusters.size());
- globalStats.getClusterStats().sawReconClusters(reconClusters.size());
-
-
-
- // ==========================================================
- // ==== Output Event Summary ================================
- // ==========================================================
-
- // Print the valid reconstructed clusters and populate their
- // distribution graphs.
- OutputLogger.println();
- OutputLogger.println("Verified Reconstructed Clusters:");
- if(!reconClusters.isEmpty()) {
- for(Cluster reconCluster : reconClusters) {
- OutputLogger.printf("\t%s%n", TriggerDiagnosticUtil.clusterToString(reconCluster));
- }
- } else { OutputLogger.println("\tNone"); }
-
- // Print the SSP clusters and populate their distribution graphs.
- OutputLogger.println("SSP Clusters:");
- if(!sspClusters.isEmpty()) {
- for(SSPCluster sspCluster : sspClusters) {
- OutputLogger.printf("\t%s%n", TriggerDiagnosticUtil.clusterToString(sspCluster));
- }
- } else { OutputLogger.println("\tNone"); }
-
- // Print the matched clusters.
- OutputLogger.println("Matched Clusters:");
- if(event.getMatches() != 0) {
- // Iterate over the matched pairs.
- for(ClusterMatchedPair pair : event.getClusterPairs()) {
- // If the pair is a match, print it out.
- if(pair.isMatch()) {
- OutputLogger.printf("\t%s --> %s%n",
- TriggerDiagnosticUtil.clusterToString(pair.getReconstructedCluster()),
- TriggerDiagnosticUtil.clusterToString(pair.getSSPCluster()));
- }
- }
- }
- else { OutputLogger.println("\tNone"); }
-
- // Print event statistics.
- OutputLogger.println();
- OutputLogger.println("Event Statistics:");
- OutputLogger.printf("\tRecon Clusters :: %d%n", reconClusters.size());
- OutputLogger.printf("\tClusters Matched :: %d%n", event.getMatches());
- OutputLogger.printf("\tFailed (Position) :: %d%n", event.getPositionFailures());
- OutputLogger.printf("\tFailed (Time) :: %d%n", event.getTimeFailures());
- OutputLogger.printf("\tFailed (Energy) :: %d%n", event.getEnergyFailures());
- OutputLogger.printf("\tFailed (Hit Count) :: %d%n", event.getHitCountFailures());
- OutputLogger.printf("\tCluster Efficiency :: %3.0f%%%n", 100.0 * event.getMatches() / reconClusters.size());
-
- // Note whether there was a cluster match failure.
- if(event.isFailState() || event.getMatches() - reconClusters.size() != 0) {
- clusterFail = true;
- }
-
-
-
- // TEMP :: Populate the cluster diagnostic plots.
-
- // Populate the ALL cluster plots.
- for(Cluster cluster : reconClusters) {
- clusterHitPlot[RECON][ALL].fill(cluster.getCalorimeterHits().size());
- clusterEnergyPlot[RECON][ALL].fill(cluster.getEnergy());
- clusterTimePlot[RECON][ALL].fill(cluster.getCalorimeterHits().get(0).getTime());
- Point position = TriggerDiagnosticUtil.getClusterPosition(cluster);
- clusterPositionPlot[RECON][ALL].fill(position.x, position.y);
- }
- for(SSPCluster cluster : sspClusters) {
- clusterHitPlot[SSP][ALL].fill(cluster.getHitCount());
- clusterEnergyPlot[SSP][ALL].fill(cluster.getEnergy());
- clusterTimePlot[SSP][ALL].fill(cluster.getTime());
- clusterPositionPlot[SSP][ALL].fill(cluster.getXIndex(), cluster.getYIndex());
- }
-
- // Populate the matched and failed plots.
- for(ClusterMatchedPair pair : event.getClusterPairs()) {
- if(pair.getFirstElement() != null && pair.getSecondElement() != null) {
- double energyDiff = pair.getSecondElement().getEnergy() - pair.getFirstElement().getEnergy();
- int hitDiff = pair.getSecondElement().getHitCount() - pair.getFirstElement().getCalorimeterHits().size();
- energyhitDiffPlot[ALL].fill(energyDiff, hitDiff);
- }
-
- if(pair.isMatch()) {
- if(pair.getFirstElement() != null) {
- clusterHitPlot[RECON][MATCHED].fill(pair.getFirstElement().getCalorimeterHits().size());
- clusterEnergyPlot[RECON][MATCHED].fill(pair.getFirstElement().getEnergy());
- clusterTimePlot[RECON][MATCHED].fill(pair.getFirstElement().getCalorimeterHits().get(0).getTime());
- Point position = TriggerDiagnosticUtil.getClusterPosition(pair.getFirstElement());
- clusterPositionPlot[RECON][MATCHED].fill(position.x, position.y);
- } if(pair.getSecondElement() != null) {
- clusterHitPlot[SSP][MATCHED].fill(pair.getSecondElement().getHitCount());
- clusterEnergyPlot[SSP][MATCHED].fill(pair.getSecondElement().getEnergy());
- clusterTimePlot[SSP][MATCHED].fill(pair.getSecondElement().getTime());
- clusterPositionPlot[SSP][MATCHED].fill(pair.getSecondElement().getXIndex(), pair.getSecondElement().getYIndex());
- } if(pair.getFirstElement() != null && pair.getSecondElement() != null) {
- double energyDiff = pair.getSecondElement().getEnergy() - pair.getFirstElement().getEnergy();
- int hitDiff = pair.getSecondElement().getHitCount() - pair.getFirstElement().getCalorimeterHits().size();
- energyhitDiffPlot[MATCHED].fill(energyDiff, hitDiff);
- }
- } else {
- if(pair.getFirstElement() != null) {
- clusterHitPlot[RECON][FAILED].fill(pair.getFirstElement().getCalorimeterHits().size());
- clusterEnergyPlot[RECON][FAILED].fill(pair.getFirstElement().getEnergy());
- clusterTimePlot[RECON][FAILED].fill(pair.getFirstElement().getCalorimeterHits().get(0).getTime());
- Point position = TriggerDiagnosticUtil.getClusterPosition(pair.getFirstElement());
- clusterPositionPlot[RECON][FAILED].fill(position.x, position.y);
- } if(pair.getSecondElement() != null) {
- clusterHitPlot[SSP][FAILED].fill(pair.getSecondElement().getHitCount());
- clusterEnergyPlot[SSP][FAILED].fill(pair.getSecondElement().getEnergy());
- clusterTimePlot[SSP][FAILED].fill(pair.getSecondElement().getTime());
- clusterPositionPlot[SSP][FAILED].fill(pair.getSecondElement().getXIndex(), pair.getSecondElement().getYIndex());
- } if(pair.getFirstElement() != null && pair.getSecondElement() != null) {
- double energyDiff = pair.getSecondElement().getEnergy() - pair.getFirstElement().getEnergy();
- int hitDiff = pair.getSecondElement().getHitCount() - pair.getFirstElement().getCalorimeterHits().size();
- energyhitDiffPlot[FAILED].fill(energyDiff, hitDiff);
- }
- }
- }
- }
-
- /**
+ public void setPrintResultsEveryNEvents(int n) {
+ statPrintInterval = n;
+ }
+
+ public void setPrintOnClusterFailure(boolean state) {
+ printClusterFail = state;
+ }
+
+ public void setPrintOnSinglesEfficiencyFailure(boolean state) {
+ printSinglesTriggerEfficiencyFail = state;
+ }
+
+ public void setPrintOnSinglesSSPFailure(boolean state) {
+ printSinglesTriggerInternalFail = state;
+ }
+
+ public void setPrintOnPairEfficiencyFailure(boolean state) {
+ printPairTriggerEfficiencyFail = state;
+ }
+
+ public void setPrintOnPairSSPFailure(boolean state) {
+ printPairTriggerInternalFail = state;
+ }
+
+ public void setVerbose(boolean state) {
+ verbose = state;
+ }
+
+ public void setHitCollectionName(String hitCollectionName) {
+ this.hitCollectionName = hitCollectionName;
+ }
+
+ public void setClusterCollectionName(String clusterCollectionName) {
+ this.clusterCollectionName = clusterCollectionName;
+ }
+
+ public void setBankCollectionName(String bankCollectionName) {
+ this.bankCollectionName = bankCollectionName;
+ }
+
+ public void setNoiseThresholdCount(int noiseHits) {
+ noiseThreshold = noiseHits;
+ }
+
+ public void setHitAcceptanceWindow(int window) {
+ hitAcceptance = window;
+ }
+
+ public void setEnergyAcceptanceWindow(double window) {
+ energyAcceptance = window;
+ }
+
+ public void setEnforceStrictTimeCompliance(boolean state) {
+ enforceTimeCompliance = state;
+ }
+
+ public void setReadDAQConfig(boolean state) {
+ readDAQConfig = state;
+ }
+
+ public void setLocalWindowThresholdMilliseconds(int localWindowThreshold) {
+ this.localWindowThreshold = localWindowThreshold;
+ }
+
+ /**
+ * Attempts to match all reconstructed clusters that are safely
+ * within the integration window with clusters reported by the SSP.
+ * Method also tracks the ratio of valid reconstructed clusters to
+ * matches found.<br/>
+ * <br/>
+ * Note that unmatched SSP clusters are ignored. Since these may
+ * or may not correspond to reconstructed clusters that occur in
+ * the forbidden time region, it is impossible to say whether or
+ * not these legitimately failed to match or not.
+ */
+ private void clusterVerification() {
+ // ==========================================================
+ // ==== Initialize Cluster Verification =====================
+ // ==========================================================
+
+ // Print the cluster verification header.
+ OutputLogger.printNewLine(2);
+ OutputLogger.println("======================================================================");
+ OutputLogger.println("=== Cluster Verification =============================================");
+ OutputLogger.println("======================================================================");
+
+
+
+ // ==========================================================
+ // ==== Perform Cluster Matching ============================
+ // ==========================================================
+
+ // Track the number of cluster pairs that were matched and that
+ // failed by failure type.
+ DetailedClusterEvent event;
+
+ if(enforceTimeCompliance) {
+ event = matchClustersTimeCompliant(reconClusters, sspClusters, energyAcceptance, hitAcceptance);
+ } else {
+ event = matchClusters(reconClusters, sspClusters, energyAcceptance, hitAcceptance);
+ }
+
+ // Add the event results to the global results.
+ localStats.getClusterStats().addEvent(event);
+ globalStats.getClusterStats().addEvent(event);
+ localStats.getClusterStats().sawSSPClusters(sspClusters.size());
+ globalStats.getClusterStats().sawSSPClusters(sspClusters.size());
+ localStats.getClusterStats().sawReconClusters(reconClusters.size());
+ globalStats.getClusterStats().sawReconClusters(reconClusters.size());
+
+
+
+ // ==========================================================
+ // ==== Output Event Summary ================================
+ // ==========================================================
+
+ // Print the valid reconstructed clusters and populate their
+ // distribution graphs.
+ OutputLogger.println();
+ OutputLogger.println("Verified Reconstructed Clusters:");
+ if(!reconClusters.isEmpty()) {
+ for(Cluster reconCluster : reconClusters) {
+ OutputLogger.printf("\t%s%n", TriggerDiagnosticUtil.clusterToString(reconCluster));
+ }
+ } else { OutputLogger.println("\tNone"); }
+
+ // Print the SSP clusters and populate their distribution graphs.
+ OutputLogger.println("SSP Clusters:");
+ if(!sspClusters.isEmpty()) {
+ for(SSPCluster sspCluster : sspClusters) {
+ OutputLogger.printf("\t%s%n", TriggerDiagnosticUtil.clusterToString(sspCluster));
+ }
+ } else { OutputLogger.println("\tNone"); }
+
+ // Print the matched clusters.
+ OutputLogger.println("Matched Clusters:");
+ if(event.getMatches() != 0) {
+ // Iterate over the matched pairs.
+ for(ClusterMatchedPair pair : event.getClusterPairs()) {
+ // If the pair is a match, print it out.
+ if(pair.isMatch()) {
+ OutputLogger.printf("\t%s --> %s%n",
+ TriggerDiagnosticUtil.clusterToString(pair.getReconstructedCluster()),
+ TriggerDiagnosticUtil.clusterToString(pair.getSSPCluster()));
+ }
+ }
+ }
+ else { OutputLogger.println("\tNone"); }
+
+ // Print event statistics.
+ OutputLogger.println();
+ OutputLogger.println("Event Statistics:");
+ OutputLogger.printf("\tRecon Clusters :: %d%n", reconClusters.size());
+ OutputLogger.printf("\tClusters Matched :: %d%n", event.getMatches());
+ OutputLogger.printf("\tFailed (Position) :: %d%n", event.getPositionFailures());
+ OutputLogger.printf("\tFailed (Time) :: %d%n", event.getTimeFailures());
+ OutputLogger.printf("\tFailed (Energy) :: %d%n", event.getEnergyFailures());
+ OutputLogger.printf("\tFailed (Hit Count) :: %d%n", event.getHitCountFailures());
+ OutputLogger.printf("\tCluster Efficiency :: %3.0f%%%n", 100.0 * event.getMatches() / reconClusters.size());
+
+ // Note whether there was a cluster match failure.
+ if(event.isFailState() || event.getMatches() - reconClusters.size() != 0) {
+ clusterFail = true;
+ }
+
+
+
+ // TEMP :: Populate the cluster diagnostic plots.
+
+ // Populate the ALL cluster plots.
+ for(Cluster cluster : reconClusters) {
+ clusterHitPlot[RECON][ALL].fill(cluster.getCalorimeterHits().size());
+ clusterEnergyPlot[RECON][ALL].fill(cluster.getEnergy());
+ clusterTimePlot[RECON][ALL].fill(cluster.getCalorimeterHits().get(0).getTime());
+ Point position = TriggerDiagnosticUtil.getClusterPosition(cluster);
+ clusterPositionPlot[RECON][ALL].fill(position.x, position.y);
+ }
+ for(SSPCluster cluster : sspClusters) {
+ clusterHitPlot[SSP][ALL].fill(cluster.getHitCount());
+ clusterEnergyPlot[SSP][ALL].fill(cluster.getEnergy());
+ clusterTimePlot[SSP][ALL].fill(cluster.getTime());
+ clusterPositionPlot[SSP][ALL].fill(cluster.getXIndex(), cluster.getYIndex());
+ }
+
+ // Populate the matched and failed plots.
+ for(ClusterMatchedPair pair : event.getClusterPairs()) {
+ if(pair.getFirstElement() != null && pair.getSecondElement() != null) {
+ double energyDiff = pair.getSecondElement().getEnergy() - pair.getFirstElement().getEnergy();
+ int hitDiff = pair.getSecondElement().getHitCount() - pair.getFirstElement().getCalorimeterHits().size();
+ energyhitDiffPlot[ALL].fill(energyDiff, hitDiff);
+ }
+
+ if(pair.isMatch()) {
+ if(pair.getFirstElement() != null) {
+ clusterHitPlot[RECON][MATCHED].fill(pair.getFirstElement().getCalorimeterHits().size());
+ clusterEnergyPlot[RECON][MATCHED].fill(pair.getFirstElement().getEnergy());
+ clusterTimePlot[RECON][MATCHED].fill(pair.getFirstElement().getCalorimeterHits().get(0).getTime());
+ Point position = TriggerDiagnosticUtil.getClusterPosition(pair.getFirstElement());
+ clusterPositionPlot[RECON][MATCHED].fill(position.x, position.y);
+ } if(pair.getSecondElement() != null) {
+ clusterHitPlot[SSP][MATCHED].fill(pair.getSecondElement().getHitCount());
+ clusterEnergyPlot[SSP][MATCHED].fill(pair.getSecondElement().getEnergy());
+ clusterTimePlot[SSP][MATCHED].fill(pair.getSecondElement().getTime());
+ clusterPositionPlot[SSP][MATCHED].fill(pair.getSecondElement().getXIndex(), pair.getSecondElement().getYIndex());
+ } if(pair.getFirstElement() != null && pair.getSecondElement() != null) {
+ double energyDiff = pair.getSecondElement().getEnergy() - pair.getFirstElement().getEnergy();
+ int hitDiff = pair.getSecondElement().getHitCount() - pair.getFirstElement().getCalorimeterHits().size();
+ energyhitDiffPlot[MATCHED].fill(energyDiff, hitDiff);
+ }
+ } else {
+ if(pair.getFirstElement() != null) {
+ clusterHitPlot[RECON][FAILED].fill(pair.getFirstElement().getCalorimeterHits().size());
+ clusterEnergyPlot[RECON][FAILED].fill(pair.getFirstElement().getEnergy());
+ clusterTimePlot[RECON][FAILED].fill(pair.getFirstElement().getCalorimeterHits().get(0).getTime());
+ Point position = TriggerDiagnosticUtil.getClusterPosition(pair.getFirstElement());
+ clusterPositionPlot[RECON][FAILED].fill(position.x, position.y);
+ } if(pair.getSecondElement() != null) {
+ clusterHitPlot[SSP][FAILED].fill(pair.getSecondElement().getHitCount());
+ clusterEnergyPlot[SSP][FAILED].fill(pair.getSecondElement().getEnergy());
+ clusterTimePlot[SSP][FAILED].fill(pair.getSecondElement().getTime());
+ clusterPositionPlot[SSP][FAILED].fill(pair.getSecondElement().getXIndex(), pair.getSecondElement().getYIndex());
+ } if(pair.getFirstElement() != null && pair.getSecondElement() != null) {
+ double energyDiff = pair.getSecondElement().getEnergy() - pair.getFirstElement().getEnergy();
+ int hitDiff = pair.getSecondElement().getHitCount() - pair.getFirstElement().getCalorimeterHits().size();
+ energyhitDiffPlot[FAILED].fill(energyDiff, hitDiff);
+ }
+ }
+ }
+ }
+
+ /**
* Performs cluster matching between a collection of reconstructed
- * clusters and a collection of SSP clusters with an algorithm that
- * ignores the times reported for each cluster.
- * @param reconClusters - A collection of reconstructed clusters.
- * @param sspClusters - A collection of SSP clusters.
- * @param energyWindow - The window of allowed deviation between
- * the reconstructed cluster and SSP cluster energies.
- * @param hitWindow - The window of allowed deviation between
- * the reconstructed cluster and SSP cluster hit counts.
- * @return Returns the cluster matching results stored inside a
- * <code>clusterMatchEvent</code> object.
- */
- private static final DetailedClusterEvent matchClusters(Collection<Cluster> reconClusters,
- Collection<SSPCluster> sspClusters, double energyWindow, int hitWindow) {
- // Track the number of cluster pairs that were matched and that
- // failed by failure type.
- DetailedClusterEvent event = new DetailedClusterEvent();
-
- // Create maps to link cluster position to the list of clusters
- // that were found at that location.
- Map<Point, List<Cluster>> reconClusterMap = new HashMap<Point, List<Cluster>>(reconClusters.size());
- Map<Point, List<SSPCluster>> sspClusterMap = new HashMap<Point, List<SSPCluster>>(reconClusters.size());
-
- // Populate the reconstructed cluster map.
- for(Cluster reconCluster : reconClusters) {
- // Get the cluster position.
- Point position = new Point(TriggerDiagnosticUtil.getXIndex(reconCluster),
- TriggerDiagnosticUtil.getYIndex(reconCluster));
-
- // Get the list for this cluster position.
- List<Cluster> reconList = reconClusterMap.get(position);
- if(reconList == null) {
- reconList = new ArrayList<Cluster>();
- reconClusterMap.put(position, reconList);
- }
-
- // Add the cluster to the list.
- reconList.add(reconCluster);
- }
-
- // Populate the SSP cluster map.
- for(SSPCluster sspCluster : sspClusters) {
- // Get the cluster position.
- Point position = new Point(sspCluster.getXIndex(), sspCluster.getYIndex());
-
- // Get the list for this cluster position.
- List<SSPCluster> sspList = sspClusterMap.get(position);
- if(sspList == null) {
- sspList = new ArrayList<SSPCluster>();
- sspClusterMap.put(position, sspList);
- }
-
- // Add the cluster to the list.
- sspList.add(sspCluster);
- }
-
- // For each reconstructed cluster, attempt to match the clusters
- // with SSP clusters at the same position.
- positionLoop:
- for(Entry<Point, List<Cluster>> clusterSet : reconClusterMap.entrySet()) {
- // Get the reconstructed and SSP clusters at this position.
- List<Cluster> reconList = clusterSet.getValue();
- List<SSPCluster> sspList = sspClusterMap.get(clusterSet.getKey());
-
- // Print the crystal position header.
- OutputLogger.println();
- OutputLogger.printf("Considering clusters at (%3d, %3d)%n", clusterSet.getKey().x, clusterSet.getKey().y);
-
- // If there are no SSP clusters, then matching fails by
- // reason of position. The remainder of the loop may be
- // skipped, since there is nothing to check.
- if(sspList == null || sspList.isEmpty()) {
- event.pairFailPosition(reconList.size());
- continue positionLoop;
- }
-
- // Get all possible permutations of SSP clusters.
- List<List<Pair<Cluster, SSPCluster>>> permutations = getPermutations(reconList, sspList);
-
- // Print the information for this crystal position.
- OutputLogger.printf("\tRecon Clusters :: %d%n", reconList.size());
- OutputLogger.printf("\tSSP Clusters :: %d%n", sspList.size());
- OutputLogger.printf("\tPermutations :: %d%n", permutations.size());
-
- // Track the plotted values for the current best permutation.
- DetailedClusterEvent bestPerm = null;
-
- // Iterate over the permutations and find the permutation
- // that produces the best possible result when compared to
- // the reconstructed clusters.
- int permIndex = 0;
- for(List<Pair<Cluster, SSPCluster>> pairs : permutations) {
- // Update the current permutation number.
- permIndex++;
-
- // Track the plot values for this permutation.
- DetailedClusterEvent perm = new DetailedClusterEvent();
-
- // Try to match each pair.
- pairLoop:
- for(Pair<Cluster, SSPCluster> pair : pairs) {
- // Print the current reconstructed/SSP cluster pair.
- OutputLogger.printf("\tP%d :: %s --> %s", permIndex,
- pair.getFirstElement() == null ? "None" : TriggerDiagnosticUtil.clusterToString(pair.getFirstElement()),
- pair.getSecondElement() == null ? "None" : TriggerDiagnosticUtil.clusterToString(pair.getSecondElement()));
-
- // If either cluster in the pair is null, there
- // are not enough clusters to perform this match.
- if(pair.getFirstElement() == null || pair.getSecondElement() == null) {
- // Log the result.
- OutputLogger.printf(" [ %18s ]%n", "failure: unpaired");
-
- // An unpaired SSP cluster does not necessarily
- // represent a problem. Often, this just means
- // that the SSP cluster's matching reconstructed
- // cluster is outside the verification window.
- if(pair.getSecondElement() == null) {
- perm.pairFailPosition(pair.getFirstElement(), pair.getSecondElement());
- }
-
- // Skip the rest of the checks.
- continue pairLoop;
- }
-
- // Check if the reconstructed cluster has an energy
- // within the allotted threshold of the SSP cluster.
- if(pair.getSecondElement().getEnergy() >= pair.getFirstElement().getEnergy() - energyWindow &&
- pair.getSecondElement().getEnergy() <= pair.getFirstElement().getEnergy() + energyWindow) {
-
- // Check that the hit count of the reconstructed
- // is within the allotted threshold of the SSP
- // cluster.
- if(pair.getSecondElement().getHitCount() >= pair.getFirstElement().getCalorimeterHits().size() - hitWindow &&
- pair.getSecondElement().getHitCount() <= pair.getFirstElement().getCalorimeterHits().size() + hitWindow) {
- // Designate the pair as a match.
- perm.pairMatch(pair.getFirstElement(), pair.getSecondElement());
- OutputLogger.printf(" [ %18s ]%n", "success: matched");
- } else {
- perm.pairFailHitCount(pair.getFirstElement(), pair.getSecondElement());
- OutputLogger.printf(" [ %18s ]%n", "failure: hit count");
- } // End hit count check.
- } else {
- perm.pairFailEnergy(pair.getFirstElement(), pair.getSecondElement());
- OutputLogger.printf(" [ %18s ]%n", "failure: energy");
- } // End energy check.
- } // End Pair Loop
-
- // Print the results of the permutation.
- OutputLogger.printf("\t\tPermutation Matched :: %d%n", perm.getMatches());
- OutputLogger.printf("\t\tPermutation Energy :: %d%n", perm.getEnergyFailures());
- OutputLogger.printf("\t\tPermutation Hit Count :: %d%n", perm.getHitCountFailures());
-
- // Check whether the results from this permutation
- // exceed the quality of the last best results. A
- // greater number of matches is always better. If the
- // matches are the same, select the one with fewer
- // failures due to energy.
- bestPerm = getBestPermutation(bestPerm, perm);
- } // End Permutation Loop
-
- // Print the final results for the position.
- OutputLogger.printf("\tPosition Matched :: %d%n", bestPerm.getMatches());
- OutputLogger.printf("\tPosition Energy :: %d%n", bestPerm.getEnergyFailures());
- OutputLogger.printf("\tPosition Hit Count :: %d%n", bestPerm.getHitCountFailures());
-
- // Add the results from the best-matched permutation
- // to the event efficiency results.
- event.addEvent(bestPerm);
- } // End Crystal Position Loop
-
- // Return the cluster match summary.
- return event;
- }
-
- /**
- * Performs cluster matching between a collection of reconstructed
- * clusters and a collection of SSP clusters using the strictly
- * time-compliant algorithm.
- * @param reconClusters - A collection of reconstructed clusters.
- * @param sspClusters - A collection of SSP clusters.
- * @param energyWindow - The window of allowed deviation between
- * the reconstructed cluster and SSP cluster energies.
- * @param hitWindow - The window of allowed deviation between
- * the reconstructed cluster and SSP cluster hit counts.
- * @return Returns the cluster matching results stored inside a
- * <code>clusterMatchEvent</code> object.
- */
- private static final DetailedClusterEvent matchClustersTimeCompliant(Collection<Cluster> reconClusters,
- Collection<SSPCluster> sspClusters, double energyWindow, int hitWindow) {
- // Track the number of cluster pairs that were matched and that
- // failed by failure type.
- DetailedClusterEvent event = new DetailedClusterEvent();
-
- // Store the clusters which have been successfully paired.
- Set<SSPCluster> sspMatched = new HashSet<SSPCluster>(sspClusters.size());
-
- // Find reconstructed/SSP cluster matched pairs.
- reconLoop:
- for(Cluster reconCluster : reconClusters) {
- // Track whether a position-matched cluster was found.
- boolean matchedPosition = false;
-
- // VERBOSE :: Output the cluster being matched.
- OutputLogger.printf("Considering %s%n", TriggerDiagnosticUtil.clusterToString(reconCluster));
-
- // Search through the SSP clusters for a matching cluster.
- sspLoop:
- for(SSPCluster sspCluster : sspClusters) {
- // VERBOSE :: Output the SSP cluster being considered.
- OutputLogger.printf("\t%s ", TriggerDiagnosticUtil.clusterToString(sspCluster));
-
- // If this cluster has been paired, skip it.
- if(sspMatched.contains(sspCluster)) {
- OutputLogger.printf("[ %7s; %9s ]%n", "fail", "matched");
- continue sspLoop;
- }
-
- // Matched clusters must have the same position.
- if(TriggerDiagnosticUtil.getXIndex(reconCluster) != sspCluster.getXIndex()
- || TriggerDiagnosticUtil.getYIndex(reconCluster) != sspCluster.getYIndex()) {
- OutputLogger.printf("[ %7s; %9s ]%n", "fail", "position");
- continue sspLoop;
- }
-
- // Note that a cluster was found at this position.
- matchedPosition = true;
-
- // Matched clusters must have the same time-stamp.
- if(reconCluster.getCalorimeterHits().get(0).getTime() != sspCluster.getTime()) {
- OutputLogger.printf("[ %7s; %9s ]%n", "fail", "time");
- continue sspLoop;
- }
-
- // Clusters that pass all of the above checks are the
- // same cluster.
- sspMatched.add(sspCluster);
-
- // Check that the clusters are sufficiently close in
- // energy to one another.
- if(sspCluster.getEnergy() >= reconCluster.getEnergy() - energyWindow
- && sspCluster.getEnergy() <= reconCluster.getEnergy() + energyWindow) {
- // If a cluster matches in energy, check that it
- // is also sufficiently close in hit count.
- if(sspCluster.getHitCount() >= reconCluster.getCalorimeterHits().size() - hitWindow &&
- sspCluster.getHitCount() <= reconCluster.getCalorimeterHits().size() + hitWindow) {
- // The cluster is a match.
- event.pairMatch(reconCluster, sspCluster);
- OutputLogger.printf("[ %7s; %9s ]%n", "success", "matched");
- continue reconLoop;
- } else {
- event.pairFailHitCount(reconCluster, sspCluster);
- OutputLogger.printf("[ %7s; %9s ]%n", "fail", "hit count");
- continue reconLoop;
- } // End hit count check.
- } else {
- event.pairFailEnergy(reconCluster, sspCluster);
- OutputLogger.printf("[ %7s; %9s ]%n", "fail", "energy");
- continue reconLoop;
- } // End energy check.
- }// End SSP loop.
-
- // If the reconstructed cluster has not been matched, check
- // if a cluster was found at the same position. If not, then
- // the cluster fails by reason of position.
- if(!matchedPosition) {
- event.pairFailPosition(reconCluster, null);
- }
-
- // Otherwise, the cluster had a potential matched, but the
- // time-stamps were off. The cluster fails by reason of time.
- else {
- event.pairFailTime(reconCluster, null);
- }
- } // End recon loop.
-
- // Return the populated match event.
- return event;
- }
-
- /**
- * Checks triggers simulated on SSP clusters against the SSP bank's
- * reported triggers to verify that the trigger is correctly applying
- * cuts to the clusters it sees. Additionally compares triggers
- * simulated on reconstructed clusters to measure trigger efficiency.
- */
- private void singlesTriggerVerification() {
- // Create lists of generic triggers.
- List<List<? extends Trigger<?>>> sspTriggerList = new ArrayList<List<? extends Trigger<?>>>(2);
- List<List<? extends Trigger<?>>> reconTriggerList = new ArrayList<List<? extends Trigger<?>>>(2);
-
- // Convert the simulated triggers to generic versions and add
- // them to the generic list.
- sspTriggerList.add(triggerData.getSimSSPTriggers().getSingles0Triggers());
- sspTriggerList.add(triggerData.getSimSSPTriggers().getSingles1Triggers());
- reconTriggerList.add(triggerData.getSimReconTriggers().getSingles0Triggers());
- reconTriggerList.add(triggerData.getSimReconTriggers().getSingles1Triggers());
-
- // Run generic trigger verification.
- triggerVerification(sspTriggerList, reconTriggerList, true);
- }
-
- /**
- * Checks triggers simulated on SSP clusters against the SSP bank's
- * reported triggers to verify that the trigger is correctly applying
- * cuts to the clusters it sees. Additionally compares triggers
- * simulated on reconstructed clusters to measure trigger efficiency.
- */
- private void pairTriggerVerification() {
- // Create lists of generic triggers.
- List<List<? extends Trigger<?>>> sspTriggerList = new ArrayList<List<? extends Trigger<?>>>(2);
- List<List<? extends Trigger<?>>> reconTriggerList = new ArrayList<List<? extends Trigger<?>>>(2);
-
- // Convert the simulated triggers to generic versions and add
- // them to the generic list.
- sspTriggerList.add(triggerData.getSimSSPTriggers().getPair0Triggers());
- sspTriggerList.add(triggerData.getSimSSPTriggers().getPair1Triggers());
- reconTriggerList.add(triggerData.getSimReconTriggers().getPair0Triggers());
- reconTriggerList.add(triggerData.getSimReconTriggers().getPair1Triggers());
-
- // Run generic trigger verification.
- triggerVerification(sspTriggerList, reconTriggerList, false);
- }
-
- /**
- * Performs trigger verification for both trigger types.
- * @param sspTriggerList - The list of SSP triggers.
- * @param reconTriggerList - The list of reconstructed triggers.
- * @param isSingles - Whether or not this is a singles trigger
- * verification.
- */
- private void triggerVerification(List<List<? extends Trigger<?>>> sspTriggerList,
- List<List<? extends Trigger<?>>> reconTriggerList, boolean isSingles) {
-
- // ==========================================================
- // ==== Initialize Trigger Verification =====================
- // ==========================================================
-
- // Print the cluster verification header.
- OutputLogger.println();
- OutputLogger.println();
- OutputLogger.println("======================================================================");
- if(isSingles) { OutputLogger.println("=== Singles Trigger Verification ====================================="); }
- else { OutputLogger.println("=== Pair Trigger Verification ========================================"); }
- OutputLogger.println("======================================================================");
-
- // Track the number of triggers seen and the number found.
- TriggerEvent[] triggerEvent = { new TriggerEvent(), new TriggerEvent() };
-
- // ==========================================================
- // ==== Output Event Summary ================================
- // ==========================================================
-
- // Get the list of triggers reported by the SSP.
- List<? extends SSPNumberedTrigger> sspTriggers;
- if(isSingles) { sspTriggers = sspBank.getSinglesTriggers(); }
- else { sspTriggers = sspBank.getPairTriggers(); }
-
- // Output the SSP cluster triggers.
- OutputLogger.println();
- OutputLogger.println("SSP Cluster " + (isSingles ? "Singles" : "Pair") + " Triggers");
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- for(Trigger<?> simTrigger : sspTriggerList.get(triggerNum)) {
- OutputLogger.printf("\tTrigger %d :: %s :: %3.0f :: %s%n",
- (triggerNum + 1), triggerPositionString(simTrigger),
- getTriggerTime(simTrigger), simTrigger.toString());
- }
- }
- if(sspTriggerList.get(0).size() + sspTriggerList.get(1).size() == 0) {
- OutputLogger.println("\tNone");
- }
-
- // Output the reconstructed cluster singles triggers.
- OutputLogger.println("Reconstructed Cluster " + (isSingles ? "Singles" : "Pair") + " Triggers");
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- for(Trigger<?> simTrigger : reconTriggerList.get(triggerNum)) {
- OutputLogger.printf("\tTrigger %d :: %s :: %3.0f :: %s%n",
- (triggerNum + 1), triggerPositionString(simTrigger),
- getTriggerTime(simTrigger), simTrigger.toString());
- }
- }
- if(reconTriggerList.get(0).size() + reconTriggerList.get(1).size() == 0) {
- OutputLogger.println("\tNone");
- }
-
- // Output the SSP reported triggers.
- OutputLogger.println("SSP Reported " + (isSingles ? "Singles" : "Pair") + " Triggers");
- for(SSPTrigger sspTrigger : sspTriggers) {
- OutputLogger.printf("\t%s%n", sspTrigger.toString());
- }
- if(sspTriggers.size() == 0) { OutputLogger.println("\tNone"); }
-
- // Update the trigger event with the counts for each type of
- // simulated trigger. Reported triggers are counted later when
- // already iterating over them.
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- triggerEvent[triggerNum].sawSSPSimulatedTriggers(tiFlags, sspTriggerList.get(triggerNum).size());
- triggerEvent[triggerNum].sawReconSimulatedTriggers(tiFlags, reconTriggerList.get(triggerNum).size());
- }
-
-
-
- // ==========================================================
- // ==== SSP Internal Logic Verification =====================
- // ==========================================================
-
- // Track which SSP triggers have been matched to avoid matching
- // multiple reconstructed SSP cluster triggers to the same SSP
- // trigger.
- Set<SSPNumberedTrigger> sspTriggerSet = new HashSet<SSPNumberedTrigger>();
- Set<Trigger<?>> simTriggerSet = new HashSet<Trigger<?>>();
-
- // Track the number of SSP reported triggers that are found in
- // excess of the SSP simulated triggers.
- int sspReportedExtras = sspTriggers.size() - (sspTriggerList.get(0).size() + sspTriggerList.get(1).size());
- if(sspReportedExtras > 0) {
- if(isSingles) { singlesInternalFail = true; }
- else { pairInternalFail = true; }
- } else { sspReportedExtras = 0; }
-
- // Iterate over the triggers.
- OutputLogger.println();
- OutputLogger.println("Matching SSP Reported Triggers to SSP Simulated Triggers:");
- for(SSPNumberedTrigger sspTrigger : sspTriggers) {
- // Get the trigger information.
- int triggerNum = sspTrigger.isFirstTrigger() ? 0 : 1;
- OutputLogger.printf("\t%s%n", sspTrigger.toString());
-
- // Note that a bank trigger was seen.
- triggerEvent[triggerNum].sawReportedTrigger();
-
- // Iterate over the SSP cluster simulated triggers and
- // look for a trigger that matches.
- matchLoop:
- for(Trigger<?> simTrigger : sspTriggerList.get(triggerNum)) {
- // VERBOSE :: Output the trigger being considered for
- // matching.
- OutputLogger.printf("\t\tTrigger %d :: %s :: %3.0f :: %s ",
- (triggerNum + 1), triggerPositionString(simTrigger),
- getTriggerTime(simTrigger), simTrigger.toString());
-
- // If the current SSP trigger has already been matched,
- // skip it.
- if(simTriggerSet.contains(simTrigger)) {
- OutputLogger.printf("[ %-15s ]%n", "failed; matched");
- continue matchLoop;
- }
-
- // Check that the triggers have the same time. Triggers
- // generated from SSP bank clusters should always align
- // in time.
- if(sspTrigger.getTime() != getTriggerTime(simTrigger)) {
- OutputLogger.printf("[ %-15s ]%n", "failed; time");
- continue matchLoop;
- }
-
- // Check whether the trigger cuts match.
- boolean[] matchedCuts = triggerCutMatch(simTrigger, sspTrigger);
- for(int i = 0; i < matchedCuts.length; i++) {
- if(!matchedCuts[i]) {
- int typeIndex = isSingles ? 0 : 1;
- OutputLogger.printf("[ %-15s ]%n", String.format("failed; %s", cutNames[typeIndex][i]));
- continue matchLoop;
- }
- }
-
- // If all the cuts match, along with the time and the
- // trigger number, than these triggers are a match.
- sspTriggerSet.add(sspTrigger);
- simTriggerSet.add(simTrigger);
- triggerEvent[triggerNum].matchedSSPTrigger(tiFlags);
- OutputLogger.printf("[ %-15s ]%n", "success");
- break matchLoop;
- }
- }
-
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- for(Trigger<?> simTrigger : sspTriggerList.get(triggerNum)) {
- globalTriggerPlots.sawTrigger(simTrigger);
- if(simTriggerSet.contains(simTrigger)) {
- globalTriggerPlots.matchedTrigger(simTrigger);
- } else {
- globalTriggerPlots.failedTrigger(simTrigger);
- }
- }
- }
-
- // Iterate over the unmatched simulated triggers again and the
- // unmatched SSP reported trigger that most closely matches it.
- OutputLogger.println();
- OutputLogger.println("Matching Failed SSP Reported Triggers to Remaining SSP Simulated Triggers:");
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- simLoop:
- for(Trigger<?> simTrigger : sspTriggerList.get(triggerNum)) {
- OutputLogger.printf("\tTrigger %d :: %s :: %3.0f :: %s%n",
- (triggerNum + 1), triggerPositionString(simTrigger),
- getTriggerTime(simTrigger), simTrigger.toString());
-
- // Check whether this trigger has already been matched
- // or not. If it has been matched, skip it.
- if(simTriggerSet.contains(simTrigger)) {
- OutputLogger.println("\t\tSkipping; already matched successfully");
- continue simLoop;
- }
-
- // Get the trigger time for the simulated trigger.
- double simTime = getTriggerTime(simTrigger);
-
- // Track the match statistics for each reported trigger
- // so that the closest match may be found.
- int numMatched = -1;
- boolean[] matchedCut = null;
- SSPNumberedTrigger bestMatch = null;
-
- // Store the readout for the best match.
- String bestMatchText = null;
-
- // Iterate over the reported triggers to find a match.
- reportedLoop:
- for(SSPNumberedTrigger sspTrigger : sspTriggers) {
- OutputLogger.printf("\t\t%s ", sspTrigger.toString());
-
- // If the two triggers have different times, this
- // trigger should be skipped.
- if(sspTrigger.getTime() != simTime) {
- OutputLogger.printf("[ %-15s ]%n", "failed; time");
- continue reportedLoop;
- }
-
- // If this reported trigger has been matched then
- // it should be skipped.
- if(sspTriggerSet.contains(sspTrigger)) {
- OutputLogger.printf("[ %-15s ]%n", "failed; matched");
- continue reportedLoop;
- }
-
- // Check each of the cuts.
- boolean[] tempMatchedCut = triggerCutMatch(simTrigger, sspTrigger);
-
- // Check each cut and see if this is a closer match
- // than the previous best match.
- int tempNumMatched = 0;
- for(boolean passed : tempMatchedCut) { if(passed) { tempNumMatched++; } }
- OutputLogger.printf("[ %-15s ]%n", String.format("maybe; %d failed", tempNumMatched));
-
- // If the number of matched cuts exceeds the old
- // best result, this becomes the new best result.
- if(tempNumMatched > numMatched) {
- numMatched = tempNumMatched;
- matchedCut = tempMatchedCut;
- bestMatch = sspTrigger;
- bestMatchText = String.format("%s%n", sspTrigger.toString());
- }
- }
-
- // If there was no match found, it means that there were
- // no triggers that were both unmatched and at the same
- // time as this simulated trigger.
- if(bestMatch == null) {
- if(isSingles) { singlesInternalFail = true; }
- else { pairInternalFail = true; }
- triggerEvent[triggerNum].failedSSPTrigger();
- OutputLogger.printf("\t\tTrigger %d :: %s :: %3.0f :: %s",
- (triggerNum + 1), triggerPositionString(simTrigger),
- getTriggerTime(simTrigger), simTrigger.toString());
- OutputLogger.println(" --> No Valid Match Found");
- } else {
- triggerEvent[triggerNum].matchedSSPTrigger(tiFlags, matchedCut);
- OutputLogger.printf("\t\tTrigger %d :: %s :: %3.0f :: %s",
- (triggerNum + 1), triggerPositionString(simTrigger),
- getTriggerTime(simTrigger), simTrigger.toString());
- OutputLogger.println(" --> " + bestMatchText);
- }
- }
- }
-
-
-
- // ==========================================================
- // ==== Trigger Efficiency ==================================
- // ==========================================================
-
- // Reset the SSP matched trigger set.
- sspTriggerSet.clear();
-
- // Iterate over the reconstructed cluster singles triggers.
- OutputLogger.println();
- OutputLogger.println("Recon Cluster Trigger --> SSP Reported Trigger Match Status");
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- for(Trigger<?> simTrigger : reconTriggerList.get(triggerNum)) {
- OutputLogger.printf("\tTrigger %d :: %s :: %s%n", (triggerNum + 1),
- triggerPositionString(simTrigger), simTrigger.toString());
-
- // TEMP :: Populate the recon ALL pairs plots.
- globalTriggerPlots.sawTrigger(simTrigger);
-
- // Iterate over the SSP reported triggers and compare
- // them to the reconstructed cluster simulated trigger.
- boolean matched = false;
- matchLoop:
- for(SSPNumberedTrigger sspTrigger : sspTriggers) {
- OutputLogger.printf("\t\t\t%s", sspTrigger.toString());
-
- // Only compare triggers if they are from the
- // same trigger source.
- if((triggerNum == 0 && sspTrigger.isSecondTrigger())
- || (triggerNum == 1 && sspTrigger.isFirstTrigger())) {
- OutputLogger.print(" [ fail; source ]%n");
- continue matchLoop;
- }
-
- // Only compare the singles trigger if it was
- // not already matched to another trigger.
- if(sspTriggerSet.contains(sspTrigger)) {
- OutputLogger.print(" [ fail; matched ]%n");
- continue matchLoop;
- }
-
- // Test each cut.
- int typeIndex = isSingles ? 0 : 1;
- boolean[] matchedCuts = triggerCutMatch(simTrigger, sspTrigger);
- for(int cutIndex = 0; cutIndex < matchedCuts.length; cutIndex++) {
- if(!matchedCuts[cutIndex]) {
- OutputLogger.printf(" [ fail; %-9s ]%n", cutNames[typeIndex][cutIndex]);
- continue matchLoop;
- }
- }
-
- // If all the trigger flags match, then the
- // triggers are a match.
- sspTriggerSet.add(sspTrigger);
- triggerEvent[triggerNum].matchedReconTrigger(tiFlags);
- OutputLogger.print(" [ success ]%n");
- globalTriggerPlots.matchedTrigger(simTrigger);
- matched = true;
- break matchLoop;
- }
-
- if(!matched) { globalTriggerPlots.failedTrigger(simTrigger); }
- }
- }
-
-
-
- // ==========================================================
- // ==== Output Event Results ================================
- // ==========================================================
-
- // Get the number of SSP and reconstructed cluster simulated
- // triggers.
- int sspSimTriggers = sspTriggerList.get(0).size() + sspTriggerList.get(1).size();
- int reconSimTriggers = reconTriggerList.get(0).size() + reconTriggerList.get(1).size();
- int[] sspTriggerCount = { sspTriggerList.get(0).size(), sspTriggerList.get(1).size() };
-
- // Print event statistics.
- OutputLogger.println();
- OutputLogger.println("Event Statistics:");
- OutputLogger.printf("\tSSP Cluster Sim Triggers :: %d%n", sspSimTriggers);
- OutputLogger.printf("\tRecon Cluster Sim Triggers :: %d%n", reconSimTriggers);
- OutputLogger.printf("\tSSP Reported Triggers :: %d%n", sspTriggers.size());
-
- int matchedSSPTriggers = triggerEvent[0].getMatchedSSPSimulatedTriggers() + triggerEvent[1].getMatchedSSPSimulatedTriggers();
- OutputLogger.printf("\tInternal Efficiency :: %d / %d ", matchedSSPTriggers, sspSimTriggers);
- if(sspSimTriggers == 0) { OutputLogger.printf("(N/A)%n"); }
- else { OutputLogger.printf("(%3.0f%%)%n", (100.0 * matchedSSPTriggers / sspSimTriggers)); }
-
- int matchedReconTriggers = triggerEvent[0].getMatchedReconSimulatedTriggers() + triggerEvent[1].getMatchedReconSimulatedTriggers();
- OutputLogger.printf("\tTrigger Efficiency :: %d / %d", matchedReconTriggers, reconSimTriggers);
- if(reconSimTriggers == 0) { OutputLogger.printf("(N/A)%n"); }
- else { OutputLogger.printf("(%3.0f%%)%n", (100.0 * matchedReconTriggers / reconSimTriggers)); }
-
- // Print the individual cut performances.
- if(isSingles) {
- OutputLogger.println();
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- OutputLogger.printf("Trigger %d Individual Cut Failure Rate:%n", (triggerNum + 1));
- if(sspSimTriggers == 0) {
- OutputLogger.printf("\tCluster Energy Lower Bound :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MIN), sspTriggerCount[triggerNum]);
- OutputLogger.printf("\tCluster Energy Upper Bound :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MAX), sspTriggerCount[triggerNum]);
- OutputLogger.printf("\tCluster Hit Count :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(HIT_COUNT), sspTriggerCount[triggerNum]);
- } else {
- OutputLogger.printf("\tCluster Energy Lower Bound :: %d / %d (%3.0f%%)%n",
- triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MIN), sspTriggerCount[triggerNum],
- (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MIN) / sspTriggerCount[triggerNum]));
- OutputLogger.printf("\tCluster Energy Upper Bound :: %d / %d (%3.0f%%)%n",
- triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MAX), sspTriggerCount[triggerNum],
- (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MAX) / sspTriggerCount[triggerNum]));
- OutputLogger.printf("\tCluster Hit Count :: %d / %d (%3.0f%%)%n",
- triggerEvent[triggerNum].getSSPCutFailures(HIT_COUNT), sspTriggerCount[triggerNum],
- (100.0 * triggerEvent[triggerNum].getSSPCutFailures(HIT_COUNT) / sspTriggerCount[triggerNum]));
- }
- }
-
- // Update the global trigger tracking variables.
- localStats.getTriggerStats().getSingles0Stats().addEvent(triggerEvent[0]);
- localStats.getTriggerStats().getSingles1Stats().addEvent(triggerEvent[1]);
- globalStats.getTriggerStats().getSingles0Stats().addEvent(triggerEvent[0]);
- globalStats.getTriggerStats().getSingles1Stats().addEvent(triggerEvent[1]);
- } else {
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- OutputLogger.println();
- OutputLogger.printf("Trigger %d Individual Cut Failure Rate:%n", (triggerNum + 1));
- if(sspTriggerCount[triggerNum] == 0) {
- OutputLogger.printf("\tPair Energy Sum :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SUM), sspTriggerCount[triggerNum]);
- OutputLogger.printf("\tPair Energy Difference :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_DIFF), sspTriggerCount[triggerNum]);
- OutputLogger.printf("\tPair Energy Slope :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SLOPE), sspTriggerCount[triggerNum]);
- OutputLogger.printf("\tPair Coplanarity :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(COPLANARITY), sspTriggerCount[triggerNum]);
- } else {
- OutputLogger.printf("\tPair Energy Sum :: %d / %d (%3.0f%%)%n",
- triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SUM), sspTriggerCount[triggerNum],
- (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SUM) / sspTriggerCount[triggerNum]));
- OutputLogger.printf("\tPair Energy Difference :: %d / %d (%3.0f%%)%n",
- triggerEvent[triggerNum].getSSPCutFailures(ENERGY_DIFF), sspTriggerCount[triggerNum],
- (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_DIFF) / sspTriggerCount[triggerNum]));
- OutputLogger.printf("\tPair Energy Slope :: %d / %d (%3.0f%%)%n",
- triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SLOPE), sspTriggerCount[triggerNum],
- (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SLOPE) / sspTriggerCount[triggerNum]));
- OutputLogger.printf("\tPair Coplanarity :: %d / %d (%3.0f%%)%n",
- triggerEvent[triggerNum].getSSPCutFailures(COPLANARITY), sspTriggerCount[triggerNum],
- (100.0 * triggerEvent[triggerNum].getSSPCutFailures(COPLANARITY) / sspTriggerCount[triggerNum]));
- }
- }
-
- // Update the global trigger tracking variables.
- localStats.getTriggerStats().getPair0Stats().addEvent(triggerEvent[0]);
- localStats.getTriggerStats().getPair1Stats().addEvent(triggerEvent[1]);
- globalStats.getTriggerStats().getPair0Stats().addEvent(triggerEvent[0]);
- globalStats.getTriggerStats().getPair1Stats().addEvent(triggerEvent[1]);
- }
-
- // Note whether the was a trigger match failure.
- if(triggerEvent[0].getFailedReconSimulatedTriggers() != 0 && triggerEvent[1].getFailedReconSimulatedTriggers() != 0) {
- if(isSingles) { singlesEfficiencyFail = true; }
- else { pairEfficiencyFail = true; }
- } if(triggerEvent[0].getFailedSSPSimulatedTriggers() != 0 && triggerEvent[1].getFailedSSPSimulatedTriggers() != 0) {
- if(isSingles) { singlesInternalFail = true; }
- else { pairInternalFail = true; }
- }
- }
-
- /**
- * Outputs all of the verification parameters currently in use by
- * the software. A warning will be issued if the values for NSA and
- * NSB, along with the FADC window, preclude clusters from being
- * verified.
- */
- private void logSettings() {
- // Output general settings.
- System.out.println("Cluster Verification Settings");
- System.out.printf("\tHit Threshold :: %1d hit(s)%n", hitAcceptance);
- System.out.printf("\tEnergy Threshold :: %5.3f GeV%n", energyAcceptance);
- System.out.println();
-
- // Output window settings.
- System.out.println("FADC Timing Window Settings");
- System.out.printf("\tNSB :: %3d ns%n", nsb);
- System.out.printf("\tNSA :: %3d ns%n", nsa);
- System.out.printf("\tFADC Window :: %3d ns%n", windowWidth);
-
- // Calculate the valid clustering window.
- int start = nsb;
- int end = windowWidth - nsa;
- if(start < end) {
- System.out.printf("\tValid Cluster Window :: [ %3d ns, %3d ns ]%n", start, end);
- performClusterVerification = true;
- } else {
- System.out.println("\tNSB, NSA, and FADC window preclude a valid cluster verification window.");
- System.out.println("\tCluster verification will not be performed!");
- performClusterVerification = false;
- }
- System.out.println();
-
- // Output the singles trigger settings.
- for(int i = 0; i < 2; i++) {
- // Print the settings.
- System.out.printf("Singles Trigger %d Settings%23s[%5b]%n", (i + 1), "", singlesTriggerEnabled[i]);
- System.out.printf("\tCluster Energy Low :: %.3f GeV [%5b]%n",
- singlesTrigger[i].getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW), singlesCutsEnabled[i][0]);
- System.out.printf("\tCluster Energy High :: %.3f GeV [%5b]%n",
- singlesTrigger[i].getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH), singlesCutsEnabled[i][1]);
- System.out.printf("\tCluster Hit Count :: %.0f hit(s) [%5b]%n",
- singlesTrigger[i].getCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW), singlesCutsEnabled[i][2]);
- System.out.println();
- }
-
- // Output the pair trigger settings.
- for(int i = 0; i < 2; i++) {
- System.out.printf("Pairs Trigger %d Settings%25s[%5b]%n", (i + 1), "", pairTriggerEnabled[i]);
- System.out.printf("\tCluster Energy Low :: %.3f GeV [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW), pairCutsEnabled[i][0]);
- System.out.printf("\tCluster Energy High :: %.3f GeV [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH), pairCutsEnabled[i][1]);
- System.out.printf("\tCluster Hit Count :: %.0f hit(s) [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW), pairCutsEnabled[i][2]);
- System.out.printf("\tPair Energy Sum Low :: %.3f GeV [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW), pairCutsEnabled[i][3]);
- System.out.printf("\tPair Energy Sum High :: %.3f GeV [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH), pairCutsEnabled[i][3]);
- System.out.printf("\tPair Energy Difference :: %.3f GeV [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH), pairCutsEnabled[i][4]);
- System.out.printf("\tPair Energy Slope :: %.3f GeV [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW), pairCutsEnabled[i][5]);
- System.out.printf("\tPair Energy Slope F :: %.4f GeV / mm%n",
- pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F));
- System.out.printf("\tPair Coplanarity :: %3.0f Degrees [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.PAIR_COPLANARITY_HIGH), pairCutsEnabled[i][6]);
- System.out.printf("\tPair Time Coincidence :: %2.0f ns [%5b]%n",
- pairsTrigger[i].getCutValue(TriggerModule.PAIR_TIME_COINCIDENCE), true);
- System.out.println();
- }
- }
-
- /**
- * Summarizes the global run statistics in a log to the terminal.
- */
- private void logStatistics() {
- // Print the cluster/trigger verification header.
- System.out.println();
- System.out.println();
- System.out.println("======================================================================");
- System.out.println("=== Cluster/Trigger Verification Results =============================");
- System.out.println("======================================================================");
-
- // Print the general event failure rate.
- int headSpaces = getPrintSpaces(globalStats.getEventCount());
- System.out.println("General Event Statistics:");
- System.out.printf("\tEvent Start Time :: %.3f s%n", (startTime / Math.pow(10, 9)));
- System.out.printf("\tEvent End Time :: %.3f%n", (endTime / Math.pow(10, 9)));
- System.out.printf("\tEvent Run Time :: %.3f%n", ((endTime - startTime) / Math.pow(10, 9)));
- System.out.printf("\tNoise Events :: %" + headSpaces + "d / %" + headSpaces + "d (%7.3f%%)%n",
- globalStats.getNoiseEvents(), globalStats.getEventCount(), (100.0 * globalStats.getNoiseEvents() / globalStats.getEventCount()));
- System.out.printf("\tCluster Events Failed :: %" + headSpaces + "d / %" + headSpaces + "d (%7.3f%%)%n",
- globalStats.getFailedClusterEventCount(), globalStats.getEventCount(), (100.0 * globalStats.getFailedClusterEventCount() / globalStats.getEventCount()));
- System.out.printf("\tSingles Events Failed :: %" + headSpaces + "d / %" + headSpaces + "d (%7.3f%%)%n",
- globalStats.getFailedSinglesEventCount(), globalStats.getEventCount(), (100.0 * globalStats.getFailedSinglesEventCount() / globalStats.getEventCount()));
- System.out.printf("\tPair Events Failed :: %" + headSpaces + "d / %" + headSpaces + "d (%7.3f%%)%n",
- globalStats.getFailedPairEventCount(), globalStats.getEventCount(), (100.0 * globalStats.getFailedPairEventCount() / globalStats.getEventCount()));
-
- // Print out how many events reported a given TI type, both in
- // total and hierarchically.
- System.out.println();
- System.out.println("Event Triggering Type Verification:");
- System.out.printf("\t%15s\t%15s\t%15s%n", "Trigger", "Total", "Hierarchical");
- System.out.printf("\t%15s\t%15s\t%15s%n", "Pulser", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PULSER, false),
- globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PULSER, true));
- System.out.printf("\t%15s\t%15s\t%15s%n", "Cosmic", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.COSMIC, false),
- globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.COSMIC, true));
- System.out.printf("\t%15s\t%15s\t%15s%n", "Singles 1", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.SINGLES0, false),
- globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.SINGLES0, true));
- System.out.printf("\t%15s\t%15s\t%15s%n", "Singles 2", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.SINGLES1, false),
- globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.SINGLES1, true));
- System.out.printf("\t%15s\t%15s\t%15s%n", "Pair 1", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PAIR0, false),
- globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PAIR0, true));
- System.out.printf("\t%15s\t%15s\t%15s%n", "Pair 2", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PAIR1, false),
- globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PAIR1, true));
-
- // Print the cluster verification data.
- System.out.println();
- System.out.println("Cluster Verification:");
- System.out.printf("\tRecon Clusters :: %d%n", globalStats.getClusterStats().getReconClusterCount());
- System.out.printf("\tSSP Clusters :: %d%n", globalStats.getClusterStats().getSSPClusterCount());
- System.out.printf("\tClusters Matched :: %d%n", globalStats.getClusterStats().getMatches());
- System.out.printf("\tFailed (Position) :: %d%n", globalStats.getClusterStats().getPositionFailures());
- System.out.printf("\tFailed (Energy) :: %d%n", globalStats.getClusterStats().getEnergyFailures());
- System.out.printf("\tFailed (Hit Count) :: %d%n", globalStats.getClusterStats().getHitCountFailures());
- if(globalStats.getClusterStats().getReconClusterCount() == 0) {
- System.out.printf("\tCluster Efficiency :: N/A%n");
- } else {
- System.out.printf("\tCluster Efficiency :: %7.3f%%%n",
- 100.0 * globalStats.getClusterStats().getMatches() / globalStats.getClusterStats().getReconClusterCount());
- }
-
- // Print the trigger verification data.
- for(int triggerType = 0; triggerType < 2; triggerType++) {
- // Get the trigger data. Type 0 represents singles triggers.
- TriggerEvent[] triggerData = new TriggerEvent[2];
- if(triggerType == 0) {
- triggerData[0] = globalStats.getTriggerStats().getSingles0Stats();
- triggerData[1] = globalStats.getTriggerStats().getSingles1Stats();
- } else {
- triggerData[0] = globalStats.getTriggerStats().getPair0Stats();
- triggerData[1] = globalStats.getTriggerStats().getPair1Stats();
- }
-
- // Get the basic trigger data.
- int sspSimTriggers = triggerData[0].getSSPSimulatedTriggers() + triggerData[1].getSSPSimulatedTriggers();
- int reconSimTriggers = triggerData[0].getReconSimulatedTriggers() + triggerData[1].getReconSimulatedTriggers();
- int sspReportedTriggers = triggerData[0].getReportedTriggers() + triggerData[1].getReportedTriggers();
- int sspMatchedTriggers = triggerData[0].getMatchedSSPSimulatedTriggers() + triggerData[1].getMatchedSSPSimulatedTriggers();
- int reconMatchedTriggers = triggerData[0].getMatchedReconSimulatedTriggers() + triggerData[1].getMatchedReconSimulatedTriggers();
-
- // Print the basic trigger statistics.
- int spaces = getPrintSpaces(sspSimTriggers, reconSimTriggers, sspReportedTriggers);
- System.out.println();
- if(triggerType == 0) { System.out.println("Singles Trigger Verification:"); }
- else { System.out.println("Pair Trigger Verification:"); }
- System.out.printf("\tSSP Cluster Sim Triggers :: %" + spaces + "d%n", sspSimTriggers);
- System.out.printf("\tRecon Cluster Sim Triggers :: %" + spaces + "d%n", reconSimTriggers);
- System.out.printf("\tSSP Reported Triggers :: %" + spaces + "d%n", sspReportedTriggers);
-
- System.out.printf("\tInternal Efficiency :: %" + spaces + "d / %" + spaces + "d ", sspMatchedTriggers, sspSimTriggers);
- if(sspSimTriggers == 0) { System.out.printf("(N/A)%n"); }
- else { System.out.printf("(%7.3f%%)%n", (100.0 * sspMatchedTriggers / sspSimTriggers)); }
-
- System.out.printf("\tTrigger Efficiency :: %" + spaces + "d / %" + spaces + "d ", reconMatchedTriggers, reconSimTriggers);
- if(reconSimTriggers == 0) { System.out.printf("(N/A)%n"); }
- else { System.out.printf("(%7.3f%%)%n" , (100.0 * reconMatchedTriggers / reconSimTriggers)); }
-
- // Print the individual cut performances.
- if(triggerType == 0) {
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- // Get the appropriate trigger statistics module.
- TriggerEvent triggerStats;
- if(triggerNum == 0) { triggerStats = globalStats.getTriggerStats().getSingles0Stats(); }
- else { triggerStats = globalStats.getTriggerStats().getSingles1Stats(); }
-
- // Get the number of SSP triggers for this trigger number.
- int sspTriggerCount = triggerStats.getSSPSimulatedTriggers();
- //int sspTriggerCount = triggerRunStats[0].getTotalSSPTriggers(triggerNum);
-
- System.out.println();
- System.out.printf("\tTrigger %d Individual Cut Failure Rate:%n", (triggerNum + 1));
- System.out.printf("\t\tUmatched Triggers :: %" + spaces + "d%n", triggerStats.getUnmatchedSSPSimulatedTriggers());
- //System.out.printf("\t\tUmatched Triggers :: %" + spaces + "d%n", triggerRunStats[0].getUnmatchedTriggers(triggerNum));
- if(sspTriggerCount == 0) {
- System.out.printf("\t\tCluster Energy Lower Bound :: %" + spaces + "d / %" + spaces + "d%n",
- triggerStats.getSSPCutFailures(ENERGY_MIN), sspTriggerCount);
- System.out.printf("\t\tCluster Energy Upper Bound :: %" + spaces + "d / %" + spaces + "d%n",
- triggerStats.getSSPCutFailures(ENERGY_MAX), sspTriggerCount);
- System.out.printf("\t\tCluster Hit Count :: %" + spaces + "d / %" + spaces + "d%n",
- triggerStats.getSSPCutFailures(HIT_COUNT), sspTriggerCount);
- } else {
- System.out.printf("\t\tCluster Energy Lower Bound :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
- triggerStats.getSSPCutFailures(ENERGY_MIN), sspTriggerCount,
- (100.0 * triggerStats.getSSPCutFailures(ENERGY_MIN) / sspTriggerCount));
- System.out.printf("\t\tCluster Energy Upper Bound :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
- triggerStats.getSSPCutFailures(ENERGY_MAX), sspTriggerCount,
- (100.0 * triggerStats.getSSPCutFailures(ENERGY_MAX) / sspTriggerCount));
- System.out.printf("\t\tCluster Hit Count :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
- triggerStats.getSSPCutFailures(HIT_COUNT), sspTriggerCount,
- (100.0 * triggerStats.getSSPCutFailures(HIT_COUNT) / sspTriggerCount));
- }
- }
- } else {
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- // Get the appropriate trigger statistics module.
- TriggerEvent triggerStats;
- if(triggerNum == 0) { triggerStats = globalStats.getTriggerStats().getPair0Stats(); }
- else { triggerStats = globalStats.getTriggerStats().getPair1Stats(); }
-
- // Get the number of SSP triggers for this trigger number.
- int sspTriggerCount = triggerStats.getSSPSimulatedTriggers();
-
- System.out.println();
- System.out.printf("\tTrigger %d Individual Cut Failure Rate:%n", (triggerNum + 1));
- System.out.printf("\t\tUmatched Triggers :: %" + spaces + "d%n", triggerStats.getUnmatchedSSPSimulatedTriggers());
- if(sspTriggerCount == 0) {
- System.out.printf("\t\tPair Energy Sum :: %" + spaces + "d / %" + spaces + "d%n",
- triggerStats.getSSPCutFailures(ENERGY_SUM), sspTriggerCount);
- System.out.printf("\t\tPair Energy Difference :: %" + spaces + "d / %" + spaces + "d%n",
- triggerStats.getSSPCutFailures(ENERGY_DIFF), sspTriggerCount);
- System.out.printf("\t\tPair Energy Slope :: %" + spaces + "d / %" + spaces + "d%n",
- triggerStats.getSSPCutFailures(ENERGY_SLOPE), sspTriggerCount);
- System.out.printf("\t\tPair Coplanarity :: %" + spaces + "d / %" + spaces + "d%n",
- triggerStats.getSSPCutFailures(COPLANARITY), sspTriggerCount);
- } else {
- System.out.printf("\t\tPair Energy Sum :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
- triggerStats.getSSPCutFailures(ENERGY_SUM), sspTriggerCount,
- (100.0 * triggerStats.getSSPCutFailures(ENERGY_SUM) / sspTriggerCount));
- System.out.printf("\t\tPair Energy Difference :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
- triggerStats.getSSPCutFailures(ENERGY_DIFF), sspTriggerCount,
- (100.0 * triggerStats.getSSPCutFailures(ENERGY_DIFF) / sspTriggerCount));
- System.out.printf("\t\tPair Energy Slope :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
- triggerStats.getSSPCutFailures(ENERGY_SLOPE), sspTriggerCount,
- (100.0 * triggerStats.getSSPCutFailures(ENERGY_SLOPE) / sspTriggerCount));
- System.out.printf("\t\tPair Coplanarity :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
- triggerStats.getSSPCutFailures(COPLANARITY), sspTriggerCount,
- (100.0 * triggerStats.getSSPCutFailures(COPLANARITY) / sspTriggerCount));
- }
- }
- }
- }
-
- // Print out the trigger efficiency table.
- System.out.println();
- globalStats.getTriggerStats().printEfficiencyTable();
- }
-
- /**
- * Checks whether all of the hits in a cluster are within the safe
- * region of the FADC output window.
- * @param reconCluster - The cluster to check.
- * @return Returns <code>true</code> if the cluster is safe and
- * returns <code>false</code> otherwise.
- */
- private final boolean isVerifiable(Cluster reconCluster) {
- return TriggerDiagnosticUtil.isVerifiable(reconCluster, nsa, nsb, windowWidth);
- }
-
- /**
- * Generates a <code>List</code> collection that contains a set
- * of <code>ArrayList</code> collections representing a unique
- * permutation of the entries in the argument.
- * @param values - A collection of the entries to be permuted.
- * @return Returns a list of lists representing the permutations.
- */
- private static final List<List<Pair<Cluster, SSPCluster>>> getPermutations(List<Cluster> reconClusters, List<SSPCluster> sspClusters) {
- // Store the SSP cluster permutations.
- List<List<SSPCluster>> permList = new ArrayList<List<SSPCluster>>();
-
- // Make sure that the two lists are the same size.
- int reconSize = reconClusters.size();
- int sspSize = sspClusters.size();
- while(sspClusters.size() < reconClusters.size()) {
- sspClusters.add(null);
- }
- while(reconClusters.size() < sspClusters.size()) {
- reconClusters.add(null);
- }
-
- // Get the SSP cluster permutations.
- permute(new ArrayList<SSPCluster>(0), sspClusters, permList);
-
- // Create pairs from the permutations.
- List<List<Pair<Cluster, SSPCluster>>> pairList = new ArrayList<List<Pair<Cluster, SSPCluster>>>();
- for(List<SSPCluster> permutation : permList) {
- List<Pair<Cluster, SSPCluster>> pairs = new ArrayList<Pair<Cluster, SSPCluster>>(reconClusters.size());
-
- for(int clusterIndex = 0; (clusterIndex < reconClusters.size() && clusterIndex < permutation.size()); clusterIndex++) {
- pairs.add(new Pair<Cluster, SSPCluster>(reconClusters.get(clusterIndex), permutation.get(clusterIndex)));
- }
-
- pairList.add(pairs);
- }
-
- // Remove the extra values.
- for(int i = sspClusters.size() - 1; i >= sspSize; i--) { sspClusters.remove(i); }
- for(int i = reconClusters.size() - 1; i >= reconSize; i--) { reconClusters.remove(i); }
-
- // Return the pairs.
- return pairList;
- }
-
- /**
- * Recursive method for permuting all entries in the argument
- * collection <code>remainingValues</code> into the argument
- * <code>permutedValues</code> values. Completed permutations are
- * placed in the argument <code>permList</code>.
- * @param permutedValues - List to store entries that have already
- * been permuted.
- * @param remainingValues - List to store entries that need to be
- * permuted.
- * @param permList - List to store completed permutations.
- */
- private static final void permute(List<SSPCluster> permutedValues, List<SSPCluster> remainingValues, List<List<SSPCluster>> permList) {
- // If the list of entries that still need to be sorted is empty,
- // then there is nothing to sort. Just return and empty list.
- if(remainingValues.isEmpty()) { return; }
-
- // If there is only one value left in the list of entries that
- // still need to be sorted, then just add it to the permutation
- // list and return it.
- else if(remainingValues.size() <= 1) {
- // Add the last entry.
- permutedValues.add(remainingValues.get(0));
-
- // Add the permutation to the list of completed permutations.
- permList.add(permutedValues);
- }
-
- // Otherwise, continue to get all possible permutations.
- else {
- // Iterate over the entries that have not been permuted.
- for(int i = 0; i < remainingValues.size(); i++) {
- // Make new lists to contain the permutations.
- List<SSPCluster> newPermList = new ArrayList<SSPCluster>(permutedValues.size() + 1);
- List<SSPCluster> newRemainList = new ArrayList<SSPCluster>(remainingValues.size());
-
- // Copy the current permuted entries to the new list
- // and one value from the list of entries that have
- // not been permuted yet.
- newPermList.addAll(permutedValues);
- newPermList.add(remainingValues.get(i));
-
- // The new list of entries that have not been permuted
- // should be identical, except it should now be missing
- // the entry that was moved.
- for(int index = 0; index < remainingValues.size(); index++) {
- if(index != i) { newRemainList.add(remainingValues.get(index)); }
- }
-
- // Repeat the process with the new lists.
- permute(newPermList, newRemainList, permList);
- }
- }
- }
-
- /**
- * Compares two cluster matching events and finds the one that has
- * the better results. Note that this will only return results that
- * make sense if both of the events represent different permutations
- * of the same set of clusters. Comparing events with different sets
- * of clusters will produce meaningless results.
- * @param firstEvent - The first cluster matching event,
- * @param secondEvent - The second cluster matching event.
- * @return Returns the cluster matching event that is better.
- */
- private static final DetailedClusterEvent getBestPermutation(DetailedClusterEvent firstEvent, DetailedClusterEvent secondEvent) {
- // If both permutations are null, return that.
- if(firstEvent == null && secondEvent == null) {
- return null;
- }
-
- // If one permutation is null, it is not the best.
- if(firstEvent == null) { return secondEvent; }
- else if(secondEvent == null) { return firstEvent; }
-
- // A permutation is better if it has more matches.
- if(firstEvent.getMatches() > secondEvent.getMatches()) { return firstEvent; }
- else if(secondEvent.getMatches() > firstEvent.getMatches()) { return secondEvent; }
-
- // Otherwise, the permutation with the least energy failures is
- // the better permutation.
- if(firstEvent.getEnergyFailures() < secondEvent.getEnergyFailures()) { return firstEvent; }
- else if(secondEvent.getEnergyFailures() < firstEvent.getEnergyFailures()) { return secondEvent; }
-
- // If both these values are the same, then the events are identical.
- return firstEvent;
- }
-
- /**
- * Determines the number of spaces needed to render the longest of
- * a series of integers as a string.
- * @param vals - The series of integers.
- * @return Returns the number of spaces needed to render the longest
- * integer as a base-10 string.
- */
- private static final int getPrintSpaces(int... vals) {
- // Track the largest value.
- int largest = 0;
-
- // Iterate over the arguments and find the largest.
- for(int val : vals) {
- // Get the length of the string.
- int length = TriggerDiagnosticUtil.getDigits(val);
-
- // If it is larger, track it.
- if(length > largest) { largest = length; }
- }
-
- // Return the longer one.
- return largest;
- }
-
- /**
- * Gets the position of the source of a <code>Trigger</code> object
- * as text. This method only supports trigger sources of the types
- * <code>SSPCluster</code>, <code>Cluster</code>, and arrays of size
- * two of either type.
- * @param trigger - The trigger from which to obtain the source.
- * @return Returns the source of the trigger as a <code>String</code>
- * object.
- * @throws IllegalArgumentException Occurs if the source of the
- * trigger is not any of the supported types.
- */
- private static final String triggerPositionString(Trigger<?> trigger) throws IllegalArgumentException {
- // Get the trigger source.
- Object source = trigger.getTriggerSource();
-
- // Handle valid trigger sources.
- if(source instanceof SSPCluster) {
- return TriggerDiagnosticUtil.clusterPositionString((SSPCluster) source);
- } else if(source instanceof Cluster) {
- return TriggerDiagnosticUtil.clusterPositionString((Cluster) source);
- } else if(source instanceof SSPCluster[]) {
- SSPCluster[] sourcePair = (SSPCluster[]) source;
- if(sourcePair.length == 2) {
- return String.format("%s, %s", TriggerDiagnosticUtil.clusterPositionString(sourcePair[0]),
- TriggerDiagnosticUtil.clusterPositionString(sourcePair[1]));
- }
- } else if(source instanceof Cluster[]) {
- Cluster[] sourcePair = (Cluster[]) source;
- if(sourcePair.length == 2) {
- return String.format("%s, %s", TriggerDiagnosticUtil.clusterPositionString(sourcePair[0]),
- TriggerDiagnosticUtil.clusterPositionString(sourcePair[1]));
- }
- }
-
- // Otherwise, the source type is unrecognized. Throw an error.
- throw new IllegalArgumentException(String.format("Trigger source type \"%s\" is not supported.",
- trigger.getTriggerSource().getClass().getSimpleName()));
- }
-
- /**
- * Gets the time of a simulated trigger object. Method supports
- * triggers with source objects of type <code>SSPCluster</code>,
- * <code>Cluster</code>, and arrays of size two composed of either
- * object type.
- * @param trigger - The trigger.
- * @return Returns the time at which the trigger occurred.
- * @throws IllegalArgumentException Occurs if the trigger source
- * is not a supported type.
- */
- private static final double getTriggerTime(Trigger<?> trigger) throws IllegalArgumentException {
- // Get the trigger source.
- Object source = trigger.getTriggerSource();
-
- // Get the trigger time for supported trigger types.
- if(source instanceof SSPCluster) {
- return ((SSPCluster) source).getTime();
- } else if(source instanceof Cluster) {
- return TriggerDiagnosticUtil.getClusterTime((Cluster) source);
- } else if(source instanceof SSPCluster[]) {
- // Get the pair.
- SSPCluster[] sourcePair = (SSPCluster[]) source;
-
- // Get the time of the bottom cluster.
- if(sourcePair.length == 2) {
- if(sourcePair[0].getYIndex() < 0) { return sourcePair[0].getTime(); }
- else if(sourcePair[1].getYIndex() < 0) { return sourcePair[1].getTime(); }
- else { throw new IllegalArgumentException("Cluster pairs must be formed of a top/bottom pair."); }
- }
- else { throw new IllegalArgumentException("Cluster pairs must be of size 2."); }
- } else if(source instanceof Cluster[]) {
- // Get the pair.
- Cluster[] sourcePair = (Cluster[]) source;
- int[] iy = {
- TriggerDiagnosticUtil.getYIndex(sourcePair[0]),
- TriggerDiagnosticUtil.getYIndex(sourcePair[1])
- };
-
- // Get the time of the bottom cluster.
- if(sourcePair.length == 2) {
- if(iy[0] < 0) { return TriggerDiagnosticUtil.getClusterTime(sourcePair[0]); }
- else if(iy[1] < 0) { return TriggerDiagnosticUtil.getClusterTime(sourcePair[1]); }
- else { throw new IllegalArgumentException("Cluster pairs must be formed of a top/bottom pair."); }
- }
- else { throw new IllegalArgumentException("Cluster pairs must be of size 2."); }
- }
-
- // If the source type is unrecognized, throw an exception.
- throw new IllegalArgumentException(String.format("Trigger source type \"%\" is not supported.",
- source.getClass().getSimpleName()));
- }
-
- /**
- * Checks if a simulated trigger and an SSP trigger match. Note
- * that only certain types can be compared. These are:
- * <ul><li><code>SinglesTrigger<?> --> SSPSinglesTrigger</code></li>
- * <li><code>PairTrigger<?> --> SSPPairTrigger</code></li></ul>
- * @param simTrigger - The simulated trigger.
- * @param sspTrigger - The SSP bank trigger.
- * @return Returns an array of <code>boolean</code> primitives that
- * indicate which cuts passed and which failed.
- */
- private static final boolean[] triggerCutMatch(Trigger<?> simTrigger, SSPTrigger sspTrigger) {
- // Check that the cuts match for supported trigger types.
- if(simTrigger instanceof SinglesTrigger && sspTrigger instanceof SSPSinglesTrigger) {
- // Create an array to store the cut checks.
- boolean[] cutMatch = new boolean[3];
-
- // Cast the triggers.
- SinglesTrigger<?> simSingles = (SinglesTrigger<?>) simTrigger;
- SSPSinglesTrigger sspSingles = (SSPSinglesTrigger) sspTrigger;
-
- // Perform the check.
- cutMatch[ENERGY_MIN] = (simSingles.getStateClusterEnergyLow() == sspSingles.passCutEnergyMin());
- cutMatch[ENERGY_MAX] = (simSingles.getStateClusterEnergyHigh() == sspSingles.passCutEnergyMax());
- cutMatch[HIT_COUNT] = (simSingles.getStateHitCount() == sspSingles.passCutHitCount());
-
- // Return the match array.
- return cutMatch;
- } else if(simTrigger instanceof PairTrigger && sspTrigger instanceof SSPPairTrigger) {
- // Create an array to store the cut checks.
- boolean[] cutMatch = new boolean[4];
-
- // Cast the triggers.
- PairTrigger<?> simPair = (PairTrigger<?>) simTrigger;
- SSPPairTrigger sspPair = (SSPPairTrigger) sspTrigger;
-
- // Perform the check.
- cutMatch[ENERGY_SUM] = (simPair.getStateEnergySum() == sspPair.passCutEnergySum());
- cutMatch[ENERGY_DIFF] = (simPair.getStateEnergyDifference() == sspPair.passCutEnergyDifference());
- cutMatch[ENERGY_SLOPE] = (simPair.getStateEnergySlope() == sspPair.passCutEnergySlope());
- cutMatch[COPLANARITY] = (simPair.getStateCoplanarity() == sspPair.passCutCoplanarity());
-
- // Return the match array.
- return cutMatch;
- }
-
- // If this point is reached, the triggers are not of a supported
- // type for cut comparison. Produce an exception.
- throw new IllegalArgumentException(String.format("Triggers of type \"%s\" can not be cut-matched with triggers of type \"%s\".",
- simTrigger.getClass().getSimpleName(), sspTrigger.getClass().getSimpleName()));
- }
+ * clusters and a collection of SSP clusters with an algorithm that
+ * ignores the times reported for each cluster.
+ * @param reconClusters - A collection of reconstructed clusters.
+ * @param sspClusters - A collection of SSP clusters.
+ * @param energyWindow - The window of allowed deviation between
+ * the reconstructed cluster and SSP cluster energies.
+ * @param hitWindow - The window of allowed deviation between
+ * the reconstructed cluster and SSP cluster hit counts.
+ * @return Returns the cluster matching results stored inside a
+ * <code>clusterMatchEvent</code> object.
+ */
+ private static final DetailedClusterEvent matchClusters(Collection<Cluster> reconClusters,
+ Collection<SSPCluster> sspClusters, double energyWindow, int hitWindow) {
+ // Track the number of cluster pairs that were matched and that
+ // failed by failure type.
+ DetailedClusterEvent event = new DetailedClusterEvent();
+
+ // Create maps to link cluster position to the list of clusters
+ // that were found at that location.
+ Map<Point, List<Cluster>> reconClusterMap = new HashMap<Point, List<Cluster>>(reconClusters.size());
+ Map<Point, List<SSPCluster>> sspClusterMap = new HashMap<Point, List<SSPCluster>>(reconClusters.size());
+
+ // Populate the reconstructed cluster map.
+ for(Cluster reconCluster : reconClusters) {
+ // Get the cluster position.
+ Point position = new Point(TriggerDiagnosticUtil.getXIndex(reconCluster),
+ TriggerDiagnosticUtil.getYIndex(reconCluster));
+
+ // Get the list for this cluster position.
+ List<Cluster> reconList = reconClusterMap.get(position);
+ if(reconList == null) {
+ reconList = new ArrayList<Cluster>();
+ reconClusterMap.put(position, reconList);
+ }
+
+ // Add the cluster to the list.
+ reconList.add(reconCluster);
+ }
+
+ // Populate the SSP cluster map.
+ for(SSPCluster sspCluster : sspClusters) {
+ // Get the cluster position.
+ Point position = new Point(sspCluster.getXIndex(), sspCluster.getYIndex());
+
+ // Get the list for this cluster position.
+ List<SSPCluster> sspList = sspClusterMap.get(position);
+ if(sspList == null) {
+ sspList = new ArrayList<SSPCluster>();
+ sspClusterMap.put(position, sspList);
+ }
+
+ // Add the cluster to the list.
+ sspList.add(sspCluster);
+ }
+
+ // For each reconstructed cluster, attempt to match the clusters
+ // with SSP clusters at the same position.
+ positionLoop:
+ for(Entry<Point, List<Cluster>> clusterSet : reconClusterMap.entrySet()) {
+ // Get the reconstructed and SSP clusters at this position.
+ List<Cluster> reconList = clusterSet.getValue();
+ List<SSPCluster> sspList = sspClusterMap.get(clusterSet.getKey());
+
+ // Print the crystal position header.
+ OutputLogger.println();
+ OutputLogger.printf("Considering clusters at (%3d, %3d)%n", clusterSet.getKey().x, clusterSet.getKey().y);
+
+ // If there are no SSP clusters, then matching fails by
+ // reason of position. The remainder of the loop may be
+ // skipped, since there is nothing to check.
+ if(sspList == null || sspList.isEmpty()) {
+ event.pairFailPosition(reconList.size());
+ continue positionLoop;
+ }
+
+ // Get all possible permutations of SSP clusters.
+ List<List<Pair<Cluster, SSPCluster>>> permutations = getPermutations(reconList, sspList);
+
+ // Print the information for this crystal position.
+ OutputLogger.printf("\tRecon Clusters :: %d%n", reconList.size());
+ OutputLogger.printf("\tSSP Clusters :: %d%n", sspList.size());
+ OutputLogger.printf("\tPermutations :: %d%n", permutations.size());
+
+ // Track the plotted values for the current best permutation.
+ DetailedClusterEvent bestPerm = null;
+
+ // Iterate over the permutations and find the permutation
+ // that produces the best possible result when compared to
+ // the reconstructed clusters.
+ int permIndex = 0;
+ for(List<Pair<Cluster, SSPCluster>> pairs : permutations) {
+ // Update the current permutation number.
+ permIndex++;
+
+ // Track the plot values for this permutation.
+ DetailedClusterEvent perm = new DetailedClusterEvent();
+
+ // Try to match each pair.
+ pairLoop:
+ for(Pair<Cluster, SSPCluster> pair : pairs) {
+ // Print the current reconstructed/SSP cluster pair.
+ OutputLogger.printf("\tP%d :: %s --> %s", permIndex,
+ pair.getFirstElement() == null ? "None" : TriggerDiagnosticUtil.clusterToString(pair.getFirstElement()),
+ pair.getSecondElement() == null ? "None" : TriggerDiagnosticUtil.clusterToString(pair.getSecondElement()));
+
+ // If either cluster in the pair is null, there
+ // are not enough clusters to perform this match.
+ if(pair.getFirstElement() == null || pair.getSecondElement() == null) {
+ // Log the result.
+ OutputLogger.printf(" [ %18s ]%n", "failure: unpaired");
+
+ // An unpaired SSP cluster does not necessarily
+ // represent a problem. Often, this just means
+ // that the SSP cluster's matching reconstructed
+ // cluster is outside the verification window.
+ if(pair.getSecondElement() == null) {
+ perm.pairFailPosition(pair.getFirstElement(), pair.getSecondElement());
+ }
+
+ // Skip the rest of the checks.
+ continue pairLoop;
+ }
+
+ // Check if the reconstructed cluster has an energy
+ // within the allotted threshold of the SSP cluster.
+ if(pair.getSecondElement().getEnergy() >= pair.getFirstElement().getEnergy() - energyWindow &&
+ pair.getSecondElement().getEnergy() <= pair.getFirstElement().getEnergy() + energyWindow) {
+
+ // Check that the hit count of the reconstructed
+ // is within the allotted threshold of the SSP
+ // cluster.
+ if(pair.getSecondElement().getHitCount() >= pair.getFirstElement().getCalorimeterHits().size() - hitWindow &&
+ pair.getSecondElement().getHitCount() <= pair.getFirstElement().getCalorimeterHits().size() + hitWindow) {
+ // Designate the pair as a match.
+ perm.pairMatch(pair.getFirstElement(), pair.getSecondElement());
+ OutputLogger.printf(" [ %18s ]%n", "success: matched");
+ } else {
+ perm.pairFailHitCount(pair.getFirstElement(), pair.getSecondElement());
+ OutputLogger.printf(" [ %18s ]%n", "failure: hit count");
+ } // End hit count check.
+ } else {
+ perm.pairFailEnergy(pair.getFirstElement(), pair.getSecondElement());
+ OutputLogger.printf(" [ %18s ]%n", "failure: energy");
+ } // End energy check.
+ } // End Pair Loop
+
+ // Print the results of the permutation.
+ OutputLogger.printf("\t\tPermutation Matched :: %d%n", perm.getMatches());
+ OutputLogger.printf("\t\tPermutation Energy :: %d%n", perm.getEnergyFailures());
+ OutputLogger.printf("\t\tPermutation Hit Count :: %d%n", perm.getHitCountFailures());
+
+ // Check whether the results from this permutation
+ // exceed the quality of the last best results. A
+ // greater number of matches is always better. If the
+ // matches are the same, select the one with fewer
+ // failures due to energy.
+ bestPerm = getBestPermutation(bestPerm, perm);
+ } // End Permutation Loop
+
+ // Print the final results for the position.
+ OutputLogger.printf("\tPosition Matched :: %d%n", bestPerm.getMatches());
+ OutputLogger.printf("\tPosition Energy :: %d%n", bestPerm.getEnergyFailures());
+ OutputLogger.printf("\tPosition Hit Count :: %d%n", bestPerm.getHitCountFailures());
+
+ // Add the results from the best-matched permutation
+ // to the event efficiency results.
+ event.addEvent(bestPerm);
+ } // End Crystal Position Loop
+
+ // Return the cluster match summary.
+ return event;
+ }
+
+ /**
+ * Performs cluster matching between a collection of reconstructed
+ * clusters and a collection of SSP clusters using the strictly
+ * time-compliant algorithm.
+ * @param reconClusters - A collection of reconstructed clusters.
+ * @param sspClusters - A collection of SSP clusters.
+ * @param energyWindow - The window of allowed deviation between
+ * the reconstructed cluster and SSP cluster energies.
+ * @param hitWindow - The window of allowed deviation between
+ * the reconstructed cluster and SSP cluster hit counts.
+ * @return Returns the cluster matching results stored inside a
+ * <code>clusterMatchEvent</code> object.
+ */
+ private static final DetailedClusterEvent matchClustersTimeCompliant(Collection<Cluster> reconClusters,
+ Collection<SSPCluster> sspClusters, double energyWindow, int hitWindow) {
+ // Track the number of cluster pairs that were matched and that
+ // failed by failure type.
+ DetailedClusterEvent event = new DetailedClusterEvent();
+
+ // Store the clusters which have been successfully paired.
+ Set<SSPCluster> sspMatched = new HashSet<SSPCluster>(sspClusters.size());
+
+ // Find reconstructed/SSP cluster matched pairs.
+ reconLoop:
+ for(Cluster reconCluster : reconClusters) {
+ // Track whether a position-matched cluster was found.
+ boolean matchedPosition = false;
+
+ // VERBOSE :: Output the cluster being matched.
+ OutputLogger.printf("Considering %s%n", TriggerDiagnosticUtil.clusterToString(reconCluster));
+
+ // Search through the SSP clusters for a matching cluster.
+ sspLoop:
+ for(SSPCluster sspCluster : sspClusters) {
+ // VERBOSE :: Output the SSP cluster being considered.
+ OutputLogger.printf("\t%s ", TriggerDiagnosticUtil.clusterToString(sspCluster));
+
+ // If this cluster has been paired, skip it.
+ if(sspMatched.contains(sspCluster)) {
+ OutputLogger.printf("[ %7s; %9s ]%n", "fail", "matched");
+ continue sspLoop;
+ }
+
+ // Matched clusters must have the same position.
+ if(TriggerDiagnosticUtil.getXIndex(reconCluster) != sspCluster.getXIndex()
+ || TriggerDiagnosticUtil.getYIndex(reconCluster) != sspCluster.getYIndex()) {
+ OutputLogger.printf("[ %7s; %9s ]%n", "fail", "position");
+ continue sspLoop;
+ }
+
+ // Note that a cluster was found at this position.
+ matchedPosition = true;
+
+ // Matched clusters must have the same time-stamp.
+ if(reconCluster.getCalorimeterHits().get(0).getTime() != sspCluster.getTime()) {
+ OutputLogger.printf("[ %7s; %9s ]%n", "fail", "time");
+ continue sspLoop;
+ }
+
+ // Clusters that pass all of the above checks are the
+ // same cluster.
+ sspMatched.add(sspCluster);
+
+ // Check that the clusters are sufficiently close in
+ // energy to one another.
+ if(sspCluster.getEnergy() >= reconCluster.getEnergy() - energyWindow
+ && sspCluster.getEnergy() <= reconCluster.getEnergy() + energyWindow) {
+ // If a cluster matches in energy, check that it
+ // is also sufficiently close in hit count.
+ if(sspCluster.getHitCount() >= reconCluster.getCalorimeterHits().size() - hitWindow &&
+ sspCluster.getHitCount() <= reconCluster.getCalorimeterHits().size() + hitWindow) {
+ // The cluster is a match.
+ event.pairMatch(reconCluster, sspCluster);
+ OutputLogger.printf("[ %7s; %9s ]%n", "success", "matched");
+ continue reconLoop;
+ } else {
+ event.pairFailHitCount(reconCluster, sspCluster);
+ OutputLogger.printf("[ %7s; %9s ]%n", "fail", "hit count");
+ continue reconLoop;
+ } // End hit count check.
+ } else {
+ event.pairFailEnergy(reconCluster, sspCluster);
+ OutputLogger.printf("[ %7s; %9s ]%n", "fail", "energy");
+ continue reconLoop;
+ } // End energy check.
+ }// End SSP loop.
+
+ // If the reconstructed cluster has not been matched, check
+ // if a cluster was found at the same position. If not, then
+ // the cluster fails by reason of position.
+ if(!matchedPosition) {
+ event.pairFailPosition(reconCluster, null);
+ }
+
+ // Otherwise, the cluster had a potential matched, but the
+ // time-stamps were off. The cluster fails by reason of time.
+ else {
+ event.pairFailTime(reconCluster, null);
+ }
+ } // End recon loop.
+
+ // Return the populated match event.
+ return event;
+ }
+
+ /**
+ * Checks triggers simulated on SSP clusters against the SSP bank's
+ * reported triggers to verify that the trigger is correctly applying
+ * cuts to the clusters it sees. Additionally compares triggers
+ * simulated on reconstructed clusters to measure trigger efficiency.
+ */
+ private void singlesTriggerVerification() {
+ // Create lists of generic triggers.
+ List<List<? extends Trigger<?>>> sspTriggerList = new ArrayList<List<? extends Trigger<?>>>(2);
+ List<List<? extends Trigger<?>>> reconTriggerList = new ArrayList<List<? extends Trigger<?>>>(2);
+
+ // Convert the simulated triggers to generic versions and add
+ // them to the generic list.
+ sspTriggerList.add(triggerData.getSimSSPTriggers().getSingles0Triggers());
+ sspTriggerList.add(triggerData.getSimSSPTriggers().getSingles1Triggers());
+ reconTriggerList.add(triggerData.getSimReconTriggers().getSingles0Triggers());
+ reconTriggerList.add(triggerData.getSimReconTriggers().getSingles1Triggers());
+
+ // Run generic trigger verification.
+ triggerVerification(sspTriggerList, reconTriggerList, true);
+ }
+
+ /**
+ * Checks triggers simulated on SSP clusters against the SSP bank's
+ * reported triggers to verify that the trigger is correctly applying
+ * cuts to the clusters it sees. Additionally compares triggers
+ * simulated on reconstructed clusters to measure trigger efficiency.
+ */
+ private void pairTriggerVerification() {
+ // Create lists of generic triggers.
+ List<List<? extends Trigger<?>>> sspTriggerList = new ArrayList<List<? extends Trigger<?>>>(2);
+ List<List<? extends Trigger<?>>> reconTriggerList = new ArrayList<List<? extends Trigger<?>>>(2);
+
+ // Convert the simulated triggers to generic versions and add
+ // them to the generic list.
+ sspTriggerList.add(triggerData.getSimSSPTriggers().getPair0Triggers());
+ sspTriggerList.add(triggerData.getSimSSPTriggers().getPair1Triggers());
+ reconTriggerList.add(triggerData.getSimReconTriggers().getPair0Triggers());
+ reconTriggerList.add(triggerData.getSimReconTriggers().getPair1Triggers());
+
+ // Run generic trigger verification.
+ triggerVerification(sspTriggerList, reconTriggerList, false);
+ }
+
+ /**
+ * Performs trigger verification for both trigger types.
+ * @param sspTriggerList - The list of SSP triggers.
+ * @param reconTriggerList - The list of reconstructed triggers.
+ * @param isSingles - Whether or not this is a singles trigger
+ * verification.
+ */
+ private void triggerVerification(List<List<? extends Trigger<?>>> sspTriggerList,
+ List<List<? extends Trigger<?>>> reconTriggerList, boolean isSingles) {
+
+ // ==========================================================
+ // ==== Initialize Trigger Verification =====================
+ // ==========================================================
+
+ // Print the cluster verification header.
+ OutputLogger.println();
+ OutputLogger.println();
+ OutputLogger.println("======================================================================");
+ if(isSingles) { OutputLogger.println("=== Singles Trigger Verification ====================================="); }
+ else { OutputLogger.println("=== Pair Trigger Verification ========================================"); }
+ OutputLogger.println("======================================================================");
+
+ // Track the number of triggers seen and the number found.
+ TriggerEvent[] triggerEvent = { new TriggerEvent(), new TriggerEvent() };
+
+ // ==========================================================
+ // ==== Output Event Summary ================================
+ // ==========================================================
+
+ // Get the list of triggers reported by the SSP.
+ List<? extends SSPNumberedTrigger> sspTriggers;
+ if(isSingles) { sspTriggers = sspBank.getSinglesTriggers(); }
+ else { sspTriggers = sspBank.getPairTriggers(); }
+
+ // Output the SSP cluster triggers.
+ OutputLogger.println();
+ OutputLogger.println("SSP Cluster " + (isSingles ? "Singles" : "Pair") + " Triggers");
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ for(Trigger<?> simTrigger : sspTriggerList.get(triggerNum)) {
+ OutputLogger.printf("\tTrigger %d :: %s :: %3.0f :: %s%n",
+ (triggerNum + 1), triggerPositionString(simTrigger),
+ getTriggerTime(simTrigger), simTrigger.toString());
+ }
+ }
+ if(sspTriggerList.get(0).size() + sspTriggerList.get(1).size() == 0) {
+ OutputLogger.println("\tNone");
+ }
+
+ // Output the reconstructed cluster singles triggers.
+ OutputLogger.println("Reconstructed Cluster " + (isSingles ? "Singles" : "Pair") + " Triggers");
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ for(Trigger<?> simTrigger : reconTriggerList.get(triggerNum)) {
+ OutputLogger.printf("\tTrigger %d :: %s :: %3.0f :: %s%n",
+ (triggerNum + 1), triggerPositionString(simTrigger),
+ getTriggerTime(simTrigger), simTrigger.toString());
+ }
+ }
+ if(reconTriggerList.get(0).size() + reconTriggerList.get(1).size() == 0) {
+ OutputLogger.println("\tNone");
+ }
+
+ // Output the SSP reported triggers.
+ OutputLogger.println("SSP Reported " + (isSingles ? "Singles" : "Pair") + " Triggers");
+ for(SSPTrigger sspTrigger : sspTriggers) {
+ OutputLogger.printf("\t%s%n", sspTrigger.toString());
+ }
+ if(sspTriggers.size() == 0) { OutputLogger.println("\tNone"); }
+
+ // Update the trigger event with the counts for each type of
+ // simulated trigger. Reported triggers are counted later when
+ // already iterating over them.
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ triggerEvent[triggerNum].sawSSPSimulatedTriggers(tiFlags, sspTriggerList.get(triggerNum).size());
+ triggerEvent[triggerNum].sawReconSimulatedTriggers(tiFlags, reconTriggerList.get(triggerNum).size());
+ }
+
+
+
+ // ==========================================================
+ // ==== SSP Internal Logic Verification =====================
+ // ==========================================================
+
+ // Track which SSP triggers have been matched to avoid matching
+ // multiple reconstructed SSP cluster triggers to the same SSP
+ // trigger.
+ Set<SSPNumberedTrigger> sspTriggerSet = new HashSet<SSPNumberedTrigger>();
+ Set<Trigger<?>> simTriggerSet = new HashSet<Trigger<?>>();
+
+ // Track the number of SSP reported triggers that are found in
+ // excess of the SSP simulated triggers.
+ int sspReportedExtras = sspTriggers.size() - (sspTriggerList.get(0).size() + sspTriggerList.get(1).size());
+ if(sspReportedExtras > 0) {
+ if(isSingles) { singlesInternalFail = true; }
+ else { pairInternalFail = true; }
+ } else { sspReportedExtras = 0; }
+
+ // Iterate over the triggers.
+ OutputLogger.println();
+ OutputLogger.println("Matching SSP Reported Triggers to SSP Simulated Triggers:");
+ for(SSPNumberedTrigger sspTrigger : sspTriggers) {
+ // Get the trigger information.
+ int triggerNum = sspTrigger.isFirstTrigger() ? 0 : 1;
+ OutputLogger.printf("\t%s%n", sspTrigger.toString());
+
+ // Note that a bank trigger was seen.
+ triggerEvent[triggerNum].sawReportedTrigger();
+
+ // Iterate over the SSP cluster simulated triggers and
+ // look for a trigger that matches.
+ matchLoop:
+ for(Trigger<?> simTrigger : sspTriggerList.get(triggerNum)) {
+ // VERBOSE :: Output the trigger being considered for
+ // matching.
+ OutputLogger.printf("\t\tTrigger %d :: %s :: %3.0f :: %s ",
+ (triggerNum + 1), triggerPositionString(simTrigger),
+ getTriggerTime(simTrigger), simTrigger.toString());
+
+ // If the current SSP trigger has already been matched,
+ // skip it.
+ if(simTriggerSet.contains(simTrigger)) {
+ OutputLogger.printf("[ %-15s ]%n", "failed; matched");
+ continue matchLoop;
+ }
+
+ // Check that the triggers have the same time. Triggers
+ // generated from SSP bank clusters should always align
+ // in time.
+ if(sspTrigger.getTime() != getTriggerTime(simTrigger)) {
+ OutputLogger.printf("[ %-15s ]%n", "failed; time");
+ continue matchLoop;
+ }
+
+ // Check whether the trigger cuts match.
+ boolean[] matchedCuts = triggerCutMatch(simTrigger, sspTrigger);
+ for(int i = 0; i < matchedCuts.length; i++) {
+ if(!matchedCuts[i]) {
+ int typeIndex = isSingles ? 0 : 1;
+ OutputLogger.printf("[ %-15s ]%n", String.format("failed; %s", cutNames[typeIndex][i]));
+ continue matchLoop;
+ }
+ }
+
+ // If all the cuts match, along with the time and the
+ // trigger number, than these triggers are a match.
+ sspTriggerSet.add(sspTrigger);
+ simTriggerSet.add(simTrigger);
+ triggerEvent[triggerNum].matchedSSPTrigger(tiFlags);
+ OutputLogger.printf("[ %-15s ]%n", "success");
+ break matchLoop;
+ }
+ }
+
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ for(Trigger<?> simTrigger : sspTriggerList.get(triggerNum)) {
+ globalTriggerPlots.sawTrigger(simTrigger);
+ if(simTriggerSet.contains(simTrigger)) {
+ globalTriggerPlots.matchedTrigger(simTrigger);
+ } else {
+ globalTriggerPlots.failedTrigger(simTrigger);
+ }
+ }
+ }
+
+ // Iterate over the unmatched simulated triggers again and the
+ // unmatched SSP reported trigger that most closely matches it.
+ OutputLogger.println();
+ OutputLogger.println("Matching Failed SSP Reported Triggers to Remaining SSP Simulated Triggers:");
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ simLoop:
+ for(Trigger<?> simTrigger : sspTriggerList.get(triggerNum)) {
+ OutputLogger.printf("\tTrigger %d :: %s :: %3.0f :: %s%n",
+ (triggerNum + 1), triggerPositionString(simTrigger),
+ getTriggerTime(simTrigger), simTrigger.toString());
+
+ // Check whether this trigger has already been matched
+ // or not. If it has been matched, skip it.
+ if(simTriggerSet.contains(simTrigger)) {
+ OutputLogger.println("\t\tSkipping; already matched successfully");
+ continue simLoop;
+ }
+
+ // Get the trigger time for the simulated trigger.
+ double simTime = getTriggerTime(simTrigger);
+
+ // Track the match statistics for each reported trigger
+ // so that the closest match may be found.
+ int numMatched = -1;
+ boolean[] matchedCut = null;
+ SSPNumberedTrigger bestMatch = null;
+
+ // Store the readout for the best match.
+ String bestMatchText = null;
+
+ // Iterate over the reported triggers to find a match.
+ reportedLoop:
+ for(SSPNumberedTrigger sspTrigger : sspTriggers) {
+ OutputLogger.printf("\t\t%s ", sspTrigger.toString());
+
+ // If the two triggers have different times, this
+ // trigger should be skipped.
+ if(sspTrigger.getTime() != simTime) {
+ OutputLogger.printf("[ %-15s ]%n", "failed; time");
+ continue reportedLoop;
+ }
+
+ // If this reported trigger has been matched then
+ // it should be skipped.
+ if(sspTriggerSet.contains(sspTrigger)) {
+ OutputLogger.printf("[ %-15s ]%n", "failed; matched");
+ continue reportedLoop;
+ }
+
+ // Check each of the cuts.
+ boolean[] tempMatchedCut = triggerCutMatch(simTrigger, sspTrigger);
+
+ // Check each cut and see if this is a closer match
+ // than the previous best match.
+ int tempNumMatched = 0;
+ for(boolean passed : tempMatchedCut) { if(passed) { tempNumMatched++; } }
+ OutputLogger.printf("[ %-15s ]%n", String.format("maybe; %d failed", tempNumMatched));
+
+ // If the number of matched cuts exceeds the old
+ // best result, this becomes the new best result.
+ if(tempNumMatched > numMatched) {
+ numMatched = tempNumMatched;
+ matchedCut = tempMatchedCut;
+ bestMatch = sspTrigger;
+ bestMatchText = String.format("%s%n", sspTrigger.toString());
+ }
+ }
+
+ // If there was no match found, it means that there were
+ // no triggers that were both unmatched and at the same
+ // time as this simulated trigger.
+ if(bestMatch == null) {
+ if(isSingles) { singlesInternalFail = true; }
+ else { pairInternalFail = true; }
+ triggerEvent[triggerNum].failedSSPTrigger();
+ OutputLogger.printf("\t\tTrigger %d :: %s :: %3.0f :: %s",
+ (triggerNum + 1), triggerPositionString(simTrigger),
+ getTriggerTime(simTrigger), simTrigger.toString());
+ OutputLogger.println(" --> No Valid Match Found");
+ } else {
+ triggerEvent[triggerNum].matchedSSPTrigger(tiFlags, matchedCut);
+ OutputLogger.printf("\t\tTrigger %d :: %s :: %3.0f :: %s",
+ (triggerNum + 1), triggerPositionString(simTrigger),
+ getTriggerTime(simTrigger), simTrigger.toString());
+ OutputLogger.println(" --> " + bestMatchText);
+ }
+ }
+ }
+
+
+
+ // ==========================================================
+ // ==== Trigger Efficiency ==================================
+ // ==========================================================
+
+ // Reset the SSP matched trigger set.
+ sspTriggerSet.clear();
+
+ // Iterate over the reconstructed cluster singles triggers.
+ OutputLogger.println();
+ OutputLogger.println("Recon Cluster Trigger --> SSP Reported Trigger Match Status");
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ for(Trigger<?> simTrigger : reconTriggerList.get(triggerNum)) {
+ OutputLogger.printf("\tTrigger %d :: %s :: %s%n", (triggerNum + 1),
+ triggerPositionString(simTrigger), simTrigger.toString());
+
+ // TEMP :: Populate the recon ALL pairs plots.
+ globalTriggerPlots.sawTrigger(simTrigger);
+
+ // Iterate over the SSP reported triggers and compare
+ // them to the reconstructed cluster simulated trigger.
+ boolean matched = false;
+ matchLoop:
+ for(SSPNumberedTrigger sspTrigger : sspTriggers) {
+ OutputLogger.printf("\t\t\t%s", sspTrigger.toString());
+
+ // Only compare triggers if they are from the
+ // same trigger source.
+ if((triggerNum == 0 && sspTrigger.isSecondTrigger())
+ || (triggerNum == 1 && sspTrigger.isFirstTrigger())) {
+ OutputLogger.print(" [ fail; source ]%n");
+ continue matchLoop;
+ }
+
+ // Only compare the singles trigger if it was
+ // not already matched to another trigger.
+ if(sspTriggerSet.contains(sspTrigger)) {
+ OutputLogger.print(" [ fail; matched ]%n");
+ continue matchLoop;
+ }
+
+ // Test each cut.
+ int typeIndex = isSingles ? 0 : 1;
+ boolean[] matchedCuts = triggerCutMatch(simTrigger, sspTrigger);
+ for(int cutIndex = 0; cutIndex < matchedCuts.length; cutIndex++) {
+ if(!matchedCuts[cutIndex]) {
+ OutputLogger.printf(" [ fail; %-9s ]%n", cutNames[typeIndex][cutIndex]);
+ continue matchLoop;
+ }
+ }
+
+ // If all the trigger flags match, then the
+ // triggers are a match.
+ sspTriggerSet.add(sspTrigger);
+ triggerEvent[triggerNum].matchedReconTrigger(tiFlags);
+ OutputLogger.print(" [ success ]%n");
+ globalTriggerPlots.matchedTrigger(simTrigger);
+ matched = true;
+ break matchLoop;
+ }
+
+ if(!matched) { globalTriggerPlots.failedTrigger(simTrigger); }
+ }
+ }
+
+
+
+ // ==========================================================
+ // ==== Output Event Results ================================
+ // ==========================================================
+
+ // Get the number of SSP and reconstructed cluster simulated
+ // triggers.
+ int sspSimTriggers = sspTriggerList.get(0).size() + sspTriggerList.get(1).size();
+ int reconSimTriggers = reconTriggerList.get(0).size() + reconTriggerList.get(1).size();
+ int[] sspTriggerCount = { sspTriggerList.get(0).size(), sspTriggerList.get(1).size() };
+
+ // Print event statistics.
+ OutputLogger.println();
+ OutputLogger.println("Event Statistics:");
+ OutputLogger.printf("\tSSP Cluster Sim Triggers :: %d%n", sspSimTriggers);
+ OutputLogger.printf("\tRecon Cluster Sim Triggers :: %d%n", reconSimTriggers);
+ OutputLogger.printf("\tSSP Reported Triggers :: %d%n", sspTriggers.size());
+
+ int matchedSSPTriggers = triggerEvent[0].getMatchedSSPSimulatedTriggers() + triggerEvent[1].getMatchedSSPSimulatedTriggers();
+ OutputLogger.printf("\tInternal Efficiency :: %d / %d ", matchedSSPTriggers, sspSimTriggers);
+ if(sspSimTriggers == 0) { OutputLogger.printf("(N/A)%n"); }
+ else { OutputLogger.printf("(%3.0f%%)%n", (100.0 * matchedSSPTriggers / sspSimTriggers)); }
+
+ int matchedReconTriggers = triggerEvent[0].getMatchedReconSimulatedTriggers() + triggerEvent[1].getMatchedReconSimulatedTriggers();
+ OutputLogger.printf("\tTrigger Efficiency :: %d / %d", matchedReconTriggers, reconSimTriggers);
+ if(reconSimTriggers == 0) { OutputLogger.printf("(N/A)%n"); }
+ else { OutputLogger.printf("(%3.0f%%)%n", (100.0 * matchedReconTriggers / reconSimTriggers)); }
+
+ // Print the individual cut performances.
+ if(isSingles) {
+ OutputLogger.println();
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ OutputLogger.printf("Trigger %d Individual Cut Failure Rate:%n", (triggerNum + 1));
+ if(sspSimTriggers == 0) {
+ OutputLogger.printf("\tCluster Energy Lower Bound :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MIN), sspTriggerCount[triggerNum]);
+ OutputLogger.printf("\tCluster Energy Upper Bound :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MAX), sspTriggerCount[triggerNum]);
+ OutputLogger.printf("\tCluster Hit Count :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(HIT_COUNT), sspTriggerCount[triggerNum]);
+ } else {
+ OutputLogger.printf("\tCluster Energy Lower Bound :: %d / %d (%3.0f%%)%n",
+ triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MIN), sspTriggerCount[triggerNum],
+ (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MIN) / sspTriggerCount[triggerNum]));
+ OutputLogger.printf("\tCluster Energy Upper Bound :: %d / %d (%3.0f%%)%n",
+ triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MAX), sspTriggerCount[triggerNum],
+ (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_MAX) / sspTriggerCount[triggerNum]));
+ OutputLogger.printf("\tCluster Hit Count :: %d / %d (%3.0f%%)%n",
+ triggerEvent[triggerNum].getSSPCutFailures(HIT_COUNT), sspTriggerCount[triggerNum],
+ (100.0 * triggerEvent[triggerNum].getSSPCutFailures(HIT_COUNT) / sspTriggerCount[triggerNum]));
+ }
+ }
+
+ // Update the global trigger tracking variables.
+ localStats.getTriggerStats().getSingles0Stats().addEvent(triggerEvent[0]);
+ localStats.getTriggerStats().getSingles1Stats().addEvent(triggerEvent[1]);
+ globalStats.getTriggerStats().getSingles0Stats().addEvent(triggerEvent[0]);
+ globalStats.getTriggerStats().getSingles1Stats().addEvent(triggerEvent[1]);
+ } else {
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ OutputLogger.println();
+ OutputLogger.printf("Trigger %d Individual Cut Failure Rate:%n", (triggerNum + 1));
+ if(sspTriggerCount[triggerNum] == 0) {
+ OutputLogger.printf("\tPair Energy Sum :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SUM), sspTriggerCount[triggerNum]);
+ OutputLogger.printf("\tPair Energy Difference :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_DIFF), sspTriggerCount[triggerNum]);
+ OutputLogger.printf("\tPair Energy Slope :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SLOPE), sspTriggerCount[triggerNum]);
+ OutputLogger.printf("\tPair Coplanarity :: %d / %d%n", triggerEvent[triggerNum].getSSPCutFailures(COPLANARITY), sspTriggerCount[triggerNum]);
+ } else {
+ OutputLogger.printf("\tPair Energy Sum :: %d / %d (%3.0f%%)%n",
+ triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SUM), sspTriggerCount[triggerNum],
+ (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SUM) / sspTriggerCount[triggerNum]));
+ OutputLogger.printf("\tPair Energy Difference :: %d / %d (%3.0f%%)%n",
+ triggerEvent[triggerNum].getSSPCutFailures(ENERGY_DIFF), sspTriggerCount[triggerNum],
+ (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_DIFF) / sspTriggerCount[triggerNum]));
+ OutputLogger.printf("\tPair Energy Slope :: %d / %d (%3.0f%%)%n",
+ triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SLOPE), sspTriggerCount[triggerNum],
+ (100.0 * triggerEvent[triggerNum].getSSPCutFailures(ENERGY_SLOPE) / sspTriggerCount[triggerNum]));
+ OutputLogger.printf("\tPair Coplanarity :: %d / %d (%3.0f%%)%n",
+ triggerEvent[triggerNum].getSSPCutFailures(COPLANARITY), sspTriggerCount[triggerNum],
+ (100.0 * triggerEvent[triggerNum].getSSPCutFailures(COPLANARITY) / sspTriggerCount[triggerNum]));
+ }
+ }
+
+ // Update the global trigger tracking variables.
+ localStats.getTriggerStats().getPair0Stats().addEvent(triggerEvent[0]);
+ localStats.getTriggerStats().getPair1Stats().addEvent(triggerEvent[1]);
+ globalStats.getTriggerStats().getPair0Stats().addEvent(triggerEvent[0]);
+ globalStats.getTriggerStats().getPair1Stats().addEvent(triggerEvent[1]);
+ }
+
+ // Note whether the was a trigger match failure.
+ if(triggerEvent[0].getFailedReconSimulatedTriggers() != 0 && triggerEvent[1].getFailedReconSimulatedTriggers() != 0) {
+ if(isSingles) { singlesEfficiencyFail = true; }
+ else { pairEfficiencyFail = true; }
+ } if(triggerEvent[0].getFailedSSPSimulatedTriggers() != 0 && triggerEvent[1].getFailedSSPSimulatedTriggers() != 0) {
+ if(isSingles) { singlesInternalFail = true; }
+ else { pairInternalFail = true; }
+ }
+ }
+
+ /**
+ * Outputs all of the verification parameters currently in use by
+ * the software. A warning will be issued if the values for NSA and
+ * NSB, along with the FADC window, preclude clusters from being
+ * verified.
+ */
+ private void logSettings() {
+ // Output general settings.
+ System.out.println("Cluster Verification Settings");
+ System.out.printf("\tHit Threshold :: %1d hit(s)%n", hitAcceptance);
+ System.out.printf("\tEnergy Threshold :: %5.3f GeV%n", energyAcceptance);
+ System.out.println();
+
+ // Output window settings.
+ System.out.println("FADC Timing Window Settings");
+ System.out.printf("\tNSB :: %3d ns%n", nsb);
+ System.out.printf("\tNSA :: %3d ns%n", nsa);
+ System.out.printf("\tFADC Window :: %3d ns%n", windowWidth);
+
+ // Calculate the valid clustering window.
+ int start = nsb;
+ int end = windowWidth - nsa;
+ if(start < end) {
+ System.out.printf("\tValid Cluster Window :: [ %3d ns, %3d ns ]%n", start, end);
+ performClusterVerification = true;
+ } else {
+ System.out.println("\tNSB, NSA, and FADC window preclude a valid cluster verification window.");
+ System.out.println("\tCluster verification will not be performed!");
+ performClusterVerification = false;
+ }
+ System.out.println();
+
+ // Output the singles trigger settings.
+ for(int i = 0; i < 2; i++) {
+ // Print the settings.
+ System.out.printf("Singles Trigger %d Settings%23s[%5b]%n", (i + 1), "", singlesTriggerEnabled[i]);
+ System.out.printf("\tCluster Energy Low :: %.3f GeV [%5b]%n",
+ singlesTrigger[i].getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW), singlesCutsEnabled[i][0]);
+ System.out.printf("\tCluster Energy High :: %.3f GeV [%5b]%n",
+ singlesTrigger[i].getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH), singlesCutsEnabled[i][1]);
+ System.out.printf("\tCluster Hit Count :: %.0f hit(s) [%5b]%n",
+ singlesTrigger[i].getCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW), singlesCutsEnabled[i][2]);
+ System.out.println();
+ }
+
+ // Output the pair trigger settings.
+ for(int i = 0; i < 2; i++) {
+ System.out.printf("Pairs Trigger %d Settings%25s[%5b]%n", (i + 1), "", pairTriggerEnabled[i]);
+ System.out.printf("\tCluster Energy Low :: %.3f GeV [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW), pairCutsEnabled[i][0]);
+ System.out.printf("\tCluster Energy High :: %.3f GeV [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH), pairCutsEnabled[i][1]);
+ System.out.printf("\tCluster Hit Count :: %.0f hit(s) [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW), pairCutsEnabled[i][2]);
+ System.out.printf("\tPair Energy Sum Low :: %.3f GeV [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW), pairCutsEnabled[i][3]);
+ System.out.printf("\tPair Energy Sum High :: %.3f GeV [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH), pairCutsEnabled[i][3]);
+ System.out.printf("\tPair Energy Difference :: %.3f GeV [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH), pairCutsEnabled[i][4]);
+ System.out.printf("\tPair Energy Slope :: %.3f GeV [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW), pairCutsEnabled[i][5]);
+ System.out.printf("\tPair Energy Slope F :: %.4f GeV / mm%n",
+ pairsTrigger[i].getCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F));
+ System.out.printf("\tPair Coplanarity :: %3.0f Degrees [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.PAIR_COPLANARITY_HIGH), pairCutsEnabled[i][6]);
+ System.out.printf("\tPair Time Coincidence :: %2.0f ns [%5b]%n",
+ pairsTrigger[i].getCutValue(TriggerModule.PAIR_TIME_COINCIDENCE), true);
+ System.out.println();
+ }
+ }
+
+ /**
+ * Summarizes the global run statistics in a log to the terminal.
+ */
+ private void logStatistics() {
+ // Print the cluster/trigger verification header.
+ System.out.println();
+ System.out.println();
+ System.out.println("======================================================================");
+ System.out.println("=== Cluster/Trigger Verification Results =============================");
+ System.out.println("======================================================================");
+
+ // Print the general event failure rate.
+ int headSpaces = getPrintSpaces(globalStats.getEventCount());
+ System.out.println("General Event Statistics:");
+ System.out.printf("\tEvent Start Time :: %.3f s%n", (startTime / Math.pow(10, 9)));
+ System.out.printf("\tEvent End Time :: %.3f%n", (endTime / Math.pow(10, 9)));
+ System.out.printf("\tEvent Run Time :: %.3f%n", ((endTime - startTime) / Math.pow(10, 9)));
+ System.out.printf("\tNoise Events :: %" + headSpaces + "d / %" + headSpaces + "d (%7.3f%%)%n",
+ globalStats.getNoiseEvents(), globalStats.getEventCount(), (100.0 * globalStats.getNoiseEvents() / globalStats.getEventCount()));
+ System.out.printf("\tCluster Events Failed :: %" + headSpaces + "d / %" + headSpaces + "d (%7.3f%%)%n",
+ globalStats.getFailedClusterEventCount(), globalStats.getEventCount(), (100.0 * globalStats.getFailedClusterEventCount() / globalStats.getEventCount()));
+ System.out.printf("\tSingles Events Failed :: %" + headSpaces + "d / %" + headSpaces + "d (%7.3f%%)%n",
+ globalStats.getFailedSinglesEventCount(), globalStats.getEventCount(), (100.0 * globalStats.getFailedSinglesEventCount() / globalStats.getEventCount()));
+ System.out.printf("\tPair Events Failed :: %" + headSpaces + "d / %" + headSpaces + "d (%7.3f%%)%n",
+ globalStats.getFailedPairEventCount(), globalStats.getEventCount(), (100.0 * globalStats.getFailedPairEventCount() / globalStats.getEventCount()));
+
+ // Print out how many events reported a given TI type, both in
+ // total and hierarchically.
+ System.out.println();
+ System.out.println("Event Triggering Type Verification:");
+ System.out.printf("\t%15s\t%15s\t%15s%n", "Trigger", "Total", "Hierarchical");
+ System.out.printf("\t%15s\t%15s\t%15s%n", "Pulser", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PULSER, false),
+ globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PULSER, true));
+ System.out.printf("\t%15s\t%15s\t%15s%n", "Cosmic", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.COSMIC, false),
+ globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.COSMIC, true));
+ System.out.printf("\t%15s\t%15s\t%15s%n", "Singles 1", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.SINGLES0, false),
+ globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.SINGLES0, true));
+ System.out.printf("\t%15s\t%15s\t%15s%n", "Singles 2", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.SINGLES1, false),
+ globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.SINGLES1, true));
+ System.out.printf("\t%15s\t%15s\t%15s%n", "Pair 1", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PAIR0, false),
+ globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PAIR0, true));
+ System.out.printf("\t%15s\t%15s\t%15s%n", "Pair 2", globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PAIR1, false),
+ globalStats.getTriggerStats().getTITriggers(TriggerDiagStats.PAIR1, true));
+
+ // Print the cluster verification data.
+ System.out.println();
+ System.out.println("Cluster Verification:");
+ System.out.printf("\tRecon Clusters :: %d%n", globalStats.getClusterStats().getReconClusterCount());
+ System.out.printf("\tSSP Clusters :: %d%n", globalStats.getClusterStats().getSSPClusterCount());
+ System.out.printf("\tClusters Matched :: %d%n", globalStats.getClusterStats().getMatches());
+ System.out.printf("\tFailed (Position) :: %d%n", globalStats.getClusterStats().getPositionFailures());
+ System.out.printf("\tFailed (Energy) :: %d%n", globalStats.getClusterStats().getEnergyFailures());
+ System.out.printf("\tFailed (Hit Count) :: %d%n", globalStats.getClusterStats().getHitCountFailures());
+ if(globalStats.getClusterStats().getReconClusterCount() == 0) {
+ System.out.printf("\tCluster Efficiency :: N/A%n");
+ } else {
+ System.out.printf("\tCluster Efficiency :: %7.3f%%%n",
+ 100.0 * globalStats.getClusterStats().getMatches() / globalStats.getClusterStats().getReconClusterCount());
+ }
+
+ // Print the trigger verification data.
+ for(int triggerType = 0; triggerType < 2; triggerType++) {
+ // Get the trigger data. Type 0 represents singles triggers.
+ TriggerEvent[] triggerData = new TriggerEvent[2];
+ if(triggerType == 0) {
+ triggerData[0] = globalStats.getTriggerStats().getSingles0Stats();
+ triggerData[1] = globalStats.getTriggerStats().getSingles1Stats();
+ } else {
+ triggerData[0] = globalStats.getTriggerStats().getPair0Stats();
+ triggerData[1] = globalStats.getTriggerStats().getPair1Stats();
+ }
+
+ // Get the basic trigger data.
+ int sspSimTriggers = triggerData[0].getSSPSimulatedTriggers() + triggerData[1].getSSPSimulatedTriggers();
+ int reconSimTriggers = triggerData[0].getReconSimulatedTriggers() + triggerData[1].getReconSimulatedTriggers();
+ int sspReportedTriggers = triggerData[0].getReportedTriggers() + triggerData[1].getReportedTriggers();
+ int sspMatchedTriggers = triggerData[0].getMatchedSSPSimulatedTriggers() + triggerData[1].getMatchedSSPSimulatedTriggers();
+ int reconMatchedTriggers = triggerData[0].getMatchedReconSimulatedTriggers() + triggerData[1].getMatchedReconSimulatedTriggers();
+
+ // Print the basic trigger statistics.
+ int spaces = getPrintSpaces(sspSimTriggers, reconSimTriggers, sspReportedTriggers);
+ System.out.println();
+ if(triggerType == 0) { System.out.println("Singles Trigger Verification:"); }
+ else { System.out.println("Pair Trigger Verification:"); }
+ System.out.printf("\tSSP Cluster Sim Triggers :: %" + spaces + "d%n", sspSimTriggers);
+ System.out.printf("\tRecon Cluster Sim Triggers :: %" + spaces + "d%n", reconSimTriggers);
+ System.out.printf("\tSSP Reported Triggers :: %" + spaces + "d%n", sspReportedTriggers);
+
+ System.out.printf("\tInternal Efficiency :: %" + spaces + "d / %" + spaces + "d ", sspMatchedTriggers, sspSimTriggers);
+ if(sspSimTriggers == 0) { System.out.printf("(N/A)%n"); }
+ else { System.out.printf("(%7.3f%%)%n", (100.0 * sspMatchedTriggers / sspSimTriggers)); }
+
+ System.out.printf("\tTrigger Efficiency :: %" + spaces + "d / %" + spaces + "d ", reconMatchedTriggers, reconSimTriggers);
+ if(reconSimTriggers == 0) { System.out.printf("(N/A)%n"); }
+ else { System.out.printf("(%7.3f%%)%n" , (100.0 * reconMatchedTriggers / reconSimTriggers)); }
+
+ // Print the individual cut performances.
+ if(triggerType == 0) {
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ // Get the appropriate trigger statistics module.
+ TriggerEvent triggerStats;
+ if(triggerNum == 0) { triggerStats = globalStats.getTriggerStats().getSingles0Stats(); }
+ else { triggerStats = globalStats.getTriggerStats().getSingles1Stats(); }
+
+ // Get the number of SSP triggers for this trigger number.
+ int sspTriggerCount = triggerStats.getSSPSimulatedTriggers();
+ //int sspTriggerCount = triggerRunStats[0].getTotalSSPTriggers(triggerNum);
+
+ System.out.println();
+ System.out.printf("\tTrigger %d Individual Cut Failure Rate:%n", (triggerNum + 1));
+ System.out.printf("\t\tUmatched Triggers :: %" + spaces + "d%n", triggerStats.getUnmatchedSSPSimulatedTriggers());
+ //System.out.printf("\t\tUmatched Triggers :: %" + spaces + "d%n", triggerRunStats[0].getUnmatchedTriggers(triggerNum));
+ if(sspTriggerCount == 0) {
+ System.out.printf("\t\tCluster Energy Lower Bound :: %" + spaces + "d / %" + spaces + "d%n",
+ triggerStats.getSSPCutFailures(ENERGY_MIN), sspTriggerCount);
+ System.out.printf("\t\tCluster Energy Upper Bound :: %" + spaces + "d / %" + spaces + "d%n",
+ triggerStats.getSSPCutFailures(ENERGY_MAX), sspTriggerCount);
+ System.out.printf("\t\tCluster Hit Count :: %" + spaces + "d / %" + spaces + "d%n",
+ triggerStats.getSSPCutFailures(HIT_COUNT), sspTriggerCount);
+ } else {
+ System.out.printf("\t\tCluster Energy Lower Bound :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
+ triggerStats.getSSPCutFailures(ENERGY_MIN), sspTriggerCount,
+ (100.0 * triggerStats.getSSPCutFailures(ENERGY_MIN) / sspTriggerCount));
+ System.out.printf("\t\tCluster Energy Upper Bound :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
+ triggerStats.getSSPCutFailures(ENERGY_MAX), sspTriggerCount,
+ (100.0 * triggerStats.getSSPCutFailures(ENERGY_MAX) / sspTriggerCount));
+ System.out.printf("\t\tCluster Hit Count :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
+ triggerStats.getSSPCutFailures(HIT_COUNT), sspTriggerCount,
+ (100.0 * triggerStats.getSSPCutFailures(HIT_COUNT) / sspTriggerCount));
+ }
+ }
+ } else {
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ // Get the appropriate trigger statistics module.
+ TriggerEvent triggerStats;
+ if(triggerNum == 0) { triggerStats = globalStats.getTriggerStats().getPair0Stats(); }
+ else { triggerStats = globalStats.getTriggerStats().getPair1Stats(); }
+
+ // Get the number of SSP triggers for this trigger number.
+ int sspTriggerCount = triggerStats.getSSPSimulatedTriggers();
+
+ System.out.println();
+ System.out.printf("\tTrigger %d Individual Cut Failure Rate:%n", (triggerNum + 1));
+ System.out.printf("\t\tUmatched Triggers :: %" + spaces + "d%n", triggerStats.getUnmatchedSSPSimulatedTriggers());
+ if(sspTriggerCount == 0) {
+ System.out.printf("\t\tPair Energy Sum :: %" + spaces + "d / %" + spaces + "d%n",
+ triggerStats.getSSPCutFailures(ENERGY_SUM), sspTriggerCount);
+ System.out.printf("\t\tPair Energy Difference :: %" + spaces + "d / %" + spaces + "d%n",
+ triggerStats.getSSPCutFailures(ENERGY_DIFF), sspTriggerCount);
+ System.out.printf("\t\tPair Energy Slope :: %" + spaces + "d / %" + spaces + "d%n",
+ triggerStats.getSSPCutFailures(ENERGY_SLOPE), sspTriggerCount);
+ System.out.printf("\t\tPair Coplanarity :: %" + spaces + "d / %" + spaces + "d%n",
+ triggerStats.getSSPCutFailures(COPLANARITY), sspTriggerCount);
+ } else {
+ System.out.printf("\t\tPair Energy Sum :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
+ triggerStats.getSSPCutFailures(ENERGY_SUM), sspTriggerCount,
+ (100.0 * triggerStats.getSSPCutFailures(ENERGY_SUM) / sspTriggerCount));
+ System.out.printf("\t\tPair Energy Difference :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
+ triggerStats.getSSPCutFailures(ENERGY_DIFF), sspTriggerCount,
+ (100.0 * triggerStats.getSSPCutFailures(ENERGY_DIFF) / sspTriggerCount));
+ System.out.printf("\t\tPair Energy Slope :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
+ triggerStats.getSSPCutFailures(ENERGY_SLOPE), sspTriggerCount,
+ (100.0 * triggerStats.getSSPCutFailures(ENERGY_SLOPE) / sspTriggerCount));
+ System.out.printf("\t\tPair Coplanarity :: %" + spaces + "d / %" + spaces + "d (%7.3f%%)%n",
+ triggerStats.getSSPCutFailures(COPLANARITY), sspTriggerCount,
+ (100.0 * triggerStats.getSSPCutFailures(COPLANARITY) / sspTriggerCount));
+ }
+ }
+ }
+ }
+
+ // Print out the trigger efficiency table.
+ System.out.println();
+ globalStats.getTriggerStats().printEfficiencyTable();
+ }
+
+ /**
+ * Checks whether all of the hits in a cluster are within the safe
+ * region of the FADC output window.
+ * @param reconCluster - The cluster to check.
+ * @return Returns <code>true</code> if the cluster is safe and
+ * returns <code>false</code> otherwise.
+ */
+ private final boolean isVerifiable(Cluster reconCluster) {
+ return TriggerDiagnosticUtil.isVerifiable(reconCluster, nsa, nsb, windowWidth);
+ }
+
+ /**
+ * Generates a <code>List</code> collection that contains a set
+ * of <code>ArrayList</code> collections representing a unique
+ * permutation of the entries in the argument.
+ * @param values - A collection of the entries to be permuted.
+ * @return Returns a list of lists representing the permutations.
+ */
+ private static final List<List<Pair<Cluster, SSPCluster>>> getPermutations(List<Cluster> reconClusters, List<SSPCluster> sspClusters) {
+ // Store the SSP cluster permutations.
+ List<List<SSPCluster>> permList = new ArrayList<List<SSPCluster>>();
+
+ // Make sure that the two lists are the same size.
+ int reconSize = reconClusters.size();
+ int sspSize = sspClusters.size();
+ while(sspClusters.size() < reconClusters.size()) {
+ sspClusters.add(null);
+ }
+ while(reconClusters.size() < sspClusters.size()) {
+ reconClusters.add(null);
+ }
+
+ // Get the SSP cluster permutations.
+ permute(new ArrayList<SSPCluster>(0), sspClusters, permList);
+
+ // Create pairs from the permutations.
+ List<List<Pair<Cluster, SSPCluster>>> pairList = new ArrayList<List<Pair<Cluster, SSPCluster>>>();
+ for(List<SSPCluster> permutation : permList) {
+ List<Pair<Cluster, SSPCluster>> pairs = new ArrayList<Pair<Cluster, SSPCluster>>(reconClusters.size());
+
+ for(int clusterIndex = 0; (clusterIndex < reconClusters.size() && clusterIndex < permutation.size()); clusterIndex++) {
+ pairs.add(new Pair<Cluster, SSPCluster>(reconClusters.get(clusterIndex), permutation.get(clusterIndex)));
+ }
+
+ pairList.add(pairs);
+ }
+
+ // Remove the extra values.
+ for(int i = sspClusters.size() - 1; i >= sspSize; i--) { sspClusters.remove(i); }
+ for(int i = reconClusters.size() - 1; i >= reconSize; i--) { reconClusters.remove(i); }
+
+ // Return the pairs.
+ return pairList;
+ }
+
+ /**
+ * Recursive method for permuting all entries in the argument
+ * collection <code>remainingValues</code> into the argument
+ * <code>permutedValues</code> values. Completed permutations are
+ * placed in the argument <code>permList</code>.
+ * @param permutedValues - List to store entries that have already
+ * been permuted.
+ * @param remainingValues - List to store entries that need to be
+ * permuted.
+ * @param permList - List to store completed permutations.
+ */
+ private static final void permute(List<SSPCluster> permutedValues, List<SSPCluster> remainingValues, List<List<SSPCluster>> permList) {
+ // If the list of entries that still need to be sorted is empty,
+ // then there is nothing to sort. Just return and empty list.
+ if(remainingValues.isEmpty()) { return; }
+
+ // If there is only one value left in the list of entries that
+ // still need to be sorted, then just add it to the permutation
+ // list and return it.
+ else if(remainingValues.size() <= 1) {
+ // Add the last entry.
+ permutedValues.add(remainingValues.get(0));
+
+ // Add the permutation to the list of completed permutations.
+ permList.add(permutedValues);
+ }
+
+ // Otherwise, continue to get all possible permutations.
+ else {
+ // Iterate over the entries that have not been permuted.
+ for(int i = 0; i < remainingValues.size(); i++) {
+ // Make new lists to contain the permutations.
+ List<SSPCluster> newPermList = new ArrayList<SSPCluster>(permutedValues.size() + 1);
+ List<SSPCluster> newRemainList = new ArrayList<SSPCluster>(remainingValues.size());
+
+ // Copy the current permuted entries to the new list
+ // and one value from the list of entries that have
+ // not been permuted yet.
+ newPermList.addAll(permutedValues);
+ newPermList.add(remainingValues.get(i));
+
+ // The new list of entries that have not been permuted
+ // should be identical, except it should now be missing
+ // the entry that was moved.
+ for(int index = 0; index < remainingValues.size(); index++) {
+ if(index != i) { newRemainList.add(remainingValues.get(index)); }
+ }
+
+ // Repeat the process with the new lists.
+ permute(newPermList, newRemainList, permList);
+ }
+ }
+ }
+
+ /**
+ * Compares two cluster matching events and finds the one that has
+ * the better results. Note that this will only return results that
+ * make sense if both of the events represent different permutations
+ * of the same set of clusters. Comparing events with different sets
+ * of clusters will produce meaningless results.
+ * @param firstEvent - The first cluster matching event,
+ * @param secondEvent - The second cluster matching event.
+ * @return Returns the cluster matching event that is better.
+ */
+ private static final DetailedClusterEvent getBestPermutation(DetailedClusterEvent firstEvent, DetailedClusterEvent secondEvent) {
+ // If both permutations are null, return that.
+ if(firstEvent == null && secondEvent == null) {
+ return null;
+ }
+
+ // If one permutation is null, it is not the best.
+ if(firstEvent == null) { return secondEvent; }
+ else if(secondEvent == null) { return firstEvent; }
+
+ // A permutation is better if it has more matches.
+ if(firstEvent.getMatches() > secondEvent.getMatches()) { return firstEvent; }
+ else if(secondEvent.getMatches() > firstEvent.getMatches()) { return secondEvent; }
+
+ // Otherwise, the permutation with the least energy failures is
+ // the better permutation.
+ if(firstEvent.getEnergyFailures() < secondEvent.getEnergyFailures()) { return firstEvent; }
+ else if(secondEvent.getEnergyFailures() < firstEvent.getEnergyFailures()) { return secondEvent; }
+
+ // If both these values are the same, then the events are identical.
+ return firstEvent;
+ }
+
+ /**
+ * Determines the number of spaces needed to render the longest of
+ * a series of integers as a string.
+ * @param vals - The series of integers.
+ * @return Returns the number of spaces needed to render the longest
+ * integer as a base-10 string.
+ */
+ private static final int getPrintSpaces(int... vals) {
+ // Track the largest value.
+ int largest = 0;
+
+ // Iterate over the arguments and find the largest.
+ for(int val : vals) {
+ // Get the length of the string.
+ int length = TriggerDiagnosticUtil.getDigits(val);
+
+ // If it is larger, track it.
+ if(length > largest) { largest = length; }
+ }
+
+ // Return the longer one.
+ return largest;
+ }
+
+ /**
+ * Gets the position of the source of a <code>Trigger</code> object
+ * as text. This method only supports trigger sources of the types
+ * <code>SSPCluster</code>, <code>Cluster</code>, and arrays of size
+ * two of either type.
+ * @param trigger - The trigger from which to obtain the source.
+ * @return Returns the source of the trigger as a <code>String</code>
+ * object.
+ * @throws IllegalArgumentException Occurs if the source of the
+ * trigger is not any of the supported types.
+ */
+ private static final String triggerPositionString(Trigger<?> trigger) throws IllegalArgumentException {
+ // Get the trigger source.
+ Object source = trigger.getTriggerSource();
+
+ // Handle valid trigger sources.
+ if(source instanceof SSPCluster) {
+ return TriggerDiagnosticUtil.clusterPositionString((SSPCluster) source);
+ } else if(source instanceof Cluster) {
+ return TriggerDiagnosticUtil.clusterPositionString((Cluster) source);
+ } else if(source instanceof SSPCluster[]) {
+ SSPCluster[] sourcePair = (SSPCluster[]) source;
+ if(sourcePair.length == 2) {
+ return String.format("%s, %s", TriggerDiagnosticUtil.clusterPositionString(sourcePair[0]),
+ TriggerDiagnosticUtil.clusterPositionString(sourcePair[1]));
+ }
+ } else if(source instanceof Cluster[]) {
+ Cluster[] sourcePair = (Cluster[]) source;
+ if(sourcePair.length == 2) {
+ return String.format("%s, %s", TriggerDiagnosticUtil.clusterPositionString(sourcePair[0]),
+ TriggerDiagnosticUtil.clusterPositionString(sourcePair[1]));
+ }
+ }
+
+ // Otherwise, the source type is unrecognized. Throw an error.
+ throw new IllegalArgumentException(String.format("Trigger source type \"%s\" is not supported.",
+ trigger.getTriggerSource().getClass().getSimpleName()));
+ }
+
+ /**
+ * Gets the time of a simulated trigger object. Method supports
+ * triggers with source objects of type <code>SSPCluster</code>,
+ * <code>Cluster</code>, and arrays of size two composed of either
+ * object type.
+ * @param trigger - The trigger.
+ * @return Returns the time at which the trigger occurred.
+ * @throws IllegalArgumentException Occurs if the trigger source
+ * is not a supported type.
+ */
+ private static final double getTriggerTime(Trigger<?> trigger) throws IllegalArgumentException {
+ // Get the trigger source.
+ Object source = trigger.getTriggerSource();
+
+ // Get the trigger time for supported trigger types.
+ if(source instanceof SSPCluster) {
+ return ((SSPCluster) source).getTime();
+ } else if(source instanceof Cluster) {
+ return TriggerDiagnosticUtil.getClusterTime((Cluster) source);
+ } else if(source instanceof SSPCluster[]) {
+ // Get the pair.
+ SSPCluster[] sourcePair = (SSPCluster[]) source;
+
+ // Get the time of the bottom cluster.
+ if(sourcePair.length == 2) {
+ if(sourcePair[0].getYIndex() < 0) { return sourcePair[0].getTime(); }
+ else if(sourcePair[1].getYIndex() < 0) { return sourcePair[1].getTime(); }
+ else { throw new IllegalArgumentException("Cluster pairs must be formed of a top/bottom pair."); }
+ }
+ else { throw new IllegalArgumentException("Cluster pairs must be of size 2."); }
+ } else if(source instanceof Cluster[]) {
+ // Get the pair.
+ Cluster[] sourcePair = (Cluster[]) source;
+ int[] iy = {
+ TriggerDiagnosticUtil.getYIndex(sourcePair[0]),
+ TriggerDiagnosticUtil.getYIndex(sourcePair[1])
+ };
+
+ // Get the time of the bottom cluster.
+ if(sourcePair.length == 2) {
+ if(iy[0] < 0) { return TriggerDiagnosticUtil.getClusterTime(sourcePair[0]); }
+ else if(iy[1] < 0) { return TriggerDiagnosticUtil.getClusterTime(sourcePair[1]); }
+ else { throw new IllegalArgumentException("Cluster pairs must be formed of a top/bottom pair."); }
+ }
+ else { throw new IllegalArgumentException("Cluster pairs must be of size 2."); }
+ }
+
+ // If the source type is unrecognized, throw an exception.
+ throw new IllegalArgumentException(String.format("Trigger source type \"%\" is not supported.",
+ source.getClass().getSimpleName()));
+ }
+
+ /**
+ * Checks if a simulated trigger and an SSP trigger match. Note
+ * that only certain types can be compared. These are:
+ * <ul><li><code>SinglesTrigger<?> --> SSPSinglesTrigger</code></li>
+ * <li><code>PairTrigger<?> --> SSPPairTrigger</code></li></ul>
+ * @param simTrigger - The simulated trigger.
+ * @param sspTrigger - The SSP bank trigger.
+ * @return Returns an array of <code>boolean</code> primitives that
+ * indicate which cuts passed and which failed.
+ */
+ private static final boolean[] triggerCutMatch(Trigger<?> simTrigger, SSPTrigger sspTrigger) {
+ // Check that the cuts match for supported trigger types.
+ if(simTrigger instanceof SinglesTrigger && sspTrigger instanceof SSPSinglesTrigger) {
+ // Create an array to store the cut checks.
+ boolean[] cutMatch = new boolean[3];
+
+ // Cast the triggers.
+ SinglesTrigger<?> simSingles = (SinglesTrigger<?>) simTrigger;
+ SSPSinglesTrigger sspSingles = (SSPSinglesTrigger) sspTrigger;
+
+ // Perform the check.
+ cutMatch[ENERGY_MIN] = (simSingles.getStateClusterEnergyLow() == sspSingles.passCutEnergyMin());
+ cutMatch[ENERGY_MAX] = (simSingles.getStateClusterEnergyHigh() == sspSingles.passCutEnergyMax());
+ cutMatch[HIT_COUNT] = (simSingles.getStateHitCount() == sspSingles.passCutHitCount());
+
+ // Return the match array.
+ return cutMatch;
+ } else if(simTrigger instanceof PairTrigger && sspTrigger instanceof SSPPairTrigger) {
+ // Create an array to store the cut checks.
+ boolean[] cutMatch = new boolean[4];
+
+ // Cast the triggers.
+ PairTrigger<?> simPair = (PairTrigger<?>) simTrigger;
+ SSPPairTrigger sspPair = (SSPPairTrigger) sspTrigger;
+
+ // Perform the check.
+ cutMatch[ENERGY_SUM] = (simPair.getStateEnergySum() == sspPair.passCutEnergySum());
+ cutMatch[ENERGY_DIFF] = (simPair.getStateEnergyDifference() == sspPair.passCutEnergyDifference());
+ cutMatch[ENERGY_SLOPE] = (simPair.getStateEnergySlope() == sspPair.passCutEnergySlope());
+ cutMatch[COPLANARITY] = (simPair.getStateCoplanarity() == sspPair.passCutCoplanarity());
+
+ // Return the match array.
+ return cutMatch;
+ }
+
+ // If this point is reached, the triggers are not of a supported
+ // type for cut comparison. Produce an exception.
+ throw new IllegalArgumentException(String.format("Triggers of type \"%s\" can not be cut-matched with triggers of type \"%s\".",
+ simTrigger.getClass().getSimpleName(), sspTrigger.getClass().getSimpleName()));
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerTurnOnDriver.java Wed Mar 9 11:43:24 2016
@@ -70,9 +70,9 @@
public TriggerTurnOnDriver() {
}
- public void setShowPlots(boolean showPlots) {
- this.showPlots = showPlots;
- }
+ public void setShowPlots(boolean showPlots) {
+ this.showPlots = showPlots;
+ }
@Override
protected void detectorChanged(Detector detector) {
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterEvent.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterEvent.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterEvent.java Wed Mar 9 11:43:24 2016
@@ -9,104 +9,104 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class ClusterEvent extends ClusterStatModule {
- /**
- * Fuses another <code>ClusterEvent</code> with this object. The
- * other event's cluster pairs and states will be added to those
- * already in this event.
- * @param event - The event to fuse.
- */
- public void addEvent(ClusterEvent event) {
- // If the event is null, do nothing.
- if(event == null) { return; }
-
- // Add the values stored in the argument event to the counters
- // in this event.
- sspClusters += event.sspClusters;
- reconClusters += event.reconClusters;
- matches += event.matches;
- failEnergy += event.failEnergy;
- failPosition += event.failPosition;
- failHitCount += event.failHitCount;
- }
-
- /**
- * Indicates whether at least one cluster pair in the event created
- * a fail state.
- * @return Returns <code>true</code> if not all clusters matched and
- * <code>false</code> otherwise.
- */
- public boolean isFailState() {
- return (failEnergy > 0) || (failHitCount > 0) || (failTime > 0) || (failPosition > 0);
- }
-
- /**
- * Notes that a reconstructed cluster and SSP cluster pair failed
- * due to energy.
- */
- public void pairFailEnergy() {
- failEnergy++;
- }
-
- /**
- * Notes that a reconstructed cluster and SSP cluster pair failed
- * due to hit count.
- */
- public void pairFailHitCount() {
- failHitCount++;
- }
-
- /**
- * Notes that a reconstructed cluster and SSP cluster pair failed
- * due to position.
- */
- public void pairFailPosition() {
- failPosition++;
- }
-
- /**
- * Notes that one or more reconstructed cluster and SSP cluster pair
- * failed due to position.
- * @param count - The number of events that failed in this manner.
- */
- public void pairFailPosition(int count) {
- // negative values are non-physical.
- if(count < 0) {
- throw new IllegalArgumentException("Cluster failure counts must be non-negative.");
- }
-
- // Increment the count.
- failPosition += count;
- }
-
- /**
- * Notes that a reconstructed cluster and SSP cluster pair failed
- * due to time.
- */
- public void pairFailTime() {
- failTime++;
- }
-
- /**
- * Notes that a reconstructed cluster and SSP cluster pair was
- * successfully matched.
- */
- public void pairMatch() {
- matches++;
- }
-
- /**
- * Increments the number of reconstructed FADC clusters seen.
- * @param count - The number of clusters seen.
- */
- public void sawReconClusters(int count) {
- reconClusters += count;
- }
-
- /**
- * Increments the number of SSP bank clusters seen.
- * @param count - The number of clusters seen.
- */
- public void sawSSPClusters(int count) {
- sspClusters += count;
- }
+ /**
+ * Fuses another <code>ClusterEvent</code> with this object. The
+ * other event's cluster pairs and states will be added to those
+ * already in this event.
+ * @param event - The event to fuse.
+ */
+ public void addEvent(ClusterEvent event) {
+ // If the event is null, do nothing.
+ if(event == null) { return; }
+
+ // Add the values stored in the argument event to the counters
+ // in this event.
+ sspClusters += event.sspClusters;
+ reconClusters += event.reconClusters;
+ matches += event.matches;
+ failEnergy += event.failEnergy;
+ failPosition += event.failPosition;
+ failHitCount += event.failHitCount;
+ }
+
+ /**
+ * Indicates whether at least one cluster pair in the event created
+ * a fail state.
+ * @return Returns <code>true</code> if not all clusters matched and
+ * <code>false</code> otherwise.
+ */
+ public boolean isFailState() {
+ return (failEnergy > 0) || (failHitCount > 0) || (failTime > 0) || (failPosition > 0);
+ }
+
+ /**
+ * Notes that a reconstructed cluster and SSP cluster pair failed
+ * due to energy.
+ */
+ public void pairFailEnergy() {
+ failEnergy++;
+ }
+
+ /**
+ * Notes that a reconstructed cluster and SSP cluster pair failed
+ * due to hit count.
+ */
+ public void pairFailHitCount() {
+ failHitCount++;
+ }
+
+ /**
+ * Notes that a reconstructed cluster and SSP cluster pair failed
+ * due to position.
+ */
+ public void pairFailPosition() {
+ failPosition++;
+ }
+
+ /**
+ * Notes that one or more reconstructed cluster and SSP cluster pair
+ * failed due to position.
+ * @param count - The number of events that failed in this manner.
+ */
+ public void pairFailPosition(int count) {
+ // negative values are non-physical.
+ if(count < 0) {
+ throw new IllegalArgumentException("Cluster failure counts must be non-negative.");
+ }
+
+ // Increment the count.
+ failPosition += count;
+ }
+
+ /**
+ * Notes that a reconstructed cluster and SSP cluster pair failed
+ * due to time.
+ */
+ public void pairFailTime() {
+ failTime++;
+ }
+
+ /**
+ * Notes that a reconstructed cluster and SSP cluster pair was
+ * successfully matched.
+ */
+ public void pairMatch() {
+ matches++;
+ }
+
+ /**
+ * Increments the number of reconstructed FADC clusters seen.
+ * @param count - The number of clusters seen.
+ */
+ public void sawReconClusters(int count) {
+ reconClusters += count;
+ }
+
+ /**
+ * Increments the number of SSP bank clusters seen.
+ * @param count - The number of clusters seen.
+ */
+ public void sawSSPClusters(int count) {
+ sspClusters += count;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterMatchedPair.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterMatchedPair.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterMatchedPair.java Wed Mar 9 11:43:24 2016
@@ -14,114 +14,114 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class ClusterMatchedPair extends Pair<Cluster, SSPCluster> {
- // CLass variables.
- private final byte state;
-
- /**
- * Instantiates a new <code>ClusterMatchedPair</code> object from
- * the two indicated clusters and marks their match state.
- * @param reconCluster - The reconstructed cluster.
- * @param sspCluster - The SSP cluster.
- * @param state - The pair match state.
- */
- public ClusterMatchedPair(Cluster reconCluster, SSPCluster sspCluster, byte state) {
- // Set the cluster pairs.
- super(reconCluster, sspCluster);
-
- // If the state is defined, set it. Otherwise, it is unknown.
- if(state == TriggerDiagnosticUtil.CLUSTER_STATE_MATCHED
- || state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_POSITION
- || state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_ENERGY
- || state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_HIT_COUNT) {
- this.state = state;
- } else {
- this.state = TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_UNKNOWN;
- }
- }
-
- /**
- * Gets the reconstructed cluster of the pair.
- * @return Returns the reconstructed cluster a <code>Cluster</cod>
- * object.
- */
- public Cluster getReconstructedCluster() {
- return getFirstElement();
- }
-
- /**
- * Gets the SSP cluster of the pair.
- * @return Returns the SSP cluster as an <code>SSPCluster</code>
- * object.
- */
- public SSPCluster getSSPCluster() {
- return getSecondElement();
- }
-
- /**
- * Gets the raw state identifier.
- * @return Returns the state identifier as a <code>byte</code>
- * primitive. Valid identifiers are defined in the class
- * <code>TriggerDiagnosticUtil</code>.
- */
- public byte getState() {
- return state;
- }
-
- /**
- * Indicates whether the recon/SSP pair failed to not being close
- * enough in energy.
- * @return Returns <code>true</code> if the pair match state is an
- * energy fail state and <code>false</code> otherwise.
- */
- public boolean isEnergyFailState() {
- return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_ENERGY);
- }
-
- /**
- * Indicates whether the recon/SSP pair failed to match due to not
- * being close enough in hit count.
- * @return Returns <code>true</code> if the pair match state is a
- * hit count fail state and <code>false</code> otherwise.
- */
- public boolean isHitCountFailState() {
- return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_HIT_COUNT);
- }
-
- /**
- * Indicates whether the recon/SSP pair matched.
- * @return Returns <code>true</code> if the pair match state is a
- * match state and <code>false</code> otherwise.
- */
- public boolean isMatch() {
- return (state == TriggerDiagnosticUtil.CLUSTER_STATE_MATCHED);
- }
-
- /**
- * Indicates whether the recon/SSP pair failed to match due to the
- * cluster positions not aligning.
- * @return Returns <code>true</code> if the pair match state is a
- * position fail state and <code>false</code> otherwise.
- */
- public boolean isPositionFailState() {
- return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_POSITION);
- }
-
- /**
- * Indicates whether the recon/SSP pair failed to match due to the
- * cluster time-stamps not aligning.
- * @return Returns <code>true</code> if the pair match state is a
- * time fail state and <code>false</code> otherwise.
- */
- public boolean isTimeFailState() {
- return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_TIME);
- }
-
- /**
- * Indicates whether the recon/SSP pair has no known match state.
- * @return Returns <code>true</code> if the pair match state is
- * unknown and <code>false</code> otherwise.
- */
- public boolean isUnknownState() {
- return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_UNKNOWN);
- }
+ // CLass variables.
+ private final byte state;
+
+ /**
+ * Instantiates a new <code>ClusterMatchedPair</code> object from
+ * the two indicated clusters and marks their match state.
+ * @param reconCluster - The reconstructed cluster.
+ * @param sspCluster - The SSP cluster.
+ * @param state - The pair match state.
+ */
+ public ClusterMatchedPair(Cluster reconCluster, SSPCluster sspCluster, byte state) {
+ // Set the cluster pairs.
+ super(reconCluster, sspCluster);
+
+ // If the state is defined, set it. Otherwise, it is unknown.
+ if(state == TriggerDiagnosticUtil.CLUSTER_STATE_MATCHED
+ || state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_POSITION
+ || state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_ENERGY
+ || state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_HIT_COUNT) {
+ this.state = state;
+ } else {
+ this.state = TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_UNKNOWN;
+ }
+ }
+
+ /**
+ * Gets the reconstructed cluster of the pair.
+ * @return Returns the reconstructed cluster a <code>Cluster</cod>
+ * object.
+ */
+ public Cluster getReconstructedCluster() {
+ return getFirstElement();
+ }
+
+ /**
+ * Gets the SSP cluster of the pair.
+ * @return Returns the SSP cluster as an <code>SSPCluster</code>
+ * object.
+ */
+ public SSPCluster getSSPCluster() {
+ return getSecondElement();
+ }
+
+ /**
+ * Gets the raw state identifier.
+ * @return Returns the state identifier as a <code>byte</code>
+ * primitive. Valid identifiers are defined in the class
+ * <code>TriggerDiagnosticUtil</code>.
+ */
+ public byte getState() {
+ return state;
+ }
+
+ /**
+ * Indicates whether the recon/SSP pair failed to not being close
+ * enough in energy.
+ * @return Returns <code>true</code> if the pair match state is an
+ * energy fail state and <code>false</code> otherwise.
+ */
+ public boolean isEnergyFailState() {
+ return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_ENERGY);
+ }
+
+ /**
+ * Indicates whether the recon/SSP pair failed to match due to not
+ * being close enough in hit count.
+ * @return Returns <code>true</code> if the pair match state is a
+ * hit count fail state and <code>false</code> otherwise.
+ */
+ public boolean isHitCountFailState() {
+ return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_HIT_COUNT);
+ }
+
+ /**
+ * Indicates whether the recon/SSP pair matched.
+ * @return Returns <code>true</code> if the pair match state is a
+ * match state and <code>false</code> otherwise.
+ */
+ public boolean isMatch() {
+ return (state == TriggerDiagnosticUtil.CLUSTER_STATE_MATCHED);
+ }
+
+ /**
+ * Indicates whether the recon/SSP pair failed to match due to the
+ * cluster positions not aligning.
+ * @return Returns <code>true</code> if the pair match state is a
+ * position fail state and <code>false</code> otherwise.
+ */
+ public boolean isPositionFailState() {
+ return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_POSITION);
+ }
+
+ /**
+ * Indicates whether the recon/SSP pair failed to match due to the
+ * cluster time-stamps not aligning.
+ * @return Returns <code>true</code> if the pair match state is a
+ * time fail state and <code>false</code> otherwise.
+ */
+ public boolean isTimeFailState() {
+ return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_TIME);
+ }
+
+ /**
+ * Indicates whether the recon/SSP pair has no known match state.
+ * @return Returns <code>true</code> if the pair match state is
+ * unknown and <code>false</code> otherwise.
+ */
+ public boolean isUnknownState() {
+ return (state == TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_UNKNOWN);
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterStatModule.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterStatModule.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/ClusterStatModule.java Wed Mar 9 11:43:24 2016
@@ -7,100 +7,100 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class ClusterStatModule {
- // Track cluster statistics.
- protected int sspClusters = 0;
- protected int reconClusters = 0;
- protected int matches = 0;
- protected int failEnergy = 0;
- protected int failPosition = 0;
- protected int failHitCount = 0;
- protected int failTime = 0;
-
- /**
- * Instantiates a <code>ClusterStatModule</code> with no statistics
- * stored.
- */
- ClusterStatModule() { }
-
- /**
- * Clears all statistical information and resets the object of its
- * default, empty state.
- */
- void clear() {
- sspClusters = 0;
- reconClusters = 0;
- matches = 0;
- failEnergy = 0;
- failPosition = 0;
- failHitCount = 0;
- failTime = 0;
- }
-
- @Override
- public ClusterStatModule clone() {
- // Create a clone.
- ClusterStatModule clone = new ClusterStatModule();
-
- // Copy the statistical values to the clone.
- clone.sspClusters = sspClusters;
- clone.reconClusters = reconClusters;
- clone.matches = matches;
- clone.failEnergy = failEnergy;
- clone.failPosition = failPosition;
- clone.failHitCount = failHitCount;
- clone.failTime = failTime;
-
- // Return the clone.
- return clone;
- }
-
- /**
- * Gets the number of cluster pairs stored in this event that are
- * marked with energy fail states.
- * @return Returns the number of instances of this state as an
- * <code>int</code> primitive.
- */
- public int getEnergyFailures() {
- return failEnergy;
- }
-
- /**
- * Gets the number of cluster pairs stored in this event that are
- * marked with hit count fail states.
- * @return Returns the number of instances of this state as an
- * <code>int</code> primitive.
- */
- public int getHitCountFailures() {
- return failHitCount;
- }
-
- /**
- * Gets the number of cluster pairs stored in this event that are
- * marked with position fail states.
- * @return Returns the number of instances of this state as an
- * <code>int</code> primitive.
- */
- public int getMatches() {
- return matches;
- }
-
- /**
- * Gets the number of cluster pairs stored in this event that are
- * marked with position fail states.
- * @return Returns the number of instances of this state as an
- * <code>int</code> primitive.
- */
- public int getPositionFailures() {
- return failPosition;
- }
-
- /**
- * Gets the total number of verifiable reconstructed clusters seen.
+ // Track cluster statistics.
+ protected int sspClusters = 0;
+ protected int reconClusters = 0;
+ protected int matches = 0;
+ protected int failEnergy = 0;
+ protected int failPosition = 0;
+ protected int failHitCount = 0;
+ protected int failTime = 0;
+
+ /**
+ * Instantiates a <code>ClusterStatModule</code> with no statistics
+ * stored.
+ */
+ ClusterStatModule() { }
+
+ /**
+ * Clears all statistical information and resets the object of its
+ * default, empty state.
+ */
+ void clear() {
+ sspClusters = 0;
+ reconClusters = 0;
+ matches = 0;
+ failEnergy = 0;
+ failPosition = 0;
+ failHitCount = 0;
+ failTime = 0;
+ }
+
+ @Override
+ public ClusterStatModule clone() {
+ // Create a clone.
+ ClusterStatModule clone = new ClusterStatModule();
+
+ // Copy the statistical values to the clone.
+ clone.sspClusters = sspClusters;
+ clone.reconClusters = reconClusters;
+ clone.matches = matches;
+ clone.failEnergy = failEnergy;
+ clone.failPosition = failPosition;
+ clone.failHitCount = failHitCount;
+ clone.failTime = failTime;
+
+ // Return the clone.
+ return clone;
+ }
+
+ /**
+ * Gets the number of cluster pairs stored in this event that are
+ * marked with energy fail states.
+ * @return Returns the number of instances of this state as an
+ * <code>int</code> primitive.
+ */
+ public int getEnergyFailures() {
+ return failEnergy;
+ }
+
+ /**
+ * Gets the number of cluster pairs stored in this event that are
+ * marked with hit count fail states.
+ * @return Returns the number of instances of this state as an
+ * <code>int</code> primitive.
+ */
+ public int getHitCountFailures() {
+ return failHitCount;
+ }
+
+ /**
+ * Gets the number of cluster pairs stored in this event that are
+ * marked with position fail states.
+ * @return Returns the number of instances of this state as an
+ * <code>int</code> primitive.
+ */
+ public int getMatches() {
+ return matches;
+ }
+
+ /**
+ * Gets the number of cluster pairs stored in this event that are
+ * marked with position fail states.
+ * @return Returns the number of instances of this state as an
+ * <code>int</code> primitive.
+ */
+ public int getPositionFailures() {
+ return failPosition;
+ }
+
+ /**
+ * Gets the total number of verifiable reconstructed clusters seen.
* @return Returns the cluster count as an <code>int</code>
* primitive.
- */
+ */
public int getReconClusterCount() {
- return reconClusters;
+ return reconClusters;
}
/**
@@ -109,16 +109,16 @@
* primitive.
*/
public int getSSPClusterCount() {
- return sspClusters;
+ return sspClusters;
}
-
- /**
- * Gets the number of cluster pairs stored in this event that are
- * marked with time fail states.
- * @return Returns the number of instances of this state as an
- * <code>int</code> primitive.
- */
- public int getTimeFailures() {
- return failTime;
- }
+
+ /**
+ * Gets the number of cluster pairs stored in this event that are
+ * marked with time fail states.
+ * @return Returns the number of instances of this state as an
+ * <code>int</code> primitive.
+ */
+ public int getTimeFailures() {
+ return failTime;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/DetailedClusterEvent.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/DetailedClusterEvent.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/DetailedClusterEvent.java Wed Mar 9 11:43:24 2016
@@ -8,89 +8,89 @@
import org.lcsim.event.Cluster;
public class DetailedClusterEvent extends ClusterEvent {
- // Store all of the pairs.
- private List<ClusterMatchedPair> pairList = new ArrayList<ClusterMatchedPair>();
-
- /**
- * Fuses another <code>ClusterEvent</code> with this object. The
- * other event's cluster pairs and states will be added to those
- * already in this event.
- * @param event - The event to fuse.
- */
- public void addEvent(ClusterEvent event) {
- // Run the superclass method.
- super.addEvent(event);
-
- // If the event is null, do nothing.
- if(event == null) { return; }
-
- // Merge the list of cluster pairs, if applicable.
- if(event instanceof DetailedClusterEvent) {
- pairList.addAll(((DetailedClusterEvent) event).pairList);
- }
- }
-
- /**
- * Adds a reconstructed/SSP cluster pair and marks it as having an
- * energy fail state.
- * @param reconCluster - The reconstructed cluster.
- * @param sspCluster - The SSP cluster.
- */
- public void pairFailEnergy(Cluster reconCluster, SSPCluster sspCluster) {
- pairFailEnergy();
- pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_ENERGY));
- }
-
- /**
- * Adds a reconstructed/SSP cluster pair and marks it as having a
- * hit count fail state.
- * @param reconCluster - The reconstructed cluster.
- * @param sspCluster - The SSP cluster.
- */
- public void pairFailHitCount(Cluster reconCluster, SSPCluster sspCluster) {
- pairFailHitCount();
- pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_HIT_COUNT));
- }
-
- /**
- * Adds a reconstructed/SSP cluster pair and marks it as having a
- * position fail state.
- * @param reconCluster - The reconstructed cluster.
- * @param sspCluster - The SSP cluster.
- */
- public void pairFailPosition(Cluster reconCluster, SSPCluster sspCluster) {
- pairFailPosition();
- pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_POSITION));
- }
-
- /**
- * Adds a reconstructed/SSP cluster pair and marks it as having a
- * time fail state.
- * @param reconCluster - The reconstructed cluster.
- * @param sspCluster - The SSP cluster.
- */
- public void pairFailTime(Cluster reconCluster, SSPCluster sspCluster) {
- pairFailTime();
- pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_TIME));
- }
-
- /**
- * Adds a reconstructed/SSP cluster pair and marks it as having a
- * match state.
- * @param reconCluster - The reconstructed cluster.
- * @param sspCluster - The SSP cluster.
- */
- public void pairMatch(Cluster reconCluster, SSPCluster sspCluster) {
- pairMatch();
- pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_MATCHED));
- }
-
- /**
- * Gets a list of all matched cluster pairs and their match states.
- * @return Returns the matched cluster pairs as a <code>List</code>
- * of <code>ClusterMatchedPair</code> objects.
- */
- public List<ClusterMatchedPair> getClusterPairs() {
- return pairList;
- }
+ // Store all of the pairs.
+ private List<ClusterMatchedPair> pairList = new ArrayList<ClusterMatchedPair>();
+
+ /**
+ * Fuses another <code>ClusterEvent</code> with this object. The
+ * other event's cluster pairs and states will be added to those
+ * already in this event.
+ * @param event - The event to fuse.
+ */
+ public void addEvent(ClusterEvent event) {
+ // Run the superclass method.
+ super.addEvent(event);
+
+ // If the event is null, do nothing.
+ if(event == null) { return; }
+
+ // Merge the list of cluster pairs, if applicable.
+ if(event instanceof DetailedClusterEvent) {
+ pairList.addAll(((DetailedClusterEvent) event).pairList);
+ }
+ }
+
+ /**
+ * Adds a reconstructed/SSP cluster pair and marks it as having an
+ * energy fail state.
+ * @param reconCluster - The reconstructed cluster.
+ * @param sspCluster - The SSP cluster.
+ */
+ public void pairFailEnergy(Cluster reconCluster, SSPCluster sspCluster) {
+ pairFailEnergy();
+ pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_ENERGY));
+ }
+
+ /**
+ * Adds a reconstructed/SSP cluster pair and marks it as having a
+ * hit count fail state.
+ * @param reconCluster - The reconstructed cluster.
+ * @param sspCluster - The SSP cluster.
+ */
+ public void pairFailHitCount(Cluster reconCluster, SSPCluster sspCluster) {
+ pairFailHitCount();
+ pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_HIT_COUNT));
+ }
+
+ /**
+ * Adds a reconstructed/SSP cluster pair and marks it as having a
+ * position fail state.
+ * @param reconCluster - The reconstructed cluster.
+ * @param sspCluster - The SSP cluster.
+ */
+ public void pairFailPosition(Cluster reconCluster, SSPCluster sspCluster) {
+ pairFailPosition();
+ pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_POSITION));
+ }
+
+ /**
+ * Adds a reconstructed/SSP cluster pair and marks it as having a
+ * time fail state.
+ * @param reconCluster - The reconstructed cluster.
+ * @param sspCluster - The SSP cluster.
+ */
+ public void pairFailTime(Cluster reconCluster, SSPCluster sspCluster) {
+ pairFailTime();
+ pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_FAIL_TIME));
+ }
+
+ /**
+ * Adds a reconstructed/SSP cluster pair and marks it as having a
+ * match state.
+ * @param reconCluster - The reconstructed cluster.
+ * @param sspCluster - The SSP cluster.
+ */
+ public void pairMatch(Cluster reconCluster, SSPCluster sspCluster) {
+ pairMatch();
+ pairList.add(new ClusterMatchedPair(reconCluster, sspCluster, TriggerDiagnosticUtil.CLUSTER_STATE_MATCHED));
+ }
+
+ /**
+ * Gets a list of all matched cluster pairs and their match states.
+ * @return Returns the matched cluster pairs as a <code>List</code>
+ * of <code>ClusterMatchedPair</code> objects.
+ */
+ public List<ClusterMatchedPair> getClusterPairs() {
+ return pairList;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/DiagnosticSnapshot.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/DiagnosticSnapshot.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/DiagnosticSnapshot.java Wed Mar 9 11:43:24 2016
@@ -8,117 +8,117 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class DiagnosticSnapshot {
- // Store the TI trigger information.
- private int[] tiSeenAll = new int[6];
- private int[] tiSeenHierarchical = new int[6];
-
- // Store the statistical modules.
- private final GeneralStatModule generalStats;
- private final ClusterStatModule clusterStats;
- private final TriggerStatModule[] triggerStats = new TriggerStatModule[4];
-
- /**
- * Creates a snapshot of the trigger diagnostic results.
- * @param stats - The run statistical object.
- */
- DiagnosticSnapshot(RunDiagStats stats) {
- // Store the statistical modules.
- generalStats = stats.clone();
- clusterStats = stats.getClusterStats().clone();
- triggerStats[0] = stats.getTriggerStats().getSingles0Stats().clone();
- triggerStats[1] = stats.getTriggerStats().getSingles1Stats().clone();
- triggerStats[2] = stats.getTriggerStats().getPair0Stats().clone();
- triggerStats[3] = stats.getTriggerStats().getPair1Stats().clone();
-
- // Copy the TI trigger data.
- for(int triggerType = 0; triggerType < 6; triggerType++) {
- tiSeenAll[triggerType] = stats.getTriggerStats().getTITriggers(triggerType, false);
- tiSeenHierarchical[triggerType] = stats.getTriggerStats().getTITriggers(triggerType, true);
- }
- }
-
- /**
- * Gets the general run statistics.
- * @return Returns a <code>GeneralStatModule</code> object that
- * contains the statistics.
- */
- public GeneralStatModule getGeneralStats() {
- return generalStats;
- }
-
- /**
- * Gets the cluster statistics.
- * @return Returns a <code>ClusterStatModule</code> object that
- * contains the statistics.
- */
- public ClusterStatModule getClusterStats() {
- return clusterStats;
- }
-
- /**
- * Gets the singles 0 trigger statistics.
- * @return Returns a <code>TriggerStatModule</code> object that
- * contains the statistics.
- */
- public TriggerStatModule getSingles0Stats() {
- return triggerStats[0];
- }
-
- /**
- * Gets the singles 1 trigger statistics.
- * @return Returns a <code>TriggerStatModule</code> object that
- * contains the statistics.
- */
- public TriggerStatModule getSingles1Stats() {
- return triggerStats[1];
- }
-
- /**
- * Gets the pair 0 trigger statistics.
- * @return Returns a <code>TriggerStatModule</code> object that
- * contains the statistics.
- */
- public TriggerStatModule getPair0Stats() {
- return triggerStats[2];
- }
-
- /**
- * Gets the pair 1 trigger statistics.
- * @return Returns a <code>TriggerStatModule</code> object that
- * contains the statistics.
- */
- public TriggerStatModule getPair1Stats() {
- return triggerStats[3];
- }
-
- /**
- * Gets the total number of events where the TI reported a trigger
- * of the specified type.
- * @param triggerID - The identifier for the type of trigger.
- * @param unique - <code>true</code> returns only the number of
- * events where this trigger type was the <i>only</i> type seen by
- * the TI while <code>false</code> returns the number of events
- * that saw this trigger type without regards for other trigger
- * flags.
- * @return Returns the count as an <code>int</code>.
- */
- public int getTITriggers(int triggerID, boolean hierarchical) {
- // Verify the trigger type.
- validateTriggerType(triggerID);
-
- // Increment the counters.
- if(hierarchical) { return tiSeenHierarchical[triggerID]; }
- else { return tiSeenAll[triggerID]; }
- }
-
- /**
- * Produces an exception if the argument trigger type is not of a
- * supported type.
- * @param triggerType - The trigger type to verify.
- */
- private static final void validateTriggerType(int triggerType) {
- if(triggerType < 0 || triggerType > 5) {
- throw new IndexOutOfBoundsException(String.format("Trigger type \"%d\" is not supported.", triggerType));
- }
- }
+ // Store the TI trigger information.
+ private int[] tiSeenAll = new int[6];
+ private int[] tiSeenHierarchical = new int[6];
+
+ // Store the statistical modules.
+ private final GeneralStatModule generalStats;
+ private final ClusterStatModule clusterStats;
+ private final TriggerStatModule[] triggerStats = new TriggerStatModule[4];
+
+ /**
+ * Creates a snapshot of the trigger diagnostic results.
+ * @param stats - The run statistical object.
+ */
+ DiagnosticSnapshot(RunDiagStats stats) {
+ // Store the statistical modules.
+ generalStats = stats.clone();
+ clusterStats = stats.getClusterStats().clone();
+ triggerStats[0] = stats.getTriggerStats().getSingles0Stats().clone();
+ triggerStats[1] = stats.getTriggerStats().getSingles1Stats().clone();
+ triggerStats[2] = stats.getTriggerStats().getPair0Stats().clone();
+ triggerStats[3] = stats.getTriggerStats().getPair1Stats().clone();
+
+ // Copy the TI trigger data.
+ for(int triggerType = 0; triggerType < 6; triggerType++) {
+ tiSeenAll[triggerType] = stats.getTriggerStats().getTITriggers(triggerType, false);
+ tiSeenHierarchical[triggerType] = stats.getTriggerStats().getTITriggers(triggerType, true);
+ }
+ }
+
+ /**
+ * Gets the general run statistics.
+ * @return Returns a <code>GeneralStatModule</code> object that
+ * contains the statistics.
+ */
+ public GeneralStatModule getGeneralStats() {
+ return generalStats;
+ }
+
+ /**
+ * Gets the cluster statistics.
+ * @return Returns a <code>ClusterStatModule</code> object that
+ * contains the statistics.
+ */
+ public ClusterStatModule getClusterStats() {
+ return clusterStats;
+ }
+
+ /**
+ * Gets the singles 0 trigger statistics.
+ * @return Returns a <code>TriggerStatModule</code> object that
+ * contains the statistics.
+ */
+ public TriggerStatModule getSingles0Stats() {
+ return triggerStats[0];
+ }
+
+ /**
+ * Gets the singles 1 trigger statistics.
+ * @return Returns a <code>TriggerStatModule</code> object that
+ * contains the statistics.
+ */
+ public TriggerStatModule getSingles1Stats() {
+ return triggerStats[1];
+ }
+
+ /**
+ * Gets the pair 0 trigger statistics.
+ * @return Returns a <code>TriggerStatModule</code> object that
+ * contains the statistics.
+ */
+ public TriggerStatModule getPair0Stats() {
+ return triggerStats[2];
+ }
+
+ /**
+ * Gets the pair 1 trigger statistics.
+ * @return Returns a <code>TriggerStatModule</code> object that
+ * contains the statistics.
+ */
+ public TriggerStatModule getPair1Stats() {
+ return triggerStats[3];
+ }
+
+ /**
+ * Gets the total number of events where the TI reported a trigger
+ * of the specified type.
+ * @param triggerID - The identifier for the type of trigger.
+ * @param unique - <code>true</code> returns only the number of
+ * events where this trigger type was the <i>only</i> type seen by
+ * the TI while <code>false</code> returns the number of events
+ * that saw this trigger type without regards for other trigger
+ * flags.
+ * @return Returns the count as an <code>int</code>.
+ */
+ public int getTITriggers(int triggerID, boolean hierarchical) {
+ // Verify the trigger type.
+ validateTriggerType(triggerID);
+
+ // Increment the counters.
+ if(hierarchical) { return tiSeenHierarchical[triggerID]; }
+ else { return tiSeenAll[triggerID]; }
+ }
+
+ /**
+ * Produces an exception if the argument trigger type is not of a
+ * supported type.
+ * @param triggerType - The trigger type to verify.
+ */
+ private static final void validateTriggerType(int triggerType) {
+ if(triggerType < 0 || triggerType > 5) {
+ throw new IndexOutOfBoundsException(String.format("Trigger type \"%d\" is not supported.", triggerType));
+ }
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/GeneralStatModule.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/GeneralStatModule.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/GeneralStatModule.java Wed Mar 9 11:43:24 2016
@@ -7,97 +7,97 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class GeneralStatModule {
- // Store general run statistics.
- protected long endTime = -1;
- protected long startTime = -1;
- protected int totalEvents = 0;
- protected int noiseEvents = 0;
- protected int failedPairEvents = 0;
- protected int failedClusterEvents = 0;
- protected int failedSinglesEvents = 0;
-
- /**
- * Clears all of the statistical counters in the object.
- */
- void clear() {
- endTime = -1;
- startTime = -1;
- totalEvents = 0;
- noiseEvents = 0;
- failedPairEvents = 0;
- failedClusterEvents = 0;
- failedSinglesEvents = 0;
- }
-
- @Override
- public GeneralStatModule clone() {
- // Create the a cloned object.
- GeneralStatModule clone = new GeneralStatModule();
-
- // Copy the tracked statistical data to the clone.
- clone.endTime = endTime;
- clone.startTime = startTime;
- clone.totalEvents = totalEvents;
- clone.noiseEvents = noiseEvents;
- clone.failedPairEvents = failedPairEvents;
- clone.failedClusterEvents = failedClusterEvents;
- clone.failedSinglesEvents = failedSinglesEvents;
-
- // Return the clone.
- return clone;
- }
-
- /**
- * Gets the length of time, in nanoseconds, over which the events
- * represented by this object occurred.
- * @return Returns the length of time as a <code>long</code>.
- */
- public long getDuration() {
- return endTime - startTime;
- }
-
- /**
- * Gets the number of events seen.
- * @return Returns the number of events as an <code>int</code>.
- */
- public int getEventCount() {
- return totalEvents;
- }
-
- /**
- * Gets the number of events in which at least one cluster was
- * not matched.
- * @return Returns the number of events as an <code>int</code>.
- */
- public int getFailedClusterEventCount() {
- return failedClusterEvents;
- }
-
- /**
- * Gets the number of events in which at least one pair trigger
- * was not matched.
- * @return Returns the number of events as an <code>int</code>.
- */
- public int getFailedPairEventCount() {
- return failedPairEvents;
- }
+ // Store general run statistics.
+ protected long endTime = -1;
+ protected long startTime = -1;
+ protected int totalEvents = 0;
+ protected int noiseEvents = 0;
+ protected int failedPairEvents = 0;
+ protected int failedClusterEvents = 0;
+ protected int failedSinglesEvents = 0;
+
+ /**
+ * Clears all of the statistical counters in the object.
+ */
+ void clear() {
+ endTime = -1;
+ startTime = -1;
+ totalEvents = 0;
+ noiseEvents = 0;
+ failedPairEvents = 0;
+ failedClusterEvents = 0;
+ failedSinglesEvents = 0;
+ }
+
+ @Override
+ public GeneralStatModule clone() {
+ // Create the a cloned object.
+ GeneralStatModule clone = new GeneralStatModule();
+
+ // Copy the tracked statistical data to the clone.
+ clone.endTime = endTime;
+ clone.startTime = startTime;
+ clone.totalEvents = totalEvents;
+ clone.noiseEvents = noiseEvents;
+ clone.failedPairEvents = failedPairEvents;
+ clone.failedClusterEvents = failedClusterEvents;
+ clone.failedSinglesEvents = failedSinglesEvents;
+
+ // Return the clone.
+ return clone;
+ }
+
+ /**
+ * Gets the length of time, in nanoseconds, over which the events
+ * represented by this object occurred.
+ * @return Returns the length of time as a <code>long</code>.
+ */
+ public long getDuration() {
+ return endTime - startTime;
+ }
+
+ /**
+ * Gets the number of events seen.
+ * @return Returns the number of events as an <code>int</code>.
+ */
+ public int getEventCount() {
+ return totalEvents;
+ }
+
+ /**
+ * Gets the number of events in which at least one cluster was
+ * not matched.
+ * @return Returns the number of events as an <code>int</code>.
+ */
+ public int getFailedClusterEventCount() {
+ return failedClusterEvents;
+ }
+
+ /**
+ * Gets the number of events in which at least one pair trigger
+ * was not matched.
+ * @return Returns the number of events as an <code>int</code>.
+ */
+ public int getFailedPairEventCount() {
+ return failedPairEvents;
+ }
- /**
- * Gets the number of events in which at least one singles trigger
- * was not matched.
- * @return Returns the number of events as an <code>int</code>.
- */
- public int getFailedSinglesEventCount() {
- return failedSinglesEvents;
- }
-
- /**
- * Gets the number of events which were ignored due to having too
- * many hits in them.
- * @return Returns the number of events as an <code>int</code>.
- */
- public int getNoiseEvents() {
- return noiseEvents;
- }
+ /**
+ * Gets the number of events in which at least one singles trigger
+ * was not matched.
+ * @return Returns the number of events as an <code>int</code>.
+ */
+ public int getFailedSinglesEventCount() {
+ return failedSinglesEvents;
+ }
+
+ /**
+ * Gets the number of events which were ignored due to having too
+ * many hits in them.
+ * @return Returns the number of events as an <code>int</code>.
+ */
+ public int getNoiseEvents() {
+ return noiseEvents;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/RunDiagStats.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/RunDiagStats.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/RunDiagStats.java Wed Mar 9 11:43:24 2016
@@ -9,89 +9,89 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class RunDiagStats extends GeneralStatModule {
- // Store the statistics for trigger matching.
- private TriggerDiagStats triggerStats = new TriggerDiagStats();
-
- // Store the statistics for cluster matching.
- private ClusterEvent clusterStats = new ClusterEvent();
-
- /**
- * Clears all of the statistical counters in the object.
- */
- public void clear() {
- super.clear();
- clusterStats.clear();
- triggerStats.clear();
- }
-
- /**
- * Notes that an event failed to match all clusters.
- */
- public void failedClusterEvent() {
- failedClusterEvents++;
- }
-
- /**
- * Notes that an event failed to match all pair triggers.
- */
- public void failedPairEvent() {
- failedPairEvents++;
- }
+ // Store the statistics for trigger matching.
+ private TriggerDiagStats triggerStats = new TriggerDiagStats();
+
+ // Store the statistics for cluster matching.
+ private ClusterEvent clusterStats = new ClusterEvent();
+
+ /**
+ * Clears all of the statistical counters in the object.
+ */
+ public void clear() {
+ super.clear();
+ clusterStats.clear();
+ triggerStats.clear();
+ }
+
+ /**
+ * Notes that an event failed to match all clusters.
+ */
+ public void failedClusterEvent() {
+ failedClusterEvents++;
+ }
+
+ /**
+ * Notes that an event failed to match all pair triggers.
+ */
+ public void failedPairEvent() {
+ failedPairEvents++;
+ }
- /**
- * Notes that an event failed to match all singles triggers.
- */
- public void failedSinglesEvent() {
- failedSinglesEvents++;
- }
-
- /**
- * Gets the cluster data.
- * @return Returns the <code>ClusterEvent</code> object that holds
- * the cluster data.
- */
- public ClusterEvent getClusterStats() {
- return clusterStats;
- }
-
- /**
- * Gets a snapshot of the statistical data at the present time. The
- * snapshot will remain static and unchanged even if the generating
- * object itself is updated.
- * @return Returns a snapshot as a <code>DiagnosticSnapshot</code>
- * object.
- */
- public DiagnosticSnapshot getSnapshot() {
- return new DiagnosticSnapshot(this);
- }
-
- /**
- * Gets the trigger data.
- * @return Returns the <code>TriggerDiagStats</code> object that holds
- * the cluster data.
- */
- public TriggerDiagStats getTriggerStats() {
- return triggerStats;
- }
-
- /**
- * Notes that an event occurred.
- */
- public void sawEvent(long eventTime) {
- // Increment the event count.
- totalEvents++;
-
- // If the start time is not defined, use this as the start time.
- if(startTime == -1) { startTime = eventTime; }
-
- // The end time should always match the most recent event.
- endTime = eventTime;
- }
+ /**
+ * Notes that an event failed to match all singles triggers.
+ */
+ public void failedSinglesEvent() {
+ failedSinglesEvents++;
+ }
+
+ /**
+ * Gets the cluster data.
+ * @return Returns the <code>ClusterEvent</code> object that holds
+ * the cluster data.
+ */
+ public ClusterEvent getClusterStats() {
+ return clusterStats;
+ }
+
+ /**
+ * Gets a snapshot of the statistical data at the present time. The
+ * snapshot will remain static and unchanged even if the generating
+ * object itself is updated.
+ * @return Returns a snapshot as a <code>DiagnosticSnapshot</code>
+ * object.
+ */
+ public DiagnosticSnapshot getSnapshot() {
+ return new DiagnosticSnapshot(this);
+ }
+
+ /**
+ * Gets the trigger data.
+ * @return Returns the <code>TriggerDiagStats</code> object that holds
+ * the cluster data.
+ */
+ public TriggerDiagStats getTriggerStats() {
+ return triggerStats;
+ }
+
+ /**
+ * Notes that an event occurred.
+ */
+ public void sawEvent(long eventTime) {
+ // Increment the event count.
+ totalEvents++;
+
+ // If the start time is not defined, use this as the start time.
+ if(startTime == -1) { startTime = eventTime; }
+
+ // The end time should always match the most recent event.
+ endTime = eventTime;
+ }
- /**
- * Notes that an event was labeled as noise.
- */
- public void sawNoiseEvent() {
- noiseEvents++;
- }
+ /**
+ * Notes that an event was labeled as noise.
+ */
+ public void sawNoiseEvent() {
+ noiseEvents++;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerDiagStats.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerDiagStats.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerDiagStats.java Wed Mar 9 11:43:24 2016
@@ -4,304 +4,304 @@
import org.hps.analysis.trigger.util.TriggerDiagnosticUtil;
public class TriggerDiagStats {
- // Define TI trigger type identifiers.
- public static final int SINGLES0 = TriggerStatModule.SINGLES_0;
- public static final int SINGLES1 = TriggerStatModule.SINGLES_1;
- public static final int PAIR0 = TriggerStatModule.PAIR_0;
- public static final int PAIR1 = TriggerStatModule.PAIR_1;
- public static final int PULSER = TriggerStatModule.PULSER;
- public static final int COSMIC = TriggerStatModule.COSMIC;
-
- // Tracks the number of TI triggers seen across all events for only
- // the TI trigger with the highest priority in the event.
- private int[] tiSeenHierarchical = new int[6];
-
- // Tracks the number of TI triggers across all events.
- private int[] tiSeenAll = new int[6];
-
- // Store the statistics modules for each of the regular triggers.
- private TriggerEvent[] triggerStats = new TriggerEvent[4];
-
- /**
- * Instantiates a new <code>TriggerDiagStats</code> object.
- */
- public TriggerDiagStats() {
- // Instantiate a trigger statistics module for each of the
- // triggers for which statistics are supported.
- for(int triggerType = 0; triggerType < 4; triggerType++) {
- triggerStats[triggerType] = new TriggerEvent();
- }
- }
-
- /**
- * Clears all of the statistical counters in the object.
- */
- void clear() {
- // Clear the tracked TI trigger data.
- for(int tiType = 0; tiType < 6; tiType++) {
- tiSeenAll[tiType] = 0;
- tiSeenHierarchical[tiType] = 0;
- }
-
- // Clear the trigger statistical modules.
- for(int triggerType = 0; triggerType < 4; triggerType++) {
- triggerStats[triggerType].clear();
- }
- }
-
- /**
- * Gets the trigger data for the pair 0 trigger.
- * @return Returns the <code>TriggerEvent</code> object that holds
- * the trigger data for the pair 0 trigger.
- */
- public TriggerEvent getPair0Stats() {
- return triggerStats[PAIR0];
- }
-
- /**
- * Gets the trigger data for the pair 1 trigger.
- * @return Returns the <code>TriggerEvent</code> object that holds
- * the trigger data for the pair 1 trigger.
- */
- public TriggerEvent getPair1Stats() {
- return triggerStats[PAIR1];
- }
-
- /**
- * Gets the trigger data for the singles 0 trigger.
- * @return Returns the <code>TriggerEvent</code> object that holds
- * the trigger data for the singles 0 trigger.
- */
- public TriggerEvent getSingles0Stats() {
- return triggerStats[SINGLES0];
- }
-
- /**
- * Gets the trigger data for the singles 1 trigger.
- * @return Returns the <code>TriggerEvent</code> object that holds
- * the trigger data for the singles 1 trigger.
- */
- public TriggerEvent getSingles1Stats() {
- return triggerStats[SINGLES1];
- }
-
- /**
- * Gets the total number of events where the TI reported a trigger
- * of the specified type.
- * @param triggerID - The identifier for the type of trigger.
- * @param unique - <code>true</code> returns only the number of
- * events where this trigger type was the <i>only</i> type seen by
- * the TI while <code>false</code> returns the number of events
- * that saw this trigger type without regards for other trigger
- * flags.
- * @return Returns the count as an <code>int</code>.
- */
- public int getTITriggers(int triggerID, boolean hierarchical) {
- // Verify the trigger type.
- validateTriggerType(triggerID);
-
- // Increment the counters.
- if(hierarchical) { return tiSeenHierarchical[triggerID]; }
- else { return tiSeenAll[triggerID]; }
- }
-
- /**
- * Increments the counts tracking the number of TI flags seen.
- * @param flags - An array of <code>boolean</code> values of size
- * six. This represents one flag for each possible TI trigger type.
- */
- public void sawTITriggers(boolean[] flags) {
- // There must be six trigger flags and the array must not be
- // null.
- if(flags == null) {
- throw new NullPointerException("TI trigger flags can not be null.");
- } if(flags.length != 6) {
- throw new IllegalArgumentException("TI trigger flags must be of size six.");
- }
-
- // Check each TI flag in the order of the flag hierarchy. The
- // first flag in the hierarchy that is true is recorded in the
- // hierarchical count. All flags are recorded in the all count.
- boolean foundHierarchical = false;
- if(flags[PAIR1]) {
- tiSeenAll[PAIR1]++;
- if(!foundHierarchical) {
- tiSeenHierarchical[PAIR1]++;
- foundHierarchical = true;
- }
- } if(flags[PAIR0]) {
- tiSeenAll[PAIR0]++;
- if(!foundHierarchical) {
- tiSeenHierarchical[PAIR0]++;
- foundHierarchical = true;
- }
- } if(flags[SINGLES1]) {
- tiSeenAll[SINGLES1]++;
- if(!foundHierarchical) {
- tiSeenHierarchical[SINGLES1]++;
- foundHierarchical = true;
- }
- } if(flags[SINGLES0]) {
- tiSeenAll[SINGLES0]++;
- if(!foundHierarchical) {
- tiSeenHierarchical[SINGLES0]++;
- foundHierarchical = true;
- }
- } if(flags[PULSER]) {
- tiSeenAll[PULSER]++;
- if(!foundHierarchical) {
- tiSeenHierarchical[PULSER]++;
- foundHierarchical = true;
- }
- } if(flags[COSMIC]) {
- tiSeenAll[COSMIC]++;
- if(!foundHierarchical) {
- tiSeenHierarchical[COSMIC]++;
- foundHierarchical = true;
- }
- }
- }
-
- /**
- * Prints the trigger statistics to the terminal as a table.
- */
- public void printEfficiencyTable() {
- // Get the trigger statistics tables.
- int[][] seenStats = new int[6][4];
- int[][] matchedStats = new int[6][4];
- TriggerEvent[] triggerEvents = { getSingles0Stats(), getSingles1Stats(), getPair0Stats(), getPair1Stats() };
- for(int i = 0; i < 4; i++) {
- for(int j = 0; j < 6; j++) {
- seenStats[j][i] = triggerEvents[i].getReconSimulatedTriggers(j);
- matchedStats[j][i] = triggerEvents[i].getMatchedReconSimulatedTriggers(j);
- }
- }
-
- // Define constant spacing variables.
- int columnSpacing = 3;
-
- // Define table headers.
- String sourceName = "Source";
- String seenName = "Trigger Efficiency";
-
- // Get the longest column header name.
- int longestHeader = -1;
- String[] headerNames = {
- TriggerDiagnosticUtil.TRIGGER_NAME[0],
- TriggerDiagnosticUtil.TRIGGER_NAME[1],
- TriggerDiagnosticUtil.TRIGGER_NAME[2],
- TriggerDiagnosticUtil.TRIGGER_NAME[3],
- "TI Highest Type"
- };
- for(String triggerName : headerNames) {
- longestHeader = ComponentUtils.max(longestHeader, triggerName.length());
- }
- longestHeader = ComponentUtils.max(longestHeader, sourceName.length());
-
- // Determine the spacing needed to display the largest numerical
- // cell value.
- int numWidth = -1;
- int longestCell = -1;
- for(int eventTriggerID = 0; eventTriggerID < 6; eventTriggerID++) {
- for(int seenTriggerID = 0; seenTriggerID < 4; seenTriggerID++) {
- int valueSize = ComponentUtils.getDigits(seenStats[eventTriggerID][seenTriggerID]);
- int cellSize = valueSize * 2 + 13;
- if(cellSize > longestCell) {
- longestCell = cellSize;
- numWidth = valueSize;
- }
- }
- }
-
- // The total column width can then be calculated from the
- // longer of the header and cell values.
- int columnWidth = ComponentUtils.max(longestCell, longestHeader);
- int sourceWidth = ComponentUtils.max(
- TriggerDiagnosticUtil.TRIGGER_NAME[0].length(), TriggerDiagnosticUtil.TRIGGER_NAME[1].length(),
- TriggerDiagnosticUtil.TRIGGER_NAME[2].length(), TriggerDiagnosticUtil.TRIGGER_NAME[3].length(),
- TriggerDiagnosticUtil.TRIGGER_NAME[4].length(), TriggerDiagnosticUtil.TRIGGER_NAME[5].length(),
- sourceName.length() );
-
- // Calculate the total width of the table value header columns.
- int headerTotalWidth = (headerNames.length * columnWidth)
- + ((headerNames.length - 1) * columnSpacing);
-
- // Write the table header.
- String spacingText = ComponentUtils.getChars(' ', columnSpacing);
- System.out.println(ComponentUtils.getChars(' ', sourceWidth) + spacingText
- + getCenteredString(seenName, headerTotalWidth));
-
- // Create the format strings for the cell values.
- String headerFormat = "%-" + sourceWidth + "s" + spacingText;
- String cellFormat = "%" + numWidth + "d / %" + numWidth + "d (%7.3f)";
- String nullText = getCenteredString(ComponentUtils.getChars('-', numWidth) + " / "
- + ComponentUtils.getChars('-', numWidth) + " ( N/A )", columnWidth) + spacingText;
-
- // Print the column headers.
- System.out.printf(headerFormat, sourceName);
- for(String header : headerNames) {
- System.out.print(getCenteredString(header, columnWidth) + spacingText);
- }
- System.out.println();
-
- // Write out the value columns.
- for(int eventTriggerID = 0; eventTriggerID < 6; eventTriggerID++) {
- // Print out the row header.
- System.out.printf(headerFormat, TriggerDiagnosticUtil.TRIGGER_NAME[eventTriggerID]);
-
- // Print the cell values.
- for(int seenTriggerID = 0; seenTriggerID < 4; seenTriggerID++) {
- if(seenTriggerID == eventTriggerID) { System.out.print(nullText); }
- else {
- String cellText = String.format(cellFormat, matchedStats[eventTriggerID][seenTriggerID],
- seenStats[eventTriggerID][seenTriggerID],
- (100.0 * matchedStats[eventTriggerID][seenTriggerID] / seenStats[eventTriggerID][seenTriggerID]));
- System.out.print(getCenteredString(cellText, columnWidth) + spacingText);
- }
- }
-
- // Output the number of events that had only the trigger
- // type ID for the current trigger type flagged by the TI.
- System.out.print(getCenteredString("" + getTITriggers(eventTriggerID, true), columnWidth) + spacingText);
-
- // Start a new line.
- System.out.println();
- }
- }
-
- /**
- * Produces a <code>String</code> of the indicated length with the
- * text <code>value</code> centered in the middle. Extra length is
- * filled through spaces before and after the text.
- * @param value - The text to display.
- * @param width - The number of spaces to include.
- * @return Returns a <code>String</code> of the specified length,
- * or the argument text if it is longer.
- */
- private static final String getCenteredString(String value, int width) {
- // The method can not perform as intended if the argument text
- // exceeds the requested string length. Just return the text.
- if(width <= value.length()) {
- return value;
- }
-
- // Otherwise, get the amount of buffering needed to center the
- // text and add it around the text to produce the string.
- else {
- int buffer = (width - value.length()) / 2;
- return ComponentUtils.getChars(' ', buffer) + value
- + ComponentUtils.getChars(' ', width - buffer - value.length());
- }
- }
-
- /**
- * Produces an exception if the argument trigger type is not of a
- * supported type.
- * @param triggerType - The trigger type to verify.
- */
- private static final void validateTriggerType(int triggerType) {
- if(triggerType < 0 || triggerType > 5) {
- throw new IndexOutOfBoundsException(String.format("Trigger type \"%d\" is not supported.", triggerType));
- }
- }
+ // Define TI trigger type identifiers.
+ public static final int SINGLES0 = TriggerStatModule.SINGLES_0;
+ public static final int SINGLES1 = TriggerStatModule.SINGLES_1;
+ public static final int PAIR0 = TriggerStatModule.PAIR_0;
+ public static final int PAIR1 = TriggerStatModule.PAIR_1;
+ public static final int PULSER = TriggerStatModule.PULSER;
+ public static final int COSMIC = TriggerStatModule.COSMIC;
+
+ // Tracks the number of TI triggers seen across all events for only
+ // the TI trigger with the highest priority in the event.
+ private int[] tiSeenHierarchical = new int[6];
+
+ // Tracks the number of TI triggers across all events.
+ private int[] tiSeenAll = new int[6];
+
+ // Store the statistics modules for each of the regular triggers.
+ private TriggerEvent[] triggerStats = new TriggerEvent[4];
+
+ /**
+ * Instantiates a new <code>TriggerDiagStats</code> object.
+ */
+ public TriggerDiagStats() {
+ // Instantiate a trigger statistics module for each of the
+ // triggers for which statistics are supported.
+ for(int triggerType = 0; triggerType < 4; triggerType++) {
+ triggerStats[triggerType] = new TriggerEvent();
+ }
+ }
+
+ /**
+ * Clears all of the statistical counters in the object.
+ */
+ void clear() {
+ // Clear the tracked TI trigger data.
+ for(int tiType = 0; tiType < 6; tiType++) {
+ tiSeenAll[tiType] = 0;
+ tiSeenHierarchical[tiType] = 0;
+ }
+
+ // Clear the trigger statistical modules.
+ for(int triggerType = 0; triggerType < 4; triggerType++) {
+ triggerStats[triggerType].clear();
+ }
+ }
+
+ /**
+ * Gets the trigger data for the pair 0 trigger.
+ * @return Returns the <code>TriggerEvent</code> object that holds
+ * the trigger data for the pair 0 trigger.
+ */
+ public TriggerEvent getPair0Stats() {
+ return triggerStats[PAIR0];
+ }
+
+ /**
+ * Gets the trigger data for the pair 1 trigger.
+ * @return Returns the <code>TriggerEvent</code> object that holds
+ * the trigger data for the pair 1 trigger.
+ */
+ public TriggerEvent getPair1Stats() {
+ return triggerStats[PAIR1];
+ }
+
+ /**
+ * Gets the trigger data for the singles 0 trigger.
+ * @return Returns the <code>TriggerEvent</code> object that holds
+ * the trigger data for the singles 0 trigger.
+ */
+ public TriggerEvent getSingles0Stats() {
+ return triggerStats[SINGLES0];
+ }
+
+ /**
+ * Gets the trigger data for the singles 1 trigger.
+ * @return Returns the <code>TriggerEvent</code> object that holds
+ * the trigger data for the singles 1 trigger.
+ */
+ public TriggerEvent getSingles1Stats() {
+ return triggerStats[SINGLES1];
+ }
+
+ /**
+ * Gets the total number of events where the TI reported a trigger
+ * of the specified type.
+ * @param triggerID - The identifier for the type of trigger.
+ * @param unique - <code>true</code> returns only the number of
+ * events where this trigger type was the <i>only</i> type seen by
+ * the TI while <code>false</code> returns the number of events
+ * that saw this trigger type without regards for other trigger
+ * flags.
+ * @return Returns the count as an <code>int</code>.
+ */
+ public int getTITriggers(int triggerID, boolean hierarchical) {
+ // Verify the trigger type.
+ validateTriggerType(triggerID);
+
+ // Increment the counters.
+ if(hierarchical) { return tiSeenHierarchical[triggerID]; }
+ else { return tiSeenAll[triggerID]; }
+ }
+
+ /**
+ * Increments the counts tracking the number of TI flags seen.
+ * @param flags - An array of <code>boolean</code> values of size
+ * six. This represents one flag for each possible TI trigger type.
+ */
+ public void sawTITriggers(boolean[] flags) {
+ // There must be six trigger flags and the array must not be
+ // null.
+ if(flags == null) {
+ throw new NullPointerException("TI trigger flags can not be null.");
+ } if(flags.length != 6) {
+ throw new IllegalArgumentException("TI trigger flags must be of size six.");
+ }
+
+ // Check each TI flag in the order of the flag hierarchy. The
+ // first flag in the hierarchy that is true is recorded in the
+ // hierarchical count. All flags are recorded in the all count.
+ boolean foundHierarchical = false;
+ if(flags[PAIR1]) {
+ tiSeenAll[PAIR1]++;
+ if(!foundHierarchical) {
+ tiSeenHierarchical[PAIR1]++;
+ foundHierarchical = true;
+ }
+ } if(flags[PAIR0]) {
+ tiSeenAll[PAIR0]++;
+ if(!foundHierarchical) {
+ tiSeenHierarchical[PAIR0]++;
+ foundHierarchical = true;
+ }
+ } if(flags[SINGLES1]) {
+ tiSeenAll[SINGLES1]++;
+ if(!foundHierarchical) {
+ tiSeenHierarchical[SINGLES1]++;
+ foundHierarchical = true;
+ }
+ } if(flags[SINGLES0]) {
+ tiSeenAll[SINGLES0]++;
+ if(!foundHierarchical) {
+ tiSeenHierarchical[SINGLES0]++;
+ foundHierarchical = true;
+ }
+ } if(flags[PULSER]) {
+ tiSeenAll[PULSER]++;
+ if(!foundHierarchical) {
+ tiSeenHierarchical[PULSER]++;
+ foundHierarchical = true;
+ }
+ } if(flags[COSMIC]) {
+ tiSeenAll[COSMIC]++;
+ if(!foundHierarchical) {
+ tiSeenHierarchical[COSMIC]++;
+ foundHierarchical = true;
+ }
+ }
+ }
+
+ /**
+ * Prints the trigger statistics to the terminal as a table.
+ */
+ public void printEfficiencyTable() {
+ // Get the trigger statistics tables.
+ int[][] seenStats = new int[6][4];
+ int[][] matchedStats = new int[6][4];
+ TriggerEvent[] triggerEvents = { getSingles0Stats(), getSingles1Stats(), getPair0Stats(), getPair1Stats() };
+ for(int i = 0; i < 4; i++) {
+ for(int j = 0; j < 6; j++) {
+ seenStats[j][i] = triggerEvents[i].getReconSimulatedTriggers(j);
+ matchedStats[j][i] = triggerEvents[i].getMatchedReconSimulatedTriggers(j);
+ }
+ }
+
+ // Define constant spacing variables.
+ int columnSpacing = 3;
+
+ // Define table headers.
+ String sourceName = "Source";
+ String seenName = "Trigger Efficiency";
+
+ // Get the longest column header name.
+ int longestHeader = -1;
+ String[] headerNames = {
+ TriggerDiagnosticUtil.TRIGGER_NAME[0],
+ TriggerDiagnosticUtil.TRIGGER_NAME[1],
+ TriggerDiagnosticUtil.TRIGGER_NAME[2],
+ TriggerDiagnosticUtil.TRIGGER_NAME[3],
+ "TI Highest Type"
+ };
+ for(String triggerName : headerNames) {
+ longestHeader = ComponentUtils.max(longestHeader, triggerName.length());
+ }
+ longestHeader = ComponentUtils.max(longestHeader, sourceName.length());
+
+ // Determine the spacing needed to display the largest numerical
+ // cell value.
+ int numWidth = -1;
+ int longestCell = -1;
+ for(int eventTriggerID = 0; eventTriggerID < 6; eventTriggerID++) {
+ for(int seenTriggerID = 0; seenTriggerID < 4; seenTriggerID++) {
+ int valueSize = ComponentUtils.getDigits(seenStats[eventTriggerID][seenTriggerID]);
+ int cellSize = valueSize * 2 + 13;
+ if(cellSize > longestCell) {
+ longestCell = cellSize;
+ numWidth = valueSize;
+ }
+ }
+ }
+
+ // The total column width can then be calculated from the
+ // longer of the header and cell values.
+ int columnWidth = ComponentUtils.max(longestCell, longestHeader);
+ int sourceWidth = ComponentUtils.max(
+ TriggerDiagnosticUtil.TRIGGER_NAME[0].length(), TriggerDiagnosticUtil.TRIGGER_NAME[1].length(),
+ TriggerDiagnosticUtil.TRIGGER_NAME[2].length(), TriggerDiagnosticUtil.TRIGGER_NAME[3].length(),
+ TriggerDiagnosticUtil.TRIGGER_NAME[4].length(), TriggerDiagnosticUtil.TRIGGER_NAME[5].length(),
+ sourceName.length() );
+
+ // Calculate the total width of the table value header columns.
+ int headerTotalWidth = (headerNames.length * columnWidth)
+ + ((headerNames.length - 1) * columnSpacing);
+
+ // Write the table header.
+ String spacingText = ComponentUtils.getChars(' ', columnSpacing);
+ System.out.println(ComponentUtils.getChars(' ', sourceWidth) + spacingText
+ + getCenteredString(seenName, headerTotalWidth));
+
+ // Create the format strings for the cell values.
+ String headerFormat = "%-" + sourceWidth + "s" + spacingText;
+ String cellFormat = "%" + numWidth + "d / %" + numWidth + "d (%7.3f)";
+ String nullText = getCenteredString(ComponentUtils.getChars('-', numWidth) + " / "
+ + ComponentUtils.getChars('-', numWidth) + " ( N/A )", columnWidth) + spacingText;
+
+ // Print the column headers.
+ System.out.printf(headerFormat, sourceName);
+ for(String header : headerNames) {
+ System.out.print(getCenteredString(header, columnWidth) + spacingText);
+ }
+ System.out.println();
+
+ // Write out the value columns.
+ for(int eventTriggerID = 0; eventTriggerID < 6; eventTriggerID++) {
+ // Print out the row header.
+ System.out.printf(headerFormat, TriggerDiagnosticUtil.TRIGGER_NAME[eventTriggerID]);
+
+ // Print the cell values.
+ for(int seenTriggerID = 0; seenTriggerID < 4; seenTriggerID++) {
+ if(seenTriggerID == eventTriggerID) { System.out.print(nullText); }
+ else {
+ String cellText = String.format(cellFormat, matchedStats[eventTriggerID][seenTriggerID],
+ seenStats[eventTriggerID][seenTriggerID],
+ (100.0 * matchedStats[eventTriggerID][seenTriggerID] / seenStats[eventTriggerID][seenTriggerID]));
+ System.out.print(getCenteredString(cellText, columnWidth) + spacingText);
+ }
+ }
+
+ // Output the number of events that had only the trigger
+ // type ID for the current trigger type flagged by the TI.
+ System.out.print(getCenteredString("" + getTITriggers(eventTriggerID, true), columnWidth) + spacingText);
+
+ // Start a new line.
+ System.out.println();
+ }
+ }
+
+ /**
+ * Produces a <code>String</code> of the indicated length with the
+ * text <code>value</code> centered in the middle. Extra length is
+ * filled through spaces before and after the text.
+ * @param value - The text to display.
+ * @param width - The number of spaces to include.
+ * @return Returns a <code>String</code> of the specified length,
+ * or the argument text if it is longer.
+ */
+ private static final String getCenteredString(String value, int width) {
+ // The method can not perform as intended if the argument text
+ // exceeds the requested string length. Just return the text.
+ if(width <= value.length()) {
+ return value;
+ }
+
+ // Otherwise, get the amount of buffering needed to center the
+ // text and add it around the text to produce the string.
+ else {
+ int buffer = (width - value.length()) / 2;
+ return ComponentUtils.getChars(' ', buffer) + value
+ + ComponentUtils.getChars(' ', width - buffer - value.length());
+ }
+ }
+
+ /**
+ * Produces an exception if the argument trigger type is not of a
+ * supported type.
+ * @param triggerType - The trigger type to verify.
+ */
+ private static final void validateTriggerType(int triggerType) {
+ if(triggerType < 0 || triggerType > 5) {
+ throw new IndexOutOfBoundsException(String.format("Trigger type \"%d\" is not supported.", triggerType));
+ }
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerEvent.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerEvent.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerEvent.java Wed Mar 9 11:43:24 2016
@@ -9,263 +9,263 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class TriggerEvent extends TriggerStatModule {
- /**
- * Adds the statistics from one event object into this one.
- * @param event - The event data to add.
- */
- public void addEvent(TriggerStatModule event) {
- // Merge the values that do not depend on trigger source type.
- reportedTriggers += event.reportedTriggers;
-
- // Merge each value that depends on the trigger source type.
- for(int sourceType = 0; sourceType < 2; sourceType++) {
- simTriggers[sourceType] += event.simTriggers[sourceType];
- matchedTriggers[sourceType] += event.matchedTriggers[sourceType];
- unmatchedTriggers[sourceType] += event.unmatchedTriggers[sourceType];
-
- // Merge the number of times each cut failed.
- for(int cutID = 0; cutID < 4; cutID++) {
- failedCuts[sourceType][cutID] += event.failedCuts[sourceType][cutID];
- }
-
- // Copy the values for the TI flag trigger counters.
- for(int tiType = 0; tiType < 6; tiType++) {
- tiTriggersSeen[sourceType][tiType] += event.tiTriggersSeen[sourceType][tiType];
- tiTriggersMatched[sourceType][tiType] += event.tiTriggersMatched[sourceType][tiType];
- }
- }
- }
-
- /**
- * Indicates that a reconstructed trigger could not be matched, even
- * partially, to an SSP bank trigger.
- */
- public void failedReconTrigger() {
- unmatchedTriggers[RECON]++;
- }
-
- /**
- * Indicates that an SSP simulated trigger could not be matched, even
- * partially, to an SSP bank trigger.
- */
- public void failedSSPTrigger() {
- unmatchedTriggers[SSP]++;
- }
+ /**
+ * Adds the statistics from one event object into this one.
+ * @param event - The event data to add.
+ */
+ public void addEvent(TriggerStatModule event) {
+ // Merge the values that do not depend on trigger source type.
+ reportedTriggers += event.reportedTriggers;
+
+ // Merge each value that depends on the trigger source type.
+ for(int sourceType = 0; sourceType < 2; sourceType++) {
+ simTriggers[sourceType] += event.simTriggers[sourceType];
+ matchedTriggers[sourceType] += event.matchedTriggers[sourceType];
+ unmatchedTriggers[sourceType] += event.unmatchedTriggers[sourceType];
+
+ // Merge the number of times each cut failed.
+ for(int cutID = 0; cutID < 4; cutID++) {
+ failedCuts[sourceType][cutID] += event.failedCuts[sourceType][cutID];
+ }
+
+ // Copy the values for the TI flag trigger counters.
+ for(int tiType = 0; tiType < 6; tiType++) {
+ tiTriggersSeen[sourceType][tiType] += event.tiTriggersSeen[sourceType][tiType];
+ tiTriggersMatched[sourceType][tiType] += event.tiTriggersMatched[sourceType][tiType];
+ }
+ }
+ }
+
+ /**
+ * Indicates that a reconstructed trigger could not be matched, even
+ * partially, to an SSP bank trigger.
+ */
+ public void failedReconTrigger() {
+ unmatchedTriggers[RECON]++;
+ }
+
+ /**
+ * Indicates that an SSP simulated trigger could not be matched, even
+ * partially, to an SSP bank trigger.
+ */
+ public void failedSSPTrigger() {
+ unmatchedTriggers[SSP]++;
+ }
- /**
- * Indicates that a trigger simulated from a reconstructed cluster
- * was successfully matched to a trigger in the SSP bank.
- * @param tiFlags - An array of size 6 indicating which TI bank
- * flags are active and which are not.
- * @param triggerTypeID - An identifier indicating the type of
- * trigger that was matched.
- */
- public void matchedReconTrigger(boolean[] tiFlags) {
- matchedTriggers(tiFlags, RECON);
- }
-
- /**
- * Indicates that a trigger simulated from a reconstructed cluster
- * was partially matched to a trigger in the SSP bank, and notes
- * which cuts did and did not match.
- * @param tiFlags - An array of size 6 indicating which TI bank
- * flags are active and which are not.
- * @param triggerTypeID - An identifier indicating the type of
- * trigger that was matched.
- * @param matchedCuts - An array of size 3 or 4 indicating which
- * cuts did and did not align between the triggers.
- */
- public void matchedReconTrigger(boolean[] tiFlags, boolean[] matchedCuts) {
- matchedTriggers(tiFlags, matchedCuts, RECON);
- }
-
- /**
- * Indicates that a trigger simulated from an SSP bank cluster was
- * successfully matched to a trigger in the SSP bank.
- * @param tiFlags - An array of size 6 indicating which TI bank
- * flags are active and which are not.
- * @param triggerTypeID - An identifier indicating the type of
- * trigger that was matched.
- */
- public void matchedSSPTrigger(boolean[] tiFlags) {
- matchedTriggers(tiFlags, SSP);
- }
-
- /**
- * Indicates that a trigger simulated from an SSP bank cluster was
- * partially matched to a trigger in the SSP bank, and notes which
- * cuts did and did not match.
- * @param tiFlags - An array of size 6 indicating which TI bank
- * flags are active and which are not.
- * @param triggerTypeID - An identifier indicating the type of
- * trigger that was matched.
- * @param matchedCuts - An array of size 3 or 4 indicating which
- * cuts did and did not align between the triggers.
- */
- public void matchedSSPTrigger(boolean[] tiFlags, boolean[] matchedCuts) {
- matchedTriggers(tiFlags, matchedCuts, SSP);
- }
-
- /**
- * Indicates that a trigger simulated from a reconstructed cluster
- * was seen and increments the count for this type of trigger by one.
- * @param tiFlags - Whether or not each of the TI bank flags is
- * active or not.
- */
- public void sawReconSimulatedTrigger(boolean[] tiFlags) {
- sawReconSimulatedTriggers(tiFlags, 1);
- }
-
- /**
- * Indicates that a number triggers simulated from reconstructed
- * clusters were seen and increments the count for this type of
- * trigger by the indicated number.
- * @param tiFlags - Whether or not each of the TI bank flags is
- * active or not.
- * @param count - The number of simulated triggers seen.
- */
- public void sawReconSimulatedTriggers(boolean[] tiFlags, int count) {
- // Increment the total count.
- simTriggers[RECON] += count;
-
- // Increment the TI flag counters.
- for(int tiType = 0; tiType < 6; tiType++) {
- if(tiFlags[tiType]) {
- tiTriggersSeen[RECON][tiType] += count;
- }
- }
- }
-
- /**
- * Indicates that a trigger from the SSP trigger bank was seen and
- * increments the count for this type of trigger by one.
- */
- public void sawReportedTrigger() {
- sawReportedTriggers(1);
- }
-
- /**
- * Indicates that a number triggers from the SSP trigger bank were
- * seen and increments the count for this type of trigger by the
- * indicated number.
- * @param count - The number of simulated triggers seen.
- */
- public void sawReportedTriggers(int count) {
- reportedTriggers += count;
- }
-
- /**
- * Indicates that a trigger simulated from an SSP bank cluster was
- * seen and increments the count for this type of trigger by one.
- * @param tiFlags - Whether or not each of the TI bank flags is
- * active or not.
- */
- public void sawSSPSimulatedTrigger(boolean[] tiFlags) {
- sawSSPSimulatedTriggers(tiFlags, 1);
- }
-
- /**
- * Indicates that a number triggers simulated from SSP bank clusters
- * were seen and increments the count for this type of trigger by
- * the indicated number.
- * @param tiFlags - Whether or not each of the TI bank flags is
- * active or not.
- * @param count - The number of simulated triggers seen.
- */
- public void sawSSPSimulatedTriggers(boolean[] tiFlags, int count) {
- // Increment the total count.
- simTriggers[SSP] += count;
-
- // Increment the TI flag counters.
- for(int tiType = 0; tiType < 6; tiType++) {
- if(tiFlags[tiType]) {
- tiTriggersSeen[SSP][tiType] += count;
- }
- }
- }
-
- /**
- * Indicates that a simulated trigger was successfully matched to
- * an SSP bank trigger.
- * @param tiFlags - An array of size 6 indicating which TI bank
- * flags are active and which are not.
- * @param sourceType - Uses <code>SSP</code> for triggers simulated
- * from an SSP bank cluster and <code>RECON</code> for triggers that
- * were simulated from a reconstructed cluster.
- */
- private final void matchedTriggers(boolean[] tiFlags, int sourceType) {
- // Increment the total triggers matched.
- matchedTriggers[sourceType]++;
-
- // Increment the triggers matched for this type for each if
- // the active TI bank flags.
- for(int tiType = 0; tiType < 6; tiType++) {
- if(tiFlags[tiType]) {
- tiTriggersMatched[sourceType][tiType]++;
- }
- }
- }
-
- /**
- * Indicates that a simulated trigger was partially matched to a
- * trigger in the SSP bank, and notes which cuts did and did not
- * match.
- * @param tiFlags - An array of size 6 indicating which TI bank
- * flags are active and which are not.
- * @param sourceType - Uses <code>SSP</code> for triggers simulated
- * from an SSP bank cluster and <code>RECON</code> for triggers that
- * were simulated from a reconstructed cluster.
- */
- private void matchedTriggers(boolean[] tiFlags, boolean[] matchedCuts, int sourceType) {
- // The matched cuts must be defined.
- if(matchedCuts == null) {
- throw new NullPointerException("The matched cuts array must be defined.");
- }
-
- // The matched cuts array must be of either size 3 or 4.
- if(matchedCuts.length != 3 && matchedCuts.length != 4) {
- throw new IllegalArgumentException("All triggers must use either three or four cuts.");
- }
-
- // Increment the counters for each cut that was no matched. Also
- // track whether or not a cut actually failed.
- boolean cutFailed = false;
- for(int cutIndex = 0; cutIndex < matchedCuts.length; cutIndex++) {
- if(!matchedCuts[cutIndex]) {
- failedCuts[sourceType][cutIndex]++;
- cutFailed = true;
- }
- }
-
- // If no cut failed, this is actually a match. Increment the
- // appropriate counters.
- if(!cutFailed) {
- matchedTriggers(tiFlags, sourceType);
- }
- }
-
- @Deprecated
- public String getPrintData() {
- StringBuffer out = new StringBuffer();
+ /**
+ * Indicates that a trigger simulated from a reconstructed cluster
+ * was successfully matched to a trigger in the SSP bank.
+ * @param tiFlags - An array of size 6 indicating which TI bank
+ * flags are active and which are not.
+ * @param triggerTypeID - An identifier indicating the type of
+ * trigger that was matched.
+ */
+ public void matchedReconTrigger(boolean[] tiFlags) {
+ matchedTriggers(tiFlags, RECON);
+ }
+
+ /**
+ * Indicates that a trigger simulated from a reconstructed cluster
+ * was partially matched to a trigger in the SSP bank, and notes
+ * which cuts did and did not match.
+ * @param tiFlags - An array of size 6 indicating which TI bank
+ * flags are active and which are not.
+ * @param triggerTypeID - An identifier indicating the type of
+ * trigger that was matched.
+ * @param matchedCuts - An array of size 3 or 4 indicating which
+ * cuts did and did not align between the triggers.
+ */
+ public void matchedReconTrigger(boolean[] tiFlags, boolean[] matchedCuts) {
+ matchedTriggers(tiFlags, matchedCuts, RECON);
+ }
+
+ /**
+ * Indicates that a trigger simulated from an SSP bank cluster was
+ * successfully matched to a trigger in the SSP bank.
+ * @param tiFlags - An array of size 6 indicating which TI bank
+ * flags are active and which are not.
+ * @param triggerTypeID - An identifier indicating the type of
+ * trigger that was matched.
+ */
+ public void matchedSSPTrigger(boolean[] tiFlags) {
+ matchedTriggers(tiFlags, SSP);
+ }
+
+ /**
+ * Indicates that a trigger simulated from an SSP bank cluster was
+ * partially matched to a trigger in the SSP bank, and notes which
+ * cuts did and did not match.
+ * @param tiFlags - An array of size 6 indicating which TI bank
+ * flags are active and which are not.
+ * @param triggerTypeID - An identifier indicating the type of
+ * trigger that was matched.
+ * @param matchedCuts - An array of size 3 or 4 indicating which
+ * cuts did and did not align between the triggers.
+ */
+ public void matchedSSPTrigger(boolean[] tiFlags, boolean[] matchedCuts) {
+ matchedTriggers(tiFlags, matchedCuts, SSP);
+ }
+
+ /**
+ * Indicates that a trigger simulated from a reconstructed cluster
+ * was seen and increments the count for this type of trigger by one.
+ * @param tiFlags - Whether or not each of the TI bank flags is
+ * active or not.
+ */
+ public void sawReconSimulatedTrigger(boolean[] tiFlags) {
+ sawReconSimulatedTriggers(tiFlags, 1);
+ }
+
+ /**
+ * Indicates that a number triggers simulated from reconstructed
+ * clusters were seen and increments the count for this type of
+ * trigger by the indicated number.
+ * @param tiFlags - Whether or not each of the TI bank flags is
+ * active or not.
+ * @param count - The number of simulated triggers seen.
+ */
+ public void sawReconSimulatedTriggers(boolean[] tiFlags, int count) {
+ // Increment the total count.
+ simTriggers[RECON] += count;
+
+ // Increment the TI flag counters.
+ for(int tiType = 0; tiType < 6; tiType++) {
+ if(tiFlags[tiType]) {
+ tiTriggersSeen[RECON][tiType] += count;
+ }
+ }
+ }
+
+ /**
+ * Indicates that a trigger from the SSP trigger bank was seen and
+ * increments the count for this type of trigger by one.
+ */
+ public void sawReportedTrigger() {
+ sawReportedTriggers(1);
+ }
+
+ /**
+ * Indicates that a number triggers from the SSP trigger bank were
+ * seen and increments the count for this type of trigger by the
+ * indicated number.
+ * @param count - The number of simulated triggers seen.
+ */
+ public void sawReportedTriggers(int count) {
+ reportedTriggers += count;
+ }
+
+ /**
+ * Indicates that a trigger simulated from an SSP bank cluster was
+ * seen and increments the count for this type of trigger by one.
+ * @param tiFlags - Whether or not each of the TI bank flags is
+ * active or not.
+ */
+ public void sawSSPSimulatedTrigger(boolean[] tiFlags) {
+ sawSSPSimulatedTriggers(tiFlags, 1);
+ }
+
+ /**
+ * Indicates that a number triggers simulated from SSP bank clusters
+ * were seen and increments the count for this type of trigger by
+ * the indicated number.
+ * @param tiFlags - Whether or not each of the TI bank flags is
+ * active or not.
+ * @param count - The number of simulated triggers seen.
+ */
+ public void sawSSPSimulatedTriggers(boolean[] tiFlags, int count) {
+ // Increment the total count.
+ simTriggers[SSP] += count;
+
+ // Increment the TI flag counters.
+ for(int tiType = 0; tiType < 6; tiType++) {
+ if(tiFlags[tiType]) {
+ tiTriggersSeen[SSP][tiType] += count;
+ }
+ }
+ }
+
+ /**
+ * Indicates that a simulated trigger was successfully matched to
+ * an SSP bank trigger.
+ * @param tiFlags - An array of size 6 indicating which TI bank
+ * flags are active and which are not.
+ * @param sourceType - Uses <code>SSP</code> for triggers simulated
+ * from an SSP bank cluster and <code>RECON</code> for triggers that
+ * were simulated from a reconstructed cluster.
+ */
+ private final void matchedTriggers(boolean[] tiFlags, int sourceType) {
+ // Increment the total triggers matched.
+ matchedTriggers[sourceType]++;
+
+ // Increment the triggers matched for this type for each if
+ // the active TI bank flags.
+ for(int tiType = 0; tiType < 6; tiType++) {
+ if(tiFlags[tiType]) {
+ tiTriggersMatched[sourceType][tiType]++;
+ }
+ }
+ }
+
+ /**
+ * Indicates that a simulated trigger was partially matched to a
+ * trigger in the SSP bank, and notes which cuts did and did not
+ * match.
+ * @param tiFlags - An array of size 6 indicating which TI bank
+ * flags are active and which are not.
+ * @param sourceType - Uses <code>SSP</code> for triggers simulated
+ * from an SSP bank cluster and <code>RECON</code> for triggers that
+ * were simulated from a reconstructed cluster.
+ */
+ private void matchedTriggers(boolean[] tiFlags, boolean[] matchedCuts, int sourceType) {
+ // The matched cuts must be defined.
+ if(matchedCuts == null) {
+ throw new NullPointerException("The matched cuts array must be defined.");
+ }
+
+ // The matched cuts array must be of either size 3 or 4.
+ if(matchedCuts.length != 3 && matchedCuts.length != 4) {
+ throw new IllegalArgumentException("All triggers must use either three or four cuts.");
+ }
+
+ // Increment the counters for each cut that was no matched. Also
+ // track whether or not a cut actually failed.
+ boolean cutFailed = false;
+ for(int cutIndex = 0; cutIndex < matchedCuts.length; cutIndex++) {
+ if(!matchedCuts[cutIndex]) {
+ failedCuts[sourceType][cutIndex]++;
+ cutFailed = true;
+ }
+ }
+
+ // If no cut failed, this is actually a match. Increment the
+ // appropriate counters.
+ if(!cutFailed) {
+ matchedTriggers(tiFlags, sourceType);
+ }
+ }
+
+ @Deprecated
+ public String getPrintData() {
+ StringBuffer out = new StringBuffer();
- out.append("\n");
- out.append("Trigger Result\n");
- out.append("SSP Sim Triggers :: " + simTriggers[SSP] + "\n");
- out.append("Recon Sim Triggers :: " + simTriggers[RECON] + "\n");
- out.append("Reported Triggers :: " + reportedTriggers + "\n");
- out.append(String.format("Internal Efficiency :: %d / %d (%7.3f)%n", matchedTriggers[SSP], simTriggers[SSP],
- (100.0 * matchedTriggers[SSP] / simTriggers[SSP])));
- out.append(String.format("Trigger Efficiency :: %d / %d (%7.3f)%n", matchedTriggers[RECON], simTriggers[RECON],
- (100.0 * matchedTriggers[RECON] / simTriggers[RECON])));
-
- out.append("\n");
- out.append("Individual Cut Failure Rates\n");
- out.append("Unmatched Triggers :: " + unmatchedTriggers[SSP] + "\n");
- for(int i = 0; i < 4; i++) {
- out.append(String.format("\tCut %d :: %d / %d (%7.3f)%n", i, failedCuts[SSP][i], simTriggers[SSP],
- (100.0 * failedCuts[SSP][i] / simTriggers[SSP])));
- }
-
- return out.toString();
- }
+ out.append("\n");
+ out.append("Trigger Result\n");
+ out.append("SSP Sim Triggers :: " + simTriggers[SSP] + "\n");
+ out.append("Recon Sim Triggers :: " + simTriggers[RECON] + "\n");
+ out.append("Reported Triggers :: " + reportedTriggers + "\n");
+ out.append(String.format("Internal Efficiency :: %d / %d (%7.3f)%n", matchedTriggers[SSP], simTriggers[SSP],
+ (100.0 * matchedTriggers[SSP] / simTriggers[SSP])));
+ out.append(String.format("Trigger Efficiency :: %d / %d (%7.3f)%n", matchedTriggers[RECON], simTriggers[RECON],
+ (100.0 * matchedTriggers[RECON] / simTriggers[RECON])));
+
+ out.append("\n");
+ out.append("Individual Cut Failure Rates\n");
+ out.append("Unmatched Triggers :: " + unmatchedTriggers[SSP] + "\n");
+ for(int i = 0; i < 4; i++) {
+ out.append(String.format("\tCut %d :: %d / %d (%7.3f)%n", i, failedCuts[SSP][i], simTriggers[SSP],
+ (100.0 * failedCuts[SSP][i] / simTriggers[SSP])));
+ }
+
+ return out.toString();
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerStatModule.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerStatModule.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/data/TriggerStatModule.java Wed Mar 9 11:43:24 2016
@@ -10,285 +10,285 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class TriggerStatModule {
- // Store the reference index for SSP simulated triggers and recon
- // simulated triggers.
- protected static final int SSP = 0;
- protected static final int RECON = 1;
-
- // Define TI trigger type identifiers.
- public static final int SINGLES_0 = 0;
- public static final int SINGLES_1 = 1;
- public static final int PAIR_0 = 2;
- public static final int PAIR_1 = 3;
- public static final int PULSER = 4;
- public static final int COSMIC = 5;
-
- // Track the number of simulated triggers seen for each source type.
- // SSP simulated triggers from the SSP bank clusters. Reconstructed
- // simulated triggers come from clusters built from FADC data.
- protected int[] simTriggers = new int[2];
-
- // Also track the number of triggers reported by the SSP bank.
- protected int reportedTriggers = 0;
-
- // Track the number of simulated triggers of each type that were
- // successfully matched.
- protected int[] matchedTriggers = new int[2];
-
- // Track the number of simulated triggers that could not be matched
- // at all.
- protected int[] unmatchedTriggers = new int[2];
-
- // Track which cuts succeeded and which cuts failed for each type.
- // Note that this is currently only tracked for SSP cluster triggers.
- protected int[][] failedCuts = new int[2][4];
-
- // Store the number of trigger matches seen over all events that
- // contain a given TI flag.
- protected int[][] tiTriggersSeen = new int[2][6];
- protected int[][] tiTriggersMatched = new int[2][6];
-
- /**
- * Clears all of the statistical counters in the object.
- */
- void clear() {
- // Clear all values.
- for(int sourceType = 0; sourceType < 2; sourceType++) {
- // Clear the general statistics.
- simTriggers[sourceType] = 0;
- matchedTriggers[sourceType] = 0;
- unmatchedTriggers[sourceType] = 0;
-
- // Clear the cut failure statistics.
- for(int cutID = 0; cutID < 4; cutID++) {
- failedCuts[sourceType][cutID] = 0;
- }
-
- // Clear the TI flag statistics.
- for(int tiType = 0; tiType < 6; tiType++) {
- tiTriggersSeen[sourceType][tiType] = 0;
- tiTriggersMatched[sourceType][tiType] = 0;
- }
- }
- }
-
- @Override
- public TriggerStatModule clone() {
- // Make a new statistics module.
- TriggerStatModule clone = new TriggerStatModule();
-
- // Copy the values that do not depend on trigger source type.
- clone.reportedTriggers = reportedTriggers;
-
- // Set each value that depends on the trigger source type.
- for(int sourceType = 0; sourceType < 2; sourceType++) {
- clone.simTriggers[sourceType] = simTriggers[sourceType];
- clone.matchedTriggers[sourceType] = matchedTriggers[sourceType];
- clone.unmatchedTriggers[sourceType] = unmatchedTriggers[sourceType];
-
- // Set the number of times each cut failed.
- for(int cutID = 0; cutID < 4; cutID++) {
- clone.failedCuts[sourceType][cutID] = failedCuts[sourceType][cutID];
- }
-
- // Copy the values for the TI flag trigger counters.
- for(int tiType = 0; tiType < 6; tiType++) {
- clone.tiTriggersSeen[sourceType][tiType] = tiTriggersSeen[sourceType][tiType];
- clone.tiTriggersMatched[sourceType][tiType] = tiTriggersMatched[sourceType][tiType];
- }
- }
-
- // Return the copied clone.
- return clone;
- }
-
- /**
- * Gets the number of simulated triggers from reconstructed clusters
- * that were not matched.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getFailedReconSimulatedTriggers() {
- return simTriggers[RECON] - matchedTriggers[RECON];
- }
-
- /**
- * Gets the number of simulated triggers from SSP bank clusters
- * that were not matched.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getFailedSSPSimulatedTriggers() {
- return simTriggers[SSP] - matchedTriggers[SSP];
- }
-
- /**
- * Gets the number of simulated triggers from reconstructed clusters
- * that were matched.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getMatchedReconSimulatedTriggers() {
- return matchedTriggers[RECON];
- }
-
- /**
- * Gets the number of simulated triggers from reconstructed clusters
- * that were matched for a given type of trigger when a given TI
- * bank flag was active.
- * @param tiTypeID - The identifier for the type of TI bank trigger
- * that should be active.
- * @param triggerTypeID - The identifier for the type of trigger.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getMatchedReconSimulatedTriggers(int tiTypeID) {
- return tiTriggersMatched[RECON][tiTypeID];
- }
-
- /**
- * Gets the number of simulated triggers from SSP bank clusters
- * that were matched.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getMatchedSSPSimulatedTriggers() {
- return matchedTriggers[SSP];
- }
-
- /**
- * Gets the number of simulated triggers from SSP bank clusters
- * that were matched for a given type of trigger when a given TI
- * bank flag was active.
- * @param tiTypeID - The identifier for the type of TI bank trigger
- * that should be active.
- * @param triggerTypeID - The identifier for the type of trigger.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getMatchedSSPSimulatedTriggers(int tiTypeID) {
- return tiTriggersMatched[SSP][tiTypeID];
- }
-
- /**
- * Gets the number of simulated triggers from reconstructed clusters
- * that were matched, but did not see full cut alignment.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getPartiallyMatchedReconSimulatedTriggers() {
- return simTriggers[RECON] - (matchedTriggers[RECON] + unmatchedTriggers[RECON]);
- }
-
- /**
- * Gets the number of simulated triggers from SSP bank clusters
- * that were matched, but did not see full cut alignment.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getPartiallyMatchedSSPSimulatedTriggers() {
- return simTriggers[SSP] - (matchedTriggers[SSP] + unmatchedTriggers[SSP]);
- }
-
- /**
- * Gets the number of times the specified cut failed for triggers
- * that were partially matched for triggers simulated from FADC
- * reconstructed clusters.
- * @param cutIndex - The numerical cut identifier.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getReconCutFailures(int cutIndex) {
- return getCutFailures(RECON, cutIndex);
- }
-
- /**
- * Gets the number of simulated triggers from reconstructed clusters
- * that were seen.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getReconSimulatedTriggers() {
- return simTriggers[RECON];
- }
-
- /**
- * Gets the number of simulated triggers from reconstructed clusters
- * that were seen for a given trigger type when a given TI bank
- * flag was active.
- * @param tiTypeID - The identifier for the type of TI bank trigger
- * that should be active.
- * @param triggerTypeID - The identifier for the type of trigger.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getReconSimulatedTriggers(int tiTypeID) {
- return tiTriggersSeen[RECON][tiTypeID];
- }
-
- /**
- * Gets the number of triggers reported by the SSP bank.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getReportedTriggers() {
- return reportedTriggers;
- }
-
- /**
- * Gets the number of times the specified cut failed for triggers
- * that were partially matched for triggers simulated from SSP
- * bank clusters.
- * @param cutIndex - The numerical cut identifier.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getSSPCutFailures(int cutIndex) {
- return getCutFailures(SSP, cutIndex);
- }
-
- /**
- * Gets the number of simulated triggers from SSP bank clusters
- * that were seen.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getSSPSimulatedTriggers() {
- return simTriggers[SSP];
- }
-
- /**
- * Gets the number of simulated triggers from SSP bank clusters
- * that were seen for a given trigger type when a given TI bank
- * flag was active.
- * @param tiTypeID - The identifier for the type of TI bank trigger
- * that should be active.
- * @param triggerTypeID - The identifier for the type of trigger.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getSSPSimulatedTriggers(int tiTypeID) {
- return tiTriggersSeen[SSP][tiTypeID];
- }
-
- /**
- * Gets the number of simulated triggers from reconstructed clusters
- * that were completely unmatched.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getUnmatchedReconSimulatedTriggers() {
- return unmatchedTriggers[RECON];
- }
-
- /**
- * Gets the number of simulated triggers from SSP bank clusters
- * that were completely unmatched.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- public int getUnmatchedSSPSimulatedTriggers() {
- return unmatchedTriggers[SSP];
- }
-
- /**
- * Gets the number of times the specified cut failed for triggers
- * that were partially matched for triggers simulated from the type
- * of cluster indicated.
- * @param type - Either <code>SSP</code> or <code>RECON</code>.
- * @param cutIndex - The numerical cut identifier.
- * @return Returns the number of triggers as an <code>int</code>.
- */
- private int getCutFailures(int type, int cutIndex) {
- // Ensure that the cut index is valid.
- if(cutIndex < 0 || cutIndex >= 4) {
- throw new IndexOutOfBoundsException(String.format("Cut index \"%d\" is not recognized.", cutIndex));
- }
-
- // Return the cut failures.
- return failedCuts[type][cutIndex];
- }
+ // Store the reference index for SSP simulated triggers and recon
+ // simulated triggers.
+ protected static final int SSP = 0;
+ protected static final int RECON = 1;
+
+ // Define TI trigger type identifiers.
+ public static final int SINGLES_0 = 0;
+ public static final int SINGLES_1 = 1;
+ public static final int PAIR_0 = 2;
+ public static final int PAIR_1 = 3;
+ public static final int PULSER = 4;
+ public static final int COSMIC = 5;
+
+ // Track the number of simulated triggers seen for each source type.
+ // SSP simulated triggers from the SSP bank clusters. Reconstructed
+ // simulated triggers come from clusters built from FADC data.
+ protected int[] simTriggers = new int[2];
+
+ // Also track the number of triggers reported by the SSP bank.
+ protected int reportedTriggers = 0;
+
+ // Track the number of simulated triggers of each type that were
+ // successfully matched.
+ protected int[] matchedTriggers = new int[2];
+
+ // Track the number of simulated triggers that could not be matched
+ // at all.
+ protected int[] unmatchedTriggers = new int[2];
+
+ // Track which cuts succeeded and which cuts failed for each type.
+ // Note that this is currently only tracked for SSP cluster triggers.
+ protected int[][] failedCuts = new int[2][4];
+
+ // Store the number of trigger matches seen over all events that
+ // contain a given TI flag.
+ protected int[][] tiTriggersSeen = new int[2][6];
+ protected int[][] tiTriggersMatched = new int[2][6];
+
+ /**
+ * Clears all of the statistical counters in the object.
+ */
+ void clear() {
+ // Clear all values.
+ for(int sourceType = 0; sourceType < 2; sourceType++) {
+ // Clear the general statistics.
+ simTriggers[sourceType] = 0;
+ matchedTriggers[sourceType] = 0;
+ unmatchedTriggers[sourceType] = 0;
+
+ // Clear the cut failure statistics.
+ for(int cutID = 0; cutID < 4; cutID++) {
+ failedCuts[sourceType][cutID] = 0;
+ }
+
+ // Clear the TI flag statistics.
+ for(int tiType = 0; tiType < 6; tiType++) {
+ tiTriggersSeen[sourceType][tiType] = 0;
+ tiTriggersMatched[sourceType][tiType] = 0;
+ }
+ }
+ }
+
+ @Override
+ public TriggerStatModule clone() {
+ // Make a new statistics module.
+ TriggerStatModule clone = new TriggerStatModule();
+
+ // Copy the values that do not depend on trigger source type.
+ clone.reportedTriggers = reportedTriggers;
+
+ // Set each value that depends on the trigger source type.
+ for(int sourceType = 0; sourceType < 2; sourceType++) {
+ clone.simTriggers[sourceType] = simTriggers[sourceType];
+ clone.matchedTriggers[sourceType] = matchedTriggers[sourceType];
+ clone.unmatchedTriggers[sourceType] = unmatchedTriggers[sourceType];
+
+ // Set the number of times each cut failed.
+ for(int cutID = 0; cutID < 4; cutID++) {
+ clone.failedCuts[sourceType][cutID] = failedCuts[sourceType][cutID];
+ }
+
+ // Copy the values for the TI flag trigger counters.
+ for(int tiType = 0; tiType < 6; tiType++) {
+ clone.tiTriggersSeen[sourceType][tiType] = tiTriggersSeen[sourceType][tiType];
+ clone.tiTriggersMatched[sourceType][tiType] = tiTriggersMatched[sourceType][tiType];
+ }
+ }
+
+ // Return the copied clone.
+ return clone;
+ }
+
+ /**
+ * Gets the number of simulated triggers from reconstructed clusters
+ * that were not matched.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getFailedReconSimulatedTriggers() {
+ return simTriggers[RECON] - matchedTriggers[RECON];
+ }
+
+ /**
+ * Gets the number of simulated triggers from SSP bank clusters
+ * that were not matched.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getFailedSSPSimulatedTriggers() {
+ return simTriggers[SSP] - matchedTriggers[SSP];
+ }
+
+ /**
+ * Gets the number of simulated triggers from reconstructed clusters
+ * that were matched.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getMatchedReconSimulatedTriggers() {
+ return matchedTriggers[RECON];
+ }
+
+ /**
+ * Gets the number of simulated triggers from reconstructed clusters
+ * that were matched for a given type of trigger when a given TI
+ * bank flag was active.
+ * @param tiTypeID - The identifier for the type of TI bank trigger
+ * that should be active.
+ * @param triggerTypeID - The identifier for the type of trigger.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getMatchedReconSimulatedTriggers(int tiTypeID) {
+ return tiTriggersMatched[RECON][tiTypeID];
+ }
+
+ /**
+ * Gets the number of simulated triggers from SSP bank clusters
+ * that were matched.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getMatchedSSPSimulatedTriggers() {
+ return matchedTriggers[SSP];
+ }
+
+ /**
+ * Gets the number of simulated triggers from SSP bank clusters
+ * that were matched for a given type of trigger when a given TI
+ * bank flag was active.
+ * @param tiTypeID - The identifier for the type of TI bank trigger
+ * that should be active.
+ * @param triggerTypeID - The identifier for the type of trigger.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getMatchedSSPSimulatedTriggers(int tiTypeID) {
+ return tiTriggersMatched[SSP][tiTypeID];
+ }
+
+ /**
+ * Gets the number of simulated triggers from reconstructed clusters
+ * that were matched, but did not see full cut alignment.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getPartiallyMatchedReconSimulatedTriggers() {
+ return simTriggers[RECON] - (matchedTriggers[RECON] + unmatchedTriggers[RECON]);
+ }
+
+ /**
+ * Gets the number of simulated triggers from SSP bank clusters
+ * that were matched, but did not see full cut alignment.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getPartiallyMatchedSSPSimulatedTriggers() {
+ return simTriggers[SSP] - (matchedTriggers[SSP] + unmatchedTriggers[SSP]);
+ }
+
+ /**
+ * Gets the number of times the specified cut failed for triggers
+ * that were partially matched for triggers simulated from FADC
+ * reconstructed clusters.
+ * @param cutIndex - The numerical cut identifier.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getReconCutFailures(int cutIndex) {
+ return getCutFailures(RECON, cutIndex);
+ }
+
+ /**
+ * Gets the number of simulated triggers from reconstructed clusters
+ * that were seen.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getReconSimulatedTriggers() {
+ return simTriggers[RECON];
+ }
+
+ /**
+ * Gets the number of simulated triggers from reconstructed clusters
+ * that were seen for a given trigger type when a given TI bank
+ * flag was active.
+ * @param tiTypeID - The identifier for the type of TI bank trigger
+ * that should be active.
+ * @param triggerTypeID - The identifier for the type of trigger.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getReconSimulatedTriggers(int tiTypeID) {
+ return tiTriggersSeen[RECON][tiTypeID];
+ }
+
+ /**
+ * Gets the number of triggers reported by the SSP bank.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getReportedTriggers() {
+ return reportedTriggers;
+ }
+
+ /**
+ * Gets the number of times the specified cut failed for triggers
+ * that were partially matched for triggers simulated from SSP
+ * bank clusters.
+ * @param cutIndex - The numerical cut identifier.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getSSPCutFailures(int cutIndex) {
+ return getCutFailures(SSP, cutIndex);
+ }
+
+ /**
+ * Gets the number of simulated triggers from SSP bank clusters
+ * that were seen.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getSSPSimulatedTriggers() {
+ return simTriggers[SSP];
+ }
+
+ /**
+ * Gets the number of simulated triggers from SSP bank clusters
+ * that were seen for a given trigger type when a given TI bank
+ * flag was active.
+ * @param tiTypeID - The identifier for the type of TI bank trigger
+ * that should be active.
+ * @param triggerTypeID - The identifier for the type of trigger.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getSSPSimulatedTriggers(int tiTypeID) {
+ return tiTriggersSeen[SSP][tiTypeID];
+ }
+
+ /**
+ * Gets the number of simulated triggers from reconstructed clusters
+ * that were completely unmatched.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getUnmatchedReconSimulatedTriggers() {
+ return unmatchedTriggers[RECON];
+ }
+
+ /**
+ * Gets the number of simulated triggers from SSP bank clusters
+ * that were completely unmatched.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ public int getUnmatchedSSPSimulatedTriggers() {
+ return unmatchedTriggers[SSP];
+ }
+
+ /**
+ * Gets the number of times the specified cut failed for triggers
+ * that were partially matched for triggers simulated from the type
+ * of cluster indicated.
+ * @param type - Either <code>SSP</code> or <code>RECON</code>.
+ * @param cutIndex - The numerical cut identifier.
+ * @return Returns the number of triggers as an <code>int</code>.
+ */
+ private int getCutFailures(int type, int cutIndex) {
+ // Ensure that the cut index is valid.
+ if(cutIndex < 0 || cutIndex >= 4) {
+ throw new IndexOutOfBoundsException(String.format("Cut index \"%d\" is not recognized.", cutIndex));
+ }
+
+ // Return the cut failures.
+ return failedCuts[type][cutIndex];
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/event/TriggerPlotsModule.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/event/TriggerPlotsModule.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/event/TriggerPlotsModule.java Wed Mar 9 11:43:24 2016
@@ -16,383 +16,383 @@
* @author Kyle McCarty
*/
public class TriggerPlotsModule {
- // Reference variables.
- private static final int RECON = 0;
- private static final int SSP = 1;
- private static final int ALL = 0;
- private static final int MATCHED = 1;
- private static final int FAILED = 2;
- private static final int TRIGGERED = 3;
- private static final int NO_CUTS = 4;
-
- // Class variables.
- private final double[] energySlopeParamF;
- private static final double MÃLLER_SUM_THRESHOLD = 0.750;
-
- // Plots.
- private AIDA aida = AIDA.defaultInstance();
- private IHistogram1D[][][] singlesClusterEnergyPlot = new IHistogram1D[2][2][5];
- private IHistogram1D[][][] singlesHitCountPlot = new IHistogram1D[2][2][5];
- private IHistogram1D[][][] singlesTriggerTimePlot = new IHistogram1D[2][2][5];
-
- private IHistogram1D[][][] pairClusterEnergyPlot = new IHistogram1D[2][2][5];
- private IHistogram1D[][][] pairHitCountPlot = new IHistogram1D[2][2][5];
- private IHistogram1D[][][] pairTimePlot = new IHistogram1D[2][2][5];
- private IHistogram1D[][][] pairSumPlot = new IHistogram1D[2][2][5];
+ // Reference variables.
+ private static final int RECON = 0;
+ private static final int SSP = 1;
+ private static final int ALL = 0;
+ private static final int MATCHED = 1;
+ private static final int FAILED = 2;
+ private static final int TRIGGERED = 3;
+ private static final int NO_CUTS = 4;
+
+ // Class variables.
+ private final double[] energySlopeParamF;
+ private static final double MÃLLER_SUM_THRESHOLD = 0.750;
+
+ // Plots.
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D[][][] singlesClusterEnergyPlot = new IHistogram1D[2][2][5];
+ private IHistogram1D[][][] singlesHitCountPlot = new IHistogram1D[2][2][5];
+ private IHistogram1D[][][] singlesTriggerTimePlot = new IHistogram1D[2][2][5];
+
+ private IHistogram1D[][][] pairClusterEnergyPlot = new IHistogram1D[2][2][5];
+ private IHistogram1D[][][] pairHitCountPlot = new IHistogram1D[2][2][5];
+ private IHistogram1D[][][] pairTimePlot = new IHistogram1D[2][2][5];
+ private IHistogram1D[][][] pairSumPlot = new IHistogram1D[2][2][5];
private IHistogram2D[][][] pairSumEnergiesPlot = new IHistogram2D[2][2][5];
- private IHistogram1D[][][] pairDiffPlot = new IHistogram1D[2][2][5];
- private IHistogram1D[][][] pairSlopePlot = new IHistogram1D[2][2][5];
- private IHistogram1D[][][] pairCoplanarityPlot = new IHistogram1D[2][2][5];
- private IHistogram1D[][][] pairTriggerTimePlot = new IHistogram1D[2][2][5];
-
- private IHistogram1D[] møllerClusterEnergyPlot = new IHistogram1D[2];
- private IHistogram1D[] møllerHitCountPlot = new IHistogram1D[2];
- private IHistogram1D[] møllerTimePlot = new IHistogram1D[2];
- private IHistogram1D[] møllerSumPlot = new IHistogram1D[2];
+ private IHistogram1D[][][] pairDiffPlot = new IHistogram1D[2][2][5];
+ private IHistogram1D[][][] pairSlopePlot = new IHistogram1D[2][2][5];
+ private IHistogram1D[][][] pairCoplanarityPlot = new IHistogram1D[2][2][5];
+ private IHistogram1D[][][] pairTriggerTimePlot = new IHistogram1D[2][2][5];
+
+ private IHistogram1D[] møllerClusterEnergyPlot = new IHistogram1D[2];
+ private IHistogram1D[] møllerHitCountPlot = new IHistogram1D[2];
+ private IHistogram1D[] møllerTimePlot = new IHistogram1D[2];
+ private IHistogram1D[] møllerSumPlot = new IHistogram1D[2];
private IHistogram2D[] møllerSumEnergiesPlot = new IHistogram2D[2];
- private IHistogram1D[] møllerDiffPlot = new IHistogram1D[2];
- private IHistogram1D[] møllerSlopePlot = new IHistogram1D[2];
- private IHistogram1D[] møllerCoplanarityPlot = new IHistogram1D[2];
- private IHistogram1D[] møllerTriggerTimePlot = new IHistogram1D[2];
+ private IHistogram1D[] møllerDiffPlot = new IHistogram1D[2];
+ private IHistogram1D[] møllerSlopePlot = new IHistogram1D[2];
+ private IHistogram1D[] møllerCoplanarityPlot = new IHistogram1D[2];
+ private IHistogram1D[] møllerTriggerTimePlot = new IHistogram1D[2];
private IHistogram2D[] møllerPositionPlot = new IHistogram2D[2];
-
- private IHistogram1D[] tridentClusterEnergyPlot = new IHistogram1D[2];
- private IHistogram1D[] tridentHitCountPlot = new IHistogram1D[2];
+
+ private IHistogram1D[] tridentClusterEnergyPlot = new IHistogram1D[2];
+ private IHistogram1D[] tridentHitCountPlot = new IHistogram1D[2];
private IHistogram2D[] tridentPositionPlot = new IHistogram2D[2];
-
- /**
- * Instantiates a new <code>TriggerPlotsModule</code> that will use
- * the indicated values for the energy slope conversion factor when
- * plotting energy slope values. Plots will be attached to the
- * default AIDA instance.
- * @param trigger0F - The energy slope conversion factor for the
- * first trigger.
- * @param trigger1F - The energy slope conversion factor for the
- * second trigger.
- */
- public TriggerPlotsModule(double trigger0F, double trigger1F) {
- // Store the energy slope parameter.
- energySlopeParamF = new double[2];
- energySlopeParamF[0] = trigger0F;
- energySlopeParamF[1] = trigger1F;
-
- // Define type string values.
- String[] sourceType = { "Recon", "SSP" };
- String[] resultType = { "All", "Matched", "Failed", "Triggered", "No Cuts" };
-
- // Instantiate the trigger result plots for each trigger.
- for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
- // Get the directory for the current triggers.
- String pairDir = "Pair Trigger " + triggerNum;
- String singlesDir = "Singles Trigger " + triggerNum;
-
- // Instantiate the trigger result plots for each type of
- // trigger source object.
- for(int source = 0; source < 2; source++) {
- // Instantiate the trigger result plots for each type
- // of trigger match result.
- for(int result = 0; result < 5; result++) {
- // Instantiate the singles trigger plots.
- singlesClusterEnergyPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Singles Cluster Energy (%s)",
- singlesDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
- singlesHitCountPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Singles Hit Count (%s)",
- singlesDir, sourceType[source], resultType[result]), 9, 0.5, 9.5);
- singlesTriggerTimePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Singles Trigger Time (%s)",
- singlesDir, sourceType[source], resultType[result]), 100, 0, 400);
-
- // Instantiate the pair trigger plots.
- pairHitCountPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Hit Count (%s)",
- pairDir, sourceType[source], resultType[result]), 9, 0.5, 9.5);
- pairClusterEnergyPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Cluster Energy (%s)",
- pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
- pairTimePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Time Coincidence (%s)",
- pairDir, sourceType[source], resultType[result]), 8, 0, 32);
- pairSumPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Energy Sum (%s)",
- pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
+
+ /**
+ * Instantiates a new <code>TriggerPlotsModule</code> that will use
+ * the indicated values for the energy slope conversion factor when
+ * plotting energy slope values. Plots will be attached to the
+ * default AIDA instance.
+ * @param trigger0F - The energy slope conversion factor for the
+ * first trigger.
+ * @param trigger1F - The energy slope conversion factor for the
+ * second trigger.
+ */
+ public TriggerPlotsModule(double trigger0F, double trigger1F) {
+ // Store the energy slope parameter.
+ energySlopeParamF = new double[2];
+ energySlopeParamF[0] = trigger0F;
+ energySlopeParamF[1] = trigger1F;
+
+ // Define type string values.
+ String[] sourceType = { "Recon", "SSP" };
+ String[] resultType = { "All", "Matched", "Failed", "Triggered", "No Cuts" };
+
+ // Instantiate the trigger result plots for each trigger.
+ for(int triggerNum = 0; triggerNum < 2; triggerNum++) {
+ // Get the directory for the current triggers.
+ String pairDir = "Pair Trigger " + triggerNum;
+ String singlesDir = "Singles Trigger " + triggerNum;
+
+ // Instantiate the trigger result plots for each type of
+ // trigger source object.
+ for(int source = 0; source < 2; source++) {
+ // Instantiate the trigger result plots for each type
+ // of trigger match result.
+ for(int result = 0; result < 5; result++) {
+ // Instantiate the singles trigger plots.
+ singlesClusterEnergyPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Singles Cluster Energy (%s)",
+ singlesDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
+ singlesHitCountPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Singles Hit Count (%s)",
+ singlesDir, sourceType[source], resultType[result]), 9, 0.5, 9.5);
+ singlesTriggerTimePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Singles Trigger Time (%s)",
+ singlesDir, sourceType[source], resultType[result]), 100, 0, 400);
+
+ // Instantiate the pair trigger plots.
+ pairHitCountPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Hit Count (%s)",
+ pairDir, sourceType[source], resultType[result]), 9, 0.5, 9.5);
+ pairClusterEnergyPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Cluster Energy (%s)",
+ pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
+ pairTimePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Time Coincidence (%s)",
+ pairDir, sourceType[source], resultType[result]), 8, 0, 32);
+ pairSumPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Energy Sum (%s)",
+ pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
pairSumEnergiesPlot[triggerNum][source][result] = aida.histogram2D(String.format("%s/%s/Pair 2D Energy Sum (%s)",
pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0, 300, 0.0, 3.0);
- pairDiffPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Energy Difference (%s)",
- pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
- pairSlopePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Energy Slope (%s)",
- pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
- pairCoplanarityPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Coplanarity (%s)",
- pairDir, sourceType[source], resultType[result]), 180, 0, 180);
- pairTriggerTimePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Trigger Time (%s)",
- pairDir, sourceType[source], resultType[result]), 100, 0, 400);
- }
- }
-
- // Instantiate the Møller plots.
- møllerHitCountPlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Hit Count",
- pairDir), 9, 0.5, 9.5);
- møllerClusterEnergyPlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Cluster Energy",
- pairDir), 300, 0.0, 3.0);
- møllerTimePlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Time Coincidence",
- pairDir), 8, 0, 32);
- møllerSumPlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Energy Sum",
- pairDir), 300, 0.0, 3.0);
- møllerSumEnergiesPlot[triggerNum] = aida.histogram2D(String.format("%s/Møller/Møller-like Pair 2D Energy Sum",
+ pairDiffPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Energy Difference (%s)",
+ pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
+ pairSlopePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Energy Slope (%s)",
+ pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0);
+ pairCoplanarityPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Coplanarity (%s)",
+ pairDir, sourceType[source], resultType[result]), 180, 0, 180);
+ pairTriggerTimePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s/Pair Trigger Time (%s)",
+ pairDir, sourceType[source], resultType[result]), 100, 0, 400);
+ }
+ }
+
+ // Instantiate the Møller plots.
+ møllerHitCountPlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Hit Count",
+ pairDir), 9, 0.5, 9.5);
+ møllerClusterEnergyPlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Cluster Energy",
+ pairDir), 300, 0.0, 3.0);
+ møllerTimePlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Time Coincidence",
+ pairDir), 8, 0, 32);
+ møllerSumPlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Energy Sum",
+ pairDir), 300, 0.0, 3.0);
+ møllerSumEnergiesPlot[triggerNum] = aida.histogram2D(String.format("%s/Møller/Møller-like Pair 2D Energy Sum",
pairDir), 300, 0.0, 3.0, 300, 0.0, 3.0);
møllerDiffPlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Energy Difference",
- pairDir), 300, 0.0, 3.0);
+ pairDir), 300, 0.0, 3.0);
møllerSlopePlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Energy Slope",
- pairDir), 300, 0.0, 3.0);
+ pairDir), 300, 0.0, 3.0);
møllerCoplanarityPlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Coplanarity",
- pairDir), 180, 0, 180);
+ pairDir), 180, 0, 180);
møllerTriggerTimePlot[triggerNum] = aida.histogram1D(String.format("%s/Møller/Møller-like Pair Trigger Time",
- pairDir), 100, 0, 400);
+ pairDir), 100, 0, 400);
møllerPositionPlot[triggerNum] = aida.histogram2D(String.format("%s/Møller/Møller-like Pair Position",
- pairDir), 46, -23, 23, 11, -5.5, 5.5);
+ pairDir), 46, -23, 23, 11, -5.5, 5.5);
// Instantiate the trident plots.
tridentHitCountPlot[triggerNum] = aida.histogram1D(String.format("%s/Trident/Trident-like Pair Hit Count",
- singlesDir), 9, 0.5, 9.5);
- tridentClusterEnergyPlot[triggerNum] = aida.histogram1D(String.format("%s/Trident/Trident-like Pair Cluster Energy",
- singlesDir), 300, 0.0, 3.0);
+ singlesDir), 9, 0.5, 9.5);
+ tridentClusterEnergyPlot[triggerNum] = aida.histogram1D(String.format("%s/Trident/Trident-like Pair Cluster Energy",
+ singlesDir), 300, 0.0, 3.0);
tridentPositionPlot[triggerNum] = aida.histogram2D(String.format("%s/Trident/Trident-like Pair Position",
- singlesDir), 46, -23, 23, 11, -5.5, 5.5);
- }
- }
-
- /**
- * Populates the "failed" plots of the appropriate type with the
- * cut results from the argument trigger.
- * @param trigger - The trigger from which to populate the plots.
- */
- public void failedTrigger(Trigger<?> trigger) {
- processTrigger(trigger, FAILED);
- }
-
- /**
- * Populates the "matched" plots of the appropriate type with the
- * cut results from the argument trigger.
- * @param trigger - The trigger from which to populate the plots.
- */
- public void matchedTrigger(Trigger<?> trigger) {
- processTrigger(trigger, MATCHED);
- }
-
- /**
- * Populates the "triggered" plots of the appropriate type with the
- * cut results from the argument trigger.
- * @param trigger - The trigger from which to populate the plots.
- */
- public void passedTrigger(Trigger<?> trigger) {
- processTrigger(trigger, TRIGGERED);
- }
-
- /**
- * Indicates that a cluster was seen by a trigger and adds it to
- * the "no cuts" plots.
- * @param triggerNum - The number of the trigger.
- * @param cluster - The cluster that was seen.
- */
- public void sawCluster(int triggerNum, Cluster cluster) {
- processSingles(triggerNum, NO_CUTS, cluster);
- }
-
- /**
- * Indicates that a cluster was seen by a trigger and adds it to
- * the "no cuts" plots.
- * @param triggerNum - The number of the trigger.
- * @param cluster - The cluster that was seen.
- */
- public void sawCluster(int triggerNum, SSPCluster cluster) {
- processSingles(triggerNum, NO_CUTS, cluster);
- }
-
- /**
- * Indicates that a cluster pair was seen by a trigger and adds it
- * to the "no cuts" plots.
- * @param triggerNum - The number of the trigger.
- * @param pair - The cluster pair that was seen.
- */
- public void sawPair(int triggerNum, Cluster[] pair) {
- processPair(triggerNum, NO_CUTS, pair);
- }
-
- /**
- * Indicates that a cluster pair was seen by a trigger and adds it
- * to the "no cuts" plots.
- * @param triggerNum - The number of the trigger.
- * @param pair - The cluster pair that was seen.
- */
- public void sawPair(int triggerNum, SSPCluster[] pair) {
- processPair(triggerNum, NO_CUTS, pair);
- }
-
- /**
- * Populates the "all" plots of the appropriate type with the cut
- * results from the argument trigger.
- * @param trigger - The trigger from which to populate the plots.
- */
- public void sawTrigger(Trigger<?> trigger) {
- processTrigger(trigger, ALL);
- }
-
- /**
- * Sets the energy slope conversion factor to be used to calculate
- * the energy slope value for plots.
- * @param triggerNum - The trigger for which the conversion factor
- * should be used.
- * @param value - The conversion factor in units of GeV/mm.
- */
- public void setEnergySlopeParamF(int triggerNum, double value) {
- // Make sure that the trigger number is valid.
- if(triggerNum < 0 || triggerNum > 1) {
- throw new IllegalArgumentException(String.format("Trigger number %d is not valid.", triggerNum));
- }
-
- // Set the parameter.
- energySlopeParamF[triggerNum] = value;
- }
-
- /**
- * Populates the indicated type of plots of the appropriate type
- * for the argument trigger.
- * @param trigger - The trigger from which to populate the plots.
- * @param plotType - The type of plot to populate. This must be one
- * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
- */
- private void processTrigger(Trigger<?> trigger, int plotType) {
- // Get the trigger number and source.
- Object source = trigger.getTriggerSource();
- int triggerNum = trigger.getTriggerNumber();
-
- // Populate the plots using the appropriate method.
- if(source instanceof Cluster) {
- processSingles(triggerNum, plotType, (Cluster) source);
- }
- else if(source instanceof SSPCluster) {
- processSingles(triggerNum, plotType, (SSPCluster) source);
- }
- else if(source instanceof Cluster[]) {
- processPair(triggerNum, plotType, (Cluster[]) source);
- }
- else if(source instanceof SSPCluster[]) {
- processPair(triggerNum, plotType, (SSPCluster[]) source);
- }
-
- // If the trigger source is unsupported, produce an error.
- else {
- throw new IllegalArgumentException(String.format("Trigger source \"%s\" is not supported.", source.getClass().getSimpleName()));
- }
- }
-
- /**
- * Populates the trigger singles plots for the indicated type for
- * reconstructed clusters.
- * @param triggerNum - The trigger number of the source trigger.
- * @param plotType - The type of plot to populate. This must be one
- * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
- * @param pair - The triggering cluster.
- */
- private void processSingles(int triggerNum, int plotType, Cluster cluster) {
- // Fill the cluster singles plots.
- singlesHitCountPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterHitCount(cluster));
- singlesClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(cluster));
- singlesTriggerTimePlot[triggerNum][RECON][plotType].fill(cluster.getCalorimeterHits().get(0).getTime());
- }
-
- /**
- * Populates the trigger singles plots for the indicated type for SSP
- * clusters.
- * @param triggerNum - The trigger number of the source trigger.
- * @param plotType - The type of plot to populate. This must be one
- * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
- * @param pair - The triggering cluster.
- */
- private void processSingles(int triggerNum, int plotType, SSPCluster cluster) {
- // Fill the cluster singles plots.
- singlesHitCountPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterHitCount(cluster));
- singlesClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(cluster));
- singlesTriggerTimePlot[triggerNum][SSP][plotType].fill(cluster.getTime());
-
- // Check if this cluster is "trident-like."
- // TODO: Define "trident-like."
- boolean processTrident = false;
-
- // If this is a trident-like event, add it to the trident plots.
- if(processTrident) {
- tridentHitCountPlot[triggerNum].fill(TriggerModule.getValueClusterHitCount(cluster));
- tridentClusterEnergyPlot[triggerNum].fill(TriggerModule.getValueClusterTotalEnergy(cluster));
- tridentPositionPlot[triggerNum].fill(cluster.getXIndex() > 0 ? cluster.getXIndex() - 1 : cluster.getXIndex(), cluster.getYIndex());
- }
- }
-
- /**
- * Populates the trigger pair plots for the indicated type for
- * reconstructed cluster pairs.
- * @param triggerNum - The trigger number of the source trigger.
- * @param plotType - The type of plot to populate. This must be one
- * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
- * @param pair - The triggering pair.
- */
- private void processPair(int triggerNum, int plotType, Cluster[] pair) {
- // Fill the cluster singles plots.
- pairHitCountPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterHitCount(pair[0]));
- pairHitCountPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterHitCount(pair[1]));
- pairClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[0]));
- pairClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[1]));
- pairTriggerTimePlot[triggerNum][RECON][plotType].fill(pair[0].getCalorimeterHits().get(0).getTime());
- pairTriggerTimePlot[triggerNum][RECON][plotType].fill(pair[1].getCalorimeterHits().get(0).getTime());
-
- // Fill the cluster pair plots.
- pairTimePlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueTimeCoincidence(pair));
- pairSumPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueEnergySum(pair));
+ singlesDir), 46, -23, 23, 11, -5.5, 5.5);
+ }
+ }
+
+ /**
+ * Populates the "failed" plots of the appropriate type with the
+ * cut results from the argument trigger.
+ * @param trigger - The trigger from which to populate the plots.
+ */
+ public void failedTrigger(Trigger<?> trigger) {
+ processTrigger(trigger, FAILED);
+ }
+
+ /**
+ * Populates the "matched" plots of the appropriate type with the
+ * cut results from the argument trigger.
+ * @param trigger - The trigger from which to populate the plots.
+ */
+ public void matchedTrigger(Trigger<?> trigger) {
+ processTrigger(trigger, MATCHED);
+ }
+
+ /**
+ * Populates the "triggered" plots of the appropriate type with the
+ * cut results from the argument trigger.
+ * @param trigger - The trigger from which to populate the plots.
+ */
+ public void passedTrigger(Trigger<?> trigger) {
+ processTrigger(trigger, TRIGGERED);
+ }
+
+ /**
+ * Indicates that a cluster was seen by a trigger and adds it to
+ * the "no cuts" plots.
+ * @param triggerNum - The number of the trigger.
+ * @param cluster - The cluster that was seen.
+ */
+ public void sawCluster(int triggerNum, Cluster cluster) {
+ processSingles(triggerNum, NO_CUTS, cluster);
+ }
+
+ /**
+ * Indicates that a cluster was seen by a trigger and adds it to
+ * the "no cuts" plots.
+ * @param triggerNum - The number of the trigger.
+ * @param cluster - The cluster that was seen.
+ */
+ public void sawCluster(int triggerNum, SSPCluster cluster) {
+ processSingles(triggerNum, NO_CUTS, cluster);
+ }
+
+ /**
+ * Indicates that a cluster pair was seen by a trigger and adds it
+ * to the "no cuts" plots.
+ * @param triggerNum - The number of the trigger.
+ * @param pair - The cluster pair that was seen.
+ */
+ public void sawPair(int triggerNum, Cluster[] pair) {
+ processPair(triggerNum, NO_CUTS, pair);
+ }
+
+ /**
+ * Indicates that a cluster pair was seen by a trigger and adds it
+ * to the "no cuts" plots.
+ * @param triggerNum - The number of the trigger.
+ * @param pair - The cluster pair that was seen.
+ */
+ public void sawPair(int triggerNum, SSPCluster[] pair) {
+ processPair(triggerNum, NO_CUTS, pair);
+ }
+
+ /**
+ * Populates the "all" plots of the appropriate type with the cut
+ * results from the argument trigger.
+ * @param trigger - The trigger from which to populate the plots.
+ */
+ public void sawTrigger(Trigger<?> trigger) {
+ processTrigger(trigger, ALL);
+ }
+
+ /**
+ * Sets the energy slope conversion factor to be used to calculate
+ * the energy slope value for plots.
+ * @param triggerNum - The trigger for which the conversion factor
+ * should be used.
+ * @param value - The conversion factor in units of GeV/mm.
+ */
+ public void setEnergySlopeParamF(int triggerNum, double value) {
+ // Make sure that the trigger number is valid.
+ if(triggerNum < 0 || triggerNum > 1) {
+ throw new IllegalArgumentException(String.format("Trigger number %d is not valid.", triggerNum));
+ }
+
+ // Set the parameter.
+ energySlopeParamF[triggerNum] = value;
+ }
+
+ /**
+ * Populates the indicated type of plots of the appropriate type
+ * for the argument trigger.
+ * @param trigger - The trigger from which to populate the plots.
+ * @param plotType - The type of plot to populate. This must be one
+ * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
+ */
+ private void processTrigger(Trigger<?> trigger, int plotType) {
+ // Get the trigger number and source.
+ Object source = trigger.getTriggerSource();
+ int triggerNum = trigger.getTriggerNumber();
+
+ // Populate the plots using the appropriate method.
+ if(source instanceof Cluster) {
+ processSingles(triggerNum, plotType, (Cluster) source);
+ }
+ else if(source instanceof SSPCluster) {
+ processSingles(triggerNum, plotType, (SSPCluster) source);
+ }
+ else if(source instanceof Cluster[]) {
+ processPair(triggerNum, plotType, (Cluster[]) source);
+ }
+ else if(source instanceof SSPCluster[]) {
+ processPair(triggerNum, plotType, (SSPCluster[]) source);
+ }
+
+ // If the trigger source is unsupported, produce an error.
+ else {
+ throw new IllegalArgumentException(String.format("Trigger source \"%s\" is not supported.", source.getClass().getSimpleName()));
+ }
+ }
+
+ /**
+ * Populates the trigger singles plots for the indicated type for
+ * reconstructed clusters.
+ * @param triggerNum - The trigger number of the source trigger.
+ * @param plotType - The type of plot to populate. This must be one
+ * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
+ * @param pair - The triggering cluster.
+ */
+ private void processSingles(int triggerNum, int plotType, Cluster cluster) {
+ // Fill the cluster singles plots.
+ singlesHitCountPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterHitCount(cluster));
+ singlesClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(cluster));
+ singlesTriggerTimePlot[triggerNum][RECON][plotType].fill(cluster.getCalorimeterHits().get(0).getTime());
+ }
+
+ /**
+ * Populates the trigger singles plots for the indicated type for SSP
+ * clusters.
+ * @param triggerNum - The trigger number of the source trigger.
+ * @param plotType - The type of plot to populate. This must be one
+ * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
+ * @param pair - The triggering cluster.
+ */
+ private void processSingles(int triggerNum, int plotType, SSPCluster cluster) {
+ // Fill the cluster singles plots.
+ singlesHitCountPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterHitCount(cluster));
+ singlesClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(cluster));
+ singlesTriggerTimePlot[triggerNum][SSP][plotType].fill(cluster.getTime());
+
+ // Check if this cluster is "trident-like."
+ // TODO: Define "trident-like."
+ boolean processTrident = false;
+
+ // If this is a trident-like event, add it to the trident plots.
+ if(processTrident) {
+ tridentHitCountPlot[triggerNum].fill(TriggerModule.getValueClusterHitCount(cluster));
+ tridentClusterEnergyPlot[triggerNum].fill(TriggerModule.getValueClusterTotalEnergy(cluster));
+ tridentPositionPlot[triggerNum].fill(cluster.getXIndex() > 0 ? cluster.getXIndex() - 1 : cluster.getXIndex(), cluster.getYIndex());
+ }
+ }
+
+ /**
+ * Populates the trigger pair plots for the indicated type for
+ * reconstructed cluster pairs.
+ * @param triggerNum - The trigger number of the source trigger.
+ * @param plotType - The type of plot to populate. This must be one
+ * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
+ * @param pair - The triggering pair.
+ */
+ private void processPair(int triggerNum, int plotType, Cluster[] pair) {
+ // Fill the cluster singles plots.
+ pairHitCountPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterHitCount(pair[0]));
+ pairHitCountPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterHitCount(pair[1]));
+ pairClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[0]));
+ pairClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[1]));
+ pairTriggerTimePlot[triggerNum][RECON][plotType].fill(pair[0].getCalorimeterHits().get(0).getTime());
+ pairTriggerTimePlot[triggerNum][RECON][plotType].fill(pair[1].getCalorimeterHits().get(0).getTime());
+
+ // Fill the cluster pair plots.
+ pairTimePlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueTimeCoincidence(pair));
+ pairSumPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueEnergySum(pair));
pairSumEnergiesPlot[triggerNum][RECON][plotType].fill(pair[0].getEnergy(), pair[1].getEnergy());
- pairDiffPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueEnergyDifference(pair));
- pairSlopePlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF[triggerNum]));
- pairCoplanarityPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueCoplanarity(pair));
- }
-
- /**
- * Populates the trigger pair plots for the indicated type for SSP
- * cluster pairs.
- * @param triggerNum - The trigger number of the source trigger.
- * @param plotType - The type of plot to populate. This must be one
- * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
- * @param pair - The triggering pair.
- */
- private void processPair(int triggerNum, int plotType, SSPCluster[] pair) {
- // Fill the cluster singles plots.
- pairHitCountPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterHitCount(pair[0]));
- pairHitCountPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterHitCount(pair[1]));
- pairClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[0]));
- pairClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[1]));
- pairTriggerTimePlot[triggerNum][SSP][plotType].fill(pair[0].getTime());
- pairTriggerTimePlot[triggerNum][SSP][plotType].fill(pair[1].getTime());
-
- // Fill the cluster pair plots.
- pairTimePlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueTimeCoincidence(pair));
- pairSumPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueEnergySum(pair));
+ pairDiffPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueEnergyDifference(pair));
+ pairSlopePlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF[triggerNum]));
+ pairCoplanarityPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueCoplanarity(pair));
+ }
+
+ /**
+ * Populates the trigger pair plots for the indicated type for SSP
+ * cluster pairs.
+ * @param triggerNum - The trigger number of the source trigger.
+ * @param plotType - The type of plot to populate. This must be one
+ * of <code>ALL</code>, <code>MATCHED</code>, or <code>FAILED</code>.
+ * @param pair - The triggering pair.
+ */
+ private void processPair(int triggerNum, int plotType, SSPCluster[] pair) {
+ // Fill the cluster singles plots.
+ pairHitCountPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterHitCount(pair[0]));
+ pairHitCountPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterHitCount(pair[1]));
+ pairClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[0]));
+ pairClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[1]));
+ pairTriggerTimePlot[triggerNum][SSP][plotType].fill(pair[0].getTime());
+ pairTriggerTimePlot[triggerNum][SSP][plotType].fill(pair[1].getTime());
+
+ // Fill the cluster pair plots.
+ pairTimePlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueTimeCoincidence(pair));
+ pairSumPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueEnergySum(pair));
pairSumEnergiesPlot[triggerNum][SSP][plotType].fill(pair[0].getEnergy(), pair[1].getEnergy());
- pairDiffPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueEnergyDifference(pair));
- pairSlopePlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF[triggerNum]));
- pairCoplanarityPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueCoplanarity(pair));
-
- // Check if this pair is "Møller-like."
- boolean processMøller = TriggerModule.getValueEnergySum(pair) >= MÃLLER_SUM_THRESHOLD;
-
- // If the pair is Møller-like, populate the Møller plots.
- if(processMøller) {
- // Fill the cluster singles plots.
- møllerHitCountPlot[triggerNum].fill(TriggerModule.getValueClusterHitCount(pair[0]));
- møllerHitCountPlot[triggerNum].fill(TriggerModule.getValueClusterHitCount(pair[1]));
- møllerClusterEnergyPlot[triggerNum].fill(TriggerModule.getValueClusterTotalEnergy(pair[0]));
- møllerClusterEnergyPlot[triggerNum].fill(TriggerModule.getValueClusterTotalEnergy(pair[1]));
- møllerTriggerTimePlot[triggerNum].fill(pair[0].getTime());
- møllerTriggerTimePlot[triggerNum].fill(pair[1].getTime());
- møllerPositionPlot[triggerNum].fill(pair[0].getXIndex() > 0 ? pair[0].getXIndex() - 1 : pair[0].getXIndex(), pair[0].getYIndex());
- møllerPositionPlot[triggerNum].fill(pair[1].getXIndex() > 0 ? pair[1].getXIndex() - 1 : pair[1].getXIndex(), pair[1].getYIndex());
-
- // Fill the cluster pair plots.
- møllerTimePlot[triggerNum].fill(TriggerModule.getValueTimeCoincidence(pair));
- møllerSumPlot[triggerNum].fill(TriggerModule.getValueEnergySum(pair));
- møllerSumEnergiesPlot[triggerNum].fill(pair[0].getEnergy(), pair[1].getEnergy());
- møllerDiffPlot[triggerNum].fill(TriggerModule.getValueEnergyDifference(pair));
- møllerSlopePlot[triggerNum].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF[triggerNum]));
- møllerCoplanarityPlot[triggerNum].fill(TriggerModule.getValueCoplanarity(pair));
- }
- }
+ pairDiffPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueEnergyDifference(pair));
+ pairSlopePlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF[triggerNum]));
+ pairCoplanarityPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueCoplanarity(pair));
+
+ // Check if this pair is "Møller-like."
+ boolean processMøller = TriggerModule.getValueEnergySum(pair) >= MÃLLER_SUM_THRESHOLD;
+
+ // If the pair is Møller-like, populate the Møller plots.
+ if(processMøller) {
+ // Fill the cluster singles plots.
+ møllerHitCountPlot[triggerNum].fill(TriggerModule.getValueClusterHitCount(pair[0]));
+ møllerHitCountPlot[triggerNum].fill(TriggerModule.getValueClusterHitCount(pair[1]));
+ møllerClusterEnergyPlot[triggerNum].fill(TriggerModule.getValueClusterTotalEnergy(pair[0]));
+ møllerClusterEnergyPlot[triggerNum].fill(TriggerModule.getValueClusterTotalEnergy(pair[1]));
+ møllerTriggerTimePlot[triggerNum].fill(pair[0].getTime());
+ møllerTriggerTimePlot[triggerNum].fill(pair[1].getTime());
+ møllerPositionPlot[triggerNum].fill(pair[0].getXIndex() > 0 ? pair[0].getXIndex() - 1 : pair[0].getXIndex(), pair[0].getYIndex());
+ møllerPositionPlot[triggerNum].fill(pair[1].getXIndex() > 0 ? pair[1].getXIndex() - 1 : pair[1].getXIndex(), pair[1].getYIndex());
+
+ // Fill the cluster pair plots.
+ møllerTimePlot[triggerNum].fill(TriggerModule.getValueTimeCoincidence(pair));
+ møllerSumPlot[triggerNum].fill(TriggerModule.getValueEnergySum(pair));
+ møllerSumEnergiesPlot[triggerNum].fill(pair[0].getEnergy(), pair[1].getEnergy());
+ møllerDiffPlot[triggerNum].fill(TriggerModule.getValueEnergyDifference(pair));
+ møllerSlopePlot[triggerNum].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF[triggerNum]));
+ møllerCoplanarityPlot[triggerNum].fill(TriggerModule.getValueCoplanarity(pair));
+ }
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/ComponentUtils.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/ComponentUtils.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/ComponentUtils.java Wed Mar 9 11:43:24 2016
@@ -11,116 +11,116 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class ComponentUtils {
- /** The default spacing used between a horizontal edge of one
- * component and the horizontal edge of another. */
- public static final int hinternal = 10;
- /** The default spacing used between a vertical edge of one
- * component and the vertical edge of another. */
- public static final int vinternal = 10;
- /** The default spacing used between a horizontal edge of one
- * component and the edge of its parent component. */
- public static final int hexternal = 0;
- /** The default spacing used between a vertical edge of one
- * component and the edge of its parent component. */
- public static final int vexternal = 0;
-
- /**
- * Gets a <code>String</code> composed of a number of instances of
- * character <code>c</code> equal to <code>number</code>.
- * @param c - The character to repeat.
- * @param number - The number of repetitions.
- * @return Returns the repeated character as a <code>String</code>.
- */
- public static final String getChars(char c, int number) {
- // Create a buffer to store the characters in.
- StringBuffer s = new StringBuffer();
-
- // Add the indicated number of instances.
- for(int i = 0; i < number; i++) {
- s.append(c);
- }
-
- // Return the string.
- return s.toString();
- }
-
- /**
- * Gets the number of digits in the base-10 String representation
- * of an integer primitive. Negative signs are not included in the
- * digit count.
- * @param value - The value of which to obtain the length.
- * @return Returns the number of digits in the String representation
- * of the argument value.
- */
- public static final int getDigits(int value) {
- return TriggerDiagnosticUtil.getDigits(value);
- }
-
- /**
- * Gets the maximum value from a list of values.
- * @param values - The values to compare.
- * @return Returns the largest of the argument values.
- * @throws IllegalArgumentException Occurs if no values are given.
- */
- public static final int max(int... values) throws IllegalArgumentException {
- // Throw an error if no arguments are provided.
- if(values == null || values.length == 0) {
- throw new IllegalArgumentException("Can not determine maximum value from a list of 0 values.");
- }
-
- // If there is only one value, return it.
- if(values.length == 1) { return values[0]; }
-
- // Otherwise, get the largest value.
- int largest = Integer.MIN_VALUE;
- for(int value : values) {
- if(value > largest) { largest = value; }
- }
-
- // Return the result.
- return largest;
- }
-
- /**
- * Gets the x-coordinate immediately to the right of the given
- * component.
- * @param c - The component of which to find the edge.
- * @return Returns the x-coordinate as an <code>int</code> value.
- */
- public static final int getNextX(Component c) {
- return getNextX(c, 0);
- }
-
- /**
- * Gets the x-coordinate a given distance to the right edge of the
- * argument component.
- * @param c - The component of which to find the edge.
- * @param spacing - The additional spacing past the edge of the
- * component to add.
- * @return Returns the x-coordinate as an <code>int</code> value.
- */
- public static final int getNextX(Component c, int spacing) {
- return c.getX() + c.getWidth() + spacing;
- }
-
- /**
- * Gets the y-coordinate immediately below the given component.
- * @param c - The component of which to find the edge.
- * @return Returns the y-coordinate as an <code>int</code> value.
- */
- public static final int getNextY(Component c) {
- return getNextY(c, 0);
- }
-
- /**
- * Gets the y-coordinate a given distance below the bottom edge
- * of the argument component.
- * @param c - The component of which to find the edge.
- * @param spacing - The additional spacing past the edge of the
- * component to add.
- * @return Returns the y-coordinate as an <code>int</code> value.
- */
- public static final int getNextY(Component c, int spacing) {
- return c.getY() + c.getHeight() + spacing;
- }
+ /** The default spacing used between a horizontal edge of one
+ * component and the horizontal edge of another. */
+ public static final int hinternal = 10;
+ /** The default spacing used between a vertical edge of one
+ * component and the vertical edge of another. */
+ public static final int vinternal = 10;
+ /** The default spacing used between a horizontal edge of one
+ * component and the edge of its parent component. */
+ public static final int hexternal = 0;
+ /** The default spacing used between a vertical edge of one
+ * component and the edge of its parent component. */
+ public static final int vexternal = 0;
+
+ /**
+ * Gets a <code>String</code> composed of a number of instances of
+ * character <code>c</code> equal to <code>number</code>.
+ * @param c - The character to repeat.
+ * @param number - The number of repetitions.
+ * @return Returns the repeated character as a <code>String</code>.
+ */
+ public static final String getChars(char c, int number) {
+ // Create a buffer to store the characters in.
+ StringBuffer s = new StringBuffer();
+
+ // Add the indicated number of instances.
+ for(int i = 0; i < number; i++) {
+ s.append(c);
+ }
+
+ // Return the string.
+ return s.toString();
+ }
+
+ /**
+ * Gets the number of digits in the base-10 String representation
+ * of an integer primitive. Negative signs are not included in the
+ * digit count.
+ * @param value - The value of which to obtain the length.
+ * @return Returns the number of digits in the String representation
+ * of the argument value.
+ */
+ public static final int getDigits(int value) {
+ return TriggerDiagnosticUtil.getDigits(value);
+ }
+
+ /**
+ * Gets the maximum value from a list of values.
+ * @param values - The values to compare.
+ * @return Returns the largest of the argument values.
+ * @throws IllegalArgumentException Occurs if no values are given.
+ */
+ public static final int max(int... values) throws IllegalArgumentException {
+ // Throw an error if no arguments are provided.
+ if(values == null || values.length == 0) {
+ throw new IllegalArgumentException("Can not determine maximum value from a list of 0 values.");
+ }
+
+ // If there is only one value, return it.
+ if(values.length == 1) { return values[0]; }
+
+ // Otherwise, get the largest value.
+ int largest = Integer.MIN_VALUE;
+ for(int value : values) {
+ if(value > largest) { largest = value; }
+ }
+
+ // Return the result.
+ return largest;
+ }
+
+ /**
+ * Gets the x-coordinate immediately to the right of the given
+ * component.
+ * @param c - The component of which to find the edge.
+ * @return Returns the x-coordinate as an <code>int</code> value.
+ */
+ public static final int getNextX(Component c) {
+ return getNextX(c, 0);
+ }
+
+ /**
+ * Gets the x-coordinate a given distance to the right edge of the
+ * argument component.
+ * @param c - The component of which to find the edge.
+ * @param spacing - The additional spacing past the edge of the
+ * component to add.
+ * @return Returns the x-coordinate as an <code>int</code> value.
+ */
+ public static final int getNextX(Component c, int spacing) {
+ return c.getX() + c.getWidth() + spacing;
+ }
+
+ /**
+ * Gets the y-coordinate immediately below the given component.
+ * @param c - The component of which to find the edge.
+ * @return Returns the y-coordinate as an <code>int</code> value.
+ */
+ public static final int getNextY(Component c) {
+ return getNextY(c, 0);
+ }
+
+ /**
+ * Gets the y-coordinate a given distance below the bottom edge
+ * of the argument component.
+ * @param c - The component of which to find the edge.
+ * @param spacing - The additional spacing past the edge of the
+ * component to add.
+ * @return Returns the y-coordinate as an <code>int</code> value.
+ */
+ public static final int getNextY(Component c, int spacing) {
+ return c.getY() + c.getHeight() + spacing;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/OutputLogger.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/OutputLogger.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/OutputLogger.java Wed Mar 9 11:43:24 2016
@@ -3,28 +3,28 @@
public class OutputLogger {
private static StringBuffer outputBuffer = new StringBuffer();
- public static final void printf(String text, Object... args) {
- outputBuffer.append(String.format(text, args));
- }
-
- public static final void println() { printf(String.format("%n")); }
-
- public static final void println(String text) { printf(String.format("%s%n", text)); }
-
- public static final void print(String text) { printf(text); }
-
- public static final void printLog() {
- System.out.println(outputBuffer.toString());
- clearLog();
- }
-
- public static final void printNewLine() { println(); }
-
- public static final void printNewLine(int quantity) {
- for(int i = 0; i < quantity; i++) { println(); }
- }
-
- public static final void clearLog() {
- outputBuffer = new StringBuffer();
- }
+ public static final void printf(String text, Object... args) {
+ outputBuffer.append(String.format(text, args));
+ }
+
+ public static final void println() { printf(String.format("%n")); }
+
+ public static final void println(String text) { printf(String.format("%s%n", text)); }
+
+ public static final void print(String text) { printf(text); }
+
+ public static final void printLog() {
+ System.out.println(outputBuffer.toString());
+ clearLog();
+ }
+
+ public static final void printNewLine() { println(); }
+
+ public static final void printNewLine(int quantity) {
+ for(int i = 0; i < quantity; i++) { println(); }
+ }
+
+ public static final void clearLog() {
+ outputBuffer = new StringBuffer();
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/Pair.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/Pair.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/Pair.java Wed Mar 9 11:43:24 2016
@@ -8,32 +8,32 @@
* @param <F> - The object type of the second element in the pair.
*/
public class Pair<E, F> {
- private final E firstObject;
- private final F secondObject;
-
- /**
- * Creates a pair of the two indicated objects.
- * @param firstObject - The first object.
- * @param secondObject - The second object.
- */
- public Pair(E firstElement, F secondElement) {
- this.firstObject = firstElement;
- this.secondObject = secondElement;
- }
-
- /**
- * Gets the first element of the pair.
- * @return Returns the first element.
- */
- public E getFirstElement() {
- return firstObject;
- }
-
- /**
- * Gets the second element of the pair.
- * @return Returns the second element.
- */
- public F getSecondElement() {
- return secondObject;
- }
+ private final E firstObject;
+ private final F secondObject;
+
+ /**
+ * Creates a pair of the two indicated objects.
+ * @param firstObject - The first object.
+ * @param secondObject - The second object.
+ */
+ public Pair(E firstElement, F secondElement) {
+ this.firstObject = firstElement;
+ this.secondObject = secondElement;
+ }
+
+ /**
+ * Gets the first element of the pair.
+ * @return Returns the first element.
+ */
+ public E getFirstElement() {
+ return firstObject;
+ }
+
+ /**
+ * Gets the second element of the pair.
+ * @return Returns the second element.
+ */
+ public F getSecondElement() {
+ return secondObject;
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/PairTrigger.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/PairTrigger.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/PairTrigger.java Wed Mar 9 11:43:24 2016
@@ -3,164 +3,164 @@
import org.hps.record.triggerbank.TriggerModule;
public class PairTrigger<E> extends SinglesTrigger<E> {
- // Define the supported trigger cuts.
- private static final String PAIR_ENERGY_SUM_LOW = TriggerModule.PAIR_ENERGY_SUM_LOW;
- private static final String PAIR_ENERGY_SUM_HIGH = TriggerModule.PAIR_ENERGY_SUM_HIGH;
- private static final String PAIR_ENERGY_DIFFERENCE_HIGH = TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH;
- private static final String PAIR_ENERGY_SLOPE_LOW = TriggerModule.PAIR_ENERGY_SLOPE_LOW;
- private static final String PAIR_COPLANARITY_HIGH = TriggerModule.PAIR_COPLANARITY_HIGH;
+ // Define the supported trigger cuts.
+ private static final String PAIR_ENERGY_SUM_LOW = TriggerModule.PAIR_ENERGY_SUM_LOW;
+ private static final String PAIR_ENERGY_SUM_HIGH = TriggerModule.PAIR_ENERGY_SUM_HIGH;
+ private static final String PAIR_ENERGY_DIFFERENCE_HIGH = TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH;
+ private static final String PAIR_ENERGY_SLOPE_LOW = TriggerModule.PAIR_ENERGY_SLOPE_LOW;
+ private static final String PAIR_COPLANARITY_HIGH = TriggerModule.PAIR_COPLANARITY_HIGH;
private static final String PAIR_TIME_COINCIDENCE = "pairTimeCoincidence";
-
- /**
- * Instantiates a new <code>PairTrigger</code> with all cut
- * states set to <code>false</code> and with the trigger source
- * defined according to the specified object.
- * @param source - The object from which the trigger cut states
- * are derived.
- */
- public PairTrigger(E source, int triggerNum) {
- // Instantiate the superclass.
- super(source, triggerNum);
-
- // Add the supported cuts types.
- addValidCut(PAIR_ENERGY_SUM_LOW);
- addValidCut(PAIR_ENERGY_SUM_HIGH);
- addValidCut(PAIR_ENERGY_DIFFERENCE_HIGH);
- addValidCut(PAIR_ENERGY_SLOPE_LOW);
- addValidCut(PAIR_COPLANARITY_HIGH);
- addValidCut(PAIR_TIME_COINCIDENCE);
- }
-
- /**
- * Gets whether the pair energy sum lower bound cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateEnergySumLow() {
- return getCutState(PAIR_ENERGY_SUM_LOW);
- }
-
- /**
- * Gets whether the pair energy sum upper bound cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateEnergySumHigh() {
- return getCutState(PAIR_ENERGY_SUM_HIGH);
- }
-
- /**
- * Gets whether both the pair energy sum upper and lower bound cuts
- * were met.
- * @return Returns <code>true</code> if the cuts were met and
- * <code>false</code> otherwise.
- */
- public boolean getStateEnergySum() {
- return getCutState(PAIR_ENERGY_SUM_HIGH);
- }
-
- /**
- * Gets whether the pair energy difference cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateEnergyDifference() {
- return getCutState(PAIR_ENERGY_DIFFERENCE_HIGH);
- }
-
- /**
- * Gets whether the pair energy slope cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateEnergySlope() {
- return getCutState(PAIR_ENERGY_SLOPE_LOW);
- }
-
- /**
- * Gets whether the pair coplanarity cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateCoplanarity() {
- return getCutState(PAIR_COPLANARITY_HIGH);
- }
-
- /**
- * Gets whether the time coincidence cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateTimeCoincidence() {
- return getCutState(PAIR_TIME_COINCIDENCE);
- }
-
- /**
- * Sets whether the conditions for the pair energy sum lower bound
- * cut were met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateEnergySumLow(boolean state) {
- setCutState(PAIR_ENERGY_SUM_LOW, state);
- }
-
- /**
- * Sets whether the conditions for the pair energy sum upper bound
- * cut were met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateEnergySumHigh(boolean state) {
- setCutState(PAIR_ENERGY_SUM_HIGH, state);
- }
-
- /**
- * Sets whether the conditions for the pair energy difference cut
- * were met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateEnergyDifference(boolean state) {
- setCutState(PAIR_ENERGY_DIFFERENCE_HIGH, state);
- }
-
- /**
- * Sets whether the conditions for the pair energy slope cut were
- * met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateEnergySlope(boolean state) {
- setCutState(PAIR_ENERGY_SLOPE_LOW, state);
- }
-
- /**
- * Sets whether the conditions for the pair coplanarity cut were
- * met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateCoplanarity(boolean state) {
- setCutState(PAIR_COPLANARITY_HIGH, state);
- }
-
- /**
- * Sets whether the conditions for the time coincidence cut were
- * met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateTimeCoincidence(boolean state) {
- setCutState(PAIR_TIME_COINCIDENCE, state);
- }
-
- @Override
- public String toString() {
- return String.format("EClusterLow: %d; EClusterHigh %d; HitCount: %d; ESumLow: %d, ESumHigh: %d, EDiff: %d, ESlope: %d, Coplanarity: %d",
- getStateClusterEnergyLow() ? 1 : 0, getStateClusterEnergyHigh() ? 1 : 0,
- getStateHitCount() ? 1 : 0, getStateEnergySumLow() ? 1 : 0,
- getStateEnergySumHigh() ? 1 : 0, getStateEnergyDifference() ? 1 : 0,
- getStateEnergySlope() ? 1 : 0, getStateCoplanarity() ? 1 : 0);
- }
+
+ /**
+ * Instantiates a new <code>PairTrigger</code> with all cut
+ * states set to <code>false</code> and with the trigger source
+ * defined according to the specified object.
+ * @param source - The object from which the trigger cut states
+ * are derived.
+ */
+ public PairTrigger(E source, int triggerNum) {
+ // Instantiate the superclass.
+ super(source, triggerNum);
+
+ // Add the supported cuts types.
+ addValidCut(PAIR_ENERGY_SUM_LOW);
+ addValidCut(PAIR_ENERGY_SUM_HIGH);
+ addValidCut(PAIR_ENERGY_DIFFERENCE_HIGH);
+ addValidCut(PAIR_ENERGY_SLOPE_LOW);
+ addValidCut(PAIR_COPLANARITY_HIGH);
+ addValidCut(PAIR_TIME_COINCIDENCE);
+ }
+
+ /**
+ * Gets whether the pair energy sum lower bound cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateEnergySumLow() {
+ return getCutState(PAIR_ENERGY_SUM_LOW);
+ }
+
+ /**
+ * Gets whether the pair energy sum upper bound cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateEnergySumHigh() {
+ return getCutState(PAIR_ENERGY_SUM_HIGH);
+ }
+
+ /**
+ * Gets whether both the pair energy sum upper and lower bound cuts
+ * were met.
+ * @return Returns <code>true</code> if the cuts were met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateEnergySum() {
+ return getCutState(PAIR_ENERGY_SUM_HIGH);
+ }
+
+ /**
+ * Gets whether the pair energy difference cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateEnergyDifference() {
+ return getCutState(PAIR_ENERGY_DIFFERENCE_HIGH);
+ }
+
+ /**
+ * Gets whether the pair energy slope cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateEnergySlope() {
+ return getCutState(PAIR_ENERGY_SLOPE_LOW);
+ }
+
+ /**
+ * Gets whether the pair coplanarity cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateCoplanarity() {
+ return getCutState(PAIR_COPLANARITY_HIGH);
+ }
+
+ /**
+ * Gets whether the time coincidence cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateTimeCoincidence() {
+ return getCutState(PAIR_TIME_COINCIDENCE);
+ }
+
+ /**
+ * Sets whether the conditions for the pair energy sum lower bound
+ * cut were met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateEnergySumLow(boolean state) {
+ setCutState(PAIR_ENERGY_SUM_LOW, state);
+ }
+
+ /**
+ * Sets whether the conditions for the pair energy sum upper bound
+ * cut were met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateEnergySumHigh(boolean state) {
+ setCutState(PAIR_ENERGY_SUM_HIGH, state);
+ }
+
+ /**
+ * Sets whether the conditions for the pair energy difference cut
+ * were met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateEnergyDifference(boolean state) {
+ setCutState(PAIR_ENERGY_DIFFERENCE_HIGH, state);
+ }
+
+ /**
+ * Sets whether the conditions for the pair energy slope cut were
+ * met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateEnergySlope(boolean state) {
+ setCutState(PAIR_ENERGY_SLOPE_LOW, state);
+ }
+
+ /**
+ * Sets whether the conditions for the pair coplanarity cut were
+ * met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateCoplanarity(boolean state) {
+ setCutState(PAIR_COPLANARITY_HIGH, state);
+ }
+
+ /**
+ * Sets whether the conditions for the time coincidence cut were
+ * met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateTimeCoincidence(boolean state) {
+ setCutState(PAIR_TIME_COINCIDENCE, state);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("EClusterLow: %d; EClusterHigh %d; HitCount: %d; ESumLow: %d, ESumHigh: %d, EDiff: %d, ESlope: %d, Coplanarity: %d",
+ getStateClusterEnergyLow() ? 1 : 0, getStateClusterEnergyHigh() ? 1 : 0,
+ getStateHitCount() ? 1 : 0, getStateEnergySumLow() ? 1 : 0,
+ getStateEnergySumHigh() ? 1 : 0, getStateEnergyDifference() ? 1 : 0,
+ getStateEnergySlope() ? 1 : 0, getStateCoplanarity() ? 1 : 0);
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/SinglesTrigger.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/SinglesTrigger.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/SinglesTrigger.java Wed Mar 9 11:43:24 2016
@@ -3,151 +3,151 @@
import org.hps.record.triggerbank.TriggerModule;
public class SinglesTrigger<E> extends Trigger<E> {
- // Define the supported trigger cuts.
- private static final String CLUSTER_HIT_COUNT_LOW = TriggerModule.CLUSTER_HIT_COUNT_LOW;
- private static final String CLUSTER_SEED_ENERGY_LOW = TriggerModule.CLUSTER_SEED_ENERGY_LOW;
- private static final String CLUSTER_SEED_ENERGY_HIGH = TriggerModule.CLUSTER_SEED_ENERGY_HIGH;
- private static final String CLUSTER_TOTAL_ENERGY_LOW = TriggerModule.CLUSTER_TOTAL_ENERGY_LOW;
- private static final String CLUSTER_TOTAL_ENERGY_HIGH = TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH;
-
- /**
- * Instantiates a new <code>SinglesTrigger</code> with all cut
- * states set to <code>false</code> and with the trigger source
- * defined according to the specified object.
- * @param source - The object from which the trigger cut states
- * are derived.
- */
- public SinglesTrigger(E source, int triggerNum) {
- // Instantiate the superclass.
- super(source, triggerNum);
-
- // Add the supported cuts types.
- addValidCut(CLUSTER_HIT_COUNT_LOW);
- addValidCut(CLUSTER_SEED_ENERGY_LOW);
- addValidCut(CLUSTER_SEED_ENERGY_HIGH);
- addValidCut(CLUSTER_TOTAL_ENERGY_LOW);
- addValidCut(CLUSTER_TOTAL_ENERGY_HIGH);
- }
-
- /**
- * Gets whether the cluster hit count cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateHitCount() {
- return getCutState(CLUSTER_HIT_COUNT_LOW);
- }
-
- /**
- * Gets whether the cluster seed energy lower bound cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateSeedEnergyLow() {
- return getCutState(CLUSTER_SEED_ENERGY_LOW);
- }
-
- /**
- * Gets whether the cluster seed energy upper bound cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateSeedEnergyHigh() {
- return getCutState(CLUSTER_SEED_ENERGY_HIGH);
- }
-
- /**
- * Gets whether both the cluster seed energy upper and lower bound
- * cuts were met.
- * @return Returns <code>true</code> if the cuts were met and
- * <code>false</code> otherwise.
- */
- public boolean getStateSeedEnergy() {
- return getCutState(CLUSTER_SEED_ENERGY_LOW) && getCutState(CLUSTER_SEED_ENERGY_HIGH);
- }
-
- /**
- * Gets whether the cluster total energy lower bound cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateClusterEnergyLow() {
- return getCutState(CLUSTER_TOTAL_ENERGY_LOW);
- }
-
- /**
- * Gets whether the cluster total energy upper bound cut was met.
- * @return Returns <code>true</code> if the cut was met and
- * <code>false</code> otherwise.
- */
- public boolean getStateClusterEnergyHigh() {
- return getCutState(CLUSTER_TOTAL_ENERGY_HIGH);
- }
-
- /**
- * Gets whether both the cluster total energy upper and lower bound
- * cuts were met.
- * @return Returns <code>true</code> if the cuts were met and
- * <code>false</code> otherwise.
- */
- public boolean getStateClusterEnergy() {
- return getCutState(CLUSTER_TOTAL_ENERGY_LOW) && getCutState(CLUSTER_TOTAL_ENERGY_HIGH);
- }
-
- /**
- * Sets whether the conditions for the cluster hit count cut were
- * met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateHitCount(boolean state) {
- setCutState(CLUSTER_HIT_COUNT_LOW, state);
- }
-
- /**
- * Sets whether the conditions for the cluster seed energy lower
- * bound cut were met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateSeedEnergyLow(boolean state) {
- setCutState(CLUSTER_SEED_ENERGY_LOW, state);
- }
-
- /**
- * Sets whether the conditions for the cluster seed energy upper
- * bound cut were met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateSeedEnergyHigh(boolean state) {
- setCutState(CLUSTER_SEED_ENERGY_HIGH, state);
- }
-
- /**
- * Sets whether the conditions for the cluster total energy lower
- * bound cut were met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateClusterEnergyLow(boolean state) {
- setCutState(CLUSTER_TOTAL_ENERGY_LOW, state);
- }
-
- /**
- * Sets whether the conditions for the cluster total energy upper
- * bound cut were met.
- * @param state - <code>true</code> indicates that the cut conditions
- * were met and <code>false</code> that they were not.
- */
- public void setStateClusterEnergyHigh(boolean state) {
- setCutState(CLUSTER_TOTAL_ENERGY_HIGH, state);
- }
-
- @Override
- public String toString() {
- return String.format("EClusterLow: %d; EClusterHigh %d; HitCount: %d",
- getStateClusterEnergyLow() ? 1 : 0, getStateClusterEnergyHigh() ? 1 : 0,
- getStateHitCount() ? 1 : 0);
- }
+ // Define the supported trigger cuts.
+ private static final String CLUSTER_HIT_COUNT_LOW = TriggerModule.CLUSTER_HIT_COUNT_LOW;
+ private static final String CLUSTER_SEED_ENERGY_LOW = TriggerModule.CLUSTER_SEED_ENERGY_LOW;
+ private static final String CLUSTER_SEED_ENERGY_HIGH = TriggerModule.CLUSTER_SEED_ENERGY_HIGH;
+ private static final String CLUSTER_TOTAL_ENERGY_LOW = TriggerModule.CLUSTER_TOTAL_ENERGY_LOW;
+ private static final String CLUSTER_TOTAL_ENERGY_HIGH = TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH;
+
+ /**
+ * Instantiates a new <code>SinglesTrigger</code> with all cut
+ * states set to <code>false</code> and with the trigger source
+ * defined according to the specified object.
+ * @param source - The object from which the trigger cut states
+ * are derived.
+ */
+ public SinglesTrigger(E source, int triggerNum) {
+ // Instantiate the superclass.
+ super(source, triggerNum);
+
+ // Add the supported cuts types.
+ addValidCut(CLUSTER_HIT_COUNT_LOW);
+ addValidCut(CLUSTER_SEED_ENERGY_LOW);
+ addValidCut(CLUSTER_SEED_ENERGY_HIGH);
+ addValidCut(CLUSTER_TOTAL_ENERGY_LOW);
+ addValidCut(CLUSTER_TOTAL_ENERGY_HIGH);
+ }
+
+ /**
+ * Gets whether the cluster hit count cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateHitCount() {
+ return getCutState(CLUSTER_HIT_COUNT_LOW);
+ }
+
+ /**
+ * Gets whether the cluster seed energy lower bound cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateSeedEnergyLow() {
+ return getCutState(CLUSTER_SEED_ENERGY_LOW);
+ }
+
+ /**
+ * Gets whether the cluster seed energy upper bound cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateSeedEnergyHigh() {
+ return getCutState(CLUSTER_SEED_ENERGY_HIGH);
+ }
+
+ /**
+ * Gets whether both the cluster seed energy upper and lower bound
+ * cuts were met.
+ * @return Returns <code>true</code> if the cuts were met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateSeedEnergy() {
+ return getCutState(CLUSTER_SEED_ENERGY_LOW) && getCutState(CLUSTER_SEED_ENERGY_HIGH);
+ }
+
+ /**
+ * Gets whether the cluster total energy lower bound cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateClusterEnergyLow() {
+ return getCutState(CLUSTER_TOTAL_ENERGY_LOW);
+ }
+
+ /**
+ * Gets whether the cluster total energy upper bound cut was met.
+ * @return Returns <code>true</code> if the cut was met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateClusterEnergyHigh() {
+ return getCutState(CLUSTER_TOTAL_ENERGY_HIGH);
+ }
+
+ /**
+ * Gets whether both the cluster total energy upper and lower bound
+ * cuts were met.
+ * @return Returns <code>true</code> if the cuts were met and
+ * <code>false</code> otherwise.
+ */
+ public boolean getStateClusterEnergy() {
+ return getCutState(CLUSTER_TOTAL_ENERGY_LOW) && getCutState(CLUSTER_TOTAL_ENERGY_HIGH);
+ }
+
+ /**
+ * Sets whether the conditions for the cluster hit count cut were
+ * met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateHitCount(boolean state) {
+ setCutState(CLUSTER_HIT_COUNT_LOW, state);
+ }
+
+ /**
+ * Sets whether the conditions for the cluster seed energy lower
+ * bound cut were met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateSeedEnergyLow(boolean state) {
+ setCutState(CLUSTER_SEED_ENERGY_LOW, state);
+ }
+
+ /**
+ * Sets whether the conditions for the cluster seed energy upper
+ * bound cut were met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateSeedEnergyHigh(boolean state) {
+ setCutState(CLUSTER_SEED_ENERGY_HIGH, state);
+ }
+
+ /**
+ * Sets whether the conditions for the cluster total energy lower
+ * bound cut were met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateClusterEnergyLow(boolean state) {
+ setCutState(CLUSTER_TOTAL_ENERGY_LOW, state);
+ }
+
+ /**
+ * Sets whether the conditions for the cluster total energy upper
+ * bound cut were met.
+ * @param state - <code>true</code> indicates that the cut conditions
+ * were met and <code>false</code> that they were not.
+ */
+ public void setStateClusterEnergyHigh(boolean state) {
+ setCutState(CLUSTER_TOTAL_ENERGY_HIGH, state);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("EClusterLow: %d; EClusterHigh %d; HitCount: %d",
+ getStateClusterEnergyLow() ? 1 : 0, getStateClusterEnergyHigh() ? 1 : 0,
+ getStateHitCount() ? 1 : 0);
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/Trigger.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/Trigger.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/Trigger.java Wed Mar 9 11:43:24 2016
@@ -14,139 +14,139 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public abstract class Trigger<E> {
- // Track whether the trigger conditions were met.
- private boolean passTrigger = false;
- // Store the cut condition states.
- private Map<String, Boolean> passMap = new HashMap<String, Boolean>();
- // Store the cluster associated with the trigger.
- private final E source;
- // Store the trigger number.
- private final int triggerNum;
-
- /**
- * Creates a new <code>Trigger</code> object with the argument
- * specifying the object from whence the trigger state is derived.
- * @param source - The trigger source object.
- */
- protected Trigger(E source) {
- this(source, -1);
- }
-
- /**
- * Creates a new <code>Trigger</code> object with the argument
- * specifying the object from whence the trigger state is derived.
- * @param source - The trigger source object.
- * @param triggerNum - The number of the trigger.
- */
- protected Trigger(E source, int triggerNum) {
- this.source = source;
- this.triggerNum = triggerNum;
- }
-
- /**
- * Adds a cut to the set of cuts tracked by this trigger.
- * @param cut - The identifier for the cut.
- */
- protected void addValidCut(String cut) {
- passMap.put(cut, new Boolean(false));
- }
-
- /**
- * Gets the state of the specified cut.
- * @param cut - The identifier for the cut.
- * @return Returns <code>true</code> if the conditions for the
- * specified cut were met and <code>false</code> otherwise.
- * @throws IllegalArgumentException Occurs if the specified cut
- * is not supported by the object.
- */
- protected boolean getCutState(String cut) throws IllegalArgumentException {
- if(passMap.containsKey(cut)) {
- return passMap.get(cut);
- } else {
- throw new IllegalArgumentException(String.format("Trigger cut \"%s\" is not a supported trigger cut.", cut));
- }
- }
-
- /**
- * Gets the number of the trigger. If the trigger has no number,
- * it will return <code>-1</code>.
- * @return Returns the trigger number as an <code>int</code>.
- */
- public int getTriggerNumber() {
- return triggerNum;
- }
-
- /**
- * Gets the object to which the trigger cuts are applied.
- * @return Returns the trigger source object.
- */
- public E getTriggerSource() { return source; }
-
- /**
- * Gets whether the conditions for the trigger were met.
- * @return Returns <code>true</code> if the conditions for the
- * trigger were met and <code>false</code> if they were not.
- */
- public boolean getTriggerState() {
- return passTrigger;
- }
-
- /**
- * Removes a cut from the set of cuts tracked by the trigger.
- * @param cut - The identifier for the cut.
- */
- protected void removeValidCut(String cut) {
- passMap.remove(cut);
- }
-
- /**
- * Checks whether the all of the trigger cut conditions were met.
- * @return Returns <code>true</code> if all of the cut conditions
- * were met and <code>false</code> otherwise.
- */
- private boolean isValidTrigger() {
- // Iterate over all of the cuts and look for any that have not
- // been met.
- for(Entry<String, Boolean> cut : passMap.entrySet()) {
- if(!cut.getValue()) { return false; }
- }
-
- // If there are no cut conditions that have not been met, then
- // the trigger is valid.
- return true;
- }
-
- /**
- * Sets whether the conditions for the specified cut were met.
- * @param cut - The identifier for the cut.
- * @param state - <code>true</code> indicates that the conditions
- * for the cut were met and <code>false</code> that they were not.
- * @throws IllegalArgumentException Occurs if the specified cut
- * is not supported by the object.
- */
- protected void setCutState(String cut, boolean state) throws IllegalArgumentException {
- if(passMap.containsKey(cut)) {
- // Set the cut state.
- passMap.put(cut, state);
-
- // If the cut state is true, then all cut conditions may have
- // been met. Check whether this is true and, if so, set the
- // trigger state accordingly.
- if(state && isValidTrigger()) { passTrigger = true; }
- else { passTrigger = false; }
- } else {
- throw new IllegalArgumentException(String.format("Trigger cut \"%s\" is not a supported trigger cut.", cut));
- }
- }
-
- /**
- * Indicates whether the specified cut state is tracked by this
- * object or not.
- * @param cut - The identifier for the cut.
- * @return Returns <code>true</code> if the cut state is tracked
- * by this object and <code>false</code> otherwise.
- */
- protected boolean supportsCut(String cut) {
- return passMap.containsKey(cut);
- }
+ // Track whether the trigger conditions were met.
+ private boolean passTrigger = false;
+ // Store the cut condition states.
+ private Map<String, Boolean> passMap = new HashMap<String, Boolean>();
+ // Store the cluster associated with the trigger.
+ private final E source;
+ // Store the trigger number.
+ private final int triggerNum;
+
+ /**
+ * Creates a new <code>Trigger</code> object with the argument
+ * specifying the object from whence the trigger state is derived.
+ * @param source - The trigger source object.
+ */
+ protected Trigger(E source) {
+ this(source, -1);
+ }
+
+ /**
+ * Creates a new <code>Trigger</code> object with the argument
+ * specifying the object from whence the trigger state is derived.
+ * @param source - The trigger source object.
+ * @param triggerNum - The number of the trigger.
+ */
+ protected Trigger(E source, int triggerNum) {
+ this.source = source;
+ this.triggerNum = triggerNum;
+ }
+
+ /**
+ * Adds a cut to the set of cuts tracked by this trigger.
+ * @param cut - The identifier for the cut.
+ */
+ protected void addValidCut(String cut) {
+ passMap.put(cut, new Boolean(false));
+ }
+
+ /**
+ * Gets the state of the specified cut.
+ * @param cut - The identifier for the cut.
+ * @return Returns <code>true</code> if the conditions for the
+ * specified cut were met and <code>false</code> otherwise.
+ * @throws IllegalArgumentException Occurs if the specified cut
+ * is not supported by the object.
+ */
+ protected boolean getCutState(String cut) throws IllegalArgumentException {
+ if(passMap.containsKey(cut)) {
+ return passMap.get(cut);
+ } else {
+ throw new IllegalArgumentException(String.format("Trigger cut \"%s\" is not a supported trigger cut.", cut));
+ }
+ }
+
+ /**
+ * Gets the number of the trigger. If the trigger has no number,
+ * it will return <code>-1</code>.
+ * @return Returns the trigger number as an <code>int</code>.
+ */
+ public int getTriggerNumber() {
+ return triggerNum;
+ }
+
+ /**
+ * Gets the object to which the trigger cuts are applied.
+ * @return Returns the trigger source object.
+ */
+ public E getTriggerSource() { return source; }
+
+ /**
+ * Gets whether the conditions for the trigger were met.
+ * @return Returns <code>true</code> if the conditions for the
+ * trigger were met and <code>false</code> if they were not.
+ */
+ public boolean getTriggerState() {
+ return passTrigger;
+ }
+
+ /**
+ * Removes a cut from the set of cuts tracked by the trigger.
+ * @param cut - The identifier for the cut.
+ */
+ protected void removeValidCut(String cut) {
+ passMap.remove(cut);
+ }
+
+ /**
+ * Checks whether the all of the trigger cut conditions were met.
+ * @return Returns <code>true</code> if all of the cut conditions
+ * were met and <code>false</code> otherwise.
+ */
+ private boolean isValidTrigger() {
+ // Iterate over all of the cuts and look for any that have not
+ // been met.
+ for(Entry<String, Boolean> cut : passMap.entrySet()) {
+ if(!cut.getValue()) { return false; }
+ }
+
+ // If there are no cut conditions that have not been met, then
+ // the trigger is valid.
+ return true;
+ }
+
+ /**
+ * Sets whether the conditions for the specified cut were met.
+ * @param cut - The identifier for the cut.
+ * @param state - <code>true</code> indicates that the conditions
+ * for the cut were met and <code>false</code> that they were not.
+ * @throws IllegalArgumentException Occurs if the specified cut
+ * is not supported by the object.
+ */
+ protected void setCutState(String cut, boolean state) throws IllegalArgumentException {
+ if(passMap.containsKey(cut)) {
+ // Set the cut state.
+ passMap.put(cut, state);
+
+ // If the cut state is true, then all cut conditions may have
+ // been met. Check whether this is true and, if so, set the
+ // trigger state accordingly.
+ if(state && isValidTrigger()) { passTrigger = true; }
+ else { passTrigger = false; }
+ } else {
+ throw new IllegalArgumentException(String.format("Trigger cut \"%s\" is not a supported trigger cut.", cut));
+ }
+ }
+
+ /**
+ * Indicates whether the specified cut state is tracked by this
+ * object or not.
+ * @param cut - The identifier for the cut.
+ * @return Returns <code>true</code> if the cut state is tracked
+ * by this object and <code>false</code> otherwise.
+ */
+ protected boolean supportsCut(String cut) {
+ return passMap.containsKey(cut);
+ }
}
Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDiagnosticUtil.java
=============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDiagnosticUtil.java (original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/util/TriggerDiagnosticUtil.java Wed Mar 9 11:43:24 2016
@@ -15,208 +15,208 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class TriggerDiagnosticUtil {
- // Cluster match state variables.
- public static final byte CLUSTER_STATE_MATCHED = 0;
- public static final byte CLUSTER_STATE_FAIL_POSITION = 1;
- public static final byte CLUSTER_STATE_FAIL_ENERGY = 2;
- public static final byte CLUSTER_STATE_FAIL_HIT_COUNT = 3;
- public static final byte CLUSTER_STATE_FAIL_TIME = 4;
- public static final byte CLUSTER_STATE_FAIL_UNKNOWN = 5;
-
- // Trigger match cut IDs.
- public static final int SINGLES_ENERGY_MIN = 0;
- public static final int SINGLES_ENERGY_MAX = 1;
- public static final int SINGLES_HIT_COUNT = 2;
- public static final int PAIR_ENERGY_SUM = 0;
- public static final int PAIR_ENERGY_DIFF = 1;
- public static final int PAIR_ENERGY_SLOPE = 2;
- public static final int PAIR_COPLANARITY = 3;
-
- // Trigger type variables.
- public static final int TRIGGER_PULSER = TriggerStatModule.PULSER;
- public static final int TRIGGER_COSMIC = TriggerStatModule.COSMIC;
- public static final int TRIGGER_SINGLES_0 = TriggerStatModule.SINGLES_0;
- public static final int TRIGGER_SINGLES_1 = TriggerStatModule.SINGLES_1;
- public static final int TRIGGER_PAIR_0 = TriggerStatModule.PAIR_0;
- public static final int TRIGGER_PAIR_1 = TriggerStatModule.PAIR_1;
- public static final String[] TRIGGER_NAME = { "Singles 0", "Singles 1", "Pair 0", "Pair 1", "Pulser", "Cosmic" };
-
- /**
- * Convenience method that writes the position of a cluster in the
- * form (ix, iy).
- * @param cluster - The cluster.
- * @return Returns the cluster position as a <code>String</code>.
- */
- public static final String clusterPositionString(Cluster cluster) {
- return String.format("(%3d, %3d)",
- cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
- cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
- }
-
- /**
- * Convenience method that writes the position of a cluster in the
- * form (ix, iy).
- * @param cluster - The cluster.
- * @return Returns the cluster position as a <code>String</code>.
- */
- public static final String clusterPositionString(SSPCluster cluster) {
- return String.format("(%3d, %3d)", cluster.getXIndex(), cluster.getYIndex());
- }
-
- /**
- * Convenience method that writes the information in a cluster to
- * a <code>String</code>.
- * @param cluster - The cluster.
- * @return Returns the cluster information as a <code>String</code>.
- */
- public static final String clusterToString(Cluster cluster) {
- return String.format("Cluster at (%3d, %3d) with %.3f GeV and %d hits at %4.0f ns.",
- cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
- cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"),
- cluster.getEnergy(), cluster.getCalorimeterHits().size(),
- cluster.getCalorimeterHits().get(0).getTime());
- }
-
- /**
- * Convenience method that writes the information in a cluster to
- * a <code>String</code>.
- * @param cluster - The cluster.
- * @return Returns the cluster information as a <code>String</code>.
- */
- public static final String clusterToString(SSPCluster cluster) {
- return String.format("Cluster at (%3d, %3d) with %.3f GeV and %d hits at %4d ns.",
- cluster.getXIndex(), cluster.getYIndex(), cluster.getEnergy(),
- cluster.getHitCount(), cluster.getTime());
- }
-
- /**
- * Gets the x/y-indices of the cluster.
- * @param cluster - The cluster of which to obtain the indices.
- * @return Returns the indices as a <code>Point</code> object.
- */
- public static final Point getClusterPosition(Cluster cluster) {
- return new Point(getXIndex(cluster), getYIndex(cluster));
- }
-
- /**
- * Gets the x/y-indices of the cluster.
- * @param cluster - The cluster of which to obtain the indices.
- * @return Returns the indices as a <code>Point</code> object.
- */
- public static final Point getClusterPosition(SSPCluster cluster) {
- return new Point(cluster.getXIndex(), cluster.getYIndex());
- }
-
- /**
- * Gets the time stamp of the cluster in nanoseconds.
- * @param cluster - The cluster.
- * @return Returns the time-stamp.
- */
- public static final double getClusterTime(Cluster cluster) {
- return cluster.getCalorimeterHits().get(0).getTime();
- }
-
- /**
- * Gets the time stamp of the cluster in nanoseconds.
- * @param cluster - The cluster.
- * @return Returns the time-stamp.
- */
- public static final int getClusterTime(SSPCluster cluster) {
- return cluster.getTime();
- }
-
- /**
- * Gets the number of digits in the base-10 String representation
- * of an integer primitive. Negative signs are not included in the
- * digit count.
- * @param value - The value of which to obtain the length.
- * @return Returns the number of digits in the String representation
- * of the argument value.
- */
- public static final int getDigits(int value) {
- if(value < 0) { return Integer.toString(value).length() - 1; }
- else { return Integer.toString(value).length(); }
- }
-
- /**
- * Gets the number of hits in a cluster.
- * @param cluster - The cluster.
- * @return Returns the number of hits in the cluster.
- */
- public static final int getHitCount(Cluster cluster) {
- return cluster.getCalorimeterHits().size();
- }
-
- /**
- * Gets the number of hits in a cluster.
- * @param cluster - The cluster.
- * @return Returns the number of hits in the cluster.
- */
- public static final int getHitCount(SSPCluster cluster) {
- return cluster.getHitCount();
- }
-
- /**
- * Gets the x-index of the cluster's seed hit.
- * @param cluster - The cluster.
- * @return Returns the x-index.
- */
- public static final int getXIndex(Cluster cluster) {
- return cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
- }
-
- /**
- * Gets the x-index of the cluster's seed hit.
- * @param cluster - The cluster.
- * @return Returns the x-index.
- */
- public static final int getXIndex(SSPCluster cluster) {
- return cluster.getXIndex();
- }
-
- /**
- * Gets the y-index of the cluster's seed hit.
- * @param cluster - The cluster.
- * @return Returns the y-index.
- */
- public static final int getYIndex(Cluster cluster) {
- return cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
- }
-
- /**
- * Gets the y-index of the cluster's seed hit.
- * @param cluster - The cluster.
- * @return Returns the y-index.
- */
- public static final int getYIndex(SSPCluster cluster) {
- return cluster.getYIndex();
- }
-
- /**
- * Checks whether all of the hits in a cluster are within the safe
- * region of the FADC output window.
- * @param reconCluster - The cluster to check.
- * @return Returns <code>true</code> if the cluster is safe and
- * returns <code>false</code> otherwise.
- */
- public static final boolean isVerifiable(Cluster reconCluster, int nsa, int nsb, int windowWidth) {
- // Iterate over the hits in the cluster.
- for(CalorimeterHit hit : reconCluster.getCalorimeterHits()) {
- // Check that none of the hits are within the disallowed
- // region of the FADC readout window.
- if(hit.getTime() <= nsb || hit.getTime() >= (windowWidth - nsa)) {
- return false;
- }
-
- // Also check to make sure that the cluster does not have
- // any negative energy hits. These are, obviously, wrong.
- if(hit.getCorrectedEnergy() < 0.0) {
- return false;
- }
- }
-
- // If all of the cluster hits pass the time cut, the cluster
- // is valid.
- return true;
- }
+ // Cluster match state variables.
+ public static final byte CLUSTER_STATE_MATCHED = 0;
+ public static final byte CLUSTER_STATE_FAIL_POSITION = 1;
+ public static final byte CLUSTER_STATE_FAIL_ENERGY = 2;
+ public static final byte CLUSTER_STATE_FAIL_HIT_COUNT = 3;
+ public static final byte CLUSTER_STATE_FAIL_TIME = 4;
+ public static final byte CLUSTER_STATE_FAIL_UNKNOWN = 5;
+
+ // Trigger match cut IDs.
+ public static final int SINGLES_ENERGY_MIN = 0;
+ public static final int SINGLES_ENERGY_MAX = 1;
+ public static final int SINGLES_HIT_COUNT = 2;
+ public static final int PAIR_ENERGY_SUM = 0;
+ public static final int PAIR_ENERGY_DIFF = 1;
+ public static final int PAIR_ENERGY_SLOPE = 2;
+ public static final int PAIR_COPLANARITY = 3;
+
+ // Trigger type variables.
+ public static final int TRIGGER_PULSER = TriggerStatModule.PULSER;
+ public static final int TRIGGER_COSMIC = TriggerStatModule.COSMIC;
+ public static final int TRIGGER_SINGLES_0 = TriggerStatModule.SINGLES_0;
+ public static final int TRIGGER_SINGLES_1 = TriggerStatModule.SINGLES_1;
+ public static final int TRIGGER_PAIR_0 = TriggerStatModule.PAIR_0;
+ public static final int TRIGGER_PAIR_1 = TriggerStatModule.PAIR_1;
+ public static final String[] TRIGGER_NAME = { "Singles 0", "Singles 1", "Pair 0", "Pair 1", "Pulser", "Cosmic" };
+
+ /**
+ * Convenience method that writes the position of a cluster in the
+ * form (ix, iy).
+ * @param cluster - The cluster.
+ * @return Returns the cluster position as a <code>String</code>.
+ */
+ public static final String clusterPositionString(Cluster cluster) {
+ return String.format("(%3d, %3d)",
+ cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
+ cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
+ }
+
+ /**
+ * Convenience method that writes the position of a cluster in the
+ * form (ix, iy).
+ * @param cluster - The cluster.
+ * @return Returns the cluster position as a <code>String</code>.
+ */
+ public static final String clusterPositionString(SSPCluster cluster) {
+ return String.format("(%3d, %3d)", cluster.getXIndex(), cluster.getYIndex());
+ }
+
+ /**
+ * Convenience method that writes the information in a cluster to
+ * a <code>String</code>.
+ * @param cluster - The cluster.
+ * @return Returns the cluster information as a <code>String</code>.
+ */
+ public static final String clusterToString(Cluster cluster) {
+ return String.format("Cluster at (%3d, %3d) with %.3f GeV and %d hits at %4.0f ns.",
+ cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
+ cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"),
+ cluster.getEnergy(), cluster.getCalorimeterHits().size(),
+ cluster.getCalorimeterHits().get(0).getTime());
+ }
+
+ /**
+ * Convenience method that writes the information in a cluster to
+ * a <code>String</code>.
+ * @param cluster - The cluster.
+ * @return Returns the cluster information as a <code>String</code>.
+ */
+ public static final String clusterToString(SSPCluster cluster) {
+ return String.format("Cluster at (%3d, %3d) with %.3f GeV and %d hits at %4d ns.",
+ cluster.getXIndex(), cluster.getYIndex(), cluster.getEnergy(),
+ cluster.getHitCount(), cluster.getTime());
+ }
+
+ /**
+ * Gets the x/y-indices of the cluster.
+ * @param cluster - The cluster of which to obtain the indices.
+ * @return Returns the indices as a <code>Point</code> object.
+ */
+ public static final Point getClusterPosition(Cluster cluster) {
+ return new Point(getXIndex(cluster), getYIndex(cluster));
+ }
+
+ /**
+ * Gets the x/y-indices of the cluster.
+ * @param cluster - The cluster of which to obtain the indices.
+ * @return Returns the indices as a <code>Point</code> object.
+ */
+ public static final Point getClusterPosition(SSPCluster cluster) {
+ return new Point(cluster.getXIndex(), cluster.getYIndex());
+ }
+
+ /**
+ * Gets the time stamp of the cluster in nanoseconds.
+ * @param cluster - The cluster.
+ * @return Returns the time-stamp.
+ */
+ public static final double getClusterTime(Cluster cluster) {
+ return cluster.getCalorimeterHits().get(0).getTime();
+ }
+
+ /**
+ * Gets the time stamp of the cluster in nanoseconds.
+ * @param cluster - The cluster.
+ * @return Returns the time-stamp.
+ */
+ public static final int getClusterTime(SSPCluster cluster) {
+ return cluster.getTime();
+ }
+
+ /**
+ * Gets the number of digits in the base-10 String representation
+ * of an integer primitive. Negative signs are not included in the
+ * digit count.
+ * @param value - The value of which to obtain the length.
+ * @return Returns the number of digits in the String representation
+ * of the argument value.
+ */
+ public static final int getDigits(int value) {
+ if(value < 0) { return Integer.toString(value).length() - 1; }
+ else { return Integer.toString(value).length(); }
+ }
+
+ /**
+ * Gets the number of hits in a cluster.
+ * @param cluster - The cluster.
+ * @return Returns the number of hits in the cluster.
+ */
+ public static final int getHitCount(Cluster cluster) {
+ return cluster.getCalorimeterHits().size();
+ }
+
+ /**
+ * Gets the number of hits in a cluster.
+ * @param cluster - The cluster.
+ * @return Returns the number of hits in the cluster.
+ */
+ public static final int getHitCount(SSPCluster cluster) {
+ return cluster.getHitCount();
+ }
+
+ /**
+ * Gets the x-index of the cluster's seed hit.
+ * @param cluster - The cluster.
+ * @return Returns the x-index.
+ */
+ public static final int getXIndex(Cluster cluster) {
+ return cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ }
+
+ /**
+ * Gets the x-index of the cluster's seed hit.
+ * @param cluster - The cluster.
+ * @return Returns the x-index.
+ */
+ public static final int getXIndex(SSPCluster cluster) {
+ return cluster.getXIndex();
+ }
+
+ /**
+ * Gets the y-index of the cluster's seed hit.
+ * @param cluster - The cluster.
+ * @return Returns the y-index.
+ */
+ public static final int getYIndex(Cluster cluster) {
+ return cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+ }
+
+ /**
+ * Gets the y-index of the cluster's seed hit.
+ * @param cluster - The cluster.
+ * @return Returns the y-index.
+ */
+ public static final int getYIndex(SSPCluster cluster) {
+ return cluster.getYIndex();
+ }
+
+ /**
+ * Checks whether all of the hits in a cluster are within the safe
+ * region of the FADC output window.
+ * @param reconCluster - The cluster to check.
+ * @return Returns <code>true</code> if the cluster is safe and
+ * returns <code>false</code> otherwise.
+ */
+ public static final boolean isVerifiable(Cluster reconCluster, int nsa, int nsb, int windowWidth) {
+ // Iterate over the hits in the cluster.
+ for(CalorimeterHit hit : reconCluster.getCalorimeterHits()) {
+ // Check that none of the hits are within the disallowed
+ // region of the FADC readout window.
+ if(hit.getTime() <= nsb || hit.getTime() >= (windowWidth - nsa)) {
+ return false;
+ }
+
+ // Also check to make sure that the cluster does not have
+ // any negative energy hits. These are, obviously, wrong.
+ if(hit.getCorrectedEnergy() < 0.0) {
+ return false;
+ }
+ }
+
+ // If all of the cluster hits pass the time cut, the cluster
+ // is valid.
+ return true;
+ }
}
Modified: java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-3/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-3/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-3/compact.xml Wed Mar 9 11:43:24 2016
@@ -9,8 +9,8 @@
1) float L2_tu, 2) float L2_tu, L4_tu, L5_tu
2nd: round
1) float L2_tu, L4_tu, L5_tu
- 3rd: round
- 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
+ 3rd: round
+ 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
</comment>
</info>
Modified: java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4-1/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4-1/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4-1/compact.xml Wed Mar 9 11:43:24 2016
@@ -9,8 +9,8 @@
1) float L2_tu, 2) float L2_tu, L4_tu, L5_tu
2nd: round
1) float L2_tu, L4_tu, L5_tu
- 3rd: round
- 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
+ 3rd: round
+ 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
4th: round start with v1-3
L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw
</comment>
Modified: java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4-1/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4-1/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw.xml (original)
+++ java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4-1/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw.xml Wed Mar 9 11:43:24 2016
@@ -9,8 +9,8 @@
1) float L2_tu, 2) float L2_tu, L4_tu, L5_tu
2nd: round
1) float L2_tu, L4_tu, L5_tu
- 3rd: round
- 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
+ 3rd: round
+ 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
</comment>
</info>
Modified: java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4/compact.xml Wed Mar 9 11:43:24 2016
@@ -9,8 +9,8 @@
1) float L2_tu, 2) float L2_tu, L4_tu, L5_tu
2nd: round
1) float L2_tu, L4_tu, L5_tu
- 3rd: round
- 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
+ 3rd: round
+ 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
4th: round start with v1-3
1) float L2_tu_rw, L3_tu_rw, L4_tu_rw
</comment>
Modified: java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L2-3-4_tu_rw.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L2-3-4_tu_rw.xml (original)
+++ java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-4/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L2-3-4_tu_rw.xml Wed Mar 9 11:43:24 2016
@@ -9,8 +9,8 @@
1) float L2_tu, 2) float L2_tu, L4_tu, L5_tu
2nd: round
1) float L2_tu, L4_tu, L5_tu
- 3rd: round
- 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
+ 3rd: round
+ 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
</comment>
</info>
Modified: java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-5-1/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-5-1/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw.xml (original)
+++ java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-5-1/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw.xml Wed Mar 9 11:43:24 2016
@@ -9,8 +9,8 @@
1) float L2_tu, 2) float L2_tu, L4_tu, L5_tu
2nd: round
1) float L2_tu, L4_tu, L5_tu
- 3rd: round
- 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
+ 3rd: round
+ 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
</comment>
</info>
Modified: java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-5-2/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-HPS-EngRun2015-Nominal-v1-4-1-100k-L456_L123_L234_L345_L123_L456_tu_rwIter0Iter1Iter2Iter3Iter4Iter5.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-5-2/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-HPS-EngRun2015-Nominal-v1-4-1-100k-L456_L123_L234_L345_L123_L456_tu_rwIter0Iter1Iter2Iter3Iter4Iter5.xml (original)
+++ java/trunk/detector-data/detectors/HPS-EngRun2015-Nominal-v1-5-2/compact_millepede-milleBinaryISN_hps_005772.evio.0.gbl-HPS-EngRun2015-Nominal-v1-4-1-100k-L456_L123_L234_L345_L123_L456_tu_rwIter0Iter1Iter2Iter3Iter4Iter5.xml Wed Mar 9 11:43:24 2016
@@ -9,8 +9,8 @@
1) float L2_tu, 2) float L2_tu, L4_tu, L5_tu
2nd: round
1) float L2_tu, L4_tu, L5_tu
- 3rd: round
- 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
+ 3rd: round
+ 1) float L2_tu_rw, L4_tu_rw, L5_tu_rw
4th: round start with v1-3
L3_L4_L5_tu_rw_THEN_L2_tu_rw_THEN_L2_L3_L4_tu_rw_THEN_L2_L3_L5_tu_rw_THEN_L2_L3_L4_L5_excl_L3ST_tu_L4Sb_tu_THEN_L2_L4_L5_tu_rw
</comment>
Modified: java/trunk/detector-data/detectors/HPS-Proposal2014-v3-2pt2-0zOffset/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-Proposal2014-v3-2pt2-0zOffset/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-Proposal2014-v3-2pt2-0zOffset/compact.xml Wed Mar 9 11:43:24 2016
@@ -305,7 +305,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="endOfFieldZ" rx="0" ry="0" rz="-PI/2"/>
- </layer>
+ </layer>
</detector>
Modified: java/trunk/detector-data/detectors/HPS-TestRun-v5/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-TestRun-v5/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-TestRun-v5/compact.xml Wed Mar 9 11:43:24 2016
@@ -488,7 +488,7 @@
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001"/>
<fraction n="1.0" ref="Vacuum" />
@@ -578,7 +578,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="endOfFieldZ" rx="0" ry="0" rz="-PI/2"/>
- </layer>
+ </layer>
</detector>
<detector id="13" name="Ecal" type="HPSEcal3" insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
Modified: java/trunk/detector-data/detectors/HPS-TestRun-v6/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-TestRun-v6/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-TestRun-v6/compact.xml Wed Mar 9 11:43:24 2016
@@ -488,7 +488,7 @@
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001"/>
<fraction n="1.0" ref="Vacuum" />
@@ -578,7 +578,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="endOfFieldZ" rx="0" ry="0" rz="-PI/2"/>
- </layer>
+ </layer>
</detector>
<detector id="13" name="Ecal" type="HPSEcal3" insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
Modified: java/trunk/detector-data/detectors/HPS-TestRun-v7-2/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-TestRun-v7-2/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-TestRun-v7-2/compact.xml Wed Mar 9 11:43:24 2016
@@ -86,127 +86,127 @@
<constant name="y9b_misalign" value="0.0"/>
<constant name="y10b_misalign" value="0.0"/>
- <!-- alignment corrections -->
- <constant name="x1t_align" value="0.000000"/>
- <constant name="x2t_align" value="0.000000"/>
- <constant name="x3t_align" value="0.000000"/>
- <constant name="x4t_align" value="0.000000"/>
- <constant name="x5t_align" value="0.000000"/>
- <constant name="x6t_align" value="0.000000"/>
- <constant name="x7t_align" value="0.000000"/>
- <constant name="x8t_align" value="0.000000"/>
- <constant name="x9t_align" value="0.000000"/>
- <constant name="x10t_align" value="0.000000"/>
- <constant name="y1t_align" value="0.000000"/>
- <constant name="y2t_align" value="0.000000"/>
- <constant name="y3t_align" value="0.0"/>
- <constant name="y4t_align" value="0.0"/>
- <constant name="y5t_align" value="0.000000"/>
- <constant name="y6t_align" value="0.000000"/>
- <constant name="y7t_align" value="0.000000"/>
- <constant name="y8t_align" value="0.000000"/>
- <constant name="y9t_align" value="0.000000"/>
- <constant name="y10t_align" value="0.000000"/>
- <constant name="z1t_align" value="0.000000"/>
- <constant name="z2t_align" value="0.000000"/>
- <constant name="z3t_align" value="0.000000"/>
- <constant name="z4t_align" value="0.000000"/>
- <constant name="z5t_align" value="0.000000"/>
- <constant name="z6t_align" value="0.000000"/>
- <constant name="z7t_align" value="0.000000"/>
- <constant name="z8t_align" value="0.000000"/>
- <constant name="z9t_align" value="0.000000"/>
- <constant name="z10t_align" value="0.000000"/>
- <constant name="rx1t_align" value="0.000000"/>
- <constant name="rx2t_align" value="0.000000"/>
- <constant name="rx3t_align" value="0.000000"/>
- <constant name="rx4t_align" value="0.000000"/>
- <constant name="rx5t_align" value="0.000000"/>
- <constant name="rx6t_align" value="0.000000"/>
- <constant name="rx7t_align" value="0.000000"/>
- <constant name="rx8t_align" value="0.000000"/>
- <constant name="rx9t_align" value="0.000000"/>
- <constant name="rx10t_align" value="0.000000"/>
- <constant name="ry1t_align" value="0.000000"/>
- <constant name="ry2t_align" value="0.000000"/>
- <constant name="ry3t_align" value="0.000000"/>
- <constant name="ry4t_align" value="0.000000"/>
- <constant name="ry5t_align" value="0.000000"/>
- <constant name="ry6t_align" value="0.000000"/>
- <constant name="ry7t_align" value="0.000000"/>
- <constant name="ry8t_align" value="0.000000"/>
- <constant name="ry9t_align" value="0.000000"/>
- <constant name="ry10t_align" value="0.000000"/>
- <constant name="rz1t_align" value="0.000000"/>
- <constant name="rz2t_align" value="0.000000"/>
- <constant name="rz3t_align" value="0.000000"/>
- <constant name="rz4t_align" value="0.000000"/>
- <constant name="rz5t_align" value="0.000000"/>
- <constant name="rz6t_align" value="0.000000"/>
- <constant name="rz7t_align" value="0.000000"/>
- <constant name="rz8t_align" value="0.000000"/>
- <constant name="rz9t_align" value="0.000000"/>
- <constant name="rz10t_align" value="0.000000"/>
- <constant name="x1b_align" value="0.000000"/>
- <constant name="x2b_align" value="0.000000"/>
- <constant name="x3b_align" value="0.000000"/>
- <constant name="x4b_align" value="0.000000"/>
- <constant name="x5b_align" value="0.000000"/>
- <constant name="x6b_align" value="0.00000"/>
- <constant name="x7b_align" value="0.000000"/>
- <constant name="x8b_align" value="0.000000"/>
- <constant name="x9b_align" value="0.000000"/>
- <constant name="x10b_align" value="0.000000"/>
- <constant name="y1b_align" value="0.000000"/>
- <constant name="y2b_align" value="0.000000"/>
- <constant name="y3b_align" value="0.000000"/>
- <constant name="y4b_align" value="0.000000"/>
- <constant name="y5b_align" value="0.0"/>
- <constant name="y6b_align" value="0.0"/>
- <constant name="y7b_align" value="0.000000"/>
- <constant name="y8b_align" value="0.000000"/>
- <constant name="y9b_align" value="0.000000"/>
- <constant name="y10b_align" value="0.000000"/>
- <constant name="z1b_align" value="0.000000"/>
- <constant name="z2b_align" value="0.000000"/>
- <constant name="z3b_align" value="0.000000"/>
- <constant name="z4b_align" value="0.000000"/>
- <constant name="z5b_align" value="0.000000"/>
- <constant name="z6b_align" value="0.000000"/>
- <constant name="z7b_align" value="0.000000"/>
- <constant name="z8b_align" value="0.000000"/>
- <constant name="z9b_align" value="0.000000"/>
- <constant name="z10b_align" value="0.000000"/>
- <constant name="rx1b_align" value="0.000000"/>
- <constant name="rx2b_align" value="0.000000"/>
- <constant name="rx3b_align" value="0.000000"/>
- <constant name="rx4b_align" value="0.000000"/>
- <constant name="rx5b_align" value="0.000000"/>
- <constant name="rx6b_align" value="0.000000"/>
- <constant name="rx7b_align" value="0.000000"/>
- <constant name="rx8b_align" value="0.000000"/>
- <constant name="rx9b_align" value="0.000000"/>
- <constant name="rx10b_align" value="0.000000"/>
- <constant name="ry1b_align" value="0.000000"/>
- <constant name="ry2b_align" value="0.000000"/>
- <constant name="ry3b_align" value="0.000000"/>
- <constant name="ry4b_align" value="0.000000"/>
- <constant name="ry5b_align" value="0.000000"/>
- <constant name="ry6b_align" value="0.000000"/>
- <constant name="ry7b_align" value="0.000000"/>
- <constant name="ry8b_align" value="0.000000"/>
- <constant name="ry9b_align" value="0.000000"/>
- <constant name="ry10b_align" value="0.000000"/>
- <constant name="rz1b_align" value="0.000000"/>
- <constant name="rz2b_align" value="0.000000"/>
- <constant name="rz3b_align" value="0.000000"/>
- <constant name="rz4b_align" value="0.000000"/>
- <constant name="rz5b_align" value="0.000000"/>
- <constant name="rz6b_align" value="0.000000"/>
- <constant name="rz7b_align" value="0.000000"/>
- <constant name="rz8b_align" value="0.000000"/>
- <constant name="rz9b_align" value="0.000000"/>
- <constant name="rz10b_align" value="0.000000"/>
+ <!-- alignment corrections -->
+ <constant name="x1t_align" value="0.000000"/>
+ <constant name="x2t_align" value="0.000000"/>
+ <constant name="x3t_align" value="0.000000"/>
+ <constant name="x4t_align" value="0.000000"/>
+ <constant name="x5t_align" value="0.000000"/>
+ <constant name="x6t_align" value="0.000000"/>
+ <constant name="x7t_align" value="0.000000"/>
+ <constant name="x8t_align" value="0.000000"/>
+ <constant name="x9t_align" value="0.000000"/>
+ <constant name="x10t_align" value="0.000000"/>
+ <constant name="y1t_align" value="0.000000"/>
+ <constant name="y2t_align" value="0.000000"/>
+ <constant name="y3t_align" value="0.0"/>
+ <constant name="y4t_align" value="0.0"/>
+ <constant name="y5t_align" value="0.000000"/>
+ <constant name="y6t_align" value="0.000000"/>
+ <constant name="y7t_align" value="0.000000"/>
+ <constant name="y8t_align" value="0.000000"/>
+ <constant name="y9t_align" value="0.000000"/>
+ <constant name="y10t_align" value="0.000000"/>
+ <constant name="z1t_align" value="0.000000"/>
+ <constant name="z2t_align" value="0.000000"/>
+ <constant name="z3t_align" value="0.000000"/>
+ <constant name="z4t_align" value="0.000000"/>
+ <constant name="z5t_align" value="0.000000"/>
+ <constant name="z6t_align" value="0.000000"/>
+ <constant name="z7t_align" value="0.000000"/>
+ <constant name="z8t_align" value="0.000000"/>
+ <constant name="z9t_align" value="0.000000"/>
+ <constant name="z10t_align" value="0.000000"/>
+ <constant name="rx1t_align" value="0.000000"/>
+ <constant name="rx2t_align" value="0.000000"/>
+ <constant name="rx3t_align" value="0.000000"/>
+ <constant name="rx4t_align" value="0.000000"/>
+ <constant name="rx5t_align" value="0.000000"/>
+ <constant name="rx6t_align" value="0.000000"/>
+ <constant name="rx7t_align" value="0.000000"/>
+ <constant name="rx8t_align" value="0.000000"/>
+ <constant name="rx9t_align" value="0.000000"/>
+ <constant name="rx10t_align" value="0.000000"/>
+ <constant name="ry1t_align" value="0.000000"/>
+ <constant name="ry2t_align" value="0.000000"/>
+ <constant name="ry3t_align" value="0.000000"/>
+ <constant name="ry4t_align" value="0.000000"/>
+ <constant name="ry5t_align" value="0.000000"/>
+ <constant name="ry6t_align" value="0.000000"/>
+ <constant name="ry7t_align" value="0.000000"/>
+ <constant name="ry8t_align" value="0.000000"/>
+ <constant name="ry9t_align" value="0.000000"/>
+ <constant name="ry10t_align" value="0.000000"/>
+ <constant name="rz1t_align" value="0.000000"/>
+ <constant name="rz2t_align" value="0.000000"/>
+ <constant name="rz3t_align" value="0.000000"/>
+ <constant name="rz4t_align" value="0.000000"/>
+ <constant name="rz5t_align" value="0.000000"/>
+ <constant name="rz6t_align" value="0.000000"/>
+ <constant name="rz7t_align" value="0.000000"/>
+ <constant name="rz8t_align" value="0.000000"/>
+ <constant name="rz9t_align" value="0.000000"/>
+ <constant name="rz10t_align" value="0.000000"/>
+ <constant name="x1b_align" value="0.000000"/>
+ <constant name="x2b_align" value="0.000000"/>
+ <constant name="x3b_align" value="0.000000"/>
+ <constant name="x4b_align" value="0.000000"/>
+ <constant name="x5b_align" value="0.000000"/>
+ <constant name="x6b_align" value="0.00000"/>
+ <constant name="x7b_align" value="0.000000"/>
+ <constant name="x8b_align" value="0.000000"/>
+ <constant name="x9b_align" value="0.000000"/>
+ <constant name="x10b_align" value="0.000000"/>
+ <constant name="y1b_align" value="0.000000"/>
+ <constant name="y2b_align" value="0.000000"/>
+ <constant name="y3b_align" value="0.000000"/>
+ <constant name="y4b_align" value="0.000000"/>
+ <constant name="y5b_align" value="0.0"/>
+ <constant name="y6b_align" value="0.0"/>
+ <constant name="y7b_align" value="0.000000"/>
+ <constant name="y8b_align" value="0.000000"/>
+ <constant name="y9b_align" value="0.000000"/>
+ <constant name="y10b_align" value="0.000000"/>
+ <constant name="z1b_align" value="0.000000"/>
+ <constant name="z2b_align" value="0.000000"/>
+ <constant name="z3b_align" value="0.000000"/>
+ <constant name="z4b_align" value="0.000000"/>
+ <constant name="z5b_align" value="0.000000"/>
+ <constant name="z6b_align" value="0.000000"/>
+ <constant name="z7b_align" value="0.000000"/>
+ <constant name="z8b_align" value="0.000000"/>
+ <constant name="z9b_align" value="0.000000"/>
+ <constant name="z10b_align" value="0.000000"/>
+ <constant name="rx1b_align" value="0.000000"/>
+ <constant name="rx2b_align" value="0.000000"/>
+ <constant name="rx3b_align" value="0.000000"/>
+ <constant name="rx4b_align" value="0.000000"/>
+ <constant name="rx5b_align" value="0.000000"/>
+ <constant name="rx6b_align" value="0.000000"/>
+ <constant name="rx7b_align" value="0.000000"/>
+ <constant name="rx8b_align" value="0.000000"/>
+ <constant name="rx9b_align" value="0.000000"/>
+ <constant name="rx10b_align" value="0.000000"/>
+ <constant name="ry1b_align" value="0.000000"/>
+ <constant name="ry2b_align" value="0.000000"/>
+ <constant name="ry3b_align" value="0.000000"/>
+ <constant name="ry4b_align" value="0.000000"/>
+ <constant name="ry5b_align" value="0.000000"/>
+ <constant name="ry6b_align" value="0.000000"/>
+ <constant name="ry7b_align" value="0.000000"/>
+ <constant name="ry8b_align" value="0.000000"/>
+ <constant name="ry9b_align" value="0.000000"/>
+ <constant name="ry10b_align" value="0.000000"/>
+ <constant name="rz1b_align" value="0.000000"/>
+ <constant name="rz2b_align" value="0.000000"/>
+ <constant name="rz3b_align" value="0.000000"/>
+ <constant name="rz4b_align" value="0.000000"/>
+ <constant name="rz5b_align" value="0.000000"/>
+ <constant name="rz6b_align" value="0.000000"/>
+ <constant name="rz7b_align" value="0.000000"/>
+ <constant name="rz8b_align" value="0.000000"/>
+ <constant name="rz9b_align" value="0.000000"/>
+ <constant name="rz10b_align" value="0.000000"/>
<!-- Positions of sensor centers above/below nominal beam -->
<constant name="y1t" value="36.894" />
@@ -606,134 +606,134 @@
<constant name="mod2_rx10b" value="mod_rx10b"/>
<constant name="mod2_ry10b" value="mod_ry10b+y_rot_bot_pivot"/>
<constant name="mod2_rz10b" value="mod_rz10b"/>
-
- <!-- final constants -->
- <constant name="final_x1t" value="mod2_x1t+x1t_align"/>
- <constant name="final_x2t" value="mod2_x2t+x2t_align"/>
- <constant name="final_x3t" value="mod2_x3t+x3t_align"/>
- <constant name="final_x4t" value="mod2_x4t+x4t_align"/>
- <constant name="final_x5t" value="mod2_x5t+x5t_align"/>
- <constant name="final_x6t" value="mod2_x6t+x6t_align"/>
- <constant name="final_x7t" value="mod2_x7t+x7t_align"/>
- <constant name="final_x8t" value="mod2_x8t+x8t_align"/>
- <constant name="final_x9t" value="mod2_x9t+x9t_align"/>
- <constant name="final_x10t" value="mod2_x10t+x10t_align"/>
- <constant name="final_y1t" value="mod2_y1t+y1t_align"/>
- <constant name="final_y2t" value="mod2_y2t+y2t_align"/>
- <constant name="final_y3t" value="mod2_y3t+y3t_align"/>
- <constant name="final_y4t" value="mod2_y4t+y4t_align"/>
- <constant name="final_y5t" value="mod2_y5t+y5t_align"/>
- <constant name="final_y6t" value="mod2_y6t+y6t_align"/>
- <constant name="final_y7t" value="mod2_y7t+y7t_align"/>
- <constant name="final_y8t" value="mod2_y8t+y8t_align"/>
- <constant name="final_y9t" value="mod2_y9t+y9t_align"/>
- <constant name="final_y10t" value="mod2_y10t+y10t_align"/>
- <constant name="final_z1t" value="mod2_z1t+z1t_align"/>
- <constant name="final_z2t" value="mod2_z2t+z2t_align"/>
- <constant name="final_z3t" value="mod2_z3t+z3t_align"/>
- <constant name="final_z4t" value="mod2_z4t+z4t_align"/>
- <constant name="final_z5t" value="mod2_z5t+z5t_align"/>
- <constant name="final_z6t" value="mod2_z6t+z6t_align"/>
- <constant name="final_z7t" value="mod2_z7t+z7t_align"/>
- <constant name="final_z8t" value="mod2_z8t+z8t_align"/>
- <constant name="final_z9t" value="mod2_z9t+z9t_align"/>
- <constant name="final_z10t" value="mod2_z10t+z10t_align"/>
- <constant name="final_rx1t" value="mod2_rx1t+rx1t_align"/>
- <constant name="final_rx2t" value="mod2_rx2t+rx2t_align"/>
- <constant name="final_rx3t" value="mod2_rx3t+rx3t_align"/>
- <constant name="final_rx4t" value="mod2_rx4t+rx4t_align"/>
- <constant name="final_rx5t" value="mod2_rx5t+rx5t_align"/>
- <constant name="final_rx6t" value="mod2_rx6t+rx6t_align"/>
- <constant name="final_rx7t" value="mod2_rx7t+rx7t_align"/>
- <constant name="final_rx8t" value="mod2_rx8t+rx8t_align"/>
- <constant name="final_rx9t" value="mod2_rx9t+rx9t_align"/>
- <constant name="final_rx10t" value="mod2_rx10t+rx10t_align"/>
- <constant name="final_ry1t" value="mod2_ry1t+ry1t_align"/>
- <constant name="final_ry2t" value="mod2_ry2t+ry2t_align"/>
- <constant name="final_ry3t" value="mod2_ry3t+ry3t_align"/>
- <constant name="final_ry4t" value="mod2_ry4t+ry4t_align"/>
- <constant name="final_ry5t" value="mod2_ry5t+ry5t_align"/>
- <constant name="final_ry6t" value="mod2_ry6t+ry6t_align"/>
- <constant name="final_ry7t" value="mod2_ry7t+ry7t_align"/>
- <constant name="final_ry8t" value="mod2_ry8t+ry8t_align"/>
- <constant name="final_ry9t" value="mod2_ry9t+ry9t_align"/>
- <constant name="final_ry10t" value="mod2_ry10t+ry10t_align"/>
- <constant name="final_rz1t" value="mod2_rz1t+rz1t_align"/>
- <constant name="final_rz2t" value="mod2_rz2t+rz2t_align"/>
- <constant name="final_rz3t" value="mod2_rz3t+rz3t_align"/>
- <constant name="final_rz4t" value="mod2_rz4t+rz4t_align"/>
- <constant name="final_rz5t" value="mod2_rz5t+rz5t_align"/>
- <constant name="final_rz6t" value="mod2_rz6t+rz6t_align"/>
- <constant name="final_rz7t" value="mod2_rz7t+rz7t_align"/>
- <constant name="final_rz8t" value="mod2_rz8t+rz8t_align"/>
- <constant name="final_rz9t" value="mod2_rz9t+rz9t_align"/>
- <constant name="final_rz10t" value="mod2_rz10t+rz10t_align"/>
- <constant name="final_x1b" value="mod2_x1b+x1b_align"/>
- <constant name="final_x2b" value="mod2_x2b+x2b_align"/>
- <constant name="final_x3b" value="mod2_x3b+x3b_align"/>
- <constant name="final_x4b" value="mod2_x4b+x4b_align"/>
- <constant name="final_x5b" value="mod2_x5b+x5b_align"/>
- <constant name="final_x6b" value="mod2_x6b+x6b_align"/>
- <constant name="final_x7b" value="mod2_x7b+x7b_align"/>
- <constant name="final_x8b" value="mod2_x8b+x8b_align"/>
- <constant name="final_x9b" value="mod2_x9b+x9b_align"/>
- <constant name="final_x10b" value="mod2_x10b+x10b_align"/>
- <constant name="final_y1b" value="mod2_y1b+y1b_align"/>
- <constant name="final_y2b" value="mod2_y2b+y2b_align"/>
- <constant name="final_y3b" value="mod2_y3b+y3b_align"/>
- <constant name="final_y4b" value="mod2_y4b+y4b_align"/>
- <constant name="final_y5b" value="mod2_y5b+y5b_align"/>
- <constant name="final_y6b" value="mod2_y6b+y6b_align"/>
- <constant name="final_y7b" value="mod2_y7b+y7b_align"/>
- <constant name="final_y8b" value="mod2_y8b+y8b_align"/>
- <constant name="final_y9b" value="mod2_y9b+y9b_align"/>
- <constant name="final_y10b" value="mod2_y10b+y10b_align"/>
- <constant name="final_z1b" value="mod2_z1b+z1b_align"/>
- <constant name="final_z2b" value="mod2_z2b+z2b_align"/>
- <constant name="final_z3b" value="mod2_z3b+z3b_align"/>
- <constant name="final_z4b" value="mod2_z4b+z4b_align"/>
- <constant name="final_z5b" value="mod2_z5b+z5b_align"/>
- <constant name="final_z6b" value="mod2_z6b+z6b_align"/>
- <constant name="final_z7b" value="mod2_z7b+z7b_align"/>
- <constant name="final_z8b" value="mod2_z8b+z8b_align"/>
- <constant name="final_z9b" value="mod2_z9b+z9b_align"/>
- <constant name="final_z10b" value="mod2_z10b+z10b_align"/>
- <constant name="final_rx1b" value="mod2_rx1b+rx1b_align"/>
- <constant name="final_rx2b" value="mod2_rx2b+rx2b_align"/>
- <constant name="final_rx3b" value="mod2_rx3b+rx3b_align"/>
- <constant name="final_rx4b" value="mod2_rx4b+rx4b_align"/>
- <constant name="final_rx5b" value="mod2_rx5b+rx5b_align"/>
- <constant name="final_rx6b" value="mod2_rx6b+rx6b_align"/>
- <constant name="final_rx7b" value="mod2_rx7b+rx7b_align"/>
- <constant name="final_rx8b" value="mod2_rx8b+rx8b_align"/>
- <constant name="final_rx9b" value="mod2_rx9b+rx9b_align"/>
- <constant name="final_rx10b" value="mod2_rx10b+rx10b_align"/>
- <constant name="final_ry1b" value="mod2_ry1b+ry1b_align"/>
- <constant name="final_ry2b" value="mod2_ry2b+ry2b_align"/>
- <constant name="final_ry3b" value="mod2_ry3b+ry3b_align"/>
- <constant name="final_ry4b" value="mod2_ry4b+ry4b_align"/>
- <constant name="final_ry5b" value="mod2_ry5b+ry5b_align"/>
- <constant name="final_ry6b" value="mod2_ry6b+ry6b_align"/>
- <constant name="final_ry7b" value="mod2_ry7b+ry7b_align"/>
- <constant name="final_ry8b" value="mod2_ry8b+ry8b_align"/>
- <constant name="final_ry9b" value="mod2_ry9b+ry9b_align"/>
- <constant name="final_ry10b" value="mod2_ry10b+ry10b_align"/>
- <constant name="final_rz1b" value="mod2_rz1b+rz1b_align"/>
- <constant name="final_rz2b" value="mod2_rz2b+rz2b_align"/>
- <constant name="final_rz3b" value="mod2_rz3b+rz3b_align"/>
- <constant name="final_rz4b" value="mod2_rz4b+rz4b_align"/>
- <constant name="final_rz5b" value="mod2_rz5b+rz5b_align"/>
- <constant name="final_rz6b" value="mod2_rz6b+rz6b_align"/>
- <constant name="final_rz7b" value="mod2_rz7b+rz7b_align"/>
- <constant name="final_rz8b" value="mod2_rz8b+rz8b_align"/>
- <constant name="final_rz9b" value="mod2_rz9b+rz9b_align"/>
- <constant name="final_rz10b" value="mod2_rz10b+rz10b_align"/>
-
-
+
+ <!-- final constants -->
+ <constant name="final_x1t" value="mod2_x1t+x1t_align"/>
+ <constant name="final_x2t" value="mod2_x2t+x2t_align"/>
+ <constant name="final_x3t" value="mod2_x3t+x3t_align"/>
+ <constant name="final_x4t" value="mod2_x4t+x4t_align"/>
+ <constant name="final_x5t" value="mod2_x5t+x5t_align"/>
+ <constant name="final_x6t" value="mod2_x6t+x6t_align"/>
+ <constant name="final_x7t" value="mod2_x7t+x7t_align"/>
+ <constant name="final_x8t" value="mod2_x8t+x8t_align"/>
+ <constant name="final_x9t" value="mod2_x9t+x9t_align"/>
+ <constant name="final_x10t" value="mod2_x10t+x10t_align"/>
+ <constant name="final_y1t" value="mod2_y1t+y1t_align"/>
+ <constant name="final_y2t" value="mod2_y2t+y2t_align"/>
+ <constant name="final_y3t" value="mod2_y3t+y3t_align"/>
+ <constant name="final_y4t" value="mod2_y4t+y4t_align"/>
+ <constant name="final_y5t" value="mod2_y5t+y5t_align"/>
+ <constant name="final_y6t" value="mod2_y6t+y6t_align"/>
+ <constant name="final_y7t" value="mod2_y7t+y7t_align"/>
+ <constant name="final_y8t" value="mod2_y8t+y8t_align"/>
+ <constant name="final_y9t" value="mod2_y9t+y9t_align"/>
+ <constant name="final_y10t" value="mod2_y10t+y10t_align"/>
+ <constant name="final_z1t" value="mod2_z1t+z1t_align"/>
+ <constant name="final_z2t" value="mod2_z2t+z2t_align"/>
+ <constant name="final_z3t" value="mod2_z3t+z3t_align"/>
+ <constant name="final_z4t" value="mod2_z4t+z4t_align"/>
+ <constant name="final_z5t" value="mod2_z5t+z5t_align"/>
+ <constant name="final_z6t" value="mod2_z6t+z6t_align"/>
+ <constant name="final_z7t" value="mod2_z7t+z7t_align"/>
+ <constant name="final_z8t" value="mod2_z8t+z8t_align"/>
+ <constant name="final_z9t" value="mod2_z9t+z9t_align"/>
+ <constant name="final_z10t" value="mod2_z10t+z10t_align"/>
+ <constant name="final_rx1t" value="mod2_rx1t+rx1t_align"/>
+ <constant name="final_rx2t" value="mod2_rx2t+rx2t_align"/>
+ <constant name="final_rx3t" value="mod2_rx3t+rx3t_align"/>
+ <constant name="final_rx4t" value="mod2_rx4t+rx4t_align"/>
+ <constant name="final_rx5t" value="mod2_rx5t+rx5t_align"/>
+ <constant name="final_rx6t" value="mod2_rx6t+rx6t_align"/>
+ <constant name="final_rx7t" value="mod2_rx7t+rx7t_align"/>
+ <constant name="final_rx8t" value="mod2_rx8t+rx8t_align"/>
+ <constant name="final_rx9t" value="mod2_rx9t+rx9t_align"/>
+ <constant name="final_rx10t" value="mod2_rx10t+rx10t_align"/>
+ <constant name="final_ry1t" value="mod2_ry1t+ry1t_align"/>
+ <constant name="final_ry2t" value="mod2_ry2t+ry2t_align"/>
+ <constant name="final_ry3t" value="mod2_ry3t+ry3t_align"/>
+ <constant name="final_ry4t" value="mod2_ry4t+ry4t_align"/>
+ <constant name="final_ry5t" value="mod2_ry5t+ry5t_align"/>
+ <constant name="final_ry6t" value="mod2_ry6t+ry6t_align"/>
+ <constant name="final_ry7t" value="mod2_ry7t+ry7t_align"/>
+ <constant name="final_ry8t" value="mod2_ry8t+ry8t_align"/>
+ <constant name="final_ry9t" value="mod2_ry9t+ry9t_align"/>
+ <constant name="final_ry10t" value="mod2_ry10t+ry10t_align"/>
+ <constant name="final_rz1t" value="mod2_rz1t+rz1t_align"/>
+ <constant name="final_rz2t" value="mod2_rz2t+rz2t_align"/>
+ <constant name="final_rz3t" value="mod2_rz3t+rz3t_align"/>
+ <constant name="final_rz4t" value="mod2_rz4t+rz4t_align"/>
+ <constant name="final_rz5t" value="mod2_rz5t+rz5t_align"/>
+ <constant name="final_rz6t" value="mod2_rz6t+rz6t_align"/>
+ <constant name="final_rz7t" value="mod2_rz7t+rz7t_align"/>
+ <constant name="final_rz8t" value="mod2_rz8t+rz8t_align"/>
+ <constant name="final_rz9t" value="mod2_rz9t+rz9t_align"/>
+ <constant name="final_rz10t" value="mod2_rz10t+rz10t_align"/>
+ <constant name="final_x1b" value="mod2_x1b+x1b_align"/>
+ <constant name="final_x2b" value="mod2_x2b+x2b_align"/>
+ <constant name="final_x3b" value="mod2_x3b+x3b_align"/>
+ <constant name="final_x4b" value="mod2_x4b+x4b_align"/>
+ <constant name="final_x5b" value="mod2_x5b+x5b_align"/>
+ <constant name="final_x6b" value="mod2_x6b+x6b_align"/>
+ <constant name="final_x7b" value="mod2_x7b+x7b_align"/>
+ <constant name="final_x8b" value="mod2_x8b+x8b_align"/>
+ <constant name="final_x9b" value="mod2_x9b+x9b_align"/>
+ <constant name="final_x10b" value="mod2_x10b+x10b_align"/>
+ <constant name="final_y1b" value="mod2_y1b+y1b_align"/>
+ <constant name="final_y2b" value="mod2_y2b+y2b_align"/>
+ <constant name="final_y3b" value="mod2_y3b+y3b_align"/>
+ <constant name="final_y4b" value="mod2_y4b+y4b_align"/>
+ <constant name="final_y5b" value="mod2_y5b+y5b_align"/>
+ <constant name="final_y6b" value="mod2_y6b+y6b_align"/>
+ <constant name="final_y7b" value="mod2_y7b+y7b_align"/>
+ <constant name="final_y8b" value="mod2_y8b+y8b_align"/>
+ <constant name="final_y9b" value="mod2_y9b+y9b_align"/>
+ <constant name="final_y10b" value="mod2_y10b+y10b_align"/>
+ <constant name="final_z1b" value="mod2_z1b+z1b_align"/>
+ <constant name="final_z2b" value="mod2_z2b+z2b_align"/>
+ <constant name="final_z3b" value="mod2_z3b+z3b_align"/>
+ <constant name="final_z4b" value="mod2_z4b+z4b_align"/>
+ <constant name="final_z5b" value="mod2_z5b+z5b_align"/>
+ <constant name="final_z6b" value="mod2_z6b+z6b_align"/>
+ <constant name="final_z7b" value="mod2_z7b+z7b_align"/>
+ <constant name="final_z8b" value="mod2_z8b+z8b_align"/>
+ <constant name="final_z9b" value="mod2_z9b+z9b_align"/>
+ <constant name="final_z10b" value="mod2_z10b+z10b_align"/>
+ <constant name="final_rx1b" value="mod2_rx1b+rx1b_align"/>
+ <constant name="final_rx2b" value="mod2_rx2b+rx2b_align"/>
+ <constant name="final_rx3b" value="mod2_rx3b+rx3b_align"/>
+ <constant name="final_rx4b" value="mod2_rx4b+rx4b_align"/>
+ <constant name="final_rx5b" value="mod2_rx5b+rx5b_align"/>
+ <constant name="final_rx6b" value="mod2_rx6b+rx6b_align"/>
+ <constant name="final_rx7b" value="mod2_rx7b+rx7b_align"/>
+ <constant name="final_rx8b" value="mod2_rx8b+rx8b_align"/>
+ <constant name="final_rx9b" value="mod2_rx9b+rx9b_align"/>
+ <constant name="final_rx10b" value="mod2_rx10b+rx10b_align"/>
+ <constant name="final_ry1b" value="mod2_ry1b+ry1b_align"/>
+ <constant name="final_ry2b" value="mod2_ry2b+ry2b_align"/>
+ <constant name="final_ry3b" value="mod2_ry3b+ry3b_align"/>
+ <constant name="final_ry4b" value="mod2_ry4b+ry4b_align"/>
+ <constant name="final_ry5b" value="mod2_ry5b+ry5b_align"/>
+ <constant name="final_ry6b" value="mod2_ry6b+ry6b_align"/>
+ <constant name="final_ry7b" value="mod2_ry7b+ry7b_align"/>
+ <constant name="final_ry8b" value="mod2_ry8b+ry8b_align"/>
+ <constant name="final_ry9b" value="mod2_ry9b+ry9b_align"/>
+ <constant name="final_ry10b" value="mod2_ry10b+ry10b_align"/>
+ <constant name="final_rz1b" value="mod2_rz1b+rz1b_align"/>
+ <constant name="final_rz2b" value="mod2_rz2b+rz2b_align"/>
+ <constant name="final_rz3b" value="mod2_rz3b+rz3b_align"/>
+ <constant name="final_rz4b" value="mod2_rz4b+rz4b_align"/>
+ <constant name="final_rz5b" value="mod2_rz5b+rz5b_align"/>
+ <constant name="final_rz6b" value="mod2_rz6b+rz6b_align"/>
+ <constant name="final_rz7b" value="mod2_rz7b+rz7b_align"/>
+ <constant name="final_rz8b" value="mod2_rz8b+rz8b_align"/>
+ <constant name="final_rz9b" value="mod2_rz9b+rz9b_align"/>
+ <constant name="final_rz10b" value="mod2_rz10b+rz10b_align"/>
+
+
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001"/>
<fraction n="1.0" ref="Vacuum" />
@@ -822,7 +822,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
+ </layer>
</detector>
<detector id="13" name="Ecal" type="HPSEcal3" insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
Modified: java/trunk/detector-data/detectors/HPS-TestRun-v7-3/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-TestRun-v7-3/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-TestRun-v7-3/compact.xml Wed Mar 9 11:43:24 2016
@@ -84,127 +84,127 @@
<constant name="y9b_misalign" value="0.0" />
<constant name="y10b_misalign" value="0.0" />
- <!-- alignment corrections -->
- <constant name="x1t_align" value="0.000000" />
- <constant name="x2t_align" value="-0.000000" />
- <constant name="x3t_align" value="-0.000012" />
- <constant name="x4t_align" value="-0.017488" />
- <constant name="x5t_align" value="-0.000064" />
- <constant name="x6t_align" value="-0.000141" />
- <constant name="x7t_align" value="0.000002" />
- <constant name="x8t_align" value="0.000573" />
- <constant name="x9t_align" value="0.000000" />
- <constant name="x10t_align" value="-0.000000" />
- <constant name="y1t_align" value="0.000000" />
- <constant name="y2t_align" value="0.000000" />
- <constant name="y3t_align" value="-0.094679" />
- <constant name="y4t_align" value="-0.174440" />
- <constant name="y5t_align" value="0.118670" />
- <constant name="y6t_align" value="-0.001400" />
- <constant name="y7t_align" value="0.047526" />
- <constant name="y8t_align" value="0.011511" />
- <constant name="y9t_align" value="0.000000" />
- <constant name="y10t_align" value="0.000000" />
- <constant name="z1t_align" value="0.000000" />
- <constant name="z2t_align" value="0.000000" />
- <constant name="z3t_align" value="-0.002463" />
- <constant name="z4t_align" value="-0.003986" />
- <constant name="z5t_align" value="0.003089" />
- <constant name="z6t_align" value="-0.000032" />
- <constant name="z7t_align" value="0.001236" />
- <constant name="z8t_align" value="0.000281" />
- <constant name="z9t_align" value="0.000000" />
- <constant name="z10t_align" value="0.000000" />
- <constant name="rx1t_align" value="0.000000" />
- <constant name="rx2t_align" value="-0.000000" />
- <constant name="rx3t_align" value="0.000000" />
- <constant name="rx4t_align" value="-0.000000" />
- <constant name="rx5t_align" value="0.000000" />
- <constant name="rx6t_align" value="-0.000000" />
- <constant name="rx7t_align" value="0.000000" />
- <constant name="rx8t_align" value="-0.000000" />
- <constant name="rx9t_align" value="0.000000" />
- <constant name="rx10t_align" value="-0.000000" />
- <constant name="ry1t_align" value="0.000000" />
- <constant name="ry2t_align" value="0.000000" />
- <constant name="ry3t_align" value="0.000000" />
- <constant name="ry4t_align" value="0.000000" />
- <constant name="ry5t_align" value="0.000000" />
- <constant name="ry6t_align" value="0.000000" />
- <constant name="ry7t_align" value="0.000000" />
- <constant name="ry8t_align" value="0.000000" />
- <constant name="ry9t_align" value="0.000000" />
- <constant name="ry10t_align" value="0.000000" />
- <constant name="rz1t_align" value="0.000000" />
- <constant name="rz2t_align" value="0.000000" />
- <constant name="rz3t_align" value="0.000000" />
- <constant name="rz4t_align" value="0.000000" />
- <constant name="rz5t_align" value="0.000000" />
- <constant name="rz6t_align" value="0.000000" />
- <constant name="rz7t_align" value="0.000000" />
- <constant name="rz8t_align" value="0.000000" />
- <constant name="rz9t_align" value="0.000000" />
- <constant name="rz10t_align" value="0.000000" />
- <constant name="x1b_align" value="0.000000" />
- <constant name="x2b_align" value="-0.000000" />
- <constant name="x3b_align" value="-0.068351" />
- <constant name="x4b_align" value="0.000012" />
- <constant name="x5b_align" value="-0.100385" />
- <constant name="x6b_align" value="0.000012" />
- <constant name="x7b_align" value="-0.025606" />
- <constant name="x8b_align" value="0.000007" />
- <constant name="x9b_align" value="0.000000" />
- <constant name="x10b_align" value="-0.000000" />
- <constant name="y1b_align" value="0.000000" />
- <constant name="y2b_align" value="0.000000" />
- <constant name="y3b_align" value="0.681109" />
- <constant name="y4b_align" value="0.061551" />
- <constant name="y5b_align" value="1.004204" />
- <constant name="y6b_align" value="0.037831" />
- <constant name="y7b_align" value="0.506463" />
- <constant name="y8b_align" value="0.015775" />
- <constant name="y9b_align" value="0.000000" />
- <constant name="y10b_align" value="0.000000" />
- <constant name="z1b_align" value="0.000000" />
- <constant name="z2b_align" value="0.000000" />
- <constant name="z3b_align" value="-0.013322" />
- <constant name="z4b_align" value="-0.001371" />
- <constant name="z5b_align" value="-0.019651" />
- <constant name="z6b_align" value="-0.000843" />
- <constant name="z7b_align" value="-0.010587" />
- <constant name="z8b_align" value="-0.000352" />
- <constant name="z9b_align" value="0.000000" />
- <constant name="z10b_align" value="0.000000" />
- <constant name="rx1b_align" value="0.000000" />
- <constant name="rx2b_align" value="-0.000000" />
- <constant name="rx3b_align" value="0.000000" />
- <constant name="rx4b_align" value="-0.000000" />
- <constant name="rx5b_align" value="0.000000" />
- <constant name="rx6b_align" value="-0.000000" />
- <constant name="rx7b_align" value="0.000000" />
- <constant name="rx8b_align" value="-0.000000" />
- <constant name="rx9b_align" value="0.000000" />
- <constant name="rx10b_align" value="-0.000000" />
- <constant name="ry1b_align" value="0.000000" />
- <constant name="ry2b_align" value="0.000000" />
- <constant name="ry3b_align" value="0.000000" />
- <constant name="ry4b_align" value="0.000000" />
- <constant name="ry5b_align" value="0.000000" />
- <constant name="ry6b_align" value="0.000000" />
- <constant name="ry7b_align" value="0.000000" />
- <constant name="ry8b_align" value="0.000000" />
- <constant name="ry9b_align" value="0.000000" />
- <constant name="ry10b_align" value="0.000000" />
- <constant name="rz1b_align" value="0.000000" />
- <constant name="rz2b_align" value="0.000000" />
- <constant name="rz3b_align" value="0.000000" />
- <constant name="rz4b_align" value="0.000000" />
- <constant name="rz5b_align" value="0.000000" />
- <constant name="rz6b_align" value="0.000000" />
- <constant name="rz7b_align" value="0.000000" />
- <constant name="rz8b_align" value="0.000000" />
- <constant name="rz9b_align" value="0.000000" />
- <constant name="rz10b_align" value="0.000000" />
+ <!-- alignment corrections -->
+ <constant name="x1t_align" value="0.000000" />
+ <constant name="x2t_align" value="-0.000000" />
+ <constant name="x3t_align" value="-0.000012" />
+ <constant name="x4t_align" value="-0.017488" />
+ <constant name="x5t_align" value="-0.000064" />
+ <constant name="x6t_align" value="-0.000141" />
+ <constant name="x7t_align" value="0.000002" />
+ <constant name="x8t_align" value="0.000573" />
+ <constant name="x9t_align" value="0.000000" />
+ <constant name="x10t_align" value="-0.000000" />
+ <constant name="y1t_align" value="0.000000" />
+ <constant name="y2t_align" value="0.000000" />
+ <constant name="y3t_align" value="-0.094679" />
+ <constant name="y4t_align" value="-0.174440" />
+ <constant name="y5t_align" value="0.118670" />
+ <constant name="y6t_align" value="-0.001400" />
+ <constant name="y7t_align" value="0.047526" />
+ <constant name="y8t_align" value="0.011511" />
+ <constant name="y9t_align" value="0.000000" />
+ <constant name="y10t_align" value="0.000000" />
+ <constant name="z1t_align" value="0.000000" />
+ <constant name="z2t_align" value="0.000000" />
+ <constant name="z3t_align" value="-0.002463" />
+ <constant name="z4t_align" value="-0.003986" />
+ <constant name="z5t_align" value="0.003089" />
+ <constant name="z6t_align" value="-0.000032" />
+ <constant name="z7t_align" value="0.001236" />
+ <constant name="z8t_align" value="0.000281" />
+ <constant name="z9t_align" value="0.000000" />
+ <constant name="z10t_align" value="0.000000" />
+ <constant name="rx1t_align" value="0.000000" />
+ <constant name="rx2t_align" value="-0.000000" />
+ <constant name="rx3t_align" value="0.000000" />
+ <constant name="rx4t_align" value="-0.000000" />
+ <constant name="rx5t_align" value="0.000000" />
+ <constant name="rx6t_align" value="-0.000000" />
+ <constant name="rx7t_align" value="0.000000" />
+ <constant name="rx8t_align" value="-0.000000" />
+ <constant name="rx9t_align" value="0.000000" />
+ <constant name="rx10t_align" value="-0.000000" />
+ <constant name="ry1t_align" value="0.000000" />
+ <constant name="ry2t_align" value="0.000000" />
+ <constant name="ry3t_align" value="0.000000" />
+ <constant name="ry4t_align" value="0.000000" />
+ <constant name="ry5t_align" value="0.000000" />
+ <constant name="ry6t_align" value="0.000000" />
+ <constant name="ry7t_align" value="0.000000" />
+ <constant name="ry8t_align" value="0.000000" />
+ <constant name="ry9t_align" value="0.000000" />
+ <constant name="ry10t_align" value="0.000000" />
+ <constant name="rz1t_align" value="0.000000" />
+ <constant name="rz2t_align" value="0.000000" />
+ <constant name="rz3t_align" value="0.000000" />
+ <constant name="rz4t_align" value="0.000000" />
+ <constant name="rz5t_align" value="0.000000" />
+ <constant name="rz6t_align" value="0.000000" />
+ <constant name="rz7t_align" value="0.000000" />
+ <constant name="rz8t_align" value="0.000000" />
+ <constant name="rz9t_align" value="0.000000" />
+ <constant name="rz10t_align" value="0.000000" />
+ <constant name="x1b_align" value="0.000000" />
+ <constant name="x2b_align" value="-0.000000" />
+ <constant name="x3b_align" value="-0.068351" />
+ <constant name="x4b_align" value="0.000012" />
+ <constant name="x5b_align" value="-0.100385" />
+ <constant name="x6b_align" value="0.000012" />
+ <constant name="x7b_align" value="-0.025606" />
+ <constant name="x8b_align" value="0.000007" />
+ <constant name="x9b_align" value="0.000000" />
+ <constant name="x10b_align" value="-0.000000" />
+ <constant name="y1b_align" value="0.000000" />
+ <constant name="y2b_align" value="0.000000" />
+ <constant name="y3b_align" value="0.681109" />
+ <constant name="y4b_align" value="0.061551" />
+ <constant name="y5b_align" value="1.004204" />
+ <constant name="y6b_align" value="0.037831" />
+ <constant name="y7b_align" value="0.506463" />
+ <constant name="y8b_align" value="0.015775" />
+ <constant name="y9b_align" value="0.000000" />
+ <constant name="y10b_align" value="0.000000" />
+ <constant name="z1b_align" value="0.000000" />
+ <constant name="z2b_align" value="0.000000" />
+ <constant name="z3b_align" value="-0.013322" />
+ <constant name="z4b_align" value="-0.001371" />
+ <constant name="z5b_align" value="-0.019651" />
+ <constant name="z6b_align" value="-0.000843" />
+ <constant name="z7b_align" value="-0.010587" />
+ <constant name="z8b_align" value="-0.000352" />
+ <constant name="z9b_align" value="0.000000" />
+ <constant name="z10b_align" value="0.000000" />
+ <constant name="rx1b_align" value="0.000000" />
+ <constant name="rx2b_align" value="-0.000000" />
+ <constant name="rx3b_align" value="0.000000" />
+ <constant name="rx4b_align" value="-0.000000" />
+ <constant name="rx5b_align" value="0.000000" />
+ <constant name="rx6b_align" value="-0.000000" />
+ <constant name="rx7b_align" value="0.000000" />
+ <constant name="rx8b_align" value="-0.000000" />
+ <constant name="rx9b_align" value="0.000000" />
+ <constant name="rx10b_align" value="-0.000000" />
+ <constant name="ry1b_align" value="0.000000" />
+ <constant name="ry2b_align" value="0.000000" />
+ <constant name="ry3b_align" value="0.000000" />
+ <constant name="ry4b_align" value="0.000000" />
+ <constant name="ry5b_align" value="0.000000" />
+ <constant name="ry6b_align" value="0.000000" />
+ <constant name="ry7b_align" value="0.000000" />
+ <constant name="ry8b_align" value="0.000000" />
+ <constant name="ry9b_align" value="0.000000" />
+ <constant name="ry10b_align" value="0.000000" />
+ <constant name="rz1b_align" value="0.000000" />
+ <constant name="rz2b_align" value="0.000000" />
+ <constant name="rz3b_align" value="0.000000" />
+ <constant name="rz4b_align" value="0.000000" />
+ <constant name="rz5b_align" value="0.000000" />
+ <constant name="rz6b_align" value="0.000000" />
+ <constant name="rz7b_align" value="0.000000" />
+ <constant name="rz8b_align" value="0.000000" />
+ <constant name="rz9b_align" value="0.000000" />
+ <constant name="rz10b_align" value="0.000000" />
<!-- Positions of sensor centers above/below nominal beam -->
<constant name="y1t" value="36.894" />
@@ -604,134 +604,134 @@
<constant name="mod2_rx10b" value="mod_rx10b" />
<constant name="mod2_ry10b" value="mod_ry10b+y_rot_bot_pivot" />
<constant name="mod2_rz10b" value="mod_rz10b" />
-
- <!-- final constants -->
- <constant name="final_x1t" value="mod2_x1t+x1t_align" />
- <constant name="final_x2t" value="mod2_x2t+x2t_align" />
- <constant name="final_x3t" value="mod2_x3t+x3t_align" />
- <constant name="final_x4t" value="mod2_x4t+x4t_align" />
- <constant name="final_x5t" value="mod2_x5t+x5t_align" />
- <constant name="final_x6t" value="mod2_x6t+x6t_align" />
- <constant name="final_x7t" value="mod2_x7t+x7t_align" />
- <constant name="final_x8t" value="mod2_x8t+x8t_align" />
- <constant name="final_x9t" value="mod2_x9t+x9t_align" />
- <constant name="final_x10t" value="mod2_x10t+x10t_align" />
- <constant name="final_y1t" value="mod2_y1t+y1t_align" />
- <constant name="final_y2t" value="mod2_y2t+y2t_align" />
- <constant name="final_y3t" value="mod2_y3t+y3t_align" />
- <constant name="final_y4t" value="mod2_y4t+y4t_align" />
- <constant name="final_y5t" value="mod2_y5t+y5t_align" />
- <constant name="final_y6t" value="mod2_y6t+y6t_align" />
- <constant name="final_y7t" value="mod2_y7t+y7t_align" />
- <constant name="final_y8t" value="mod2_y8t+y8t_align" />
- <constant name="final_y9t" value="mod2_y9t+y9t_align" />
- <constant name="final_y10t" value="mod2_y10t+y10t_align" />
- <constant name="final_z1t" value="mod2_z1t+z1t_align" />
- <constant name="final_z2t" value="mod2_z2t+z2t_align" />
- <constant name="final_z3t" value="mod2_z3t+z3t_align" />
- <constant name="final_z4t" value="mod2_z4t+z4t_align" />
- <constant name="final_z5t" value="mod2_z5t+z5t_align" />
- <constant name="final_z6t" value="mod2_z6t+z6t_align" />
- <constant name="final_z7t" value="mod2_z7t+z7t_align" />
- <constant name="final_z8t" value="mod2_z8t+z8t_align" />
- <constant name="final_z9t" value="mod2_z9t+z9t_align" />
- <constant name="final_z10t" value="mod2_z10t+z10t_align" />
- <constant name="final_rx1t" value="mod2_rx1t+rx1t_align" />
- <constant name="final_rx2t" value="mod2_rx2t+rx2t_align" />
- <constant name="final_rx3t" value="mod2_rx3t+rx3t_align" />
- <constant name="final_rx4t" value="mod2_rx4t+rx4t_align" />
- <constant name="final_rx5t" value="mod2_rx5t+rx5t_align" />
- <constant name="final_rx6t" value="mod2_rx6t+rx6t_align" />
- <constant name="final_rx7t" value="mod2_rx7t+rx7t_align" />
- <constant name="final_rx8t" value="mod2_rx8t+rx8t_align" />
- <constant name="final_rx9t" value="mod2_rx9t+rx9t_align" />
- <constant name="final_rx10t" value="mod2_rx10t+rx10t_align" />
- <constant name="final_ry1t" value="mod2_ry1t+ry1t_align" />
- <constant name="final_ry2t" value="mod2_ry2t+ry2t_align" />
- <constant name="final_ry3t" value="mod2_ry3t+ry3t_align" />
- <constant name="final_ry4t" value="mod2_ry4t+ry4t_align" />
- <constant name="final_ry5t" value="mod2_ry5t+ry5t_align" />
- <constant name="final_ry6t" value="mod2_ry6t+ry6t_align" />
- <constant name="final_ry7t" value="mod2_ry7t+ry7t_align" />
- <constant name="final_ry8t" value="mod2_ry8t+ry8t_align" />
- <constant name="final_ry9t" value="mod2_ry9t+ry9t_align" />
- <constant name="final_ry10t" value="mod2_ry10t+ry10t_align" />
- <constant name="final_rz1t" value="mod2_rz1t+rz1t_align" />
- <constant name="final_rz2t" value="mod2_rz2t+rz2t_align" />
- <constant name="final_rz3t" value="mod2_rz3t+rz3t_align" />
- <constant name="final_rz4t" value="mod2_rz4t+rz4t_align" />
- <constant name="final_rz5t" value="mod2_rz5t+rz5t_align" />
- <constant name="final_rz6t" value="mod2_rz6t+rz6t_align" />
- <constant name="final_rz7t" value="mod2_rz7t+rz7t_align" />
- <constant name="final_rz8t" value="mod2_rz8t+rz8t_align" />
- <constant name="final_rz9t" value="mod2_rz9t+rz9t_align" />
- <constant name="final_rz10t" value="mod2_rz10t+rz10t_align" />
- <constant name="final_x1b" value="mod2_x1b+x1b_align" />
- <constant name="final_x2b" value="mod2_x2b+x2b_align" />
- <constant name="final_x3b" value="mod2_x3b+x3b_align" />
- <constant name="final_x4b" value="mod2_x4b+x4b_align" />
- <constant name="final_x5b" value="mod2_x5b+x5b_align" />
- <constant name="final_x6b" value="mod2_x6b+x6b_align" />
- <constant name="final_x7b" value="mod2_x7b+x7b_align" />
- <constant name="final_x8b" value="mod2_x8b+x8b_align" />
- <constant name="final_x9b" value="mod2_x9b+x9b_align" />
- <constant name="final_x10b" value="mod2_x10b+x10b_align" />
- <constant name="final_y1b" value="mod2_y1b+y1b_align" />
- <constant name="final_y2b" value="mod2_y2b+y2b_align" />
- <constant name="final_y3b" value="mod2_y3b+y3b_align" />
- <constant name="final_y4b" value="mod2_y4b+y4b_align" />
- <constant name="final_y5b" value="mod2_y5b+y5b_align" />
- <constant name="final_y6b" value="mod2_y6b+y6b_align" />
- <constant name="final_y7b" value="mod2_y7b+y7b_align" />
- <constant name="final_y8b" value="mod2_y8b+y8b_align" />
- <constant name="final_y9b" value="mod2_y9b+y9b_align" />
- <constant name="final_y10b" value="mod2_y10b+y10b_align" />
- <constant name="final_z1b" value="mod2_z1b+z1b_align" />
- <constant name="final_z2b" value="mod2_z2b+z2b_align" />
- <constant name="final_z3b" value="mod2_z3b+z3b_align" />
- <constant name="final_z4b" value="mod2_z4b+z4b_align" />
- <constant name="final_z5b" value="mod2_z5b+z5b_align" />
- <constant name="final_z6b" value="mod2_z6b+z6b_align" />
- <constant name="final_z7b" value="mod2_z7b+z7b_align" />
- <constant name="final_z8b" value="mod2_z8b+z8b_align" />
- <constant name="final_z9b" value="mod2_z9b+z9b_align" />
- <constant name="final_z10b" value="mod2_z10b+z10b_align" />
- <constant name="final_rx1b" value="mod2_rx1b+rx1b_align" />
- <constant name="final_rx2b" value="mod2_rx2b+rx2b_align" />
- <constant name="final_rx3b" value="mod2_rx3b+rx3b_align" />
- <constant name="final_rx4b" value="mod2_rx4b+rx4b_align" />
- <constant name="final_rx5b" value="mod2_rx5b+rx5b_align" />
- <constant name="final_rx6b" value="mod2_rx6b+rx6b_align" />
- <constant name="final_rx7b" value="mod2_rx7b+rx7b_align" />
- <constant name="final_rx8b" value="mod2_rx8b+rx8b_align" />
- <constant name="final_rx9b" value="mod2_rx9b+rx9b_align" />
- <constant name="final_rx10b" value="mod2_rx10b+rx10b_align" />
- <constant name="final_ry1b" value="mod2_ry1b+ry1b_align" />
- <constant name="final_ry2b" value="mod2_ry2b+ry2b_align" />
- <constant name="final_ry3b" value="mod2_ry3b+ry3b_align" />
- <constant name="final_ry4b" value="mod2_ry4b+ry4b_align" />
- <constant name="final_ry5b" value="mod2_ry5b+ry5b_align" />
- <constant name="final_ry6b" value="mod2_ry6b+ry6b_align" />
- <constant name="final_ry7b" value="mod2_ry7b+ry7b_align" />
- <constant name="final_ry8b" value="mod2_ry8b+ry8b_align" />
- <constant name="final_ry9b" value="mod2_ry9b+ry9b_align" />
- <constant name="final_ry10b" value="mod2_ry10b+ry10b_align" />
- <constant name="final_rz1b" value="mod2_rz1b+rz1b_align" />
- <constant name="final_rz2b" value="mod2_rz2b+rz2b_align" />
- <constant name="final_rz3b" value="mod2_rz3b+rz3b_align" />
- <constant name="final_rz4b" value="mod2_rz4b+rz4b_align" />
- <constant name="final_rz5b" value="mod2_rz5b+rz5b_align" />
- <constant name="final_rz6b" value="mod2_rz6b+rz6b_align" />
- <constant name="final_rz7b" value="mod2_rz7b+rz7b_align" />
- <constant name="final_rz8b" value="mod2_rz8b+rz8b_align" />
- <constant name="final_rz9b" value="mod2_rz9b+rz9b_align" />
- <constant name="final_rz10b" value="mod2_rz10b+rz10b_align" />
-
-
+
+ <!-- final constants -->
+ <constant name="final_x1t" value="mod2_x1t+x1t_align" />
+ <constant name="final_x2t" value="mod2_x2t+x2t_align" />
+ <constant name="final_x3t" value="mod2_x3t+x3t_align" />
+ <constant name="final_x4t" value="mod2_x4t+x4t_align" />
+ <constant name="final_x5t" value="mod2_x5t+x5t_align" />
+ <constant name="final_x6t" value="mod2_x6t+x6t_align" />
+ <constant name="final_x7t" value="mod2_x7t+x7t_align" />
+ <constant name="final_x8t" value="mod2_x8t+x8t_align" />
+ <constant name="final_x9t" value="mod2_x9t+x9t_align" />
+ <constant name="final_x10t" value="mod2_x10t+x10t_align" />
+ <constant name="final_y1t" value="mod2_y1t+y1t_align" />
+ <constant name="final_y2t" value="mod2_y2t+y2t_align" />
+ <constant name="final_y3t" value="mod2_y3t+y3t_align" />
+ <constant name="final_y4t" value="mod2_y4t+y4t_align" />
+ <constant name="final_y5t" value="mod2_y5t+y5t_align" />
+ <constant name="final_y6t" value="mod2_y6t+y6t_align" />
+ <constant name="final_y7t" value="mod2_y7t+y7t_align" />
+ <constant name="final_y8t" value="mod2_y8t+y8t_align" />
+ <constant name="final_y9t" value="mod2_y9t+y9t_align" />
+ <constant name="final_y10t" value="mod2_y10t+y10t_align" />
+ <constant name="final_z1t" value="mod2_z1t+z1t_align" />
+ <constant name="final_z2t" value="mod2_z2t+z2t_align" />
+ <constant name="final_z3t" value="mod2_z3t+z3t_align" />
+ <constant name="final_z4t" value="mod2_z4t+z4t_align" />
+ <constant name="final_z5t" value="mod2_z5t+z5t_align" />
+ <constant name="final_z6t" value="mod2_z6t+z6t_align" />
+ <constant name="final_z7t" value="mod2_z7t+z7t_align" />
+ <constant name="final_z8t" value="mod2_z8t+z8t_align" />
+ <constant name="final_z9t" value="mod2_z9t+z9t_align" />
+ <constant name="final_z10t" value="mod2_z10t+z10t_align" />
+ <constant name="final_rx1t" value="mod2_rx1t+rx1t_align" />
+ <constant name="final_rx2t" value="mod2_rx2t+rx2t_align" />
+ <constant name="final_rx3t" value="mod2_rx3t+rx3t_align" />
+ <constant name="final_rx4t" value="mod2_rx4t+rx4t_align" />
+ <constant name="final_rx5t" value="mod2_rx5t+rx5t_align" />
+ <constant name="final_rx6t" value="mod2_rx6t+rx6t_align" />
+ <constant name="final_rx7t" value="mod2_rx7t+rx7t_align" />
+ <constant name="final_rx8t" value="mod2_rx8t+rx8t_align" />
+ <constant name="final_rx9t" value="mod2_rx9t+rx9t_align" />
+ <constant name="final_rx10t" value="mod2_rx10t+rx10t_align" />
+ <constant name="final_ry1t" value="mod2_ry1t+ry1t_align" />
+ <constant name="final_ry2t" value="mod2_ry2t+ry2t_align" />
+ <constant name="final_ry3t" value="mod2_ry3t+ry3t_align" />
+ <constant name="final_ry4t" value="mod2_ry4t+ry4t_align" />
+ <constant name="final_ry5t" value="mod2_ry5t+ry5t_align" />
+ <constant name="final_ry6t" value="mod2_ry6t+ry6t_align" />
+ <constant name="final_ry7t" value="mod2_ry7t+ry7t_align" />
+ <constant name="final_ry8t" value="mod2_ry8t+ry8t_align" />
+ <constant name="final_ry9t" value="mod2_ry9t+ry9t_align" />
+ <constant name="final_ry10t" value="mod2_ry10t+ry10t_align" />
+ <constant name="final_rz1t" value="mod2_rz1t+rz1t_align" />
+ <constant name="final_rz2t" value="mod2_rz2t+rz2t_align" />
+ <constant name="final_rz3t" value="mod2_rz3t+rz3t_align" />
+ <constant name="final_rz4t" value="mod2_rz4t+rz4t_align" />
+ <constant name="final_rz5t" value="mod2_rz5t+rz5t_align" />
+ <constant name="final_rz6t" value="mod2_rz6t+rz6t_align" />
+ <constant name="final_rz7t" value="mod2_rz7t+rz7t_align" />
+ <constant name="final_rz8t" value="mod2_rz8t+rz8t_align" />
+ <constant name="final_rz9t" value="mod2_rz9t+rz9t_align" />
+ <constant name="final_rz10t" value="mod2_rz10t+rz10t_align" />
+ <constant name="final_x1b" value="mod2_x1b+x1b_align" />
+ <constant name="final_x2b" value="mod2_x2b+x2b_align" />
+ <constant name="final_x3b" value="mod2_x3b+x3b_align" />
+ <constant name="final_x4b" value="mod2_x4b+x4b_align" />
+ <constant name="final_x5b" value="mod2_x5b+x5b_align" />
+ <constant name="final_x6b" value="mod2_x6b+x6b_align" />
+ <constant name="final_x7b" value="mod2_x7b+x7b_align" />
+ <constant name="final_x8b" value="mod2_x8b+x8b_align" />
+ <constant name="final_x9b" value="mod2_x9b+x9b_align" />
+ <constant name="final_x10b" value="mod2_x10b+x10b_align" />
+ <constant name="final_y1b" value="mod2_y1b+y1b_align" />
+ <constant name="final_y2b" value="mod2_y2b+y2b_align" />
+ <constant name="final_y3b" value="mod2_y3b+y3b_align" />
+ <constant name="final_y4b" value="mod2_y4b+y4b_align" />
+ <constant name="final_y5b" value="mod2_y5b+y5b_align" />
+ <constant name="final_y6b" value="mod2_y6b+y6b_align" />
+ <constant name="final_y7b" value="mod2_y7b+y7b_align" />
+ <constant name="final_y8b" value="mod2_y8b+y8b_align" />
+ <constant name="final_y9b" value="mod2_y9b+y9b_align" />
+ <constant name="final_y10b" value="mod2_y10b+y10b_align" />
+ <constant name="final_z1b" value="mod2_z1b+z1b_align" />
+ <constant name="final_z2b" value="mod2_z2b+z2b_align" />
+ <constant name="final_z3b" value="mod2_z3b+z3b_align" />
+ <constant name="final_z4b" value="mod2_z4b+z4b_align" />
+ <constant name="final_z5b" value="mod2_z5b+z5b_align" />
+ <constant name="final_z6b" value="mod2_z6b+z6b_align" />
+ <constant name="final_z7b" value="mod2_z7b+z7b_align" />
+ <constant name="final_z8b" value="mod2_z8b+z8b_align" />
+ <constant name="final_z9b" value="mod2_z9b+z9b_align" />
+ <constant name="final_z10b" value="mod2_z10b+z10b_align" />
+ <constant name="final_rx1b" value="mod2_rx1b+rx1b_align" />
+ <constant name="final_rx2b" value="mod2_rx2b+rx2b_align" />
+ <constant name="final_rx3b" value="mod2_rx3b+rx3b_align" />
+ <constant name="final_rx4b" value="mod2_rx4b+rx4b_align" />
+ <constant name="final_rx5b" value="mod2_rx5b+rx5b_align" />
+ <constant name="final_rx6b" value="mod2_rx6b+rx6b_align" />
+ <constant name="final_rx7b" value="mod2_rx7b+rx7b_align" />
+ <constant name="final_rx8b" value="mod2_rx8b+rx8b_align" />
+ <constant name="final_rx9b" value="mod2_rx9b+rx9b_align" />
+ <constant name="final_rx10b" value="mod2_rx10b+rx10b_align" />
+ <constant name="final_ry1b" value="mod2_ry1b+ry1b_align" />
+ <constant name="final_ry2b" value="mod2_ry2b+ry2b_align" />
+ <constant name="final_ry3b" value="mod2_ry3b+ry3b_align" />
+ <constant name="final_ry4b" value="mod2_ry4b+ry4b_align" />
+ <constant name="final_ry5b" value="mod2_ry5b+ry5b_align" />
+ <constant name="final_ry6b" value="mod2_ry6b+ry6b_align" />
+ <constant name="final_ry7b" value="mod2_ry7b+ry7b_align" />
+ <constant name="final_ry8b" value="mod2_ry8b+ry8b_align" />
+ <constant name="final_ry9b" value="mod2_ry9b+ry9b_align" />
+ <constant name="final_ry10b" value="mod2_ry10b+ry10b_align" />
+ <constant name="final_rz1b" value="mod2_rz1b+rz1b_align" />
+ <constant name="final_rz2b" value="mod2_rz2b+rz2b_align" />
+ <constant name="final_rz3b" value="mod2_rz3b+rz3b_align" />
+ <constant name="final_rz4b" value="mod2_rz4b+rz4b_align" />
+ <constant name="final_rz5b" value="mod2_rz5b+rz5b_align" />
+ <constant name="final_rz6b" value="mod2_rz6b+rz6b_align" />
+ <constant name="final_rz7b" value="mod2_rz7b+rz7b_align" />
+ <constant name="final_rz8b" value="mod2_rz8b+rz8b_align" />
+ <constant name="final_rz9b" value="mod2_rz9b+rz9b_align" />
+ <constant name="final_rz10b" value="mod2_rz10b+rz10b_align" />
+
+
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001" />
<fraction n="1.0" ref="Vacuum" />
@@ -820,7 +820,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2" />
- </layer>
+ </layer>
</detector>
<detector id="13" name="Ecal" type="HPSEcal3" insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
Modified: java/trunk/detector-data/detectors/HPS-TestRun-v7/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-TestRun-v7/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-TestRun-v7/compact.xml Wed Mar 9 11:43:24 2016
@@ -488,7 +488,7 @@
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001"/>
<fraction n="1.0" ref="Vacuum" />
@@ -577,7 +577,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
+ </layer>
</detector>
<detector id="13" name="Ecal" type="HPSEcal3" insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
Modified: java/trunk/detector-data/detectors/HPS-TestRun-v8-4/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-TestRun-v8-4/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-TestRun-v8-4/compact.xml Wed Mar 9 11:43:24 2016
@@ -3,9 +3,9 @@
<info name="HPS-TestRun-v8-4">
<comment>
- HPS JLab Test Run detector with dipole field starting at z=0
- Alignment based on millepede: compact-u3-6-float-1351-v8-10k.xml
- </comment>
+ HPS JLab Test Run detector with dipole field starting at z=0
+ Alignment based on millepede: compact-u3-6-float-1351-v8-10k.xml
+ </comment>
</info>
<define>
@@ -65,127 +65,127 @@
<!-- <constant name="x_off" value = "-15.0"/> -->
<constant name="x_off" value="0.0" />
- <!-- alignment corrections -->
- <constant name="x1t_align" value="0.000000" />
- <constant name="x2t_align" value="0.000000" />
- <constant name="x3t_align" value="0.000014" />
- <constant name="x4t_align" value="0.015024" />
- <constant name="x5t_align" value="0.000045" />
- <constant name="x6t_align" value="-0.003411" />
- <constant name="x7t_align" value="0.000000" />
- <constant name="x8t_align" value="0.000000" />
- <constant name="x9t_align" value="0.000000" />
- <constant name="x10t_align" value="0.000000" />
- <constant name="y1t_align" value="0.000000" />
- <constant name="y2t_align" value="0.000000" />
- <constant name="y3t_align" value="0.112932" />
- <constant name="y4t_align" value="0.149860" />
- <constant name="y5t_align" value="-0.082467" />
- <constant name="y6t_align" value="-0.033966" />
- <constant name="y7t_align" value="0.000000" />
- <constant name="y8t_align" value="0.000000" />
- <constant name="y9t_align" value="0.000000" />
- <constant name="y10t_align" value="0.000000" />
- <constant name="z1t_align" value="-0.000000" />
- <constant name="z2t_align" value="0.000000" />
- <constant name="z3t_align" value="0.002938" />
- <constant name="z4t_align" value="0.003424" />
- <constant name="z5t_align" value="-0.002147" />
- <constant name="z6t_align" value="-0.000776" />
- <constant name="z7t_align" value="-0.000000" />
- <constant name="z8t_align" value="0.000000" />
- <constant name="z9t_align" value="-0.000000" />
- <constant name="z10t_align" value="0.000000" />
- <constant name="rx1t_align" value="0.000000" />
- <constant name="rx2t_align" value="0.000000" />
- <constant name="rx3t_align" value="0.000000" />
- <constant name="rx4t_align" value="0.000000" />
- <constant name="rx5t_align" value="0.000000" />
- <constant name="rx6t_align" value="0.000000" />
- <constant name="rx7t_align" value="0.000000" />
- <constant name="rx8t_align" value="0.000000" />
- <constant name="rx9t_align" value="0.000000" />
- <constant name="rx10t_align" value="0.000000" />
- <constant name="ry1t_align" value="0.000000" />
- <constant name="ry2t_align" value="0.000000" />
- <constant name="ry3t_align" value="0.000000" />
- <constant name="ry4t_align" value="0.000000" />
- <constant name="ry5t_align" value="0.000000" />
- <constant name="ry6t_align" value="0.000000" />
- <constant name="ry7t_align" value="0.000000" />
- <constant name="ry8t_align" value="0.000000" />
- <constant name="ry9t_align" value="0.000000" />
- <constant name="ry10t_align" value="0.000000" />
- <constant name="rz1t_align" value="-0.000000" />
- <constant name="rz2t_align" value="0.000000" />
- <constant name="rz3t_align" value="-0.000000" />
- <constant name="rz4t_align" value="0.000000" />
- <constant name="rz5t_align" value="-0.000000" />
- <constant name="rz6t_align" value="0.000000" />
- <constant name="rz7t_align" value="-0.000000" />
- <constant name="rz8t_align" value="0.000000" />
- <constant name="rz9t_align" value="-0.000000" />
- <constant name="rz10t_align" value="0.000000" />
- <constant name="x1b_align" value="0.000000" />
- <constant name="x2b_align" value="0.000000" />
- <constant name="x3b_align" value="0.008443" />
- <constant name="x4b_align" value="-0.000012" />
- <constant name="x5b_align" value="0.004437" />
- <constant name="x6b_align" value="-0.000010" />
- <constant name="x7b_align" value="0.000000" />
- <constant name="x8b_align" value="0.000000" />
- <constant name="x9b_align" value="0.000000" />
- <constant name="x10b_align" value="0.000000" />
- <constant name="y1b_align" value="0.000000" />
- <constant name="y2b_align" value="0.000000" />
- <constant name="y3b_align" value="-0.084138" />
- <constant name="y4b_align" value="-0.061835" />
- <constant name="y5b_align" value="-0.044388" />
- <constant name="y6b_align" value="-0.032317" />
- <constant name="y7b_align" value="0.000000" />
- <constant name="y8b_align" value="0.000000" />
- <constant name="y9b_align" value="0.000000" />
- <constant name="y10b_align" value="0.000000" />
- <constant name="z1b_align" value="0.000000" />
- <constant name="z2b_align" value="0.000000" />
- <constant name="z3b_align" value="0.001646" />
- <constant name="z4b_align" value="0.001377" />
- <constant name="z5b_align" value="0.000869" />
- <constant name="z6b_align" value="0.000720" />
- <constant name="z7b_align" value="0.000000" />
- <constant name="z8b_align" value="0.000000" />
- <constant name="z9b_align" value="0.000000" />
- <constant name="z10b_align" value="0.000000" />
- <constant name="rx1b_align" value="0.000000" />
- <constant name="rx2b_align" value="0.000000" />
- <constant name="rx3b_align" value="0.000000" />
- <constant name="rx4b_align" value="0.000000" />
- <constant name="rx5b_align" value="0.000000" />
- <constant name="rx6b_align" value="0.000000" />
- <constant name="rx7b_align" value="0.000000" />
- <constant name="rx8b_align" value="0.000000" />
- <constant name="rx9b_align" value="0.000000" />
- <constant name="rx10b_align" value="0.000000" />
- <constant name="ry1b_align" value="0.000000" />
- <constant name="ry2b_align" value="0.000000" />
- <constant name="ry3b_align" value="0.000000" />
- <constant name="ry4b_align" value="0.000000" />
- <constant name="ry5b_align" value="0.000000" />
- <constant name="ry6b_align" value="0.000000" />
- <constant name="ry7b_align" value="0.000000" />
- <constant name="ry8b_align" value="0.000000" />
- <constant name="ry9b_align" value="0.000000" />
- <constant name="ry10b_align" value="0.000000" />
- <constant name="rz1b_align" value="0.000000" />
- <constant name="rz2b_align" value="0.000000" />
- <constant name="rz3b_align" value="0.000000" />
- <constant name="rz4b_align" value="0.000000" />
- <constant name="rz5b_align" value="0.000000" />
- <constant name="rz6b_align" value="0.000000" />
- <constant name="rz7b_align" value="0.000000" />
- <constant name="rz8b_align" value="0.000000" />
- <constant name="rz9b_align" value="0.000000" />
- <constant name="rz10b_align" value="0.000000" />
+ <!-- alignment corrections -->
+ <constant name="x1t_align" value="0.000000" />
+ <constant name="x2t_align" value="0.000000" />
+ <constant name="x3t_align" value="0.000014" />
+ <constant name="x4t_align" value="0.015024" />
+ <constant name="x5t_align" value="0.000045" />
+ <constant name="x6t_align" value="-0.003411" />
+ <constant name="x7t_align" value="0.000000" />
+ <constant name="x8t_align" value="0.000000" />
+ <constant name="x9t_align" value="0.000000" />
+ <constant name="x10t_align" value="0.000000" />
+ <constant name="y1t_align" value="0.000000" />
+ <constant name="y2t_align" value="0.000000" />
+ <constant name="y3t_align" value="0.112932" />
+ <constant name="y4t_align" value="0.149860" />
+ <constant name="y5t_align" value="-0.082467" />
+ <constant name="y6t_align" value="-0.033966" />
+ <constant name="y7t_align" value="0.000000" />
+ <constant name="y8t_align" value="0.000000" />
+ <constant name="y9t_align" value="0.000000" />
+ <constant name="y10t_align" value="0.000000" />
+ <constant name="z1t_align" value="-0.000000" />
+ <constant name="z2t_align" value="0.000000" />
+ <constant name="z3t_align" value="0.002938" />
+ <constant name="z4t_align" value="0.003424" />
+ <constant name="z5t_align" value="-0.002147" />
+ <constant name="z6t_align" value="-0.000776" />
+ <constant name="z7t_align" value="-0.000000" />
+ <constant name="z8t_align" value="0.000000" />
+ <constant name="z9t_align" value="-0.000000" />
+ <constant name="z10t_align" value="0.000000" />
+ <constant name="rx1t_align" value="0.000000" />
+ <constant name="rx2t_align" value="0.000000" />
+ <constant name="rx3t_align" value="0.000000" />
+ <constant name="rx4t_align" value="0.000000" />
+ <constant name="rx5t_align" value="0.000000" />
+ <constant name="rx6t_align" value="0.000000" />
+ <constant name="rx7t_align" value="0.000000" />
+ <constant name="rx8t_align" value="0.000000" />
+ <constant name="rx9t_align" value="0.000000" />
+ <constant name="rx10t_align" value="0.000000" />
+ <constant name="ry1t_align" value="0.000000" />
+ <constant name="ry2t_align" value="0.000000" />
+ <constant name="ry3t_align" value="0.000000" />
+ <constant name="ry4t_align" value="0.000000" />
+ <constant name="ry5t_align" value="0.000000" />
+ <constant name="ry6t_align" value="0.000000" />
+ <constant name="ry7t_align" value="0.000000" />
+ <constant name="ry8t_align" value="0.000000" />
+ <constant name="ry9t_align" value="0.000000" />
+ <constant name="ry10t_align" value="0.000000" />
+ <constant name="rz1t_align" value="-0.000000" />
+ <constant name="rz2t_align" value="0.000000" />
+ <constant name="rz3t_align" value="-0.000000" />
+ <constant name="rz4t_align" value="0.000000" />
+ <constant name="rz5t_align" value="-0.000000" />
+ <constant name="rz6t_align" value="0.000000" />
+ <constant name="rz7t_align" value="-0.000000" />
+ <constant name="rz8t_align" value="0.000000" />
+ <constant name="rz9t_align" value="-0.000000" />
+ <constant name="rz10t_align" value="0.000000" />
+ <constant name="x1b_align" value="0.000000" />
+ <constant name="x2b_align" value="0.000000" />
+ <constant name="x3b_align" value="0.008443" />
+ <constant name="x4b_align" value="-0.000012" />
+ <constant name="x5b_align" value="0.004437" />
+ <constant name="x6b_align" value="-0.000010" />
+ <constant name="x7b_align" value="0.000000" />
+ <constant name="x8b_align" value="0.000000" />
+ <constant name="x9b_align" value="0.000000" />
+ <constant name="x10b_align" value="0.000000" />
+ <constant name="y1b_align" value="0.000000" />
+ <constant name="y2b_align" value="0.000000" />
+ <constant name="y3b_align" value="-0.084138" />
+ <constant name="y4b_align" value="-0.061835" />
+ <constant name="y5b_align" value="-0.044388" />
+ <constant name="y6b_align" value="-0.032317" />
+ <constant name="y7b_align" value="0.000000" />
+ <constant name="y8b_align" value="0.000000" />
+ <constant name="y9b_align" value="0.000000" />
+ <constant name="y10b_align" value="0.000000" />
+ <constant name="z1b_align" value="0.000000" />
+ <constant name="z2b_align" value="0.000000" />
+ <constant name="z3b_align" value="0.001646" />
+ <constant name="z4b_align" value="0.001377" />
+ <constant name="z5b_align" value="0.000869" />
+ <constant name="z6b_align" value="0.000720" />
+ <constant name="z7b_align" value="0.000000" />
+ <constant name="z8b_align" value="0.000000" />
+ <constant name="z9b_align" value="0.000000" />
+ <constant name="z10b_align" value="0.000000" />
+ <constant name="rx1b_align" value="0.000000" />
+ <constant name="rx2b_align" value="0.000000" />
+ <constant name="rx3b_align" value="0.000000" />
+ <constant name="rx4b_align" value="0.000000" />
+ <constant name="rx5b_align" value="0.000000" />
+ <constant name="rx6b_align" value="0.000000" />
+ <constant name="rx7b_align" value="0.000000" />
+ <constant name="rx8b_align" value="0.000000" />
+ <constant name="rx9b_align" value="0.000000" />
+ <constant name="rx10b_align" value="0.000000" />
+ <constant name="ry1b_align" value="0.000000" />
+ <constant name="ry2b_align" value="0.000000" />
+ <constant name="ry3b_align" value="0.000000" />
+ <constant name="ry4b_align" value="0.000000" />
+ <constant name="ry5b_align" value="0.000000" />
+ <constant name="ry6b_align" value="0.000000" />
+ <constant name="ry7b_align" value="0.000000" />
+ <constant name="ry8b_align" value="0.000000" />
+ <constant name="ry9b_align" value="0.000000" />
+ <constant name="ry10b_align" value="0.000000" />
+ <constant name="rz1b_align" value="0.000000" />
+ <constant name="rz2b_align" value="0.000000" />
+ <constant name="rz3b_align" value="0.000000" />
+ <constant name="rz4b_align" value="0.000000" />
+ <constant name="rz5b_align" value="0.000000" />
+ <constant name="rz6b_align" value="0.000000" />
+ <constant name="rz7b_align" value="0.000000" />
+ <constant name="rz8b_align" value="0.000000" />
+ <constant name="rz9b_align" value="0.000000" />
+ <constant name="rz10b_align" value="0.000000" />
<!-- Positions of sensor centers above/below nominal beam -->
<constant name="y1t" value="36.894" />
@@ -585,134 +585,134 @@
<constant name="mod2_rx10b" value="mod_rx10b" />
<constant name="mod2_ry10b" value="mod_ry10b+y_rot_bot_pivot" />
<constant name="mod2_rz10b" value="mod_rz10b" />
-
- <!-- final constants -->
- <constant name="final_x1t" value="mod2_x1t+x1t_align" />
- <constant name="final_x2t" value="mod2_x2t+x2t_align" />
- <constant name="final_x3t" value="mod2_x3t+x3t_align" />
- <constant name="final_x4t" value="mod2_x4t+x4t_align" />
- <constant name="final_x5t" value="mod2_x5t+x5t_align" />
- <constant name="final_x6t" value="mod2_x6t+x6t_align" />
- <constant name="final_x7t" value="mod2_x7t+x7t_align" />
- <constant name="final_x8t" value="mod2_x8t+x8t_align" />
- <constant name="final_x9t" value="mod2_x9t+x9t_align" />
- <constant name="final_x10t" value="mod2_x10t+x10t_align" />
- <constant name="final_y1t" value="mod2_y1t+y1t_align" />
- <constant name="final_y2t" value="mod2_y2t+y2t_align" />
- <constant name="final_y3t" value="mod2_y3t+y3t_align" />
- <constant name="final_y4t" value="mod2_y4t+y4t_align" />
- <constant name="final_y5t" value="mod2_y5t+y5t_align" />
- <constant name="final_y6t" value="mod2_y6t+y6t_align" />
- <constant name="final_y7t" value="mod2_y7t+y7t_align" />
- <constant name="final_y8t" value="mod2_y8t+y8t_align" />
- <constant name="final_y9t" value="mod2_y9t+y9t_align" />
- <constant name="final_y10t" value="mod2_y10t+y10t_align" />
- <constant name="final_z1t" value="mod2_z1t+z1t_align" />
- <constant name="final_z2t" value="mod2_z2t+z2t_align" />
- <constant name="final_z3t" value="mod2_z3t+z3t_align" />
- <constant name="final_z4t" value="mod2_z4t+z4t_align" />
- <constant name="final_z5t" value="mod2_z5t+z5t_align" />
- <constant name="final_z6t" value="mod2_z6t+z6t_align" />
- <constant name="final_z7t" value="mod2_z7t+z7t_align" />
- <constant name="final_z8t" value="mod2_z8t+z8t_align" />
- <constant name="final_z9t" value="mod2_z9t+z9t_align" />
- <constant name="final_z10t" value="mod2_z10t+z10t_align" />
- <constant name="final_rx1t" value="mod2_rx1t+rx1t_align" />
- <constant name="final_rx2t" value="mod2_rx2t+rx2t_align" />
- <constant name="final_rx3t" value="mod2_rx3t+rx3t_align" />
- <constant name="final_rx4t" value="mod2_rx4t+rx4t_align" />
- <constant name="final_rx5t" value="mod2_rx5t+rx5t_align" />
- <constant name="final_rx6t" value="mod2_rx6t+rx6t_align" />
- <constant name="final_rx7t" value="mod2_rx7t+rx7t_align" />
- <constant name="final_rx8t" value="mod2_rx8t+rx8t_align" />
- <constant name="final_rx9t" value="mod2_rx9t+rx9t_align" />
- <constant name="final_rx10t" value="mod2_rx10t+rx10t_align" />
- <constant name="final_ry1t" value="mod2_ry1t+ry1t_align" />
- <constant name="final_ry2t" value="mod2_ry2t+ry2t_align" />
- <constant name="final_ry3t" value="mod2_ry3t+ry3t_align" />
- <constant name="final_ry4t" value="mod2_ry4t+ry4t_align" />
- <constant name="final_ry5t" value="mod2_ry5t+ry5t_align" />
- <constant name="final_ry6t" value="mod2_ry6t+ry6t_align" />
- <constant name="final_ry7t" value="mod2_ry7t+ry7t_align" />
- <constant name="final_ry8t" value="mod2_ry8t+ry8t_align" />
- <constant name="final_ry9t" value="mod2_ry9t+ry9t_align" />
- <constant name="final_ry10t" value="mod2_ry10t+ry10t_align" />
- <constant name="final_rz1t" value="mod2_rz1t+rz1t_align" />
- <constant name="final_rz2t" value="mod2_rz2t+rz2t_align" />
- <constant name="final_rz3t" value="mod2_rz3t+rz3t_align" />
- <constant name="final_rz4t" value="mod2_rz4t+rz4t_align" />
- <constant name="final_rz5t" value="mod2_rz5t+rz5t_align" />
- <constant name="final_rz6t" value="mod2_rz6t+rz6t_align" />
- <constant name="final_rz7t" value="mod2_rz7t+rz7t_align" />
- <constant name="final_rz8t" value="mod2_rz8t+rz8t_align" />
- <constant name="final_rz9t" value="mod2_rz9t+rz9t_align" />
- <constant name="final_rz10t" value="mod2_rz10t+rz10t_align" />
- <constant name="final_x1b" value="mod2_x1b+x1b_align" />
- <constant name="final_x2b" value="mod2_x2b+x2b_align" />
- <constant name="final_x3b" value="mod2_x3b+x3b_align" />
- <constant name="final_x4b" value="mod2_x4b+x4b_align" />
- <constant name="final_x5b" value="mod2_x5b+x5b_align" />
- <constant name="final_x6b" value="mod2_x6b+x6b_align" />
- <constant name="final_x7b" value="mod2_x7b+x7b_align" />
- <constant name="final_x8b" value="mod2_x8b+x8b_align" />
- <constant name="final_x9b" value="mod2_x9b+x9b_align" />
- <constant name="final_x10b" value="mod2_x10b+x10b_align" />
- <constant name="final_y1b" value="mod2_y1b+y1b_align" />
- <constant name="final_y2b" value="mod2_y2b+y2b_align" />
- <constant name="final_y3b" value="mod2_y3b+y3b_align" />
- <constant name="final_y4b" value="mod2_y4b+y4b_align" />
- <constant name="final_y5b" value="mod2_y5b+y5b_align" />
- <constant name="final_y6b" value="mod2_y6b+y6b_align" />
- <constant name="final_y7b" value="mod2_y7b+y7b_align" />
- <constant name="final_y8b" value="mod2_y8b+y8b_align" />
- <constant name="final_y9b" value="mod2_y9b+y9b_align" />
- <constant name="final_y10b" value="mod2_y10b+y10b_align" />
- <constant name="final_z1b" value="mod2_z1b+z1b_align" />
- <constant name="final_z2b" value="mod2_z2b+z2b_align" />
- <constant name="final_z3b" value="mod2_z3b+z3b_align" />
- <constant name="final_z4b" value="mod2_z4b+z4b_align" />
- <constant name="final_z5b" value="mod2_z5b+z5b_align" />
- <constant name="final_z6b" value="mod2_z6b+z6b_align" />
- <constant name="final_z7b" value="mod2_z7b+z7b_align" />
- <constant name="final_z8b" value="mod2_z8b+z8b_align" />
- <constant name="final_z9b" value="mod2_z9b+z9b_align" />
- <constant name="final_z10b" value="mod2_z10b+z10b_align" />
- <constant name="final_rx1b" value="mod2_rx1b+rx1b_align" />
- <constant name="final_rx2b" value="mod2_rx2b+rx2b_align" />
- <constant name="final_rx3b" value="mod2_rx3b+rx3b_align" />
- <constant name="final_rx4b" value="mod2_rx4b+rx4b_align" />
- <constant name="final_rx5b" value="mod2_rx5b+rx5b_align" />
- <constant name="final_rx6b" value="mod2_rx6b+rx6b_align" />
- <constant name="final_rx7b" value="mod2_rx7b+rx7b_align" />
- <constant name="final_rx8b" value="mod2_rx8b+rx8b_align" />
- <constant name="final_rx9b" value="mod2_rx9b+rx9b_align" />
- <constant name="final_rx10b" value="mod2_rx10b+rx10b_align" />
- <constant name="final_ry1b" value="mod2_ry1b+ry1b_align" />
- <constant name="final_ry2b" value="mod2_ry2b+ry2b_align" />
- <constant name="final_ry3b" value="mod2_ry3b+ry3b_align" />
- <constant name="final_ry4b" value="mod2_ry4b+ry4b_align" />
- <constant name="final_ry5b" value="mod2_ry5b+ry5b_align" />
- <constant name="final_ry6b" value="mod2_ry6b+ry6b_align" />
- <constant name="final_ry7b" value="mod2_ry7b+ry7b_align" />
- <constant name="final_ry8b" value="mod2_ry8b+ry8b_align" />
- <constant name="final_ry9b" value="mod2_ry9b+ry9b_align" />
- <constant name="final_ry10b" value="mod2_ry10b+ry10b_align" />
- <constant name="final_rz1b" value="mod2_rz1b+rz1b_align" />
- <constant name="final_rz2b" value="mod2_rz2b+rz2b_align" />
- <constant name="final_rz3b" value="mod2_rz3b+rz3b_align" />
- <constant name="final_rz4b" value="mod2_rz4b+rz4b_align" />
- <constant name="final_rz5b" value="mod2_rz5b+rz5b_align" />
- <constant name="final_rz6b" value="mod2_rz6b+rz6b_align" />
- <constant name="final_rz7b" value="mod2_rz7b+rz7b_align" />
- <constant name="final_rz8b" value="mod2_rz8b+rz8b_align" />
- <constant name="final_rz9b" value="mod2_rz9b+rz9b_align" />
- <constant name="final_rz10b" value="mod2_rz10b+rz10b_align" />
-
-
+
+ <!-- final constants -->
+ <constant name="final_x1t" value="mod2_x1t+x1t_align" />
+ <constant name="final_x2t" value="mod2_x2t+x2t_align" />
+ <constant name="final_x3t" value="mod2_x3t+x3t_align" />
+ <constant name="final_x4t" value="mod2_x4t+x4t_align" />
+ <constant name="final_x5t" value="mod2_x5t+x5t_align" />
+ <constant name="final_x6t" value="mod2_x6t+x6t_align" />
+ <constant name="final_x7t" value="mod2_x7t+x7t_align" />
+ <constant name="final_x8t" value="mod2_x8t+x8t_align" />
+ <constant name="final_x9t" value="mod2_x9t+x9t_align" />
+ <constant name="final_x10t" value="mod2_x10t+x10t_align" />
+ <constant name="final_y1t" value="mod2_y1t+y1t_align" />
+ <constant name="final_y2t" value="mod2_y2t+y2t_align" />
+ <constant name="final_y3t" value="mod2_y3t+y3t_align" />
+ <constant name="final_y4t" value="mod2_y4t+y4t_align" />
+ <constant name="final_y5t" value="mod2_y5t+y5t_align" />
+ <constant name="final_y6t" value="mod2_y6t+y6t_align" />
+ <constant name="final_y7t" value="mod2_y7t+y7t_align" />
+ <constant name="final_y8t" value="mod2_y8t+y8t_align" />
+ <constant name="final_y9t" value="mod2_y9t+y9t_align" />
+ <constant name="final_y10t" value="mod2_y10t+y10t_align" />
+ <constant name="final_z1t" value="mod2_z1t+z1t_align" />
+ <constant name="final_z2t" value="mod2_z2t+z2t_align" />
+ <constant name="final_z3t" value="mod2_z3t+z3t_align" />
+ <constant name="final_z4t" value="mod2_z4t+z4t_align" />
+ <constant name="final_z5t" value="mod2_z5t+z5t_align" />
+ <constant name="final_z6t" value="mod2_z6t+z6t_align" />
+ <constant name="final_z7t" value="mod2_z7t+z7t_align" />
+ <constant name="final_z8t" value="mod2_z8t+z8t_align" />
+ <constant name="final_z9t" value="mod2_z9t+z9t_align" />
+ <constant name="final_z10t" value="mod2_z10t+z10t_align" />
+ <constant name="final_rx1t" value="mod2_rx1t+rx1t_align" />
+ <constant name="final_rx2t" value="mod2_rx2t+rx2t_align" />
+ <constant name="final_rx3t" value="mod2_rx3t+rx3t_align" />
+ <constant name="final_rx4t" value="mod2_rx4t+rx4t_align" />
+ <constant name="final_rx5t" value="mod2_rx5t+rx5t_align" />
+ <constant name="final_rx6t" value="mod2_rx6t+rx6t_align" />
+ <constant name="final_rx7t" value="mod2_rx7t+rx7t_align" />
+ <constant name="final_rx8t" value="mod2_rx8t+rx8t_align" />
+ <constant name="final_rx9t" value="mod2_rx9t+rx9t_align" />
+ <constant name="final_rx10t" value="mod2_rx10t+rx10t_align" />
+ <constant name="final_ry1t" value="mod2_ry1t+ry1t_align" />
+ <constant name="final_ry2t" value="mod2_ry2t+ry2t_align" />
+ <constant name="final_ry3t" value="mod2_ry3t+ry3t_align" />
+ <constant name="final_ry4t" value="mod2_ry4t+ry4t_align" />
+ <constant name="final_ry5t" value="mod2_ry5t+ry5t_align" />
+ <constant name="final_ry6t" value="mod2_ry6t+ry6t_align" />
+ <constant name="final_ry7t" value="mod2_ry7t+ry7t_align" />
+ <constant name="final_ry8t" value="mod2_ry8t+ry8t_align" />
+ <constant name="final_ry9t" value="mod2_ry9t+ry9t_align" />
+ <constant name="final_ry10t" value="mod2_ry10t+ry10t_align" />
+ <constant name="final_rz1t" value="mod2_rz1t+rz1t_align" />
+ <constant name="final_rz2t" value="mod2_rz2t+rz2t_align" />
+ <constant name="final_rz3t" value="mod2_rz3t+rz3t_align" />
+ <constant name="final_rz4t" value="mod2_rz4t+rz4t_align" />
+ <constant name="final_rz5t" value="mod2_rz5t+rz5t_align" />
+ <constant name="final_rz6t" value="mod2_rz6t+rz6t_align" />
+ <constant name="final_rz7t" value="mod2_rz7t+rz7t_align" />
+ <constant name="final_rz8t" value="mod2_rz8t+rz8t_align" />
+ <constant name="final_rz9t" value="mod2_rz9t+rz9t_align" />
+ <constant name="final_rz10t" value="mod2_rz10t+rz10t_align" />
+ <constant name="final_x1b" value="mod2_x1b+x1b_align" />
+ <constant name="final_x2b" value="mod2_x2b+x2b_align" />
+ <constant name="final_x3b" value="mod2_x3b+x3b_align" />
+ <constant name="final_x4b" value="mod2_x4b+x4b_align" />
+ <constant name="final_x5b" value="mod2_x5b+x5b_align" />
+ <constant name="final_x6b" value="mod2_x6b+x6b_align" />
+ <constant name="final_x7b" value="mod2_x7b+x7b_align" />
+ <constant name="final_x8b" value="mod2_x8b+x8b_align" />
+ <constant name="final_x9b" value="mod2_x9b+x9b_align" />
+ <constant name="final_x10b" value="mod2_x10b+x10b_align" />
+ <constant name="final_y1b" value="mod2_y1b+y1b_align" />
+ <constant name="final_y2b" value="mod2_y2b+y2b_align" />
+ <constant name="final_y3b" value="mod2_y3b+y3b_align" />
+ <constant name="final_y4b" value="mod2_y4b+y4b_align" />
+ <constant name="final_y5b" value="mod2_y5b+y5b_align" />
+ <constant name="final_y6b" value="mod2_y6b+y6b_align" />
+ <constant name="final_y7b" value="mod2_y7b+y7b_align" />
+ <constant name="final_y8b" value="mod2_y8b+y8b_align" />
+ <constant name="final_y9b" value="mod2_y9b+y9b_align" />
+ <constant name="final_y10b" value="mod2_y10b+y10b_align" />
+ <constant name="final_z1b" value="mod2_z1b+z1b_align" />
+ <constant name="final_z2b" value="mod2_z2b+z2b_align" />
+ <constant name="final_z3b" value="mod2_z3b+z3b_align" />
+ <constant name="final_z4b" value="mod2_z4b+z4b_align" />
+ <constant name="final_z5b" value="mod2_z5b+z5b_align" />
+ <constant name="final_z6b" value="mod2_z6b+z6b_align" />
+ <constant name="final_z7b" value="mod2_z7b+z7b_align" />
+ <constant name="final_z8b" value="mod2_z8b+z8b_align" />
+ <constant name="final_z9b" value="mod2_z9b+z9b_align" />
+ <constant name="final_z10b" value="mod2_z10b+z10b_align" />
+ <constant name="final_rx1b" value="mod2_rx1b+rx1b_align" />
+ <constant name="final_rx2b" value="mod2_rx2b+rx2b_align" />
+ <constant name="final_rx3b" value="mod2_rx3b+rx3b_align" />
+ <constant name="final_rx4b" value="mod2_rx4b+rx4b_align" />
+ <constant name="final_rx5b" value="mod2_rx5b+rx5b_align" />
+ <constant name="final_rx6b" value="mod2_rx6b+rx6b_align" />
+ <constant name="final_rx7b" value="mod2_rx7b+rx7b_align" />
+ <constant name="final_rx8b" value="mod2_rx8b+rx8b_align" />
+ <constant name="final_rx9b" value="mod2_rx9b+rx9b_align" />
+ <constant name="final_rx10b" value="mod2_rx10b+rx10b_align" />
+ <constant name="final_ry1b" value="mod2_ry1b+ry1b_align" />
+ <constant name="final_ry2b" value="mod2_ry2b+ry2b_align" />
+ <constant name="final_ry3b" value="mod2_ry3b+ry3b_align" />
+ <constant name="final_ry4b" value="mod2_ry4b+ry4b_align" />
+ <constant name="final_ry5b" value="mod2_ry5b+ry5b_align" />
+ <constant name="final_ry6b" value="mod2_ry6b+ry6b_align" />
+ <constant name="final_ry7b" value="mod2_ry7b+ry7b_align" />
+ <constant name="final_ry8b" value="mod2_ry8b+ry8b_align" />
+ <constant name="final_ry9b" value="mod2_ry9b+ry9b_align" />
+ <constant name="final_ry10b" value="mod2_ry10b+ry10b_align" />
+ <constant name="final_rz1b" value="mod2_rz1b+rz1b_align" />
+ <constant name="final_rz2b" value="mod2_rz2b+rz2b_align" />
+ <constant name="final_rz3b" value="mod2_rz3b+rz3b_align" />
+ <constant name="final_rz4b" value="mod2_rz4b+rz4b_align" />
+ <constant name="final_rz5b" value="mod2_rz5b+rz5b_align" />
+ <constant name="final_rz6b" value="mod2_rz6b+rz6b_align" />
+ <constant name="final_rz7b" value="mod2_rz7b+rz7b_align" />
+ <constant name="final_rz8b" value="mod2_rz8b+rz8b_align" />
+ <constant name="final_rz9b" value="mod2_rz9b+rz9b_align" />
+ <constant name="final_rz10b" value="mod2_rz10b+rz10b_align" />
+
+
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001" />
<fraction n="1.0" ref="Vacuum" />
@@ -801,7 +801,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2" />
- </layer>
+ </layer>
</detector>
<detector id="13" name="Ecal" type="HPSEcal3" insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
Modified: java/trunk/detector-data/detectors/HPS-TestRun-v8-5/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-TestRun-v8-5/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-TestRun-v8-5/compact.xml Wed Mar 9 11:43:24 2016
@@ -3,9 +3,9 @@
<info name="HPS-TestRun-v8-5">
<comment>
- HPS JLab Test Run detector with dipole field starting at z=0
- Based on millepede-u3-6-float-then-u7-8float-then-u3-6-float-then-u1-2-float-then-u3-6-float-then-u9-10-float-then-u7-10-float-then-u3-6-float-then-u1-4-float-then-u9-10-float-1351-v8-10k.res.txt
- </comment>
+ HPS JLab Test Run detector with dipole field starting at z=0
+ Based on millepede-u3-6-float-then-u7-8float-then-u3-6-float-then-u1-2-float-then-u3-6-float-then-u9-10-float-then-u7-10-float-then-u3-6-float-then-u1-4-float-then-u9-10-float-1351-v8-10k.res.txt
+ </comment>
</info>
<define>
@@ -65,127 +65,127 @@
<!-- <constant name="x_off" value = "-15.0"/> -->
<constant name="x_off" value="0.0" />
- <!-- alignment corrections -->
- <constant name="x1t_align" value="0.000000" />
- <constant name="x2t_align" value="0.000338" />
- <constant name="x3t_align" value="0.000013" />
- <constant name="x4t_align" value="0.014360" />
- <constant name="x5t_align" value="0.000051" />
- <constant name="x6t_align" value="-0.004610" />
- <constant name="x7t_align" value="-0.000000" />
- <constant name="x8t_align" value="-0.000200" />
- <constant name="x9t_align" value="0.000023" />
- <constant name="x10t_align" value="0.003314" />
- <constant name="y1t_align" value="0.003643" />
- <constant name="y2t_align" value="0.003372" />
- <constant name="y3t_align" value="0.106214" />
- <constant name="y4t_align" value="0.143235" />
- <constant name="y5t_align" value="-0.094779" />
- <constant name="y6t_align" value="-0.045906" />
- <constant name="y7t_align" value="-0.004270" />
- <constant name="y8t_align" value="-0.004014" />
- <constant name="y9t_align" value="0.069062" />
- <constant name="y10t_align" value="0.066775" />
- <constant name="z1t_align" value="0.000095" />
- <constant name="z2t_align" value="0.000077" />
- <constant name="z3t_align" value="0.002763" />
- <constant name="z4t_align" value="0.003273" />
- <constant name="z5t_align" value="-0.002467" />
- <constant name="z6t_align" value="-0.001049" />
- <constant name="z7t_align" value="-0.000111" />
- <constant name="z8t_align" value="-0.000098" />
- <constant name="z9t_align" value="0.001796" />
- <constant name="z10t_align" value="0.001633" />
- <constant name="rx1t_align" value="0.000000" />
- <constant name="rx2t_align" value="0.000000" />
- <constant name="rx3t_align" value="0.000000" />
- <constant name="rx4t_align" value="0.000000" />
- <constant name="rx5t_align" value="0.000000" />
- <constant name="rx6t_align" value="0.000000" />
- <constant name="rx7t_align" value="0.000000" />
- <constant name="rx8t_align" value="0.000000" />
- <constant name="rx9t_align" value="0.000000" />
- <constant name="rx10t_align" value="0.000000" />
- <constant name="ry1t_align" value="0.000000" />
- <constant name="ry2t_align" value="0.000000" />
- <constant name="ry3t_align" value="0.000000" />
- <constant name="ry4t_align" value="0.000000" />
- <constant name="ry5t_align" value="0.000000" />
- <constant name="ry6t_align" value="0.000000" />
- <constant name="ry7t_align" value="0.000000" />
- <constant name="ry8t_align" value="0.000000" />
- <constant name="ry9t_align" value="0.000000" />
- <constant name="ry10t_align" value="0.000000" />
- <constant name="rz1t_align" value="-0.000000" />
- <constant name="rz2t_align" value="0.000000" />
- <constant name="rz3t_align" value="-0.000000" />
- <constant name="rz4t_align" value="0.000000" />
- <constant name="rz5t_align" value="-0.000000" />
- <constant name="rz6t_align" value="0.000000" />
- <constant name="rz7t_align" value="-0.000000" />
- <constant name="rz8t_align" value="0.000000" />
- <constant name="rz9t_align" value="-0.000000" />
- <constant name="rz10t_align" value="0.000000" />
- <constant name="x1b_align" value="-0.000240" />
- <constant name="x2b_align" value="0.000001" />
- <constant name="x3b_align" value="0.008881" />
- <constant name="x4b_align" value="-0.000013" />
- <constant name="x5b_align" value="0.005242" />
- <constant name="x6b_align" value="-0.000013" />
- <constant name="x7b_align" value="0.000171" />
- <constant name="x8b_align" value="-0.000002" />
- <constant name="x9b_align" value="-0.002390" />
- <constant name="x10b_align" value="0.000002" />
- <constant name="y1b_align" value="0.002386" />
- <constant name="y2b_align" value="0.002507" />
- <constant name="y3b_align" value="-0.088503" />
- <constant name="y4b_align" value="-0.066488" />
- <constant name="y5b_align" value="-0.052443" />
- <constant name="y6b_align" value="-0.040809" />
- <constant name="y7b_align" value="-0.003389" />
- <constant name="y8b_align" value="-0.003634" />
- <constant name="y9b_align" value="0.047254" />
- <constant name="y10b_align" value="0.047194" />
- <constant name="z1b_align" value="-0.000047" />
- <constant name="z2b_align" value="-0.000056" />
- <constant name="z3b_align" value="0.001731" />
- <constant name="z4b_align" value="0.001481" />
- <constant name="z5b_align" value="0.001026" />
- <constant name="z6b_align" value="0.000909" />
- <constant name="z7b_align" value="0.000071" />
- <constant name="z8b_align" value="0.000081" />
- <constant name="z9b_align" value="-0.000988" />
- <constant name="z10b_align" value="-0.001051" />
- <constant name="rx1b_align" value="0.000000" />
- <constant name="rx2b_align" value="0.000000" />
- <constant name="rx3b_align" value="0.000000" />
- <constant name="rx4b_align" value="0.000000" />
- <constant name="rx5b_align" value="0.000000" />
- <constant name="rx6b_align" value="0.000000" />
- <constant name="rx7b_align" value="0.000000" />
- <constant name="rx8b_align" value="0.000000" />
- <constant name="rx9b_align" value="0.000000" />
- <constant name="rx10b_align" value="0.000000" />
- <constant name="ry1b_align" value="0.000000" />
- <constant name="ry2b_align" value="0.000000" />
- <constant name="ry3b_align" value="0.000000" />
- <constant name="ry4b_align" value="0.000000" />
- <constant name="ry5b_align" value="0.000000" />
- <constant name="ry6b_align" value="0.000000" />
- <constant name="ry7b_align" value="0.000000" />
- <constant name="ry8b_align" value="0.000000" />
- <constant name="ry9b_align" value="0.000000" />
- <constant name="ry10b_align" value="0.000000" />
- <constant name="rz1b_align" value="0.000000" />
- <constant name="rz2b_align" value="0.000000" />
- <constant name="rz3b_align" value="0.000000" />
- <constant name="rz4b_align" value="0.000000" />
- <constant name="rz5b_align" value="0.000000" />
- <constant name="rz6b_align" value="0.000000" />
- <constant name="rz7b_align" value="0.000000" />
- <constant name="rz8b_align" value="0.000000" />
- <constant name="rz9b_align" value="0.000000" />
- <constant name="rz10b_align" value="0.000000" />
+ <!-- alignment corrections -->
+ <constant name="x1t_align" value="0.000000" />
+ <constant name="x2t_align" value="0.000338" />
+ <constant name="x3t_align" value="0.000013" />
+ <constant name="x4t_align" value="0.014360" />
+ <constant name="x5t_align" value="0.000051" />
+ <constant name="x6t_align" value="-0.004610" />
+ <constant name="x7t_align" value="-0.000000" />
+ <constant name="x8t_align" value="-0.000200" />
+ <constant name="x9t_align" value="0.000023" />
+ <constant name="x10t_align" value="0.003314" />
+ <constant name="y1t_align" value="0.003643" />
+ <constant name="y2t_align" value="0.003372" />
+ <constant name="y3t_align" value="0.106214" />
+ <constant name="y4t_align" value="0.143235" />
+ <constant name="y5t_align" value="-0.094779" />
+ <constant name="y6t_align" value="-0.045906" />
+ <constant name="y7t_align" value="-0.004270" />
+ <constant name="y8t_align" value="-0.004014" />
+ <constant name="y9t_align" value="0.069062" />
+ <constant name="y10t_align" value="0.066775" />
+ <constant name="z1t_align" value="0.000095" />
+ <constant name="z2t_align" value="0.000077" />
+ <constant name="z3t_align" value="0.002763" />
+ <constant name="z4t_align" value="0.003273" />
+ <constant name="z5t_align" value="-0.002467" />
+ <constant name="z6t_align" value="-0.001049" />
+ <constant name="z7t_align" value="-0.000111" />
+ <constant name="z8t_align" value="-0.000098" />
+ <constant name="z9t_align" value="0.001796" />
+ <constant name="z10t_align" value="0.001633" />
+ <constant name="rx1t_align" value="0.000000" />
+ <constant name="rx2t_align" value="0.000000" />
+ <constant name="rx3t_align" value="0.000000" />
+ <constant name="rx4t_align" value="0.000000" />
+ <constant name="rx5t_align" value="0.000000" />
+ <constant name="rx6t_align" value="0.000000" />
+ <constant name="rx7t_align" value="0.000000" />
+ <constant name="rx8t_align" value="0.000000" />
+ <constant name="rx9t_align" value="0.000000" />
+ <constant name="rx10t_align" value="0.000000" />
+ <constant name="ry1t_align" value="0.000000" />
+ <constant name="ry2t_align" value="0.000000" />
+ <constant name="ry3t_align" value="0.000000" />
+ <constant name="ry4t_align" value="0.000000" />
+ <constant name="ry5t_align" value="0.000000" />
+ <constant name="ry6t_align" value="0.000000" />
+ <constant name="ry7t_align" value="0.000000" />
+ <constant name="ry8t_align" value="0.000000" />
+ <constant name="ry9t_align" value="0.000000" />
+ <constant name="ry10t_align" value="0.000000" />
+ <constant name="rz1t_align" value="-0.000000" />
+ <constant name="rz2t_align" value="0.000000" />
+ <constant name="rz3t_align" value="-0.000000" />
+ <constant name="rz4t_align" value="0.000000" />
+ <constant name="rz5t_align" value="-0.000000" />
+ <constant name="rz6t_align" value="0.000000" />
+ <constant name="rz7t_align" value="-0.000000" />
+ <constant name="rz8t_align" value="0.000000" />
+ <constant name="rz9t_align" value="-0.000000" />
+ <constant name="rz10t_align" value="0.000000" />
+ <constant name="x1b_align" value="-0.000240" />
+ <constant name="x2b_align" value="0.000001" />
+ <constant name="x3b_align" value="0.008881" />
+ <constant name="x4b_align" value="-0.000013" />
+ <constant name="x5b_align" value="0.005242" />
+ <constant name="x6b_align" value="-0.000013" />
+ <constant name="x7b_align" value="0.000171" />
+ <constant name="x8b_align" value="-0.000002" />
+ <constant name="x9b_align" value="-0.002390" />
+ <constant name="x10b_align" value="0.000002" />
+ <constant name="y1b_align" value="0.002386" />
+ <constant name="y2b_align" value="0.002507" />
+ <constant name="y3b_align" value="-0.088503" />
+ <constant name="y4b_align" value="-0.066488" />
+ <constant name="y5b_align" value="-0.052443" />
+ <constant name="y6b_align" value="-0.040809" />
+ <constant name="y7b_align" value="-0.003389" />
+ <constant name="y8b_align" value="-0.003634" />
+ <constant name="y9b_align" value="0.047254" />
+ <constant name="y10b_align" value="0.047194" />
+ <constant name="z1b_align" value="-0.000047" />
+ <constant name="z2b_align" value="-0.000056" />
+ <constant name="z3b_align" value="0.001731" />
+ <constant name="z4b_align" value="0.001481" />
+ <constant name="z5b_align" value="0.001026" />
+ <constant name="z6b_align" value="0.000909" />
+ <constant name="z7b_align" value="0.000071" />
+ <constant name="z8b_align" value="0.000081" />
+ <constant name="z9b_align" value="-0.000988" />
+ <constant name="z10b_align" value="-0.001051" />
+ <constant name="rx1b_align" value="0.000000" />
+ <constant name="rx2b_align" value="0.000000" />
+ <constant name="rx3b_align" value="0.000000" />
+ <constant name="rx4b_align" value="0.000000" />
+ <constant name="rx5b_align" value="0.000000" />
+ <constant name="rx6b_align" value="0.000000" />
+ <constant name="rx7b_align" value="0.000000" />
+ <constant name="rx8b_align" value="0.000000" />
+ <constant name="rx9b_align" value="0.000000" />
+ <constant name="rx10b_align" value="0.000000" />
+ <constant name="ry1b_align" value="0.000000" />
+ <constant name="ry2b_align" value="0.000000" />
+ <constant name="ry3b_align" value="0.000000" />
+ <constant name="ry4b_align" value="0.000000" />
+ <constant name="ry5b_align" value="0.000000" />
+ <constant name="ry6b_align" value="0.000000" />
+ <constant name="ry7b_align" value="0.000000" />
+ <constant name="ry8b_align" value="0.000000" />
+ <constant name="ry9b_align" value="0.000000" />
+ <constant name="ry10b_align" value="0.000000" />
+ <constant name="rz1b_align" value="0.000000" />
+ <constant name="rz2b_align" value="0.000000" />
+ <constant name="rz3b_align" value="0.000000" />
+ <constant name="rz4b_align" value="0.000000" />
+ <constant name="rz5b_align" value="0.000000" />
+ <constant name="rz6b_align" value="0.000000" />
+ <constant name="rz7b_align" value="0.000000" />
+ <constant name="rz8b_align" value="0.000000" />
+ <constant name="rz9b_align" value="0.000000" />
+ <constant name="rz10b_align" value="0.000000" />
<!-- Positions of sensor centers above/below nominal beam -->
<constant name="y1t" value="36.894" />
@@ -585,134 +585,134 @@
<constant name="mod2_rx10b" value="mod_rx10b" />
<constant name="mod2_ry10b" value="mod_ry10b+y_rot_bot_pivot" />
<constant name="mod2_rz10b" value="mod_rz10b" />
-
- <!-- final constants -->
- <constant name="final_x1t" value="mod2_x1t+x1t_align" />
- <constant name="final_x2t" value="mod2_x2t+x2t_align" />
- <constant name="final_x3t" value="mod2_x3t+x3t_align" />
- <constant name="final_x4t" value="mod2_x4t+x4t_align" />
- <constant name="final_x5t" value="mod2_x5t+x5t_align" />
- <constant name="final_x6t" value="mod2_x6t+x6t_align" />
- <constant name="final_x7t" value="mod2_x7t+x7t_align" />
- <constant name="final_x8t" value="mod2_x8t+x8t_align" />
- <constant name="final_x9t" value="mod2_x9t+x9t_align" />
- <constant name="final_x10t" value="mod2_x10t+x10t_align" />
- <constant name="final_y1t" value="mod2_y1t+y1t_align" />
- <constant name="final_y2t" value="mod2_y2t+y2t_align" />
- <constant name="final_y3t" value="mod2_y3t+y3t_align" />
- <constant name="final_y4t" value="mod2_y4t+y4t_align" />
- <constant name="final_y5t" value="mod2_y5t+y5t_align" />
- <constant name="final_y6t" value="mod2_y6t+y6t_align" />
- <constant name="final_y7t" value="mod2_y7t+y7t_align" />
- <constant name="final_y8t" value="mod2_y8t+y8t_align" />
- <constant name="final_y9t" value="mod2_y9t+y9t_align" />
- <constant name="final_y10t" value="mod2_y10t+y10t_align" />
- <constant name="final_z1t" value="mod2_z1t+z1t_align" />
- <constant name="final_z2t" value="mod2_z2t+z2t_align" />
- <constant name="final_z3t" value="mod2_z3t+z3t_align" />
- <constant name="final_z4t" value="mod2_z4t+z4t_align" />
- <constant name="final_z5t" value="mod2_z5t+z5t_align" />
- <constant name="final_z6t" value="mod2_z6t+z6t_align" />
- <constant name="final_z7t" value="mod2_z7t+z7t_align" />
- <constant name="final_z8t" value="mod2_z8t+z8t_align" />
- <constant name="final_z9t" value="mod2_z9t+z9t_align" />
- <constant name="final_z10t" value="mod2_z10t+z10t_align" />
- <constant name="final_rx1t" value="mod2_rx1t+rx1t_align" />
- <constant name="final_rx2t" value="mod2_rx2t+rx2t_align" />
- <constant name="final_rx3t" value="mod2_rx3t+rx3t_align" />
- <constant name="final_rx4t" value="mod2_rx4t+rx4t_align" />
- <constant name="final_rx5t" value="mod2_rx5t+rx5t_align" />
- <constant name="final_rx6t" value="mod2_rx6t+rx6t_align" />
- <constant name="final_rx7t" value="mod2_rx7t+rx7t_align" />
- <constant name="final_rx8t" value="mod2_rx8t+rx8t_align" />
- <constant name="final_rx9t" value="mod2_rx9t+rx9t_align" />
- <constant name="final_rx10t" value="mod2_rx10t+rx10t_align" />
- <constant name="final_ry1t" value="mod2_ry1t+ry1t_align" />
- <constant name="final_ry2t" value="mod2_ry2t+ry2t_align" />
- <constant name="final_ry3t" value="mod2_ry3t+ry3t_align" />
- <constant name="final_ry4t" value="mod2_ry4t+ry4t_align" />
- <constant name="final_ry5t" value="mod2_ry5t+ry5t_align" />
- <constant name="final_ry6t" value="mod2_ry6t+ry6t_align" />
- <constant name="final_ry7t" value="mod2_ry7t+ry7t_align" />
- <constant name="final_ry8t" value="mod2_ry8t+ry8t_align" />
- <constant name="final_ry9t" value="mod2_ry9t+ry9t_align" />
- <constant name="final_ry10t" value="mod2_ry10t+ry10t_align" />
- <constant name="final_rz1t" value="mod2_rz1t+rz1t_align" />
- <constant name="final_rz2t" value="mod2_rz2t+rz2t_align" />
- <constant name="final_rz3t" value="mod2_rz3t+rz3t_align" />
- <constant name="final_rz4t" value="mod2_rz4t+rz4t_align" />
- <constant name="final_rz5t" value="mod2_rz5t+rz5t_align" />
- <constant name="final_rz6t" value="mod2_rz6t+rz6t_align" />
- <constant name="final_rz7t" value="mod2_rz7t+rz7t_align" />
- <constant name="final_rz8t" value="mod2_rz8t+rz8t_align" />
- <constant name="final_rz9t" value="mod2_rz9t+rz9t_align" />
- <constant name="final_rz10t" value="mod2_rz10t+rz10t_align" />
- <constant name="final_x1b" value="mod2_x1b+x1b_align" />
- <constant name="final_x2b" value="mod2_x2b+x2b_align" />
- <constant name="final_x3b" value="mod2_x3b+x3b_align" />
- <constant name="final_x4b" value="mod2_x4b+x4b_align" />
- <constant name="final_x5b" value="mod2_x5b+x5b_align" />
- <constant name="final_x6b" value="mod2_x6b+x6b_align" />
- <constant name="final_x7b" value="mod2_x7b+x7b_align" />
- <constant name="final_x8b" value="mod2_x8b+x8b_align" />
- <constant name="final_x9b" value="mod2_x9b+x9b_align" />
- <constant name="final_x10b" value="mod2_x10b+x10b_align" />
- <constant name="final_y1b" value="mod2_y1b+y1b_align" />
- <constant name="final_y2b" value="mod2_y2b+y2b_align" />
- <constant name="final_y3b" value="mod2_y3b+y3b_align" />
- <constant name="final_y4b" value="mod2_y4b+y4b_align" />
- <constant name="final_y5b" value="mod2_y5b+y5b_align" />
- <constant name="final_y6b" value="mod2_y6b+y6b_align" />
- <constant name="final_y7b" value="mod2_y7b+y7b_align" />
- <constant name="final_y8b" value="mod2_y8b+y8b_align" />
- <constant name="final_y9b" value="mod2_y9b+y9b_align" />
- <constant name="final_y10b" value="mod2_y10b+y10b_align" />
- <constant name="final_z1b" value="mod2_z1b+z1b_align" />
- <constant name="final_z2b" value="mod2_z2b+z2b_align" />
- <constant name="final_z3b" value="mod2_z3b+z3b_align" />
- <constant name="final_z4b" value="mod2_z4b+z4b_align" />
- <constant name="final_z5b" value="mod2_z5b+z5b_align" />
- <constant name="final_z6b" value="mod2_z6b+z6b_align" />
- <constant name="final_z7b" value="mod2_z7b+z7b_align" />
- <constant name="final_z8b" value="mod2_z8b+z8b_align" />
- <constant name="final_z9b" value="mod2_z9b+z9b_align" />
- <constant name="final_z10b" value="mod2_z10b+z10b_align" />
- <constant name="final_rx1b" value="mod2_rx1b+rx1b_align" />
- <constant name="final_rx2b" value="mod2_rx2b+rx2b_align" />
- <constant name="final_rx3b" value="mod2_rx3b+rx3b_align" />
- <constant name="final_rx4b" value="mod2_rx4b+rx4b_align" />
- <constant name="final_rx5b" value="mod2_rx5b+rx5b_align" />
- <constant name="final_rx6b" value="mod2_rx6b+rx6b_align" />
- <constant name="final_rx7b" value="mod2_rx7b+rx7b_align" />
- <constant name="final_rx8b" value="mod2_rx8b+rx8b_align" />
- <constant name="final_rx9b" value="mod2_rx9b+rx9b_align" />
- <constant name="final_rx10b" value="mod2_rx10b+rx10b_align" />
- <constant name="final_ry1b" value="mod2_ry1b+ry1b_align" />
- <constant name="final_ry2b" value="mod2_ry2b+ry2b_align" />
- <constant name="final_ry3b" value="mod2_ry3b+ry3b_align" />
- <constant name="final_ry4b" value="mod2_ry4b+ry4b_align" />
- <constant name="final_ry5b" value="mod2_ry5b+ry5b_align" />
- <constant name="final_ry6b" value="mod2_ry6b+ry6b_align" />
- <constant name="final_ry7b" value="mod2_ry7b+ry7b_align" />
- <constant name="final_ry8b" value="mod2_ry8b+ry8b_align" />
- <constant name="final_ry9b" value="mod2_ry9b+ry9b_align" />
- <constant name="final_ry10b" value="mod2_ry10b+ry10b_align" />
- <constant name="final_rz1b" value="mod2_rz1b+rz1b_align" />
- <constant name="final_rz2b" value="mod2_rz2b+rz2b_align" />
- <constant name="final_rz3b" value="mod2_rz3b+rz3b_align" />
- <constant name="final_rz4b" value="mod2_rz4b+rz4b_align" />
- <constant name="final_rz5b" value="mod2_rz5b+rz5b_align" />
- <constant name="final_rz6b" value="mod2_rz6b+rz6b_align" />
- <constant name="final_rz7b" value="mod2_rz7b+rz7b_align" />
- <constant name="final_rz8b" value="mod2_rz8b+rz8b_align" />
- <constant name="final_rz9b" value="mod2_rz9b+rz9b_align" />
- <constant name="final_rz10b" value="mod2_rz10b+rz10b_align" />
-
-
+
+ <!-- final constants -->
+ <constant name="final_x1t" value="mod2_x1t+x1t_align" />
+ <constant name="final_x2t" value="mod2_x2t+x2t_align" />
+ <constant name="final_x3t" value="mod2_x3t+x3t_align" />
+ <constant name="final_x4t" value="mod2_x4t+x4t_align" />
+ <constant name="final_x5t" value="mod2_x5t+x5t_align" />
+ <constant name="final_x6t" value="mod2_x6t+x6t_align" />
+ <constant name="final_x7t" value="mod2_x7t+x7t_align" />
+ <constant name="final_x8t" value="mod2_x8t+x8t_align" />
+ <constant name="final_x9t" value="mod2_x9t+x9t_align" />
+ <constant name="final_x10t" value="mod2_x10t+x10t_align" />
+ <constant name="final_y1t" value="mod2_y1t+y1t_align" />
+ <constant name="final_y2t" value="mod2_y2t+y2t_align" />
+ <constant name="final_y3t" value="mod2_y3t+y3t_align" />
+ <constant name="final_y4t" value="mod2_y4t+y4t_align" />
+ <constant name="final_y5t" value="mod2_y5t+y5t_align" />
+ <constant name="final_y6t" value="mod2_y6t+y6t_align" />
+ <constant name="final_y7t" value="mod2_y7t+y7t_align" />
+ <constant name="final_y8t" value="mod2_y8t+y8t_align" />
+ <constant name="final_y9t" value="mod2_y9t+y9t_align" />
+ <constant name="final_y10t" value="mod2_y10t+y10t_align" />
+ <constant name="final_z1t" value="mod2_z1t+z1t_align" />
+ <constant name="final_z2t" value="mod2_z2t+z2t_align" />
+ <constant name="final_z3t" value="mod2_z3t+z3t_align" />
+ <constant name="final_z4t" value="mod2_z4t+z4t_align" />
+ <constant name="final_z5t" value="mod2_z5t+z5t_align" />
+ <constant name="final_z6t" value="mod2_z6t+z6t_align" />
+ <constant name="final_z7t" value="mod2_z7t+z7t_align" />
+ <constant name="final_z8t" value="mod2_z8t+z8t_align" />
+ <constant name="final_z9t" value="mod2_z9t+z9t_align" />
+ <constant name="final_z10t" value="mod2_z10t+z10t_align" />
+ <constant name="final_rx1t" value="mod2_rx1t+rx1t_align" />
+ <constant name="final_rx2t" value="mod2_rx2t+rx2t_align" />
+ <constant name="final_rx3t" value="mod2_rx3t+rx3t_align" />
+ <constant name="final_rx4t" value="mod2_rx4t+rx4t_align" />
+ <constant name="final_rx5t" value="mod2_rx5t+rx5t_align" />
+ <constant name="final_rx6t" value="mod2_rx6t+rx6t_align" />
+ <constant name="final_rx7t" value="mod2_rx7t+rx7t_align" />
+ <constant name="final_rx8t" value="mod2_rx8t+rx8t_align" />
+ <constant name="final_rx9t" value="mod2_rx9t+rx9t_align" />
+ <constant name="final_rx10t" value="mod2_rx10t+rx10t_align" />
+ <constant name="final_ry1t" value="mod2_ry1t+ry1t_align" />
+ <constant name="final_ry2t" value="mod2_ry2t+ry2t_align" />
+ <constant name="final_ry3t" value="mod2_ry3t+ry3t_align" />
+ <constant name="final_ry4t" value="mod2_ry4t+ry4t_align" />
+ <constant name="final_ry5t" value="mod2_ry5t+ry5t_align" />
+ <constant name="final_ry6t" value="mod2_ry6t+ry6t_align" />
+ <constant name="final_ry7t" value="mod2_ry7t+ry7t_align" />
+ <constant name="final_ry8t" value="mod2_ry8t+ry8t_align" />
+ <constant name="final_ry9t" value="mod2_ry9t+ry9t_align" />
+ <constant name="final_ry10t" value="mod2_ry10t+ry10t_align" />
+ <constant name="final_rz1t" value="mod2_rz1t+rz1t_align" />
+ <constant name="final_rz2t" value="mod2_rz2t+rz2t_align" />
+ <constant name="final_rz3t" value="mod2_rz3t+rz3t_align" />
+ <constant name="final_rz4t" value="mod2_rz4t+rz4t_align" />
+ <constant name="final_rz5t" value="mod2_rz5t+rz5t_align" />
+ <constant name="final_rz6t" value="mod2_rz6t+rz6t_align" />
+ <constant name="final_rz7t" value="mod2_rz7t+rz7t_align" />
+ <constant name="final_rz8t" value="mod2_rz8t+rz8t_align" />
+ <constant name="final_rz9t" value="mod2_rz9t+rz9t_align" />
+ <constant name="final_rz10t" value="mod2_rz10t+rz10t_align" />
+ <constant name="final_x1b" value="mod2_x1b+x1b_align" />
+ <constant name="final_x2b" value="mod2_x2b+x2b_align" />
+ <constant name="final_x3b" value="mod2_x3b+x3b_align" />
+ <constant name="final_x4b" value="mod2_x4b+x4b_align" />
+ <constant name="final_x5b" value="mod2_x5b+x5b_align" />
+ <constant name="final_x6b" value="mod2_x6b+x6b_align" />
+ <constant name="final_x7b" value="mod2_x7b+x7b_align" />
+ <constant name="final_x8b" value="mod2_x8b+x8b_align" />
+ <constant name="final_x9b" value="mod2_x9b+x9b_align" />
+ <constant name="final_x10b" value="mod2_x10b+x10b_align" />
+ <constant name="final_y1b" value="mod2_y1b+y1b_align" />
+ <constant name="final_y2b" value="mod2_y2b+y2b_align" />
+ <constant name="final_y3b" value="mod2_y3b+y3b_align" />
+ <constant name="final_y4b" value="mod2_y4b+y4b_align" />
+ <constant name="final_y5b" value="mod2_y5b+y5b_align" />
+ <constant name="final_y6b" value="mod2_y6b+y6b_align" />
+ <constant name="final_y7b" value="mod2_y7b+y7b_align" />
+ <constant name="final_y8b" value="mod2_y8b+y8b_align" />
+ <constant name="final_y9b" value="mod2_y9b+y9b_align" />
+ <constant name="final_y10b" value="mod2_y10b+y10b_align" />
+ <constant name="final_z1b" value="mod2_z1b+z1b_align" />
+ <constant name="final_z2b" value="mod2_z2b+z2b_align" />
+ <constant name="final_z3b" value="mod2_z3b+z3b_align" />
+ <constant name="final_z4b" value="mod2_z4b+z4b_align" />
+ <constant name="final_z5b" value="mod2_z5b+z5b_align" />
+ <constant name="final_z6b" value="mod2_z6b+z6b_align" />
+ <constant name="final_z7b" value="mod2_z7b+z7b_align" />
+ <constant name="final_z8b" value="mod2_z8b+z8b_align" />
+ <constant name="final_z9b" value="mod2_z9b+z9b_align" />
+ <constant name="final_z10b" value="mod2_z10b+z10b_align" />
+ <constant name="final_rx1b" value="mod2_rx1b+rx1b_align" />
+ <constant name="final_rx2b" value="mod2_rx2b+rx2b_align" />
+ <constant name="final_rx3b" value="mod2_rx3b+rx3b_align" />
+ <constant name="final_rx4b" value="mod2_rx4b+rx4b_align" />
+ <constant name="final_rx5b" value="mod2_rx5b+rx5b_align" />
+ <constant name="final_rx6b" value="mod2_rx6b+rx6b_align" />
+ <constant name="final_rx7b" value="mod2_rx7b+rx7b_align" />
+ <constant name="final_rx8b" value="mod2_rx8b+rx8b_align" />
+ <constant name="final_rx9b" value="mod2_rx9b+rx9b_align" />
+ <constant name="final_rx10b" value="mod2_rx10b+rx10b_align" />
+ <constant name="final_ry1b" value="mod2_ry1b+ry1b_align" />
+ <constant name="final_ry2b" value="mod2_ry2b+ry2b_align" />
+ <constant name="final_ry3b" value="mod2_ry3b+ry3b_align" />
+ <constant name="final_ry4b" value="mod2_ry4b+ry4b_align" />
+ <constant name="final_ry5b" value="mod2_ry5b+ry5b_align" />
+ <constant name="final_ry6b" value="mod2_ry6b+ry6b_align" />
+ <constant name="final_ry7b" value="mod2_ry7b+ry7b_align" />
+ <constant name="final_ry8b" value="mod2_ry8b+ry8b_align" />
+ <constant name="final_ry9b" value="mod2_ry9b+ry9b_align" />
+ <constant name="final_ry10b" value="mod2_ry10b+ry10b_align" />
+ <constant name="final_rz1b" value="mod2_rz1b+rz1b_align" />
+ <constant name="final_rz2b" value="mod2_rz2b+rz2b_align" />
+ <constant name="final_rz3b" value="mod2_rz3b+rz3b_align" />
+ <constant name="final_rz4b" value="mod2_rz4b+rz4b_align" />
+ <constant name="final_rz5b" value="mod2_rz5b+rz5b_align" />
+ <constant name="final_rz6b" value="mod2_rz6b+rz6b_align" />
+ <constant name="final_rz7b" value="mod2_rz7b+rz7b_align" />
+ <constant name="final_rz8b" value="mod2_rz8b+rz8b_align" />
+ <constant name="final_rz9b" value="mod2_rz9b+rz9b_align" />
+ <constant name="final_rz10b" value="mod2_rz10b+rz10b_align" />
+
+
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001" />
<fraction n="1.0" ref="Vacuum" />
@@ -801,7 +801,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2" />
- </layer>
+ </layer>
</detector>
<detector id="13" name="Ecal" type="HPSEcal3" insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
Modified: java/trunk/detector-data/detectors/HPS-TestRun-v8/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPS-TestRun-v8/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPS-TestRun-v8/compact.xml Wed Mar 9 11:43:24 2016
@@ -64,127 +64,127 @@
<!-- <constant name="x_off" value = "-15.0"/> -->
<constant name="x_off" value = "0.0"/>
- <!-- alignment corrections -->
- <constant name="x1t_align" value="0.000000"/>
- <constant name="x2t_align" value="0.000000"/>
- <constant name="x3t_align" value="0.000000"/>
- <constant name="x4t_align" value="0.000000"/>
- <constant name="x5t_align" value="0.000000"/>
- <constant name="x6t_align" value="0.000000"/>
- <constant name="x7t_align" value="0.000000"/>
- <constant name="x8t_align" value="0.000000"/>
- <constant name="x9t_align" value="0.000000"/>
- <constant name="x10t_align" value="0.000000"/>
- <constant name="y1t_align" value="0.000000"/>
- <constant name="y2t_align" value="0.000000"/>
- <constant name="y3t_align" value="0.000000"/>
- <constant name="y4t_align" value="0.000000"/>
- <constant name="y5t_align" value="0.000000"/>
- <constant name="y6t_align" value="0.000000"/>
- <constant name="y7t_align" value="0.000000"/>
- <constant name="y8t_align" value="0.000000"/>
- <constant name="y9t_align" value="0.000000"/>
- <constant name="y10t_align" value="0.000000"/>
- <constant name="z1t_align" value="0.000000"/>
- <constant name="z2t_align" value="0.000000"/>
- <constant name="z3t_align" value="0.000000"/>
- <constant name="z4t_align" value="0.000000"/>
- <constant name="z5t_align" value="0.000000"/>
- <constant name="z6t_align" value="0.000000"/>
- <constant name="z7t_align" value="0.000000"/>
- <constant name="z8t_align" value="0.000000"/>
- <constant name="z9t_align" value="0.000000"/>
- <constant name="z10t_align" value="0.000000"/>
- <constant name="rx1t_align" value="0.000000"/>
- <constant name="rx2t_align" value="0.000000"/>
- <constant name="rx3t_align" value="0.000000"/>
- <constant name="rx4t_align" value="0.000000"/>
- <constant name="rx5t_align" value="0.000000"/>
- <constant name="rx6t_align" value="0.000000"/>
- <constant name="rx7t_align" value="0.000000"/>
- <constant name="rx8t_align" value="0.000000"/>
- <constant name="rx9t_align" value="0.000000"/>
- <constant name="rx10t_align" value="0.000000"/>
- <constant name="ry1t_align" value="0.000000"/>
- <constant name="ry2t_align" value="0.000000"/>
- <constant name="ry3t_align" value="0.000000"/>
- <constant name="ry4t_align" value="0.000000"/>
- <constant name="ry5t_align" value="0.000000"/>
- <constant name="ry6t_align" value="0.000000"/>
- <constant name="ry7t_align" value="0.000000"/>
- <constant name="ry8t_align" value="0.000000"/>
- <constant name="ry9t_align" value="0.000000"/>
- <constant name="ry10t_align" value="0.000000"/>
- <constant name="rz1t_align" value="0.000000"/>
- <constant name="rz2t_align" value="0.000000"/>
- <constant name="rz3t_align" value="0.000000"/>
- <constant name="rz4t_align" value="0.000000"/>
- <constant name="rz5t_align" value="0.000000"/>
- <constant name="rz6t_align" value="0.000000"/>
- <constant name="rz7t_align" value="0.000000"/>
- <constant name="rz8t_align" value="0.000000"/>
- <constant name="rz9t_align" value="0.000000"/>
- <constant name="rz10t_align" value="0.000000"/>
- <constant name="x1b_align" value="0.000000"/>
- <constant name="x2b_align" value="0.000000"/>
- <constant name="x3b_align" value="0.000000"/>
- <constant name="x4b_align" value="0.000000"/>
- <constant name="x5b_align" value="0.000000"/>
- <constant name="x6b_align" value="0.000000"/>
- <constant name="x7b_align" value="0.000000"/>
- <constant name="x8b_align" value="0.000000"/>
- <constant name="x9b_align" value="0.000000"/>
- <constant name="x10b_align" value="0.000000"/>
- <constant name="y1b_align" value="0.000000"/>
- <constant name="y2b_align" value="0.000000"/>
- <constant name="y3b_align" value="0.000000"/>
- <constant name="y4b_align" value="0.000000"/>
- <constant name="y5b_align" value="0.000000"/>
- <constant name="y6b_align" value="0.000000"/>
- <constant name="y7b_align" value="0.000000"/>
- <constant name="y8b_align" value="0.000000"/>
- <constant name="y9b_align" value="0.000000"/>
- <constant name="y10b_align" value="0.000000"/>
- <constant name="z1b_align" value="0.000000"/>
- <constant name="z2b_align" value="0.000000"/>
- <constant name="z3b_align" value="0.000000"/>
- <constant name="z4b_align" value="0.000000"/>
- <constant name="z5b_align" value="0.000000"/>
- <constant name="z6b_align" value="0.000000"/>
- <constant name="z7b_align" value="0.000000"/>
- <constant name="z8b_align" value="0.000000"/>
- <constant name="z9b_align" value="0.000000"/>
- <constant name="z10b_align" value="0.000000"/>
- <constant name="rx1b_align" value="0.000000"/>
- <constant name="rx2b_align" value="0.000000"/>
- <constant name="rx3b_align" value="0.000000"/>
- <constant name="rx4b_align" value="0.000000"/>
- <constant name="rx5b_align" value="0.000000"/>
- <constant name="rx6b_align" value="0.000000"/>
- <constant name="rx7b_align" value="0.000000"/>
- <constant name="rx8b_align" value="0.000000"/>
- <constant name="rx9b_align" value="0.000000"/>
- <constant name="rx10b_align" value="0.000000"/>
- <constant name="ry1b_align" value="0.000000"/>
- <constant name="ry2b_align" value="0.000000"/>
- <constant name="ry3b_align" value="0.000000"/>
- <constant name="ry4b_align" value="0.000000"/>
- <constant name="ry5b_align" value="0.000000"/>
- <constant name="ry6b_align" value="0.000000"/>
- <constant name="ry7b_align" value="0.000000"/>
- <constant name="ry8b_align" value="0.000000"/>
- <constant name="ry9b_align" value="0.000000"/>
- <constant name="ry10b_align" value="0.000000"/>
- <constant name="rz1b_align" value="0.000000"/>
- <constant name="rz2b_align" value="0.000000"/>
- <constant name="rz3b_align" value="0.000000"/>
- <constant name="rz4b_align" value="0.000000"/>
- <constant name="rz5b_align" value="0.000000"/>
- <constant name="rz6b_align" value="0.000000"/>
- <constant name="rz7b_align" value="0.000000"/>
- <constant name="rz8b_align" value="0.000000"/>
- <constant name="rz9b_align" value="0.000000"/>
- <constant name="rz10b_align" value="0.000000"/>
+ <!-- alignment corrections -->
+ <constant name="x1t_align" value="0.000000"/>
+ <constant name="x2t_align" value="0.000000"/>
+ <constant name="x3t_align" value="0.000000"/>
+ <constant name="x4t_align" value="0.000000"/>
+ <constant name="x5t_align" value="0.000000"/>
+ <constant name="x6t_align" value="0.000000"/>
+ <constant name="x7t_align" value="0.000000"/>
+ <constant name="x8t_align" value="0.000000"/>
+ <constant name="x9t_align" value="0.000000"/>
+ <constant name="x10t_align" value="0.000000"/>
+ <constant name="y1t_align" value="0.000000"/>
+ <constant name="y2t_align" value="0.000000"/>
+ <constant name="y3t_align" value="0.000000"/>
+ <constant name="y4t_align" value="0.000000"/>
+ <constant name="y5t_align" value="0.000000"/>
+ <constant name="y6t_align" value="0.000000"/>
+ <constant name="y7t_align" value="0.000000"/>
+ <constant name="y8t_align" value="0.000000"/>
+ <constant name="y9t_align" value="0.000000"/>
+ <constant name="y10t_align" value="0.000000"/>
+ <constant name="z1t_align" value="0.000000"/>
+ <constant name="z2t_align" value="0.000000"/>
+ <constant name="z3t_align" value="0.000000"/>
+ <constant name="z4t_align" value="0.000000"/>
+ <constant name="z5t_align" value="0.000000"/>
+ <constant name="z6t_align" value="0.000000"/>
+ <constant name="z7t_align" value="0.000000"/>
+ <constant name="z8t_align" value="0.000000"/>
+ <constant name="z9t_align" value="0.000000"/>
+ <constant name="z10t_align" value="0.000000"/>
+ <constant name="rx1t_align" value="0.000000"/>
+ <constant name="rx2t_align" value="0.000000"/>
+ <constant name="rx3t_align" value="0.000000"/>
+ <constant name="rx4t_align" value="0.000000"/>
+ <constant name="rx5t_align" value="0.000000"/>
+ <constant name="rx6t_align" value="0.000000"/>
+ <constant name="rx7t_align" value="0.000000"/>
+ <constant name="rx8t_align" value="0.000000"/>
+ <constant name="rx9t_align" value="0.000000"/>
+ <constant name="rx10t_align" value="0.000000"/>
+ <constant name="ry1t_align" value="0.000000"/>
+ <constant name="ry2t_align" value="0.000000"/>
+ <constant name="ry3t_align" value="0.000000"/>
+ <constant name="ry4t_align" value="0.000000"/>
+ <constant name="ry5t_align" value="0.000000"/>
+ <constant name="ry6t_align" value="0.000000"/>
+ <constant name="ry7t_align" value="0.000000"/>
+ <constant name="ry8t_align" value="0.000000"/>
+ <constant name="ry9t_align" value="0.000000"/>
+ <constant name="ry10t_align" value="0.000000"/>
+ <constant name="rz1t_align" value="0.000000"/>
+ <constant name="rz2t_align" value="0.000000"/>
+ <constant name="rz3t_align" value="0.000000"/>
+ <constant name="rz4t_align" value="0.000000"/>
+ <constant name="rz5t_align" value="0.000000"/>
+ <constant name="rz6t_align" value="0.000000"/>
+ <constant name="rz7t_align" value="0.000000"/>
+ <constant name="rz8t_align" value="0.000000"/>
+ <constant name="rz9t_align" value="0.000000"/>
+ <constant name="rz10t_align" value="0.000000"/>
+ <constant name="x1b_align" value="0.000000"/>
+ <constant name="x2b_align" value="0.000000"/>
+ <constant name="x3b_align" value="0.000000"/>
+ <constant name="x4b_align" value="0.000000"/>
+ <constant name="x5b_align" value="0.000000"/>
+ <constant name="x6b_align" value="0.000000"/>
+ <constant name="x7b_align" value="0.000000"/>
+ <constant name="x8b_align" value="0.000000"/>
+ <constant name="x9b_align" value="0.000000"/>
+ <constant name="x10b_align" value="0.000000"/>
+ <constant name="y1b_align" value="0.000000"/>
+ <constant name="y2b_align" value="0.000000"/>
+ <constant name="y3b_align" value="0.000000"/>
+ <constant name="y4b_align" value="0.000000"/>
+ <constant name="y5b_align" value="0.000000"/>
+ <constant name="y6b_align" value="0.000000"/>
+ <constant name="y7b_align" value="0.000000"/>
+ <constant name="y8b_align" value="0.000000"/>
+ <constant name="y9b_align" value="0.000000"/>
+ <constant name="y10b_align" value="0.000000"/>
+ <constant name="z1b_align" value="0.000000"/>
+ <constant name="z2b_align" value="0.000000"/>
+ <constant name="z3b_align" value="0.000000"/>
+ <constant name="z4b_align" value="0.000000"/>
+ <constant name="z5b_align" value="0.000000"/>
+ <constant name="z6b_align" value="0.000000"/>
+ <constant name="z7b_align" value="0.000000"/>
+ <constant name="z8b_align" value="0.000000"/>
+ <constant name="z9b_align" value="0.000000"/>
+ <constant name="z10b_align" value="0.000000"/>
+ <constant name="rx1b_align" value="0.000000"/>
+ <constant name="rx2b_align" value="0.000000"/>
+ <constant name="rx3b_align" value="0.000000"/>
+ <constant name="rx4b_align" value="0.000000"/>
+ <constant name="rx5b_align" value="0.000000"/>
+ <constant name="rx6b_align" value="0.000000"/>
+ <constant name="rx7b_align" value="0.000000"/>
+ <constant name="rx8b_align" value="0.000000"/>
+ <constant name="rx9b_align" value="0.000000"/>
+ <constant name="rx10b_align" value="0.000000"/>
+ <constant name="ry1b_align" value="0.000000"/>
+ <constant name="ry2b_align" value="0.000000"/>
+ <constant name="ry3b_align" value="0.000000"/>
+ <constant name="ry4b_align" value="0.000000"/>
+ <constant name="ry5b_align" value="0.000000"/>
+ <constant name="ry6b_align" value="0.000000"/>
+ <constant name="ry7b_align" value="0.000000"/>
+ <constant name="ry8b_align" value="0.000000"/>
+ <constant name="ry9b_align" value="0.000000"/>
+ <constant name="ry10b_align" value="0.000000"/>
+ <constant name="rz1b_align" value="0.000000"/>
+ <constant name="rz2b_align" value="0.000000"/>
+ <constant name="rz3b_align" value="0.000000"/>
+ <constant name="rz4b_align" value="0.000000"/>
+ <constant name="rz5b_align" value="0.000000"/>
+ <constant name="rz6b_align" value="0.000000"/>
+ <constant name="rz7b_align" value="0.000000"/>
+ <constant name="rz8b_align" value="0.000000"/>
+ <constant name="rz9b_align" value="0.000000"/>
+ <constant name="rz10b_align" value="0.000000"/>
<!-- Positions of sensor centers above/below nominal beam -->
<constant name="y1t" value="36.894" />
@@ -584,134 +584,134 @@
<constant name="mod2_rx10b" value="mod_rx10b"/>
<constant name="mod2_ry10b" value="mod_ry10b+y_rot_bot_pivot"/>
<constant name="mod2_rz10b" value="mod_rz10b"/>
-
- <!-- final constants -->
- <constant name="final_x1t" value="mod2_x1t+x1t_align"/>
- <constant name="final_x2t" value="mod2_x2t+x2t_align"/>
- <constant name="final_x3t" value="mod2_x3t+x3t_align"/>
- <constant name="final_x4t" value="mod2_x4t+x4t_align"/>
- <constant name="final_x5t" value="mod2_x5t+x5t_align"/>
- <constant name="final_x6t" value="mod2_x6t+x6t_align"/>
- <constant name="final_x7t" value="mod2_x7t+x7t_align"/>
- <constant name="final_x8t" value="mod2_x8t+x8t_align"/>
- <constant name="final_x9t" value="mod2_x9t+x9t_align"/>
- <constant name="final_x10t" value="mod2_x10t+x10t_align"/>
- <constant name="final_y1t" value="mod2_y1t+y1t_align"/>
- <constant name="final_y2t" value="mod2_y2t+y2t_align"/>
- <constant name="final_y3t" value="mod2_y3t+y3t_align"/>
- <constant name="final_y4t" value="mod2_y4t+y4t_align"/>
- <constant name="final_y5t" value="mod2_y5t+y5t_align"/>
- <constant name="final_y6t" value="mod2_y6t+y6t_align"/>
- <constant name="final_y7t" value="mod2_y7t+y7t_align"/>
- <constant name="final_y8t" value="mod2_y8t+y8t_align"/>
- <constant name="final_y9t" value="mod2_y9t+y9t_align"/>
- <constant name="final_y10t" value="mod2_y10t+y10t_align"/>
- <constant name="final_z1t" value="mod2_z1t+z1t_align"/>
- <constant name="final_z2t" value="mod2_z2t+z2t_align"/>
- <constant name="final_z3t" value="mod2_z3t+z3t_align"/>
- <constant name="final_z4t" value="mod2_z4t+z4t_align"/>
- <constant name="final_z5t" value="mod2_z5t+z5t_align"/>
- <constant name="final_z6t" value="mod2_z6t+z6t_align"/>
- <constant name="final_z7t" value="mod2_z7t+z7t_align"/>
- <constant name="final_z8t" value="mod2_z8t+z8t_align"/>
- <constant name="final_z9t" value="mod2_z9t+z9t_align"/>
- <constant name="final_z10t" value="mod2_z10t+z10t_align"/>
- <constant name="final_rx1t" value="mod2_rx1t+rx1t_align"/>
- <constant name="final_rx2t" value="mod2_rx2t+rx2t_align"/>
- <constant name="final_rx3t" value="mod2_rx3t+rx3t_align"/>
- <constant name="final_rx4t" value="mod2_rx4t+rx4t_align"/>
- <constant name="final_rx5t" value="mod2_rx5t+rx5t_align"/>
- <constant name="final_rx6t" value="mod2_rx6t+rx6t_align"/>
- <constant name="final_rx7t" value="mod2_rx7t+rx7t_align"/>
- <constant name="final_rx8t" value="mod2_rx8t+rx8t_align"/>
- <constant name="final_rx9t" value="mod2_rx9t+rx9t_align"/>
- <constant name="final_rx10t" value="mod2_rx10t+rx10t_align"/>
- <constant name="final_ry1t" value="mod2_ry1t+ry1t_align"/>
- <constant name="final_ry2t" value="mod2_ry2t+ry2t_align"/>
- <constant name="final_ry3t" value="mod2_ry3t+ry3t_align"/>
- <constant name="final_ry4t" value="mod2_ry4t+ry4t_align"/>
- <constant name="final_ry5t" value="mod2_ry5t+ry5t_align"/>
- <constant name="final_ry6t" value="mod2_ry6t+ry6t_align"/>
- <constant name="final_ry7t" value="mod2_ry7t+ry7t_align"/>
- <constant name="final_ry8t" value="mod2_ry8t+ry8t_align"/>
- <constant name="final_ry9t" value="mod2_ry9t+ry9t_align"/>
- <constant name="final_ry10t" value="mod2_ry10t+ry10t_align"/>
- <constant name="final_rz1t" value="mod2_rz1t+rz1t_align"/>
- <constant name="final_rz2t" value="mod2_rz2t+rz2t_align"/>
- <constant name="final_rz3t" value="mod2_rz3t+rz3t_align"/>
- <constant name="final_rz4t" value="mod2_rz4t+rz4t_align"/>
- <constant name="final_rz5t" value="mod2_rz5t+rz5t_align"/>
- <constant name="final_rz6t" value="mod2_rz6t+rz6t_align"/>
- <constant name="final_rz7t" value="mod2_rz7t+rz7t_align"/>
- <constant name="final_rz8t" value="mod2_rz8t+rz8t_align"/>
- <constant name="final_rz9t" value="mod2_rz9t+rz9t_align"/>
- <constant name="final_rz10t" value="mod2_rz10t+rz10t_align"/>
- <constant name="final_x1b" value="mod2_x1b+x1b_align"/>
- <constant name="final_x2b" value="mod2_x2b+x2b_align"/>
- <constant name="final_x3b" value="mod2_x3b+x3b_align"/>
- <constant name="final_x4b" value="mod2_x4b+x4b_align"/>
- <constant name="final_x5b" value="mod2_x5b+x5b_align"/>
- <constant name="final_x6b" value="mod2_x6b+x6b_align"/>
- <constant name="final_x7b" value="mod2_x7b+x7b_align"/>
- <constant name="final_x8b" value="mod2_x8b+x8b_align"/>
- <constant name="final_x9b" value="mod2_x9b+x9b_align"/>
- <constant name="final_x10b" value="mod2_x10b+x10b_align"/>
- <constant name="final_y1b" value="mod2_y1b+y1b_align"/>
- <constant name="final_y2b" value="mod2_y2b+y2b_align"/>
- <constant name="final_y3b" value="mod2_y3b+y3b_align"/>
- <constant name="final_y4b" value="mod2_y4b+y4b_align"/>
- <constant name="final_y5b" value="mod2_y5b+y5b_align"/>
- <constant name="final_y6b" value="mod2_y6b+y6b_align"/>
- <constant name="final_y7b" value="mod2_y7b+y7b_align"/>
- <constant name="final_y8b" value="mod2_y8b+y8b_align"/>
- <constant name="final_y9b" value="mod2_y9b+y9b_align"/>
- <constant name="final_y10b" value="mod2_y10b+y10b_align"/>
- <constant name="final_z1b" value="mod2_z1b+z1b_align"/>
- <constant name="final_z2b" value="mod2_z2b+z2b_align"/>
- <constant name="final_z3b" value="mod2_z3b+z3b_align"/>
- <constant name="final_z4b" value="mod2_z4b+z4b_align"/>
- <constant name="final_z5b" value="mod2_z5b+z5b_align"/>
- <constant name="final_z6b" value="mod2_z6b+z6b_align"/>
- <constant name="final_z7b" value="mod2_z7b+z7b_align"/>
- <constant name="final_z8b" value="mod2_z8b+z8b_align"/>
- <constant name="final_z9b" value="mod2_z9b+z9b_align"/>
- <constant name="final_z10b" value="mod2_z10b+z10b_align"/>
- <constant name="final_rx1b" value="mod2_rx1b+rx1b_align"/>
- <constant name="final_rx2b" value="mod2_rx2b+rx2b_align"/>
- <constant name="final_rx3b" value="mod2_rx3b+rx3b_align"/>
- <constant name="final_rx4b" value="mod2_rx4b+rx4b_align"/>
- <constant name="final_rx5b" value="mod2_rx5b+rx5b_align"/>
- <constant name="final_rx6b" value="mod2_rx6b+rx6b_align"/>
- <constant name="final_rx7b" value="mod2_rx7b+rx7b_align"/>
- <constant name="final_rx8b" value="mod2_rx8b+rx8b_align"/>
- <constant name="final_rx9b" value="mod2_rx9b+rx9b_align"/>
- <constant name="final_rx10b" value="mod2_rx10b+rx10b_align"/>
- <constant name="final_ry1b" value="mod2_ry1b+ry1b_align"/>
- <constant name="final_ry2b" value="mod2_ry2b+ry2b_align"/>
- <constant name="final_ry3b" value="mod2_ry3b+ry3b_align"/>
- <constant name="final_ry4b" value="mod2_ry4b+ry4b_align"/>
- <constant name="final_ry5b" value="mod2_ry5b+ry5b_align"/>
- <constant name="final_ry6b" value="mod2_ry6b+ry6b_align"/>
- <constant name="final_ry7b" value="mod2_ry7b+ry7b_align"/>
- <constant name="final_ry8b" value="mod2_ry8b+ry8b_align"/>
- <constant name="final_ry9b" value="mod2_ry9b+ry9b_align"/>
- <constant name="final_ry10b" value="mod2_ry10b+ry10b_align"/>
- <constant name="final_rz1b" value="mod2_rz1b+rz1b_align"/>
- <constant name="final_rz2b" value="mod2_rz2b+rz2b_align"/>
- <constant name="final_rz3b" value="mod2_rz3b+rz3b_align"/>
- <constant name="final_rz4b" value="mod2_rz4b+rz4b_align"/>
- <constant name="final_rz5b" value="mod2_rz5b+rz5b_align"/>
- <constant name="final_rz6b" value="mod2_rz6b+rz6b_align"/>
- <constant name="final_rz7b" value="mod2_rz7b+rz7b_align"/>
- <constant name="final_rz8b" value="mod2_rz8b+rz8b_align"/>
- <constant name="final_rz9b" value="mod2_rz9b+rz9b_align"/>
- <constant name="final_rz10b" value="mod2_rz10b+rz10b_align"/>
-
-
+
+ <!-- final constants -->
+ <constant name="final_x1t" value="mod2_x1t+x1t_align"/>
+ <constant name="final_x2t" value="mod2_x2t+x2t_align"/>
+ <constant name="final_x3t" value="mod2_x3t+x3t_align"/>
+ <constant name="final_x4t" value="mod2_x4t+x4t_align"/>
+ <constant name="final_x5t" value="mod2_x5t+x5t_align"/>
+ <constant name="final_x6t" value="mod2_x6t+x6t_align"/>
+ <constant name="final_x7t" value="mod2_x7t+x7t_align"/>
+ <constant name="final_x8t" value="mod2_x8t+x8t_align"/>
+ <constant name="final_x9t" value="mod2_x9t+x9t_align"/>
+ <constant name="final_x10t" value="mod2_x10t+x10t_align"/>
+ <constant name="final_y1t" value="mod2_y1t+y1t_align"/>
+ <constant name="final_y2t" value="mod2_y2t+y2t_align"/>
+ <constant name="final_y3t" value="mod2_y3t+y3t_align"/>
+ <constant name="final_y4t" value="mod2_y4t+y4t_align"/>
+ <constant name="final_y5t" value="mod2_y5t+y5t_align"/>
+ <constant name="final_y6t" value="mod2_y6t+y6t_align"/>
+ <constant name="final_y7t" value="mod2_y7t+y7t_align"/>
+ <constant name="final_y8t" value="mod2_y8t+y8t_align"/>
+ <constant name="final_y9t" value="mod2_y9t+y9t_align"/>
+ <constant name="final_y10t" value="mod2_y10t+y10t_align"/>
+ <constant name="final_z1t" value="mod2_z1t+z1t_align"/>
+ <constant name="final_z2t" value="mod2_z2t+z2t_align"/>
+ <constant name="final_z3t" value="mod2_z3t+z3t_align"/>
+ <constant name="final_z4t" value="mod2_z4t+z4t_align"/>
+ <constant name="final_z5t" value="mod2_z5t+z5t_align"/>
+ <constant name="final_z6t" value="mod2_z6t+z6t_align"/>
+ <constant name="final_z7t" value="mod2_z7t+z7t_align"/>
+ <constant name="final_z8t" value="mod2_z8t+z8t_align"/>
+ <constant name="final_z9t" value="mod2_z9t+z9t_align"/>
+ <constant name="final_z10t" value="mod2_z10t+z10t_align"/>
+ <constant name="final_rx1t" value="mod2_rx1t+rx1t_align"/>
+ <constant name="final_rx2t" value="mod2_rx2t+rx2t_align"/>
+ <constant name="final_rx3t" value="mod2_rx3t+rx3t_align"/>
+ <constant name="final_rx4t" value="mod2_rx4t+rx4t_align"/>
+ <constant name="final_rx5t" value="mod2_rx5t+rx5t_align"/>
+ <constant name="final_rx6t" value="mod2_rx6t+rx6t_align"/>
+ <constant name="final_rx7t" value="mod2_rx7t+rx7t_align"/>
+ <constant name="final_rx8t" value="mod2_rx8t+rx8t_align"/>
+ <constant name="final_rx9t" value="mod2_rx9t+rx9t_align"/>
+ <constant name="final_rx10t" value="mod2_rx10t+rx10t_align"/>
+ <constant name="final_ry1t" value="mod2_ry1t+ry1t_align"/>
+ <constant name="final_ry2t" value="mod2_ry2t+ry2t_align"/>
+ <constant name="final_ry3t" value="mod2_ry3t+ry3t_align"/>
+ <constant name="final_ry4t" value="mod2_ry4t+ry4t_align"/>
+ <constant name="final_ry5t" value="mod2_ry5t+ry5t_align"/>
+ <constant name="final_ry6t" value="mod2_ry6t+ry6t_align"/>
+ <constant name="final_ry7t" value="mod2_ry7t+ry7t_align"/>
+ <constant name="final_ry8t" value="mod2_ry8t+ry8t_align"/>
+ <constant name="final_ry9t" value="mod2_ry9t+ry9t_align"/>
+ <constant name="final_ry10t" value="mod2_ry10t+ry10t_align"/>
+ <constant name="final_rz1t" value="mod2_rz1t+rz1t_align"/>
+ <constant name="final_rz2t" value="mod2_rz2t+rz2t_align"/>
+ <constant name="final_rz3t" value="mod2_rz3t+rz3t_align"/>
+ <constant name="final_rz4t" value="mod2_rz4t+rz4t_align"/>
+ <constant name="final_rz5t" value="mod2_rz5t+rz5t_align"/>
+ <constant name="final_rz6t" value="mod2_rz6t+rz6t_align"/>
+ <constant name="final_rz7t" value="mod2_rz7t+rz7t_align"/>
+ <constant name="final_rz8t" value="mod2_rz8t+rz8t_align"/>
+ <constant name="final_rz9t" value="mod2_rz9t+rz9t_align"/>
+ <constant name="final_rz10t" value="mod2_rz10t+rz10t_align"/>
+ <constant name="final_x1b" value="mod2_x1b+x1b_align"/>
+ <constant name="final_x2b" value="mod2_x2b+x2b_align"/>
+ <constant name="final_x3b" value="mod2_x3b+x3b_align"/>
+ <constant name="final_x4b" value="mod2_x4b+x4b_align"/>
+ <constant name="final_x5b" value="mod2_x5b+x5b_align"/>
+ <constant name="final_x6b" value="mod2_x6b+x6b_align"/>
+ <constant name="final_x7b" value="mod2_x7b+x7b_align"/>
+ <constant name="final_x8b" value="mod2_x8b+x8b_align"/>
+ <constant name="final_x9b" value="mod2_x9b+x9b_align"/>
+ <constant name="final_x10b" value="mod2_x10b+x10b_align"/>
+ <constant name="final_y1b" value="mod2_y1b+y1b_align"/>
+ <constant name="final_y2b" value="mod2_y2b+y2b_align"/>
+ <constant name="final_y3b" value="mod2_y3b+y3b_align"/>
+ <constant name="final_y4b" value="mod2_y4b+y4b_align"/>
+ <constant name="final_y5b" value="mod2_y5b+y5b_align"/>
+ <constant name="final_y6b" value="mod2_y6b+y6b_align"/>
+ <constant name="final_y7b" value="mod2_y7b+y7b_align"/>
+ <constant name="final_y8b" value="mod2_y8b+y8b_align"/>
+ <constant name="final_y9b" value="mod2_y9b+y9b_align"/>
+ <constant name="final_y10b" value="mod2_y10b+y10b_align"/>
+ <constant name="final_z1b" value="mod2_z1b+z1b_align"/>
+ <constant name="final_z2b" value="mod2_z2b+z2b_align"/>
+ <constant name="final_z3b" value="mod2_z3b+z3b_align"/>
+ <constant name="final_z4b" value="mod2_z4b+z4b_align"/>
+ <constant name="final_z5b" value="mod2_z5b+z5b_align"/>
+ <constant name="final_z6b" value="mod2_z6b+z6b_align"/>
+ <constant name="final_z7b" value="mod2_z7b+z7b_align"/>
+ <constant name="final_z8b" value="mod2_z8b+z8b_align"/>
+ <constant name="final_z9b" value="mod2_z9b+z9b_align"/>
+ <constant name="final_z10b" value="mod2_z10b+z10b_align"/>
+ <constant name="final_rx1b" value="mod2_rx1b+rx1b_align"/>
+ <constant name="final_rx2b" value="mod2_rx2b+rx2b_align"/>
+ <constant name="final_rx3b" value="mod2_rx3b+rx3b_align"/>
+ <constant name="final_rx4b" value="mod2_rx4b+rx4b_align"/>
+ <constant name="final_rx5b" value="mod2_rx5b+rx5b_align"/>
+ <constant name="final_rx6b" value="mod2_rx6b+rx6b_align"/>
+ <constant name="final_rx7b" value="mod2_rx7b+rx7b_align"/>
+ <constant name="final_rx8b" value="mod2_rx8b+rx8b_align"/>
+ <constant name="final_rx9b" value="mod2_rx9b+rx9b_align"/>
+ <constant name="final_rx10b" value="mod2_rx10b+rx10b_align"/>
+ <constant name="final_ry1b" value="mod2_ry1b+ry1b_align"/>
+ <constant name="final_ry2b" value="mod2_ry2b+ry2b_align"/>
+ <constant name="final_ry3b" value="mod2_ry3b+ry3b_align"/>
+ <constant name="final_ry4b" value="mod2_ry4b+ry4b_align"/>
+ <constant name="final_ry5b" value="mod2_ry5b+ry5b_align"/>
+ <constant name="final_ry6b" value="mod2_ry6b+ry6b_align"/>
+ <constant name="final_ry7b" value="mod2_ry7b+ry7b_align"/>
+ <constant name="final_ry8b" value="mod2_ry8b+ry8b_align"/>
+ <constant name="final_ry9b" value="mod2_ry9b+ry9b_align"/>
+ <constant name="final_ry10b" value="mod2_ry10b+ry10b_align"/>
+ <constant name="final_rz1b" value="mod2_rz1b+rz1b_align"/>
+ <constant name="final_rz2b" value="mod2_rz2b+rz2b_align"/>
+ <constant name="final_rz3b" value="mod2_rz3b+rz3b_align"/>
+ <constant name="final_rz4b" value="mod2_rz4b+rz4b_align"/>
+ <constant name="final_rz5b" value="mod2_rz5b+rz5b_align"/>
+ <constant name="final_rz6b" value="mod2_rz6b+rz6b_align"/>
+ <constant name="final_rz7b" value="mod2_rz7b+rz7b_align"/>
+ <constant name="final_rz8b" value="mod2_rz8b+rz8b_align"/>
+ <constant name="final_rz9b" value="mod2_rz9b+rz9b_align"/>
+ <constant name="final_rz10b" value="mod2_rz10b+rz10b_align"/>
+
+
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001"/>
<fraction n="1.0" ref="Vacuum" />
@@ -800,7 +800,7 @@
</layer>
<layer id="2">
<module_placement name="TestRunModuleFieldDef" id="0" x="0" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
+ </layer>
</detector>
<detector id="13" name="Ecal" type="HPSEcal3" insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
Modified: java/trunk/detector-data/detectors/HPSTestRunTracker2014-v0/compact.xml
=============================================================================
--- java/trunk/detector-data/detectors/HPSTestRunTracker2014-v0/compact.xml (original)
+++ java/trunk/detector-data/detectors/HPSTestRunTracker2014-v0/compact.xml Wed Mar 9 11:43:24 2016
@@ -7,9 +7,9 @@
</info>
<define>
- <!-- units -->
- <constant name="mm" value="0.1*cm"/>
- <constant name="inch" value="25.4*mm"/>
+ <!-- units -->
+ <constant name="mm" value="0.1*cm"/>
+ <constant name="inch" value="25.4*mm"/>
<!-- world -->
<constant name="world_side" value="500.0*cm" />
@@ -17,48 +17,48 @@
<constant name="world_y" value="world_side" />
<constant name="world_z" value="world_side" />
- <!-- tracking region -->
- <constant name="tracking_region_radius" value="200.0*cm"/>
+ <!-- tracking region -->
+ <constant name="tracking_region_radius" value="200.0*cm"/>
<constant name="tracking_region_min" value="5.0*cm"/>
<constant name="tracking_region_zmax" value="131.8*cm"/>
<!-- dipole magnet and B-field -->
- <constant name="dipoleMagnetPositionZ" value="45.72*cm" />
- <constant name="dipoleMagnetHeight" value="17.78*cm" />
- <constant name="dipoleMagnetWidth" value="41.6052*cm" />
- <constant name="dipoleMagnetLength" value="dipoleMagnetPositionZ*2.0" />
- <constant name="constBFieldY" value="-0.491" />
+ <constant name="dipoleMagnetPositionZ" value="45.72*cm" />
+ <constant name="dipoleMagnetHeight" value="17.78*cm" />
+ <constant name="dipoleMagnetWidth" value="41.6052*cm" />
+ <constant name="dipoleMagnetLength" value="dipoleMagnetPositionZ*2.0" />
+ <constant name="constBFieldY" value="-0.491" />
- <!-- ECAL -->
+ <!-- ECAL -->
<constant name="ecal_front" value="13.3/2*mm" />
- <constant name="ecal_back" value="16/2*mm" />
- <constant name="ecal_z" value="160/2*mm" />
- <constant name="ecal_dx" value="41.27*mm" />
+ <constant name="ecal_back" value="16/2*mm" />
+ <constant name="ecal_z" value="160/2*mm" />
+ <constant name="ecal_dx" value="41.27*mm" />
</define>
<materials>
- <!-- Set the world material to vacuum. -->
+ <!-- Set the world material to vacuum. -->
<material name="WorldMaterial">
- <D type="density" unit="g/cm3" value="0.0000000000000001"/>
- <fraction n="1.0" ref="Vacuum" />
+ <D type="density" unit="g/cm3" value="0.0000000000000001"/>
+ <fraction n="1.0" ref="Vacuum" />
</material>
<!-- Set tracking material to vacuum. -->
<material name="TrackingMaterial">
<D type="density" unit="g/cm3" value="0.0000000000000001" />
<fraction n="1.0" ref="Vacuum" />
</material>
- <!-- ECal crystal material. -->
- <material name="LeadTungstate">
- <D value="8.28" unit="g/cm3" />
- <composite n="1" ref="Pb" />
- <composite n="1" ref="W" />
- <composite n="4" ref="O" />
- </material>
+ <!-- ECal crystal material. -->
+ <material name="LeadTungstate">
+ <D value="8.28" unit="g/cm3" />
+ <composite n="1" ref="Pb" />
+ <composite n="1" ref="W" />
+ <composite n="4" ref="O" />
+ </material>
</materials>
<display>
-
+
<vis name="SensorVis" alpha="1.0" r="1.0" g="0.0" b="0.0" drawingStyle="wireframe" lineStyle="unbroken" showDaughters="true" visible="true"/>
<vis name="ActiveSensorVis" alpha="1.0" r="1.0" g="0.0" b="0.0" drawingStyle="solid" lineStyle="unbroken" showDaughters="true" visible="true"/>
<vis name="CarbonFiberVis" alpha="1.0" r="0.88" g="0.88" b="0.88" drawingStyle="solid" lineStyle="unbroken" showDaughters="true" visible="true"/>
@@ -72,14 +72,14 @@
<vis name="BasePlateVis" alpha="1.0" r="0.35" g="0.35" b="0.35" drawingStyle="solid" lineStyle="dashed" showDaughters="true" visible="true"/>
<vis name="LayerVis" alpha="0.0" r="0.0" g="0.0" b="1.0" drawingStyle="wireframe" showDaughters="true" visible="false"/>
<vis name="ComponentVis" alpha="0.0" r="0.0" g="0.2" b="0.4" drawingStyle="solid" showDaughters="false" visible="false"/>
- <vis name="BeamPlaneVis" alpha="1.0" r="1.0" g="1.0" b="1.0" drawingStyle="solid" lineStyle="unbroken" showDaughters="false" visible="true"/>
+ <vis name="BeamPlaneVis" alpha="1.0" r="1.0" g="1.0" b="1.0" drawingStyle="solid" lineStyle="unbroken" showDaughters="false" visible="true"/>
<vis name="ECALVis" r="0.8" g="0.5" b="0.1" />
</display>
<detectors>
<detector id="1" name="Tracker" type="HPSTestRunTracker2014" readout="TrackerHits">
- <millepede_constants>
+ <millepede_constants>
<!-- top translations -->
<millepede_constant name="11101" value="0.0"/>
<millepede_constant name="11102" value="0.0"/>
@@ -234,43 +234,43 @@
</detector>
- <detector id="30" name="TrackerFieldDef" type="HPSTracker2"
- readout="TrackerHitsThin">
- <comment>The Silicon Vertex Tracker</comment>
- <module name="TestRunModuleFieldDef">
- <box x="dipoleMagnetWidth*4+1" y="dipoleMagnetHeight*4+1" />
- <module_component thickness="0.000000001*cm"
- material="Vacuum" sensitive="true">
- <dimensions x="dipoleMagnetWidth*4" y="dipoleMagnetHeight*4" />
- </module_component>
- </module>
- <layer id="1">
- <module_placement name="TestRunModuleFieldDef" id="0"
- x="0" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0"
- ry="0" rz="-PI/2" />
- </layer>
- <layer id="2">
- <module_placement name="TestRunModuleFieldDef" id="0"
- x="0" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0"
- ry="0" rz="-PI/2" />
- </layer>
- </detector>
-
- <detector id="13" name="Ecal" type="HPSEcal3"
- insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
- <comment>The crystal ECal</comment>
- <material name="LeadTungstate" />
- <dimensions x1="ecal_front" y1="ecal_front" x2="ecal_back"
- y2="ecal_back" z="ecal_z" />
- <!-- Measurements as found in installation by Stepan -->
- <!-- Moving ecal halves out by 6.5mm from SVT ecal-track matching - Pelle -->
- <!-- Moving ecal face to reflect latest survey calculation 2/17/14 - Pelle -->
- <layout beamgap="43.5*mm" nx="46" ny="5" dface="147.0*cm">
- <remove ixmin="-10" ixmax="-2" iymin="-1" iymax="1" />
- <top dx="ecal_dx" dy="0." dz="0." />
- <bottom dx="ecal_dx" dy="0." dz="0." />
- </layout>
- </detector>
+ <detector id="30" name="TrackerFieldDef" type="HPSTracker2"
+ readout="TrackerHitsThin">
+ <comment>The Silicon Vertex Tracker</comment>
+ <module name="TestRunModuleFieldDef">
+ <box x="dipoleMagnetWidth*4+1" y="dipoleMagnetHeight*4+1" />
+ <module_component thickness="0.000000001*cm"
+ material="Vacuum" sensitive="true">
+ <dimensions x="dipoleMagnetWidth*4" y="dipoleMagnetHeight*4" />
+ </module_component>
+ </module>
+ <layer id="1">
+ <module_placement name="TestRunModuleFieldDef" id="0"
+ x="0" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0"
+ ry="0" rz="-PI/2" />
+ </layer>
+ <layer id="2">
+ <module_placement name="TestRunModuleFieldDef" id="0"
+ x="0" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0"
+ ry="0" rz="-PI/2" />
+ </layer>
+ </detector>
+
+ <detector id="13" name="Ecal" type="HPSEcal3"
+ insideTrackingVolume="false" readout="EcalHits" vis="ECALVis">
+ <comment>The crystal ECal</comment>
+ <material name="LeadTungstate" />
+ <dimensions x1="ecal_front" y1="ecal_front" x2="ecal_back"
+ y2="ecal_back" z="ecal_z" />
+ <!-- Measurements as found in installation by Stepan -->
+ <!-- Moving ecal halves out by 6.5mm from SVT ecal-track matching - Pelle -->
+ <!-- Moving ecal face to reflect latest survey calculation 2/17/14 - Pelle -->
+ <layout beamgap="43.5*mm" nx="46" ny="5" dface="147.0*cm">
+ <remove ixmin="-10" ixmax="-2" iymin="-1" iymax="1" />
+ <top dx="ecal_dx" dy="0." dz="0." />
+ <bottom dx="ecal_dx" dy="0." dz="0." />
+ </layout>
+ </detector>
@@ -279,28 +279,28 @@
<readout name="TrackerHits">
<id>system:6,barrel:3,layer:4,module:12,sensor:1,side:32:-2,strip:12</id>
</readout>
- <readout name="TrackerHitsThin">
- <id>system:6,barrel:3,layer:4,module:12,sensor:1,side:32:-2,strip:12</id>
- </readout>
-
- <readout name="EcalHits">
- <segmentation type="GridXYZ" gridSizeX="0.0" gridSizeY="0.0"
- gridSizeZ="0.0" />
- <id>system:6,layer:2,ix:-8,iy:-6</id>
- </readout>
+ <readout name="TrackerHitsThin">
+ <id>system:6,barrel:3,layer:4,module:12,sensor:1,side:32:-2,strip:12</id>
+ </readout>
+
+ <readout name="EcalHits">
+ <segmentation type="GridXYZ" gridSizeX="0.0" gridSizeY="0.0"
+ gridSizeZ="0.0" />
+ <id>system:6,layer:2,ix:-8,iy:-6</id>
+ </readout>
</readouts>
- <fields>
- <field type="BoxDipole" name="AnalyzingDipole" x="0*cm" y="0*cm"
- z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0"
- dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
- </fields>
+ <fields>
+ <field type="BoxDipole" name="AnalyzingDipole" x="0*cm" y="0*cm"
+ z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0"
+ dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
+ </fields>
<!--
- <includes>
- <gdmlFile
- ref="http://www.lcsim.org/test/gdml/testRunDownstreamVacuumFlange.gdml" />
- </includes>
+ <includes>
+ <gdmlFile
+ ref="http://www.lcsim.org/test/gdml/testRunDownstreamVacuumFlange.gdml" />
+ </includes>
-->
</lccdd>
Modified: java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java Wed Mar 9 11:43:24 2016
@@ -21,21 +21,21 @@
*/
public class HPSTestRunTracker2014Converter extends HPSTracker2014ConverterBase {
- public HPSTestRunTracker2014Converter() {
- super();
- }
-
- /* (non-Javadoc)
- * @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase#initializeBuilder(org.jdom.Element)
- */
- protected HPSTrackerJavaBuilder initializeBuilder(Element node) {
- return new HPSTestRunTracker2014JavaBuilder(_debug,node);
- }
+ public HPSTestRunTracker2014Converter() {
+ super();
+ }
- /* (non-Javadoc)
- * @see org.lcsim.detector.converter.compact.AbstractSubdetectorConverter#getSubdetectorType()
- */
- public Class getSubdetectorType() {
+ /* (non-Javadoc)
+ * @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase#initializeBuilder(org.jdom.Element)
+ */
+ protected HPSTrackerJavaBuilder initializeBuilder(Element node) {
+ return new HPSTestRunTracker2014JavaBuilder(_debug,node);
+ }
+
+ /* (non-Javadoc)
+ * @see org.lcsim.detector.converter.compact.AbstractSubdetectorConverter#getSubdetectorType()
+ */
+ public Class getSubdetectorType() {
return HPSTestRunTracker2014.class;
}
@@ -53,5 +53,5 @@
protected int getModuleNumber(String surveyVolume) {
return HPSTrackerBuilder.getHalfFromName(surveyVolume).equals("top") ? 0 : 1;
}
-
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2014ConverterBase.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2014ConverterBase.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2014ConverterBase.java Wed Mar 9 11:43:24 2016
@@ -71,7 +71,7 @@
* @see org.lcsim.detector.converter.compact.AbstractSubdetectorConverter#makeIdentifierHelper(org.lcsim.geometry.compact.Subdetector, org.lcsim.detector.DetectorIdentifierHelper.SystemMap)
*/
public IIdentifierHelper makeIdentifierHelper(Subdetector subdetector, SystemMap systemMap) {
- return new SiTrackerIdentifierHelper(subdetector.getDetectorElement(), makeIdentifierDictionary(subdetector), systemMap);
+ return new SiTrackerIdentifierHelper(subdetector.getDetectorElement(), makeIdentifierDictionary(subdetector), systemMap);
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTrackerConverter.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTrackerConverter.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTrackerConverter.java Wed Mar 9 11:43:24 2016
@@ -238,7 +238,7 @@
{
//double moduleX = moduleParameters.getDimension(0);
//double moduleY = moduleParameters.getDimension(1);
- double moduleY = moduleParameters.getDimension(0);
+ double moduleY = moduleParameters.getDimension(0);
double moduleX = moduleParameters.getDimension(1);
Box box = (Box)moduleVolume.getSolid();
double moduleZ = box.getZHalfLength() * 2;
@@ -375,7 +375,7 @@
/*
private void configSensor(SiSensor sensor)
{
- //
+ //
Box sensorSolid = (Box) sensor.getGeometry().getLogicalVolume().getSolid();
Polygon3D pside = sensorSolid.getFacesNormalTo(new BasicHep3Vector(0, 0, 1)).get(0);
Modified: java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/subdetector/HpsTracker2.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/subdetector/HpsTracker2.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/subdetector/HpsTracker2.java Wed Mar 9 11:43:24 2016
@@ -19,89 +19,89 @@
private boolean debug = false;
// List of stereo layers composing the SVT
- List<SvtStereoLayer> stereoPairs = new ArrayList<SvtStereoLayer>();
-
- public HpsTracker2(String name, IDetectorElement parent) {
- super(name, parent);
- }
-
- /**
- * Get a collection of stereo pairs ({@link SvtStereoLayer}) composing the SVT.
- *
- * @return List of stereo pairs
- */
- public List<SvtStereoLayer> getStereoPairs(){
- return Collections.unmodifiableList(stereoPairs);
- }
+ List<SvtStereoLayer> stereoPairs = new ArrayList<SvtStereoLayer>();
+
+ public HpsTracker2(String name, IDetectorElement parent) {
+ super(name, parent);
+ }
+
+ /**
+ * Get a collection of stereo pairs ({@link SvtStereoLayer}) composing the SVT.
+ *
+ * @return List of stereo pairs
+ */
+ public List<SvtStereoLayer> getStereoPairs(){
+ return Collections.unmodifiableList(stereoPairs);
+ }
- /**
- * Get the collection of {@link HpsSiSensor} composing the SVT.
- *
- * @return List of sensors
- */
- public List<HpsSiSensor> getSensors(){
- List<HpsSiSensor> list = this.findDescendants(HpsSiSensor.class);
- if(debug) {
- System.out.printf("%s: found %d HpsSiSensors\n",getClass().getSimpleName(), list.size());
- System.out.printf("%s: %45s %5s %5s\n",getClass().getSimpleName(), "<name>", "<layerID>", "<moduleID>");
- for(HpsSiSensor sensor : list) {
- System.out.printf("%s: %45s %5d %5d\n",getClass().getSimpleName(), sensor.getName(), sensor.getLayerNumber(), sensor.getModuleNumber());
- }
- }
- return list;
- }
-
- /**
- * Get a {@link HpsSiSensor} by layer and module number.
- *
- * @param layer The SVT layer number
- * @param module The SVT module number
- * @return Corresponding sensor
- */
- public HpsSiSensor getSensor(int layer, int module){
- for(HpsSiSensor sensor : this.getSensors()){
- if(sensor.getLayerNumber() == layer && sensor.getModuleNumber() == module)
- return sensor;
- }
- return null;
- }
-
- /**
- * Get the maximum layer number present in the collection of {@link HpsSiSensor}.
- *
- * @return maximum layer number
- */
- private int getMaxLayerNumber(){
- int maxLayerNumber = 0;
- for(HpsSiSensor sensor : this.getSensors()){
- if(sensor.getLayerNumber() > maxLayerNumber) maxLayerNumber = sensor.getLayerNumber();
- }
- return maxLayerNumber;
- }
+ /**
+ * Get the collection of {@link HpsSiSensor} composing the SVT.
+ *
+ * @return List of sensors
+ */
+ public List<HpsSiSensor> getSensors(){
+ List<HpsSiSensor> list = this.findDescendants(HpsSiSensor.class);
+ if(debug) {
+ System.out.printf("%s: found %d HpsSiSensors\n",getClass().getSimpleName(), list.size());
+ System.out.printf("%s: %45s %5s %5s\n",getClass().getSimpleName(), "<name>", "<layerID>", "<moduleID>");
+ for(HpsSiSensor sensor : list) {
+ System.out.printf("%s: %45s %5d %5d\n",getClass().getSimpleName(), sensor.getName(), sensor.getLayerNumber(), sensor.getModuleNumber());
+ }
+ }
+ return list;
+ }
+
+ /**
+ * Get a {@link HpsSiSensor} by layer and module number.
+ *
+ * @param layer The SVT layer number
+ * @param module The SVT module number
+ * @return Corresponding sensor
+ */
+ public HpsSiSensor getSensor(int layer, int module){
+ for(HpsSiSensor sensor : this.getSensors()){
+ if(sensor.getLayerNumber() == layer && sensor.getModuleNumber() == module)
+ return sensor;
+ }
+ return null;
+ }
+
+ /**
+ * Get the maximum layer number present in the collection of {@link HpsSiSensor}.
+ *
+ * @return maximum layer number
+ */
+ private int getMaxLayerNumber(){
+ int maxLayerNumber = 0;
+ for(HpsSiSensor sensor : this.getSensors()){
+ if(sensor.getLayerNumber() > maxLayerNumber) maxLayerNumber = sensor.getLayerNumber();
+ }
+ return maxLayerNumber;
+ }
- /**
- * Get the maximum module number present in the collection of {@link HpsSiSensor}.
- *
- * @return maximum module number
- */
- private int getMaxModuleNumber(){
- int maxModuleID = 0;
- for(HpsSiSensor sensor : this.getSensors()){
- if(sensor.getModuleNumber() > maxModuleID) maxModuleID = sensor.getModuleNumber();
- }
- return maxModuleID;
- }
-
- /**
- * Method that loops through the collection of {@link HpsSiSensor} and creates
- * stereo layers. A stereo layer is composed of two adjacent sensors (stereo and axial)
- * with the same module number.
- */
- public void createStereoLayers(){
+ /**
+ * Get the maximum module number present in the collection of {@link HpsSiSensor}.
+ *
+ * @return maximum module number
+ */
+ private int getMaxModuleNumber(){
+ int maxModuleID = 0;
+ for(HpsSiSensor sensor : this.getSensors()){
+ if(sensor.getModuleNumber() > maxModuleID) maxModuleID = sensor.getModuleNumber();
+ }
+ return maxModuleID;
+ }
+
+ /**
+ * Method that loops through the collection of {@link HpsSiSensor} and creates
+ * stereo layers. A stereo layer is composed of two adjacent sensors (stereo and axial)
+ * with the same module number.
+ */
+ public void createStereoLayers(){
- //System.out.printf("%s: create stereo layers\n",getClass().getSimpleName());
+ //System.out.printf("%s: create stereo layers\n",getClass().getSimpleName());
- HpsSiSensor firstSensor = null;
+ HpsSiSensor firstSensor = null;
HpsSiSensor secondSensor = null;
//System.out.printf("%s: %10s %10s %42s %42s\n",getClass().getSimpleName(), "layerID/moduleID", "layerID/moduleID", "sensor1", "sensor2");
Modified: java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/subdetector/SvtStereoLayer.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/subdetector/SvtStereoLayer.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/detector/converter/compact/subdetector/SvtStereoLayer.java Wed Mar 9 11:43:24 2016
@@ -9,76 +9,76 @@
*/
public class SvtStereoLayer {
-
- // Layer number to which the stereo pair belongs to
- private int stereoLayerNumber = 0;
-
- // The axial and stereo sensors
- private HpsSiSensor axialSensor = null;
- private HpsSiSensor stereoSensor = null;
-
-
- /**
- * Ctor
- *
- * @param layerNumber Layer number to which the stereo pair belongs to
- * @param firstSensor The first sensor in the stereo layer
- * @param secondSensor The second sensor in the stereo layer
- */
- public SvtStereoLayer(int stereoLayerNumber, HpsSiSensor firstSensor, HpsSiSensor secondSensor){
- this.stereoLayerNumber = stereoLayerNumber;
- if(firstSensor.isAxial()){
- this.axialSensor = firstSensor;
- this.stereoSensor = secondSensor;
- } else {
- this.axialSensor = secondSensor;
- this.stereoSensor = firstSensor;
- }
- }
-
-
- /**
- * Get the axial sensor of the stereo pair
- *
- * @return Axial sensor. Returns null if it hasn't been set yet.
- */
- public HpsSiSensor getAxialSensor(){
- return axialSensor;
- }
-
- /**
- * Get the stereo sensor of the stereo pair
- *
- * @return Stereo sensor. Returns null if it hasn't been set yet.
- */
- public HpsSiSensor getStereoSensor(){
- return stereoSensor;
- }
+
+ // Layer number to which the stereo pair belongs to
+ private int stereoLayerNumber = 0;
+
+ // The axial and stereo sensors
+ private HpsSiSensor axialSensor = null;
+ private HpsSiSensor stereoSensor = null;
+
+
+ /**
+ * Ctor
+ *
+ * @param layerNumber Layer number to which the stereo pair belongs to
+ * @param firstSensor The first sensor in the stereo layer
+ * @param secondSensor The second sensor in the stereo layer
+ */
+ public SvtStereoLayer(int stereoLayerNumber, HpsSiSensor firstSensor, HpsSiSensor secondSensor){
+ this.stereoLayerNumber = stereoLayerNumber;
+ if(firstSensor.isAxial()){
+ this.axialSensor = firstSensor;
+ this.stereoSensor = secondSensor;
+ } else {
+ this.axialSensor = secondSensor;
+ this.stereoSensor = firstSensor;
+ }
+ }
+
+
+ /**
+ * Get the axial sensor of the stereo pair
+ *
+ * @return Axial sensor. Returns null if it hasn't been set yet.
+ */
+ public HpsSiSensor getAxialSensor(){
+ return axialSensor;
+ }
+
+ /**
+ * Get the stereo sensor of the stereo pair
+ *
+ * @return Stereo sensor. Returns null if it hasn't been set yet.
+ */
+ public HpsSiSensor getStereoSensor(){
+ return stereoSensor;
+ }
- /**
- * Get the layer number to which the stereo pair belongs to.
- *
- * @return stereo layer number
- */
- public int getLayerNumber(){
- return stereoLayerNumber;
- }
-
- /**
- * Return a string describing the stereo pair
- *
- * @return stereo pair description
- */
- @Override
- public String toString(){
- StringBuffer buffer = new StringBuffer();
- buffer.append("[ Stereo Pair ]: Layer number: " + this.getLayerNumber() + "\n");
- buffer.append("\t\tAxial Sensor: ");
- buffer.append(axialSensor == null ? "None" : axialSensor.getName());
- buffer.append("\tStereo Sensor: ");
- buffer.append(stereoSensor == null ? "None" : stereoSensor.getName());
- return buffer.toString();
- }
+ /**
+ * Get the layer number to which the stereo pair belongs to.
+ *
+ * @return stereo layer number
+ */
+ public int getLayerNumber(){
+ return stereoLayerNumber;
+ }
+
+ /**
+ * Return a string describing the stereo pair
+ *
+ * @return stereo pair description
+ */
+ @Override
+ public String toString(){
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("[ Stereo Pair ]: Layer number: " + this.getLayerNumber() + "\n");
+ buffer.append("\t\tAxial Sensor: ");
+ buffer.append(axialSensor == null ? "None" : axialSensor.getName());
+ buffer.append("\tStereo Sensor: ");
+ buffer.append(stereoSensor == null ? "None" : stereoSensor.getName());
+ return buffer.toString();
+ }
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsTestRunSiSensor.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsTestRunSiSensor.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsTestRunSiSensor.java Wed Mar 9 11:43:24 2016
@@ -14,85 +14,85 @@
* @author Omar Moreno <[log in to unmask]>
*/
public class HpsTestRunSiSensor extends HpsSiSensor {
-
-
- protected int fpgaID;
- protected int hybridID;
-
-
- /**
- * This class constructor matches the signature of <code>SiSensor</code>.
- * @param sensorid The sensor ID.
- * @param name The name of the sensor.
- * @param parent The parent DetectorElement.
- * @param support The physical support path.
- * @param id The identifier of the sensor.
- */
- public HpsTestRunSiSensor(
+
+
+ protected int fpgaID;
+ protected int hybridID;
+
+
+ /**
+ * This class constructor matches the signature of <code>SiSensor</code>.
+ * @param sensorid The sensor ID.
+ * @param name The name of the sensor.
+ * @param parent The parent DetectorElement.
+ * @param support The physical support path.
+ * @param id The identifier of the sensor.
+ */
+ public HpsTestRunSiSensor(
int sensorid,
String name,
IDetectorElement parent,
String support,
IIdentifier id)
{
- super(sensorid, name, parent, support, id);
+ super(sensorid, name, parent, support, id);
}
-
-
+
+
- /**
- * Get the FPGA ID associated with this sensor.
- *
- * @return The FPGA ID
- */
- public int getFpgaID() {
- return fpgaID;
- }
+ /**
+ * Get the FPGA ID associated with this sensor.
+ *
+ * @return The FPGA ID
+ */
+ public int getFpgaID() {
+ return fpgaID;
+ }
- /**
- * Get the hybrid ID associated with this sensor.
- *
- * @return The hybrid ID
- */
- public int getHybridID() {
- return hybridID;
- }
+ /**
+ * Get the hybrid ID associated with this sensor.
+ *
+ * @return The hybrid ID
+ */
+ public int getHybridID() {
+ return hybridID;
+ }
- @Override
- public int getFebID(){
- throw new RuntimeException("This method is not supported for the HpsTestRunSiSensor.");
- }
-
- @Override
- public int getFebHybridID(){
- throw new RuntimeException("This method is not supported for the HpsTestRunSiSensor.");
- }
+ @Override
+ public int getFebID(){
+ throw new RuntimeException("This method is not supported for the HpsTestRunSiSensor.");
+ }
+
+ @Override
+ public int getFebHybridID(){
+ throw new RuntimeException("This method is not supported for the HpsTestRunSiSensor.");
+ }
- /**
- * Set the FPGA ID associated with this sensor.
- *
- * @param The FPGA ID
- */
- public void setFpgaID(int fpgaID) {
- this.fpgaID = fpgaID;
- }
+ /**
+ * Set the FPGA ID associated with this sensor.
+ *
+ * @param The FPGA ID
+ */
+ public void setFpgaID(int fpgaID) {
+ this.fpgaID = fpgaID;
+ }
- /**
- * Set the hybrid ID associated with this sensor.
- *
- * @param The hybrid ID.
- */
- public void setHybridID(int hybridID) {
- this.hybridID = hybridID;
- }
-
- @Override
- public void setFebID(int febID) {
- throw new RuntimeException("This method is not supported for the HpsTestRunSiSensor.");
- }
-
- @Override
- public void setFebHybridID(int febHybridID) {
- throw new RuntimeException("This method is not supported for the HpsTestRunSiSensor.");
- }
+ /**
+ * Set the hybrid ID associated with this sensor.
+ *
+ * @param The hybrid ID.
+ */
+ public void setHybridID(int hybridID) {
+ this.hybridID = hybridID;
+ }
+
+ @Override
+ public void setFebID(int febID) {
+ throw new RuntimeException("This method is not supported for the HpsTestRunSiSensor.");
+ }
+
+ @Override
+ public void setFebHybridID(int febHybridID) {
+ throw new RuntimeException("This method is not supported for the HpsTestRunSiSensor.");
+ }
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014GeometryDefinition.java Wed Mar 9 11:43:24 2016
@@ -29,7 +29,7 @@
protected static final boolean use30mradRotation = true;
protected static final boolean useFakeHalfModuleAxialPos = false;
- // Global position references
+ // Global position references
protected static final double target_pos_wrt_base_plate_x = 162.3; //from Marco's 3D model
protected static final double target_pos_wrt_base_plate_y = 80.55; //from Tim's sketchup //68.75; //from Marco's 3D model
protected static final double target_pos_wrt_base_plate_z = 926.59; //from Marco's 3D model
@@ -208,7 +208,7 @@
protected void setPos() {
final double ball_pos_base_x = -1.0*target_pos_wrt_base_plate_x;
final double ball_pos_base_y = -1.0*target_pos_wrt_base_plate_y;
- final double ball_pos_base_z = target_pos_wrt_base_plate_z;
+ final double ball_pos_base_z = target_pos_wrt_base_plate_z;
final double vee_pos_base_x = ball_pos_base_x + BasePlate.base_plate_width;
final double vee_pos_base_y = ball_pos_base_y;
final double vee_pos_base_z = ball_pos_base_z;
@@ -230,7 +230,7 @@
public static class BasePlate extends SurveyVolume {
- // Base plate references
+ // Base plate references
public static final double base_plate_thickness = 0.25*inch;
public static final double base_plate_width = 385.00;
public static final double base_plate_length = 1216.00;
@@ -281,7 +281,7 @@
public CSupport(String name, SurveyVolume mother) {
super(name,mother, null);
init();
- }
+ }
private void calcAndSetFlatPos() {
if(use30mradRotation) {
// find the rotation to place the flat point
@@ -462,7 +462,7 @@
// this is referenced to the pin position of the c-support
private static final double ball_pos_csup_bearings_bottom_x = 240.0 - 265.0 + 14.0;
private static final double ball_pos_csup_bearings_bottom_y = (-6.0 + 22.0);
- private static final double ball_pos_csup_bearings_bottom_z = 14.7;
+ private static final double ball_pos_csup_bearings_bottom_z = 14.7;
private static final double vee_pos_csup_bearings_bottom_x = 240.0- 129.0;
private static final double vee_pos_csup_bearings_bottom_y = (-6.0 + 22.0);
private static final double vee_pos_csup_bearings_bottom_z = 14.7;
@@ -499,12 +499,12 @@
// make vectors
setBallPos(ball_pos_csup_bearings_bottom_x,ball_pos_csup_bearings_bottom_y,ball_pos_csup_bearings_bottom_z);
- setVeePos(vee_pos_csup_bearings_bottom_x,vee_pos_csup_bearings_bottom_y,vee_pos_csup_bearings_bottom_z);
+ setVeePos(vee_pos_csup_bearings_bottom_x,vee_pos_csup_bearings_bottom_y,vee_pos_csup_bearings_bottom_z);
setFlatPos(flat_pos_csup_bearings_bottom_x,flat_pos_csup_bearings_bottom_y,flat_pos_csup_bearings_bottom_z);
// create the coordinate system of the c-support bearings
- //HPSTestRunTracker2014GeomDef.Coord csup_bearings_bottom_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_csup_bearings_bottom, vee_pos_csup_bearings_bottom, flat_pos_csup_bearings_bottom);
+ //HPSTestRunTracker2014GeomDef.Coord csup_bearings_bottom_coord = new HPSTestRunTracker2014GeomDef.Coord(ball_pos_csup_bearings_bottom, vee_pos_csup_bearings_bottom, flat_pos_csup_bearings_bottom);
// since we don't care (no volume is built) about the local position of the bearings in the pin coord system we'll get rid of it
// and find the bearings position in the base coordinate system directly
@@ -579,11 +579,11 @@
public SupportPlateBottom(String name, SurveyVolume mother, SurveyVolume referenceGeom, String material) {
super(mother, referenceGeom, name, material);
- init();
+ init();
}
public SupportPlateBottom(String name, SurveyVolume mother, List<SurveyVolume> referenceGeom, String material) {
super(mother, referenceGeom, name, material);
- init();
+ init();
}
protected void setPos() {
if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
@@ -755,11 +755,11 @@
public TestRunModule(String name, SurveyVolume mother, int layer, String half) {
super(name, mother,null,layer, half);
init();
- }
+ }
public TestRunModule(String name, SurveyVolume mother, SurveyVolume ref, int layer, String half) {
super(name, mother,null,ref,layer, half);
init();
- }
+ }
protected abstract double getColdBlockThickness();
protected abstract double getModuleBoxLength();
protected abstract double getModuleBoxWidth();
@@ -771,7 +771,7 @@
}
protected void setCenter() {
setCenter(getModuleBoxLength()/2.0-5.0, 0.0, getModuleBoxWidth()/2.0-box_extra_width/5.0);
- }
+ }
protected void setPos() {
if(debug) System.out.printf("%s: setPos for %s\n",this.getClass().getSimpleName(),getName());
@@ -787,7 +787,7 @@
case 2:
ballPos = new BasicHep3Vector(25.0, 561.1, SupportPlateBottom.pedestal_height_L2-SupportPlateBottom.support_plate_pocket_depth);
veePos = new BasicHep3Vector(95.0, 561.1, SupportPlateBottom.pedestal_height_L2-SupportPlateBottom.support_plate_pocket_depth);
- flatPos = new BasicHep3Vector(60.0, 567.10, SupportPlateBottom.pedestal_height_L2-SupportPlateBottom.support_plate_pocket_depth);
+ flatPos = new BasicHep3Vector(60.0, 567.10, SupportPlateBottom.pedestal_height_L2-SupportPlateBottom.support_plate_pocket_depth);
break;
case 3:
ballPos = new BasicHep3Vector(25.0, 461.1, SupportPlateBottom.pedestal_height_L3-SupportPlateBottom.support_plate_pocket_depth);
@@ -938,7 +938,7 @@
// Distance from CF edge to screw hole: 30mm
// Distance from screw hole to edge of cold block: 33.75mm
// Distance from edge of cold block to hole/ball position: 5mm
- protected static final double dist_sensor_center_to_coldblock_hole_vdir = (180.0 - 30.0 + (33.75 - 5.0)) - Sensor.length/2.0;
+ protected static final double dist_sensor_center_to_coldblock_hole_vdir = (180.0 - 30.0 + (33.75 - 5.0)) - Sensor.length/2.0;
protected static final double half_module_thickness = TestRunHalfModule.getHybridThickness() + TestRunHalfModule.getCFThickness() + HalfModuleLamination.thickness;
protected static final double half_module_length = TestRunHalfModule.getCFLength();
protected static final double half_module_width = 6.83 + Sensor.width;
@@ -1038,7 +1038,7 @@
if(useFakeHalfModuleAxialPos) {
ball_pos_halfmod_local_x = ball_pos_halfmod_local_x*2.0;
ball_pos_halfmod_local_y = -2.0*ball_pos_halfmod_local_y;
- }
+ }
final double ball_pos_halfmod_local_z = dist_lower_sensor_edge_to_cold_block_mounting_surface + Sensor.width/2.0;
@@ -1118,7 +1118,7 @@
// final double vee_pos_halfmod_local_z = ball_pos_halfmod_local_z;
// final double flat_pos_halfmod_local_x = ball_pos_halfmod_local_x;
// final double flat_pos_halfmod_local_y = ball_pos_halfmod_local_y + Sensor.getSensorThickness()/2.0;
-// final double flat_pos_halfmod_local_z = ball_pos_halfmod_local_z;
+// final double flat_pos_halfmod_local_z = ball_pos_halfmod_local_z;
// ballPos = new BasicHep3Vector(ball_pos_halfmod_local_x, ball_pos_halfmod_local_y, ball_pos_halfmod_local_z);
// veePos = new BasicHep3Vector(vee_pos_halfmod_local_x, vee_pos_halfmod_local_y,vee_pos_halfmod_local_z);
// flatPos = new BasicHep3Vector(flat_pos_halfmod_local_x, flat_pos_halfmod_local_y,flat_pos_halfmod_local_z);
@@ -1235,7 +1235,7 @@
}
- public static abstract class TestRunColdBlock extends SurveyVolume {
+ public static abstract class TestRunColdBlock extends SurveyVolume {
private int layer;
public TestRunColdBlock(String name, SurveyVolume mother, int layer) {
super(name, mother, null);
@@ -1284,7 +1284,7 @@
}
}
- public static class TestRunColdBlockL13 extends TestRunColdBlock {
+ public static class TestRunColdBlockL13 extends TestRunColdBlock {
protected static final double coldblock_L13_length = 82.00;
protected static final double coldblock_L13_width = 52.50;
protected static final double coldblock_L13_thickness = 6.00;
@@ -1306,7 +1306,7 @@
}
}
- public static class TestRunColdBlockL45 extends TestRunColdBlock {
+ public static class TestRunColdBlockL45 extends TestRunColdBlock {
protected static final double coldblock_L45_length = 82.00;
protected static final double coldblock_L45_width = 51.00;
protected static final double coldblock_L45_thickness = 6.00;
@@ -1358,7 +1358,7 @@
// if(useSiStripsConvention) {
// setBallPos(0,0,0);
// setVeePos(ballPos.x(), ballPos.y(), ballPos.z() + getSensorWidth()/2.0);
-// setFlatPos(ballPos.x() + getSensorLength()/2.0,ballPos.y(), ballPos.z());
+// setFlatPos(ballPos.x() + getSensorLength()/2.0,ballPos.y(), ballPos.z());
// } else {
// setBallPos(0,0,0);
// setVeePos(ballPos.x() + getSensorLength()/2.0, ballPos.y(), ballPos.z());
@@ -1392,7 +1392,7 @@
}
protected double getLength() {
return length;
- }
+ }
}
/**
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014JavaBuilder.java Wed Mar 9 11:43:24 2016
@@ -28,175 +28,175 @@
*/
public class HPSTestRunTracker2014JavaBuilder extends HPSTrackerJavaBuilder {
-
-
- /**
- * Default constructor
- * @param node
- */
- public HPSTestRunTracker2014JavaBuilder(boolean debugFlag, Element node) {
- super(debugFlag, node);
- }
-
-
-
- /**
- * Build the JAVA geometry objects from the geometry definition.
- * @param trackingVolume - the reference volume.
- */
- public void build(ILogicalVolume trackingVolume) {
-
- // build geometry
+
+
+ /**
+ * Default constructor
+ * @param node
+ */
+ public HPSTestRunTracker2014JavaBuilder(boolean debugFlag, Element node) {
+ super(debugFlag, node);
+ }
+
+
+
+ /**
+ * Build the JAVA geometry objects from the geometry definition.
+ * @param trackingVolume - the reference volume.
+ */
+ public void build(ILogicalVolume trackingVolume) {
+
+ // build geometry
setBuilder(createGeometryDefinition(_debug, node));
-
- if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
-
- if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName());
-
- _builder.build();
-
- if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName());
-
- if(isDebug()) System.out.printf("%s: build the JAVA geometry objects\n", getClass().getSimpleName());
-
- // initialize the list to store a reference to each object
- javaSurveyVolumes = new ArrayList<JavaSurveyVolume>();
-
- // Go through the list of volumes to build that is created in the generic builder class
- JavaSurveyVolume trackingGeometry = new JavaSurveyVolume(_builder.getSurveyVolume(org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TrackingVolume.class), trackingVolume);
- add(trackingGeometry);
- //setBaseTrackerGeometry(new GhostJavaBaseGeom(_builder.getBaseGeometry(Base.class), trackingGeometry));
+
+ if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
+
+ if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName());
+
+ _builder.build();
+
+ if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName());
+
+ if(isDebug()) System.out.printf("%s: build the JAVA geometry objects\n", getClass().getSimpleName());
+
+ // initialize the list to store a reference to each object
+ javaSurveyVolumes = new ArrayList<JavaSurveyVolume>();
+
+ // Go through the list of volumes to build that is created in the generic builder class
+ JavaSurveyVolume trackingGeometry = new JavaSurveyVolume(_builder.getSurveyVolume(org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TrackingVolume.class), trackingVolume);
+ add(trackingGeometry);
+ //setBaseTrackerGeometry(new GhostJavaBaseGeom(_builder.getBaseGeometry(Base.class), trackingGeometry));
setBaseTrackerGeometry(new JavaSurveyVolume(_builder.getSurveyVolume(TrackerEnvelope.class), trackingGeometry,1));
add(getBaseTrackerGeometry());
- JavaSurveyVolume basePlateGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(BasePlate.class), getBaseTrackerGeometry());
- add(basePlateGeometry);
- // skip the c-support, this is purely a reference volume in the builder so should have no use here!?
- //JavaBaseGeometry cSupportGeometry = new GhostJavaBaseGeom(_builder.getBaseGeometry(CSupport.class), baseTrackerGeometry);
- //add(cSupportGeometry);
- JavaSurveyVolume supportBottomGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportBottom.class), getBaseTrackerGeometry());
- add(supportBottomGeometry);
- JavaSurveyVolume supportPlateBottomGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportPlateBottom.class), getBaseTrackerGeometry());
- add(supportPlateBottomGeometry);
- JavaSurveyVolume supportTopGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportTop.class), getBaseTrackerGeometry());
- add(supportTopGeometry);
- JavaSurveyVolume supportPlateTopGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportPlateTop.class), getBaseTrackerGeometry());
- add(supportPlateTopGeometry);
-
- // build modules
-
- if(isDebug()) System.out.printf("%s: build JAVA modules\n", getClass().getSimpleName());
-
- // Loop over all modules created
- for(BaseModuleBundle mod : _builder.modules) {
- TestRunModuleBundle m = (TestRunModuleBundle) mod;
- if(isDebug()) {
- System.out.printf("%s: build module %s (layer %d half %s)\n", getClass().getSimpleName(),m.module.getName(),m.getLayer(),m.getHalf());
- m.print();
- }
-
- // Find the mother among the objects using its name, should probably have a better way...
- String name_mother = m.getMother().getName();
- JavaSurveyVolume mother = null;
- for(JavaSurveyVolume g : javaSurveyVolumes) {
- if(g.getName().equals(name_mother)) {
- mother = g;
- break;
- }
- }
- // Check that it had a mother
- if(mother==null) throw new RuntimeException("Cound't find mother to module " + m.module.getName());
-
- if(isDebug()) System.out.printf("%s: found mother %s to module %s\n", getClass().getSimpleName(),mother.getName(),m.module.getName());
-
- // put the module in the list of objects that will be added to LCDD
- addTestRunModule(m, mother);
-
- if(isDebug()) System.out.printf("%s: DONE build module %s\n", getClass().getSimpleName(), m.module.getName());
-
-
- }
-
- if(isDebug()) System.out.printf("%s: DONE build JAVA modules\n", getClass().getSimpleName());
-
-
- if(isDebug()) System.out.printf("%s: DONE building the JAVA geometry objects\n", getClass().getSimpleName());
- if(isDebug()) {
- System.out.printf("%s: DONE building the JAVA geometry objects\n", getClass().getSimpleName());
- System.out.printf("%s: List of all the JAVA geometry objects built\n", this.getClass().getSimpleName());
- for(JavaSurveyVolume bg : javaSurveyVolumes) {
- System.out.printf("-------\n%s\n", bg.toString());
- }
- }
-
-
- // Set visualization features
- //setVis();
-
-
- }
-
- /**
- * Rules for adding the JAVA module geometry.
- * @param bundle - module to be added
- * @param mother - mother JAVA geometry object
- */
- protected void addTestRunModule(TestRunModuleBundle bundle, JavaSurveyVolume mother) {
-
- if(isDebug()) {
- System.out.printf("%s: addModule %s containing:\n",this.getClass().getSimpleName(), bundle.module.getName());
- bundle.print();
- }
-
- // Create the module
- JavaSurveyVolume lcddM = new JavaGhostSurveyVolume(bundle.module, mother);
- add(lcddM);
-
- // add half modules
- if(bundle.halfModuleAxial!=null) addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleAxial,lcddM);
+ JavaSurveyVolume basePlateGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(BasePlate.class), getBaseTrackerGeometry());
+ add(basePlateGeometry);
+ // skip the c-support, this is purely a reference volume in the builder so should have no use here!?
+ //JavaBaseGeometry cSupportGeometry = new GhostJavaBaseGeom(_builder.getBaseGeometry(CSupport.class), baseTrackerGeometry);
+ //add(cSupportGeometry);
+ JavaSurveyVolume supportBottomGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportBottom.class), getBaseTrackerGeometry());
+ add(supportBottomGeometry);
+ JavaSurveyVolume supportPlateBottomGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportPlateBottom.class), getBaseTrackerGeometry());
+ add(supportPlateBottomGeometry);
+ JavaSurveyVolume supportTopGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportTop.class), getBaseTrackerGeometry());
+ add(supportTopGeometry);
+ JavaSurveyVolume supportPlateTopGeometry = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SupportPlateTop.class), getBaseTrackerGeometry());
+ add(supportPlateTopGeometry);
+
+ // build modules
+
+ if(isDebug()) System.out.printf("%s: build JAVA modules\n", getClass().getSimpleName());
+
+ // Loop over all modules created
+ for(BaseModuleBundle mod : _builder.modules) {
+ TestRunModuleBundle m = (TestRunModuleBundle) mod;
+ if(isDebug()) {
+ System.out.printf("%s: build module %s (layer %d half %s)\n", getClass().getSimpleName(),m.module.getName(),m.getLayer(),m.getHalf());
+ m.print();
+ }
+
+ // Find the mother among the objects using its name, should probably have a better way...
+ String name_mother = m.getMother().getName();
+ JavaSurveyVolume mother = null;
+ for(JavaSurveyVolume g : javaSurveyVolumes) {
+ if(g.getName().equals(name_mother)) {
+ mother = g;
+ break;
+ }
+ }
+ // Check that it had a mother
+ if(mother==null) throw new RuntimeException("Cound't find mother to module " + m.module.getName());
+
+ if(isDebug()) System.out.printf("%s: found mother %s to module %s\n", getClass().getSimpleName(),mother.getName(),m.module.getName());
+
+ // put the module in the list of objects that will be added to LCDD
+ addTestRunModule(m, mother);
+
+ if(isDebug()) System.out.printf("%s: DONE build module %s\n", getClass().getSimpleName(), m.module.getName());
+
+
+ }
+
+ if(isDebug()) System.out.printf("%s: DONE build JAVA modules\n", getClass().getSimpleName());
+
+
+ if(isDebug()) System.out.printf("%s: DONE building the JAVA geometry objects\n", getClass().getSimpleName());
+ if(isDebug()) {
+ System.out.printf("%s: DONE building the JAVA geometry objects\n", getClass().getSimpleName());
+ System.out.printf("%s: List of all the JAVA geometry objects built\n", this.getClass().getSimpleName());
+ for(JavaSurveyVolume bg : javaSurveyVolumes) {
+ System.out.printf("-------\n%s\n", bg.toString());
+ }
+ }
+
+
+ // Set visualization features
+ //setVis();
+
+
+ }
+
+ /**
+ * Rules for adding the JAVA module geometry.
+ * @param bundle - module to be added
+ * @param mother - mother JAVA geometry object
+ */
+ protected void addTestRunModule(TestRunModuleBundle bundle, JavaSurveyVolume mother) {
+
+ if(isDebug()) {
+ System.out.printf("%s: addModule %s containing:\n",this.getClass().getSimpleName(), bundle.module.getName());
+ bundle.print();
+ }
+
+ // Create the module
+ JavaSurveyVolume lcddM = new JavaGhostSurveyVolume(bundle.module, mother);
+ add(lcddM);
+
+ // add half modules
+ if(bundle.halfModuleAxial!=null) addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleAxial,lcddM);
if(bundle.halfModuleStereo!=null) addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleStereo,lcddM);
-
-
- if(isDebug()) {
- System.out.printf("%s: DONE addModule %s \n",this.getClass().getSimpleName(), bundle.module.getName());
- }
-
- }
-
-
- /**
- * Rules for adding the JAVA half module geometry.
- * @param bundle - module to be added
- * @param mother - mother JAVA geometry object
- */
- private void addHalfModule(TestRunHalfModuleBundle bundle, JavaSurveyVolume mother) {
- // Create the half-module
- // This is not a ghost element but reflects the module
- // concept in the old compact description
- // TODO fix the layer IDs
- int oldCompactModuleId = 0;
- JavaSurveyVolume lcddHM = new JavaSurveyVolume(bundle.halfModule, mother,oldCompactModuleId);
- add(lcddHM);
-
- // ComponentNumber is taken from old geometry where it is simply a counter when adding the xml daughters to the TestRunModule.
- // It is simply 0 for sensor and 1 for carbon fiber in the old geometry
- int componentNumber = ((Sensor)bundle.sensor).getId();
-
- // create the sensor
- JavaSurveyVolume lcddS = new JavaSurveyVolume(bundle.sensor, lcddHM, componentNumber);
- add(lcddS);
-
- // create the active sensor
- JavaSurveyVolume lcddAS = new JavaSurveyVolume(bundle.activeSensor, lcddS, componentNumber);
- add(lcddAS);
-
-// if(isDebug()) {
-// System.out.printf("%s: added sensor %s \n",this.getClass().getSimpleName(), lcddS.getName());
-// System.out.printf("%s: local coordinate system\n%s\n",this.getClass().getSimpleName(), bundle.sensor.getCoord().toString());
-// dsd
-// }
-
-
- }
+
+
+ if(isDebug()) {
+ System.out.printf("%s: DONE addModule %s \n",this.getClass().getSimpleName(), bundle.module.getName());
+ }
+
+ }
+
+
+ /**
+ * Rules for adding the JAVA half module geometry.
+ * @param bundle - module to be added
+ * @param mother - mother JAVA geometry object
+ */
+ private void addHalfModule(TestRunHalfModuleBundle bundle, JavaSurveyVolume mother) {
+ // Create the half-module
+ // This is not a ghost element but reflects the module
+ // concept in the old compact description
+ // TODO fix the layer IDs
+ int oldCompactModuleId = 0;
+ JavaSurveyVolume lcddHM = new JavaSurveyVolume(bundle.halfModule, mother,oldCompactModuleId);
+ add(lcddHM);
+
+ // ComponentNumber is taken from old geometry where it is simply a counter when adding the xml daughters to the TestRunModule.
+ // It is simply 0 for sensor and 1 for carbon fiber in the old geometry
+ int componentNumber = ((Sensor)bundle.sensor).getId();
+
+ // create the sensor
+ JavaSurveyVolume lcddS = new JavaSurveyVolume(bundle.sensor, lcddHM, componentNumber);
+ add(lcddS);
+
+ // create the active sensor
+ JavaSurveyVolume lcddAS = new JavaSurveyVolume(bundle.activeSensor, lcddS, componentNumber);
+ add(lcddAS);
+
+// if(isDebug()) {
+// System.out.printf("%s: added sensor %s \n",this.getClass().getSimpleName(), lcddS.getName());
+// System.out.printf("%s: local coordinate system\n%s\n",this.getClass().getSimpleName(), bundle.sensor.getCoord().toString());
+// dsd
+// }
+
+
+ }
@@ -206,8 +206,8 @@
}
-
-
-
+
+
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTestRunTracker2014LCDDBuilder.java Wed Mar 9 11:43:24 2016
@@ -26,157 +26,157 @@
public class HPSTestRunTracker2014LCDDBuilder extends HPSTrackerLCDDBuilder {
- public HPSTestRunTracker2014LCDDBuilder(boolean debugFlag, Element node, LCDD lcdd, SensitiveDetector sens) {
- super(debugFlag, node, lcdd, sens);
- }
+ public HPSTestRunTracker2014LCDDBuilder(boolean debugFlag, Element node, LCDD lcdd, SensitiveDetector sens) {
+ super(debugFlag, node, lcdd, sens);
+ }
-
- public void setBuilder() {
- setBuilder();
- }
-
- public void build(Volume worldVolume) {
-
- // set and build geometry
+
+ public void setBuilder() {
+ setBuilder();
+ }
+
+ public void build(Volume worldVolume) {
+
+ // set and build geometry
setBuilder(createGeometryDefinition(_debug, node));
- if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
+ if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
- if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName());
+ if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName());
- _builder.build();
+ _builder.build();
- if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName());
+ if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName());
- if(isDebug()) System.out.printf("%s: build the LCDD geometry objects\n", getClass().getSimpleName());
+ if(isDebug()) System.out.printf("%s: build the LCDD geometry objects\n", getClass().getSimpleName());
-
- // Go through the list of volumes to build that is created in the generic builder class
- // TODO this is manual now since I don't have a way of knowing in the generic builder class what is a ghost volume at this point.
- LCDDSurveyVolume trackingGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TrackingVolume.class), worldVolume);
- add(trackingGeometry);
- baseSurveyVolume = new LCDDSurveyVolume(_builder.getSurveyVolume(TrackerEnvelope.class), lcdd, trackingGeometry);
- add(baseSurveyVolume);
- LCDDSurveyVolume basePlateGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(BasePlate.class), lcdd, baseSurveyVolume);
- add(basePlateGeometry);
- // TODO I don't think this c-support has any use at all since the coordinates of it has been already used in the builder. Should remove?
- LCDDSurveyVolume cSupportGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(CSupport.class), baseSurveyVolume);
- add(cSupportGeometry);
- LCDDSurveyVolume supportBottomGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(SupportBottom.class), baseSurveyVolume);
- add(supportBottomGeometry);
- LCDDSurveyVolume supportPlateBottomGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(SupportPlateBottom.class), lcdd, baseSurveyVolume);
- add(supportPlateBottomGeometry);
- LCDDSurveyVolume supportTopGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(SupportTop.class), baseSurveyVolume);
- add(supportTopGeometry);
- LCDDSurveyVolume supportPlateTopGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(SupportPlateTop.class), lcdd, baseSurveyVolume);
- add(supportPlateTopGeometry);
+
+ // Go through the list of volumes to build that is created in the generic builder class
+ // TODO this is manual now since I don't have a way of knowing in the generic builder class what is a ghost volume at this point.
+ LCDDSurveyVolume trackingGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(org.lcsim.geometry.compact.converter.HPSTrackerGeometryDefinition.TrackingVolume.class), worldVolume);
+ add(trackingGeometry);
+ baseSurveyVolume = new LCDDSurveyVolume(_builder.getSurveyVolume(TrackerEnvelope.class), lcdd, trackingGeometry);
+ add(baseSurveyVolume);
+ LCDDSurveyVolume basePlateGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(BasePlate.class), lcdd, baseSurveyVolume);
+ add(basePlateGeometry);
+ // TODO I don't think this c-support has any use at all since the coordinates of it has been already used in the builder. Should remove?
+ LCDDSurveyVolume cSupportGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(CSupport.class), baseSurveyVolume);
+ add(cSupportGeometry);
+ LCDDSurveyVolume supportBottomGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(SupportBottom.class), baseSurveyVolume);
+ add(supportBottomGeometry);
+ LCDDSurveyVolume supportPlateBottomGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(SupportPlateBottom.class), lcdd, baseSurveyVolume);
+ add(supportPlateBottomGeometry);
+ LCDDSurveyVolume supportTopGeometry = new LCDDGhostSurveyVolume(_builder.getSurveyVolume(SupportTop.class), baseSurveyVolume);
+ add(supportTopGeometry);
+ LCDDSurveyVolume supportPlateTopGeometry = new LCDDSurveyVolume(_builder.getSurveyVolume(SupportPlateTop.class), lcdd, baseSurveyVolume);
+ add(supportPlateTopGeometry);
- // build modules
+ // build modules
- if(isDebug()) System.out.printf("%s: build modules\n", getClass().getSimpleName());
+ if(isDebug()) System.out.printf("%s: build modules\n", getClass().getSimpleName());
- // Loop over all modules created
- for(BaseModuleBundle mod : _builder.modules) {
- TestRunModuleBundle m = (TestRunModuleBundle) mod;
- if(isDebug()) {
- System.out.printf("%s: module layer %d half %s\n", getClass().getSimpleName(),m.getLayer(),m.getHalf());
- m.print();
- }
+ // Loop over all modules created
+ for(BaseModuleBundle mod : _builder.modules) {
+ TestRunModuleBundle m = (TestRunModuleBundle) mod;
+ if(isDebug()) {
+ System.out.printf("%s: module layer %d half %s\n", getClass().getSimpleName(),m.getLayer(),m.getHalf());
+ m.print();
+ }
- // Find the mother among the LCDD objects using its name, should probably have a better way...
- String name_mother = m.getMother().getName();
- LCDDSurveyVolume mother = null;
- for(LCDDSurveyVolume g : lcddSurveyVolumes) {
- if(g.getName().equals(name_mother)) {
- mother = g;
- break;
- }
- }
- // Check that it had a mother
- if(mother==null) throw new RuntimeException("Cound't find mother to module layer " + m.getLayer() + " half "+ m.getHalf());
+ // Find the mother among the LCDD objects using its name, should probably have a better way...
+ String name_mother = m.getMother().getName();
+ LCDDSurveyVolume mother = null;
+ for(LCDDSurveyVolume g : lcddSurveyVolumes) {
+ if(g.getName().equals(name_mother)) {
+ mother = g;
+ break;
+ }
+ }
+ // Check that it had a mother
+ if(mother==null) throw new RuntimeException("Cound't find mother to module layer " + m.getLayer() + " half "+ m.getHalf());
- if(isDebug()) System.out.printf("%s: found mother %s for module layer %d half %s\n", getClass().getSimpleName(),mother.getName(),m.getLayer(),m.getHalf());
+ if(isDebug()) System.out.printf("%s: found mother %s for module layer %d half %s\n", getClass().getSimpleName(),mother.getName(),m.getLayer(),m.getHalf());
- // add the module to the list of objects that will be added to LCDD
- addTestRunModule(m, mother);
+ // add the module to the list of objects that will be added to LCDD
+ addTestRunModule(m, mother);
- }
+ }
- if(isDebug()) {
- System.out.printf("%s: DONE building the LCDD geometry objects\n", getClass().getSimpleName());
- System.out.printf("%s: List of all %d LCDD geometry objects built\n", this.getClass().getSimpleName(), lcddSurveyVolumes.size());
- for(SurveyVolumeImpl bg : lcddSurveyVolumes) {
- System.out.printf("-------\n%s\n", bg.toString());
- }
- }
+ if(isDebug()) {
+ System.out.printf("%s: DONE building the LCDD geometry objects\n", getClass().getSimpleName());
+ System.out.printf("%s: List of all %d LCDD geometry objects built\n", this.getClass().getSimpleName(), lcddSurveyVolumes.size());
+ for(SurveyVolumeImpl bg : lcddSurveyVolumes) {
+ System.out.printf("-------\n%s\n", bg.toString());
+ }
+ }
- // Set visualization features
- setVisualization();
+ // Set visualization features
+ setVisualization();
- }
+ }
- /**
- * Rules for adding the LCDD module geometry.
- * @param bundle - module to be added
- * @param mother - mother LCDD geometry object
- */
- protected void addTestRunModule(TestRunModuleBundle bundle, LCDDSurveyVolume mother) {
- // This could perhaps be fixed if there is a relation with daughters in geometry definition?
- // create the module
- LCDDSurveyVolume lcddM = new LCDDSurveyVolume(bundle.module, lcdd, mother);
- add(lcddM);
- if(bundle.halfModuleAxial!=null) addTestRunHalfModule(bundle.halfModuleAxial,lcddM);
- if(bundle.coldBlock!=null) add(new LCDDSurveyVolume(bundle.coldBlock, lcdd, lcddM));
- if(bundle.halfModuleStereo!=null) addTestRunHalfModule((TestRunHalfModuleBundle)bundle.halfModuleStereo,lcddM);
+ /**
+ * Rules for adding the LCDD module geometry.
+ * @param bundle - module to be added
+ * @param mother - mother LCDD geometry object
+ */
+ protected void addTestRunModule(TestRunModuleBundle bundle, LCDDSurveyVolume mother) {
+ // This could perhaps be fixed if there is a relation with daughters in geometry definition?
+ // create the module
+ LCDDSurveyVolume lcddM = new LCDDSurveyVolume(bundle.module, lcdd, mother);
+ add(lcddM);
+ if(bundle.halfModuleAxial!=null) addTestRunHalfModule(bundle.halfModuleAxial,lcddM);
+ if(bundle.coldBlock!=null) add(new LCDDSurveyVolume(bundle.coldBlock, lcdd, lcddM));
+ if(bundle.halfModuleStereo!=null) addTestRunHalfModule((TestRunHalfModuleBundle)bundle.halfModuleStereo,lcddM);
// if(bundle.halfModuleAxial!=null) addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleAxial,lcddM);
// if(bundle.coldBlock!=null) add(new LCDDSurveyVolume(bundle.coldBlock, lcdd, lcddM));
// if(bundle.halfModuleStereo!=null) addHalfModule((TestRunHalfModuleBundle)bundle.halfModuleStereo,lcddM);
- }
+ }
- /**
- * Rules for adding the LCDD half module geometry.
- * @param bundle - module to be added
- * @param mother - mother LCDD geometry object
- */
- protected void addTestRunHalfModule(HalfModuleBundle bundle2, LCDDSurveyVolume mother) {
- // This could perhaps be fixed if there is a relation with daughters in geometry definition?
- TestRunHalfModuleBundle bundle = (TestRunHalfModuleBundle) bundle2;
-
- // create the half-module
- LCDDSurveyVolume lcddHM = new LCDDSurveyVolume(bundle.halfModule, lcdd, mother);
- add(lcddHM);
- // create the sensor
- LCDDSurveyVolume lcddS = new LCDDSurveyVolume(bundle.sensor, lcdd, lcddHM);
- add(lcddS);
- // create the active sensor
- LCDDSurveyVolume lcddAS = new LCDDSurveyVolume(bundle.activeSensor, lcdd, lcddS);
- add(lcddAS);
- // create the lamination
- LCDDSurveyVolume lcddL = new LCDDSurveyVolume(bundle.lamination, lcdd, lcddHM);
- add(lcddL);
- // create the carbon fiber frame
- LCDDSurveyVolume lcddCF = new LCDDSurveyVolume(bundle.carbonFiber, lcdd, lcddHM);
- add(lcddCF);
- // create the hybrid frame
- LCDDSurveyVolume lcddH = new LCDDSurveyVolume(bundle.hybrid, lcdd, lcddHM);
- add(lcddH);
+ /**
+ * Rules for adding the LCDD half module geometry.
+ * @param bundle - module to be added
+ * @param mother - mother LCDD geometry object
+ */
+ protected void addTestRunHalfModule(HalfModuleBundle bundle2, LCDDSurveyVolume mother) {
+ // This could perhaps be fixed if there is a relation with daughters in geometry definition?
+ TestRunHalfModuleBundle bundle = (TestRunHalfModuleBundle) bundle2;
+
+ // create the half-module
+ LCDDSurveyVolume lcddHM = new LCDDSurveyVolume(bundle.halfModule, lcdd, mother);
+ add(lcddHM);
+ // create the sensor
+ LCDDSurveyVolume lcddS = new LCDDSurveyVolume(bundle.sensor, lcdd, lcddHM);
+ add(lcddS);
+ // create the active sensor
+ LCDDSurveyVolume lcddAS = new LCDDSurveyVolume(bundle.activeSensor, lcdd, lcddS);
+ add(lcddAS);
+ // create the lamination
+ LCDDSurveyVolume lcddL = new LCDDSurveyVolume(bundle.lamination, lcdd, lcddHM);
+ add(lcddL);
+ // create the carbon fiber frame
+ LCDDSurveyVolume lcddCF = new LCDDSurveyVolume(bundle.carbonFiber, lcdd, lcddHM);
+ add(lcddCF);
+ // create the hybrid frame
+ LCDDSurveyVolume lcddH = new LCDDSurveyVolume(bundle.hybrid, lcdd, lcddHM);
+ add(lcddH);
- }
+ }
@Override
public HPSTrackerGeometryDefinition createGeometryDefinition(boolean debug,
Element node) {
return new HPSTestRunTracker2014GeometryDefinition(_debug, node);
- }
+ }
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014JavaBuilder.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014JavaBuilder.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTracker2014JavaBuilder.java Wed Mar 9 11:43:24 2016
@@ -28,122 +28,122 @@
*/
public class HPSTracker2014JavaBuilder extends HPSTestRunTracker2014JavaBuilder {
-
-
- /**
- * Default constructor
- * @param node
- */
- public HPSTracker2014JavaBuilder(boolean debugFlag, Element node) {
- super(debugFlag, node);
- }
-
-
-
-
- /**
- * Build the JAVA geometry objects from the geometry definition.
- * @param trackingVolume - the reference volume.
- */
- public void build(ILogicalVolume trackingVolume) {
-
- // build geometry
+
+
+ /**
+ * Default constructor
+ * @param node
+ */
+ public HPSTracker2014JavaBuilder(boolean debugFlag, Element node) {
+ super(debugFlag, node);
+ }
+
+
+
+
+ /**
+ * Build the JAVA geometry objects from the geometry definition.
+ * @param trackingVolume - the reference volume.
+ */
+ public void build(ILogicalVolume trackingVolume) {
+
+ // build geometry
setBuilder(createGeometryDefinition(this._debug, node));
-
- if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
-
- if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName());
-
- _builder.build();
-
- if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName());
-
- if(isDebug()) System.out.printf("%s: build the JAVA geometry objects\n", getClass().getSimpleName());
-
- // initialize the list to store a reference to each object
- javaSurveyVolumes = new ArrayList<JavaSurveyVolume>();
-
- // Go through the list of volumes to build that is created in the generic builder class
- JavaSurveyVolume tracking = new JavaSurveyVolume(_builder.getSurveyVolume(TrackingVolume.class), trackingVolume);
- add(tracking);
- JavaSurveyVolume chamber = new JavaGhostSurveyVolume(_builder.getSurveyVolume(PSVacuumChamber.class), tracking);
- add(chamber);
- setBaseTrackerGeometry(new JavaSurveyVolume(_builder.getSurveyVolume(SvtBox.class), chamber,1));
- add(getBaseTrackerGeometry());
- JavaSurveyVolume svtBoxBasePlate = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SvtBoxBasePlate.class), getBaseTrackerGeometry());
- add(svtBoxBasePlate);
-
-
- // build modules
-
- if(isDebug()) System.out.printf("%s: build JAVA modules\n", getClass().getSimpleName());
-
- // Loop over all modules created
- for(BaseModuleBundle mod : _builder.modules) {
- BaseModuleBundle m = mod;
- if(isDebug()) {
- System.out.printf("%s: build module %s (layer %d half %s)\n", getClass().getSimpleName(),m.module.getName(),m.getLayer(),m.getHalf());
- m.print();
- }
-
- // Find the mother among the objects using its name, should probably have a better way...
- String name_mother = m.getMother().getName();
- JavaSurveyVolume mother = null;
- for(JavaSurveyVolume g : javaSurveyVolumes) {
- if(g.getName().equals(name_mother)) {
- mother = g;
- break;
- }
- }
- // Check that it had a mother
- if(mother==null) throw new RuntimeException("Cound't find mother to module " + m.module.getName());
-
- if(isDebug()) System.out.printf("%s: found mother %s to module %s\n", getClass().getSimpleName(),mother.getName(),m.module.getName());
-
- // put the module in the list of objects that will be added to LCDD
- addModule(m, mother);
-
- if(isDebug()) System.out.printf("%s: DONE build module %s\n", getClass().getSimpleName(), m.module.getName());
-
-
- }
-
- if(isDebug()) System.out.printf("%s: DONE build JAVA modules\n", getClass().getSimpleName());
-
-
- //System.out.printf("%s: Built %d JAVA geometry objects\n", getClass().getSimpleName(),javaSurveyVolumes.size());
-
- if(isDebug()) {
- System.out.printf("%s: DONE building the JAVA geometry objects\n", getClass().getSimpleName());
- System.out.printf("%s: List of all the JAVA geometry objects built\n", this.getClass().getSimpleName());
- for(JavaSurveyVolume bg : javaSurveyVolumes) {
- System.out.printf("-------\n%s\n", bg.toString());
- }
- }
-
-
- // Set visualization features
- //setVis();
-
-
- }
-
- /**
- * Rules for adding the JAVA module geometry.
- * @param bundle - module to be added
- * @param mother - mother JAVA geometry object
- */
- private void addModule(BaseModuleBundle bundle, JavaSurveyVolume mother) {
- if(bundle instanceof TestRunModuleBundle) {
- addTestRunModule((TestRunModuleBundle) bundle, mother);
- } else if(bundle instanceof LongModuleBundle) {
- addLongModule((LongModuleBundle) bundle, mother);
- } else {
- throw new RuntimeException("The bundle is of unknown class type!");
- }
- }
-
- /**
+
+ if(_builder==null) throw new RuntimeException("need to set builder class before calling build!");
+
+ if(isDebug()) System.out.printf("%s: build the base geometry objects\n", getClass().getSimpleName());
+
+ _builder.build();
+
+ if(isDebug()) System.out.printf("%s: DONE build the base geometry objects\n", getClass().getSimpleName());
+
+ if(isDebug()) System.out.printf("%s: build the JAVA geometry objects\n", getClass().getSimpleName());
+
+ // initialize the list to store a reference to each object
+ javaSurveyVolumes = new ArrayList<JavaSurveyVolume>();
+
+ // Go through the list of volumes to build that is created in the generic builder class
+ JavaSurveyVolume tracking = new JavaSurveyVolume(_builder.getSurveyVolume(TrackingVolume.class), trackingVolume);
+ add(tracking);
+ JavaSurveyVolume chamber = new JavaGhostSurveyVolume(_builder.getSurveyVolume(PSVacuumChamber.class), tracking);
+ add(chamber);
+ setBaseTrackerGeometry(new JavaSurveyVolume(_builder.getSurveyVolume(SvtBox.class), chamber,1));
+ add(getBaseTrackerGeometry());
+ JavaSurveyVolume svtBoxBasePlate = new JavaGhostSurveyVolume(_builder.getSurveyVolume(SvtBoxBasePlate.class), getBaseTrackerGeometry());
+ add(svtBoxBasePlate);
+
+
+ // build modules
+
+ if(isDebug()) System.out.printf("%s: build JAVA modules\n", getClass().getSimpleName());
+
+ // Loop over all modules created
+ for(BaseModuleBundle mod : _builder.modules) {
+ BaseModuleBundle m = mod;
+ if(isDebug()) {
+ System.out.printf("%s: build module %s (layer %d half %s)\n", getClass().getSimpleName(),m.module.getName(),m.getLayer(),m.getHalf());
+ m.print();
+ }
+
+ // Find the mother among the objects using its name, should probably have a better way...
+ String name_mother = m.getMother().getName();
+ JavaSurveyVolume mother = null;
+ for(JavaSurveyVolume g : javaSurveyVolumes) {
+ if(g.getName().equals(name_mother)) {
+ mother = g;
+ break;
+ }
+ }
+ // Check that it had a mother
+ if(mother==null) throw new RuntimeException("Cound't find mother to module " + m.module.getName());
+
+ if(isDebug()) System.out.printf("%s: found mother %s to module %s\n", getClass().getSimpleName(),mother.getName(),m.module.getName());
+
+ // put the module in the list of objects that will be added to LCDD
+ addModule(m, mother);
+
+ if(isDebug()) System.out.printf("%s: DONE build module %s\n", getClass().getSimpleName(), m.module.getName());
+
+
+ }
+
+ if(isDebug()) System.out.printf("%s: DONE build JAVA modules\n", getClass().getSimpleName());
+
+
+ //System.out.printf("%s: Built %d JAVA geometry objects\n", getClass().getSimpleName(),javaSurveyVolumes.size());
+
+ if(isDebug()) {
+ System.out.printf("%s: DONE building the JAVA geometry objects\n", getClass().getSimpleName());
+ System.out.printf("%s: List of all the JAVA geometry objects built\n", this.getClass().getSimpleName());
+ for(JavaSurveyVolume bg : javaSurveyVolumes) {
+ System.out.printf("-------\n%s\n", bg.toString());
+ }
+ }
+
+
+ // Set visualization features
+ //setVis();
+
+
+ }
+
+ /**
+ * Rules for adding the JAVA module geometry.
+ * @param bundle - module to be added
+ * @param mother - mother JAVA geometry object
+ */
+ private void addModule(BaseModuleBundle bundle, JavaSurveyVolume mother) {
+ if(bundle instanceof TestRunModuleBundle) {
+ addTestRunModule((TestRunModuleBundle) bundle, mother);
+ } else if(bundle instanceof LongModuleBundle) {
+ addLongModule((LongModuleBundle) bundle, mother);
+ } else {
+ throw new RuntimeException("The bundle is of unknown class type!");
+ }
+ }
+
+ /**
* Rules for adding the LCDD module geometry.
* @param bundle - module to be added
* @param mother - mother LCDD geometry object
@@ -191,12 +191,12 @@
}
-
+
@Override
public HPSTrackerGeometryDefinition createGeometryDefinition(boolean debug, Element node) {
return new HPSTracker2014GeometryDefinition(debug, node);
}
-
-
+
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerGeometryDefinition.java Wed Mar 9 11:43:24 2016
@@ -41,7 +41,7 @@
protected static final boolean use30mradRotation = true;
protected static final boolean useFakeHalfModuleAxialPos = false;
- // Global position references
+ // Global position references
protected static final double target_pos_wrt_base_plate_x = 162.3; //from Marco's 3D model
protected static final double target_pos_wrt_base_plate_y = 80.55; //from Tim's sketchup //68.75; //from Marco's 3D model
protected static final double target_pos_wrt_base_plate_z = 926.59; //from Marco's 3D model
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerJavaBuilder.java Wed Mar 9 11:43:24 2016
@@ -15,158 +15,158 @@
public abstract class HPSTrackerJavaBuilder implements IHPSTrackerJavaBuilder {
- protected boolean _debug = false;
- private JavaSurveyVolume baseSurveyVolume;
- protected List<JavaSurveyVolume> javaSurveyVolumes = new ArrayList<JavaSurveyVolume>();
- protected DetectorIdentifierHelper detectorIdentifierHelper;
- protected IIdentifierDictionary identifierDictionary;
- protected Subdetector subdet;
- protected List<IDetectorElement> layerDetectorElements = new ArrayList<IDetectorElement>();
- protected List<IDetectorElement> moduleDetectorElements = new ArrayList<IDetectorElement>();
- protected IDetectorElement baseDetectorElement = null;
- public HPSTrackerBuilder _builder = null;
+ protected boolean _debug = false;
+ private JavaSurveyVolume baseSurveyVolume;
+ protected List<JavaSurveyVolume> javaSurveyVolumes = new ArrayList<JavaSurveyVolume>();
+ protected DetectorIdentifierHelper detectorIdentifierHelper;
+ protected IIdentifierDictionary identifierDictionary;
+ protected Subdetector subdet;
+ protected List<IDetectorElement> layerDetectorElements = new ArrayList<IDetectorElement>();
+ protected List<IDetectorElement> moduleDetectorElements = new ArrayList<IDetectorElement>();
+ protected IDetectorElement baseDetectorElement = null;
+ public HPSTrackerBuilder _builder = null;
protected Element node = null;
-
- public HPSTrackerJavaBuilder(boolean debugFlag, Element node) {
- this._debug=debugFlag;
- this.node = node;
- }
-
- public abstract void build(ILogicalVolume trackingVolume);
- public abstract HPSTrackerGeometryDefinition createGeometryDefinition(boolean debug, Element node);
+
+ public HPSTrackerJavaBuilder(boolean debugFlag, Element node) {
+ this._debug=debugFlag;
+ this.node = node;
+ }
+
+ public abstract void build(ILogicalVolume trackingVolume);
+ public abstract HPSTrackerGeometryDefinition createGeometryDefinition(boolean debug, Element node);
-
- /**
- * Add to list of objects.
- * @param geom - object to add.
- */
- public void add(JavaSurveyVolume geom) {
- javaSurveyVolumes.add(geom);
- }
-
- public void setBuilder(HPSTrackerBuilder b) {
- _builder = b;
- }
-
- public void build() {
- _builder.build();
- }
-
- public void setDebug(boolean debug) {
- _debug = debug;
- }
-
- public boolean isDebug() {
- return _debug;
- }
+
+ /**
+ * Add to list of objects.
+ * @param geom - object to add.
+ */
+ public void add(JavaSurveyVolume geom) {
+ javaSurveyVolumes.add(geom);
+ }
+
+ public void setBuilder(HPSTrackerBuilder b) {
+ _builder = b;
+ }
+
+ public void build() {
+ _builder.build();
+ }
+
+ public void setDebug(boolean debug) {
+ _debug = debug;
+ }
+
+ public boolean isDebug() {
+ return _debug;
+ }
- public DetectorIdentifierHelper getDetectorIdentifierHelper() {
- return detectorIdentifierHelper;
- }
+ public DetectorIdentifierHelper getDetectorIdentifierHelper() {
+ return detectorIdentifierHelper;
+ }
- public void setDetectorIdentifierHelper(
- DetectorIdentifierHelper detectorIdentifierHelper) {
- this.detectorIdentifierHelper = detectorIdentifierHelper;
- }
+ public void setDetectorIdentifierHelper(
+ DetectorIdentifierHelper detectorIdentifierHelper) {
+ this.detectorIdentifierHelper = detectorIdentifierHelper;
+ }
- public IIdentifierDictionary getIdentifierDictionary() {
- return identifierDictionary;
- }
+ public IIdentifierDictionary getIdentifierDictionary() {
+ return identifierDictionary;
+ }
- public void setIdentifierDictionary(
- IIdentifierDictionary identifierDictionary) {
- this.identifierDictionary = identifierDictionary;
- }
+ public void setIdentifierDictionary(
+ IIdentifierDictionary identifierDictionary) {
+ this.identifierDictionary = identifierDictionary;
+ }
- public void setSubdetector(Subdetector subdet) {
- this.subdet = subdet;
- }
+ public void setSubdetector(Subdetector subdet) {
+ this.subdet = subdet;
+ }
- public Subdetector getSubdetector() {
- return this.subdet;
- }
+ public Subdetector getSubdetector() {
+ return this.subdet;
+ }
-
+
-
+
- // This finds specific type. I would like to use the ID for this but can't, I think.
- // TODO there must be a factory instance to do this
- public SiTrackerModule getModuleDetectorElement(SiTrackerModule testElement) {
- if(isDebug()) System.out.printf("%s: getModuleDetectorElement for module %s path: \"%s\"\n", this.getClass().getSimpleName(),testElement.getName(),testElement.getGeometry().getPathString());
- SiTrackerModule element = null;
- for(IDetectorElement e : moduleDetectorElements) {
- SiTrackerModule m = (SiTrackerModule) e;
- if(isDebug()) System.out.printf("%s: compare with module %s path: %s\"%s\" \n", this.getClass().getSimpleName(),m.getName(),m.getGeometry().getPathString());
- if(m.getGeometry().getPathString().equals(testElement.getGeometry().getPathString())) {
- if(element!=null) throw new RuntimeException("two DE sharing extended ID?");
- if(isDebug()) System.out.printf("%s: found it\n", this.getClass().getSimpleName());
- element = m;
- }
- }
- return element;
- }
+ // This finds specific type. I would like to use the ID for this but can't, I think.
+ // TODO there must be a factory instance to do this
+ public SiTrackerModule getModuleDetectorElement(SiTrackerModule testElement) {
+ if(isDebug()) System.out.printf("%s: getModuleDetectorElement for module %s path: \"%s\"\n", this.getClass().getSimpleName(),testElement.getName(),testElement.getGeometry().getPathString());
+ SiTrackerModule element = null;
+ for(IDetectorElement e : moduleDetectorElements) {
+ SiTrackerModule m = (SiTrackerModule) e;
+ if(isDebug()) System.out.printf("%s: compare with module %s path: %s\"%s\" \n", this.getClass().getSimpleName(),m.getName(),m.getGeometry().getPathString());
+ if(m.getGeometry().getPathString().equals(testElement.getGeometry().getPathString())) {
+ if(element!=null) throw new RuntimeException("two DE sharing extended ID?");
+ if(isDebug()) System.out.printf("%s: found it\n", this.getClass().getSimpleName());
+ element = m;
+ }
+ }
+ return element;
+ }
-
- // Find detector elements
- // TODO This should be using some global geometry code like DetectorElementStore?
- public IDetectorElement getLayerDetectorElement(IExpandedIdentifier expId) {
- IDetectorElement element = null;
- if(isDebug()) System.out.printf("%s: search among %d layer DEs\n", this.getClass().getSimpleName(), layerDetectorElements.size());
- for(IDetectorElement e : layerDetectorElements) {
- if(isDebug()) System.out.printf("%s: test %s\n", this.getClass().getSimpleName(),e.getName());
- ExpandedIdentifier eId = (ExpandedIdentifier) e.getExpandedIdentifier();
- if(eId.equals(expId)) { // TODO order matters as expId is an interface without that function!?
- //check that only one was found
- if(element!=null) throw new RuntimeException("two DE sharing extended ID?");
- if(isDebug()) System.out.printf("%s: found it\n", this.getClass().getSimpleName());
- element = e;
- }
+
+ // Find detector elements
+ // TODO This should be using some global geometry code like DetectorElementStore?
+ public IDetectorElement getLayerDetectorElement(IExpandedIdentifier expId) {
+ IDetectorElement element = null;
+ if(isDebug()) System.out.printf("%s: search among %d layer DEs\n", this.getClass().getSimpleName(), layerDetectorElements.size());
+ for(IDetectorElement e : layerDetectorElements) {
+ if(isDebug()) System.out.printf("%s: test %s\n", this.getClass().getSimpleName(),e.getName());
+ ExpandedIdentifier eId = (ExpandedIdentifier) e.getExpandedIdentifier();
+ if(eId.equals(expId)) { // TODO order matters as expId is an interface without that function!?
+ //check that only one was found
+ if(element!=null) throw new RuntimeException("two DE sharing extended ID?");
+ if(isDebug()) System.out.printf("%s: found it\n", this.getClass().getSimpleName());
+ element = e;
+ }
- }
- return element;
- }
+ }
+ return element;
+ }
- public void addLayerDetectorElement(IDetectorElement e) {
- IExpandedIdentifier expId = e.getExpandedIdentifier();
- if(getLayerDetectorElement(expId) != null)
- throw new RuntimeException("Trying to add an existing layer detector element.");
- layerDetectorElements.add(e);
- }
+ public void addLayerDetectorElement(IDetectorElement e) {
+ IExpandedIdentifier expId = e.getExpandedIdentifier();
+ if(getLayerDetectorElement(expId) != null)
+ throw new RuntimeException("Trying to add an existing layer detector element.");
+ layerDetectorElements.add(e);
+ }
- public void addBaseDetectorElement(IDetectorElement e) {
- baseDetectorElement = e;
- }
+ public void addBaseDetectorElement(IDetectorElement e) {
+ baseDetectorElement = e;
+ }
- public IDetectorElement getBaseDetectorElement() {
- return baseDetectorElement;
- }
+ public IDetectorElement getBaseDetectorElement() {
+ return baseDetectorElement;
+ }
- public void addModuleDetectorElement(IDetectorElement e) {
- if(!(e instanceof SiTrackerModule))
- throw new RuntimeException("Trying to add an existing module of wrong type.");
- if(getModuleDetectorElement((SiTrackerModule) e) != null)
- throw new RuntimeException("Trying to add an already existing module detector element.");
- layerDetectorElements.add(e);
- }
-
+ public void addModuleDetectorElement(IDetectorElement e) {
+ if(!(e instanceof SiTrackerModule))
+ throw new RuntimeException("Trying to add an existing module of wrong type.");
+ if(getModuleDetectorElement((SiTrackerModule) e) != null)
+ throw new RuntimeException("Trying to add an already existing module detector element.");
+ layerDetectorElements.add(e);
+ }
+
- /**
- * @return the baseTrackerGeometry
- */
- public JavaSurveyVolume getBaseTrackerGeometry() {
- return baseSurveyVolume;
- }
+ /**
+ * @return the baseTrackerGeometry
+ */
+ public JavaSurveyVolume getBaseTrackerGeometry() {
+ return baseSurveyVolume;
+ }
- /**
- * @param baseTrackerGeometry the baseTrackerGeometry to set
- */
- public void setBaseTrackerGeometry(JavaSurveyVolume baseTrackerGeometry) {
- this.baseSurveyVolume = baseTrackerGeometry;
- }
+ /**
+ * @param baseTrackerGeometry the baseTrackerGeometry to set
+ */
+ public void setBaseTrackerGeometry(JavaSurveyVolume baseTrackerGeometry) {
+ this.baseSurveyVolume = baseTrackerGeometry;
+ }
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerLCDDBuilder.java Wed Mar 9 11:43:24 2016
@@ -10,24 +10,24 @@
public abstract class HPSTrackerLCDDBuilder implements IHPSTrackerLCDDBuilder {
- public boolean _debug = false;
- protected LCDD lcdd = null;
- protected LCDDSurveyVolume baseSurveyVolume;
- protected List<LCDDSurveyVolume> lcddSurveyVolumes = new ArrayList<LCDDSurveyVolume>();
- private SensitiveDetector sensitiveDetector;
- public HPSTrackerBuilder _builder = null;
+ public boolean _debug = false;
+ protected LCDD lcdd = null;
+ protected LCDDSurveyVolume baseSurveyVolume;
+ protected List<LCDDSurveyVolume> lcddSurveyVolumes = new ArrayList<LCDDSurveyVolume>();
+ private SensitiveDetector sensitiveDetector;
+ public HPSTrackerBuilder _builder = null;
protected Element node;
-
-
- public HPSTrackerLCDDBuilder(boolean debugFlag, Element node, LCDD lcdd2, SensitiveDetector sens) {
- setDebug(debugFlag);
- setLCDD(lcdd2);
- setSensitiveDetector(sens);
- setNode(node);
- }
-
- /**
+
+
+ public HPSTrackerLCDDBuilder(boolean debugFlag, Element node, LCDD lcdd2, SensitiveDetector sens) {
+ setDebug(debugFlag);
+ setLCDD(lcdd2);
+ setSensitiveDetector(sens);
+ setNode(node);
+ }
+
+ /**
* Build the LCDD geometry objects.
* @param worldVolume - the reference volume.
*/
@@ -37,93 +37,93 @@
public abstract void setBuilder();
public abstract HPSTrackerGeometryDefinition createGeometryDefinition(boolean debug, Element node);
-
+
- public void setNode(Element node) {
+ public void setNode(Element node) {
this.node = node;
- }
-
+ }
+
public void setSensitiveDetector(SensitiveDetector sens) {
- this.sensitiveDetector = sens;
- }
+ this.sensitiveDetector = sens;
+ }
- public SensitiveDetector getSensitiveDetector() {
- return this.sensitiveDetector;
- }
+ public SensitiveDetector getSensitiveDetector() {
+ return this.sensitiveDetector;
+ }
- public void setBuilder(HPSTrackerBuilder b) {
- _builder = b;
- }
-
- public HPSTrackerBuilder getBuilder() {
- return _builder;
- }
-
- public void build() {
- _builder.build();
- }
-
- public void setDebug(boolean debug) {
- _debug = debug;
- }
-
- public boolean isDebug() {
- return _debug;
- }
-
- /**
- * Add to list of objects.
- * @param geom - object to add.
- */
- public void add(LCDDSurveyVolume geom) {
- lcddSurveyVolumes.add(geom);
- }
+ public void setBuilder(HPSTrackerBuilder b) {
+ _builder = b;
+ }
+
+ public HPSTrackerBuilder getBuilder() {
+ return _builder;
+ }
+
+ public void build() {
+ _builder.build();
+ }
+
+ public void setDebug(boolean debug) {
+ _debug = debug;
+ }
+
+ public boolean isDebug() {
+ return _debug;
+ }
+
+ /**
+ * Add to list of objects.
+ * @param geom - object to add.
+ */
+ public void add(LCDDSurveyVolume geom) {
+ lcddSurveyVolumes.add(geom);
+ }
-
-
+
+
- public void setLCDD(LCDD lcdd) {
- this.lcdd = lcdd;
- }
+ public void setLCDD(LCDD lcdd) {
+ this.lcdd = lcdd;
+ }
- public LCDD getLCDD() {
- return lcdd;
- }
+ public LCDD getLCDD() {
+ return lcdd;
+ }
- public LCDDSurveyVolume getBaseLCDD() {
- return baseSurveyVolume;
- }
+ public LCDDSurveyVolume getBaseLCDD() {
+ return baseSurveyVolume;
+ }
- public void setVisualization() {
-
- if(isDebug()) System.out.printf("%s: Set LCDD visualization for %d LCDD geometry objects \n", getClass().getSimpleName(), lcddSurveyVolumes.size());
- for(SurveyVolumeImpl g : lcddSurveyVolumes) {
- String name = g.getName();
- if(isDebug()) System.out.printf("%s: Set LCDD vis for %s \n", getClass().getSimpleName(), name);
- if(name.contains("base_plate")) g.setVisName("BasePlateVis");
+ public void setVisualization() {
+
+ if(isDebug()) System.out.printf("%s: Set LCDD visualization for %d LCDD geometry objects \n", getClass().getSimpleName(), lcddSurveyVolumes.size());
+ for(SurveyVolumeImpl g : lcddSurveyVolumes) {
+ String name = g.getName();
+ if(isDebug()) System.out.printf("%s: Set LCDD vis for %s \n", getClass().getSimpleName(), name);
+ if(name.contains("base_plate")) g.setVisName("BasePlateVis");
else if(name.equals("base")) g.setVisName("SvtBoxVis");
- else if(name.contains("chamber")) g.setVisName("ChamberVis");
- else if(name.contains("support_bottom") || name.contains("support_top")) g.setVisName("SupportVolumeVis");
- else if(name.contains("support_plate")) g.setVisName("SupportPlateVis");
- else if(name.startsWith("module_")) {
- if(name.endsWith("halfmodule_axial") || name.endsWith("halfmodule_stereo")) g.setVisName("HalfModuleVis");
- else if(name.endsWith("cold")) g.setVisName("ColdBlockVis");
- else if(name.endsWith("lamination")) g.setVisName("KaptonVis");
- else if(name.endsWith("sensor")) g.setVisName("SensorVis");
- else if(name.endsWith("sensor_active")) g.setVisName("SensorVis");
- else if(name.endsWith("cf")) g.setVisName("CarbonFiberVis");
- else if(name.endsWith("hybrid")) g.setVisName("HybridVis");
- else {
- //this must be a module then?
- g.setVisName("ModuleVis");
- }
- }
- else {
- if(isDebug()) System.out.printf("%s: No LCDD vis for %s \n", getClass().getSimpleName(), name);
- }
- }
- if(isDebug()) System.out.printf("%s: DONE Set LCDD vis \n", getClass().getSimpleName());
- }
-
+ else if(name.contains("chamber")) g.setVisName("ChamberVis");
+ else if(name.contains("support_bottom") || name.contains("support_top")) g.setVisName("SupportVolumeVis");
+ else if(name.contains("support_plate")) g.setVisName("SupportPlateVis");
+ else if(name.startsWith("module_")) {
+ if(name.endsWith("halfmodule_axial") || name.endsWith("halfmodule_stereo")) g.setVisName("HalfModuleVis");
+ else if(name.endsWith("cold")) g.setVisName("ColdBlockVis");
+ else if(name.endsWith("lamination")) g.setVisName("KaptonVis");
+ else if(name.endsWith("sensor")) g.setVisName("SensorVis");
+ else if(name.endsWith("sensor_active")) g.setVisName("SensorVis");
+ else if(name.endsWith("cf")) g.setVisName("CarbonFiberVis");
+ else if(name.endsWith("hybrid")) g.setVisName("HybridVis");
+ else {
+ //this must be a module then?
+ g.setVisName("ModuleVis");
+ }
+ }
+ else {
+ if(isDebug()) System.out.printf("%s: No LCDD vis for %s \n", getClass().getSimpleName(), name);
+ }
+ }
+ if(isDebug()) System.out.printf("%s: DONE Set LCDD vis \n", getClass().getSimpleName());
+ }
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/IHPSTrackerJavaBuilder.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/IHPSTrackerJavaBuilder.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/IHPSTrackerJavaBuilder.java Wed Mar 9 11:43:24 2016
@@ -7,25 +7,25 @@
public interface IHPSTrackerJavaBuilder {
- /**
- * Build the JAVA geometry objects from the geometry definition.
- * @param trackingVolume - the reference volume.
- */
- public void build(ILogicalVolume trackingVolume);
-
- public DetectorIdentifierHelper getDetectorIdentifierHelper();
+ /**
+ * Build the JAVA geometry objects from the geometry definition.
+ * @param trackingVolume - the reference volume.
+ */
+ public void build(ILogicalVolume trackingVolume);
+
+ public DetectorIdentifierHelper getDetectorIdentifierHelper();
- public void setDetectorIdentifierHelper(
- DetectorIdentifierHelper detectorIdentifierHelper);
+ public void setDetectorIdentifierHelper(
+ DetectorIdentifierHelper detectorIdentifierHelper);
- public IIdentifierDictionary getIdentifierDictionary();
+ public IIdentifierDictionary getIdentifierDictionary();
- public void setIdentifierDictionary(
- IIdentifierDictionary identifierDictionary);
+ public void setIdentifierDictionary(
+ IIdentifierDictionary identifierDictionary);
- public void setSubdetector(Subdetector subdet);
+ public void setSubdetector(Subdetector subdet);
- public Subdetector getSubdetector();
-
+ public Subdetector getSubdetector();
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/IHPSTrackerLCDDBuilder.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/IHPSTrackerLCDDBuilder.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/IHPSTrackerLCDDBuilder.java Wed Mar 9 11:43:24 2016
@@ -5,11 +5,11 @@
public interface IHPSTrackerLCDDBuilder {
- public void setSensitiveDetector(SensitiveDetector sens);
+ public void setSensitiveDetector(SensitiveDetector sens);
- public SensitiveDetector getSensitiveDetector();
-
- public void build(Volume worldVolume);
+ public SensitiveDetector getSensitiveDetector();
+
+ public void build(Volume worldVolume);
- public void setVisualization();
+ public void setVisualization();
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/JavaGhostSurveyVolume.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/JavaGhostSurveyVolume.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/JavaGhostSurveyVolume.java Wed Mar 9 11:43:24 2016
@@ -7,22 +7,22 @@
* @author Per Hansson Adrian <[log in to unmask]>
*/
public class JavaGhostSurveyVolume extends JavaSurveyVolume {
-
- /**
- * Initialize with base and mother. This is typically for a reference geometry object
- * that is used for referencing coordinate systems but that doesn't have a volume itself.
- * @param surveyVolume - object used to get geometry definitions
- * @param mother - mother object
- */
- public JavaGhostSurveyVolume(SurveyVolume surveyVolume, JavaSurveyVolume mother) {
- super(surveyVolume);
- if(isDebug()) System.out.printf("%s: constructing JAVA ghost object %s with mother %s\n", this.getClass().getSimpleName(),surveyVolume.getName(),mother==null?"null":mother.getName());
- setMother(mother);
- mother.addDaughter(this);
- setPositionAndRotation(surveyVolume);
- if(isDebug()) System.out.printf("%s: DONE constructing JAVA object %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
- }
-
+
+ /**
+ * Initialize with base and mother. This is typically for a reference geometry object
+ * that is used for referencing coordinate systems but that doesn't have a volume itself.
+ * @param surveyVolume - object used to get geometry definitions
+ * @param mother - mother object
+ */
+ public JavaGhostSurveyVolume(SurveyVolume surveyVolume, JavaSurveyVolume mother) {
+ super(surveyVolume);
+ if(isDebug()) System.out.printf("%s: constructing JAVA ghost object %s with mother %s\n", this.getClass().getSimpleName(),surveyVolume.getName(),mother==null?"null":mother.getName());
+ setMother(mother);
+ mother.addDaughter(this);
+ setPositionAndRotation(surveyVolume);
+ if(isDebug()) System.out.printf("%s: DONE constructing JAVA object %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
+ }
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/JavaSurveyVolume.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/JavaSurveyVolume.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/JavaSurveyVolume.java Wed Mar 9 11:43:24 2016
@@ -26,120 +26,120 @@
* @author Per Hansson Adrian <[log in to unmask]>
*/
public class JavaSurveyVolume extends SurveyVolumeImpl {
- private Box box= null;
- private ILogicalVolume volume = null;
- private ITranslation3D pos = null;
- private IRotation3D rot = null;
- private IPhysicalVolume physVolume = null;
- private JavaSurveyVolume mother = null;
- public List<JavaSurveyVolume> daughters = new ArrayList<JavaSurveyVolume>();
- private int componentId = -1;
-
- /**
- * Default constructor
- */
- public JavaSurveyVolume(SurveyVolume surveyVolume) {
- super(surveyVolume);
- }
-
- /**
- * Construct a JAVA geometry object from its geometry definition and an already built logical volume.
- * This is typically used by the tracking volume.
- * @param surveyVolume - input geometry definition
- * @param vol - logical volume
- */
- public JavaSurveyVolume(SurveyVolume surveyVolume, ILogicalVolume vol) {
- super(surveyVolume);
- if(isDebug()) System.out.printf("%s: JavaBaseGeometry %s (given logical volume %s)\n", this.getClass().getSimpleName(),surveyVolume.getName(),vol.getName());
- // this must be tracking volume. May change in the future and is probably weird to make this requirement here.
- if(!surveyVolume.getName().contains("tracking")) throw new RuntimeException("this constructor is only used with the tracking volume!?");
- setVolume(vol);
- // since it's tracking volume, set the pos and rotation trivially
- Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(surveyVolume.getCoord().v(), surveyVolume.getCoord().w(), new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
- setPos(new Translation3D(0,0,0));
- setRot(new RotationGeant(lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z()));
- if(isDebug()) System.out.printf("%s: DONE JavaBaseGeometry %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
- }
-
- /**
- * Construct a JAVA geometry object from its geometry definition.
- * @param surveyVolume - input geometry definition
- * @param mother - reference to mother JAVA definition
- * @param volumeId - component id number
- */
- public JavaSurveyVolume(SurveyVolume surveyVolume, JavaSurveyVolume mother, int volumeId) {
- super(surveyVolume);
+ private Box box= null;
+ private ILogicalVolume volume = null;
+ private ITranslation3D pos = null;
+ private IRotation3D rot = null;
+ private IPhysicalVolume physVolume = null;
+ private JavaSurveyVolume mother = null;
+ public List<JavaSurveyVolume> daughters = new ArrayList<JavaSurveyVolume>();
+ private int componentId = -1;
+
+ /**
+ * Default constructor
+ */
+ public JavaSurveyVolume(SurveyVolume surveyVolume) {
+ super(surveyVolume);
+ }
+
+ /**
+ * Construct a JAVA geometry object from its geometry definition and an already built logical volume.
+ * This is typically used by the tracking volume.
+ * @param surveyVolume - input geometry definition
+ * @param vol - logical volume
+ */
+ public JavaSurveyVolume(SurveyVolume surveyVolume, ILogicalVolume vol) {
+ super(surveyVolume);
+ if(isDebug()) System.out.printf("%s: JavaBaseGeometry %s (given logical volume %s)\n", this.getClass().getSimpleName(),surveyVolume.getName(),vol.getName());
+ // this must be tracking volume. May change in the future and is probably weird to make this requirement here.
+ if(!surveyVolume.getName().contains("tracking")) throw new RuntimeException("this constructor is only used with the tracking volume!?");
+ setVolume(vol);
+ // since it's tracking volume, set the pos and rotation trivially
+ Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(surveyVolume.getCoord().v(), surveyVolume.getCoord().w(), new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
+ setPos(new Translation3D(0,0,0));
+ setRot(new RotationGeant(lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z()));
+ if(isDebug()) System.out.printf("%s: DONE JavaBaseGeometry %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
+ }
+
+ /**
+ * Construct a JAVA geometry object from its geometry definition.
+ * @param surveyVolume - input geometry definition
+ * @param mother - reference to mother JAVA definition
+ * @param volumeId - component id number
+ */
+ public JavaSurveyVolume(SurveyVolume surveyVolume, JavaSurveyVolume mother, int volumeId) {
+ super(surveyVolume);
if(isDebug()) System.out.printf("%s: JavaBaseGeometry %s (volumeID %d, mother %s)\n", this.getClass().getSimpleName(),surveyVolume.getName(),volumeId,mother==null?"null":mother.getName());
- setComponentId(volumeId);
- setMother(mother);
- mother.addDaughter(this);
- buildBox();
- buildVolume();
- setPositionAndRotation(surveyVolume);
- if(isDebug()) System.out.printf("%s: DONE JavaBaseGeometry %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
- }
-
- protected boolean hasCoordinateSystemInfo() {
- return pos!=null && rot!=null;
- }
-
-
- public void buildPhysVolume() {
- if(isDebug()) System.out.printf("%s: build phys volume for %s with mother %s and physical mother %s\n", this.getClass().getSimpleName(),getName(),getMother().getName(),getPhysMother().getName());
- JavaSurveyVolume physMother = getPhysMother();
- setPhysVolume(new PhysicalVolume(new Transform3D(getPos(), getRot()), getName(), volume, physMother.getVolume(),getComponentId()));
- }
-
- public void buildBox() {
- Hep3Vector b = VecOp.mult(0.5,getBoxDim());
- if(isDebug()) System.out.printf("%s: build box for %s with dimensions %s \n", this.getClass().getSimpleName(),getName(), b);
- setBox(new Box(getName() + "Box", b.x(), b.y(), b.z()));
- }
- public void buildVolume() {
- if(isDebug()) System.out.printf("%s: build volume for %s with material %s\n", this.getClass().getSimpleName(),getName(), MaterialStore.getInstance().get(getMaterial()));
- setVolume(new LogicalVolume(getName() + "_volume", box, MaterialStore.getInstance().get(getMaterial())));
-
- }
- public void setPositionAndRotation(SurveyVolume base) {
- if(isDebug()) System.out.printf("%s: set position and rotation for volume %s\n", this.getClass().getSimpleName(),getName());
-
- // no mother, this must be the world/tracking volume!?
- if(base.getMother()==null) throw new RuntimeException("trying to set coordinates w/o mother defined for "+base.getName());
-
- // Vector from origin to center of box locally
- Hep3Vector box_center_base_local = base.getCenter();
-
- // find the physical mother i.e. not a ghost volume and compound transformations to it
- JavaSurveyVolume physMother = getPhysMother();
- if(isDebug()) System.out.printf("%s: physical mother to transform to is %s; find the transform to it\n", this.getClass().getSimpleName(),physMother.getName());
- Transform3D trf = HPSTrackerBuilder.getTransform(base.getCoord().getTransformation(),base.getMother(),physMother.getName());
- if(isDebug()) System.out.printf("%s: found transform to physical mother \n%s\n\n", this.getClass().getSimpleName(),trf.toString());
-
- // find the position of the center in the physical mother coord
- Hep3Vector box_center_base = trf.transformed(box_center_base_local);
-
- // find the position of the center of the box in the mother coordinate system, make sure to use the physical mother coordinates
- if(isDebug()) System.out.printf("%s: find center of box in physical mother coord %s \n", this.getClass().getSimpleName(),physMother.getName());
- // hack since my getTransform function needs a mother TODO Fix this!
- SurveyVolume gm = base;
- if(isDebug()) System.out.printf("%s: look for physical mother %s starting from mother %s \n", this.getClass().getSimpleName(),physMother.getName(),gm.getMother()!=null?gm.getMother().getName():"-- no mother --");
- while((gm=gm.getMother()).getName()!=physMother.getName()) {
- if(isDebug()) System.out.printf("%s: gm is %s \n", this.getClass().getSimpleName(),gm.getName());
- //gm = gm.getMother();
- }
- if(isDebug()) System.out.printf("%s: found physical mother %s with center at %s \n", this.getClass().getSimpleName(),gm.getName(), gm.getCenter());
-
- Hep3Vector mother_center = gm.getCenter();
-
- // now calculate the position of this box center in the mother LCDD coordinates
- Hep3Vector box_center = VecOp.sub(box_center_base, mother_center);
-
- //Find LCDD Euler rotation angles from coordinate system unit vectors
- //Note that this has to be rotation wrt to physical mother and not just mother as normally is the case
- //Use apache lib to get angles, but in principle I should already have it from the trf above
- //Hep3Vector lcdd_rot_angles = HPSTestRunTracker2014.getEulerAngles(base.getCoord().v(), base.getCoord().w(), new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
- if(isDebug()) System.out.printf("%s: find LCDD Cardan rotation angles - need to find mother to physical mother transform \n", this.getClass().getSimpleName(),physMother.getName());
- Hep3Vector base_u = base.getCoord().u();
+ setComponentId(volumeId);
+ setMother(mother);
+ mother.addDaughter(this);
+ buildBox();
+ buildVolume();
+ setPositionAndRotation(surveyVolume);
+ if(isDebug()) System.out.printf("%s: DONE JavaBaseGeometry %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
+ }
+
+ protected boolean hasCoordinateSystemInfo() {
+ return pos!=null && rot!=null;
+ }
+
+
+ public void buildPhysVolume() {
+ if(isDebug()) System.out.printf("%s: build phys volume for %s with mother %s and physical mother %s\n", this.getClass().getSimpleName(),getName(),getMother().getName(),getPhysMother().getName());
+ JavaSurveyVolume physMother = getPhysMother();
+ setPhysVolume(new PhysicalVolume(new Transform3D(getPos(), getRot()), getName(), volume, physMother.getVolume(),getComponentId()));
+ }
+
+ public void buildBox() {
+ Hep3Vector b = VecOp.mult(0.5,getBoxDim());
+ if(isDebug()) System.out.printf("%s: build box for %s with dimensions %s \n", this.getClass().getSimpleName(),getName(), b);
+ setBox(new Box(getName() + "Box", b.x(), b.y(), b.z()));
+ }
+ public void buildVolume() {
+ if(isDebug()) System.out.printf("%s: build volume for %s with material %s\n", this.getClass().getSimpleName(),getName(), MaterialStore.getInstance().get(getMaterial()));
+ setVolume(new LogicalVolume(getName() + "_volume", box, MaterialStore.getInstance().get(getMaterial())));
+
+ }
+ public void setPositionAndRotation(SurveyVolume base) {
+ if(isDebug()) System.out.printf("%s: set position and rotation for volume %s\n", this.getClass().getSimpleName(),getName());
+
+ // no mother, this must be the world/tracking volume!?
+ if(base.getMother()==null) throw new RuntimeException("trying to set coordinates w/o mother defined for "+base.getName());
+
+ // Vector from origin to center of box locally
+ Hep3Vector box_center_base_local = base.getCenter();
+
+ // find the physical mother i.e. not a ghost volume and compound transformations to it
+ JavaSurveyVolume physMother = getPhysMother();
+ if(isDebug()) System.out.printf("%s: physical mother to transform to is %s; find the transform to it\n", this.getClass().getSimpleName(),physMother.getName());
+ Transform3D trf = HPSTrackerBuilder.getTransform(base.getCoord().getTransformation(),base.getMother(),physMother.getName());
+ if(isDebug()) System.out.printf("%s: found transform to physical mother \n%s\n\n", this.getClass().getSimpleName(),trf.toString());
+
+ // find the position of the center in the physical mother coord
+ Hep3Vector box_center_base = trf.transformed(box_center_base_local);
+
+ // find the position of the center of the box in the mother coordinate system, make sure to use the physical mother coordinates
+ if(isDebug()) System.out.printf("%s: find center of box in physical mother coord %s \n", this.getClass().getSimpleName(),physMother.getName());
+ // hack since my getTransform function needs a mother TODO Fix this!
+ SurveyVolume gm = base;
+ if(isDebug()) System.out.printf("%s: look for physical mother %s starting from mother %s \n", this.getClass().getSimpleName(),physMother.getName(),gm.getMother()!=null?gm.getMother().getName():"-- no mother --");
+ while((gm=gm.getMother()).getName()!=physMother.getName()) {
+ if(isDebug()) System.out.printf("%s: gm is %s \n", this.getClass().getSimpleName(),gm.getName());
+ //gm = gm.getMother();
+ }
+ if(isDebug()) System.out.printf("%s: found physical mother %s with center at %s \n", this.getClass().getSimpleName(),gm.getName(), gm.getCenter());
+
+ Hep3Vector mother_center = gm.getCenter();
+
+ // now calculate the position of this box center in the mother LCDD coordinates
+ Hep3Vector box_center = VecOp.sub(box_center_base, mother_center);
+
+ //Find LCDD Euler rotation angles from coordinate system unit vectors
+ //Note that this has to be rotation wrt to physical mother and not just mother as normally is the case
+ //Use apache lib to get angles, but in principle I should already have it from the trf above
+ //Hep3Vector lcdd_rot_angles = HPSTestRunTracker2014.getEulerAngles(base.getCoord().v(), base.getCoord().w(), new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
+ if(isDebug()) System.out.printf("%s: find LCDD Cardan rotation angles - need to find mother to physical mother transform \n", this.getClass().getSimpleName(),physMother.getName());
+ Hep3Vector base_u = base.getCoord().u();
Hep3Vector base_v = base.getCoord().v();
Hep3Vector base_w = base.getCoord().w();
if(isDebug()) System.out.printf("%s: unit vectors in mother coord: %s, %s, %s\n", this.getClass().getSimpleName(),base_u.toString(),base_v.toString(),base_w.toString());
@@ -169,22 +169,22 @@
//System.out.printf("%s: unit vectors u %s v %s w %s\n", this.getClass().getSimpleName(),base.getCoord().u().toString(),base.getCoord().v().toString(),base.getCoord().w().toString());
}
- Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(base_u, base_v, base_w, unit_u, unit_v, unit_w);
-
-
- // Create the LCDD position
- setPos(new Translation3D(box_center.x(), box_center.y(), box_center.z()));
- setRot(new RotationGeant(lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z()));
-
- if(isDebug()) {
-
- System.out.printf("%s: SurveyVolume information for %s:\n", this.getClass().getSimpleName(), base.getName());
+ Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(base_u, base_v, base_w, unit_u, unit_v, unit_w);
+
+
+ // Create the LCDD position
+ setPos(new Translation3D(box_center.x(), box_center.y(), box_center.z()));
+ setRot(new RotationGeant(lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z()));
+
+ if(isDebug()) {
+
+ System.out.printf("%s: SurveyVolume information for %s:\n", this.getClass().getSimpleName(), base.getName());
System.out.printf("%s: box_center_base_local %s\n", this.getClass().getSimpleName(), box_center_base_local.toString());
- System.out.printf("%s: box_center_base %s\n", this.getClass().getSimpleName(), box_center_base.toString());
- System.out.printf("%s: mother center %s\n", this.getClass().getSimpleName(), base.getMother()==null?" <no mother> ":mother_center.toString());
- System.out.printf("%s: box_center %s\n", this.getClass().getSimpleName(), box_center.toString());
- System.out.printf("%s: pos %s\n", this.getClass().getSimpleName(), getPos().toString());
- Hep3Vector box_center_tracking_xcheck = HPSTrackerBuilder.transformToTracking(box_center_base_local, base);
+ System.out.printf("%s: box_center_base %s\n", this.getClass().getSimpleName(), box_center_base.toString());
+ System.out.printf("%s: mother center %s\n", this.getClass().getSimpleName(), base.getMother()==null?" <no mother> ":mother_center.toString());
+ System.out.printf("%s: box_center %s\n", this.getClass().getSimpleName(), box_center.toString());
+ System.out.printf("%s: pos %s\n", this.getClass().getSimpleName(), getPos().toString());
+ Hep3Vector box_center_tracking_xcheck = HPSTrackerBuilder.transformToTracking(box_center_base_local, base);
System.out.printf("%s: box_center_tracking_xcheck %s (for %s)\n", this.getClass().getSimpleName(), box_center_tracking_xcheck==null ? " <null> " : box_center_tracking_xcheck.toString(),base.getName());
Hep3Vector box_center_envelope_xcheck2 = HPSTrackerBuilder.transformToParent(box_center_base_local, base, "base");
System.out.printf("%s: box_center_base_xcheck2 %s (for %s)\n", this.getClass().getSimpleName(), box_center_envelope_xcheck2==null ? " <null> " : box_center_envelope_xcheck2.toString(),base.getName());
@@ -203,90 +203,90 @@
System.out.printf("%s: origin_base_in %s\n", this.getClass().getSimpleName(), origin_base_in==null ? " <null> " : origin_base_in.toString());
}
System.out.printf("%s: euler %s\n", this.getClass().getSimpleName(), lcdd_rot_angles.toString());
- System.out.printf("%s: rot %s\n", this.getClass().getSimpleName(), getRot().toString());
-
- }
-
- }
-
- /**
- * Find the first non-ghost volume among parents.
- * @return mother object
- */
- public JavaSurveyVolume getPhysMother() {
- //if(isDebug()) System.out.printf("%s: finding physical mother to %s\n", this.getClass().getSimpleName(), getName());
- if(mother==null) throw new RuntimeException("Trying to get phys mother but there is no mother!");
- if(mother instanceof JavaGhostSurveyVolume) {
- return mother.getPhysMother();
- } else {
- //if(isDebug()) System.out.printf("%s: found a non-ghost volume: %s\n", this.getClass().getSimpleName(), mother.getName());
- return mother;
- }
- }
-
-
- public ILogicalVolume getVolume() {
- return volume;
- }
- protected void setVolume(ILogicalVolume volume) {
- this.volume = volume;
- }
- protected Box getBox() {
- return box;
- }
- protected void setBox(Box b) {
- box = b;
- }
- protected ITranslation3D getPos() {
- return pos;
- }
- protected void setPos(ITranslation3D iTranslation3D) {
- this.pos = iTranslation3D;
- }
- protected IRotation3D getRot() {
- return rot;
- }
- protected void setRot(IRotation3D iRotation3D) {
- this.rot = iRotation3D;
- }
- public JavaSurveyVolume getMother() {
- return mother;
- }
- protected void setMother(JavaSurveyVolume mother) {
- this.mother = mother;
- }
- public IPhysicalVolume getPhysVolume() {
- return physVolume;
- }
- protected void setPhysVolume(PhysicalVolume physVolume) {
- this.physVolume = physVolume;
- }
-
- public List<JavaSurveyVolume> getDaughters() {
- return daughters;
- }
-
- protected void addDaughter(JavaSurveyVolume o) {
- getDaughters().add(o);
- }
-
- public int getComponentId() {
- return componentId;
- }
-
- public void setComponentId(int componentId) {
- this.componentId = componentId;
- }
-
- public String toString() {
- String s = "JavaBaseGeometry " + getName() + "\n";
- if(getPos()!=null && getRot()!=null) {
- s += "Position: " + getPos().toString() + "\n";
- s += "Rotation: " + getRot().toString() + "\n";
- } else {
- s+= " - no position/rotation info -\n";
- }
- return s;
- }
+ System.out.printf("%s: rot %s\n", this.getClass().getSimpleName(), getRot().toString());
+
+ }
+
+ }
+
+ /**
+ * Find the first non-ghost volume among parents.
+ * @return mother object
+ */
+ public JavaSurveyVolume getPhysMother() {
+ //if(isDebug()) System.out.printf("%s: finding physical mother to %s\n", this.getClass().getSimpleName(), getName());
+ if(mother==null) throw new RuntimeException("Trying to get phys mother but there is no mother!");
+ if(mother instanceof JavaGhostSurveyVolume) {
+ return mother.getPhysMother();
+ } else {
+ //if(isDebug()) System.out.printf("%s: found a non-ghost volume: %s\n", this.getClass().getSimpleName(), mother.getName());
+ return mother;
+ }
+ }
+
+
+ public ILogicalVolume getVolume() {
+ return volume;
+ }
+ protected void setVolume(ILogicalVolume volume) {
+ this.volume = volume;
+ }
+ protected Box getBox() {
+ return box;
+ }
+ protected void setBox(Box b) {
+ box = b;
+ }
+ protected ITranslation3D getPos() {
+ return pos;
+ }
+ protected void setPos(ITranslation3D iTranslation3D) {
+ this.pos = iTranslation3D;
+ }
+ protected IRotation3D getRot() {
+ return rot;
+ }
+ protected void setRot(IRotation3D iRotation3D) {
+ this.rot = iRotation3D;
+ }
+ public JavaSurveyVolume getMother() {
+ return mother;
+ }
+ protected void setMother(JavaSurveyVolume mother) {
+ this.mother = mother;
+ }
+ public IPhysicalVolume getPhysVolume() {
+ return physVolume;
+ }
+ protected void setPhysVolume(PhysicalVolume physVolume) {
+ this.physVolume = physVolume;
+ }
+
+ public List<JavaSurveyVolume> getDaughters() {
+ return daughters;
+ }
+
+ protected void addDaughter(JavaSurveyVolume o) {
+ getDaughters().add(o);
+ }
+
+ public int getComponentId() {
+ return componentId;
+ }
+
+ public void setComponentId(int componentId) {
+ this.componentId = componentId;
+ }
+
+ public String toString() {
+ String s = "JavaBaseGeometry " + getName() + "\n";
+ if(getPos()!=null && getRot()!=null) {
+ s += "Position: " + getPos().toString() + "\n";
+ s += "Rotation: " + getRot().toString() + "\n";
+ } else {
+ s+= " - no position/rotation info -\n";
+ }
+ return s;
+ }
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/LCDDGhostSurveyVolume.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/LCDDGhostSurveyVolume.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/LCDDGhostSurveyVolume.java Wed Mar 9 11:43:24 2016
@@ -10,20 +10,20 @@
*/
public class LCDDGhostSurveyVolume extends LCDDSurveyVolume {
-
-
- /**
- * Initialize with base and mother. This is typically for a reference geometry object
- * that is used for referencing coordinate systems but that doesn't have a volume itself.
- * @param base - object used to get geometry definitions
- * @param mother - mother LCDD object
- */
- public LCDDGhostSurveyVolume(SurveyVolume base, LCDDSurveyVolume mother) {
- super(base);
- if(isDebug()) System.out.printf("%s: constructing LCDD ghost object %s with mother %s\n", this.getClass().getSimpleName(),base.getName(),mother==null?"null":mother.getName());
- setMother(mother);
- mother.addDaughter(this);
- if(isDebug()) System.out.printf("%s: DONE constructing LCDD object %s\n", this.getClass().getSimpleName(),base.getName());
- }
-
+
+
+ /**
+ * Initialize with base and mother. This is typically for a reference geometry object
+ * that is used for referencing coordinate systems but that doesn't have a volume itself.
+ * @param base - object used to get geometry definitions
+ * @param mother - mother LCDD object
+ */
+ public LCDDGhostSurveyVolume(SurveyVolume base, LCDDSurveyVolume mother) {
+ super(base);
+ if(isDebug()) System.out.printf("%s: constructing LCDD ghost object %s with mother %s\n", this.getClass().getSimpleName(),base.getName(),mother==null?"null":mother.getName());
+ setMother(mother);
+ mother.addDaughter(this);
+ if(isDebug()) System.out.printf("%s: DONE constructing LCDD object %s\n", this.getClass().getSimpleName(),base.getName());
+ }
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/LCDDSurveyVolume.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/LCDDSurveyVolume.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/LCDDSurveyVolume.java Wed Mar 9 11:43:24 2016
@@ -25,233 +25,233 @@
* @author Per Hansson Adrian <[log in to unmask]>
*/
public class LCDDSurveyVolume extends SurveyVolumeImpl {
- Box box= null;
- Volume volume = null;
- private Position pos = null;
- private Rotation rot = null;
- private PhysVol physVolume = null;
- LCDD lcdd = null;
- private LCDDSurveyVolume mother = null;
- protected Map<String,Integer> physVolId = null;
- public List<LCDDSurveyVolume> daughters = new ArrayList<LCDDSurveyVolume>();
- /**
- * Default constructor
- * @param surveyVolume - core geometry definitions
- */
- public LCDDSurveyVolume(SurveyVolume surveyVolume) {
- super(surveyVolume);
- }
-
- /**
- * Initialize this object with a known volume and no mother. Typically the world volume would use this.
- * @param surveyVolume - core geometry definitions
- * @param vol - given volume
- */
- public LCDDSurveyVolume(SurveyVolume surveyVolume, Volume volume) {
- super(surveyVolume);
- if(isDebug()) System.out.printf("%s: constructing LCDD object %s with volume name %s\n", this.getClass().getSimpleName(),surveyVolume.getName(),volume.getName());
- setVolume(volume);
- if(isDebug()) System.out.printf("%s: DONE constructing LCDD object %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
- Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(surveyVolume.getCoord().v(), surveyVolume.getCoord().w(), new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
- setPos(new Position(getName() + "_position", 0, 0, 0));
- setRot(new Rotation(getName() + "_rotation",lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z()));
- if(isDebug()) System.out.printf("%s: DONE %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
- }
-
- /**
- * Interface to the LCDD converter geometry for the geometry definition.
- * @param surveyVolume - core geometry definition
- * @param lcdd - lcdd file
- * @param mother - reference to mother LCDD definition
- */
- public LCDDSurveyVolume(SurveyVolume surveyVolume, LCDD lcdd, LCDDSurveyVolume mother) {
- super(surveyVolume);
- if(isDebug()) System.out.printf("%s: constructing LCDD object %s with mother %s\n", this.getClass().getSimpleName(),surveyVolume.getName(),mother==null?"null":mother.getName());
- this.lcdd = lcdd;
- setMother(mother);
- mother.addDaughter(this);
- buildBox();
- buildVolume();
- setPositionAndRotation(surveyVolume);
- //buildPhysVolume(mother);
- if(isDebug()) System.out.printf("%s: DONE constructing LCDD object %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
- }
-
-
- public void buildPhysVolume() {
-
- if(isDebug()) System.out.printf("%s: build phys volume for %s with mother %s and physical mother %s\n", this.getClass().getSimpleName(),getName(),getMother().getName(),getPhysMother().getName());
- LCDDSurveyVolume physMother = getPhysMother();
- setPhysVolume(new PhysVol(volume, physMother.getVolume(), getPos(), getRot()));
- //if(isDebug()) System.out.printf("%s: build phys volume for %s\n", this.getClass().getSimpleName(),getName());
- //setPhysVolume(new PhysVol(volume, getMother().getVolume(), getPos(), getRot()));
- }
- public void buildBox() {
- if(isDebug()) System.out.printf("%s: build box for %s\n", getClass().getSimpleName(),getName());
- setBox(new Box(getName() + "Box", getBoxDim().x(), getBoxDim().y(), getBoxDim().z()));
- }
- public void buildVolume() {
- if(isDebug()) System.out.printf("%s: build volume for %s with material %s\n", this.getClass().getSimpleName(),getName(),getMaterial());
- try {
- Material mat = lcdd.getMaterial(getMaterial());
- setVolume(new Volume(getName() + "_volume", box, mat));
- } catch (JDOMException e) {
- e.printStackTrace();
- }
- }
-
-
- public void setPositionAndRotation(SurveyVolume base) {
- if(isDebug()) System.out.printf("%s: set position and rotation for volume %s\n", this.getClass().getSimpleName(),getName());
-
- // NOTE:
- // This sets position and reference w.r.t. mother coordinate system.
- // If I'm not building that volume this will be wrong.
- // TODO Similar to in the JAVA converter this should be something like the physical mother.
-
- if(base.getMother()==null) throw new RuntimeException("trying to set coordinates w/o mother defined for "+base.getName());
-
- // Vector from origin to center of box locally
- Hep3Vector box_center_base_local = base.getCenter();
-
- //translate to the mother coordinate system
- LCDDSurveyVolume physMother = getPhysMother();
- if(isDebug()) System.out.printf("%s: physical mother to transform to is %s; find the transform to it\n", this.getClass().getSimpleName(),physMother.getName());
- Transform3D trf = HPSTrackerBuilder.getTransform(base.getCoord().getTransformation(),base.getMother(),physMother.getName());
- if(isDebug()) System.out.printf("%s: found transform to physical mother \n%s\n\n", this.getClass().getSimpleName(),trf.toString());
-
- // find the position of the center in the physical mother coord
- Hep3Vector box_center_base = trf.transformed(box_center_base_local);
-
- // find the position of the center of the box in the mother coordinate system, make sure to use the physical mother coordinates
- if(isDebug()) System.out.printf("%s: find center of box in physical mother coord %s \n", this.getClass().getSimpleName(),physMother.getName());
- // hack since my getTransform function needs a mother TODO Fix this!
- SurveyVolume gm = base;
- if(isDebug()) System.out.printf("%s: look for physical mother %s starting from mother %s \n", this.getClass().getSimpleName(),physMother.getName(),gm.getMother()!=null?gm.getMother().getName():"-- no mother --");
- while((gm=gm.getMother()).getName()!=physMother.getName()) {
- if(isDebug()) System.out.printf("%s: gm is %s \n", this.getClass().getSimpleName(),gm.getName());
- //gm = gm.getMother();
- }
- if(isDebug()) System.out.printf("%s: found physical mother %s with center at %s \n", this.getClass().getSimpleName(),gm.getName(), gm.getCenter());
-
- Hep3Vector mother_center = gm.getCenter();
-
- // find the position of the center in the mother coord
- Hep3Vector box_center = VecOp.sub(box_center_base, mother_center);
-
- //Find LCDD Euler rotation angles from coordinate system unit vectors
- //Note that this has to be rotation wrt to physical mother and not just mother as normally is the case
- if(isDebug()) System.out.printf("%s: find LCDD Cardan rotation angles - need to find mother to physical mother transform \n", this.getClass().getSimpleName(),physMother.getName());
- Hep3Vector base_u = base.getCoord().u();
- Hep3Vector base_v = base.getCoord().v();
- Hep3Vector base_w = base.getCoord().w();
+ Box box= null;
+ Volume volume = null;
+ private Position pos = null;
+ private Rotation rot = null;
+ private PhysVol physVolume = null;
+ LCDD lcdd = null;
+ private LCDDSurveyVolume mother = null;
+ protected Map<String,Integer> physVolId = null;
+ public List<LCDDSurveyVolume> daughters = new ArrayList<LCDDSurveyVolume>();
+ /**
+ * Default constructor
+ * @param surveyVolume - core geometry definitions
+ */
+ public LCDDSurveyVolume(SurveyVolume surveyVolume) {
+ super(surveyVolume);
+ }
+
+ /**
+ * Initialize this object with a known volume and no mother. Typically the world volume would use this.
+ * @param surveyVolume - core geometry definitions
+ * @param vol - given volume
+ */
+ public LCDDSurveyVolume(SurveyVolume surveyVolume, Volume volume) {
+ super(surveyVolume);
+ if(isDebug()) System.out.printf("%s: constructing LCDD object %s with volume name %s\n", this.getClass().getSimpleName(),surveyVolume.getName(),volume.getName());
+ setVolume(volume);
+ if(isDebug()) System.out.printf("%s: DONE constructing LCDD object %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
+ Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(surveyVolume.getCoord().v(), surveyVolume.getCoord().w(), new BasicHep3Vector(0,1,0),new BasicHep3Vector(0,0,1));
+ setPos(new Position(getName() + "_position", 0, 0, 0));
+ setRot(new Rotation(getName() + "_rotation",lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z()));
+ if(isDebug()) System.out.printf("%s: DONE %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
+ }
+
+ /**
+ * Interface to the LCDD converter geometry for the geometry definition.
+ * @param surveyVolume - core geometry definition
+ * @param lcdd - lcdd file
+ * @param mother - reference to mother LCDD definition
+ */
+ public LCDDSurveyVolume(SurveyVolume surveyVolume, LCDD lcdd, LCDDSurveyVolume mother) {
+ super(surveyVolume);
+ if(isDebug()) System.out.printf("%s: constructing LCDD object %s with mother %s\n", this.getClass().getSimpleName(),surveyVolume.getName(),mother==null?"null":mother.getName());
+ this.lcdd = lcdd;
+ setMother(mother);
+ mother.addDaughter(this);
+ buildBox();
+ buildVolume();
+ setPositionAndRotation(surveyVolume);
+ //buildPhysVolume(mother);
+ if(isDebug()) System.out.printf("%s: DONE constructing LCDD object %s\n", this.getClass().getSimpleName(),surveyVolume.getName());
+ }
+
+
+ public void buildPhysVolume() {
+
+ if(isDebug()) System.out.printf("%s: build phys volume for %s with mother %s and physical mother %s\n", this.getClass().getSimpleName(),getName(),getMother().getName(),getPhysMother().getName());
+ LCDDSurveyVolume physMother = getPhysMother();
+ setPhysVolume(new PhysVol(volume, physMother.getVolume(), getPos(), getRot()));
+ //if(isDebug()) System.out.printf("%s: build phys volume for %s\n", this.getClass().getSimpleName(),getName());
+ //setPhysVolume(new PhysVol(volume, getMother().getVolume(), getPos(), getRot()));
+ }
+ public void buildBox() {
+ if(isDebug()) System.out.printf("%s: build box for %s\n", getClass().getSimpleName(),getName());
+ setBox(new Box(getName() + "Box", getBoxDim().x(), getBoxDim().y(), getBoxDim().z()));
+ }
+ public void buildVolume() {
+ if(isDebug()) System.out.printf("%s: build volume for %s with material %s\n", this.getClass().getSimpleName(),getName(),getMaterial());
+ try {
+ Material mat = lcdd.getMaterial(getMaterial());
+ setVolume(new Volume(getName() + "_volume", box, mat));
+ } catch (JDOMException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ public void setPositionAndRotation(SurveyVolume base) {
+ if(isDebug()) System.out.printf("%s: set position and rotation for volume %s\n", this.getClass().getSimpleName(),getName());
+
+ // NOTE:
+ // This sets position and reference w.r.t. mother coordinate system.
+ // If I'm not building that volume this will be wrong.
+ // TODO Similar to in the JAVA converter this should be something like the physical mother.
+
+ if(base.getMother()==null) throw new RuntimeException("trying to set coordinates w/o mother defined for "+base.getName());
+
+ // Vector from origin to center of box locally
+ Hep3Vector box_center_base_local = base.getCenter();
+
+ //translate to the mother coordinate system
+ LCDDSurveyVolume physMother = getPhysMother();
+ if(isDebug()) System.out.printf("%s: physical mother to transform to is %s; find the transform to it\n", this.getClass().getSimpleName(),physMother.getName());
+ Transform3D trf = HPSTrackerBuilder.getTransform(base.getCoord().getTransformation(),base.getMother(),physMother.getName());
+ if(isDebug()) System.out.printf("%s: found transform to physical mother \n%s\n\n", this.getClass().getSimpleName(),trf.toString());
+
+ // find the position of the center in the physical mother coord
+ Hep3Vector box_center_base = trf.transformed(box_center_base_local);
+
+ // find the position of the center of the box in the mother coordinate system, make sure to use the physical mother coordinates
+ if(isDebug()) System.out.printf("%s: find center of box in physical mother coord %s \n", this.getClass().getSimpleName(),physMother.getName());
+ // hack since my getTransform function needs a mother TODO Fix this!
+ SurveyVolume gm = base;
+ if(isDebug()) System.out.printf("%s: look for physical mother %s starting from mother %s \n", this.getClass().getSimpleName(),physMother.getName(),gm.getMother()!=null?gm.getMother().getName():"-- no mother --");
+ while((gm=gm.getMother()).getName()!=physMother.getName()) {
+ if(isDebug()) System.out.printf("%s: gm is %s \n", this.getClass().getSimpleName(),gm.getName());
+ //gm = gm.getMother();
+ }
+ if(isDebug()) System.out.printf("%s: found physical mother %s with center at %s \n", this.getClass().getSimpleName(),gm.getName(), gm.getCenter());
+
+ Hep3Vector mother_center = gm.getCenter();
+
+ // find the position of the center in the mother coord
+ Hep3Vector box_center = VecOp.sub(box_center_base, mother_center);
+
+ //Find LCDD Euler rotation angles from coordinate system unit vectors
+ //Note that this has to be rotation wrt to physical mother and not just mother as normally is the case
+ if(isDebug()) System.out.printf("%s: find LCDD Cardan rotation angles - need to find mother to physical mother transform \n", this.getClass().getSimpleName(),physMother.getName());
+ Hep3Vector base_u = base.getCoord().u();
+ Hep3Vector base_v = base.getCoord().v();
+ Hep3Vector base_w = base.getCoord().w();
if(isDebug()) System.out.printf("%s: unit vectors in mother coord: %s, %s, %s\n", this.getClass().getSimpleName(),base_u.toString(),base_v.toString(),base_w.toString());
- Hep3Vector unit_u = new BasicHep3Vector(1,0,0);
- Hep3Vector unit_v = new BasicHep3Vector(0,1,0);
- Hep3Vector unit_w = new BasicHep3Vector(0,0,1);
- if(!base.getMother().getName().equals(physMother.getName())) {
- if(isDebug()) System.out.printf("%s: Need to get unit vectors in physical mother %s coord system\n", this.getClass().getSimpleName(),physMother.getName());
+ Hep3Vector unit_u = new BasicHep3Vector(1,0,0);
+ Hep3Vector unit_v = new BasicHep3Vector(0,1,0);
+ Hep3Vector unit_w = new BasicHep3Vector(0,0,1);
+ if(!base.getMother().getName().equals(physMother.getName())) {
+ if(isDebug()) System.out.printf("%s: Need to get unit vectors in physical mother %s coord system\n", this.getClass().getSimpleName(),physMother.getName());
Transform3D trf_mother = HPSTrackerBuilder.getTransform(base.getMother().getCoord().getTransformation(),base.getMother().getMother(),physMother.getName());
if(isDebug()) System.out.printf("%s: found transform from mother to physical mother \n%s\n", this.getClass().getSimpleName(),trf_mother.toString());
- //unit_u = VecOp.unit(trf_mother.rotated(unit_u));
- //unit_v = VecOp.unit(trf_mother.rotated(unit_v));
- //unit_w = VecOp.unit(trf_mother.rotated(unit_w));
- base_u = VecOp.unit(trf_mother.rotated(base_u));
+ //unit_u = VecOp.unit(trf_mother.rotated(unit_u));
+ //unit_v = VecOp.unit(trf_mother.rotated(unit_v));
+ //unit_w = VecOp.unit(trf_mother.rotated(unit_w));
+ base_u = VecOp.unit(trf_mother.rotated(base_u));
base_v = VecOp.unit(trf_mother.rotated(base_v));
base_w = VecOp.unit(trf_mother.rotated(base_w));
- } else {
- if(isDebug()) System.out.printf("%s: mother and physical mother is the same so unit vectors didn't change\n",getClass().getSimpleName());
- }
-
- if(isDebug()) {
- if(isDebug()) System.out.printf("%s: final unit vectors to get Cardan angles from : \n%s, %s, %s -> %s, %s, %s \n",
- this.getClass().getSimpleName(),
- base_u.toString(),base_v.toString(),base_w.toString(),
- unit_u.toString(),unit_v.toString(),unit_w.toString());
- //System.out.printf("%s: unit vectors u %s v %s w %s\n", this.getClass().getSimpleName(),base.getCoord().u().toString(),base.getCoord().v().toString(),base.getCoord().w().toString());
- }
+ } else {
+ if(isDebug()) System.out.printf("%s: mother and physical mother is the same so unit vectors didn't change\n",getClass().getSimpleName());
+ }
+
+ if(isDebug()) {
+ if(isDebug()) System.out.printf("%s: final unit vectors to get Cardan angles from : \n%s, %s, %s -> %s, %s, %s \n",
+ this.getClass().getSimpleName(),
+ base_u.toString(),base_v.toString(),base_w.toString(),
+ unit_u.toString(),unit_v.toString(),unit_w.toString());
+ //System.out.printf("%s: unit vectors u %s v %s w %s\n", this.getClass().getSimpleName(),base.getCoord().u().toString(),base.getCoord().v().toString(),base.getCoord().w().toString());
+ }
Hep3Vector lcdd_rot_angles = TransformationUtils.getCardanAngles(base_u, base_v, base_w, unit_u, unit_v, unit_w);
-
- // Create the LCDD position and rotation
- setPos(new Position(getName() + "_position",box_center.x(), box_center.y(), box_center.z()));
- setRot(new Rotation(getName() + "_rotation",lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z()));
-
- if(isDebug()) {
- System.out.printf("%s: SurveyVolume information for %s:\n", this.getClass().getSimpleName(), base.getName());
+
+ // Create the LCDD position and rotation
+ setPos(new Position(getName() + "_position",box_center.x(), box_center.y(), box_center.z()));
+ setRot(new Rotation(getName() + "_rotation",lcdd_rot_angles.x(), lcdd_rot_angles.y(), lcdd_rot_angles.z()));
+
+ if(isDebug()) {
+ System.out.printf("%s: SurveyVolume information for %s:\n", this.getClass().getSimpleName(), base.getName());
System.out.printf("%s: box_center_base_local %s\n", this.getClass().getSimpleName(), box_center_base_local.toString());
- System.out.printf("%s: box_center_base %s\n", this.getClass().getSimpleName(), box_center_base.toString());
- System.out.printf("%s: mother center %s\n", this.getClass().getSimpleName(), mother_center.toString());
- System.out.printf("%s: box_center %s\n", this.getClass().getSimpleName(), box_center.toString());
- System.out.printf("%s: pos %s\n", this.getClass().getSimpleName(), getPos().toString());
- System.out.printf("%s: euler %s\n", this.getClass().getSimpleName(), lcdd_rot_angles.toString());
+ System.out.printf("%s: box_center_base %s\n", this.getClass().getSimpleName(), box_center_base.toString());
+ System.out.printf("%s: mother center %s\n", this.getClass().getSimpleName(), mother_center.toString());
+ System.out.printf("%s: box_center %s\n", this.getClass().getSimpleName(), box_center.toString());
+ System.out.printf("%s: pos %s\n", this.getClass().getSimpleName(), getPos().toString());
+ System.out.printf("%s: euler %s\n", this.getClass().getSimpleName(), lcdd_rot_angles.toString());
System.out.printf("%s: rot %s\n", this.getClass().getSimpleName(), getRot().toString());
-
- //calculate the position in tracking volume separately as a xcheck
- Hep3Vector box_center_tracking_xcheck = HPSTrackerBuilder.transformToTracking(box_center_base_local, base);
- System.out.printf("%s: box_center_tracking_xcheck %s (for %s)\n", this.getClass().getSimpleName(), box_center_tracking_xcheck.toString(), base.getName());
- }
-
- }
- /**
- * Find the first non-ghost volume among parents.
- * @return mother object
- */
- public LCDDSurveyVolume getPhysMother() {
- //if(isDebug()) System.out.printf("%s: finding physical mother to %s\n", this.getClass().getSimpleName(), getName());
- if(mother==null) throw new RuntimeException("Trying to get phys mother but there is no mother!");
- if(mother instanceof LCDDGhostSurveyVolume) {
- return mother.getPhysMother();
- } else {
- //if(isDebug()) System.out.printf("%s: found a non-ghost volume: %s\n", this.getClass().getSimpleName(), mother.getName());
- return mother;
- }
- }
-
- public Volume getVolume() {
- return volume;
- }
- public void setVolume(Volume volume) {
- this.volume = volume;
- }
- public Box getBox() {
- return box;
- }
- public void setBox(Box b) {
- box = b;
- }
- public Position getPos() {
- return pos;
- }
- public void setPos(Position pos) {
- this.pos = pos;
- }
- public Rotation getRot() {
- return rot;
- }
- public void setRot(Rotation rot) {
- this.rot = rot;
- }
- public LCDDSurveyVolume getMother() {
- return mother;
- }
- public void setMother(LCDDSurveyVolume mother) {
- this.mother = mother;
- }
- public PhysVol getPhysVolume() {
- return physVolume;
- }
- public void setPhysVolume(PhysVol physVolume) {
- this.physVolume = physVolume;
- }
- public List<LCDDSurveyVolume> getDaughters() {
- return daughters;
- }
- public void addDaughter(LCDDSurveyVolume o) {
- getDaughters().add(o);
- }
- public String toString() {
+
+ //calculate the position in tracking volume separately as a xcheck
+ Hep3Vector box_center_tracking_xcheck = HPSTrackerBuilder.transformToTracking(box_center_base_local, base);
+ System.out.printf("%s: box_center_tracking_xcheck %s (for %s)\n", this.getClass().getSimpleName(), box_center_tracking_xcheck.toString(), base.getName());
+ }
+
+ }
+ /**
+ * Find the first non-ghost volume among parents.
+ * @return mother object
+ */
+ public LCDDSurveyVolume getPhysMother() {
+ //if(isDebug()) System.out.printf("%s: finding physical mother to %s\n", this.getClass().getSimpleName(), getName());
+ if(mother==null) throw new RuntimeException("Trying to get phys mother but there is no mother!");
+ if(mother instanceof LCDDGhostSurveyVolume) {
+ return mother.getPhysMother();
+ } else {
+ //if(isDebug()) System.out.printf("%s: found a non-ghost volume: %s\n", this.getClass().getSimpleName(), mother.getName());
+ return mother;
+ }
+ }
+
+ public Volume getVolume() {
+ return volume;
+ }
+ public void setVolume(Volume volume) {
+ this.volume = volume;
+ }
+ public Box getBox() {
+ return box;
+ }
+ public void setBox(Box b) {
+ box = b;
+ }
+ public Position getPos() {
+ return pos;
+ }
+ public void setPos(Position pos) {
+ this.pos = pos;
+ }
+ public Rotation getRot() {
+ return rot;
+ }
+ public void setRot(Rotation rot) {
+ this.rot = rot;
+ }
+ public LCDDSurveyVolume getMother() {
+ return mother;
+ }
+ public void setMother(LCDDSurveyVolume mother) {
+ this.mother = mother;
+ }
+ public PhysVol getPhysVolume() {
+ return physVolume;
+ }
+ public void setPhysVolume(PhysVol physVolume) {
+ this.physVolume = physVolume;
+ }
+ public List<LCDDSurveyVolume> getDaughters() {
+ return daughters;
+ }
+ public void addDaughter(LCDDSurveyVolume o) {
+ getDaughters().add(o);
+ }
+ public String toString() {
String s = getClass().getSimpleName() +": " + getName() + "\n";
if(getPos()!=null && getRot()!=null) {
double x = Double.valueOf(getPos().getAttributeValue("x"));
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/MilleParameter.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/MilleParameter.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/MilleParameter.java Wed Mar 9 11:43:24 2016
@@ -9,113 +9,113 @@
public class MilleParameter {
private static double corrScaleFactor = -1.;
- private int id;
- private double value;
- private double presigma;
- private static final Map<Integer,String> dMap;
- private static final Map<Integer,String> tMap;
- private static final Map<Integer,String> hMap;
- static {
- dMap = new HashMap<Integer,String>();
- dMap.put(1, "x");dMap.put(2, "y"); dMap.put(3, "z");
- tMap = new HashMap<Integer,String>();
- tMap.put(1, "");tMap.put(2, "r");
- hMap = new HashMap<Integer,String>();
- hMap.put(1, "t");hMap.put(2, "b");
- }
- public static final int half_offset = 10000;
- public static final int type_offset = 1000;
- public static final int dimension_offset = 100;
- public static enum Type {
- TRANSLATION(1), ROTATION(2);
- private int value;
- private Type(int value) {this.value = value;}
- public int getType() {return this.value;}
- };
-
- public MilleParameter(String line) {
- String[] vals = StringUtils.split(line);// line.split("\\s+");
- if(vals.length <3) {
- System.out.println("this line is ill-formatted (" + vals.length + ")");
- System.out.println(line);
- System.exit(1);
- }
- try {
- //for(String v : vals) System.out.println("\"" + v + "\"");
- setId(Integer.parseInt(vals[0]));
- setValue( corrScaleFactor * Double.parseDouble(vals[1]) );
- setPresigma(Double.parseDouble(vals[2]));
-
- } catch (NumberFormatException e) {
- System.out.println(vals[0] + " " + vals[1] + " " + vals[2]);
- throw new RuntimeException("problem parsing string ", e);
- }
- }
-
- public MilleParameter(int id, double value, double presigma) {
- setId(id);
- setValue(value);
- setPresigma(presigma);
- }
-
- public String getXMLName() {
- String d = dMap.get(getDim());
- String t = tMap.get(getType());
- String h = hMap.get(getHalf());
- int s = getSensor();
- return String.format("%s%s%d%s_align", t,d,s,h);
-
- }
+ private int id;
+ private double value;
+ private double presigma;
+ private static final Map<Integer,String> dMap;
+ private static final Map<Integer,String> tMap;
+ private static final Map<Integer,String> hMap;
+ static {
+ dMap = new HashMap<Integer,String>();
+ dMap.put(1, "x");dMap.put(2, "y"); dMap.put(3, "z");
+ tMap = new HashMap<Integer,String>();
+ tMap.put(1, "");tMap.put(2, "r");
+ hMap = new HashMap<Integer,String>();
+ hMap.put(1, "t");hMap.put(2, "b");
+ }
+ public static final int half_offset = 10000;
+ public static final int type_offset = 1000;
+ public static final int dimension_offset = 100;
+ public static enum Type {
+ TRANSLATION(1), ROTATION(2);
+ private int value;
+ private Type(int value) {this.value = value;}
+ public int getType() {return this.value;}
+ };
+
+ public MilleParameter(String line) {
+ String[] vals = StringUtils.split(line);// line.split("\\s+");
+ if(vals.length <3) {
+ System.out.println("this line is ill-formatted (" + vals.length + ")");
+ System.out.println(line);
+ System.exit(1);
+ }
+ try {
+ //for(String v : vals) System.out.println("\"" + v + "\"");
+ setId(Integer.parseInt(vals[0]));
+ setValue( corrScaleFactor * Double.parseDouble(vals[1]) );
+ setPresigma(Double.parseDouble(vals[2]));
+
+ } catch (NumberFormatException e) {
+ System.out.println(vals[0] + " " + vals[1] + " " + vals[2]);
+ throw new RuntimeException("problem parsing string ", e);
+ }
+ }
+
+ public MilleParameter(int id, double value, double presigma) {
+ setId(id);
+ setValue(value);
+ setPresigma(presigma);
+ }
+
+ public String getXMLName() {
+ String d = dMap.get(getDim());
+ String t = tMap.get(getType());
+ String h = hMap.get(getHalf());
+ int s = getSensor();
+ return String.format("%s%s%d%s_align", t,d,s,h);
+
+ }
- public int getDim() {
- int h = (int) (getHalf() * half_offset);
- int t = (int) (getType() * type_offset);
- return (int) Math.floor((id- h -t)/(double)dimension_offset);
- }
-
- public int getSensor() {
- int h = (int) (getHalf() * half_offset);
- int t = (int) (getType() * type_offset);
- int d = (int) (getDim() * dimension_offset);
- return (id - h - t -d);
- }
+ public int getDim() {
+ int h = (int) (getHalf() * half_offset);
+ int t = (int) (getType() * type_offset);
+ return (int) Math.floor((id- h -t)/(double)dimension_offset);
+ }
+
+ public int getSensor() {
+ int h = (int) (getHalf() * half_offset);
+ int t = (int) (getType() * type_offset);
+ int d = (int) (getDim() * dimension_offset);
+ return (id - h - t -d);
+ }
- public int getType() {
- int h = (int) (getHalf() * half_offset);
- return (int) Math.floor((id -h)/(double)type_offset);
- }
+ public int getType() {
+ int h = (int) (getHalf() * half_offset);
+ return (int) Math.floor((id -h)/(double)type_offset);
+ }
- public int getHalf() {
- return (int)Math.floor(id/(double)half_offset);
- }
+ public int getHalf() {
+ return (int)Math.floor(id/(double)half_offset);
+ }
- public int getId() {
- return id;
- }
+ public int getId() {
+ return id;
+ }
- public void setId(int id) {
- this.id = id;
- }
+ public void setId(int id) {
+ this.id = id;
+ }
- public double getValue() {
- return value;
- }
+ public double getValue() {
+ return value;
+ }
- public void setValue(double value) {
- this.value = value;
- }
+ public void setValue(double value) {
+ this.value = value;
+ }
- public double getPresigma() {
- return presigma;
- }
+ public double getPresigma() {
+ return presigma;
+ }
- public void setPresigma(double presigma) {
- this.presigma = presigma;
- }
-
- public String toString() {
- return String.format("Milleparameter id=%d half=%d type=%d dim=%d sensor=%d value=%f", this.getId(), this.getHalf(), this.getType(), this.getDim(), this.getSensor(), this.getValue());
- }
+ public void setPresigma(double presigma) {
+ this.presigma = presigma;
+ }
+
+ public String toString() {
+ return String.format("Milleparameter id=%d half=%d type=%d dim=%d sensor=%d value=%f", this.getId(), this.getHalf(), this.getType(), this.getDim(), this.getSensor(), this.getValue());
+ }
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyCoordinateSystem.java Wed Mar 9 11:43:24 2016
@@ -13,26 +13,26 @@
import org.lcsim.detector.Translation3D;
/**
- * Class describing a simple coordinate system used to define the {@link SurveyVolume}.
- *
- * @author Per Hansson Adrian <[log in to unmask]>
- */
- public class SurveyCoordinateSystem {
- private final boolean debug = false;
- private Hep3Vector origin;
- private Hep3Vector u;
- private Hep3Vector v;
- private Hep3Vector w;
+ * Class describing a simple coordinate system used to define the {@link SurveyVolume}.
+ *
+ * @author Per Hansson Adrian <[log in to unmask]>
+ */
+ public class SurveyCoordinateSystem {
+ private final boolean debug = false;
+ private Hep3Vector origin;
+ private Hep3Vector u;
+ private Hep3Vector v;
+ private Hep3Vector w;
-// public SurveyCoordinateSystem(Hep3Vector org, Hep3Vector unit_x, Hep3Vector unit_y, Hep3Vector unit_z) {
-// origin = org;
-// u = unit_x;
-// v = unit_y;
-// w = unit_z;
-// }
+// public SurveyCoordinateSystem(Hep3Vector org, Hep3Vector unit_x, Hep3Vector unit_y, Hep3Vector unit_z) {
+// origin = org;
+// u = unit_x;
+// v = unit_y;
+// w = unit_z;
+// }
-
- public SurveyCoordinateSystem(Hep3Vector ball, Hep3Vector vee, Hep3Vector flat) {
+
+ public SurveyCoordinateSystem(Hep3Vector ball, Hep3Vector vee, Hep3Vector flat) {
origin = ball;
Hep3Vector ball_to_vee = VecOp.sub(vee, ball);
u = VecOp.unit(ball_to_vee);
@@ -41,61 +41,61 @@
v = VecOp.cross(w, u);
check();
}
-
- private void check() {
- checkUnitLength();
- checkAngles();
- }
+
+ private void check() {
+ checkUnitLength();
+ checkAngles();
+ }
- private void checkUnitLength() {
- if(u.magnitude()-1>0.00001 || v.magnitude()-1>0.00001 || v.magnitude()-1>0.00001) {
- throw new RuntimeException("Error: the unit vectors of the coordinate system is ill-defined " + toString());
- }
- }
+ private void checkUnitLength() {
+ if(u.magnitude()-1>0.00001 || v.magnitude()-1>0.00001 || v.magnitude()-1>0.00001) {
+ throw new RuntimeException("Error: the unit vectors of the coordinate system is ill-defined " + toString());
+ }
+ }
- private void checkAngles() {
- if( (VecOp.dot(u, v)-1)>0.00001 || (VecOp.dot(u, w)-1)>0.00001 || (VecOp.dot(v, w)-1)>0.00001 ) {
- throw new RuntimeException("Error: the angles in coordinate system is ill-defined " + toString());
- }
- }
-
-
- /**
- * Transform this coordinate system to another one.
- * @param t
- */
- public void transform(Transform3D t) {
- Transform3D t_this = getTransformation();
- Hep3Vector v = t_this.getTranslation().getTranslationVector();
- Hep3Vector vrot = t.rotated(v);
- Hep3Vector vrottrans = t.translated(vrot);
- origin = vrottrans;
+ private void checkAngles() {
+ if( (VecOp.dot(u, v)-1)>0.00001 || (VecOp.dot(u, w)-1)>0.00001 || (VecOp.dot(v, w)-1)>0.00001 ) {
+ throw new RuntimeException("Error: the angles in coordinate system is ill-defined " + toString());
+ }
+ }
+
+
+ /**
+ * Transform this coordinate system to another one.
+ * @param t
+ */
+ public void transform(Transform3D t) {
+ Transform3D t_this = getTransformation();
+ Hep3Vector v = t_this.getTranslation().getTranslationVector();
+ Hep3Vector vrot = t.rotated(v);
+ Hep3Vector vrottrans = t.translated(vrot);
+ origin = vrottrans;
rotate(t.getRotation());
//System.out.printf("monkey transform\n");
//System.out.printf("v %s\n",v.toString());
//System.out.printf("vrot %s\n",vrot.toString());
//System.out.printf("vrottrans %s\n",vrottrans.toString());
- check();
- }
-
- public void rotate(IRotation3D r) {
- r.rotate(u);
- r.rotate(v);
- r.rotate(w);
- }
+ check();
+ }
+
+ public void rotate(IRotation3D r) {
+ r.rotate(u);
+ r.rotate(v);
+ r.rotate(w);
+ }
- public void translate(Hep3Vector translation) {
- // update origin with local translation in u,v,w
- //origin = VecOp.add(origin, translation);
- translate(new Translation3D(translation));
- }
+ public void translate(Hep3Vector translation) {
+ // update origin with local translation in u,v,w
+ //origin = VecOp.add(origin, translation);
+ translate(new Translation3D(translation));
+ }
- public void translate(Translation3D t) {
- origin = t.translated(getTransformation().getTranslation().getTranslationVector());
- }
+ public void translate(Translation3D t) {
+ origin = t.translated(getTransformation().getTranslation().getTranslationVector());
+ }
-
- public void rotateApache(Rotation r) {
+
+ public void rotateApache(Rotation r) {
if(debug) System.out.printf("%s: apply apache rotation to this coord system\n%s\n", getClass().getSimpleName(),toString());
this.u = new BasicHep3Vector(r.applyTo(new Vector3D(u.v())).toArray());
this.v = new BasicHep3Vector(r.applyTo(new Vector3D(v.v())).toArray());
@@ -104,52 +104,52 @@
}
public Hep3Vector origin() {
- return origin;
- }
- public Hep3Vector u() {
- return u;
- }
- public Hep3Vector v() {
- return v;
- }
- public Hep3Vector w() {
- return w;
- }
- public void u(Hep3Vector vec) {
+ return origin;
+ }
+ public Hep3Vector u() {
+ return u;
+ }
+ public Hep3Vector v() {
+ return v;
+ }
+ public Hep3Vector w() {
+ return w;
+ }
+ public void u(Hep3Vector vec) {
u = vec;
- }
+ }
public void v(Hep3Vector vec) {
v = vec;
}
public void w(Hep3Vector vec) {
w = vec;
}
-
+
public String toString() {
- String str = "origin " + origin.toString() + "\nu " + u.toString() + "\nv " + v.toString() + "\nw " + w.toString();
- return str;
+ String str = "origin " + origin.toString() + "\nu " + u.toString() + "\nv " + v.toString() + "\nw " + w.toString();
+ return str;
}
-
-
- /**
- * Find @ITransform3D to the coordinate system defined by the input.
- * @return resulting 3D transform
- */
- public Transform3D getTransformation() {
- // Find the transform between the two frames - use transform classes here (not really needed)
- Translation3D translation = new Translation3D(origin.x(), origin.y(), origin.z());
- //RotationGeant trackingToEnvelopeRotation = new RotationGeant(0, 0, 0);
- Rotation3D rotation = new Rotation3D(
- new BasicHep3Matrix(
- u.x(),v.x(),w.x(),
- u.y(),v.y(),w.y(),
- u.z(),v.z(),w.z()
- ));
- Transform3D envelopeToSupportTransform = new Transform3D(translation, rotation);
- return envelopeToSupportTransform;
- }
-
-
-
-
- }
+
+
+ /**
+ * Find @ITransform3D to the coordinate system defined by the input.
+ * @return resulting 3D transform
+ */
+ public Transform3D getTransformation() {
+ // Find the transform between the two frames - use transform classes here (not really needed)
+ Translation3D translation = new Translation3D(origin.x(), origin.y(), origin.z());
+ //RotationGeant trackingToEnvelopeRotation = new RotationGeant(0, 0, 0);
+ Rotation3D rotation = new Rotation3D(
+ new BasicHep3Matrix(
+ u.x(),v.x(),w.x(),
+ u.y(),v.y(),w.y(),
+ u.z(),v.z(),w.z()
+ ));
+ Transform3D envelopeToSupportTransform = new Transform3D(translation, rotation);
+ return envelopeToSupportTransform;
+ }
+
+
+
+
+ }
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolume.java Wed Mar 9 11:43:24 2016
@@ -20,66 +20,66 @@
*
*/
public abstract class SurveyVolume {
- protected boolean debug = false;
- private String name;
- private String material = "Vacuum";
- private SurveyVolume mother = null;
- protected List<SurveyVolume> referenceGeom = null;
- private SurveyCoordinateSystem coord;
- protected Hep3Vector ballPos;
- protected Hep3Vector veePos;
- protected Hep3Vector flatPos;
- private Hep3Vector center;
- private Hep3Vector boxDim;
- private AlignmentCorrection alignmentCorrections;
-
- public SurveyVolume(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection) {
- setName(name);
- setMother(m);
- setAlignmentCorrection(alignmentCorrection);
- }
-
- public SurveyVolume(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
- setName(name);
- setMother(m);
- setAlignmentCorrection(alignmentCorrection);
- addReferenceGeom(ref);
- }
-
- public SurveyVolume(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, List<SurveyVolume> ref) {
- setName(name);
- setMother(m);
- setAlignmentCorrection(alignmentCorrection);
- addReferenceGeom(ref);
- }
-
- protected abstract void setPos();
- protected abstract void setCenter();
- protected abstract void setBoxDim();
-
- /**
- *
- * Initialize the volume.
- * This needs to be called at the top level implementation of the {@link SurveyVolume} to properly setup
- * the coordinate systems. It takes care of applying user supplied custom transformations and alignment corrections
- * in the order given in the function below. That order must be preserved to get a uniform behavior.
- *
- */
- protected void init() {
- if(debug) System.out.printf("%s: init SurveyVolume %s\n",this.getClass().getSimpleName(),getName());
+ protected boolean debug = false;
+ private String name;
+ private String material = "Vacuum";
+ private SurveyVolume mother = null;
+ protected List<SurveyVolume> referenceGeom = null;
+ private SurveyCoordinateSystem coord;
+ protected Hep3Vector ballPos;
+ protected Hep3Vector veePos;
+ protected Hep3Vector flatPos;
+ private Hep3Vector center;
+ private Hep3Vector boxDim;
+ private AlignmentCorrection alignmentCorrections;
+
+ public SurveyVolume(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection) {
+ setName(name);
+ setMother(m);
+ setAlignmentCorrection(alignmentCorrection);
+ }
+
+ public SurveyVolume(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, SurveyVolume ref) {
+ setName(name);
+ setMother(m);
+ setAlignmentCorrection(alignmentCorrection);
+ addReferenceGeom(ref);
+ }
+
+ public SurveyVolume(String name, SurveyVolume m, AlignmentCorrection alignmentCorrection, List<SurveyVolume> ref) {
+ setName(name);
+ setMother(m);
+ setAlignmentCorrection(alignmentCorrection);
+ addReferenceGeom(ref);
+ }
+
+ protected abstract void setPos();
+ protected abstract void setCenter();
+ protected abstract void setBoxDim();
+
+ /**
+ *
+ * Initialize the volume.
+ * This needs to be called at the top level implementation of the {@link SurveyVolume} to properly setup
+ * the coordinate systems. It takes care of applying user supplied custom transformations and alignment corrections
+ * in the order given in the function below. That order must be preserved to get a uniform behavior.
+ *
+ */
+ protected void init() {
+ if(debug) System.out.printf("%s: init SurveyVolume %s\n",this.getClass().getSimpleName(),getName());
setPos();
- setCoord();
- applyReferenceTransformation();
- setCenter();
- setBoxDim();
- applyGenericCoordinateSystemCorrections();
- applyLocalAlignmentCorrections();
- if(debug) {
- //printCoordInfo();
- System.out.printf("%s: init of SurveyVolume %s DONE\n",this.getClass().getSimpleName(),getName());
- }
- }
-
+ setCoord();
+ applyReferenceTransformation();
+ setCenter();
+ setBoxDim();
+ applyGenericCoordinateSystemCorrections();
+ applyLocalAlignmentCorrections();
+ if(debug) {
+ //printCoordInfo();
+ System.out.printf("%s: init of SurveyVolume %s DONE\n",this.getClass().getSimpleName(),getName());
+ }
+ }
+
private void applySurvey(Element node) {
@@ -378,254 +378,254 @@
* Apply a generic correction to the coordinate system of this volume.
*/
protected void applyGenericCoordinateSystemCorrections() {
- //do nothing here unless overridden
-
- }
-
- /**
- * Applies a user supplied reference transformation to the module.
- * This is convenient as it allows for intermediary "virtual" mother volumes to be used
- * in referencing a volume to it's physcial mother volume.
- */
- protected void applyReferenceTransformation() {
-
-
- if(referenceGeom!=null) {
-
- if(debug) System.out.printf("%s: apply reference transformation for %s\n",this.getClass().getSimpleName(),getName());
-
-
- if(debug) System.out.printf("%s: coord system before %d ref transformations:\n%s\n",this.getClass().getSimpleName(),referenceGeom.size(),getCoord().toString());
-
- for(SurveyVolume ref : referenceGeom) {
-
- if(debug) {
- System.out.printf("%s: coord system before ref %s transform:\n%s\n",this.getClass().getSimpleName(),ref.getName(),getCoord().toString());
- System.out.printf("%s: Ref %s coord\n%s\n",this.getClass().getSimpleName(), ref.getName(),ref.getCoord().toString());
- }
-
- getCoord().transform(ref.getCoord().getTransformation());
-
- if(debug) System.out.printf("%s: coord system after ref %s transform:\n%s\n",this.getClass().getSimpleName(),ref.getName(),getCoord().toString());
-
- }
-
- if(debug) System.out.printf("%s: coord system after ref transformations:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
-
- } else {
-
- if(debug) System.out.printf("%s: no reference transformation exists for %s\n",this.getClass().getSimpleName(),getName());
-
- }
-
- }
-
- /**
- * Apply @link AlignmentCorrection to the volume if they are supplied.
- *
- */
- private void applyLocalAlignmentCorrections() {
-
- // Apply alignment corrections to local coordinate system that is already built
- boolean debug_local = false;
- if(this.coord==null)
- throw new RuntimeException("no coordinate system was set before trying to apply alignment corrections.");
-
- if(alignmentCorrections!=null) {
-
-
- if(alignmentCorrections.getNode()!=null) {
-
- if(debug_local || debug) System.out.printf("%s: Apply survey results to %s\n",this.getClass().getSimpleName(),this.getName());
-
- applySurvey(alignmentCorrections.getNode());
-
- if(debug_local || debug) System.out.printf("%s: DONE Apply survey results to %s\n",this.getClass().getSimpleName(),this.getName());
-
- }
-
-
-
-
-
- if(debug_local || debug) System.out.printf("%s: Apply alignment corrections to %s\n",this.getClass().getSimpleName(),this.getName());
-
- // translate
- if(alignmentCorrections.getTranslation()!=null) {
-
- if(debug_local || debug) System.out.printf("%s: Apply local translation %s\n", this.getClass().getSimpleName(),alignmentCorrections.getTranslation().toString());
-
- // rotate into mother coordinate system
- Hep3Vector translation_mother = getCoord().getTransformation().rotated(alignmentCorrections.getTranslation());
-
- if(debug_local || debug) System.out.printf("%s: after rotation apply translation %s to coordinate system\n", this.getClass().getSimpleName(),translation_mother.toString());
-
- //apply translation
- getCoord().translate(translation_mother);
-
- } else {
- if(debug_local || debug) System.out.printf("%s: No translation to coordinate system\n", this.getClass().getSimpleName());
- }
-
- // rotate
- if(alignmentCorrections.getRotation()!=null) {
-
+ //do nothing here unless overridden
+
+ }
+
+ /**
+ * Applies a user supplied reference transformation to the module.
+ * This is convenient as it allows for intermediary "virtual" mother volumes to be used
+ * in referencing a volume to it's physcial mother volume.
+ */
+ protected void applyReferenceTransformation() {
+
+
+ if(referenceGeom!=null) {
+
+ if(debug) System.out.printf("%s: apply reference transformation for %s\n",this.getClass().getSimpleName(),getName());
+
+
+ if(debug) System.out.printf("%s: coord system before %d ref transformations:\n%s\n",this.getClass().getSimpleName(),referenceGeom.size(),getCoord().toString());
+
+ for(SurveyVolume ref : referenceGeom) {
+
+ if(debug) {
+ System.out.printf("%s: coord system before ref %s transform:\n%s\n",this.getClass().getSimpleName(),ref.getName(),getCoord().toString());
+ System.out.printf("%s: Ref %s coord\n%s\n",this.getClass().getSimpleName(), ref.getName(),ref.getCoord().toString());
+ }
+
+ getCoord().transform(ref.getCoord().getTransformation());
+
+ if(debug) System.out.printf("%s: coord system after ref %s transform:\n%s\n",this.getClass().getSimpleName(),ref.getName(),getCoord().toString());
+
+ }
+
+ if(debug) System.out.printf("%s: coord system after ref transformations:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
+
+ } else {
+
+ if(debug) System.out.printf("%s: no reference transformation exists for %s\n",this.getClass().getSimpleName(),getName());
+
+ }
+
+ }
+
+ /**
+ * Apply @link AlignmentCorrection to the volume if they are supplied.
+ *
+ */
+ private void applyLocalAlignmentCorrections() {
+
+ // Apply alignment corrections to local coordinate system that is already built
+ boolean debug_local = false;
+ if(this.coord==null)
+ throw new RuntimeException("no coordinate system was set before trying to apply alignment corrections.");
+
+ if(alignmentCorrections!=null) {
+
+
+ if(alignmentCorrections.getNode()!=null) {
+
+ if(debug_local || debug) System.out.printf("%s: Apply survey results to %s\n",this.getClass().getSimpleName(),this.getName());
+
+ applySurvey(alignmentCorrections.getNode());
+
+ if(debug_local || debug) System.out.printf("%s: DONE Apply survey results to %s\n",this.getClass().getSimpleName(),this.getName());
+
+ }
+
+
+
+
+
+ if(debug_local || debug) System.out.printf("%s: Apply alignment corrections to %s\n",this.getClass().getSimpleName(),this.getName());
+
+ // translate
+ if(alignmentCorrections.getTranslation()!=null) {
+
+ if(debug_local || debug) System.out.printf("%s: Apply local translation %s\n", this.getClass().getSimpleName(),alignmentCorrections.getTranslation().toString());
+
+ // rotate into mother coordinate system
+ Hep3Vector translation_mother = getCoord().getTransformation().rotated(alignmentCorrections.getTranslation());
+
+ if(debug_local || debug) System.out.printf("%s: after rotation apply translation %s to coordinate system\n", this.getClass().getSimpleName(),translation_mother.toString());
+
+ //apply translation
+ getCoord().translate(translation_mother);
+
+ } else {
+ if(debug_local || debug) System.out.printf("%s: No translation to coordinate system\n", this.getClass().getSimpleName());
+ }
+
+ // rotate
+ if(alignmentCorrections.getRotation()!=null) {
+
if(debug_local || debug) {
System.out.printf("%s: Apply rotation matrix:\n", this.getClass().getSimpleName());
TransformationUtils.printMatrix(alignmentCorrections.getRotation().getMatrix());
System.out.printf("%s: coord system before:\n%s\n", this.getClass().getSimpleName(),getCoord().toString());
}
-
- // correct rotation of the local unit vectors
- Vector3D u_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(1,0,0));
- Vector3D v_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(0,1,0));
- Vector3D w_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(0,0,1));
-
- // rotate the local unit vectors to the mother coordinates
-
- Hep3Vector u_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(u_rot_local.toArray()));
- Hep3Vector v_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(v_rot_local.toArray()));
- Hep3Vector w_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(w_rot_local.toArray()));
+
+ // correct rotation of the local unit vectors
+ Vector3D u_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(1,0,0));
+ Vector3D v_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(0,1,0));
+ Vector3D w_rot_local = alignmentCorrections.getRotation().applyTo(new Vector3D(0,0,1));
+
+ // rotate the local unit vectors to the mother coordinates
+
+ Hep3Vector u_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(u_rot_local.toArray()));
+ Hep3Vector v_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(v_rot_local.toArray()));
+ Hep3Vector w_rot = getCoord().getTransformation().getRotation().rotated(new BasicHep3Vector(w_rot_local.toArray()));
- getCoord().u(u_rot);
- getCoord().v(v_rot);
- getCoord().w(w_rot);
+ getCoord().u(u_rot);
+ getCoord().v(v_rot);
+ getCoord().w(w_rot);
if(debug_local || debug) {
System.out.printf("%s: coord system after:\n%s\n", this.getClass().getSimpleName(),getCoord().toString());
}
-
-
-
- } else {
- if(debug_local || debug) System.out.printf("%s: No rotation to coordinate system\n", this.getClass().getSimpleName());
- }
-
- if(debug_local || debug) System.out.printf("%s: coordinate system after alignment corrections:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
-
- } else {
+
+
+
+ } else {
+ if(debug_local || debug) System.out.printf("%s: No rotation to coordinate system\n", this.getClass().getSimpleName());
+ }
+
+ if(debug_local || debug) System.out.printf("%s: coordinate system after alignment corrections:\n%s\n",this.getClass().getSimpleName(),getCoord().toString());
+
+ } else {
if(debug_local || debug) System.out.printf("%s: no alignment corrections exist for %s\n",this.getClass().getSimpleName(),this.getName());
- }
-
- }
-
- private void setAlignmentCorrection(AlignmentCorrection alignmentCorrection) {
+ }
+
+ }
+
+ private void setAlignmentCorrection(AlignmentCorrection alignmentCorrection) {
this.alignmentCorrections = alignmentCorrection;
}
public void setBallPos(double x, double y, double z) {
- ballPos = new BasicHep3Vector(x,y,z);
- }
- public void setVeePos(double x, double y, double z) {
- veePos = new BasicHep3Vector(x,y,z);
- }
- public void setFlatPos(double x, double y, double z) {
- flatPos = new BasicHep3Vector(x,y,z);
- }
- public Hep3Vector getBallPos() {
- return ballPos;
- }
- public Hep3Vector getVeePos() {
- return veePos;
- }
- public Hep3Vector getFlatPos() {
- return flatPos;
- }
- public void setCoord() {
- if(ballPos==null || veePos==null || flatPos==null) {
- throw new RuntimeException("Need to set ball, vee and flat before building coord system!");
- }
-
- coord = new SurveyCoordinateSystem(ballPos, veePos, flatPos);
-
- if(this.debug) {
- System.out.printf("%s: setCoord \n%s\n", this.getClass().getSimpleName(), coord.toString());
- }
- }
- public SurveyCoordinateSystem getCoord() {
- if(coord == null) {
- throw new RuntimeException("Need to setCoord!");
- }
- return coord;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Hep3Vector getCenter() {
- return center;
- }
- public void setCenter(Hep3Vector center) {
- this.center = center;
- }
- public void setCenter(double x, double y, double z) {
- this.center = new BasicHep3Vector(x,y,z);
- }
- public Hep3Vector getBoxDim() {
- return boxDim;
- }
- public void setBoxDim(double x, double y, double z) {
- this.boxDim = new BasicHep3Vector(x,y,z);
- }
- public SurveyVolume getMother() {
- return mother;
- }
- public void setMother(SurveyVolume mother) {
- this.mother = mother;
- }
- public void addReferenceGeom(SurveyVolume refGeom) {
- if(refGeom!=null) { // check that it's not a dummy call
- if(referenceGeom == null) {
- referenceGeom = new ArrayList<SurveyVolume>();
- }
- referenceGeom.add(refGeom);
- }
- }
- public void addReferenceGeom(List<SurveyVolume> refGeomList) {
- if(referenceGeom == null) {
- referenceGeom = new ArrayList<SurveyVolume>();
- }
- referenceGeom.addAll(refGeomList);
- }
- public void printSurveyPos() {
- if(debug) {
- System.out.printf("%s: Survey pos for %s:\n",getClass().getSimpleName(),getName());
- System.out.printf("%s: ballPos %s\n",getClass().getSimpleName(), ballPos.toString());
- System.out.printf("%s: veePos %s\n",getClass().getSimpleName(), veePos.toString());
- System.out.printf("%s: flatPos %s\n",getClass().getSimpleName(), flatPos.toString());
- }
- }
- public String getMaterial() {
- return material;
- }
- public void setMaterial(String material) {
- this.material = material;
- }
- public String toString() {
- String s = "==\n" + getName() + " with mother " + (getMother()==null?"<no mother>":getMother().getName()) + ":\n";
- if( getCenter()!=null) s += "Center of box: " + getCenter().toString() + "\n";
+ ballPos = new BasicHep3Vector(x,y,z);
+ }
+ public void setVeePos(double x, double y, double z) {
+ veePos = new BasicHep3Vector(x,y,z);
+ }
+ public void setFlatPos(double x, double y, double z) {
+ flatPos = new BasicHep3Vector(x,y,z);
+ }
+ public Hep3Vector getBallPos() {
+ return ballPos;
+ }
+ public Hep3Vector getVeePos() {
+ return veePos;
+ }
+ public Hep3Vector getFlatPos() {
+ return flatPos;
+ }
+ public void setCoord() {
+ if(ballPos==null || veePos==null || flatPos==null) {
+ throw new RuntimeException("Need to set ball, vee and flat before building coord system!");
+ }
+
+ coord = new SurveyCoordinateSystem(ballPos, veePos, flatPos);
+
+ if(this.debug) {
+ System.out.printf("%s: setCoord \n%s\n", this.getClass().getSimpleName(), coord.toString());
+ }
+ }
+ public SurveyCoordinateSystem getCoord() {
+ if(coord == null) {
+ throw new RuntimeException("Need to setCoord!");
+ }
+ return coord;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public Hep3Vector getCenter() {
+ return center;
+ }
+ public void setCenter(Hep3Vector center) {
+ this.center = center;
+ }
+ public void setCenter(double x, double y, double z) {
+ this.center = new BasicHep3Vector(x,y,z);
+ }
+ public Hep3Vector getBoxDim() {
+ return boxDim;
+ }
+ public void setBoxDim(double x, double y, double z) {
+ this.boxDim = new BasicHep3Vector(x,y,z);
+ }
+ public SurveyVolume getMother() {
+ return mother;
+ }
+ public void setMother(SurveyVolume mother) {
+ this.mother = mother;
+ }
+ public void addReferenceGeom(SurveyVolume refGeom) {
+ if(refGeom!=null) { // check that it's not a dummy call
+ if(referenceGeom == null) {
+ referenceGeom = new ArrayList<SurveyVolume>();
+ }
+ referenceGeom.add(refGeom);
+ }
+ }
+ public void addReferenceGeom(List<SurveyVolume> refGeomList) {
+ if(referenceGeom == null) {
+ referenceGeom = new ArrayList<SurveyVolume>();
+ }
+ referenceGeom.addAll(refGeomList);
+ }
+ public void printSurveyPos() {
+ if(debug) {
+ System.out.printf("%s: Survey pos for %s:\n",getClass().getSimpleName(),getName());
+ System.out.printf("%s: ballPos %s\n",getClass().getSimpleName(), ballPos.toString());
+ System.out.printf("%s: veePos %s\n",getClass().getSimpleName(), veePos.toString());
+ System.out.printf("%s: flatPos %s\n",getClass().getSimpleName(), flatPos.toString());
+ }
+ }
+ public String getMaterial() {
+ return material;
+ }
+ public void setMaterial(String material) {
+ this.material = material;
+ }
+ public String toString() {
+ String s = "==\n" + getName() + " with mother " + (getMother()==null?"<no mother>":getMother().getName()) + ":\n";
+ if( getCenter()!=null) s += "Center of box: " + getCenter().toString() + "\n";
if( getBoxDim()!=null) s += "Box dimensions: " + getBoxDim().toString() + "\n";
- if(this.coord==null) s += " No coord system \n";
- else {
- s += getName() + " origin " + getCoord().origin() + " u " + getCoord().u()+ " v " + getCoord().v()+ " w " + getCoord().w();
- }
+ if(this.coord==null) s += " No coord system \n";
+ else {
+ s += getName() + " origin " + getCoord().origin() + " u " + getCoord().u()+ " v " + getCoord().v()+ " w " + getCoord().w();
+ }
s += "AlignmentCorrections: \n";
- if(this.alignmentCorrections!=null) {
- s += "Milleparameters: ";
- if(this.alignmentCorrections.getMilleParameters()!=null) {
- for(MilleParameter mp : this.alignmentCorrections.getMilleParameters()) s += mp.getId() + " ";
- } else {
- s += "no MP params associated.";
- }
- s += "(" + this.getName() + ")" + " \n";
- } else {
- s+= " no alignment corrections associated.\n";
- }
- SurveyVolume m = getMother();
- while(m!=null) {
+ if(this.alignmentCorrections!=null) {
+ s += "Milleparameters: ";
+ if(this.alignmentCorrections.getMilleParameters()!=null) {
+ for(MilleParameter mp : this.alignmentCorrections.getMilleParameters()) s += mp.getId() + " ";
+ } else {
+ s += "no MP params associated.";
+ }
+ s += "(" + this.getName() + ")" + " \n";
+ } else {
+ s+= " no alignment corrections associated.\n";
+ }
+ SurveyVolume m = getMother();
+ while(m!=null) {
Hep3Vector origin_m = HPSTrackerBuilder.transformToParent(new BasicHep3Vector(0, 0, 0), this, m.getName());
String unitVecStr = "";
if(getCoord()!=null) {
@@ -638,12 +638,12 @@
//origin_m = VecOp.mult(0.0393701, origin_m);
//s += String.format("%s origin in %s : (%.4f %.4f %.4f) (inch)\n",getName(), m.getName(), origin_m.x(),origin_m.y(),origin_m.z());
m = m.getMother();
- }
-
-
- return s;
- }
-
-
-
+ }
+
+
+ return s;
+ }
+
+
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolumeImpl.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolumeImpl.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolumeImpl.java Wed Mar 9 11:43:24 2016
@@ -21,7 +21,7 @@
public abstract void setPositionAndRotation(SurveyVolume base);
public String getName() {
- return surveyVolume.getName();
+ return surveyVolume.getName();
}
protected Hep3Vector getBoxDim() {
@@ -33,7 +33,7 @@
}
public boolean isDebug() {
- return debug;
+ return debug;
}
public abstract String toString();
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolumeVisualization.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolumeVisualization.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SurveyVolumeVisualization.java Wed Mar 9 11:43:24 2016
@@ -7,14 +7,14 @@
* @author Per Hansson Adrian <[log in to unmask]>
*/
public class SurveyVolumeVisualization {
- protected String visName = "";
- public SurveyVolumeVisualization() {}
- public String getVisName() {
- return visName;
- }
- protected void setVisName(String visName) {
- this.visName = visName;
- }
-
-
+ protected String visName = "";
+ public SurveyVolumeVisualization() {}
+ public String getVisName() {
+ return visName;
+ }
+ protected void setVisName(String visName) {
+ this.visName = visName;
+ }
+
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SvtAlignmentConstantsReader.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SvtAlignmentConstantsReader.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/SvtAlignmentConstantsReader.java Wed Mar 9 11:43:24 2016
@@ -14,16 +14,16 @@
* @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
*/
public class SvtAlignmentConstantsReader {
-
- private SvtAlignmentConstantsReader() {
- }
+
+ private SvtAlignmentConstantsReader() {
+ }
- /**
- * Read SVT alignment constants from the conditions database table <i>svt_alignments</i> and create a list of
- * <code>MilleParameter</code> objects from it.
- *
- * @return the Millepede parameter list
- */
+ /**
+ * Read SVT alignment constants from the conditions database table <i>svt_alignments</i> and create a list of
+ * <code>MilleParameter</code> objects from it.
+ *
+ * @return the Millepede parameter list
+ */
static List<MilleParameter> readMilleParameters() {
final DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSMuonCalorimeter2.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSMuonCalorimeter2.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSMuonCalorimeter2.java Wed Mar 9 11:43:24 2016
@@ -8,13 +8,13 @@
public class HPSMuonCalorimeter2 extends LCDDSubdetector
{
- HPSMuonCalorimeter2(Element e) throws JDOMException
- {
- super(e);
- }
+ HPSMuonCalorimeter2(Element e) throws JDOMException
+ {
+ super(e);
+ }
- void addToLCDD(LCDD lcdd, SensitiveDetector sens) throws JDOMException
- {
+ void addToLCDD(LCDD lcdd, SensitiveDetector sens) throws JDOMException
+ {
String name = node.getAttributeValue("name");
System.out.println("HPSMuonCalorimeter2.addToLCDD - " + name);
int id = node.getAttribute("id").getIntValue();
@@ -22,7 +22,7 @@
Element parameters = node.getChild("parameters");
if (parameters == null) {
- throw new RuntimeException("parameters element missing");
+ throw new RuntimeException("parameters element missing");
}
double frontFaceToTarget = parameters.getAttribute("front_face_to_target").getDoubleValue();
@@ -40,16 +40,16 @@
System.out.println("stripSpacingZ = " + stripSpacingZ);
for (Object layerObject : node.getChildren("layer")) {
- Element layerElement = (Element)layerObject;
- int layerId = layerElement.getAttribute("id").getIntValue();
- System.out.println("layer = " + layerId);
- for (Object sliceObject : layerElement.getChildren("slice")) {
- Element sliceElement = (Element)sliceObject;
- if (sliceElement.getAttribute("thickness") != null) {
- double thickness = sliceElement.getAttribute("thickness").getDoubleValue();
- System.out.println("slice thickness = " + thickness);
- }
- }
+ Element layerElement = (Element)layerObject;
+ int layerId = layerElement.getAttribute("id").getIntValue();
+ System.out.println("layer = " + layerId);
+ for (Object sliceObject : layerElement.getChildren("slice")) {
+ Element sliceElement = (Element)sliceObject;
+ if (sliceElement.getAttribute("thickness") != null) {
+ double thickness = sliceElement.getAttribute("thickness").getDoubleValue();
+ System.out.println("slice thickness = " + thickness);
+ }
+ }
}
- }
+ }
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014.java Wed Mar 9 11:43:24 2016
@@ -30,58 +30,58 @@
*/
public class HPSTestRunTracker2014 extends HPSTracker2014Base
{
- public HPSTestRunTracker2014(Element node) throws JDOMException
- {
- super(node);
- }
-
- /* (non-Javadoc)
- * @see org.lcsim.geometry.compact.converter.lcdd.HPSTracker2014Base#initializeBuilder(org.lcsim.geometry.compact.converter.lcdd.util.LCDD, org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector)
- */
- protected HPSTrackerLCDDBuilder initializeBuilder(LCDD lcdd, SensitiveDetector sens) {
- HPSTrackerLCDDBuilder b = new HPSTestRunTracker2014LCDDBuilder(_debug,node,lcdd,sens);
- return b;
- }
-
-
-
- /* (non-Javadoc)
+ public HPSTestRunTracker2014(Element node) throws JDOMException
+ {
+ super(node);
+ }
+
+ /* (non-Javadoc)
+ * @see org.lcsim.geometry.compact.converter.lcdd.HPSTracker2014Base#initializeBuilder(org.lcsim.geometry.compact.converter.lcdd.util.LCDD, org.lcsim.geometry.compact.converter.lcdd.util.SensitiveDetector)
+ */
+ protected HPSTrackerLCDDBuilder initializeBuilder(LCDD lcdd, SensitiveDetector sens) {
+ HPSTrackerLCDDBuilder b = new HPSTestRunTracker2014LCDDBuilder(_debug,node,lcdd,sens);
+ return b;
+ }
+
+
+
+ /* (non-Javadoc)
* @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase#getModuleNumber(org.lcsim.geometry.compact.converter.JavaSurveyVolume)
*/
protected int getModuleNumber(String surveyVolume) {
return HPSTrackerBuilder.getHalfFromName(surveyVolume).equals("top") ? 0 : 1;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
- private void makeExample(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample ----");
-
- }
-
-
-
- String volName = "example";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisX = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(1., 0., 0.);
+
+
+
+
+
+
+
+
+
+
+
+
+
+ private void makeExample(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample ----");
+
+ }
+
+
+
+ String volName = "example";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisX = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(1., 0., 0.);
org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisY = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0., 1., 0.);
org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisZ = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0., 0., 1.);
@@ -131,11 +131,11 @@
Rotation rot = new Rotation(volName + "_rotation",0,0,0);
lcdd.add(pos);
lcdd.add(rot);
-
-
+
+
PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
+ System.out.println("Created physical vomume " + basePV.getName());
}
@@ -151,153 +151,153 @@
lcdd.add(subRot);
PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
+ System.out.println("Created physical vomume " + subBasePV.getName());
}
-
+
lcdd.add(volumeSub);
volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
+
lcdd.add(volume);
-
-
-
-
- }
-
-
- private void makeExample2(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample2 ----");
-
- }
-
- String volName = "example2";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisX = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(1., 0., 0.);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisY = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0., 1., 0.);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisZ = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0., 0., 1.);
-
- double alpha1 = PI / 4.;
- double alpha2 = PI / 4.;
- double alpha3 = -PI / 4.;
-
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r123 =
- new org.apache.commons.math3.geometry.euclidean.threed.Rotation(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ,
- alpha1,
- alpha2,
- alpha3);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisXPrime = r123.applyTo(axisX);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisYPrime = r123.applyTo(axisY);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisZPrime = r123.applyTo(axisZ);
-
- //if(_debug) System.out.println("axisYPrime: " + axisYPrime);
- //if(_debug) System.out.println("axisZPrime: " + axisZPrime);
-
-
-
- //double [] rotations = r123.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
-
- //double [] rotations = r12.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
- double [] rotations = r123.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5,0,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
-
- private void makeExample3(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample3 ----");
-
- }
-
- String volName = "example3";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
- /*
-
- TestRunModuleL13: survey positions before ref support_plate_top transform
- Survey pos for module_L1t:
- ballPos [ 25.000, 676.10, -4.3500]
- veePos [ 95.000, 676.10, -4.3500]
- flatPos [ 60.000, 670.10, -4.3500]
- TestRunModuleL13: Ref support_plate_top coord
- Coordinate system:
- origin [ 40.314, 142.71, 138.40]
- u [ 0.99955, 0.030000, 0.0000]
- v [ -0.030000, 0.99955, 0.0000]
- w [ 0.0000, -0.0000, 1.0000]
- TestRunModuleL13: survey positions after ref support_plate_top transform
- Survey pos for module_L1t:
- ballPos [ 45.020, 819.25, 134.05]
- veePos [ 114.99, 821.35, 134.05]
- flatPos [ 80.184, 814.31, 134.05]
- TestRunModuleL13: coordinate system:
- Coordinate system:
- origin [ 45.020, 819.25, 134.05]
- u [ 0.99955, 0.030000, 0.0000]
- v [ 0.030000, -0.99955, 0.0000]
- w [ 0.0000, 0.0000, -1.0000]
- TestRunModuleL13: translation:
- [ 45.020, 819.25, 134.05]
- TestRunModuleL13: rotation:
- [
- 0.999549894704642 0.030000133265350216 0.0
- 0.030000133265350216 -0.999549894704642 0.0
- 0.0 0.0 -1.0
-
- ]
-
-
-
- LCDDBaseGeom: set position and rotation for volume module_L1t
+
+
+
+
+ }
+
+
+ private void makeExample2(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample2 ----");
+
+ }
+
+ String volName = "example2";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisX = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(1., 0., 0.);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisY = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0., 1., 0.);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisZ = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(0., 0., 1.);
+
+ double alpha1 = PI / 4.;
+ double alpha2 = PI / 4.;
+ double alpha3 = -PI / 4.;
+
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r123 =
+ new org.apache.commons.math3.geometry.euclidean.threed.Rotation(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ,
+ alpha1,
+ alpha2,
+ alpha3);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisXPrime = r123.applyTo(axisX);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisYPrime = r123.applyTo(axisY);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D axisZPrime = r123.applyTo(axisZ);
+
+ //if(_debug) System.out.println("axisYPrime: " + axisYPrime);
+ //if(_debug) System.out.println("axisZPrime: " + axisZPrime);
+
+
+
+ //double [] rotations = r123.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+
+ //double [] rotations = r12.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+ double [] rotations = r123.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5,0,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+
+ private void makeExample3(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample3 ----");
+
+ }
+
+ String volName = "example3";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+ /*
+
+ TestRunModuleL13: survey positions before ref support_plate_top transform
+ Survey pos for module_L1t:
+ ballPos [ 25.000, 676.10, -4.3500]
+ veePos [ 95.000, 676.10, -4.3500]
+ flatPos [ 60.000, 670.10, -4.3500]
+ TestRunModuleL13: Ref support_plate_top coord
+ Coordinate system:
+ origin [ 40.314, 142.71, 138.40]
+ u [ 0.99955, 0.030000, 0.0000]
+ v [ -0.030000, 0.99955, 0.0000]
+ w [ 0.0000, -0.0000, 1.0000]
+ TestRunModuleL13: survey positions after ref support_plate_top transform
+ Survey pos for module_L1t:
+ ballPos [ 45.020, 819.25, 134.05]
+ veePos [ 114.99, 821.35, 134.05]
+ flatPos [ 80.184, 814.31, 134.05]
+ TestRunModuleL13: coordinate system:
+ Coordinate system:
+ origin [ 45.020, 819.25, 134.05]
+ u [ 0.99955, 0.030000, 0.0000]
+ v [ 0.030000, -0.99955, 0.0000]
+ w [ 0.0000, 0.0000, -1.0000]
+ TestRunModuleL13: translation:
+ [ 45.020, 819.25, 134.05]
+ TestRunModuleL13: rotation:
+ [
+ 0.999549894704642 0.030000133265350216 0.0
+ 0.030000133265350216 -0.999549894704642 0.0
+ 0.0 0.0 -1.0
+
+ ]
+
+
+
+ LCDDBaseGeom: set position and rotation for volume module_L1t
getEulerAngles: u [ 0.030000, -0.99955, 0.0000] v[ 0.0000, 0.0000, -1.0000] -> [ 0.0000, 1.0000, 0.0000] [ 0.0000, 0.0000, 1.0000]
Input: u {0.03; -1; 0} v {0; 0; -1} u' {0; 1; 0} v' {0; 0; 1}
rot matrix:
@@ -314,388 +314,388 @@
LCDDBaseGeom: rot [Element: <rotation/>]
LCDDBaseGeom: DONE constructing LCDD object module_L1t
-
-
- */
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- Hep3Vector u_L1 = new BasicHep3Vector(0.99955, 0.030000, 0.0000);
- Hep3Vector v_L1 = new BasicHep3Vector(0.030000, -0.99955, 0.0000);
- Hep3Vector w_L1 = new BasicHep3Vector(0.0000, 0.0000, -1.0000);
-
-
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u_L1.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v_L1.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w_L1.v());
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
- Hep3Vector euler_angles = TransformationUtils.getCardanAngles(v_L1, w_L1, v, w);
-
- //Get the generic rotation
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(v_3D_L1,w_3D_L1,v_3D, w_3D);
- //Get the angles
- double rotations[] = r.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
- if(_debug) {
- System.out.println("getEulerAngles gives euler_angles: " + euler_angles.toString());
- System.out.println("manual gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
- }
-
- if((rotations[0]-euler_angles.x())>0.00001 || (rotations[1]-euler_angles.y())>0.00001 || (rotations[2]-euler_angles.z())>0.00001) {
- //System.("closing the loop in apache rotation didn't work!");
- //throw new RuntimeException("closing the loop in apache rotation didn't work!");
- }
-
-
-
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*4,0,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("HybridVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
- private void makeExample4(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample4 ----");
-
- }
-
- String volName = "example4";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
-
-
- //set up a rotation about the X axis
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r1 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(u_3D, -1.0*Math.PI);
-
- // find y' and z'
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r1.applyTo(u_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r1.applyTo(v_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r1.applyTo(w_3D);
-
-
- double [] rotations = r1.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
-
- if(_debug) {
- System.out.println("u_3D: " + u_3D.toString());
- System.out.println("v_3D: " + v_3D.toString());
- System.out.println("w_3D: " + w_3D.toString());
- r1.toString();
- System.out.println("u_3D_p: " + u_3D_p.toString());
- System.out.println("v_3D_p: " + v_3D_p.toString());
- System.out.println("w_3D_p: " + w_3D_p.toString());
-
- System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
-
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*2,0,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
- private void makeExample5(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample5 ----");
-
- }
-
- String volName = "example5";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
-
-
- //set up a rotation about the X axis
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r1 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(u_3D, -1.0*Math.PI);
-
- // find y' and z'
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r1.applyTo(u_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r1.applyTo(v_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r1.applyTo(w_3D);
-
- // set up a rotation about the Z axis
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r3 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(w_3D_p, -0.03);
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r13 = r3.applyTo(r1);
-
-
- // find y' and z'
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_pp = r13.applyTo(u_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_pp = r13.applyTo(v_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_pp = r13.applyTo(w_3D);
- //org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_pp = r13.applyTo(u_3D_p);
- //org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_pp = r13.applyTo(v_3D_p);
- //org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_pp = r13.applyTo(w_3D_p);
-
- double [] rotations = r13.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
-
- if(_debug) {
- System.out.println("u_3D: " + u_3D.toString());
- System.out.println("v_3D: " + v_3D.toString());
- System.out.println("w_3D: " + w_3D.toString());
- r1.toString();
- System.out.println("u_3D_p: " + u_3D_p.toString());
- System.out.println("v_3D_p: " + v_3D_p.toString());
- System.out.println("w_3D_p: " + w_3D_p.toString());
- r13.toString();
- System.out.println("u_3D_pp: " + u_3D_pp.toString());
- System.out.println("v_3D_pp: " + v_3D_pp.toString());
- System.out.println("w_3D_pp: " + w_3D_pp.toString());
- System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
-
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*3,0,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
-
-
- private void makeExample5b(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample5b ----");
-
- }
-
- String volName = "example5b";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
-
- // set up a rotation about the Z axis
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r3 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(w_3D, -0.03);
-
- // find y' and z'
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r3.applyTo(u_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r3.applyTo(v_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r3.applyTo(w_3D);
-
-
-
- double [] rotations = r3.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
-
- if(_debug) {
- System.out.println("u_3D: " + u_3D.toString());
- System.out.println("v_3D: " + v_3D.toString());
- System.out.println("w_3D: " + w_3D.toString());
- r3.toString();
- System.out.println("u_3D_p: " + u_3D_p.toString());
- System.out.println("v_3D_p: " + v_3D_p.toString());
- System.out.println("w_3D_p: " + w_3D_p.toString());
- System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
-
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*3,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-1.5,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
- private void makeExample3b(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample3b ----");
-
- }
-
- String volName = "example3b";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
- /*
-
- TestRunModuleL13: survey positions
+
+
+ */
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ Hep3Vector u_L1 = new BasicHep3Vector(0.99955, 0.030000, 0.0000);
+ Hep3Vector v_L1 = new BasicHep3Vector(0.030000, -0.99955, 0.0000);
+ Hep3Vector w_L1 = new BasicHep3Vector(0.0000, 0.0000, -1.0000);
+
+
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u_L1.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v_L1.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w_L1.v());
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+ Hep3Vector euler_angles = TransformationUtils.getCardanAngles(v_L1, w_L1, v, w);
+
+ //Get the generic rotation
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(v_3D_L1,w_3D_L1,v_3D, w_3D);
+ //Get the angles
+ double rotations[] = r.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+ if(_debug) {
+ System.out.println("getEulerAngles gives euler_angles: " + euler_angles.toString());
+ System.out.println("manual gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+ }
+
+ if((rotations[0]-euler_angles.x())>0.00001 || (rotations[1]-euler_angles.y())>0.00001 || (rotations[2]-euler_angles.z())>0.00001) {
+ //System.("closing the loop in apache rotation didn't work!");
+ //throw new RuntimeException("closing the loop in apache rotation didn't work!");
+ }
+
+
+
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*4,0,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("HybridVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+ private void makeExample4(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample4 ----");
+
+ }
+
+ String volName = "example4";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+
+
+ //set up a rotation about the X axis
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r1 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(u_3D, -1.0*Math.PI);
+
+ // find y' and z'
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r1.applyTo(u_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r1.applyTo(v_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r1.applyTo(w_3D);
+
+
+ double [] rotations = r1.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+
+ if(_debug) {
+ System.out.println("u_3D: " + u_3D.toString());
+ System.out.println("v_3D: " + v_3D.toString());
+ System.out.println("w_3D: " + w_3D.toString());
+ r1.toString();
+ System.out.println("u_3D_p: " + u_3D_p.toString());
+ System.out.println("v_3D_p: " + v_3D_p.toString());
+ System.out.println("w_3D_p: " + w_3D_p.toString());
+
+ System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*2,0,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+ private void makeExample5(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample5 ----");
+
+ }
+
+ String volName = "example5";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+
+
+ //set up a rotation about the X axis
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r1 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(u_3D, -1.0*Math.PI);
+
+ // find y' and z'
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r1.applyTo(u_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r1.applyTo(v_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r1.applyTo(w_3D);
+
+ // set up a rotation about the Z axis
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r3 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(w_3D_p, -0.03);
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r13 = r3.applyTo(r1);
+
+
+ // find y' and z'
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_pp = r13.applyTo(u_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_pp = r13.applyTo(v_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_pp = r13.applyTo(w_3D);
+ //org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_pp = r13.applyTo(u_3D_p);
+ //org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_pp = r13.applyTo(v_3D_p);
+ //org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_pp = r13.applyTo(w_3D_p);
+
+ double [] rotations = r13.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+
+ if(_debug) {
+ System.out.println("u_3D: " + u_3D.toString());
+ System.out.println("v_3D: " + v_3D.toString());
+ System.out.println("w_3D: " + w_3D.toString());
+ r1.toString();
+ System.out.println("u_3D_p: " + u_3D_p.toString());
+ System.out.println("v_3D_p: " + v_3D_p.toString());
+ System.out.println("w_3D_p: " + w_3D_p.toString());
+ r13.toString();
+ System.out.println("u_3D_pp: " + u_3D_pp.toString());
+ System.out.println("v_3D_pp: " + v_3D_pp.toString());
+ System.out.println("w_3D_pp: " + w_3D_pp.toString());
+ System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*3,0,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+
+
+ private void makeExample5b(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample5b ----");
+
+ }
+
+ String volName = "example5b";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+
+ // set up a rotation about the Z axis
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r3 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(w_3D, -0.03);
+
+ // find y' and z'
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r3.applyTo(u_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r3.applyTo(v_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r3.applyTo(w_3D);
+
+
+
+ double [] rotations = r3.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+
+ if(_debug) {
+ System.out.println("u_3D: " + u_3D.toString());
+ System.out.println("v_3D: " + v_3D.toString());
+ System.out.println("w_3D: " + w_3D.toString());
+ r3.toString();
+ System.out.println("u_3D_p: " + u_3D_p.toString());
+ System.out.println("v_3D_p: " + v_3D_p.toString());
+ System.out.println("w_3D_p: " + w_3D_p.toString());
+ System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*3,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-1.5,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+ private void makeExample3b(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample3b ----");
+
+ }
+
+ String volName = "example3b";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+ /*
+
+ TestRunModuleL13: survey positions
Survey pos for module_L1b:
ballPos [ 25.000, 661.10, 4.3500]
veePos [ 95.000, 661.10, 4.3500]
@@ -732,11 +732,11 @@
]
-
-
-
-
- LCDDBaseGeom: set position and rotation for volume module_L1b
+
+
+
+
+ LCDDBaseGeom: set position and rotation for volume module_L1b
getEulerAngles: u [ -0.030000, 0.99955, 0.0000] v[ 0.0000, 0.0000, 1.0000] -> [ 0.0000, 1.0000, 0.0000] [ 0.0000, 0.0000, 1.0000]
Input: u {-0.03; 1; 0} v {0; 0; 1} u' {0; 1; 0} v' {0; 0; 1}
rot matrix:
@@ -753,484 +753,484 @@
LCDDBaseGeom: rot [Element: <rotation/>]
LCDDBaseGeom: DONE constructing LCDD object module_L1b
-
-
-
-
- */
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- Hep3Vector u_L1 = new BasicHep3Vector(0.99955, 0.030000, 0.0000);
- Hep3Vector v_L1 = new BasicHep3Vector(-0.030000, 0.99955, 0.0000);
- Hep3Vector w_L1 = new BasicHep3Vector(0.0000, 0.0000, 1.0000);
-
-
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u_L1.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v_L1.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w_L1.v());
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
- Hep3Vector euler_angles = TransformationUtils.getCardanAngles(v_L1, w_L1, v, w);
-
- //Get the generic rotation
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(v_3D_L1,w_3D_L1,v_3D, w_3D);
- //Get the angles
- double rotations[] = r.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
- if(_debug) {
- System.out.println("getEulerAngles gives euler_angles: " + euler_angles.toString());
- System.out.println("manual gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
- }
-
- if((rotations[0]-euler_angles.x())>0.00001 || (rotations[1]-euler_angles.y())>0.00001 || (rotations[2]-euler_angles.z())>0.00001) {
- //throw new RuntimeException("closing the loop in apache rotation didn't work!");
- }
-
-
-
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*4,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-1.5,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("HybridVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
- private void makeExample6(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample6 ----");
-
- }
-
- String volName = "example6";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
- double [] rotations = {-0.5*Math.PI,0,0};
-
-
- if(_debug) {
-
-
- System.out.println("manual set lcdd angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
-
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-2,0,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
-
- private void makeExample66(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample66 ----");
-
- }
-
- String volName = "example66";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
-
-
- //set up a rotation about the X axis
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r1 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(u_3D, -0.5*Math.PI);
-
- // find y' and z'
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r1.applyTo(u_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r1.applyTo(v_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r1.applyTo(w_3D);
-
-
- double [] rotations = r1.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
-
- if(_debug) {
- System.out.println("u_3D: " + u_3D.toString());
- System.out.println("v_3D: " + v_3D.toString());
- System.out.println("w_3D: " + w_3D.toString());
- r1.toString();
- System.out.println("u_3D_p: " + u_3D_p.toString());
- System.out.println("v_3D_p: " + v_3D_p.toString());
- System.out.println("w_3D_p: " + w_3D_p.toString());
-
- System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
-
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-4,0,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
-
-
-
-
- private void makeExample7(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample7 ----");
-
- }
-
- String volName = "example7";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
- double [] rotations = {-0.5*Math.PI,0,-0.25*Math.PI};
-
-
- if(_debug) {
-
-
- System.out.println("manual set lcdd angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
-
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-2,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-1,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
-
- private void makeExample77(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample77 ----");
-
- }
-
- String volName = "example77";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
-
-
- //set up a rotation about the X axis
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r1 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(u_3D, -0.5*Math.PI);
-
- // find y' and z'
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r1.applyTo(u_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r1.applyTo(v_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r1.applyTo(w_3D);
-
-
- //set up a rotation about the Z xis
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r3 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(w_3D_p, -0.25*Math.PI);
-
- org.apache.commons.math3.geometry.euclidean.threed.Rotation r13 = r3.applyTo(r1);
-
- // find y'' and z''
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_pp = r13.applyTo(u_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_pp = r13.applyTo(v_3D);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_pp = r13.applyTo(w_3D);
-
- // find y'' and z'' (cross-check)
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_pp_2 = r3.applyTo(u_3D_p);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_pp_2 = r3.applyTo(v_3D_p);
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_pp_2 = r3.applyTo(w_3D_p);
-
-
- double [] rotations = r13.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
-
-
- if(_debug) {
- System.out.println("u_3D: " + u_3D.toString());
- System.out.println("v_3D: " + v_3D.toString());
- System.out.println("w_3D: " + w_3D.toString());
- r1.toString();
- System.out.println("u_3D_p: " + u_3D_p.toString());
- System.out.println("v_3D_p: " + v_3D_p.toString());
- System.out.println("w_3D_p: " + w_3D_p.toString());
- r13.toString();
- System.out.println("u_3D_pp: " + u_3D_pp.toString());
- System.out.println("v_3D_pp: " + v_3D_pp.toString());
- System.out.println("w_3D_pp: " + w_3D_pp.toString());
-
- System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
-
- System.out.println("u_3D_pp_2: " + u_3D_pp_2.toString());
- System.out.println("v_3D_pp_2: " + v_3D_pp_2.toString());
- System.out.println("w_3D_pp_2: " + w_3D_pp_2.toString());
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-4,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-1,0);
- Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
-
-
- private void makeExample8(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample8 ----");
-
- }
-
- String volName = "example8";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
- Hep3Vector u_L1 = new BasicHep3Vector(1/Math.sqrt(2),0,1/Math.sqrt(2));
- Hep3Vector v_L1 = new BasicHep3Vector(-1/Math.sqrt(2),0,1/Math.sqrt(2));
- Hep3Vector w_L1 = new BasicHep3Vector(0,-1,0);
-
- Hep3Vector euler_angles = TransformationUtils.getCardanAngles(u_L1, v_L1, u, v);
-
-
+
+
+
+
+ */
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ Hep3Vector u_L1 = new BasicHep3Vector(0.99955, 0.030000, 0.0000);
+ Hep3Vector v_L1 = new BasicHep3Vector(-0.030000, 0.99955, 0.0000);
+ Hep3Vector w_L1 = new BasicHep3Vector(0.0000, 0.0000, 1.0000);
+
+
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u_L1.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v_L1.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_L1 = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w_L1.v());
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+ Hep3Vector euler_angles = TransformationUtils.getCardanAngles(v_L1, w_L1, v, w);
+
+ //Get the generic rotation
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(v_3D_L1,w_3D_L1,v_3D, w_3D);
+ //Get the angles
+ double rotations[] = r.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+ if(_debug) {
+ System.out.println("getEulerAngles gives euler_angles: " + euler_angles.toString());
+ System.out.println("manual gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+ }
+
+ if((rotations[0]-euler_angles.x())>0.00001 || (rotations[1]-euler_angles.y())>0.00001 || (rotations[2]-euler_angles.z())>0.00001) {
+ //throw new RuntimeException("closing the loop in apache rotation didn't work!");
+ }
+
+
+
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*4,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-1.5,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("HybridVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+ private void makeExample6(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample6 ----");
+
+ }
+
+ String volName = "example6";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+ double [] rotations = {-0.5*Math.PI,0,0};
+
+
+ if(_debug) {
+
+
+ System.out.println("manual set lcdd angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-2,0,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+
+ private void makeExample66(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample66 ----");
+
+ }
+
+ String volName = "example66";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+
+
+ //set up a rotation about the X axis
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r1 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(u_3D, -0.5*Math.PI);
+
+ // find y' and z'
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r1.applyTo(u_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r1.applyTo(v_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r1.applyTo(w_3D);
+
+
+ double [] rotations = r1.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+
+ if(_debug) {
+ System.out.println("u_3D: " + u_3D.toString());
+ System.out.println("v_3D: " + v_3D.toString());
+ System.out.println("w_3D: " + w_3D.toString());
+ r1.toString();
+ System.out.println("u_3D_p: " + u_3D_p.toString());
+ System.out.println("v_3D_p: " + v_3D_p.toString());
+ System.out.println("w_3D_p: " + w_3D_p.toString());
+
+ System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-4,0,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+
+
+
+
+ private void makeExample7(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample7 ----");
+
+ }
+
+ String volName = "example7";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+ double [] rotations = {-0.5*Math.PI,0,-0.25*Math.PI};
+
+
+ if(_debug) {
+
+
+ System.out.println("manual set lcdd angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-2,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-1,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+
+ private void makeExample77(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample77 ----");
+
+ }
+
+ String volName = "example77";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+
+
+ //set up a rotation about the X axis
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r1 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(u_3D, -0.5*Math.PI);
+
+ // find y' and z'
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_p = r1.applyTo(u_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_p = r1.applyTo(v_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_p = r1.applyTo(w_3D);
+
+
+ //set up a rotation about the Z xis
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r3 = new org.apache.commons.math3.geometry.euclidean.threed.Rotation(w_3D_p, -0.25*Math.PI);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Rotation r13 = r3.applyTo(r1);
+
+ // find y'' and z''
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_pp = r13.applyTo(u_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_pp = r13.applyTo(v_3D);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_pp = r13.applyTo(w_3D);
+
+ // find y'' and z'' (cross-check)
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D_pp_2 = r3.applyTo(u_3D_p);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D_pp_2 = r3.applyTo(v_3D_p);
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D_pp_2 = r3.applyTo(w_3D_p);
+
+
+ double [] rotations = r13.getAngles(org.apache.commons.math3.geometry.euclidean.threed.RotationOrder.XYZ);
+
+
+ if(_debug) {
+ System.out.println("u_3D: " + u_3D.toString());
+ System.out.println("v_3D: " + v_3D.toString());
+ System.out.println("w_3D: " + w_3D.toString());
+ r1.toString();
+ System.out.println("u_3D_p: " + u_3D_p.toString());
+ System.out.println("v_3D_p: " + v_3D_p.toString());
+ System.out.println("w_3D_p: " + w_3D_p.toString());
+ r13.toString();
+ System.out.println("u_3D_pp: " + u_3D_pp.toString());
+ System.out.println("v_3D_pp: " + v_3D_pp.toString());
+ System.out.println("w_3D_pp: " + w_3D_pp.toString());
+
+ System.out.println("gives euler_angles: (" + rotations[0] + "," + rotations[1] + "," + rotations[2] + ")");
+
+ System.out.println("u_3D_pp_2: " + u_3D_pp_2.toString());
+ System.out.println("v_3D_pp_2: " + v_3D_pp_2.toString());
+ System.out.println("w_3D_pp_2: " + w_3D_pp_2.toString());
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-4,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-1,0);
+ Rotation rot = new Rotation(volName + "_rotation",rotations[0],rotations[1],rotations[2]);
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+
+
+ private void makeExample8(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
if(_debug) {
-
-
- System.out.println("euler angles " + euler_angles.toString());
-
+ System.out.println("--- makeExample8 ----");
+
}
-
-
- //apply to unit vector
-
+ String volName = "example8";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+ Hep3Vector u_L1 = new BasicHep3Vector(1/Math.sqrt(2),0,1/Math.sqrt(2));
+ Hep3Vector v_L1 = new BasicHep3Vector(-1/Math.sqrt(2),0,1/Math.sqrt(2));
+ Hep3Vector w_L1 = new BasicHep3Vector(0,-1,0);
+
+ Hep3Vector euler_angles = TransformationUtils.getCardanAngles(u_L1, v_L1, u, v);
+
+
+
+
+ if(_debug) {
+
+
+ System.out.println("euler angles " + euler_angles.toString());
+
+ }
+
+
+
+ //apply to unit vector
+
Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-1,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-3,0);
Rotation rot = new Rotation(volName + "_rotation",euler_angles.x(),euler_angles.y(),euler_angles.z());
lcdd.add(pos);
lcdd.add(rot);
-
-
+
+
PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
+ System.out.println("Created physical vomume " + basePV.getName());
}
-
+
@@ -1244,197 +1244,197 @@
lcdd.add(subRot);
PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
+ System.out.println("Created physical vomume " + subBasePV.getName());
}
-
+
lcdd.add(volumeSub);
volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
lcdd.add(volume);
-
-
-
-
- }
-
-
-
- private void makeExample9(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample9 ----");
-
- }
-
- String volName = "example9";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
- Hep3Vector u_L1 = new BasicHep3Vector(1,0,0);
- Hep3Vector v_L1 = new BasicHep3Vector(0,0,1);
- Hep3Vector w_L1 = new BasicHep3Vector(0,-1,0);
-
- Hep3Vector euler_angles = TransformationUtils.getCardanAngles(u_L1, v_L1, u, v);
-
-
-
-
- if(_debug) {
-
-
- System.out.println("euler angles " + euler_angles.toString());
-
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-1,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-2,0);
- Rotation rot = new Rotation(volName + "_rotation",euler_angles.x(),euler_angles.y(),euler_angles.z());
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
-
-
-
-
-
- private void makeExample10(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
-
-
- if(_debug) {
- System.out.println("--- makeExample10 ----");
-
- }
-
- String volName = "example10";
- Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
- lcdd.add(box);
- Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
-
-
- Hep3Vector u = new BasicHep3Vector(1,0,0);
- Hep3Vector v = new BasicHep3Vector(0,1,0);
- Hep3Vector w = new BasicHep3Vector(0,0,1);
-
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
- org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
-
- Hep3Vector u_L1 = new BasicHep3Vector(1/Math.sqrt(2),1/Math.sqrt(2),0);
- Hep3Vector v_L1 = new BasicHep3Vector(0,0,1);
- Hep3Vector w_L1 = new BasicHep3Vector(1/Math.sqrt(2),-1/Math.sqrt(2),0);
-
- Hep3Vector euler_angles = TransformationUtils.getCardanAngles(u_L1, v_L1, u, v);
-
-
-
-
- if(_debug) {
-
-
- System.out.println("euler angles " + euler_angles.toString());
-
- }
-
-
-
- //apply to unit vector
-
- Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-2,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-2,0);
- Rotation rot = new Rotation(volName + "_rotation",euler_angles.x(),euler_angles.y(),euler_angles.z());
- lcdd.add(pos);
- lcdd.add(rot);
-
-
- PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
- if(_debug) {
- System.out.println("Created physical vomume " + basePV.getName());
- }
-
-
-
-
- volName = volName + "_sub";
- Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
- lcdd.add(boxSub);
- Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
- Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
- Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
- lcdd.add(subPos);
- lcdd.add(subRot);
- PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
- if(_debug) {
- System.out.println("Created physical vomume " + subBasePV.getName());
- }
-
- lcdd.add(volumeSub);
- volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
-
- lcdd.add(volume);
-
-
-
-
- }
+
+
+
+
+ }
+
+
+
+ private void makeExample9(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample9 ----");
+
+ }
+
+ String volName = "example9";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+ Hep3Vector u_L1 = new BasicHep3Vector(1,0,0);
+ Hep3Vector v_L1 = new BasicHep3Vector(0,0,1);
+ Hep3Vector w_L1 = new BasicHep3Vector(0,-1,0);
+
+ Hep3Vector euler_angles = TransformationUtils.getCardanAngles(u_L1, v_L1, u, v);
+
+
+
+
+ if(_debug) {
+
+
+ System.out.println("euler angles " + euler_angles.toString());
+
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-1,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-2,0);
+ Rotation rot = new Rotation(volName + "_rotation",euler_angles.x(),euler_angles.y(),euler_angles.z());
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
+
+
+
+
+
+ private void makeExample10(LCDD lcdd, SensitiveDetector sens) throws JDOMException {
+
+
+ if(_debug) {
+ System.out.println("--- makeExample10 ----");
+
+ }
+
+ String volName = "example10";
+ Box box = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/4.0);
+ lcdd.add(box);
+ Volume volume = new Volume(volName + "_volume", box, lcdd.getMaterial("Vacuum"));
+
+
+ Hep3Vector u = new BasicHep3Vector(1,0,0);
+ Hep3Vector v = new BasicHep3Vector(0,1,0);
+ Hep3Vector w = new BasicHep3Vector(0,0,1);
+
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D u_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(u.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D v_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(v.v());
+ org.apache.commons.math3.geometry.euclidean.threed.Vector3D w_3D = new org.apache.commons.math3.geometry.euclidean.threed.Vector3D(w.v());
+
+ Hep3Vector u_L1 = new BasicHep3Vector(1/Math.sqrt(2),1/Math.sqrt(2),0);
+ Hep3Vector v_L1 = new BasicHep3Vector(0,0,1);
+ Hep3Vector w_L1 = new BasicHep3Vector(1/Math.sqrt(2),-1/Math.sqrt(2),0);
+
+ Hep3Vector euler_angles = TransformationUtils.getCardanAngles(u_L1, v_L1, u, v);
+
+
+
+
+ if(_debug) {
+
+
+ System.out.println("euler angles " + euler_angles.toString());
+
+ }
+
+
+
+ //apply to unit vector
+
+ Position pos = new Position(volName + "_position",HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width*1.5*-2,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length*-2,0);
+ Rotation rot = new Rotation(volName + "_rotation",euler_angles.x(),euler_angles.y(),euler_angles.z());
+ lcdd.add(pos);
+ lcdd.add(rot);
+
+
+ PhysVol basePV = new PhysVol(volume, lcdd.pickMotherVolume(this), pos, rot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + basePV.getName());
+ }
+
+
+
+
+ volName = volName + "_sub";
+ Box boxSub = new Box(volName + "Box", HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_width, HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0 , HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/8.0);
+ lcdd.add(boxSub);
+ Volume volumeSub = new Volume(volName + "_volume", boxSub, lcdd.getMaterial("Vacuum"));
+ Position subPos = new Position(volName + "_position",0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/4.0*2-HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_length/8.0,HPSTestRunTracker2014GeometryDefinition.TrackerEnvelope.base_height/16.0);
+ Rotation subRot = new Rotation(volName + "_rotation",0,0,0);
+ lcdd.add(subPos);
+ lcdd.add(subRot);
+ PhysVol subBasePV = new PhysVol(volumeSub, volume, subPos, subRot);
+ if(_debug) {
+ System.out.println("Created physical vomume " + subBasePV.getName());
+ }
+
+ lcdd.add(volumeSub);
+ volumeSub.setVisAttributes(lcdd.getVisAttributes("SensorVis"));
+
+ lcdd.add(volume);
+
+
+
+
+ }
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker.java Wed Mar 9 11:43:24 2016
@@ -69,7 +69,7 @@
// layer
for (Iterator i = node.getChildren("layer").iterator(); i.hasNext();)
{
- // Modules are numbered from 0 starting in each layer.
+ // Modules are numbered from 0 starting in each layer.
int moduleNumber = 0;
Element layerElement = (Element) i.next();
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2.java Wed Mar 9 11:43:24 2016
@@ -53,79 +53,79 @@
}
// Place modules within the tracking volume.
- private void createModulePlacements(LCDD lcdd, int sysId, String subdetName) throws DataConversionException {
- //Volume trackingVolume = lcdd.getTrackingVolume();
- Volume momVolume = lcdd.pickMotherVolume(this);
- // Loop over layers.
+ private void createModulePlacements(LCDD lcdd, int sysId, String subdetName) throws DataConversionException {
+ //Volume trackingVolume = lcdd.getTrackingVolume();
+ Volume momVolume = lcdd.pickMotherVolume(this);
+ // Loop over layers.
for (Iterator i = node.getChildren("layer").iterator(); i.hasNext();) {
- Element layerElement = (Element)i.next();
- int layerNumber = layerElement.getAttribute("id").getIntValue();
- // Loop over modules within layer.
- for (Iterator j = layerElement.getChildren("module_placement").iterator(); j.hasNext();) {
-
- Element modulePlacementElement = (Element)j.next();
- String moduleName = modulePlacementElement.getAttributeValue("name");
- int moduleNumber = modulePlacementElement.getAttribute("id").getIntValue();
-
- // Get the position and rotation parameters. All must be explicitly specified.
- double x, y, z;
- double rx, ry, rz;
- x = modulePlacementElement.getAttribute("x").getDoubleValue();
- y = modulePlacementElement.getAttribute("y").getDoubleValue();
- z = modulePlacementElement.getAttribute("z").getDoubleValue();
- rx = modulePlacementElement.getAttribute("rx").getDoubleValue();
- ry = modulePlacementElement.getAttribute("ry").getDoubleValue();
- rz = modulePlacementElement.getAttribute("rz").getDoubleValue();
-
- // Place the module with position and rotation from above.
- String modulePlacementName = subdetName + "_" + moduleName + "_layer" + layerNumber + "_module" + moduleNumber;
- Position p = new Position(modulePlacementName + "_position", x, y, z);
- Rotation r = new Rotation(modulePlacementName + "_rotation", rx, ry, rz);
- lcdd.add(p);
- lcdd.add(r);
- //PhysVol modulePhysVol = new PhysVol(modules.get(moduleName), trackingVolume, p, r);
- PhysVol modulePhysVol = new PhysVol(modules.get(moduleName), momVolume, p, r);
-
- // Add identifier values to the placement volume.
- modulePhysVol.addPhysVolID("system", sysId);
- modulePhysVol.addPhysVolID("barrel", 0);
- modulePhysVol.addPhysVolID("layer", layerNumber);
- modulePhysVol.addPhysVolID("module", moduleNumber);
- }
- }
- }
+ Element layerElement = (Element)i.next();
+ int layerNumber = layerElement.getAttribute("id").getIntValue();
+ // Loop over modules within layer.
+ for (Iterator j = layerElement.getChildren("module_placement").iterator(); j.hasNext();) {
+
+ Element modulePlacementElement = (Element)j.next();
+ String moduleName = modulePlacementElement.getAttributeValue("name");
+ int moduleNumber = modulePlacementElement.getAttribute("id").getIntValue();
+
+ // Get the position and rotation parameters. All must be explicitly specified.
+ double x, y, z;
+ double rx, ry, rz;
+ x = modulePlacementElement.getAttribute("x").getDoubleValue();
+ y = modulePlacementElement.getAttribute("y").getDoubleValue();
+ z = modulePlacementElement.getAttribute("z").getDoubleValue();
+ rx = modulePlacementElement.getAttribute("rx").getDoubleValue();
+ ry = modulePlacementElement.getAttribute("ry").getDoubleValue();
+ rz = modulePlacementElement.getAttribute("rz").getDoubleValue();
+
+ // Place the module with position and rotation from above.
+ String modulePlacementName = subdetName + "_" + moduleName + "_layer" + layerNumber + "_module" + moduleNumber;
+ Position p = new Position(modulePlacementName + "_position", x, y, z);
+ Rotation r = new Rotation(modulePlacementName + "_rotation", rx, ry, rz);
+ lcdd.add(p);
+ lcdd.add(r);
+ //PhysVol modulePhysVol = new PhysVol(modules.get(moduleName), trackingVolume, p, r);
+ PhysVol modulePhysVol = new PhysVol(modules.get(moduleName), momVolume, p, r);
+
+ // Add identifier values to the placement volume.
+ modulePhysVol.addPhysVolID("system", sysId);
+ modulePhysVol.addPhysVolID("barrel", 0);
+ modulePhysVol.addPhysVolID("layer", layerNumber);
+ modulePhysVol.addPhysVolID("module", moduleNumber);
+ }
+ }
+ }
// Create the module logical volumes.
- private void createModules(LCDD lcdd, SensitiveDetector sd) {
+ private void createModules(LCDD lcdd, SensitiveDetector sd) {
for (Iterator i = node.getChildren("module").iterator(); i.hasNext();) {
Element module = (Element) i.next();
String moduleName = module.getAttributeValue("name");
moduleParameters.put(moduleName, new ModuleParameters(module));
modules.put(moduleName, makeModule(moduleParameters.get(moduleName), sd, lcdd));
}
- }
-
- private Volume makeModule(ModuleParameters params, SensitiveDetector sd, LCDD lcdd) {
- double thickness = params.getThickness();
- double x, y;
- // x = params.getDimension(0);
- // y = params.getDimension(1);
- y = params.getDimension(0); // Y is in X plane in world coordinates.
- x = params.getDimension(1); // X is in Y plane in world coordinates.
- // System.out.println("making module with x = " + x + " and y = " + y);
- Box box = new Box(params.getName() + "Box", x, y, thickness);
- lcdd.add(box);
-
- Volume moduleVolume = new Volume(params.getName() + "Volume", box, vacuum);
- makeModuleComponents(moduleVolume, params, sd, lcdd);
- lcdd.add(moduleVolume);
-
- if (params.getVis() != null) {
- moduleVolume.setVisAttributes(lcdd.getVisAttributes(params.getVis()));
- }
-
- return moduleVolume;
- }
+ }
+
+ private Volume makeModule(ModuleParameters params, SensitiveDetector sd, LCDD lcdd) {
+ double thickness = params.getThickness();
+ double x, y;
+ // x = params.getDimension(0);
+ // y = params.getDimension(1);
+ y = params.getDimension(0); // Y is in X plane in world coordinates.
+ x = params.getDimension(1); // X is in Y plane in world coordinates.
+ // System.out.println("making module with x = " + x + " and y = " + y);
+ Box box = new Box(params.getName() + "Box", x, y, thickness);
+ lcdd.add(box);
+
+ Volume moduleVolume = new Volume(params.getName() + "Volume", box, vacuum);
+ makeModuleComponents(moduleVolume, params, sd, lcdd);
+ lcdd.add(moduleVolume);
+
+ if (params.getVis() != null) {
+ moduleVolume.setVisAttributes(lcdd.getVisAttributes(params.getVis()));
+ }
+
+ return moduleVolume;
+ }
private void makeModuleComponents(Volume moduleVolume, ModuleParameters moduleParameters, SensitiveDetector sd, LCDD lcdd) {
Box envelope = (Box) lcdd.getSolid(moduleVolume.getSolidRef());
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014.java Wed Mar 9 11:43:24 2016
@@ -61,7 +61,7 @@
return moduleNumber;
}
-
+
}
Modified: java/trunk/detector-model/src/main/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.java
=============================================================================
--- java/trunk/detector-model/src/main/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.java (original)
+++ java/trunk/detector-model/src/main/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.java Wed Mar 9 11:43:24 2016
@@ -9,21 +9,21 @@
public class HPSTestRunTracker2014 extends AbstractTracker {
- public HPSTestRunTracker2014(Element node) throws JDOMException
- {
- super(node);
- }
+ public HPSTestRunTracker2014(Element node) throws JDOMException
+ {
+ super(node);
+ }
- public void appendHepRep(HepRepFactory factory, HepRep heprep)
- {
+ public void appendHepRep(HepRepFactory factory, HepRep heprep)
+ {
DetectorElementToHepRepConverter.convert(getDetectorElement(), factory, heprep, -1, false, getVisAttributes().getColor());
- }
-
- public boolean isEndcap() {
- return false;
- }
-
- public boolean isBarrel() {
- return true;
- }
+ }
+
+ public boolean isEndcap() {
+ return false;
+ }
+
+ public boolean isBarrel() {
+ return true;
+ }
}
Modified: java/trunk/detector-model/src/test/java/org/lcsim/detector/converter/compact/HPSTracker2ConverterTest.java
=============================================================================
--- java/trunk/detector-model/src/test/java/org/lcsim/detector/converter/compact/HPSTracker2ConverterTest.java (original)
+++ java/trunk/detector-model/src/test/java/org/lcsim/detector/converter/compact/HPSTracker2ConverterTest.java Wed Mar 9 11:43:24 2016
@@ -36,8 +36,8 @@
private static final int TOTAL_NUMBER_OF_STEREO_LAYERS = 10;
private static final String SUBDETECTOR_NAME = "Tracker";
- public static final int NUMBER_OF_READOUT_STRIPS = 639;
- public static final int NUMBER_OF_SENSE_STRIPS = 1277;
+ public static final int NUMBER_OF_READOUT_STRIPS = 639;
+ public static final int NUMBER_OF_SENSE_STRIPS = 1277;
//-----------------//
//-----------------//
@@ -74,12 +74,12 @@
for(HpsSiSensor sensor : sensors) {
assertTrue("[ " + this.getClass().getSimpleName() + " ]: Sensor is of wrong type: " + sensor.getClass().getSimpleName(),
sensor instanceof HpsSiSensor);
- assertTrue("[ " + this.getClass().getSimpleName() + " ]: Wrong number of readout electrodes found.",
- sensor.getReadoutElectrodes(ChargeCarrier.HOLE).getNCells() == NUMBER_OF_READOUT_STRIPS);
-
- assertTrue("[ " + this.getClass().getSimpleName() + " ]: Wrong number of sense electrodes found.",
- sensor.getSenseElectrodes(ChargeCarrier.HOLE).getNCells() == NUMBER_OF_SENSE_STRIPS);
- LOGGER.info(sensor.toString());
+ assertTrue("[ " + this.getClass().getSimpleName() + " ]: Wrong number of readout electrodes found.",
+ sensor.getReadoutElectrodes(ChargeCarrier.HOLE).getNCells() == NUMBER_OF_READOUT_STRIPS);
+
+ assertTrue("[ " + this.getClass().getSimpleName() + " ]: Wrong number of sense electrodes found.",
+ sensor.getSenseElectrodes(ChargeCarrier.HOLE).getNCells() == NUMBER_OF_SENSE_STRIPS);
+ LOGGER.info(sensor.toString());
}
LOGGER.info("Sensors were all initialized correctly.");
Modified: java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014LCDDTest.java
=============================================================================
--- java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014LCDDTest.java (original)
+++ java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTestRunTracker2014LCDDTest.java Wed Mar 9 11:43:24 2016
@@ -18,7 +18,7 @@
{
public HPSTestRunTracker2014LCDDTest(String name)
{
- super(name);
+ super(name);
}
public static TestSuite suite()
Modified: java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014LCDDTest.java
=============================================================================
--- java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014LCDDTest.java (original)
+++ java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014LCDDTest.java Wed Mar 9 11:43:24 2016
@@ -18,7 +18,7 @@
{
public HPSTracker2014LCDDTest(String name)
{
- super(name);
+ super(name);
}
public static TestSuite suite()
Modified: java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014v1LCDDTest.java
=============================================================================
--- java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014v1LCDDTest.java (original)
+++ java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014v1LCDDTest.java Wed Mar 9 11:43:24 2016
@@ -18,7 +18,7 @@
{
public HPSTracker2014v1LCDDTest(String name)
{
- super(name);
+ super(name);
}
public static TestSuite suite()
Modified: java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014v1SurveyLCDDTest.java
=============================================================================
--- java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014v1SurveyLCDDTest.java (original)
+++ java/trunk/detector-model/src/test/java/org/lcsim/geometry/compact/converter/lcdd/HPSTracker2014v1SurveyLCDDTest.java Wed Mar 9 11:43:24 2016
@@ -18,7 +18,7 @@
{
public HPSTracker2014v1SurveyLCDDTest(String name)
{
- super(name);
+ super(name);
}
public static TestSuite suite()
Modified: java/trunk/detector-model/src/test/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014Test.java
=============================================================================
--- java/trunk/detector-model/src/test/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014Test.java (original)
+++ java/trunk/detector-model/src/test/java/org/lcsim/geometry/subdetector/HPSTestRunTracker2014Test.java Wed Mar 9 11:43:24 2016
@@ -19,36 +19,36 @@
*/
public class HPSTestRunTracker2014Test extends TestCase {
-
- Detector det;
- public HPSTestRunTracker2014Test(String name) {
- super(name);
- }
-
- protected void setUp() throws Exception {
- GeometryReader geometryReader = new GeometryReader();
- geometryReader.setBuildDetailed(true);
- String pathToCompactFile = "/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml";
+
+ Detector det;
+ public HPSTestRunTracker2014Test(String name) {
+ super(name);
+ }
+
+ protected void setUp() throws Exception {
+ GeometryReader geometryReader = new GeometryReader();
+ geometryReader.setBuildDetailed(true);
+ String pathToCompactFile = "/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml";
- InputStream in = HPSTestRunTracker2014Test.class.getResourceAsStream(pathToCompactFile);
- det = geometryReader.read(in);
-
- System.out.printf("%s: detector name converted: %s\n",this.getClass().getSimpleName(), det.getName());
-
-
- }
-
- public void test() {
-
-
-// IDetectorElementStore store = DetectorElementStore.getInstance();
-// System.out.printf("%s: Printing %d DE:\n",this.getClass().getSimpleName(), store.size());
-// System.out.printf("%s: %50s %40s %50s %50s\n",this.getClass().getSimpleName(), "name", "pos", "path","mother");
-// for(IDetectorElement e : store) {
-// System.out.printf("%s: %50s %40s %50s %50s \n",this.getClass().getSimpleName(), e.getName(),e.hasGeometryInfo()?e.getGeometry().getPosition().toString():" - ",e.hasGeometryInfo()?((PhysicalVolumePath)e.getGeometry().getPath()).toString():" - ",e.getParent()==null?" - ":e.getParent().getName());
-// }
-
- IDetectorElementStore store = DetectorElementStore.getInstance();
+ InputStream in = HPSTestRunTracker2014Test.class.getResourceAsStream(pathToCompactFile);
+ det = geometryReader.read(in);
+
+ System.out.printf("%s: detector name converted: %s\n",this.getClass().getSimpleName(), det.getName());
+
+
+ }
+
+ public void test() {
+
+
+// IDetectorElementStore store = DetectorElementStore.getInstance();
+// System.out.printf("%s: Printing %d DE:\n",this.getClass().getSimpleName(), store.size());
+// System.out.printf("%s: %50s %40s %50s %50s\n",this.getClass().getSimpleName(), "name", "pos", "path","mother");
+// for(IDetectorElement e : store) {
+// System.out.printf("%s: %50s %40s %50s %50s \n",this.getClass().getSimpleName(), e.getName(),e.hasGeometryInfo()?e.getGeometry().getPosition().toString():" - ",e.hasGeometryInfo()?((PhysicalVolumePath)e.getGeometry().getPath()).toString():" - ",e.getParent()==null?" - ":e.getParent().getName());
+// }
+
+ IDetectorElementStore store = DetectorElementStore.getInstance();
System.out.printf("%s: Printing %d DE:\n",this.getClass().getSimpleName(), store.size());
System.out.printf("%s: %50s %40s %50s %50s %s\n",this.getClass().getSimpleName(), "name", "pos", "path","mother", "expId");
for(IDetectorElement e : store) {
@@ -58,8 +58,8 @@
expId = e.getExpandedIdentifier();
System.out.printf("%s: %50s %40s %50s %50s %s\n",this.getClass().getSimpleName(), e.getName(),e.hasGeometryInfo()?e.getGeometry().getPosition().toString():" - ",e.hasGeometryInfo()?((PhysicalVolumePath)e.getGeometry().getPath()).toString():" - ",e.getParent()==null?" - ":e.getParent().getName(),expId==null?" no expId ":expId.toString());
}
-
- }
+
+ }
}
Modified: java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTest.xml
=============================================================================
--- java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTest.xml (original)
+++ java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTest.xml Wed Mar 9 11:43:24 2016
@@ -50,7 +50,7 @@
<!--
<constant name="tracking_region_radius" value="200.0*cm"/>
<constant name="tracking_region_min" value="5.0*cm"/>
- <constant name="tracking_region_zmax" value="100.0*cm"/>
+ <constant name="tracking_region_zmax" value="100.0*cm"/>
<constant name="xCent1" value="10*cm" />
<constant name="xCent2" value="20*cm" />
Modified: java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml
=============================================================================
--- java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml (original)
+++ java/trunk/detector-model/src/test/resources/org/lcsim/geometry/subdetector/HPSTestRunTracker2014.xml Wed Mar 9 11:43:24 2016
@@ -7,9 +7,9 @@
</info>
<define>
- <!-- units -->
- <constant name="mm" value="0.1*cm"/>
- <constant name="inch" value="25.4*mm"/>
+ <!-- units -->
+ <constant name="mm" value="0.1*cm"/>
+ <constant name="inch" value="25.4*mm"/>
<!-- world -->
<constant name="world_side" value="500.0*cm" />
@@ -17,8 +17,8 @@
<constant name="world_y" value="world_side" />
<constant name="world_z" value="world_side" />
- <!-- tracking region -->
- <constant name="tracking_region_radius" value="200.0*cm"/>
+ <!-- tracking region -->
+ <constant name="tracking_region_radius" value="200.0*cm"/>
<constant name="tracking_region_min" value="5.0*cm"/>
<constant name="tracking_region_zmax" value="131.8*cm"/>
@@ -34,7 +34,7 @@
</materials>
<display>
-
+
<vis name="SensorVis" alpha="1.0" r="1.0" g="0.0" b="0.0" drawingStyle="wireframe" lineStyle="unbroken" showDaughters="true" visible="true"/>
<vis name="ActiveSensorVis" alpha="1.0" r="1.0" g="0.0" b="0.0" drawingStyle="solid" lineStyle="unbroken" showDaughters="true" visible="true"/>
<vis name="CarbonFiberVis" alpha="1.0" r="0.88" g="0.88" b="0.88" drawingStyle="solid" lineStyle="unbroken" showDaughters="true" visible="true"/>
@@ -48,7 +48,7 @@
<vis name="BasePlateVis" alpha="1.0" r="0.35" g="0.35" b="0.35" drawingStyle="solid" lineStyle="dashed" showDaughters="true" visible="true"/>
<vis name="LayerVis" alpha="0.0" r="0.0" g="0.0" b="1.0" drawingStyle="wireframe" showDaughters="true" visible="false"/>
<vis name="ComponentVis" alpha="0.0" r="0.0" g="0.2" b="0.4" drawingStyle="solid" showDaughters="false" visible="false"/>
- <vis name="BeamPlaneVis" alpha="1.0" r="1.0" g="1.0" b="1.0" drawingStyle="solid" lineStyle="unbroken" showDaughters="false" visible="true"/>
+ <vis name="BeamPlaneVis" alpha="1.0" r="1.0" g="1.0" b="1.0" drawingStyle="solid" lineStyle="unbroken" showDaughters="false" visible="true"/>
</display>
Modified: java/trunk/distribution/src/main/java/org/hps/HPSJavaProperties.java
=============================================================================
--- java/trunk/distribution/src/main/java/org/hps/HPSJavaProperties.java (original)
+++ java/trunk/distribution/src/main/java/org/hps/HPSJavaProperties.java Wed Mar 9 11:43:24 2016
@@ -82,6 +82,11 @@
return this.properties.getProperty("timestamp");
}
+ /**
+ * Convert this object to a string.
+ *
+ * @return this object converted to a string
+ */
@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Association.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Association.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Association.java Wed Mar 9 11:43:24 2016
@@ -10,52 +10,52 @@
* @author Kyle McCarty
*/
public final class Association {
- private final Point parent;
- private final Point child;
- private final Color highlight;
-
- /**
- * <b>Association</b><br/><br/>
- * <code>public <b>Association</b>(Point parentCrystal, Point childCrystal, Color highlightColor)</code><br/><br/>
- * Creates an association between a child crystal and a parent
- * crystal.
- * @param parentCrystal - The crystal with which the child crystal
- * is connected.
- * @param childCrystal - The connected crystal.
- * @param highlightColor - The color in which the child crystal
- * should be highlighted.
- */
- public Association(Point parentCrystal, Point childCrystal, Color highlightColor) {
- parent = parentCrystal;
- child = childCrystal;
- highlight = highlightColor;
- }
-
- /**
- * <b>getChildCrystal</b><br/><br/>
- * <code>public Point <b>getChildCrystal</b>()</code><br/><br/>
- * Indicates the indices for the child crystal.
- * @return Returns the child crystal's indices in a <code>Point
- * </code> object.
- */
- public Point getChildCrystal() { return child; }
-
- /**
- * <b>getHighlight</b><br/><br/>
- * <code>public Color <b>getHighlight</b>()</code><br/><br/>
- * Gets the color with which the child crystal should be highlighted
- * whenever the parent crystal is selected.
- * @return Returns the highlight color as a <code>Color</code> object.
- */
- public Color getHighlight() { return highlight; }
-
- /**
- * <b>getParentCrystal</b><br/><br/>
- * <code>public Point <b>getParentCrystal</b>()</code><br/><br/>
- * Indicates the indices for the parent crystal with which the
- * child crystal is connected.
- * @return Returns the parent crystal's indices in a <code>Point
- * </code> object.
- */
- public Point getParentCrystal() { return parent; }
+ private final Point parent;
+ private final Point child;
+ private final Color highlight;
+
+ /**
+ * <b>Association</b><br/><br/>
+ * <code>public <b>Association</b>(Point parentCrystal, Point childCrystal, Color highlightColor)</code><br/><br/>
+ * Creates an association between a child crystal and a parent
+ * crystal.
+ * @param parentCrystal - The crystal with which the child crystal
+ * is connected.
+ * @param childCrystal - The connected crystal.
+ * @param highlightColor - The color in which the child crystal
+ * should be highlighted.
+ */
+ public Association(Point parentCrystal, Point childCrystal, Color highlightColor) {
+ parent = parentCrystal;
+ child = childCrystal;
+ highlight = highlightColor;
+ }
+
+ /**
+ * <b>getChildCrystal</b><br/><br/>
+ * <code>public Point <b>getChildCrystal</b>()</code><br/><br/>
+ * Indicates the indices for the child crystal.
+ * @return Returns the child crystal's indices in a <code>Point
+ * </code> object.
+ */
+ public Point getChildCrystal() { return child; }
+
+ /**
+ * <b>getHighlight</b><br/><br/>
+ * <code>public Color <b>getHighlight</b>()</code><br/><br/>
+ * Gets the color with which the child crystal should be highlighted
+ * whenever the parent crystal is selected.
+ * @return Returns the highlight color as a <code>Color</code> object.
+ */
+ public Color getHighlight() { return highlight; }
+
+ /**
+ * <b>getParentCrystal</b><br/><br/>
+ * <code>public Point <b>getParentCrystal</b>()</code><br/><br/>
+ * Indicates the indices for the parent crystal with which the
+ * child crystal is connected.
+ * @return Returns the parent crystal's indices in a <code>Point
+ * </code> object.
+ */
+ public Point getParentCrystal() { return parent; }
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Cluster.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Cluster.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Cluster.java Wed Mar 9 11:43:24 2016
@@ -11,161 +11,161 @@
* @author Kyle McCarty
*/
public final class Cluster {
- private final Point center;
- private final double energy;
- private final double time;
- private ArrayList<Point> hitList = new ArrayList<Point>();
- private ArrayList<Point> shareList = new ArrayList<Point>();
-
- /**
- * Creates a new cluster. All clusters are required to have a
- * cluster center.
- * @param ix - The cluster center's x-index.
- * @param iy - The cluster center's y-index.
- */
- public Cluster(int ix, int iy) { this(new Point(ix, iy), Double.NaN, Double.NaN); }
-
- /**
- * Creates a new cluster. All clusters are required to have a seed
- * hit.
- * @param clusterCenter - The <code>Point</code> object indicating in
- * which crystal the seed hit occurred.
- */
- public Cluster(Point clusterCenter) { this(clusterCenter, Double.NaN, Double.NaN); }
-
- /**
- * Creates a new cluster. All clusters are required to have a
- * cluster center.
- * @param ix - The cluster center's x-index.
- * @param iy - The cluster center's y-index.
- * @param energy - The cluster's energy.
- */
- public Cluster(int ix, int iy, double energy) { this(new Point(ix, iy), energy, Double.NaN); }
-
- /**
- * Creates a new cluster. All clusters are required to have a
- * cluster center.
- * @param ix - The cluster center's x-index.
- * @param iy - The cluster center's y-index.
- * @param energy - The cluster's energy.
- * @param time - The cluster's time-stamp.
- */
- public Cluster(int ix, int iy, double energy, double time) { this(new Point(ix, iy), energy, time); }
-
- /**
- * Creates a new cluster. All clusters are required to have a seed
- * hit.
- * @param clusterCenter - The <code>Point</code> object indicating in
- * which crystal the seed hit occurred.
- * @param energy - The cluster's energy.
- */
- public Cluster(Point clusterCenter, double energy) {
- this(clusterCenter, energy, Double.NaN);
- }
-
- /**
- * Creates a new cluster. All clusters are required to have a seed
- * hit.
- * @param clusterCenter - The <code>Point</code> object indicating in
- * which crystal the seed hit occurred.
- * @param energy - The cluster's energy.
- * @param time - The cluster's time-stamp.
- */
- public Cluster(Point clusterCenter, double energy, double time) {
- center = clusterCenter;
- this.energy = energy;
- this.time = time;
- }
-
- /**
- * Adds an <code>Point</code> to the list of this cluster's
- * component hits.
- * @param ix - The component hit's x-coordinate.
- * @param iy - The component hit's y-coordinate.
- */
- public void addComponentHit(int ix, int iy) { hitList.add(new Point(ix, iy)); }
-
- /**
- * Adds an <code>Point</code> to the list of this cluster's
- * component hits.
- * @param eHit - The <code>Point</code> object indicating in which
- * crystal the hit occurred.
- */
- public void addComponentHit(Point eHit) { hitList.add(eHit); }
-
- /**
- * Adds an <code>Point</code> to the list of this cluster's shared
- * hits.
- * @param ix - The shared hit's x-coordinate.
- * @param iy - The shared hit's y-coordinate.
- */
- public void addSharedHit(int ix, int iy) { shareList.add(new Point(ix, iy)); }
-
- /**
- * Adds an <code>Point</code> to the list of this cluster's shared
- * hits.
- * @param eHit - The <code>Point</code> object indicating in which
- * crystal the hit occurred.
- */
- public void addSharedHit(Point eHit) { shareList.add(eHit); }
-
- /**
- * Gets the hit representing the cluster center.
- * @return Returns the cluster center hit as an <code>Point</code>.
- */
- public Point getClusterCenter() { return center; }
-
- /**
- * Gets the cluster's energy, if it was defined when the cluster
- * was constructed.
- * @return Returns the energy of the cluster if it was defined,
- * and <code>NaN</code> otherwise.
- */
- public double getClusterEnergy() { return energy; }
-
- /**
- * Gets the time stamp for the cluster in nanoseconds.
- * @return Returns the cluster's time stamp.
- */
- public double getClusterTime() { return time; }
-
- /**
- * Indicates how many component hits compose this cluster. Note
- * that this does not include the seed hit or shared hits.
- * @return Returns the number of component hits in the cluster
- * as an <code>int</code>.
- */
- public int getComponentHitCount() { return hitList.size(); }
-
- /**
- * Gets the list of hits that make up the cluster, exempting the
- * seed hit and shared hits.
- * @return Returns the cluster hits as a <code>List</code> object
- * composed of <code>Point</code> objects.
- */
- public List<Point> getComponentHits() { return hitList; }
-
- /**
- * Indicates how many total hits compose this cluster. This includes
- * component hits, shared hits, and the seed hit.
- * @return Returns the number of component hits in the cluster
- * as an <code>int</code>.
- */
- public int getHitCount() { return hitList.size() + shareList.size() + 1; }
-
- /**
- * Indicates how many shared hits compose this cluster. Note that
- * this does not include the seed hit or component hits.
- * @return Returns the number of shared hits in the cluster as an
- * <code>int</code>.
- */
- public int getSharedHitCount() { return shareList.size(); }
-
- /**
- * Gets the list of hits that make up the cluster, exempting the
- * seed hit and component hits.
- * @return Returns the shared hits as a <code>List</code> object
- * composed of <code>Point</code> objects.
- */
- public List<Point> getSharedHits() { return shareList; }
+ private final Point center;
+ private final double energy;
+ private final double time;
+ private ArrayList<Point> hitList = new ArrayList<Point>();
+ private ArrayList<Point> shareList = new ArrayList<Point>();
+
+ /**
+ * Creates a new cluster. All clusters are required to have a
+ * cluster center.
+ * @param ix - The cluster center's x-index.
+ * @param iy - The cluster center's y-index.
+ */
+ public Cluster(int ix, int iy) { this(new Point(ix, iy), Double.NaN, Double.NaN); }
+
+ /**
+ * Creates a new cluster. All clusters are required to have a seed
+ * hit.
+ * @param clusterCenter - The <code>Point</code> object indicating in
+ * which crystal the seed hit occurred.
+ */
+ public Cluster(Point clusterCenter) { this(clusterCenter, Double.NaN, Double.NaN); }
+
+ /**
+ * Creates a new cluster. All clusters are required to have a
+ * cluster center.
+ * @param ix - The cluster center's x-index.
+ * @param iy - The cluster center's y-index.
+ * @param energy - The cluster's energy.
+ */
+ public Cluster(int ix, int iy, double energy) { this(new Point(ix, iy), energy, Double.NaN); }
+
+ /**
+ * Creates a new cluster. All clusters are required to have a
+ * cluster center.
+ * @param ix - The cluster center's x-index.
+ * @param iy - The cluster center's y-index.
+ * @param energy - The cluster's energy.
+ * @param time - The cluster's time-stamp.
+ */
+ public Cluster(int ix, int iy, double energy, double time) { this(new Point(ix, iy), energy, time); }
+
+ /**
+ * Creates a new cluster. All clusters are required to have a seed
+ * hit.
+ * @param clusterCenter - The <code>Point</code> object indicating in
+ * which crystal the seed hit occurred.
+ * @param energy - The cluster's energy.
+ */
+ public Cluster(Point clusterCenter, double energy) {
+ this(clusterCenter, energy, Double.NaN);
+ }
+
+ /**
+ * Creates a new cluster. All clusters are required to have a seed
+ * hit.
+ * @param clusterCenter - The <code>Point</code> object indicating in
+ * which crystal the seed hit occurred.
+ * @param energy - The cluster's energy.
+ * @param time - The cluster's time-stamp.
+ */
+ public Cluster(Point clusterCenter, double energy, double time) {
+ center = clusterCenter;
+ this.energy = energy;
+ this.time = time;
+ }
+
+ /**
+ * Adds an <code>Point</code> to the list of this cluster's
+ * component hits.
+ * @param ix - The component hit's x-coordinate.
+ * @param iy - The component hit's y-coordinate.
+ */
+ public void addComponentHit(int ix, int iy) { hitList.add(new Point(ix, iy)); }
+
+ /**
+ * Adds an <code>Point</code> to the list of this cluster's
+ * component hits.
+ * @param eHit - The <code>Point</code> object indicating in which
+ * crystal the hit occurred.
+ */
+ public void addComponentHit(Point eHit) { hitList.add(eHit); }
+
+ /**
+ * Adds an <code>Point</code> to the list of this cluster's shared
+ * hits.
+ * @param ix - The shared hit's x-coordinate.
+ * @param iy - The shared hit's y-coordinate.
+ */
+ public void addSharedHit(int ix, int iy) { shareList.add(new Point(ix, iy)); }
+
+ /**
+ * Adds an <code>Point</code> to the list of this cluster's shared
+ * hits.
+ * @param eHit - The <code>Point</code> object indicating in which
+ * crystal the hit occurred.
+ */
+ public void addSharedHit(Point eHit) { shareList.add(eHit); }
+
+ /**
+ * Gets the hit representing the cluster center.
+ * @return Returns the cluster center hit as an <code>Point</code>.
+ */
+ public Point getClusterCenter() { return center; }
+
+ /**
+ * Gets the cluster's energy, if it was defined when the cluster
+ * was constructed.
+ * @return Returns the energy of the cluster if it was defined,
+ * and <code>NaN</code> otherwise.
+ */
+ public double getClusterEnergy() { return energy; }
+
+ /**
+ * Gets the time stamp for the cluster in nanoseconds.
+ * @return Returns the cluster's time stamp.
+ */
+ public double getClusterTime() { return time; }
+
+ /**
+ * Indicates how many component hits compose this cluster. Note
+ * that this does not include the seed hit or shared hits.
+ * @return Returns the number of component hits in the cluster
+ * as an <code>int</code>.
+ */
+ public int getComponentHitCount() { return hitList.size(); }
+
+ /**
+ * Gets the list of hits that make up the cluster, exempting the
+ * seed hit and shared hits.
+ * @return Returns the cluster hits as a <code>List</code> object
+ * composed of <code>Point</code> objects.
+ */
+ public List<Point> getComponentHits() { return hitList; }
+
+ /**
+ * Indicates how many total hits compose this cluster. This includes
+ * component hits, shared hits, and the seed hit.
+ * @return Returns the number of component hits in the cluster
+ * as an <code>int</code>.
+ */
+ public int getHitCount() { return hitList.size() + shareList.size() + 1; }
+
+ /**
+ * Indicates how many shared hits compose this cluster. Note that
+ * this does not include the seed hit or component hits.
+ * @return Returns the number of shared hits in the cluster as an
+ * <code>int</code>.
+ */
+ public int getSharedHitCount() { return shareList.size(); }
+
+ /**
+ * Gets the list of hits that make up the cluster, exempting the
+ * seed hit and component hits.
+ * @return Returns the shared hits as a <code>List</code> object
+ * composed of <code>Point</code> objects.
+ */
+ public List<Point> getSharedHits() { return shareList; }
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/EcalHit.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/EcalHit.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/EcalHit.java Wed Mar 9 11:43:24 2016
@@ -23,7 +23,7 @@
* @param energy - The raw energy of the hit.
**/
public EcalHit(int ix, int iy, double energy) {
- this(new Point(ix, iy), energy);
+ this(new Point(ix, iy), energy);
}
/**
@@ -32,7 +32,7 @@
* @param energy - The raw energy of the hit.
**/
public EcalHit(Point ixy, double energy) {
- loc = ixy;
+ loc = ixy;
this.energy = energy;
}
@@ -44,7 +44,7 @@
* @param time - The time-stamp for the hit.
**/
public EcalHit(int ix, int iy, double energy, double time) {
- this(new Point(ix, iy), energy, time);
+ this(new Point(ix, iy), energy, time);
}
/**
@@ -54,7 +54,7 @@
* @param time - The time-stamp for the hit.
**/
public EcalHit(Point ixy, double energy, double time) {
- loc = ixy;
+ loc = ixy;
this.energy = energy;
this.time = time;
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Event.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Event.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/event/Event.java Wed Mar 9 11:43:24 2016
@@ -10,119 +10,119 @@
* @author Kyle McCarty
*/
public final class Event {
- private List<EcalHit> hitList;
- private List<Point> clusterList;
- private List<Association> connectList;
-
- /**
- * <b>Event</b><br/><br/>
- * <code>public <b>Event</b>()</code><br/><br/>
- * Creates a new <code>Event</code>.
- */
- public Event() { this(10, 10, 10); }
-
- /**
- * <b>Event</b><br/><br/>
- * <code>public <b>Event</b>(int hits, int clusters)</code><br/><br/>
- * Creates a new <code>Event</code> and reserves spaces for the
- * given number of hits and cluster centers.
- * @param hits - The number of hits for which to reserve space.
- * @param clusters - The number of cluster centers for which to
- * reserve space.
- */
- public Event(int hits, int clusters) { this(hits, clusters, 10); }
-
- /**
- * <b>Event</b><br/><br/>
- * <code>public <b>Event</b>(int hits, int clusters, int associations)</code><br/><br/>
- * Creates a new <code>Event</code> and reserves spaces for the
- * given number of hits, cluster centers, and crystal associations.
- * @param hits - The number of hits for which to reserve space.
- * @param clusters - The number of cluster centers for which to
- * reserve space.
- * @param associations - The number of crystal associations for
- * which to reserve space.
- */
- public Event(int hits, int clusters, int associations) {
- hitList = new ArrayList<EcalHit>(hits);
- clusterList = new ArrayList<Point>(clusters);
- connectList = new ArrayList<Association>(associations);
- }
-
- /**
- * <b>Event</b><br/><br/>
- * <code>public <b>Event</b>(List<EcalHit> hits, List<Point> clusters, List<Association> associations)</code><br/><br/>
- * Creates a new <code>Event</code> and sets its contents to those
- * of the given lists. The crystal association list will be empty.
- * @param hits - The list of calorimeter hits.
- * @param clusters - The list of cluster centers.
- */
- public Event(List<EcalHit> hits, List<Point> clusters) {
- this(hits, clusters, new ArrayList<Association>());
- }
-
- /**
- * <b>Event</b><br/><br/>
- * <code>public <b>Event</b>(List<EcalHit> hits, List<Point> clusters, List<Association> associations)</code><br/><br/>
- * Creates a new <code>Event</code> and sets its contents to those
- * of the given lists.
- * @param hits - The list of calorimeter hits.
- * @param clusters - The list of cluster centers.
- * @param associations - The list of crystal associations.
- */
- public Event(List<EcalHit> hits, List<Point> clusters, List<Association> associations) {
- hitList = hits;
- clusterList = clusters;
- connectList = associations;
- }
-
- /**
- * <b>addAssociation</b><br/><br/>
- * <code>public void <b>addAssociation</b>(Association connectedCrystal)</code><br/><br/>
- * Adds a crystal association to the event.
- * @param connectedCrystal - The crystal association to add.
- */
- public void addAssociation(Association connectedCrystal) {
- connectList.add(connectedCrystal);
- }
-
- /**
- * <b>addCluster</b><br/><br/>
- * <code>public void <b>addCluster</b>(Point cluster)</code><br/><br/>
- * Adds a cluster center to the event.
- * @param cluster - The cluster center to add.
- */
- public void addCluster(Point cluster) { clusterList.add(cluster); }
-
- /**
- * <b>addHit</b><br/><br/>
- * <code>public void <b>addHit</b>(EcalHit hit)</code><br/><br/>
- * Adds a calorimeter hit to the event.
- * @param hit - The calorimeter hit to add.
- */
- public void addHit(EcalHit hit) { hitList.add(hit); }
-
- /**
- * <b>getAssociations</b><br/><br/>
- * <code>public List<Association> <b>getAssociations</b>()</code><br/><br/>
- * Gets the list of associated crystals for this event.
- * @return Returns the associations in a <code>List</code>.
- */
- public List<Association> getAssociations() { return connectList; }
-
- /**
- * <b>getClusterCenters</b><br/><br/>
- * <code>List<Cluster><b>getClusterCenters</b>()</code><br/><br/>
- * Gets the list of cluster centers for this event.
- * @return Returns the cluster centers in a <code>List</code>.
- */
- public List<Point> getClusterCenters() { return clusterList; }
-
- /**
- * <b>getHits</b><br/><br/>
- * <code>public List<EcalHit> <b>getHits</b>()</code><br/><br/>
- * Gets the list of calorimeter hits for this event.
- * @return Returns the hits in a <code>List</code>.
- */
- public List<EcalHit> getHits() { return hitList; }
+ private List<EcalHit> hitList;
+ private List<Point> clusterList;
+ private List<Association> connectList;
+
+ /**
+ * <b>Event</b><br/><br/>
+ * <code>public <b>Event</b>()</code><br/><br/>
+ * Creates a new <code>Event</code>.
+ */
+ public Event() { this(10, 10, 10); }
+
+ /**
+ * <b>Event</b><br/><br/>
+ * <code>public <b>Event</b>(int hits, int clusters)</code><br/><br/>
+ * Creates a new <code>Event</code> and reserves spaces for the
+ * given number of hits and cluster centers.
+ * @param hits - The number of hits for which to reserve space.
+ * @param clusters - The number of cluster centers for which to
+ * reserve space.
+ */
+ public Event(int hits, int clusters) { this(hits, clusters, 10); }
+
+ /**
+ * <b>Event</b><br/><br/>
+ * <code>public <b>Event</b>(int hits, int clusters, int associations)</code><br/><br/>
+ * Creates a new <code>Event</code> and reserves spaces for the
+ * given number of hits, cluster centers, and crystal associations.
+ * @param hits - The number of hits for which to reserve space.
+ * @param clusters - The number of cluster centers for which to
+ * reserve space.
+ * @param associations - The number of crystal associations for
+ * which to reserve space.
+ */
+ public Event(int hits, int clusters, int associations) {
+ hitList = new ArrayList<EcalHit>(hits);
+ clusterList = new ArrayList<Point>(clusters);
+ connectList = new ArrayList<Association>(associations);
+ }
+
+ /**
+ * <b>Event</b><br/><br/>
+ * <code>public <b>Event</b>(List<EcalHit> hits, List<Point> clusters, List<Association> associations)</code><br/><br/>
+ * Creates a new <code>Event</code> and sets its contents to those
+ * of the given lists. The crystal association list will be empty.
+ * @param hits - The list of calorimeter hits.
+ * @param clusters - The list of cluster centers.
+ */
+ public Event(List<EcalHit> hits, List<Point> clusters) {
+ this(hits, clusters, new ArrayList<Association>());
+ }
+
+ /**
+ * <b>Event</b><br/><br/>
+ * <code>public <b>Event</b>(List<EcalHit> hits, List<Point> clusters, List<Association> associations)</code><br/><br/>
+ * Creates a new <code>Event</code> and sets its contents to those
+ * of the given lists.
+ * @param hits - The list of calorimeter hits.
+ * @param clusters - The list of cluster centers.
+ * @param associations - The list of crystal associations.
+ */
+ public Event(List<EcalHit> hits, List<Point> clusters, List<Association> associations) {
+ hitList = hits;
+ clusterList = clusters;
+ connectList = associations;
+ }
+
+ /**
+ * <b>addAssociation</b><br/><br/>
+ * <code>public void <b>addAssociation</b>(Association connectedCrystal)</code><br/><br/>
+ * Adds a crystal association to the event.
+ * @param connectedCrystal - The crystal association to add.
+ */
+ public void addAssociation(Association connectedCrystal) {
+ connectList.add(connectedCrystal);
+ }
+
+ /**
+ * <b>addCluster</b><br/><br/>
+ * <code>public void <b>addCluster</b>(Point cluster)</code><br/><br/>
+ * Adds a cluster center to the event.
+ * @param cluster - The cluster center to add.
+ */
+ public void addCluster(Point cluster) { clusterList.add(cluster); }
+
+ /**
+ * <b>addHit</b><br/><br/>
+ * <code>public void <b>addHit</b>(EcalHit hit)</code><br/><br/>
+ * Adds a calorimeter hit to the event.
+ * @param hit - The calorimeter hit to add.
+ */
+ public void addHit(EcalHit hit) { hitList.add(hit); }
+
+ /**
+ * <b>getAssociations</b><br/><br/>
+ * <code>public List<Association> <b>getAssociations</b>()</code><br/><br/>
+ * Gets the list of associated crystals for this event.
+ * @return Returns the associations in a <code>List</code>.
+ */
+ public List<Association> getAssociations() { return connectList; }
+
+ /**
+ * <b>getClusterCenters</b><br/><br/>
+ * <code>List<Cluster><b>getClusterCenters</b>()</code><br/><br/>
+ * Gets the list of cluster centers for this event.
+ * @return Returns the cluster centers in a <code>List</code>.
+ */
+ public List<Point> getClusterCenters() { return clusterList; }
+
+ /**
+ * <b>getHits</b><br/><br/>
+ * <code>public List<EcalHit> <b>getHits</b>()</code><br/><br/>
+ * Gets the list of calorimeter hits for this event.
+ * @return Returns the hits in a <code>List</code>.
+ */
+ public List<EcalHit> getHits() { return hitList; }
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/io/EventManager.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/io/EventManager.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/io/EventManager.java Wed Mar 9 11:43:24 2016
@@ -21,16 +21,16 @@
* may be read.
* @throws IOException Occurs if there is an error closing the file stream.
**/
- public void close() throws IOException;
-
- /**
- * <b>getEventNumber</b><br/><br/>
+ public void close() throws IOException;
+
+ /**
+ * <b>getEventNumber</b><br/><br/>
* <code>public int <b>getEventNumber</b>()</code><br/><br/>
* Gets the ordinal number for the currently displayed event.
- * @return Returns the current event's ordinal number.
- */
- public int getEventNumber();
-
+ * @return Returns the current event's ordinal number.
+ */
+ public int getEventNumber();
+
/**
* <b>getClusters</b><br/><br/>
* <code>public ArrayList<Cluster> <b>getClusters</b>()</code><br/><br/>
@@ -38,17 +38,17 @@
* @return Returns the current clusters as an <code>ArrayList
* </code> object.
**/
- public List<Cluster> getClusters();
-
- /**
+ public List<Cluster> getClusters();
+
+ /**
* <b>getHits</b><br/><br/>
* <code>public ArrayList<EcalHit> <b>getHits</b>()</code><br/><br/>
* Allows access to the current event's list of hits.
* @return Returns the current hits as an <code>ArrayList</code> object.
**/
- public List<EcalHit> getHits();
-
- /**
+ public List<EcalHit> getHits();
+
+ /**
* <b>nextEvent</b><br/><br/>
* <code>public boolean <b>nextEvent</b>()</code><br/><br/>
* Populates the event manager with hits and clusters from the next event.
@@ -56,8 +56,8 @@
* </code> if it was not.
* @throws IOException Occurs if there was a file read error.
**/
- public boolean nextEvent() throws IOException;
-
+ public boolean nextEvent() throws IOException;
+
/**
* <b>previousEvent</b><br/><br/>
* <code>public boolean <b>previousEvent</b>()</code><br/><br/>
@@ -66,5 +66,5 @@
* </code> if it was not.
* @throws IOException Occurs if there was a file read error.
**/
- public boolean previousEvent() throws IOException;
+ public boolean previousEvent() throws IOException;
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/EventDisplayOutputDriver.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/EventDisplayOutputDriver.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/EventDisplayOutputDriver.java Wed Mar 9 11:43:24 2016
@@ -97,30 +97,30 @@
// Only write clusters if the option is selected.
if(outputClusters) {
- // Process the clusters.
- for (org.lcsim.event.Cluster cluster : clusters) {
- // Get the seed hit for the cluster.
- CalorimeterHit seedHit = (CalorimeterHit)cluster.getCalorimeterHits().get(0);
- int ix = seedHit.getIdentifierFieldValue("ix");
- int iy = seedHit.getIdentifierFieldValue("iy");
- double time = seedHit.getTime();
-
- // Get the cluster's total energy.
- double energy = cluster.getEnergy();
-
- // Write the seed hit to start a cluster.
- writer.append(String.format("Cluster\t%d\t%d\t%f\t%f%n", ix, iy, energy, time));
-
- // Write the component hits to the cluster.
- for (CalorimeterHit hit : cluster.getCalorimeterHits()) {
- // Get each component hit's x/y coordinates.
- ix = hit.getIdentifierFieldValue("ix");
- iy = hit.getIdentifierFieldValue("iy");
-
- // Write them as component hits.
- writer.append(String.format("CompHit\t%d\t%d%n", ix, iy));
- }
- }
+ // Process the clusters.
+ for (org.lcsim.event.Cluster cluster : clusters) {
+ // Get the seed hit for the cluster.
+ CalorimeterHit seedHit = (CalorimeterHit)cluster.getCalorimeterHits().get(0);
+ int ix = seedHit.getIdentifierFieldValue("ix");
+ int iy = seedHit.getIdentifierFieldValue("iy");
+ double time = seedHit.getTime();
+
+ // Get the cluster's total energy.
+ double energy = cluster.getEnergy();
+
+ // Write the seed hit to start a cluster.
+ writer.append(String.format("Cluster\t%d\t%d\t%f\t%f%n", ix, iy, energy, time));
+
+ // Write the component hits to the cluster.
+ for (CalorimeterHit hit : cluster.getCalorimeterHits()) {
+ // Get each component hit's x/y coordinates.
+ ix = hit.getIdentifierFieldValue("ix");
+ iy = hit.getIdentifierFieldValue("iy");
+
+ // Write them as component hits.
+ writer.append(String.format("CompHit\t%d\t%d%n", ix, iy));
+ }
+ }
}
// Append the end of event indicator.
@@ -169,7 +169,7 @@
* indicates that they will be output.
*/
public void setIgnoreEmptyEvents(boolean ignoreEmptyEvents) {
- this.ignoreEmptyEvents = ignoreEmptyEvents;
+ this.ignoreEmptyEvents = ignoreEmptyEvents;
}
/**
@@ -179,7 +179,7 @@
* indicates that they will be output.
*/
public void setIgnoreNoClusterEvents(boolean ignoreNoClusterEvents) {
- this.ignoreNoClusterEvents = ignoreNoClusterEvents;
+ this.ignoreNoClusterEvents = ignoreNoClusterEvents;
}
/**
@@ -196,6 +196,6 @@
* will be written and <code>false</code> that they will not.
*/
public void setOutputClusters(boolean outputClusters) {
- this.outputClusters = outputClusters;
+ this.outputClusters = outputClusters;
}
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/LCIOBridgeDriver.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/LCIOBridgeDriver.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/lcsim/LCIOBridgeDriver.java Wed Mar 9 11:43:24 2016
@@ -39,9 +39,9 @@
* @param event - The LCIO event.
*/
public void process(EventHeader event) {
- // If we are still updating the display, skip this event.
- if(updating) { return; }
-
+ // If we are still updating the display, skip this event.
+ if(updating) { return; }
+
// Make sure that this event has calorimeter hits.
if (event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
// Get the list of calorimeter hits from the event.
@@ -55,44 +55,44 @@
// If this is the correct place to update, do so.
if(eventsProcessed >= displayInterval) {
- // Lock the update method for the duration of the update.
- updating = true;
-
- // Clear the event display.
- eventDisplay.resetDisplay();
-
- // Add all of the hits.
- for(CalorimeterHit hit : hits) {
- // Get the hit's location and energy.
- int ix = hit.getIdentifierFieldValue("ix");
- int iy = hit.getIdentifierFieldValue("iy");
- double energy = hit.getRawEnergy();
-
- // Add the hit energy to the event display.
- eventDisplay.addHit(new EcalHit(ix, iy, energy));
- }
-
- // Add all the clusters.
- for(org.lcsim.event.Cluster cluster : clusters) {
- // Get the seed hit.
- CalorimeterHit seed = cluster.getCalorimeterHits().get(0);
- int ix = seed.getIdentifierFieldValue("ix");
- int iy = seed.getIdentifierFieldValue("iy");
- double energy = seed.getRawEnergy(); // FIXME: Should this be getCorrectedEnergy() instead? --JM
-
- // Add the cluster center to the event display.
- Cluster cc = new Cluster(ix, iy, energy);
- eventDisplay.addCluster(cc);
- }
-
- // Update the display.
- eventDisplay.updateDisplay();
-
- // Reset the number of events we've seen since the last update.
- eventsProcessed = 0;
-
- // Unlock the update method so that more events can be processed.
- updating = false;
+ // Lock the update method for the duration of the update.
+ updating = true;
+
+ // Clear the event display.
+ eventDisplay.resetDisplay();
+
+ // Add all of the hits.
+ for(CalorimeterHit hit : hits) {
+ // Get the hit's location and energy.
+ int ix = hit.getIdentifierFieldValue("ix");
+ int iy = hit.getIdentifierFieldValue("iy");
+ double energy = hit.getRawEnergy();
+
+ // Add the hit energy to the event display.
+ eventDisplay.addHit(new EcalHit(ix, iy, energy));
+ }
+
+ // Add all the clusters.
+ for(org.lcsim.event.Cluster cluster : clusters) {
+ // Get the seed hit.
+ CalorimeterHit seed = cluster.getCalorimeterHits().get(0);
+ int ix = seed.getIdentifierFieldValue("ix");
+ int iy = seed.getIdentifierFieldValue("iy");
+ double energy = seed.getRawEnergy(); // FIXME: Should this be getCorrectedEnergy() instead? --JM
+
+ // Add the cluster center to the event display.
+ Cluster cc = new Cluster(ix, iy, energy);
+ eventDisplay.addCluster(cc);
+ }
+
+ // Update the display.
+ eventDisplay.updateDisplay();
+
+ // Reset the number of events we've seen since the last update.
+ eventsProcessed = 0;
+
+ // Unlock the update method so that more events can be processed.
+ updating = false;
}
}
}
@@ -119,14 +119,14 @@
* a new event is displayed.
*/
public void setDisplayInterval(String displayInterval) {
- // Convert the argument to an integer.
- int disp = Integer.parseInt(displayInterval);
-
- // If it is negative, make it zero.
- if(disp < 0) { disp = 0; }
-
- // Set the display interval.
- this.displayInterval = disp;
+ // Convert the argument to an integer.
+ int disp = Integer.parseInt(displayInterval);
+
+ // If it is negative, make it zero.
+ if(disp < 0) { disp = 0; }
+
+ // Set the display interval.
+ this.displayInterval = disp;
}
/**
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/DataFileViewer.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/DataFileViewer.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/DataFileViewer.java Wed Mar 9 11:43:24 2016
@@ -97,9 +97,9 @@
filterPanel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- // Suppress panel redrawing until the highlights are set.
- ecalPanel.setSuppressRedraw(true);
-
+ // Suppress panel redrawing until the highlights are set.
+ ecalPanel.setSuppressRedraw(true);
+
// Clear the panel highlighting.
ecalPanel.clearHighlight();
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/FileViewer.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/FileViewer.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/FileViewer.java Wed Mar 9 11:43:24 2016
@@ -178,9 +178,9 @@
// be displayed.
Double hitTime = crystalTimeMap.get(crystal);
if(hitTime != null) {
- setStatusField(fieldNames[HIT_TIME], Double.toString(hitTime));
+ setStatusField(fieldNames[HIT_TIME], Double.toString(hitTime));
} else {
- setStatusField(fieldNames[HIT_TIME], ResizableFieldPanel.NULL_VALUE);
+ setStatusField(fieldNames[HIT_TIME], ResizableFieldPanel.NULL_VALUE);
}
}
// Otherwise, clear the field values.
@@ -257,7 +257,7 @@
// Load hit time map.
crystalTimeMap.clear();
for(EcalHit hit : em.getHits()) {
- crystalTimeMap.put(new Point(toPanelX(hit.getX()), toPanelY(hit.getY())), hit.getTime());
+ crystalTimeMap.put(new Point(toPanelX(hit.getX()), toPanelY(hit.getY())), hit.getTime());
}
// Display it.
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PDataEventViewer.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PDataEventViewer.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PDataEventViewer.java Wed Mar 9 11:43:24 2016
@@ -98,9 +98,9 @@
filterPanel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- // Suppress panel redrawing until the highlights are set.
- ecalPanel.setSuppressRedraw(true);
-
+ // Suppress panel redrawing until the highlights are set.
+ ecalPanel.setSuppressRedraw(true);
+
// Clear the panel highlighting.
ecalPanel.clearHighlight();
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/Viewer.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/Viewer.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/Viewer.java Wed Mar 9 11:43:24 2016
@@ -638,7 +638,7 @@
JFileChooser chooser = new JFileChooser();
if(chooser.showSaveDialog(this) == JFileChooser.CANCEL_OPTION) {
- return;
+ return;
}
// Parse the file name and make sure that it ends in .PNG.
@@ -646,9 +646,9 @@
int index = filepath.lastIndexOf('.');
if(index == -1) { filepath = filepath + ".png"; }
else {
- if(filepath.substring(index + 1).compareTo("png") != 0) {
- filepath = filepath.substring(0, index) + ".png";
- }
+ if(filepath.substring(index + 1).compareTo("png") != 0) {
+ filepath = filepath.substring(0, index) + ".png";
+ }
}
// Get the lowest available file name.
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/BooleanMap.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/BooleanMap.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/BooleanMap.java Wed Mar 9 11:43:24 2016
@@ -10,208 +10,208 @@
* @author Kyle McCarty
*/
public final class BooleanMap implements ColorMap<Double> {
- // The color to display for values which pass the boolean check.
- private Color activeColor = new Color(255, 50, 50);
- // The color to display for values that fail the boolean check.
- private Color inactiveColor = Color.WHITE;
- // The critical value against which the boolean check is performed.
- private double value = 0.0;
- // The type of this boolean scale.
- private final BooleanType boolType;
-
- /**
- * <b>BooleanMap</b><br/><br/>
- * <code>public <b>BooleanMap</b>(BooleanType type, double comparisonValue)</code><br/><br/>
- * Defines a <code>ColorScale</code> which maps values to colors
- * based on a boolean comparison.
- * @param type - The type of boolean comparison to perform.
- * @param comparisonValue - The value against which the comparison
- * should be made.
- */
- public BooleanMap(BooleanType type, double comparisonValue) {
- // Make sure the comparison type is not null.
- if(type == null) { throw new IllegalArgumentException("Boolean comparison type can not be null."); }
-
- // Define the critical value and the boolean type.
- value = comparisonValue;
- boolType = type;
- }
-
- /**
- * <b>BooleanMap</b><br/><br/>
- * <code>public <b>BooleanMap</b>(BooleanType type, double comparisonValue,
- * Color activeColor)</code><br/><br/>
- * Defines a <code>ColorScale</code> which maps values to colors
- * based on a boolean comparison.
- * @param type - The type of boolean comparison to perform.
- * @param comparisonValue - The value against which the comparison
- * should be made.
- * @param activeColor - The color in which values that pass the
- * comparison should be displayed.
- */
- public BooleanMap(BooleanType type, double comparisonValue, Color activeColor) {
- // Set the critical value and the boolean type.
- this(type, comparisonValue);
-
- // Set the active color.
- this.activeColor = activeColor;
- }
-
- /**
- * <b>BooleanMap</b><br/><br/>
- * <code>public <b>BooleanMap</b>(BooleanType type, double comparisonValue,
- * Color activeColor, Color inactiveColor)</code><br/><br/>
- * Defines a <code>ColorScale</code> which maps values to colors
- * based on a boolean comparison.
- * @param type - The type of boolean comparison to perform.
- * @param comparisonValue - The value against which the comparison
- * should be made.
- * @param activeColor - The color in which values that pass the
- * comparison should be displayed.
- * @param inactiveColor - The color in which values that fail the
- * comparison should be displayed.
- */
- public BooleanMap(BooleanType type, double comparisonValue, Color activeColor, Color inactiveColor) {
- // Set the critical value and the boolean type.
- this(type, comparisonValue);
-
- // Set the active and inactive colors.
- this.activeColor = activeColor;
- this.inactiveColor = inactiveColor;
- }
-
- public Color getColor(Double value) {
- // If the argument is null, treat it is zero.
- if(value == null) { value = 0.0; }
-
- // If it passes the boolean comparison, return the active color.
- if(passes(value)) { return activeColor; }
-
- // Otherwise, return the inactive color.
- else { return inactiveColor; }
- }
-
- /**
- * <b>getActiveColor</b><br/><br/>
- * <code>public Color <b>getActiveColor</b>()</code><br/><br/>
- * Gets the color used by the scale for values which pass the
- * boolean comparison.
- * @return Returns the color as a <code>Color</code> object.
- */
- public Color getActiveColor() { return activeColor; }
-
- /**
- * <b>getBooleanType</b><br/><br/>
- * <code>public BooleanType <b>getBooleanType</b>()</code><br/><br/>
- * Indicates what type of boolean comparison is performed by this
- * scale.
- * @return Returns the type of comparison as a <code>BooleanType
- * </code> enumerable.
- */
- public BooleanType getBooleanType() { return boolType; }
-
- /**
- * <b>getComparisonValue</b><br/><br/>
- * <code>public double <b>getComparisonValue</b>()</code><br/><br/>
- * Gets the value against which the boolean comparisons are
- * performed.
- * @return Returns the value which is compared against.
- */
- public double getComparisonValue() { return value; }
-
- /**
- * <b>getInactiveColor</b><br/><br/>
- * <code>public Color <b>getInactiveColor</b>()</code><br/><br/>
- * Gets the color used by the scale for values which fail the
- * boolean comparison.
- * @return Returns the color as a <code>Color</code> object.
- */
- public Color getInactiveColor() { return inactiveColor; }
-
- /**
- * <b>setComparisonValue</b><br/><br/>
- * <code>public void <b>setComparisonValue</b>(double value)</code><br/><br/>
- * Sets the value against which the boolean comparison is performed.
- * @param value - The value to compare against.
- */
- public void setComparisonValue(double value) { this.value = value; }
-
- /**
- * <b>passes</b><br/><br/>
- * <code>private boolean <b>passes</b>(double d)</code><br/><br/>
- * Determines whether a given external value passes the boolean
- * check or not.
- * @param d - The external value to compare.
- * @return Returns <code>true</code> if the value passes the boolean
- * check and <code>false</code> if it does not.
- */
- private boolean passes(double d) {
- // Perform the appropriate comparison. Note that the default
- // case is included to satisfy the compiler -- it should not
- // ever actually be used.
- switch(boolType) {
- case EQUAL_TO:
- return d == value;
- case NOT_EQUAL_TO:
- return d != value;
- case GREATER_THAN:
- return d > value;
- case LESS_THAN:
- return d < value;
- case GREATER_THAN_OR_EQUAL_TO:
- return d >= value;
- case LESS_THAN_OR_EQUAL_TO:
- return d<= value;
- default:
- return false;
- }
- }
-
- /**
- * Enumerable <code>BooleanType</code> defines the type of boolean
- * comparison that is to be performed by the scale.
- */
- public enum BooleanType {
- /**
- * <b>EQUAL_TO</b><br/><br/>
- * Performs the boolean check:<br/><br/>
- * <code>[External Value] == [Comparison Value]</code>
- */
- EQUAL_TO,
-
- /**
- * <b>NOT_EQUAL_TO</b><br/><br/>
- * Performs the boolean check:<br/><br/>
- * <code>[External Value] != [Comparison Value]</code>
- */
- NOT_EQUAL_TO,
-
- /**
- * <b>GREATER_THAN</b><br/><br/>
- * Performs the boolean check:<br/><br/>
- * <code>[External Value] > [Comparison Value]</code>
- */
- GREATER_THAN,
-
- /**
- * <b>LESS_THAN</b><br/><br/>
- * Performs the boolean check:<br/><br/>
- * <code>[External Value] < [Comparison Value]</code>
- */
- LESS_THAN,
-
- /**
- * <b>GREATER_THAN_OR_EQUAL_TO</b><br/><br/>
- * Performs the boolean check:<br/><br/>
- * <code>[External Value] >= [Comparison Value]</code>
- */
- GREATER_THAN_OR_EQUAL_TO,
-
- /**
- * <b>LESS_THAN_OR_EQUAL_TO</b><br/><br/>
- * Performs the boolean check:<br/><br/>
- * <code>[External Value] <= [Comparison Value]</code>
- */
- LESS_THAN_OR_EQUAL_TO
- };
+ // The color to display for values which pass the boolean check.
+ private Color activeColor = new Color(255, 50, 50);
+ // The color to display for values that fail the boolean check.
+ private Color inactiveColor = Color.WHITE;
+ // The critical value against which the boolean check is performed.
+ private double value = 0.0;
+ // The type of this boolean scale.
+ private final BooleanType boolType;
+
+ /**
+ * <b>BooleanMap</b><br/><br/>
+ * <code>public <b>BooleanMap</b>(BooleanType type, double comparisonValue)</code><br/><br/>
+ * Defines a <code>ColorScale</code> which maps values to colors
+ * based on a boolean comparison.
+ * @param type - The type of boolean comparison to perform.
+ * @param comparisonValue - The value against which the comparison
+ * should be made.
+ */
+ public BooleanMap(BooleanType type, double comparisonValue) {
+ // Make sure the comparison type is not null.
+ if(type == null) { throw new IllegalArgumentException("Boolean comparison type can not be null."); }
+
+ // Define the critical value and the boolean type.
+ value = comparisonValue;
+ boolType = type;
+ }
+
+ /**
+ * <b>BooleanMap</b><br/><br/>
+ * <code>public <b>BooleanMap</b>(BooleanType type, double comparisonValue,
+ * Color activeColor)</code><br/><br/>
+ * Defines a <code>ColorScale</code> which maps values to colors
+ * based on a boolean comparison.
+ * @param type - The type of boolean comparison to perform.
+ * @param comparisonValue - The value against which the comparison
+ * should be made.
+ * @param activeColor - The color in which values that pass the
+ * comparison should be displayed.
+ */
+ public BooleanMap(BooleanType type, double comparisonValue, Color activeColor) {
+ // Set the critical value and the boolean type.
+ this(type, comparisonValue);
+
+ // Set the active color.
+ this.activeColor = activeColor;
+ }
+
+ /**
+ * <b>BooleanMap</b><br/><br/>
+ * <code>public <b>BooleanMap</b>(BooleanType type, double comparisonValue,
+ * Color activeColor, Color inactiveColor)</code><br/><br/>
+ * Defines a <code>ColorScale</code> which maps values to colors
+ * based on a boolean comparison.
+ * @param type - The type of boolean comparison to perform.
+ * @param comparisonValue - The value against which the comparison
+ * should be made.
+ * @param activeColor - The color in which values that pass the
+ * comparison should be displayed.
+ * @param inactiveColor - The color in which values that fail the
+ * comparison should be displayed.
+ */
+ public BooleanMap(BooleanType type, double comparisonValue, Color activeColor, Color inactiveColor) {
+ // Set the critical value and the boolean type.
+ this(type, comparisonValue);
+
+ // Set the active and inactive colors.
+ this.activeColor = activeColor;
+ this.inactiveColor = inactiveColor;
+ }
+
+ public Color getColor(Double value) {
+ // If the argument is null, treat it is zero.
+ if(value == null) { value = 0.0; }
+
+ // If it passes the boolean comparison, return the active color.
+ if(passes(value)) { return activeColor; }
+
+ // Otherwise, return the inactive color.
+ else { return inactiveColor; }
+ }
+
+ /**
+ * <b>getActiveColor</b><br/><br/>
+ * <code>public Color <b>getActiveColor</b>()</code><br/><br/>
+ * Gets the color used by the scale for values which pass the
+ * boolean comparison.
+ * @return Returns the color as a <code>Color</code> object.
+ */
+ public Color getActiveColor() { return activeColor; }
+
+ /**
+ * <b>getBooleanType</b><br/><br/>
+ * <code>public BooleanType <b>getBooleanType</b>()</code><br/><br/>
+ * Indicates what type of boolean comparison is performed by this
+ * scale.
+ * @return Returns the type of comparison as a <code>BooleanType
+ * </code> enumerable.
+ */
+ public BooleanType getBooleanType() { return boolType; }
+
+ /**
+ * <b>getComparisonValue</b><br/><br/>
+ * <code>public double <b>getComparisonValue</b>()</code><br/><br/>
+ * Gets the value against which the boolean comparisons are
+ * performed.
+ * @return Returns the value which is compared against.
+ */
+ public double getComparisonValue() { return value; }
+
+ /**
+ * <b>getInactiveColor</b><br/><br/>
+ * <code>public Color <b>getInactiveColor</b>()</code><br/><br/>
+ * Gets the color used by the scale for values which fail the
+ * boolean comparison.
+ * @return Returns the color as a <code>Color</code> object.
+ */
+ public Color getInactiveColor() { return inactiveColor; }
+
+ /**
+ * <b>setComparisonValue</b><br/><br/>
+ * <code>public void <b>setComparisonValue</b>(double value)</code><br/><br/>
+ * Sets the value against which the boolean comparison is performed.
+ * @param value - The value to compare against.
+ */
+ public void setComparisonValue(double value) { this.value = value; }
+
+ /**
+ * <b>passes</b><br/><br/>
+ * <code>private boolean <b>passes</b>(double d)</code><br/><br/>
+ * Determines whether a given external value passes the boolean
+ * check or not.
+ * @param d - The external value to compare.
+ * @return Returns <code>true</code> if the value passes the boolean
+ * check and <code>false</code> if it does not.
+ */
+ private boolean passes(double d) {
+ // Perform the appropriate comparison. Note that the default
+ // case is included to satisfy the compiler -- it should not
+ // ever actually be used.
+ switch(boolType) {
+ case EQUAL_TO:
+ return d == value;
+ case NOT_EQUAL_TO:
+ return d != value;
+ case GREATER_THAN:
+ return d > value;
+ case LESS_THAN:
+ return d < value;
+ case GREATER_THAN_OR_EQUAL_TO:
+ return d >= value;
+ case LESS_THAN_OR_EQUAL_TO:
+ return d<= value;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Enumerable <code>BooleanType</code> defines the type of boolean
+ * comparison that is to be performed by the scale.
+ */
+ public enum BooleanType {
+ /**
+ * <b>EQUAL_TO</b><br/><br/>
+ * Performs the boolean check:<br/><br/>
+ * <code>[External Value] == [Comparison Value]</code>
+ */
+ EQUAL_TO,
+
+ /**
+ * <b>NOT_EQUAL_TO</b><br/><br/>
+ * Performs the boolean check:<br/><br/>
+ * <code>[External Value] != [Comparison Value]</code>
+ */
+ NOT_EQUAL_TO,
+
+ /**
+ * <b>GREATER_THAN</b><br/><br/>
+ * Performs the boolean check:<br/><br/>
+ * <code>[External Value] > [Comparison Value]</code>
+ */
+ GREATER_THAN,
+
+ /**
+ * <b>LESS_THAN</b><br/><br/>
+ * Performs the boolean check:<br/><br/>
+ * <code>[External Value] < [Comparison Value]</code>
+ */
+ LESS_THAN,
+
+ /**
+ * <b>GREATER_THAN_OR_EQUAL_TO</b><br/><br/>
+ * Performs the boolean check:<br/><br/>
+ * <code>[External Value] >= [Comparison Value]</code>
+ */
+ GREATER_THAN_OR_EQUAL_TO,
+
+ /**
+ * <b>LESS_THAN_OR_EQUAL_TO</b><br/><br/>
+ * Performs the boolean check:<br/><br/>
+ * <code>[External Value] <= [Comparison Value]</code>
+ */
+ LESS_THAN_OR_EQUAL_TO
+ };
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/ColorScale.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/ColorScale.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/ColorScale.java Wed Mar 9 11:43:24 2016
@@ -47,8 +47,8 @@
* value, if scaling is logarithmic.
*/
public double getScaledMaximum() {
- if(linear) { return max; }
- else { return lMax; }
+ if(linear) { return max; }
+ else { return lMax; }
}
/**
@@ -61,8 +61,8 @@
* value, if scaling is logarithmic.
*/
public double getScaledMinimum() {
- if(linear) { return min; }
- else { return lMin; }
+ if(linear) { return min; }
+ else { return lMin; }
}
/**
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/CrystalEvent.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/CrystalEvent.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/CrystalEvent.java Wed Mar 9 11:43:24 2016
@@ -14,41 +14,41 @@
* @author Kyle McCarty
*/
public class CrystalEvent extends AWTEvent {
- private static final long serialVersionUID = 77198267255387212L;
- // Stores the location of the triggering crystal.
- private final Point crystal;
- // The AWTEvent id for this event.
- private static final int AWT_ID = AWTEvent.RESERVED_ID_MAX + 10;
-
- /**
- * <b>CrystalEvent</b><br/><br/>
- * <code>public <b>CrystalEvent</b>(Viewer parent, Point triggerCrystal)</code><br/><br/>
- * Creates a crystal event for the indicated crystal and triggering
- * component.
- * @param source - The triggering component.
- * @param triggerCrystal - The crystal associated with the event.
- * @throws IllegalArgumentException Occurs if the associated crystal
- * is <code>null</code>.
- */
- public CrystalEvent(Viewer source, Point triggerCrystal) throws IllegalArgumentException {
- // Run the superclass constructor.
- super(source, AWT_ID);
-
- // Make sure that the trigger crystal is not null.
- if(triggerCrystal == null) {
- throw new IllegalArgumentException("Crystal events can not occur with respect to non-exstant crystals.");
- }
-
- // Define the event parameters.
- crystal = triggerCrystal;
- }
-
- /**
- * <b>getCrystalID</b><br/><br/>
- * <code>public Point <b>getCrystalID</b>()</code><br/><br/>
- * Indicates the panel indices at which the crystal is located.
- * @return Returns the crystal's panel indices as a <code>Point
- * </code> object.
- */
- public Point getCrystalID() { return crystal; }
+ private static final long serialVersionUID = 77198267255387212L;
+ // Stores the location of the triggering crystal.
+ private final Point crystal;
+ // The AWTEvent id for this event.
+ private static final int AWT_ID = AWTEvent.RESERVED_ID_MAX + 10;
+
+ /**
+ * <b>CrystalEvent</b><br/><br/>
+ * <code>public <b>CrystalEvent</b>(Viewer parent, Point triggerCrystal)</code><br/><br/>
+ * Creates a crystal event for the indicated crystal and triggering
+ * component.
+ * @param source - The triggering component.
+ * @param triggerCrystal - The crystal associated with the event.
+ * @throws IllegalArgumentException Occurs if the associated crystal
+ * is <code>null</code>.
+ */
+ public CrystalEvent(Viewer source, Point triggerCrystal) throws IllegalArgumentException {
+ // Run the superclass constructor.
+ super(source, AWT_ID);
+
+ // Make sure that the trigger crystal is not null.
+ if(triggerCrystal == null) {
+ throw new IllegalArgumentException("Crystal events can not occur with respect to non-exstant crystals.");
+ }
+
+ // Define the event parameters.
+ crystal = triggerCrystal;
+ }
+
+ /**
+ * <b>getCrystalID</b><br/><br/>
+ * <code>public Point <b>getCrystalID</b>()</code><br/><br/>
+ * Indicates the panel indices at which the crystal is located.
+ * @return Returns the crystal's panel indices as a <code>Point
+ * </code> object.
+ */
+ public Point getCrystalID() { return crystal; }
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/CrystalListener.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/CrystalListener.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/CrystalListener.java Wed Mar 9 11:43:24 2016
@@ -11,27 +11,27 @@
* @author Kyle McCarty
*/
public interface CrystalListener extends EventListener {
- /**
- * <b>crystalActivated</b><br/><br/>
- * <code>public void <b>crystalActivated</b>(CrystalEvent e)</code><br/><br/>
- * Invoked when a crystal becomes highlighted.
- * @param e - An object describing the event.
- */
- public void crystalActivated(CrystalEvent e);
-
- /**
- * <b>crystalDeactivated</b><br/><br/>
- * <code>public void <b>crystalDeactivated</b>(CrystalEvent e)</code><br/><br/>
- * Invoked when a crystal ceases to be highlighted.
- * @param e - An object describing the event.
- */
- public void crystalDeactivated(CrystalEvent e);
-
- /**
- * <b>crystalClicked</b><br/><br/>
- * <code>public void <b>crystalClicked</b>(CrystalEvent e)</code><br/><br/>
- * Invoked when a crystal is clicked
- * @param e - An object describing the event.
- */
- public void crystalClicked(CrystalEvent e);
+ /**
+ * <b>crystalActivated</b><br/><br/>
+ * <code>public void <b>crystalActivated</b>(CrystalEvent e)</code><br/><br/>
+ * Invoked when a crystal becomes highlighted.
+ * @param e - An object describing the event.
+ */
+ public void crystalActivated(CrystalEvent e);
+
+ /**
+ * <b>crystalDeactivated</b><br/><br/>
+ * <code>public void <b>crystalDeactivated</b>(CrystalEvent e)</code><br/><br/>
+ * Invoked when a crystal ceases to be highlighted.
+ * @param e - An object describing the event.
+ */
+ public void crystalDeactivated(CrystalEvent e);
+
+ /**
+ * <b>crystalClicked</b><br/><br/>
+ * <code>public void <b>crystalClicked</b>(CrystalEvent e)</code><br/><br/>
+ * Invoked when a crystal is clicked
+ * @param e - An object describing the event.
+ */
+ public void crystalClicked(CrystalEvent e);
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/DatabaseCheck.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/DatabaseCheck.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/DatabaseCheck.java Wed Mar 9 11:43:24 2016
@@ -17,122 +17,122 @@
import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
public class DatabaseCheck {
- private static final Set<Integer> idFailSet = new HashSet<Integer>();
- private static final Set<Point> pointFailSet = new HashSet<Point>();
-
- public static void main(String[] args) throws ConditionsNotFoundException, IOException {
- // Check that an appropriate file has been given.
- String filepath = null;
- if(args.length == 1) {
- filepath = args[0];
- }
-
- // If no file path was defined, throw an error.
- if(filepath == null) {
- throw new FileNotFoundException("No CSV mapping file defined.");
- }
-
- // Initialize the local database.
- EcalWiringManager manager = new EcalWiringManager(filepath);
-
- // Initialize the database.
- int runNumber = 2000;
- String detectorName = "HPS-Proposal2014-v7-2pt2";
- DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
- conditionsManager.setDetector(detectorName, runNumber);
-
- // Get ECAL conditions.
- EcalConditions ecalConditions = DatabaseConditionsManager.getInstance().getEcalConditions();
-
- // Get the list of EcalChannel objects.
- EcalChannelCollection channels = ecalConditions.getChannelCollection();
- EcalLedCollection leds = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
-
- // Map the LED objects to their channels.
- Map<Integer, EcalLed> ledMap = new HashMap<Integer, EcalLed>();
+ private static final Set<Integer> idFailSet = new HashSet<Integer>();
+ private static final Set<Point> pointFailSet = new HashSet<Point>();
+
+ public static void main(String[] args) throws ConditionsNotFoundException, IOException {
+ // Check that an appropriate file has been given.
+ String filepath = null;
+ if(args.length == 1) {
+ filepath = args[0];
+ }
+
+ // If no file path was defined, throw an error.
+ if(filepath == null) {
+ throw new FileNotFoundException("No CSV mapping file defined.");
+ }
+
+ // Initialize the local database.
+ EcalWiringManager manager = new EcalWiringManager(filepath);
+
+ // Initialize the database.
+ int runNumber = 2000;
+ String detectorName = "HPS-Proposal2014-v7-2pt2";
+ DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+ conditionsManager.setDetector(detectorName, runNumber);
+
+ // Get ECAL conditions.
+ EcalConditions ecalConditions = DatabaseConditionsManager.getInstance().getEcalConditions();
+
+ // Get the list of EcalChannel objects.
+ EcalChannelCollection channels = ecalConditions.getChannelCollection();
+ EcalLedCollection leds = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
+
+ // Map the LED objects to their channels.
+ Map<Integer, EcalLed> ledMap = new HashMap<Integer, EcalLed>();
for (EcalLed led : leds) {
- ledMap.put(led.getEcalChannelId(), led);
+ ledMap.put(led.getEcalChannelId(), led);
}
-
- // Perform the comparison test.
- for(EcalChannel channel : channels) {
- // Get the crystal point information.
- Point crystal = new Point(channel.getX(), channel.getY());
-
- // Get the data from manager.
- CrystalDataSet data = manager.getCrystalData(crystal);
-
- // Get the appropriate LED collection.
- EcalLed led = ledMap.get(channel.getChannelId());
-
- // Perform the comparison.
- System.out.printf("Checking Mappings for Crystal (%3d, %3d):%n", crystal.x, crystal.y);
- System.out.printf("\tChannel ID :: %d%n", channel.getChannelId());
-
- System.out.printf("\tChannel [ %3d ] vs [ %3d ] ... ", channel.getChannel(), data.getFADCChannel());
- if(channel.getChannel() == data.getFADCChannel()) {
- System.out.printf("[ Success ]%n");
- } else {
- System.out.printf("[ Failure ]%n");
- idFailSet.add(channel.getChannelId());
- pointFailSet.add(crystal);
- }
-
- int crate = data.getMotherboard().isTop() ? 1 : 2;
- System.out.printf("\tCrate [ %3d ] vs [ %3d ] ... ", channel.getCrate(), crate);
- if(channel.getCrate() == crate) {
- System.out.printf("[ Success ]%n");
- } else {
- System.out.printf("[ Failure ]%n");
- idFailSet.add(channel.getChannelId());
- pointFailSet.add(crystal);
- }
-
- System.out.printf("\tSlot [ %3d ] vs [ %3d ] ... ", channel.getSlot(), data.getFADCSlot());
- if(channel.getSlot() == data.getFADCSlot()) {
- System.out.printf("[ Success ]%n");
- } else {
- System.out.printf("[ Failure ]%n");
- idFailSet.add(channel.getChannelId());
- pointFailSet.add(crystal);
- }
-
- System.out.printf("\tLED Channel [ %3d ] vs [ %3d ] ... ", led.getLedNumber(), data.getLEDChannel());
- if(led.getLedNumber() == data.getLEDChannel()) {
- System.out.printf("[ Success ]%n");
- } else {
- System.out.printf("[ Failure ]%n");
- idFailSet.add(channel.getChannelId());
- pointFailSet.add(crystal);
- }
-
- System.out.printf("\tLED Crate [ %3d ] vs [ %3d ] ... ", led.getCrateNumber(), crate);
- if(led.getCrateNumber() == crate) {
- System.out.printf("[ Success ]%n");
- } else {
- System.out.printf("[ Failure ]%n");
- idFailSet.add(channel.getChannelId());
- pointFailSet.add(crystal);
- }
-
- System.out.println();
- System.out.println();
- }
-
- // Print out the failing crystals.
- System.out.println("Crystals that Failed:");
- for(Point fail : pointFailSet) {
- System.out.printf("\tCrystal (%3d, %3d)%n", fail.x, fail.y);
- }
- if(pointFailSet.isEmpty()) {
- System.out.println("\tNone!");
- }
-
- // Indicate the database connection settings.
- System.out.println("\n");
- System.out.printf("Detector :: %s%n", detectorName);
- System.out.printf("Run Number :: %d%n", runNumber);
- System.out.printf("Channel Collection :: %d%n", channels.getCollectionId());
- System.out.printf("LED Collection :: %d%n", leds.getCollectionId());
- }
+
+ // Perform the comparison test.
+ for(EcalChannel channel : channels) {
+ // Get the crystal point information.
+ Point crystal = new Point(channel.getX(), channel.getY());
+
+ // Get the data from manager.
+ CrystalDataSet data = manager.getCrystalData(crystal);
+
+ // Get the appropriate LED collection.
+ EcalLed led = ledMap.get(channel.getChannelId());
+
+ // Perform the comparison.
+ System.out.printf("Checking Mappings for Crystal (%3d, %3d):%n", crystal.x, crystal.y);
+ System.out.printf("\tChannel ID :: %d%n", channel.getChannelId());
+
+ System.out.printf("\tChannel [ %3d ] vs [ %3d ] ... ", channel.getChannel(), data.getFADCChannel());
+ if(channel.getChannel() == data.getFADCChannel()) {
+ System.out.printf("[ Success ]%n");
+ } else {
+ System.out.printf("[ Failure ]%n");
+ idFailSet.add(channel.getChannelId());
+ pointFailSet.add(crystal);
+ }
+
+ int crate = data.getMotherboard().isTop() ? 1 : 2;
+ System.out.printf("\tCrate [ %3d ] vs [ %3d ] ... ", channel.getCrate(), crate);
+ if(channel.getCrate() == crate) {
+ System.out.printf("[ Success ]%n");
+ } else {
+ System.out.printf("[ Failure ]%n");
+ idFailSet.add(channel.getChannelId());
+ pointFailSet.add(crystal);
+ }
+
+ System.out.printf("\tSlot [ %3d ] vs [ %3d ] ... ", channel.getSlot(), data.getFADCSlot());
+ if(channel.getSlot() == data.getFADCSlot()) {
+ System.out.printf("[ Success ]%n");
+ } else {
+ System.out.printf("[ Failure ]%n");
+ idFailSet.add(channel.getChannelId());
+ pointFailSet.add(crystal);
+ }
+
+ System.out.printf("\tLED Channel [ %3d ] vs [ %3d ] ... ", led.getLedNumber(), data.getLEDChannel());
+ if(led.getLedNumber() == data.getLEDChannel()) {
+ System.out.printf("[ Success ]%n");
+ } else {
+ System.out.printf("[ Failure ]%n");
+ idFailSet.add(channel.getChannelId());
+ pointFailSet.add(crystal);
+ }
+
+ System.out.printf("\tLED Crate [ %3d ] vs [ %3d ] ... ", led.getCrateNumber(), crate);
+ if(led.getCrateNumber() == crate) {
+ System.out.printf("[ Success ]%n");
+ } else {
+ System.out.printf("[ Failure ]%n");
+ idFailSet.add(channel.getChannelId());
+ pointFailSet.add(crystal);
+ }
+
+ System.out.println();
+ System.out.println();
+ }
+
+ // Print out the failing crystals.
+ System.out.println("Crystals that Failed:");
+ for(Point fail : pointFailSet) {
+ System.out.printf("\tCrystal (%3d, %3d)%n", fail.x, fail.y);
+ }
+ if(pointFailSet.isEmpty()) {
+ System.out.println("\tNone!");
+ }
+
+ // Indicate the database connection settings.
+ System.out.println("\n");
+ System.out.printf("Detector :: %s%n", detectorName);
+ System.out.printf("Run Number :: %d%n", runNumber);
+ System.out.printf("Channel Collection :: %d%n", channels.getCollectionId());
+ System.out.printf("LED Collection :: %d%n", leds.getCollectionId());
+ }
}
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/GradientScale.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/GradientScale.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/GradientScale.java Wed Mar 9 11:43:24 2016
@@ -21,9 +21,9 @@
private int[] drgb = { 255, 255, 255 };
public Color getColor(Double value) {
- // If the argument is null, treat it as zero.
- if(value == null) { value = 0.0; }
-
+ // If the argument is null, treat it as zero.
+ if(value == null) { value = 0.0; }
+
// If the value is less than the minimum, return the cold color.
if (value < min) { return coldColor; }
Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/MultiGradientScale.java
=============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/MultiGradientScale.java (original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/util/MultiGradientScale.java Wed Mar 9 11:43:24 2016
@@ -29,9 +29,9 @@
}
public Color getColor(Double value) {
- // If the value is null, treat it as zero.
- if(value == null) { value = 0.0; }
-
+ // If the value is null, treat it as zero.
+ if(value == null) { value = 0.0; }
+
// Get the number of colors and scales.
int colors = colorList.size();
int scales = scaleList.size();
@@ -48,7 +48,7 @@
else { sValue = Math.log10(scale * value); }
if(value < 1 && (Double.isNaN(sValue) || Double.isInfinite(sValue))) {
- return scaleList.get(0).getColor(0.0);
+ return scaleList.get(0).getColor(0.0);
}
// Otherwise, determine which scale should get the value.
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ClockSingleton.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ClockSingleton.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ClockSingleton.java Wed Mar 9 11:43:24 2016
@@ -13,35 +13,35 @@
*/
public class ClockSingleton {
- public static final ClockSingleton _instance = new ClockSingleton();
- private int clock;
- //time between events (bunch spacing)
- private double dt = 2.0;
+ public static final ClockSingleton _instance = new ClockSingleton();
+ private int clock;
+ //time between events (bunch spacing)
+ private double dt = 2.0;
- private ClockSingleton() {
- }
+ private ClockSingleton() {
+ }
- public static void init() {
- _instance.clock = 0;
- }
+ public static void init() {
+ _instance.clock = 0;
+ }
- public static int getClock() {
- return _instance.clock;
- }
+ public static int getClock() {
+ return _instance.clock;
+ }
- public static double getTime() {
- return _instance.dt * _instance.clock;
- }
+ public static double getTime() {
+ return _instance.dt * _instance.clock;
+ }
- public static double getDt() {
- return _instance.dt;
- }
+ public static double getDt() {
+ return _instance.dt;
+ }
- public static void setDt(double dt) {
- _instance.dt = dt;
- }
+ public static void setDt(double dt) {
+ _instance.dt = dt;
+ }
- public static void step() {
- _instance.clock++;
- }
+ public static void step() {
+ _instance.clock++;
+ }
}
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCEcalReadoutDriver.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCEcalReadoutDriver.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCEcalReadoutDriver.java Wed Mar 9 11:43:24 2016
@@ -383,7 +383,7 @@
}
} else {
if (pedestalSubtractedValue < triggerThreshold || triggerPathHitTimes.get(cellID) + delay0 == readoutCounter) {
-// System.out.printf("sum = %f\n",sum);
+// System.out.printf("sum = %f\n",sum);
triggerPathDelayQueue.add(new BaseRawCalorimeterHit(cellID,
(int) Math.round((sum + pedestalSubtractedValue) / scaleFactor),
64 * triggerPathHitTimes.get(cellID)));
@@ -460,15 +460,15 @@
short[] adcValues = new short[readoutWindow];
for (int i = 0; i < readoutWindow; i++) {
adcValues[i] = (short) pipeline.getValue(readoutLatency - i - 1);
-// if (adcValues[i] != 0) {
-// System.out.println("getWindow: " + adcValues[i] + " at i = " + i);
-// }
+// if (adcValues[i] != 0) {
+// System.out.println("getWindow: " + adcValues[i] + " at i = " + i);
+// }
}
return adcValues;
}
protected List<RawTrackerHit> readWindow() {
-// System.out.println("Reading FADC data");
+// System.out.println("Reading FADC data");
List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
for (Long cellID : digitalPipelines.keySet()) {
short[] adcValues = getWindow(cellID);
@@ -488,7 +488,7 @@
}
protected List<RawTrackerHit> readPulses() {
-// System.out.println("Reading FADC data");
+// System.out.println("Reading FADC data");
List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>();
for (Long cellID : digitalPipelines.keySet()) {
short[] window = getWindow(cellID);
@@ -522,7 +522,7 @@
}
protected List<RawCalorimeterHit> readIntegrals() {
-// System.out.println("Reading FADC data");
+// System.out.println("Reading FADC data");
List<RawCalorimeterHit> hits = new ArrayList<RawCalorimeterHit>();
for (Long cellID : digitalPipelines.keySet()) {
short[] window = getWindow(cellID);
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCPrimaryTriggerDriver.java Wed Mar 9 11:43:24 2016
@@ -34,7 +34,7 @@
private int pairCoincidence = 2; // Maximum allowed time difference between clusters. (4 ns clock-cycles)
private int backgroundLevel = -1; // Automatically sets the cuts to achieve a predetermined background rate.
private TriggerModule triggerModule = new TriggerModule(1.0, 0.050,
- 6.600, 0.010, 6.600, 0.000, 13.200, 6.600, 0.0, 360, 0.0055);
+ 6.600, 0.010, 6.600, 0.000, 13.200, 6.600, 0.0, 360, 0.0055);
// ==================================================================
// ==== Driver Internal Variables ===================================
@@ -77,55 +77,55 @@
*/
@Override
public void startOfData() {
- // Define plot type names.
- String[] plotType = new String[PLOT_COUNT];
- plotType[NO_CUTS] = "";
- plotType[ALL_CUTS] = " (Passed All Cuts)";
- plotType[OVER_1HIT] = " (More than 1 Hit)";
- plotType[OVER_2HIT] = " (More than 2 Hits)";
- plotType[SINGLES_CUTS] = " (Passed Single Cuts)";
-
- // Define plot type directories.
- String[] plotDir = new String[PLOT_COUNT];
- plotDir[NO_CUTS] = "NoCuts/";
- plotDir[ALL_CUTS] = "PassedAll/";
- plotDir[OVER_1HIT] = "2PlusHits/";
- plotDir[OVER_2HIT] = "3PlusHits/";
- plotDir[SINGLES_CUTS] = "PassedSingles/";
-
- // Instantiate the singles plot arrays.
- clusterSeedEnergy = new IHistogram1D[PLOT_COUNT];
- clusterHitCount = new IHistogram1D[PLOT_COUNT];
- clusterTotalEnergy = new IHistogram1D[PLOT_COUNT];
- clusterDistribution = new IHistogram2D[PLOT_COUNT];
-
- // Instantiate the pair plot arrays. Note that the pair cuts
- // only ever see clusters that pass the singles cuts, so the
- // "passed singles cuts" plots are meaningless. Thusly, the
- // pair plots have one fewer plot than the singles.
- pairEnergySum = new IHistogram1D[PLOT_COUNT - 1];
- pairEnergyDifference = new IHistogram1D[PLOT_COUNT - 1];
- pairCoplanarity = new IHistogram1D[PLOT_COUNT - 1];
- pairEnergySlope = new IHistogram1D[PLOT_COUNT - 1];
- pairEnergySum2DDistribution = new IHistogram2D[PLOT_COUNT - 1];
-
- // Instantiate the plots.
- for(int i = 0; i < PLOT_COUNT; i++) {
- System.out.println(plotDir[i] + "Cluster Seed Energy" + plotType[i]);
- clusterSeedEnergy[i] = aida.histogram1D(plotDir[i] + "Cluster Seed Energy" + plotType[i], 176, 0.0, 2.2);
- clusterHitCount[i] = aida.histogram1D(plotDir[i] + "Cluster Hit Count" + plotType[i], 9, 0.5, 9.5);
- clusterTotalEnergy[i] = aida.histogram1D(plotDir[i] + "Cluster Total Energy" + plotType[i], 176, 0.0, 2.2);
- clusterDistribution[i] = aida.histogram2D(plotDir[i] + "Cluster Seed" + plotType[i], 46, -23, 23, 11, -5.5, 5.5);
-
- if(i != PLOT_COUNT - 1) {
- pairEnergySum[i] = aida.histogram1D(plotDir[i] + "Pair Energy Sum" + plotType[i], 176, 0.0, 4.4);
- pairEnergyDifference[i] = aida.histogram1D(plotDir[i] + "Pair Energy Difference" + plotType[i], 176, 0.0, 2.2);
- pairCoplanarity[i] = aida.histogram1D(plotDir[i] + "Pair Coplanarity" + plotType[i], 180, 0.0, 180.0);
- pairEnergySlope[i] = aida.histogram1D(plotDir[i] + "Pair Energy Slope" + plotType[i], 200, 0.0, 4.0);
- pairEnergySum2DDistribution[i] = aida.histogram2D(plotDir[i] + "Pair Energy Sum 2D" + plotType[i], 176, 0.0, 4.4, 176, 0.0, 4.4);
- }
- }
-
+ // Define plot type names.
+ String[] plotType = new String[PLOT_COUNT];
+ plotType[NO_CUTS] = "";
+ plotType[ALL_CUTS] = " (Passed All Cuts)";
+ plotType[OVER_1HIT] = " (More than 1 Hit)";
+ plotType[OVER_2HIT] = " (More than 2 Hits)";
+ plotType[SINGLES_CUTS] = " (Passed Single Cuts)";
+
+ // Define plot type directories.
+ String[] plotDir = new String[PLOT_COUNT];
+ plotDir[NO_CUTS] = "NoCuts/";
+ plotDir[ALL_CUTS] = "PassedAll/";
+ plotDir[OVER_1HIT] = "2PlusHits/";
+ plotDir[OVER_2HIT] = "3PlusHits/";
+ plotDir[SINGLES_CUTS] = "PassedSingles/";
+
+ // Instantiate the singles plot arrays.
+ clusterSeedEnergy = new IHistogram1D[PLOT_COUNT];
+ clusterHitCount = new IHistogram1D[PLOT_COUNT];
+ clusterTotalEnergy = new IHistogram1D[PLOT_COUNT];
+ clusterDistribution = new IHistogram2D[PLOT_COUNT];
+
+ // Instantiate the pair plot arrays. Note that the pair cuts
+ // only ever see clusters that pass the singles cuts, so the
+ // "passed singles cuts" plots are meaningless. Thusly, the
+ // pair plots have one fewer plot than the singles.
+ pairEnergySum = new IHistogram1D[PLOT_COUNT - 1];
+ pairEnergyDifference = new IHistogram1D[PLOT_COUNT - 1];
+ pairCoplanarity = new IHistogram1D[PLOT_COUNT - 1];
+ pairEnergySlope = new IHistogram1D[PLOT_COUNT - 1];
+ pairEnergySum2DDistribution = new IHistogram2D[PLOT_COUNT - 1];
+
+ // Instantiate the plots.
+ for(int i = 0; i < PLOT_COUNT; i++) {
+ System.out.println(plotDir[i] + "Cluster Seed Energy" + plotType[i]);
+ clusterSeedEnergy[i] = aida.histogram1D(plotDir[i] + "Cluster Seed Energy" + plotType[i], 176, 0.0, 2.2);
+ clusterHitCount[i] = aida.histogram1D(plotDir[i] + "Cluster Hit Count" + plotType[i], 9, 0.5, 9.5);
+ clusterTotalEnergy[i] = aida.histogram1D(plotDir[i] + "Cluster Total Energy" + plotType[i], 176, 0.0, 2.2);
+ clusterDistribution[i] = aida.histogram2D(plotDir[i] + "Cluster Seed" + plotType[i], 46, -23, 23, 11, -5.5, 5.5);
+
+ if(i != PLOT_COUNT - 1) {
+ pairEnergySum[i] = aida.histogram1D(plotDir[i] + "Pair Energy Sum" + plotType[i], 176, 0.0, 4.4);
+ pairEnergyDifference[i] = aida.histogram1D(plotDir[i] + "Pair Energy Difference" + plotType[i], 176, 0.0, 2.2);
+ pairCoplanarity[i] = aida.histogram1D(plotDir[i] + "Pair Coplanarity" + plotType[i], 180, 0.0, 180.0);
+ pairEnergySlope[i] = aida.histogram1D(plotDir[i] + "Pair Energy Slope" + plotType[i], 200, 0.0, 4.0);
+ pairEnergySum2DDistribution[i] = aida.histogram2D(plotDir[i] + "Pair Energy Sum 2D" + plotType[i], 176, 0.0, 4.4, 176, 0.0, 4.4);
+ }
+ }
+
// Make sure that a valid cluster collection name has been
// defined. If it has not, throw an exception.
if (clusterCollectionName == null) {
@@ -239,15 +239,15 @@
// Fill the hit count plots for N > 1.
if(hitCount > 1) {
- // Populate the plots.
+ // Populate the plots.
clusterSeedEnergy[OVER_1HIT].fill(seedEnergy);
clusterTotalEnergy[OVER_1HIT].fill(clusterEnergy);
clusterHitCount[OVER_1HIT].fill(hitCount);
clusterDistribution[OVER_1HIT].fill(ix, iy);
-
+
// Fill the hit count plots for N > 2.
if(hitCount > 2) {
- // Populate the plots.
+ // Populate the plots.
clusterSeedEnergy[OVER_2HIT].fill(seedEnergy);
clusterTotalEnergy[OVER_2HIT].fill(clusterEnergy);
clusterHitCount[OVER_2HIT].fill(hitCount);
@@ -260,14 +260,14 @@
// VERBOSE :: Print the seed energy comparison check.
if(verbose) {
System.out.printf("\tSeed Energy Cut :: %.3f < %.3f < %.3f --> %b%n",
- triggerModule.getCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW), seedEnergy,
- triggerModule.getCutValue(TriggerModule.CLUSTER_SEED_ENERGY_HIGH),
- triggerModule.clusterSeedEnergyCut(cluster));
+ triggerModule.getCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW), seedEnergy,
+ triggerModule.getCutValue(TriggerModule.CLUSTER_SEED_ENERGY_HIGH),
+ triggerModule.clusterSeedEnergyCut(cluster));
}
// If the cluster fails the cut, skip to the next cluster.
if(!triggerModule.clusterSeedEnergyCut(cluster)) {
- continue clusterLoop;
+ continue clusterLoop;
}
// Otherwise, note that it passed the cut.
@@ -278,13 +278,13 @@
// VERBOSE :: Print the hit count comparison check.
if(verbose) {
System.out.printf("\tHit Count Cut :: %d >= %.0f --> %b%n",
- hitCount, triggerModule.getCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW),
- triggerModule.clusterHitCountCut(cluster));
+ hitCount, triggerModule.getCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW),
+ triggerModule.clusterHitCountCut(cluster));
}
// If the cluster fails the cut, skip to the next cluster.
if(!triggerModule.clusterHitCountCut(cluster)) {
- continue clusterLoop;
+ continue clusterLoop;
}
// Otherwise, note that it passed the cut.
@@ -295,14 +295,14 @@
// VERBOSE :: Print the cluster energy comparison check.
if(verbose) {
System.out.printf("\tCluster Energy Cut :: %.3f < %.3f < %.3f --> %b%n",
- triggerModule.getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW), clusterEnergy,
- triggerModule.getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH),
- triggerModule.clusterTotalEnergyCut(cluster));
+ triggerModule.getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW), clusterEnergy,
+ triggerModule.getCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH),
+ triggerModule.clusterTotalEnergyCut(cluster));
}
// If the cluster fails the cut, skip to the next cluster.
if(!triggerModule.clusterTotalEnergyCut(cluster)) {
- continue clusterLoop;
+ continue clusterLoop;
}
// Otherwise, note that it passed the cut.
@@ -544,63 +544,63 @@
// Some cut values are almost always the same thing. Set those
// here and only overwrite if necessary.
- triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW, 0.125);
- triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_HIGH, 1.300);
- triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.200);
- triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 1.700);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.500);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 2.000);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 1.200);
- triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 30);
- triggerModule.setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 2);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW, 0.125);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_HIGH, 1.300);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.200);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 1.700);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.500);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 2.000);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 1.200);
+ triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 30);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 2);
// Set the variable values.
if(backgroundLevel == 1) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 1.000);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 1.2);
- triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 20);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 1.000);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 1.2);
+ triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 20);
} else if(backgroundLevel == 2) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 1.0);
- triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 20);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 1.0);
+ triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 20);
} else if(backgroundLevel == 3) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 1.0);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 1.0);
} else if(backgroundLevel == 4) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.8);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.8);
} else if(backgroundLevel == 5) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.8);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.8);
} else if(backgroundLevel == 6) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.6);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.6);
} else if(backgroundLevel == 7) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.6);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.6);
} else if(backgroundLevel == 8) {
- triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 1.500);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.4);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 1.500);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.4);
} else if(backgroundLevel == 9) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.4);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.4);
} else if(backgroundLevel == 10) {
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.4);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.4);
} else if(backgroundLevel == 0) {
- triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW, 0.100);
- triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_HIGH, 6.600);
- triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.100);
- triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 1.500);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 1.900);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 2.200);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 1.1);
- triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 35);
- triggerModule.setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 1);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW, 0.100);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_HIGH, 6.600);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.100);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 1.500);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 1.900);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 2.200);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 1.1);
+ triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 35);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 1);
} else if(backgroundLevel == -1) {
- triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW, 0.050);
- triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_HIGH, 6.600);
- triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.010);
- triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 6.600);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 13.200);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 6.600);
- triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.0);
- triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 360);
- triggerModule.setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 1);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW, 0.050);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_HIGH, 6.600);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.010);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 6.600);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.000);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 13.200);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 6.600);
+ triggerModule.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.0);
+ triggerModule.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 360);
+ triggerModule.setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 1);
}
}
@@ -636,16 +636,16 @@
// Fill the hit count plots for N > 1.
if(clusterPair[0].getCalorimeterHits().size() > 1 && clusterPair[1].getCalorimeterHits().size() > 1) {
- // Populate the plots.
+ // Populate the plots.
pairEnergySum[OVER_1HIT].fill(energySum);
pairEnergyDifference[OVER_1HIT].fill(energyDifference);
pairEnergySlope[OVER_1HIT].fill(energySlope);
pairCoplanarity[OVER_1HIT].fill(coplanarity);
pairEnergySum2DDistribution[OVER_1HIT].fill(clusterPair[0].getEnergy(), clusterPair[1].getEnergy());
-
+
// Fill the hit count plots for N > 2.
if(clusterPair[0].getCalorimeterHits().size() > 2 && clusterPair[1].getCalorimeterHits().size() > 2) {
- // Populate the plots.
+ // Populate the plots.
pairEnergySum[OVER_2HIT].fill(energySum);
pairEnergyDifference[OVER_2HIT].fill(energyDifference);
pairEnergySlope[OVER_2HIT].fill(energySlope);
@@ -658,7 +658,7 @@
// =============================================================
// If the cluster fails the cut, skip to the next pair.
if(!triggerModule.pairEnergySumCut(clusterPair)) {
- continue pairLoop;
+ continue pairLoop;
}
// Otherwise, note that it passed the cut.
@@ -668,7 +668,7 @@
// =============================================================
// If the cluster fails the cut, skip to the next pair.
if(!triggerModule.pairEnergyDifferenceCut(clusterPair)) {
- continue pairLoop;
+ continue pairLoop;
}
// Otherwise, note that it passed the cut.
@@ -678,7 +678,7 @@
// =============================================================
// If the cluster fails the cut, skip to the next pair.
if(!triggerModule.pairEnergySlopeCut(clusterPair)) {
- continue pairLoop;
+ continue pairLoop;
}
// Otherwise, note that it passed the cut.
@@ -688,7 +688,7 @@
// =============================================================
// If the cluster fails the cut, skip to the next pair.
if(!triggerModule.pairCoplanarityCut(clusterPair)) {
- continue pairLoop;
+ continue pairLoop;
}
// Otherwise, note that it passed the cut.
@@ -774,6 +774,6 @@
* @param cuts - The cut string.
*/
public void setCuts(String cuts) {
- triggerModule.setCutValues(false, cuts);
+ triggerModule.setCutValues(false, cuts);
}
}
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerVariableDriver.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerVariableDriver.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCTriggerVariableDriver.java Wed Mar 9 11:43:24 2016
@@ -63,14 +63,14 @@
//System.out.printf("%d ecal clusters in event\n", clusters.size());
//System.out.printf("%s: %d clusters\n",this.getClass().getSimpleName(),clusters.size());
- //for(Cluster cl : clusters) {
- // System.out.printf("%s: cl E %f x %f y %f \n",this.getClass().getSimpleName(),cl.getEnergy(),cl.getPosition()[0],cl.getPosition()[1]);
- //}
- List<Cluster> unique_clusters = this.getUniqueClusters(clusters);
- //System.out.printf("%s: %d unique clusters\n",this.getClass().getSimpleName(),unique_clusters.size());
- //for(Cluster cl : unique_clusters) {
- // System.out.printf("%s: cl E %f x %f y %f \n",this.getClass().getSimpleName(),cl.getEnergy(),cl.getPosition()[0],cl.getPosition()[1]);
- //}
+ //for(Cluster cl : clusters) {
+ // System.out.printf("%s: cl E %f x %f y %f \n",this.getClass().getSimpleName(),cl.getEnergy(),cl.getPosition()[0],cl.getPosition()[1]);
+ //}
+ List<Cluster> unique_clusters = this.getUniqueClusters(clusters);
+ //System.out.printf("%s: %d unique clusters\n",this.getClass().getSimpleName(),unique_clusters.size());
+ //for(Cluster cl : unique_clusters) {
+ // System.out.printf("%s: cl E %f x %f y %f \n",this.getClass().getSimpleName(),cl.getEnergy(),cl.getPosition()[0],cl.getPosition()[1]);
+ //}
updateClusterQueues(unique_clusters);
List<Cluster[]> clusterPairs = getClusterPairsTopBot();
@@ -122,47 +122,47 @@
private List<Cluster> getUniqueClusters(List<Cluster> clusters) {
- List<Cluster> unique = new ArrayList<Cluster>();
- for(Cluster loop_cl : clusters) {
- ClusterCmp loop_clCmp = new ClusterCmp(loop_cl);
- boolean found = false;
- for(Cluster cl : unique) {
- if( loop_clCmp.compareTo(cl) == 0 ) {
- found = true;
- }
- }
- if( !found ) {
- unique.add(loop_cl);
- }
- }
- return unique;
+ List<Cluster> unique = new ArrayList<Cluster>();
+ for(Cluster loop_cl : clusters) {
+ ClusterCmp loop_clCmp = new ClusterCmp(loop_cl);
+ boolean found = false;
+ for(Cluster cl : unique) {
+ if( loop_clCmp.compareTo(cl) == 0 ) {
+ found = true;
+ }
+ }
+ if( !found ) {
+ unique.add(loop_cl);
+ }
+ }
+ return unique;
}
private static class ClusterCmp implements Comparable<Cluster> {
- private Cluster _cluster;
- public ClusterCmp(Cluster cl) {
- set_cluster(cl);
- }
- @Override
- public int compareTo(Cluster cl) {
- if(cl.getEnergy()==get_cluster().getEnergy() && cl.getPosition()[0]==get_cluster().getPosition()[0] && cl.getPosition()[1]==get_cluster().getPosition()[1] ) {
- return 0;
- } else {
- if( cl.getEnergy() > get_cluster().getEnergy()) {
- return 1;
- } else {
- return -1;
- }
- }
- }
- public Cluster get_cluster() {
- return _cluster;
- }
- public void set_cluster(Cluster _cluster) {
- this._cluster = _cluster;
- }
-
+ private Cluster _cluster;
+ public ClusterCmp(Cluster cl) {
+ set_cluster(cl);
+ }
+ @Override
+ public int compareTo(Cluster cl) {
+ if(cl.getEnergy()==get_cluster().getEnergy() && cl.getPosition()[0]==get_cluster().getPosition()[0] && cl.getPosition()[1]==get_cluster().getPosition()[1] ) {
+ return 0;
+ } else {
+ if( cl.getEnergy() > get_cluster().getEnergy()) {
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+ }
+ public Cluster get_cluster() {
+ return _cluster;
+ }
+ public void set_cluster(Cluster _cluster) {
+ this._cluster = _cluster;
+ }
+
}
}
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/MollerTriggerDriver.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/MollerTriggerDriver.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/MollerTriggerDriver.java Wed Mar 9 11:43:24 2016
@@ -56,8 +56,8 @@
@Override
public void process(EventHeader event) {
- // Run the superclass process event.
- super.process(event);
+ // Run the superclass process event.
+ super.process(event);
}
@Override
@@ -87,29 +87,29 @@
aMomentumAngle = aida.histogram2D("Trigger Plots :: Particle Momentum Distribution (t = 0, Passed All Cuts)", 500, -0.01, 0.06, 500, -0.04, 0.04);
// Add the allowed seed crystal positions to the seed set.
- if(useVersionOne) {
- // Add the allowed seed crystal positions to the seed set.
- // y = +/- 1, x = -11 -> -15
- for(int ix = -15; ix <= -11; ix++) {
- allowedSeedSet.add(new Point(ix, 1));
- allowedSeedSet.add(new Point(ix, -1));
- } // y = +/- 2, x = -9 -> -15
- for(int ix = -15; ix <= -9; ix++) {
- allowedSeedSet.add(new Point(ix, 2));
- allowedSeedSet.add(new Point(ix, -2));
- }
- }
- else {
- // y = +/- 1, x = -11 -> -13
- for(int ix = -13; ix <= -11; ix++) {
- allowedSeedSet.add(new Point(ix, 1));
- allowedSeedSet.add(new Point(ix, -1));
- } // y = +/- 2, x = -10 -> -14
- for(int ix = -14; ix <= -10; ix++) {
- allowedSeedSet.add(new Point(ix, 2));
- allowedSeedSet.add(new Point(ix, -2));
- }
- }
+ if(useVersionOne) {
+ // Add the allowed seed crystal positions to the seed set.
+ // y = +/- 1, x = -11 -> -15
+ for(int ix = -15; ix <= -11; ix++) {
+ allowedSeedSet.add(new Point(ix, 1));
+ allowedSeedSet.add(new Point(ix, -1));
+ } // y = +/- 2, x = -9 -> -15
+ for(int ix = -15; ix <= -9; ix++) {
+ allowedSeedSet.add(new Point(ix, 2));
+ allowedSeedSet.add(new Point(ix, -2));
+ }
+ }
+ else {
+ // y = +/- 1, x = -11 -> -13
+ for(int ix = -13; ix <= -11; ix++) {
+ allowedSeedSet.add(new Point(ix, 1));
+ allowedSeedSet.add(new Point(ix, -1));
+ } // y = +/- 2, x = -10 -> -14
+ for(int ix = -14; ix <= -10; ix++) {
+ allowedSeedSet.add(new Point(ix, 2));
+ allowedSeedSet.add(new Point(ix, -2));
+ }
+ }
}
@Override
@@ -201,31 +201,31 @@
// Require that the cluster pass each of the cuts in
// order to qualify for a trigger.
if(totalEnergyCut && seedEnergyCut && hitCountCut && positionCut) {
- // Increment the number of events that have passed
- // the cuts.
- passedEvents++;
-
- // If the number of passed events exceeds the prescaling
- // threshold, throw a trigger.
- if(passedEvents >= prescale) {
- // Reset the number of passed events.
- passedEvents = 0;
-
- // Add the clusters to the cut histograms.
- aClusterHitCount.fill(cluster.getCalorimeterHits().size());
- aClusterTotalEnergy.fill(cluster.getEnergy());
- aClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
- aClusterDistribution.fill(ix > 0 ? ix - 1 : ix, iy, 1);
-
- // Increment the trigger count.
- triggers++;
-
- // VERBOSE :: Indicate that a trigger occurred.
- if(verbose) { System.out.printf("\tTriggered!%n%n"); }
-
- // Return a trigger.
- return true;
- }
+ // Increment the number of events that have passed
+ // the cuts.
+ passedEvents++;
+
+ // If the number of passed events exceeds the prescaling
+ // threshold, throw a trigger.
+ if(passedEvents >= prescale) {
+ // Reset the number of passed events.
+ passedEvents = 0;
+
+ // Add the clusters to the cut histograms.
+ aClusterHitCount.fill(cluster.getCalorimeterHits().size());
+ aClusterTotalEnergy.fill(cluster.getEnergy());
+ aClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
+ aClusterDistribution.fill(ix > 0 ? ix - 1 : ix, iy, 1);
+
+ // Increment the trigger count.
+ triggers++;
+
+ // VERBOSE :: Indicate that a trigger occurred.
+ if(verbose) { System.out.printf("\tTriggered!%n%n"); }
+
+ // Return a trigger.
+ return true;
+ }
}
}
@@ -371,7 +371,7 @@
* will be thrown.
*/
public void setPrescale(int prescale) {
- this.prescale = prescale;
+ this.prescale = prescale;
}
/**
@@ -383,7 +383,7 @@
public void setVerbose(boolean verbose) {
this.verbose = verbose;
}
-
+
/**
* Toggles whether the more inclusive acceptance region version 1
* is used, or the slightly smaller and more exclusive acceptance
@@ -392,9 +392,9 @@
* 1 of the acceptance region should be used and <code>false</code>
* that version 2 should be used.
*/
- public void setUseVersionOne(boolean useVersionOne) {
- this.useVersionOne = useVersionOne;
- }
+ public void setUseVersionOne(boolean useVersionOne) {
+ this.useVersionOne = useVersionOne;
+ }
// ==================================================================
// ==== AIDA Plots ==================================================
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/OccupancyAnalysisDriver.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/OccupancyAnalysisDriver.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/OccupancyAnalysisDriver.java Wed Mar 9 11:43:24 2016
@@ -12,19 +12,19 @@
import org.lcsim.util.aida.AIDA;
public class OccupancyAnalysisDriver extends Driver {
- // Internal variables.
- private double scalingFactor = 0.05;
- private double seedThreshold = 0.050;
- private double beamRatio = 1.92 / 2.2;
- private double clusterThreshold = 0.200;
+ // Internal variables.
+ private double scalingFactor = 0.05;
+ private double seedThreshold = 0.050;
+ private double beamRatio = 1.92 / 2.2;
+ private double clusterThreshold = 0.200;
private AIDA aida = AIDA.defaultInstance();
- private boolean ignoreBeamGapRows = false;
-
+ private boolean ignoreBeamGapRows = false;
+
// LCIO Collection Names
private String clusterCollectionName = "EcalClusters";
private String hitCollectionName = "EcalCorrectedHits";
- // Trigger plots.
+ // Trigger plots.
IHistogram2D occupancyDistribution;
IHistogram2D[] clusterDistribution = new IHistogram2D[2];
IHistogram1D[] clusterHitDistribution = new IHistogram1D[2];
@@ -32,129 +32,129 @@
IHistogram1D[] clusterEnergyDistribution = new IHistogram1D[2];
public void setIgnoreBeamGapRows(boolean ignoreBeamGapRows) {
- this.ignoreBeamGapRows = ignoreBeamGapRows;
+ this.ignoreBeamGapRows = ignoreBeamGapRows;
}
public void setBeamRatio(double beamRatio) {
- this.beamRatio = beamRatio;
+ this.beamRatio = beamRatio;
}
public void setScalingFactor(double scalingFactor) {
- this.scalingFactor = scalingFactor;
+ this.scalingFactor = scalingFactor;
}
public void setSeedThreshold(double seedThreshold) {
- this.seedThreshold = seedThreshold;
+ this.seedThreshold = seedThreshold;
}
public void setClusterThreshold(double clusterThreshold) {
- this.clusterThreshold = clusterThreshold;
+ this.clusterThreshold = clusterThreshold;
}
public void setClusterCollectionName(String clusterCollectionName) {
- this.clusterCollectionName = clusterCollectionName;
+ this.clusterCollectionName = clusterCollectionName;
}
public void setHitCollectionName(String hitCollectionName) {
- this.hitCollectionName = hitCollectionName;
+ this.hitCollectionName = hitCollectionName;
}
@Override
public void process(EventHeader event) {
- // If clusters are present, process them.
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Get the list of clusters.
- List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
-
- // Use the clusters to populate the cluster plots.
- for(Cluster cluster : clusterList) {
- // Get the ix and iy values for the cluster.
- int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
- int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
-
- // If we want to ignore the beam gap rows, make sure
- // that iy exceeds two.
- if(!ignoreBeamGapRows || (Math.abs(iy) > 2)) {
- // If the cluster passes the seed threshold, place it in
- // the level 1 plots.
- if(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() >= seedThreshold) {
- clusterDistribution[0].fill(ix, iy, scalingFactor);
- clusterHitDistribution[0].fill(cluster.getCalorimeterHits().size(), scalingFactor);
- clusterEnergyDistribution[0].fill(cluster.getEnergy() * beamRatio, scalingFactor);
- }
-
- // If the cluster energy passes the cluster threshold,
- // populate the level 2 plots.
- if(cluster.getEnergy() >= clusterThreshold) {
- clusterDistribution[1].fill(ix, iy, scalingFactor);
- clusterHitDistribution[1].fill(cluster.getCalorimeterHits().size(), scalingFactor);
- clusterEnergyDistribution[1].fill(cluster.getEnergy() * beamRatio, scalingFactor);
- }
- }
- }
- }
-
- // If the event has hits, process them.
- if(event.hasCollection(CalorimeterHit.class, hitCollectionName)) {
- // Get the list of hits.
- List<CalorimeterHit> hitList = event.get(CalorimeterHit.class, hitCollectionName);
-
- // Track the energy in the top and bottom of the calorimeter.
- double[] energy = { 0.0, 0.0 };
-
- // Iterate over the hits.
- for(CalorimeterHit hit : hitList) {
- // Get the ix and iy values.
- int ix = hit.getIdentifierFieldValue("ix");
- int iy = hit.getIdentifierFieldValue("iy");
-
- // If we want to ignore beam gap rows, ensure that iy
- // is greater than 2.
- if(!ignoreBeamGapRows || Math.abs(iy) > 2) {
- // Add the energy to the appropriate energy tracking
- // variable for the calorimeter halves.
- if(iy > 0) { energy[0] += hit.getCorrectedEnergy() * beamRatio; }
- else { energy[1] += hit.getCorrectedEnergy() * beamRatio; }
-
- // Populate the occupancy distribution.
- occupancyDistribution.fill(ix, iy, scalingFactor);
- }
- }
-
- // Populate the total calorimeter energy plot.
- totalEnergyDistribution[0].fill(energy[0], scalingFactor);
- totalEnergyDistribution[1].fill(energy[1], scalingFactor);
- }
+ // If clusters are present, process them.
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Get the list of clusters.
+ List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
+
+ // Use the clusters to populate the cluster plots.
+ for(Cluster cluster : clusterList) {
+ // Get the ix and iy values for the cluster.
+ int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+
+ // If we want to ignore the beam gap rows, make sure
+ // that iy exceeds two.
+ if(!ignoreBeamGapRows || (Math.abs(iy) > 2)) {
+ // If the cluster passes the seed threshold, place it in
+ // the level 1 plots.
+ if(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() >= seedThreshold) {
+ clusterDistribution[0].fill(ix, iy, scalingFactor);
+ clusterHitDistribution[0].fill(cluster.getCalorimeterHits().size(), scalingFactor);
+ clusterEnergyDistribution[0].fill(cluster.getEnergy() * beamRatio, scalingFactor);
+ }
+
+ // If the cluster energy passes the cluster threshold,
+ // populate the level 2 plots.
+ if(cluster.getEnergy() >= clusterThreshold) {
+ clusterDistribution[1].fill(ix, iy, scalingFactor);
+ clusterHitDistribution[1].fill(cluster.getCalorimeterHits().size(), scalingFactor);
+ clusterEnergyDistribution[1].fill(cluster.getEnergy() * beamRatio, scalingFactor);
+ }
+ }
+ }
+ }
+
+ // If the event has hits, process them.
+ if(event.hasCollection(CalorimeterHit.class, hitCollectionName)) {
+ // Get the list of hits.
+ List<CalorimeterHit> hitList = event.get(CalorimeterHit.class, hitCollectionName);
+
+ // Track the energy in the top and bottom of the calorimeter.
+ double[] energy = { 0.0, 0.0 };
+
+ // Iterate over the hits.
+ for(CalorimeterHit hit : hitList) {
+ // Get the ix and iy values.
+ int ix = hit.getIdentifierFieldValue("ix");
+ int iy = hit.getIdentifierFieldValue("iy");
+
+ // If we want to ignore beam gap rows, ensure that iy
+ // is greater than 2.
+ if(!ignoreBeamGapRows || Math.abs(iy) > 2) {
+ // Add the energy to the appropriate energy tracking
+ // variable for the calorimeter halves.
+ if(iy > 0) { energy[0] += hit.getCorrectedEnergy() * beamRatio; }
+ else { energy[1] += hit.getCorrectedEnergy() * beamRatio; }
+
+ // Populate the occupancy distribution.
+ occupancyDistribution.fill(ix, iy, scalingFactor);
+ }
+ }
+
+ // Populate the total calorimeter energy plot.
+ totalEnergyDistribution[0].fill(energy[0], scalingFactor);
+ totalEnergyDistribution[1].fill(energy[1], scalingFactor);
+ }
}
@Override
public void startOfData() {
- // Define the cluster distribution plots.
- String[] clusterDistName = { String.format("Comp Plots :: Cluster Seed Distribution [Seed Threshold %.3f GeV]", seedThreshold),
- String.format("Comp Plots :: Cluster Seed Distribution [Cluster Threshold %.3f GeV]", clusterThreshold) };
+ // Define the cluster distribution plots.
+ String[] clusterDistName = { String.format("Comp Plots :: Cluster Seed Distribution [Seed Threshold %.3f GeV]", seedThreshold),
+ String.format("Comp Plots :: Cluster Seed Distribution [Cluster Threshold %.3f GeV]", clusterThreshold) };
clusterDistribution[0] = aida.histogram2D(clusterDistName[0], 46, -23, 23, 11, -5.5, 5.5);
clusterDistribution[1] = aida.histogram2D(clusterDistName[1], 46, -23, 23, 11, -5.5, 5.5);
- // Define the occupancy distribution plots.
- String occupancyDistName = String.format("Comp Plots :: Crystal Occupancy");
- occupancyDistribution = aida.histogram2D(occupancyDistName, 46, -23, 23, 11, -5.5, 5.5);
-
+ // Define the occupancy distribution plots.
+ String occupancyDistName = String.format("Comp Plots :: Crystal Occupancy");
+ occupancyDistribution = aida.histogram2D(occupancyDistName, 46, -23, 23, 11, -5.5, 5.5);
+
// Define the cluster hit count distribution.
- String[] clusterHitDistName = { String.format("Comp Plots :: Cluster Hit Count Distribution [Seed Threshold %.3f GeV]", seedThreshold),
- String.format("Comp Plots :: Cluster Hit Count Distribution [Cluster Threshold %.3f GeV]", clusterThreshold) };
- clusterHitDistribution[0] = aida.histogram1D(clusterHitDistName[0], 9, 1, 10);
- clusterHitDistribution[1] = aida.histogram1D(clusterHitDistName[1], 9, 1, 10);
-
+ String[] clusterHitDistName = { String.format("Comp Plots :: Cluster Hit Count Distribution [Seed Threshold %.3f GeV]", seedThreshold),
+ String.format("Comp Plots :: Cluster Hit Count Distribution [Cluster Threshold %.3f GeV]", clusterThreshold) };
+ clusterHitDistribution[0] = aida.histogram1D(clusterHitDistName[0], 9, 1, 10);
+ clusterHitDistribution[1] = aida.histogram1D(clusterHitDistName[1], 9, 1, 10);
+
// Define the cluster total energy distribution.
- String[] clusterEnergyDistName = { String.format("Comp Plots :: Cluster Total Energy Distribution [Seed Threshold %.3f GeV]", seedThreshold),
- String.format("Comp Plots :: Cluster Total Energy Distribution [Cluster Threshold %.3f GeV]", clusterThreshold) };
- clusterEnergyDistribution[0] = aida.histogram1D(clusterEnergyDistName[0], 176, 0.0, 2.2);
- clusterEnergyDistribution[1] = aida.histogram1D(clusterEnergyDistName[1], 176, 0.0, 2.2);
-
+ String[] clusterEnergyDistName = { String.format("Comp Plots :: Cluster Total Energy Distribution [Seed Threshold %.3f GeV]", seedThreshold),
+ String.format("Comp Plots :: Cluster Total Energy Distribution [Cluster Threshold %.3f GeV]", clusterThreshold) };
+ clusterEnergyDistribution[0] = aida.histogram1D(clusterEnergyDistName[0], 176, 0.0, 2.2);
+ clusterEnergyDistribution[1] = aida.histogram1D(clusterEnergyDistName[1], 176, 0.0, 2.2);
+
// Define the calorimeter total energy distribution.
- String[] totalEnergyDistName = { String.format("Comp Plots :: Calorimeter Event Energy Distribution [Top]"),
- String.format("Comp Plots :: Calorimeter Event Energy Distribution [Bottom]") };
- totalEnergyDistribution[0] = aida.histogram1D(totalEnergyDistName[0], 500, 0.0, 10.0);
- totalEnergyDistribution[1] = aida.histogram1D(totalEnergyDistName[1], 500, 0.0, 10.0);
+ String[] totalEnergyDistName = { String.format("Comp Plots :: Calorimeter Event Energy Distribution [Top]"),
+ String.format("Comp Plots :: Calorimeter Event Energy Distribution [Bottom]") };
+ totalEnergyDistribution[0] = aida.histogram1D(totalEnergyDistName[0], 500, 0.0, 10.0);
+ totalEnergyDistribution[1] = aida.histogram1D(totalEnergyDistName[1], 500, 0.0, 10.0);
}
}
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ReadoutTrigger.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ReadoutTrigger.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/ReadoutTrigger.java Wed Mar 9 11:43:24 2016
@@ -22,16 +22,16 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class ReadoutTrigger extends Driver {
- // Define settable parameters.
- private double energySlopeParamF = 0.0055;
- private String clusterCollectionName = "EcalClusters";
-
- // Define internal variables.
- private TriggerModule trigger = new TriggerModule();
-
- // Define output plots.
- private static final int NO_CUTS = 0;
- private static final int ALL_CUTS = 1;
+ // Define settable parameters.
+ private double energySlopeParamF = 0.0055;
+ private String clusterCollectionName = "EcalClusters";
+
+ // Define internal variables.
+ private TriggerModule trigger = new TriggerModule();
+
+ // Define output plots.
+ private static final int NO_CUTS = 0;
+ private static final int ALL_CUTS = 1;
private AIDA aida = AIDA.defaultInstance();
private IHistogram1D[] clusterSeedEnergy;
private IHistogram1D[] clusterHitCount;
@@ -46,267 +46,267 @@
private IHistogram2D[] clusterDistribution;
private IHistogram2D[] pairEnergySum2D;
private IHistogram2D[] pairEnergySlope2D;
-
+
/**
* Instantiates cluster plots.
*/
@Override
public void startOfData() {
- // Define plot type names.
- String[] plotType = new String[2];
- plotType[NO_CUTS] = "";
- plotType[ALL_CUTS] = " (Passed All Cuts)";
-
- // Define plot type directories.
- String[] plotDir = new String[2];
- plotDir[NO_CUTS] = "NoCuts/";
- plotDir[ALL_CUTS] = "PassedAll/";
-
- // Instantiate the plots.
- for(int i = 0; i < 2; i++) {
- System.out.println(plotDir[i] + "Cluster Seed Energy" + plotType[i]);
- clusterSeedEnergy[i] = aida.histogram1D(plotDir[i] + "Cluster Seed Energy" + plotType[i], 88, 0.0, 1.1);
- clusterSeedEnergy[i].annotation().addItem("xAxisLabel", "Seed Energy (GeV)");
- clusterSeedEnergy[i].annotation().addItem("yAxisLabel", "Count");
-
- clusterHitCount[i] = aida.histogram1D(plotDir[i] + "Cluster Hit Count" + plotType[i], 9, 0.5, 9.5);
- clusterHitCount[i].annotation().addItem("xAxisLabel", "Hit Count");
- clusterHitCount[i].annotation().addItem("yAxisLabel", "Count");
-
- clusterTotalEnergy[i] = aida.histogram1D(plotDir[i] + "Cluster Total Energy" + plotType[i], 88, 0.0, 1.1);
- clusterTotalEnergy[i].annotation().addItem("xAxisLabel", "Cluster Energy (GeV)");
- clusterTotalEnergy[i].annotation().addItem("yAxisLabel", "Count");
-
- clusterTime[i] = aida.histogram1D(plotDir[i] + "Cluster Time" + plotType[i], 100, 0.0, 400);
- clusterTime[i].annotation().addItem("xAxisLabel", "Cluster Time (ns)");
- clusterTime[i].annotation().addItem("yAxisLabel", "Count");
-
- pairEnergySum[i] = aida.histogram1D(plotDir[i] + "Pair Energy Sum" + plotType[i], 88, 0.0, 2.2);
- pairEnergySum[i].annotation().addItem("xAxisLabel", "Energy Sum (GeV)");
- pairEnergySum[i].annotation().addItem("yAxisLabel", "Count");
-
- pairEnergyDifference[i] = aida.histogram1D(plotDir[i] + "Pair Energy Difference" + plotType[i], 88, 0.0, 1.1);
- pairEnergyDifference[i].annotation().addItem("xAxisLabel", "Energy Difference (GeV)");
- pairEnergyDifference[i].annotation().addItem("yAxisLabel", "Count");
-
- pairCoplanarity[i] = aida.histogram1D(plotDir[i] + "Pair Coplanarity" + plotType[i], 180, 0.0, 180.0);
- pairCoplanarity[i].annotation().addItem("xAxisLabel", "Coplanarity Angle (Degrees)");
- pairCoplanarity[i].annotation().addItem("yAxisLabel", "Count");
-
- pairEnergySlope[i] = aida.histogram1D(plotDir[i] + "Pair Energy Slope" + plotType[i], 200, 0.0, 4.0);
- pairEnergySlope[i].annotation().addItem("xAxisLabel", "Energy Slope (GeV)");
- pairEnergySlope[i].annotation().addItem("yAxisLabel", "Count");
-
- pairTime[i] = aida.histogram1D(plotDir[i] + "Pair Time" + plotType[i], 100, 0.0, 400);
- pairTime[i].annotation().addItem("xAxisLabel", "Cluster Time (ns)");
- pairTime[i].annotation().addItem("yAxisLabel", "Count");
-
- pairCoincidence[i] = aida.histogram1D(plotDir[i] + "Pair Coincidence" + plotType[i], 8, 0.0, 32);
- pairCoincidence[i].annotation().addItem("xAxisLabel", "Coincidence Time (ns)");
- pairCoincidence[i].annotation().addItem("yAxisLabel", "Count");
-
- clusterDistribution[i] = aida.histogram2D(plotDir[i] + "Cluster Seed Distribution" + plotType[i], 46, -23, 23, 11, -5.5, 5.5);
- clusterDistribution[i].annotation().addItem("xAxisLabel", "x-Index");
- clusterDistribution[i].annotation().addItem("yAxisLabel", "y-Index");
-
- pairEnergySum2D[i] = aida.histogram2D(plotDir[i] + "Pair Energy Sum 2D" + plotType[i], 88, 0.0, 2.2, 88, 0.0, 2.2);
- pairEnergySum2D[i].annotation().addItem("xAxisLabel", "E1");
- pairEnergySum2D[i].annotation().addItem("yAxisLabel", "E2");
-
- pairEnergySlope2D[i] = aida.histogram2D(plotDir[i] + "Pair Energy Slope 2D" + plotType[i], 88, 0.0, 1.1, 200, 0.0, 400);
- pairEnergySlope2D[i].annotation().addItem("xAxisLabel", "E1");
- pairEnergySlope2D[i].annotation().addItem("yAxisLabel", "E2");
- }
+ // Define plot type names.
+ String[] plotType = new String[2];
+ plotType[NO_CUTS] = "";
+ plotType[ALL_CUTS] = " (Passed All Cuts)";
+
+ // Define plot type directories.
+ String[] plotDir = new String[2];
+ plotDir[NO_CUTS] = "NoCuts/";
+ plotDir[ALL_CUTS] = "PassedAll/";
+
+ // Instantiate the plots.
+ for(int i = 0; i < 2; i++) {
+ System.out.println(plotDir[i] + "Cluster Seed Energy" + plotType[i]);
+ clusterSeedEnergy[i] = aida.histogram1D(plotDir[i] + "Cluster Seed Energy" + plotType[i], 88, 0.0, 1.1);
+ clusterSeedEnergy[i].annotation().addItem("xAxisLabel", "Seed Energy (GeV)");
+ clusterSeedEnergy[i].annotation().addItem("yAxisLabel", "Count");
+
+ clusterHitCount[i] = aida.histogram1D(plotDir[i] + "Cluster Hit Count" + plotType[i], 9, 0.5, 9.5);
+ clusterHitCount[i].annotation().addItem("xAxisLabel", "Hit Count");
+ clusterHitCount[i].annotation().addItem("yAxisLabel", "Count");
+
+ clusterTotalEnergy[i] = aida.histogram1D(plotDir[i] + "Cluster Total Energy" + plotType[i], 88, 0.0, 1.1);
+ clusterTotalEnergy[i].annotation().addItem("xAxisLabel", "Cluster Energy (GeV)");
+ clusterTotalEnergy[i].annotation().addItem("yAxisLabel", "Count");
+
+ clusterTime[i] = aida.histogram1D(plotDir[i] + "Cluster Time" + plotType[i], 100, 0.0, 400);
+ clusterTime[i].annotation().addItem("xAxisLabel", "Cluster Time (ns)");
+ clusterTime[i].annotation().addItem("yAxisLabel", "Count");
+
+ pairEnergySum[i] = aida.histogram1D(plotDir[i] + "Pair Energy Sum" + plotType[i], 88, 0.0, 2.2);
+ pairEnergySum[i].annotation().addItem("xAxisLabel", "Energy Sum (GeV)");
+ pairEnergySum[i].annotation().addItem("yAxisLabel", "Count");
+
+ pairEnergyDifference[i] = aida.histogram1D(plotDir[i] + "Pair Energy Difference" + plotType[i], 88, 0.0, 1.1);
+ pairEnergyDifference[i].annotation().addItem("xAxisLabel", "Energy Difference (GeV)");
+ pairEnergyDifference[i].annotation().addItem("yAxisLabel", "Count");
+
+ pairCoplanarity[i] = aida.histogram1D(plotDir[i] + "Pair Coplanarity" + plotType[i], 180, 0.0, 180.0);
+ pairCoplanarity[i].annotation().addItem("xAxisLabel", "Coplanarity Angle (Degrees)");
+ pairCoplanarity[i].annotation().addItem("yAxisLabel", "Count");
+
+ pairEnergySlope[i] = aida.histogram1D(plotDir[i] + "Pair Energy Slope" + plotType[i], 200, 0.0, 4.0);
+ pairEnergySlope[i].annotation().addItem("xAxisLabel", "Energy Slope (GeV)");
+ pairEnergySlope[i].annotation().addItem("yAxisLabel", "Count");
+
+ pairTime[i] = aida.histogram1D(plotDir[i] + "Pair Time" + plotType[i], 100, 0.0, 400);
+ pairTime[i].annotation().addItem("xAxisLabel", "Cluster Time (ns)");
+ pairTime[i].annotation().addItem("yAxisLabel", "Count");
+
+ pairCoincidence[i] = aida.histogram1D(plotDir[i] + "Pair Coincidence" + plotType[i], 8, 0.0, 32);
+ pairCoincidence[i].annotation().addItem("xAxisLabel", "Coincidence Time (ns)");
+ pairCoincidence[i].annotation().addItem("yAxisLabel", "Count");
+
+ clusterDistribution[i] = aida.histogram2D(plotDir[i] + "Cluster Seed Distribution" + plotType[i], 46, -23, 23, 11, -5.5, 5.5);
+ clusterDistribution[i].annotation().addItem("xAxisLabel", "x-Index");
+ clusterDistribution[i].annotation().addItem("yAxisLabel", "y-Index");
+
+ pairEnergySum2D[i] = aida.histogram2D(plotDir[i] + "Pair Energy Sum 2D" + plotType[i], 88, 0.0, 2.2, 88, 0.0, 2.2);
+ pairEnergySum2D[i].annotation().addItem("xAxisLabel", "E1");
+ pairEnergySum2D[i].annotation().addItem("yAxisLabel", "E2");
+
+ pairEnergySlope2D[i] = aida.histogram2D(plotDir[i] + "Pair Energy Slope 2D" + plotType[i], 88, 0.0, 1.1, 200, 0.0, 400);
+ pairEnergySlope2D[i].annotation().addItem("xAxisLabel", "E1");
+ pairEnergySlope2D[i].annotation().addItem("yAxisLabel", "E2");
+ }
}
/**
* Produces both uncut and cut distributions from clusters.
*/
- @Override
- public void process(EventHeader event) {
- // Check for a collection of clusters.
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Get the list of clusters.
- List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
-
- // Track which clusters have already been plotted.
- Set<Cluster> plottedClustersUncut = new HashSet<Cluster>(clusters.size());
- Set<Cluster> plottedClustersCut = new HashSet<Cluster>(clusters.size());
-
- // Populate a list of cluster pairs.
- List<Cluster[]> pairs = getClusterPairs(clusters);
-
- // Process all cluster pairs.
- pairLoop:
- for(Cluster[] pair : pairs) {
- // Get the x and y indices for each cluster in the pair.
- int[] ix = { pair[0].getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
- pair[1].getCalorimeterHits().get(0).getIdentifierFieldValue("ix") };
- int[] iy = { pair[0].getCalorimeterHits().get(0).getIdentifierFieldValue("iy"),
- pair[1].getCalorimeterHits().get(0).getIdentifierFieldValue("iy") };
-
- // Iterate over the clusters in the pair and plot the
- // cluster singles distributions.
- for(int clusterIndex = 0; clusterIndex < 2; clusterIndex++) {
- // Only plot cluster singles distributions for
- // clusters if they have not already been plotted.
- // Note that this is needed because the same cluster
- // can appear across multiple pairs.
- if(!plottedClustersUncut.contains(pair[clusterIndex])) {
- clusterSeedEnergy[NO_CUTS].fill(TriggerModule.getValueClusterSeedEnergy(pair[clusterIndex]));
- clusterTotalEnergy[NO_CUTS].fill(TriggerModule.getValueClusterTotalEnergy(pair[clusterIndex]));
- clusterHitCount[NO_CUTS].fill(TriggerModule.getValueClusterHitCount(pair[clusterIndex]));
- clusterDistribution[NO_CUTS].fill(ix[clusterIndex], iy[clusterIndex]);
- clusterTime[NO_CUTS].fill(pair[clusterIndex].getCalorimeterHits().get(0).getTime());
- plottedClustersUncut.add(pair[clusterIndex]);
- }
- }
-
- // Plot the cluster pair distributions.
- pairEnergySum[NO_CUTS].fill(TriggerModule.getValueEnergySum(pair));
- pairEnergyDifference[NO_CUTS].fill(TriggerModule.getValueEnergyDifference(pair));
- pairEnergySlope[NO_CUTS].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF));
- pairCoplanarity[NO_CUTS].fill(TriggerModule.getValueCoplanarity(pair));
- pairTime[NO_CUTS].fill(pair[1].getCalorimeterHits().get(0).getTime());
- pairCoincidence[NO_CUTS].fill(TriggerModule.getValueTimeCoincidence(pair));
- pairEnergySum2D[NO_CUTS].fill(pair[0].getEnergy(), pair[1].getEnergy());
- if(pair[0].getEnergy() < pair[1].getEnergy()) {
- pairEnergySlope2D[NO_CUTS].fill(pair[0].getEnergy(), TriggerModule.getClusterDistance(pair[0]));
- } else {
- pairEnergySlope2D[NO_CUTS].fill(pair[1].getEnergy(), TriggerModule.getClusterDistance(pair[1]));
- }
-
- // Perform the cluster singles cuts.
- if(!(trigger.clusterHitCountCut(pair[0]) && trigger.clusterHitCountCut(pair[1]))) {
- continue pairLoop;
- } if(!(trigger.clusterTotalEnergyCut(pair[0]) && trigger.clusterTotalEnergyCut(pair[1]))) {
- continue pairLoop;
- } if(!(trigger.clusterSeedEnergyCut(pair[0]) && trigger.clusterSeedEnergyCut(pair[1]))) {
- continue pairLoop;
- }
-
- // Perform the cluster pair cuts.
- if(!trigger.pairCoplanarityCut(pair)) {
- continue pairLoop;
- } if(!trigger.pairEnergyDifferenceCut(pair)) {
- continue pairLoop;
- } if(!trigger.pairEnergySlopeCut(pair)) {
- continue pairLoop;
- } if(!trigger.pairEnergySumCut(pair)) {
- continue pairLoop;
- }
-
- // Iterate over the clusters in the pair and plot the
- // cluster singles distributions.
- for(int clusterIndex = 0; clusterIndex < 2; clusterIndex++) {
- // Only plot cluster singles distributions for
- // clusters if they have not already been plotted.
- // Note that this is needed because the same cluster
- // can appear across multiple pairs.
- if(!plottedClustersCut.contains(pair[clusterIndex])) {
- clusterSeedEnergy[ALL_CUTS].fill(TriggerModule.getValueClusterSeedEnergy(pair[clusterIndex]));
- clusterTotalEnergy[ALL_CUTS].fill(TriggerModule.getValueClusterTotalEnergy(pair[clusterIndex]));
- clusterHitCount[ALL_CUTS].fill(TriggerModule.getValueClusterHitCount(pair[clusterIndex]));
- clusterDistribution[ALL_CUTS].fill(ix[clusterIndex], iy[clusterIndex]);
- clusterTime[ALL_CUTS].fill(pair[clusterIndex].getCalorimeterHits().get(0).getTime());
- plottedClustersCut.add(pair[clusterIndex]);
- }
- }
-
- // Plot the cluster pair distributions.
- pairEnergySum[ALL_CUTS].fill(TriggerModule.getValueEnergySum(pair));
- pairEnergyDifference[ALL_CUTS].fill(TriggerModule.getValueEnergyDifference(pair));
- pairEnergySlope[ALL_CUTS].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF));
- pairCoplanarity[ALL_CUTS].fill(TriggerModule.getValueCoplanarity(pair));
- pairTime[ALL_CUTS].fill(pair[1].getCalorimeterHits().get(0).getTime());
- pairCoincidence[ALL_CUTS].fill(TriggerModule.getValueTimeCoincidence(pair));
- pairEnergySum2D[ALL_CUTS].fill(pair[0].getEnergy(), pair[1].getEnergy());
- if(pair[0].getEnergy() < pair[1].getEnergy()) {
- pairEnergySlope2D[ALL_CUTS].fill(pair[0].getEnergy(), TriggerModule.getClusterDistance(pair[0]));
- } else {
- pairEnergySlope2D[ALL_CUTS].fill(pair[1].getEnergy(), TriggerModule.getClusterDistance(pair[1]));
- }
-
- }
- }
- }
-
- public void setClusterCollectionName(String clusterCollectionName) {
- this.clusterCollectionName = clusterCollectionName;
- }
-
- public void setEnergySlopeParamF(double energySlopeParamF) {
- this.energySlopeParamF = energySlopeParamF;
- trigger.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, energySlopeParamF);
- }
-
- public void setSeedEnergyLow(double value) {
- trigger.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW, value);
- }
-
- public void setClusterEnergyLow(double value) {
- trigger.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, value);
- }
-
- public void setClusterEnergyHigh(double value) {
- trigger.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, value);
- }
-
- public void setHitCountLow(double value) {
- trigger.setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, value);
- }
-
- public void setEnergySumLow(double value) {
- trigger.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, value);
- }
-
- public void setEnergySumHigh(double value) {
- trigger.setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, value);
- }
-
- public void setEnergyDifferenceHigh(double value) {
- trigger.setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, value);
- }
-
- public void setEnergySlopeLow(double value) {
- trigger.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, value);
- }
-
- public void setCoplanarityHigh(double value) {
- trigger.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, value);
- }
-
- public void setTimeCoincidence(double value) {
- trigger.setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, value);
- }
-
- /**
- * Creates all top/bottom pairs from the event data.
- * @param clusters - A list of clusters from which to form pairs.
- * @return Returns a <code>List</code> collection that contains
- * <code>Cluster</code> arrays of size two.
- */
- private List<Cluster[]> getClusterPairs(List<Cluster> clusters) {
- // Separate the clusters into top nad bottom clusters.
- List<Cluster> topList = new ArrayList<Cluster>();
- List<Cluster> botList = new ArrayList<Cluster>();
- for(Cluster cluster : clusters) {
- if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
- topList.add(cluster);
- } else {
- botList.add(cluster);
- }
- }
-
- // Create all possible top/bottom cluster pairs.
- List<Cluster[]> pairList = new ArrayList<Cluster[]>();
- for(Cluster topCluster : topList) {
- for(Cluster botCluster : botList) {
- pairList.add(new Cluster[] { topCluster, botCluster });
- }
- }
-
- // Return the pairs.
- return pairList;
- }
+ @Override
+ public void process(EventHeader event) {
+ // Check for a collection of clusters.
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Get the list of clusters.
+ List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
+
+ // Track which clusters have already been plotted.
+ Set<Cluster> plottedClustersUncut = new HashSet<Cluster>(clusters.size());
+ Set<Cluster> plottedClustersCut = new HashSet<Cluster>(clusters.size());
+
+ // Populate a list of cluster pairs.
+ List<Cluster[]> pairs = getClusterPairs(clusters);
+
+ // Process all cluster pairs.
+ pairLoop:
+ for(Cluster[] pair : pairs) {
+ // Get the x and y indices for each cluster in the pair.
+ int[] ix = { pair[0].getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
+ pair[1].getCalorimeterHits().get(0).getIdentifierFieldValue("ix") };
+ int[] iy = { pair[0].getCalorimeterHits().get(0).getIdentifierFieldValue("iy"),
+ pair[1].getCalorimeterHits().get(0).getIdentifierFieldValue("iy") };
+
+ // Iterate over the clusters in the pair and plot the
+ // cluster singles distributions.
+ for(int clusterIndex = 0; clusterIndex < 2; clusterIndex++) {
+ // Only plot cluster singles distributions for
+ // clusters if they have not already been plotted.
+ // Note that this is needed because the same cluster
+ // can appear across multiple pairs.
+ if(!plottedClustersUncut.contains(pair[clusterIndex])) {
+ clusterSeedEnergy[NO_CUTS].fill(TriggerModule.getValueClusterSeedEnergy(pair[clusterIndex]));
+ clusterTotalEnergy[NO_CUTS].fill(TriggerModule.getValueClusterTotalEnergy(pair[clusterIndex]));
+ clusterHitCount[NO_CUTS].fill(TriggerModule.getValueClusterHitCount(pair[clusterIndex]));
+ clusterDistribution[NO_CUTS].fill(ix[clusterIndex], iy[clusterIndex]);
+ clusterTime[NO_CUTS].fill(pair[clusterIndex].getCalorimeterHits().get(0).getTime());
+ plottedClustersUncut.add(pair[clusterIndex]);
+ }
+ }
+
+ // Plot the cluster pair distributions.
+ pairEnergySum[NO_CUTS].fill(TriggerModule.getValueEnergySum(pair));
+ pairEnergyDifference[NO_CUTS].fill(TriggerModule.getValueEnergyDifference(pair));
+ pairEnergySlope[NO_CUTS].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF));
+ pairCoplanarity[NO_CUTS].fill(TriggerModule.getValueCoplanarity(pair));
+ pairTime[NO_CUTS].fill(pair[1].getCalorimeterHits().get(0).getTime());
+ pairCoincidence[NO_CUTS].fill(TriggerModule.getValueTimeCoincidence(pair));
+ pairEnergySum2D[NO_CUTS].fill(pair[0].getEnergy(), pair[1].getEnergy());
+ if(pair[0].getEnergy() < pair[1].getEnergy()) {
+ pairEnergySlope2D[NO_CUTS].fill(pair[0].getEnergy(), TriggerModule.getClusterDistance(pair[0]));
+ } else {
+ pairEnergySlope2D[NO_CUTS].fill(pair[1].getEnergy(), TriggerModule.getClusterDistance(pair[1]));
+ }
+
+ // Perform the cluster singles cuts.
+ if(!(trigger.clusterHitCountCut(pair[0]) && trigger.clusterHitCountCut(pair[1]))) {
+ continue pairLoop;
+ } if(!(trigger.clusterTotalEnergyCut(pair[0]) && trigger.clusterTotalEnergyCut(pair[1]))) {
+ continue pairLoop;
+ } if(!(trigger.clusterSeedEnergyCut(pair[0]) && trigger.clusterSeedEnergyCut(pair[1]))) {
+ continue pairLoop;
+ }
+
+ // Perform the cluster pair cuts.
+ if(!trigger.pairCoplanarityCut(pair)) {
+ continue pairLoop;
+ } if(!trigger.pairEnergyDifferenceCut(pair)) {
+ continue pairLoop;
+ } if(!trigger.pairEnergySlopeCut(pair)) {
+ continue pairLoop;
+ } if(!trigger.pairEnergySumCut(pair)) {
+ continue pairLoop;
+ }
+
+ // Iterate over the clusters in the pair and plot the
+ // cluster singles distributions.
+ for(int clusterIndex = 0; clusterIndex < 2; clusterIndex++) {
+ // Only plot cluster singles distributions for
+ // clusters if they have not already been plotted.
+ // Note that this is needed because the same cluster
+ // can appear across multiple pairs.
+ if(!plottedClustersCut.contains(pair[clusterIndex])) {
+ clusterSeedEnergy[ALL_CUTS].fill(TriggerModule.getValueClusterSeedEnergy(pair[clusterIndex]));
+ clusterTotalEnergy[ALL_CUTS].fill(TriggerModule.getValueClusterTotalEnergy(pair[clusterIndex]));
+ clusterHitCount[ALL_CUTS].fill(TriggerModule.getValueClusterHitCount(pair[clusterIndex]));
+ clusterDistribution[ALL_CUTS].fill(ix[clusterIndex], iy[clusterIndex]);
+ clusterTime[ALL_CUTS].fill(pair[clusterIndex].getCalorimeterHits().get(0).getTime());
+ plottedClustersCut.add(pair[clusterIndex]);
+ }
+ }
+
+ // Plot the cluster pair distributions.
+ pairEnergySum[ALL_CUTS].fill(TriggerModule.getValueEnergySum(pair));
+ pairEnergyDifference[ALL_CUTS].fill(TriggerModule.getValueEnergyDifference(pair));
+ pairEnergySlope[ALL_CUTS].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF));
+ pairCoplanarity[ALL_CUTS].fill(TriggerModule.getValueCoplanarity(pair));
+ pairTime[ALL_CUTS].fill(pair[1].getCalorimeterHits().get(0).getTime());
+ pairCoincidence[ALL_CUTS].fill(TriggerModule.getValueTimeCoincidence(pair));
+ pairEnergySum2D[ALL_CUTS].fill(pair[0].getEnergy(), pair[1].getEnergy());
+ if(pair[0].getEnergy() < pair[1].getEnergy()) {
+ pairEnergySlope2D[ALL_CUTS].fill(pair[0].getEnergy(), TriggerModule.getClusterDistance(pair[0]));
+ } else {
+ pairEnergySlope2D[ALL_CUTS].fill(pair[1].getEnergy(), TriggerModule.getClusterDistance(pair[1]));
+ }
+
+ }
+ }
+ }
+
+ public void setClusterCollectionName(String clusterCollectionName) {
+ this.clusterCollectionName = clusterCollectionName;
+ }
+
+ public void setEnergySlopeParamF(double energySlopeParamF) {
+ this.energySlopeParamF = energySlopeParamF;
+ trigger.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, energySlopeParamF);
+ }
+
+ public void setSeedEnergyLow(double value) {
+ trigger.setCutValue(TriggerModule.CLUSTER_SEED_ENERGY_LOW, value);
+ }
+
+ public void setClusterEnergyLow(double value) {
+ trigger.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, value);
+ }
+
+ public void setClusterEnergyHigh(double value) {
+ trigger.setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, value);
+ }
+
+ public void setHitCountLow(double value) {
+ trigger.setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, value);
+ }
+
+ public void setEnergySumLow(double value) {
+ trigger.setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, value);
+ }
+
+ public void setEnergySumHigh(double value) {
+ trigger.setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, value);
+ }
+
+ public void setEnergyDifferenceHigh(double value) {
+ trigger.setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, value);
+ }
+
+ public void setEnergySlopeLow(double value) {
+ trigger.setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, value);
+ }
+
+ public void setCoplanarityHigh(double value) {
+ trigger.setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, value);
+ }
+
+ public void setTimeCoincidence(double value) {
+ trigger.setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, value);
+ }
+
+ /**
+ * Creates all top/bottom pairs from the event data.
+ * @param clusters - A list of clusters from which to form pairs.
+ * @return Returns a <code>List</code> collection that contains
+ * <code>Cluster</code> arrays of size two.
+ */
+ private List<Cluster[]> getClusterPairs(List<Cluster> clusters) {
+ // Separate the clusters into top nad bottom clusters.
+ List<Cluster> topList = new ArrayList<Cluster>();
+ List<Cluster> botList = new ArrayList<Cluster>();
+ for(Cluster cluster : clusters) {
+ if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
+ topList.add(cluster);
+ } else {
+ botList.add(cluster);
+ }
+ }
+
+ // Create all possible top/bottom cluster pairs.
+ List<Cluster[]> pairList = new ArrayList<Cluster[]>();
+ for(Cluster topCluster : topList) {
+ for(Cluster botCluster : botList) {
+ pairList.add(new Cluster[] { topCluster, botCluster });
+ }
+ }
+
+ // Return the pairs.
+ return pairList;
+ }
}
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/RingBuffer.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/RingBuffer.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/RingBuffer.java Wed Mar 9 11:43:24 2016
@@ -8,46 +8,46 @@
*/
public class RingBuffer {
- protected double[] array;
- protected int ptr;
+ protected double[] array;
+ protected int ptr;
- public RingBuffer(int size) {
- array = new double[size]; //initialized to 0
- ptr = 0;
- }
+ public RingBuffer(int size) {
+ array = new double[size]; //initialized to 0
+ ptr = 0;
+ }
- /**
- *
- * @return value stored at current cell
- */
- public double currentValue() {
- return array[ptr];
- }
+ /**
+ *
+ * @return value stored at current cell
+ */
+ public double currentValue() {
+ return array[ptr];
+ }
- //return content of specified cell (pos=0 for current cell)
- public double getValue(int pos) {
- return array[((ptr + pos) % array.length + array.length) % array.length];
- }
+ //return content of specified cell (pos=0 for current cell)
+ public double getValue(int pos) {
+ return array[((ptr + pos) % array.length + array.length) % array.length];
+ }
- /**
- * Clear value at current cell and step to the next one
- */
- public void step() {
- array[ptr] = 0;
- ptr++;
- if (ptr == array.length) {
- ptr = 0;
- }
- }
+ /**
+ * Clear value at current cell and step to the next one
+ */
+ public void step() {
+ array[ptr] = 0;
+ ptr++;
+ if (ptr == array.length) {
+ ptr = 0;
+ }
+ }
- /**
- * Add given value to specified cell
- * @param pos Target position relative to current cell (pos=0 for current cell)
- * @param val
- */
- public void addToCell(int pos, double val) {
- array[(ptr + pos) % array.length] += val;
- }
+ /**
+ * Add given value to specified cell
+ * @param pos Target position relative to current cell (pos=0 for current cell)
+ * @param val
+ */
+ public void addToCell(int pos, double val) {
+ array[(ptr + pos) % array.length] += val;
+ }
public int getLength() {
return array.length;
Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TimeEvolutionEcalReadoutDriver.java
=============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TimeEvolutionEcalReadoutDriver.java (original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/TimeEvolutionEcalReadoutDriver.java Wed Mar 9 11:43:24 2016
@@ -23,7 +23,7 @@
double t0 = 18.0;
public TimeEvolutionEcalReadoutDriver() {
- hitClass = CalorimeterHit.class;
+ hitClass = CalorimeterHit.class;
}
public void setT0(double t0) {
@@ -39,8 +39,8 @@
protected void readHits(List<CalorimeterHit> hits) {
for (Long cellID : eDepMap.keySet()) {
RingBuffer eDepBuffer = eDepMap.get(cellID);
- if (eDepBuffer.currentValue() > threshold) {
- hits.add(CalorimeterHitUtilities.create(eDepBuffer.currentValue(), readoutTime(), cellID, hitType));
+ if (eDepBuffer.currentValue() > threshold) {
+ hits.add(CalorimeterHitUtilities.create(eDepBuffer.currentValue(), readoutTime(), cellID, hitType));
}
eDepBuffer.step();
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java Wed Mar 9 11:43:24 2016
@@ -222,9 +222,9 @@
// Create a new calibration object and add it to the collection, using mean for pedestal
// and sigma for noise.
try {
- calibrations.add(new EcalCalibration(channelId, mean, sigma));
+ calibrations.add(new EcalCalibration(channelId, mean, sigma));
} catch (ConditionsObjectException e) {
- throw new RuntimeException("Error adding new calibration object.", e);
+ throw new RuntimeException("Error adding new calibration object.", e);
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalConverterDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalConverterDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalConverterDriver.java Wed Mar 9 11:43:24 2016
@@ -17,8 +17,8 @@
* @version $Id: EcalConverterDriver.java,v 1.1 2013/02/25 22:39:24 meeg Exp $
*/
public class EcalConverterDriver extends Driver {
-
- Detector detector = null;
+
+ Detector detector = null;
String rawCollectionName;
String ecalReadoutName = "EcalHits";
@@ -59,7 +59,7 @@
@Override
public void detectorChanged(Detector detector) {
- this.detector = detector;
+ this.detector = detector;
}
@Override
@@ -87,8 +87,8 @@
}
private CalorimeterHit HitDtoA(RawCalorimeterHit hit) {
- double energy = DtoA(hit.getAmplitude(), hit.getCellID());
- return CalorimeterHitUtilities.create(energy, period * hit.getTimeStamp() + dt, hit.getCellID());
+ double energy = DtoA(hit.getAmplitude(), hit.getCellID());
+ return CalorimeterHitUtilities.create(energy, period * hit.getTimeStamp() + dt, hit.getCellID());
}
// private RawCalorimeterHit HitAtoD(CalorimeterHit hit) {
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalEdepToTriggerConverterDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalEdepToTriggerConverterDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalEdepToTriggerConverterDriver.java Wed Mar 9 11:43:24 2016
@@ -29,11 +29,11 @@
* @author Holly Szumila <[log in to unmask]>
*/
public class EcalEdepToTriggerConverterDriver extends Driver {
-
+
private EcalConditions ecalConditions = null;
private static final boolean isBadChannelLoaded = true;
-
+
private final String ecalReadoutName = "EcalHits";
private String inputCollection = "EcalHits";
private String readoutCollection = "EcalCalHits";
@@ -94,7 +94,7 @@
@Override
public void detectorChanged(Detector detector) {
-
+
// ECAL combined conditions object.
ecalConditions = DatabaseConditionsManager.getInstance().getEcalConditions();
@@ -104,7 +104,7 @@
public boolean isBadCrystal(CalorimeterHit hit) {
// Get the channel data.
EcalChannelConstants channelData = findChannel(hit.getCellID());
-
+
return isBadChannelLoaded ? channelData.isBadChannel() : false;
}
@@ -165,8 +165,8 @@
// System.out.format("trigger: %f %f\n", amplitude, triggerIntegral);
int truncatedIntegral = (int) Math.floor(triggerIntegral / truncateScale);
- if (truncatedIntegral > 0) {
- return CalorimeterHitUtilities.create(truncatedIntegral, hit.getTime(), hit.getCellID());
+ if (truncatedIntegral > 0) {
+ return CalorimeterHitUtilities.create(truncatedIntegral, hit.getTime(), hit.getCellID());
}
return null;
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalOnlineRawConverter.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalOnlineRawConverter.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalOnlineRawConverter.java Wed Mar 9 11:43:24 2016
@@ -27,28 +27,28 @@
private int nPeak = 3;
public EcalOnlineRawConverter() {
- // Track changes in the DAQ configuration.
- ConfigurationManager.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // Get the FADC configuration.
- config = ConfigurationManager.getInstance().getFADCConfig();
- // Get the number of peaks.
- if(config.getMode() == 1) nPeak = Integer.MAX_VALUE;
- else nPeak = config.getMaxPulses();
- // Print the FADC configuration.
- System.out.println();
- System.out.println();
- System.out.printf("NSA :: %d ns%n", config.getNSA());
- System.out.printf("NSB :: %d ns%n", config.getNSB());
- System.out.printf("Window Samples :: %d clock-cycles%n", config.getWindowWidth());
- System.out.printf("Max Peaks :: %d peaks%n", nPeak);
- System.out.println("======================================================================");
- System.out.println("=== FADC Pulse-Processing Settings ===================================");
- System.out.println("======================================================================");
- config.printConfig(System.out);
- }
- });
+ // Track changes in the DAQ configuration.
+ ConfigurationManager.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // Get the FADC configuration.
+ config = ConfigurationManager.getInstance().getFADCConfig();
+ // Get the number of peaks.
+ if(config.getMode() == 1) nPeak = Integer.MAX_VALUE;
+ else nPeak = config.getMaxPulses();
+ // Print the FADC configuration.
+ System.out.println();
+ System.out.println();
+ System.out.printf("NSA :: %d ns%n", config.getNSA());
+ System.out.printf("NSB :: %d ns%n", config.getNSB());
+ System.out.printf("Window Samples :: %d clock-cycles%n", config.getWindowWidth());
+ System.out.printf("Max Peaks :: %d peaks%n", nPeak);
+ System.out.println("======================================================================");
+ System.out.println("=== FADC Pulse-Processing Settings ===================================");
+ System.out.println("======================================================================");
+ config.printConfig(System.out);
+ }
+ });
}
/**
@@ -137,10 +137,10 @@
// search for next threshold crossing begins at end of this pulse:
if (ConfigurationManager.getInstance().getFADCConfig().getMode() == 1) {
// special case, emulating SSP:
- ii += 8;
+ ii += 8;
} else {
// "normal" case, emulating FADC250:
- ii += config.getNSA()/nsPerSample - 1;
+ ii += config.getNSA()/nsPerSample - 1;
}
// firmware limit on # of peaks:
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalOnlineRawConverterDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalOnlineRawConverterDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalOnlineRawConverterDriver.java Wed Mar 9 11:43:24 2016
@@ -85,12 +85,12 @@
@Override
public void process(EventHeader event) {
- // Do not process the event if the DAQ configuration should be
- // used for value, but is not initialized.
- if(!ConfigurationManager.isInitialized()) {
- return;
- }
-
+ // Do not process the event if the DAQ configuration should be
+ // used for value, but is not initialized.
+ if(!ConfigurationManager.isInitialized()) {
+ return;
+ }
+
double timeOffset = 0.0;
int flags = 0;
flags += 1 << LCIOConstants.RCHBIT_TIME; //store hit time
@@ -102,12 +102,12 @@
* This is for FADC Mode-1 data:
*/
if (event.hasCollection(RawTrackerHit.class, rawCollectionName)) {
- List<RawTrackerHit> hits = event.get(RawTrackerHit.class, rawCollectionName);
+ List<RawTrackerHit> hits = event.get(RawTrackerHit.class, rawCollectionName);
- for (RawTrackerHit hit : hits) {
- newHits.addAll(converter.HitDtoA(event,hit));
- }
- event.put(ecalCollectionName, newHits, CalorimeterHit.class, flags, ecalReadoutName);
+ for (RawTrackerHit hit : hits) {
+ newHits.addAll(converter.HitDtoA(event,hit));
+ }
+ event.put(ecalCollectionName, newHits, CalorimeterHit.class, flags, ecalReadoutName);
}
/*
@@ -115,26 +115,26 @@
*/
if (event.hasCollection(RawCalorimeterHit.class, rawCollectionName)) {
- /*
- * This is for FADC Mode-7 data:
- */
- if (event.hasCollection(LCRelation.class, extraDataRelationsName)) { // extra information available from mode 7 readout
- List<LCRelation> extraDataRelations = event.get(LCRelation.class, extraDataRelationsName);
- for (LCRelation rel : extraDataRelations) {
- RawCalorimeterHit hit = (RawCalorimeterHit) rel.getFrom();
- GenericObject extraData = (GenericObject) rel.getTo();
- newHits.add(converter.HitDtoA(event,hit, extraData, timeOffset));
- }
- } else {
- /*
- * This is for FADC Mode-3 data:
- */
- List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class, rawCollectionName);
- for (RawCalorimeterHit hit : hits) {
- newHits.add(converter.HitDtoA(event, hit, timeOffset));
- }
- }
- event.put(ecalCollectionName, newHits, CalorimeterHit.class, flags, ecalReadoutName);
+ /*
+ * This is for FADC Mode-7 data:
+ */
+ if (event.hasCollection(LCRelation.class, extraDataRelationsName)) { // extra information available from mode 7 readout
+ List<LCRelation> extraDataRelations = event.get(LCRelation.class, extraDataRelationsName);
+ for (LCRelation rel : extraDataRelations) {
+ RawCalorimeterHit hit = (RawCalorimeterHit) rel.getFrom();
+ GenericObject extraData = (GenericObject) rel.getTo();
+ newHits.add(converter.HitDtoA(event,hit, extraData, timeOffset));
+ }
+ } else {
+ /*
+ * This is for FADC Mode-3 data:
+ */
+ List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class, rawCollectionName);
+ for (RawCalorimeterHit hit : hits) {
+ newHits.add(converter.HitDtoA(event, hit, timeOffset));
+ }
+ }
+ event.put(ecalCollectionName, newHits, CalorimeterHit.class, flags, ecalReadoutName);
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalPedestalCalculator.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalPedestalCalculator.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalPedestalCalculator.java Wed Mar 9 11:43:24 2016
@@ -114,11 +114,11 @@
}
}
if (uploadToDB) {
- try {
- uploadToDB();
- } catch (DatabaseObjectException | ConditionsObjectException | SQLException e) {
- throw new RuntimeException("Error uploading to database.", e);
- }
+ try {
+ uploadToDB();
+ } catch (DatabaseObjectException | ConditionsObjectException | SQLException e) {
+ throw new RuntimeException("Error uploading to database.", e);
+ }
} else {
System.out.println("!!!!!!!!!!!!!!!!!!!!!!! Not Writing Database !!!!!!!!!!!!!!!!!!!!!!!!!!");
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java Wed Mar 9 11:43:24 2016
@@ -41,9 +41,9 @@
*/
public class EcalRawConverter {
- /**
- * If true, time walk correction is performed.
- */
+ /**
+ * If true, time walk correction is performed.
+ */
private boolean useTimeWalkCorrection = true;
/**
@@ -149,42 +149,42 @@
* for trigger emulation.
*/
public EcalRawConverter() {
- // Track changes in the DAQ configuration.
- ConfigurationManager.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // If the DAQ configuration should be used, load the
- // relevant settings into the driver.
- if(useDAQConfig) {
- // Get the FADC configuration.
- config = ConfigurationManager.getInstance().getFADCConfig();
-
- // Load the settings.
- NSB = config.getNSB();
- NSA = config.getNSA();
- windowSamples = config.getWindowWidth() / 4;
-
- // Get the number of peaks.
- if(config.getMode() == 1) {
- nPeak = Integer.MAX_VALUE;
- } else {
- nPeak = config.getMaxPulses();
- }
-
- // Print the FADC configuration.
- System.out.println();
- System.out.println();
- System.out.printf("NSA :: %d ns%n", NSA);
- System.out.printf("NSB :: %d ns%n", NSB);
- System.out.printf("Window Samples :: %d clock-cycles%n", windowSamples);
- System.out.printf("Max Peaks :: %d peaks%n", nPeak);
- System.out.println("======================================================================");
- System.out.println("=== FADC Pulse-Processing Settings ===================================");
- System.out.println("======================================================================");
- config.printConfig(System.out);
- }
- }
- });
+ // Track changes in the DAQ configuration.
+ ConfigurationManager.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // If the DAQ configuration should be used, load the
+ // relevant settings into the driver.
+ if(useDAQConfig) {
+ // Get the FADC configuration.
+ config = ConfigurationManager.getInstance().getFADCConfig();
+
+ // Load the settings.
+ NSB = config.getNSB();
+ NSA = config.getNSA();
+ windowSamples = config.getWindowWidth() / 4;
+
+ // Get the number of peaks.
+ if(config.getMode() == 1) {
+ nPeak = Integer.MAX_VALUE;
+ } else {
+ nPeak = config.getMaxPulses();
+ }
+
+ // Print the FADC configuration.
+ System.out.println();
+ System.out.println();
+ System.out.printf("NSA :: %d ns%n", NSA);
+ System.out.printf("NSB :: %d ns%n", NSB);
+ System.out.printf("Window Samples :: %d clock-cycles%n", windowSamples);
+ System.out.printf("Max Peaks :: %d peaks%n", nPeak);
+ System.out.println("======================================================================");
+ System.out.println("=== FADC Pulse-Processing Settings ===================================");
+ System.out.println("======================================================================");
+ config.printConfig(System.out);
+ }
+ }
+ });
}
@@ -313,7 +313,7 @@
* for trigger emulation.
*/
public void setUseDAQConfig(boolean state) {
- useDAQConfig = state;
+ useDAQConfig = state;
}
@@ -325,10 +325,10 @@
EcalChannelConstants channelData = findChannel(hit.getCellID());
double pedestal;
if(useDAQConfig) {
- //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
- pedestal = config.getPedestal(hit.getCellID());
+ //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
+ pedestal = config.getPedestal(hit.getCellID());
} else {
- pedestal = channelData.getCalibration().getPedestal();
+ pedestal = channelData.getCalibration().getPedestal();
}
int sum = 0;
@@ -356,10 +356,10 @@
* Choose whether to use static pedestal from database or running pedestal from mode-7.
*/
public double getSingleSamplePedestal(EventHeader event,long cellID) {
- if(useDAQConfig) {
- //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(cellID);
- return config.getPedestal(cellID);
- }
+ if(useDAQConfig) {
+ //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(cellID);
+ return config.getPedestal(cellID);
+ }
if (useRunningPedestal && event!=null) {
if (event.hasItem("EcalRunningPedestals")) {
Map<EcalChannel, Double> runningPedMap = (Map<EcalChannel, Double>) event.get("EcalRunningPedestals");
@@ -536,12 +536,12 @@
// threshold is pedestal plus threshold configuration parameter:
final int absoluteThreshold;
if(useDAQConfig) {
- //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
- //int leadingEdgeThreshold = ConfigurationManager.getInstance().getFADCConfig().getThreshold(channel.getChannelId());
- int leadingEdgeThreshold = config.getThreshold(cellID);
- absoluteThreshold = (int) (getSingleSamplePedestal(event, cellID) + leadingEdgeThreshold);
+ //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
+ //int leadingEdgeThreshold = ConfigurationManager.getInstance().getFADCConfig().getThreshold(channel.getChannelId());
+ int leadingEdgeThreshold = config.getThreshold(cellID);
+ absoluteThreshold = (int) (getSingleSamplePedestal(event, cellID) + leadingEdgeThreshold);
} else {
- absoluteThreshold = (int) (getSingleSamplePedestal(event, cellID) + leadingEdgeThreshold);
+ absoluteThreshold = (int) (getSingleSamplePedestal(event, cellID) + leadingEdgeThreshold);
}
ArrayList <Integer> thresholdCrossings = new ArrayList<Integer>();
@@ -562,10 +562,10 @@
// search for next threshold crossing begins at end of this pulse:
if(useDAQConfig && ConfigurationManager.getInstance().getFADCConfig().getMode() == 1) {
// special case, emulating SSP:
- ii += 8;
+ ii += 8;
} else {
// "normal" case, emulating FADC250:
- ii += NSA/nsPerSample - 1;
+ ii += NSA/nsPerSample - 1;
}
// firmware limit on # of peaks:
@@ -674,8 +674,8 @@
EcalChannelConstants channelData = findChannel(cellID);
if(useDAQConfig) {
- //float gain = ConfigurationManager.getInstance().getFADCConfig().getGain(ecalConditions.getChannelCollection().findGeometric(cellID));
- return config.getGain(cellID) * adcSum * EcalUtils.MeV;
+ //float gain = ConfigurationManager.getInstance().getFADCConfig().getGain(ecalConditions.getChannelCollection().findGeometric(cellID));
+ return config.getGain(cellID) * adcSum * EcalUtils.MeV;
} else if(use2014Gain) {
if (constantGain) {
return adcSum * EcalUtils.gainFactor * EcalUtils.ecalReadoutPeriod;
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java Wed Mar 9 11:43:24 2016
@@ -380,8 +380,8 @@
* conditions database.
*/
public void setUseDAQConfig(boolean state) {
- useDAQConfig = state;
- converter.setUseDAQConfig(state);
+ useDAQConfig = state;
+ converter.setUseDAQConfig(state);
}
@Override
@@ -437,12 +437,12 @@
@Override
public void process(EventHeader event) {
- // Do not process the event if the DAQ configuration should be
- // used for value, but is not initialized.
- if(useDAQConfig && !ConfigurationManager.isInitialized()) {
- return;
- }
-
+ // Do not process the event if the DAQ configuration should be
+ // used for value, but is not initialized.
+ if(useDAQConfig && !ConfigurationManager.isInitialized()) {
+ return;
+ }
+
final int SYSTEM_TRIGGER = 0;
// final int SYSTEM_TRACKER = 1;
final int SYSTEM_ECAL = 2;
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalTimeWalk.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalTimeWalk.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalTimeWalk.java Wed Mar 9 11:43:24 2016
@@ -39,11 +39,11 @@
* Time walk parameters for pulse fitting
*/
private static final double[] par = {
- 0.9509,
- -33.21,
- 0.2614,
- -0.9128,
- 0.6251
+ 0.9509,
+ -33.21,
+ 0.2614,
+ -0.9128,
+ 0.6251
};
/**
@@ -53,9 +53,9 @@
* @return corrected time (ns)
*/
public static final double correctTimeWalkPulseFitting(double time, double energy) {
- final double polyA = par[0] + par[1]*energy;
- final double polyB = par[2] + par[3] * energy + par[4] * Math.pow(energy, 2);
- return time - (Math.exp(polyA) + polyB);
+ final double polyA = par[0] + par[1]*energy;
+ final double polyB = par[2] + par[3] * energy + par[4] * Math.pow(energy, 2);
+ return time - (Math.exp(polyA) + polyB);
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/IterateGainFactorDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/IterateGainFactorDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/IterateGainFactorDriver.java Wed Mar 9 11:43:24 2016
@@ -26,15 +26,15 @@
*/
public class IterateGainFactorDriver extends Driver {
-
- private EcalConditions ecalConditions = null;
-
- /**
+
+ private EcalConditions ecalConditions = null;
+
+ /**
* Set the input collection name (source).
*
* @param inputCollectionName the input collection name
*/
- private String inputCollectionName = "EcalCalHits";
+ private String inputCollectionName = "EcalCalHits";
public void setInputCollectionName(final String inputCollectionName) {
this.inputCollectionName = inputCollectionName;
}
@@ -116,14 +116,14 @@
* @return the output hit collection with gain corrected energies
*/
public List<CalorimeterHit> iterateHits(final List<CalorimeterHit> hits) {
- ArrayList<CalorimeterHit> newHits = new ArrayList<CalorimeterHit>();
+ ArrayList<CalorimeterHit> newHits = new ArrayList<CalorimeterHit>();
for (final CalorimeterHit hit : hits) {
- double time = hit.getTime();
- long cellID = hit.getCellID();
- double energy = hit.getCorrectedEnergy()*gainFileGains.get(findChannelId(cellID));
- CalorimeterHit newHit = CalorimeterHitUtilities.create(energy, time, cellID);
- newHits.add(newHit);
-
+ double time = hit.getTime();
+ long cellID = hit.getCellID();
+ double energy = hit.getCorrectedEnergy()*gainFileGains.get(findChannelId(cellID));
+ CalorimeterHit newHit = CalorimeterHitUtilities.create(energy, time, cellID);
+ newHits.add(newHit);
+
}
return newHits;
}
@@ -134,26 +134,26 @@
*/
@Override
public void process(final EventHeader event) {
- readGainFile();
-
- // Check if output collection already exists in event which is an error.
+ readGainFile();
+
+ // Check if output collection already exists in event which is an error.
if (event.hasItem(outputCollectionName)) {
throw new RuntimeException("collection " + outputCollectionName + " already exists in event");
}
// Get the input collection.
if (event.hasCollection(CalorimeterHit.class,inputCollectionName)){
- final List<CalorimeterHit> inputHitCollection = event.get(CalorimeterHit.class, inputCollectionName);
+ final List<CalorimeterHit> inputHitCollection = event.get(CalorimeterHit.class, inputCollectionName);
- // Iterate the gain correction coefficient on each hit.
- final List<CalorimeterHit> outputHitCollection = this.iterateHits(inputHitCollection);
-
+ // Iterate the gain correction coefficient on each hit.
+ final List<CalorimeterHit> outputHitCollection = this.iterateHits(inputHitCollection);
+
int flags = 0;
flags += 1 << LCIOConstants.RCHBIT_TIME; //store hit time
flags += 1 << LCIOConstants.RCHBIT_LONG; //store hit position; this flag has no effect for RawCalorimeterHits
-
- // Put the collection into the event.
- event.put(outputCollectionName, outputHitCollection, CalorimeterHit.class, flags, ecalReadoutName);
+
+ // Put the collection into the event.
+ event.put(outputCollectionName, outputHitCollection, CalorimeterHit.class, flags, ecalReadoutName);
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterEnergyCorrection.java Wed Mar 9 11:43:24 2016
@@ -19,9 +19,9 @@
* @author Jeremy McCormick <[log in to unmask]>
*/
public final class ClusterEnergyCorrection {
-
- // Variables for electron energy corrections.
- static final double par0_em = -0.017;
+
+ // Variables for electron energy corrections.
+ static final double par0_em = -0.017;
static final double par1_em[] = {35,-0.06738,-0.0005613,16.42,0.3431,-2.021,74.85,-0.3626};
static final double par2_em[] = {35, 0.933, 0.003234, 18.06, 0.24, 8.586, 75.08, -0.39};
@@ -84,55 +84,55 @@
private static double computeCorrectedEnergy(HPSEcal3 ecal, int pdg, double rawEnergy, double xpos, double ypos) {
//distance to beam gap edge
- double r;
- //Get these values from the Ecal geometry:
- HPSEcalDetectorElement detElement = (HPSEcalDetectorElement) ecal.getDetectorElement();
+ double r;
+ //Get these values from the Ecal geometry:
+ HPSEcalDetectorElement detElement = (HPSEcalDetectorElement) ecal.getDetectorElement();
// double BEAMGAPTOP = 22.3;//ecal.getNode().getChild("layout").getAttribute("beamgapTop").getDoubleValue();//mm
double BEAMGAPTOP=20.0;
- try {
- BEAMGAPTOP = ecal.getNode().getChild("layout").getAttribute("beamgapTop").getDoubleValue();
- } catch (DataConversionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }//mm
+ try {
+ BEAMGAPTOP = ecal.getNode().getChild("layout").getAttribute("beamgapTop").getDoubleValue();
+ } catch (DataConversionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }//mm
double BEAMGAPBOT=-20.0;
- try {
- BEAMGAPBOT = -ecal.getNode().getChild("layout").getAttribute("beamgapBottom").getDoubleValue();
- } catch (DataConversionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }//mm
+ try {
+ BEAMGAPBOT = -ecal.getNode().getChild("layout").getAttribute("beamgapBottom").getDoubleValue();
+ } catch (DataConversionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }//mm
double BEAMGAPTOPC = BEAMGAPTOP + 13.0;//mm
double BEAMGAPBOTC = BEAMGAPBOT - 13.0;//mm
- // x-coordinates of crystals on either side of row 1 cut out
+ // x-coordinates of crystals on either side of row 1 cut out
EcalCrystal crystalM = detElement.getCrystal(-11, 1);
Hep3Vector posM = crystalM.getPositionFront();
EcalCrystal crystalP = detElement.getCrystal(-1, 1);
Hep3Vector posP = crystalP.getPositionFront();
- if ((xpos<posM.x())||(xpos>posP.x())){
- if (ypos>0){
- r = Math.abs(ypos-BEAMGAPTOP);}
- else{
- r = Math.abs(ypos-BEAMGAPBOT);}
+ if ((xpos<posM.x())||(xpos>posP.x())){
+ if (ypos>0){
+ r = Math.abs(ypos-BEAMGAPTOP);}
+ else{
+ r = Math.abs(ypos-BEAMGAPBOT);}
}
- // crystals above row 1 cut out
+ // crystals above row 1 cut out
else {
- if (ypos>0){
- if (ypos>(par1_em[0]+BEAMGAPTOP)){
- r = Math.abs(ypos-BEAMGAPTOP);}
- else{
- r = Math.abs(ypos-BEAMGAPTOPC);}
- }
- else {
- if (ypos>(-par1_em[0]+BEAMGAPBOT)){
- r = Math.abs(ypos-BEAMGAPBOTC);}
- else {
- r = Math.abs(ypos-BEAMGAPBOT);}
- }
+ if (ypos>0){
+ if (ypos>(par1_em[0]+BEAMGAPTOP)){
+ r = Math.abs(ypos-BEAMGAPTOP);}
+ else{
+ r = Math.abs(ypos-BEAMGAPTOPC);}
+ }
+ else {
+ if (ypos>(-par1_em[0]+BEAMGAPBOT)){
+ r = Math.abs(ypos-BEAMGAPBOTC);}
+ else {
+ r = Math.abs(ypos-BEAMGAPBOT);}
+ }
}
-
- switch(pdg) {
+
+ switch(pdg) {
case 11:
// electron
return computeCorrectedEnergy(r, rawEnergy, par0_em, par1_em, par2_em);
@@ -158,8 +158,8 @@
*/
private static double computeCorrectedEnergy(double y, double rawEnergy, double varA, double varB[], double varC[]){
int ii = y<varB[0] ? 2 : 5;
- double corrEnergy = rawEnergy / (varA / rawEnergy + (varB[1]-varB[ii]*Math.exp(-(y-varB[ii+1])*varB[ii+2])) / (Math.sqrt(rawEnergy)) +
- (varC[1]-varC[ii]*Math.exp(-(y-varC[ii+1])*varC[ii+2])));
+ double corrEnergy = rawEnergy / (varA / rawEnergy + (varB[1]-varB[ii]*Math.exp(-(y-varB[ii+1])*varB[ii+2])) / (Math.sqrt(rawEnergy)) +
+ (varC[1]-varC[ii]*Math.exp(-(y-varC[ii+1])*varC[ii+2])));
return corrEnergy;
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterPositionCorrection.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterPositionCorrection.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterPositionCorrection.java Wed Mar 9 11:43:24 2016
@@ -95,6 +95,6 @@
*/
private static double positionCorrection(double xCl, double rawEnergy, double varA1, double varA2, double varB1, double varB2, double varB3) {
//return ((xCl - (varB1 * rawEnergy + varB2 / Math.sqrt(rawEnergy) + varB3))/(varA1 / Math.sqrt(rawEnergy) + varA2 + 1));
- return ((xCl - (varB1 * rawEnergy + varB2 / Math.sqrt(rawEnergy) + varB3))/(varA1 / Math.sqrt(rawEnergy) + varA2 + 1));
+ return ((xCl - (varB1 * rawEnergy + varB2 / Math.sqrt(rawEnergy) + varB3))/(varA1 / Math.sqrt(rawEnergy) + varA2 + 1));
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterDriver.java Wed Mar 9 11:43:24 2016
@@ -22,8 +22,8 @@
* @see GTPClusterer
*/
public class GTPClusterDriver extends ClusterDriver {
- /** An instance of the clustering algorithm object for producing
- * cluster objects. */
+ /** An instance of the clustering algorithm object for producing
+ * cluster objects. */
private final GTPClusterer gtp;
/**
@@ -112,11 +112,11 @@
*/
@Override
public void setWriteClusterCollection(boolean state) {
- // Set the flag as appropriate with the superclass.
- super.setWriteClusterCollection(state);
-
- // Also tell the clusterer whether it should persist its hit
- // collection or not.
- gtp.setWriteHitCollection(state);
+ // Set the flag as appropriate with the superclass.
+ super.setWriteClusterCollection(state);
+
+ // Also tell the clusterer whether it should persist its hit
+ // collection or not.
+ gtp.setWriteHitCollection(state);
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterer.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterer.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterer.java Wed Mar 9 11:43:24 2016
@@ -146,24 +146,24 @@
// stored in LCIO format properly, it needs to separately store
// its clusters' hits in a collection.
if(writeHitCollection) {
- // Create a set to store the hits so that each one may be
- // stored only once.
- Set<CalorimeterHit> hitSet = new HashSet<CalorimeterHit>();
-
- // Loop over all clusters and add their hits to the set.
- for(Cluster cluster : clusterList) {
- for(CalorimeterHit hit : cluster.getCalorimeterHits()) {
- hitSet.add(hit);
- }
- }
-
- // Convert the set into a List object so that it can be stored
- // in LCIO.
- List<CalorimeterHit> clusterHits = new ArrayList<CalorimeterHit>(hitSet.size());
- clusterHits.addAll(hitSet);
-
- // Place the list of hits into the event stream.
- event.put("GTPHits", hits, CalorimeterHit.class, 0);
+ // Create a set to store the hits so that each one may be
+ // stored only once.
+ Set<CalorimeterHit> hitSet = new HashSet<CalorimeterHit>();
+
+ // Loop over all clusters and add their hits to the set.
+ for(Cluster cluster : clusterList) {
+ for(CalorimeterHit hit : cluster.getCalorimeterHits()) {
+ hitSet.add(hit);
+ }
+ }
+
+ // Convert the set into a List object so that it can be stored
+ // in LCIO.
+ List<CalorimeterHit> clusterHits = new ArrayList<CalorimeterHit>(hitSet.size());
+ clusterHits.addAll(hitSet);
+
+ // Place the list of hits into the event stream.
+ event.put("GTPHits", hits, CalorimeterHit.class, 0);
}
// Return the clusters.
@@ -260,7 +260,7 @@
* should not.
*/
void setVerbose(boolean verbose) {
- this.verbose = verbose;
+ this.verbose = verbose;
}
/**
@@ -271,7 +271,7 @@
* persisted and <code>false</code> that they will not.
*/
void setWriteHitCollection(boolean state) {
- writeHitCollection = state;
+ writeHitCollection = state;
}
/**
@@ -291,7 +291,7 @@
// VERBOSE :: Print the cluster window.
if(verbose) {
- // Print the event header.
+ // Print the event header.
System.out.printf("%n%nEvent:%n");
// Calculate some constants.
@@ -304,9 +304,9 @@
CalorimeterHit hit = null;
for(Entry<Long, CalorimeterHit> entry : bufferMap.entrySet()) {
- hit = entry.getValue();
- System.out.printf("\t(%3d, %3d) --> %.4f (%.4f)%n", hit.getIdentifierFieldValue("ix"),
- hit.getIdentifierFieldValue("iy"), hit.getCorrectedEnergy(), hit.getRawEnergy());
+ hit = entry.getValue();
+ System.out.printf("\t(%3d, %3d) --> %.4f (%.4f)%n", hit.getIdentifierFieldValue("ix"),
+ hit.getIdentifierFieldValue("iy"), hit.getCorrectedEnergy(), hit.getRawEnergy());
}
bufferNum++;
@@ -327,8 +327,8 @@
// VERBOSE :: Print the current cluster.
if(verbose) {
System.out.printf("Cluster Check:%n");
- System.out.printf("\t(%3d, %3d) --> %.4f%n", currentHit.getIdentifierFieldValue("ix"),
- currentHit.getIdentifierFieldValue("iy"), currentHit.getCorrectedEnergy());
+ System.out.printf("\t(%3d, %3d) --> %.4f%n", currentHit.getIdentifierFieldValue("ix"),
+ currentHit.getIdentifierFieldValue("iy"), currentHit.getCorrectedEnergy());
}
// Store the energy of the current hit.
@@ -337,11 +337,11 @@
// If the hit energy is lower than the minimum threshold,
// then we immediately reject this hit as a possible cluster.
if (currentEnergy < seedEnergyThreshold) {
- // VERBOSE :: Note the reason the potential seed was
- // rejected.
- if(verbose) { System.out.printf("\tREJECT :: Does not exceed seed threshold %.4f.%n", seedEnergyThreshold); }
-
- // Skip to the next potential seed.
+ // VERBOSE :: Note the reason the potential seed was
+ // rejected.
+ if(verbose) { System.out.printf("\tREJECT :: Does not exceed seed threshold %.4f.%n", seedEnergyThreshold); }
+
+ // Skip to the next potential seed.
continue seedLoop;
}
@@ -368,16 +368,16 @@
// is larger than then original hit. If it is, we may
// stop the comparison because this is not a cluster.
if (bufferHitEnergy > currentEnergy) {
- // VERBOSE :: Output the reason the potential
- // seed was rejected along with the
- // hit that caused it.
- if(verbose) {
- System.out.printf("\tREJECT :: Buffer hit surpasses hit energy.");
- System.out.printf("\tBUFFER HIT :: (%3d, %3d) --> %.4f%n", bufferHit.getIdentifierFieldValue("ix"),
- bufferHit.getIdentifierFieldValue("iy"), bufferHit.getCorrectedEnergy(), bufferHit.getRawEnergy());
- }
-
- // Skip to the next potential seed.
+ // VERBOSE :: Output the reason the potential
+ // seed was rejected along with the
+ // hit that caused it.
+ if(verbose) {
+ System.out.printf("\tREJECT :: Buffer hit surpasses hit energy.");
+ System.out.printf("\tBUFFER HIT :: (%3d, %3d) --> %.4f%n", bufferHit.getIdentifierFieldValue("ix"),
+ bufferHit.getIdentifierFieldValue("iy"), bufferHit.getCorrectedEnergy(), bufferHit.getRawEnergy());
+ }
+
+ // Skip to the next potential seed.
continue seedLoop;
}
@@ -403,16 +403,16 @@
// If it is, we may stop the comparison because this
// is not a cluster.
if (neighborHitEnergy > currentEnergy) {
- // VERBOSE :: Output the reason the potential
- // seed was rejected along with the
- // hit that caused it.
- if(verbose) {
- System.out.printf("\tREJECT :: Buffer hit surpasses hit energy.%n");
- System.out.printf("\tBUFFER HIT :: (%3d, %3d) --> %.4f%n", neighborHit.getIdentifierFieldValue("ix"),
- neighborHit.getIdentifierFieldValue("iy"), neighborHit.getCorrectedEnergy(), neighborHit.getRawEnergy());
- }
-
- // Skip to the next potential seed.
+ // VERBOSE :: Output the reason the potential
+ // seed was rejected along with the
+ // hit that caused it.
+ if(verbose) {
+ System.out.printf("\tREJECT :: Buffer hit surpasses hit energy.%n");
+ System.out.printf("\tBUFFER HIT :: (%3d, %3d) --> %.4f%n", neighborHit.getIdentifierFieldValue("ix"),
+ neighborHit.getIdentifierFieldValue("iy"), neighborHit.getCorrectedEnergy(), neighborHit.getRawEnergy());
+ }
+
+ // Skip to the next potential seed.
continue seedLoop;
}
@@ -436,10 +436,10 @@
if(verbose) {
System.out.printf("Cluster added.%n");
System.out.printf("\t(%3d, %3d) --> %.4f GeV --> %d hits%n", cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
- cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"), cluster.getEnergy(), cluster.getCalorimeterHits().size());
+ cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"), cluster.getEnergy(), cluster.getCalorimeterHits().size());
for(CalorimeterHit hit : cluster.getCalorimeterHits()) {
- System.out.printf("\t\tCLUSTER HIT :: (%3d, %3d) --> %.4f%n", hit.getIdentifierFieldValue("ix"),
- hit.getIdentifierFieldValue("iy"), hit.getCorrectedEnergy(), hit.getRawEnergy());
+ System.out.printf("\t\tCLUSTER HIT :: (%3d, %3d) --> %.4f%n", hit.getIdentifierFieldValue("ix"),
+ hit.getIdentifierFieldValue("iy"), hit.getCorrectedEnergy(), hit.getRawEnergy());
}
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java Wed Mar 9 11:43:24 2016
@@ -39,8 +39,8 @@
* @see org.hps.record.daqconfig.DAQConfigDriver
*/
public class GTPOnlineClusterDriver extends ClusterDriver {
- /** An instance of the clustering algorithm object for producing
- * cluster objects. */
+ /** An instance of the clustering algorithm object for producing
+ * cluster objects. */
private final GTPOnlineClusterer gtp;
/** Indicates whether the <code>ConfigurationManager</code> object
* should be used for clustering settings or not. */
@@ -53,29 +53,29 @@
* @see GTPOnlineClusterer
*/
public GTPOnlineClusterDriver() {
- // Instantiate the clusterer.
+ // Instantiate the clusterer.
clusterer = ClustererFactory.create("GTPOnlineClusterer");
gtp = (GTPOnlineClusterer) clusterer;
// Track the DAQ configuration status.
ConfigurationManager.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // If DAQ configuration settings should be used, then
- // update the clusterer.
- if(useDAQConfig) {
- // Get the GTP settings.
- GTPConfig config = ConfigurationManager.getInstance().getGTPConfig();
-
- // Send the DAQ configuration settings to the clusterer.
- gtp.setSeedLowThreshold(config.getSeedEnergyCutConfig().getLowerBound());
- gtp.setWindowAfter(config.getTimeWindowAfter());
- gtp.setWindowBefore(config.getTimeWindowBefore());
-
- // Print the updated settings.
- logSettings();
- }
- }
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // If DAQ configuration settings should be used, then
+ // update the clusterer.
+ if(useDAQConfig) {
+ // Get the GTP settings.
+ GTPConfig config = ConfigurationManager.getInstance().getGTPConfig();
+
+ // Send the DAQ configuration settings to the clusterer.
+ gtp.setSeedLowThreshold(config.getSeedEnergyCutConfig().getLowerBound());
+ gtp.setWindowAfter(config.getTimeWindowAfter());
+ gtp.setWindowBefore(config.getTimeWindowBefore());
+
+ // Print the updated settings.
+ logSettings();
+ }
+ }
});
}
@@ -90,11 +90,11 @@
*/
@Override
public void process(EventHeader event) {
- // Only process an event if either the DAQ configuration is not
- // in use or if it has been initialized.
- if((useDAQConfig && ConfigurationManager.isInitialized()) || !useDAQConfig) {
- super.process(event);
- }
+ // Only process an event if either the DAQ configuration is not
+ // in use or if it has been initialized.
+ if((useDAQConfig && ConfigurationManager.isInitialized()) || !useDAQConfig) {
+ super.process(event);
+ }
}
/**
@@ -103,8 +103,8 @@
*/
@Override
public void startOfData() {
- // VERBOSE :: Output the driver settings.
- if(gtp.isVerbose()) { logSettings(); }
+ // VERBOSE :: Output the driver settings.
+ if(gtp.isVerbose()) { logSettings(); }
}
/**
@@ -168,23 +168,23 @@
* @see org.hps.record.daqconfig.DAQConfigDriver
*/
public void setUseDAQConfig(boolean state) {
- useDAQConfig = state;
+ useDAQConfig = state;
}
/**
* Outputs the current GTP settings to the terminal.
*/
private void logSettings() {
- // Print the cluster driver header.
- System.out.println();
- System.out.println();
- System.out.println("======================================================================");
- System.out.println("=== GTP Readout Clusterer Settings ===================================");
- System.out.println("======================================================================");
-
- // Output the driver settings.
- System.out.printf("Seed Energy Threshold :: %.3f GeV%n", gtp.getSeedLowThreshold());
- System.out.printf("Time Window (Before) :: %.0f ns%n", gtp.getWindowBefore());
- System.out.printf("Time Window (After) :: %.0f ns%n", gtp.getWindowAfter());
+ // Print the cluster driver header.
+ System.out.println();
+ System.out.println();
+ System.out.println("======================================================================");
+ System.out.println("=== GTP Readout Clusterer Settings ===================================");
+ System.out.println("======================================================================");
+
+ // Output the driver settings.
+ System.out.printf("Seed Energy Threshold :: %.3f GeV%n", gtp.getSeedLowThreshold());
+ System.out.printf("Time Window (Before) :: %.0f ns%n", gtp.getWindowBefore());
+ System.out.printf("Time Window (After) :: %.0f ns%n", gtp.getWindowAfter());
}
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterer.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterer.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterer.java Wed Mar 9 11:43:24 2016
@@ -69,10 +69,10 @@
* @see GTPClusterer
*/
public class GTPOnlineClusterer extends AbstractClusterer {
- /**
- * The length of the temporal window for inclusing clusters that
- * occur before the seed hit.
- */
+ /**
+ * The length of the temporal window for inclusing clusters that
+ * occur before the seed hit.
+ */
private double timeBefore = 4;
/**
@@ -128,29 +128,29 @@
*/
@Override
public List<Cluster> createClusters(EventHeader event, List<CalorimeterHit> hitList) {
- // VERBOSE :: Print the driver header.
- if(verbose) {
- System.out.println();
- System.out.println();
- System.out.println("======================================================================");
- System.out.println("=== GTP Readout Clusterer ============================================");
- System.out.println("======================================================================");
-
- // Sort the hits by x-index and then by y-index.
- Collections.sort(hitList, new Comparator<CalorimeterHit>() {
- @Override
- public int compare(CalorimeterHit firstHit, CalorimeterHit secondHit) {
- int[] ix = { firstHit.getIdentifierFieldValue("ix"), secondHit.getIdentifierFieldValue("ix") };
- if(ix[0] != ix[1]) { return Integer.compare(ix[0], ix[1]); }
- else {
- int iy[] = { firstHit.getIdentifierFieldValue("iy"), secondHit.getIdentifierFieldValue("iy") };
- return Integer.compare(iy[0], iy[1]);
- }
- }
- });
-
- // Print the hit collection.
- System.out.println("Event Hit Collection:");
+ // VERBOSE :: Print the driver header.
+ if(verbose) {
+ System.out.println();
+ System.out.println();
+ System.out.println("======================================================================");
+ System.out.println("=== GTP Readout Clusterer ============================================");
+ System.out.println("======================================================================");
+
+ // Sort the hits by x-index and then by y-index.
+ Collections.sort(hitList, new Comparator<CalorimeterHit>() {
+ @Override
+ public int compare(CalorimeterHit firstHit, CalorimeterHit secondHit) {
+ int[] ix = { firstHit.getIdentifierFieldValue("ix"), secondHit.getIdentifierFieldValue("ix") };
+ if(ix[0] != ix[1]) { return Integer.compare(ix[0], ix[1]); }
+ else {
+ int iy[] = { firstHit.getIdentifierFieldValue("iy"), secondHit.getIdentifierFieldValue("iy") };
+ return Integer.compare(iy[0], iy[1]);
+ }
+ }
+ });
+
+ // Print the hit collection.
+ System.out.println("Event Hit Collection:");
for(CalorimeterHit hit : hitList) {
int ix = hit.getIdentifierFieldValue("ix");
int iy = hit.getIdentifierFieldValue("iy");
@@ -161,7 +161,7 @@
}
System.out.println();
}
-
+
// Track the valid clusters.
List<Cluster> clusterList = new ArrayList<Cluster>();
@@ -183,10 +183,10 @@
// Iterate over each hit and see if it qualifies as a seed hit.
seedLoop:
for(CalorimeterHit seed : hitList) {
- // Put the hit energy into the hit energy distribution.
- hitEnergy.fill(seed.getCorrectedEnergy());
- hitDistribution.fill(seed.getIdentifierFieldValue("ix"), seed.getIdentifierFieldValue("iy"));
-
+ // Put the hit energy into the hit energy distribution.
+ hitEnergy.fill(seed.getCorrectedEnergy());
+ hitDistribution.fill(seed.getIdentifierFieldValue("ix"), seed.getIdentifierFieldValue("iy"));
+
// Check whether the potential seed passes the seed
// energy cut.
if(seed.getCorrectedEnergy() < seedThreshold) {
@@ -204,16 +204,16 @@
// energies.
hitLoop:
for(CalorimeterHit hit : hitList) {
- // Negative energy hits are never valid. Skip them.
- if(hit.getCorrectedEnergy() < 0) {
- continue hitLoop;
- }
-
- // Do not compare the potential seed hit to itself.
- if(hit == seed) {
- continue hitLoop;
- }
-
+ // Negative energy hits are never valid. Skip them.
+ if(hit.getCorrectedEnergy() < 0) {
+ continue hitLoop;
+ }
+
+ // Do not compare the potential seed hit to itself.
+ if(hit == seed) {
+ continue hitLoop;
+ }
+
// Check if the hit is within the spatiotemporal
// clustering window.
if(withinTimeVerificationWindow(seed, hit) && withinSpatialWindow(seed, hit)) {
@@ -246,25 +246,25 @@
clusterTotalEnergy.fill(protoCluster.getEnergy());
clusterHitCount.fill(protoCluster.getCalorimeterHits().size());
clusterDistribution.fill(protoCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
- protoCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
+ protoCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
// Determine how much energy in the cluster is negative
// and how is positive.
double nenergy = 0.0;
double penergy = 0.0;
for(CalorimeterHit hit : protoCluster.getCalorimeterHits()) {
- if(hit.getCorrectedEnergy() > 0) { penergy += hit.getCorrectedEnergy(); }
- else { nenergy += hit.getCorrectedEnergy(); }
+ if(hit.getCorrectedEnergy() > 0) { penergy += hit.getCorrectedEnergy(); }
+ else { nenergy += hit.getCorrectedEnergy(); }
}
energyDistribution.fill(Math.abs(nenergy) / (penergy + Math.abs(nenergy)));
}
// VERBOSE :: Print out all the clusters in the event.
if(verbose) {
- // Print the clusters.
- System.out.println("Event Cluster Collection:");
+ // Print the clusters.
+ System.out.println("Event Cluster Collection:");
for(Cluster cluster : clusterList) {
- // Output basic cluster positional and energy data.
+ // Output basic cluster positional and energy data.
CalorimeterHit seedHit = cluster.getCalorimeterHits().get(0);
int ix = seedHit.getIdentifierFieldValue("ix");
int iy = seedHit.getIdentifierFieldValue("iy");
@@ -281,7 +281,7 @@
System.out.printf("\t\tCompHit --> %.3f GeV at (%3d, %3d) and at t = %.2f%n", henergy, hix, hiy, htime);
}
}
- System.out.println();
+ System.out.println();
}
// VERBOSE :: Print a new line.
@@ -366,11 +366,11 @@
* the seed hit in clock cycles.
*/
void setWindowBefore(int cyclesBefore) {
- // The cluster window can not be negative.
- if(cyclesBefore < 0) { cyclesBefore = 0; }
-
- // Convert the window to nanoseconds and set the two time
- // windows appropriately.
+ // The cluster window can not be negative.
+ if(cyclesBefore < 0) { cyclesBefore = 0; }
+
+ // Convert the window to nanoseconds and set the two time
+ // windows appropriately.
timeBefore = cyclesBefore * 4;
timeWindow = Math.max(timeBefore, timeAfter);
}
@@ -384,11 +384,11 @@
* the seed hit in clock cycles.
*/
void setWindowAfter(int cyclesAfter) {
- // The cluster window can not be negative.
- if(cyclesAfter < 0) { cyclesAfter = 0; }
-
- // Convert the window to nanoseconds and set the two time
- // windows appropriately.
+ // The cluster window can not be negative.
+ if(cyclesAfter < 0) { cyclesAfter = 0; }
+
+ // Convert the window to nanoseconds and set the two time
+ // windows appropriately.
timeAfter = cyclesAfter * 4;
timeWindow = Math.max(timeBefore, timeAfter);
}
@@ -494,9 +494,9 @@
// considered to be adjacent to ix = -1 rather than the
// expected ix = 0. (ix = 0 does not exist.)
else {
- // ix = -1 is adjacent to ix = 1 and vice versa.
+ // ix = -1 is adjacent to ix = 1 and vice versa.
if((six == -1 && hix == 1) || (six == 1 && hix == -1)) {
- return true;
+ return true;
}
// Any other combination that reaches this point is not
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterer.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterer.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterer.java Wed Mar 9 11:43:24 2016
@@ -289,7 +289,7 @@
// If the neighboring crystal exists and is not already
// in a cluster, add it to the list of neighboring hits.
if (secondaryNeighborHit != null && !hitToSeed.containsKey(secondaryNeighborHit)
- && hitList.contains(secondaryNeighborHit)) {
+ && hitList.contains(secondaryNeighborHit)) {
secondaryNeighborHits.add(secondaryNeighborHit);
}
}
@@ -325,7 +325,7 @@
// If it exists, add it to the neighboring hit list.
if (clusteredNeighborHit != null && hitToSeed.get(clusteredNeighborHit) != null
- && hitList.contains(clusteredNeighborHit)) {
+ && hitList.contains(clusteredNeighborHit)) {
clusteredNeighborHits.add(clusteredNeighborHit);
}
}
@@ -383,32 +383,32 @@
// Consider time cut-is this hit in same time window as seed?
if (useTimeCut){
- if(Math.abs(ihit.getTime() - iseed.getTime()) < timeWindow)
- {
- icluster.addHit(ihit);
- }
+ if(Math.abs(ihit.getTime() - iseed.getTime()) < timeWindow)
+ {
+ icluster.addHit(ihit);
+ }
} // end of using time cut
else {icluster.addHit(ihit);}
}
// Add common hits
for (Map.Entry<CalorimeterHit, List<CalorimeterHit>> commHit : commonHits.entrySet()) {
- // Check that the common hit is in both time windows to their clusters
- CalorimeterHit seedA = commHit.getValue().get(0);
+ // Check that the common hit is in both time windows to their clusters
+ CalorimeterHit seedA = commHit.getValue().get(0);
CalorimeterHit seedB = commHit.getValue().get(1);
-
+
boolean inTimeWithA = false;
boolean inTimeWithB = false;
- // In time window with seedA?
+ // In time window with seedA?
if (Math.abs(commHit.getKey().getTime() - seedA.getTime()) < timeWindow){
- inTimeWithA = true;
+ inTimeWithA = true;
}
// In time window with seedB?
if (Math.abs(commHit.getKey().getTime() - seedB.getTime()) < timeWindow){
- inTimeWithB = true;
- }
-
+ inTimeWithB = true;
+ }
+
double eclusterA = seedToCluster.get(seedA).getEnergy();
double eclusterB = seedToCluster.get(seedB).getEnergy();
double fractionA = eclusterA / (eclusterA + eclusterB);
@@ -420,25 +420,25 @@
BaseCluster clusterB = seedToCluster.get(seedB);
if (useTimeCut){
- // Do this if the hit is in both cluster's windows
- if (inTimeWithA && inTimeWithB){
- clusterA.addHit(commHit.getKey(), hitcontributionA);
- clusterB.addHit(commHit.getKey(), hitcontributionB);
- }
+ // Do this if the hit is in both cluster's windows
+ if (inTimeWithA && inTimeWithB){
+ clusterA.addHit(commHit.getKey(), hitcontributionA);
+ clusterB.addHit(commHit.getKey(), hitcontributionB);
+ }
- //If the hit is only in 1 cluster's window, add the full contribution
- else if(inTimeWithA ^ inTimeWithB){
- if(inTimeWithA){
- clusterA.addHit(commHit.getKey());
- }
- else{
- clusterB.addHit(commHit.getKey());
- }
- }
+ //If the hit is only in 1 cluster's window, add the full contribution
+ else if(inTimeWithA ^ inTimeWithB){
+ if(inTimeWithA){
+ clusterA.addHit(commHit.getKey());
+ }
+ else{
+ clusterB.addHit(commHit.getKey());
+ }
+ }
} // end of using time cut
else{
- clusterA.addHit(commHit.getKey(), hitcontributionA);
- clusterB.addHit(commHit.getKey(), hitcontributionB);
+ clusterA.addHit(commHit.getKey(), hitcontributionA);
+ clusterB.addHit(commHit.getKey(), hitcontributionB);
}
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/DummyEventBuilder.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/DummyEventBuilder.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/DummyEventBuilder.java Wed Mar 9 11:43:24 2016
@@ -41,7 +41,7 @@
public void readEvioEvent(EvioEvent evioEvent) {
}
- @Override
- public void conditionsChanged(ConditionsEvent conditionsEvent) {
- }
+ @Override
+ public void conditionsChanged(ConditionsEvent conditionsEvent) {
+ }
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/EcalHitWriter.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/EcalHitWriter.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/EcalHitWriter.java Wed Mar 9 11:43:24 2016
@@ -212,10 +212,10 @@
Map<Integer, List<Long>> slotMap = new HashMap<Integer, List<Long>>();
for (Long id : hitMap.keySet()) {
dec.setID(id);
-// System.out.println(dec.getIDDescription());
-// System.out.printf("ix = %d, iy = %d\n", dec.getValue("ix"), dec.getValue("iy"));
+// System.out.println(dec.getIDDescription());
+// System.out.printf("ix = %d, iy = %d\n", dec.getValue("ix"), dec.getValue("iy"));
// Long daqID = EcalConditions.physicalToDaqID(id);
-// System.out.printf("physicalID %d, daqID %d\n", id, daqID);
+// System.out.printf("physicalID %d, daqID %d\n", id, daqID);
int slot = getSlot(id);
if (slotMap.get(slot) == null) {
slotMap.put(slot, new ArrayList<Long>());
@@ -231,7 +231,7 @@
for (int slot : slotMap.keySet()) {
data.addUchar((byte) slot); // slot #
data.addUint(0); // trigger #
- data.addUlong(0); // timestamp
+ data.addUlong(0); // timestamp
List<Long> hitIDs = slotMap.get(slot);
int nhits = hitIDs.size();
data.addN(nhits); // number of channels
@@ -285,10 +285,10 @@
Map<Integer, List<Long>> slotMap = new HashMap<Integer, List<Long>>();
for (Long id : hitMap.keySet()) {
dec.setID(id);
-// System.out.println(dec.getIDDescription());
-// System.out.printf("ix = %d, iy = %d\n", dec.getValue("ix"), dec.getValue("iy"));
+// System.out.println(dec.getIDDescription());
+// System.out.printf("ix = %d, iy = %d\n", dec.getValue("ix"), dec.getValue("iy"));
// Long daqID = EcalConditions.physicalToDaqID(id);
-// System.out.printf("physicalID %d, daqID %d\n", id, daqID);
+// System.out.printf("physicalID %d, daqID %d\n", id, daqID);
int slot = getSlot(id);
if (slotMap.get(slot) == null) {
slotMap.put(slot, new ArrayList<Long>());
@@ -304,7 +304,7 @@
for (int slot : slotMap.keySet()) {
data.addUchar((byte) slot); // slot #
data.addUint(0); // trigger #
- data.addUlong(0); // timestamp
+ data.addUlong(0); // timestamp
List<Long> hitIDs = slotMap.get(slot);
int nhits = hitIDs.size();
data.addN(nhits); // number of channels
@@ -358,10 +358,10 @@
Map<Integer, List<Long>> slotMap = new HashMap<Integer, List<Long>>();
for (Long id : hitMap.keySet()) {
dec.setID(id);
-// System.out.println(dec.getIDDescription());
-// System.out.printf("ix = %d, iy = %d\n", dec.getValue("ix"), dec.getValue("iy"));
+// System.out.println(dec.getIDDescription());
+// System.out.printf("ix = %d, iy = %d\n", dec.getValue("ix"), dec.getValue("iy"));
// Long daqID = EcalConditions.physicalToDaqID(id);
-// System.out.printf("physicalID %d, daqID %d\n", id, daqID);
+// System.out.printf("physicalID %d, daqID %d\n", id, daqID);
int slot = getSlot(id);
if (slotMap.get(slot) == null) {
slotMap.put(slot, new ArrayList<Long>());
@@ -380,7 +380,7 @@
// EvioBank slotBank = new EvioBank(EventConstants.ECAL_WINDOW_BANK_TAG, DataType.COMPOSITE, slot);
data.addUchar((byte) slot); // slot #
data.addUint(0); // trigger #
- data.addUlong(0); // timestamp
+ data.addUlong(0); // timestamp
List<Long> hitIDs = slotMap.get(slot);
int nhits = hitIDs.size();
data.addN(nhits); // number of channels
Modified: java/trunk/evio/src/main/java/org/hps/evio/EvioReader.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/EvioReader.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/EvioReader.java Wed Mar 9 11:43:24 2016
@@ -5,45 +5,45 @@
import org.lcsim.event.EventHeader;
/**
- * Abstract class containing shared methods used by EVIO readers.
+ * Abstract class containing shared methods used by EVIO readers.
*
- * @author Sho Uemura <[log in to unmask]>
+ * @author Sho Uemura <[log in to unmask]>
*/
public abstract class EvioReader {
- // Debug flag
- protected boolean debug = false;
-
- // Name of the hit collection that will be created
- protected String hitCollectionName = null;
+ // Debug flag
+ protected boolean debug = false;
+
+ // Name of the hit collection that will be created
+ protected String hitCollectionName = null;
- /**
- * Make a LCIO hit collection (e.g. {@link RawTrackerHit},
- * {@link CalorimeterHit} from raw EVIO data.
- *
- * @param event : The EVIO event to read the raw data from
- * @param lcsimEvent : The LCSim event to write the collections to
- * @return True if the appropriate EVIO bank is found, false otherwise
- * @throws Exception
- *
- */
- abstract boolean makeHits(EvioEvent event, EventHeader lcsimEvent) throws Exception;
+ /**
+ * Make a LCIO hit collection (e.g. {@link RawTrackerHit},
+ * {@link CalorimeterHit} from raw EVIO data.
+ *
+ * @param event : The EVIO event to read the raw data from
+ * @param lcsimEvent : The LCSim event to write the collections to
+ * @return True if the appropriate EVIO bank is found, false otherwise
+ * @throws Exception
+ *
+ */
+ abstract boolean makeHits(EvioEvent event, EventHeader lcsimEvent) throws Exception;
- /**
- * Set the hit collection name.
- *
- * @param hitCollectionName : Name of the hit collection
- */
- public void setHitCollectionName(String hitCollectionName) {
- this.hitCollectionName = hitCollectionName;
- }
+ /**
+ * Set the hit collection name.
+ *
+ * @param hitCollectionName : Name of the hit collection
+ */
+ public void setHitCollectionName(String hitCollectionName) {
+ this.hitCollectionName = hitCollectionName;
+ }
- /**
- * Enable/disable debug output.
- *
- * @param debug : Set to true to enable, false to disable.
- */
- public void setDebug(boolean debug) {
- this.debug = debug;
- }
+ /**
+ * Enable/disable debug output.
+ *
+ * @param debug : Set to true to enable, false to disable.
+ */
+ public void setDebug(boolean debug) {
+ this.debug = debug;
+ }
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/RfFitFunction.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/RfFitFunction.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/RfFitFunction.java Wed Mar 9 11:43:24 2016
@@ -7,29 +7,29 @@
* Straight line fit
*/
public class RfFitFunction extends AbstractIFunction {
- protected double intercept=0;
- protected double slope=0;
- public RfFitFunction() {
- this("");
- }
- public RfFitFunction(String title) {
- super();
- this.variableNames=new String[]{"time"};
- this.parameterNames=new String[]{"intercept","slope"};
+ protected double intercept=0;
+ protected double slope=0;
+ public RfFitFunction() {
+ this("");
+ }
+ public RfFitFunction(String title) {
+ super();
+ this.variableNames=new String[]{"time"};
+ this.parameterNames=new String[]{"intercept","slope"};
- init(title);
- }
- public double value(double [] v) {
- return intercept + (v[0])*slope;
- }
- public void setParameters(double[] pars) throws IllegalArgumentException {
- super.setParameters(pars);
- intercept=pars[0];
- slope=pars[1];
- }
- public void setParameter(String key,double value) throws IllegalArgumentException{
- super.setParameter(key,value);
- if (key.equals("intercept")) intercept=value;
- else if (key.equals("slope")) slope=value;
- }
+ init(title);
+ }
+ public double value(double [] v) {
+ return intercept + (v[0])*slope;
+ }
+ public void setParameters(double[] pars) throws IllegalArgumentException {
+ super.setParameters(pars);
+ intercept=pars[0];
+ slope=pars[1];
+ }
+ public void setParameter(String key,double value) throws IllegalArgumentException{
+ super.setParameter(key,value);
+ if (key.equals("intercept")) intercept=value;
+ else if (key.equals("slope")) slope=value;
+ }
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/RfHit.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/RfHit.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/RfHit.java Wed Mar 9 11:43:24 2016
@@ -6,13 +6,13 @@
* class to store RF times after extracting from waveform.
*/
public class RfHit implements GenericObject {
- private double[] times;
- public RfHit(double[] times) { this.times=times; }
- public int getNInt() { return 0; }
- public int getNFloat() { return 0; }
- public int getNDouble() { return times.length; }
- public double getDoubleVal(int ii) { return times[ii]; }
- public float getFloatVal (int ii) { return 0; }
- public int getIntVal (int ii) { return 0; }
- public boolean isFixedSize() { return false; }
+ private double[] times;
+ public RfHit(double[] times) { this.times=times; }
+ public int getNInt() { return 0; }
+ public int getNFloat() { return 0; }
+ public int getNDouble() { return times.length; }
+ public double getDoubleVal(int ii) { return times[ii]; }
+ public float getFloatVal (int ii) { return 0; }
+ public int getIntVal (int ii) { return 0; }
+ public boolean isFixedSize() { return false; }
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/TestRunReconToEvio.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/TestRunReconToEvio.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/TestRunReconToEvio.java Wed Mar 9 11:43:24 2016
@@ -21,96 +21,96 @@
*/
public class TestRunReconToEvio extends Driver {
- EventWriter writer;
- String rawCalorimeterHitCollectionName = "EcalDigitizedHits";
- String evioOutputFile = "TestRunData.evio";
- EventBuilder builder = null;
- private int eventsWritten = 0;
- EcalHitWriter ecalWriter = null;
- SVTHitWriter svtWriter = null;
-
- Detector detector = null;
+ EventWriter writer;
+ String rawCalorimeterHitCollectionName = "EcalDigitizedHits";
+ String evioOutputFile = "TestRunData.evio";
+ EventBuilder builder = null;
+ private int eventsWritten = 0;
+ EcalHitWriter ecalWriter = null;
+ SVTHitWriter svtWriter = null;
+
+ Detector detector = null;
- public TestRunReconToEvio() {
- }
-
+ public TestRunReconToEvio() {
+ }
+
@Override
- public void detectorChanged(Detector detector) {
- // set the detector
+ public void detectorChanged(Detector detector) {
+ // set the detector
this.detector = detector;
}
- public void setEvioOutputFile(String evioOutputFile) {
- this.evioOutputFile = evioOutputFile;
- }
+ public void setEvioOutputFile(String evioOutputFile) {
+ this.evioOutputFile = evioOutputFile;
+ }
- public void setRawCalorimeterHitCollectionName(String rawCalorimeterHitCollectionName) {
- this.rawCalorimeterHitCollectionName = rawCalorimeterHitCollectionName;
- if (ecalWriter != null) {
- ecalWriter.setHitCollectionName(rawCalorimeterHitCollectionName);
- }
- }
+ public void setRawCalorimeterHitCollectionName(String rawCalorimeterHitCollectionName) {
+ this.rawCalorimeterHitCollectionName = rawCalorimeterHitCollectionName;
+ if (ecalWriter != null) {
+ ecalWriter.setHitCollectionName(rawCalorimeterHitCollectionName);
+ }
+ }
- protected void startOfData() {
- try {
- writer = new EventWriter(evioOutputFile);
- } catch (EvioException e) {
- throw new RuntimeException(e);
- }
+ protected void startOfData() {
+ try {
+ writer = new EventWriter(evioOutputFile);
+ } catch (EvioException e) {
+ throw new RuntimeException(e);
+ }
- ecalWriter = new EcalHitWriter();
- ecalWriter.setDetector(detector);
- ecalWriter.setHitCollectionName(rawCalorimeterHitCollectionName);
+ ecalWriter = new EcalHitWriter();
+ ecalWriter.setDetector(detector);
+ ecalWriter.setHitCollectionName(rawCalorimeterHitCollectionName);
- svtWriter = new SVTHitWriter();
- }
+ svtWriter = new SVTHitWriter();
+ }
- protected void endOfData() {
- System.out.println(this.getClass().getSimpleName() + " - wrote " + eventsWritten + " EVIO events in job.");
- writer.close();
- }
+ protected void endOfData() {
+ System.out.println(this.getClass().getSimpleName() + " - wrote " + eventsWritten + " EVIO events in job.");
+ writer.close();
+ }
- protected void process(EventHeader event) {
+ protected void process(EventHeader event) {
- if (!svtWriter.hasData(event)) {
- return;
- }
+ if (!svtWriter.hasData(event)) {
+ return;
+ }
- // Make a new EVIO event.
- builder = new EventBuilder(0, DataType.BANK, event.getEventNumber());
+ // Make a new EVIO event.
+ builder = new EventBuilder(0, DataType.BANK, event.getEventNumber());
- // Write SVTData.
- svtWriter.writeData(event, builder);
+ // Write SVTData.
+ svtWriter.writeData(event, builder);
- // Write RawCalorimeterHit collection.
- ecalWriter.writeData(event, builder);
-// writeRawCalorimeterHits(event);
+ // Write RawCalorimeterHit collection.
+ ecalWriter.writeData(event, builder);
+// writeRawCalorimeterHits(event);
- // Write this EVIO event.
- writeEvioEvent();
- }
+ // Write this EVIO event.
+ writeEvioEvent();
+ }
- private void writeEvioEvent() {
- EvioBank eventIDBank = new EvioBank(EvioEventConstants.EVENTID_BANK_TAG, DataType.UINT32, 0);
- int[] eventID = new int[3];
- eventID[0] = eventsWritten;
- eventID[1] = 0; //trigger type
- eventID[2] = 0; //status
+ private void writeEvioEvent() {
+ EvioBank eventIDBank = new EvioBank(EvioEventConstants.EVENTID_BANK_TAG, DataType.UINT32, 0);
+ int[] eventID = new int[3];
+ eventID[0] = eventsWritten;
+ eventID[1] = 0; //trigger type
+ eventID[2] = 0; //status
- try {
- eventIDBank.appendIntData(eventID);
- builder.addChild(builder.getEvent(), eventIDBank);
- } catch (EvioException e) {
- throw new RuntimeException(e);
- }
- builder.setAllHeaderLengths();
- try {
- writer.writeEvent(builder.getEvent());
- ++eventsWritten;
- } catch (EvioException e) {
- throw new RuntimeException(e);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
+ try {
+ eventIDBank.appendIntData(eventID);
+ builder.addChild(builder.getEvent(), eventIDBank);
+ } catch (EvioException e) {
+ throw new RuntimeException(e);
+ }
+ builder.setAllHeaderLengths();
+ try {
+ writer.writeEvent(builder.getEvent());
+ ++eventsWritten;
+ } catch (EvioException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
Modified: java/trunk/evio/src/test/java/org/hps/evio/LCSimEngRunEventBuilderTest.java
=============================================================================
--- java/trunk/evio/src/test/java/org/hps/evio/LCSimEngRunEventBuilderTest.java (original)
+++ java/trunk/evio/src/test/java/org/hps/evio/LCSimEngRunEventBuilderTest.java Wed Mar 9 11:43:24 2016
@@ -24,60 +24,60 @@
*/
public class LCSimEngRunEventBuilderTest extends TestCase {
- public void testLCSimEngRunEventBuilder() throws Exception {
-
- // Setup database conditions.
- DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
- conditionsManager.setXmlConfig("/org/hps/conditions/config/conditions_dev.xml");
- conditionsManager.setDetector("HPS-Proposal2014-v8-6pt6", 2000);
+ public void testLCSimEngRunEventBuilder() throws Exception {
+
+ // Setup database conditions.
+ DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+ conditionsManager.setXmlConfig("/org/hps/conditions/config/conditions_dev.xml");
+ conditionsManager.setDetector("HPS-Proposal2014-v8-6pt6", 2000);
- // Configure LCIO writer.
- new TestOutputFile(getClass().getSimpleName()).mkdirs();
- File lcioFile = new TestOutputFile(getClass().getSimpleName() + File.separator + getClass().getSimpleName() + "_output.slcio");
- LCIOWriter writer;
- try {
- writer = new LCIOWriter(lcioFile);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
+ // Configure LCIO writer.
+ new TestOutputFile(getClass().getSimpleName()).mkdirs();
+ File lcioFile = new TestOutputFile(getClass().getSimpleName() + File.separator + getClass().getSimpleName() + "_output.slcio");
+ LCIOWriter writer;
+ try {
+ writer = new LCIOWriter(lcioFile);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
- // Create event builder.
- LCSimEventBuilder builder = new LCSimEngRunEventBuilder();
- conditionsManager.addConditionsListener(builder);
- //builder.setDetectorName("HPS-Proposal2014-v8-6pt6");
- conditionsManager.setDetector("HPS-Proposal2014-v8-6pt6", 2744);
+ // Create event builder.
+ LCSimEventBuilder builder = new LCSimEngRunEventBuilder();
+ conditionsManager.addConditionsListener(builder);
+ //builder.setDetectorName("HPS-Proposal2014-v8-6pt6");
+ conditionsManager.setDetector("HPS-Proposal2014-v8-6pt6", 2744);
- // Get remote test file.
- FileCache cache = new FileCache();
- File evioFile = cache.getCachedFile(new URL("http://www.lcsim.org/test/hps-java/LCSimEngRunEventBuilderTest/hps_002744.evio.0"));
+ // Get remote test file.
+ FileCache cache = new FileCache();
+ File evioFile = cache.getCachedFile(new URL("http://www.lcsim.org/test/hps-java/LCSimEngRunEventBuilderTest/hps_002744.evio.0"));
- // Open the EVIO reader.
- System.out.println("Opening file " + evioFile);
- EvioReader reader = null;
- try {
- reader = new EvioReader(evioFile);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ // Open the EVIO reader.
+ System.out.println("Opening file " + evioFile);
+ EvioReader reader = null;
+ try {
+ reader = new EvioReader(evioFile);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
- // Run the event builder on the EVIO.
- EvioEvent evioEvent = null;
- while ((evioEvent = reader.nextEvent()) != null) {
- reader.parseEvent(evioEvent);
- builder.readEvioEvent(evioEvent);
- if (EvioEventUtilities.isPhysicsEvent(evioEvent)) {
- try {
- EventHeader lcsimEvent = builder.makeLCSimEvent(evioEvent);
- System.out.println("created LCSim event #" + lcsimEvent.getEventNumber());
- writer.write(lcsimEvent);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
+ // Run the event builder on the EVIO.
+ EvioEvent evioEvent = null;
+ while ((evioEvent = reader.nextEvent()) != null) {
+ reader.parseEvent(evioEvent);
+ builder.readEvioEvent(evioEvent);
+ if (EvioEventUtilities.isPhysicsEvent(evioEvent)) {
+ try {
+ EventHeader lcsimEvent = builder.makeLCSimEvent(evioEvent);
+ System.out.println("created LCSim event #" + lcsimEvent.getEventNumber());
+ writer.write(lcsimEvent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
- // Close the LCIO writer.
- writer.flush();
- writer.close();
- }
+ // Close the LCIO writer.
+ writer.flush();
+ writer.close();
+ }
}
Modified: java/trunk/evio/src/test/java/org/hps/evio/LCSimTestRunEventBuilderTest.java
=============================================================================
--- java/trunk/evio/src/test/java/org/hps/evio/LCSimTestRunEventBuilderTest.java (original)
+++ java/trunk/evio/src/test/java/org/hps/evio/LCSimTestRunEventBuilderTest.java Wed Mar 9 11:43:24 2016
@@ -15,60 +15,60 @@
import org.hps.record.evio.EvioEventUtilities;
/**
- * Integration test to check the conversion of test run EVIO to LCIO
+ * Integration test to check the conversion of test run EVIO to LCIO
*
- * @author Omar Moreno <[log in to unmask]>
- * @date November 20, 2014
+ * @author Omar Moreno <[log in to unmask]>
+ * @date November 20, 2014
*/
public class LCSimTestRunEventBuilderTest extends TestCase {
- //-----------------//
- //--- Constants ---//
- //-----------------//
- private static final String DB_CONFIGURATION
- = "/org/hps/conditions/config/conditions_database_testrun_2012.xml";
-
- public void testLCSimTestRunEventBuilder() throws Exception {
-
- // Configure the conditions system to retrieve test run conditions fo run 1351.
- DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
- conditionsManager.setXmlConfig(DB_CONFIGURATION);
-
- // Create the test run event builder
- LCSimTestRunEventBuilder builder = new LCSimTestRunEventBuilder();
- conditionsManager.addConditionsListener(builder);
+ //-----------------//
+ //--- Constants ---//
+ //-----------------//
+ private static final String DB_CONFIGURATION
+ = "/org/hps/conditions/config/conditions_database_testrun_2012.xml";
+
+ public void testLCSimTestRunEventBuilder() throws Exception {
+
+ // Configure the conditions system to retrieve test run conditions fo run 1351.
+ DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+ conditionsManager.setXmlConfig(DB_CONFIGURATION);
+
+ // Create the test run event builder
+ LCSimTestRunEventBuilder builder = new LCSimTestRunEventBuilder();
+ conditionsManager.addConditionsListener(builder);
- conditionsManager.setDetector("HPS-TestRun-v5", 1351);
+ conditionsManager.setDetector("HPS-TestRun-v5", 1351);
- // Retrieve the remote test file. The file currently being contains a
- // subset of events from run 1351
- FileCache cache = new FileCache();
- File evioFile = cache.getCachedFile(new URL("http://www.lcsim.org/test/hps-java/hps1351_test.evio"));
-
- // Instantiate the EVIO reader and open the test file. If the file
- // can't be found, throw a runtime exception
- EvioReader reader = null;
- try {
- reader = new EvioReader(evioFile);
- } catch (Exception e) {
- throw new RuntimeException(
- "[ " + this.getClass().getSimpleName() + " ]: EVIO file couldn't be opened.");
- }
-
- // Loop through all EVIO events in the file and process them using the
- // event builder. If the event is a physics event, process the event
- // using the subdetector readers.
- EvioEvent evioEvent = null;
- while ((evioEvent = reader.nextEvent()) != null) {
- reader.parseEvent(evioEvent);
- builder.readEvioEvent(evioEvent);
- if (EvioEventUtilities.isPhysicsEvent(evioEvent)) {
- EventHeader lcsimEvent = builder.makeLCSimEvent(evioEvent);
- System.out.println("[ " + this.getClass().getSimpleName() + " ]: Created event number " + lcsimEvent.getEventNumber());
- }
- }
-
- // Close the EVIO reader
- reader.close();
- }
+ // Retrieve the remote test file. The file currently being contains a
+ // subset of events from run 1351
+ FileCache cache = new FileCache();
+ File evioFile = cache.getCachedFile(new URL("http://www.lcsim.org/test/hps-java/hps1351_test.evio"));
+
+ // Instantiate the EVIO reader and open the test file. If the file
+ // can't be found, throw a runtime exception
+ EvioReader reader = null;
+ try {
+ reader = new EvioReader(evioFile);
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "[ " + this.getClass().getSimpleName() + " ]: EVIO file couldn't be opened.");
+ }
+
+ // Loop through all EVIO events in the file and process them using the
+ // event builder. If the event is a physics event, process the event
+ // using the subdetector readers.
+ EvioEvent evioEvent = null;
+ while ((evioEvent = reader.nextEvent()) != null) {
+ reader.parseEvent(evioEvent);
+ builder.readEvioEvent(evioEvent);
+ if (EvioEventUtilities.isPhysicsEvent(evioEvent)) {
+ EventHeader lcsimEvent = builder.makeLCSimEvent(evioEvent);
+ System.out.println("[ " + this.getClass().getSimpleName() + " ]: Created event number " + lcsimEvent.getEventNumber());
+ }
+ }
+
+ // Close the EVIO reader
+ reader.close();
+ }
}
Modified: java/trunk/evio/src/test/java/org/hps/evio/SvtEvioReaderTest.java
=============================================================================
--- java/trunk/evio/src/test/java/org/hps/evio/SvtEvioReaderTest.java (original)
+++ java/trunk/evio/src/test/java/org/hps/evio/SvtEvioReaderTest.java Wed Mar 9 11:43:24 2016
@@ -25,47 +25,47 @@
// Initialize the logger
protected static Logger LOGGER = Logger.getLogger(SvtEvioReaderTest.class.getPackage().getName());
- public void testSvtEvioReaderTest() throws Exception {
+ public void testSvtEvioReaderTest() throws Exception {
- // Get the EVIO file that will be used to test the reader
- FileCache fileCache = new FileCache();
- File evioFile = fileCache.getCachedFile(
- new URL("http://www.lcsim.org/test/hps-java/svt_evio_reader_test.evio"));
+ // Get the EVIO file that will be used to test the reader
+ FileCache fileCache = new FileCache();
+ File evioFile = fileCache.getCachedFile(
+ new URL("http://www.lcsim.org/test/hps-java/svt_evio_reader_test.evio"));
- LOGGER.info("Opening file " + evioFile);
+ LOGGER.info("Opening file " + evioFile);
- // Instantiate the EVIO reader and open the file
- EvioReader evioReader = new EvioReader(evioFile);
-
- // Instantiate the SVT EVIO reader
- SvtEvioReader svtReader = new SvtEvioReader();
+ // Instantiate the EVIO reader and open the file
+ EvioReader evioReader = new EvioReader(evioFile);
+
+ // Instantiate the SVT EVIO reader
+ SvtEvioReader svtReader = new SvtEvioReader();
- // Setup the database conditions
- DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
- conditionsManager.setDetector("HPS-Proposal2014-v9-2pt2", 2000);
+ // Setup the database conditions
+ DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+ conditionsManager.setDetector("HPS-Proposal2014-v9-2pt2", 2000);
- // Instantiate the event builder
- LCSimEventBuilder eventBuilder = new LCSimEngRunEventBuilder();
+ // Instantiate the event builder
+ LCSimEventBuilder eventBuilder = new LCSimEngRunEventBuilder();
- // Check that the file contains the expected number of events
- int eventCount = evioReader.getEventCount();
- LOGGER.info("File " + evioFile + " contains " + eventCount + " events.");
+ // Check that the file contains the expected number of events
+ int eventCount = evioReader.getEventCount();
+ LOGGER.info("File " + evioFile + " contains " + eventCount + " events.");
- // Loop through the EVIO events and process them.
- EvioEvent evioEvent = null;
- while ((evioEvent = evioReader.nextEvent()) != null) {
- evioReader.parseEvent(evioEvent);
+ // Loop through the EVIO events and process them.
+ EvioEvent evioEvent = null;
+ while ((evioEvent = evioReader.nextEvent()) != null) {
+ evioReader.parseEvent(evioEvent);
- // Only process physics events
- if (!EvioEventUtilities.isPhysicsEvent(evioEvent)) continue;
- LOGGER.info("Found physics event.");
-
- EventHeader lcsimEvent = eventBuilder.makeLCSimEvent(evioEvent);
- LOGGER.info("Created LCSim event # " + lcsimEvent.getEventNumber());
+ // Only process physics events
+ if (!EvioEventUtilities.isPhysicsEvent(evioEvent)) continue;
+ LOGGER.info("Found physics event.");
+
+ EventHeader lcsimEvent = eventBuilder.makeLCSimEvent(evioEvent);
+ LOGGER.info("Created LCSim event # " + lcsimEvent.getEventNumber());
- // Process the event using the SVT evio reader
- svtReader.processEvent(evioEvent, lcsimEvent);
- }
- }
+ // Process the event using the SVT evio reader
+ svtReader.processEvent(evioEvent, lcsimEvent);
+ }
+ }
}
Modified: java/trunk/integration-tests/src/test/java/org/hps/test/it/SimpleSvtReadoutTest.java
=============================================================================
--- java/trunk/integration-tests/src/test/java/org/hps/test/it/SimpleSvtReadoutTest.java (original)
+++ java/trunk/integration-tests/src/test/java/org/hps/test/it/SimpleSvtReadoutTest.java Wed Mar 9 11:43:24 2016
@@ -26,14 +26,14 @@
// Collection Names
static final String rawTrackerHitCollectionName = "SVTRawTrackerHits";
- public void testSimpleSvtReadout() throws Exception {
-
- File inputFile = new TestDataUtility().getTestData("ReadoutToLcioTest.slcio");
-
+ public void testSimpleSvtReadout() throws Exception {
+
+ File inputFile = new TestDataUtility().getTestData("ReadoutToLcioTest.slcio");
+
outputDir.mkdirs();
if(!outputDir.exists()){
- this.printDebug("Failed to create directory " + outputDir.getPath());
- throw new RuntimeException("Failed to create output directory.");
+ this.printDebug("Failed to create directory " + outputDir.getPath());
+ throw new RuntimeException("Failed to create output directory.");
}
FinalCheckDriver checker = new FinalCheckDriver();
@@ -54,25 +54,25 @@
this.printDebug("");
this.printDebug("===============================");
- }
-
- class FinalCheckDriver extends Driver {
-
- private int totalRawTrackerHits = 0;
-
- public void process(EventHeader event){
- if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) return;
- List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
-
- totalRawTrackerHits += rawHits.size();
- }
-
- public int getTotalNumberOfRawTrackerHits(){
- return totalRawTrackerHits;
- }
- }
-
- private void printDebug(String message){
- System.out.println("[ SimpleSvtReadoutTest ]: " + message);
- }
+ }
+
+ class FinalCheckDriver extends Driver {
+
+ private int totalRawTrackerHits = 0;
+
+ public void process(EventHeader event){
+ if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) return;
+ List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+
+ totalRawTrackerHits += rawHits.size();
+ }
+
+ public int getTotalNumberOfRawTrackerHits(){
+ return totalRawTrackerHits;
+ }
+ }
+
+ private void printDebug(String message){
+ System.out.println("[ SimpleSvtReadoutTest ]: " + message);
+ }
}
Modified: java/trunk/integration-tests/src/test/resources/org/hps/ecalreadoutsim/EcalReadoutSimTest.lcsim
=============================================================================
--- java/trunk/integration-tests/src/test/resources/org/hps/ecalreadoutsim/EcalReadoutSimTest.lcsim (original)
+++ java/trunk/integration-tests/src/test/resources/org/hps/ecalreadoutsim/EcalReadoutSimTest.lcsim Wed Mar 9 11:43:24 2016
@@ -32,7 +32,7 @@
<driver name="TestRunReconToLcio" type="org.hps.evio.TestRunTriggeredReconToLcio">
<outputFile>${outputFile}.slcio</outputFile>
</driver>
-
+
<driver name="EcalReadout" type="org.hps.readout.ecal.FADCEcalReadoutDriver">
<coincidenceWindow>1</coincidenceWindow>
<ecalName>Ecal</ecalName>
@@ -50,7 +50,7 @@
<applyBadCrystalMap>false</applyBadCrystalMap>
<use2014Gain>true</use2014Gain>
<!-- <debug>true</debug>-->
- </driver>
+ </driver>
<driver name="EcalClusterer" type="org.hps.recon.ecal.GTPEcalClusterer">
<ecalName>Ecal</ecalName>
@@ -63,7 +63,7 @@
<deadTime>10</deadTime>
<pairCoincidence>2</pairCoincidence>
<outputFileName>${outputFile}.triggers</outputFileName>
- </driver>
+ </driver>
<driver name="SimpleSVTReadout" type="org.hps.readout.svt.SimpleSvtReadout">
<addNoise>false</addNoise>
</driver>
@@ -74,4 +74,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/integration-tests/src/test/resources/org/hps/steering/test/Dummy.lcsim
=============================================================================
--- java/trunk/integration-tests/src/test/resources/org/hps/steering/test/Dummy.lcsim (original)
+++ java/trunk/integration-tests/src/test/resources/org/hps/steering/test/Dummy.lcsim Wed Mar 9 11:43:24 2016
@@ -10,4 +10,4 @@
<driver name="DummyDriver" type="org.hps.test.util.DummyDriver"/>
</drivers>
</lcsim>
-
+
Modified: java/trunk/integration-tests/src/test/resources/org/hps/steering/test/EcalReadoutSimTest.lcsim
=============================================================================
--- java/trunk/integration-tests/src/test/resources/org/hps/steering/test/EcalReadoutSimTest.lcsim (original)
+++ java/trunk/integration-tests/src/test/resources/org/hps/steering/test/EcalReadoutSimTest.lcsim Wed Mar 9 11:43:24 2016
@@ -28,7 +28,7 @@
<driver name="TestRunReconToLcio" type="org.hps.evio.TestRunTriggeredReconToLcio">
<outputFile>${outputFile}.slcio</outputFile>
</driver>
-
+
<driver name="EcalReadout" type="org.hps.readout.ecal.FADCEcalReadoutDriver">
<coincidenceWindow>1</coincidenceWindow>
<ecalName>Ecal</ecalName>
@@ -46,7 +46,7 @@
<applyBadCrystalMap>false</applyBadCrystalMap>
<use2014Gain>true</use2014Gain>
<!-- <debug>true</debug>-->
- </driver>
+ </driver>
<driver name="EcalClusterer" type="org.hps.recon.ecal.GTPEcalClusterer">
<ecalName>Ecal</ecalName>
@@ -59,7 +59,7 @@
<deadTime>10</deadTime>
<pairCoincidence>2</pairCoincidence>
<outputFileName>${outputFile}.triggers</outputFileName>
- </driver>
+ </driver>
<driver name="SimpleSVTReadout" type="org.hps.readout.svt.SimpleSvtReadout">
<addNoise>false</addNoise>
</driver>
@@ -70,4 +70,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTCellIDPrintDriver.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTCellIDPrintDriver.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTCellIDPrintDriver.java Wed Mar 9 11:43:24 2016
@@ -17,52 +17,52 @@
*/
public class SVTCellIDPrintDriver extends Driver {
- String rawTrackerHitCollectionName = "SVTData";
- String outputFileName;
- PrintWriter outputStream = null;
+ String rawTrackerHitCollectionName = "SVTData";
+ String outputFileName;
+ PrintWriter outputStream = null;
- public SVTCellIDPrintDriver() {
- }
+ public SVTCellIDPrintDriver() {
+ }
- public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
- this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
- }
+ public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
+ this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
+ }
- public void setOutputFileName(String outputFileName) {
- this.outputFileName = outputFileName;
- }
+ public void setOutputFileName(String outputFileName) {
+ this.outputFileName = outputFileName;
+ }
- public void startOfData() {
- if (rawTrackerHitCollectionName == null) {
- throw new RuntimeException("The parameter ecalCollectionName was not set!");
- }
+ public void startOfData() {
+ if (rawTrackerHitCollectionName == null) {
+ throw new RuntimeException("The parameter ecalCollectionName was not set!");
+ }
- if (outputFileName != null) {
- try {
- outputStream = new PrintWriter(outputFileName);
- } catch (IOException ex) {
- throw new RuntimeException("Invalid outputFilePath!");
- }
- } else {
- outputStream = new PrintWriter(System.out, true);
- }
- }
+ if (outputFileName != null) {
+ try {
+ outputStream = new PrintWriter(outputFileName);
+ } catch (IOException ex) {
+ throw new RuntimeException("Invalid outputFilePath!");
+ }
+ } else {
+ outputStream = new PrintWriter(System.out, true);
+ }
+ }
- public void process(EventHeader event) {
- // Get the list of ECal hits.
- if (event.hasCollection(SVTData.class, rawTrackerHitCollectionName)) {
- List<SVTData> hits = event.get(SVTData.class, rawTrackerHitCollectionName);
- //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
- for (SVTData hit : hits) {
- outputStream.printf("FPGA=%d\thybrid=%d\tchannel=%d\n", hit.getFPGAAddress(), hit.getHybridNumber(), hit.getChannelNumber());
- }
- }
- if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
- List<RawTrackerHit> hits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
- //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
- for (RawTrackerHit hit : hits) {
- outputStream.printf("name=%s\tside=%d\tstrip=%d\n", hit.getDetectorElement().getName(), hit.getIdentifierFieldValue("side"), hit.getIdentifierFieldValue("strip"));
- }
- }
- }
+ public void process(EventHeader event) {
+ // Get the list of ECal hits.
+ if (event.hasCollection(SVTData.class, rawTrackerHitCollectionName)) {
+ List<SVTData> hits = event.get(SVTData.class, rawTrackerHitCollectionName);
+ //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
+ for (SVTData hit : hits) {
+ outputStream.printf("FPGA=%d\thybrid=%d\tchannel=%d\n", hit.getFPGAAddress(), hit.getHybridNumber(), hit.getChannelNumber());
+ }
+ }
+ if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
+ List<RawTrackerHit> hits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+ //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
+ for (RawTrackerHit hit : hits) {
+ outputStream.printf("name=%s\tside=%d\tstrip=%d\n", hit.getDetectorElement().getName(), hit.getIdentifierFieldValue("side"), hit.getIdentifierFieldValue("strip"));
+ }
+ }
+ }
}
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTHitRecoCorrelations.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTHitRecoCorrelations.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTHitRecoCorrelations.java Wed Mar 9 11:43:24 2016
@@ -32,7 +32,7 @@
*/
public class SVTHitRecoCorrelations extends Driver {
- //private List<AIDAFrame> plotterFrame = new ArrayList<AIDAFrame>();
+ //private List<AIDAFrame> plotterFrame = new ArrayList<AIDAFrame>();
private List<IPlotter> plotters = new ArrayList<IPlotter>();
private AIDA aida = AIDA.defaultInstance();
private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
@@ -225,7 +225,7 @@
*/
//for(int i=0;i<2;++i) {
- //plotterFrame.get(i).pack();
+ //plotterFrame.get(i).pack();
// plotterFrame.get(i).setVisible(true);
//}
}
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTHitReconstructionPlots.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTHitReconstructionPlots.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTHitReconstructionPlots.java Wed Mar 9 11:43:24 2016
@@ -38,7 +38,7 @@
*/
public class SVTHitReconstructionPlots extends Driver {
- //private AIDAFrame plotterFrame;
+ //private AIDAFrame plotterFrame;
private AIDA aida = AIDA.defaultInstance();
private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits";
private String trackerHitCollectionName = "StripClusterer_SiTrackerHitStrip1D";
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtTimingInPlots.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtTimingInPlots.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtTimingInPlots.java Wed Mar 9 11:43:24 2016
@@ -244,51 +244,51 @@
isEcalTopCluster = false;
List<SSPCluster> clusters = null;
SSPData sspData = null;
- /*if(event.hasCollection(GenericObject.class, triggerBankCollectionName)) {
-
- // Get the list of trigger banks from the event
- List<GenericObject> triggerBanks = event.get(GenericObject.class, triggerBankCollectionName);
-
- System.out.println("Total trigger banks: " + triggerBanks.size());
-
- // Loop through the collection of banks and get the SSP and TI banks.
- for (GenericObject triggerBank : triggerBanks) {
-
- // If the bank contains TI data, process it
- if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
-
- TIData tiData = new TIData(triggerBank);
-
- // Check if the trigger is singles
- if (tiData.isSingle0Trigger() || tiData.isSingle1Trigger()) {
- isSingleClusterTrigger = true;
- }
-
- } else if (AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
-
- sspData = new SSPData(triggerBank);
-
- clusters = sspData.getClusters();
-
- for (SSPCluster cluster : clusters) {
- if (cluster.getYIndex() > 0) {
- isEcalTopCluster = true;
- }
- }
- }
- }
-
- if (isSingleClusterTrigger) {
- System.out.println("Total number of singles triggers: " + sspData.getSinglesTriggers().size());
- for (SSPSinglesTrigger trigger : sspData.getSinglesTriggers()) {
- System.out.println("Trigger: " + trigger.toString());
- }
- System.out.println("Total number of SSP clusters: " + clusters.size());
- for (SSPCluster cluster : clusters) {
- System.out.println("X: " + cluster.getXIndex() + " Y: " + cluster.getYIndex() + " time: " + cluster.getTime());
- }
- }
- }*/
+ /*if(event.hasCollection(GenericObject.class, triggerBankCollectionName)) {
+
+ // Get the list of trigger banks from the event
+ List<GenericObject> triggerBanks = event.get(GenericObject.class, triggerBankCollectionName);
+
+ System.out.println("Total trigger banks: " + triggerBanks.size());
+
+ // Loop through the collection of banks and get the SSP and TI banks.
+ for (GenericObject triggerBank : triggerBanks) {
+
+ // If the bank contains TI data, process it
+ if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
+
+ TIData tiData = new TIData(triggerBank);
+
+ // Check if the trigger is singles
+ if (tiData.isSingle0Trigger() || tiData.isSingle1Trigger()) {
+ isSingleClusterTrigger = true;
+ }
+
+ } else if (AbstractIntData.getTag(triggerBank) == SSPData.BANK_TAG) {
+
+ sspData = new SSPData(triggerBank);
+
+ clusters = sspData.getClusters();
+
+ for (SSPCluster cluster : clusters) {
+ if (cluster.getYIndex() > 0) {
+ isEcalTopCluster = true;
+ }
+ }
+ }
+ }
+
+ if (isSingleClusterTrigger) {
+ System.out.println("Total number of singles triggers: " + sspData.getSinglesTriggers().size());
+ for (SSPSinglesTrigger trigger : sspData.getSinglesTriggers()) {
+ System.out.println("Trigger: " + trigger.toString());
+ }
+ System.out.println("Total number of SSP clusters: " + clusters.size());
+ for (SSPCluster cluster : clusters) {
+ System.out.println("X: " + cluster.getXIndex() + " Y: " + cluster.getYIndex() + " time: " + cluster.getTime());
+ }
+ }
+ }*/
// Obtain all relations between an SVT raw hit and its corresponding
// fit parameters. The fit parameters are obtained from the fit to
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/BasicMonitoringPlotsDriver.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/BasicMonitoringPlotsDriver.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/BasicMonitoringPlotsDriver.java Wed Mar 9 11:43:24 2016
@@ -18,83 +18,83 @@
* @author Jeremy McCormick <[log in to unmask]>
*/
public class BasicMonitoringPlotsDriver extends Driver {
-
- private String calHitsCollectionName = "EcalCalHits";
- private String rawHitsCollectionName = "EcalReadoutHits";
- private String clustersCollectionName = "EcalClusters";
-
- private IHistogram1D calHitEnergyH1D;
- private IHistogram1D clusterEnergyH1D;
- private IHistogram1D rawHitAmplitudeH1D;
- private IHistogram2D calHitEnergyMapH2D;
-
- public BasicMonitoringPlotsDriver() {
- }
-
- public void startOfData() {
-
- IAnalysisFactory.create().createHistogramFactory(null);
- IPlotterFactory plotFactory = IAnalysisFactory.create().createPlotterFactory("ECAL Monitoring");
- IHistogramFactory histogramFactory = IAnalysisFactory.create().createHistogramFactory(null);
-
- calHitEnergyH1D = histogramFactory.createHistogram1D(calHitsCollectionName + ": Energy", calHitsCollectionName + ": Energy", 200, 0.0, 2.0);
- calHitEnergyH1D.annotation().addItem("xAxisLabel", "GeV");
- calHitEnergyH1D.annotation().addItem("yAxisLabel", "Count");
- IPlotter plotter = plotFactory.create("CalorimeterHits");
- plotter.createRegion();
- plotter.style().gridStyle().setVisible(false);
- plotter.style().dataStyle().errorBarStyle().setVisible(false);
- plotter.region(0).plot(calHitEnergyH1D);
- plotter.show();
-
- rawHitAmplitudeH1D = histogramFactory.createHistogram1D(rawHitsCollectionName + ": Amplitude", rawHitsCollectionName + ": Amplitude", 150, 0.0, 15000.0);
- rawHitAmplitudeH1D.annotation().addItem("xAxisLabel", "ADC Value");
- rawHitAmplitudeH1D.annotation().addItem("yAxisLabel", "Count");
- plotter = plotFactory.create("RawCalorimeterHits");
- plotter.createRegion();
- plotter.style().gridStyle().setVisible(false);
- plotter.style().dataStyle().errorBarStyle().setVisible(false);
- plotter.region(0).plot(rawHitAmplitudeH1D);
- plotter.show();
-
- clusterEnergyH1D = histogramFactory.createHistogram1D(clustersCollectionName + ": Energy", clustersCollectionName + ": Energy", 100, 0.0, 3.0);
- clusterEnergyH1D.annotation().addItem("xAxisLabel", "GeV");
- clusterEnergyH1D.annotation().addItem("yAxisLabel", "Count");
- plotter = plotFactory.create("Clusters");
- plotter.createRegion();
- plotter.style().gridStyle().setVisible(false);
- plotter.style().dataStyle().errorBarStyle().setVisible(false);
- plotter.region(0).plot(clusterEnergyH1D);
- plotter.show();
-
- calHitEnergyMapH2D = histogramFactory.createHistogram2D(calHitsCollectionName + ": Energy Map", calHitsCollectionName + ": Energy Map", 47, -23.5, 23.5, 11, -5.5, 5.5);
- plotter = plotFactory.create("CalorimeterHit Energy Map");
- plotter.createRegion();
- plotter.style().setParameter("hist2DStyle", "colorMap");
- plotter.style().gridStyle().setVisible(false);
- plotter.region(0).plot(calHitEnergyMapH2D);
- plotter.show();
- }
-
- public void process(EventHeader event) {
-
+
+ private String calHitsCollectionName = "EcalCalHits";
+ private String rawHitsCollectionName = "EcalReadoutHits";
+ private String clustersCollectionName = "EcalClusters";
+
+ private IHistogram1D calHitEnergyH1D;
+ private IHistogram1D clusterEnergyH1D;
+ private IHistogram1D rawHitAmplitudeH1D;
+ private IHistogram2D calHitEnergyMapH2D;
+
+ public BasicMonitoringPlotsDriver() {
+ }
+
+ public void startOfData() {
+
+ IAnalysisFactory.create().createHistogramFactory(null);
+ IPlotterFactory plotFactory = IAnalysisFactory.create().createPlotterFactory("ECAL Monitoring");
+ IHistogramFactory histogramFactory = IAnalysisFactory.create().createHistogramFactory(null);
+
+ calHitEnergyH1D = histogramFactory.createHistogram1D(calHitsCollectionName + ": Energy", calHitsCollectionName + ": Energy", 200, 0.0, 2.0);
+ calHitEnergyH1D.annotation().addItem("xAxisLabel", "GeV");
+ calHitEnergyH1D.annotation().addItem("yAxisLabel", "Count");
+ IPlotter plotter = plotFactory.create("CalorimeterHits");
+ plotter.createRegion();
+ plotter.style().gridStyle().setVisible(false);
+ plotter.style().dataStyle().errorBarStyle().setVisible(false);
+ plotter.region(0).plot(calHitEnergyH1D);
+ plotter.show();
+
+ rawHitAmplitudeH1D = histogramFactory.createHistogram1D(rawHitsCollectionName + ": Amplitude", rawHitsCollectionName + ": Amplitude", 150, 0.0, 15000.0);
+ rawHitAmplitudeH1D.annotation().addItem("xAxisLabel", "ADC Value");
+ rawHitAmplitudeH1D.annotation().addItem("yAxisLabel", "Count");
+ plotter = plotFactory.create("RawCalorimeterHits");
+ plotter.createRegion();
+ plotter.style().gridStyle().setVisible(false);
+ plotter.style().dataStyle().errorBarStyle().setVisible(false);
+ plotter.region(0).plot(rawHitAmplitudeH1D);
+ plotter.show();
+
+ clusterEnergyH1D = histogramFactory.createHistogram1D(clustersCollectionName + ": Energy", clustersCollectionName + ": Energy", 100, 0.0, 3.0);
+ clusterEnergyH1D.annotation().addItem("xAxisLabel", "GeV");
+ clusterEnergyH1D.annotation().addItem("yAxisLabel", "Count");
+ plotter = plotFactory.create("Clusters");
+ plotter.createRegion();
+ plotter.style().gridStyle().setVisible(false);
+ plotter.style().dataStyle().errorBarStyle().setVisible(false);
+ plotter.region(0).plot(clusterEnergyH1D);
+ plotter.show();
+
+ calHitEnergyMapH2D = histogramFactory.createHistogram2D(calHitsCollectionName + ": Energy Map", calHitsCollectionName + ": Energy Map", 47, -23.5, 23.5, 11, -5.5, 5.5);
+ plotter = plotFactory.create("CalorimeterHit Energy Map");
+ plotter.createRegion();
+ plotter.style().setParameter("hist2DStyle", "colorMap");
+ plotter.style().gridStyle().setVisible(false);
+ plotter.region(0).plot(calHitEnergyMapH2D);
+ plotter.show();
+ }
+
+ public void process(EventHeader event) {
+
if (event.hasCollection(CalorimeterHit.class, calHitsCollectionName)) {
for (CalorimeterHit hit : event.get(CalorimeterHit.class, calHitsCollectionName)) {
calHitEnergyH1D.fill(hit.getCorrectedEnergy());
calHitEnergyMapH2D.fill(hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), hit.getCorrectedEnergy());
}
}
-
+
if (event.hasCollection(Cluster.class, clustersCollectionName)) {
for (Cluster cluster : event.get(Cluster.class, clustersCollectionName)) {
clusterEnergyH1D.fill(cluster.getEnergy());
}
}
-
- if (event.hasCollection(RawCalorimeterHit.class, rawHitsCollectionName)) {
- for (RawCalorimeterHit hit : event.get(RawCalorimeterHit.class, rawHitsCollectionName)) {
- rawHitAmplitudeH1D.fill(hit.getAmplitude());
- }
- }
- }
+
+ if (event.hasCollection(RawCalorimeterHit.class, rawHitsCollectionName)) {
+ for (RawCalorimeterHit hit : event.get(RawCalorimeterHit.class, rawHitsCollectionName)) {
+ rawHitAmplitudeH1D.fill(hit.getAmplitude());
+ }
+ }
+ }
}
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalClusterPlots.java Wed Mar 9 11:43:24 2016
@@ -49,15 +49,15 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class EcalClusterPlots extends Driver {
- // Internal variables.
+ // Internal variables.
private boolean hide = false;
private boolean logScale = false;
- private AIDA aida = AIDA.defaultInstance();
+ private AIDA aida = AIDA.defaultInstance();
private double maxE = 5000 * EcalUtils.MeV;
- private IPlotter[] plotter = new IPlotter[4];
- private String clusterCollectionName = "EcalClusters";
-
- // Monitoring plot variables.
+ private IPlotter[] plotter = new IPlotter[4];
+ private String clusterCollectionName = "EcalClusters";
+
+ // Monitoring plot variables.
private IHistogram1D clusterCountPlot;
private IHistogram1D clusterSizePlot;
private IHistogram1D clusterEnergyPlot;
@@ -79,7 +79,7 @@
private static final int TAB_CLUSTER_TIME = 2;
private static final int TAB_CLUSTER_PAIR = 3;
private static final String[] TAB_NAMES = { "Cluster Count Plots", "Cluster Energy Plots",
- "Cluster Time Plots", "Cluster Pair Plots" };
+ "Cluster Time Plots", "Cluster Pair Plots" };
/**
* Resets all of the plots for the new detector.
@@ -110,10 +110,10 @@
// Apply formatting that is constant across all tabs.
for(int tabIndex = 0; tabIndex < plotter.length; tabIndex++) {
- plotter[tabIndex] = plotterFactory.create(TAB_NAMES[tabIndex]);
- plotter[tabIndex].setTitle(TAB_NAMES[tabIndex]);
- plotter[tabIndex].style().dataStyle().errorBarStyle().setVisible(false);
- plotter[tabIndex].style().dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
+ plotter[tabIndex] = plotterFactory.create(TAB_NAMES[tabIndex]);
+ plotter[tabIndex].setTitle(TAB_NAMES[tabIndex]);
+ plotter[tabIndex].style().dataStyle().errorBarStyle().setVisible(false);
+ plotter[tabIndex].style().dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
if(logScale) { plotter[tabIndex].style().yAxisStyle().setParameter("scale", "log"); }
}
@@ -145,9 +145,9 @@
// If they should not be hidden, display the tabs.
if(!hide) {
- for(IPlotter tab : plotter) {
- tab.show();
- }
+ for(IPlotter tab : plotter) {
+ tab.show();
+ }
}
}
@@ -157,121 +157,121 @@
*/
@Override
public void process(EventHeader event) {
- // Check whether the event has clusters or not.
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Get the list of clusters.
- List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
-
- // Create lists to store the clusters from the top of the
- // calorimeter and the bottom.
- List<Cluster> topList = new ArrayList<Cluster>();
- List<Cluster> bottomList = new ArrayList<Cluster>();
-
- // Track the highest energy cluster in the event.
- double maxEnergy = 0.0;
-
- // Process each of the clusters.
- for(Cluster cluster : clusterList) {
- // If this cluster has a higher energy then was seen
- // previously, it is now the highest energy cluster.
- if (cluster.getEnergy() > maxEnergy) {
- maxEnergy = cluster.getEnergy();
- }
-
-
- // Get the list of calorimeter hits and its size.
- List<CalorimeterHit> hitList = cluster.getCalorimeterHits();
- int hitCount = hitList.size();
-
- // Track cluster statistics.
- double xEnergyWeight = 0.0;
- double yEnergyWeight = 0.0;
- double[] hitTimes = new double[hitCount];
- double totalHitEnergy = 0.0;
-
- // Iterate over the hits and extract statistics from them.
- for(int hitIndex = 0; hitIndex < hitCount; hitIndex++) {
- hitTimes[hitIndex] = hitList.get(hitIndex).getTime();
- totalHitEnergy += hitList.get(hitIndex).getRawEnergy();
- xEnergyWeight += (hitList.get(hitIndex).getRawEnergy() * hitList.get(hitIndex).getIdentifierFieldValue("ix"));
- yEnergyWeight += (hitList.get(hitIndex).getRawEnergy() * hitList.get(hitIndex).getIdentifierFieldValue("iy"));
- }
-
- // If the cluster energy exceeds zero, plot the cluster
- // statistics.
- if(cluster.getEnergy() > 0) {
- clusterSizePlot.fill(hitCount);
- clusterTimes.fill(StatUtils.mean(hitTimes, 0, hitCount));
- clusterTimeSigma.fill(Math.sqrt(StatUtils.variance(hitTimes, 0, hitCount)));
- edgePlot.fill(xEnergyWeight / totalHitEnergy, yEnergyWeight / totalHitEnergy);
- }
-
- // Fill the single cluster plots.
- clusterEnergyPlot.fill(cluster.getEnergy());
-
- // Cluster pairs are formed from all top/bottom cluster
- // combinations. To create these pairs, separate the
- // clusters into two lists based on their y-indices.
- if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") > 0) {
- topList.add(cluster);
- } else {
- bottomList.add(cluster);
- }
- }
-
- // Populate the event plots.
- clusterCountPlot.fill(clusterList.size());
- if(maxEnergy > 0) { clusterMaxEnergyPlot.fill(maxEnergy); }
-
- // Create a list to store cluster pairs.
- List<Cluster[]> pairList = new ArrayList<Cluster[]>(topList.size() * bottomList.size());
-
- // Form pairs from all possible combinations of clusters
- // from the top and bottom lists.
- for(Cluster topCluster : topList) {
- for(Cluster bottomCluster : bottomList) {
- // Make a cluster pair array.
- Cluster[] pair = new Cluster[2];
-
- // The lower energy cluster goes in the second slot.
- if(topCluster.getEnergy() > bottomCluster.getEnergy()) {
- pair[0] = topCluster;
- pair[1] = bottomCluster;
- } else {
- pair[0] = bottomCluster;
- pair[1] = topCluster;
- }
-
- // Add the pair to the pair list.
- pairList.add(pair);
- }
- }
-
- // Iterate over each pair and calculate the pair cut values.
- for(Cluster[] pair : pairList) {
- // Get the energy slope value.
- double energySumValue = TriggerModule.getValueEnergySum(pair);
- double energyDifferenceValue = TriggerModule.getValueEnergyDifference(pair);
- double energySlopeValue = TriggerModule.getValueEnergySlope(pair, 0.005500);
- double coplanarityValue = TriggerModule.getValueCoplanarity(pair);
- double xMean = ((pair[0].getEnergy() * pair[0].getPosition()[0]) +
- (pair[1].getEnergy() * pair[1].getPosition()[0])) / energySumValue;
- double yMean = ((pair[0].getEnergy() * pair[0].getPosition()[1]) +
- (pair[1].getEnergy() * pair[1].getPosition()[1])) / energySumValue;
-
- // Populate the cluster pair plots.
- pairEnergySum.fill(energySumValue, 1);;
- pairEnergyDifference.fill(energyDifferenceValue, 1);
- pairEnergySlope.fill(energySlopeValue, 1);
- pairCoplanarity.fill(coplanarityValue, 1);
- pairEnergyPositionMeanX.fill(xMean);
- pairEnergyPositionMeanY.fill(yMean);
- }
- }
-
- // If the event does not contain clusters, update the "Event
- // Clusters" plot accordingly.
- else { clusterCountPlot.fill(0); }
+ // Check whether the event has clusters or not.
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Get the list of clusters.
+ List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
+
+ // Create lists to store the clusters from the top of the
+ // calorimeter and the bottom.
+ List<Cluster> topList = new ArrayList<Cluster>();
+ List<Cluster> bottomList = new ArrayList<Cluster>();
+
+ // Track the highest energy cluster in the event.
+ double maxEnergy = 0.0;
+
+ // Process each of the clusters.
+ for(Cluster cluster : clusterList) {
+ // If this cluster has a higher energy then was seen
+ // previously, it is now the highest energy cluster.
+ if (cluster.getEnergy() > maxEnergy) {
+ maxEnergy = cluster.getEnergy();
+ }
+
+
+ // Get the list of calorimeter hits and its size.
+ List<CalorimeterHit> hitList = cluster.getCalorimeterHits();
+ int hitCount = hitList.size();
+
+ // Track cluster statistics.
+ double xEnergyWeight = 0.0;
+ double yEnergyWeight = 0.0;
+ double[] hitTimes = new double[hitCount];
+ double totalHitEnergy = 0.0;
+
+ // Iterate over the hits and extract statistics from them.
+ for(int hitIndex = 0; hitIndex < hitCount; hitIndex++) {
+ hitTimes[hitIndex] = hitList.get(hitIndex).getTime();
+ totalHitEnergy += hitList.get(hitIndex).getRawEnergy();
+ xEnergyWeight += (hitList.get(hitIndex).getRawEnergy() * hitList.get(hitIndex).getIdentifierFieldValue("ix"));
+ yEnergyWeight += (hitList.get(hitIndex).getRawEnergy() * hitList.get(hitIndex).getIdentifierFieldValue("iy"));
+ }
+
+ // If the cluster energy exceeds zero, plot the cluster
+ // statistics.
+ if(cluster.getEnergy() > 0) {
+ clusterSizePlot.fill(hitCount);
+ clusterTimes.fill(StatUtils.mean(hitTimes, 0, hitCount));
+ clusterTimeSigma.fill(Math.sqrt(StatUtils.variance(hitTimes, 0, hitCount)));
+ edgePlot.fill(xEnergyWeight / totalHitEnergy, yEnergyWeight / totalHitEnergy);
+ }
+
+ // Fill the single cluster plots.
+ clusterEnergyPlot.fill(cluster.getEnergy());
+
+ // Cluster pairs are formed from all top/bottom cluster
+ // combinations. To create these pairs, separate the
+ // clusters into two lists based on their y-indices.
+ if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix") > 0) {
+ topList.add(cluster);
+ } else {
+ bottomList.add(cluster);
+ }
+ }
+
+ // Populate the event plots.
+ clusterCountPlot.fill(clusterList.size());
+ if(maxEnergy > 0) { clusterMaxEnergyPlot.fill(maxEnergy); }
+
+ // Create a list to store cluster pairs.
+ List<Cluster[]> pairList = new ArrayList<Cluster[]>(topList.size() * bottomList.size());
+
+ // Form pairs from all possible combinations of clusters
+ // from the top and bottom lists.
+ for(Cluster topCluster : topList) {
+ for(Cluster bottomCluster : bottomList) {
+ // Make a cluster pair array.
+ Cluster[] pair = new Cluster[2];
+
+ // The lower energy cluster goes in the second slot.
+ if(topCluster.getEnergy() > bottomCluster.getEnergy()) {
+ pair[0] = topCluster;
+ pair[1] = bottomCluster;
+ } else {
+ pair[0] = bottomCluster;
+ pair[1] = topCluster;
+ }
+
+ // Add the pair to the pair list.
+ pairList.add(pair);
+ }
+ }
+
+ // Iterate over each pair and calculate the pair cut values.
+ for(Cluster[] pair : pairList) {
+ // Get the energy slope value.
+ double energySumValue = TriggerModule.getValueEnergySum(pair);
+ double energyDifferenceValue = TriggerModule.getValueEnergyDifference(pair);
+ double energySlopeValue = TriggerModule.getValueEnergySlope(pair, 0.005500);
+ double coplanarityValue = TriggerModule.getValueCoplanarity(pair);
+ double xMean = ((pair[0].getEnergy() * pair[0].getPosition()[0]) +
+ (pair[1].getEnergy() * pair[1].getPosition()[0])) / energySumValue;
+ double yMean = ((pair[0].getEnergy() * pair[0].getPosition()[1]) +
+ (pair[1].getEnergy() * pair[1].getPosition()[1])) / energySumValue;
+
+ // Populate the cluster pair plots.
+ pairEnergySum.fill(energySumValue, 1);;
+ pairEnergyDifference.fill(energyDifferenceValue, 1);
+ pairEnergySlope.fill(energySlopeValue, 1);
+ pairCoplanarity.fill(coplanarityValue, 1);
+ pairEnergyPositionMeanX.fill(xMean);
+ pairEnergyPositionMeanY.fill(yMean);
+ }
+ }
+
+ // If the event does not contain clusters, update the "Event
+ // Clusters" plot accordingly.
+ else { clusterCountPlot.fill(0); }
}
/**
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplayWithRawWaveform.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplayWithRawWaveform.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplayWithRawWaveform.java Wed Mar 9 11:43:24 2016
@@ -54,7 +54,7 @@
// Plotter objects and variables.
private IPlotter plotter;
private IPlotterFactory plotterFactory;
- private AIDA aida = AIDA.defaultInstance();
+ private AIDA aida = AIDA.defaultInstance();
// LCIO Collection names.
private String inputCollection = "EcalCalHits";
@@ -69,16 +69,16 @@
private ArrayList<IHistogram2D> channelTimeVsEnergyPlot;
// Internal variables.
- private PEventViewer viewer; // Single event display.
- private int pedSamples = 10; //
- private IPlotterStyle pstyle; // The plotter style for all plots.
- private long lastEventTime = 0; // Tracks the time at which the last event occurred.
- private int eventRefreshRate = 1; // The number of seconds before an update occurs.
- private boolean resetOnUpdate = true; // Clears the event display on each update.
- private double minEch = 10 * EcalUtils.MeV; // The energy scale minimum.
- private double maxEch = 3500 * EcalUtils.MeV; // The energy scale maximum.
- private int[] windowRaw = new int[NUM_CHANNELS]; // The number of samples in a waveform for each channel.
- private boolean[] isFirstRaw = new boolean[NUM_CHANNELS]; // Whether a waveform plot was initiated for each channel.
+ private PEventViewer viewer; // Single event display.
+ private int pedSamples = 10; //
+ private IPlotterStyle pstyle; // The plotter style for all plots.
+ private long lastEventTime = 0; // Tracks the time at which the last event occurred.
+ private int eventRefreshRate = 1; // The number of seconds before an update occurs.
+ private boolean resetOnUpdate = true; // Clears the event display on each update.
+ private double minEch = 10 * EcalUtils.MeV; // The energy scale minimum.
+ private double maxEch = 3500 * EcalUtils.MeV; // The energy scale maximum.
+ private int[] windowRaw = new int[NUM_CHANNELS]; // The number of samples in a waveform for each channel.
+ private boolean[] isFirstRaw = new boolean[NUM_CHANNELS]; // Whether a waveform plot was initiated for each channel.
// Plot style and title variables.
private static final String NO_TITLE = "";
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalFeeMonitor.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalFeeMonitor.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalFeeMonitor.java Wed Mar 9 11:43:24 2016
@@ -33,80 +33,80 @@
// this has to match the one in FEEClusterPlotter:
private String histoNameFormat = "%3d";
- private AIDA aida = AIDA.defaultInstance();
- private IPlotter plotter;
- private IPlotterFactory plotterFactory;
- private IPlotterStyle pstyle;
- private PEventViewer viewer;
+ private AIDA aida = AIDA.defaultInstance();
+ private IPlotter plotter;
+ private IPlotterFactory plotterFactory;
+ private IPlotterStyle pstyle;
+ private PEventViewer viewer;
- static final String[] colors={"red","black","blue","green","yellow","pink","cyan","magenta","brown"};
- static final int nRows=3;
- static final int nColumns=3;
- private int theRegion=0;
-
- @Override
- public void detectorChanged(Detector detector) {
- plotterFactory = aida.analysisFactory().createPlotterFactory("ECal Fee");
- plotter = plotterFactory.create("ECal Fee");
- plotter.createRegions(nColumns,nRows);
- // Plot dummmy histos, else null plotter regions later:
- for (int ii=0; ii<nColumns*nRows; ii++) {
- plotter.region(ii).plot(aida.histogram1D("ASDF"+ii,100,11e9,11e11));
- }
- plotter.show();
-
- pstyle=plotterFactory.createPlotterStyle();
- pstyle.xAxisStyle().labelStyle().setBold(true);
- pstyle.yAxisStyle().labelStyle().setBold(true);
- pstyle.xAxisStyle().tickLabelStyle().setBold(true);
- pstyle.yAxisStyle().tickLabelStyle().setBold(true);
- pstyle.xAxisStyle().lineStyle().setColor("black");
- pstyle.yAxisStyle().lineStyle().setColor("black");
- pstyle.xAxisStyle().lineStyle().setThickness(2);
- pstyle.yAxisStyle().lineStyle().setThickness(2);
- pstyle.dataStyle().errorBarStyle().setThickness(0);
- pstyle.legendBoxStyle().setVisible(false);
- }
-
- @Override
- public void startOfData() {
- File config = new File("ecal-mapping-config.csv");
- if(config.exists() && config.canRead()) {
- try { viewer = new PDataEventViewer(config.getAbsolutePath()); }
- catch (IOException e) { viewer = new PEventViewer(); }
- } else { viewer = new PEventViewer(); }
- viewer.addCrystalListener(this);
- viewer.setVisible(true);
- }
-
- @Override
- public void actionPerformed(ActionEvent ae) { }
-
- @Override
- public void crystalActivated(CrystalEvent e) { }
-
- @Override
- public void crystalDeactivated(CrystalEvent e) { }
+ static final String[] colors={"red","black","blue","green","yellow","pink","cyan","magenta","brown"};
+ static final int nRows=3;
+ static final int nColumns=3;
+ private int theRegion=0;
+
+ @Override
+ public void detectorChanged(Detector detector) {
+ plotterFactory = aida.analysisFactory().createPlotterFactory("ECal Fee");
+ plotter = plotterFactory.create("ECal Fee");
+ plotter.createRegions(nColumns,nRows);
+ // Plot dummmy histos, else null plotter regions later:
+ for (int ii=0; ii<nColumns*nRows; ii++) {
+ plotter.region(ii).plot(aida.histogram1D("ASDF"+ii,100,11e9,11e11));
+ }
+ plotter.show();
+
+ pstyle=plotterFactory.createPlotterStyle();
+ pstyle.xAxisStyle().labelStyle().setBold(true);
+ pstyle.yAxisStyle().labelStyle().setBold(true);
+ pstyle.xAxisStyle().tickLabelStyle().setBold(true);
+ pstyle.yAxisStyle().tickLabelStyle().setBold(true);
+ pstyle.xAxisStyle().lineStyle().setColor("black");
+ pstyle.yAxisStyle().lineStyle().setColor("black");
+ pstyle.xAxisStyle().lineStyle().setThickness(2);
+ pstyle.yAxisStyle().lineStyle().setThickness(2);
+ pstyle.dataStyle().errorBarStyle().setThickness(0);
+ pstyle.legendBoxStyle().setVisible(false);
+ }
+
+ @Override
+ public void startOfData() {
+ File config = new File("ecal-mapping-config.csv");
+ if(config.exists() && config.canRead()) {
+ try { viewer = new PDataEventViewer(config.getAbsolutePath()); }
+ catch (IOException e) { viewer = new PEventViewer(); }
+ } else { viewer = new PEventViewer(); }
+ viewer.addCrystalListener(this);
+ viewer.setVisible(true);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent ae) { }
+
+ @Override
+ public void crystalActivated(CrystalEvent e) { }
+
+ @Override
+ public void crystalDeactivated(CrystalEvent e) { }
- @Override
- public void crystalClicked(CrystalEvent e) {
- aida.tree().cd("/");
- Point ecalPoint = Viewer.toEcalPoint(e.getCrystalID());
- if (ecalPoint.x == 0 || ecalPoint.y == 0) return;
- if (EcalMonitoringUtilities.isInHole(ecalPoint.y,ecalPoint.x)) return;
- final int cid=EcalMonitoringUtilities.getChannelIdFromRowColumn(ecalPoint.y,ecalPoint.x);
- IHistogram1D hist=aida.histogram1D(String.format(histoNameFormat,cid));
- if (hist==null) {
- System.err.println("Running the Driver?");
- } else {
- hist.setTitle(String.format("(%d,%d)",ecalPoint.x,ecalPoint.y));
+ @Override
+ public void crystalClicked(CrystalEvent e) {
+ aida.tree().cd("/");
+ Point ecalPoint = Viewer.toEcalPoint(e.getCrystalID());
+ if (ecalPoint.x == 0 || ecalPoint.y == 0) return;
+ if (EcalMonitoringUtilities.isInHole(ecalPoint.y,ecalPoint.x)) return;
+ final int cid=EcalMonitoringUtilities.getChannelIdFromRowColumn(ecalPoint.y,ecalPoint.x);
+ IHistogram1D hist=aida.histogram1D(String.format(histoNameFormat,cid));
+ if (hist==null) {
+ System.err.println("Running the Driver?");
+ } else {
+ hist.setTitle(String.format("(%d,%d)",ecalPoint.x,ecalPoint.y));
pstyle.dataStyle().lineStyle().setParameter("color", colors[theRegion%colors.length]);
- plotter.region(theRegion).clear();
- plotter.region(theRegion).plot(hist,pstyle);
- plotter.region(theRegion).refresh();
- theRegion=(theRegion+1)%(nColumns*nRows);
- }
- }
-
-
+ plotter.region(theRegion).clear();
+ plotter.region(theRegion).plot(hist,pstyle);
+ plotter.region(theRegion).refresh();
+ theRegion=(theRegion+1)%(nColumns*nRows);
+ }
+ }
+
+
}
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java Wed Mar 9 11:43:24 2016
@@ -190,17 +190,17 @@
GenericObject triggerData = triggerList.get(0);
if (triggerData instanceof SSPData){
- // TODO: TOP, BOTTOM, OR, and AND triggers are test
- // run specific parameters and are not supported
- // by SSPData.
- orTrigTime = 0; //((SSPData)triggerData).getOrTrig();
- topTrigTime = 0; //((SSPData)triggerData).getTopTrig();
- botTrigTime = 0; //((SSPData)triggerData).getBotTrig();
-
-
- orTrigTimePlot.fill(orTrigTime);
+ // TODO: TOP, BOTTOM, OR, and AND triggers are test
+ // run specific parameters and are not supported
+ // by SSPData.
+ orTrigTime = 0; //((SSPData)triggerData).getOrTrig();
+ topTrigTime = 0; //((SSPData)triggerData).getTopTrig();
+ botTrigTime = 0; //((SSPData)triggerData).getBotTrig();
+
+
+ orTrigTimePlot.fill(orTrigTime);
topTrigTimePlot.fill(topTrigTime);
- botTrigTimePlot.fill(botTrigTime);
+ botTrigTimePlot.fill(botTrigTime);
}
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java Wed Mar 9 11:43:24 2016
@@ -58,836 +58,836 @@
*/
public class EcalLedSequenceMonitor extends Driver{
- private static final int NUM_CHANNELS = 11 * 47;
- private static final String dbTag = "led";
- private static final String dbTableName = "ecal_led_calibrations";
- private static final int runNumberMax = 9999;
- private static final int nDrivers = 8;
- private static final int nSteps = 100; //should be 56 but here is to avoid seg fault
-
-
-
- String inputCollectionRaw = "EcalReadoutHits";
- String inputCollection = "EcalCalHits";
- AIDA aida;
-
- DatabaseConditionsManager conditionsManager;
-
- private EcalChannelCollection ChannelCollection;
- private EcalLedCollection LedCollection;
- private EcalConditions ecalConditions;
-
- Map < Integer,Integer > LedTopMap; //chid (conditions) --> LED id
- Map < Integer,Integer > LedBotMap; //chid (conditions) --> LED id
-
- Map < Integer,Integer > LedTopMapInverted; //LED id --> chid (conditions)
- Map < Integer,Integer > LedBotMapInverted; //LED id --> chid (conditions)
-
- private boolean useRawEnergy=false;
-
- String outFileName;
-
-
- private int runNumber = 0;
- private int eventN = 0;
- private int id,row,column,chid,ledId,driverId;
- private int[][] expectedSequence = new int[][]{ /*A.C. it is a terrible thing to have this hard-coded here!*/
- //first 4 are the flasher1 sequence, TOP controller
- {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
- {56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111},
- {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,-1}, //missing 135 is ok
- {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
- //second 4 are the flasher2 sequence, BOTTOM controller
- {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
- {56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,-1}, //missing 69 is OK
- {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167},
- {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
- };
- private int[][] actualSequence=new int[nDrivers][nSteps];
-
- private int[] iStep = new int[nDrivers];
- private int[] nEvents = new int[NUM_CHANNELS];
- private double[] mMean = new double[NUM_CHANNELS];
- private double[] mRMS = new double[NUM_CHANNELS];
-
- private int nEventsMin=200;
- private int nMinChannelsWithEvents=350;
- private double energy,fillEnergy,fillTime;
- private double energyCut=2; //we expect very high energy from the LEDs..
- private double skipInitial=0.05;
- private double skipMin=0.3;
- private long cellID;
-
-
-
-
- //Histograms-functions-ntuples
- private ArrayList<ITuple> iTuple;
-
- private IFunction fFunction,fFunction1;
- private IProfile1D cProfile;
- private IHistogram2D hMeanCharge2D;
- private ArrayList<IHistogram1D> hCharge;
- private ArrayList<IHistogram2D> hChargeVsEvn;
- private IPlotterFactory factory;
- private IPlotter pPlotter=null;
- private IPlotter pPlotter2=null;
- private IPlotterStyle style ;
- private int[] fitStatus = new int[NUM_CHANNELS];
-
- private boolean doFullAnalysis=false;
- private boolean isMonitoringApp=false;
- private boolean saveTuple=false;
-
- private double[] fPars;
- private double[] fPrevPars;
- private double[] fParErrs;
- private String[] fParNames;
-
-
- private double fEvnMinDraw=0.;
- private double fEvnMaxDraw=80000.;
- private double fChargeMinDraw=0.;
- private double fChargeMaxDraw=100.;
-
- /*Components for user interaction*/
- private JDialog dialog;
- private JLabel label;
- private JFrame frame;
- private JPanel panel;
- String labelString;
- private JButton okButtonRed,okButtonBlue,cancelButton;
- private int m_iteration=0;
- private LedColor m_ret=LedColor.UNKNOWN; //use UNKNONW as CANCEL button
- static Object modalMonitor = new Object();
-
- public void setUseRawEnergy(boolean useRawEnergy) {
- this.useRawEnergy=useRawEnergy;
- }
-
- public void setEnergyCut(double energyCut) {
- this.energyCut=energyCut;
- }
- public void setSkipInitial(double skipInitial) {
- this.skipInitial=skipInitial;
- }
- public void setSkipMin(double skipMin) {
- this.skipMin=skipMin;
- }
-
- public void setEvnMinDraw(double evnMinDraw){
- this.fEvnMinDraw=evnMinDraw;
- }
- public void setEvnMaxDraw(double evnMaxDraw){
- this.fEvnMaxDraw=evnMaxDraw;
- }
- public void setChargeMinDraw(double chargeMinDraw){
- this.fChargeMinDraw=chargeMinDraw;
- }
- public void setChargeMaxDraw(double chargeMaxDraw){
- this.fChargeMaxDraw=chargeMaxDraw;
- }
-
- public void setNEventsMin(int nEeventsMin){
- this.nEventsMin=nEventsMin;
- }
-
- public void setIsMonitoringApp(boolean app){
- this.isMonitoringApp=app;
- }
-
- public void setDoFullAnalysis(boolean fullAnalysis){
- this.doFullAnalysis=fullAnalysis;
- }
-
- public void setSaveTuple(boolean flag){
- this.saveTuple=flag;
- }
-
- @Override
- protected void detectorChanged(Detector detector) {
- System.out.println("LedAnalysis::Detector changed was called");
- System.out.println(fEvnMinDraw+" "+fEvnMaxDraw);
- for (int ii=0;ii<nDrivers;ii++){
- iStep[ii]=0;
- // actualSequence[ii][iStep[ii]]=-1;
- }
-
- // Setup conditions
-
- conditionsManager = DatabaseConditionsManager.getInstance();
-
- LedTopMap = new HashMap< Integer , Integer >(); //key: ecal channel ID. Value: led id
- LedBotMap = new HashMap< Integer , Integer >();
-
- LedTopMapInverted = new HashMap< Integer , Integer >(); //key: led id. Value: ecal channel id
- LedBotMapInverted = new HashMap< Integer , Integer >();
-
-
- ChannelCollection = conditionsManager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData();
- LedCollection = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
- ecalConditions = conditionsManager.getEcalConditions();
-
- for (EcalChannel channel : ChannelCollection){
- chid = channel.getChannelId();
- for (EcalLed Led : LedCollection) {
- if (Led.getEcalChannelId()==chid){
- if (channel.getY()>0){
- LedTopMap.put( chid , Led.getLedNumber() );
- LedTopMapInverted.put( Led.getLedNumber(), chid );
- }
- else if (channel.getY()<0){
- LedBotMap.put( chid , Led.getLedNumber() );
- LedBotMapInverted.put( Led.getLedNumber(), chid );
- }
- }
- }
- }
-
-
-
- // Setup plots
- aida = AIDA.defaultInstance();
- aida.tree().cd("/");
- hMeanCharge2D = aida.histogram2D("Average LED response", 47, -23.5, 23.5, 11, -5.5, 5.5);
-
- factory= aida.analysisFactory().createPlotterFactory("Ecal Led Sequence");
- pPlotter= factory.create("Drivers");
- pPlotter.createRegions(4,2);
- if (isMonitoringApp){
- pPlotter2=factory.create("Sequence Map");
- pPlotter2.createRegions(1,1);
- pPlotter2.region(0).plot(hMeanCharge2D);
- }
- iTuple = new ArrayList<ITuple>(NUM_CHANNELS);
- hCharge = new ArrayList<IHistogram1D>(NUM_CHANNELS);
- hChargeVsEvn = new ArrayList<IHistogram2D>(nDrivers);
-
-
-
- //pPlotter2.region(0).plot(hMeanCharge2D);
-
- for (int ii=0;ii<NUM_CHANNELS;ii++){
- int row = EcalMonitoringUtilities.getRowFromHistoID(ii);
- int column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
- iTuple.add(aida.analysisFactory().createTupleFactory(aida.tree()).create("nTuple"+ii,"nTuple"+ii,"int fEvn=0 , double fCharge=0.,double fTime=0.",""));
- }
-
- for (int ii=0;ii<nDrivers;ii++){
- hChargeVsEvn.add(aida.histogram2D("Driver"+ii,100,fEvnMinDraw,fEvnMaxDraw,100,fChargeMinDraw,fChargeMaxDraw));
- pPlotter.region(ii).plot( hChargeVsEvn.get(ii));
- }
-
- pPlotter.show();
- if (isMonitoringApp) pPlotter2.show();
-
- }
-
- @Override
- public void process(EventHeader event) {
- runNumber = event.getRunNumber();
- eventN++;
- if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
- //List<BaseRawCalorimeterHit> hits = event.get(BaseRawCalorimeterHit.class, inputCollectionRaw);
- List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
- for (CalorimeterHit hit : hits) {
-
- column = hit.getIdentifierFieldValue("ix");
- row = hit.getIdentifierFieldValue("iy");
- id = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
- cellID=hit.getCellID();
- chid = ChannelCollection.findGeometric(cellID).getChannelId();
-
- energy = hit.getCorrectedEnergy();
-
- if (useRawEnergy){
- fillEnergy = getRawADCSum(energy,cellID);
- }
- else {
- fillEnergy = energy;
- }
- fillTime = hit.getTime();
-
-
- //find the LED
- if (row>0){
- ledId=LedTopMap.get(chid);
- }
- else if (row<0){
- ledId=LedBotMap.get(chid);
- }
- driverId=getDriver(ledId);
- if (row<0) driverId+=4;
-
-
-
- /*Skip the events under thr*/
- if (energy<energyCut) continue;
-
- /*First, check if this led is the one in the NEXT step. Therefore, increment by 1 the step*/
- /*
- * if (iStep[driverId]==0){
-
- actualSequence[driverId][iStep[driverId]]=ledId;
- iStep[driverId]=1;
- }
- else if ((iStep[driverId]==1)&&(ledId!=actualSequence[driverId][0])){
- System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);
- if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId);
- actualSequence[driverId][iStep[driverId]]=ledId;
- iStep[driverId]++;
- }
- else if ((iStep[driverId]>1)&&(ledId!=actualSequence[driverId][iStep[driverId]-1])&&(ledId!=actualSequence[driverId][iStep[driverId]-2])){
- System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);
- if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId);
- actualSequence[driverId][iStep[driverId]]=ledId;
- iStep[driverId]++;
- }
-
-
- // if (iStep[driverId]==-1) continue;
-
- */
-
- if (iStep[driverId]==-1) continue; /*Not yet data*/
-
- /*Put this code here, since we want to always fill the ntuple*/
- iTuple.get(id).fill(0,nEvents[id]);
- iTuple.get(id).fill(1,fillEnergy);
- iTuple.get(id).fill(2,fillTime);
- iTuple.get(id).addRow();
- nEvents[id]++;
-
-
-
- /*Add a debug print */
- if (eventN % 10000==0){
- System.out.println("Debug. Event "+eventN+" LED ID: "+ledId+" DRIVER ID: "+driverId+" ECAL ID: "+id+" ROW: "+row+" COLUMN: "+column+ "HISTO ID: "+id);
- }
- }
- if (eventN % 10000==0){
- System.out.println("\n");
- }
- }
- }
-
- /*
- * The endOfData() method analises each ntuple to find the LED response.
- * We cannot simply fit a gaussian to the energy distribution, since there is a high-energy tail due to the LED being turned on:
- * When the LED turns on, it is "cold", and emits more light. Immediately, it starts to heat, and due to temperature effects the
- * emitted light is less. This is clearly visible if one plots the charge VS the event number: the trend is decreasing, toward a
- * plateau, that corresponds to the value at thermal equilibrium.
- *
- * For (few) channels, the first charge values are close to 0, then charge grows rapidly, then it returns back to the plateau.
- * To handle these, I always cut the first 10% events
- * To properly handle this:
- *
- * 1) First create a profile histogram, charge VS event number.
- * 2) Fit it with something like "A*exp(-event_number/N0)+C. The function does not need to be extra-accurate at this stage
- * 3) Cut the events with event_number < 5*N0.
- * 4) Fit the remaining events with a gaussian.
- */
- @Override
- public void endOfData() {
- System.out.println("LedAnalysis::end of data");
- System.out.println("LedAnalysis:: nEventsMin is: "+nEventsMin);
-
- double e,eMin,eMax;
- double t;
- int n,nBins,nSkip;
-
- int row, column;
-
- String hName;
- IFunctionFactory fFactory=aida.analysisFactory().createFunctionFactory(aida.tree());
-
- IFitResult fResult;
- IFitter fFitter;
-
- for (int id = 0; id < 11 * 47; id++) {
-
- eMin=9999;
- eMax=-9999;
- row = EcalMonitoringUtilities.getRowFromHistoID(id);
- column = EcalMonitoringUtilities.getColumnFromHistoID(id);
- System.out.println("");
- System.out.println("Doing channel: X= "+column+" Y= "+row+ "id= "+id);
- System.out.println("Number of entries in analysis ntuple: "+iTuple.get(id).rows());
- System.out.println("Number of recognized events: "+nEvents[id]);
- /*Create the profile. Create it for all the channels, to keep sync.*/
- nBins=nEvents[id]/100;
- if (nBins<=0) nBins=1;
-
- /*Clear previous*/
-
- if (id>0){
- aida.tree().rm("strip");
- aida.tree().rm("fun0");
- aida.tree().rm("fun1");
- }
- /*Create the profile.*/
- cProfile=aida.profile1D("strip",nBins,-0.5,nEvents[id]*(1-skipInitial)+0.5);
- cProfile.reset();
- /*Create the function for the profile fit and the gaus fit*/
- fFunction=fFactory.createFunctionFromScript("fun0",1,"A*exp(-x[0]/tau)+B","A,tau,B","",null);
- fFunction1=fFactory.createFunctionByName("fun1","G");
-
- if (EcalMonitoringUtilities.isInHole(row,column)==true){
- System.out.println("Channel X= "+column+" Y= "+row+" is in hole. Skip");
- hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
- System.out.println("In hole, skip");
- continue;
- }
- else if (nEvents[id]<nEventsMin) {
- hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
- System.err.println("LedAnalysis:: the channel X= "+column+" Y= "+row+" has not enough events "+nEvents[id]+" "+nEventsMin);
-
- continue;
- }
-
- //Fill the profile*/
- nSkip=(int)(nEvents[id]*skipInitial);
- if (nSkip>iTuple.get(id).rows()){
- System.out.println("Can't skip initial events?");
- nSkip=0;
- }
- iTuple.get(id).start();
- iTuple.get(id).skip(nSkip); //This is the work-around for those channels with charge starting from 0 and rapidly growing//
- n=0;
- iTuple.get(id).next();
- while ( iTuple.get(id).next() ){
- e=iTuple.get(id).getDouble(1);
- if (e<eMin) eMin=e;
- if (e>eMax) eMax=e;
- cProfile.fill(1.*n,e);
- n++;
- }
- fFitter=aida.analysisFactory().createFitFactory().createFitter("chi2","","v");
-
- if (doFullAnalysis){
- //Init function parameters
- double[] initialPars={eMax-eMin,nEvents[id]/10.,eMin};
- if (initialPars[0]<0) initialPars[0]=0;
- fFunction.setParameters(initialPars);
-
- //Do the fit
- System.out.println("LedAnalysis:: do profile fit "+id+" "+fFitter.engineName()+" "+fFitter.fitMethodName());
- System.out.println("LedAnalysis:: initial parameters "+initialPars[0]+" "+initialPars[1]+" "+initialPars[2]);
- fResult=fFitter.fit(cProfile,fFunction);
- fPars = fResult.fittedParameters();
- fParErrs = fResult.errors();
- fParNames = fResult.fittedParameterNames();
- System.out.println("LedAnalysis:: Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
- for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
- System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
- }
- fFunction.setParameters(fPars);
-
-
- //if fit failed, revert to simpler case
- if ((fResult.isValid()==false)||Double.isNaN(fParErrs[0])||Double.isNaN(fParErrs[1])||Double.isNaN(fParErrs[2])){
- System.out.println("LedAnalysis:: fit failed. Reverting to simpler case");
- nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
- }
- else{
- //Now we have the tau parameter. Take ONLY the events that are with N>5*tau/
- //As a cross-check, also verify that tau > Nevents/10, otherwise skip the first Nevents/2
- //and emit warning
- nSkip=(int)( fPars[1]*5);
- if (nSkip < (nEvents[id]*skipMin)){
- System.out.println("LedAnalysis:: Skip number too low: "+nSkip+" Increment it to "+nEvents[id]/2);
- nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
- }
- if (nSkip > nEvents[id]){
- System.out.println("LedAnalysis:: Skip number too high, reduce it");
- nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
- }
- }
- }
- else{
- nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
- }
-
- System.out.println("LedAnalysis:: gaus fit :: Going to skip "+nSkip+" out of "+nEvents[id]);
- System.out.println("eMin is: "+eMin+" eMax is: "+eMax);
- hCharge.add(aida.histogram1D("charge_"+id,200,eMin*0.9,eMax*1.1));
-
-
- iTuple.get(id).start();
- iTuple.get(id).skip(nSkip);
- n=0;
- while (iTuple.get(id).next()){
- e=iTuple.get(id).getDouble(1);
- t=iTuple.get(id).getDouble(2);
- hCharge.get(id).fill(e);
- n++;
- }
-
- /*Finally do the fit with the gaussian*/
- double[] initialPars1={hCharge.get(id).maxBinHeight(),hCharge.get(id).mean(),hCharge.get(id).rms()};
-
- System.out.println("LedAnalysis:: Gaus fit");
- System.out.println("LedAnalysis:: initial parameters "+initialPars1[0]+" "+initialPars1[1]+" "+initialPars1[2]);
-
- fFunction1.setParameters(initialPars1);
- fResult=fFitter.fit(hCharge.get(id),fFunction1);
- fPars = fResult.fittedParameters();
- fParErrs = fResult.errors();
- fParNames = fResult.fittedParameterNames();
- System.out.println("Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
- for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
- System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
- }
- fFunction1.setParameters(fPars);
- mMean[id]=fPars[1];
- mRMS[id]=fPars[2];
-
- hMeanCharge2D.fill(column,row,mMean[id]);
- System.out.println("\n");
- }//End loop on channels
-
-
-
- if ((pPlotter2!=null)&&(isMonitoringApp)){
- style = pPlotter2.region(0).style();
- style.setParameter("hist2DStyle", "colorMap");
- style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- style.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
- pPlotter2.region(0).plot(hMeanCharge2D);
- pPlotter2.region(0).refresh();
- }
- else{
- IPlotterStyle pstyle = aida.analysisFactory().createPlotterFactory().createPlotterStyle();
- pPlotter2 = null;
- pPlotter2 = aida.analysisFactory().createPlotterFactory().create();
- pstyle.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- pstyle.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
- pstyle.setParameter("hist2DStyle", "colorMap");
- if (pPlotter2!=null){
- pPlotter2.createRegion().plot(hMeanCharge2D,pstyle);
- pPlotter2.show();
- }
- }
-
- if (isMonitoringApp){
- askUploadToDBDialog();
- synchronized (modalMonitor) {
- try{
- modalMonitor.wait(60000); //wait 1 minute for user interaction.
- }
- catch(InterruptedException excp){
- System.out.println("Got exception: "+excp);
- }
- }
- if ((m_ret!=LedColor.UNKNOWN)){
- if (m_ret==LedColor.BLUE) System.out.println("OK, upload to DB BLUE");
- else System.out.println("OK, upload to DB RED");
- try {
- uploadToDB(m_ret);
- } catch (SQLException | DatabaseObjectException | ConditionsObjectException error) {
- throw new RuntimeException("Error uploading to the database ", error);
- }
-
- System.out.println("Save an Elog too");
- uploadToElog();
- }
- else{
- System.out.println("Cancel pressed. Nothing to do");
- }
- }
-
- /*Write a file with the LED values*/
- try {
- if (useRawEnergy){
- outFileName=runNumber+".raw.txt";
- }
- else{
- outFileName=runNumber+".energy.txt";
- }
- PrintWriter writer = new PrintWriter(outFileName, "UTF-8");
-
- for (int cid = 1; cid <= 442; cid++) {/*This is a loop over the channel ID, as in the conditions system*/
- EcalChannel cc = findChannel(cid);
- column = cc.getX(); //This is the column
- row = cc.getY(); //This is the row
- id=EcalMonitoringUtilities.getHistoIDFromRowColumn(row,column);
- row = EcalMonitoringUtilities.getRowFromHistoID(id);
- column = EcalMonitoringUtilities.getColumnFromHistoID(id);
- if (EcalMonitoringUtilities.isInHole(row, column)) continue;
- if ((row == 0) || (column == 0)) continue;
-
- writer.print(cid+" "+column+" "+row+" "+" "+ mMean[id]+" "+mRMS[id]+"\r\n");
-
- }
- writer.close();
-
- }
- catch (FileNotFoundException fnfe) {
-
- System.out.println(fnfe.getMessage());
-
- }
-
- catch (IOException ioe) {
-
- System.out.println(ioe.getMessage());
-
- }
-
-
- System.out.println("EcalLedSequenceMonitor endOfData clear histograms");
- for(int ii = 0; ii < NUM_CHANNELS; ii++) {
- row=EcalMonitoringUtilities.getRowFromHistoID(ii);
- column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
- hName="charge_"+ii;
- try{
- aida.tree().rm(hName);
- }
- catch(IllegalArgumentException ee){
- System.out.println("Got exception "+ee);
- }
-
- if (!saveTuple||(isMonitoringApp)){
- hName="nTuple"+ii;
- try{
- aida.tree().rm(hName);
- }
- catch(IllegalArgumentException ee){
- System.out.println("Got exception "+ee);
- }
- }
- }
- System.out.println("EcalLedSequenceMonitor endOfData clear histograms done");
- System.out.println("endOfData end");
- System.out.println("The program is not stucked. It is writing the output AIDA file, this takes time!");
- }/*End endOfData*/
-
-
- /**
- * This function returns the driver number (from 0 to 3) given the LED id.
- * @param led
- * @return
- */
- public int getDriver(int led){
- int ret=-1;
- if ((led>=2)&&(led<56)) ret=0;
- else if ((led>=56)&&(led<112)) ret=1;
- else if ((led>=112)&&(led<168)) ret=2;
- else if ((led>=168)&&(led<224)) ret=3;
- return ret;
- }
-
- /**
- * Very simple method to retrieve the pedestal-subtracted raw Energy.
- * If the gain changes (because we do a re-calibration), I do not want to include this in the LED analysis
- * @param energy
- * @param cellID
- * @return
- */
- public double getRawADCSum(double energy,long cellID){
- EcalChannelConstants channelData = ecalConditions.getChannelConstants(ecalConditions.getChannelCollection().findGeometric(cellID));
- double RawSum=energy / EcalUtils.GeV;
- double gain=channelData.getGain().getGain();
- double ret=RawSum/gain;
- // System.out.println("A:C "+RawSum+" "+ret);
- return ret;
- }
-
- private void uploadToDB(LedColor color) throws DatabaseObjectException, ConditionsObjectException, SQLException {
- int x,y,id;
- double mean,rms;
- System.out.println(String.format("Uploading new led data to the database, runMin=%d, runMax=%d, tag=%s ....",
- runNumber,runNumberMax,dbTag));
-
- conditionsManager = DatabaseConditionsManager.getInstance();
- EcalLedCalibrationCollection led_calibrations = new EcalLedCalibrationCollection();
- led_calibrations.setConnection(conditionsManager.getConnection());
-
- TableMetaData tableMetaData = conditionsManager.findTableMetaData(dbTableName);
- led_calibrations.setTableMetaData(tableMetaData);
-
- for (int cid = 1; cid <= 442; cid++) {/*This is a loop over the channel ID, as in the conditions system*/
- EcalChannel cc = findChannel(cid);
- x = cc.getX(); //This is the column
- y = cc.getY(); //This is the row
- id=EcalMonitoringUtilities.getHistoIDFromRowColumn(y,x);
- mean=mMean[id];
- rms=mRMS[id];
- led_calibrations.add(new EcalLedCalibration(cid,mean,rms,color));
- }
-
- int collectionId = -1;
-
- try {
- collectionId = conditionsManager.getCollectionId(led_calibrations, "loaded by EcalLedSequenceMonitor");
- } catch (Exception e) {
- System.out.println("Got exception on uploadToDB "+ e);
- throw new RuntimeException(e);
- }
- System.err.println("CollectionID: "+collectionId);
- led_calibrations.insert();
- ConditionsRecord conditionsRecord = new ConditionsRecord(
- led_calibrations.getCollectionId(), runNumber, runNumberMax, dbTableName, dbTableName,
- "Generated by LedAnalysis from Run #"+runNumber, dbTag);
- conditionsRecord.setConnection(conditionsManager.getConnection());
- tableMetaData = conditionsManager.findTableMetaData("conditions");
- conditionsRecord.setTableMetaData(tableMetaData);
- conditionsRecord.insert();
-
- System.out.println("Upload to DB done");
- }
-
- private void uploadToElog(){
- String path,exe,command,imgpath;
- path="/home/hpsrun/LedSequenceData";
- exe=path+"/doElog.csh";
- imgpath=path+"/screenshots/"+runNumber+".png";
-
- File f=new File(path);
- if (!f.exists()){
- System.err.println("LedMonitoringSequence:: wrong path");
- return;
- }
- if (pPlotter2==null){
- System.err.println("LedMonitoringSquence:: no plotter");
- return;
- }
- try{
- pPlotter2.writeToFile(imgpath);
- }
- catch(Exception e){
- System.err.println("Exception "+e);
- }
- File f1=new File(exe);
- if (!f1.exists()){
- System.err.println("LedMonitoringSequence:: no script!");
- return;
- }
- command=exe+" "+imgpath;
- try{
- System.out.println("LedMonitoringSequence:: try this command: "+command);
- Runtime.getRuntime().exec(command);
- }
- catch(Exception e){
- System.err.println("Exception "+e);
- }
- }
-
-
- private void drawProfiles(int ledID,int driverID){
-
- int m_column,m_row,m_ledID,m_chID,m_ID,m_driverID;
-
- m_ledID = ledID;
- m_driverID = driverID;
- m_chID = 0;
-
-
- if (m_driverID<=3) m_chID = LedTopMapInverted.get(ledID);
- else m_chID = LedBotMapInverted.get(ledID);
-
- m_column=findChannel(m_chID).getX();
- m_row=findChannel(m_chID).getY();
- m_ID=EcalMonitoringUtilities.getHistoIDFromRowColumn(m_row, m_column);
- /*
+ private static final int NUM_CHANNELS = 11 * 47;
+ private static final String dbTag = "led";
+ private static final String dbTableName = "ecal_led_calibrations";
+ private static final int runNumberMax = 9999;
+ private static final int nDrivers = 8;
+ private static final int nSteps = 100; //should be 56 but here is to avoid seg fault
+
+
+
+ String inputCollectionRaw = "EcalReadoutHits";
+ String inputCollection = "EcalCalHits";
+ AIDA aida;
+
+ DatabaseConditionsManager conditionsManager;
+
+ private EcalChannelCollection ChannelCollection;
+ private EcalLedCollection LedCollection;
+ private EcalConditions ecalConditions;
+
+ Map < Integer,Integer > LedTopMap; //chid (conditions) --> LED id
+ Map < Integer,Integer > LedBotMap; //chid (conditions) --> LED id
+
+ Map < Integer,Integer > LedTopMapInverted; //LED id --> chid (conditions)
+ Map < Integer,Integer > LedBotMapInverted; //LED id --> chid (conditions)
+
+ private boolean useRawEnergy=false;
+
+ String outFileName;
+
+
+ private int runNumber = 0;
+ private int eventN = 0;
+ private int id,row,column,chid,ledId,driverId;
+ private int[][] expectedSequence = new int[][]{ /*A.C. it is a terrible thing to have this hard-coded here!*/
+ //first 4 are the flasher1 sequence, TOP controller
+ {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
+ {56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111},
+ {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,-1}, //missing 135 is ok
+ {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
+ //second 4 are the flasher2 sequence, BOTTOM controller
+ {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
+ {56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,-1}, //missing 69 is OK
+ {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167},
+ {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
+ };
+ private int[][] actualSequence=new int[nDrivers][nSteps];
+
+ private int[] iStep = new int[nDrivers];
+ private int[] nEvents = new int[NUM_CHANNELS];
+ private double[] mMean = new double[NUM_CHANNELS];
+ private double[] mRMS = new double[NUM_CHANNELS];
+
+ private int nEventsMin=200;
+ private int nMinChannelsWithEvents=350;
+ private double energy,fillEnergy,fillTime;
+ private double energyCut=2; //we expect very high energy from the LEDs..
+ private double skipInitial=0.05;
+ private double skipMin=0.3;
+ private long cellID;
+
+
+
+
+ //Histograms-functions-ntuples
+ private ArrayList<ITuple> iTuple;
+
+ private IFunction fFunction,fFunction1;
+ private IProfile1D cProfile;
+ private IHistogram2D hMeanCharge2D;
+ private ArrayList<IHistogram1D> hCharge;
+ private ArrayList<IHistogram2D> hChargeVsEvn;
+ private IPlotterFactory factory;
+ private IPlotter pPlotter=null;
+ private IPlotter pPlotter2=null;
+ private IPlotterStyle style ;
+ private int[] fitStatus = new int[NUM_CHANNELS];
+
+ private boolean doFullAnalysis=false;
+ private boolean isMonitoringApp=false;
+ private boolean saveTuple=false;
+
+ private double[] fPars;
+ private double[] fPrevPars;
+ private double[] fParErrs;
+ private String[] fParNames;
+
+
+ private double fEvnMinDraw=0.;
+ private double fEvnMaxDraw=80000.;
+ private double fChargeMinDraw=0.;
+ private double fChargeMaxDraw=100.;
+
+ /*Components for user interaction*/
+ private JDialog dialog;
+ private JLabel label;
+ private JFrame frame;
+ private JPanel panel;
+ String labelString;
+ private JButton okButtonRed,okButtonBlue,cancelButton;
+ private int m_iteration=0;
+ private LedColor m_ret=LedColor.UNKNOWN; //use UNKNONW as CANCEL button
+ static Object modalMonitor = new Object();
+
+ public void setUseRawEnergy(boolean useRawEnergy) {
+ this.useRawEnergy=useRawEnergy;
+ }
+
+ public void setEnergyCut(double energyCut) {
+ this.energyCut=energyCut;
+ }
+ public void setSkipInitial(double skipInitial) {
+ this.skipInitial=skipInitial;
+ }
+ public void setSkipMin(double skipMin) {
+ this.skipMin=skipMin;
+ }
+
+ public void setEvnMinDraw(double evnMinDraw){
+ this.fEvnMinDraw=evnMinDraw;
+ }
+ public void setEvnMaxDraw(double evnMaxDraw){
+ this.fEvnMaxDraw=evnMaxDraw;
+ }
+ public void setChargeMinDraw(double chargeMinDraw){
+ this.fChargeMinDraw=chargeMinDraw;
+ }
+ public void setChargeMaxDraw(double chargeMaxDraw){
+ this.fChargeMaxDraw=chargeMaxDraw;
+ }
+
+ public void setNEventsMin(int nEeventsMin){
+ this.nEventsMin=nEventsMin;
+ }
+
+ public void setIsMonitoringApp(boolean app){
+ this.isMonitoringApp=app;
+ }
+
+ public void setDoFullAnalysis(boolean fullAnalysis){
+ this.doFullAnalysis=fullAnalysis;
+ }
+
+ public void setSaveTuple(boolean flag){
+ this.saveTuple=flag;
+ }
+
+ @Override
+ protected void detectorChanged(Detector detector) {
+ System.out.println("LedAnalysis::Detector changed was called");
+ System.out.println(fEvnMinDraw+" "+fEvnMaxDraw);
+ for (int ii=0;ii<nDrivers;ii++){
+ iStep[ii]=0;
+ // actualSequence[ii][iStep[ii]]=-1;
+ }
+
+ // Setup conditions
+
+ conditionsManager = DatabaseConditionsManager.getInstance();
+
+ LedTopMap = new HashMap< Integer , Integer >(); //key: ecal channel ID. Value: led id
+ LedBotMap = new HashMap< Integer , Integer >();
+
+ LedTopMapInverted = new HashMap< Integer , Integer >(); //key: led id. Value: ecal channel id
+ LedBotMapInverted = new HashMap< Integer , Integer >();
+
+
+ ChannelCollection = conditionsManager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData();
+ LedCollection = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
+ ecalConditions = conditionsManager.getEcalConditions();
+
+ for (EcalChannel channel : ChannelCollection){
+ chid = channel.getChannelId();
+ for (EcalLed Led : LedCollection) {
+ if (Led.getEcalChannelId()==chid){
+ if (channel.getY()>0){
+ LedTopMap.put( chid , Led.getLedNumber() );
+ LedTopMapInverted.put( Led.getLedNumber(), chid );
+ }
+ else if (channel.getY()<0){
+ LedBotMap.put( chid , Led.getLedNumber() );
+ LedBotMapInverted.put( Led.getLedNumber(), chid );
+ }
+ }
+ }
+ }
+
+
+
+ // Setup plots
+ aida = AIDA.defaultInstance();
+ aida.tree().cd("/");
+ hMeanCharge2D = aida.histogram2D("Average LED response", 47, -23.5, 23.5, 11, -5.5, 5.5);
+
+ factory= aida.analysisFactory().createPlotterFactory("Ecal Led Sequence");
+ pPlotter= factory.create("Drivers");
+ pPlotter.createRegions(4,2);
+ if (isMonitoringApp){
+ pPlotter2=factory.create("Sequence Map");
+ pPlotter2.createRegions(1,1);
+ pPlotter2.region(0).plot(hMeanCharge2D);
+ }
+ iTuple = new ArrayList<ITuple>(NUM_CHANNELS);
+ hCharge = new ArrayList<IHistogram1D>(NUM_CHANNELS);
+ hChargeVsEvn = new ArrayList<IHistogram2D>(nDrivers);
+
+
+
+ //pPlotter2.region(0).plot(hMeanCharge2D);
+
+ for (int ii=0;ii<NUM_CHANNELS;ii++){
+ int row = EcalMonitoringUtilities.getRowFromHistoID(ii);
+ int column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
+ iTuple.add(aida.analysisFactory().createTupleFactory(aida.tree()).create("nTuple"+ii,"nTuple"+ii,"int fEvn=0 , double fCharge=0.,double fTime=0.",""));
+ }
+
+ for (int ii=0;ii<nDrivers;ii++){
+ hChargeVsEvn.add(aida.histogram2D("Driver"+ii,100,fEvnMinDraw,fEvnMaxDraw,100,fChargeMinDraw,fChargeMaxDraw));
+ pPlotter.region(ii).plot( hChargeVsEvn.get(ii));
+ }
+
+ pPlotter.show();
+ if (isMonitoringApp) pPlotter2.show();
+
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ runNumber = event.getRunNumber();
+ eventN++;
+ if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
+ //List<BaseRawCalorimeterHit> hits = event.get(BaseRawCalorimeterHit.class, inputCollectionRaw);
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
+ for (CalorimeterHit hit : hits) {
+
+ column = hit.getIdentifierFieldValue("ix");
+ row = hit.getIdentifierFieldValue("iy");
+ id = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
+ cellID=hit.getCellID();
+ chid = ChannelCollection.findGeometric(cellID).getChannelId();
+
+ energy = hit.getCorrectedEnergy();
+
+ if (useRawEnergy){
+ fillEnergy = getRawADCSum(energy,cellID);
+ }
+ else {
+ fillEnergy = energy;
+ }
+ fillTime = hit.getTime();
+
+
+ //find the LED
+ if (row>0){
+ ledId=LedTopMap.get(chid);
+ }
+ else if (row<0){
+ ledId=LedBotMap.get(chid);
+ }
+ driverId=getDriver(ledId);
+ if (row<0) driverId+=4;
+
+
+
+ /*Skip the events under thr*/
+ if (energy<energyCut) continue;
+
+ /*First, check if this led is the one in the NEXT step. Therefore, increment by 1 the step*/
+ /*
+ * if (iStep[driverId]==0){
+
+ actualSequence[driverId][iStep[driverId]]=ledId;
+ iStep[driverId]=1;
+ }
+ else if ((iStep[driverId]==1)&&(ledId!=actualSequence[driverId][0])){
+ System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);
+ if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId);
+ actualSequence[driverId][iStep[driverId]]=ledId;
+ iStep[driverId]++;
+ }
+ else if ((iStep[driverId]>1)&&(ledId!=actualSequence[driverId][iStep[driverId]-1])&&(ledId!=actualSequence[driverId][iStep[driverId]-2])){
+ System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);
+ if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId);
+ actualSequence[driverId][iStep[driverId]]=ledId;
+ iStep[driverId]++;
+ }
+
+
+ // if (iStep[driverId]==-1) continue;
+
+ */
+
+ if (iStep[driverId]==-1) continue; /*Not yet data*/
+
+ /*Put this code here, since we want to always fill the ntuple*/
+ iTuple.get(id).fill(0,nEvents[id]);
+ iTuple.get(id).fill(1,fillEnergy);
+ iTuple.get(id).fill(2,fillTime);
+ iTuple.get(id).addRow();
+ nEvents[id]++;
+
+
+
+ /*Add a debug print */
+ if (eventN % 10000==0){
+ System.out.println("Debug. Event "+eventN+" LED ID: "+ledId+" DRIVER ID: "+driverId+" ECAL ID: "+id+" ROW: "+row+" COLUMN: "+column+ "HISTO ID: "+id);
+ }
+ }
+ if (eventN % 10000==0){
+ System.out.println("\n");
+ }
+ }
+ }
+
+ /*
+ * The endOfData() method analises each ntuple to find the LED response.
+ * We cannot simply fit a gaussian to the energy distribution, since there is a high-energy tail due to the LED being turned on:
+ * When the LED turns on, it is "cold", and emits more light. Immediately, it starts to heat, and due to temperature effects the
+ * emitted light is less. This is clearly visible if one plots the charge VS the event number: the trend is decreasing, toward a
+ * plateau, that corresponds to the value at thermal equilibrium.
+ *
+ * For (few) channels, the first charge values are close to 0, then charge grows rapidly, then it returns back to the plateau.
+ * To handle these, I always cut the first 10% events
+ * To properly handle this:
+ *
+ * 1) First create a profile histogram, charge VS event number.
+ * 2) Fit it with something like "A*exp(-event_number/N0)+C. The function does not need to be extra-accurate at this stage
+ * 3) Cut the events with event_number < 5*N0.
+ * 4) Fit the remaining events with a gaussian.
+ */
+ @Override
+ public void endOfData() {
+ System.out.println("LedAnalysis::end of data");
+ System.out.println("LedAnalysis:: nEventsMin is: "+nEventsMin);
+
+ double e,eMin,eMax;
+ double t;
+ int n,nBins,nSkip;
+
+ int row, column;
+
+ String hName;
+ IFunctionFactory fFactory=aida.analysisFactory().createFunctionFactory(aida.tree());
+
+ IFitResult fResult;
+ IFitter fFitter;
+
+ for (int id = 0; id < 11 * 47; id++) {
+
+ eMin=9999;
+ eMax=-9999;
+ row = EcalMonitoringUtilities.getRowFromHistoID(id);
+ column = EcalMonitoringUtilities.getColumnFromHistoID(id);
+ System.out.println("");
+ System.out.println("Doing channel: X= "+column+" Y= "+row+ "id= "+id);
+ System.out.println("Number of entries in analysis ntuple: "+iTuple.get(id).rows());
+ System.out.println("Number of recognized events: "+nEvents[id]);
+ /*Create the profile. Create it for all the channels, to keep sync.*/
+ nBins=nEvents[id]/100;
+ if (nBins<=0) nBins=1;
+
+ /*Clear previous*/
+
+ if (id>0){
+ aida.tree().rm("strip");
+ aida.tree().rm("fun0");
+ aida.tree().rm("fun1");
+ }
+ /*Create the profile.*/
+ cProfile=aida.profile1D("strip",nBins,-0.5,nEvents[id]*(1-skipInitial)+0.5);
+ cProfile.reset();
+ /*Create the function for the profile fit and the gaus fit*/
+ fFunction=fFactory.createFunctionFromScript("fun0",1,"A*exp(-x[0]/tau)+B","A,tau,B","",null);
+ fFunction1=fFactory.createFunctionByName("fun1","G");
+
+ if (EcalMonitoringUtilities.isInHole(row,column)==true){
+ System.out.println("Channel X= "+column+" Y= "+row+" is in hole. Skip");
+ hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
+ System.out.println("In hole, skip");
+ continue;
+ }
+ else if (nEvents[id]<nEventsMin) {
+ hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
+ System.err.println("LedAnalysis:: the channel X= "+column+" Y= "+row+" has not enough events "+nEvents[id]+" "+nEventsMin);
+
+ continue;
+ }
+
+ //Fill the profile*/
+ nSkip=(int)(nEvents[id]*skipInitial);
+ if (nSkip>iTuple.get(id).rows()){
+ System.out.println("Can't skip initial events?");
+ nSkip=0;
+ }
+ iTuple.get(id).start();
+ iTuple.get(id).skip(nSkip); //This is the work-around for those channels with charge starting from 0 and rapidly growing//
+ n=0;
+ iTuple.get(id).next();
+ while ( iTuple.get(id).next() ){
+ e=iTuple.get(id).getDouble(1);
+ if (e<eMin) eMin=e;
+ if (e>eMax) eMax=e;
+ cProfile.fill(1.*n,e);
+ n++;
+ }
+ fFitter=aida.analysisFactory().createFitFactory().createFitter("chi2","","v");
+
+ if (doFullAnalysis){
+ //Init function parameters
+ double[] initialPars={eMax-eMin,nEvents[id]/10.,eMin};
+ if (initialPars[0]<0) initialPars[0]=0;
+ fFunction.setParameters(initialPars);
+
+ //Do the fit
+ System.out.println("LedAnalysis:: do profile fit "+id+" "+fFitter.engineName()+" "+fFitter.fitMethodName());
+ System.out.println("LedAnalysis:: initial parameters "+initialPars[0]+" "+initialPars[1]+" "+initialPars[2]);
+ fResult=fFitter.fit(cProfile,fFunction);
+ fPars = fResult.fittedParameters();
+ fParErrs = fResult.errors();
+ fParNames = fResult.fittedParameterNames();
+ System.out.println("LedAnalysis:: Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
+ for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
+ System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
+ }
+ fFunction.setParameters(fPars);
+
+
+ //if fit failed, revert to simpler case
+ if ((fResult.isValid()==false)||Double.isNaN(fParErrs[0])||Double.isNaN(fParErrs[1])||Double.isNaN(fParErrs[2])){
+ System.out.println("LedAnalysis:: fit failed. Reverting to simpler case");
+ nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
+ }
+ else{
+ //Now we have the tau parameter. Take ONLY the events that are with N>5*tau/
+ //As a cross-check, also verify that tau > Nevents/10, otherwise skip the first Nevents/2
+ //and emit warning
+ nSkip=(int)( fPars[1]*5);
+ if (nSkip < (nEvents[id]*skipMin)){
+ System.out.println("LedAnalysis:: Skip number too low: "+nSkip+" Increment it to "+nEvents[id]/2);
+ nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
+ }
+ if (nSkip > nEvents[id]){
+ System.out.println("LedAnalysis:: Skip number too high, reduce it");
+ nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
+ }
+ }
+ }
+ else{
+ nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
+ }
+
+ System.out.println("LedAnalysis:: gaus fit :: Going to skip "+nSkip+" out of "+nEvents[id]);
+ System.out.println("eMin is: "+eMin+" eMax is: "+eMax);
+ hCharge.add(aida.histogram1D("charge_"+id,200,eMin*0.9,eMax*1.1));
+
+
+ iTuple.get(id).start();
+ iTuple.get(id).skip(nSkip);
+ n=0;
+ while (iTuple.get(id).next()){
+ e=iTuple.get(id).getDouble(1);
+ t=iTuple.get(id).getDouble(2);
+ hCharge.get(id).fill(e);
+ n++;
+ }
+
+ /*Finally do the fit with the gaussian*/
+ double[] initialPars1={hCharge.get(id).maxBinHeight(),hCharge.get(id).mean(),hCharge.get(id).rms()};
+
+ System.out.println("LedAnalysis:: Gaus fit");
+ System.out.println("LedAnalysis:: initial parameters "+initialPars1[0]+" "+initialPars1[1]+" "+initialPars1[2]);
+
+ fFunction1.setParameters(initialPars1);
+ fResult=fFitter.fit(hCharge.get(id),fFunction1);
+ fPars = fResult.fittedParameters();
+ fParErrs = fResult.errors();
+ fParNames = fResult.fittedParameterNames();
+ System.out.println("Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
+ for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
+ System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
+ }
+ fFunction1.setParameters(fPars);
+ mMean[id]=fPars[1];
+ mRMS[id]=fPars[2];
+
+ hMeanCharge2D.fill(column,row,mMean[id]);
+ System.out.println("\n");
+ }//End loop on channels
+
+
+
+ if ((pPlotter2!=null)&&(isMonitoringApp)){
+ style = pPlotter2.region(0).style();
+ style.setParameter("hist2DStyle", "colorMap");
+ style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ style.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
+ pPlotter2.region(0).plot(hMeanCharge2D);
+ pPlotter2.region(0).refresh();
+ }
+ else{
+ IPlotterStyle pstyle = aida.analysisFactory().createPlotterFactory().createPlotterStyle();
+ pPlotter2 = null;
+ pPlotter2 = aida.analysisFactory().createPlotterFactory().create();
+ pstyle.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ pstyle.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
+ pstyle.setParameter("hist2DStyle", "colorMap");
+ if (pPlotter2!=null){
+ pPlotter2.createRegion().plot(hMeanCharge2D,pstyle);
+ pPlotter2.show();
+ }
+ }
+
+ if (isMonitoringApp){
+ askUploadToDBDialog();
+ synchronized (modalMonitor) {
+ try{
+ modalMonitor.wait(60000); //wait 1 minute for user interaction.
+ }
+ catch(InterruptedException excp){
+ System.out.println("Got exception: "+excp);
+ }
+ }
+ if ((m_ret!=LedColor.UNKNOWN)){
+ if (m_ret==LedColor.BLUE) System.out.println("OK, upload to DB BLUE");
+ else System.out.println("OK, upload to DB RED");
+ try {
+ uploadToDB(m_ret);
+ } catch (SQLException | DatabaseObjectException | ConditionsObjectException error) {
+ throw new RuntimeException("Error uploading to the database ", error);
+ }
+
+ System.out.println("Save an Elog too");
+ uploadToElog();
+ }
+ else{
+ System.out.println("Cancel pressed. Nothing to do");
+ }
+ }
+
+ /*Write a file with the LED values*/
+ try {
+ if (useRawEnergy){
+ outFileName=runNumber+".raw.txt";
+ }
+ else{
+ outFileName=runNumber+".energy.txt";
+ }
+ PrintWriter writer = new PrintWriter(outFileName, "UTF-8");
+
+ for (int cid = 1; cid <= 442; cid++) {/*This is a loop over the channel ID, as in the conditions system*/
+ EcalChannel cc = findChannel(cid);
+ column = cc.getX(); //This is the column
+ row = cc.getY(); //This is the row
+ id=EcalMonitoringUtilities.getHistoIDFromRowColumn(row,column);
+ row = EcalMonitoringUtilities.getRowFromHistoID(id);
+ column = EcalMonitoringUtilities.getColumnFromHistoID(id);
+ if (EcalMonitoringUtilities.isInHole(row, column)) continue;
+ if ((row == 0) || (column == 0)) continue;
+
+ writer.print(cid+" "+column+" "+row+" "+" "+ mMean[id]+" "+mRMS[id]+"\r\n");
+
+ }
+ writer.close();
+
+ }
+ catch (FileNotFoundException fnfe) {
+
+ System.out.println(fnfe.getMessage());
+
+ }
+
+ catch (IOException ioe) {
+
+ System.out.println(ioe.getMessage());
+
+ }
+
+
+ System.out.println("EcalLedSequenceMonitor endOfData clear histograms");
+ for(int ii = 0; ii < NUM_CHANNELS; ii++) {
+ row=EcalMonitoringUtilities.getRowFromHistoID(ii);
+ column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
+ hName="charge_"+ii;
+ try{
+ aida.tree().rm(hName);
+ }
+ catch(IllegalArgumentException ee){
+ System.out.println("Got exception "+ee);
+ }
+
+ if (!saveTuple||(isMonitoringApp)){
+ hName="nTuple"+ii;
+ try{
+ aida.tree().rm(hName);
+ }
+ catch(IllegalArgumentException ee){
+ System.out.println("Got exception "+ee);
+ }
+ }
+ }
+ System.out.println("EcalLedSequenceMonitor endOfData clear histograms done");
+ System.out.println("endOfData end");
+ System.out.println("The program is not stucked. It is writing the output AIDA file, this takes time!");
+ }/*End endOfData*/
+
+
+ /**
+ * This function returns the driver number (from 0 to 3) given the LED id.
+ * @param led
+ * @return
+ */
+ public int getDriver(int led){
+ int ret=-1;
+ if ((led>=2)&&(led<56)) ret=0;
+ else if ((led>=56)&&(led<112)) ret=1;
+ else if ((led>=112)&&(led<168)) ret=2;
+ else if ((led>=168)&&(led<224)) ret=3;
+ return ret;
+ }
+
+ /**
+ * Very simple method to retrieve the pedestal-subtracted raw Energy.
+ * If the gain changes (because we do a re-calibration), I do not want to include this in the LED analysis
+ * @param energy
+ * @param cellID
+ * @return
+ */
+ public double getRawADCSum(double energy,long cellID){
+ EcalChannelConstants channelData = ecalConditions.getChannelConstants(ecalConditions.getChannelCollection().findGeometric(cellID));
+ double RawSum=energy / EcalUtils.GeV;
+ double gain=channelData.getGain().getGain();
+ double ret=RawSum/gain;
+ // System.out.println("A:C "+RawSum+" "+ret);
+ return ret;
+ }
+
+ private void uploadToDB(LedColor color) throws DatabaseObjectException, ConditionsObjectException, SQLException {
+ int x,y,id;
+ double mean,rms;
+ System.out.println(String.format("Uploading new led data to the database, runMin=%d, runMax=%d, tag=%s ....",
+ runNumber,runNumberMax,dbTag));
+
+ conditionsManager = DatabaseConditionsManager.getInstance();
+ EcalLedCalibrationCollection led_calibrations = new EcalLedCalibrationCollection();
+ led_calibrations.setConnection(conditionsManager.getConnection());
+
+ TableMetaData tableMetaData = conditionsManager.findTableMetaData(dbTableName);
+ led_calibrations.setTableMetaData(tableMetaData);
+
+ for (int cid = 1; cid <= 442; cid++) {/*This is a loop over the channel ID, as in the conditions system*/
+ EcalChannel cc = findChannel(cid);
+ x = cc.getX(); //This is the column
+ y = cc.getY(); //This is the row
+ id=EcalMonitoringUtilities.getHistoIDFromRowColumn(y,x);
+ mean=mMean[id];
+ rms=mRMS[id];
+ led_calibrations.add(new EcalLedCalibration(cid,mean,rms,color));
+ }
+
+ int collectionId = -1;
+
+ try {
+ collectionId = conditionsManager.getCollectionId(led_calibrations, "loaded by EcalLedSequenceMonitor");
+ } catch (Exception e) {
+ System.out.println("Got exception on uploadToDB "+ e);
+ throw new RuntimeException(e);
+ }
+ System.err.println("CollectionID: "+collectionId);
+ led_calibrations.insert();
+ ConditionsRecord conditionsRecord = new ConditionsRecord(
+ led_calibrations.getCollectionId(), runNumber, runNumberMax, dbTableName, dbTableName,
+ "Generated by LedAnalysis from Run #"+runNumber, dbTag);
+ conditionsRecord.setConnection(conditionsManager.getConnection());
+ tableMetaData = conditionsManager.findTableMetaData("conditions");
+ conditionsRecord.setTableMetaData(tableMetaData);
+ conditionsRecord.insert();
+
+ System.out.println("Upload to DB done");
+ }
+
+ private void uploadToElog(){
+ String path,exe,command,imgpath;
+ path="/home/hpsrun/LedSequenceData";
+ exe=path+"/doElog.csh";
+ imgpath=path+"/screenshots/"+runNumber+".png";
+
+ File f=new File(path);
+ if (!f.exists()){
+ System.err.println("LedMonitoringSequence:: wrong path");
+ return;
+ }
+ if (pPlotter2==null){
+ System.err.println("LedMonitoringSquence:: no plotter");
+ return;
+ }
+ try{
+ pPlotter2.writeToFile(imgpath);
+ }
+ catch(Exception e){
+ System.err.println("Exception "+e);
+ }
+ File f1=new File(exe);
+ if (!f1.exists()){
+ System.err.println("LedMonitoringSequence:: no script!");
+ return;
+ }
+ command=exe+" "+imgpath;
+ try{
+ System.out.println("LedMonitoringSequence:: try this command: "+command);
+ Runtime.getRuntime().exec(command);
+ }
+ catch(Exception e){
+ System.err.println("Exception "+e);
+ }
+ }
+
+
+ private void drawProfiles(int ledID,int driverID){
+
+ int m_column,m_row,m_ledID,m_chID,m_ID,m_driverID;
+
+ m_ledID = ledID;
+ m_driverID = driverID;
+ m_chID = 0;
+
+
+ if (m_driverID<=3) m_chID = LedTopMapInverted.get(ledID);
+ else m_chID = LedBotMapInverted.get(ledID);
+
+ m_column=findChannel(m_chID).getX();
+ m_row=findChannel(m_chID).getY();
+ m_ID=EcalMonitoringUtilities.getHistoIDFromRowColumn(m_row, m_column);
+ /*
System.out.println("Going to draw LED id "+m_ledID+" X= "+m_column+" Y= "+m_row+" driver: "+m_driverID);
System.out.println("Ch_ID: "+m_chID);
System.out.println("Histo ID:"+m_ID);
System.out.println("Events: "+iTuple.get(m_ID).rows());
- */
- hChargeVsEvn.get(m_driverID).reset();
- hChargeVsEvn.get(m_driverID).setTitle("Driver_"+m_driverID+" Led_"+ledID);
- IEvaluator evaluatorX = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fEvn");
- IEvaluator evaluatorY = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fCharge");
-
- iTuple.get(m_ID).project(hChargeVsEvn.get(m_driverID),evaluatorX,evaluatorY);
-
- pPlotter.region(m_driverID).clear();
- pPlotter.region(m_driverID).plot(hChargeVsEvn.get(m_driverID));
- pPlotter.region(m_driverID).refresh();
-
- }
-
- private EcalChannel findChannel(int channel_id) {
- return ecalConditions.getChannelCollection().findChannel(channel_id);
- }
-
-
- private void askUploadToDBDialog(){
- m_ret=LedColor.UNKNOWN;
-
- okButtonRed = new JButton("Yes, red");
- okButtonBlue = new JButton("Yes, blue");
- cancelButton = new JButton("Cancel");
- labelString = "<html> Update conditions to DB <br> for run: <br> "+runNumber+" - "+runNumberMax+" <br> ???? <br> "
- + "Use the monitoring app to look at the map<br>"
- + "(Tab LED sequence)<br>"
- +"Reply in 60 seconds<br>"+"</html>";
- label = new JLabel( labelString);
-
- frame = new JFrame("Upload to DB?");
- frame.setSize(500,250);
- panel = new JPanel();
- frame.add(panel);
-
-
- // dialog = new JDialog((JFrame)null, "User selection");
- // dialog.setSize(200,200);
- // dialog.setLayout(new FlowLayout());
- // dialog.add(label);
- // dialog.add(cancelButton);
- // dialog.add(okButton);
- // dialog.setVisible(true);
- //dialog.pack();
- panel.add(label);
- panel.add(cancelButton);
- panel.add(okButtonBlue);
- panel.add(okButtonRed);
-
-
- frame.setVisible(true);
- okButtonBlue.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent event)
- {
- m_ret=LedColor.BLUE;
- frame.dispose();
- synchronized(modalMonitor)
- {
- System.out.println("Blue pressed");
- modalMonitor.notify();
- }
- }
- }
- );
- okButtonRed.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent event)
- {
- m_ret=LedColor.RED;
- frame.dispose();
- synchronized(modalMonitor)
- {
- System.out.println("Red pressed");
- modalMonitor.notify();
- }
- }
- }
- );
-
- cancelButton.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent event)
- {
- m_ret=LedColor.UNKNOWN;
- frame.dispose();
- synchronized(modalMonitor)
- {
- System.out.println("Cancel pressed");
- modalMonitor.notify();
- }
- }
- }
- );
-
- System.out.println("askUploadDB done");
- }
+ */
+ hChargeVsEvn.get(m_driverID).reset();
+ hChargeVsEvn.get(m_driverID).setTitle("Driver_"+m_driverID+" Led_"+ledID);
+ IEvaluator evaluatorX = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fEvn");
+ IEvaluator evaluatorY = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fCharge");
+
+ iTuple.get(m_ID).project(hChargeVsEvn.get(m_driverID),evaluatorX,evaluatorY);
+
+ pPlotter.region(m_driverID).clear();
+ pPlotter.region(m_driverID).plot(hChargeVsEvn.get(m_driverID));
+ pPlotter.region(m_driverID).refresh();
+
+ }
+
+ private EcalChannel findChannel(int channel_id) {
+ return ecalConditions.getChannelCollection().findChannel(channel_id);
+ }
+
+
+ private void askUploadToDBDialog(){
+ m_ret=LedColor.UNKNOWN;
+
+ okButtonRed = new JButton("Yes, red");
+ okButtonBlue = new JButton("Yes, blue");
+ cancelButton = new JButton("Cancel");
+ labelString = "<html> Update conditions to DB <br> for run: <br> "+runNumber+" - "+runNumberMax+" <br> ???? <br> "
+ + "Use the monitoring app to look at the map<br>"
+ + "(Tab LED sequence)<br>"
+ +"Reply in 60 seconds<br>"+"</html>";
+ label = new JLabel( labelString);
+
+ frame = new JFrame("Upload to DB?");
+ frame.setSize(500,250);
+ panel = new JPanel();
+ frame.add(panel);
+
+
+ // dialog = new JDialog((JFrame)null, "User selection");
+ // dialog.setSize(200,200);
+ // dialog.setLayout(new FlowLayout());
+ // dialog.add(label);
+ // dialog.add(cancelButton);
+ // dialog.add(okButton);
+ // dialog.setVisible(true);
+ //dialog.pack();
+ panel.add(label);
+ panel.add(cancelButton);
+ panel.add(okButtonBlue);
+ panel.add(okButtonRed);
+
+
+ frame.setVisible(true);
+ okButtonBlue.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent event)
+ {
+ m_ret=LedColor.BLUE;
+ frame.dispose();
+ synchronized(modalMonitor)
+ {
+ System.out.println("Blue pressed");
+ modalMonitor.notify();
+ }
+ }
+ }
+ );
+ okButtonRed.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent event)
+ {
+ m_ret=LedColor.RED;
+ frame.dispose();
+ synchronized(modalMonitor)
+ {
+ System.out.println("Red pressed");
+ modalMonitor.notify();
+ }
+ }
+ }
+ );
+
+ cancelButton.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent event)
+ {
+ m_ret=LedColor.UNKNOWN;
+ frame.dispose();
+ synchronized(modalMonitor)
+ {
+ System.out.println("Cancel pressed");
+ modalMonitor.notify();
+ }
+ }
+ }
+ );
+
+ System.out.println("askUploadDB done");
+ }
}
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalPedestalViewer.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalPedestalViewer.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalPedestalViewer.java Wed Mar 9 11:43:24 2016
@@ -33,80 +33,80 @@
// this has to match the one in EcalPedstalCalculator:
private String histoNameFormat = "Ecal/Pedestals/Mode7/ped%03d";
- private AIDA aida = AIDA.defaultInstance();
- private IPlotter plotter;
- private IPlotterFactory plotterFactory;
- private IPlotterStyle pstyle;
- private PEventViewer viewer;
+ private AIDA aida = AIDA.defaultInstance();
+ private IPlotter plotter;
+ private IPlotterFactory plotterFactory;
+ private IPlotterStyle pstyle;
+ private PEventViewer viewer;
- static final String[] colors={"red","black","blue","green","yellow","pink","cyan","magenta","brown"};
- static final int nRows=3;
- static final int nColumns=3;
- private int theRegion=0;
-
- @Override
- public void detectorChanged(Detector detector) {
- plotterFactory = aida.analysisFactory().createPlotterFactory("ECal Peds");
- plotter = plotterFactory.create("ECal Peds");
- plotter.createRegions(nColumns,nRows);
- // Plot dummmy histos, else null plotter regions later:
- for (int ii=0; ii<nColumns*nRows; ii++) {
- plotter.region(ii).plot(aida.histogram1D("ASDF"+ii,100,11e9,11e11));
- }
- plotter.show();
-
- pstyle=plotterFactory.createPlotterStyle();
- pstyle.xAxisStyle().labelStyle().setBold(true);
- pstyle.yAxisStyle().labelStyle().setBold(true);
- pstyle.xAxisStyle().tickLabelStyle().setBold(true);
- pstyle.yAxisStyle().tickLabelStyle().setBold(true);
- pstyle.xAxisStyle().lineStyle().setColor("black");
- pstyle.yAxisStyle().lineStyle().setColor("black");
- pstyle.xAxisStyle().lineStyle().setThickness(2);
- pstyle.yAxisStyle().lineStyle().setThickness(2);
- pstyle.dataStyle().errorBarStyle().setThickness(0);
- pstyle.legendBoxStyle().setVisible(false);
- }
-
- @Override
- public void startOfData() {
- File config = new File("ecal-mapping-config.csv");
- if(config.exists() && config.canRead()) {
- try { viewer = new PDataEventViewer(config.getAbsolutePath()); }
- catch (IOException e) { viewer = new PEventViewer(); }
- } else { viewer = new PEventViewer(); }
- viewer.addCrystalListener(this);
- viewer.setVisible(true);
- }
-
- @Override
- public void actionPerformed(ActionEvent ae) { }
-
- @Override
- public void crystalActivated(CrystalEvent e) { }
-
- @Override
- public void crystalDeactivated(CrystalEvent e) { }
+ static final String[] colors={"red","black","blue","green","yellow","pink","cyan","magenta","brown"};
+ static final int nRows=3;
+ static final int nColumns=3;
+ private int theRegion=0;
+
+ @Override
+ public void detectorChanged(Detector detector) {
+ plotterFactory = aida.analysisFactory().createPlotterFactory("ECal Peds");
+ plotter = plotterFactory.create("ECal Peds");
+ plotter.createRegions(nColumns,nRows);
+ // Plot dummmy histos, else null plotter regions later:
+ for (int ii=0; ii<nColumns*nRows; ii++) {
+ plotter.region(ii).plot(aida.histogram1D("ASDF"+ii,100,11e9,11e11));
+ }
+ plotter.show();
+
+ pstyle=plotterFactory.createPlotterStyle();
+ pstyle.xAxisStyle().labelStyle().setBold(true);
+ pstyle.yAxisStyle().labelStyle().setBold(true);
+ pstyle.xAxisStyle().tickLabelStyle().setBold(true);
+ pstyle.yAxisStyle().tickLabelStyle().setBold(true);
+ pstyle.xAxisStyle().lineStyle().setColor("black");
+ pstyle.yAxisStyle().lineStyle().setColor("black");
+ pstyle.xAxisStyle().lineStyle().setThickness(2);
+ pstyle.yAxisStyle().lineStyle().setThickness(2);
+ pstyle.dataStyle().errorBarStyle().setThickness(0);
+ pstyle.legendBoxStyle().setVisible(false);
+ }
+
+ @Override
+ public void startOfData() {
+ File config = new File("ecal-mapping-config.csv");
+ if(config.exists() && config.canRead()) {
+ try { viewer = new PDataEventViewer(config.getAbsolutePath()); }
+ catch (IOException e) { viewer = new PEventViewer(); }
+ } else { viewer = new PEventViewer(); }
+ viewer.addCrystalListener(this);
+ viewer.setVisible(true);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent ae) { }
+
+ @Override
+ public void crystalActivated(CrystalEvent e) { }
+
+ @Override
+ public void crystalDeactivated(CrystalEvent e) { }
- @Override
- public void crystalClicked(CrystalEvent e) {
- aida.tree().cd("/");
- Point ecalPoint = Viewer.toEcalPoint(e.getCrystalID());
- if (ecalPoint.x == 0 || ecalPoint.y == 0) return;
- if (EcalMonitoringUtilities.isInHole(ecalPoint.y,ecalPoint.x)) return;
- final int cid=EcalMonitoringUtilities.getChannelIdFromRowColumn(ecalPoint.y,ecalPoint.x);
- IHistogram1D hist=aida.histogram1D(String.format(histoNameFormat,cid));
- if (hist==null) {
- System.err.println("Running the Driver?");
- } else {
- hist.setTitle(String.format("(%d,%d)",ecalPoint.x,ecalPoint.y));
+ @Override
+ public void crystalClicked(CrystalEvent e) {
+ aida.tree().cd("/");
+ Point ecalPoint = Viewer.toEcalPoint(e.getCrystalID());
+ if (ecalPoint.x == 0 || ecalPoint.y == 0) return;
+ if (EcalMonitoringUtilities.isInHole(ecalPoint.y,ecalPoint.x)) return;
+ final int cid=EcalMonitoringUtilities.getChannelIdFromRowColumn(ecalPoint.y,ecalPoint.x);
+ IHistogram1D hist=aida.histogram1D(String.format(histoNameFormat,cid));
+ if (hist==null) {
+ System.err.println("Running the Driver?");
+ } else {
+ hist.setTitle(String.format("(%d,%d)",ecalPoint.x,ecalPoint.y));
pstyle.dataStyle().lineStyle().setParameter("color", colors[theRegion%colors.length]);
- plotter.region(theRegion).clear();
- plotter.region(theRegion).plot(hist,pstyle);
- plotter.region(theRegion).refresh();
- theRegion=(theRegion+1)%(nColumns*nRows);
- }
- }
-
-
+ plotter.region(theRegion).clear();
+ plotter.region(theRegion).plot(hist,pstyle);
+ plotter.region(theRegion).refresh();
+ theRegion=(theRegion+1)%(nColumns*nRows);
+ }
+ }
+
+
}
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalWindowPlotsXY.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalWindowPlotsXY.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalWindowPlotsXY.java Wed Mar 9 11:43:24 2016
@@ -93,7 +93,7 @@
}
private void setupPlots() {
- System.out.println("ECAL WINDOW PLOTS START");
+ System.out.println("ECAL WINDOW PLOTS START");
//if (plotterFrame != null) {
// plotterFrame.dispose();
//}
@@ -108,8 +108,8 @@
IPlotterStyle pstyle = plotter.style();
pstyle.dataStyle().errorBarStyle().setVisible(false);
plotter.createRegions(1,1);
- windowPlot1 = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : dummy", 1, -0.5, 1 - 0.5);
- plotter.region(0).plot(windowPlot1);
+ windowPlot1 = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : dummy", 1, -0.5, 1 - 0.5);
+ plotter.region(0).plot(windowPlot1);
plotter.show();
}
@@ -126,15 +126,15 @@
dec.setID(hit.getCellID());
int x = dec.getValue("ix");
int y = dec.getValue("iy");
-// System.out.println("got hit: x= " + x + ", y= " + y);
+// System.out.println("got hit: x= " + x + ", y= " + y);
if (isFirst) {
- System.out.println("FIRST!!!");
+ System.out.println("FIRST!!!");
isFirst=false;
- window=hit.getADCValues().length;
- windowPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Window Mode Data", window, -0.5, window - 0.5);
- plotter.region(0).clear();
- plotter.region(0).plot(windowPlot);
- plotter.region(0).refresh();
+ window=hit.getADCValues().length;
+ windowPlot = aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Window Mode Data", window, -0.5, window - 0.5);
+ plotter.region(0).clear();
+ plotter.region(0).plot(windowPlot);
+ plotter.region(0).refresh();
}
if (testX && x != plotX) {
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTablePanel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTablePanel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTablePanel.java Wed Mar 9 11:43:24 2016
@@ -26,224 +26,224 @@
* @see DiagnosticUpdatable
*/
public abstract class AbstractTablePanel extends JPanel implements DiagnosticUpdatable {
- // Static variables.
- private static final long serialVersionUID = 0L;
- public static final int ORIENTATION_HORIZONTAL = 0;
- public static final int ORIENTATION_VERTICAL = 1;
-
- // Components.
- private JLabel localHeader;
- private JLabel globalHeader;
- protected final JTable localTable;
- protected final JTable globalTable;
-
- // Component parameters.
- private boolean horizontal = true;
- private Dimension userPrefSize = null;
- private Dimension defaultPrefSize = new Dimension(0, 0);
-
- /**
- * Instantiates an <code>AbstractTablePanel</code>.
- * @param args Arguments to be used when generating the panel tables.
- */
- public AbstractTablePanel(Object... args) {
- // Initialize the tables.
- JTable[] tables = initializeTables(args);
- localTable = tables[0];
- globalTable = tables[1];
- add(globalTable);
- add(localTable);
-
- // Set the panels to their null starting values.
- updatePanel(null, null);
-
- // Define the panel layout.
- setLayout(null);
-
- // Create header labels for the tables.
- localHeader = new JLabel("Instantaneous Statistics");
- localHeader.setHorizontalAlignment(JLabel.CENTER);
- add(localHeader);
-
- globalHeader = new JLabel("Run Statistics");
- globalHeader.setHorizontalAlignment(JLabel.CENTER);
- add(globalHeader);
-
- // Track when the component changes size and reposition the
- // components accordingly.
- addComponentListener(new ComponentAdapter() {
- @Override
- public void componentResized(ComponentEvent e) { positionComponents(); }
- });
-
- // Define the component preferred size.
- defaultPrefSize.width = localTable.getPreferredSize().width +
- ComponentUtils.hinternal + globalTable.getPreferredSize().width;
- defaultPrefSize.height = localTable.getPreferredSize().height +
- ComponentUtils.vinternal + globalTable.getPreferredSize().height;
- }
-
- @Override
- public Dimension getPreferredSize() {
- // If there is a user-specified preferred size, return that.
- if(userPrefSize == null) { return defaultPrefSize; }
-
- // Otherwise, return the default calculated preferred size.
- else { return userPrefSize; }
- }
-
- @Override
- public void setBackground(Color bg) {
- // Set the base component background.
- super.setBackground(bg);
-
- // If the components have been initialized, pass the background
- // color change to them as appropriate. Note that the tables
- // will always retain the same background color.
- if(localTable != null) {
- // Set the header backgrounds.
- localHeader.setBackground(bg);
- globalHeader.setBackground(bg);
- }
- }
-
- @Override
- public void setFont(Font font) {
- // Set the base component font.
- super.setFont(font);
-
- // If the components have been initialized, pass the font change
- // to them as appropriate.
- if(localTable != null) {
- // Set the table fonts.
- localTable.setFont(font);
- globalTable.setFont(font);
-
- // Set the header fonts.
- Font headerFont = font.deriveFont(Font.BOLD, (float) Math.ceil(font.getSize2D() * 1.3));
- localHeader.setFont(headerFont);
- globalHeader.setFont(headerFont);
- }
- }
-
- @Override
- public void setForeground(Color fg) {
- // Set the base component foreground.
- super.setForeground(fg);
-
- // If the components have been initialized, pass the foreground
- // color change to them as appropriate. Note that the tables
- // will always retain the same foreground color.
- if(localTable != null) {
- // Set the header foregrounds.
- localHeader.setForeground(fg);
- globalHeader.setForeground(fg);
- }
- }
-
- /**
- * Sets the orientation of components on the panel.
- * @param orientation - The orientation identifier. Identifiers can
- * be obtained as static variables from the within the root object
- * <code>AbstractTable</code>.
- */
- public void setOrientation(int orientation) {
- if(orientation == ORIENTATION_HORIZONTAL) {
- if(!horizontal) {
- horizontal = true;
- positionComponents();
- }
- } else if(orientation == ORIENTATION_VERTICAL) {
- if(horizontal) {
- horizontal = false;
- positionComponents();
- }
- } else {
- throw new IllegalArgumentException("Invalid orienation identifier.");
- }
- }
-
- @Override
- public void setPreferredSize(Dimension preferredSize) {
- userPrefSize = preferredSize;
- }
-
- /**
- * Generates the two tables that are used by the component. This
- * must return an array of size two.
- * @param args - Any arguments that should be passed to the method
- * for generating tables.
- * @return Returns an array of size two, where the first index must
- * contain the local table and the second index the global table.
- */
- protected abstract JTable[] initializeTables(Object... args);
-
- /**
- * Repositions the components to the correct places on the parent
- * <code>JPanel</code>. This should be run whenever the panel
- * changes size.
- */
- private void positionComponents() {
- // Do not update if the components have not been initialized.
- if(localHeader == null) { return; }
-
- // If the components should be position horizontally...
- if(horizontal) {
- // The local components get the left half of the panel and the
- // global components the right. Find half of the panel width,
- // accounting for the internal spacing. This is an internal
- // component, so it does not employ additional spacing between
- // itself and the parent component's edges.
- int compWidth = (getWidth() - 10) / 2;
-
- // If there is any width remaining, it goes to the spacing.
- int horizontal = ComponentUtils.hinternal + (getWidth() - 10) % 2;
-
- // Place the header labels. These are given their preferred
- // height. Note that this means a very small panel may cut off
- // some of the components. First, get the preferred height of
- // the label with the larger preferred height. These should be
- // the same thing, but just in case...
- int labelHeight = localHeader.getPreferredSize().height;
- if(labelHeight < globalHeader.getPreferredSize().height) {
- labelHeight = globalHeader.getPreferredSize().height;
- }
-
- // Set the label sizes and positions.
- localHeader.setBounds(0, 0, compWidth, labelHeight);
- globalHeader.setLocation(ComponentUtils.getNextX(localHeader, horizontal), 0);
- globalHeader.setSize(compWidth, labelHeight);
-
- // The tables go under their respective labels and should fill
- // the remainder of the label height.
- int tableY = ComponentUtils.getNextY(localHeader, ComponentUtils.vinternal);
- localTable.setBounds(0, tableY, compWidth, localTable.getPreferredSize().height);
- globalTable.setBounds(globalHeader.getX(), tableY, compWidth, globalTable.getPreferredSize().height);
- }
-
- // Otherwise, position them vertically.
- else {
- // Place the header labels. These are given their preferred
- // height. Note that this means a very small panel may cut off
- // some of the components. First, get the preferred height of
- // the label with the larger preferred height. These should be
- // the same thing, but just in case...
- int labelHeight = localHeader.getPreferredSize().height;
- if(labelHeight < globalHeader.getPreferredSize().height) {
- labelHeight = globalHeader.getPreferredSize().height;
- }
-
- // The local components go first, taking up the entire upper
- // width of the panel.
- localHeader.setBounds(0, 0, getWidth(), labelHeight);
- localTable.setBounds(0, ComponentUtils.getNextY(localHeader, ComponentUtils.vinternal),
- getWidth(), localTable.getPreferredSize().height);
-
- // The global components go immediately below.
- globalHeader.setBounds(0, ComponentUtils.getNextY(localTable, ComponentUtils.vinternal),
- getWidth(), labelHeight);
- globalTable.setBounds(0, ComponentUtils.getNextY(globalHeader, ComponentUtils.vinternal),
- getWidth(), globalTable.getPreferredSize().height);
- }
- }
+ // Static variables.
+ private static final long serialVersionUID = 0L;
+ public static final int ORIENTATION_HORIZONTAL = 0;
+ public static final int ORIENTATION_VERTICAL = 1;
+
+ // Components.
+ private JLabel localHeader;
+ private JLabel globalHeader;
+ protected final JTable localTable;
+ protected final JTable globalTable;
+
+ // Component parameters.
+ private boolean horizontal = true;
+ private Dimension userPrefSize = null;
+ private Dimension defaultPrefSize = new Dimension(0, 0);
+
+ /**
+ * Instantiates an <code>AbstractTablePanel</code>.
+ * @param args Arguments to be used when generating the panel tables.
+ */
+ public AbstractTablePanel(Object... args) {
+ // Initialize the tables.
+ JTable[] tables = initializeTables(args);
+ localTable = tables[0];
+ globalTable = tables[1];
+ add(globalTable);
+ add(localTable);
+
+ // Set the panels to their null starting values.
+ updatePanel(null, null);
+
+ // Define the panel layout.
+ setLayout(null);
+
+ // Create header labels for the tables.
+ localHeader = new JLabel("Instantaneous Statistics");
+ localHeader.setHorizontalAlignment(JLabel.CENTER);
+ add(localHeader);
+
+ globalHeader = new JLabel("Run Statistics");
+ globalHeader.setHorizontalAlignment(JLabel.CENTER);
+ add(globalHeader);
+
+ // Track when the component changes size and reposition the
+ // components accordingly.
+ addComponentListener(new ComponentAdapter() {
+ @Override
+ public void componentResized(ComponentEvent e) { positionComponents(); }
+ });
+
+ // Define the component preferred size.
+ defaultPrefSize.width = localTable.getPreferredSize().width +
+ ComponentUtils.hinternal + globalTable.getPreferredSize().width;
+ defaultPrefSize.height = localTable.getPreferredSize().height +
+ ComponentUtils.vinternal + globalTable.getPreferredSize().height;
+ }
+
+ @Override
+ public Dimension getPreferredSize() {
+ // If there is a user-specified preferred size, return that.
+ if(userPrefSize == null) { return defaultPrefSize; }
+
+ // Otherwise, return the default calculated preferred size.
+ else { return userPrefSize; }
+ }
+
+ @Override
+ public void setBackground(Color bg) {
+ // Set the base component background.
+ super.setBackground(bg);
+
+ // If the components have been initialized, pass the background
+ // color change to them as appropriate. Note that the tables
+ // will always retain the same background color.
+ if(localTable != null) {
+ // Set the header backgrounds.
+ localHeader.setBackground(bg);
+ globalHeader.setBackground(bg);
+ }
+ }
+
+ @Override
+ public void setFont(Font font) {
+ // Set the base component font.
+ super.setFont(font);
+
+ // If the components have been initialized, pass the font change
+ // to them as appropriate.
+ if(localTable != null) {
+ // Set the table fonts.
+ localTable.setFont(font);
+ globalTable.setFont(font);
+
+ // Set the header fonts.
+ Font headerFont = font.deriveFont(Font.BOLD, (float) Math.ceil(font.getSize2D() * 1.3));
+ localHeader.setFont(headerFont);
+ globalHeader.setFont(headerFont);
+ }
+ }
+
+ @Override
+ public void setForeground(Color fg) {
+ // Set the base component foreground.
+ super.setForeground(fg);
+
+ // If the components have been initialized, pass the foreground
+ // color change to them as appropriate. Note that the tables
+ // will always retain the same foreground color.
+ if(localTable != null) {
+ // Set the header foregrounds.
+ localHeader.setForeground(fg);
+ globalHeader.setForeground(fg);
+ }
+ }
+
+ /**
+ * Sets the orientation of components on the panel.
+ * @param orientation - The orientation identifier. Identifiers can
+ * be obtained as static variables from the within the root object
+ * <code>AbstractTable</code>.
+ */
+ public void setOrientation(int orientation) {
+ if(orientation == ORIENTATION_HORIZONTAL) {
+ if(!horizontal) {
+ horizontal = true;
+ positionComponents();
+ }
+ } else if(orientation == ORIENTATION_VERTICAL) {
+ if(horizontal) {
+ horizontal = false;
+ positionComponents();
+ }
+ } else {
+ throw new IllegalArgumentException("Invalid orienation identifier.");
+ }
+ }
+
+ @Override
+ public void setPreferredSize(Dimension preferredSize) {
+ userPrefSize = preferredSize;
+ }
+
+ /**
+ * Generates the two tables that are used by the component. This
+ * must return an array of size two.
+ * @param args - Any arguments that should be passed to the method
+ * for generating tables.
+ * @return Returns an array of size two, where the first index must
+ * contain the local table and the second index the global table.
+ */
+ protected abstract JTable[] initializeTables(Object... args);
+
+ /**
+ * Repositions the components to the correct places on the parent
+ * <code>JPanel</code>. This should be run whenever the panel
+ * changes size.
+ */
+ private void positionComponents() {
+ // Do not update if the components have not been initialized.
+ if(localHeader == null) { return; }
+
+ // If the components should be position horizontally...
+ if(horizontal) {
+ // The local components get the left half of the panel and the
+ // global components the right. Find half of the panel width,
+ // accounting for the internal spacing. This is an internal
+ // component, so it does not employ additional spacing between
+ // itself and the parent component's edges.
+ int compWidth = (getWidth() - 10) / 2;
+
+ // If there is any width remaining, it goes to the spacing.
+ int horizontal = ComponentUtils.hinternal + (getWidth() - 10) % 2;
+
+ // Place the header labels. These are given their preferred
+ // height. Note that this means a very small panel may cut off
+ // some of the components. First, get the preferred height of
+ // the label with the larger preferred height. These should be
+ // the same thing, but just in case...
+ int labelHeight = localHeader.getPreferredSize().height;
+ if(labelHeight < globalHeader.getPreferredSize().height) {
+ labelHeight = globalHeader.getPreferredSize().height;
+ }
+
+ // Set the label sizes and positions.
+ localHeader.setBounds(0, 0, compWidth, labelHeight);
+ globalHeader.setLocation(ComponentUtils.getNextX(localHeader, horizontal), 0);
+ globalHeader.setSize(compWidth, labelHeight);
+
+ // The tables go under their respective labels and should fill
+ // the remainder of the label height.
+ int tableY = ComponentUtils.getNextY(localHeader, ComponentUtils.vinternal);
+ localTable.setBounds(0, tableY, compWidth, localTable.getPreferredSize().height);
+ globalTable.setBounds(globalHeader.getX(), tableY, compWidth, globalTable.getPreferredSize().height);
+ }
+
+ // Otherwise, position them vertically.
+ else {
+ // Place the header labels. These are given their preferred
+ // height. Note that this means a very small panel may cut off
+ // some of the components. First, get the preferred height of
+ // the label with the larger preferred height. These should be
+ // the same thing, but just in case...
+ int labelHeight = localHeader.getPreferredSize().height;
+ if(labelHeight < globalHeader.getPreferredSize().height) {
+ labelHeight = globalHeader.getPreferredSize().height;
+ }
+
+ // The local components go first, taking up the entire upper
+ // width of the panel.
+ localHeader.setBounds(0, 0, getWidth(), labelHeight);
+ localTable.setBounds(0, ComponentUtils.getNextY(localHeader, ComponentUtils.vinternal),
+ getWidth(), localTable.getPreferredSize().height);
+
+ // The global components go immediately below.
+ globalHeader.setBounds(0, ComponentUtils.getNextY(localTable, ComponentUtils.vinternal),
+ getWidth(), labelHeight);
+ globalTable.setBounds(0, ComponentUtils.getNextY(globalHeader, ComponentUtils.vinternal),
+ getWidth(), globalTable.getPreferredSize().height);
+ }
+ }
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTriggerTablePanel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTriggerTablePanel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTriggerTablePanel.java Wed Mar 9 11:43:24 2016
@@ -14,189 +14,189 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public abstract class AbstractTriggerTablePanel extends AbstractTwoColumnTablePanel {
- // Static variables.
- private static final long serialVersionUID = 0L;
-
- // Internal variables.
- private final int numCuts;
- private final boolean singles;
-
- // Store reference index variables for local and run values.
- private static final int GLOBAL = 0;
- private static final int LOCAL = 1;
-
- // Reference variables to the default table rows.
- protected static final int ROW_RECON_COUNT = 0;
- protected static final int ROW_SSP_SIM_COUNT = 1;
- protected static final int ROW_SSP_BANK_COUNT = 2;
- protected static final int ROW_SSP_EFFICIENCY = 3;
- protected static final int ROW_TRIGGER_EFFICIENCY = 4;
- protected static final int ROW_EMPTY_SPACE = 5;
- protected static final int ROW_CUT_FAILS_TITLE = 6;
- protected static final int ROW_FIRST_TRIGGER_CUT = 7;
-
- /**
- * Instantiates an <code>AbstractTriggerTablePanel</code> with the
- * indicated cut names.
- * @param cutNames
- */
- public AbstractTriggerTablePanel(String[] cutNames, boolean isSingles) {
- // Instantiate the superclass.
- super(makeTitle(cutNames));
-
- // Store the number of cuts.
- numCuts = cutNames.length;
- updatePanel(null, null);
-
- // Store whether this is a singles or pair trigger panel.
- singles = isSingles;
- }
-
- @Override
- public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot) {
- // If the snapshot is null, all values should be "N/A."
- if(runSnapshot == null || localSnapshot == null) {
- // Output cluster count data.
- String scalerNullValue = "---";
- setLocalRowValue(ROW_RECON_COUNT, scalerNullValue);
- setLocalRowValue(ROW_SSP_SIM_COUNT, scalerNullValue);
- setLocalRowValue(ROW_SSP_BANK_COUNT, scalerNullValue);
- setGlobalRowValue(ROW_RECON_COUNT, scalerNullValue);
- setGlobalRowValue(ROW_SSP_SIM_COUNT, scalerNullValue);
- setGlobalRowValue(ROW_SSP_BANK_COUNT, scalerNullValue);
-
- // Output the tracked statistical data.
- String percentNullValue = "--- / --- (---%)";
- setLocalRowValue(ROW_SSP_EFFICIENCY, percentNullValue);
- setLocalRowValue(ROW_TRIGGER_EFFICIENCY, percentNullValue);
- setGlobalRowValue(ROW_SSP_EFFICIENCY, percentNullValue);
- setGlobalRowValue(ROW_TRIGGER_EFFICIENCY, percentNullValue);
-
- int ROW_SECOND_TRIGGER_CUT = ROW_FIRST_TRIGGER_CUT + numCuts + 2;
- for(int cutRow = 0; cutRow < numCuts; cutRow++) {
- setLocalRowValue(cutRow + ROW_FIRST_TRIGGER_CUT, percentNullValue);
- setLocalRowValue(cutRow + ROW_SECOND_TRIGGER_CUT, percentNullValue);
- setGlobalRowValue(cutRow + ROW_FIRST_TRIGGER_CUT, percentNullValue);
- setGlobalRowValue(cutRow + ROW_SECOND_TRIGGER_CUT, percentNullValue);
- }
- } else {
- // Get the local and run trigger statistics from the snapshot.
- DiagnosticSnapshot[] stat = new DiagnosticSnapshot[2];
- stat[GLOBAL] = runSnapshot;
- stat[LOCAL] = localSnapshot;
-
- // Get the appropriate trigger statistical modules.
- TriggerStatModule[][] triggerStats = new TriggerStatModule[2][2];
- if(singles) {
- triggerStats[LOCAL][0] = stat[LOCAL].getSingles0Stats();
- triggerStats[LOCAL][1] = stat[LOCAL].getSingles1Stats();
- triggerStats[GLOBAL][0] = stat[GLOBAL].getSingles0Stats();
- triggerStats[GLOBAL][1] = stat[GLOBAL].getSingles1Stats();
- } else {
- triggerStats[LOCAL][0] = stat[LOCAL].getPair0Stats();
- triggerStats[LOCAL][1] = stat[LOCAL].getPair1Stats();
- triggerStats[GLOBAL][0] = stat[GLOBAL].getPair0Stats();
- triggerStats[GLOBAL][1] = stat[GLOBAL].getPair1Stats();
- }
-
- // Get the total number of triggers of each type.
- int[] sspSimTriggers = new int[2];
- int[] sspBankTriggers = new int[2];
- int[] reconSimTriggers = new int[2];
- int[] sspMatchedTriggers = new int[2];
- int[] reconMatchedTriggers = new int[2];
-
- for(int i = 0; i < 2; i++) {
- sspSimTriggers[i] = triggerStats[i][0].getSSPSimulatedTriggers() + triggerStats[i][1].getSSPSimulatedTriggers();
- sspBankTriggers[i] = triggerStats[i][0].getReportedTriggers() + triggerStats[i][1].getReportedTriggers();
- reconSimTriggers[i] = triggerStats[i][0].getReconSimulatedTriggers() + triggerStats[i][1].getReconSimulatedTriggers();
- sspMatchedTriggers[i] = triggerStats[i][0].getMatchedSSPSimulatedTriggers() + triggerStats[i][1].getMatchedSSPSimulatedTriggers();
- reconMatchedTriggers[i] = triggerStats[i][0].getMatchedReconSimulatedTriggers() + triggerStats[i][1].getMatchedReconSimulatedTriggers();
- }
-
- // Determine the most spaces needed to display the values.
- // Get the largest number of digits in any of the values.
- int mostDigits = ComponentUtils.max(reconSimTriggers[LOCAL], sspBankTriggers[LOCAL],
- sspSimTriggers[LOCAL], reconSimTriggers[GLOBAL], sspBankTriggers[GLOBAL],
- sspSimTriggers[GLOBAL]);
- int spaces = ComponentUtils.getDigits(mostDigits);
-
- // Update the single-value counters.
- String countFormat = "%" + spaces + "d";
- setLocalRowValue(ROW_RECON_COUNT, String.format(countFormat, reconSimTriggers[LOCAL]));
- setLocalRowValue(ROW_SSP_SIM_COUNT, String.format(countFormat, sspSimTriggers[LOCAL]));
- setLocalRowValue(ROW_SSP_BANK_COUNT, String.format(countFormat, sspBankTriggers[LOCAL]));
- setGlobalRowValue(ROW_RECON_COUNT, String.format(countFormat, reconSimTriggers[GLOBAL]));
- setGlobalRowValue(ROW_SSP_SIM_COUNT, String.format(countFormat, sspSimTriggers[GLOBAL]));
- setGlobalRowValue(ROW_SSP_BANK_COUNT, String.format(countFormat, sspBankTriggers[GLOBAL]));
-
- // Update the percentage counters.
- String percentFormat = "%" + spaces + "d / %" + spaces + "d (%7.3f)";
-
- setLocalRowValue(ROW_SSP_EFFICIENCY, String.format(percentFormat, sspMatchedTriggers[LOCAL],
- sspSimTriggers[LOCAL], (100.0 * sspMatchedTriggers[LOCAL] / sspSimTriggers[LOCAL])));
- setLocalRowValue(ROW_TRIGGER_EFFICIENCY, String.format(percentFormat, reconMatchedTriggers[LOCAL],
- reconSimTriggers[LOCAL], (100.0 * reconMatchedTriggers[LOCAL] / reconSimTriggers[LOCAL])));
- setGlobalRowValue(ROW_SSP_EFFICIENCY, String.format(percentFormat, sspMatchedTriggers[GLOBAL],
- sspSimTriggers[GLOBAL], (100.0 * sspMatchedTriggers[GLOBAL] / sspSimTriggers[GLOBAL])));
- setGlobalRowValue(ROW_TRIGGER_EFFICIENCY, String.format(percentFormat, reconMatchedTriggers[GLOBAL],
- reconSimTriggers[GLOBAL], (100.0 * reconMatchedTriggers[GLOBAL] / reconSimTriggers[GLOBAL])));
-
- int ROW_SECOND_TRIGGER_CUT = ROW_FIRST_TRIGGER_CUT + numCuts + 2;
- for(int cutRow = 0; cutRow < numCuts; cutRow++) {
- setLocalRowValue(cutRow + ROW_FIRST_TRIGGER_CUT, String.format(percentFormat,
- triggerStats[LOCAL][0].getSSPCutFailures(cutRow), triggerStats[LOCAL][0].getSSPSimulatedTriggers(),
- (100.0 * triggerStats[LOCAL][0].getSSPCutFailures(cutRow) / triggerStats[LOCAL][0].getSSPSimulatedTriggers())));
- setLocalRowValue(cutRow + ROW_SECOND_TRIGGER_CUT, String.format(percentFormat,
- triggerStats[LOCAL][1].getSSPCutFailures(cutRow), triggerStats[LOCAL][1].getSSPSimulatedTriggers(),
- (100.0 * triggerStats[LOCAL][1].getSSPCutFailures(cutRow) / triggerStats[LOCAL][1].getSSPSimulatedTriggers())));
- setGlobalRowValue(cutRow + ROW_FIRST_TRIGGER_CUT, String.format(percentFormat,
- triggerStats[GLOBAL][0].getSSPCutFailures(cutRow), triggerStats[GLOBAL][0].getSSPSimulatedTriggers(),
- (100.0 * triggerStats[GLOBAL][0].getSSPCutFailures(cutRow) / triggerStats[GLOBAL][0].getSSPSimulatedTriggers())));
- setGlobalRowValue(cutRow + ROW_SECOND_TRIGGER_CUT, String.format(percentFormat,
- triggerStats[GLOBAL][1].getSSPCutFailures(cutRow), triggerStats[GLOBAL][1].getSSPSimulatedTriggers(),
- (100.0 * triggerStats[GLOBAL][1].getSSPCutFailures(cutRow) / triggerStats[GLOBAL][1].getSSPSimulatedTriggers())));
- }
- }
- }
-
- /**
- * Creates the table appropriate table rows from the argument cut
- * names.
- * @param cutNames - An array containing the names of the cuts to
- * display.
- * @return Returns an array with the default table rows merged in
- * with the provided cut names.
- */
- private static final String[] makeTitle(String[] cutNames) {
- // Make a new array to hold all the text.
- String[] mergedArray = new String[cutNames.length + cutNames.length + 9];
-
- // Define the default trigger headers.
- mergedArray[0] = "Recon Triggers:";
- mergedArray[1] = "SSP Sim Triggers:";
- mergedArray[2] = "SSP Bank Triggers:";
- mergedArray[3] = "SSP Efficiency:";
- mergedArray[4] = "Trigger Efficiency:";
- mergedArray[5] = "";
- mergedArray[6] = "First Trigger Cut Failures";
-
- // Insert the cut names for the first trigger.
- for(int cutIndex = 0; cutIndex < cutNames.length; cutIndex++) {
- mergedArray[7 + cutIndex] = cutNames[cutIndex];
- }
-
- // Insert the header for the second trigger cut names.
- int startIndex = 7 + cutNames.length;
- mergedArray[startIndex] = "";
- mergedArray[startIndex + 1] = "Second Trigger Cut Failures";
-
- // Insert the next set of cut names.
- for(int cutIndex = 0; cutIndex < cutNames.length; cutIndex++) {
- mergedArray[startIndex + 2 + cutIndex] = cutNames[cutIndex];
- }
-
- // Return the resultant array.
- return mergedArray;
- }
+ // Static variables.
+ private static final long serialVersionUID = 0L;
+
+ // Internal variables.
+ private final int numCuts;
+ private final boolean singles;
+
+ // Store reference index variables for local and run values.
+ private static final int GLOBAL = 0;
+ private static final int LOCAL = 1;
+
+ // Reference variables to the default table rows.
+ protected static final int ROW_RECON_COUNT = 0;
+ protected static final int ROW_SSP_SIM_COUNT = 1;
+ protected static final int ROW_SSP_BANK_COUNT = 2;
+ protected static final int ROW_SSP_EFFICIENCY = 3;
+ protected static final int ROW_TRIGGER_EFFICIENCY = 4;
+ protected static final int ROW_EMPTY_SPACE = 5;
+ protected static final int ROW_CUT_FAILS_TITLE = 6;
+ protected static final int ROW_FIRST_TRIGGER_CUT = 7;
+
+ /**
+ * Instantiates an <code>AbstractTriggerTablePanel</code> with the
+ * indicated cut names.
+ * @param cutNames
+ */
+ public AbstractTriggerTablePanel(String[] cutNames, boolean isSingles) {
+ // Instantiate the superclass.
+ super(makeTitle(cutNames));
+
+ // Store the number of cuts.
+ numCuts = cutNames.length;
+ updatePanel(null, null);
+
+ // Store whether this is a singles or pair trigger panel.
+ singles = isSingles;
+ }
+
+ @Override
+ public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot) {
+ // If the snapshot is null, all values should be "N/A."
+ if(runSnapshot == null || localSnapshot == null) {
+ // Output cluster count data.
+ String scalerNullValue = "---";
+ setLocalRowValue(ROW_RECON_COUNT, scalerNullValue);
+ setLocalRowValue(ROW_SSP_SIM_COUNT, scalerNullValue);
+ setLocalRowValue(ROW_SSP_BANK_COUNT, scalerNullValue);
+ setGlobalRowValue(ROW_RECON_COUNT, scalerNullValue);
+ setGlobalRowValue(ROW_SSP_SIM_COUNT, scalerNullValue);
+ setGlobalRowValue(ROW_SSP_BANK_COUNT, scalerNullValue);
+
+ // Output the tracked statistical data.
+ String percentNullValue = "--- / --- (---%)";
+ setLocalRowValue(ROW_SSP_EFFICIENCY, percentNullValue);
+ setLocalRowValue(ROW_TRIGGER_EFFICIENCY, percentNullValue);
+ setGlobalRowValue(ROW_SSP_EFFICIENCY, percentNullValue);
+ setGlobalRowValue(ROW_TRIGGER_EFFICIENCY, percentNullValue);
+
+ int ROW_SECOND_TRIGGER_CUT = ROW_FIRST_TRIGGER_CUT + numCuts + 2;
+ for(int cutRow = 0; cutRow < numCuts; cutRow++) {
+ setLocalRowValue(cutRow + ROW_FIRST_TRIGGER_CUT, percentNullValue);
+ setLocalRowValue(cutRow + ROW_SECOND_TRIGGER_CUT, percentNullValue);
+ setGlobalRowValue(cutRow + ROW_FIRST_TRIGGER_CUT, percentNullValue);
+ setGlobalRowValue(cutRow + ROW_SECOND_TRIGGER_CUT, percentNullValue);
+ }
+ } else {
+ // Get the local and run trigger statistics from the snapshot.
+ DiagnosticSnapshot[] stat = new DiagnosticSnapshot[2];
+ stat[GLOBAL] = runSnapshot;
+ stat[LOCAL] = localSnapshot;
+
+ // Get the appropriate trigger statistical modules.
+ TriggerStatModule[][] triggerStats = new TriggerStatModule[2][2];
+ if(singles) {
+ triggerStats[LOCAL][0] = stat[LOCAL].getSingles0Stats();
+ triggerStats[LOCAL][1] = stat[LOCAL].getSingles1Stats();
+ triggerStats[GLOBAL][0] = stat[GLOBAL].getSingles0Stats();
+ triggerStats[GLOBAL][1] = stat[GLOBAL].getSingles1Stats();
+ } else {
+ triggerStats[LOCAL][0] = stat[LOCAL].getPair0Stats();
+ triggerStats[LOCAL][1] = stat[LOCAL].getPair1Stats();
+ triggerStats[GLOBAL][0] = stat[GLOBAL].getPair0Stats();
+ triggerStats[GLOBAL][1] = stat[GLOBAL].getPair1Stats();
+ }
+
+ // Get the total number of triggers of each type.
+ int[] sspSimTriggers = new int[2];
+ int[] sspBankTriggers = new int[2];
+ int[] reconSimTriggers = new int[2];
+ int[] sspMatchedTriggers = new int[2];
+ int[] reconMatchedTriggers = new int[2];
+
+ for(int i = 0; i < 2; i++) {
+ sspSimTriggers[i] = triggerStats[i][0].getSSPSimulatedTriggers() + triggerStats[i][1].getSSPSimulatedTriggers();
+ sspBankTriggers[i] = triggerStats[i][0].getReportedTriggers() + triggerStats[i][1].getReportedTriggers();
+ reconSimTriggers[i] = triggerStats[i][0].getReconSimulatedTriggers() + triggerStats[i][1].getReconSimulatedTriggers();
+ sspMatchedTriggers[i] = triggerStats[i][0].getMatchedSSPSimulatedTriggers() + triggerStats[i][1].getMatchedSSPSimulatedTriggers();
+ reconMatchedTriggers[i] = triggerStats[i][0].getMatchedReconSimulatedTriggers() + triggerStats[i][1].getMatchedReconSimulatedTriggers();
+ }
+
+ // Determine the most spaces needed to display the values.
+ // Get the largest number of digits in any of the values.
+ int mostDigits = ComponentUtils.max(reconSimTriggers[LOCAL], sspBankTriggers[LOCAL],
+ sspSimTriggers[LOCAL], reconSimTriggers[GLOBAL], sspBankTriggers[GLOBAL],
+ sspSimTriggers[GLOBAL]);
+ int spaces = ComponentUtils.getDigits(mostDigits);
+
+ // Update the single-value counters.
+ String countFormat = "%" + spaces + "d";
+ setLocalRowValue(ROW_RECON_COUNT, String.format(countFormat, reconSimTriggers[LOCAL]));
+ setLocalRowValue(ROW_SSP_SIM_COUNT, String.format(countFormat, sspSimTriggers[LOCAL]));
+ setLocalRowValue(ROW_SSP_BANK_COUNT, String.format(countFormat, sspBankTriggers[LOCAL]));
+ setGlobalRowValue(ROW_RECON_COUNT, String.format(countFormat, reconSimTriggers[GLOBAL]));
+ setGlobalRowValue(ROW_SSP_SIM_COUNT, String.format(countFormat, sspSimTriggers[GLOBAL]));
+ setGlobalRowValue(ROW_SSP_BANK_COUNT, String.format(countFormat, sspBankTriggers[GLOBAL]));
+
+ // Update the percentage counters.
+ String percentFormat = "%" + spaces + "d / %" + spaces + "d (%7.3f)";
+
+ setLocalRowValue(ROW_SSP_EFFICIENCY, String.format(percentFormat, sspMatchedTriggers[LOCAL],
+ sspSimTriggers[LOCAL], (100.0 * sspMatchedTriggers[LOCAL] / sspSimTriggers[LOCAL])));
+ setLocalRowValue(ROW_TRIGGER_EFFICIENCY, String.format(percentFormat, reconMatchedTriggers[LOCAL],
+ reconSimTriggers[LOCAL], (100.0 * reconMatchedTriggers[LOCAL] / reconSimTriggers[LOCAL])));
+ setGlobalRowValue(ROW_SSP_EFFICIENCY, String.format(percentFormat, sspMatchedTriggers[GLOBAL],
+ sspSimTriggers[GLOBAL], (100.0 * sspMatchedTriggers[GLOBAL] / sspSimTriggers[GLOBAL])));
+ setGlobalRowValue(ROW_TRIGGER_EFFICIENCY, String.format(percentFormat, reconMatchedTriggers[GLOBAL],
+ reconSimTriggers[GLOBAL], (100.0 * reconMatchedTriggers[GLOBAL] / reconSimTriggers[GLOBAL])));
+
+ int ROW_SECOND_TRIGGER_CUT = ROW_FIRST_TRIGGER_CUT + numCuts + 2;
+ for(int cutRow = 0; cutRow < numCuts; cutRow++) {
+ setLocalRowValue(cutRow + ROW_FIRST_TRIGGER_CUT, String.format(percentFormat,
+ triggerStats[LOCAL][0].getSSPCutFailures(cutRow), triggerStats[LOCAL][0].getSSPSimulatedTriggers(),
+ (100.0 * triggerStats[LOCAL][0].getSSPCutFailures(cutRow) / triggerStats[LOCAL][0].getSSPSimulatedTriggers())));
+ setLocalRowValue(cutRow + ROW_SECOND_TRIGGER_CUT, String.format(percentFormat,
+ triggerStats[LOCAL][1].getSSPCutFailures(cutRow), triggerStats[LOCAL][1].getSSPSimulatedTriggers(),
+ (100.0 * triggerStats[LOCAL][1].getSSPCutFailures(cutRow) / triggerStats[LOCAL][1].getSSPSimulatedTriggers())));
+ setGlobalRowValue(cutRow + ROW_FIRST_TRIGGER_CUT, String.format(percentFormat,
+ triggerStats[GLOBAL][0].getSSPCutFailures(cutRow), triggerStats[GLOBAL][0].getSSPSimulatedTriggers(),
+ (100.0 * triggerStats[GLOBAL][0].getSSPCutFailures(cutRow) / triggerStats[GLOBAL][0].getSSPSimulatedTriggers())));
+ setGlobalRowValue(cutRow + ROW_SECOND_TRIGGER_CUT, String.format(percentFormat,
+ triggerStats[GLOBAL][1].getSSPCutFailures(cutRow), triggerStats[GLOBAL][1].getSSPSimulatedTriggers(),
+ (100.0 * triggerStats[GLOBAL][1].getSSPCutFailures(cutRow) / triggerStats[GLOBAL][1].getSSPSimulatedTriggers())));
+ }
+ }
+ }
+
+ /**
+ * Creates the table appropriate table rows from the argument cut
+ * names.
+ * @param cutNames - An array containing the names of the cuts to
+ * display.
+ * @return Returns an array with the default table rows merged in
+ * with the provided cut names.
+ */
+ private static final String[] makeTitle(String[] cutNames) {
+ // Make a new array to hold all the text.
+ String[] mergedArray = new String[cutNames.length + cutNames.length + 9];
+
+ // Define the default trigger headers.
+ mergedArray[0] = "Recon Triggers:";
+ mergedArray[1] = "SSP Sim Triggers:";
+ mergedArray[2] = "SSP Bank Triggers:";
+ mergedArray[3] = "SSP Efficiency:";
+ mergedArray[4] = "Trigger Efficiency:";
+ mergedArray[5] = "";
+ mergedArray[6] = "First Trigger Cut Failures";
+
+ // Insert the cut names for the first trigger.
+ for(int cutIndex = 0; cutIndex < cutNames.length; cutIndex++) {
+ mergedArray[7 + cutIndex] = cutNames[cutIndex];
+ }
+
+ // Insert the header for the second trigger cut names.
+ int startIndex = 7 + cutNames.length;
+ mergedArray[startIndex] = "";
+ mergedArray[startIndex + 1] = "Second Trigger Cut Failures";
+
+ // Insert the next set of cut names.
+ for(int cutIndex = 0; cutIndex < cutNames.length; cutIndex++) {
+ mergedArray[startIndex + 2 + cutIndex] = cutNames[cutIndex];
+ }
+
+ // Return the resultant array.
+ return mergedArray;
+ }
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTwoColumnTablePanel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTwoColumnTablePanel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/AbstractTwoColumnTablePanel.java Wed Mar 9 11:43:24 2016
@@ -16,94 +16,94 @@
* @see AbstractTablePanel
*/
public abstract class AbstractTwoColumnTablePanel extends AbstractTablePanel {
- // Static variables.
- private static final long serialVersionUID = 0L;
-
- // Table models.
- private TableTextModel localModel;
- private TableTextModel globalModel;
-
- // Table model mappings.
- private static final int COL_TITLE = 0;
- private static final int COL_VALUE = 1;
-
- /**
- * Instantiates an <code>AbstractTwoColumnTablePanel</code> object
- * with the indicated row names.
- * @param rowNames - The names of the rows.
- */
- public AbstractTwoColumnTablePanel(String[] rowNames) {
- super((Object[]) rowNames);
- }
-
- @Override
- protected JTable[] initializeTables(Object... args) {
- // The arguments should be a string array.
- if(!(args instanceof String[])) {
- throw new IllegalArgumentException("Row names must be strings!");
- }
- String[] rowNames = (String[]) args;
-
- // Initialize the table models. They should have two columns
- // (one for values and one for headers) and a number of rows
- // equal to the number of row names.
- localModel = new TableTextModel(rowNames.length, 2);
- globalModel = new TableTextModel(rowNames.length, 2);
-
- // Initialize the titles.
- for(int i = 0; i < rowNames.length; i++) {
- localModel.setValueAt(rowNames[i], i, COL_TITLE);
- globalModel.setValueAt(rowNames[i], i, COL_TITLE);
- }
- updatePanel(null, null);
-
- // Make a cell renderer.
- DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
- centerRenderer.setHorizontalAlignment(JLabel.CENTER);
-
- // Create JTable objects to display the data.
- JTable localTable = new JTable(localModel);
- localTable.setRowSelectionAllowed(false);
- localTable.setColumnSelectionAllowed(false);
- localTable.setCellSelectionEnabled(false);
- localTable.setShowVerticalLines(false);
- localTable.getColumnModel().getColumn(0).setMinWidth(200);
- localTable.getColumnModel().getColumn(0).setMaxWidth(200);
- localTable.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
- localTable.setFont(new Font("monospaced", localTable.getFont().getStyle(), localTable.getFont().getSize()));
-
- JTable globalTable = new JTable(globalModel);
- globalTable.setRowSelectionAllowed(false);
- globalTable.setColumnSelectionAllowed(false);
- globalTable.setCellSelectionEnabled(false);
- globalTable.setShowVerticalLines(false);
- globalTable.getColumnModel().getColumn(0).setMinWidth(200);
- globalTable.getColumnModel().getColumn(0).setMaxWidth(200);
- globalTable.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
- globalTable.setFont(new Font("monospaced", globalTable.getFont().getStyle(), globalTable.getFont().getSize()));
-
- // Return the two tables.
- return new JTable[] { localTable, globalTable };
- }
-
- /**
- * Sets the value of the indicated row for the global statistical
- * table.
- * @param rowIndex - The row.
- * @param value - The new value.
- */
- protected void setGlobalRowValue(int rowIndex, String value) {
- globalModel.setValueAt(value, rowIndex, COL_VALUE);
- }
-
- /**
- * Sets the value of the indicated row for the local statistical
- * table.
- * @param rowIndex - The row.
- * @param value - The new value.
- */
- protected void setLocalRowValue(int rowIndex, String value) {
- localModel.setValueAt(value, rowIndex, COL_VALUE);
- }
+ // Static variables.
+ private static final long serialVersionUID = 0L;
+
+ // Table models.
+ private TableTextModel localModel;
+ private TableTextModel globalModel;
+
+ // Table model mappings.
+ private static final int COL_TITLE = 0;
+ private static final int COL_VALUE = 1;
+
+ /**
+ * Instantiates an <code>AbstractTwoColumnTablePanel</code> object
+ * with the indicated row names.
+ * @param rowNames - The names of the rows.
+ */
+ public AbstractTwoColumnTablePanel(String[] rowNames) {
+ super((Object[]) rowNames);
+ }
+
+ @Override
+ protected JTable[] initializeTables(Object... args) {
+ // The arguments should be a string array.
+ if(!(args instanceof String[])) {
+ throw new IllegalArgumentException("Row names must be strings!");
+ }
+ String[] rowNames = (String[]) args;
+
+ // Initialize the table models. They should have two columns
+ // (one for values and one for headers) and a number of rows
+ // equal to the number of row names.
+ localModel = new TableTextModel(rowNames.length, 2);
+ globalModel = new TableTextModel(rowNames.length, 2);
+
+ // Initialize the titles.
+ for(int i = 0; i < rowNames.length; i++) {
+ localModel.setValueAt(rowNames[i], i, COL_TITLE);
+ globalModel.setValueAt(rowNames[i], i, COL_TITLE);
+ }
+ updatePanel(null, null);
+
+ // Make a cell renderer.
+ DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
+ centerRenderer.setHorizontalAlignment(JLabel.CENTER);
+
+ // Create JTable objects to display the data.
+ JTable localTable = new JTable(localModel);
+ localTable.setRowSelectionAllowed(false);
+ localTable.setColumnSelectionAllowed(false);
+ localTable.setCellSelectionEnabled(false);
+ localTable.setShowVerticalLines(false);
+ localTable.getColumnModel().getColumn(0).setMinWidth(200);
+ localTable.getColumnModel().getColumn(0).setMaxWidth(200);
+ localTable.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
+ localTable.setFont(new Font("monospaced", localTable.getFont().getStyle(), localTable.getFont().getSize()));
+
+ JTable globalTable = new JTable(globalModel);
+ globalTable.setRowSelectionAllowed(false);
+ globalTable.setColumnSelectionAllowed(false);
+ globalTable.setCellSelectionEnabled(false);
+ globalTable.setShowVerticalLines(false);
+ globalTable.getColumnModel().getColumn(0).setMinWidth(200);
+ globalTable.getColumnModel().getColumn(0).setMaxWidth(200);
+ globalTable.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);
+ globalTable.setFont(new Font("monospaced", globalTable.getFont().getStyle(), globalTable.getFont().getSize()));
+
+ // Return the two tables.
+ return new JTable[] { localTable, globalTable };
+ }
+
+ /**
+ * Sets the value of the indicated row for the global statistical
+ * table.
+ * @param rowIndex - The row.
+ * @param value - The new value.
+ */
+ protected void setGlobalRowValue(int rowIndex, String value) {
+ globalModel.setValueAt(value, rowIndex, COL_VALUE);
+ }
+
+ /**
+ * Sets the value of the indicated row for the local statistical
+ * table.
+ * @param rowIndex - The row.
+ * @param value - The new value.
+ */
+ protected void setLocalRowValue(int rowIndex, String value) {
+ localModel.setValueAt(value, rowIndex, COL_VALUE);
+ }
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ClusterTablePanel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ClusterTablePanel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ClusterTablePanel.java Wed Mar 9 11:43:24 2016
@@ -14,99 +14,99 @@
* @see AbstractTablePanel
*/
public class ClusterTablePanel extends AbstractTwoColumnTablePanel {
- // Static variables.
- private static final long serialVersionUID = 0L;
- private static final String[] TABLE_TITLES = { "Recon Clusters", "SSP Clusters", "Matched Clusters",
- "Failed (Position)", "Failed (Energy)", "Failed (Hit Count)" };
-
- // Table model mappings.
- private static final int ROW_RECON_COUNT = 0;
- private static final int ROW_SSP_COUNT = 1;
- private static final int ROW_MATCHED = 2;
- private static final int ROW_FAILED_POSITION = 3;
- private static final int ROW_FAILED_ENERGY = 4;
- private static final int ROW_FAILED_HIT_COUNT = 5;
-
- /**
- * Instantiate a new <code>ClusterTablePanel</code>.
- */
- public ClusterTablePanel() { super(TABLE_TITLES); }
-
- @Override
- public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot) {
- // If the snapshot is null, all values should be "N/A."
- if(localSnapshot == null || runSnapshot == null) {
- // Output cluster count data.
- String scalerNullValue = "---";
- setLocalRowValue(ROW_RECON_COUNT, scalerNullValue);
- setLocalRowValue(ROW_SSP_COUNT, scalerNullValue);
- setGlobalRowValue(ROW_RECON_COUNT, scalerNullValue);
- setGlobalRowValue(ROW_SSP_COUNT, scalerNullValue);
-
- // Output the tracked statistical data.
- String percentNullValue = "--- / --- (---%)";
- setLocalRowValue(ROW_MATCHED, percentNullValue);
- setLocalRowValue(ROW_FAILED_POSITION, percentNullValue);
- setLocalRowValue(ROW_FAILED_ENERGY, percentNullValue);
- setLocalRowValue(ROW_FAILED_HIT_COUNT, percentNullValue);
- setGlobalRowValue(ROW_MATCHED, percentNullValue);
- setGlobalRowValue(ROW_FAILED_POSITION, percentNullValue);
- setGlobalRowValue(ROW_FAILED_ENERGY, percentNullValue);
- setGlobalRowValue(ROW_FAILED_HIT_COUNT, percentNullValue);
- }
-
- // Otherwise, populate the table with the diagnostic data.
- else {
- // Get the cluster statistical banks.
- ClusterStatModule lstat = localSnapshot.getClusterStats();
- ClusterStatModule rstat = runSnapshot.getClusterStats();
-
- // Get the largest number of digits in any of the values.
- int mostDigits = ComponentUtils.max(lstat.getReconClusterCount(), lstat.getSSPClusterCount(), lstat.getMatches(),
- lstat.getPositionFailures(), lstat.getEnergyFailures(), lstat.getHitCountFailures(),
- rstat.getReconClusterCount(), rstat.getSSPClusterCount(), rstat.getMatches(),
- rstat.getPositionFailures(), rstat.getEnergyFailures(), rstat.getHitCountFailures());
- int spaces = ComponentUtils.getDigits(mostDigits);
-
- // Put the number of reconstructed and SSP clusters into
- // the tables.
- int[] clusterValue = {
- lstat.getReconClusterCount(),
- lstat.getSSPClusterCount(),
- rstat.getReconClusterCount(),
- rstat.getSSPClusterCount()
- };
- String countFormat = "%" + spaces + "d";
- setLocalRowValue(ROW_RECON_COUNT, String.format(countFormat, clusterValue[0]));
- setLocalRowValue(ROW_SSP_COUNT, String.format(countFormat, clusterValue[1]));
- setGlobalRowValue(ROW_RECON_COUNT, String.format(countFormat, clusterValue[2]));
- setGlobalRowValue(ROW_SSP_COUNT, String.format(countFormat, clusterValue[3]));
-
- // Output the tracked statistical data.
- int total;
- String percentFormat = "%" + spaces + "d / %" + spaces + "d (%7.3f)";
- int[] statValue = {
- lstat.getMatches(),
- lstat.getPositionFailures(),
- lstat.getEnergyFailures(),
- lstat.getHitCountFailures(),
- rstat.getMatches(),
- rstat.getPositionFailures(),
- rstat.getEnergyFailures(),
- rstat.getHitCountFailures()
- };
-
- total = lstat.getReconClusterCount();
- setLocalRowValue(ROW_MATCHED, String.format(percentFormat, statValue[0], total, 100.0 * statValue[0] / total));
- setLocalRowValue(ROW_FAILED_POSITION, String.format(percentFormat, statValue[1], total, 100.0 * statValue[1] / total));
- setLocalRowValue(ROW_FAILED_ENERGY, String.format(percentFormat, statValue[2], total, 100.0 * statValue[2] / total));
- setLocalRowValue(ROW_FAILED_HIT_COUNT, String.format(percentFormat, statValue[3], total, 100.0 * statValue[3] / total));
-
- total = rstat.getReconClusterCount();
- setGlobalRowValue(ROW_MATCHED, String.format(percentFormat, statValue[4], total, 100.0 * statValue[4] / total));
- setGlobalRowValue(ROW_FAILED_POSITION, String.format(percentFormat, statValue[5], total, 100.0 * statValue[5] / total));
- setGlobalRowValue(ROW_FAILED_ENERGY, String.format(percentFormat, statValue[6], total, 100.0 * statValue[6] / total));
- setGlobalRowValue(ROW_FAILED_HIT_COUNT, String.format(percentFormat, statValue[7], total, 100.0 * statValue[7] / total));
- }
- }
+ // Static variables.
+ private static final long serialVersionUID = 0L;
+ private static final String[] TABLE_TITLES = { "Recon Clusters", "SSP Clusters", "Matched Clusters",
+ "Failed (Position)", "Failed (Energy)", "Failed (Hit Count)" };
+
+ // Table model mappings.
+ private static final int ROW_RECON_COUNT = 0;
+ private static final int ROW_SSP_COUNT = 1;
+ private static final int ROW_MATCHED = 2;
+ private static final int ROW_FAILED_POSITION = 3;
+ private static final int ROW_FAILED_ENERGY = 4;
+ private static final int ROW_FAILED_HIT_COUNT = 5;
+
+ /**
+ * Instantiate a new <code>ClusterTablePanel</code>.
+ */
+ public ClusterTablePanel() { super(TABLE_TITLES); }
+
+ @Override
+ public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot) {
+ // If the snapshot is null, all values should be "N/A."
+ if(localSnapshot == null || runSnapshot == null) {
+ // Output cluster count data.
+ String scalerNullValue = "---";
+ setLocalRowValue(ROW_RECON_COUNT, scalerNullValue);
+ setLocalRowValue(ROW_SSP_COUNT, scalerNullValue);
+ setGlobalRowValue(ROW_RECON_COUNT, scalerNullValue);
+ setGlobalRowValue(ROW_SSP_COUNT, scalerNullValue);
+
+ // Output the tracked statistical data.
+ String percentNullValue = "--- / --- (---%)";
+ setLocalRowValue(ROW_MATCHED, percentNullValue);
+ setLocalRowValue(ROW_FAILED_POSITION, percentNullValue);
+ setLocalRowValue(ROW_FAILED_ENERGY, percentNullValue);
+ setLocalRowValue(ROW_FAILED_HIT_COUNT, percentNullValue);
+ setGlobalRowValue(ROW_MATCHED, percentNullValue);
+ setGlobalRowValue(ROW_FAILED_POSITION, percentNullValue);
+ setGlobalRowValue(ROW_FAILED_ENERGY, percentNullValue);
+ setGlobalRowValue(ROW_FAILED_HIT_COUNT, percentNullValue);
+ }
+
+ // Otherwise, populate the table with the diagnostic data.
+ else {
+ // Get the cluster statistical banks.
+ ClusterStatModule lstat = localSnapshot.getClusterStats();
+ ClusterStatModule rstat = runSnapshot.getClusterStats();
+
+ // Get the largest number of digits in any of the values.
+ int mostDigits = ComponentUtils.max(lstat.getReconClusterCount(), lstat.getSSPClusterCount(), lstat.getMatches(),
+ lstat.getPositionFailures(), lstat.getEnergyFailures(), lstat.getHitCountFailures(),
+ rstat.getReconClusterCount(), rstat.getSSPClusterCount(), rstat.getMatches(),
+ rstat.getPositionFailures(), rstat.getEnergyFailures(), rstat.getHitCountFailures());
+ int spaces = ComponentUtils.getDigits(mostDigits);
+
+ // Put the number of reconstructed and SSP clusters into
+ // the tables.
+ int[] clusterValue = {
+ lstat.getReconClusterCount(),
+ lstat.getSSPClusterCount(),
+ rstat.getReconClusterCount(),
+ rstat.getSSPClusterCount()
+ };
+ String countFormat = "%" + spaces + "d";
+ setLocalRowValue(ROW_RECON_COUNT, String.format(countFormat, clusterValue[0]));
+ setLocalRowValue(ROW_SSP_COUNT, String.format(countFormat, clusterValue[1]));
+ setGlobalRowValue(ROW_RECON_COUNT, String.format(countFormat, clusterValue[2]));
+ setGlobalRowValue(ROW_SSP_COUNT, String.format(countFormat, clusterValue[3]));
+
+ // Output the tracked statistical data.
+ int total;
+ String percentFormat = "%" + spaces + "d / %" + spaces + "d (%7.3f)";
+ int[] statValue = {
+ lstat.getMatches(),
+ lstat.getPositionFailures(),
+ lstat.getEnergyFailures(),
+ lstat.getHitCountFailures(),
+ rstat.getMatches(),
+ rstat.getPositionFailures(),
+ rstat.getEnergyFailures(),
+ rstat.getHitCountFailures()
+ };
+
+ total = lstat.getReconClusterCount();
+ setLocalRowValue(ROW_MATCHED, String.format(percentFormat, statValue[0], total, 100.0 * statValue[0] / total));
+ setLocalRowValue(ROW_FAILED_POSITION, String.format(percentFormat, statValue[1], total, 100.0 * statValue[1] / total));
+ setLocalRowValue(ROW_FAILED_ENERGY, String.format(percentFormat, statValue[2], total, 100.0 * statValue[2] / total));
+ setLocalRowValue(ROW_FAILED_HIT_COUNT, String.format(percentFormat, statValue[3], total, 100.0 * statValue[3] / total));
+
+ total = rstat.getReconClusterCount();
+ setGlobalRowValue(ROW_MATCHED, String.format(percentFormat, statValue[4], total, 100.0 * statValue[4] / total));
+ setGlobalRowValue(ROW_FAILED_POSITION, String.format(percentFormat, statValue[5], total, 100.0 * statValue[5] / total));
+ setGlobalRowValue(ROW_FAILED_ENERGY, String.format(percentFormat, statValue[6], total, 100.0 * statValue[6] / total));
+ setGlobalRowValue(ROW_FAILED_HIT_COUNT, String.format(percentFormat, statValue[7], total, 100.0 * statValue[7] / total));
+ }
+ }
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ComponentUtils.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ComponentUtils.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ComponentUtils.java Wed Mar 9 11:43:24 2016
@@ -11,116 +11,116 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class ComponentUtils {
- /** The default spacing used between a horizontal edge of one
- * component and the horizontal edge of another. */
- static final int hinternal = 10;
- /** The default spacing used between a vertical edge of one
- * component and the vertical edge of another. */
- static final int vinternal = 10;
- /** The default spacing used between a horizontal edge of one
- * component and the edge of its parent component. */
- static final int hexternal = 0;
- /** The default spacing used between a vertical edge of one
- * component and the edge of its parent component. */
- static final int vexternal = 0;
-
- /**
- * Gets a <code>String</code> composed of a number of instances of
- * character <code>c</code> equal to <code>number</code>.
- * @param c - The character to repeat.
- * @param number - The number of repetitions.
- * @return Returns the repeated character as a <code>String</code>.
- */
- public static final String getChars(char c, int number) {
- // Create a buffer to store the characters in.
- StringBuffer s = new StringBuffer();
-
- // Add the indicated number of instances.
- for(int i = 0; i < number; i++) {
- s.append(c);
- }
-
- // Return the string.
- return s.toString();
- }
-
- /**
- * Gets the number of digits in the base-10 String representation
- * of an integer primitive. Negative signs are not included in the
- * digit count.
- * @param value - The value of which to obtain the length.
- * @return Returns the number of digits in the String representation
- * of the argument value.
- */
- public static final int getDigits(int value) {
- return TriggerDiagnosticUtil.getDigits(value);
- }
-
- /**
- * Gets the maximum value from a list of values.
- * @param values - The values to compare.
- * @return Returns the largest of the argument values.
- * @throws IllegalArgumentException Occurs if no values are given.
- */
- public static final int max(int... values) throws IllegalArgumentException {
- // Throw an error if no arguments are provided.
- if(values == null || values.length == 0) {
- throw new IllegalArgumentException("Can not determine maximum value from a list of 0 values.");
- }
-
- // If there is only one value, return it.
- if(values.length == 1) { return values[0]; }
-
- // Otherwise, get the largest value.
- int largest = Integer.MIN_VALUE;
- for(int value : values) {
- if(value > largest) { largest = value; }
- }
-
- // Return the result.
- return largest;
- }
-
- /**
- * Gets the x-coordinate immediately to the right of the given
- * component.
- * @param c - The component of which to find the edge.
- * @return Returns the x-coordinate as an <code>int</code> value.
- */
- static final int getNextX(Component c) {
- return getNextX(c, 0);
- }
-
- /**
- * Gets the x-coordinate a given distance to the right edge of the
- * argument component.
- * @param c - The component of which to find the edge.
- * @param spacing - The additional spacing past the edge of the
- * component to add.
- * @return Returns the x-coordinate as an <code>int</code> value.
- */
- static final int getNextX(Component c, int spacing) {
- return c.getX() + c.getWidth() + spacing;
- }
-
- /**
- * Gets the y-coordinate immediately below the given component.
- * @param c - The component of which to find the edge.
- * @return Returns the y-coordinate as an <code>int</code> value.
- */
- static final int getNextY(Component c) {
- return getNextY(c, 0);
- }
-
- /**
- * Gets the y-coordinate a given distance below the bottom edge
- * of the argument component.
- * @param c - The component of which to find the edge.
- * @param spacing - The additional spacing past the edge of the
- * component to add.
- * @return Returns the y-coordinate as an <code>int</code> value.
- */
- static final int getNextY(Component c, int spacing) {
- return c.getY() + c.getHeight() + spacing;
- }
+ /** The default spacing used between a horizontal edge of one
+ * component and the horizontal edge of another. */
+ static final int hinternal = 10;
+ /** The default spacing used between a vertical edge of one
+ * component and the vertical edge of another. */
+ static final int vinternal = 10;
+ /** The default spacing used between a horizontal edge of one
+ * component and the edge of its parent component. */
+ static final int hexternal = 0;
+ /** The default spacing used between a vertical edge of one
+ * component and the edge of its parent component. */
+ static final int vexternal = 0;
+
+ /**
+ * Gets a <code>String</code> composed of a number of instances of
+ * character <code>c</code> equal to <code>number</code>.
+ * @param c - The character to repeat.
+ * @param number - The number of repetitions.
+ * @return Returns the repeated character as a <code>String</code>.
+ */
+ public static final String getChars(char c, int number) {
+ // Create a buffer to store the characters in.
+ StringBuffer s = new StringBuffer();
+
+ // Add the indicated number of instances.
+ for(int i = 0; i < number; i++) {
+ s.append(c);
+ }
+
+ // Return the string.
+ return s.toString();
+ }
+
+ /**
+ * Gets the number of digits in the base-10 String representation
+ * of an integer primitive. Negative signs are not included in the
+ * digit count.
+ * @param value - The value of which to obtain the length.
+ * @return Returns the number of digits in the String representation
+ * of the argument value.
+ */
+ public static final int getDigits(int value) {
+ return TriggerDiagnosticUtil.getDigits(value);
+ }
+
+ /**
+ * Gets the maximum value from a list of values.
+ * @param values - The values to compare.
+ * @return Returns the largest of the argument values.
+ * @throws IllegalArgumentException Occurs if no values are given.
+ */
+ public static final int max(int... values) throws IllegalArgumentException {
+ // Throw an error if no arguments are provided.
+ if(values == null || values.length == 0) {
+ throw new IllegalArgumentException("Can not determine maximum value from a list of 0 values.");
+ }
+
+ // If there is only one value, return it.
+ if(values.length == 1) { return values[0]; }
+
+ // Otherwise, get the largest value.
+ int largest = Integer.MIN_VALUE;
+ for(int value : values) {
+ if(value > largest) { largest = value; }
+ }
+
+ // Return the result.
+ return largest;
+ }
+
+ /**
+ * Gets the x-coordinate immediately to the right of the given
+ * component.
+ * @param c - The component of which to find the edge.
+ * @return Returns the x-coordinate as an <code>int</code> value.
+ */
+ static final int getNextX(Component c) {
+ return getNextX(c, 0);
+ }
+
+ /**
+ * Gets the x-coordinate a given distance to the right edge of the
+ * argument component.
+ * @param c - The component of which to find the edge.
+ * @param spacing - The additional spacing past the edge of the
+ * component to add.
+ * @return Returns the x-coordinate as an <code>int</code> value.
+ */
+ static final int getNextX(Component c, int spacing) {
+ return c.getX() + c.getWidth() + spacing;
+ }
+
+ /**
+ * Gets the y-coordinate immediately below the given component.
+ * @param c - The component of which to find the edge.
+ * @return Returns the y-coordinate as an <code>int</code> value.
+ */
+ static final int getNextY(Component c) {
+ return getNextY(c, 0);
+ }
+
+ /**
+ * Gets the y-coordinate a given distance below the bottom edge
+ * of the argument component.
+ * @param c - The component of which to find the edge.
+ * @param spacing - The additional spacing past the edge of the
+ * component to add.
+ * @return Returns the y-coordinate as an <code>int</code> value.
+ */
+ static final int getNextY(Component c, int spacing) {
+ return c.getY() + c.getHeight() + spacing;
+ }
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/DiagnosticUpdatable.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/DiagnosticUpdatable.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/DiagnosticUpdatable.java Wed Mar 9 11:43:24 2016
@@ -12,11 +12,11 @@
* @see DiagSnapshot
*/
public interface DiagnosticUpdatable {
- /**
- * Updates the object with information from the trigger diagnostic
- * snapshot in the argument.
- * @param snapshot - The snapshot containing information with which
- * to update the object.
- */
- public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot);
+ /**
+ * Updates the object with information from the trigger diagnostic
+ * snapshot in the argument.
+ * @param snapshot - The snapshot containing information with which
+ * to update the object.
+ */
+ public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot);
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/EfficiencyTablePanel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/EfficiencyTablePanel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/EfficiencyTablePanel.java Wed Mar 9 11:43:24 2016
@@ -11,200 +11,200 @@
import org.hps.analysis.trigger.util.ComponentUtils;
public class EfficiencyTablePanel extends AbstractTablePanel implements DiagnosticUpdatable {
- // Static variables.
- private static final long serialVersionUID = 0L;
-
- // Table models.
- private TableTextModel localModel;
- private TableTextModel globalModel;
-
- // Column/row reference variables.
- private static final int ROWS = 7;
- private static final int COLUMNS = 6;
- /* private static final int COL_HEADER = 0;
- private static final int COL_SINGLES_0 = 1;
- private static final int COL_SINGLES_1 = 2;
- private static final int COL_PAIR_0 = 3;
- private static final int COL_PAIR_1 = 4; */
- private static final int COL_COUNT = 5;
- /* private static final int ROW_HEADER = 0;
- private static final int ROW_PULSER = 1;
- private static final int ROW_COSMIC = 2;
- private static final int ROW_SINGLES_0 = 3;
- private static final int ROW_SINGLES_1 = 4;
- private static final int ROW_PAIR_0 = 5;
- private static final int ROW_PAIR_1 = 6; */
-
- // Global/local reference variables.
- private static final int GLOBAL = 0;
- private static final int LOCAL = 1;
-
- // Trigger type reference variables.
- private static final int TYPE_SINGLES_0 = TriggerStatModule.SINGLES_0;
- private static final int TYPE_SINGLES_1 = TriggerStatModule.SINGLES_1;
- private static final int TYPE_PAIR_0 = TriggerStatModule.PAIR_0;
- private static final int TYPE_PAIR_1 = TriggerStatModule.PAIR_1;
-
- // Column/row header names.
- private static final String[] COL_NAMES = {
- "", "Singles 0", "Singles 1", "Pair 0", "Pair 1", "Count"
- };
- private static final String[] ROW_NAMES = {
- "", "Singles 0", "Singles 1", "Pair 0", "Pair 1", "Pulser", "Cosmic"
- //"", "Random", "Cosmic", "Singles 0", "Singles 1", "Pair 0", "Pair 1"
- };
-
- /**
- * Instantiates a new <code>EfficiencyTablePanel</code>.
- */
- public EfficiencyTablePanel() {
- // Instantiate the superclass.
- super();
-
- // Set the orientation to vertical.
- setOrientation(ORIENTATION_VERTICAL);
- }
-
- @Override
- public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot) {
- // If there is no snapshot, the tables should all display an
- // empty value.
- if(runSnapshot == null || localSnapshot == null) {
- for(int row = 1; row < ROWS; row++) {
- for(int col = 1; col < COLUMNS; col++) {
- localModel.setValueAt("---", row, col);
- globalModel.setValueAt("---", row, col);
- }
- }
- }
-
- // Otherwise, update the table cells from the snapshot data.
- else {
- // Get the efficiency modules.
- DiagnosticSnapshot[] stat = new DiagnosticSnapshot[2];
- stat[GLOBAL] = runSnapshot;
- stat[LOCAL] = localSnapshot;
-
- // Get the trigger count for each trigger type for both the
- // local and global snapshots.
- int[][][] matched = new int[2][4][6];
- int[][][] triggers = new int[2][4][6];
- for(int i = 0; i < 2; i++) {
- for(int triggerType = 0; triggerType < 6; triggerType++) {
- // Get the total triggers seen for each type.
- triggers[i][TYPE_SINGLES_0][triggerType] = stat[i].getSingles0Stats().getSSPSimulatedTriggers(triggerType);
- triggers[i][TYPE_SINGLES_1][triggerType] = stat[i].getSingles1Stats().getSSPSimulatedTriggers(triggerType);
- triggers[i][TYPE_PAIR_0][triggerType] = stat[i].getPair0Stats().getSSPSimulatedTriggers(triggerType);
- triggers[i][TYPE_PAIR_1][triggerType] = stat[i].getPair1Stats().getSSPSimulatedTriggers(triggerType);
-
- // Get the total triggers matched for each type.
- matched[i][TYPE_SINGLES_0][triggerType] = stat[i].getSingles0Stats().getMatchedSSPSimulatedTriggers(triggerType);
- matched[i][TYPE_SINGLES_1][triggerType] = stat[i].getSingles1Stats().getMatchedSSPSimulatedTriggers(triggerType);
- matched[i][TYPE_PAIR_0][triggerType] = stat[i].getPair0Stats().getMatchedSSPSimulatedTriggers(triggerType);
- matched[i][TYPE_PAIR_1][triggerType] = stat[i].getPair1Stats().getMatchedSSPSimulatedTriggers(triggerType);
- }
- }
-
- // Determine the spacing needed to display the largest numerical
- // cell value.
- int numWidth = -1;
- for(int tiTriggerType = 0; tiTriggerType < 6; tiTriggerType++) {
- for(int seenTriggerType = 0; seenTriggerType < 4; seenTriggerType++) {
- int rSize = ComponentUtils.getDigits(triggers[GLOBAL][seenTriggerType][tiTriggerType]);
- int lSize = ComponentUtils.getDigits(triggers[LOCAL][seenTriggerType][tiTriggerType]);
- numWidth = ComponentUtils.max(numWidth, rSize, lSize);
- }
- }
-
- // Generate the format string for the cells.
- String format = "%" + numWidth + "d / %" + numWidth + "d";
-
- // Update the table.
- for(int tiTriggerType = 0; tiTriggerType < 6; tiTriggerType++) {
- // Fill the row/column combinations that hold trigger
- // statistical information.
- for(int seenTriggerType = 0; seenTriggerType < 4; seenTriggerType++) {
- // Fill the local table cell.
- String localText = String.format(format, matched[LOCAL][seenTriggerType][tiTriggerType],
- triggers[LOCAL][seenTriggerType][tiTriggerType]);
- if(triggers[LOCAL][seenTriggerType][tiTriggerType] == 0) {
- localText = localText + " ( N/A %)";
- } else {
- localText = String.format("%s (%7.3f%%)", localText,
- (100.0 * matched[LOCAL][seenTriggerType][tiTriggerType] / triggers[LOCAL][seenTriggerType][tiTriggerType]));
- }
- localModel.setValueAt(localText, tiTriggerType + 1, seenTriggerType + 1);
-
- // Fill the global table cell.
- String globalText = String.format(format, matched[GLOBAL][seenTriggerType][tiTriggerType],
- triggers[GLOBAL][seenTriggerType][tiTriggerType]);
- if(triggers[GLOBAL][seenTriggerType][tiTriggerType] == 0) {
- globalText = globalText + " ( N/A %)";
- } else {
- globalText = String.format("%s (%7.3f%%)", globalText,
- (100.0 * matched[GLOBAL][seenTriggerType][tiTriggerType] / triggers[GLOBAL][seenTriggerType][tiTriggerType]));
- }
- globalModel.setValueAt(globalText, tiTriggerType + 1, seenTriggerType + 1);
- }
-
- // Populate the count column.
- localModel.setValueAt("" + stat[LOCAL].getTITriggers(tiTriggerType, true), tiTriggerType + 1, COL_COUNT);
- globalModel.setValueAt("" + stat[GLOBAL].getTITriggers(tiTriggerType, true), tiTriggerType + 1, COL_COUNT);
- }
- }
- }
-
- @Override
- protected JTable[] initializeTables(Object... args) {
- // Initialize the table models. There should be one row and
- // one column for each type of trigger plus an additional one
- // of each for headers.
- localModel = new TableTextModel(ROWS, COLUMNS);
- globalModel = new TableTextModel(ROWS, COLUMNS);
-
- // Set the column headers.
- for(int col = 0; col < COLUMNS; col++) {
- localModel.setValueAt(COL_NAMES[col], 0, col);
- globalModel.setValueAt(COL_NAMES[col], 0, col);
- }
-
- // Set the row headers.
- for(int row = 0; row < ROWS; row++) {
- localModel.setValueAt(ROW_NAMES[row], row, 0);
- globalModel.setValueAt(ROW_NAMES[row], row, 0);
- }
-
- // Make a cell renderer.
- DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
- centerRenderer.setHorizontalAlignment(JLabel.CENTER);
-
- // Create JTable objects to display the data.
- JTable localTable = new JTable(localModel);
- localTable.setRowSelectionAllowed(false);
- localTable.setColumnSelectionAllowed(false);
- localTable.setCellSelectionEnabled(false);
- localTable.setShowVerticalLines(false);
- localTable.getColumnModel().getColumn(0).setMaxWidth(150);
- localTable.getColumnModel().getColumn(COL_COUNT).setMaxWidth(150);
- for(int col = 1; col < COLUMNS; col++) {
- localTable.getColumnModel().getColumn(col).setCellRenderer(centerRenderer);
- }
- localTable.setFont(new Font("monospaced", localTable.getFont().getStyle(), localTable.getFont().getSize()));
-
- JTable globalTable = new JTable(globalModel);
- globalTable.setRowSelectionAllowed(false);
- globalTable.setColumnSelectionAllowed(false);
- globalTable.setCellSelectionEnabled(false);
- globalTable.setShowVerticalLines(false);
- globalTable.getColumnModel().getColumn(0).setMaxWidth(150);
- globalTable.getColumnModel().getColumn(COL_COUNT).setMaxWidth(150);
- for(int col = 1; col < COLUMNS; col++) {
- globalTable.getColumnModel().getColumn(col).setCellRenderer(centerRenderer);
- }
- globalTable.setFont(new Font("monospaced", globalTable.getFont().getStyle(), globalTable.getFont().getSize()));
-
- // Return the tables.
- return new JTable[] { localTable, globalTable };
- }
-
+ // Static variables.
+ private static final long serialVersionUID = 0L;
+
+ // Table models.
+ private TableTextModel localModel;
+ private TableTextModel globalModel;
+
+ // Column/row reference variables.
+ private static final int ROWS = 7;
+ private static final int COLUMNS = 6;
+ /* private static final int COL_HEADER = 0;
+ private static final int COL_SINGLES_0 = 1;
+ private static final int COL_SINGLES_1 = 2;
+ private static final int COL_PAIR_0 = 3;
+ private static final int COL_PAIR_1 = 4; */
+ private static final int COL_COUNT = 5;
+ /* private static final int ROW_HEADER = 0;
+ private static final int ROW_PULSER = 1;
+ private static final int ROW_COSMIC = 2;
+ private static final int ROW_SINGLES_0 = 3;
+ private static final int ROW_SINGLES_1 = 4;
+ private static final int ROW_PAIR_0 = 5;
+ private static final int ROW_PAIR_1 = 6; */
+
+ // Global/local reference variables.
+ private static final int GLOBAL = 0;
+ private static final int LOCAL = 1;
+
+ // Trigger type reference variables.
+ private static final int TYPE_SINGLES_0 = TriggerStatModule.SINGLES_0;
+ private static final int TYPE_SINGLES_1 = TriggerStatModule.SINGLES_1;
+ private static final int TYPE_PAIR_0 = TriggerStatModule.PAIR_0;
+ private static final int TYPE_PAIR_1 = TriggerStatModule.PAIR_1;
+
+ // Column/row header names.
+ private static final String[] COL_NAMES = {
+ "", "Singles 0", "Singles 1", "Pair 0", "Pair 1", "Count"
+ };
+ private static final String[] ROW_NAMES = {
+ "", "Singles 0", "Singles 1", "Pair 0", "Pair 1", "Pulser", "Cosmic"
+ //"", "Random", "Cosmic", "Singles 0", "Singles 1", "Pair 0", "Pair 1"
+ };
+
+ /**
+ * Instantiates a new <code>EfficiencyTablePanel</code>.
+ */
+ public EfficiencyTablePanel() {
+ // Instantiate the superclass.
+ super();
+
+ // Set the orientation to vertical.
+ setOrientation(ORIENTATION_VERTICAL);
+ }
+
+ @Override
+ public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot) {
+ // If there is no snapshot, the tables should all display an
+ // empty value.
+ if(runSnapshot == null || localSnapshot == null) {
+ for(int row = 1; row < ROWS; row++) {
+ for(int col = 1; col < COLUMNS; col++) {
+ localModel.setValueAt("---", row, col);
+ globalModel.setValueAt("---", row, col);
+ }
+ }
+ }
+
+ // Otherwise, update the table cells from the snapshot data.
+ else {
+ // Get the efficiency modules.
+ DiagnosticSnapshot[] stat = new DiagnosticSnapshot[2];
+ stat[GLOBAL] = runSnapshot;
+ stat[LOCAL] = localSnapshot;
+
+ // Get the trigger count for each trigger type for both the
+ // local and global snapshots.
+ int[][][] matched = new int[2][4][6];
+ int[][][] triggers = new int[2][4][6];
+ for(int i = 0; i < 2; i++) {
+ for(int triggerType = 0; triggerType < 6; triggerType++) {
+ // Get the total triggers seen for each type.
+ triggers[i][TYPE_SINGLES_0][triggerType] = stat[i].getSingles0Stats().getSSPSimulatedTriggers(triggerType);
+ triggers[i][TYPE_SINGLES_1][triggerType] = stat[i].getSingles1Stats().getSSPSimulatedTriggers(triggerType);
+ triggers[i][TYPE_PAIR_0][triggerType] = stat[i].getPair0Stats().getSSPSimulatedTriggers(triggerType);
+ triggers[i][TYPE_PAIR_1][triggerType] = stat[i].getPair1Stats().getSSPSimulatedTriggers(triggerType);
+
+ // Get the total triggers matched for each type.
+ matched[i][TYPE_SINGLES_0][triggerType] = stat[i].getSingles0Stats().getMatchedSSPSimulatedTriggers(triggerType);
+ matched[i][TYPE_SINGLES_1][triggerType] = stat[i].getSingles1Stats().getMatchedSSPSimulatedTriggers(triggerType);
+ matched[i][TYPE_PAIR_0][triggerType] = stat[i].getPair0Stats().getMatchedSSPSimulatedTriggers(triggerType);
+ matched[i][TYPE_PAIR_1][triggerType] = stat[i].getPair1Stats().getMatchedSSPSimulatedTriggers(triggerType);
+ }
+ }
+
+ // Determine the spacing needed to display the largest numerical
+ // cell value.
+ int numWidth = -1;
+ for(int tiTriggerType = 0; tiTriggerType < 6; tiTriggerType++) {
+ for(int seenTriggerType = 0; seenTriggerType < 4; seenTriggerType++) {
+ int rSize = ComponentUtils.getDigits(triggers[GLOBAL][seenTriggerType][tiTriggerType]);
+ int lSize = ComponentUtils.getDigits(triggers[LOCAL][seenTriggerType][tiTriggerType]);
+ numWidth = ComponentUtils.max(numWidth, rSize, lSize);
+ }
+ }
+
+ // Generate the format string for the cells.
+ String format = "%" + numWidth + "d / %" + numWidth + "d";
+
+ // Update the table.
+ for(int tiTriggerType = 0; tiTriggerType < 6; tiTriggerType++) {
+ // Fill the row/column combinations that hold trigger
+ // statistical information.
+ for(int seenTriggerType = 0; seenTriggerType < 4; seenTriggerType++) {
+ // Fill the local table cell.
+ String localText = String.format(format, matched[LOCAL][seenTriggerType][tiTriggerType],
+ triggers[LOCAL][seenTriggerType][tiTriggerType]);
+ if(triggers[LOCAL][seenTriggerType][tiTriggerType] == 0) {
+ localText = localText + " ( N/A %)";
+ } else {
+ localText = String.format("%s (%7.3f%%)", localText,
+ (100.0 * matched[LOCAL][seenTriggerType][tiTriggerType] / triggers[LOCAL][seenTriggerType][tiTriggerType]));
+ }
+ localModel.setValueAt(localText, tiTriggerType + 1, seenTriggerType + 1);
+
+ // Fill the global table cell.
+ String globalText = String.format(format, matched[GLOBAL][seenTriggerType][tiTriggerType],
+ triggers[GLOBAL][seenTriggerType][tiTriggerType]);
+ if(triggers[GLOBAL][seenTriggerType][tiTriggerType] == 0) {
+ globalText = globalText + " ( N/A %)";
+ } else {
+ globalText = String.format("%s (%7.3f%%)", globalText,
+ (100.0 * matched[GLOBAL][seenTriggerType][tiTriggerType] / triggers[GLOBAL][seenTriggerType][tiTriggerType]));
+ }
+ globalModel.setValueAt(globalText, tiTriggerType + 1, seenTriggerType + 1);
+ }
+
+ // Populate the count column.
+ localModel.setValueAt("" + stat[LOCAL].getTITriggers(tiTriggerType, true), tiTriggerType + 1, COL_COUNT);
+ globalModel.setValueAt("" + stat[GLOBAL].getTITriggers(tiTriggerType, true), tiTriggerType + 1, COL_COUNT);
+ }
+ }
+ }
+
+ @Override
+ protected JTable[] initializeTables(Object... args) {
+ // Initialize the table models. There should be one row and
+ // one column for each type of trigger plus an additional one
+ // of each for headers.
+ localModel = new TableTextModel(ROWS, COLUMNS);
+ globalModel = new TableTextModel(ROWS, COLUMNS);
+
+ // Set the column headers.
+ for(int col = 0; col < COLUMNS; col++) {
+ localModel.setValueAt(COL_NAMES[col], 0, col);
+ globalModel.setValueAt(COL_NAMES[col], 0, col);
+ }
+
+ // Set the row headers.
+ for(int row = 0; row < ROWS; row++) {
+ localModel.setValueAt(ROW_NAMES[row], row, 0);
+ globalModel.setValueAt(ROW_NAMES[row], row, 0);
+ }
+
+ // Make a cell renderer.
+ DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
+ centerRenderer.setHorizontalAlignment(JLabel.CENTER);
+
+ // Create JTable objects to display the data.
+ JTable localTable = new JTable(localModel);
+ localTable.setRowSelectionAllowed(false);
+ localTable.setColumnSelectionAllowed(false);
+ localTable.setCellSelectionEnabled(false);
+ localTable.setShowVerticalLines(false);
+ localTable.getColumnModel().getColumn(0).setMaxWidth(150);
+ localTable.getColumnModel().getColumn(COL_COUNT).setMaxWidth(150);
+ for(int col = 1; col < COLUMNS; col++) {
+ localTable.getColumnModel().getColumn(col).setCellRenderer(centerRenderer);
+ }
+ localTable.setFont(new Font("monospaced", localTable.getFont().getStyle(), localTable.getFont().getSize()));
+
+ JTable globalTable = new JTable(globalModel);
+ globalTable.setRowSelectionAllowed(false);
+ globalTable.setColumnSelectionAllowed(false);
+ globalTable.setCellSelectionEnabled(false);
+ globalTable.setShowVerticalLines(false);
+ globalTable.getColumnModel().getColumn(0).setMaxWidth(150);
+ globalTable.getColumnModel().getColumn(COL_COUNT).setMaxWidth(150);
+ for(int col = 1; col < COLUMNS; col++) {
+ globalTable.getColumnModel().getColumn(col).setCellRenderer(centerRenderer);
+ }
+ globalTable.setFont(new Font("monospaced", globalTable.getFont().getStyle(), globalTable.getFont().getSize()));
+
+ // Return the tables.
+ return new JTable[] { localTable, globalTable };
+ }
+
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/PairTablePanel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/PairTablePanel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/PairTablePanel.java Wed Mar 9 11:43:24 2016
@@ -7,14 +7,14 @@
* @author Kyle McCarty
*/
public class PairTablePanel extends AbstractTriggerTablePanel {
- // Static variables.
- private static final long serialVersionUID = 0L;
- private static final String[] CUT_NAMES = { " Energy Sum:",
- " Energy Difference:", " Energy Slope:", " Coplanarity:" };
-
- /**
- * Instantiates a <code>PairTablePanel</code>.
- */
- public PairTablePanel() { super(CUT_NAMES, false); }
-
+ // Static variables.
+ private static final long serialVersionUID = 0L;
+ private static final String[] CUT_NAMES = { " Energy Sum:",
+ " Energy Difference:", " Energy Slope:", " Coplanarity:" };
+
+ /**
+ * Instantiates a <code>PairTablePanel</code>.
+ */
+ public PairTablePanel() { super(CUT_NAMES, false); }
+
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ShifterTrigPanel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ShifterTrigPanel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ShifterTrigPanel.java Wed Mar 9 11:43:24 2016
@@ -12,291 +12,291 @@
import org.hps.analysis.trigger.util.ComponentUtils;
public class ShifterTrigPanel extends JPanel {
- private static final Color BG_WARNING = new Color(255, 235, 20);
- private static final Color BG_CRITICAL = new Color(230, 0, 0);
- private static final Color FONT_WARNING = new Color(255, 157, 0);
- private static final Color FONT_CRITICAL = new Color(117, 0, 0);
- private static final long serialVersionUID = 1L;
-
- private JLabel panelTitle;
- private JLabel[] fieldTitle;
- private JLabel[] fieldValue;
-
- /**
- * Instantiates a new <code>ShifterTrigPanel</code> with the
- * indicated name.
- */
- public ShifterTrigPanel(String name) {
- // Instantiate a layout for the fields.
- SpringLayout layout = new SpringLayout();
- setLayout(layout);
-
- // Instantiate the header title.
- panelTitle = new JLabel(name);
- panelTitle.setVerticalAlignment(JLabel.CENTER);
- panelTitle.setHorizontalAlignment(JLabel.CENTER);
- add(panelTitle);
-
- // Instantiate the field title labels.
- String[] titleName = { "Cluster Efficiency", "Singles 0 Logic Efficiency",
- "Singles 0 Trigger Efficiency", "Singles 1 Logic Efficiency",
- "Singles 1 Trigger Efficiency", "Pair 0 Logic Efficiency",
- "Pair 0 Trigger Efficiency", "Pair 1 Logic Efficiency", "Pair 1 Trigger Efficiency" };
- fieldTitle = new JLabel[titleName.length];
- for(int index = 0; index < titleName.length; index++) {
- fieldTitle[index] = new JLabel(titleName[index]);
- fieldTitle[index].setVerticalAlignment(JLabel.CENTER);
- fieldTitle[index].setHorizontalAlignment(JLabel.RIGHT);
- fieldTitle[index].setOpaque(true);
- add(fieldTitle[index]);
- }
-
- // Instantiate the field value labels.
- fieldValue = new JLabel[titleName.length];
- for(int index = 0; index < titleName.length; index++) {
- fieldValue[index] = new JLabel("");
- fieldValue[index].setVerticalAlignment(JLabel.CENTER);
- fieldValue[index].setHorizontalAlignment(JLabel.LEFT);
- fieldValue[index].setOpaque(true);
- add(fieldValue[index]);
- }
-
- // Get the longest title.
- int maxWidth = -1;
- int maxIndex = -1;
- for(int index = 0; index < titleName.length; index++) {
- int width = fieldTitle[index].getFontMetrics(fieldTitle[index].getFont()).stringWidth(titleName[index]);
- if(width > maxWidth) {
- maxWidth = width;
- maxIndex = index;
- }
- }
-
- // Define border edge and spacing variables.
- String EAST = SpringLayout.EAST;
- String WEST = SpringLayout.WEST;
- String NORTH = SpringLayout.NORTH;
- String SOUTH = SpringLayout.SOUTH;
- int hinternal = 5;
- int vinternal = 10;
- int hexternal = 5;
- int vexternal = 5;
-
- // Position the panel header.
- layout.putConstraint(EAST, panelTitle, hexternal, EAST, this);
- layout.putConstraint(WEST, panelTitle, hexternal, WEST, this);
- layout.putConstraint(NORTH, panelTitle, vexternal, NORTH, this);
-
- // Position the field entries.
- Component lastComp = panelTitle;
- for(int index = 0; index < titleName.length; index++) {
- // For all field titles except the largest, lock the right
- // edge of the title to match the position of the largest
- // title's right edge. The largest title is allowed to size
- // itself to its preferred width.
- if(index == maxIndex) {
- layout.putConstraint(NORTH, fieldTitle[index], vinternal, SOUTH, lastComp);
- layout.putConstraint(WEST, fieldTitle[index], hexternal, WEST, this);
- } else {
- layout.putConstraint(NORTH, fieldTitle[index], vinternal, SOUTH, lastComp);
- layout.putConstraint(WEST, fieldTitle[index], hexternal, WEST, this);
- layout.putConstraint(EAST, fieldTitle[index], 0, EAST, fieldTitle[maxIndex]);
- }
-
- // Position the field value label to the right of the field
- // title label. It should use up the remainder of the width
- // allowed by the component.
- layout.putConstraint(WEST, fieldValue[index], hinternal, EAST, fieldTitle[index]);
- layout.putConstraint(EAST, fieldValue[index], hexternal, EAST, this);
- layout.putConstraint(NORTH, fieldValue[index], vinternal, SOUTH, lastComp);
-
- // Update the "last component" to the current field title
- // label.
- lastComp = fieldTitle[index];
- }
-
- // Update the fonts.
- setFont(getFont());
- }
-
- @Override
- public void setBackground(Color bg) {
- // Set the superclass background.
- super.setBackground(bg);
-
- // Set the component backgrounds.
- if(panelTitle != null) {
- panelTitle.setBackground(bg);
- for(int index = 0; index < fieldTitle.length; index++) {
- fieldTitle[index].setBackground(bg);
-
- // If the field value label has a special alert color,
- // then do not overwrite it.
- if(!fieldValue[index].getBackground().equals(BG_WARNING)
- && !fieldValue[index].getBackground().equals(BG_CRITICAL)) {
- fieldValue[index].setBackground(bg);
- }
- }
- }
- }
-
- @Override
- public void setFont(Font font) {
- // Set the superclass font.
- super.setFont(font);
-
- // Set the component fonts.
- if(panelTitle != null) {
- panelTitle.setFont(font.deriveFont(Font.BOLD, (float) (font.getSize2D() * 1.5)));
- for(int index = 0; index < fieldTitle.length; index++) {
- fieldTitle[index].setFont(font.deriveFont(Font.BOLD));
- fieldValue[index].setFont(font);
- }
- }
- }
-
- @Override
- public void setForeground(Color fg) {
- // Set the superclass foreground.
- super.setForeground(fg);
-
- // Set the component backgrounds.
- if(panelTitle != null) {
- panelTitle.setForeground(fg);
- for(int index = 0; index < fieldTitle.length; index++) {
- fieldTitle[index].setForeground(fg);
-
- // If the field value label has a special alert color,
- // then do not overwrite it.
- if(!fieldValue[index].getForeground().equals(FONT_WARNING)
- && !fieldValue[index].getForeground().equals(FONT_CRITICAL)) {
- fieldValue[index].setBackground(fg);
- }
- }
- }
- }
-
- /**
- * Updates the panel statistical display with data from the
- * argument snapshot.
- * @param stat - The snapshot from which to derive statistical
- * data.
- */
- public void updatePanel(DiagnosticSnapshot stat) {
- // If the snapshot is null, insert "null" values in the
- // field panels,
- if(stat == null) {
- // Populate the fields with a "null" entry.
- for(int index = 0; index < fieldValue.length; index++) {
- fieldValue[index].setText("--- / --- ( N/A %)");
- }
-
- // No data exists, so no further processing is needed.
- return;
- }
-
- // Define index constants.
- int RECON = 0;
- int SSP = 1;
- int TRIGGER_0 = 0;
- int TRIGGER_1 = 1;
-
- // Get the tracked values from the snapshot.
- int seenClusters = stat.getClusterStats().getReconClusterCount();
- int[][] seenSinglesTriggers = {
- { stat.getSingles0Stats().getReconSimulatedTriggers(), stat.getSingles1Stats().getReconSimulatedTriggers() },
- { stat.getSingles0Stats().getSSPSimulatedTriggers(), stat.getSingles1Stats().getSSPSimulatedTriggers() }
- };
- int[][] seenPairTriggers = {
+ private static final Color BG_WARNING = new Color(255, 235, 20);
+ private static final Color BG_CRITICAL = new Color(230, 0, 0);
+ private static final Color FONT_WARNING = new Color(255, 157, 0);
+ private static final Color FONT_CRITICAL = new Color(117, 0, 0);
+ private static final long serialVersionUID = 1L;
+
+ private JLabel panelTitle;
+ private JLabel[] fieldTitle;
+ private JLabel[] fieldValue;
+
+ /**
+ * Instantiates a new <code>ShifterTrigPanel</code> with the
+ * indicated name.
+ */
+ public ShifterTrigPanel(String name) {
+ // Instantiate a layout for the fields.
+ SpringLayout layout = new SpringLayout();
+ setLayout(layout);
+
+ // Instantiate the header title.
+ panelTitle = new JLabel(name);
+ panelTitle.setVerticalAlignment(JLabel.CENTER);
+ panelTitle.setHorizontalAlignment(JLabel.CENTER);
+ add(panelTitle);
+
+ // Instantiate the field title labels.
+ String[] titleName = { "Cluster Efficiency", "Singles 0 Logic Efficiency",
+ "Singles 0 Trigger Efficiency", "Singles 1 Logic Efficiency",
+ "Singles 1 Trigger Efficiency", "Pair 0 Logic Efficiency",
+ "Pair 0 Trigger Efficiency", "Pair 1 Logic Efficiency", "Pair 1 Trigger Efficiency" };
+ fieldTitle = new JLabel[titleName.length];
+ for(int index = 0; index < titleName.length; index++) {
+ fieldTitle[index] = new JLabel(titleName[index]);
+ fieldTitle[index].setVerticalAlignment(JLabel.CENTER);
+ fieldTitle[index].setHorizontalAlignment(JLabel.RIGHT);
+ fieldTitle[index].setOpaque(true);
+ add(fieldTitle[index]);
+ }
+
+ // Instantiate the field value labels.
+ fieldValue = new JLabel[titleName.length];
+ for(int index = 0; index < titleName.length; index++) {
+ fieldValue[index] = new JLabel("");
+ fieldValue[index].setVerticalAlignment(JLabel.CENTER);
+ fieldValue[index].setHorizontalAlignment(JLabel.LEFT);
+ fieldValue[index].setOpaque(true);
+ add(fieldValue[index]);
+ }
+
+ // Get the longest title.
+ int maxWidth = -1;
+ int maxIndex = -1;
+ for(int index = 0; index < titleName.length; index++) {
+ int width = fieldTitle[index].getFontMetrics(fieldTitle[index].getFont()).stringWidth(titleName[index]);
+ if(width > maxWidth) {
+ maxWidth = width;
+ maxIndex = index;
+ }
+ }
+
+ // Define border edge and spacing variables.
+ String EAST = SpringLayout.EAST;
+ String WEST = SpringLayout.WEST;
+ String NORTH = SpringLayout.NORTH;
+ String SOUTH = SpringLayout.SOUTH;
+ int hinternal = 5;
+ int vinternal = 10;
+ int hexternal = 5;
+ int vexternal = 5;
+
+ // Position the panel header.
+ layout.putConstraint(EAST, panelTitle, hexternal, EAST, this);
+ layout.putConstraint(WEST, panelTitle, hexternal, WEST, this);
+ layout.putConstraint(NORTH, panelTitle, vexternal, NORTH, this);
+
+ // Position the field entries.
+ Component lastComp = panelTitle;
+ for(int index = 0; index < titleName.length; index++) {
+ // For all field titles except the largest, lock the right
+ // edge of the title to match the position of the largest
+ // title's right edge. The largest title is allowed to size
+ // itself to its preferred width.
+ if(index == maxIndex) {
+ layout.putConstraint(NORTH, fieldTitle[index], vinternal, SOUTH, lastComp);
+ layout.putConstraint(WEST, fieldTitle[index], hexternal, WEST, this);
+ } else {
+ layout.putConstraint(NORTH, fieldTitle[index], vinternal, SOUTH, lastComp);
+ layout.putConstraint(WEST, fieldTitle[index], hexternal, WEST, this);
+ layout.putConstraint(EAST, fieldTitle[index], 0, EAST, fieldTitle[maxIndex]);
+ }
+
+ // Position the field value label to the right of the field
+ // title label. It should use up the remainder of the width
+ // allowed by the component.
+ layout.putConstraint(WEST, fieldValue[index], hinternal, EAST, fieldTitle[index]);
+ layout.putConstraint(EAST, fieldValue[index], hexternal, EAST, this);
+ layout.putConstraint(NORTH, fieldValue[index], vinternal, SOUTH, lastComp);
+
+ // Update the "last component" to the current field title
+ // label.
+ lastComp = fieldTitle[index];
+ }
+
+ // Update the fonts.
+ setFont(getFont());
+ }
+
+ @Override
+ public void setBackground(Color bg) {
+ // Set the superclass background.
+ super.setBackground(bg);
+
+ // Set the component backgrounds.
+ if(panelTitle != null) {
+ panelTitle.setBackground(bg);
+ for(int index = 0; index < fieldTitle.length; index++) {
+ fieldTitle[index].setBackground(bg);
+
+ // If the field value label has a special alert color,
+ // then do not overwrite it.
+ if(!fieldValue[index].getBackground().equals(BG_WARNING)
+ && !fieldValue[index].getBackground().equals(BG_CRITICAL)) {
+ fieldValue[index].setBackground(bg);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void setFont(Font font) {
+ // Set the superclass font.
+ super.setFont(font);
+
+ // Set the component fonts.
+ if(panelTitle != null) {
+ panelTitle.setFont(font.deriveFont(Font.BOLD, (float) (font.getSize2D() * 1.5)));
+ for(int index = 0; index < fieldTitle.length; index++) {
+ fieldTitle[index].setFont(font.deriveFont(Font.BOLD));
+ fieldValue[index].setFont(font);
+ }
+ }
+ }
+
+ @Override
+ public void setForeground(Color fg) {
+ // Set the superclass foreground.
+ super.setForeground(fg);
+
+ // Set the component backgrounds.
+ if(panelTitle != null) {
+ panelTitle.setForeground(fg);
+ for(int index = 0; index < fieldTitle.length; index++) {
+ fieldTitle[index].setForeground(fg);
+
+ // If the field value label has a special alert color,
+ // then do not overwrite it.
+ if(!fieldValue[index].getForeground().equals(FONT_WARNING)
+ && !fieldValue[index].getForeground().equals(FONT_CRITICAL)) {
+ fieldValue[index].setBackground(fg);
+ }
+ }
+ }
+ }
+
+ /**
+ * Updates the panel statistical display with data from the
+ * argument snapshot.
+ * @param stat - The snapshot from which to derive statistical
+ * data.
+ */
+ public void updatePanel(DiagnosticSnapshot stat) {
+ // If the snapshot is null, insert "null" values in the
+ // field panels,
+ if(stat == null) {
+ // Populate the fields with a "null" entry.
+ for(int index = 0; index < fieldValue.length; index++) {
+ fieldValue[index].setText("--- / --- ( N/A %)");
+ }
+
+ // No data exists, so no further processing is needed.
+ return;
+ }
+
+ // Define index constants.
+ int RECON = 0;
+ int SSP = 1;
+ int TRIGGER_0 = 0;
+ int TRIGGER_1 = 1;
+
+ // Get the tracked values from the snapshot.
+ int seenClusters = stat.getClusterStats().getReconClusterCount();
+ int[][] seenSinglesTriggers = {
+ { stat.getSingles0Stats().getReconSimulatedTriggers(), stat.getSingles1Stats().getReconSimulatedTriggers() },
+ { stat.getSingles0Stats().getSSPSimulatedTriggers(), stat.getSingles1Stats().getSSPSimulatedTriggers() }
+ };
+ int[][] seenPairTriggers = {
{ stat.getPair0Stats().getReconSimulatedTriggers(), stat.getPair1Stats().getReconSimulatedTriggers() },
{ stat.getPair0Stats().getSSPSimulatedTriggers(), stat.getPair1Stats().getSSPSimulatedTriggers() }
- };
- int matchedClusters = stat.getClusterStats().getMatches();
- int[][] matchedSinglesTriggers = {
+ };
+ int matchedClusters = stat.getClusterStats().getMatches();
+ int[][] matchedSinglesTriggers = {
{ stat.getSingles0Stats().getMatchedReconSimulatedTriggers(), stat.getSingles1Stats().getMatchedReconSimulatedTriggers() },
{ stat.getSingles0Stats().getMatchedSSPSimulatedTriggers(), stat.getSingles1Stats().getMatchedSSPSimulatedTriggers() }
- };
- int[][] matchedPairTriggers = {
+ };
+ int[][] matchedPairTriggers = {
{ stat.getPair0Stats().getMatchedReconSimulatedTriggers(), stat.getPair1Stats().getMatchedReconSimulatedTriggers() },
{ stat.getPair0Stats().getMatchedSSPSimulatedTriggers(), stat.getPair1Stats().getMatchedSSPSimulatedTriggers() }
- };
-
- // Get the largest digit of the tracked values. This should
- // always be one of the "seen" values.
- int mostDigits = ComponentUtils.max(seenClusters, seenSinglesTriggers[0][0], seenSinglesTriggers[0][1],
- seenSinglesTriggers[1][0], seenSinglesTriggers[1][1], seenPairTriggers[0][0], seenPairTriggers[0][1],
- seenPairTriggers[1][0], seenPairTriggers[1][1]);
- int spaces = ComponentUtils.getDigits(mostDigits);
-
- // Populate the cluster field panel.
- processEfficiency(seenClusters, matchedClusters, 0, spaces, 0.98, 0.94);
-
- // Populate the singles trigger field panels.
- processEfficiency(seenSinglesTriggers[RECON][TRIGGER_0], matchedSinglesTriggers[RECON][TRIGGER_0], 1, spaces, 0.99, 0.95);
+ };
+
+ // Get the largest digit of the tracked values. This should
+ // always be one of the "seen" values.
+ int mostDigits = ComponentUtils.max(seenClusters, seenSinglesTriggers[0][0], seenSinglesTriggers[0][1],
+ seenSinglesTriggers[1][0], seenSinglesTriggers[1][1], seenPairTriggers[0][0], seenPairTriggers[0][1],
+ seenPairTriggers[1][0], seenPairTriggers[1][1]);
+ int spaces = ComponentUtils.getDigits(mostDigits);
+
+ // Populate the cluster field panel.
+ processEfficiency(seenClusters, matchedClusters, 0, spaces, 0.98, 0.94);
+
+ // Populate the singles trigger field panels.
+ processEfficiency(seenSinglesTriggers[RECON][TRIGGER_0], matchedSinglesTriggers[RECON][TRIGGER_0], 1, spaces, 0.99, 0.95);
processEfficiency(seenSinglesTriggers[SSP][TRIGGER_0], matchedSinglesTriggers[SSP][TRIGGER_0], 2, spaces, 0.99, 0.95);
processEfficiency(seenSinglesTriggers[RECON][TRIGGER_1], matchedSinglesTriggers[RECON][TRIGGER_1], 3, spaces, 0.99, 0.95);
processEfficiency(seenSinglesTriggers[SSP][TRIGGER_1], matchedSinglesTriggers[SSP][TRIGGER_1], 4, spaces, 0.99, 0.95);
-
- // Populate the pair trigger field panels.
- processEfficiency(seenPairTriggers[RECON][TRIGGER_0], matchedPairTriggers[RECON][TRIGGER_0], 5, spaces, 0.99, 0.95);
+
+ // Populate the pair trigger field panels.
+ processEfficiency(seenPairTriggers[RECON][TRIGGER_0], matchedPairTriggers[RECON][TRIGGER_0], 5, spaces, 0.99, 0.95);
processEfficiency(seenPairTriggers[SSP][TRIGGER_0], matchedPairTriggers[SSP][TRIGGER_0], 6, spaces, 0.99, 0.95);
processEfficiency(seenPairTriggers[RECON][TRIGGER_1], matchedPairTriggers[RECON][TRIGGER_1], 7, spaces, 0.99, 0.95);
processEfficiency(seenPairTriggers[SSP][TRIGGER_1], matchedPairTriggers[SSP][TRIGGER_1], 8, spaces, 0.99, 0.95);
- }
-
- /**
- * Updates the indicated field value using the indicated number
- * seen and matched elements. Automatically handles the special
- * case of zero seen elements and also updates the colors of the
- * field labels to the appropriate color based on the efficiency
- * and the thresholds for warnings.
- * @param seen - The number of elements seen.
- * @param matched - The number of elements matched.
- * @param fieldIndex - The index for the field that should display
- * the statistical data.
- * @param spaces - The number of spaces to giveto each displayed
- * value.
- * @param threshWarning - The threshold at which the "warning
- * color should be used.
- * @param threshCritical - The threshold at which the "critical"
- * color should be used.
- */
- private void processEfficiency(int seen, int matched, int fieldIndex, int spaces, double threshWarning, double threshCritical) {
- // Calculate the efficiency.
- double efficiency = 100.0 * matched / seen;
-
- // Create the format string.
- String format = "%" + spaces + "d / %";
-
- // If the number of values seen is zero, there is no
- // percentage that can be calculated.
- if(seen == 0) {
- fieldValue[fieldIndex].setText(String.format(format + " ( N/A %%)", seen, matched));
- }
-
- // Otherwise, include the percentage.
- else {
- fieldValue[fieldIndex].setText(String.format(format + " (7.3f%%)", seen, matched, efficiency));
- }
-
- // If the efficiency is below the critical threshold,
- // change the field background to the critical color.
- if(efficiency < threshCritical) {
- fieldValue[fieldIndex].setBackground(BG_CRITICAL);
- fieldValue[fieldIndex].setForeground(FONT_CRITICAL);
- }
-
- // Otherwise, if the efficiency is below the warning
- // level, set the field background to the warning color.
- else if(efficiency < threshWarning) {
- fieldValue[fieldIndex].setBackground(BG_WARNING);
- fieldValue[fieldIndex].setForeground(FONT_WARNING);
- }
-
- // Otherwise, use the default component background.
- else {
- fieldValue[fieldIndex].setBackground(getBackground());
- fieldValue[fieldIndex].setForeground(getForeground());
- }
- }
+ }
+
+ /**
+ * Updates the indicated field value using the indicated number
+ * seen and matched elements. Automatically handles the special
+ * case of zero seen elements and also updates the colors of the
+ * field labels to the appropriate color based on the efficiency
+ * and the thresholds for warnings.
+ * @param seen - The number of elements seen.
+ * @param matched - The number of elements matched.
+ * @param fieldIndex - The index for the field that should display
+ * the statistical data.
+ * @param spaces - The number of spaces to giveto each displayed
+ * value.
+ * @param threshWarning - The threshold at which the "warning
+ * color should be used.
+ * @param threshCritical - The threshold at which the "critical"
+ * color should be used.
+ */
+ private void processEfficiency(int seen, int matched, int fieldIndex, int spaces, double threshWarning, double threshCritical) {
+ // Calculate the efficiency.
+ double efficiency = 100.0 * matched / seen;
+
+ // Create the format string.
+ String format = "%" + spaces + "d / %";
+
+ // If the number of values seen is zero, there is no
+ // percentage that can be calculated.
+ if(seen == 0) {
+ fieldValue[fieldIndex].setText(String.format(format + " ( N/A %%)", seen, matched));
+ }
+
+ // Otherwise, include the percentage.
+ else {
+ fieldValue[fieldIndex].setText(String.format(format + " (7.3f%%)", seen, matched, efficiency));
+ }
+
+ // If the efficiency is below the critical threshold,
+ // change the field background to the critical color.
+ if(efficiency < threshCritical) {
+ fieldValue[fieldIndex].setBackground(BG_CRITICAL);
+ fieldValue[fieldIndex].setForeground(FONT_CRITICAL);
+ }
+
+ // Otherwise, if the efficiency is below the warning
+ // level, set the field background to the warning color.
+ else if(efficiency < threshWarning) {
+ fieldValue[fieldIndex].setBackground(BG_WARNING);
+ fieldValue[fieldIndex].setForeground(FONT_WARNING);
+ }
+
+ // Otherwise, use the default component background.
+ else {
+ fieldValue[fieldIndex].setBackground(getBackground());
+ fieldValue[fieldIndex].setForeground(getForeground());
+ }
+ }
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ShifterTrigWindow.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ShifterTrigWindow.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/ShifterTrigWindow.java Wed Mar 9 11:43:24 2016
@@ -12,25 +12,25 @@
* to either yellow or red if the efficiencies drop too low.
*/
public class ShifterTrigWindow extends JPanel implements DiagnosticUpdatable {
- private static final long serialVersionUID = 1L;
- private ShifterTrigPanel localPanel = new ShifterTrigPanel("Instantaneous");
- private ShifterTrigPanel globalPanel = new ShifterTrigPanel("Run-Integrated");
-
- /**
- * Instantiates a new panel for displaying basic information
- * pertaining to trigger diagnostics.
- */
- public ShifterTrigWindow() {
- setLayout(new GridLayout(1, 2));
- add(localPanel);
- add(globalPanel);
- updatePanel(null, null);
- }
-
- @Override
- public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot) {
- // Update each panel with the appropriate snapshot.
- localPanel.updatePanel(localSnapshot);
- globalPanel.updatePanel(runSnapshot);
- }
+ private static final long serialVersionUID = 1L;
+ private ShifterTrigPanel localPanel = new ShifterTrigPanel("Instantaneous");
+ private ShifterTrigPanel globalPanel = new ShifterTrigPanel("Run-Integrated");
+
+ /**
+ * Instantiates a new panel for displaying basic information
+ * pertaining to trigger diagnostics.
+ */
+ public ShifterTrigWindow() {
+ setLayout(new GridLayout(1, 2));
+ add(localPanel);
+ add(globalPanel);
+ updatePanel(null, null);
+ }
+
+ @Override
+ public void updatePanel(DiagnosticSnapshot runSnapshot, DiagnosticSnapshot localSnapshot) {
+ // Update each panel with the appropriate snapshot.
+ localPanel.updatePanel(localSnapshot);
+ globalPanel.updatePanel(runSnapshot);
+ }
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/SinglesTablePanel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/SinglesTablePanel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/SinglesTablePanel.java Wed Mar 9 11:43:24 2016
@@ -7,14 +7,14 @@
* @author Kyle McCarty
*/
public class SinglesTablePanel extends AbstractTriggerTablePanel {
- // Static variables.
- private static final long serialVersionUID = 0L;
- private static final String[] CUT_NAMES = { " Cluster Energy (Low):",
- " Cluster Energy (High):", " Hit Count:" };
-
- /**
- * Instantiates a <code>SinglesTablePanel</code>.
- */
- public SinglesTablePanel() { super(CUT_NAMES, true); }
-
+ // Static variables.
+ private static final long serialVersionUID = 0L;
+ private static final String[] CUT_NAMES = { " Cluster Energy (Low):",
+ " Cluster Energy (High):", " Hit Count:" };
+
+ /**
+ * Instantiates a <code>SinglesTablePanel</code>.
+ */
+ public SinglesTablePanel() { super(CUT_NAMES, true); }
+
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/TableTextModel.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/TableTextModel.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/TableTextModel.java Wed Mar 9 11:43:24 2016
@@ -11,96 +11,96 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class TableTextModel extends AbstractTableModel {
- // Serial UID.
- private static final long serialVersionUID = 0L;
-
- // Stored values.
- private final int rows, columns;
- private final String[][] values;
-
- /**
- * Instantiates a new <code>TableTextModel</code> with the indicated
- * number of rows and columns.
- * @param rows - The number of rows.
- * @param columns - The number of columns.
- */
- public TableTextModel(int rows, int columns) {
- // Make sure that the arguments for rows and columns are valid.
- if(rows < 1) {
- throw new IllegalArgumentException("TableTextModel must have at least one row.");
- } else if(columns < 1) {
- throw new IllegalArgumentException("TableTextModel must have at least one column.");
- }
-
- // Define the number of rows and columns.
- this.rows = rows;
- this.columns = columns;
-
- // Instantiate the data storage array.
- values = new String[rows][columns];
- }
-
- @Override
- public int getRowCount() { return rows; }
-
- @Override
- public int getColumnCount() { return columns; }
-
- @Override
- public Object getValueAt(int rowIndex, int columnIndex) {
- // Ensure that the value is within the allowed range.
- validateIndex(rowIndex, columnIndex);
-
- // Return the value.
- return values[rowIndex][columnIndex];
- }
-
- @Override
- public void setValueAt(Object value, int rowIndex, int columnIndex) {
- // If the object is a string, pass it to the preferred handler.
- // This can also be performed if the value is null.
- if(value == null || value instanceof String) {
- setValueAt((String) value, rowIndex, columnIndex);
- }
-
- // Otherwise, cast the object to a string and use that instead.
- else { setValueAt(value.toString(), rowIndex, columnIndex); }
- }
-
- /**
- * Sets the text for the indicated column and row of the table.
- * @param value - The new text.
- * @param rowIndex - The row.
- * @param columnIndex - The column.
- * @throws IndexOutOfBoundsException Occurs if the row and column
- * are not a valid member of table model.
- */
- public void setValueAt(String value, int rowIndex, int columnIndex) throws IndexOutOfBoundsException {
- // Ensure that the value is within the allowed range.
- validateIndex(rowIndex, columnIndex);
-
- // Set the value.
- values[rowIndex][columnIndex] = value;
-
- // Update the table.
- this.fireTableCellUpdated(rowIndex, columnIndex);
- }
-
- /**
- * Checks to make sure that a given row/column pointer refers to
- * an extant position in the data array. In the event that the row
- * and column values are not valid, an <code>IndexOutOfBounds</code>
- * exception is thrown.
- * @param rowIndex - The row index.
- * @param columnIndex - The column index.
- * @throws IndexOutOfBoundsException Occurs if the row and column
- * are not a valid member of the data array.
- */
- private void validateIndex(int rowIndex, int columnIndex) throws IndexOutOfBoundsException {
- if(rowIndex < 0 || rowIndex >= getRowCount()) {
- throw new IndexOutOfBoundsException(String.format("Row index %d is out of bounds.", rowIndex));
- } else if(columnIndex < 0 || columnIndex >= getColumnCount()) {
- throw new IndexOutOfBoundsException(String.format("Column index %d is out of bounds.", columnIndex));
- }
- }
+ // Serial UID.
+ private static final long serialVersionUID = 0L;
+
+ // Stored values.
+ private final int rows, columns;
+ private final String[][] values;
+
+ /**
+ * Instantiates a new <code>TableTextModel</code> with the indicated
+ * number of rows and columns.
+ * @param rows - The number of rows.
+ * @param columns - The number of columns.
+ */
+ public TableTextModel(int rows, int columns) {
+ // Make sure that the arguments for rows and columns are valid.
+ if(rows < 1) {
+ throw new IllegalArgumentException("TableTextModel must have at least one row.");
+ } else if(columns < 1) {
+ throw new IllegalArgumentException("TableTextModel must have at least one column.");
+ }
+
+ // Define the number of rows and columns.
+ this.rows = rows;
+ this.columns = columns;
+
+ // Instantiate the data storage array.
+ values = new String[rows][columns];
+ }
+
+ @Override
+ public int getRowCount() { return rows; }
+
+ @Override
+ public int getColumnCount() { return columns; }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ // Ensure that the value is within the allowed range.
+ validateIndex(rowIndex, columnIndex);
+
+ // Return the value.
+ return values[rowIndex][columnIndex];
+ }
+
+ @Override
+ public void setValueAt(Object value, int rowIndex, int columnIndex) {
+ // If the object is a string, pass it to the preferred handler.
+ // This can also be performed if the value is null.
+ if(value == null || value instanceof String) {
+ setValueAt((String) value, rowIndex, columnIndex);
+ }
+
+ // Otherwise, cast the object to a string and use that instead.
+ else { setValueAt(value.toString(), rowIndex, columnIndex); }
+ }
+
+ /**
+ * Sets the text for the indicated column and row of the table.
+ * @param value - The new text.
+ * @param rowIndex - The row.
+ * @param columnIndex - The column.
+ * @throws IndexOutOfBoundsException Occurs if the row and column
+ * are not a valid member of table model.
+ */
+ public void setValueAt(String value, int rowIndex, int columnIndex) throws IndexOutOfBoundsException {
+ // Ensure that the value is within the allowed range.
+ validateIndex(rowIndex, columnIndex);
+
+ // Set the value.
+ values[rowIndex][columnIndex] = value;
+
+ // Update the table.
+ this.fireTableCellUpdated(rowIndex, columnIndex);
+ }
+
+ /**
+ * Checks to make sure that a given row/column pointer refers to
+ * an extant position in the data array. In the event that the row
+ * and column values are not valid, an <code>IndexOutOfBounds</code>
+ * exception is thrown.
+ * @param rowIndex - The row index.
+ * @param columnIndex - The column index.
+ * @throws IndexOutOfBoundsException Occurs if the row and column
+ * are not a valid member of the data array.
+ */
+ private void validateIndex(int rowIndex, int columnIndex) throws IndexOutOfBoundsException {
+ if(rowIndex < 0 || rowIndex >= getRowCount()) {
+ throw new IndexOutOfBoundsException(String.format("Row index %d is out of bounds.", rowIndex));
+ } else if(columnIndex < 0 || columnIndex >= getColumnCount()) {
+ throw new IndexOutOfBoundsException(String.format("Column index %d is out of bounds.", columnIndex));
+ }
+ }
}
Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/TriggerDiagnosticGUIDriver.java
=============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/TriggerDiagnosticGUIDriver.java (original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/trigger/TriggerDiagnosticGUIDriver.java Wed Mar 9 11:43:24 2016
@@ -9,45 +9,45 @@
import org.lcsim.util.Driver;
public class TriggerDiagnosticGUIDriver extends Driver {
- private JFrame window = new JFrame();
- private ClusterTablePanel clusterTable = new ClusterTablePanel();
- private SinglesTablePanel singlesTable = new SinglesTablePanel();
- private PairTablePanel pairTable = new PairTablePanel();
- private EfficiencyTablePanel efficiencyTable = new EfficiencyTablePanel();
- private String diagnosticCollectionName = "DiagnosticSnapshot";
-
- @Override
- public void startOfData() {
- window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- window.setSize(500, 400);
- //window.add(clusterTable);
- //window.add(singlesTable);
- //window.add(pairTable);
- window.add(efficiencyTable);
- window.setVisible(true);
- }
-
- @Override
- public void process(EventHeader event) {
- // Updates are only performed if a diagnostic snapshot object
- // exists. Otherwise, do nothing.
- if(event.hasCollection(DiagnosticSnapshot.class, diagnosticCollectionName)) {
- // Get the snapshot collection.
- List<DiagnosticSnapshot> snapshotList = event.get(DiagnosticSnapshot.class, diagnosticCollectionName);
-
- // Get the snapshot. There will only ever be one.
- DiagnosticSnapshot runSnapshot = snapshotList.get(1);
- DiagnosticSnapshot localSnapshot = snapshotList.get(0);
-
- // Feed it to the table.
- clusterTable.updatePanel(runSnapshot, localSnapshot);
- singlesTable.updatePanel(runSnapshot, localSnapshot);
- pairTable.updatePanel(runSnapshot, localSnapshot);
- efficiencyTable.updatePanel(runSnapshot, localSnapshot);
- }
- }
-
- public void setDiagnosticCollectionName(String name) {
- diagnosticCollectionName = name;
- }
+ private JFrame window = new JFrame();
+ private ClusterTablePanel clusterTable = new ClusterTablePanel();
+ private SinglesTablePanel singlesTable = new SinglesTablePanel();
+ private PairTablePanel pairTable = new PairTablePanel();
+ private EfficiencyTablePanel efficiencyTable = new EfficiencyTablePanel();
+ private String diagnosticCollectionName = "DiagnosticSnapshot";
+
+ @Override
+ public void startOfData() {
+ window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ window.setSize(500, 400);
+ //window.add(clusterTable);
+ //window.add(singlesTable);
+ //window.add(pairTable);
+ window.add(efficiencyTable);
+ window.setVisible(true);
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ // Updates are only performed if a diagnostic snapshot object
+ // exists. Otherwise, do nothing.
+ if(event.hasCollection(DiagnosticSnapshot.class, diagnosticCollectionName)) {
+ // Get the snapshot collection.
+ List<DiagnosticSnapshot> snapshotList = event.get(DiagnosticSnapshot.class, diagnosticCollectionName);
+
+ // Get the snapshot. There will only ever be one.
+ DiagnosticSnapshot runSnapshot = snapshotList.get(1);
+ DiagnosticSnapshot localSnapshot = snapshotList.get(0);
+
+ // Feed it to the table.
+ clusterTable.updatePanel(runSnapshot, localSnapshot);
+ singlesTable.updatePanel(runSnapshot, localSnapshot);
+ pairTable.updatePanel(runSnapshot, localSnapshot);
+ efficiencyTable.updatePanel(runSnapshot, localSnapshot);
+ }
+ }
+
+ public void setDiagnosticCollectionName(String name) {
+ diagnosticCollectionName = name;
+ }
}
Modified: java/trunk/parent/pom.xml
=============================================================================
--- java/trunk/parent/pom.xml (original)
+++ java/trunk/parent/pom.xml Wed Mar 9 11:43:24 2016
@@ -1,4 +1,5 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<prerequisites>
<maven>3.0</maven>
</prerequisites>
@@ -43,7 +44,7 @@
<id>srs-repo-public</id>
<name>SRS</name>
<url>http://srs.slac.stanford.edu/nexus/content/groups/srs-maven2-public/</url>
- </repository>
+ </repository>
<repository>
<id>lcsim-repo-public</id>
<name>LCSim</name>
@@ -66,13 +67,13 @@
<repository>
<id>lcsim-repo-releases</id>
<name>LCSim Releases</name>
- <!--<url>http://srs.slac.stanford.edu/nexus/content/repositories/lcsim-maven2-releases/</url>-->
+ <!--<url>http://srs.slac.stanford.edu/nexus/content/repositories/lcsim-maven2-releases/</url> -->
<url>http://scalnx-v01.slac.stanford.edu:8180/nexus/content/repositories/lcsim-maven2-releases/</url>
</repository>
<snapshotRepository>
<id>lcsim-repo-snapshots</id>
<name>LCSim Snapshots</name>
- <!--<url>http://srs.slac.stanford.edu/nexus/content/repositories/lcsim-maven2-snapshot/</url>-->
+ <!--<url>http://srs.slac.stanford.edu/nexus/content/repositories/lcsim-maven2-snapshot/</url> -->
<url>http://scalnx-v01.slac.stanford.edu:8180/nexus/content/repositories/lcsim-maven2-snapshot/</url>
</snapshotRepository>
<site>
@@ -342,12 +343,8 @@
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.17</version>
</plugin>
- <!--
- <plugin>
- <groupId>org.kuali.maven.plugins</groupId>
- <artifactId>graph-maven-plugin</artifactId>
- </plugin>
- -->
+ <!-- <plugin> <groupId>org.kuali.maven.plugins</groupId> <artifactId>graph-maven-plugin</artifactId>
+ </plugin> -->
</plugins>
</reporting>
<build>
@@ -380,7 +377,8 @@
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
</plugin>
- <!-- This fixes the lifecycle not covered by plugin execution error in Eclipse. -->
+ <!-- This fixes the lifecycle not covered by plugin execution
+ error in Eclipse. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
@@ -407,13 +405,8 @@
</lifecycleMappingMetadata>
</configuration>
</plugin>
- <!--
- <plugin>
- <groupId>org.kuali.maven.plugins</groupId>
- <artifactId>graph-maven-plugin</artifactId>
- <version>1.2.3</version>
- </plugin>
- -->
+ <!-- <plugin> <groupId>org.kuali.maven.plugins</groupId>
+ <artifactId>graph-maven-plugin</artifactId> <version>1.2.3</version> </plugin> -->
</plugins>
</pluginManagement>
<plugins>
@@ -433,10 +426,7 @@
<target>1.7</target>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
- <!--
- <staleMillis>1</staleMillis>
- <useIncrementalCompilation>false</useIncrementalCompilation>
- -->
+ <!-- <staleMillis>1</staleMillis> <useIncrementalCompilation>false</useIncrementalCompilation> -->
</configuration>
</plugin>
<plugin>
@@ -446,7 +436,7 @@
<configuration>
<argLine>-Xmx1024m</argLine>
<forkMode>pertest</forkMode>
- <systemPropertyVariables>
+ <systemPropertyVariables>
<org.lcsim.cacheDir>${org.lcsim.cacheDir}</org.lcsim.cacheDir>
<java.util.logging.config.class>org.hps.logging.config.TestLoggingConfig</java.util.logging.config.class>
</systemPropertyVariables>
@@ -469,7 +459,8 @@
<configuration>
<target>
<!-- Create the directory for test output. -->
- <mkdir dir="${project.build.directory}/test-output" />
+ <mkdir
+ dir="${project.build.directory}/test-output" />
</target>
</configuration>
<goals>
@@ -486,7 +477,33 @@
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
- </plugin>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>2.17</version>
+ <configuration>
+ <logViolationsToConsole>true</logViolationsToConsole>
+ <consoleOutput>true</consoleOutput>
+ <includeResources>true</includeResources>
+ <includeTestResources>true</includeTestResources>
+ <checkstyleRules>
+ <module name="Checker">a
+ <module name="FileTabCharacter">
+ <property name="fileExtensions" value="java,xml,lcsim"/>
+ </module>
+ </module>
+ </checkstyleRules>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>compile</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
<developers>
@@ -560,7 +577,7 @@
</roles>
<timezone>-8</timezone>
</developer>
- <developer>
+ <developer>
<name>Holly Szumila-Vance</name>
<email>[log in to unmask]</email>
<organization>Old Dominion University</organization>
Modified: java/trunk/recon/src/main/java/org/hps/recon/filtering/CosmicPMTFilter.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/CosmicPMTFilter.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/CosmicPMTFilter.java Wed Mar 9 11:43:24 2016
@@ -8,63 +8,63 @@
import org.lcsim.util.aida.AIDA;
public class CosmicPMTFilter extends Driver {
-
- // class storing raw PMT readout:
- static final String CLASSNAME="FADCGenericHits";
+
+ // class storing raw PMT readout:
+ static final String CLASSNAME="FADCGenericHits";
- // hardware location of PMTs:
- static final int CRATE=2; // this is hps2, crate #37 in EVIO
- static final int SLOT=20;
- static final int CHANNELS[]={13,14};
-
- // cuts on pulse integrals for cosmic signals (units ADC):
- static final float CUTS[]={2000,4000};
+ // hardware location of PMTs:
+ static final int CRATE=2; // this is hps2, crate #37 in EVIO
+ static final int SLOT=20;
+ static final int CHANNELS[]={13,14};
+
+ // cuts on pulse integrals for cosmic signals (units ADC):
+ static final float CUTS[]={2000,4000};
- // number of samples to use at beginning of window for pedestal:
- static final int NPEDSAMP=20;
+ // number of samples to use at beginning of window for pedestal:
+ static final int NPEDSAMP=20;
- AIDA aida = AIDA.defaultInstance();
+ AIDA aida = AIDA.defaultInstance();
- public void detectorChanged(Detector detector) {
- aida.tree().cd("/");
- aida.histogram2D("CosmicPMTs",400,0,10000,400,0,10000);
+ public void detectorChanged(Detector detector) {
+ aida.tree().cd("/");
+ aida.histogram2D("CosmicPMTs",400,0,10000,400,0,10000);
}
- public void process(EventHeader event) {
-
- // find PMT data:
- FADCGenericHit pmt1=null,pmt2=null;
- if (!event.hasCollection(GenericObject.class,CLASSNAME))
- throw new Driver.NextEventException();
- for (GenericObject gob : event.get(GenericObject.class,CLASSNAME)) {
- FADCGenericHit hit=(FADCGenericHit)gob;
- if (hit.getCrate()==CRATE && hit.getSlot()==SLOT) {
- if (hit.getChannel()==CHANNELS[0]) pmt1=hit;
- else if (hit.getChannel()==CHANNELS[1]) pmt2=hit;
- }
- }
- if (pmt1==null || pmt2==null) throw new Driver.NextEventException();
-
- // calculate and histogram pulse integrals:
- float pulse1=getPulseIntegral(pmt1);
- float pulse2=getPulseIntegral(pmt2);
+ public void process(EventHeader event) {
+
+ // find PMT data:
+ FADCGenericHit pmt1=null,pmt2=null;
+ if (!event.hasCollection(GenericObject.class,CLASSNAME))
+ throw new Driver.NextEventException();
+ for (GenericObject gob : event.get(GenericObject.class,CLASSNAME)) {
+ FADCGenericHit hit=(FADCGenericHit)gob;
+ if (hit.getCrate()==CRATE && hit.getSlot()==SLOT) {
+ if (hit.getChannel()==CHANNELS[0]) pmt1=hit;
+ else if (hit.getChannel()==CHANNELS[1]) pmt2=hit;
+ }
+ }
+ if (pmt1==null || pmt2==null) throw new Driver.NextEventException();
+
+ // calculate and histogram pulse integrals:
+ float pulse1=getPulseIntegral(pmt1);
+ float pulse2=getPulseIntegral(pmt2);
aida.histogram2D("CosmicPMTs").fill(pulse1,pulse2);
-
+
// cut on pulse integrals:
- if (pulse1<CUTS[0] || pulse2<CUTS[1]) throw new Driver.NextEventException();
- }
-
- public float getPulseIntegral(FADCGenericHit hh) {
- float sum=0;
- for (int samp : hh.getData()) sum+=samp;
- return sum-getPedestal(hh)*hh.getData().length;
- }
-
- public float getPedestal(FADCGenericHit hh) {
- if (hh.getData().length<NPEDSAMP)
- throw new java.lang.RuntimeException("Not enough samples for pedestal.");
- float sum=0;
- for (int isamp=0; isamp<NPEDSAMP; isamp++) sum+=hh.getData()[isamp];
- return sum/NPEDSAMP;
- }
+ if (pulse1<CUTS[0] || pulse2<CUTS[1]) throw new Driver.NextEventException();
+ }
+
+ public float getPulseIntegral(FADCGenericHit hh) {
+ float sum=0;
+ for (int samp : hh.getData()) sum+=samp;
+ return sum-getPedestal(hh)*hh.getData().length;
+ }
+
+ public float getPedestal(FADCGenericHit hh) {
+ if (hh.getData().length<NPEDSAMP)
+ throw new java.lang.RuntimeException("Not enough samples for pedestal.");
+ float sum=0;
+ for (int isamp=0; isamp<NPEDSAMP; isamp++) sum+=hh.getData()[isamp];
+ return sum/NPEDSAMP;
+ }
}
Modified: java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalGainCalibFilter.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalGainCalibFilter.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/EcalGainCalibFilter.java Wed Mar 9 11:43:24 2016
@@ -7,11 +7,11 @@
public class EcalGainCalibFilter extends EventReconFilter {
- private double feeCut = 0.6;
- private double molCut = 0.6;
- private double tMin = 16.0;
- private double tMax = 80.0;
- private double dtMax = 12.0;
+ private double feeCut = 0.6;
+ private double molCut = 0.6;
+ private double tMin = 16.0;
+ private double tMax = 80.0;
+ private double dtMax = 12.0;
private String clusterCollectionName = "EcalClusters";
public void setFeeCut(double feeCut) { this.feeCut = feeCut; }
@@ -27,32 +27,32 @@
@Override
public void process(EventHeader event)
{
- incrementEventProcessed();
+ incrementEventProcessed();
if (!event.hasCollection(Cluster.class, clusterCollectionName)) skipEvent();
List<Cluster> cc = event.get(Cluster.class, clusterCollectionName);
if (cc.size() < 1) skipEvent();
boolean keepEvent = false;
for (Cluster c1 : cc)
{
- final double t1 = ClusterUtilities.getSeedHitTime(c1);
- if (t1<tMin || t1>tMax) continue;
- if (c1.getEnergy() > feeCut)
- {
- keepEvent = true;
- break;
- }
- for (Cluster c2 : cc)
- {
- final double t2 = ClusterUtilities.getSeedHitTime(c2);
- if (c1 == c2) continue;
- if (t2<tMin || t2>tMax) continue;
- if (Math.abs(t1-t2) > dtMax) continue;
- if (c1.getEnergy() + c2.getEnergy() > molCut)
- {
- keepEvent = true;
- break;
- }
- }
+ final double t1 = ClusterUtilities.getSeedHitTime(c1);
+ if (t1<tMin || t1>tMax) continue;
+ if (c1.getEnergy() > feeCut)
+ {
+ keepEvent = true;
+ break;
+ }
+ for (Cluster c2 : cc)
+ {
+ final double t2 = ClusterUtilities.getSeedHitTime(c2);
+ if (c1 == c2) continue;
+ if (t2<tMin || t2>tMax) continue;
+ if (Math.abs(t1-t2) > dtMax) continue;
+ if (c1.getEnergy() + c2.getEnergy() > molCut)
+ {
+ keepEvent = true;
+ break;
+ }
+ }
}
if (!keepEvent) skipEvent();
incrementEventPassed();
Modified: java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java Wed Mar 9 11:43:24 2016
@@ -45,7 +45,7 @@
// cc.Delete();
// keep events with a cluster over 600 MeV with seed over 400 MeV (for 2015 running).
- // keep events with cluster over 1.2 GeV and seed over 650 MeV for 2016 running.
+ // keep events with cluster over 1.2 GeV and seed over 650 MeV for 2016 running.
if (cc.getEnergy() > 1.2 &&
ClusterUtilities.findSeedHit(cc).getCorrectedEnergy() > 0.65)
return;
Modified: java/trunk/recon/src/main/java/org/hps/recon/filtering/MinimumHitsFilter.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/MinimumHitsFilter.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/MinimumHitsFilter.java Wed Mar 9 11:43:24 2016
@@ -61,7 +61,7 @@
private boolean isHitOnTop(RawTrackerHit hit){
- HpsSiSensor sensor=(HpsSiSensor) hit.getDetectorElement();
+ HpsSiSensor sensor=(HpsSiSensor) hit.getDetectorElement();
IIdentifier id=hit.getIdentifier();
SiTrackerIdentifierHelper _sid_helper=(SiTrackerIdentifierHelper) sensor.getIdentifierHelper();
Modified: java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserScalerAndEpicsFilter.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserScalerAndEpicsFilter.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/PulserScalerAndEpicsFilter.java Wed Mar 9 11:43:24 2016
@@ -25,83 +25,83 @@
public class PulserScalerAndEpicsFilter extends Driver{
- public void process(EventHeader event) {
+ public void process(EventHeader event) {
- // only keep pulser triggers:
- if (!event.hasCollection(GenericObject.class,"TriggerBank"))
- throw new Driver.NextEventException();
- boolean isPulser=false;
- for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
- {
- if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
- TIData tid = new TIData(gob);
- if (tid.isPulserTrigger())
- {
- isPulser=true;
- break;
- }
- }
+ // only keep pulser triggers:
+ if (!event.hasCollection(GenericObject.class,"TriggerBank"))
+ throw new Driver.NextEventException();
+ boolean isPulser=false;
+ for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
+ {
+ if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
+ TIData tid = new TIData(gob);
+ if (tid.isPulserTrigger())
+ {
+ isPulser=true;
+ break;
+ }
+ }
- // don't drop any events with EPICS data or scalers data
- // (could also do this via event tag=31)
- final EpicsData edata = EpicsData.read(event);
- if (edata != null) return;
-
- if( event.hasCollection(GenericObject.class, "ScalerData"))
- return;
+ // don't drop any events with EPICS data or scalers data
+ // (could also do this via event tag=31)
+ final EpicsData edata = EpicsData.read(event);
+ if (edata != null) return;
+
+ if( event.hasCollection(GenericObject.class, "ScalerData"))
+ return;
- if (!isPulser) throw new Driver.NextEventException();
+ if (!isPulser) throw new Driver.NextEventException();
- }
- /**
- * standalone way to run this:
- *
- * @param arg [0] inputFile [1] outputFile [2] run number [3] detectorName (optional, default = "HPS-EngRun2015-Nominal-v1")
- * @throws IOException
- */
- public static void main(String arg[]) throws IOException{
- ConditionsDriver hack = new ConditionsDriver();
-
- String detectorName = "HPS-EngRun2015-Nominal-v1";
- if(arg.length >3)
- hack.setDetectorName(arg[3]);
- hack.setFreeze(true);
- hack.setRunNumber(Integer.parseInt(arg[2]));
- hack.initialize();
- PulserScalerAndEpicsFilter pf = new PulserScalerAndEpicsFilter();
- LCIOWriter writer = new LCIOWriter(arg[1]);
- File file = new File(arg[0]);
- LCIOReader reader = new LCIOReader(file);
- System.out.println(file.getPath());
- int nEventsKept = 0;
- int nEvents = 0;
- try{
- while(true){
- try{
-
- EventHeader eh = reader.read();
- if(eh.getEventNumber() %1000 == 0){
- //Driver.this.
- System.out.println("PulserFitter:");
- System.out.println(" " + nEventsKept + " events kept");
- System.out.println(" " + nEvents + "events read");
- }
- nEvents ++;
- pf.process(eh); //might throw NextEventException
-
- nEventsKept++;
- writer.write(eh);
- }catch(Driver.NextEventException e){
+ }
+ /**
+ * standalone way to run this:
+ *
+ * @param arg [0] inputFile [1] outputFile [2] run number [3] detectorName (optional, default = "HPS-EngRun2015-Nominal-v1")
+ * @throws IOException
+ */
+ public static void main(String arg[]) throws IOException{
+ ConditionsDriver hack = new ConditionsDriver();
+
+ String detectorName = "HPS-EngRun2015-Nominal-v1";
+ if(arg.length >3)
+ hack.setDetectorName(arg[3]);
+ hack.setFreeze(true);
+ hack.setRunNumber(Integer.parseInt(arg[2]));
+ hack.initialize();
+ PulserScalerAndEpicsFilter pf = new PulserScalerAndEpicsFilter();
+ LCIOWriter writer = new LCIOWriter(arg[1]);
+ File file = new File(arg[0]);
+ LCIOReader reader = new LCIOReader(file);
+ System.out.println(file.getPath());
+ int nEventsKept = 0;
+ int nEvents = 0;
+ try{
+ while(true){
+ try{
+
+ EventHeader eh = reader.read();
+ if(eh.getEventNumber() %1000 == 0){
+ //Driver.this.
+ System.out.println("PulserFitter:");
+ System.out.println(" " + nEventsKept + " events kept");
+ System.out.println(" " + nEvents + "events read");
+ }
+ nEvents ++;
+ pf.process(eh); //might throw NextEventException
+
+ nEventsKept++;
+ writer.write(eh);
+ }catch(Driver.NextEventException e){
- }
- }
- }catch(IOException e){
- e.printStackTrace();
- reader.close();
- }
+ }
+ }
+ }catch(IOException e){
+ e.printStackTrace();
+ reader.close();
+ }
- writer.close();
- }
+ writer.close();
+ }
}
Modified: java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/particle/ReconParticleDriver.java Wed Mar 9 11:43:24 2016
@@ -188,7 +188,7 @@
* @param nsigma
*/
public void setNSigmaPositionMatch(double nsigma) {
- MAXNSIGMAPOSITIONMATCH=nsigma;
+ MAXNSIGMAPOSITIONMATCH=nsigma;
}
@@ -255,7 +255,7 @@
for (List<Track> tracks : trackCollections) {
for (Track track : tracks) {
-
+
// Create a reconstructed particle to represent the track.
ReconstructedParticle particle = new BaseReconstructedParticle();
@@ -304,7 +304,7 @@
// prefer using GBL tracks to correct (later) the clusters, for some consistency:
if (track.getType() >= 32 || !clusterToTrack.containsKey(matchedCluster)) {
- clusterToTrack.put(matchedCluster,track);
+ clusterToTrack.put(matchedCluster,track);
}
}
@@ -365,7 +365,7 @@
ClusterUtilities.applyCorrections(ecal, cluster, ypos);
}
else {
- ClusterUtilities.applyCorrections(ecal, cluster);
+ ClusterUtilities.applyCorrections(ecal, cluster);
}
}
}
Modified: java/trunk/recon/src/main/java/org/hps/recon/particle/SimpleParticleID.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/particle/SimpleParticleID.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/particle/SimpleParticleID.java Wed Mar 9 11:43:24 2016
@@ -9,67 +9,67 @@
*
*/
public class SimpleParticleID implements ParticleID {
-
- int algorithmType = 0;
- int pdgID = UnknownPDG;
- int type = 0;
-
- double likelihood = 0.;
- // TODO: Need to define what other parameters are needed.
- double[] parameters = new double[1];
+
+ int algorithmType = 0;
+ int pdgID = UnknownPDG;
+ int type = 0;
+
+ double likelihood = 0.;
+ // TODO: Need to define what other parameters are needed.
+ double[] parameters = new double[1];
- public SimpleParticleID(){}
-
- public SimpleParticleID(int pdgID, int algorithmType, int type, double likelihood){
- this.pdgID = pdgID;
- this.algorithmType = algorithmType;
- this.type = type;
- this.likelihood = likelihood;
- }
-
- @Override
- public int getAlgorithmType() {
- return algorithmType;
- }
+ public SimpleParticleID(){}
+
+ public SimpleParticleID(int pdgID, int algorithmType, int type, double likelihood){
+ this.pdgID = pdgID;
+ this.algorithmType = algorithmType;
+ this.type = type;
+ this.likelihood = likelihood;
+ }
+
+ @Override
+ public int getAlgorithmType() {
+ return algorithmType;
+ }
- @Override
- public double getLikelihood() {
- return likelihood;
- }
+ @Override
+ public double getLikelihood() {
+ return likelihood;
+ }
- @Override
- public int getPDG() {
- return pdgID;
- }
+ @Override
+ public int getPDG() {
+ return pdgID;
+ }
- @Override
- public double[] getParameters() {
- return parameters;
- }
+ @Override
+ public double[] getParameters() {
+ return parameters;
+ }
- @Override
- public int getType() {
- return type;
- }
-
- public void setAlgorithmType(int algorithmType){
- this.algorithmType = algorithmType;
- }
-
- public void setLikelihood(int likelihood){
- this.likelihood = likelihood;
- }
-
- public void setPDG(int pdgID){
- this.pdgID = pdgID;
- }
-
- public void setType(int type){
- this.type = type;
- }
-
- public void setParameters(double[] parameters){
- this.parameters = parameters;
- }
+ @Override
+ public int getType() {
+ return type;
+ }
+
+ public void setAlgorithmType(int algorithmType){
+ this.algorithmType = algorithmType;
+ }
+
+ public void setLikelihood(int likelihood){
+ this.likelihood = likelihood;
+ }
+
+ public void setPDG(int pdgID){
+ this.pdgID = pdgID;
+ }
+
+ public void setType(int type){
+ this.type = type;
+ }
+
+ public void setParameters(double[] parameters){
+ this.parameters = parameters;
+ }
}
Modified: java/trunk/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/utils/TrackClusterMatcher.java Wed Mar 9 11:43:24 2016
@@ -230,7 +230,7 @@
*/
public double getDistance(Cluster cluster,Track track) {
- // Get the cluster position
+ // Get the cluster position
Hep3Vector cPos = new BasicHep3Vector(cluster.getPosition());
// Extrapolate the track to the Ecal cluster position
@@ -260,8 +260,8 @@
public double getNSigmaPosition(Cluster cluster,ReconstructedParticle particle) {
if (particle.getTracks().size()<1) return Double.MAX_VALUE;
- Track track=particle.getTracks().get(0);
-
+ Track track=particle.getTracks().get(0);
+
if (this.useAnalyticExtrapolator)
throw new RuntimeException("This is to be used with non-analytic extrapolator only.");
@@ -532,11 +532,11 @@
* Class to store track-cluster matching qualities.
*/
public class TrackClusterMatch {
- private double nSigmaPositionMatch=Double.MAX_VALUE;
- public TrackClusterMatch(ReconstructedParticle pp, Cluster cc) {
- nSigmaPositionMatch = getNSigmaPosition(cc,pp);
- }
- public double getNSigmaPositionMatch() { return nSigmaPositionMatch; }
+ private double nSigmaPositionMatch=Double.MAX_VALUE;
+ public TrackClusterMatch(ReconstructedParticle pp, Cluster cc) {
+ nSigmaPositionMatch = getNSigmaPosition(cc,pp);
+ }
+ public double getNSigmaPositionMatch() { return nSigmaPositionMatch; }
}
}
Modified: java/trunk/recon/src/main/java/org/hps/recon/vertexing/BaseSimpleVertexer.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/vertexing/BaseSimpleVertexer.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/vertexing/BaseSimpleVertexer.java Wed Mar 9 11:43:24 2016
@@ -12,25 +12,25 @@
public abstract class BaseSimpleVertexer implements SimpleVertexer {
- protected boolean _debug = false;
- protected Vertex _fitted_vertex = null;
+ protected boolean _debug = false;
+ protected Vertex _fitted_vertex = null;
- public BaseSimpleVertexer() {
- }
+ public BaseSimpleVertexer() {
+ }
- @Override
- public abstract void fitVertex();
+ @Override
+ public abstract void fitVertex();
- @Override
- public Vertex getFittedVertex() {
- return _fitted_vertex;
- }
-
- public void clear() {
- _fitted_vertex = null;
- }
-
- public abstract boolean isValid();
-
+ @Override
+ public Vertex getFittedVertex() {
+ return _fitted_vertex;
+ }
+
+ public void clear() {
+ _fitted_vertex = null;
+ }
+
+ public abstract boolean isValid();
+
}
Modified: java/trunk/recon/src/main/java/org/hps/recon/vertexing/BilliorVertex.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/vertexing/BilliorVertex.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/vertexing/BilliorVertex.java Wed Mar 9 11:43:24 2016
@@ -14,8 +14,8 @@
/**
*
- * @author Mathew Thomas Graham <[log in to unmask]>
- * @version $Id:$
+ * @author Mathew Thomas Graham <[log in to unmask]>
+ * @version $Id:$
*
*/
public class BilliorVertex implements Vertex {
@@ -74,12 +74,12 @@
* @param particle : The ReconstructedParticle Associated with this Vertex
*/
public void setAssociatedParticle(ReconstructedParticle particle){
- this._particle = particle;
+ this._particle = particle;
}
@Override
public boolean isPrimary() {
- return _isPrimary;
+ return _isPrimary;
}
@Override
@@ -94,7 +94,7 @@
@Override
public double getProbability() {
- return _probability;
+ return _probability;
}
@Override
@@ -108,7 +108,7 @@
}
// TODO: These should be pulled out and accessed by their own
- // getter methods.
+ // getter methods.
@Override
public Map<String, Double> getParameters() {
Map<String, Double> pars = new HashMap<String, Double>();
@@ -128,6 +128,6 @@
@Override
public ReconstructedParticle getAssociatedParticle() {
- return _particle;
+ return _particle;
}
}
Modified: java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoLineVertexer.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoLineVertexer.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoLineVertexer.java Wed Mar 9 11:43:24 2016
@@ -20,21 +20,21 @@
*/
public class TwoLineVertexer extends BaseSimpleVertexer {
protected Hep3Vector A1,A2,B1,B2;
-
- public TwoLineVertexer() {
-
- }
-
+
+ public TwoLineVertexer() {
+
+ }
+
public void setLines(Hep3Vector PA1, Hep3Vector PA2, Hep3Vector PB1, Hep3Vector PB2) {
- this.A1 = PA1;
- this.A2 = PA2;
- this.B1 = PB1;
- this.B2 = PB2;
+ this.A1 = PA1;
+ this.A2 = PA2;
+ this.B1 = PB1;
+ this.B2 = PB2;
}
public void clear() {
- super.clear();
- setLines(null,null,null,null);
+ super.clear();
+ setLines(null,null,null,null);
}
public boolean isValid() {
@@ -44,11 +44,11 @@
@Override
public void fitVertex() {
- assert isValid();
- Hep3Vector vtxPosition = getPOCALineToLine();
- if (vtxPosition!=null) {
- _fitted_vertex = new BaseVertex(true, "Two Line Vertexer", 0, 0, new SymmetricMatrix(0), vtxPosition, null);
- }
+ assert isValid();
+ Hep3Vector vtxPosition = getPOCALineToLine();
+ if (vtxPosition!=null) {
+ _fitted_vertex = new BaseVertex(true, "Two Line Vertexer", 0, 0, new SymmetricMatrix(0), vtxPosition, null);
+ }
}
/**
@@ -94,57 +94,57 @@
*/
private Hep3Vector getPOCALineToLine() {
- if(_debug) System.out.printf("%s: A1=%s A2=%s B1=%s B2=%s\n", this.getClass().getSimpleName(), A1.toString(), A2.toString(), B1.toString(), B2.toString());
+ if(_debug) System.out.printf("%s: A1=%s A2=%s B1=%s B2=%s\n", this.getClass().getSimpleName(), A1.toString(), A2.toString(), B1.toString(), B2.toString());
- double ya[][] = {VecOp.mult(-1,VecOp.sub(B1, A1)).v()};
- BasicMatrix y = (BasicMatrix)MatrixOp.transposed(new BasicMatrix(ya));
- Hep3Vector dB = VecOp.sub(B2, B1);
- Hep3Vector dA = VecOp.sub(A2, A1);
- BasicMatrix X = new BasicMatrix(3,2);
- for(int col=0;col<2;++col) {
- if(col==0) {
- X.setElement(0, col, dB.x());
- X.setElement(1, col, dB.y());
- X.setElement(2, col, dB.z());
- } else {
- X.setElement(0, col, -1*dA.x());
- X.setElement(1, col, -1*dA.y());
- X.setElement(2, col, -1*dA.z());
- }
- }
+ double ya[][] = {VecOp.mult(-1,VecOp.sub(B1, A1)).v()};
+ BasicMatrix y = (BasicMatrix)MatrixOp.transposed(new BasicMatrix(ya));
+ Hep3Vector dB = VecOp.sub(B2, B1);
+ Hep3Vector dA = VecOp.sub(A2, A1);
+ BasicMatrix X = new BasicMatrix(3,2);
+ for(int col=0;col<2;++col) {
+ if(col==0) {
+ X.setElement(0, col, dB.x());
+ X.setElement(1, col, dB.y());
+ X.setElement(2, col, dB.z());
+ } else {
+ X.setElement(0, col, -1*dA.x());
+ X.setElement(1, col, -1*dA.y());
+ X.setElement(2, col, -1*dA.z());
+ }
+ }
- BasicMatrix X_T = (BasicMatrix)MatrixOp.transposed(X);
- BasicMatrix XX_T = (BasicMatrix)MatrixOp.mult(X_T, X);
- BasicMatrix IXX_T = null;
- try {
- IXX_T = (BasicMatrix)MatrixOp.inverse(XX_T);
- }
- catch(MatrixOp.IndeterminateMatrixException e) {
- System.out.printf("%s: caught indeterminate exception %s\n",this.getClass().getSimpleName(),e.getMessage());
- return null;
- }
- BasicMatrix X_Ty = (BasicMatrix)MatrixOp.mult(X_T,y);
- BasicMatrix b = (BasicMatrix)MatrixOp.mult(IXX_T, X_Ty);
- double t = b.e(0, 0);
- double s = b.e(1, 0);
- Hep3Vector Bpca = VecOp.add(B1, VecOp.mult(t, dB));
- Hep3Vector Apca = VecOp.add(A1, VecOp.mult(s, dA));
+ BasicMatrix X_T = (BasicMatrix)MatrixOp.transposed(X);
+ BasicMatrix XX_T = (BasicMatrix)MatrixOp.mult(X_T, X);
+ BasicMatrix IXX_T = null;
+ try {
+ IXX_T = (BasicMatrix)MatrixOp.inverse(XX_T);
+ }
+ catch(MatrixOp.IndeterminateMatrixException e) {
+ System.out.printf("%s: caught indeterminate exception %s\n",this.getClass().getSimpleName(),e.getMessage());
+ return null;
+ }
+ BasicMatrix X_Ty = (BasicMatrix)MatrixOp.mult(X_T,y);
+ BasicMatrix b = (BasicMatrix)MatrixOp.mult(IXX_T, X_Ty);
+ double t = b.e(0, 0);
+ double s = b.e(1, 0);
+ Hep3Vector Bpca = VecOp.add(B1, VecOp.mult(t, dB));
+ Hep3Vector Apca = VecOp.add(A1, VecOp.mult(s, dA));
Hep3Vector vertex = VecOp.add(Apca, VecOp.mult(0.5, VecOp.sub(Bpca, Apca)));
- if(_debug) {
- System.out.printf("y:\n%s\n",y.toString());
- System.out.printf("X:\n%s\n",X.toString());
- System.out.printf("b:\n%s\n",b.toString());
- Hep3Vector ymin = VecOp.add(VecOp.mult(t, dB) , VecOp.mult(s, dA) );
- Hep3Vector yminprime = VecOp.add(VecOp.sub(B1, A1), ymin);
- System.out.printf("ymin:\n%s\n",ymin.toString());
- System.out.printf("yminprime:\n%s\n",yminprime.toString());
- System.out.printf("Apca:\n%s\n",Apca.toString());
- System.out.printf("Bpca:\n%s\n",Bpca.toString());
- System.out.printf("vertex:\n%s\n",vertex.toString());
- }
- return vertex;
-
-
+ if(_debug) {
+ System.out.printf("y:\n%s\n",y.toString());
+ System.out.printf("X:\n%s\n",X.toString());
+ System.out.printf("b:\n%s\n",b.toString());
+ Hep3Vector ymin = VecOp.add(VecOp.mult(t, dB) , VecOp.mult(s, dA) );
+ Hep3Vector yminprime = VecOp.add(VecOp.sub(B1, A1), ymin);
+ System.out.printf("ymin:\n%s\n",ymin.toString());
+ System.out.printf("yminprime:\n%s\n",yminprime.toString());
+ System.out.printf("Apca:\n%s\n",Apca.toString());
+ System.out.printf("Bpca:\n%s\n",Bpca.toString());
+ System.out.printf("vertex:\n%s\n",vertex.toString());
+ }
+ return vertex;
+
+
}
Modified: java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoParticleVertexer.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoParticleVertexer.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoParticleVertexer.java Wed Mar 9 11:43:24 2016
@@ -18,7 +18,7 @@
*/
public class TwoParticleVertexer extends TwoLineVertexer {
- public TwoParticleVertexer() {
+ public TwoParticleVertexer() {
}
public void setParticle(MCParticle track1,MCParticle track2) {
@@ -34,8 +34,8 @@
Hep3Vector PB2 = this.propAlongLine(PB1, p2, dz);
if(_debug) {
- System.out.printf("A1 %s p1 %s B1 %s p2 %s\n", PA1.toString(), p1.toString(), PB1.toString(), p2.toString());
- System.out.printf("A2 %s B2 %s\n", PA2.toString(), PB2.toString());
+ System.out.printf("A1 %s p1 %s B1 %s p2 %s\n", PA1.toString(), p1.toString(), PB1.toString(), p2.toString());
+ System.out.printf("A2 %s B2 %s\n", PA2.toString(), PB2.toString());
}
//set the member variables
Modified: java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoTrackFringeVertexer.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoTrackFringeVertexer.java (original)
+++ java/trunk/recon/src/main/java/org/hps/recon/vertexing/TwoTrackFringeVertexer.java Wed Mar 9 11:43:24 2016
@@ -25,7 +25,7 @@
protected HelixConverter converter = new HelixConverter(0.);
public void setTracks(Track track1, Track track2, FieldMap fieldMap) {
- SeedTrack s1 = (SeedTrack) track1;
+ SeedTrack s1 = (SeedTrack) track1;
HelicalTrackFit htf1 = s1.getSeedCandidate().getHelix();
HpsHelicalTrackFit hpstrk1 = new HpsHelicalTrackFit(htf1);
SeedTrack s2 = (SeedTrack) track2;
@@ -71,5 +71,5 @@
}
-
+
}
Modified: java/trunk/recon/src/test/java/org/hps/recon/particle/HpsReconParticleDriverTest.java
=============================================================================
--- java/trunk/recon/src/test/java/org/hps/recon/particle/HpsReconParticleDriverTest.java (original)
+++ java/trunk/recon/src/test/java/org/hps/recon/particle/HpsReconParticleDriverTest.java Wed Mar 9 11:43:24 2016
@@ -26,165 +26,165 @@
*/
public class HpsReconParticleDriverTest extends TestCase {
- private static final double B_FIELD = 0.5; // Tesla
- double[] trackParameters = new double[5];
- List<Track> tracks = new ArrayList<Track>();
- List<Cluster> clusters = new ArrayList<Cluster>();
- List<ReconstructedParticle> particleTracks;
- HpsReconParticleDriver particleDriver = null;
-
- public void setUp() throws Exception {
-
- System.out.println("\n#=== Creating Ideal Tracks ===#\n");
+ private static final double B_FIELD = 0.5; // Tesla
+ double[] trackParameters = new double[5];
+ List<Track> tracks = new ArrayList<Track>();
+ List<Cluster> clusters = new ArrayList<Cluster>();
+ List<ReconstructedParticle> particleTracks;
+ HpsReconParticleDriver particleDriver = null;
+
+ public void setUp() throws Exception {
+
+ System.out.println("\n#=== Creating Ideal Tracks ===#\n");
- // Create a pair of ideal e+e- tracks in opposite detector volumes.
- // The e+ track is created on the bottom half of the detector while
- // the e- track is created on the top half.
- Track electronTrack = new BaseTrack();
- trackParameters[BaseTrack.D0] = 0.41051;
- trackParameters[BaseTrack.OMEGA] = -2.2584e-4;
- trackParameters[BaseTrack.PHI] = 6.2626;
- trackParameters[BaseTrack.TANLAMBDA] = 0.046548;
- trackParameters[BaseTrack.Z0] = .23732;
- ((BaseTrack) electronTrack).setTrackParameters(trackParameters, B_FIELD);
-
- System.out.println("\n[ Track ] Electron: \n" + electronTrack.toString());
-
- Track positronTrack = new BaseTrack();
- trackParameters[BaseTrack.D0] = 0.19691;
- trackParameters[BaseTrack.OMEGA] = 1.005e-4;
- trackParameters[BaseTrack.PHI] = 6.2447;
- trackParameters[BaseTrack.TANLAMBDA] = -0.024134;
- trackParameters[BaseTrack.Z0] = -0.040231;
- ((BaseTrack) positronTrack).setTrackParameters(trackParameters, B_FIELD);
+ // Create a pair of ideal e+e- tracks in opposite detector volumes.
+ // The e+ track is created on the bottom half of the detector while
+ // the e- track is created on the top half.
+ Track electronTrack = new BaseTrack();
+ trackParameters[BaseTrack.D0] = 0.41051;
+ trackParameters[BaseTrack.OMEGA] = -2.2584e-4;
+ trackParameters[BaseTrack.PHI] = 6.2626;
+ trackParameters[BaseTrack.TANLAMBDA] = 0.046548;
+ trackParameters[BaseTrack.Z0] = .23732;
+ ((BaseTrack) electronTrack).setTrackParameters(trackParameters, B_FIELD);
+
+ System.out.println("\n[ Track ] Electron: \n" + electronTrack.toString());
+
+ Track positronTrack = new BaseTrack();
+ trackParameters[BaseTrack.D0] = 0.19691;
+ trackParameters[BaseTrack.OMEGA] = 1.005e-4;
+ trackParameters[BaseTrack.PHI] = 6.2447;
+ trackParameters[BaseTrack.TANLAMBDA] = -0.024134;
+ trackParameters[BaseTrack.Z0] = -0.040231;
+ ((BaseTrack) positronTrack).setTrackParameters(trackParameters, B_FIELD);
- System.out.println("\n[ Track ] Positron: \n" + positronTrack.toString());
+ System.out.println("\n[ Track ] Positron: \n" + positronTrack.toString());
- // Add the tracks to the list of tracks that will be used for test
- // purposes.
- tracks.add(electronTrack);
- tracks.add(positronTrack);
-
- System.out.println("\n#=== Creating Ideal Ecal Clusters ===#\n");
-
- // Create a pair of ideal clusters to match the e+e- pairs created
- // above. Since the properties of a cluster cannot be modified
- // directly via setter methods, first create a CalorimeterHit and
- // then use that to create a cluster.
- //Hep3Vector topHitPosition = new BasicHep3Vector(190.27, 69.729, 1422.8);
- //BaseCalorimeterHit topHit
- // = new BaseCalorimeterHit(.4600, .4600, 0, 0, 0, topHitPosition, 0);
-
- //System.out.println("\n[ Calorimeter Hit ] Top: \n" + topHit.toString());
-
- Cluster topCluster = new BaseCluster();
- //((BaseCluster) topCluster).addHit(topHit);
-
-
- System.out.print("\n[ Cluster ] Top: " + topCluster.toString());
- System.out.println(" and position= [" + topCluster.getPosition()[0] + ", "
- + topCluster.getPosition()[1] + ", "
- + topCluster.getPosition()[2] + " ]");
-
- //Hep3Vector bottomHitPosition = new BasicHep3Vector(-148.46, -39.27, 1430.5);
- //BaseCalorimeterHit bottomHit
- // = new BaseCalorimeterHit(1.1420, 1.1420, 0, 0, 0, bottomHitPosition, 0);
+ // Add the tracks to the list of tracks that will be used for test
+ // purposes.
+ tracks.add(electronTrack);
+ tracks.add(positronTrack);
+
+ System.out.println("\n#=== Creating Ideal Ecal Clusters ===#\n");
+
+ // Create a pair of ideal clusters to match the e+e- pairs created
+ // above. Since the properties of a cluster cannot be modified
+ // directly via setter methods, first create a CalorimeterHit and
+ // then use that to create a cluster.
+ //Hep3Vector topHitPosition = new BasicHep3Vector(190.27, 69.729, 1422.8);
+ //BaseCalorimeterHit topHit
+ // = new BaseCalorimeterHit(.4600, .4600, 0, 0, 0, topHitPosition, 0);
+
+ //System.out.println("\n[ Calorimeter Hit ] Top: \n" + topHit.toString());
+
+ Cluster topCluster = new BaseCluster();
+ //((BaseCluster) topCluster).addHit(topHit);
+
+
+ System.out.print("\n[ Cluster ] Top: " + topCluster.toString());
+ System.out.println(" and position= [" + topCluster.getPosition()[0] + ", "
+ + topCluster.getPosition()[1] + ", "
+ + topCluster.getPosition()[2] + " ]");
+
+ //Hep3Vector bottomHitPosition = new BasicHep3Vector(-148.46, -39.27, 1430.5);
+ //BaseCalorimeterHit bottomHit
+ // = new BaseCalorimeterHit(1.1420, 1.1420, 0, 0, 0, bottomHitPosition, 0);
- //System.out.println("\n[ Calorimeter Hit ] Bottom:\n " + bottomHit.toString());
-
- Cluster bottomCluster = new BaseCluster();
- //((BaseCluster) bottomCluster).addHit(bottomHit);
-
- System.out.print("\n[ Cluster ] bottom: " + bottomCluster.toString());
- System.out.println(" and position= [ " + topCluster.getPosition()[0] + ", "
- + topCluster.getPosition()[1] + ", "
- + topCluster.getPosition()[2] + " ]");
+ //System.out.println("\n[ Calorimeter Hit ] Bottom:\n " + bottomHit.toString());
+
+ Cluster bottomCluster = new BaseCluster();
+ //((BaseCluster) bottomCluster).addHit(bottomHit);
+
+ System.out.print("\n[ Cluster ] bottom: " + bottomCluster.toString());
+ System.out.println(" and position= [ " + topCluster.getPosition()[0] + ", "
+ + topCluster.getPosition()[1] + ", "
+ + topCluster.getPosition()[2] + " ]");
- // Add the clusters to the list of clusters that will be used for test
- // purposes.
- clusters.add(topCluster);
- clusters.add(bottomCluster);
-
- particleDriver = new HpsReconParticleDriver();
- particleDriver.setDebug(true);
- }
-
- public void testMakeReconstructedParticles(){
-
- System.out.println("\n#=== Running makeReconstructedParticles Test ===#");
-
-
- // Create two ReconstructedParticles with tracks only
- List<Cluster> emptyClusters = new ArrayList<Cluster>();
- List<List<Track>> trackCollections = new ArrayList<List<Track>>(0);
- trackCollections.add(tracks);
- particleTracks = particleDriver.makeReconstructedParticles(emptyClusters, trackCollections);
+ // Add the clusters to the list of clusters that will be used for test
+ // purposes.
+ clusters.add(topCluster);
+ clusters.add(bottomCluster);
+
+ particleDriver = new HpsReconParticleDriver();
+ particleDriver.setDebug(true);
+ }
- //
- // The list contains two Tracks which should result in two
- // ReconstructedParticles.
- //
- assertTrue("More particles than expected were created.", particleTracks.size() == 2);
- System.out.println("\nThe number of ReconstructedParticles created: " + particleTracks.size());
+ public void testMakeReconstructedParticles(){
+
+ System.out.println("\n#=== Running makeReconstructedParticles Test ===#");
+
+
+ // Create two ReconstructedParticles with tracks only
+ List<Cluster> emptyClusters = new ArrayList<Cluster>();
+ List<List<Track>> trackCollections = new ArrayList<List<Track>>(0);
+ trackCollections.add(tracks);
+ particleTracks = particleDriver.makeReconstructedParticles(emptyClusters, trackCollections);
- for(int particleN = 0; particleN < particleTracks.size(); particleN++){
-
- //
- // Check if the RecontructedParticle track is the same as the track
- // that created it
- //
- assertTrue("The particle track does not match the track that created it",
- particleTracks.get(particleN).getTracks().get(0).equals(tracks.get(particleN)));
-
-
- //
- // Check that the charge of the ReconstructedParticles was set properly
- //
- assertTrue("The charge of the ReconstructedParticle is equal to zero.",
- Math.abs(particleTracks.get(particleN).getCharge()) != 0);
- System.out.println("The charge of ReconstructedParticle number " + particleN + ": " + particleTracks.get(particleN).getCharge());
-
-
- //
- // Check that the particle ID was set correctly
- //
- assertTrue("The particle ID of the ReconstructedParticle is equal to zero.",
- particleTracks.get(particleN).getParticleIDUsed().getPDG() != 0);
- System.out.println("The particle ID of ReconstructedParticle number " + particleN + ": " + particleTracks.get(particleN).getParticleIDUsed().getPDG());
- }
-
- //
- // Check that the momentum of the ReconstructedParticles was set properly
- // and rotated to the detector frame.
- //
- Hep3Vector electronMomentum = new BasicHep3Vector(tracks.get(0).getTrackStates().get(0).getMomentum());
- electronMomentum = CoordinateTransformations.transformVectorToDetector(electronMomentum);
- assertTrue("The momentum of the track and ReconstructedParticle don't match! Top track p = "
- + electronMomentum.toString() + " Recon particle p = " + particleTracks.get(0).getMomentum().toString(),
- particleTracks.get(0).getMomentum().equals(electronMomentum));
-
- System.out.println("The momentum of the first ReconstructedParticle: " + particleTracks.get(0).getMomentum().toString());
-
- Hep3Vector positronMomentum = new BasicHep3Vector(tracks.get(1).getTrackStates().get(0).getMomentum());
- positronMomentum = CoordinateTransformations.transformVectorToDetector(positronMomentum);
- assertTrue("The momentum of track and ReconstructedParticle don't march! Bottom track p = "
- + positronMomentum.toString() + " Recon particle p = " + particleTracks.get(1).getMomentum().toString(),
- particleTracks.get(1).getMomentum().equals(positronMomentum));
-
- System.out.println("The momentum of the second ReconstructedParticle: " + particleTracks.get(1).getMomentum().toString());
-
- }
-
- public void testVertexParticles(){
-
- // Create two ReconstructedParticles with tracks only
- //List<Cluster> emptyClusters = new ArrayList<Cluster>();
- //particleTracks = particleDriver.makeReconstructedParticles(emptyClusters, tracks);
+ //
+ // The list contains two Tracks which should result in two
+ // ReconstructedParticles.
+ //
+ assertTrue("More particles than expected were created.", particleTracks.size() == 2);
+ System.out.println("\nThe number of ReconstructedParticles created: " + particleTracks.size());
+
+ for(int particleN = 0; particleN < particleTracks.size(); particleN++){
+
+ //
+ // Check if the RecontructedParticle track is the same as the track
+ // that created it
+ //
+ assertTrue("The particle track does not match the track that created it",
+ particleTracks.get(particleN).getTracks().get(0).equals(tracks.get(particleN)));
+
+
+ //
+ // Check that the charge of the ReconstructedParticles was set properly
+ //
+ assertTrue("The charge of the ReconstructedParticle is equal to zero.",
+ Math.abs(particleTracks.get(particleN).getCharge()) != 0);
+ System.out.println("The charge of ReconstructedParticle number " + particleN + ": " + particleTracks.get(particleN).getCharge());
+
+
+ //
+ // Check that the particle ID was set correctly
+ //
+ assertTrue("The particle ID of the ReconstructedParticle is equal to zero.",
+ particleTracks.get(particleN).getParticleIDUsed().getPDG() != 0);
+ System.out.println("The particle ID of ReconstructedParticle number " + particleN + ": " + particleTracks.get(particleN).getParticleIDUsed().getPDG());
+ }
+
+ //
+ // Check that the momentum of the ReconstructedParticles was set properly
+ // and rotated to the detector frame.
+ //
+ Hep3Vector electronMomentum = new BasicHep3Vector(tracks.get(0).getTrackStates().get(0).getMomentum());
+ electronMomentum = CoordinateTransformations.transformVectorToDetector(electronMomentum);
+ assertTrue("The momentum of the track and ReconstructedParticle don't match! Top track p = "
+ + electronMomentum.toString() + " Recon particle p = " + particleTracks.get(0).getMomentum().toString(),
+ particleTracks.get(0).getMomentum().equals(electronMomentum));
+
+ System.out.println("The momentum of the first ReconstructedParticle: " + particleTracks.get(0).getMomentum().toString());
+
+ Hep3Vector positronMomentum = new BasicHep3Vector(tracks.get(1).getTrackStates().get(0).getMomentum());
+ positronMomentum = CoordinateTransformations.transformVectorToDetector(positronMomentum);
+ assertTrue("The momentum of track and ReconstructedParticle don't march! Bottom track p = "
+ + positronMomentum.toString() + " Recon particle p = " + particleTracks.get(1).getMomentum().toString(),
+ particleTracks.get(1).getMomentum().equals(positronMomentum));
+
+ System.out.println("The momentum of the second ReconstructedParticle: " + particleTracks.get(1).getMomentum().toString());
+
+ }
+
+ public void testVertexParticles(){
+
+ // Create two ReconstructedParticles with tracks only
+ //List<Cluster> emptyClusters = new ArrayList<Cluster>();
+ //particleTracks = particleDriver.makeReconstructedParticles(emptyClusters, tracks);
- //List<ReconstructedParticle> electrons = particleTracks.subList(0, 1);
- //List<ReconstructedParticle> positrons = particleTracks.subList(1, 2);
-
- //particleDriver.vertexParticles(electrons, positrons);
-
- }
+ //List<ReconstructedParticle> electrons = particleTracks.subList(0, 1);
+ //List<ReconstructedParticle> positrons = particleTracks.subList(1, 2);
+
+ //particleDriver.vertexParticles(electrons, positrons);
+
+ }
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/daqconfig/DAQConfigDriver.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/daqconfig/DAQConfigDriver.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/daqconfig/DAQConfigDriver.java Wed Mar 9 11:43:24 2016
@@ -39,57 +39,57 @@
* @see ConfigurationManager
*/
public class DAQConfigDriver extends Driver {
- private int runNumber = -1;
- private String filepath = null;
- private boolean firstEvent = true;
- private boolean readDataFiles = false;
- private File[] dataFiles = new File[3];
- private int[] crateNumber = { 46, 37, 39 };
-
- /**
- * Verifies the parameter <code>filepath</code> for the data file
- * repository and checks that appropriate data files exist for the
- * requested run number if the driver is set to read from data files.
- * Otherwise, this does nothing.
- */
- @Override
- public void startOfData() {
- // Check whether to use stored data files or the EvIO data stream
- // as the source of the DAQ settings. Nothing needs to be done
- // in the latter case.
- if(readDataFiles) {
- // The user must define a data file prefix and repository
- // location for this option to be used.
- if(filepath == null) {
- throw new NullPointerException("DAQ settings repository filepath must be defined.");
- } if(runNumber == -1) {
- throw new NullPointerException("Run number must be defined.");
- }
-
- // Verify that the repository actually exist.
- File repository = new File(filepath);
- if(!repository.exists() || !repository.isDirectory()) {
- throw new IllegalArgumentException("Repository location \"" + filepath + "\" must be an existing directory.");
- }
-
- // Define the data file objects.
- for(int i = 0; i < dataFiles.length; i++) {
- try {
- dataFiles[i] = new File(repository.getCanonicalPath() + "/" + runNumber + "_" + crateNumber[i] + ".txt");
- } catch(IOException e) {
- throw new RuntimeException("Error resolving absolute repository filepath.");
- }
- }
-
- // Verify that the data files actually exist.
- for(File dataFile : dataFiles) {
- if(!dataFile.exists() || !dataFile.canRead()) {
- throw new IllegalArgumentException("Data file \"" + dataFile.getName() + "\" does not exist or can not be read.");
- }
- }
- }
- }
-
+ private int runNumber = -1;
+ private String filepath = null;
+ private boolean firstEvent = true;
+ private boolean readDataFiles = false;
+ private File[] dataFiles = new File[3];
+ private int[] crateNumber = { 46, 37, 39 };
+
+ /**
+ * Verifies the parameter <code>filepath</code> for the data file
+ * repository and checks that appropriate data files exist for the
+ * requested run number if the driver is set to read from data files.
+ * Otherwise, this does nothing.
+ */
+ @Override
+ public void startOfData() {
+ // Check whether to use stored data files or the EvIO data stream
+ // as the source of the DAQ settings. Nothing needs to be done
+ // in the latter case.
+ if(readDataFiles) {
+ // The user must define a data file prefix and repository
+ // location for this option to be used.
+ if(filepath == null) {
+ throw new NullPointerException("DAQ settings repository filepath must be defined.");
+ } if(runNumber == -1) {
+ throw new NullPointerException("Run number must be defined.");
+ }
+
+ // Verify that the repository actually exist.
+ File repository = new File(filepath);
+ if(!repository.exists() || !repository.isDirectory()) {
+ throw new IllegalArgumentException("Repository location \"" + filepath + "\" must be an existing directory.");
+ }
+
+ // Define the data file objects.
+ for(int i = 0; i < dataFiles.length; i++) {
+ try {
+ dataFiles[i] = new File(repository.getCanonicalPath() + "/" + runNumber + "_" + crateNumber[i] + ".txt");
+ } catch(IOException e) {
+ throw new RuntimeException("Error resolving absolute repository filepath.");
+ }
+ }
+
+ // Verify that the data files actually exist.
+ for(File dataFile : dataFiles) {
+ if(!dataFile.exists() || !dataFile.canRead()) {
+ throw new IllegalArgumentException("Data file \"" + dataFile.getName() + "\" does not exist or can not be read.");
+ }
+ }
+ }
+ }
+
/**
* Checks an event for the DAQ configuration banks and passes them
* to the <code>ConfigurationManager</code> if the driver is set to
@@ -99,28 +99,28 @@
*/
@Override
public void process(EventHeader event) {
- // If this is the first event and data files are to be read,
- // import the data files and generate the DAQ information.
- if(firstEvent && readDataFiles) {
- // Get the data files in the form of a data array.
- String[][] data;
- try { data = getDataFileArrays(dataFiles); }
- catch(IOException e) {
- throw new RuntimeException("An error occurred when processing the data files.");
- }
-
- // Instantiate an EvIO DAQ parser and feed it the data.
- EvioDAQParser daqConfig = new EvioDAQParser();
- for(int i = 0; i < dataFiles.length; i++) {
- daqConfig.parse(crateNumber[i], runNumber, data[i]);
- }
-
- // Update the configuration manager.
- ConfigurationManager.updateConfiguration(daqConfig);
- }
-
+ // If this is the first event and data files are to be read,
+ // import the data files and generate the DAQ information.
+ if(firstEvent && readDataFiles) {
+ // Get the data files in the form of a data array.
+ String[][] data;
+ try { data = getDataFileArrays(dataFiles); }
+ catch(IOException e) {
+ throw new RuntimeException("An error occurred when processing the data files.");
+ }
+
+ // Instantiate an EvIO DAQ parser and feed it the data.
+ EvioDAQParser daqConfig = new EvioDAQParser();
+ for(int i = 0; i < dataFiles.length; i++) {
+ daqConfig.parse(crateNumber[i], runNumber, data[i]);
+ }
+
+ // Update the configuration manager.
+ ConfigurationManager.updateConfiguration(daqConfig);
+ }
+
// Check if a trigger configuration bank exists.
- if(!readDataFiles && event.hasCollection(EvioDAQParser.class, "TriggerConfig")) {
+ if(!readDataFiles && event.hasCollection(EvioDAQParser.class, "TriggerConfig")) {
// Get the trigger configuration bank. There should only be
// one in the list.
List<EvioDAQParser> configList = event.get(EvioDAQParser.class, "TriggerConfig");
@@ -134,7 +134,7 @@
// Note that it is no longer the first event.
firstEvent = false;
}
-
+
/**
* Converts DAQ configuration data files into an array of strings
* where each array entry represents a line in the configuration
@@ -152,44 +152,44 @@
* or reading the objects in the objects referred to by the files
* pointed to in the <code>dataFiles</code> array.
*/
- private static final String[][] getDataFileArrays(File[] dataFiles) throws IOException {
- // Create file readers to process the data files.
- FileReader[] fr = new FileReader[dataFiles.length];
- BufferedReader[] reader = new BufferedReader[dataFiles.length];
- for(int i = 0; i < dataFiles.length; i++) {
- fr[i] = new FileReader(dataFiles[i]);
- reader[i] = new BufferedReader(fr[i]);
- }
-
- // Generate String arrays where each entry in the array is
- // a line from the data file.
- String[][] data = new String[dataFiles.length][0];
- for(int i = 0; i < dataFiles.length; i++) {
- // Create a list to hold the raw strings.
- List<String> rawData = new ArrayList<String>();
-
- // Add each line from the current data file to the list
- // as a single entry.
- String curLine = null;
- while((curLine = reader[i].readLine()) != null) {
- rawData.add(curLine);
- }
-
- // Convert the list into a String array.
- data[i] = rawData.toArray(new String[rawData.size()]);
- }
-
- // Return the data array.
- return data;
- }
-
- /**
- * Sets the run number of the DAQ configuration being processed.
- * This is only used when reading from data files.
- * @param run - The run number of the data files to be used.
- */
+ private static final String[][] getDataFileArrays(File[] dataFiles) throws IOException {
+ // Create file readers to process the data files.
+ FileReader[] fr = new FileReader[dataFiles.length];
+ BufferedReader[] reader = new BufferedReader[dataFiles.length];
+ for(int i = 0; i < dataFiles.length; i++) {
+ fr[i] = new FileReader(dataFiles[i]);
+ reader[i] = new BufferedReader(fr[i]);
+ }
+
+ // Generate String arrays where each entry in the array is
+ // a line from the data file.
+ String[][] data = new String[dataFiles.length][0];
+ for(int i = 0; i < dataFiles.length; i++) {
+ // Create a list to hold the raw strings.
+ List<String> rawData = new ArrayList<String>();
+
+ // Add each line from the current data file to the list
+ // as a single entry.
+ String curLine = null;
+ while((curLine = reader[i].readLine()) != null) {
+ rawData.add(curLine);
+ }
+
+ // Convert the list into a String array.
+ data[i] = rawData.toArray(new String[rawData.size()]);
+ }
+
+ // Return the data array.
+ return data;
+ }
+
+ /**
+ * Sets the run number of the DAQ configuration being processed.
+ * This is only used when reading from data files.
+ * @param run - The run number of the data files to be used.
+ */
public void setRunNumber(int run) {
- runNumber = run;
+ runNumber = run;
}
/**
@@ -198,7 +198,7 @@
* @param filepath - The file path of the data file repository.
*/
public void setDataFileRepository(String filepath) {
- this.filepath = filepath;
+ this.filepath = filepath;
}
/**
@@ -211,6 +211,6 @@
* should be read from the EvIO stream.
*/
public void setReadDataFiles(boolean state) {
- readDataFiles = state;
+ readDataFiles = state;
}
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/daqconfig/EvioDAQParser.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/daqconfig/EvioDAQParser.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/daqconfig/EvioDAQParser.java Wed Mar 9 11:43:24 2016
@@ -42,7 +42,7 @@
*
* TODO: Restructure, clean up...
*/
- /** The EvIO bank identification tag for DAQ configuration banks. */
+ /** The EvIO bank identification tag for DAQ configuration banks. */
public static final int BANK_TAG = 0xE10E;
// Stores the hardware codes for each trigger type.
@@ -204,7 +204,7 @@
* Instantiates the <code>EvioDAQParser</code>.
*/
public EvioDAQParser() {
- // Create a map to map crystals to their database channel object.
+ // Create a map to map crystals to their database channel object.
ecalConditions = DatabaseConditionsManager.getInstance().getEcalConditions();
for (int ii = 0; ii < 442; ii++) {
channels.add(findChannel(ii + 1));
@@ -220,9 +220,9 @@
* parameters.
*/
public void parse(int crate, int runNumber, String[] configurationTables) {
- // Track the number of banks that have been parsed. If the
- // parameter values have not been populated after a certain
- // number of banks, there is missing information.
+ // Track the number of banks that have been parsed. If the
+ // parameter values have not been populated after a certain
+ // number of banks, there is missing information.
nBanks++;
// Create a map that maps an identifier for each configuration
@@ -256,10 +256,10 @@
* contain the DAQ configuration parameters.
*/
private void loadConfigMap(int crate, String[] configTables) {
- // Iterate over each configuration table.
+ // Iterate over each configuration table.
for(String configTable : configTables) {
- // Split each table into rows and iterate over the rows.
- rowLoop:
+ // Split each table into rows and iterate over the rows.
+ rowLoop:
for(String line : configTable.trim().split("\n")) {
// Split the first column from the row.
String[] cols = line.trim().split(" +", 2);
@@ -290,8 +290,8 @@
// This entry indicates which triggers are enabled and
// needs to be parsed differently than normal.
else if(key.startsWith("SSP_HPS_SET_IO_SRC")) {
- // The first "parameter value" is a hardware code
- // that identifies the trigger. Obtain it.
+ // The first "parameter value" is a hardware code
+ // that identifies the trigger. Obtain it.
int trig = Integer.valueOf(vals.get(1));
// There are two trigger of each type, singles and
@@ -313,8 +313,8 @@
// This indicates a regular parameter that does not
// require any special parsing.
if(vals.size() > 1 && key.startsWith("SSP")) {
- // List the parameter by "[ROW NAME]_[KEY]" and
- // remove the key so that only the values remain.
+ // List the parameter by "[ROW NAME]_[KEY]" and
+ // remove the key so that only the values remain.
key += "_" + vals.remove(0);
}
@@ -330,7 +330,7 @@
* format of <code>[PARAMETER KEY] --> { [PARAMETER VALUES] }</code>.
*/
public void parseConfigMap() {
- // Parse simple FADC data.
+ // Parse simple FADC data.
fadcNSA = Integer.valueOf(getConfigParameter("FADC250_NSA", 0));
fadcNSB = Integer.valueOf(getConfigParameter("FADC250_NSB", 0));
fadcNPEAK = Integer.valueOf(getConfigParameter("FADC250_NPEAK", 0));
@@ -345,12 +345,12 @@
// Parse trigger data.
for(int ii = 0; ii < 2; ii++) {
- // Check singles trigger cuts enabled status.
+ // Check singles trigger cuts enabled status.
singlesNhitsEn[ii] = getBoolConfigSSP(ii, "SINGLES_NMIN", 1);
singlesEnergyMinEn[ii] = getBoolConfigSSP(ii, "SINGLES_EMIN", 1);
singlesEnergyMaxEn[ii] = getBoolConfigSSP(ii, "SINGLES_EMAX", 1);
- // Check pair trigger cuts enabled status.
+ // Check pair trigger cuts enabled status.
pairsEnergySumMaxMinEn[ii] = getBoolConfigSSP(ii, "PAIRS_SUMMAX_MIN", 2);
pairsEnergyDiffEn[ii] = getBoolConfigSSP(ii, "PAIRS_DIFFMAX", 1);
pairsCoplanarityEn[ii] = getBoolConfigSSP(ii, "PAIRS_COPLANARITY", 1);
@@ -383,7 +383,7 @@
* used to determine if the run is a "bugged" run.
*/
private void fixConfigMap2014Run(int runNumber) {
- // If this is a good run, noting should be done. Return.
+ // If this is a good run, noting should be done. Return.
if(runNumber > 3470 || runNumber < 3100) { return; }
// Populate missing GTP entries.
@@ -412,10 +412,10 @@
* the FADC channel with which they are associated.
*/
private void parseFADC(int crate, String key, List<String> vals) {
- // The FADC slot is not stored on the same line as the other
- // data and must be parsed and retained, as it is necessary
- // for handling the subsequent lines. If this line is the
- // FADC slot, store it.
+ // The FADC slot is not stored on the same line as the other
+ // data and must be parsed and retained, as it is necessary
+ // for handling the subsequent lines. If this line is the
+ // FADC slot, store it.
if(key.equals("FADC250_SLOT")) {
thisFadcSlot = Integer.valueOf(vals.get(0));
}
@@ -449,8 +449,8 @@
* to FADC channels 0 - 15.
*/
private void setChannelParsFloat(int crate, int slot, Map<EcalChannel, Float> map, List<String> vals) {
- // Iterate over each channel and map the database channel object
- // to the corresponding list value.
+ // Iterate over each channel and map the database channel object
+ // to the corresponding list value.
for(int ii = 0; ii < 16; ii++) {
map.put(findChannel(crate, slot, ii), Float.valueOf(vals.get(ii)));
}
@@ -468,8 +468,8 @@
* objects representing the channel values.
*/
private void setChannelParsInt(int crate, int slot, Map<EcalChannel, Integer> map, List<String> vals) {
- // Iterate over each channel and map the database channel object
- // to the corresponding list value.
+ // Iterate over each channel and map the database channel object
+ // to the corresponding list value.
for(int ii = 0; ii < 16; ii++) {
map.put(findChannel(crate, slot, ii), Integer.valueOf(vals.get(ii)));
}
@@ -619,9 +619,9 @@
* can not be found, an error message is passed to the logger.
*/
public String getConfigParameter(String key, int ival) {
- // Check the parameter map for the requested parameter key.
+ // Check the parameter map for the requested parameter key.
if(configMap.containsKey(key)) {
- // Get the list of values associated with this parameter key.
+ // Get the list of values associated with this parameter key.
List<String> vals = configMap.get(key);
// Check that the list of values contains a parameter for
@@ -639,7 +639,7 @@
// If the key is not present...
else {
// If more than 2 banks have been read, the absence of a
- // key represents an error. Log that this has occurred.
+ // key represents an error. Log that this has occurred.
if(nBanks > 2) {
Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "ConfigMap MISSING KEY: " + key);
}
@@ -659,13 +659,13 @@
* if it exists, and <code>null</code> if it does not.
*/
public EcalChannel findChannel(int crate, int fadcSlot, int fadcChan) {
- // Search through the database channels for a channel that
- // matches the the argument parameters.
+ // Search through the database channels for a channel that
+ // matches the the argument parameters.
for (EcalChannel cc : channels) {
- // A channel matches the argument if the slot and channel
- // values are the same. Crate number must also match, but
- // note that EcalChannel follows a different convention
- // with respect to crate numbering.
+ // A channel matches the argument if the slot and channel
+ // values are the same. Crate number must also match, but
+ // note that EcalChannel follows a different convention
+ // with respect to crate numbering.
if( ((cc.getCrate() - 1) * 2 == crate - 37) && (cc.getSlot() == fadcSlot) && (cc.getChannel() == fadcChan) ) {
return cc;
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/daqconfig/FADCConfig.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/daqconfig/FADCConfig.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/daqconfig/FADCConfig.java Wed Mar 9 11:43:24 2016
@@ -130,13 +130,13 @@
* per ADC.
*/
public float getGain(Point ixy) {
- // Get the channel index.
- Integer index = indexChannelMap.get(ixy);
-
- // If the channel index was defined, return the pedestal.
+ // Get the channel index.
+ Integer index = indexChannelMap.get(ixy);
+
+ // If the channel index was defined, return the pedestal.
if(index != null) { return getGain(index); }
else {
- throw new IllegalArgumentException(String.format("Crystal (%3d, %3d) does not exist.", ixy.x, ixy.y));
+ throw new IllegalArgumentException(String.format("Crystal (%3d, %3d) does not exist.", ixy.x, ixy.y));
}
}
@@ -226,13 +226,13 @@
* of ADC.
*/
public float getPedestal(Point ixy) {
- // Get the channel index.
- Integer index = indexChannelMap.get(ixy);
-
- // If the channel index was defined, return the pedestal.
+ // Get the channel index.
+ Integer index = indexChannelMap.get(ixy);
+
+ // If the channel index was defined, return the pedestal.
if(index != null) { return getPedestal(index); }
else {
- throw new IllegalArgumentException(String.format("Crystal (%3d, %3d) does not exist.", ixy.x, ixy.y));
+ throw new IllegalArgumentException(String.format("Crystal (%3d, %3d) does not exist.", ixy.x, ixy.y));
}
}
@@ -307,7 +307,7 @@
@Override
public void printConfig(PrintStream ps) {
- // Print the basic configuration information.
+ // Print the basic configuration information.
ps.println("FADC Configuration:");
ps.printf("\tMode :: %d%n", mode);
ps.printf("\tNSA :: %d%n", nsa);
@@ -322,23 +322,23 @@
// Iterate over each crystal y-index.
yLoop:
for(int iy = -5; iy <= 5; iy++) {
- // iy = 0 does not exists; skip it!
- if(iy == 0) { continue yLoop; }
-
- // Iterate over each crystal x-index.
- xLoop:
- for(int ix = -23; ix <= 23; ix++) {
- // ix = 0 and the beam hole do not exist; skip these!
- if(ix == 0) { continue xLoop; }
- if((ix >= -10 && ix <= -2) && (iy == -1 || iy == 1)) {
- continue xLoop;
- }
-
- // Output the crystal indices, pedestal, and gain.
- int channelID = indexChannelMap.get(new Point(ix, iy));
- ps.printf("\t%3d\t%3d\t%8.3f\t%8.3f\t%4d%n", ix, iy,
- getPedestal(channelID), getGain(channelID), getThreshold(channelID));
- }
+ // iy = 0 does not exists; skip it!
+ if(iy == 0) { continue yLoop; }
+
+ // Iterate over each crystal x-index.
+ xLoop:
+ for(int ix = -23; ix <= 23; ix++) {
+ // ix = 0 and the beam hole do not exist; skip these!
+ if(ix == 0) { continue xLoop; }
+ if((ix >= -10 && ix <= -2) && (iy == -1 || iy == 1)) {
+ continue xLoop;
+ }
+
+ // Output the crystal indices, pedestal, and gain.
+ int channelID = indexChannelMap.get(new Point(ix, iy));
+ ps.printf("\t%3d\t%3d\t%8.3f\t%8.3f\t%4d%n", ix, iy,
+ getPedestal(channelID), getGain(channelID), getThreshold(channelID));
+ }
}
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPData.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPData.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPData.java Wed Mar 9 11:43:24 2016
@@ -175,7 +175,7 @@
* of <code>SSPCosmicTrigger</code> objects.
*/
public List<SSPCosmicTrigger> getCosmicTriggers() {
- return cosmicList;
+ return cosmicList;
}
/**
@@ -184,7 +184,7 @@
* of <code>SSPPairTrigger</code> objects.
*/
public List<SSPPairTrigger> getPairTriggers() {
- return pairList;
+ return pairList;
}
/**
@@ -193,7 +193,7 @@
* of <code>SSPSinglesTrigger</code> objects.
*/
public List<SSPSinglesTrigger> getSinglesTriggers() {
- return singlesList;
+ return singlesList;
}
/**
Modified: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPNumberedTrigger.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPNumberedTrigger.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPNumberedTrigger.java Wed Mar 9 11:43:24 2016
@@ -10,16 +10,16 @@
* @see SSPTrigger
*/
public abstract class SSPNumberedTrigger extends SSPTrigger {
- /**
- * Instantiates the <code>SSPNumberedTrigger</code>.
+ /**
+ * Instantiates the <code>SSPNumberedTrigger</code>.
* @param type - The type of trigger.
* @param time - The time at which the trigger occurred in ns.
* @param data - The trigger bit data.
- */
- public SSPNumberedTrigger(int type, int time, int data) {
- super(type, time, data);
- }
-
+ */
+ public SSPNumberedTrigger(int type, int time, int data) {
+ super(type, time, data);
+ }
+
/**
* Indicates whether the trigger was reported by the first of the
* singles triggers.
Modified: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPPairTrigger.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPPairTrigger.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPPairTrigger.java Wed Mar 9 11:43:24 2016
@@ -21,12 +21,12 @@
@Override
public boolean isFirstTrigger() {
- return (type == SSPData.TRIG_TYPE_PAIR0);
+ return (type == SSPData.TRIG_TYPE_PAIR0);
}
@Override
public boolean isSecondTrigger() {
- return (type == SSPData.TRIG_TYPE_PAIR1);
+ return (type == SSPData.TRIG_TYPE_PAIR1);
}
/**
@@ -71,9 +71,9 @@
@Override
public String toString() {
- return String.format("Trigger %d :: %3d ns :: ESum: %d, EDiff: %d, ESlope: %d, Coplanarity: %d",
- isFirstTrigger() ? 1 : 2, getTime(), passCutEnergySum() ? 1 : 0,
- passCutEnergyDifference() ? 1 : 0, passCutEnergySlope() ? 1 : 0,
- passCutCoplanarity() ? 1 : 0);
+ return String.format("Trigger %d :: %3d ns :: ESum: %d, EDiff: %d, ESlope: %d, Coplanarity: %d",
+ isFirstTrigger() ? 1 : 2, getTime(), passCutEnergySum() ? 1 : 0,
+ passCutEnergyDifference() ? 1 : 0, passCutEnergySlope() ? 1 : 0,
+ passCutCoplanarity() ? 1 : 0);
}
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPSinglesTrigger.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPSinglesTrigger.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/SSPSinglesTrigger.java Wed Mar 9 11:43:24 2016
@@ -27,12 +27,12 @@
@Override
public boolean isFirstTrigger() {
- return (type == SSPData.TRIG_TYPE_SINGLES0_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP);
+ return (type == SSPData.TRIG_TYPE_SINGLES0_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP);
}
@Override
public boolean isSecondTrigger() {
- return (type == SSPData.TRIG_TYPE_SINGLES1_BOT) || (type == SSPData.TRIG_TYPE_SINGLES1_TOP);
+ return (type == SSPData.TRIG_TYPE_SINGLES1_BOT) || (type == SSPData.TRIG_TYPE_SINGLES1_TOP);
}
/**
@@ -67,8 +67,8 @@
@Override
public String toString() {
- return String.format("Trigger %d :: %3d ns :: EClusterLow: %d; EClusterHigh %d; HitCount: %d",
- isFirstTrigger() ? 1 : 2, getTime(), passCutEnergyMin() ? 1 : 0,
- passCutEnergyMax() ? 1 : 0, passCutHitCount() ? 1 : 0);
+ return String.format("Trigger %d :: %3d ns :: EClusterLow: %d; EClusterHigh %d; HitCount: %d",
+ isFirstTrigger() ? 1 : 2, getTime(), passCutEnergyMin() ? 1 : 0,
+ passCutEnergyMax() ? 1 : 0, passCutHitCount() ? 1 : 0);
}
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerModule.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerModule.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/triggerbank/TriggerModule.java Wed Mar 9 11:43:24 2016
@@ -44,8 +44,8 @@
* @see SSPCluster
*/
public final class TriggerModule {
- /** The calorimeter mid-plane, defined by the photon beam position
- * (30.52 mrad) at the calorimeter face (z = 1393 mm). */
+ /** The calorimeter mid-plane, defined by the photon beam position
+ * (30.52 mrad) at the calorimeter face (z = 1393 mm). */
private static final double ORIGIN_X = 1393.0 * Math.tan(0.03052);
/** The value of the parameter "F" in the energy slope equation
@@ -104,23 +104,23 @@
* above zero) will be accepted.
*/
public TriggerModule() {
- // Set the cluster singles cuts to accept all values by default.
- cuts.put(CLUSTER_HIT_COUNT_LOW, 0.0);
- cuts.put(CLUSTER_SEED_ENERGY_LOW, 0.0);
- cuts.put(CLUSTER_SEED_ENERGY_HIGH, Double.MAX_VALUE);
- cuts.put(CLUSTER_TOTAL_ENERGY_LOW, 0.0);
- cuts.put(CLUSTER_TOTAL_ENERGY_HIGH, Double.MAX_VALUE);
-
- // Set the cluster pair cuts to accept all values by default.
- cuts.put(PAIR_COPLANARITY_HIGH, 180.0);
- cuts.put(PAIR_ENERGY_DIFFERENCE_HIGH, Double.MAX_VALUE);
- cuts.put(PAIR_ENERGY_SLOPE_LOW, 0.0);
- cuts.put(PAIR_ENERGY_SUM_LOW, 0.0);
- cuts.put(PAIR_ENERGY_SUM_HIGH, Double.MAX_VALUE);
- cuts.put(PAIR_TIME_COINCIDENCE, Double.MAX_VALUE);
-
- // Set the default value of the energy slope parameter F.
- cuts.put(PAIR_ENERGY_SLOPE_F, 0.0055);
+ // Set the cluster singles cuts to accept all values by default.
+ cuts.put(CLUSTER_HIT_COUNT_LOW, 0.0);
+ cuts.put(CLUSTER_SEED_ENERGY_LOW, 0.0);
+ cuts.put(CLUSTER_SEED_ENERGY_HIGH, Double.MAX_VALUE);
+ cuts.put(CLUSTER_TOTAL_ENERGY_LOW, 0.0);
+ cuts.put(CLUSTER_TOTAL_ENERGY_HIGH, Double.MAX_VALUE);
+
+ // Set the cluster pair cuts to accept all values by default.
+ cuts.put(PAIR_COPLANARITY_HIGH, 180.0);
+ cuts.put(PAIR_ENERGY_DIFFERENCE_HIGH, Double.MAX_VALUE);
+ cuts.put(PAIR_ENERGY_SLOPE_LOW, 0.0);
+ cuts.put(PAIR_ENERGY_SUM_LOW, 0.0);
+ cuts.put(PAIR_ENERGY_SUM_HIGH, Double.MAX_VALUE);
+ cuts.put(PAIR_TIME_COINCIDENCE, Double.MAX_VALUE);
+
+ // Set the default value of the energy slope parameter F.
+ cuts.put(PAIR_ENERGY_SLOPE_F, 0.0055);
}
/**
@@ -142,25 +142,25 @@
* </ul>
*/
public TriggerModule(double... cutValues) {
- // Set the cuts to the default values.
- this();
-
- // Define the cuts in the order that they correspond to the
- // value arguments.
- String[] cutID = { CLUSTER_HIT_COUNT_LOW, CLUSTER_SEED_ENERGY_LOW, CLUSTER_SEED_ENERGY_HIGH,
- CLUSTER_TOTAL_ENERGY_LOW, CLUSTER_TOTAL_ENERGY_HIGH, PAIR_ENERGY_SUM_LOW, PAIR_ENERGY_SUM_HIGH,
- PAIR_ENERGY_DIFFERENCE_HIGH, PAIR_ENERGY_SLOPE_LOW, PAIR_COPLANARITY_HIGH, PAIR_ENERGY_SLOPE_F };
-
- // Iterate over the value arguments and assign them to the
- // appropriate cut.
- for(int i = 0; i < cutValues.length; i++) {
- // If more values were given then cuts exist, break from
- // the loop.
- if(i == 11) { break; }
-
- // Set the current cut to its corresponding value.
- cuts.put(cutID[i], cutValues[i]);
- }
+ // Set the cuts to the default values.
+ this();
+
+ // Define the cuts in the order that they correspond to the
+ // value arguments.
+ String[] cutID = { CLUSTER_HIT_COUNT_LOW, CLUSTER_SEED_ENERGY_LOW, CLUSTER_SEED_ENERGY_HIGH,
+ CLUSTER_TOTAL_ENERGY_LOW, CLUSTER_TOTAL_ENERGY_HIGH, PAIR_ENERGY_SUM_LOW, PAIR_ENERGY_SUM_HIGH,
+ PAIR_ENERGY_DIFFERENCE_HIGH, PAIR_ENERGY_SLOPE_LOW, PAIR_COPLANARITY_HIGH, PAIR_ENERGY_SLOPE_F };
+
+ // Iterate over the value arguments and assign them to the
+ // appropriate cut.
+ for(int i = 0; i < cutValues.length; i++) {
+ // If more values were given then cuts exist, break from
+ // the loop.
+ if(i == 11) { break; }
+
+ // Set the current cut to its corresponding value.
+ cuts.put(cutID[i], cutValues[i]);
+ }
}
/**
@@ -172,14 +172,14 @@
* specified in the argument is not valid.
*/
public double getCutValue(String cut) throws IllegalArgumentException {
- // Try to get the indicated cut.
- Double value = cuts.get(cut);
-
- // If the cut is valid, return it.
- if(value != null) { return value.doubleValue(); }
-
- // Otherwise, produce an exception.
- else { throw new IllegalArgumentException(String.format("Cut \"%s\" does not exist.", cut)); }
+ // Try to get the indicated cut.
+ Double value = cuts.get(cut);
+
+ // If the cut is valid, return it.
+ if(value != null) { return value.doubleValue(); }
+
+ // Otherwise, produce an exception.
+ else { throw new IllegalArgumentException(String.format("Cut \"%s\" does not exist.", cut)); }
}
/**
@@ -190,22 +190,22 @@
* @param config - The DAQ configuration settings.
*/
public void loadDAQConfiguration(SinglesTriggerConfig config) {
- // Set the trigger values.
- setCutValue(CLUSTER_TOTAL_ENERGY_LOW, config.getEnergyMinCutConfig().getLowerBound());
- setCutValue(CLUSTER_TOTAL_ENERGY_HIGH, config.getEnergyMaxCutConfig().getUpperBound());
- setCutValue(CLUSTER_HIT_COUNT_LOW, config.getHitCountCutConfig().getLowerBound());
-
- // The remaining triggers should be set to their default values.
- // These settings effectively accept all possible clusters.
- cuts.put(PAIR_COPLANARITY_HIGH, 180.0);
- cuts.put(PAIR_ENERGY_DIFFERENCE_HIGH, Double.MAX_VALUE);
- cuts.put(PAIR_ENERGY_SLOPE_LOW, 0.0);
- cuts.put(PAIR_ENERGY_SUM_LOW, 0.0);
- cuts.put(PAIR_ENERGY_SUM_HIGH, Double.MAX_VALUE);
- cuts.put(PAIR_TIME_COINCIDENCE, Double.MAX_VALUE);
-
- // Set the default value of the energy slope parameter F.
- cuts.put(PAIR_ENERGY_SLOPE_F, 0.0055);
+ // Set the trigger values.
+ setCutValue(CLUSTER_TOTAL_ENERGY_LOW, config.getEnergyMinCutConfig().getLowerBound());
+ setCutValue(CLUSTER_TOTAL_ENERGY_HIGH, config.getEnergyMaxCutConfig().getUpperBound());
+ setCutValue(CLUSTER_HIT_COUNT_LOW, config.getHitCountCutConfig().getLowerBound());
+
+ // The remaining triggers should be set to their default values.
+ // These settings effectively accept all possible clusters.
+ cuts.put(PAIR_COPLANARITY_HIGH, 180.0);
+ cuts.put(PAIR_ENERGY_DIFFERENCE_HIGH, Double.MAX_VALUE);
+ cuts.put(PAIR_ENERGY_SLOPE_LOW, 0.0);
+ cuts.put(PAIR_ENERGY_SUM_LOW, 0.0);
+ cuts.put(PAIR_ENERGY_SUM_HIGH, Double.MAX_VALUE);
+ cuts.put(PAIR_TIME_COINCIDENCE, Double.MAX_VALUE);
+
+ // Set the default value of the energy slope parameter F.
+ cuts.put(PAIR_ENERGY_SLOPE_F, 0.0055);
}
/**
@@ -215,22 +215,22 @@
* @param config - The DAQ configuration settings.
*/
public void loadDAQConfiguration(PairTriggerConfig config) {
- // Set the trigger values.
- setCutValue(CLUSTER_TOTAL_ENERGY_LOW, config.getEnergyMinCutConfig().getLowerBound());
- setCutValue(CLUSTER_TOTAL_ENERGY_HIGH, config.getEnergyMaxCutConfig().getUpperBound());
- setCutValue(CLUSTER_HIT_COUNT_LOW, config.getHitCountCutConfig().getLowerBound());
-
- // The remaining triggers should be set to their default values.
- // These settings effectively accept all possible clusters.
- cuts.put(PAIR_COPLANARITY_HIGH, config.getCoplanarityCutConfig().getUpperBound());
- cuts.put(PAIR_ENERGY_DIFFERENCE_HIGH, config.getEnergyDifferenceCutConfig().getUpperBound());
- cuts.put(PAIR_ENERGY_SLOPE_LOW, config.getEnergySlopeCutConfig().getLowerBound());
- cuts.put(PAIR_ENERGY_SUM_LOW, config.getEnergySumCutConfig().getLowerBound());
- cuts.put(PAIR_ENERGY_SUM_HIGH, config.getEnergySumCutConfig().getUpperBound());
- cuts.put(PAIR_TIME_COINCIDENCE, config.getTimeDifferenceCutConfig().getUpperBound() * 4.0);
-
- // Set the default value of the energy slope parameter F.
- cuts.put(PAIR_ENERGY_SLOPE_F, config.getEnergySlopeCutConfig().getParameterF());
+ // Set the trigger values.
+ setCutValue(CLUSTER_TOTAL_ENERGY_LOW, config.getEnergyMinCutConfig().getLowerBound());
+ setCutValue(CLUSTER_TOTAL_ENERGY_HIGH, config.getEnergyMaxCutConfig().getUpperBound());
+ setCutValue(CLUSTER_HIT_COUNT_LOW, config.getHitCountCutConfig().getLowerBound());
+
+ // The remaining triggers should be set to their default values.
+ // These settings effectively accept all possible clusters.
+ cuts.put(PAIR_COPLANARITY_HIGH, config.getCoplanarityCutConfig().getUpperBound());
+ cuts.put(PAIR_ENERGY_DIFFERENCE_HIGH, config.getEnergyDifferenceCutConfig().getUpperBound());
+ cuts.put(PAIR_ENERGY_SLOPE_LOW, config.getEnergySlopeCutConfig().getLowerBound());
+ cuts.put(PAIR_ENERGY_SUM_LOW, config.getEnergySumCutConfig().getLowerBound());
+ cuts.put(PAIR_ENERGY_SUM_HIGH, config.getEnergySumCutConfig().getUpperBound());
+ cuts.put(PAIR_TIME_COINCIDENCE, config.getTimeDifferenceCutConfig().getUpperBound() * 4.0);
+
+ // Set the default value of the energy slope parameter F.
+ cuts.put(PAIR_ENERGY_SLOPE_F, config.getEnergySlopeCutConfig().getParameterF());
}
/**
@@ -244,76 +244,76 @@
* identifier is not valid.
*/
public void setCutValue(String cut, double value) throws IllegalArgumentException {
- // Make sure that the cut exists. If it does, change it to the
- // new cut value.
- if(cuts.containsKey(cut)) {
- cuts.put(cut, value);
- }
-
- // Otherwise, throw an exception.
- else { throw new IllegalArgumentException(String.format("Cut \"%s\" does not exist.", cut)); }
- }
-
- /**
- * Sets the cluster singles cuts to the values parsed from an
- * argument string.
- * @param isSingles - Indicates whether the parser should expect
- * 10 cut values (for pairs) or 3 (for singles).
- * @param cutValues - A string representing the cuts values. This
- * must be formatted in the style of "Emin Emax Nmin ...".
- */
+ // Make sure that the cut exists. If it does, change it to the
+ // new cut value.
+ if(cuts.containsKey(cut)) {
+ cuts.put(cut, value);
+ }
+
+ // Otherwise, throw an exception.
+ else { throw new IllegalArgumentException(String.format("Cut \"%s\" does not exist.", cut)); }
+ }
+
+ /**
+ * Sets the cluster singles cuts to the values parsed from an
+ * argument string.
+ * @param isSingles - Indicates whether the parser should expect
+ * 10 cut values (for pairs) or 3 (for singles).
+ * @param cutValues - A string representing the cuts values. This
+ * must be formatted in the style of "Emin Emax Nmin ...".
+ */
// TODO: Specify in JavaDoc what the order of these arguments is.
- public void setCutValues(boolean isSingles, String cutValues) {
- // Make sure that the string is not null.
- if(cutValues == null) {
- throw new NullPointerException(String.format("Cut arguments for trigger are null!"));
- }
-
- // Tokenize the argument string.
- StringTokenizer tokens = new StringTokenizer(cutValues);
-
- // Store the cut values. Entry format is:
- // clusterEnergyMin clusterEnergyMax hitCountMin
- // clusterEnergyMin clusterEnergyMax hitCountMin pairSumMin pairSumMax pairDiffMax pairSlopeMin pairSlopeF pairCoplanarityMax pairTimeCoincidence
- double cuts[];
- if(isSingles) { cuts = new double[] { 0.0, 8.191, 0 }; }
- else { cuts = new double[] { 0.0, 8.191, 0, 0, 8.191, 8.191, 0, 0.0055, 180, Double.MAX_VALUE }; }
- String[] cutNames = { "clusterEnergyMin", "clusterEnergyMax", "hitCountMin",
- "pairSumMin", "pairSumMax", "pairDiffMax", "pairSlopeMin", "pairSlopeF",
- "pairCoplanarityMax", "pairTimeCoincidence" };
-
- // Iterate over the number of cuts and extract that many values
- // from the cut value string.
- for(int cutNum = 0; cutNum < cuts.length; cutNum++) {
- // If there are no more tokens left, the argument string
- // is missing some values. Throw an exception!
- if(tokens.hasMoreTokens()) {
- // Get the next token from the string.
- String arg = tokens.nextToken();
-
- // Try to parse the token as a double. All cut values
- // should be rendered as doubles (or integers, which
- // can be parsed as doubles). If it is not, the string
- // is improperly formatted.
- try { cuts[cutNum] = Double.parseDouble(arg); }
- catch(NumberFormatException e) {
- throw new NumberFormatException(String.format("Argument for \"%s\" improperly formatted: %s", cutNames[cutNum], arg));
- }
- }
- }
-
- // Store the cuts in the trigger.
- setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, cuts[0]);
- setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, cuts[1]);
- setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, cuts[2]);
- setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, cuts[3]);
- setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, cuts[4]);
- setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, cuts[5]);
- setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, cuts[6]);
- setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, cuts[7]);
- setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, cuts[8]);
- setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, cuts[9]);
- }
+ public void setCutValues(boolean isSingles, String cutValues) {
+ // Make sure that the string is not null.
+ if(cutValues == null) {
+ throw new NullPointerException(String.format("Cut arguments for trigger are null!"));
+ }
+
+ // Tokenize the argument string.
+ StringTokenizer tokens = new StringTokenizer(cutValues);
+
+ // Store the cut values. Entry format is:
+ // clusterEnergyMin clusterEnergyMax hitCountMin
+ // clusterEnergyMin clusterEnergyMax hitCountMin pairSumMin pairSumMax pairDiffMax pairSlopeMin pairSlopeF pairCoplanarityMax pairTimeCoincidence
+ double cuts[];
+ if(isSingles) { cuts = new double[] { 0.0, 8.191, 0 }; }
+ else { cuts = new double[] { 0.0, 8.191, 0, 0, 8.191, 8.191, 0, 0.0055, 180, Double.MAX_VALUE }; }
+ String[] cutNames = { "clusterEnergyMin", "clusterEnergyMax", "hitCountMin",
+ "pairSumMin", "pairSumMax", "pairDiffMax", "pairSlopeMin", "pairSlopeF",
+ "pairCoplanarityMax", "pairTimeCoincidence" };
+
+ // Iterate over the number of cuts and extract that many values
+ // from the cut value string.
+ for(int cutNum = 0; cutNum < cuts.length; cutNum++) {
+ // If there are no more tokens left, the argument string
+ // is missing some values. Throw an exception!
+ if(tokens.hasMoreTokens()) {
+ // Get the next token from the string.
+ String arg = tokens.nextToken();
+
+ // Try to parse the token as a double. All cut values
+ // should be rendered as doubles (or integers, which
+ // can be parsed as doubles). If it is not, the string
+ // is improperly formatted.
+ try { cuts[cutNum] = Double.parseDouble(arg); }
+ catch(NumberFormatException e) {
+ throw new NumberFormatException(String.format("Argument for \"%s\" improperly formatted: %s", cutNames[cutNum], arg));
+ }
+ }
+ }
+
+ // Store the cuts in the trigger.
+ setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, cuts[0]);
+ setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, cuts[1]);
+ setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, cuts[2]);
+ setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, cuts[3]);
+ setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, cuts[4]);
+ setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, cuts[5]);
+ setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, cuts[6]);
+ setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, cuts[7]);
+ setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, cuts[8]);
+ setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, cuts[9]);
+ }
/**
* Checks whether a cluster passes the cluster hit count cut. This
@@ -346,7 +346,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterSeedEnergyCut(Cluster cluster) {
- return clusterSeedEnergyCut(getValueClusterSeedEnergy(cluster));
+ return clusterSeedEnergyCut(getValueClusterSeedEnergy(cluster));
}
/**
@@ -357,7 +357,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterSeedEnergyCutHigh(Cluster cluster) {
- return clusterSeedEnergyCutHigh(getValueClusterSeedEnergy(cluster));
+ return clusterSeedEnergyCutHigh(getValueClusterSeedEnergy(cluster));
}
/**
@@ -368,7 +368,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterSeedEnergyCutLow(Cluster cluster) {
- return clusterSeedEnergyCutLow(getValueClusterSeedEnergy(cluster));
+ return clusterSeedEnergyCutLow(getValueClusterSeedEnergy(cluster));
}
/**
@@ -380,7 +380,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterTotalEnergyCut(Cluster cluster) {
- return clusterTotalEnergyCut(getValueClusterTotalEnergy(cluster));
+ return clusterTotalEnergyCut(getValueClusterTotalEnergy(cluster));
}
/**
@@ -392,7 +392,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterTotalEnergyCutHigh(Cluster cluster) {
- return clusterTotalEnergyCutHigh(getValueClusterTotalEnergy(cluster));
+ return clusterTotalEnergyCutHigh(getValueClusterTotalEnergy(cluster));
}
/**
@@ -404,7 +404,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterTotalEnergyCutLow(Cluster cluster) {
- return clusterTotalEnergyCutLow(getValueClusterTotalEnergy(cluster));
+ return clusterTotalEnergyCutLow(getValueClusterTotalEnergy(cluster));
}
/**
@@ -416,7 +416,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterTotalEnergyCut(SSPCluster cluster) {
- return clusterTotalEnergyCut(getValueClusterTotalEnergy(cluster));
+ return clusterTotalEnergyCut(getValueClusterTotalEnergy(cluster));
}
/**
@@ -428,7 +428,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterTotalEnergyCutHigh(SSPCluster cluster) {
- return clusterTotalEnergyCutHigh(getValueClusterTotalEnergy(cluster));
+ return clusterTotalEnergyCutHigh(getValueClusterTotalEnergy(cluster));
}
/**
@@ -440,7 +440,7 @@
* and <code>false</code> if the cluster does not.
*/
public boolean clusterTotalEnergyCutLow(SSPCluster cluster) {
- return clusterTotalEnergyCutLow(getValueClusterTotalEnergy(cluster));
+ return clusterTotalEnergyCutLow(getValueClusterTotalEnergy(cluster));
}
/**
@@ -450,12 +450,12 @@
* @return Returns displacement of the cluster.
*/
public static double getClusterDistance(Cluster cluster) {
- // Get the variables from the cluster.
- double x = getClusterX(cluster);
- double y = getClusterY(cluster);
-
- // Perform the calculation.
- return getClusterDistance(x, y);
+ // Get the variables from the cluster.
+ double x = getClusterX(cluster);
+ double y = getClusterY(cluster);
+
+ // Perform the calculation.
+ return getClusterDistance(x, y);
}
/**
@@ -465,12 +465,12 @@
* @return Returns displacement of the cluster.
*/
public static double getClusterDistance(SSPCluster cluster) {
- // Get the variables from the cluster.
- double x = getClusterX(cluster);
- double y = getClusterY(cluster);
-
- // Perform the calculation.
- return getClusterDistance(x, y);
+ // Get the variables from the cluster.
+ double x = getClusterX(cluster);
+ double y = getClusterY(cluster);
+
+ // Perform the calculation.
+ return getClusterDistance(x, y);
}
/**
@@ -480,7 +480,7 @@
* @return Returns the size as an <code>int</code>.
*/
public static final double getClusterHitCount(Cluster cluster) {
- return cluster.getCalorimeterHits().size();
+ return cluster.getCalorimeterHits().size();
}
/**
@@ -490,7 +490,7 @@
* @return Returns the size as an <code>int</code>.
*/
public static final double getClusterHitCount(SSPCluster cluster) {
- return cluster.getHitCount();
+ return cluster.getHitCount();
}
/**
@@ -500,11 +500,11 @@
* object.
*/
public static final CalorimeterHit getClusterSeedHit(Cluster cluster) {
- if(getClusterHitCount(cluster) > 0) {
- return cluster.getCalorimeterHits().get(0);
- } else {
- throw new NullPointerException("Cluster does not define hits!");
- }
+ if(getClusterHitCount(cluster) > 0) {
+ return cluster.getCalorimeterHits().get(0);
+ } else {
+ throw new NullPointerException("Cluster does not define hits!");
+ }
}
/**
@@ -514,7 +514,7 @@
* @return Returns the time as a <code>double</code>.
*/
public static final double getClusterTime(Cluster cluster) {
- return getClusterSeedHit(cluster).getTime();
+ return getClusterSeedHit(cluster).getTime();
}
/**
@@ -524,7 +524,7 @@
* @return Returns the time as a <code>double</code>.
*/
public static final double getClusterTime(SSPCluster cluster) {
- return cluster.getTime();
+ return cluster.getTime();
}
/**
@@ -534,7 +534,7 @@
* @return Returns the cluster x-position.
*/
public static double getClusterX(Cluster cluster) {
- return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[0];
+ return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[0];
}
/**
@@ -544,7 +544,7 @@
* @return Returns the cluster x-position.
*/
public static double getClusterX(SSPCluster cluster) {
- return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[0];
+ return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[0];
}
/**
@@ -553,7 +553,7 @@
* @return Returns the index as an <code>int</code>.
*/
public static final int getClusterXIndex(Cluster cluster) {
- return getClusterSeedHit(cluster).getIdentifierFieldValue("ix");
+ return getClusterSeedHit(cluster).getIdentifierFieldValue("ix");
}
/**
@@ -562,7 +562,7 @@
* @return Returns the index as an <code>int</code>.
*/
public static final int getClusterXIndex(SSPCluster cluster) {
- return cluster.getXIndex();
+ return cluster.getXIndex();
}
/**
@@ -572,7 +572,7 @@
* @return Returns the cluster y-position.
*/
public static double getClusterY(Cluster cluster) {
- return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[1];
+ return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[1];
}
/**
@@ -582,7 +582,7 @@
* @return Returns the cluster y-position.
*/
public static double getClusterY(SSPCluster cluster) {
- return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[1];
+ return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[1];
}
/**
@@ -591,7 +591,7 @@
* @return Returns the index as an <code>int</code>.
*/
public static final int getClusterYIndex(Cluster cluster) {
- return getClusterSeedHit(cluster).getIdentifierFieldValue("iy");
+ return getClusterSeedHit(cluster).getIdentifierFieldValue("iy");
}
/**
@@ -600,7 +600,7 @@
* @return Returns the index as an <code>int</code>.
*/
public static final int getClusterYIndex(SSPCluster cluster) {
- return cluster.getYIndex();
+ return cluster.getYIndex();
}
/**
@@ -610,7 +610,7 @@
* @return Returns the cluster z-position.
*/
public static double getClusterZ(Cluster cluster) {
- return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[2];
+ return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[2];
}
/**
@@ -620,7 +620,7 @@
* @return Returns the cluster z-position.
*/
public static double getClusterZ(SSPCluster cluster) {
- return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[2];
+ return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[2];
}
/**
@@ -632,48 +632,48 @@
* first entry in the array is always the top cluster, with the
* bottom cluster in the next position.
*/
- public static <E> List<E[]> getTopBottomPairs(List<E> clusters, Class<E> clusterType) throws IllegalArgumentException {
- // Ensure that only valid cluster types are processed.
- if(!clusterType.equals(Cluster.class) && !clusterType.equals(SSPCluster.class)) {
- throw new IllegalArgumentException("Class \"" + clusterType.getSimpleName() + "\" is not a supported cluster type.");
- }
-
- // Create a list to store top clusters, bottom clusters, and
- // cluster pairs.
- List<E> topClusters = new ArrayList<E>();
- List<E> botClusters = new ArrayList<E>();
- List<E[]> pairClusters = new ArrayList<E[]>();
-
- // Separate the cluster list into top/bottom clusters.
- for(E cluster : clusters) {
- // Process LCIO clusters...
- if(clusterType.equals(Cluster.class)) {
- if(getClusterYIndex((Cluster) cluster) > 0) {
- topClusters.add(cluster);
- } else { botClusters.add(cluster); }
- }
-
- // Process SSP clusters...
- else if(clusterType.equals(SSPCluster.class)) {
- if(getClusterYIndex((SSPCluster) cluster) > 0) {
- topClusters.add(cluster);
- } else { botClusters.add(cluster); }
- }
- }
-
- // Form all top/bottom cluster pairs.
- for(E topCluster : topClusters) {
- for(E botCluster : botClusters) {
- @SuppressWarnings("unchecked")
- E[] pair = (E[]) Array.newInstance(clusterType, 2);
- pair[0] = topCluster;
- pair[1] = botCluster;
- pairClusters.add(pair);
- }
- }
-
- // Return the cluster pairs.
- return pairClusters;
+ public static <E> List<E[]> getTopBottomPairs(List<E> clusters, Class<E> clusterType) throws IllegalArgumentException {
+ // Ensure that only valid cluster types are processed.
+ if(!clusterType.equals(Cluster.class) && !clusterType.equals(SSPCluster.class)) {
+ throw new IllegalArgumentException("Class \"" + clusterType.getSimpleName() + "\" is not a supported cluster type.");
+ }
+
+ // Create a list to store top clusters, bottom clusters, and
+ // cluster pairs.
+ List<E> topClusters = new ArrayList<E>();
+ List<E> botClusters = new ArrayList<E>();
+ List<E[]> pairClusters = new ArrayList<E[]>();
+
+ // Separate the cluster list into top/bottom clusters.
+ for(E cluster : clusters) {
+ // Process LCIO clusters...
+ if(clusterType.equals(Cluster.class)) {
+ if(getClusterYIndex((Cluster) cluster) > 0) {
+ topClusters.add(cluster);
+ } else { botClusters.add(cluster); }
+ }
+
+ // Process SSP clusters...
+ else if(clusterType.equals(SSPCluster.class)) {
+ if(getClusterYIndex((SSPCluster) cluster) > 0) {
+ topClusters.add(cluster);
+ } else { botClusters.add(cluster); }
+ }
+ }
+
+ // Form all top/bottom cluster pairs.
+ for(E topCluster : topClusters) {
+ for(E botCluster : botClusters) {
+ @SuppressWarnings("unchecked")
+ E[] pair = (E[]) Array.newInstance(clusterType, 2);
+ pair[0] = topCluster;
+ pair[1] = botCluster;
+ pairClusters.add(pair);
+ }
+ }
+
+ // Return the cluster pairs.
+ return pairClusters;
}
/**
@@ -685,29 +685,29 @@
* first entry in the array is always the top cluster, with the
* bottom cluster in the next position.
*/
- public static List<Cluster[]> getTopBottomPairs(Cluster... clusters) {
- // Create a list to store top clusters, bottom clusters, and
- // cluster pairs.
- List<Cluster> topClusters = new ArrayList<Cluster>();
- List<Cluster> botClusters = new ArrayList<Cluster>();
- List<Cluster[]> pairClusters = new ArrayList<Cluster[]>();
-
- // Separate the cluster list into top/bottom clusters.
- for(Cluster cluster : clusters) {
- if(getClusterYIndex(cluster) > 0) {
- topClusters.add(cluster);
- } else { botClusters.add(cluster); }
- }
-
- // Form all top/bottom cluster pairs.
- for(Cluster topCluster : topClusters) {
- for(Cluster botCluster : botClusters) {
- pairClusters.add(new Cluster[] { topCluster, botCluster });
- }
- }
-
- // Return the cluster pairs.
- return pairClusters;
+ public static List<Cluster[]> getTopBottomPairs(Cluster... clusters) {
+ // Create a list to store top clusters, bottom clusters, and
+ // cluster pairs.
+ List<Cluster> topClusters = new ArrayList<Cluster>();
+ List<Cluster> botClusters = new ArrayList<Cluster>();
+ List<Cluster[]> pairClusters = new ArrayList<Cluster[]>();
+
+ // Separate the cluster list into top/bottom clusters.
+ for(Cluster cluster : clusters) {
+ if(getClusterYIndex(cluster) > 0) {
+ topClusters.add(cluster);
+ } else { botClusters.add(cluster); }
+ }
+
+ // Form all top/bottom cluster pairs.
+ for(Cluster topCluster : topClusters) {
+ for(Cluster botCluster : botClusters) {
+ pairClusters.add(new Cluster[] { topCluster, botCluster });
+ }
+ }
+
+ // Return the cluster pairs.
+ return pairClusters;
}
/**
@@ -719,29 +719,29 @@
* The first entry in the array is always the top cluster, with
* the bottom cluster in the next position.
*/
- public static List<SSPCluster[]> getTopBottomPairs(SSPCluster... clusters) {
- // Create a list to store top clusters, bottom clusters, and
- // cluster pairs.
- List<SSPCluster> topClusters = new ArrayList<SSPCluster>();
- List<SSPCluster> botClusters = new ArrayList<SSPCluster>();
- List<SSPCluster[]> pairClusters = new ArrayList<SSPCluster[]>();
-
- // Separate the cluster list into top/bottom clusters.
- for(SSPCluster cluster : clusters) {
- if(getClusterYIndex(cluster) > 0) {
- topClusters.add(cluster);
- } else { botClusters.add(cluster); }
- }
-
- // Form all top/bottom cluster pairs.
- for(SSPCluster topCluster : topClusters) {
- for(SSPCluster botCluster : botClusters) {
- pairClusters.add(new SSPCluster[] { topCluster, botCluster });
- }
- }
-
- // Return the cluster pairs.
- return pairClusters;
+ public static List<SSPCluster[]> getTopBottomPairs(SSPCluster... clusters) {
+ // Create a list to store top clusters, bottom clusters, and
+ // cluster pairs.
+ List<SSPCluster> topClusters = new ArrayList<SSPCluster>();
+ List<SSPCluster> botClusters = new ArrayList<SSPCluster>();
+ List<SSPCluster[]> pairClusters = new ArrayList<SSPCluster[]>();
+
+ // Separate the cluster list into top/bottom clusters.
+ for(SSPCluster cluster : clusters) {
+ if(getClusterYIndex(cluster) > 0) {
+ topClusters.add(cluster);
+ } else { botClusters.add(cluster); }
+ }
+
+ // Form all top/bottom cluster pairs.
+ for(SSPCluster topCluster : topClusters) {
+ for(SSPCluster botCluster : botClusters) {
+ pairClusters.add(new SSPCluster[] { topCluster, botCluster });
+ }
+ }
+
+ // Return the cluster pairs.
+ return pairClusters;
}
/**
@@ -805,12 +805,12 @@
* @return Returns the cut value.
*/
public static double getValueCoplanarity(Cluster[] clusterPair) {
- // Get the variables used by the calculation.
- double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
- double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
-
- // Return the calculated value.
- return getValueCoplanarity(x, y);
+ // Get the variables used by the calculation.
+ double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
+ double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
+
+ // Return the calculated value.
+ return getValueCoplanarity(x, y);
}
/**
@@ -821,12 +821,12 @@
* @return Returns the cut value.
*/
public static double getValueCoplanarity(SSPCluster[] clusterPair) {
- // Get the variables used by the calculation.
- double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
- double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
-
- // Return the calculated value.
- return getValueCoplanarity(x, y);
+ // Get the variables used by the calculation.
+ double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
+ double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
+
+ // Return the calculated value.
+ return getValueCoplanarity(x, y);
}
/**
@@ -838,14 +838,14 @@
*/
@Deprecated
public static double getValueCoplanarityLegacy(Cluster[] clusterPair) {
- // Get the variables used by the calculation.
- double x[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("ix"),
- getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("ix") };
- double y[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("iy"),
- getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("iy") };
-
- // Return the calculated value.
- return getValueCoplanarityLegacy(x, y);
+ // Get the variables used by the calculation.
+ double x[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("ix"),
+ getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("ix") };
+ double y[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("iy"),
+ getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("iy") };
+
+ // Return the calculated value.
+ return getValueCoplanarityLegacy(x, y);
}
/**
@@ -855,10 +855,10 @@
* @return Returns the difference between the cluster energies.
*/
public static double getValueEnergyDifference(Cluster[] clusterPair) {
- // Get the variables used by the calculation.
- double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
-
- // Perform the calculation.
+ // Get the variables used by the calculation.
+ double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
+
+ // Perform the calculation.
return getValueEnergyDifference(energy);
}
@@ -869,10 +869,10 @@
* @return Returns the difference between the cluster energies.
*/
public static double getValueEnergyDifference(SSPCluster[] clusterPair) {
- // Get the variables used by the calculation.
- double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
-
- // Perform the calculation.
+ // Get the variables used by the calculation.
+ double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
+
+ // Perform the calculation.
return getValueEnergyDifference(energy);
}
@@ -885,13 +885,13 @@
* @return Returns the energy slope value.
*/
public static double getValueEnergySlope(Cluster[] clusterPair, double energySlopeParamF) {
- // Get the variables used by the calculation.
- double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
- double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
- double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
-
- // Perform the calculation.
- return getValueEnergySlope(energy, x, y, energySlopeParamF);
+ // Get the variables used by the calculation.
+ double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
+ double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
+ double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
+
+ // Perform the calculation.
+ return getValueEnergySlope(energy, x, y, energySlopeParamF);
}
/**
@@ -903,13 +903,13 @@
* @return Returns the energy slope value.
*/
public static double getValueEnergySlope(SSPCluster[] clusterPair, double energySlopeParamF) {
- // Get the variables used by the calculation.
- double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
- double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
- double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
-
- // Perform the calculation.
- return getValueEnergySlope(energy, x, y, energySlopeParamF);
+ // Get the variables used by the calculation.
+ double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
+ double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
+ double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
+
+ // Perform the calculation.
+ return getValueEnergySlope(energy, x, y, energySlopeParamF);
}
/**
@@ -924,15 +924,15 @@
*/
@Deprecated
public static double getValueEnergySlopeLegacy(Cluster[] clusterPair, double energySlopeParamF) {
- // Get the variables used by the calculation.
- double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
- double x[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("ix"),
- getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("ix") };
- double y[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("iy"),
- getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("iy") };
-
- // Perform the calculation.
- return getValueEnergySlopeLegacy(energy, x, y, energySlopeParamF);
+ // Get the variables used by the calculation.
+ double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
+ double x[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("ix"),
+ getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("ix") };
+ double y[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("iy"),
+ getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("iy") };
+
+ // Perform the calculation.
+ return getValueEnergySlopeLegacy(energy, x, y, energySlopeParamF);
}
/**
@@ -942,11 +942,11 @@
* @return Returns the sum of the cluster energies.
*/
public static double getValueEnergySum(Cluster[] clusterPair) {
- // Get the variables used by the calculation.
- double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
-
- // Perform the calculation.
- return getValueEnergySum(energy);
+ // Get the variables used by the calculation.
+ double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
+
+ // Perform the calculation.
+ return getValueEnergySum(energy);
}
/**
@@ -956,11 +956,11 @@
* @return Returns the sum of the cluster energies.
*/
public static double getValueEnergySum(SSPCluster[] clusterPair) {
- // Get the variables used by the calculation.
- double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
-
- // Perform the calculation.
- return getValueEnergySum(energy);
+ // Get the variables used by the calculation.
+ double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
+
+ // Perform the calculation.
+ return getValueEnergySum(energy);
}
/**
@@ -970,12 +970,12 @@
* @return Returns the absolute difference in the cluster times..
*/
public static double getValueTimeCoincidence(Cluster[] clusterPair) {
- // Get the variables used by the calculation.
- double[] time = { clusterPair[0].getCalorimeterHits().get(0).getTime(),
- clusterPair[1].getCalorimeterHits().get(0).getTime() };
-
- // Perform the calculation.
- return getValueTimeCoincidence(time);
+ // Get the variables used by the calculation.
+ double[] time = { clusterPair[0].getCalorimeterHits().get(0).getTime(),
+ clusterPair[1].getCalorimeterHits().get(0).getTime() };
+
+ // Perform the calculation.
+ return getValueTimeCoincidence(time);
}
/**
@@ -985,34 +985,34 @@
* @return Returns the absolute difference in the cluster times..
*/
public static double getValueTimeCoincidence(SSPCluster[] clusterPair) {
- // Get the variables used by the calculation.
- double[] time = { clusterPair[0].getTime(), clusterPair[1].getTime() };
-
- // Perform the calculation.
- return getValueTimeCoincidence(time);
- }
-
- /**
- * Indicates whether the argument cluster is located in the fiducial
- * region or not.
- * @param cluster - The cluster to check.
- * @return Returns <code>true</code> if the cluster is located in
- * the fiducial region and <code>false</code> otherwise.
- */
- public static final boolean inFiducialRegion(Cluster cluster) {
- return inFiducialRegion(getClusterXIndex(cluster), getClusterYIndex(cluster));
- }
-
- /**
- * Indicates whether the argument cluster is located in the fiducial
- * region or not.
- * @param cluster - The cluster to check.
- * @return Returns <code>true</code> if the cluster is located in
- * the fiducial region and <code>false</code> otherwise.
- */
- public static final boolean inFiducialRegion(SSPCluster cluster) {
- return inFiducialRegion(getClusterXIndex(cluster), getClusterYIndex(cluster));
- }
+ // Get the variables used by the calculation.
+ double[] time = { clusterPair[0].getTime(), clusterPair[1].getTime() };
+
+ // Perform the calculation.
+ return getValueTimeCoincidence(time);
+ }
+
+ /**
+ * Indicates whether the argument cluster is located in the fiducial
+ * region or not.
+ * @param cluster - The cluster to check.
+ * @return Returns <code>true</code> if the cluster is located in
+ * the fiducial region and <code>false</code> otherwise.
+ */
+ public static final boolean inFiducialRegion(Cluster cluster) {
+ return inFiducialRegion(getClusterXIndex(cluster), getClusterYIndex(cluster));
+ }
+
+ /**
+ * Indicates whether the argument cluster is located in the fiducial
+ * region or not.
+ * @param cluster - The cluster to check.
+ * @return Returns <code>true</code> if the cluster is located in
+ * the fiducial region and <code>false</code> otherwise.
+ */
+ public static final boolean inFiducialRegion(SSPCluster cluster) {
+ return inFiducialRegion(getClusterXIndex(cluster), getClusterYIndex(cluster));
+ }
/**
* Checks if a cluster pair is coplanar to the beam within a given
@@ -1094,7 +1094,7 @@
* the cut and <code>false</code> if it does not.
*/
public boolean pairEnergySumCut(Cluster[] clusterPair) {
- return pairEnergySumCut(getValueEnergySum(clusterPair));
+ return pairEnergySumCut(getValueEnergySum(clusterPair));
}
/**
@@ -1106,7 +1106,7 @@
* the cut and <code>false</code> if it does not.
*/
public boolean pairEnergySumCutHigh(Cluster[] clusterPair) {
- return pairEnergySumCutHigh(getValueEnergySum(clusterPair));
+ return pairEnergySumCutHigh(getValueEnergySum(clusterPair));
}
/**
@@ -1118,7 +1118,7 @@
* the cut and <code>false</code> if it does not.
*/
public boolean pairEnergySumCutLow(Cluster[] clusterPair) {
- return pairEnergySumCutLow(getValueEnergySum(clusterPair));
+ return pairEnergySumCutLow(getValueEnergySum(clusterPair));
}
/**
@@ -1131,7 +1131,7 @@
* the cut and <code>false</code> if it does not.
*/
public boolean pairEnergySumCut(SSPCluster[] clusterPair) {
- return pairEnergySumCut(getValueEnergySum(clusterPair));
+ return pairEnergySumCut(getValueEnergySum(clusterPair));
}
/**
@@ -1143,7 +1143,7 @@
* the cut and <code>false</code> if it does not.
*/
public boolean pairEnergySumCutHigh(SSPCluster[] clusterPair) {
- return pairEnergySumCutHigh(getValueEnergySum(clusterPair));
+ return pairEnergySumCutHigh(getValueEnergySum(clusterPair));
}
/**
@@ -1155,7 +1155,7 @@
* the cut and <code>false</code> if it does not.
*/
public boolean pairEnergySumCutLow(SSPCluster[] clusterPair) {
- return pairEnergySumCutLow(getValueEnergySum(clusterPair));
+ return pairEnergySumCutLow(getValueEnergySum(clusterPair));
}
/**
@@ -1167,7 +1167,7 @@
* the cut and <code>false</code> if it does not.
*/
public boolean pairTimeCoincidenceCut(Cluster[] clusterPair) {
- return pairTimeCoincidenceCut(getValueTimeCoincidence(clusterPair));
+ return pairTimeCoincidenceCut(getValueTimeCoincidence(clusterPair));
}
/**
@@ -1179,7 +1179,7 @@
* the cut and <code>false</code> if it does not.
*/
public boolean pairTimeCoincidenceCut(SSPCluster[] clusterPair) {
- return pairTimeCoincidenceCut(getValueTimeCoincidence(clusterPair));
+ return pairTimeCoincidenceCut(getValueTimeCoincidence(clusterPair));
}
/**
@@ -1280,22 +1280,22 @@
* the x-index and either of the cases where <code>iy == 0</code>
* or <code>|iy| > 5</code> for the y-index.
*/
- private static double[] getCrystalPosition(int ix, int iy) throws IndexOutOfBoundsException {
- // Make sure that the requested crystal is a valid crystal.
- if(ix == 0 || ix < -23 || ix > 23) {
- throw new IndexOutOfBoundsException(String.format("Value \"%d\" is invalid for field x-index.", ix));
- } if(iy == 0 || iy < -5 || iy > 5) {
- throw new IndexOutOfBoundsException(String.format("Value \"%d\" is invalid for field y-index.", iy));
- }
-
- // Get the position map.
- double posMap[];
- if(ix < 1) { posMap = position[5 - iy][22 - ix]; }
- else { posMap = position[5 - iy][23 - ix]; }
-
- // Return the corrected mapped position.
- return new double[] { posMap[0], posMap[2], posMap[1] };
- }
+ private static double[] getCrystalPosition(int ix, int iy) throws IndexOutOfBoundsException {
+ // Make sure that the requested crystal is a valid crystal.
+ if(ix == 0 || ix < -23 || ix > 23) {
+ throw new IndexOutOfBoundsException(String.format("Value \"%d\" is invalid for field x-index.", ix));
+ } if(iy == 0 || iy < -5 || iy > 5) {
+ throw new IndexOutOfBoundsException(String.format("Value \"%d\" is invalid for field y-index.", iy));
+ }
+
+ // Get the position map.
+ double posMap[];
+ if(ix < 1) { posMap = position[5 - iy][22 - ix]; }
+ else { posMap = position[5 - iy][23 - ix]; }
+
+ // Return the corrected mapped position.
+ return new double[] { posMap[0], posMap[2], posMap[1] };
+ }
/**
* Calculates the value used by the coplanarity cut.
@@ -1309,7 +1309,7 @@
// Get the cluster angles.
int[] clusterAngle = new int[2];
for(int i = 0; i < 2; i++) {
- clusterAngle[i] = (int) Math.round(Math.atan(x[i] / y[i]) * 180.0 / Math.PI);
+ clusterAngle[i] = (int) Math.round(Math.atan(x[i] / y[i]) * 180.0 / Math.PI);
}
// Calculate the coplanarity cut value.
@@ -1357,9 +1357,9 @@
* @return Returns the cut value.
*/
private static double getValueEnergySlope(double energy[], double x[], double y[], double energySlopeParamF) {
- // Determine which cluster is the lower-energy cluster.
- int lei = energy[0] < energy[1] ? 0 : 1;
-
+ // Determine which cluster is the lower-energy cluster.
+ int lei = energy[0] < energy[1] ? 0 : 1;
+
// E + R*F
// Get the low energy cluster energy.
double slopeParamE = energy[lei];
@@ -1383,9 +1383,9 @@
*/
@Deprecated
private static double getValueEnergySlopeLegacy(double energy[], double x[], double y[], double energySlopeParamF) {
- // Determine which cluster is the lower-energy cluster.
- int lei = energy[0] < energy[1] ? 0 : 1;
-
+ // Determine which cluster is the lower-energy cluster.
+ int lei = energy[0] < energy[1] ? 0 : 1;
+
// E + R*F
// Get the low energy cluster energy.
double slopeParamE = energy[lei];
@@ -1415,52 +1415,52 @@
* the two clusters.
*/
private static double getValueTimeCoincidence(double[] time) {
- return Math.abs(time[0] - time[1]);
- }
-
- /**
- * Indicates whether the argument cluster is located in the fiducial
- * region or not.
- * @param cluster - The cluster to check.
- * @return Returns <code>true</code> if the cluster is located in
- * the fiducial region and <code>false</code> otherwise.
- */
- private static final boolean inFiducialRegion(int ix, int iy) {
- // Get the x and y indices for the cluster.
- int absx = Math.abs(ix);
- int absy = Math.abs(iy);
-
- // Check if the cluster is on the top or the bottom of the
- // calorimeter, as defined by |y| == 5. This is an edge cluster
- // and is not in the fiducial region.
- if(absy == 5) {
- return false;
- }
-
- // Check if the cluster is on the extreme left or right side
- // of the calorimeter, as defined by |x| == 23. This is also
- // and edge cluster is not in the fiducial region.
- if(absx == 23) {
- return false;
- }
-
- // Check if the cluster is along the beam gap, as defined by
- // |y| == 1. This is an internal edge cluster and is not in the
- // fiducial region.
- if(absy == 1) {
- return false;
- }
-
- // Lastly, check if the cluster falls along the beam hole, as
- // defined by clusters with -11 <= x <= -1 and |y| == 2. This
- // is not the fiducial region.
- if(absy == 2 && ix <= -1 && ix >= -11) {
- return false;
- }
-
- // If all checks fail, the cluster is in the fiducial region.
- return true;
- }
+ return Math.abs(time[0] - time[1]);
+ }
+
+ /**
+ * Indicates whether the argument cluster is located in the fiducial
+ * region or not.
+ * @param cluster - The cluster to check.
+ * @return Returns <code>true</code> if the cluster is located in
+ * the fiducial region and <code>false</code> otherwise.
+ */
+ private static final boolean inFiducialRegion(int ix, int iy) {
+ // Get the x and y indices for the cluster.
+ int absx = Math.abs(ix);
+ int absy = Math.abs(iy);
+
+ // Check if the cluster is on the top or the bottom of the
+ // calorimeter, as defined by |y| == 5. This is an edge cluster
+ // and is not in the fiducial region.
+ if(absy == 5) {
+ return false;
+ }
+
+ // Check if the cluster is on the extreme left or right side
+ // of the calorimeter, as defined by |x| == 23. This is also
+ // and edge cluster is not in the fiducial region.
+ if(absx == 23) {
+ return false;
+ }
+
+ // Check if the cluster is along the beam gap, as defined by
+ // |y| == 1. This is an internal edge cluster and is not in the
+ // fiducial region.
+ if(absy == 1) {
+ return false;
+ }
+
+ // Lastly, check if the cluster falls along the beam hole, as
+ // defined by clusters with -11 <= x <= -1 and |y| == 2. This
+ // is not the fiducial region.
+ if(absy == 2 && ix <= -1 && ix >= -11) {
+ return false;
+ }
+
+ // If all checks fail, the cluster is in the fiducial region.
+ return true;
+ }
/**
* Checks if a coplanarity angle is within threshold.
@@ -1536,7 +1536,7 @@
* the cut and <code>false</code> if it does not.
*/
private boolean pairTimeCoincidenceCut(double timeDifference) {
- return (timeDifference <= cuts.get(PAIR_TIME_COINCIDENCE));
+ return (timeDifference <= cuts.get(PAIR_TIME_COINCIDENCE));
}
/**
@@ -1549,193 +1549,193 @@
* Note that in this table, position[][] = { x, z, y } by in the
* coordinate system employed by the rest of the class.
*/
- private static final double[][][] position = {
- { { -340.003, 97.065, 87.845 }, { -324.283, 97.450, 87.875 }, { -308.648, 97.810, 87.900 },
- { -293.093, 98.150, 87.920 }, { -277.618, 98.470, 87.940 }, { -262.213, 98.765, 87.965 },
- { -246.878, 99.040, 87.980 }, { -231.603, 99.290, 87.995 }, { -216.393, 99.520, 88.010 },
- { -201.228, 99.725, 88.030 }, { -186.118, 99.905, 88.040 }, { -171.058, 100.070, 88.050 },
- { -156.038, 100.205, 88.055 }, { -141.058, 100.325, 88.070 }, { -126.113, 100.415, 88.075 },
- { -111.198, 100.485, 88.075 }, { -96.313, 100.530, 88.080 }, { -81.453, 100.555, 88.085 },
- { -66.608, 100.560, 88.085 }, { -51.788, 100.540, 88.080 }, { -36.983, 100.490, 88.075 },
- { -22.183, 100.425, 88.075 }, { -7.393, 100.335, 88.070 }, { 7.393, 100.335, 88.070 },
- { 22.183, 100.425, 88.075 }, { 36.983, 100.490, 88.075 }, { 51.793, 100.540, 88.080 },
- { 66.613, 100.560, 88.085 }, { 81.453, 100.555, 88.085 }, { 96.313, 100.530, 88.080 },
- { 111.198, 100.485, 88.075 }, { 126.113, 100.415, 88.075 }, { 141.053, 100.325, 88.070 },
- { 156.038, 100.205, 88.055 }, { 171.053, 100.070, 88.050 }, { 186.118, 99.905, 88.040 },
- { 201.228, 99.725, 88.030 }, { 216.388, 99.520, 88.010 }, { 231.608, 99.290, 87.995 },
- { 246.878, 99.040, 87.980 }, { 262.218, 98.765, 87.965 }, { 277.623, 98.470, 87.940 },
- { 293.098, 98.150, 87.920 }, { 308.653, 97.810, 87.900 }, { 324.288, 97.450, 87.875 },
- { 340.008, 97.065, 87.845 }
- },
- { { -340.003, 97.040, 72.715 }, { -324.283, 97.420, 72.735 }, { -308.648, 97.785, 72.750 },
- { -293.093, 98.125, 72.765 }, { -277.618, 98.450, 72.785 }, { -262.213, 98.745, 72.800 },
- { -246.878, 99.015, 72.815 }, { -231.603, 99.265, 72.825 }, { -216.388, 99.495, 72.840 },
- { -201.228, 99.700, 72.850 }, { -186.118, 99.885, 72.860 }, { -171.058, 100.045, 72.865 },
- { -156.033, 100.185, 72.875 }, { -141.053, 100.300, 72.880 }, { -126.108, 100.395, 72.880 },
- { -111.193, 100.460, 72.890 }, { -96.308, 100.510, 72.890 }, { -81.448, 100.535, 72.895 },
- { -66.608, 100.535, 72.890 }, { -51.788, 100.510, 72.890 }, { -36.978, 100.470, 72.890 },
- { -22.183, 100.405, 72.880 }, { -7.388, 100.310, 72.880 }, { 7.393, 100.310, 72.880 },
- { 22.188, 100.405, 72.885 }, { 36.983, 100.470, 72.890 }, { 51.793, 100.510, 72.890 },
- { 66.613, 100.535, 72.890 }, { 81.453, 100.535, 72.895 }, { 96.313, 100.510, 72.890 },
- { 111.198, 100.460, 72.890 }, { 126.113, 100.395, 72.880 }, { 141.063, 100.300, 72.880 },
- { 156.043, 100.185, 72.875 }, { 171.063, 100.045, 72.865 }, { 186.123, 99.885, 72.860 },
- { 201.233, 99.700, 72.850 }, { 216.393, 99.495, 72.840 }, { 231.608, 99.265, 72.825 },
- { 246.883, 99.015, 72.815 }, { 262.218, 98.745, 72.800 }, { 277.623, 98.450, 72.785 },
- { 293.098, 98.125, 72.765 }, { 308.653, 97.785, 72.750 }, { 324.288, 97.420, 72.735 },
- { 340.008, 97.040, 72.715 }
- },
- { { -340.003, 96.990, 57.600 }, { -324.283, 97.375, 57.610 }, { -308.648, 97.740, 57.625 },
- { -293.093, 98.080, 57.630 }, { -277.618, 98.395, 57.645 }, { -262.213, 98.700, 57.655 },
- { -246.873, 98.970, 57.660 }, { -231.603, 99.220, 57.670 }, { -216.383, 99.450, 57.680 },
- { -201.228, 99.660, 57.685 }, { -186.113, 99.840, 57.695 }, { -171.053, 100.005, 57.695 },
- { -156.033, 100.140, 57.700 }, { -141.053, 100.255, 57.710 }, { -126.108, 100.345, 57.710 },
- { -111.193, 100.420, 57.710 }, { -96.308, 100.465, 57.715 }, { -81.448, 100.490, 57.715 },
- { -66.608, 100.490, 57.715 }, { -51.788, 100.470, 57.710 }, { -36.978, 100.425, 57.710 },
- { -22.178, 100.355, 57.710 }, { -7.388, 100.265, 57.705 }, { 7.398, 100.265, 57.705 },
- { 22.188, 100.355, 57.710 }, { 36.988, 100.425, 57.710 }, { 51.793, 100.470, 57.710 },
- { 66.613, 100.490, 57.715 }, { 81.458, 100.490, 57.715 }, { 96.318, 100.465, 57.715 },
- { 111.198, 100.420, 57.710 }, { 126.118, 100.345, 57.710 }, { 141.063, 100.255, 57.710 },
- { 156.043, 100.140, 57.700 }, { 171.063, 100.005, 57.695 }, { 186.123, 99.840, 57.695 },
- { 201.233, 99.660, 57.685 }, { 216.393, 99.450, 57.680 }, { 231.608, 99.220, 57.670 },
- { 246.883, 98.970, 57.660 }, { 262.218, 98.700, 57.655 }, { 277.623, 98.395, 57.645 },
- { 293.098, 98.080, 57.630 }, { 308.653, 97.740, 57.625 }, { 324.288, 97.375, 57.610 },
- { 340.008, 96.990, 57.600 }
- },
- { { -340.003, 96.925, 42.490 }, { -324.283, 97.305, 42.495 }, { -308.648, 97.675, 42.505 },
- { -293.093, 98.010, 42.510 }, { -277.618, 98.330, 42.510 }, { -262.213, 98.625, 42.515 },
- { -246.873, 98.900, 42.525 }, { -231.603, 99.155, 42.530 }, { -216.383, 99.385, 42.535 },
- { -201.223, 99.590, 42.530 }, { -186.113, 99.775, 42.535 }, { -171.048, 99.930, 42.540 },
- { -156.033, 100.070, 42.545 }, { -141.048, 100.185, 42.545 }, { -126.108, 100.280, 42.550 },
- { -111.193, 100.350, 42.545 }, { -96.308, 100.400, 42.545 }, { -81.448, 100.420, 42.550 },
- { -66.608, 100.425, 42.550 }, { -51.788, 100.405, 42.550 }, { -36.978, 100.355, 42.545 },
- { -22.178, 100.290, 42.545 }, { -7.388, 100.200, 42.545 }, { 7.398, 100.200, 42.545 },
- { 22.188, 100.290, 42.545 }, { 36.988, 100.355, 42.545 }, { 51.793, 100.405, 42.550 },
- { 66.613, 100.425, 42.550 }, { 81.458, 100.420, 42.550 }, { 96.318, 100.400, 42.545 },
- { 111.198, 100.350, 42.545 }, { 126.118, 100.280, 42.550 }, { 141.063, 100.185, 42.545 },
- { 156.043, 100.070, 42.545 }, { 171.063, 99.930, 42.540 }, { 186.123, 99.775, 42.535 },
- { 201.233, 99.590, 42.530 }, { 216.393, 99.385, 42.535 }, { 231.608, 99.155, 42.530 },
- { 246.883, 98.900, 42.525 }, { 262.218, 98.625, 42.515 }, { 277.628, 98.330, 42.510 },
- { 293.098, 98.010, 42.510 }, { 308.653, 97.675, 42.505 }, { 324.288, 97.305, 42.495 },
- { 340.008, 96.925, 42.490 }
- },
- { { -340.003, 96.830, 27.385 }, { -324.278, 97.215, 27.385 }, { -308.648, 97.575, 27.385 },
- { -293.093, 97.915, 27.385 }, { -277.613, 98.240, 27.385 }, { -262.213, 98.535, 27.385 },
- { -246.878, 98.810, 27.385 }, { -231.603, 99.060, 27.385 }, { -216.383, 99.290, 27.385 },
- { -201.223, 99.495, 27.385 }, { -186.113, 99.680, 27.385 }, { -171.048, 99.840, 27.385 },
- { -156.033, 99.980, 27.385 }, { -141.048, 100.095, 27.385 }, { -126.103, 100.185, 27.385 },
- { -111.193, 100.255, 27.385 }, { -96.303, 100.305, 27.385 }, { -81.448, 100.330, 27.385 },
- { -66.608, 100.330, 27.385 }, { -51.783, 100.310, 27.385 }, { -36.973, 100.265, 27.385 },
- { -22.178, 100.200, 27.385 }, { -7.388, 100.105, 27.385 }, { 7.403, 100.105, 27.385 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 156.078, 99.980, 27.385 }, { 171.103, 99.840, 27.385 }, { 186.168, 99.680, 27.385 },
- { 201.268, 99.495, 27.385 }, { 216.423, 99.290, 27.385 }, { 231.638, 99.060, 27.385 },
- { 246.913, 98.810, 27.385 }, { 262.248, 98.535, 27.385 }, { 277.658, 98.240, 27.385 },
- { 293.133, 97.920, 27.385 }, { 308.688, 97.575, 27.385 }, { 324.323, 97.215, 27.385 },
- { 340.043, 96.830, 27.385 }
- },
- { { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }
- },
- { { -339.998, 96.840, -27.330 }, { -324.278, 97.225, -27.340 }, { -308.643, 97.585, -27.345 },
- { -293.093, 97.925, -27.350 }, { -277.613, 98.245, -27.360 }, { -262.213, 98.545, -27.365 },
- { -246.868, 98.820, -27.365 }, { -231.598, 99.070, -27.370 }, { -216.383, 99.300, -27.375 },
- { -201.223, 99.505, -27.380 }, { -186.113, 99.690, -27.385 }, { -171.048, 99.850, -27.380 },
- { -156.028, 99.990, -27.385 }, { -141.048, 100.100, -27.390 }, { -126.103, 100.195, -27.390 },
- { -111.193, 100.265, -27.395 }, { -96.303, 100.315, -27.395 }, { -81.443, 100.340, -27.390 },
- { -66.603, 100.335, -27.390 }, { -51.783, 100.315, -27.390 }, { -36.973, 100.275, -27.395 },
- { -22.173, 100.205, -27.390 }, { -7.383, 100.115, -27.385 }, { 7.403, 100.115, -27.385 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
- { 156.088, 99.985, -27.385 }, { 171.103, 99.845, -27.380 }, { 186.168, 99.680, -27.385 },
- { 201.268, 99.495, -27.380 }, { 216.428, 99.290, -27.375 }, { 231.643, 99.060, -27.370 },
- { 246.913, 98.810, -27.365 }, { 262.258, 98.535, -27.365 }, { 277.658, 98.240, -27.360 },
- { 293.138, 97.925, -27.350 }, { 308.688, 97.580, -27.345 }, { 324.323, 97.215, -27.340 },
- { 340.043, 96.835, -27.330 }
- },
- { { -339.998, 96.930, -42.435 }, { -324.278, 97.315, -42.445 }, { -308.648, 97.680, -42.455 },
- { -293.093, 98.015, -42.470 }, { -277.613, 98.340, -42.480 }, { -262.208, 98.635, -42.490 },
- { -246.873, 98.910, -42.500 }, { -231.593, 99.160, -42.510 }, { -216.383, 99.390, -42.515 },
- { -201.223, 99.595, -42.525 }, { -186.113, 99.780, -42.525 }, { -171.048, 99.940, -42.535 },
- { -156.028, 100.080, -42.540 }, { -141.048, 100.195, -42.540 }, { -126.103, 100.290, -42.545 },
- { -111.193, 100.355, -42.550 }, { -96.303, 100.405, -42.550 }, { -81.443, 100.430, -42.550 },
- { -66.608, 100.430, -42.550 }, { -51.783, 100.405, -42.550 }, { -36.973, 100.365, -42.550 },
- { -22.178, 100.295, -42.545 }, { -7.388, 100.205, -42.545 }, { 7.403, 100.205, -42.545 },
- { 22.193, 100.295, -42.545 }, { 36.988, 100.365, -42.550 }, { 51.798, 100.405, -42.550 },
- { 66.623, 100.430, -42.550 }, { 81.458, 100.430, -42.550 }, { 96.318, 100.405, -42.550 },
- { 111.208, 100.355, -42.550 }, { 126.118, 100.290, -42.545 }, { 141.063, 100.195, -42.540 },
- { 156.043, 100.080, -42.540 }, { 171.063, 99.940, -42.535 }, { 186.128, 99.780, -42.525 },
- { 201.238, 99.595, -42.525 }, { 216.398, 99.390, -42.515 }, { 231.613, 99.160, -42.510 },
- { 246.888, 98.910, -42.500 }, { 262.223, 98.635, -42.490 }, { 277.628, 98.340, -42.480 },
- { 293.108, 98.015, -42.470 }, { 308.663, 97.680, -42.455 }, { 324.293, 97.315, -42.445 },
- { 340.013, 96.930, -42.435 }
- },
- { { -339.998, 97.000, -57.540 }, { -324.278, 97.385, -57.560 }, { -308.648, 97.745, -57.575 },
- { -293.093, 98.090, -57.595 }, { -277.613, 98.410, -57.610 }, { -262.208, 98.705, -57.625 },
- { -246.873, 98.975, -57.640 }, { -231.593, 99.225, -57.655 }, { -216.383, 99.455, -57.665 },
- { -201.223, 99.665, -57.675 }, { -186.113, 99.845, -57.685 }, { -171.048, 100.010, -57.690 },
- { -156.028, 100.145, -57.700 }, { -141.048, 100.265, -57.705 }, { -126.103, 100.355, -57.710 },
- { -111.193, 100.425, -57.710 }, { -96.303, 100.475, -57.720 }, { -81.443, 100.495, -57.715 },
- { -66.608, 100.500, -57.720 }, { -51.783, 100.480, -57.715 }, { -36.973, 100.430, -57.710 },
- { -22.178, 100.365, -57.710 }, { -7.388, 100.275, -57.705 }, { 7.403, 100.275, -57.705 },
- { 22.193, 100.365, -57.710 }, { 36.988, 100.430, -57.710 }, { 51.798, 100.480, -57.715 },
- { 66.623, 100.500, -57.720 }, { 81.458, 100.495, -57.715 }, { 96.318, 100.475, -57.720 },
- { 111.208, 100.425, -57.710 }, { 126.118, 100.355, -57.710 }, { 141.063, 100.265, -57.705 },
- { 156.043, 100.145, -57.700 }, { 171.063, 100.010, -57.690 }, { 186.128, 99.845, -57.685 },
- { 201.238, 99.665, -57.675 }, { 216.398, 99.455, -57.665 }, { 231.613, 99.225, -57.655 },
- { 246.888, 98.975, -57.640 }, { 262.223, 98.705, -57.625 }, { 277.628, 98.410, -57.610 },
- { 293.108, 98.090, -57.595 }, { 308.663, 97.745, -57.575 }, { 324.293, 97.385, -57.560 },
- { 340.013, 97.000, -57.540 }
- },
- { { -339.998, 97.045, -72.655 }, { -324.278, 97.435, -72.680 }, { -308.648, 97.795, -72.710 },
- { -293.093, 98.135, -72.730 }, { -277.613, 98.455, -72.750 }, { -262.208, 98.750, -72.775 },
- { -246.873, 99.020, -72.795 }, { -231.593, 99.280, -72.810 }, { -216.383, 99.505, -72.820 },
- { -201.223, 99.710, -72.840 }, { -186.113, 99.895, -72.850 }, { -171.048, 100.055, -72.860 },
- { -156.028, 100.190, -72.870 }, { -141.048, 100.305, -72.880 }, { -126.103, 100.400, -72.885 },
- { -111.193, 100.470, -72.890 }, { -96.303, 100.520, -72.890 }, { -81.443, 100.540, -72.895 },
- { -66.608, 100.540, -72.895 }, { -51.783, 100.520, -72.895 }, { -36.973, 100.480, -72.890 },
- { -22.178, 100.405, -72.885 }, { -7.388, 100.320, -72.880 }, { 7.403, 100.320, -72.880 },
- { 22.193, 100.405, -72.885 }, { 36.988, 100.480, -72.890 }, { 51.798, 100.520, -72.895 },
- { 66.623, 100.540, -72.895 }, { 81.458, 100.540, -72.895 }, { 96.318, 100.520, -72.890 },
- { 111.208, 100.470, -72.890 }, { 126.118, 100.400, -72.885 }, { 141.063, 100.305, -72.880 },
- { 156.043, 100.190, -72.870 }, { 171.063, 100.055, -72.860 }, { 186.128, 99.895, -72.850 },
- { 201.238, 99.710, -72.840 }, { 216.398, 99.505, -72.820 }, { 231.613, 99.280, -72.810 },
- { 246.888, 99.020, -72.795 }, { 262.223, 98.750, -72.775 }, { 277.628, 98.455, -72.750 },
- { 293.108, 98.135, -72.730 }, { 308.663, 97.795, -72.710 }, { 324.293, 97.435, -72.680 },
- { 340.013, 97.045, -72.655 }
- },
- { { -339.998, 97.070, -87.790 }, { -324.278, 97.460, -87.820 }, { -308.648, 97.820, -87.850 },
- { -293.093, 98.160, -87.885 }, { -277.613, 98.480, -87.910 }, { -262.208, 98.775, -87.935 },
- { -246.873, 99.050, -87.960 }, { -231.593, 99.300, -87.980 }, { -216.383, 99.530, -88.000 },
- { -201.223, 99.735, -88.015 }, { -186.113, 99.920, -88.030 }, { -171.048, 100.080, -88.045 },
- { -156.028, 100.215, -88.055 }, { -141.048, 100.335, -88.065 }, { -126.103, 100.420, -88.070 },
- { -111.193, 100.490, -88.075 }, { -96.303, 100.540, -88.085 }, { -81.443, 100.565, -88.085 },
- { -66.608, 100.560, -88.085 }, { -51.783, 100.540, -88.085 }, { -36.973, 100.500, -88.080 },
- { -22.178, 100.430, -88.075 }, { -7.388, 100.340, -88.065 }, { 7.403, 100.340, -88.070 },
- { 22.193, 100.430, -88.075 }, { 36.988, 100.500, -88.080 }, { 51.798, 100.540, -88.085 },
- { 66.623, 100.560, -88.085 }, { 81.458, 100.565, -88.085 }, { 96.318, 100.540, -88.085 },
- { 111.208, 100.490, -88.075 }, { 126.118, 100.420, -88.070 }, { 141.063, 100.335, -88.065 },
- { 156.043, 100.215, -88.055 }, { 171.063, 100.080, -88.045 }, { 186.128, 99.915, -88.030 },
- { 201.238, 99.735, -88.015 }, { 216.398, 99.530, -88.000 }, { 231.613, 99.300, -87.980 },
- { 246.888, 99.050, -87.960 }, { 262.223, 98.775, -87.935 }, { 277.628, 98.480, -87.910 },
- { 293.108, 98.160, -87.885 }, { 308.663, 97.820, -87.850 }, { 324.293, 97.460, -87.820 },
- { 340.013, 97.070, -87.790 }
- }
- };
+ private static final double[][][] position = {
+ { { -340.003, 97.065, 87.845 }, { -324.283, 97.450, 87.875 }, { -308.648, 97.810, 87.900 },
+ { -293.093, 98.150, 87.920 }, { -277.618, 98.470, 87.940 }, { -262.213, 98.765, 87.965 },
+ { -246.878, 99.040, 87.980 }, { -231.603, 99.290, 87.995 }, { -216.393, 99.520, 88.010 },
+ { -201.228, 99.725, 88.030 }, { -186.118, 99.905, 88.040 }, { -171.058, 100.070, 88.050 },
+ { -156.038, 100.205, 88.055 }, { -141.058, 100.325, 88.070 }, { -126.113, 100.415, 88.075 },
+ { -111.198, 100.485, 88.075 }, { -96.313, 100.530, 88.080 }, { -81.453, 100.555, 88.085 },
+ { -66.608, 100.560, 88.085 }, { -51.788, 100.540, 88.080 }, { -36.983, 100.490, 88.075 },
+ { -22.183, 100.425, 88.075 }, { -7.393, 100.335, 88.070 }, { 7.393, 100.335, 88.070 },
+ { 22.183, 100.425, 88.075 }, { 36.983, 100.490, 88.075 }, { 51.793, 100.540, 88.080 },
+ { 66.613, 100.560, 88.085 }, { 81.453, 100.555, 88.085 }, { 96.313, 100.530, 88.080 },
+ { 111.198, 100.485, 88.075 }, { 126.113, 100.415, 88.075 }, { 141.053, 100.325, 88.070 },
+ { 156.038, 100.205, 88.055 }, { 171.053, 100.070, 88.050 }, { 186.118, 99.905, 88.040 },
+ { 201.228, 99.725, 88.030 }, { 216.388, 99.520, 88.010 }, { 231.608, 99.290, 87.995 },
+ { 246.878, 99.040, 87.980 }, { 262.218, 98.765, 87.965 }, { 277.623, 98.470, 87.940 },
+ { 293.098, 98.150, 87.920 }, { 308.653, 97.810, 87.900 }, { 324.288, 97.450, 87.875 },
+ { 340.008, 97.065, 87.845 }
+ },
+ { { -340.003, 97.040, 72.715 }, { -324.283, 97.420, 72.735 }, { -308.648, 97.785, 72.750 },
+ { -293.093, 98.125, 72.765 }, { -277.618, 98.450, 72.785 }, { -262.213, 98.745, 72.800 },
+ { -246.878, 99.015, 72.815 }, { -231.603, 99.265, 72.825 }, { -216.388, 99.495, 72.840 },
+ { -201.228, 99.700, 72.850 }, { -186.118, 99.885, 72.860 }, { -171.058, 100.045, 72.865 },
+ { -156.033, 100.185, 72.875 }, { -141.053, 100.300, 72.880 }, { -126.108, 100.395, 72.880 },
+ { -111.193, 100.460, 72.890 }, { -96.308, 100.510, 72.890 }, { -81.448, 100.535, 72.895 },
+ { -66.608, 100.535, 72.890 }, { -51.788, 100.510, 72.890 }, { -36.978, 100.470, 72.890 },
+ { -22.183, 100.405, 72.880 }, { -7.388, 100.310, 72.880 }, { 7.393, 100.310, 72.880 },
+ { 22.188, 100.405, 72.885 }, { 36.983, 100.470, 72.890 }, { 51.793, 100.510, 72.890 },
+ { 66.613, 100.535, 72.890 }, { 81.453, 100.535, 72.895 }, { 96.313, 100.510, 72.890 },
+ { 111.198, 100.460, 72.890 }, { 126.113, 100.395, 72.880 }, { 141.063, 100.300, 72.880 },
+ { 156.043, 100.185, 72.875 }, { 171.063, 100.045, 72.865 }, { 186.123, 99.885, 72.860 },
+ { 201.233, 99.700, 72.850 }, { 216.393, 99.495, 72.840 }, { 231.608, 99.265, 72.825 },
+ { 246.883, 99.015, 72.815 }, { 262.218, 98.745, 72.800 }, { 277.623, 98.450, 72.785 },
+ { 293.098, 98.125, 72.765 }, { 308.653, 97.785, 72.750 }, { 324.288, 97.420, 72.735 },
+ { 340.008, 97.040, 72.715 }
+ },
+ { { -340.003, 96.990, 57.600 }, { -324.283, 97.375, 57.610 }, { -308.648, 97.740, 57.625 },
+ { -293.093, 98.080, 57.630 }, { -277.618, 98.395, 57.645 }, { -262.213, 98.700, 57.655 },
+ { -246.873, 98.970, 57.660 }, { -231.603, 99.220, 57.670 }, { -216.383, 99.450, 57.680 },
+ { -201.228, 99.660, 57.685 }, { -186.113, 99.840, 57.695 }, { -171.053, 100.005, 57.695 },
+ { -156.033, 100.140, 57.700 }, { -141.053, 100.255, 57.710 }, { -126.108, 100.345, 57.710 },
+ { -111.193, 100.420, 57.710 }, { -96.308, 100.465, 57.715 }, { -81.448, 100.490, 57.715 },
+ { -66.608, 100.490, 57.715 }, { -51.788, 100.470, 57.710 }, { -36.978, 100.425, 57.710 },
+ { -22.178, 100.355, 57.710 }, { -7.388, 100.265, 57.705 }, { 7.398, 100.265, 57.705 },
+ { 22.188, 100.355, 57.710 }, { 36.988, 100.425, 57.710 }, { 51.793, 100.470, 57.710 },
+ { 66.613, 100.490, 57.715 }, { 81.458, 100.490, 57.715 }, { 96.318, 100.465, 57.715 },
+ { 111.198, 100.420, 57.710 }, { 126.118, 100.345, 57.710 }, { 141.063, 100.255, 57.710 },
+ { 156.043, 100.140, 57.700 }, { 171.063, 100.005, 57.695 }, { 186.123, 99.840, 57.695 },
+ { 201.233, 99.660, 57.685 }, { 216.393, 99.450, 57.680 }, { 231.608, 99.220, 57.670 },
+ { 246.883, 98.970, 57.660 }, { 262.218, 98.700, 57.655 }, { 277.623, 98.395, 57.645 },
+ { 293.098, 98.080, 57.630 }, { 308.653, 97.740, 57.625 }, { 324.288, 97.375, 57.610 },
+ { 340.008, 96.990, 57.600 }
+ },
+ { { -340.003, 96.925, 42.490 }, { -324.283, 97.305, 42.495 }, { -308.648, 97.675, 42.505 },
+ { -293.093, 98.010, 42.510 }, { -277.618, 98.330, 42.510 }, { -262.213, 98.625, 42.515 },
+ { -246.873, 98.900, 42.525 }, { -231.603, 99.155, 42.530 }, { -216.383, 99.385, 42.535 },
+ { -201.223, 99.590, 42.530 }, { -186.113, 99.775, 42.535 }, { -171.048, 99.930, 42.540 },
+ { -156.033, 100.070, 42.545 }, { -141.048, 100.185, 42.545 }, { -126.108, 100.280, 42.550 },
+ { -111.193, 100.350, 42.545 }, { -96.308, 100.400, 42.545 }, { -81.448, 100.420, 42.550 },
+ { -66.608, 100.425, 42.550 }, { -51.788, 100.405, 42.550 }, { -36.978, 100.355, 42.545 },
+ { -22.178, 100.290, 42.545 }, { -7.388, 100.200, 42.545 }, { 7.398, 100.200, 42.545 },
+ { 22.188, 100.290, 42.545 }, { 36.988, 100.355, 42.545 }, { 51.793, 100.405, 42.550 },
+ { 66.613, 100.425, 42.550 }, { 81.458, 100.420, 42.550 }, { 96.318, 100.400, 42.545 },
+ { 111.198, 100.350, 42.545 }, { 126.118, 100.280, 42.550 }, { 141.063, 100.185, 42.545 },
+ { 156.043, 100.070, 42.545 }, { 171.063, 99.930, 42.540 }, { 186.123, 99.775, 42.535 },
+ { 201.233, 99.590, 42.530 }, { 216.393, 99.385, 42.535 }, { 231.608, 99.155, 42.530 },
+ { 246.883, 98.900, 42.525 }, { 262.218, 98.625, 42.515 }, { 277.628, 98.330, 42.510 },
+ { 293.098, 98.010, 42.510 }, { 308.653, 97.675, 42.505 }, { 324.288, 97.305, 42.495 },
+ { 340.008, 96.925, 42.490 }
+ },
+ { { -340.003, 96.830, 27.385 }, { -324.278, 97.215, 27.385 }, { -308.648, 97.575, 27.385 },
+ { -293.093, 97.915, 27.385 }, { -277.613, 98.240, 27.385 }, { -262.213, 98.535, 27.385 },
+ { -246.878, 98.810, 27.385 }, { -231.603, 99.060, 27.385 }, { -216.383, 99.290, 27.385 },
+ { -201.223, 99.495, 27.385 }, { -186.113, 99.680, 27.385 }, { -171.048, 99.840, 27.385 },
+ { -156.033, 99.980, 27.385 }, { -141.048, 100.095, 27.385 }, { -126.103, 100.185, 27.385 },
+ { -111.193, 100.255, 27.385 }, { -96.303, 100.305, 27.385 }, { -81.448, 100.330, 27.385 },
+ { -66.608, 100.330, 27.385 }, { -51.783, 100.310, 27.385 }, { -36.973, 100.265, 27.385 },
+ { -22.178, 100.200, 27.385 }, { -7.388, 100.105, 27.385 }, { 7.403, 100.105, 27.385 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 156.078, 99.980, 27.385 }, { 171.103, 99.840, 27.385 }, { 186.168, 99.680, 27.385 },
+ { 201.268, 99.495, 27.385 }, { 216.423, 99.290, 27.385 }, { 231.638, 99.060, 27.385 },
+ { 246.913, 98.810, 27.385 }, { 262.248, 98.535, 27.385 }, { 277.658, 98.240, 27.385 },
+ { 293.133, 97.920, 27.385 }, { 308.688, 97.575, 27.385 }, { 324.323, 97.215, 27.385 },
+ { 340.043, 96.830, 27.385 }
+ },
+ { { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }
+ },
+ { { -339.998, 96.840, -27.330 }, { -324.278, 97.225, -27.340 }, { -308.643, 97.585, -27.345 },
+ { -293.093, 97.925, -27.350 }, { -277.613, 98.245, -27.360 }, { -262.213, 98.545, -27.365 },
+ { -246.868, 98.820, -27.365 }, { -231.598, 99.070, -27.370 }, { -216.383, 99.300, -27.375 },
+ { -201.223, 99.505, -27.380 }, { -186.113, 99.690, -27.385 }, { -171.048, 99.850, -27.380 },
+ { -156.028, 99.990, -27.385 }, { -141.048, 100.100, -27.390 }, { -126.103, 100.195, -27.390 },
+ { -111.193, 100.265, -27.395 }, { -96.303, 100.315, -27.395 }, { -81.443, 100.340, -27.390 },
+ { -66.603, 100.335, -27.390 }, { -51.783, 100.315, -27.390 }, { -36.973, 100.275, -27.395 },
+ { -22.173, 100.205, -27.390 }, { -7.383, 100.115, -27.385 }, { 7.403, 100.115, -27.385 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 156.088, 99.985, -27.385 }, { 171.103, 99.845, -27.380 }, { 186.168, 99.680, -27.385 },
+ { 201.268, 99.495, -27.380 }, { 216.428, 99.290, -27.375 }, { 231.643, 99.060, -27.370 },
+ { 246.913, 98.810, -27.365 }, { 262.258, 98.535, -27.365 }, { 277.658, 98.240, -27.360 },
+ { 293.138, 97.925, -27.350 }, { 308.688, 97.580, -27.345 }, { 324.323, 97.215, -27.340 },
+ { 340.043, 96.835, -27.330 }
+ },
+ { { -339.998, 96.930, -42.435 }, { -324.278, 97.315, -42.445 }, { -308.648, 97.680, -42.455 },
+ { -293.093, 98.015, -42.470 }, { -277.613, 98.340, -42.480 }, { -262.208, 98.635, -42.490 },
+ { -246.873, 98.910, -42.500 }, { -231.593, 99.160, -42.510 }, { -216.383, 99.390, -42.515 },
+ { -201.223, 99.595, -42.525 }, { -186.113, 99.780, -42.525 }, { -171.048, 99.940, -42.535 },
+ { -156.028, 100.080, -42.540 }, { -141.048, 100.195, -42.540 }, { -126.103, 100.290, -42.545 },
+ { -111.193, 100.355, -42.550 }, { -96.303, 100.405, -42.550 }, { -81.443, 100.430, -42.550 },
+ { -66.608, 100.430, -42.550 }, { -51.783, 100.405, -42.550 }, { -36.973, 100.365, -42.550 },
+ { -22.178, 100.295, -42.545 }, { -7.388, 100.205, -42.545 }, { 7.403, 100.205, -42.545 },
+ { 22.193, 100.295, -42.545 }, { 36.988, 100.365, -42.550 }, { 51.798, 100.405, -42.550 },
+ { 66.623, 100.430, -42.550 }, { 81.458, 100.430, -42.550 }, { 96.318, 100.405, -42.550 },
+ { 111.208, 100.355, -42.550 }, { 126.118, 100.290, -42.545 }, { 141.063, 100.195, -42.540 },
+ { 156.043, 100.080, -42.540 }, { 171.063, 99.940, -42.535 }, { 186.128, 99.780, -42.525 },
+ { 201.238, 99.595, -42.525 }, { 216.398, 99.390, -42.515 }, { 231.613, 99.160, -42.510 },
+ { 246.888, 98.910, -42.500 }, { 262.223, 98.635, -42.490 }, { 277.628, 98.340, -42.480 },
+ { 293.108, 98.015, -42.470 }, { 308.663, 97.680, -42.455 }, { 324.293, 97.315, -42.445 },
+ { 340.013, 96.930, -42.435 }
+ },
+ { { -339.998, 97.000, -57.540 }, { -324.278, 97.385, -57.560 }, { -308.648, 97.745, -57.575 },
+ { -293.093, 98.090, -57.595 }, { -277.613, 98.410, -57.610 }, { -262.208, 98.705, -57.625 },
+ { -246.873, 98.975, -57.640 }, { -231.593, 99.225, -57.655 }, { -216.383, 99.455, -57.665 },
+ { -201.223, 99.665, -57.675 }, { -186.113, 99.845, -57.685 }, { -171.048, 100.010, -57.690 },
+ { -156.028, 100.145, -57.700 }, { -141.048, 100.265, -57.705 }, { -126.103, 100.355, -57.710 },
+ { -111.193, 100.425, -57.710 }, { -96.303, 100.475, -57.720 }, { -81.443, 100.495, -57.715 },
+ { -66.608, 100.500, -57.720 }, { -51.783, 100.480, -57.715 }, { -36.973, 100.430, -57.710 },
+ { -22.178, 100.365, -57.710 }, { -7.388, 100.275, -57.705 }, { 7.403, 100.275, -57.705 },
+ { 22.193, 100.365, -57.710 }, { 36.988, 100.430, -57.710 }, { 51.798, 100.480, -57.715 },
+ { 66.623, 100.500, -57.720 }, { 81.458, 100.495, -57.715 }, { 96.318, 100.475, -57.720 },
+ { 111.208, 100.425, -57.710 }, { 126.118, 100.355, -57.710 }, { 141.063, 100.265, -57.705 },
+ { 156.043, 100.145, -57.700 }, { 171.063, 100.010, -57.690 }, { 186.128, 99.845, -57.685 },
+ { 201.238, 99.665, -57.675 }, { 216.398, 99.455, -57.665 }, { 231.613, 99.225, -57.655 },
+ { 246.888, 98.975, -57.640 }, { 262.223, 98.705, -57.625 }, { 277.628, 98.410, -57.610 },
+ { 293.108, 98.090, -57.595 }, { 308.663, 97.745, -57.575 }, { 324.293, 97.385, -57.560 },
+ { 340.013, 97.000, -57.540 }
+ },
+ { { -339.998, 97.045, -72.655 }, { -324.278, 97.435, -72.680 }, { -308.648, 97.795, -72.710 },
+ { -293.093, 98.135, -72.730 }, { -277.613, 98.455, -72.750 }, { -262.208, 98.750, -72.775 },
+ { -246.873, 99.020, -72.795 }, { -231.593, 99.280, -72.810 }, { -216.383, 99.505, -72.820 },
+ { -201.223, 99.710, -72.840 }, { -186.113, 99.895, -72.850 }, { -171.048, 100.055, -72.860 },
+ { -156.028, 100.190, -72.870 }, { -141.048, 100.305, -72.880 }, { -126.103, 100.400, -72.885 },
+ { -111.193, 100.470, -72.890 }, { -96.303, 100.520, -72.890 }, { -81.443, 100.540, -72.895 },
+ { -66.608, 100.540, -72.895 }, { -51.783, 100.520, -72.895 }, { -36.973, 100.480, -72.890 },
+ { -22.178, 100.405, -72.885 }, { -7.388, 100.320, -72.880 }, { 7.403, 100.320, -72.880 },
+ { 22.193, 100.405, -72.885 }, { 36.988, 100.480, -72.890 }, { 51.798, 100.520, -72.895 },
+ { 66.623, 100.540, -72.895 }, { 81.458, 100.540, -72.895 }, { 96.318, 100.520, -72.890 },
+ { 111.208, 100.470, -72.890 }, { 126.118, 100.400, -72.885 }, { 141.063, 100.305, -72.880 },
+ { 156.043, 100.190, -72.870 }, { 171.063, 100.055, -72.860 }, { 186.128, 99.895, -72.850 },
+ { 201.238, 99.710, -72.840 }, { 216.398, 99.505, -72.820 }, { 231.613, 99.280, -72.810 },
+ { 246.888, 99.020, -72.795 }, { 262.223, 98.750, -72.775 }, { 277.628, 98.455, -72.750 },
+ { 293.108, 98.135, -72.730 }, { 308.663, 97.795, -72.710 }, { 324.293, 97.435, -72.680 },
+ { 340.013, 97.045, -72.655 }
+ },
+ { { -339.998, 97.070, -87.790 }, { -324.278, 97.460, -87.820 }, { -308.648, 97.820, -87.850 },
+ { -293.093, 98.160, -87.885 }, { -277.613, 98.480, -87.910 }, { -262.208, 98.775, -87.935 },
+ { -246.873, 99.050, -87.960 }, { -231.593, 99.300, -87.980 }, { -216.383, 99.530, -88.000 },
+ { -201.223, 99.735, -88.015 }, { -186.113, 99.920, -88.030 }, { -171.048, 100.080, -88.045 },
+ { -156.028, 100.215, -88.055 }, { -141.048, 100.335, -88.065 }, { -126.103, 100.420, -88.070 },
+ { -111.193, 100.490, -88.075 }, { -96.303, 100.540, -88.085 }, { -81.443, 100.565, -88.085 },
+ { -66.608, 100.560, -88.085 }, { -51.783, 100.540, -88.085 }, { -36.973, 100.500, -88.080 },
+ { -22.178, 100.430, -88.075 }, { -7.388, 100.340, -88.065 }, { 7.403, 100.340, -88.070 },
+ { 22.193, 100.430, -88.075 }, { 36.988, 100.500, -88.080 }, { 51.798, 100.540, -88.085 },
+ { 66.623, 100.560, -88.085 }, { 81.458, 100.565, -88.085 }, { 96.318, 100.540, -88.085 },
+ { 111.208, 100.490, -88.075 }, { 126.118, 100.420, -88.070 }, { 141.063, 100.335, -88.065 },
+ { 156.043, 100.215, -88.055 }, { 171.063, 100.080, -88.045 }, { 186.128, 99.915, -88.030 },
+ { 201.238, 99.735, -88.015 }, { 216.398, 99.530, -88.000 }, { 231.613, 99.300, -87.980 },
+ { 246.888, 99.050, -87.960 }, { 262.223, 98.775, -87.935 }, { 277.628, 98.480, -87.910 },
+ { 293.108, 98.160, -87.885 }, { 308.663, 97.820, -87.850 }, { 324.293, 97.460, -87.820 },
+ { 340.013, 97.070, -87.790 }
+ }
+ };
}
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/analysis/StarterAnalysis.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/analysis/StarterAnalysis.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/analysis/StarterAnalysis.lcsim Wed Mar 9 11:43:24 2016
@@ -20,4 +20,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitoringApp.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitoringApp.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitoringApp.lcsim Wed Mar 9 11:43:24 2016
@@ -1,9 +1,9 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
<execute>
- <driver name="EventMarkerDriver"/>
+ <driver name="EventMarkerDriver"/>
<driver name="EcalRunningPedestal"/>
- <driver name="EcalRawConverter" />
+ <driver name="EcalRawConverter" />
<driver name="LedAnalysisDriver"/>
<driver name="EcalEventDisplay" /> <!-- Ecal event display -->
<driver name="AidaSaveDriver"/>
@@ -48,5 +48,5 @@
<driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
<outputFileName>LedSequenceMonitorOut.aida</outputFileName>
</driver>
- </drivers>
+ </drivers>
</lcsim>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceStandalone.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceStandalone.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceStandalone.lcsim Wed Mar 9 11:43:24 2016
@@ -1,43 +1,43 @@
- <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
- <execute>
- <driver name="EventMarkerDriver"/>
- <driver name="EcalRunningPedestal"/>
- <driver name="EcalRawConverter" />
- <driver name="LedAnalysisDriver"/>
- <driver name="AidaSaveDriver"/>
- </execute>
- <drivers>
- <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
- <eventInterval>100000</eventInterval>
- </driver>
- <driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
- <minLookbackEvents>10</minLookbackEvents>
- <maxLookbackEvents>50</maxLookbackEvents>
- </driver>
- <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
- <ecalCollectionName>EcalCalHits</ecalCollectionName>
- <useTimestamps>false</useTimestamps>
- <useTruthTime>false</useTruthTime>
- <useRunningPedestal>true</useRunningPedestal>
- <useTimeWalkCorrection>true</useTimeWalkCorrection>
- <nsa>60</nsa> <!-- these are critical since the defaults in software are 100 - 20, as in prod. runs -->
- <nsb>16</nsb>
- </driver>
- <driver name="LedAnalysisDriver" type="org.hps.monitoring.ecal.plots.EcalLedSequenceMonitor">
- <isMonitoringApp>false</isMonitoringApp>
- <doFullAnalysis>false</doFullAnalysis>
- <skipMin>0.2</skipMin>
- <skipInitial>0.05</skipInitial>
- <useRawEnergy>true</useRawEnergy>
- <energyCut>2.0</energyCut>
- <nEventsMin>300</nEventsMin>
- <evnMinDraw>0.</evnMinDraw>
- <evnMaxDraw>80000.</evnMaxDraw>
- <saveTuple>false</saveTuple>
- </driver>
- <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
- <outputFileName>${outputFile}.LedAnalysis.aida</outputFileName>
- </driver>
- </drivers>
- </lcsim>
+ <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
+ <execute>
+ <driver name="EventMarkerDriver"/>
+ <driver name="EcalRunningPedestal"/>
+ <driver name="EcalRawConverter" />
+ <driver name="LedAnalysisDriver"/>
+ <driver name="AidaSaveDriver"/>
+ </execute>
+ <drivers>
+ <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>100000</eventInterval>
+ </driver>
+ <driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
+ <minLookbackEvents>10</minLookbackEvents>
+ <maxLookbackEvents>50</maxLookbackEvents>
+ </driver>
+ <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+ <ecalCollectionName>EcalCalHits</ecalCollectionName>
+ <useTimestamps>false</useTimestamps>
+ <useTruthTime>false</useTruthTime>
+ <useRunningPedestal>true</useRunningPedestal>
+ <useTimeWalkCorrection>true</useTimeWalkCorrection>
+ <nsa>60</nsa> <!-- these are critical since the defaults in software are 100 - 20, as in prod. runs -->
+ <nsb>16</nsb>
+ </driver>
+ <driver name="LedAnalysisDriver" type="org.hps.monitoring.ecal.plots.EcalLedSequenceMonitor">
+ <isMonitoringApp>false</isMonitoringApp>
+ <doFullAnalysis>false</doFullAnalysis>
+ <skipMin>0.2</skipMin>
+ <skipInitial>0.05</skipInitial>
+ <useRawEnergy>true</useRawEnergy>
+ <energyCut>2.0</energyCut>
+ <nEventsMin>300</nEventsMin>
+ <evnMinDraw>0.</evnMinDraw>
+ <evnMaxDraw>80000.</evnMaxDraw>
+ <saveTuple>false</saveTuple>
+ </driver>
+ <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
+ <outputFileName>${outputFile}.LedAnalysis.aida</outputFileName>
+ </driver>
+ </drivers>
+ </lcsim>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringFinal.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringFinal.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringFinal.lcsim Wed Mar 9 11:43:24 2016
@@ -1,7 +1,7 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
<execute>
<driver name="EcalRawConverter" />
- <driver name="EcalClusterer" />
+ <driver name="EcalClusterer" />
<driver name="EcalMonitoringPlots" /> <!-- General plots -->
<driver name="EcalHitPlots" /> <!-- Single hit distributions -->
<driver name="EcalClusterPlots" /> <!-- Clusters distributions -->
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringOnly.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringOnly.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalMonitoringOnly.lcsim Wed Mar 9 11:43:24 2016
@@ -1,7 +1,7 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
<execute>
<driver name="EcalRawConverter" />
- <driver name="EcalClusterer" />
+ <driver name="EcalClusterer" />
<driver name="EcalMonitoringPlots" /> <!-- General plots -->
<driver name="EcalHitPlots" /> <!-- Single hit distributions -->
<driver name="EcalClusterPlots" /> <!-- Clusters distributions -->
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim Wed Mar 9 11:43:24 2016
@@ -17,7 +17,7 @@
</execute>
<drivers>
<driver name="SensorOccupancy" type="org.hps.monitoring.drivers.svt.SensorOccupancyPlotsDriver" >
- <eventRefreshRate>100</eventRefreshRate>
+ <eventRefreshRate>100</eventRefreshRate>
<enablePositionPlots>false</enablePositionPlots>
<enableMaxSamplePlots>true</enableMaxSamplePlots>
<maxSamplePosition>3</maxSamplePosition>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014TightPairs.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014TightPairs.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014TightPairs.lcsim Wed Mar 9 11:43:24 2016
@@ -44,7 +44,7 @@
<applyBadCrystalMap>false</applyBadCrystalMap>
<use2014Gain>false</use2014Gain>
<debug>true</debug>
- </driver>
+ </driver>
<driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
<inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
<clusterWindow>1</clusterWindow>
@@ -62,7 +62,7 @@
<energySlopeParamF>0.005500</energySlopeParamF>
<energySlopeLow>0.4</energySlopeLow>
<outputFileName>${outputFile}.triggers</outputFileName>
- </driver>
+ </driver>
<driver name="AidaSaveDriver"
type="org.lcsim.job.AidaSaveDriver">
<outputFileName>${outputFile}_triggerPlots</outputFileName>
@@ -73,4 +73,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2014PrescaledTriggers.lcsim Wed Mar 9 11:43:24 2016
@@ -54,7 +54,7 @@
<nsa>100</nsa>
<nsb>20</nsb>
<use2014Gain>false</use2014Gain>
- </driver>
+ </driver>
<driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
<inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
<outputClusterCollectionName>EcalClusters</outputClusterCollectionName>
@@ -82,7 +82,7 @@
<outputFileName>${outputFile}.triggers.singles0</outputFileName>
<lcioFile>${outputFile}.singles0.slcio</lcioFile>
<!--<verbose>true</verbose>-->
- </driver>
+ </driver>
<driver name="SinglesTrigger1" type="org.hps.readout.ecal.SinglesTriggerDriver">
<clusterCollectionName>EcalClusters</clusterCollectionName>
<deadTime>32</deadTime>
@@ -94,7 +94,7 @@
<outputFileName>${outputFile}.triggers.singles1</outputFileName>
<lcioFile>${outputFile}.singles1.slcio</lcioFile>
<!--<verbose>true</verbose>-->
- </driver>
+ </driver>
<driver name="PairTrigger0" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver">
<clusterCollectionName>EcalClusters</clusterCollectionName>
<deadTime>32</deadTime>
@@ -113,7 +113,7 @@
<outputFileName>${outputFile}.triggers.pairs0</outputFileName>
<lcioFile>${outputFile}.pairs0.slcio</lcioFile>
<!--<verbose>true</verbose>-->
- </driver>
+ </driver>
<driver name="PairTrigger1" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver">
<clusterCollectionName>EcalClusters</clusterCollectionName>
<deadTime>32</deadTime>
@@ -132,7 +132,7 @@
<outputFileName>${outputFile}.triggers.pairs1</outputFileName>
<lcioFile>${outputFile}.pairs1.slcio</lcioFile>
<!--<verbose>true</verbose>-->
- </driver>
+ </driver>
<driver name="AidaSaveDriver"
type="org.lcsim.job.AidaSaveDriver">
<outputFileName>${outputFile}_triggerPlots</outputFileName>
@@ -143,4 +143,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutNoPileup.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutNoPileup.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutNoPileup.lcsim Wed Mar 9 11:43:24 2016
@@ -48,7 +48,7 @@
<deadTime>0</deadTime>
<pairCoincidence>0</pairCoincidence>
<lcioFile>${outputFile}.slcio</lcioFile>
- </driver>
+ </driver>
<driver name="SimpleSVTReadout" type="org.hps.readout.svt.SimpleSvtReadout">
<noPileup>true</noPileup>
</driver>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToEvio.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToEvio.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014ReadoutToEvio.lcsim Wed Mar 9 11:43:24 2016
@@ -44,7 +44,7 @@
<applyBadCrystalMap>false</applyBadCrystalMap>
<use2014Gain>true</use2014Gain>
<!-- <debug>true</debug>-->
- </driver>
+ </driver>
<driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
<inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
<clusterWindow>1</clusterWindow>
@@ -54,7 +54,7 @@
<deadTime>10</deadTime>
<pairCoincidence>2</pairCoincidence>
<outputFileName>${outputFile}.triggers</outputFileName>
- </driver>
+ </driver>
<driver name="SimpleSVTReadout" type="org.hps.readout.svt.SimpleSvtReadout" />
<driver name="ClockDriver" type="org.hps.readout.ecal.ClockDriver"/>
<driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver">
@@ -62,4 +62,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014TruthReadoutToLcio.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014TruthReadoutToLcio.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/HPS2014TruthReadoutToLcio.lcsim Wed Mar 9 11:43:24 2016
@@ -47,7 +47,7 @@
<applyBadCrystalMap>false</applyBadCrystalMap>
<use2014Gain>true</use2014Gain>
<!-- <debug>true</debug>-->
- </driver>
+ </driver>
<driver name="EcalClusterer" type="org.hps.recon.ecal.cluster.GTPClusterDriver">
<inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
<clusterWindow>1</clusterWindow>
@@ -57,7 +57,7 @@
<deadTime>10</deadTime>
<pairCoincidence>2</pairCoincidence>
<outputFileName>${outputFile}.triggers</outputFileName>
- </driver>
+ </driver>
<driver name="SimpleSVTReadout" type="org.hps.readout.svt.SimpleSvtReadout">
</driver>
<driver name="AidaSaveDriver"
@@ -70,4 +70,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/LcioToEvio.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/LcioToEvio.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/LcioToEvio.lcsim Wed Mar 9 11:43:24 2016
@@ -15,7 +15,7 @@
<period>1</period>
<deadTime>0</deadTime>
<triggerDelay>0</triggerDelay>
- </driver>
+ </driver>
<driver name="TestRunReconToEvio" type="org.hps.evio.TestRunTriggeredReconToEvio">
<evioOutputFile>${outputFile}.evio</evioOutputFile>
</driver>
@@ -23,4 +23,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/TestRunNoPileup.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/TestRunNoPileup.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/TestRunNoPileup.lcsim Wed Mar 9 11:43:24 2016
@@ -39,7 +39,7 @@
<clusterCollectionName>EcalTriggerClusters</clusterCollectionName>
<deadTime>0</deadTime>
<lcioFile>${outputFile}.slcio</lcioFile>
- </driver>
+ </driver>
<driver name="ClockDriver" type="org.hps.readout.ecal.ClockDriver"/>
<driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>
</drivers>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToEvio.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToEvio.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/readout/TestRunReadoutToEvio.lcsim Wed Mar 9 11:43:24 2016
@@ -20,7 +20,7 @@
<driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
<eventInterval>1000</eventInterval>
</driver>
- <driver name="BadChannelFilter" type="org.hps.recon.tracking.SVTBadChannelFilterDriver" />
+ <driver name="BadChannelFilter" type="org.hps.recon.tracking.SVTBadChannelFilterDriver" />
<driver name="EcalReadout" type="org.hps.readout.ecal.FADCEcalReadoutDriver">
<coincidenceWindow>8</coincidenceWindow>
<ecalName>Ecal</ecalName>
@@ -39,7 +39,7 @@
<rawCollectionName>EcalRawHits</rawCollectionName>
<ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
<scale>1</scale>
- </driver>
+ </driver>
<driver name="EcalTriggerFilter" type="org.hps.recon.ecal.EcalTriggerFilterDriver">
<inputCollection>EcalCorrectedHits</inputCollection>
<outputCollection>EcalFilteredHits</outputCollection>
@@ -55,7 +55,7 @@
<clusterCollectionName>EcalClusters</clusterCollectionName>
<deadTime>10</deadTime>
<outputFileName>${outputFile}.triggers</outputFileName>
- </driver>
+ </driver>
<driver name="SimpleSVTReadout" type="org.hps.readout.svt.SimpleSvtReadout" />
<driver name="ClockDriver" type="org.hps.readout.ecal.ClockDriver"/>
<driver name="TestRunReconToEvio" type="org.hps.evio.TestRunTriggeredReconToEvio">
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim Wed Mar 9 11:43:24 2016
@@ -7,8 +7,8 @@
@author <a href="mailto:[log in to unmask]">Omar Moreno</a>
-->
<execute>
- <!--RF driver-->
- <driver name="RfFitter"/>
+ <!--RF driver-->
+ <driver name="RfFitter"/>
<!-- Ecal reconstruction drivers -->
<driver name="EcalRunningPedestal"/>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngineeringRun2015FullRecon.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngineeringRun2015FullRecon.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngineeringRun2015FullRecon.lcsim Wed Mar 9 11:43:24 2016
@@ -12,8 +12,8 @@
<driver name="UnblinderTriggerSkimmer"/>
- <!--RF driver-->
- <driver name="RfFitter"/>
+ <!--RF driver-->
+ <driver name="RfFitter"/>
<driver name="EcalRawConverter" />
<driver name="ReconClusterer" />
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedAnalysisFromEvio.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedAnalysisFromEvio.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedAnalysisFromEvio.lcsim Wed Mar 9 11:43:24 2016
@@ -1,9 +1,9 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
<execute>
- <driver name="EventMarkerDriver"/>
+ <driver name="EventMarkerDriver"/>
<driver name="EcalRunningPedestal"/>
- <driver name="EcalRawConverter" />
+ <driver name="EcalRawConverter" />
<driver name="AidaSaveDriver"/>
</execute>
<drivers>
@@ -25,5 +25,5 @@
<driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
<outputFileName>${outputFile}.aida</outputFileName>
</driver>
- </drivers>
+ </drivers>
</lcsim>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedOnlineOfflineComparison.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedOnlineOfflineComparison.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedOnlineOfflineComparison.lcsim Wed Mar 9 11:43:24 2016
@@ -1,7 +1,7 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
<execute>
- <driver name="EventMarkerDriver"/>
+ <driver name="EventMarkerDriver"/>
<driver name="LedOnlineOfflineComparison"/>
<driver name="AidaSaveDriver"/>
</execute>
@@ -14,5 +14,5 @@
<driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
<outputFileName>${outputFile}.root</outputFileName>
</driver>
- </drivers>
+ </drivers>
</lcsim>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/ClusterRecon.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/ClusterRecon.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/ClusterRecon.lcsim Wed Mar 9 11:43:24 2016
@@ -5,7 +5,7 @@
@author Holly Szumila <[log in to unmask]>
-->
<execute>
- <driver name="EventMarkerDriver"/>
+ <driver name="EventMarkerDriver"/>
<driver name="EcalRunningPedestal"/>
<driver name="EcalRawConverter" />
<driver name="ReconClusterer" />
@@ -13,7 +13,7 @@
<driver name="LCIOWriter"/>
</execute>
<drivers>
- <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+ <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
<eventInterval>1000</eventInterval>
</driver>
<driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EcalFeeViewer.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EcalFeeViewer.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EcalFeeViewer.lcsim Wed Mar 9 11:43:24 2016
@@ -1,7 +1,7 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
<execute>
- <driver name="EcalRunningPedestal"/>
+ <driver name="EcalRunningPedestal"/>
<driver name="EcalRawConverter" />
<driver name="ReconClusterer"/>
<driver name="FEEPlotter"/>
@@ -10,7 +10,7 @@
</execute>
<drivers>
<driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
- <logLevel>CONFIG</logLevel>
+ <logLevel>CONFIG</logLevel>
</driver>
<driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
</driver>
@@ -18,7 +18,7 @@
<logLevel>WARNING</logLevel>
</driver>
<driver name="FEEPlotter" type="org.hps.analysis.ecal.FEEClusterPlotter">
- <outputPlots>yes</outputPlots>
+ <outputPlots>yes</outputPlots>
</driver>
<driver name="EcalFeeMonitor" type="org.hps.monitoring.ecal.plots.EcalFeeMonitor">
</driver>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EcalSimReadout.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EcalSimReadout.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EcalSimReadout.lcsim Wed Mar 9 11:43:24 2016
@@ -21,11 +21,11 @@
<eventInterval>1000</eventInterval>
</driver>
<driver name="ConditionsDriver" type="org.hps.conditions.ConditionsDriver">
- <runNumber>0</runNumber>
- <freeze>true</freeze>
- <detectorName>HPS-ECalCommissioning-v3-fieldmap</detectorName>
- </driver>
-<!-- <driver name="TestRunReconToLcio" type="org.hps.evio.TestRunTriggeredReconToLcio">
+ <runNumber>0</runNumber>
+ <freeze>true</freeze>
+ <detectorName>HPS-ECalCommissioning-v3-fieldmap</detectorName>
+ </driver>
+<!-- <driver name="TestRunReconToLcio" type="org.hps.evio.TestRunTriggeredReconToLcio">
<outputFile>${outputFile}.slcio</outputFile>
<rejectBackground>true</rejectBackground>
</driver>-->
@@ -45,7 +45,7 @@
<ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
<applyBadCrystalMap>false</applyBadCrystalMap>
<use2014Gain>false</use2014Gain>
- </driver>
+ </driver>
<driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
<logLevel>WARNING</logLevel>
<inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName>
@@ -65,4 +65,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngRun2015FullReconMC_FEE.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngRun2015FullReconMC_FEE.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngRun2015FullReconMC_FEE.lcsim Wed Mar 9 11:43:24 2016
@@ -74,11 +74,11 @@
<eventInterval>1000</eventInterval>
</driver>
<driver name="RfFitter" type="org.hps.evio.RfFitterDriver"/>
- <driver name="FEEFilterDriver" type="org.hps.recon.filtering.FEEFilterDriver">
+ <driver name="FEEFilterDriver" type="org.hps.recon.filtering.FEEFilterDriver">
</driver>
<driver name="FEEPlotter" type="org.hps.analysis.ecal.FEEClusterPlotter">
- <inputCollection>EcalClusters</inputCollection>
- <outputPlots>yes</outputPlots>
+ <inputCollection>EcalClusters</inputCollection>
+ <outputPlots>yes</outputPlots>
</driver>
<driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
<outputFileName>${outputFile}.root</outputFileName>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngineeringRun2015EcalOnly.lcsim
=============================================================================
Binary files - no diff available.
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/EngineeringRun2015_FEEIter_Filter.lcsim
=============================================================================
Binary files - no diff available.
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/QuickEcalReadout.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/QuickEcalReadout.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/holly/QuickEcalReadout.lcsim Wed Mar 9 11:43:24 2016
@@ -18,11 +18,11 @@
<eventInterval>1000</eventInterval>
</driver>
<driver name="ConditionsDriver" type="org.hps.conditions.ConditionsDriver">
- <runNumber>0</runNumber>
- <freeze>true</freeze>
- <detectorName>HPS-Proposal2014-v7-2pt2</detectorName>
- </driver>
- <driver name="TestRunReconToLcio" type="org.hps.evio.TestRunTriggeredReconToLcio">
+ <runNumber>0</runNumber>
+ <freeze>true</freeze>
+ <detectorName>HPS-Proposal2014-v7-2pt2</detectorName>
+ </driver>
+ <driver name="TestRunReconToLcio" type="org.hps.evio.TestRunTriggeredReconToLcio">
<outputFile>${outputFile}.slcio</outputFile>
<rejectBackground>true</rejectBackground>
</driver>
@@ -44,4 +44,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/EcalScoring.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/EcalScoring.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/EcalScoring.lcsim Wed Mar 9 11:43:24 2016
@@ -25,4 +25,4 @@
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/HitTimes.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/HitTimes.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/HitTimes.lcsim Wed Mar 9 11:43:24 2016
@@ -1,14 +1,14 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
- <execute>
- <driver name="EventMarkerDriver"/>
- <driver name="HitTimePrintDriver"/>
- </execute>
- <drivers>
- <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
- <eventInterval>1</eventInterval>
- </driver>
- <driver name="HitTimePrintDriver" type="org.hps.users.meeg.HitTimePrintDriver"/>
- </drivers>
+ <execute>
+ <driver name="EventMarkerDriver"/>
+ <driver name="HitTimePrintDriver"/>
+ </execute>
+ <drivers>
+ <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>1</eventInterval>
+ </driver>
+ <driver name="HitTimePrintDriver" type="org.hps.users.meeg.HitTimePrintDriver"/>
+ </drivers>
</lcsim>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/PairsSkimmer.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/PairsSkimmer.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/PairsSkimmer.lcsim Wed Mar 9 11:43:24 2016
@@ -44,4 +44,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/SmallHits.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/SmallHits.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/SmallHits.lcsim Wed Mar 9 11:43:24 2016
@@ -1,18 +1,18 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
- <execute>
- <driver name="EventMarkerDriver"/>
- <driver name="SVTSmallHitsDriver"/>
+ <execute>
+ <driver name="EventMarkerDriver"/>
+ <driver name="SVTSmallHitsDriver"/>
<driver name="AidaSaveDriver"/>
- </execute>
- <drivers>
- <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
- <eventInterval>1000</eventInterval>
- </driver>
- <driver name="SVTSmallHitsDriver" type="org.hps.users.meeg.SVTSmallHitsDriver"/>
+ </execute>
+ <drivers>
+ <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>1000</eventInterval>
+ </driver>
+ <driver name="SVTSmallHitsDriver" type="org.hps.users.meeg.SVTSmallHitsDriver"/>
<driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
<outputFileName>smallhits.root</outputFileName>
</driver>
- </drivers>
+ </drivers>
</lcsim>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/TridentMCSkim.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/TridentMCSkim.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/TridentMCSkim.lcsim Wed Mar 9 11:43:24 2016
@@ -27,4 +27,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/ecal_fadc_bkgd.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/ecal_fadc_bkgd.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/ecal_fadc_bkgd.lcsim Wed Mar 9 11:43:24 2016
@@ -10,11 +10,11 @@
<driver name="EcalConverter" />
<driver name="EcalClusterer" />
<driver name="EcalTrigger" />
-<!-- <driver name="EcalPlots"/>-->
+<!-- <driver name="EcalPlots"/>-->
<driver name="EcalFADCPlots" />
<driver name="EcalTriggerPlots" />
<driver name="MCParticlePlots" />
-<!-- <driver name="Writer"/>-->
+<!-- <driver name="Writer"/>-->
<driver name="AidaSaveDriver" />
<driver name="ClockDriver" />
</execute>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/raw_triggers.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/raw_triggers.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/meeg/raw_triggers.lcsim Wed Mar 9 11:43:24 2016
@@ -5,10 +5,10 @@
-->
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
<execute>
-<!-- <driver name="EventMarkerDriver"/>-->
+<!-- <driver name="EventMarkerDriver"/>-->
<driver name="EcalClusterer" />
<driver name="EcalTrigger" />
-<!-- <driver name="MCParticlePlots"/>-->
+<!-- <driver name="MCParticlePlots"/>-->
<driver name="AidaSaveDriver" />
<driver name="ClockDriver" />
</execute>
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/phansson/TestRunOfflineRecon.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/phansson/TestRunOfflineRecon.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/phansson/TestRunOfflineRecon.lcsim Wed Mar 9 11:43:24 2016
@@ -39,7 +39,7 @@
</driver>
<driver name="TrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
<debug>false</debug>
- <!--<strategyResource>/org/hps/recon/tracking/strategies/HPS-Test-All.xml</strategyResource>-->
+ <!--<strategyResource>/org/hps/recon/tracking/strategies/HPS-Test-All.xml</strategyResource>-->
<strategyResource>/org/hps/recon/tracking/strategies/HPS-TestRun-357.xml</strategyResource>
</driver>
<driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/rafo/TestSteering.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/rafo/TestSteering.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/rafo/TestSteering.lcsim Wed Mar 9 11:43:24 2016
@@ -17,4 +17,4 @@
</driver>
</drivers>
</lcsim>
-
+
Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/MollerBeamtilt.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/MollerBeamtilt.lcsim (original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/spaul/MollerBeamtilt.lcsim Wed Mar 9 11:43:24 2016
@@ -15,13 +15,13 @@
<eventInterval>1000</eventInterval>
</driver>
- <driver name="MollerBeamtilt" type="org.hps.users.spaul.moller.MollerBeamtiltAnalysis">
- <maxVtxChi2>15</maxVtxChi2>
- <maxTrkChi2>30</maxTrkChi2>
- <minMass>.030</minMass>
- <maxMass>.036</maxMass>
- <minPz>1.0</minPz>
- <maxPz>1.1</maxPz>
+ <driver name="MollerBeamtilt" type="org.hps.users.spaul.moller.MollerBeamtiltAnalysis">
+ <maxVtxChi2>15</maxVtxChi2>
+ <maxTrkChi2>30</maxTrkChi2>
+ <minMass>.030</minMass>
+ <maxMass>.036</maxMass>
+ <minPz>1.0</minPz>
+ <maxPz>1.1</maxPz>
</driver>
<driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
<outputFileName>${outputFile}</outputFileName>
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/DumbShaperFit.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/DumbShaperFit.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/DumbShaperFit.java Wed Mar 9 11:43:24 2016
@@ -34,7 +34,7 @@
}
public Collection<ShapeFitParameters> fitShape(int channel, short[] samples, HpsSiSensor sensor){
-
+
ShapeFitParameters fitresults = new ShapeFitParameters();
double[] pedSub = {-99.0, -99.0, -99.0, -99.0, -99.0, -99.0};
double maxADC = -99999;
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/NearestNeighborRMSClusterer.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/NearestNeighborRMSClusterer.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/NearestNeighborRMSClusterer.java Wed Mar 9 11:43:24 2016
@@ -161,7 +161,7 @@
double signal = base_hit.getAmp();
double noiseRMS = 0;
for(int sampleN = 0; sampleN < HPSSVTConstants.TOTAL_NUMBER_OF_SAMPLES; sampleN++){
- noiseRMS += ((HpsSiSensor) rth.getDetectorElement()).getNoise(channel_number, sampleN);
+ noiseRMS += ((HpsSiSensor) rth.getDetectorElement()).getNoise(channel_number, sampleN);
}
noiseRMS = noiseRMS/HPSSVTConstants.TOTAL_NUMBER_OF_SAMPLES;
@@ -225,7 +225,7 @@
cluster_signal += hit.getAmp();
double strip_noise = 0;
for(int sampleN = 0; sampleN < HPSSVTConstants.TOTAL_NUMBER_OF_SAMPLES; sampleN++){
- strip_noise += ((HpsSiSensor) hit.getRawTrackerHit().getDetectorElement()).getNoise(clustered_cell, sampleN);
+ strip_noise += ((HpsSiSensor) hit.getRawTrackerHit().getDetectorElement()).getNoise(clustered_cell, sampleN);
}
strip_noise = strip_noise/HPSSVTConstants.TOTAL_NUMBER_OF_SAMPLES;
cluster_noise_squared += Math.pow(strip_noise, 2);
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/NoiselessReadoutChip.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/NoiselessReadoutChip.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/NoiselessReadoutChip.java Wed Mar 9 11:43:24 2016
@@ -164,8 +164,8 @@
// Loop over the channels contained in the SiElectrodeDataCollection
for (Integer channel : data.keySet()) {
-
- if(dropBadChannels && ((HpsSiSensor) electrodes.getDetectorElement()).isBadChannel(channel)){
+
+ if(dropBadChannels && ((HpsSiSensor) electrodes.getDetectorElement()).isBadChannel(channel)){
//===> if (dropBadChannels && HPSSVTCalibrationConstants.isBadChannel((SiSensor) electrodes.getDetectorElement(), channel)) {
// System.out.format("%d bad\n", channel);
continue;
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/SVTBadChannelFilterDriver.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/SVTBadChannelFilterDriver.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/SVTBadChannelFilterDriver.java Wed Mar 9 11:43:24 2016
@@ -19,33 +19,33 @@
*/
public class SVTBadChannelFilterDriver extends Driver {
- // RawTrackerHit collection name
+ // RawTrackerHit collection name
private String rawTrackerHitCollection = "SVTRawTrackerHits";
@Override
public void process(EventHeader event) {
-
+
if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollection)) {
- // Get the list of raw hits from the event
- List<RawTrackerHit> hits = event.get(RawTrackerHit.class, rawTrackerHitCollection);
-
+ // Get the list of raw hits from the event
+ List<RawTrackerHit> hits = event.get(RawTrackerHit.class, rawTrackerHitCollection);
+
// Get the hits meta data from the event
- LCMetaData meta = event.getMetaData(hits);
+ LCMetaData meta = event.getMetaData(hits);
- // Iterate over all raw hits in the event. If the raw hit is
- // identified to come from a noisy/bad channel, remove it from
- // the list of raw hits.
+ // Iterate over all raw hits in the event. If the raw hit is
+ // identified to come from a noisy/bad channel, remove it from
+ // the list of raw hits.
Iterator<RawTrackerHit> hitsIterator = hits.iterator();
while (hitsIterator.hasNext()) {
- RawTrackerHit hit = hitsIterator.next();
+ RawTrackerHit hit = hitsIterator.next();
//hit.setMetaData(meta);
int strip = hit.getIdentifierFieldValue("strip");
HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement();
if(sensor.isBadChannel(strip)){
- hitsIterator.remove();
+ hitsIterator.remove();
}
if (!sensor.getReadout().getHits(RawTrackerHit.class).isEmpty()) {
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackResidualsData.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackResidualsData.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackResidualsData.java Wed Mar 9 11:43:24 2016
@@ -13,84 +13,84 @@
*/
public class TrackResidualsData implements GenericObject {
- List<Double> trackResidualsX = new ArrayList<Double>();
- List<Float> trackResidualsY = new ArrayList<Float>();
- List<Integer> layers = new ArrayList<Integer>();
-
- /**
- * Default Ctor
- *
- * @param trackerVolume : The SVT volume to which the track used to calculate
- * the residuals corresponds to.
- */
- public TrackResidualsData(int trackerVolume, List<Integer> layers, List<Double> trackResidualsX, List<Float> trackResidualsY){
- this.layers.addAll(layers);
- this.layers.add(trackerVolume);
- this.trackResidualsX.addAll(trackResidualsX);
- this.trackResidualsY.addAll(trackResidualsY);
- }
+ List<Double> trackResidualsX = new ArrayList<Double>();
+ List<Float> trackResidualsY = new ArrayList<Float>();
+ List<Integer> layers = new ArrayList<Integer>();
+
+ /**
+ * Default Ctor
+ *
+ * @param trackerVolume : The SVT volume to which the track used to calculate
+ * the residuals corresponds to.
+ */
+ public TrackResidualsData(int trackerVolume, List<Integer> layers, List<Double> trackResidualsX, List<Float> trackResidualsY){
+ this.layers.addAll(layers);
+ this.layers.add(trackerVolume);
+ this.trackResidualsX.addAll(trackResidualsX);
+ this.trackResidualsY.addAll(trackResidualsY);
+ }
- /**
- *
- * @return tracker volume : 0 if top 1 if bottom
- */
- public int getTrackerVolume(){
- return layers.get(layers.size() - 1);
- }
-
- /**
- *
- */
- @Override
- public double getDoubleVal(int index) {
- return trackResidualsX.get(index);
- }
+ /**
+ *
+ * @return tracker volume : 0 if top 1 if bottom
+ */
+ public int getTrackerVolume(){
+ return layers.get(layers.size() - 1);
+ }
+
+ /**
+ *
+ */
+ @Override
+ public double getDoubleVal(int index) {
+ return trackResidualsX.get(index);
+ }
- /**
- *
- */
- @Override
- public float getFloatVal(int index) {
- return trackResidualsY.get(index);
- }
+ /**
+ *
+ */
+ @Override
+ public float getFloatVal(int index) {
+ return trackResidualsY.get(index);
+ }
- /**
- *
- */
- @Override
- public int getIntVal(int index) {
- return layers.get(index);
- }
+ /**
+ *
+ */
+ @Override
+ public int getIntVal(int index) {
+ return layers.get(index);
+ }
- /**
- *
- */
- @Override
- public int getNDouble() {
- return trackResidualsX.size();
- }
+ /**
+ *
+ */
+ @Override
+ public int getNDouble() {
+ return trackResidualsX.size();
+ }
- /**
- *
- */
- @Override
- public int getNFloat() {
- return trackResidualsY.size();
- }
+ /**
+ *
+ */
+ @Override
+ public int getNFloat() {
+ return trackResidualsY.size();
+ }
- /**
- *
- */
- @Override
- public int getNInt() {
- return layers.size();
- }
+ /**
+ *
+ */
+ @Override
+ public int getNInt() {
+ return layers.size();
+ }
- /**
- *
- */
- @Override
- public boolean isFixedSize() {
- return false;
- }
+ /**
+ *
+ */
+ @Override
+ public boolean isFixedSize() {
+ return false;
+ }
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackTimeData.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackTimeData.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/TrackTimeData.java Wed Mar 9 11:43:24 2016
@@ -12,124 +12,124 @@
*/
public class TrackTimeData implements GenericObject {
- List<Float> trackTimeData = new ArrayList<Float>();
- List<Double> t0Residuals = new ArrayList<Double>();
- List<Integer> layers = new ArrayList<Integer>();
-
- // Constants
- private final static int SVT_VOLUME_INDEX = 0;
- private final static int TRACK_TIME_INDEX = 1;
-
- /**
- * Default Ctor
- *
- * @param trackTime : The mean t0 time of all hits of a track
- * @param trackerVolume : The SVT volume to which the track used to calculate
- * the track time corresponds to.
- *
- */
- public TrackTimeData(float trackerVolume, double trackTime, List<Integer> layers, List<Double> t0Residuals){
- trackTimeData.add(trackerVolume);
- trackTimeData.add((float) trackTime);
- this.layers.addAll(layers);
- this.t0Residuals.addAll(t0Residuals);
- }
-
- /**
- *
- *
- * @param layer :
- * @param t0Residual :
- *
- */
- private void addResidual(int layer, double t0Residual) {
- layers.add(layer);
- t0Residuals.add(t0Residual);
- }
+ List<Float> trackTimeData = new ArrayList<Float>();
+ List<Double> t0Residuals = new ArrayList<Double>();
+ List<Integer> layers = new ArrayList<Integer>();
+
+ // Constants
+ private final static int SVT_VOLUME_INDEX = 0;
+ private final static int TRACK_TIME_INDEX = 1;
+
+ /**
+ * Default Ctor
+ *
+ * @param trackTime : The mean t0 time of all hits of a track
+ * @param trackerVolume : The SVT volume to which the track used to calculate
+ * the track time corresponds to.
+ *
+ */
+ public TrackTimeData(float trackerVolume, double trackTime, List<Integer> layers, List<Double> t0Residuals){
+ trackTimeData.add(trackerVolume);
+ trackTimeData.add((float) trackTime);
+ this.layers.addAll(layers);
+ this.t0Residuals.addAll(t0Residuals);
+ }
+
+ /**
+ *
+ *
+ * @param layer :
+ * @param t0Residual :
+ *
+ */
+ private void addResidual(int layer, double t0Residual) {
+ layers.add(layer);
+ t0Residuals.add(t0Residual);
+ }
- /**
- *
- */
- public double getTrackTime() {
- return trackTimeData.get(TRACK_TIME_INDEX);
- }
-
- /**
- *
- *
- */
- public double getT0Residual(int layer) {
- return this.getDoubleVal(layer);
- }
+ /**
+ *
+ */
+ public double getTrackTime() {
+ return trackTimeData.get(TRACK_TIME_INDEX);
+ }
+
+ /**
+ *
+ *
+ */
+ public double getT0Residual(int layer) {
+ return this.getDoubleVal(layer);
+ }
- /**
- *
- */
- public double getClusterTime(int layer) {
- return this.getTrackTime() - this.getT0Residual(layer);
- }
-
- /**
- *
- *
- */
- public boolean isTopSvtVolume() {
- return (trackTimeData.get(SVT_VOLUME_INDEX) == 0) ? true : false;
- }
-
- /**
- *
- */
- @Override
- public double getDoubleVal(int index) {
- return t0Residuals.get(index);
- }
+ /**
+ *
+ */
+ public double getClusterTime(int layer) {
+ return this.getTrackTime() - this.getT0Residual(layer);
+ }
+
+ /**
+ *
+ *
+ */
+ public boolean isTopSvtVolume() {
+ return (trackTimeData.get(SVT_VOLUME_INDEX) == 0) ? true : false;
+ }
+
+ /**
+ *
+ */
+ @Override
+ public double getDoubleVal(int index) {
+ return t0Residuals.get(index);
+ }
- /**
- *
- */
- @Override
- public float getFloatVal(int index) {
- return trackTimeData.get(index);
- }
+ /**
+ *
+ */
+ @Override
+ public float getFloatVal(int index) {
+ return trackTimeData.get(index);
+ }
- /**
- *
- */
- @Override
- public int getIntVal(int index) {
- return layers.get(index);
- }
+ /**
+ *
+ */
+ @Override
+ public int getIntVal(int index) {
+ return layers.get(index);
+ }
- /**
- *
- */
- @Override
- public int getNDouble() {
- return t0Residuals.size();
- }
+ /**
+ *
+ */
+ @Override
+ public int getNDouble() {
+ return t0Residuals.size();
+ }
- /**
- *
- */
- @Override
- public int getNFloat() {
- return trackTimeData.size();
- }
+ /**
+ *
+ */
+ @Override
+ public int getNFloat() {
+ return trackTimeData.size();
+ }
- /**
- *
- */
- @Override
- public int getNInt() {
- return layers.size();
- }
+ /**
+ *
+ */
+ @Override
+ public int getNInt() {
+ return layers.size();
+ }
- /**
- *
- */
- @Override
- public boolean isFixedSize() {
- return false;
- }
+ /**
+ *
+ */
+ @Override
+ public boolean isFixedSize() {
+ return false;
+ }
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/WTrack.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/WTrack.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/WTrack.java Wed Mar 9 11:43:24 2016
@@ -38,8 +38,8 @@
* @param bfield value and sign of magnetic field
*/
public WTrack(HelicalTrackFit track, double bfield) {
- _htf = track;
- //_bfield = flip ? -1.0 * bfield : bfield; // flip if needed
+ _htf = track;
+ //_bfield = flip ? -1.0 * bfield : bfield; // flip if needed
_bfield = bfield;
_a = -1 * Constants.fieldConversion * _bfield * Math.signum(track.R());
double p = track.p(Math.abs(_bfield));
@@ -228,8 +228,8 @@
}
/*
- Calculate the exact position of the new helix parameters at path length s in an arbitrarily oriented,
- constant magnetic field point xp is the point h is a unit vector in the direction of the magnetic field.
+ Calculate the exact position of the new helix parameters at path length s in an arbitrarily oriented,
+ constant magnetic field point xp is the point h is a unit vector in the direction of the magnetic field.
* @param s - path length
* @param h - magnetic field unit vector
* @return track parameters
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLEventData.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLEventData.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLEventData.java Wed Mar 9 11:43:24 2016
@@ -3,87 +3,87 @@
import org.lcsim.event.GenericObject;
public class GBLEventData implements GenericObject {
-
- /*
- *
- * Interface enumerator to access the correct data
- *
- */
- private static class GBLINT {
- public static final int RUNNR = 0;
- public static final int BANK_INT_SIZE = 1;
- }
- private static class GBLDOUBLE {
- public static final int BFIELD = 0;
- public static final int BANK_DOUBLE_SIZE = 1;
- }
- // array holding the integer data
- private int bank_int[] = new int[GBLINT.BANK_INT_SIZE];
- private double bank_double[] = new double[GBLDOUBLE.BANK_DOUBLE_SIZE];
-
+
+ /*
+ *
+ * Interface enumerator to access the correct data
+ *
+ */
+ private static class GBLINT {
+ public static final int RUNNR = 0;
+ public static final int BANK_INT_SIZE = 1;
+ }
+ private static class GBLDOUBLE {
+ public static final int BFIELD = 0;
+ public static final int BANK_DOUBLE_SIZE = 1;
+ }
+ // array holding the integer data
+ private int bank_int[] = new int[GBLINT.BANK_INT_SIZE];
+ private double bank_double[] = new double[GBLDOUBLE.BANK_DOUBLE_SIZE];
+
- /**
- * Constructor with event number as parameter
- * @param eventNumber the event number
- *
- */
- public GBLEventData(int eventNumber,double Bz) {
- setRunNr(eventNumber);
- setBfield(Bz);
- }
-
- public void setRunNr(int val) {
- bank_int[GBLINT.RUNNR] = val;
- }
-
- public int getRunNr() {
- return this.getIntVal(GBLINT.RUNNR);
- }
-
- public void setBfield(double val) {
- bank_double[GBLDOUBLE.BFIELD] = val;
- }
-
- public double getBfield() {
- return this.getDoubleVal(GBLDOUBLE.BFIELD);
- }
-
-
- @Override
- public int getNInt() {
- return GBLINT.BANK_INT_SIZE;
- }
+ /**
+ * Constructor with event number as parameter
+ * @param eventNumber the event number
+ *
+ */
+ public GBLEventData(int eventNumber,double Bz) {
+ setRunNr(eventNumber);
+ setBfield(Bz);
+ }
+
+ public void setRunNr(int val) {
+ bank_int[GBLINT.RUNNR] = val;
+ }
+
+ public int getRunNr() {
+ return this.getIntVal(GBLINT.RUNNR);
+ }
+
+ public void setBfield(double val) {
+ bank_double[GBLDOUBLE.BFIELD] = val;
+ }
+
+ public double getBfield() {
+ return this.getDoubleVal(GBLDOUBLE.BFIELD);
+ }
+
+
+ @Override
+ public int getNInt() {
+ return GBLINT.BANK_INT_SIZE;
+ }
- @Override
- public int getNFloat() {
- return 0;
- }
+ @Override
+ public int getNFloat() {
+ return 0;
+ }
- @Override
- public int getNDouble() {
- return GBLDOUBLE.BANK_DOUBLE_SIZE;
- }
+ @Override
+ public int getNDouble() {
+ return GBLDOUBLE.BANK_DOUBLE_SIZE;
+ }
- @Override
- public int getIntVal(int index) {
- return bank_int[index];
- }
+ @Override
+ public int getIntVal(int index) {
+ return bank_int[index];
+ }
- @Override
- public float getFloatVal(int index) {
- // TODO Auto-generated method stub
- return 0;
- }
+ @Override
+ public float getFloatVal(int index) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
- @Override
- public double getDoubleVal(int index) {
- return bank_double[index];
- }
+ @Override
+ public double getDoubleVal(int index) {
+ return bank_double[index];
+ }
- @Override
- public boolean isFixedSize() {
- // TODO Auto-generated method stub
- return false;
- }
+ @Override
+ public boolean isFixedSize() {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLFileIO.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLFileIO.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLFileIO.java Wed Mar 9 11:43:24 2016
@@ -47,11 +47,11 @@
}
}
private void openFile(String fileName) {
- if(fileName.equalsIgnoreCase("")) {
- System.out.printf("%s: no file name specified \n", this.getClass().getSimpleName());
- System.exit(1);
- }
- try {
+ if(fileName.equalsIgnoreCase("")) {
+ System.out.printf("%s: no file name specified \n", this.getClass().getSimpleName());
+ System.exit(1);
+ }
+ try {
_fWriter = new FileWriter(fileName);
_pWriter = new PrintWriter(_fWriter);
} catch (IOException ex) {
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLStripClusterData.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLStripClusterData.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLStripClusterData.java Wed Mar 9 11:43:24 2016
@@ -13,55 +13,55 @@
* @version $Id:
*/
public class GBLStripClusterData implements GenericObject {
-
- /*
- *
- * Interface enumerator to access the correct data
- *
- */
- public static class GBLINT {
- public static final int ID = 0;
- public static final int BANK_INT_SIZE = 1;
- }
- public static class GBLDOUBLE {
- public static final int PATH3D = 0;
- public static final int PATH = 1;
- public static final int UX = 2;
- public static final int UY = 3;
- public static final int UZ = 4;
- public static final int VX = 5;
- public static final int VY = 6;
- public static final int VZ = 7;
- public static final int WX = 8;
- public static final int WY = 9;
- public static final int WZ = 10;
- public static final int TDIRX = 11;
- public static final int TDIRY = 12;
- public static final int TDIRZ = 13;
- public static final int TPHI = 14;
- public static final int UMEAS = 15;
- public static final int TPOSU = 16 ;
- public static final int TPOSV = 17;
- public static final int TPOSW = 18;
- public static final int UMEASERR = 19;
- public static final int MSANGLE = 20;
- public static final int TLAMBDA = 21;
-
-
- public static final int BANK_DOUBLE_SIZE = 22;
-
- }
- // array holding the integer data
- private int bank_int[] = new int[GBLINT.BANK_INT_SIZE];
- // array holding the double data
- private double bank_double[] = new double[GBLDOUBLE.BANK_DOUBLE_SIZE];
-
- /**
- * Default constructor
- */
- public GBLStripClusterData(int id) {
- setId(id);
- }
+
+ /*
+ *
+ * Interface enumerator to access the correct data
+ *
+ */
+ public static class GBLINT {
+ public static final int ID = 0;
+ public static final int BANK_INT_SIZE = 1;
+ }
+ public static class GBLDOUBLE {
+ public static final int PATH3D = 0;
+ public static final int PATH = 1;
+ public static final int UX = 2;
+ public static final int UY = 3;
+ public static final int UZ = 4;
+ public static final int VX = 5;
+ public static final int VY = 6;
+ public static final int VZ = 7;
+ public static final int WX = 8;
+ public static final int WY = 9;
+ public static final int WZ = 10;
+ public static final int TDIRX = 11;
+ public static final int TDIRY = 12;
+ public static final int TDIRZ = 13;
+ public static final int TPHI = 14;
+ public static final int UMEAS = 15;
+ public static final int TPOSU = 16 ;
+ public static final int TPOSV = 17;
+ public static final int TPOSW = 18;
+ public static final int UMEASERR = 19;
+ public static final int MSANGLE = 20;
+ public static final int TLAMBDA = 21;
+
+
+ public static final int BANK_DOUBLE_SIZE = 22;
+
+ }
+ // array holding the integer data
+ private int bank_int[] = new int[GBLINT.BANK_INT_SIZE];
+ // array holding the double data
+ private double bank_double[] = new double[GBLDOUBLE.BANK_DOUBLE_SIZE];
+
+ /**
+ * Default constructor
+ */
+ public GBLStripClusterData(int id) {
+ setId(id);
+ }
/*
* Constructor from GenericObject
@@ -79,239 +79,239 @@
}
}
-
- /**
- * @param set track id to val
- */
- public void setId(int val) {
- bank_int[GBLINT.ID] = val;
- }
-
- /**
- * @return track id for this object
- */
- public int getId() {
- return this.getIntVal(GBLINT.ID);
- }
-
- /**
- * Set path length to this strip cluster
- * @param val
- */
- public void setPath(double val) {
- bank_double[GBLDOUBLE.PATH] = val;
- }
-
- /**
- * Get path length to this strip cluster
- */
- public double getPath() {
- return getDoubleVal(GBLDOUBLE.PATH);
- }
-
- /**
- * Set path length to this strip cluster
- * @param val
- */
- public void setPath3D(double val) {
- bank_double[GBLDOUBLE.PATH3D] = val;
- }
-
- /**
- * Get path length to this strip cluster
- */
- public double getPath3D() {
- return getDoubleVal(GBLDOUBLE.PATH3D);
- }
-
-
- /**
- * Set and get u vector for this strip sensor
- */
- public void setU(Hep3Vector u) {
- bank_double[GBLDOUBLE.UX] = u.x();
- bank_double[GBLDOUBLE.UY] = u.y();
- bank_double[GBLDOUBLE.UZ] = u.z();
- }
- public Hep3Vector getU() {
- return new BasicHep3Vector(getUx(),getUy(),getUz());
- }
- public double getUx() {
- return getDoubleVal(GBLDOUBLE.UX);
- }
- public double getUy() {
- return getDoubleVal(GBLDOUBLE.UY);
- }
- public double getUz() {
- return getDoubleVal(GBLDOUBLE.UZ);
- }
-
- /**
- * Set and get v vector for this strip sensor
- */
-
- public void setV(Hep3Vector v) {
- bank_double[GBLDOUBLE.VX] = v.x();
- bank_double[GBLDOUBLE.VY] = v.y();
- bank_double[GBLDOUBLE.VZ] = v.z();
- }
- public Hep3Vector getV() {
- return new BasicHep3Vector(getVx(),getVy(),getVz());
- }
- public double getVx() {
- return getDoubleVal(GBLDOUBLE.VX);
- }
- public double getVy() {
- return getDoubleVal(GBLDOUBLE.VY);
- }
- public double getVz() {
- return getDoubleVal(GBLDOUBLE.VZ);
- }
-
- /**
- * Set and get w vector for this strip sensor
- */
-
- public void setW(Hep3Vector v) {
- bank_double[GBLDOUBLE.WX] = v.x();
- bank_double[GBLDOUBLE.WY] = v.y();
- bank_double[GBLDOUBLE.WZ] = v.z();
- }
- public Hep3Vector getW() {
- return new BasicHep3Vector(getWx(),getWy(),getWz());
- }
- public double getWx() {
- return getDoubleVal(GBLDOUBLE.WX);
- }
- public double getWy() {
- return getDoubleVal(GBLDOUBLE.WY);
- }
- public double getWz() {
- return getDoubleVal(GBLDOUBLE.WZ);
- }
-
- /**
- * Set track direction at this cluster
- *
- * @param tDir
- */
- public void setTrackDir(Hep3Vector v) {
- bank_double[GBLDOUBLE.TDIRX] = v.x();
- bank_double[GBLDOUBLE.TDIRY] = v.y();
- bank_double[GBLDOUBLE.TDIRZ] = v.z();
- }
- public Hep3Vector getTrackDirection() {
- return new BasicHep3Vector(getTx(),getTy(),getTz());
- }
- public double getTx() {
- return getDoubleVal(GBLDOUBLE.TDIRX);
- }
- public double getTy() {
- return getDoubleVal(GBLDOUBLE.TDIRY);
- }
- public double getTz() {
- return getDoubleVal(GBLDOUBLE.TDIRZ);
- }
-
- public void setTrackPhi(double phi) {
- bank_double[GBLDOUBLE.TPHI] = phi;
- }
-
- public double getTrackPhi() {
- return getDoubleVal(GBLDOUBLE.TPHI);
- }
-
- public void setTrackLambda(double lambda) {
- bank_double[GBLDOUBLE.TLAMBDA] = lambda;
- }
-
- public double getTrackLambda() {
- return getDoubleVal(GBLDOUBLE.TLAMBDA);
- }
-
-
- public void setMeas(double umeas) {
- bank_double[GBLDOUBLE.UMEAS] = umeas;
- }
-
- public double getMeas() {
- return getDoubleVal(GBLDOUBLE.UMEAS);
- }
-
- public void setMeasErr(double x) {
- bank_double[GBLDOUBLE.UMEASERR] = x;
- }
-
- public double getMeasErr() {
- return getDoubleVal(GBLDOUBLE.UMEASERR);
- }
-
-
- /**
- * Set track position in local frame
- * @param trkpos_meas
- */
- public void setTrackPos(Hep3Vector trkpos_meas) {
- bank_double[GBLDOUBLE.TPOSU] = trkpos_meas.x();
- bank_double[GBLDOUBLE.TPOSV] = trkpos_meas.y();
- bank_double[GBLDOUBLE.TPOSW] = trkpos_meas.z();
- }
-
- public Hep3Vector getTrackPos() {
- return new BasicHep3Vector(getTrackPosU(),getTrackPosV(),getTrackPosW());
- }
-
- public double getTrackPosU() {
- return getDoubleVal(GBLDOUBLE.TPOSU);
- }
-
- public double getTrackPosV() {
- return getDoubleVal(GBLDOUBLE.TPOSV);
- }
-
- public double getTrackPosW() {
- return getDoubleVal(GBLDOUBLE.TPOSW);
- }
-
- public void setScatterAngle(double scatAngle) {
- bank_double[GBLDOUBLE.MSANGLE] = scatAngle;
- }
-
- public double getScatterAngle() {
- return getDoubleVal(GBLDOUBLE.MSANGLE);
- }
-
- /*
- * The functions below are all overide from
- * @see org.lcsim.event.GenericObject#getNInt()
- */
-
- public int getNInt() {
- return GBLINT.BANK_INT_SIZE;
- }
-
- public int getNFloat() {
- return 0;
- }
-
- public int getNDouble() {
- return GBLDOUBLE.BANK_DOUBLE_SIZE;
- }
-
- public int getIntVal(int index) {
- return bank_int[index];
- }
-
- public float getFloatVal(int index) {
- return 0;
- }
-
- public double getDoubleVal(int index) {
- return bank_double[index];
- }
-
- public boolean isFixedSize() {
- return false;
- }
+
+ /**
+ * @param set track id to val
+ */
+ public void setId(int val) {
+ bank_int[GBLINT.ID] = val;
+ }
+
+ /**
+ * @return track id for this object
+ */
+ public int getId() {
+ return this.getIntVal(GBLINT.ID);
+ }
+
+ /**
+ * Set path length to this strip cluster
+ * @param val
+ */
+ public void setPath(double val) {
+ bank_double[GBLDOUBLE.PATH] = val;
+ }
+
+ /**
+ * Get path length to this strip cluster
+ */
+ public double getPath() {
+ return getDoubleVal(GBLDOUBLE.PATH);
+ }
+
+ /**
+ * Set path length to this strip cluster
+ * @param val
+ */
+ public void setPath3D(double val) {
+ bank_double[GBLDOUBLE.PATH3D] = val;
+ }
+
+ /**
+ * Get path length to this strip cluster
+ */
+ public double getPath3D() {
+ return getDoubleVal(GBLDOUBLE.PATH3D);
+ }
+
+
+ /**
+ * Set and get u vector for this strip sensor
+ */
+ public void setU(Hep3Vector u) {
+ bank_double[GBLDOUBLE.UX] = u.x();
+ bank_double[GBLDOUBLE.UY] = u.y();
+ bank_double[GBLDOUBLE.UZ] = u.z();
+ }
+ public Hep3Vector getU() {
+ return new BasicHep3Vector(getUx(),getUy(),getUz());
+ }
+ public double getUx() {
+ return getDoubleVal(GBLDOUBLE.UX);
+ }
+ public double getUy() {
+ return getDoubleVal(GBLDOUBLE.UY);
+ }
+ public double getUz() {
+ return getDoubleVal(GBLDOUBLE.UZ);
+ }
+
+ /**
+ * Set and get v vector for this strip sensor
+ */
+
+ public void setV(Hep3Vector v) {
+ bank_double[GBLDOUBLE.VX] = v.x();
+ bank_double[GBLDOUBLE.VY] = v.y();
+ bank_double[GBLDOUBLE.VZ] = v.z();
+ }
+ public Hep3Vector getV() {
+ return new BasicHep3Vector(getVx(),getVy(),getVz());
+ }
+ public double getVx() {
+ return getDoubleVal(GBLDOUBLE.VX);
+ }
+ public double getVy() {
+ return getDoubleVal(GBLDOUBLE.VY);
+ }
+ public double getVz() {
+ return getDoubleVal(GBLDOUBLE.VZ);
+ }
+
+ /**
+ * Set and get w vector for this strip sensor
+ */
+
+ public void setW(Hep3Vector v) {
+ bank_double[GBLDOUBLE.WX] = v.x();
+ bank_double[GBLDOUBLE.WY] = v.y();
+ bank_double[GBLDOUBLE.WZ] = v.z();
+ }
+ public Hep3Vector getW() {
+ return new BasicHep3Vector(getWx(),getWy(),getWz());
+ }
+ public double getWx() {
+ return getDoubleVal(GBLDOUBLE.WX);
+ }
+ public double getWy() {
+ return getDoubleVal(GBLDOUBLE.WY);
+ }
+ public double getWz() {
+ return getDoubleVal(GBLDOUBLE.WZ);
+ }
+
+ /**
+ * Set track direction at this cluster
+ *
+ * @param tDir
+ */
+ public void setTrackDir(Hep3Vector v) {
+ bank_double[GBLDOUBLE.TDIRX] = v.x();
+ bank_double[GBLDOUBLE.TDIRY] = v.y();
+ bank_double[GBLDOUBLE.TDIRZ] = v.z();
+ }
+ public Hep3Vector getTrackDirection() {
+ return new BasicHep3Vector(getTx(),getTy(),getTz());
+ }
+ public double getTx() {
+ return getDoubleVal(GBLDOUBLE.TDIRX);
+ }
+ public double getTy() {
+ return getDoubleVal(GBLDOUBLE.TDIRY);
+ }
+ public double getTz() {
+ return getDoubleVal(GBLDOUBLE.TDIRZ);
+ }
+
+ public void setTrackPhi(double phi) {
+ bank_double[GBLDOUBLE.TPHI] = phi;
+ }
+
+ public double getTrackPhi() {
+ return getDoubleVal(GBLDOUBLE.TPHI);
+ }
+
+ public void setTrackLambda(double lambda) {
+ bank_double[GBLDOUBLE.TLAMBDA] = lambda;
+ }
+
+ public double getTrackLambda() {
+ return getDoubleVal(GBLDOUBLE.TLAMBDA);
+ }
+
+
+ public void setMeas(double umeas) {
+ bank_double[GBLDOUBLE.UMEAS] = umeas;
+ }
+
+ public double getMeas() {
+ return getDoubleVal(GBLDOUBLE.UMEAS);
+ }
+
+ public void setMeasErr(double x) {
+ bank_double[GBLDOUBLE.UMEASERR] = x;
+ }
+
+ public double getMeasErr() {
+ return getDoubleVal(GBLDOUBLE.UMEASERR);
+ }
+
+
+ /**
+ * Set track position in local frame
+ * @param trkpos_meas
+ */
+ public void setTrackPos(Hep3Vector trkpos_meas) {
+ bank_double[GBLDOUBLE.TPOSU] = trkpos_meas.x();
+ bank_double[GBLDOUBLE.TPOSV] = trkpos_meas.y();
+ bank_double[GBLDOUBLE.TPOSW] = trkpos_meas.z();
+ }
+
+ public Hep3Vector getTrackPos() {
+ return new BasicHep3Vector(getTrackPosU(),getTrackPosV(),getTrackPosW());
+ }
+
+ public double getTrackPosU() {
+ return getDoubleVal(GBLDOUBLE.TPOSU);
+ }
+
+ public double getTrackPosV() {
+ return getDoubleVal(GBLDOUBLE.TPOSV);
+ }
+
+ public double getTrackPosW() {
+ return getDoubleVal(GBLDOUBLE.TPOSW);
+ }
+
+ public void setScatterAngle(double scatAngle) {
+ bank_double[GBLDOUBLE.MSANGLE] = scatAngle;
+ }
+
+ public double getScatterAngle() {
+ return getDoubleVal(GBLDOUBLE.MSANGLE);
+ }
+
+ /*
+ * The functions below are all overide from
+ * @see org.lcsim.event.GenericObject#getNInt()
+ */
+
+ public int getNInt() {
+ return GBLINT.BANK_INT_SIZE;
+ }
+
+ public int getNFloat() {
+ return 0;
+ }
+
+ public int getNDouble() {
+ return GBLDOUBLE.BANK_DOUBLE_SIZE;
+ }
+
+ public int getIntVal(int index) {
+ return bank_int[index];
+ }
+
+ public float getFloatVal(int index) {
+ return 0;
+ }
+
+ public double getDoubleVal(int index) {
+ return bank_double[index];
+ }
+
+ public boolean isFixedSize() {
+ return false;
+ }
}
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblData.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblData.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblData.java Wed Mar 9 11:43:24 2016
@@ -69,8 +69,8 @@
nExt = extDer.getColumnDimension();
}
int nParMax = 5 + nLocal + nExt;
-// theParameters.reserve(nParMax); // have to be sorted
-// theDerivatives.reserve(nParMax);
+// theParameters.reserve(nParMax); // have to be sorted
+// theDerivatives.reserve(nParMax);
if (derLocal != null) {
for (int i = 0; i < derLocal.getColumnDimension(); ++i) // local derivatives
@@ -123,8 +123,8 @@
nExtDer = extDer.getColumnDimension();
}
int nParMax = 7 + nExtDer;
-// theParameters.reserve(nParMax); // have to be sorted
-// theDerivatives.reserve(nParMax);
+// theParameters.reserve(nParMax); // have to be sorted
+// theDerivatives.reserve(nParMax);
if (extDer != null) {
for (int i = 0; i < extDer.getColumnDimension(); ++i) // external derivatives
@@ -151,14 +151,14 @@
// * \param [in] derivatives Derivatives (vector)
// */
//void addDerivatives(const std::vector<unsigned int> &index,
-// const std::vector<double> &derivatives) {
-// for (unsigned int i = 0; i < derivatives.size(); ++i) // any derivatives
-// {
-// if (derivatives[i]) {
-// theParameters.push_back(index[i]);
-// theDerivatives.push_back(derivatives[i]);
-// }
-// }
+// const std::vector<double> &derivatives) {
+// for (unsigned int i = 0; i < derivatives.size(); ++i) // any derivatives
+// {
+// if (derivatives[i]) {
+// theParameters.push_back(index[i]);
+// theDerivatives.push_back(derivatives[i]);
+// }
+// }
//}
/// Calculate prediction for data from fit (by GblTrajectory::fit).
void setPrediction(VVector aVector)
@@ -176,27 +176,27 @@
// */
//double setDownWeighting(unsigned int aMethod) {
//
-// double aWeight = 1.;
-// double scaledResidual = fabs(theValue - thePrediction) * sqrt(thePrecision);
-// if (aMethod == 1) // Tukey
-// {
-// if (scaledResidual < 4.6851) {
-// aWeight = (1.0 - 0.045558 * scaledResidual * scaledResidual);
-// aWeight *= aWeight;
-// } else {
-// aWeight = 0.;
-// }
-// } else if (aMethod == 2) //Huber
-// {
-// if (scaledResidual >= 1.345) {
-// aWeight = 1.345 / scaledResidual;
-// }
-// } else if (aMethod == 3) //Cauchy
-// {
-// aWeight = 1.0 / (1.0 + (scaledResidual * scaledResidual / 5.6877));
-// }
-// theDownWeight = aWeight;
-// return aWeight;
+// double aWeight = 1.;
+// double scaledResidual = fabs(theValue - thePrediction) * sqrt(thePrecision);
+// if (aMethod == 1) // Tukey
+// {
+// if (scaledResidual < 4.6851) {
+// aWeight = (1.0 - 0.045558 * scaledResidual * scaledResidual);
+// aWeight *= aWeight;
+// } else {
+// aWeight = 0.;
+// }
+// } else if (aMethod == 2) //Huber
+// {
+// if (scaledResidual >= 1.345) {
+// aWeight = 1.345 / scaledResidual;
+// }
+// } else if (aMethod == 3) //Cauchy
+// {
+// aWeight = 1.0 / (1.0 + (scaledResidual * scaledResidual / 5.6877));
+// }
+// theDownWeight = aWeight;
+// return aWeight;
//}
//
/// Calculate Chi2 contribution.
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblPoint.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblPoint.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblPoint.java Wed Mar 9 11:43:24 2016
@@ -486,7 +486,7 @@
{
int ifail = 0;
// to optimize: need only two last rows of inverse
-// prevJacobian = aJac.InverseFast(ifail);
+// prevJacobian = aJac.InverseFast(ifail);
// block matrix algebra
Matrix CA = aJac.sub(2, 3, 3, 0).times(aJac.sub(3, 0, 0).inverse()); // C*A^-1
Matrix DCAB = aJac.sub(2, 3, 3).minus(CA.times(aJac.sub(3, 2, 0, 3))); // D - C*A^-1 *B
@@ -531,14 +531,14 @@
}
matW.placeAt(matWt.inverse(), 0, 0);
-// if (!matW.InvertFast()) {
-// std::cout << " getDerivatives failed to invert matrix: "
-// << matW << "\n";
-// std::cout
-// << " Possible reason for singular matrix: multiple GblPoints at same arc-length"
-// << "\n";
-// throw std::overflow_error("Singular matrix inversion exception");
-// }
+// if (!matW.InvertFast()) {
+// std::cout << " getDerivatives failed to invert matrix: "
+// << matW << "\n";
+// std::cout
+// << " Possible reason for singular matrix: multiple GblPoints at same arc-length"
+// << "\n";
+// throw std::overflow_error("Singular matrix inversion exception");
+// }
matWJ.placeAt(matW.times(matJ), 0, 0);
vecWd.placeAt(matW.times(vecd), 0, 0);
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java Wed Mar 9 11:43:24 2016
@@ -268,7 +268,7 @@
List<GblPoint> list = thePoints.get(iTraj);
int size = list.size();
// first point is offset
- list.get(0).setOffset(numOffsets++); // intermediate scatterers are offsets
+ list.get(0).setOffset(numOffsets++); // intermediate scatterers are offsets
for (int i = 1; i < size - 1; ++i) {
GblPoint p = list.get(i);
if (p.hasScatterer()) {
@@ -434,7 +434,7 @@
aPoint.getDerivatives(0, prevW, prevWJ, prevWd); // W-, W- * J-, W- * d-
aPoint.getDerivatives(1, nextW, nextWJ, nextWd); // W-, W- * J-, W- * d-
Matrix sumWJ = prevWJ.plus(nextWJ);
-//? matN = sumWJ.inverse(ierr); // N = (W- * J- + W+ * J+)^-1
+//? matN = sumWJ.inverse(ierr); // N = (W- * J- + W+ * J+)^-1
// derivatives for u_int
Matrix prevNW = matN.times(prevW); // N * W-
Matrix nextNW = matN.times(nextW); // N * W+
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblUtils.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblUtils.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/GblUtils.java Wed Mar 9 11:43:24 2016
@@ -234,7 +234,7 @@
/*
Simple jacobian: quadratic in arc length difference.
using lambda phi as directions
-
+
@param ds: arc length difference
@type ds: float
@param cosl: cos(lambda)
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/HpsGblRefitter.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/HpsGblRefitter.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/HpsGblRefitter.java Wed Mar 9 11:43:24 2016
@@ -341,11 +341,11 @@
// measurement/residual in the measurement system
// only 1D measurement in u-direction, set strip measurement direction to zero
Vector meas = new Vector(2);
-// double uRes = strip->GetUmeas() - strip->GetTrackPos().x(); // how can this be correct?
+// double uRes = strip->GetUmeas() - strip->GetTrackPos().x(); // how can this be correct?
double uRes = strip.getMeas() - strip.getTrackPos().x();
meas.set(0, uRes);
meas.set(1, 0.);
-// //meas[0][0] += deltaU[iLayer] # misalignment
+// //meas[0][0] += deltaU[iLayer] # misalignment
Vector measErr = new Vector(2);
measErr.set(0, strip.getMeasErr());
measErr.set(1, 0.);
Modified: java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/TruthResiduals.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/TruthResiduals.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/recon/tracking/gbl/TruthResiduals.java Wed Mar 9 11:43:24 2016
@@ -73,14 +73,14 @@
Map<Integer, List<SimTrackerHit>> simHitsLayerMap = new HashMap<Integer, List<SimTrackerHit> >();
Map<MCParticle, List<SimTrackerHit> > mcPartSimHitsMap = new HashMap<MCParticle, List<SimTrackerHit > >();
for(SimTrackerHit sh : simTrackerHits) {
- Hep3Vector shpos = CoordinateTransformations.transformVectorToTracking(sh.getPositionVec());
- if(Math.abs(shpos.x()) < 50.0) {
- System.out.printf("%s: Weird hit at %s (%s) in layer %d for MC part %d org %s p %s\n",
+ Hep3Vector shpos = CoordinateTransformations.transformVectorToTracking(sh.getPositionVec());
+ if(Math.abs(shpos.x()) < 50.0) {
+ System.out.printf("%s: Weird hit at %s (%s) in layer %d for MC part %d org %s p %s\n",
this.getClass().getSimpleName(),sh.getPositionVec().toString(),shpos.toString(),sh.getIdentifierFieldValue("layer"),
sh.getMCParticle().getPDGID(),sh.getMCParticle().getOrigin().toString(),sh.getMCParticle().getMomentum().toString());
- System.exit(1);
- }
-
+ System.exit(1);
+ }
+
int layer = sh.getIdentifierFieldValue("layer");
if(!simHitsLayerMap.containsKey(layer)) {
simHitsLayerMap.put(layer, new ArrayList<SimTrackerHit>());
@@ -96,28 +96,28 @@
for(MCParticle mcp : mcPartSimHitsMap.keySet()) {
- this.h_mcp_org.fill(mcp.getOriginX(), mcp.getOriginY());
+ this.h_mcp_org.fill(mcp.getOriginX(), mcp.getOriginY());
}
// Find the particle responsible for the hit in each layer and compute the residual
for(int layer=1;layer<13;++layer) {
- //System.out.printf("layer %d: \n",layer);
+ //System.out.printf("layer %d: \n",layer);
List<SimTrackerHit> simHitsLayer = simHitsLayerMap.get(layer);
-
+
if(simHitsLayer != null ) {
-
- if(simHitsLayer.size()==2) continue;
-
+
+ if(simHitsLayer.size()==2) continue;
+
for(SimTrackerHit simHit : simHitsLayer) {
-
- // Find the MC particle
+
+ // Find the MC particle
MCParticle mcp = simHit.getMCParticle();
if(mcp.getMomentum().magnitude()<0.5) continue;
-
+
// Position in tracking coord
Hep3Vector simHitPosTracking = CoordinateTransformations.transformVectorToTracking(simHit.getPositionVec());
@@ -171,24 +171,24 @@
}
if(layer == 1 && res.y() > 0.1 && this.firstWeirdTrack) {
- double dx = 1.0;
- double xpos = mcp.getOriginZ();
- while(xpos< 100.) {
- xpos += dx;
- trkposExtraPolator = CoordinateTransformations.transformVectorToTracking(TrackUtils.extrapolateTrack(htfTruth,xpos));
- double ypos = trkposExtraPolator.y();
- trkpos_y_vs_x.fill(xpos,ypos);
- }
-
- int idummy = 0;
- while(idummy<2) {
- trkpos_y_vs_x.fill(simHitPosTracking.x(),simHitPosTracking.y());
- idummy++;
- //System.out.printf("weird simhit res pos %s \n", simHitPosTracking.toString());
- }
-
- this.firstWeirdTrack = false;
-
+ double dx = 1.0;
+ double xpos = mcp.getOriginZ();
+ while(xpos< 100.) {
+ xpos += dx;
+ trkposExtraPolator = CoordinateTransformations.transformVectorToTracking(TrackUtils.extrapolateTrack(htfTruth,xpos));
+ double ypos = trkposExtraPolator.y();
+ trkpos_y_vs_x.fill(xpos,ypos);
+ }
+
+ int idummy = 0;
+ while(idummy<2) {
+ trkpos_y_vs_x.fill(simHitPosTracking.x(),simHitPosTracking.y());
+ idummy++;
+ //System.out.printf("weird simhit res pos %s \n", simHitPosTracking.toString());
+ }
+
+ this.firstWeirdTrack = false;
+
}
@@ -200,12 +200,12 @@
public IHistogram getResidual(int layer,String coord) {
- if( !this.res_truthsimhit.containsKey(layer) )
- throw new RuntimeException("Error the layer number is not valid");
- if( coord!="x" || coord!="y")
- throw new RuntimeException("Error the coord is not valid");
- IHistogram1D h = this.res_truthsimhit.get(layer).get(coord=="x"?0:1);
- return h;
+ if( !this.res_truthsimhit.containsKey(layer) )
+ throw new RuntimeException("Error the layer number is not valid");
+ if( coord!="x" || coord!="y")
+ throw new RuntimeException("Error the coord is not valid");
+ IHistogram1D h = this.res_truthsimhit.get(layer).get(coord=="x"?0:1);
+ return h;
}
Modified: java/trunk/tracking/src/main/java/org/hps/svt/alignment/BuildCompact.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/svt/alignment/BuildCompact.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/svt/alignment/BuildCompact.java Wed Mar 9 11:43:24 2016
@@ -49,361 +49,361 @@
* Class building a new compact.xml detector based on MillepedeII input
* corrections.
*
- * @author Per Ola Hansson Adrian <[log in to unmask]>
- * @date January 15, 2014
+ * @author Per Ola Hansson Adrian <[log in to unmask]>
+ * @date January 15, 2014
*/
public class BuildCompact {
- private static int runNumber = -1; //1351;
- private static String detectorName = ""; //"HPS-TestRun-v7";
- private static ConditionsManager conditionsManager = null;
-
- private static Options createCmdLineOpts() {
- Options options = new Options();
- options.addOption(new Option("c",true,"The path to the compact xml file."));
- options.addOption(new Option("o",true,"The name of the new compact xml file."));
- options.addOption(new Option("d",true,"Detector name."));
- options.addOption(new Option("r",true,"Run number."));
-
- return options;
- }
-
- private static void printHelpAndExit(Options options) {
- HelpFormatter help = new HelpFormatter();
- help.printHelp(" ", options);
- System.exit(1);
- }
-
- //private static buildDetector()
-
-
-
-
-
-
- private static class MilleParameterSet {
- private IDetectorElement _det = null;
- List<MilleParameter> params = new ArrayList<MilleParameter>();
- public MilleParameterSet(IDetectorElement d) {
- setDetector(d);
- }
- public void setDetector(IDetectorElement d) {
- _det = d;
- }
- public IDetectorElement getDetector() {
- return _det;
- }
- public void add(MilleParameter par) {
- params.add(par);
- }
- public Hep3Vector getLocalTranslation() {
- Map<String,Double> m = new HashMap<String,Double>();
- for(MilleParameter p : params) {
- if (p.getType() == 1) {
- if (p.getDim() == 1) m.put("u", p.getValue());
- else if(p.getDim() == 2) m.put("v", p.getValue());
- else m.put("w", p.getValue());
- }
- }
- if(m.size() != 3) {
- System.out.println("bad trans!!");
- System.exit(1);
- }
- return new BasicHep3Vector(m.get("u"),m.get("v"),m.get("w"));
-
- }
- public Hep3Vector getLocalRotation() {
- Map<String,Double> m = new HashMap<String,Double>();
- for(MilleParameter p : params) {
- if (p.getType() == 2) {
- if (p.getDim() == 1) m.put("alpha",p.getValue());
- else if(p.getDim() == 2) m.put("beta", p.getValue());
- else m.put("gamma", p.getValue());
- }
- }
- if(m.size() != 3) {
- System.out.println("bad rot!!");
- System.exit(1);
- }
- return new BasicHep3Vector(m.get("alpha"),m.get("beta"),m.get("gamma"));
- }
- public Hep3Vector getGlobalTranslation() {
- ITransform3D localToGlobal = getLocalToGlobal();
- return localToGlobal.getRotation().rotated(getLocalTranslation());
- }
- public double getGlobalTranslation(int d) {
- return getGlobalTranslation().v()[d-1];
- }
- public Hep3Vector getGlobalRotation() {
- ITransform3D localToGlobal = getLocalToGlobal();
- return localToGlobal.getRotation().rotated(getLocalRotation());
- }
- public double getGlobalRotation(int d) {
- return getGlobalRotation().v()[d-1];
- }
- public ITransform3D getLocalToGlobal() {
- ITransform3D localToGlobal = ( (SiSensor) _det).getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal();
- return localToGlobal;
- }
-
- }
-
- public static void main(String[] args) {
-
- // Setup command line input
- Options options = createCmdLineOpts();
- if (args.length == 0) {
- printHelpAndExit(options);
- }
-
- CommandLineParser parser = new PosixParser();
- CommandLine cl = null;
- try {
- cl = parser.parse(options, args);
- } catch (ParseException e) {
- throw new RuntimeException("Problem parsing command line options.",e);
- }
-
- String compactFilename = null;
- if(cl.hasOption("c")) {
- compactFilename = cl.getOptionValue("c");
- } else {
- printHelpAndExit(options);
- }
-
- if(cl.hasOption("d")) {
- detectorName = cl.getOptionValue("d");
- } else {
- printHelpAndExit(options);
- }
-
- if(cl.hasOption("r")) {
- runNumber = Integer.parseInt(cl.getOptionValue("r"));
- } else {
- printHelpAndExit(options);
- }
-
- String compactFilenameNew = "compact_new.xml";
- if(cl.hasOption("o")) {
- compactFilenameNew = cl.getOptionValue("o");
- }
-
-
-
- File compactFile = new File(compactFilename);
-
- // read XML
- SAXBuilder builder = new SAXBuilder();
- Document compact_document = null;
- try {
- compact_document = (Document) builder.build(compactFile);
- } catch (JDOMException | IOException e1) {
- throw new RuntimeException("problem with JDOM ", e1);
- }
-
- // read detector geometry
- FileInputStream inCompact;
- try {
- inCompact = new FileInputStream(compactFile);
- } catch (FileNotFoundException e) {
- throw new RuntimeException("cannot open compact file",e);
- }
-
- GeometryReader reader = new GeometryReader();
- Detector det;
- try {
- det = reader.read(inCompact);
- } catch (IOException | JDOMException | ElementCreationException e) {
- throw new RuntimeException("problem reading compact file",e);
- }
-
-
- // set conditions in order to be able to determine which sensors are where in the geometry
- setConditions(detectorName,runNumber);
-
- // Loop over all millepede input files and match parameters with detectors
-
- List<MilleParameterSet> list_det = new ArrayList<MilleParameterSet>();
-
- FileInputStream inMille = null;
- BufferedReader brMille = null;
- try {
- for(String milleFilename : cl.getArgs()) {
- inMille = new FileInputStream(milleFilename);
- brMille = new BufferedReader(new InputStreamReader(inMille));
- String line;
- while((line = brMille.readLine()) != null) {
- //System.out.printf("%s\n",line);
- if(!line.contains("Parameter") && !line.contains("!")) {
-
- MilleParameter par = new MilleParameter(line);
- //System.out.println(par.getXMLName() + " " + par.getValue());
-
- SiSensor detEle = getTrackerDetElement( det, par);
- if(detEle == null) {
- System.out.println("Couldn't find detector for param " + par.getId());
- System.exit(1);
- }
- System.out.println("Found detector " + detEle.getName());
- if(detEle.getClass().isInstance(SiSensor.class)) {
- System.out.println("yeah");
- }
-
- // do we have it already?
- MilleParameterSet useSet = null;
- for(MilleParameterSet set : list_det) {
- if(set.getDetector() == detEle) {
- useSet = set;
- }
- }
-
- if (useSet == null) {
- useSet = new MilleParameterSet(detEle);
- list_det.add(useSet);
- }
-
- //add the parameter
- useSet.add(par);
-
-
- }
- }
- brMille.close();
- }
- }
- catch (IOException e) {
- throw new RuntimeException("problem reading mille file",e);
- }
-
- for(MilleParameterSet set : list_det) {
- System.out.println("Detector " + set.getDetector().getName());
- List<MilleParameter> pars = set.params;
- for(MilleParameter p : pars) {
- System.out.println(p.getXMLName() + " " + p.getValue());
- Element node = findXMLNode(compact_document,p.getXMLName());
- double value = 0.0;
- if(p.getType() == 1){
- value = set.getGlobalTranslation(p.getDim());
- } else if(p.getType() == 2){
- value = set.getGlobalRotation(p.getDim());
- } else {
- System.out.println("This type is illdefnied " + p.getType());
- System.exit(1);
- }
- node.setAttribute("value", String.format("%.6f",value));
- }
- Hep3Vector u = getMeasuredCoordinate( (SiSensor )set.getDetector());
- System.out.println("u " + u.toString());
- System.out.println("t (local) " + set.getLocalTranslation().toString());
- System.out.println("t (global) " + set.getGlobalTranslation().toString());
- System.out.println("r (local) " + set.getLocalRotation().toString());
- System.out.println("r (global) " + set.getGlobalRotation().toString());
-
-
- }
-
- // Save new XML file
-
- XMLOutputter xmlOutput = new XMLOutputter();
- // display nice
- //xmlOutput.setFormat(Format.getPrettyFormat());
- try {
- xmlOutput.output(compact_document, new FileWriter(compactFilenameNew));
- } catch (IOException e) {
- throw new RuntimeException("problem with xml output",e);
- }
-
-
-
-
-
- }
-
- private static Element findXMLNode(Document document, String name) {
- Element rootNode = document.getRootElement();
- List list = rootNode.getChildren("define");
- for(int i = 0; i < list.size(); ++i ) {
- Element node = (Element) list.get(i);
- List llist = node.getChildren("constant");
- //System.out.println("length of list " + llist.size());
- for(int ii = 0; ii < llist.size(); ++ii ) {
- Element nnode = (Element) llist.get(ii);
- //System.out.println("node name " + nnode.getAttributeValue("name") + " " + nnode.getAttributeValue("value") );
- //if(nnode.getAttributeValue("name").contains(name)) {
- if(nnode.getAttributeValue("name").compareTo(name) ==0 ) {
- return nnode;
- }
- }
- }
-
- return null;
- }
-
- private static void setConditions(String detectorName, int run) {
-
- try {
- if(conditionsManager == null) {
- conditionsManager = ConditionsManager.defaultInstance();
- }
- conditionsManager.setDetector(detectorName, run);
-
- } catch (ConditionsNotFoundException e1) {
- throw new RuntimeException("problem setting conditions",e1);
- }
-
- }
-
- private static SiSensor getTrackerDetElement(Detector det, MilleParameter par) {
- List<SiSensor> sensors = det.getSubdetector("Tracker").getDetectorElement().findDescendants(SiSensor.class);
+ private static int runNumber = -1; //1351;
+ private static String detectorName = ""; //"HPS-TestRun-v7";
+ private static ConditionsManager conditionsManager = null;
+
+ private static Options createCmdLineOpts() {
+ Options options = new Options();
+ options.addOption(new Option("c",true,"The path to the compact xml file."));
+ options.addOption(new Option("o",true,"The name of the new compact xml file."));
+ options.addOption(new Option("d",true,"Detector name."));
+ options.addOption(new Option("r",true,"Run number."));
+
+ return options;
+ }
+
+ private static void printHelpAndExit(Options options) {
+ HelpFormatter help = new HelpFormatter();
+ help.printHelp(" ", options);
+ System.exit(1);
+ }
+
+ //private static buildDetector()
+
+
+
+
+
+
+ private static class MilleParameterSet {
+ private IDetectorElement _det = null;
+ List<MilleParameter> params = new ArrayList<MilleParameter>();
+ public MilleParameterSet(IDetectorElement d) {
+ setDetector(d);
+ }
+ public void setDetector(IDetectorElement d) {
+ _det = d;
+ }
+ public IDetectorElement getDetector() {
+ return _det;
+ }
+ public void add(MilleParameter par) {
+ params.add(par);
+ }
+ public Hep3Vector getLocalTranslation() {
+ Map<String,Double> m = new HashMap<String,Double>();
+ for(MilleParameter p : params) {
+ if (p.getType() == 1) {
+ if (p.getDim() == 1) m.put("u", p.getValue());
+ else if(p.getDim() == 2) m.put("v", p.getValue());
+ else m.put("w", p.getValue());
+ }
+ }
+ if(m.size() != 3) {
+ System.out.println("bad trans!!");
+ System.exit(1);
+ }
+ return new BasicHep3Vector(m.get("u"),m.get("v"),m.get("w"));
+
+ }
+ public Hep3Vector getLocalRotation() {
+ Map<String,Double> m = new HashMap<String,Double>();
+ for(MilleParameter p : params) {
+ if (p.getType() == 2) {
+ if (p.getDim() == 1) m.put("alpha",p.getValue());
+ else if(p.getDim() == 2) m.put("beta", p.getValue());
+ else m.put("gamma", p.getValue());
+ }
+ }
+ if(m.size() != 3) {
+ System.out.println("bad rot!!");
+ System.exit(1);
+ }
+ return new BasicHep3Vector(m.get("alpha"),m.get("beta"),m.get("gamma"));
+ }
+ public Hep3Vector getGlobalTranslation() {
+ ITransform3D localToGlobal = getLocalToGlobal();
+ return localToGlobal.getRotation().rotated(getLocalTranslation());
+ }
+ public double getGlobalTranslation(int d) {
+ return getGlobalTranslation().v()[d-1];
+ }
+ public Hep3Vector getGlobalRotation() {
+ ITransform3D localToGlobal = getLocalToGlobal();
+ return localToGlobal.getRotation().rotated(getLocalRotation());
+ }
+ public double getGlobalRotation(int d) {
+ return getGlobalRotation().v()[d-1];
+ }
+ public ITransform3D getLocalToGlobal() {
+ ITransform3D localToGlobal = ( (SiSensor) _det).getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal();
+ return localToGlobal;
+ }
+
+ }
+
+ public static void main(String[] args) {
+
+ // Setup command line input
+ Options options = createCmdLineOpts();
+ if (args.length == 0) {
+ printHelpAndExit(options);
+ }
+
+ CommandLineParser parser = new PosixParser();
+ CommandLine cl = null;
+ try {
+ cl = parser.parse(options, args);
+ } catch (ParseException e) {
+ throw new RuntimeException("Problem parsing command line options.",e);
+ }
+
+ String compactFilename = null;
+ if(cl.hasOption("c")) {
+ compactFilename = cl.getOptionValue("c");
+ } else {
+ printHelpAndExit(options);
+ }
+
+ if(cl.hasOption("d")) {
+ detectorName = cl.getOptionValue("d");
+ } else {
+ printHelpAndExit(options);
+ }
+
+ if(cl.hasOption("r")) {
+ runNumber = Integer.parseInt(cl.getOptionValue("r"));
+ } else {
+ printHelpAndExit(options);
+ }
+
+ String compactFilenameNew = "compact_new.xml";
+ if(cl.hasOption("o")) {
+ compactFilenameNew = cl.getOptionValue("o");
+ }
+
+
+
+ File compactFile = new File(compactFilename);
+
+ // read XML
+ SAXBuilder builder = new SAXBuilder();
+ Document compact_document = null;
+ try {
+ compact_document = (Document) builder.build(compactFile);
+ } catch (JDOMException | IOException e1) {
+ throw new RuntimeException("problem with JDOM ", e1);
+ }
+
+ // read detector geometry
+ FileInputStream inCompact;
+ try {
+ inCompact = new FileInputStream(compactFile);
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException("cannot open compact file",e);
+ }
+
+ GeometryReader reader = new GeometryReader();
+ Detector det;
+ try {
+ det = reader.read(inCompact);
+ } catch (IOException | JDOMException | ElementCreationException e) {
+ throw new RuntimeException("problem reading compact file",e);
+ }
+
+
+ // set conditions in order to be able to determine which sensors are where in the geometry
+ setConditions(detectorName,runNumber);
+
+ // Loop over all millepede input files and match parameters with detectors
+
+ List<MilleParameterSet> list_det = new ArrayList<MilleParameterSet>();
+
+ FileInputStream inMille = null;
+ BufferedReader brMille = null;
+ try {
+ for(String milleFilename : cl.getArgs()) {
+ inMille = new FileInputStream(milleFilename);
+ brMille = new BufferedReader(new InputStreamReader(inMille));
+ String line;
+ while((line = brMille.readLine()) != null) {
+ //System.out.printf("%s\n",line);
+ if(!line.contains("Parameter") && !line.contains("!")) {
+
+ MilleParameter par = new MilleParameter(line);
+ //System.out.println(par.getXMLName() + " " + par.getValue());
+
+ SiSensor detEle = getTrackerDetElement( det, par);
+ if(detEle == null) {
+ System.out.println("Couldn't find detector for param " + par.getId());
+ System.exit(1);
+ }
+ System.out.println("Found detector " + detEle.getName());
+ if(detEle.getClass().isInstance(SiSensor.class)) {
+ System.out.println("yeah");
+ }
+
+ // do we have it already?
+ MilleParameterSet useSet = null;
+ for(MilleParameterSet set : list_det) {
+ if(set.getDetector() == detEle) {
+ useSet = set;
+ }
+ }
+
+ if (useSet == null) {
+ useSet = new MilleParameterSet(detEle);
+ list_det.add(useSet);
+ }
+
+ //add the parameter
+ useSet.add(par);
+
+
+ }
+ }
+ brMille.close();
+ }
+ }
+ catch (IOException e) {
+ throw new RuntimeException("problem reading mille file",e);
+ }
+
+ for(MilleParameterSet set : list_det) {
+ System.out.println("Detector " + set.getDetector().getName());
+ List<MilleParameter> pars = set.params;
+ for(MilleParameter p : pars) {
+ System.out.println(p.getXMLName() + " " + p.getValue());
+ Element node = findXMLNode(compact_document,p.getXMLName());
+ double value = 0.0;
+ if(p.getType() == 1){
+ value = set.getGlobalTranslation(p.getDim());
+ } else if(p.getType() == 2){
+ value = set.getGlobalRotation(p.getDim());
+ } else {
+ System.out.println("This type is illdefnied " + p.getType());
+ System.exit(1);
+ }
+ node.setAttribute("value", String.format("%.6f",value));
+ }
+ Hep3Vector u = getMeasuredCoordinate( (SiSensor )set.getDetector());
+ System.out.println("u " + u.toString());
+ System.out.println("t (local) " + set.getLocalTranslation().toString());
+ System.out.println("t (global) " + set.getGlobalTranslation().toString());
+ System.out.println("r (local) " + set.getLocalRotation().toString());
+ System.out.println("r (global) " + set.getGlobalRotation().toString());
+
+
+ }
+
+ // Save new XML file
+
+ XMLOutputter xmlOutput = new XMLOutputter();
+ // display nice
+ //xmlOutput.setFormat(Format.getPrettyFormat());
+ try {
+ xmlOutput.output(compact_document, new FileWriter(compactFilenameNew));
+ } catch (IOException e) {
+ throw new RuntimeException("problem with xml output",e);
+ }
+
+
+
+
+
+ }
+
+ private static Element findXMLNode(Document document, String name) {
+ Element rootNode = document.getRootElement();
+ List list = rootNode.getChildren("define");
+ for(int i = 0; i < list.size(); ++i ) {
+ Element node = (Element) list.get(i);
+ List llist = node.getChildren("constant");
+ //System.out.println("length of list " + llist.size());
+ for(int ii = 0; ii < llist.size(); ++ii ) {
+ Element nnode = (Element) llist.get(ii);
+ //System.out.println("node name " + nnode.getAttributeValue("name") + " " + nnode.getAttributeValue("value") );
+ //if(nnode.getAttributeValue("name").contains(name)) {
+ if(nnode.getAttributeValue("name").compareTo(name) ==0 ) {
+ return nnode;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private static void setConditions(String detectorName, int run) {
+
+ try {
+ if(conditionsManager == null) {
+ conditionsManager = ConditionsManager.defaultInstance();
+ }
+ conditionsManager.setDetector(detectorName, run);
+
+ } catch (ConditionsNotFoundException e1) {
+ throw new RuntimeException("problem setting conditions",e1);
+ }
+
+ }
+
+ private static SiSensor getTrackerDetElement(Detector det, MilleParameter par) {
+ List<SiSensor> sensors = det.getSubdetector("Tracker").getDetectorElement().findDescendants(SiSensor.class);
//List<SiTrackerModule> modules = det.getDetectorElement().findDescendants(SiTrackerModule.class);
//System.out.printf("%d sensors\n",sensors.size());
for (SiSensor module: sensors) {
// Create DAQ Maps
- boolean isTop = ((HpsSiSensor) module).isTopLayer();
- int h = par.getHalf();
- if ((isTop && h == 1) || (!isTop && h == 2)) {
- int layer = ((HpsSiSensor) module).getLayerNumber();
- if (layer == par.getSensor()) {
- //found match
- return module;
- }
- }
+ boolean isTop = ((HpsSiSensor) module).isTopLayer();
+ int h = par.getHalf();
+ if ((isTop && h == 1) || (!isTop && h == 2)) {
+ int layer = ((HpsSiSensor) module).getLayerNumber();
+ if (layer == par.getSensor()) {
+ //found match
+ return module;
+ }
+ }
}
return null;
-
- }
-
-
-
- private static class DetectorList<K> extends ArrayList<DetAlignConstants> {
- //List<DetAlignConstants> _detectors = new ArrayList<DetAlignConstants>();
- public DetectorList() {
- }
-
- public boolean contains(IDetectorElement detEle) {
- return this.get(detEle) == null ? false : true;
- }
-
- public DetAlignConstants get(IDetectorElement detEle) {
- for(DetAlignConstants d : this) {
- if (d == detEle) {
- return d;
- }
- }
- return null;
- }
- public void print() {
- System.out.println("==== " + this.size() + " detectors has alignment corrections ====");
- for(DetAlignConstants det : this) {
- det.print();
- }
- }
-
- }
-
-
-
- private static Hep3Vector getTrackingMeasuredCoordinate(SiSensor sensor)
+
+ }
+
+
+
+ private static class DetectorList<K> extends ArrayList<DetAlignConstants> {
+ //List<DetAlignConstants> _detectors = new ArrayList<DetAlignConstants>();
+ public DetectorList() {
+ }
+
+ public boolean contains(IDetectorElement detEle) {
+ return this.get(detEle) == null ? false : true;
+ }
+
+ public DetAlignConstants get(IDetectorElement detEle) {
+ for(DetAlignConstants d : this) {
+ if (d == detEle) {
+ return d;
+ }
+ }
+ return null;
+ }
+ public void print() {
+ System.out.println("==== " + this.size() + " detectors has alignment corrections ====");
+ for(DetAlignConstants det : this) {
+ det.print();
+ }
+ }
+
+ }
+
+
+
+ private static Hep3Vector getTrackingMeasuredCoordinate(SiSensor sensor)
{
// p-side unit vector
ITransform3D electrodes_to_global = sensor.getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal();
@@ -411,8 +411,8 @@
measuredCoordinate = VecOp.mult(VecOp.mult(CoordinateTransformations.getMatrix(),electrodes_to_global.getRotation().getRotationMatrix()), measuredCoordinate);
return measuredCoordinate;
}
-
- private static Hep3Vector getMeasuredCoordinate(SiSensor sensor)
+
+ private static Hep3Vector getMeasuredCoordinate(SiSensor sensor)
{
// p-side unit vector
ITransform3D electrodes_to_global = sensor.getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal();
@@ -420,127 +420,127 @@
measuredCoordinate = VecOp.mult(electrodes_to_global.getRotation().getRotationMatrix(), measuredCoordinate);
return measuredCoordinate;
}
-
-
-
- private static class SiSensorDetAlignConstants extends DetAlignConstants {
- public SiSensorDetAlignConstants(IDetectorElement det) {
- super(det);
- }
- public void transform() {
- ITransform3D localToGlobal = null;
- if(_det.getClass().isInstance(SiSensor.class)) {
- localToGlobal = ( (SiSensor) _det).getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal();
- }
- //Translation
- Hep3Vector t_local = _constants.getTranslationVector();
- Hep3Vector t_global = localToGlobal.getRotation().rotated(t_local);
- _constants.addGlobalTranslation(t_global);
- //Rotation
- Hep3Vector r_local = _constants.getRotationVector();
- Hep3Vector r_global = localToGlobal.getRotation().rotated(r_local);
- _constants.addGlobalRotation(r_global);
- }
-
- }
-
- private static abstract class DetAlignConstants {
- protected IDetectorElement _det = null;
- protected AlignConstants<String,Double> _constants = new AlignConstants<String,Double>();
- public DetAlignConstants(IDetectorElement det) {
- _det = det;
- }
- public abstract void transform();
- public void add(MilleParameter par) {
- this._constants.add(par);
- }
- public void print() {
- System.out.println(_det.getName());
- for(Entry<String, Double> c : this._constants.entrySet()) {
- System.out.println(c.getKey() + " " + c.getValue());
- }
- System.out.println("Local translation " + _constants.getTranslationVector().toString());
- System.out.println("Global translation " + _constants.getTranslationVectorGlobal().toString());
- System.out.println("Local rotation " + _constants.getRotationVector().toString());
- System.out.println("Global rotation " + _constants.getRotationVectorGlobal().toString());
-
-
- }
-
-
- }
-
-
-
- private static class AlignConstants<K,V> extends HashMap<String,Double> {
- List<MilleParameter> _pars = new ArrayList<MilleParameter>();
- public AlignConstants() {
- super();
- }
- public void add(MilleParameter p) {
- _pars.add(p);
- if (p.getType() == 1) {
- if (p.getDim() == 1) this.put("u", p.getValue());
- else if(p.getDim() == 2) this.put("v", p.getValue());
- else this.put("w", p.getValue());
- }
- else {
- if (p.getDim() == 1) this.put("alpha", p.getValue());
- else if(p.getDim() == 2) this.put("beta", p.getValue());
- else this.put("gamma", p.getValue());
- }
- }
- public void print() {
- for(Entry<String,Double> e : this.entrySet()) {
- System.out.println(e.getKey() + " " + e.getValue());
- }
- }
- public Hep3Vector getTranslationVector() {
- if(!this.containsKey("u") || !this.containsKey("v") || !this.containsKey("w")) {
- System.out.println("missing pars for translation");
- print();
- System.exit(1);
- }
- return new BasicHep3Vector(this.get("u"),this.get("v"),this.get("w"));
- }
- public Hep3Vector getTranslationVectorGlobal() {
- if(!this.containsKey("x") || !this.containsKey("y") || !this.containsKey("z")) {
- System.out.println("missing pars for global translation");
- print();
- System.exit(1);
- }
- return new BasicHep3Vector(this.get("x"),this.get("y"),this.get("z"));
- }
- public Hep3Vector getRotationVector() {
- if(!this.containsKey("alpha") || !this.containsKey("beta") || !this.containsKey("gamma")) {
- System.out.println("missing pars for rotation");
- print();
- System.exit(1);
- }
- return new BasicHep3Vector(this.get("alpha"),this.get("beta"),this.get("gamma"));
- }
- public Hep3Vector getRotationVectorGlobal() {
- if(!this.containsKey("rx") || !this.containsKey("ry") || !this.containsKey("rz")) {
- System.out.println("missing pars for global rotation");
- print();
- System.exit(1);
- }
- return new BasicHep3Vector(this.get("rx"),this.get("ry"),this.get("rz"));
- }
- private void addGlobalTranslation(Hep3Vector t) {
- this.put("x", t.x());
- this.put("y", t.y());
- this.put("z", t.z());
- }
- private void addGlobalRotation(Hep3Vector t) {
- this.put("rx", t.x());
- this.put("ry", t.y());
- this.put("rz", t.z());
- }
-
-
- }
-
-
+
+
+
+ private static class SiSensorDetAlignConstants extends DetAlignConstants {
+ public SiSensorDetAlignConstants(IDetectorElement det) {
+ super(det);
+ }
+ public void transform() {
+ ITransform3D localToGlobal = null;
+ if(_det.getClass().isInstance(SiSensor.class)) {
+ localToGlobal = ( (SiSensor) _det).getReadoutElectrodes(ChargeCarrier.HOLE).getLocalToGlobal();
+ }
+ //Translation
+ Hep3Vector t_local = _constants.getTranslationVector();
+ Hep3Vector t_global = localToGlobal.getRotation().rotated(t_local);
+ _constants.addGlobalTranslation(t_global);
+ //Rotation
+ Hep3Vector r_local = _constants.getRotationVector();
+ Hep3Vector r_global = localToGlobal.getRotation().rotated(r_local);
+ _constants.addGlobalRotation(r_global);
+ }
+
+ }
+
+ private static abstract class DetAlignConstants {
+ protected IDetectorElement _det = null;
+ protected AlignConstants<String,Double> _constants = new AlignConstants<String,Double>();
+ public DetAlignConstants(IDetectorElement det) {
+ _det = det;
+ }
+ public abstract void transform();
+ public void add(MilleParameter par) {
+ this._constants.add(par);
+ }
+ public void print() {
+ System.out.println(_det.getName());
+ for(Entry<String, Double> c : this._constants.entrySet()) {
+ System.out.println(c.getKey() + " " + c.getValue());
+ }
+ System.out.println("Local translation " + _constants.getTranslationVector().toString());
+ System.out.println("Global translation " + _constants.getTranslationVectorGlobal().toString());
+ System.out.println("Local rotation " + _constants.getRotationVector().toString());
+ System.out.println("Global rotation " + _constants.getRotationVectorGlobal().toString());
+
+
+ }
+
+
+ }
+
+
+
+ private static class AlignConstants<K,V> extends HashMap<String,Double> {
+ List<MilleParameter> _pars = new ArrayList<MilleParameter>();
+ public AlignConstants() {
+ super();
+ }
+ public void add(MilleParameter p) {
+ _pars.add(p);
+ if (p.getType() == 1) {
+ if (p.getDim() == 1) this.put("u", p.getValue());
+ else if(p.getDim() == 2) this.put("v", p.getValue());
+ else this.put("w", p.getValue());
+ }
+ else {
+ if (p.getDim() == 1) this.put("alpha", p.getValue());
+ else if(p.getDim() == 2) this.put("beta", p.getValue());
+ else this.put("gamma", p.getValue());
+ }
+ }
+ public void print() {
+ for(Entry<String,Double> e : this.entrySet()) {
+ System.out.println(e.getKey() + " " + e.getValue());
+ }
+ }
+ public Hep3Vector getTranslationVector() {
+ if(!this.containsKey("u") || !this.containsKey("v") || !this.containsKey("w")) {
+ System.out.println("missing pars for translation");
+ print();
+ System.exit(1);
+ }
+ return new BasicHep3Vector(this.get("u"),this.get("v"),this.get("w"));
+ }
+ public Hep3Vector getTranslationVectorGlobal() {
+ if(!this.containsKey("x") || !this.containsKey("y") || !this.containsKey("z")) {
+ System.out.println("missing pars for global translation");
+ print();
+ System.exit(1);
+ }
+ return new BasicHep3Vector(this.get("x"),this.get("y"),this.get("z"));
+ }
+ public Hep3Vector getRotationVector() {
+ if(!this.containsKey("alpha") || !this.containsKey("beta") || !this.containsKey("gamma")) {
+ System.out.println("missing pars for rotation");
+ print();
+ System.exit(1);
+ }
+ return new BasicHep3Vector(this.get("alpha"),this.get("beta"),this.get("gamma"));
+ }
+ public Hep3Vector getRotationVectorGlobal() {
+ if(!this.containsKey("rx") || !this.containsKey("ry") || !this.containsKey("rz")) {
+ System.out.println("missing pars for global rotation");
+ print();
+ System.exit(1);
+ }
+ return new BasicHep3Vector(this.get("rx"),this.get("ry"),this.get("rz"));
+ }
+ private void addGlobalTranslation(Hep3Vector t) {
+ this.put("x", t.x());
+ this.put("y", t.y());
+ this.put("z", t.z());
+ }
+ private void addGlobalRotation(Hep3Vector t) {
+ this.put("rx", t.x());
+ this.put("ry", t.y());
+ this.put("rz", t.z());
+ }
+
+
+ }
+
+
}
Modified: java/trunk/tracking/src/main/java/org/hps/svt/alignment/BuildMillepedeCompact.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/svt/alignment/BuildMillepedeCompact.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/svt/alignment/BuildMillepedeCompact.java Wed Mar 9 11:43:24 2016
@@ -52,8 +52,8 @@
public class BuildMillepedeCompact {
- private static String detectorName = "Tracker";
- private static boolean replaceConstant = false;
+ private static String detectorName = "Tracker";
+ private static boolean replaceConstant = false;
private static boolean calcNewValue = true;
private static boolean ignoreBeamspot = true;
private static boolean flipRotationCorrection = false;
@@ -61,250 +61,250 @@
private static Options createCmdLineOpts() {
- Options options = new Options();
- options.addOption(new Option("c",true,"The path to the compact xml file."));
- options.addOption(new Option("o",true,"The name of the new compact xml file."));
- options.addOption(new Option("r", false, "Replace correction instead of adding to it."));
+ Options options = new Options();
+ options.addOption(new Option("c",true,"The path to the compact xml file."));
+ options.addOption(new Option("o",true,"The name of the new compact xml file."));
+ options.addOption(new Option("r", false, "Replace correction instead of adding to it."));
options.addOption(new Option("t", false, "Add a text string as a new value instead of adding to it."));
options.addOption(new Option("f",false, "Flip sign of rotation corrections."));
- return options;
- }
-
- private static void printHelpAndExit(Options options) {
- HelpFormatter help = new HelpFormatter();
- help.printHelp(" ", options);
- System.exit(1);
- }
-
-
- public static void main(String[] args) {
-
- // Setup command line input
- Options options = createCmdLineOpts();
- if (args.length == 0) {
- printHelpAndExit(options);
- }
-
- CommandLineParser parser = new PosixParser();
- CommandLine cl = null;
- try {
- cl = parser.parse(options, args);
- } catch (ParseException e) {
- throw new RuntimeException("Problem parsing command line options.",e);
- }
-
- String compactFilename = null;
- if(cl.hasOption("c")) {
- compactFilename = cl.getOptionValue("c");
- } else {
- printHelpAndExit(options);
- }
-
- String compactFilenameNew = "compact_new.xml";
- if(cl.hasOption("o")) {
- compactFilenameNew = cl.getOptionValue("o");
- }
-
-
-
- if(cl.hasOption("r")) {
- replaceConstant = true;
- }
-
- if(cl.hasOption("t")) {
+ return options;
+ }
+
+ private static void printHelpAndExit(Options options) {
+ HelpFormatter help = new HelpFormatter();
+ help.printHelp(" ", options);
+ System.exit(1);
+ }
+
+
+ public static void main(String[] args) {
+
+ // Setup command line input
+ Options options = createCmdLineOpts();
+ if (args.length == 0) {
+ printHelpAndExit(options);
+ }
+
+ CommandLineParser parser = new PosixParser();
+ CommandLine cl = null;
+ try {
+ cl = parser.parse(options, args);
+ } catch (ParseException e) {
+ throw new RuntimeException("Problem parsing command line options.",e);
+ }
+
+ String compactFilename = null;
+ if(cl.hasOption("c")) {
+ compactFilename = cl.getOptionValue("c");
+ } else {
+ printHelpAndExit(options);
+ }
+
+ String compactFilenameNew = "compact_new.xml";
+ if(cl.hasOption("o")) {
+ compactFilenameNew = cl.getOptionValue("o");
+ }
+
+
+
+ if(cl.hasOption("r")) {
+ replaceConstant = true;
+ }
+
+ if(cl.hasOption("t")) {
calcNewValue = false;
}
- if(cl.hasOption("f")) {
- flipRotationCorrection = true;
- }
-
- if (calcNewValue)
+ if(cl.hasOption("f")) {
+ flipRotationCorrection = true;
+ }
+
+ if (calcNewValue)
System.out.println("DO CALCULATE NEW VALUE");
else
System.out.println("DO NOT CALCULATE NEW VALUE");
-
-
- if (flipRotationCorrection)
- System.out.println("DO FLIP ROTATIONS");
- else
- System.out.println("DO NOT FLIP ROTATIONS");
-
-
-
- File compactFile = new File(compactFilename);
-
- // read XML
- SAXBuilder builder = new SAXBuilder();
- Document compact_document = null;
- try {
- compact_document = (Document) builder.build(compactFile);
- } catch (JDOMException | IOException e1) {
- throw new RuntimeException("problem with JDOM ", e1);
- }
-
-
-
- // Loop over all millepede input files and build a list of parameters
-
- List<MilleParameter> params = new ArrayList<MilleParameter>();
-
- FileInputStream inMille = null;
- BufferedReader brMille = null;
- try {
- for(String milleFilename : cl.getArgs()) {
- inMille = new FileInputStream(milleFilename);
- brMille = new BufferedReader(new InputStreamReader(inMille));
- String line;
- while((line = brMille.readLine()) != null) {
- //System.out.printf("%s\n",line);
- if(!line.contains("Parameter") && !line.contains("!")) {
-
- MilleParameter par = new MilleParameter(line);
- //System.out.println(par.getXMLName() + " " + par.getValue());
-
- if (ignoreBeamspot) {
- if(par.getSensor() == 98 || par.getSensor() == 99) {
- System.out.printf("Ignoring %s\n", par.toString());
- continue;
- }
- }
- System.out.printf("Adding %s\n", par.toString());
- //add the parameter
- params.add(par);
-
- }
- }
- brMille.close();
- }
- }
- catch (IOException e) {
- throw new RuntimeException("problem reading mille file",e);
- }
-
- System.out.printf("Found %d millepede parameters\n ", params.size());
-
-
-
- Element rootNode = compact_document.getRootElement();
- List<Element> detectors = rootNode.getChildren("detectors");
- for(Element detectorsNode : detectors) {
- List<Element> detectorNode = detectorsNode.getChildren("detector");
- if(detectorNode!=null) {
- System.out.println(detectorNode.size() + " detectors");
- for(Element detector : detectorNode) {
- if(detector.getAttribute("name")!=null) {
- if(detector.getAttributeValue("name").compareTo(detectorName)==0 ) {
- System.out.println("Found " + detectorName);
- for(MilleParameter p : params) {
- Element node = findMillepedeConstantNode(detector,Integer.toString(p.getId()));
- if(node!=null) {
+
+
+ if (flipRotationCorrection)
+ System.out.println("DO FLIP ROTATIONS");
+ else
+ System.out.println("DO NOT FLIP ROTATIONS");
+
+
+
+ File compactFile = new File(compactFilename);
+
+ // read XML
+ SAXBuilder builder = new SAXBuilder();
+ Document compact_document = null;
+ try {
+ compact_document = (Document) builder.build(compactFile);
+ } catch (JDOMException | IOException e1) {
+ throw new RuntimeException("problem with JDOM ", e1);
+ }
+
+
+
+ // Loop over all millepede input files and build a list of parameters
+
+ List<MilleParameter> params = new ArrayList<MilleParameter>();
+
+ FileInputStream inMille = null;
+ BufferedReader brMille = null;
+ try {
+ for(String milleFilename : cl.getArgs()) {
+ inMille = new FileInputStream(milleFilename);
+ brMille = new BufferedReader(new InputStreamReader(inMille));
+ String line;
+ while((line = brMille.readLine()) != null) {
+ //System.out.printf("%s\n",line);
+ if(!line.contains("Parameter") && !line.contains("!")) {
+
+ MilleParameter par = new MilleParameter(line);
+ //System.out.println(par.getXMLName() + " " + par.getValue());
+
+ if (ignoreBeamspot) {
+ if(par.getSensor() == 98 || par.getSensor() == 99) {
+ System.out.printf("Ignoring %s\n", par.toString());
+ continue;
+ }
+ }
+ System.out.printf("Adding %s\n", par.toString());
+ //add the parameter
+ params.add(par);
+
+ }
+ }
+ brMille.close();
+ }
+ }
+ catch (IOException e) {
+ throw new RuntimeException("problem reading mille file",e);
+ }
+
+ System.out.printf("Found %d millepede parameters\n ", params.size());
+
+
+
+ Element rootNode = compact_document.getRootElement();
+ List<Element> detectors = rootNode.getChildren("detectors");
+ for(Element detectorsNode : detectors) {
+ List<Element> detectorNode = detectorsNode.getChildren("detector");
+ if(detectorNode!=null) {
+ System.out.println(detectorNode.size() + " detectors");
+ for(Element detector : detectorNode) {
+ if(detector.getAttribute("name")!=null) {
+ if(detector.getAttributeValue("name").compareTo(detectorName)==0 ) {
+ System.out.println("Found " + detectorName);
+ for(MilleParameter p : params) {
+ Element node = findMillepedeConstantNode(detector,Integer.toString(p.getId()));
+ if(node!=null) {
double correction = p.getValue();
- // have the option of adding a text value to the compact instead of actually computing the new value
- if(calcNewValue) {
-
- double oldValue = 0;
- try {
- oldValue = node.getAttribute("value").getDoubleValue();
- } catch (DataConversionException e) {
- e.printStackTrace();
- }
- double newValue;
- if(replaceConstant) {
- newValue = correction;
- } else {
- if (p.getType() == MilleParameter.Type.ROTATION.getType() && !flipRotationCorrection) {
- newValue = oldValue - correction;
- System.out.println("NOFLIP");
- } else {
- newValue = oldValue + correction;
+ // have the option of adding a text value to the compact instead of actually computing the new value
+ if(calcNewValue) {
+
+ double oldValue = 0;
+ try {
+ oldValue = node.getAttribute("value").getDoubleValue();
+ } catch (DataConversionException e) {
+ e.printStackTrace();
+ }
+ double newValue;
+ if(replaceConstant) {
+ newValue = correction;
+ } else {
+ if (p.getType() == MilleParameter.Type.ROTATION.getType() && !flipRotationCorrection) {
+ newValue = oldValue - correction;
+ System.out.println("NOFLIP");
+ } else {
+ newValue = oldValue + correction;
System.out.println("FLIP");
- }
- }
- System.out.println("Update " + p.getId() + ": " + oldValue + " (corr. " + correction + ") -> " + newValue );
- node.setAttribute("value", String.format("%.6f",newValue));
-
- } else {
-
- String oldValue = node.getAttribute("value").getValue();
-
- if(replaceConstant)
- throw new RuntimeException("Doesn't make sense to try and replace with the string option?");
-
- if( correction != 0.0) {
- String newValue;
-
- if (p.getType() == MilleParameter.Type.ROTATION.getType() && !flipRotationCorrection) {
- newValue = oldValue + " - " + String.format("%.6f",correction);
+ }
+ }
+ System.out.println("Update " + p.getId() + ": " + oldValue + " (corr. " + correction + ") -> " + newValue );
+ node.setAttribute("value", String.format("%.6f",newValue));
+
+ } else {
+
+ String oldValue = node.getAttribute("value").getValue();
+
+ if(replaceConstant)
+ throw new RuntimeException("Doesn't make sense to try and replace with the string option?");
+
+ if( correction != 0.0) {
+ String newValue;
+
+ if (p.getType() == MilleParameter.Type.ROTATION.getType() && !flipRotationCorrection) {
+ newValue = oldValue + " - " + String.format("%.6f",correction);
System.out.println("NOFLIP");
} else {
newValue = oldValue + " + " + String.format("%.6f",correction);
System.out.println("FLIP");
}
-
- System.out.println("Update " + p.getId() + ": " + oldValue + " (corr. " + correction + ") -> " + newValue );
- node.setAttribute("value", newValue);
- }
- }
-
- } else {
- throw new RuntimeException("no element found for " + p.getId() + " check format of compact file");
- }
- }
- }
- } else {
- throw new RuntimeException("this detector node element is not formatted correctly");
- }
- }
- } else {
- throw new RuntimeException("this detector node element is not formatted correctly");
- }
- }
-
-
- // Save new XML file
-
- XMLOutputter xmlOutput = new XMLOutputter();
- // display nice
- //xmlOutput.setFormat(Format.getPrettyFormat());
- try {
- xmlOutput.output(compact_document, new FileWriter(compactFilenameNew));
- } catch (IOException e) {
- throw new RuntimeException("problem with xml output",e);
- }
-
-
-
-
-
- }
-
-
- private static Element findMillepedeConstantNode(Element detector, String name) {
- Element element_constants = detector.getChild("millepede_constants");
- if(element_constants==null) {
- throw new RuntimeException("no alignment constants in this xml file.");
- }
- List<Element> list = element_constants.getChildren("millepede_constant");
- for(Element element : list) {
- if(element.getAttribute("name")!=null) {
- if(element.getAttributeValue("name").compareTo(name) == 0) {
- return element;
- }
- } else {
- throw new RuntimeException("this element is not formatted correctly");
- }
- }
- return null;
- }
-
-
-
-
-
-
+
+ System.out.println("Update " + p.getId() + ": " + oldValue + " (corr. " + correction + ") -> " + newValue );
+ node.setAttribute("value", newValue);
+ }
+ }
+
+ } else {
+ throw new RuntimeException("no element found for " + p.getId() + " check format of compact file");
+ }
+ }
+ }
+ } else {
+ throw new RuntimeException("this detector node element is not formatted correctly");
+ }
+ }
+ } else {
+ throw new RuntimeException("this detector node element is not formatted correctly");
+ }
+ }
+
+
+ // Save new XML file
+
+ XMLOutputter xmlOutput = new XMLOutputter();
+ // display nice
+ //xmlOutput.setFormat(Format.getPrettyFormat());
+ try {
+ xmlOutput.output(compact_document, new FileWriter(compactFilenameNew));
+ } catch (IOException e) {
+ throw new RuntimeException("problem with xml output",e);
+ }
+
+
+
+
+
+ }
+
+
+ private static Element findMillepedeConstantNode(Element detector, String name) {
+ Element element_constants = detector.getChild("millepede_constants");
+ if(element_constants==null) {
+ throw new RuntimeException("no alignment constants in this xml file.");
+ }
+ List<Element> list = element_constants.getChildren("millepede_constant");
+ for(Element element : list) {
+ if(element.getAttribute("name")!=null) {
+ if(element.getAttributeValue("name").compareTo(name) == 0) {
+ return element;
+ }
+ } else {
+ throw new RuntimeException("this element is not formatted correctly");
+ }
+ }
+ return null;
+ }
+
+
+
+
+
+
}
Modified: java/trunk/tracking/src/main/java/org/hps/svt/alignment/MillepedeCompactDump.java
=============================================================================
--- java/trunk/tracking/src/main/java/org/hps/svt/alignment/MillepedeCompactDump.java (original)
+++ java/trunk/tracking/src/main/java/org/hps/svt/alignment/MillepedeCompactDump.java Wed Mar 9 11:43:24 2016
@@ -28,115 +28,115 @@
public class MillepedeCompactDump {
- private static String detectorName = "Tracker";
+ private static String detectorName = "Tracker";
private static Options createCmdLineOpts() {
- Options options = new Options();
- options.addOption(new Option("c",true,"The path to the compact xml file."));
- options.addOption(new Option("o",true,"The name of the output text file."));
- return options;
- }
-
- private static void printHelpAndExit(Options options) {
- HelpFormatter help = new HelpFormatter();
- help.printHelp(" ", options);
- System.exit(1);
- }
-
-
- public static void main(String[] args) {
+ Options options = new Options();
+ options.addOption(new Option("c",true,"The path to the compact xml file."));
+ options.addOption(new Option("o",true,"The name of the output text file."));
+ return options;
+ }
+
+ private static void printHelpAndExit(Options options) {
+ HelpFormatter help = new HelpFormatter();
+ help.printHelp(" ", options);
+ System.exit(1);
+ }
+
+
+ public static void main(String[] args) {
- // Setup command line input
- Options options = createCmdLineOpts();
- if (args.length == 0) {
- printHelpAndExit(options);
- }
+ // Setup command line input
+ Options options = createCmdLineOpts();
+ if (args.length == 0) {
+ printHelpAndExit(options);
+ }
- CommandLineParser parser = new PosixParser();
- CommandLine cl = null;
- try {
- cl = parser.parse(options, args);
- } catch (ParseException e) {
- throw new RuntimeException("Problem parsing command line options.",e);
- }
-
- String compactFilename = null;
- if(cl.hasOption("c")) {
- compactFilename = cl.getOptionValue("c");
- } else {
- printHelpAndExit(options);
- }
-
- String outputFilename = "millepede_dump.txt";// + compactFilename.replace(".xml", ".txt");
- if(cl.hasOption("o")) {
- outputFilename = cl.getOptionValue("o");
- }
-
+ CommandLineParser parser = new PosixParser();
+ CommandLine cl = null;
+ try {
+ cl = parser.parse(options, args);
+ } catch (ParseException e) {
+ throw new RuntimeException("Problem parsing command line options.",e);
+ }
+
+ String compactFilename = null;
+ if(cl.hasOption("c")) {
+ compactFilename = cl.getOptionValue("c");
+ } else {
+ printHelpAndExit(options);
+ }
+
+ String outputFilename = "millepede_dump.txt";// + compactFilename.replace(".xml", ".txt");
+ if(cl.hasOption("o")) {
+ outputFilename = cl.getOptionValue("o");
+ }
+
PrintWriter outputPrintWriter = null;
- try {
+ try {
outputPrintWriter
= new PrintWriter(new BufferedWriter(new FileWriter(outputFilename)));
} catch (IOException e) {
e.printStackTrace();
}
-
-
-
-
- File compactFile = new File(compactFilename);
-
- // read XML
- SAXBuilder builder = new SAXBuilder();
- Document compact_document = null;
- try {
- compact_document = (Document) builder.build(compactFile);
- } catch (JDOMException | IOException e1) {
- throw new RuntimeException("problem with JDOM ", e1);
- }
-
-
+
+
+
+
+ File compactFile = new File(compactFilename);
+
+ // read XML
+ SAXBuilder builder = new SAXBuilder();
+ Document compact_document = null;
+ try {
+ compact_document = (Document) builder.build(compactFile);
+ } catch (JDOMException | IOException e1) {
+ throw new RuntimeException("problem with JDOM ", e1);
+ }
+
+
- Element rootNode = compact_document.getRootElement();
-
- // find the constants needed to calculate the final millepede parameters
- List<Element> definitions = rootNode.getChildren("define");
- for(Element definition : definitions) {
- List<Element> constants = definition.getChildren("constant");
-
- }
+ Element rootNode = compact_document.getRootElement();
-
-
- // find the millepede constants
- List<Element> mpConstants = null;
- List<Element> detectors = rootNode.getChildren("detectors");
- for(Element detectorsNode : detectors) {
- List<Element> detectorNode = detectorsNode.getChildren("detector");
- if(detectorNode!=null) {
- System.out.println(detectorNode.size() + " detectors");
- for(Element detector : detectorNode) {
- if(detector.getAttribute("name")!=null) {
- if(detector.getAttributeValue("name").compareTo(detectorName)==0 ) {
- System.out.println("Found " + detectorName);
-
- Element element_constants = detector.getChild("millepede_constants");
- if(element_constants==null) {
- throw new RuntimeException("no alignment constants in this compact file.");
- }
- mpConstants = element_constants.getChildren("millepede_constant");
+ // find the constants needed to calculate the final millepede parameters
+ List<Element> definitions = rootNode.getChildren("define");
+ for(Element definition : definitions) {
+ List<Element> constants = definition.getChildren("constant");
+
+ }
+
+
+
+ // find the millepede constants
+ List<Element> mpConstants = null;
+ List<Element> detectors = rootNode.getChildren("detectors");
+ for(Element detectorsNode : detectors) {
+ List<Element> detectorNode = detectorsNode.getChildren("detector");
+ if(detectorNode!=null) {
+ System.out.println(detectorNode.size() + " detectors");
+ for(Element detector : detectorNode) {
+ if(detector.getAttribute("name")!=null) {
+ if(detector.getAttributeValue("name").compareTo(detectorName)==0 ) {
+ System.out.println("Found " + detectorName);
+
+ Element element_constants = detector.getChild("millepede_constants");
+ if(element_constants==null) {
+ throw new RuntimeException("no alignment constants in this compact file.");
+ }
+ mpConstants = element_constants.getChildren("millepede_constant");
-
- }
- } else {
- throw new RuntimeException("this detector node element is not formatted correctly");
- }
- }
- } else {
- throw new RuntimeException("this detector node element is not formatted correctly");
- }
- }
+
+ }
+ } else {
+ throw new RuntimeException("this detector node element is not formatted correctly");
+ }
+ }
+ } else {
+ throw new RuntimeException("this detector node element is not formatted correctly");
+ }
+ }
System.out.println("Found " + mpConstants.size() + " constants" );
for(Element element : mpConstants) {
String name = element.getAttributeValue("name");
@@ -147,19 +147,19 @@
}
- outputPrintWriter.close();
-
-
-
-
- }
+ outputPrintWriter.close();
+
+
+
+
+ }
-
+
-
-
-
+
+
+
}
Modified: java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Test-All.xml
=============================================================================
--- java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Test-All.xml (original)
+++ java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Test-All.xml Wed Mar 9 11:43:24 2016
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<StrategyList xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://lcsim.org/recon/tracking/seedtracker/strategybuilder/strategies.xsd">
<TargetDetector>HPS-Test-All</TargetDetector>
-
+
<Strategy name="Strategy1-1">
<MinPT>0.250</MinPT>
<MinHits>4</MinHits>
@@ -70,7 +70,7 @@
</Layers>
</Strategy>
- <Strategy name="Strategy3-1">
+ <Strategy name="Strategy3-1">
<MinPT>0.250</MinPT>
<MinHits>4</MinHits>
<MinConfirm>1</MinConfirm>
Modified: java/trunk/tracking/src/test/java/org/hps/recon/tracking/HelicalTrackHitDriverTest.java
=============================================================================
--- java/trunk/tracking/src/test/java/org/hps/recon/tracking/HelicalTrackHitDriverTest.java (original)
+++ java/trunk/tracking/src/test/java/org/hps/recon/tracking/HelicalTrackHitDriverTest.java Wed Mar 9 11:43:24 2016
@@ -34,9 +34,9 @@
*/
public class HelicalTrackHitDriverTest extends TestCase {
- File commonOutputFile;
- File splitOutputFile;
-
+ File commonOutputFile;
+ File splitOutputFile;
+
/**
*
*/
@@ -124,9 +124,9 @@
int numberTopClusters = 0;
int numberBotClusters = 0;
for(SiTrackerHit cluster : clusters){
- if(cluster.getPositionAsVector().y() > 0)
- numberTopClusters++;
- else numberBotClusters++;
+ if(cluster.getPositionAsVector().y() > 0)
+ numberTopClusters++;
+ else numberBotClusters++;
}
if(!event.hasCollection(HelicalTrackHit.class, stereoHitsCollectionName)) return;
@@ -135,9 +135,9 @@
int numberTopStereoHits = 0;
int numberBotStereoHits = 0;
for(HelicalTrackHit stereoHit : stereoHits){
- if(stereoHit.getPosition()[1] > 0)
- numberTopStereoHits++;
- else numberBotStereoHits++;
+ if(stereoHit.getPosition()[1] > 0)
+ numberTopStereoHits++;
+ else numberBotStereoHits++;
}
nTopClusters.fill(numberTopClusters);
@@ -183,26 +183,26 @@
* "Split" layer geometry are equivalent
*/
public void testLayerGeometry() throws IOException, IllegalArgumentException {
-
- IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory();
-
- ITree commonTree = analysisFactory.createTreeFactory().create(commonOutputFile.getAbsolutePath());
- ITree splitTree = analysisFactory.createTreeFactory().create(splitOutputFile.getAbsolutePath());
-
- double ksPvalue = CompareHistograms.getKolmogorovPValue( (IHistogram1D) splitTree.find("Number of Top Clusters"),
- (IHistogram1D) commonTree.find("Number of Top Clusters"));
- assertTrue("Number of top clusters is unequal!", ksPvalue > 0.05 );
-
- ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Bottom Clusters"),
- (IHistogram1D) splitTree.find("Number of Bottom Clusters"));
- assertTrue("Number of bottom clusters is unequal!", ksPvalue > 0.05 );
-
- ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Top Stereo Hits"),
- (IHistogram1D) splitTree.find("Number of Top Stereo Hits"));
- assertTrue("Number of top stereo hits is unequal!", ksPvalue > 0.05 );
-
- ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Bottom Stereo Hits"),
- (IHistogram1D) splitTree.find("Number of Bottom Stereo Hits"));
- assertTrue("Number of bottom stereo hits is unequal!", ksPvalue > 0.05 );
+
+ IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory();
+
+ ITree commonTree = analysisFactory.createTreeFactory().create(commonOutputFile.getAbsolutePath());
+ ITree splitTree = analysisFactory.createTreeFactory().create(splitOutputFile.getAbsolutePath());
+
+ double ksPvalue = CompareHistograms.getKolmogorovPValue( (IHistogram1D) splitTree.find("Number of Top Clusters"),
+ (IHistogram1D) commonTree.find("Number of Top Clusters"));
+ assertTrue("Number of top clusters is unequal!", ksPvalue > 0.05 );
+
+ ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Bottom Clusters"),
+ (IHistogram1D) splitTree.find("Number of Bottom Clusters"));
+ assertTrue("Number of bottom clusters is unequal!", ksPvalue > 0.05 );
+
+ ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Top Stereo Hits"),
+ (IHistogram1D) splitTree.find("Number of Top Stereo Hits"));
+ assertTrue("Number of top stereo hits is unequal!", ksPvalue > 0.05 );
+
+ ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Bottom Stereo Hits"),
+ (IHistogram1D) splitTree.find("Number of Bottom Stereo Hits"));
+ assertTrue("Number of bottom stereo hits is unequal!", ksPvalue > 0.05 );
}
}
Modified: java/trunk/tracking/src/test/java/org/hps/recon/tracking/TruthResidualTest.java
=============================================================================
--- java/trunk/tracking/src/test/java/org/hps/recon/tracking/TruthResidualTest.java (original)
+++ java/trunk/tracking/src/test/java/org/hps/recon/tracking/TruthResidualTest.java Wed Mar 9 11:43:24 2016
@@ -33,92 +33,92 @@
*/
public class TruthResidualTest extends TestCase {
-
-
- private static final String testFileName = "";
- private static final String testURLBase = null;
- private static final long nEvents = 1000;
+
+
+ private static final String testFileName = "";
+ private static final String testURLBase = null;
+ private static final long nEvents = 1000;
- public void testTruthResiduals() throws Exception{
- File lcioInputFile = null;
+ public void testTruthResiduals() throws Exception{
+ File lcioInputFile = null;
- URL testURL = new URL(testURLBase + "/" + testFileName);
- FileCache cache = new FileCache();
- lcioInputFile = cache.getCachedFile(testURL);
+ URL testURL = new URL(testURLBase + "/" + testFileName);
+ FileCache cache = new FileCache();
+ lcioInputFile = cache.getCachedFile(testURL);
- //Process and write out the file
- LCSimLoop loop = new LCSimLoop();
- loop.setLCIORecordSource(lcioInputFile);
- loop.add(new MainTrackingDriver());
- File outputFile = new TestOutputFile(testFileName.replaceAll(".slcio", "") + "_hpsTrackTruthResidualTrackingTest.slcio");
- outputFile.getParentFile().mkdirs(); //make sure the parent directory exists
- loop.add(new LCIODriver(outputFile));
- loop.loop(nEvents, null);
- loop.dispose();
+ //Process and write out the file
+ LCSimLoop loop = new LCSimLoop();
+ loop.setLCIORecordSource(lcioInputFile);
+ loop.add(new MainTrackingDriver());
+ File outputFile = new TestOutputFile(testFileName.replaceAll(".slcio", "") + "_hpsTrackTruthResidualTrackingTest.slcio");
+ outputFile.getParentFile().mkdirs(); //make sure the parent directory exists
+ loop.add(new LCIODriver(outputFile));
+ loop.loop(nEvents, null);
+ loop.dispose();
- //Read LCIO back and test!
- LCSimLoop readLoop = new LCSimLoop();
- readLoop.add(new TestResiduals());
- readLoop.setLCIORecordSource(outputFile);
- readLoop.loop(nEvents, null);
- readLoop.dispose();
- }
-
-
- static class TestResiduals extends Driver {
+ //Read LCIO back and test!
+ LCSimLoop readLoop = new LCSimLoop();
+ readLoop.add(new TestResiduals());
+ readLoop.setLCIORecordSource(outputFile);
+ readLoop.loop(nEvents, null);
+ readLoop.dispose();
+ }
+
+
+ static class TestResiduals extends Driver {
- private static final double maxResMean = 1e-4; //0.1um
- private static final double maxResRMS = 5e-4; //0.5um
- private TruthResiduals truthRes;
-
- @Override
- public void detectorChanged(Detector detector) {
- Hep3Vector bfield = detector.getFieldMap().getField(new BasicHep3Vector(0., 0., 1.));
- truthRes = new TruthResiduals(bfield);
- truthRes.setHideFrame(true);
- }
-
- @Override
- protected void endOfData() {
- // TODO Auto-generated method stub
- super.endOfData();
-
- IHistogram hx = truthRes.getResidual(1, "x");
- IHistogram hy = truthRes.getResidual(1, "y");
- if (hx != null && hx.entries()>10) {
- IHistogram1D hx1d = (IHistogram1D)hx;
- assertTrue("Mean of layer 1 truth hit residual is not zero " + hx1d.mean(), Math.abs(hx1d.mean()) >maxResMean );
- assertTrue("RMS of layer 1 truth hit residual is not zero" + hx1d.rms(), Math.abs(hx1d.rms()) >maxResRMS );
- }
- if (hy != null && hy.entries()>10) {
- IHistogram1D hy1d = (IHistogram1D)hy;
- assertTrue("Mean of layer 1 truth hit residual is not zero " + hy1d.mean(), Math.abs(hy1d.mean()) >maxResMean );
- assertTrue("RMS of layer 1 truth hit residual is not zero " + hy1d.mean(), Math.abs(hy1d.rms()) >maxResRMS );
- }
- }
+ private static final double maxResMean = 1e-4; //0.1um
+ private static final double maxResRMS = 5e-4; //0.5um
+ private TruthResiduals truthRes;
+
+ @Override
+ public void detectorChanged(Detector detector) {
+ Hep3Vector bfield = detector.getFieldMap().getField(new BasicHep3Vector(0., 0., 1.));
+ truthRes = new TruthResiduals(bfield);
+ truthRes.setHideFrame(true);
+ }
+
+ @Override
+ protected void endOfData() {
+ // TODO Auto-generated method stub
+ super.endOfData();
+
+ IHistogram hx = truthRes.getResidual(1, "x");
+ IHistogram hy = truthRes.getResidual(1, "y");
+ if (hx != null && hx.entries()>10) {
+ IHistogram1D hx1d = (IHistogram1D)hx;
+ assertTrue("Mean of layer 1 truth hit residual is not zero " + hx1d.mean(), Math.abs(hx1d.mean()) >maxResMean );
+ assertTrue("RMS of layer 1 truth hit residual is not zero" + hx1d.rms(), Math.abs(hx1d.rms()) >maxResRMS );
+ }
+ if (hy != null && hy.entries()>10) {
+ IHistogram1D hy1d = (IHistogram1D)hy;
+ assertTrue("Mean of layer 1 truth hit residual is not zero " + hy1d.mean(), Math.abs(hy1d.mean()) >maxResMean );
+ assertTrue("RMS of layer 1 truth hit residual is not zero " + hy1d.mean(), Math.abs(hy1d.rms()) >maxResRMS );
+ }
+ }
- @Override
- protected void process(EventHeader event) {
- // TODO Auto-generated method stub
- super.process(event);
-
- List<MCParticle> mcParticles = null;
- if(event.hasCollection(MCParticle.class,"MCParticle")) {
- mcParticles = event.get(MCParticle.class,"MCParticle");
- }
-
- List<SimTrackerHit> simTrackerHits = event.get(SimTrackerHit.class, "TrackerHits");
-
-
- if(simTrackerHits != null && mcParticles != null) {
- truthRes.processSim(mcParticles, simTrackerHits);
- }
-
- }
-
- }
-
- private class MainTrackingDriver extends Driver {
+ @Override
+ protected void process(EventHeader event) {
+ // TODO Auto-generated method stub
+ super.process(event);
+
+ List<MCParticle> mcParticles = null;
+ if(event.hasCollection(MCParticle.class,"MCParticle")) {
+ mcParticles = event.get(MCParticle.class,"MCParticle");
+ }
+
+ List<SimTrackerHit> simTrackerHits = event.get(SimTrackerHit.class, "TrackerHits");
+
+
+ if(simTrackerHits != null && mcParticles != null) {
+ truthRes.processSim(mcParticles, simTrackerHits);
+ }
+
+ }
+
+ }
+
+ private class MainTrackingDriver extends Driver {
public MainTrackingDriver() {
@@ -138,7 +138,7 @@
}
}
-
-
-
+
+
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitFunction.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitFunction.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitFunction.java Wed Mar 9 11:43:24 2016
@@ -7,29 +7,29 @@
* Straight line fit
*/
public class RfFitFunction extends AbstractIFunction {
- protected double intercept=0;
- protected double slope=0;
- public RfFitFunction() {
- this("");
- }
- public RfFitFunction(String title) {
- super();
- this.variableNames=new String[]{"time"};
- this.parameterNames=new String[]{"intercept","slope"};
+ protected double intercept=0;
+ protected double slope=0;
+ public RfFitFunction() {
+ this("");
+ }
+ public RfFitFunction(String title) {
+ super();
+ this.variableNames=new String[]{"time"};
+ this.parameterNames=new String[]{"intercept","slope"};
- init(title);
- }
- public double value(double [] v) {
- return intercept + (v[0])*slope;
- }
- public void setParameters(double[] pars) throws IllegalArgumentException {
- super.setParameters(pars);
- intercept=pars[0];
- slope=pars[1];
- }
- public void setParameter(String key,double value) throws IllegalArgumentException{
- super.setParameter(key,value);
- if (key.equals("intercept")) intercept=value;
- else if (key.equals("slope")) slope=value;
- }
+ init(title);
+ }
+ public double value(double [] v) {
+ return intercept + (v[0])*slope;
+ }
+ public void setParameters(double[] pars) throws IllegalArgumentException {
+ super.setParameters(pars);
+ intercept=pars[0];
+ slope=pars[1];
+ }
+ public void setParameter(String key,double value) throws IllegalArgumentException{
+ super.setParameter(key,value);
+ if (key.equals("intercept")) intercept=value;
+ else if (key.equals("slope")) slope=value;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitterDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitterDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitterDriver.java Wed Mar 9 11:43:24 2016
@@ -24,14 +24,14 @@
*/
public class RfFitterDriver extends Driver {
- static final double NOISE=2.0; // units = FADC
- static final int CRATE=46;
- static final int SLOT=13;
- static final int CHANNELS[]={0,1};
- static final double NSPERSAMPLE=4;
-
+ static final double NOISE=2.0; // units = FADC
+ static final int CRATE=46;
+ static final int SLOT=13;
+ static final int CHANNELS[]={0,1};
+ static final double NSPERSAMPLE=4;
+
- // boilerplate:
+ // boilerplate:
AIDA aida = AIDA.defaultInstance();
IAnalysisFactory analysisFactory = aida.analysisFactory();
IFunctionFactory functionFactory = analysisFactory.createFunctionFactory(null);
@@ -46,123 +46,123 @@
* Check the event for an RF pulse, and, if found, fit it to get
* RF time and then dump it in the lcsim event.
*/
- public void process(EventHeader event) {
- if (!event.hasCollection(GenericObject.class,"FADCGenericHits")) return;
-
- boolean foundRf=false;
- double times[]={-9999,-9999};
-
- for (GenericObject gob : event.get(GenericObject.class,"FADCGenericHits")) {
- FADCGenericHit hit=(FADCGenericHit)gob;
-
- // ignore hits not from proper RF signals based on crate/slot/channel:
- if (hit.getCrate()!=CRATE || hit.getSlot()!=SLOT) continue;
- for (int ii=0; ii<CHANNELS.length; ii++) {
- if (hit.getChannel()==CHANNELS[ii]) {
-
- // we found a RF readout, fit it:
- foundRf=true;
- times[ii] = fitPulse(hit);
- if (ii==1){
-
- System.out.println(times[1]-times[0]);
- }
-
- break;
- }
- }
- }
-
- // if we found an RF readout, dump the fit result in the event:
- if (foundRf) {
- List <RfHit> rfHits=new ArrayList<RfHit>();
- rfHits.add(new RfHit(times));
- event.put("RFHits", rfHits, RfHit.class, 1);
- }
- }
+ public void process(EventHeader event) {
+ if (!event.hasCollection(GenericObject.class,"FADCGenericHits")) return;
+
+ boolean foundRf=false;
+ double times[]={-9999,-9999};
+
+ for (GenericObject gob : event.get(GenericObject.class,"FADCGenericHits")) {
+ FADCGenericHit hit=(FADCGenericHit)gob;
+
+ // ignore hits not from proper RF signals based on crate/slot/channel:
+ if (hit.getCrate()!=CRATE || hit.getSlot()!=SLOT) continue;
+ for (int ii=0; ii<CHANNELS.length; ii++) {
+ if (hit.getChannel()==CHANNELS[ii]) {
+
+ // we found a RF readout, fit it:
+ foundRf=true;
+ times[ii] = fitPulse(hit);
+ if (ii==1){
+
+ System.out.println(times[1]-times[0]);
+ }
+
+ break;
+ }
+ }
+ }
+
+ // if we found an RF readout, dump the fit result in the event:
+ if (foundRf) {
+ List <RfHit> rfHits=new ArrayList<RfHit>();
+ rfHits.add(new RfHit(times));
+ event.put("RFHits", rfHits, RfHit.class, 1);
+ }
+ }
- /*
- * Perform the fit to the RF pulse:
- */
- public double fitPulse(FADCGenericHit hit) {
- fitData.clear();
- final int adcSamples[]=hit.getData();
- //stores the number of peaks
- int iz=0;
- int peakBin[]={-999,-999};
- final int threshold = 300;
- double fitThresh[]={-999,-999};
- double pedVal[]={-999,-999};
-
- // Look for bins containing the peaks (2-3 peaks)
- for (int ii=4; ii<adcSamples.length; ii++) {
- // After 2 peaks, stop looking for more
- if (iz==2){break;}
- if ((adcSamples[ii+1]>0) && (adcSamples[ii-1]>0) && (adcSamples[ii]>threshold) && ii>8){
- if ((adcSamples[ii]>adcSamples[ii+1]) && (adcSamples[ii]>=adcSamples[ii-1]) ){
-
- peakBin[iz]=ii;
- iz++;
- }
- }
- }
-
-
- int jj=0;
- // Choose peak closest to center of window (second peak, ik=1)
- final int ik=1;
- pedVal[ik] = (adcSamples[peakBin[ik]-6]+adcSamples[peakBin[ik]-7]+adcSamples[peakBin[ik]-8]+adcSamples[peakBin[ik]-9])/4.0;
- fitThresh[ik]= (adcSamples[peakBin[ik]]+pedVal[ik])/3.0;
-
- // Initial values: we find/fit 3 points:
- double itime[] = {-999,-999,-999};
- double ifadc[] = {-999,-999,-999};
-
- // Find the points of the peak bin to peak bin-5
- for (int ll=0; ll<5; ll++){
- if ((adcSamples[peakBin[ik]-5+ll]) > fitThresh[ik]){
- // One point is below fit threshold and two points are above
- if(jj==0 && (adcSamples[peakBin[ik]-6+ll] > pedVal[ik])){
- final int zz=fitData.size();
- fitData.addPoint();
- itime[zz] = peakBin[ik]-6+ll;
- ifadc[zz] = adcSamples[peakBin[ik]-6+ll];
- fitData.point(zz).coordinate(0).setValue(peakBin[ik]-6+ll);
- fitData.point(zz).coordinate(1).setValue(adcSamples[peakBin[ik]-6+ll]);
- fitData.point(zz).coordinate(1).setErrorMinus(NOISE);
- fitData.point(zz).coordinate(1).setErrorPlus(NOISE);
- jj++;
- }
- final int zz=fitData.size();
- fitData.addPoint();
- itime[zz] = peakBin[ik]-5+ll;
- ifadc[zz] = adcSamples[peakBin[ik]-5+ll];
- fitData.point(zz).coordinate(0).setValue(peakBin[ik]-5+ll);
- fitData.point(zz).coordinate(1).setValue(adcSamples[peakBin[ik]-5+ll]);
- fitData.point(zz).coordinate(1).setErrorMinus(NOISE);
- fitData.point(zz).coordinate(1).setErrorPlus(NOISE);
-
- jj++;
- if (jj==3) {break;}
- }
- }
-
- double islope = ((double)(ifadc[2]-ifadc[0]))/(itime[2]-itime[0]);
- double icept = ifadc[1] - islope*itime[1];
- // Initialize fit parameters:
- fitFunction.setParameter("intercept",icept);
- fitFunction.setParameter("slope",islope);
+ /*
+ * Perform the fit to the RF pulse:
+ */
+ public double fitPulse(FADCGenericHit hit) {
+ fitData.clear();
+ final int adcSamples[]=hit.getData();
+ //stores the number of peaks
+ int iz=0;
+ int peakBin[]={-999,-999};
+ final int threshold = 300;
+ double fitThresh[]={-999,-999};
+ double pedVal[]={-999,-999};
+
+ // Look for bins containing the peaks (2-3 peaks)
+ for (int ii=4; ii<adcSamples.length; ii++) {
+ // After 2 peaks, stop looking for more
+ if (iz==2){break;}
+ if ((adcSamples[ii+1]>0) && (adcSamples[ii-1]>0) && (adcSamples[ii]>threshold) && ii>8){
+ if ((adcSamples[ii]>adcSamples[ii+1]) && (adcSamples[ii]>=adcSamples[ii-1]) ){
+
+ peakBin[iz]=ii;
+ iz++;
+ }
+ }
+ }
+
+
+ int jj=0;
+ // Choose peak closest to center of window (second peak, ik=1)
+ final int ik=1;
+ pedVal[ik] = (adcSamples[peakBin[ik]-6]+adcSamples[peakBin[ik]-7]+adcSamples[peakBin[ik]-8]+adcSamples[peakBin[ik]-9])/4.0;
+ fitThresh[ik]= (adcSamples[peakBin[ik]]+pedVal[ik])/3.0;
+
+ // Initial values: we find/fit 3 points:
+ double itime[] = {-999,-999,-999};
+ double ifadc[] = {-999,-999,-999};
+
+ // Find the points of the peak bin to peak bin-5
+ for (int ll=0; ll<5; ll++){
+ if ((adcSamples[peakBin[ik]-5+ll]) > fitThresh[ik]){
+ // One point is below fit threshold and two points are above
+ if(jj==0 && (adcSamples[peakBin[ik]-6+ll] > pedVal[ik])){
+ final int zz=fitData.size();
+ fitData.addPoint();
+ itime[zz] = peakBin[ik]-6+ll;
+ ifadc[zz] = adcSamples[peakBin[ik]-6+ll];
+ fitData.point(zz).coordinate(0).setValue(peakBin[ik]-6+ll);
+ fitData.point(zz).coordinate(1).setValue(adcSamples[peakBin[ik]-6+ll]);
+ fitData.point(zz).coordinate(1).setErrorMinus(NOISE);
+ fitData.point(zz).coordinate(1).setErrorPlus(NOISE);
+ jj++;
+ }
+ final int zz=fitData.size();
+ fitData.addPoint();
+ itime[zz] = peakBin[ik]-5+ll;
+ ifadc[zz] = adcSamples[peakBin[ik]-5+ll];
+ fitData.point(zz).coordinate(0).setValue(peakBin[ik]-5+ll);
+ fitData.point(zz).coordinate(1).setValue(adcSamples[peakBin[ik]-5+ll]);
+ fitData.point(zz).coordinate(1).setErrorMinus(NOISE);
+ fitData.point(zz).coordinate(1).setErrorPlus(NOISE);
+
+ jj++;
+ if (jj==3) {break;}
+ }
+ }
+
+ double islope = ((double)(ifadc[2]-ifadc[0]))/(itime[2]-itime[0]);
+ double icept = ifadc[1] - islope*itime[1];
+ // Initialize fit parameters:
+ fitFunction.setParameter("intercept",icept);
+ fitFunction.setParameter("slope",islope);
- // this used to be turned on somewhere else on every event, dunno if it still is:
- //Logger.getLogger("org.freehep.math.minuit").setLevel(Level.OFF);
-
- IFitResult fitResults = fitter.fit(fitData,fitFunction);
-
- // Read the time value at this location on the fit:
- double halfVal = (adcSamples[peakBin[1]]+pedVal[1])/2.0;
-
- return NSPERSAMPLE*(halfVal-fitResults.fittedParameter("intercept"))/fitResults.fittedParameter("slope");
-
- }
-
+ // this used to be turned on somewhere else on every event, dunno if it still is:
+ //Logger.getLogger("org.freehep.math.minuit").setLevel(Level.OFF);
+
+ IFitResult fitResults = fitter.fit(fitData,fitFunction);
+
+ // Read the time value at this location on the fit:
+ double halfVal = (adcSamples[peakBin[1]]+pedVal[1])/2.0;
+
+ return NSPERSAMPLE*(halfVal-fitResults.fittedParameter("intercept"))/fitResults.fittedParameter("slope");
+
+ }
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/baltzell/RfHit.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/baltzell/RfHit.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/baltzell/RfHit.java Wed Mar 9 11:43:24 2016
@@ -6,13 +6,13 @@
* class to store RF times after extracting from waveform.
*/
public class RfHit implements GenericObject {
- private double[] times;
- public RfHit(double[] times) { this.times=times; }
- public int getNInt() { return 0; }
- public int getNFloat() { return 0; }
- public int getNDouble() { return times.length; }
- public double getDoubleVal(int ii) { return times[ii]; }
- public float getFloatVal (int ii) { return 0; }
- public int getIntVal (int ii) { return 0; }
- public boolean isFixedSize() { return false; }
+ private double[] times;
+ public RfHit(double[] times) { this.times=times; }
+ public int getNInt() { return 0; }
+ public int getNFloat() { return 0; }
+ public int getNDouble() { return times.length; }
+ public double getDoubleVal(int ii) { return times[ii]; }
+ public float getFloatVal (int ii) { return 0; }
+ public int getIntVal (int ii) { return 0; }
+ public boolean isFixedSize() { return false; }
}
Modified: java/trunk/users/src/main/java/org/hps/users/celentan/LedOnlineOfflineComparisonDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/celentan/LedOnlineOfflineComparisonDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/celentan/LedOnlineOfflineComparisonDriver.java Wed Mar 9 11:43:24 2016
@@ -46,161 +46,161 @@
public class LedOnlineOfflineComparisonDriver extends Driver {
- int runNumber;
-
- AIDA aida;
-
- DatabaseConditionsManager conditionsManager;
-
- private EcalChannelCollection ChannelCollection;
- private EcalLedCollection LEDCollection;
- private EcalConditions ecalConditions;
- private EcalLedCalibrationCollection LEDCalibrations;
-
-
- IHistogram1D hChargeChannelsOnline;
- IHistogram1D hChargeChannelsOffline;
- IHistogram1D hChargeChannelsRatio;
- IHistogram1D hChargeChannelsRatioAll;
-
- IHistogram2D hChargeChannelsRatio2D;
-
- Map < Integer,Double > onlineResponse;
- Map < Integer,Double > offlineResponse;
- Map < Integer,Double > onlineRMS;
- Map < Integer,Double > offlineRMS;
-
-
- private static final int NUM_CHANNELS = 442;
- /**
- * Your Driver should have a public constructor.
- */
- public LedOnlineOfflineComparisonDriver() {
- getLogger().info("Hello LedOnlineOfflineComparisonDriver!");
- }
-
-
- /**
- * Process a single event.
- * Your analysis code should go in here.
- * @param event The LCSim event to process.
- */
- public void process(EventHeader event) {
-
- }
-
- /**
- * Initialization code should go here that doesn't need the conditions system or Detector.
- */
- public void startOfData() {
- getLogger().info("start of data");
- }
-
- /**
- * Driver setup should go here that needs information from the conditions system or Detector.
- * @param detector The LCSim Detector object.
- */
- public void detectorChanged(Detector detector) {
- getLogger().info("detector changed");
-
- onlineResponse = new HashMap< Integer , Double >();
- offlineResponse= new HashMap< Integer , Double >();
- onlineRMS= new HashMap< Integer , Double >();
- offlineRMS= new HashMap< Integer , Double >();
-
- conditionsManager = DatabaseConditionsManager.getInstance();
- ChannelCollection = conditionsManager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData();
- ecalConditions = conditionsManager.getEcalConditions();
- LEDCollection = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
- LEDCalibrations = conditionsManager.getCachedConditions(EcalLedCalibrationCollection.class,"ecal_led_calibrations").getCachedData();
-
-
- // Setup plots
- aida = AIDA.defaultInstance();
- aida.tree().cd("/");
- hChargeChannelsOnline = aida.histogram1D("LEDonline",NUM_CHANNELS,-0.5,NUM_CHANNELS-0.5);
- hChargeChannelsOffline = aida.histogram1D("LEDoffline",NUM_CHANNELS,-0.5,NUM_CHANNELS-0.5);
- hChargeChannelsRatio = aida.histogram1D("ratio",NUM_CHANNELS,-0.5,NUM_CHANNELS-0.5);
- hChargeChannelsRatioAll = aida.histogram1D("ratioAll",100,-0.03,0.03);
-
- hChargeChannelsRatio2D = aida.histogram2D("ratio2D",47, -23.5, 23.5, 11, -5.5, 5.5);
- }
-
-
- public void endOfData(){
-
- int channel_id;
- int row,column;
- double led_response_online,led_rms_online;
- double led_response_offline,led_rms_offline;
- double diff,ratio;
-
-
- getLogger().info("end of data");
- runNumber= conditionsManager.getRun();
- System.out.println("runNumber is:"+runNumber);
- for (EcalLedCalibration LEDcalibration : LEDCalibrations){
-
- channel_id=LEDcalibration.getFieldValue("ecal_channel_id");
- led_response_online=LEDcalibration.getFieldValue("led_response");
- led_rms_online=LEDcalibration.getFieldValue("rms");
-
-
- onlineResponse.put(channel_id,led_response_online);
- onlineRMS.put(channel_id, led_rms_online);
- }
- String fileName = runNumber+".raw.txt";
- try {
- //Create object of FileReader
- FileReader inputFile = new FileReader(fileName);
-
- //Instantiate the BufferedReader Class
- BufferedReader bufferReader = new BufferedReader(inputFile);
-
- //Variable to hold the one line data
- String line;
-
- while ((line = bufferReader.readLine()) != null) {
- Scanner s=new Scanner(line);
- channel_id=s.nextInt();
- column=s.nextInt();
- row=s.nextInt();
- led_response_offline=s.nextDouble();
- led_rms_offline=s.nextDouble();
- s.close();
- offlineResponse.put(channel_id,led_response_offline);
- offlineRMS.put(channel_id, led_rms_offline);
-
-
- }
- //Close the buffer reader
- bufferReader.close();
- } catch (IOException e) {
- System.err.println(e);
- }
- /*now some comparisons*/
- for (EcalLedCalibration LEDcalibration : LEDCalibrations){
- channel_id=LEDcalibration.getFieldValue("ecal_channel_id");
-
- EcalChannel channel = ChannelCollection.findChannel(channel_id);
- row=channel.getY();
- column=channel.getX();
-
- System.out.println(channel_id+" "+column+" "+row);
- led_response_online=onlineResponse.get(channel_id);
- led_response_offline=offlineResponse.get(channel_id);
-
- diff=led_response_online-led_response_offline;
- ratio=2*diff/(led_response_online+led_response_offline);
-
- ratio = led_response_online/led_response_offline;
-
- hChargeChannelsOnline.fill(channel_id,led_response_online);
- hChargeChannelsOffline.fill(channel_id,led_response_offline);
- hChargeChannelsRatio.fill(channel_id,ratio);
- hChargeChannelsRatioAll.fill(ratio);
- if ((column==-14)&&(row==-2)) continue;
- hChargeChannelsRatio2D.fill(column,row,ratio);
- }
- }
+ int runNumber;
+
+ AIDA aida;
+
+ DatabaseConditionsManager conditionsManager;
+
+ private EcalChannelCollection ChannelCollection;
+ private EcalLedCollection LEDCollection;
+ private EcalConditions ecalConditions;
+ private EcalLedCalibrationCollection LEDCalibrations;
+
+
+ IHistogram1D hChargeChannelsOnline;
+ IHistogram1D hChargeChannelsOffline;
+ IHistogram1D hChargeChannelsRatio;
+ IHistogram1D hChargeChannelsRatioAll;
+
+ IHistogram2D hChargeChannelsRatio2D;
+
+ Map < Integer,Double > onlineResponse;
+ Map < Integer,Double > offlineResponse;
+ Map < Integer,Double > onlineRMS;
+ Map < Integer,Double > offlineRMS;
+
+
+ private static final int NUM_CHANNELS = 442;
+ /**
+ * Your Driver should have a public constructor.
+ */
+ public LedOnlineOfflineComparisonDriver() {
+ getLogger().info("Hello LedOnlineOfflineComparisonDriver!");
+ }
+
+
+ /**
+ * Process a single event.
+ * Your analysis code should go in here.
+ * @param event The LCSim event to process.
+ */
+ public void process(EventHeader event) {
+
+ }
+
+ /**
+ * Initialization code should go here that doesn't need the conditions system or Detector.
+ */
+ public void startOfData() {
+ getLogger().info("start of data");
+ }
+
+ /**
+ * Driver setup should go here that needs information from the conditions system or Detector.
+ * @param detector The LCSim Detector object.
+ */
+ public void detectorChanged(Detector detector) {
+ getLogger().info("detector changed");
+
+ onlineResponse = new HashMap< Integer , Double >();
+ offlineResponse= new HashMap< Integer , Double >();
+ onlineRMS= new HashMap< Integer , Double >();
+ offlineRMS= new HashMap< Integer , Double >();
+
+ conditionsManager = DatabaseConditionsManager.getInstance();
+ ChannelCollection = conditionsManager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData();
+ ecalConditions = conditionsManager.getEcalConditions();
+ LEDCollection = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
+ LEDCalibrations = conditionsManager.getCachedConditions(EcalLedCalibrationCollection.class,"ecal_led_calibrations").getCachedData();
+
+
+ // Setup plots
+ aida = AIDA.defaultInstance();
+ aida.tree().cd("/");
+ hChargeChannelsOnline = aida.histogram1D("LEDonline",NUM_CHANNELS,-0.5,NUM_CHANNELS-0.5);
+ hChargeChannelsOffline = aida.histogram1D("LEDoffline",NUM_CHANNELS,-0.5,NUM_CHANNELS-0.5);
+ hChargeChannelsRatio = aida.histogram1D("ratio",NUM_CHANNELS,-0.5,NUM_CHANNELS-0.5);
+ hChargeChannelsRatioAll = aida.histogram1D("ratioAll",100,-0.03,0.03);
+
+ hChargeChannelsRatio2D = aida.histogram2D("ratio2D",47, -23.5, 23.5, 11, -5.5, 5.5);
+ }
+
+
+ public void endOfData(){
+
+ int channel_id;
+ int row,column;
+ double led_response_online,led_rms_online;
+ double led_response_offline,led_rms_offline;
+ double diff,ratio;
+
+
+ getLogger().info("end of data");
+ runNumber= conditionsManager.getRun();
+ System.out.println("runNumber is:"+runNumber);
+ for (EcalLedCalibration LEDcalibration : LEDCalibrations){
+
+ channel_id=LEDcalibration.getFieldValue("ecal_channel_id");
+ led_response_online=LEDcalibration.getFieldValue("led_response");
+ led_rms_online=LEDcalibration.getFieldValue("rms");
+
+
+ onlineResponse.put(channel_id,led_response_online);
+ onlineRMS.put(channel_id, led_rms_online);
+ }
+ String fileName = runNumber+".raw.txt";
+ try {
+ //Create object of FileReader
+ FileReader inputFile = new FileReader(fileName);
+
+ //Instantiate the BufferedReader Class
+ BufferedReader bufferReader = new BufferedReader(inputFile);
+
+ //Variable to hold the one line data
+ String line;
+
+ while ((line = bufferReader.readLine()) != null) {
+ Scanner s=new Scanner(line);
+ channel_id=s.nextInt();
+ column=s.nextInt();
+ row=s.nextInt();
+ led_response_offline=s.nextDouble();
+ led_rms_offline=s.nextDouble();
+ s.close();
+ offlineResponse.put(channel_id,led_response_offline);
+ offlineRMS.put(channel_id, led_rms_offline);
+
+
+ }
+ //Close the buffer reader
+ bufferReader.close();
+ } catch (IOException e) {
+ System.err.println(e);
+ }
+ /*now some comparisons*/
+ for (EcalLedCalibration LEDcalibration : LEDCalibrations){
+ channel_id=LEDcalibration.getFieldValue("ecal_channel_id");
+
+ EcalChannel channel = ChannelCollection.findChannel(channel_id);
+ row=channel.getY();
+ column=channel.getX();
+
+ System.out.println(channel_id+" "+column+" "+row);
+ led_response_online=onlineResponse.get(channel_id);
+ led_response_offline=offlineResponse.get(channel_id);
+
+ diff=led_response_online-led_response_offline;
+ ratio=2*diff/(led_response_online+led_response_offline);
+
+ ratio = led_response_online/led_response_offline;
+
+ hChargeChannelsOnline.fill(channel_id,led_response_online);
+ hChargeChannelsOffline.fill(channel_id,led_response_offline);
+ hChargeChannelsRatio.fill(channel_id,ratio);
+ hChargeChannelsRatioAll.fill(ratio);
+ if ((column==-14)&&(row==-2)) continue;
+ hChargeChannelsRatio2D.fill(column,row,ratio);
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java Wed Mar 9 11:43:24 2016
@@ -22,122 +22,122 @@
public class RawPedestalComputator extends Driver {
- String inputCollectionRaw = "EcalReadoutHits";
- int row, column;
- double energy;
+ String inputCollectionRaw = "EcalReadoutHits";
+ int row, column;
+ double energy;
- int[] windowRaw = new int[47 * 11];// in case we have the raw waveform, this is the window lenght (in samples)
- boolean[] isFirstRaw = new boolean[47 * 11];
+ int[] windowRaw = new int[47 * 11];// in case we have the raw waveform, this is the window lenght (in samples)
+ boolean[] isFirstRaw = new boolean[47 * 11];
- double[] pedestal = new double[47 * 11];
- double[] noise = new double[47 * 11];
- double[] result;
+ double[] pedestal = new double[47 * 11];
+ double[] noise = new double[47 * 11];
+ double[] result;
- int pedSamples = 50;
- int nEvents = 0;
+ int pedSamples = 50;
+ int nEvents = 0;
- private EcalConditions conditions;
- private IIdentifierHelper helper;
- private int systemId;
+ private EcalConditions conditions;
+ private IIdentifierHelper helper;
+ private int systemId;
- @Override
- public void detectorChanged(Detector detector) {
+ @Override
+ public void detectorChanged(Detector detector) {
- DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
- this.conditions = manager.getCachedConditions(EcalConditions.class, "ecal_conditions").getCachedData();
- this.helper = detector.getSubdetector("Ecal").getDetectorElement().getIdentifierHelper();
- this.systemId = detector.getSubdetector("Ecal").getSystemID();
+ DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
+ this.conditions = manager.getCachedConditions(EcalConditions.class, "ecal_conditions").getCachedData();
+ this.helper = detector.getSubdetector("Ecal").getDetectorElement().getIdentifierHelper();
+ this.systemId = detector.getSubdetector("Ecal").getSystemID();
- System.out.println("Pedestal computator: detector changed");
- for (int ii = 0; ii < 11 * 47; ii++) {
- isFirstRaw[ii] = true;
- pedestal[ii] = 0;
- noise[ii] = 0;
- }
- }
+ System.out.println("Pedestal computator: detector changed");
+ for (int ii = 0; ii < 11 * 47; ii++) {
+ isFirstRaw[ii] = true;
+ pedestal[ii] = 0;
+ noise[ii] = 0;
+ }
+ }
- @Override
- public void process(EventHeader event) {
- int ii = 0;
- if (event.hasCollection(RawTrackerHit.class, inputCollectionRaw)) {
- List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollectionRaw);
- for (RawTrackerHit hit : hits) {
- row = hit.getIdentifierFieldValue("iy");
- column = hit.getIdentifierFieldValue("ix");
- ii = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
- if ((row != 0) && (column != 0)) {
- if (!EcalMonitoringUtilities.isInHole(row, column)) {
- if (isFirstRaw[ii]) { // at the very first hit we read for this channel, we need to read the window length and save it
- isFirstRaw[ii] = false;
- windowRaw[ii] = hit.getADCValues().length;
- }
- result = EcalUtils.computeAmplitude(hit.getADCValues(), windowRaw[ii], pedSamples);
- pedestal[ii] += result[1];
- noise[ii] += result[2];
- }
- }
- }
- }
+ @Override
+ public void process(EventHeader event) {
+ int ii = 0;
+ if (event.hasCollection(RawTrackerHit.class, inputCollectionRaw)) {
+ List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollectionRaw);
+ for (RawTrackerHit hit : hits) {
+ row = hit.getIdentifierFieldValue("iy");
+ column = hit.getIdentifierFieldValue("ix");
+ ii = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
+ if ((row != 0) && (column != 0)) {
+ if (!EcalMonitoringUtilities.isInHole(row, column)) {
+ if (isFirstRaw[ii]) { // at the very first hit we read for this channel, we need to read the window length and save it
+ isFirstRaw[ii] = false;
+ windowRaw[ii] = hit.getADCValues().length;
+ }
+ result = EcalUtils.computeAmplitude(hit.getADCValues(), windowRaw[ii], pedSamples);
+ pedestal[ii] += result[1];
+ noise[ii] += result[2];
+ }
+ }
+ }
+ }
- if (event.hasCollection(CalorimeterHit.class, "EcalCalHits")) {
- List<CalorimeterHit> hits = event.get(CalorimeterHit.class,"EcalCalHits");
- for (CalorimeterHit hit : hits) {
- column = hit.getIdentifierFieldValue("ix");
- row = hit.getIdentifierFieldValue("iy");
- energy = hit.getCorrectedEnergy();
- System.out.println("Row: "+row+" Column "+column+" Energy: "+energy);
- }
- }
+ if (event.hasCollection(CalorimeterHit.class, "EcalCalHits")) {
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class,"EcalCalHits");
+ for (CalorimeterHit hit : hits) {
+ column = hit.getIdentifierFieldValue("ix");
+ row = hit.getIdentifierFieldValue("iy");
+ energy = hit.getCorrectedEnergy();
+ System.out.println("Row: "+row+" Column "+column+" Energy: "+energy);
+ }
+ }
- nEvents++;
- }
+ nEvents++;
+ }
- @Override
- public void endOfData() {
- try {
- PrintWriter writerTop = new PrintWriter("default01.ped", "UTF-8");
- PrintWriter writerBottom = new PrintWriter("default02.ped", "UTF-8");
+ @Override
+ public void endOfData() {
+ try {
+ PrintWriter writerTop = new PrintWriter("default01.ped", "UTF-8");
+ PrintWriter writerBottom = new PrintWriter("default02.ped", "UTF-8");
- for (int ii = 0; ii < 11 * 47; ii++) {
- int row, column;
- row = EcalMonitoringUtilities.getRowFromHistoID(ii);
- column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
- if (EcalMonitoringUtilities.isInHole(row, column))
- continue;
- if ((row == 0) || (column == 0))
- continue;
- pedestal[ii] /= nEvents;
- noise[ii] /= nEvents;
+ for (int ii = 0; ii < 11 * 47; ii++) {
+ int row, column;
+ row = EcalMonitoringUtilities.getRowFromHistoID(ii);
+ column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
+ if (EcalMonitoringUtilities.isInHole(row, column))
+ continue;
+ if ((row == 0) || (column == 0))
+ continue;
+ pedestal[ii] /= nEvents;
+ noise[ii] /= nEvents;
- // FIXME: Is this right? --JM
- EcalChannel ecalChannel = conditions.getChannelCollection().findChannel(new GeometryId(helper, new int[] {systemId, column, row}));
- int crate = ecalChannel.getCrate();
- int slot = ecalChannel.getSlot();
- int channel = ecalChannel.getChannel();
+ // FIXME: Is this right? --JM
+ EcalChannel ecalChannel = conditions.getChannelCollection().findChannel(new GeometryId(helper, new int[] {systemId, column, row}));
+ int crate = ecalChannel.getCrate();
+ int slot = ecalChannel.getSlot();
+ int channel = ecalChannel.getChannel();
- System.out.println(column + " " + row + " " + crate + " " + slot + " " + channel + " " + pedestal[ii] + " " + noise[ii]);
+ System.out.println(column + " " + row + " " + crate + " " + slot + " " + channel + " " + pedestal[ii] + " " + noise[ii]);
- if (crate == 37) {
- writerTop.print(slot + " " + channel + " " + (int) (Math.round(pedestal[ii])) + " " + (int) (Math.round(noise[ii])) + "\r\n");
- } else if (crate == 39) {
- writerBottom.print(slot + " " + channel + " " + (int) (Math.round(pedestal[ii])) + " " + (int) (Math.round(noise[ii])) + "\r\n");
- }
+ if (crate == 37) {
+ writerTop.print(slot + " " + channel + " " + (int) (Math.round(pedestal[ii])) + " " + (int) (Math.round(noise[ii])) + "\r\n");
+ } else if (crate == 39) {
+ writerBottom.print(slot + " " + channel + " " + (int) (Math.round(pedestal[ii])) + " " + (int) (Math.round(noise[ii])) + "\r\n");
+ }
- }
+ }
- writerTop.close();
- writerBottom.close();
- } catch (FileNotFoundException fnfe) {
+ writerTop.close();
+ writerBottom.close();
+ } catch (FileNotFoundException fnfe) {
- System.out.println(fnfe.getMessage());
+ System.out.println(fnfe.getMessage());
- }
+ }
- catch (IOException ioe) {
+ catch (IOException ioe) {
- System.out.println(ioe.getMessage());
+ System.out.println(ioe.getMessage());
- }
- }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/celentan/StripChartTest.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/celentan/StripChartTest.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/celentan/StripChartTest.java Wed Mar 9 11:43:24 2016
@@ -6,5 +6,5 @@
*/
public class StripChartTest {
- int dummy;
+ int dummy;
}
Modified: java/trunk/users/src/main/java/org/hps/users/holly/ClusterDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/holly/ClusterDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/holly/ClusterDriver.java Wed Mar 9 11:43:24 2016
@@ -84,8 +84,8 @@
* @param correctionClusterCollectionName
*/
public void setCorrectionClusterCollectionName(String correctionClusterCollectionName){
- this.correctionClusterCollectionName = correctionClusterCollectionName;
- getLogger().config("correctionClusterCollectionName = " + this.correctionClusterCollectionName);
+ this.correctionClusterCollectionName = correctionClusterCollectionName;
+ getLogger().config("correctionClusterCollectionName = " + this.correctionClusterCollectionName);
}
/**
@@ -147,7 +147,7 @@
* @param copyClusterCollection
*/
public void setCopyClusterCollection(boolean copyClusterCollection) {
- this.copyClusterCollection = copyClusterCollection;
+ this.copyClusterCollection = copyClusterCollection;
}
/**
@@ -267,9 +267,9 @@
event.put(outputClusterCollectionName, clusters, Cluster.class, flags);
if (copyClusterCollection
- && event.hasCollection(Cluster.class, outputClusterCollectionName)){
- List<Cluster> clusterCopy = event.get(Cluster.class, outputClusterCollectionName);
- event.put(correctionClusterCollectionName,clusterCopy,Cluster.class,flags);
+ && event.hasCollection(Cluster.class, outputClusterCollectionName)){
+ List<Cluster> clusterCopy = event.get(Cluster.class, outputClusterCollectionName);
+ event.put(correctionClusterCollectionName,clusterCopy,Cluster.class,flags);
}
if (!this.writeClusterCollection) {
Modified: java/trunk/users/src/main/java/org/hps/users/holly/EcalClusterICPosition.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/holly/EcalClusterICPosition.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/holly/EcalClusterICPosition.java Wed Mar 9 11:43:24 2016
@@ -53,7 +53,7 @@
*
*/
public class EcalClusterICPosition extends Driver {
- // File writer to output cluster results.
+ // File writer to output cluster results.
FileWriter writeHits;
// LCIO collection name for calorimeter hits.
String ecalCollectionName="EcalCalHits";
@@ -95,7 +95,7 @@
public void setTrackerCollectionName(String trackerCollectionName){
- this.trackerCollectionName = trackerCollectionName;
+ this.trackerCollectionName = trackerCollectionName;
}
@@ -112,7 +112,7 @@
}
public void setRejectedHitName(String rejectedHitName){
- this.rejectedHitName = rejectedHitName;
+ this.rejectedHitName = rejectedHitName;
}
/**
@@ -176,7 +176,7 @@
//get the list of Ecal scoring Tracker hits
public ArrayList<SimTrackerHit> trackHits = new ArrayList<SimTrackerHit>();
public void addTrackHit(SimTrackerHit trHit){
- trackHits.add(trHit);
+ trackHits.add(trHit);
}
// Make a map for quick calculation of the x-y position of crystal face
@@ -187,11 +187,11 @@
//attempt for mc particle list
public void addMCGen(MCParticle genMC){
- mcList.add(genMC);
+ mcList.add(genMC);
}
public void startOfData() {
- // Make sure that the calorimeter hit collection name is defined.
+ // Make sure that the calorimeter hit collection name is defined.
if (ecalCollectionName == null) {
throw new RuntimeException("The parameter ecalCollectionName was not set!");
}
@@ -211,25 +211,25 @@
public void detectorChanged(Detector detector) {
// Get the calorimeter.
- HPSEcal3 ecal = (HPSEcal3) detector.getSubdetector(ecalName);
-
+ HPSEcal3 ecal = (HPSEcal3) detector.getSubdetector(ecalName);
+
// Store the map of neighbor crystals for the current calorimeter set-up.
neighborMap = ecal.getNeighborMap();
}
public void process(EventHeader event) {
- // Make sure the current event contains calorimeter hits.
+ // Make sure the current event contains calorimeter hits.
if (event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
-
- // Get generated hits
+
+ // Get generated hits
List<MCParticle> genPart = event.getMCParticles();
for(MCParticle m : genPart){
- mcList.add(m);
+ mcList.add(m);
}
List<SimTrackerHit> trHit = event.get(SimTrackerHit.class, trackerCollectionName);
for (SimTrackerHit t : trHit){
- trackHits.add(t);
+ trackHits.add(t);
}
@@ -241,13 +241,13 @@
}
public void createClusters(EventHeader event) throws IOException {
-
- // Create a list to store the event hits in.
+
+ // Create a list to store the event hits in.
List<CalorimeterHit> hitList = new ArrayList<CalorimeterHit>();
List<CalorimeterHit> baseList = event.get(CalorimeterHit.class, ecalCollectionName);
for(CalorimeterHit r : baseList) {
- hitEnergyMap.put(r, (r.getCorrectedEnergy()+rNum.nextGaussian()*0.003));
- hitList.add(r);
+ hitEnergyMap.put(r, (r.getCorrectedEnergy()+rNum.nextGaussian()*0.003));
+ hitList.add(r);
}
// Create a list to store the newly created clusters in.
@@ -263,32 +263,32 @@
// designated threshold.
filterLoop:
for(int index = hitList.size() - 1; index >= 0; index--) {
- // If the hit is below threshold or outside of time window, kill it.
-/* if((hitList.get(index).getCorrectedEnergy() < hitEnergyThreshold)||
- (timeCut && (hitList.get(index).getTime() < minTime || hitList.get(index).getTime() > (minTime + timeWindow)))) {
- rejectedHitList.add(hitList.get(index));
- hitList.remove(index);
- }*/
- if((hitEnergyMap.get(hitList.get(index))< hitEnergyThreshold)||
- (timeCut && (hitList.get(index).getTime() < minTime || hitList.get(index).getTime() > (minTime + timeWindow)))) {
- rejectedHitList.add(hitList.get(index));
- hitList.remove(index);
- }
-
-
-
-
-
- // Since the hits are sorted by energy from highest to
- // lowest, any hit that is above threshold means that all
- // subsequent hits will also be above threshold. Continue through
- // list to check in time window.
- else { continue; }
- }
-
- // Create a map to connect the cell ID of a calorimeter crystal
+ // If the hit is below threshold or outside of time window, kill it.
+/* if((hitList.get(index).getCorrectedEnergy() < hitEnergyThreshold)||
+ (timeCut && (hitList.get(index).getTime() < minTime || hitList.get(index).getTime() > (minTime + timeWindow)))) {
+ rejectedHitList.add(hitList.get(index));
+ hitList.remove(index);
+ }*/
+ if((hitEnergyMap.get(hitList.get(index))< hitEnergyThreshold)||
+ (timeCut && (hitList.get(index).getTime() < minTime || hitList.get(index).getTime() > (minTime + timeWindow)))) {
+ rejectedHitList.add(hitList.get(index));
+ hitList.remove(index);
+ }
+
+
+
+
+
+ // Since the hits are sorted by energy from highest to
+ // lowest, any hit that is above threshold means that all
+ // subsequent hits will also be above threshold. Continue through
+ // list to check in time window.
+ else { continue; }
+ }
+
+ // Create a map to connect the cell ID of a calorimeter crystal
// to the hit which occurred in that crystal.
- HashMap<Long, CalorimeterHit> hitMap = new HashMap<Long, CalorimeterHit>();
+ HashMap<Long, CalorimeterHit> hitMap = new HashMap<Long, CalorimeterHit>();
for (CalorimeterHit hit : hitList) { hitMap.put(hit.getCellID(), hit); }
// Map a crystal to a list of all clusters in which it is a member.
@@ -297,13 +297,13 @@
// Map a crystal to the seed of the cluster of which it is a member.
HashMap<CalorimeterHit, CalorimeterHit> hitSeedMap = new HashMap<CalorimeterHit, CalorimeterHit>();
- // Set containing hits immediately around a seed hit.
- HashSet<CalorimeterHit> surrSeedSet = new HashSet<CalorimeterHit>();
+ // Set containing hits immediately around a seed hit.
+ HashSet<CalorimeterHit> surrSeedSet = new HashSet<CalorimeterHit>();
// Loop through all calorimeter hits to locate seeds and perform
// first pass calculations for component and common hits.
for (CalorimeterHit hit : hitList) {
- // Get the set of all neighboring crystals to the current hit.
+ // Get the set of all neighboring crystals to the current hit.
Set<Long> neighbors = neighborMap.get(hit.getCellID());
// Generate a list to store any neighboring hits in.
@@ -313,11 +313,11 @@
// which corresponds to a neighbor, add it to the list of
// neighboring hits.
for (Long neighbor : neighbors) {
- // Get the neighboring hit.
- CalorimeterHit neighborHit = hitMap.get(neighbor);
-
- // If it exists, add it to the list.
- if(neighborHit != null) { neighborHits.add(neighborHit); }
+ // Get the neighboring hit.
+ CalorimeterHit neighborHit = hitMap.get(neighbor);
+
+ // If it exists, add it to the list.
+ if(neighborHit != null) { neighborHits.add(neighborHit); }
}
// Track whether the current hit is a seed hit or not.
@@ -328,10 +328,10 @@
// neighboring hits.
seedHitLoop:
for(CalorimeterHit neighbor : neighborHits) {
- if(!equalEnergies(hit, neighbor)) {
- isSeed = false;
- break seedHitLoop;
- }
+ if(!equalEnergies(hit, neighbor)) {
+ isSeed = false;
+ break seedHitLoop;
+ }
}
@@ -343,22 +343,22 @@
else {
// Sort through the list of neighboring hits.
for (CalorimeterHit neighborHit : neighborHits) {
- // Check whether the neighboring hit is a seed.
- if(hitSeedMap.get(neighborHit) == neighborHit) {
+ // Check whether the neighboring hit is a seed.
+ if(hitSeedMap.get(neighborHit) == neighborHit) {
// If the neighboring hit is a seed hit and the
// current hit has been associated with a cluster,
// then it is a common hit between its previous
// seed and the neighboring seed.
if (hitSeedMap.containsKey(hit)) {
- // Check and see if a list of common seeds
- // for this hit already exists or not.
- List<CalorimeterHit> commonHitList = commonHits.get(hit);
-
- // If it does not, make a new one.
- if(commonHitList == null) { commonHitList = new ArrayList<CalorimeterHit>(); }
-
- // Add the neighbors to the seeds to set of
- // common seeds.
+ // Check and see if a list of common seeds
+ // for this hit already exists or not.
+ List<CalorimeterHit> commonHitList = commonHits.get(hit);
+
+ // If it does not, make a new one.
+ if(commonHitList == null) { commonHitList = new ArrayList<CalorimeterHit>(); }
+
+ // Add the neighbors to the seeds to set of
+ // common seeds.
commonHitList.add(neighborHit);
commonHitList.add(hitSeedMap.get(hit));
@@ -368,14 +368,14 @@
}
// If the neighboring hit is a seed hit and the
- // current hit has not been added to a cluster yet
- // associate it with the neighboring seed and note
+ // current hit has not been added to a cluster yet
+ // associate it with the neighboring seed and note
// that it has been clustered.
else {
- hitSeedMap.put(hit, neighborHit);
- surrSeedSet.add(hit);
+ hitSeedMap.put(hit, neighborHit);
+ surrSeedSet.add(hit);
}
- }
+ }
}
}
} // End primary seed loop.
@@ -383,11 +383,11 @@
// Performs second pass calculations for component hits.
secondaryHitsLoop:
for (CalorimeterHit secondaryHit : hitList) {
- // If the secondary hit is not associated with a seed, then
- // the rest of there is nothing further to be done.
- if(!hitSeedMap.containsKey(secondaryHit)) { continue secondaryHitsLoop; }
-
- // Get the secondary hit's neighboring crystals.
+ // If the secondary hit is not associated with a seed, then
+ // the rest of there is nothing further to be done.
+ if(!hitSeedMap.containsKey(secondaryHit)) { continue secondaryHitsLoop; }
+
+ // Get the secondary hit's neighboring crystals.
Set<Long> secondaryNeighbors = neighborMap.get(secondaryHit.getCellID());
// Make a list to store the hits associated with the
@@ -396,27 +396,27 @@
// Loop through the neighboring crystals.
for (Long secondaryNeighbor : secondaryNeighbors) {
- // Get the hit associated with the neighboring crystal.
- CalorimeterHit secondaryNeighborHit = hitMap.get(secondaryNeighbor);
-
- // If the neighboring crystal exists and is not already
- // in a cluster, add it to the list of neighboring hits.
+ // Get the hit associated with the neighboring crystal.
+ CalorimeterHit secondaryNeighborHit = hitMap.get(secondaryNeighbor);
+
+ // If the neighboring crystal exists and is not already
+ // in a cluster, add it to the list of neighboring hits.
if (secondaryNeighborHit != null && !hitSeedMap.containsKey(secondaryNeighborHit)) { //!clusteredHitSet.contains(secondaryNeighborHit)) {
- secondaryNeighborHits.add(secondaryNeighborHit);
+ secondaryNeighborHits.add(secondaryNeighborHit);
}
}
// Loop over the secondary neighbor hits.
for (CalorimeterHit secondaryNeighborHit : secondaryNeighborHits) {
- // If the neighboring hit is of lower energy than the
- // current secondary hit, then associate the neighboring
- // hit with the current secondary hit's seed.
-
- // if (secondaryNeighborHit.getCorrectedEnergy() < secondaryHit.getCorrectedEnergy()) {
- if(!equalEnergies(secondaryNeighborHit, secondaryHit)) {
- hitSeedMap.put(secondaryNeighborHit, hitSeedMap.get(secondaryHit));
+ // If the neighboring hit is of lower energy than the
+ // current secondary hit, then associate the neighboring
+ // hit with the current secondary hit's seed.
+
+ // if (secondaryNeighborHit.getCorrectedEnergy() < secondaryHit.getCorrectedEnergy()) {
+ if(!equalEnergies(secondaryNeighborHit, secondaryHit)) {
+ hitSeedMap.put(secondaryNeighborHit, hitSeedMap.get(secondaryHit));
}
- else {continue;}
+ else {continue;}
}
} // End component hits loop.
@@ -427,10 +427,10 @@
// Performs second pass calculations for common hits.
commonHitsLoop:
for (CalorimeterHit clusteredHit : hitSeedMap.keySet()) {
- // Seed hits are never common hits and can be skipped.
- if(hitSeedMap.get(clusteredHit) == clusteredHit || surrSeedSet.contains(clusteredHit)) { continue commonHitsLoop; }
-
- // Get the current clustered hit's neighboring crystals.
+ // Seed hits are never common hits and can be skipped.
+ if(hitSeedMap.get(clusteredHit) == clusteredHit || surrSeedSet.contains(clusteredHit)) { continue commonHitsLoop; }
+
+ // Get the current clustered hit's neighboring crystals.
Set<Long> clusteredNeighbors = neighborMap.get(clusteredHit.getCellID());
// Store a list of all the clustered hits neighboring
@@ -439,12 +439,12 @@
// Loop through the neighbors and see if they have hits.
for (Long neighbor : clusteredNeighbors) {
- // Get the hit associated with the neighbor.
- CalorimeterHit clusteredNeighborHit = hitMap.get(neighbor);
-
- // If it exists, add it to the neighboring hit list.
+ // Get the hit associated with the neighbor.
+ CalorimeterHit clusteredNeighborHit = hitMap.get(neighbor);
+
+ // If it exists, add it to the neighboring hit list.
if (clusteredNeighborHit != null) {
- clusteredNeighborHits.add(clusteredNeighborHit);
+ clusteredNeighborHits.add(clusteredNeighborHit);
}
}
@@ -453,25 +453,25 @@
// Loop over the clustered neighbor hits.
for (CalorimeterHit clusteredNeighborHit : clusteredNeighborHits) {
- // Check to make sure that the clustered neighbor hit
- // is not already associated with the current clustered
- // hit's seed.
-
+ // Check to make sure that the clustered neighbor hit
+ // is not already associated with the current clustered
+ // hit's seed.
+
if (hitSeedMap.get(clusteredNeighborHit) != clusteredHitSeed){
//if (clusteredHit.getCorrectedEnergy() < clusteredNeighborHit.getCorrectedEnergy()) {
- if(!equalEnergies(clusteredHit, clusteredNeighborHit)){
- // Check and see if a list of common seeds
- // for this hit already exists or not.
- List<CalorimeterHit> commonHitList = commonHits.get(clusteredHit);
-
- // If it does not, make a new one.
- if(commonHitList == null) { commonHitList = new ArrayList<CalorimeterHit>(); }
-
- // Add the neighbors to the seeds to set of
- // common seeds.
+ if(!equalEnergies(clusteredHit, clusteredNeighborHit)){
+ // Check and see if a list of common seeds
+ // for this hit already exists or not.
+ List<CalorimeterHit> commonHitList = commonHits.get(clusteredHit);
+
+ // If it does not, make a new one.
+ if(commonHitList == null) { commonHitList = new ArrayList<CalorimeterHit>(); }
+
+ // Add the neighbors to the seeds to set of
+ // common seeds.
commonHitList.add(clusteredHitSeed);
- commonHitList.add(hitSeedMap.get(clusteredNeighborHit));
+ commonHitList.add(hitSeedMap.get(clusteredNeighborHit));
// Put the common seed list back into the set.
commonHits.put(clusteredHit, commonHitList);
@@ -485,7 +485,7 @@
// Remove any common hits from the clustered hits collection.
for(CalorimeterHit commonHit : commonHits.keySet()) {
- hitSeedMap.remove(commonHit);
+ hitSeedMap.remove(commonHit);
}
@@ -501,7 +501,7 @@
// Get energy of each cluster, excluding common hits
for (CalorimeterHit iSeed : hitList) {
if(hitSeedMap.get(iSeed) == iSeed) {
- seedEnergy.put(iSeed, 0.0);
+ seedEnergy.put(iSeed, 0.0);
}
}
@@ -517,24 +517,24 @@
Map<CalorimeterHit, Double> seedEnergyTot = seedEnergy;
for (Map.Entry<CalorimeterHit, List<CalorimeterHit>> entry1 : commonHits.entrySet()) {
- CalorimeterHit commonCell = entry1.getKey();
- CalorimeterHit seedA = entry1.getValue().get(0);
- CalorimeterHit seedB = entry1.getValue().get(1);
- double eFractionA = seedEnergy.get(seedA)/(seedEnergy.get(seedA)+seedEnergy.get(seedB));
- double eFractionB = seedEnergy.get(seedB)/(seedEnergy.get(seedA)+seedEnergy.get(seedB));
- double currEnergyA = seedEnergyTot.get(seedA);
- double currEnergyB = seedEnergyTot.get(seedB);
- currEnergyA += eFractionA * (hitEnergyMap.get(commonCell));
- currEnergyB += eFractionB * (hitEnergyMap.get(commonCell));
-
- seedEnergyTot.put(seedA, currEnergyA);
- seedEnergyTot.put(seedB, currEnergyB);
+ CalorimeterHit commonCell = entry1.getKey();
+ CalorimeterHit seedA = entry1.getValue().get(0);
+ CalorimeterHit seedB = entry1.getValue().get(1);
+ double eFractionA = seedEnergy.get(seedA)/(seedEnergy.get(seedA)+seedEnergy.get(seedB));
+ double eFractionB = seedEnergy.get(seedB)/(seedEnergy.get(seedA)+seedEnergy.get(seedB));
+ double currEnergyA = seedEnergyTot.get(seedA);
+ double currEnergyB = seedEnergyTot.get(seedB);
+ currEnergyA += eFractionA * (hitEnergyMap.get(commonCell));
+ currEnergyB += eFractionB * (hitEnergyMap.get(commonCell));
+
+ seedEnergyTot.put(seedA, currEnergyA);
+ seedEnergyTot.put(seedB, currEnergyB);
}
// Choose only the highest energy cluster
List<CalorimeterHit> seedList = new ArrayList<CalorimeterHit>();
for (Map.Entry<CalorimeterHit, Double> entry1 : seedEnergyTot.entrySet()) {
- seedList.add(entry1.getKey());
+ seedList.add(entry1.getKey());
}
Collections.sort(seedList, new EnergyComparator());
@@ -550,64 +550,64 @@
double w0 = 3.1;
for (Map.Entry<CalorimeterHit, CalorimeterHit> entry1 : hitSeedMap.entrySet()) {
- CalorimeterHit eSeed1 = entry1.getValue();
- if(seedList.get(0)==eSeed1){// Check for if belonging to highest seed only.
-
-
- // Method 3 calculation.
- // Calculates x-y centroid for each crystal face
-// IGeometryInfo geom = entry1.getKey().getDetectorElement().getGeometry();
-// double[] pos = geom.transformLocalToGlobal(VecOp.add(geom.transformGlobalToLocal(geom.getPosition()),(Hep3Vector)new BasicHep3Vector(0,0,-1*((Trd)geom.getLogicalVolume().getSolid()).getZHalfLength()))).v();
-
- ///////////////////////////////
- // Get the hit indices as a Point.
- int ix = entry1.getKey().getIdentifierFieldValue("ix");
- int iy = entry1.getKey().getIdentifierFieldValue("iy");
- Point hitIndex = new Point(ix, iy);
-
- // Get the corrected position for this index pair.
- Double[] position = correctedPositionMap.get(hitIndex);
-
- // If the result is null, it hasn't been calculated yet.
- if(position == null) {
- // Calculate the corrected position.
- IGeometryInfo geom = entry1.getKey().getDetectorElement().getGeometry();
- double[] pos = geom.transformLocalToGlobal(VecOp.add(geom.transformGlobalToLocal(geom.getPosition()),(Hep3Vector)new BasicHep3Vector(0,0,-1*((Trd)geom.getLogicalVolume().getSolid()).getZHalfLength()))).v();
-
- // Convert the result to a Double[] array.
- position = new Double[3];
- position[0] = pos[0];
- position[1] = pos[1];
- position[2] = pos[2];
-
- // Store the result in the map.
- correctedPositionMap.put(hitIndex, position);
-// writeHits.append("\t"+ix+"\t"+iy+"\t"+position[0]+"\t"+position[1]+"\n"); //write out slic crystal maps
- }
- ///////////////////////////////
- // Method 3:
- eNumX += Math.max(0.0,(w0+Math.log((hitEnergyMap.get(entry1.getKey()))
- /seedEnergyTot.get(eSeed1))))*(correctedPositionMap.get(hitIndex)[0]/10.0);
- eNumY += Math.max(0.0,(w0+Math.log((hitEnergyMap.get(entry1.getKey()))
- /seedEnergyTot.get(eSeed1))))*(correctedPositionMap.get(hitIndex)[1]/10.0);
- eDen += Math.max(0.0, w0+Math.log((hitEnergyMap.get(entry1.getKey()))/
- seedEnergyTot.get(eSeed1)));
-
- // Method 1:
-/* eNumX += (hitEnergyMap.get(entry1.getKey()))*correctedPositionMap.get(hitIndex)[0]/10.0;
- eNumY += (hitEnergyMap.get(entry1.getKey()))*correctedPositionMap.get(hitIndex)[1]/10.0;
- eDen += hitEnergyMap.get(entry1.getKey());
-*/
-
-
- //Method 2:
-/* eNumX += Math.log10(1000*(hitEnergyMap.get(entry1.getKey())))*correctedPositionMap.get(hitIndex)[0]/10.0;
- eNumY += Math.log10(1000*(hitEnergyMap.get(entry1.getKey())))*correctedPositionMap.get(hitIndex)[1]/10.0;
- eDen += Math.log10(1000*(hitEnergyMap.get(entry1.getKey())));
-*/
- crystalAngle = 0.967826*(eSeed1.getIdentifierFieldValue("ix"));
-
- }
+ CalorimeterHit eSeed1 = entry1.getValue();
+ if(seedList.get(0)==eSeed1){// Check for if belonging to highest seed only.
+
+
+ // Method 3 calculation.
+ // Calculates x-y centroid for each crystal face
+// IGeometryInfo geom = entry1.getKey().getDetectorElement().getGeometry();
+// double[] pos = geom.transformLocalToGlobal(VecOp.add(geom.transformGlobalToLocal(geom.getPosition()),(Hep3Vector)new BasicHep3Vector(0,0,-1*((Trd)geom.getLogicalVolume().getSolid()).getZHalfLength()))).v();
+
+ ///////////////////////////////
+ // Get the hit indices as a Point.
+ int ix = entry1.getKey().getIdentifierFieldValue("ix");
+ int iy = entry1.getKey().getIdentifierFieldValue("iy");
+ Point hitIndex = new Point(ix, iy);
+
+ // Get the corrected position for this index pair.
+ Double[] position = correctedPositionMap.get(hitIndex);
+
+ // If the result is null, it hasn't been calculated yet.
+ if(position == null) {
+ // Calculate the corrected position.
+ IGeometryInfo geom = entry1.getKey().getDetectorElement().getGeometry();
+ double[] pos = geom.transformLocalToGlobal(VecOp.add(geom.transformGlobalToLocal(geom.getPosition()),(Hep3Vector)new BasicHep3Vector(0,0,-1*((Trd)geom.getLogicalVolume().getSolid()).getZHalfLength()))).v();
+
+ // Convert the result to a Double[] array.
+ position = new Double[3];
+ position[0] = pos[0];
+ position[1] = pos[1];
+ position[2] = pos[2];
+
+ // Store the result in the map.
+ correctedPositionMap.put(hitIndex, position);
+// writeHits.append("\t"+ix+"\t"+iy+"\t"+position[0]+"\t"+position[1]+"\n"); //write out slic crystal maps
+ }
+ ///////////////////////////////
+ // Method 3:
+ eNumX += Math.max(0.0,(w0+Math.log((hitEnergyMap.get(entry1.getKey()))
+ /seedEnergyTot.get(eSeed1))))*(correctedPositionMap.get(hitIndex)[0]/10.0);
+ eNumY += Math.max(0.0,(w0+Math.log((hitEnergyMap.get(entry1.getKey()))
+ /seedEnergyTot.get(eSeed1))))*(correctedPositionMap.get(hitIndex)[1]/10.0);
+ eDen += Math.max(0.0, w0+Math.log((hitEnergyMap.get(entry1.getKey()))/
+ seedEnergyTot.get(eSeed1)));
+
+ // Method 1:
+/* eNumX += (hitEnergyMap.get(entry1.getKey()))*correctedPositionMap.get(hitIndex)[0]/10.0;
+ eNumY += (hitEnergyMap.get(entry1.getKey()))*correctedPositionMap.get(hitIndex)[1]/10.0;
+ eDen += hitEnergyMap.get(entry1.getKey());
+*/
+
+
+ //Method 2:
+/* eNumX += Math.log10(1000*(hitEnergyMap.get(entry1.getKey())))*correctedPositionMap.get(hitIndex)[0]/10.0;
+ eNumY += Math.log10(1000*(hitEnergyMap.get(entry1.getKey())))*correctedPositionMap.get(hitIndex)[1]/10.0;
+ eDen += Math.log10(1000*(hitEnergyMap.get(entry1.getKey())));
+*/
+ crystalAngle = 0.967826*(eSeed1.getIdentifierFieldValue("ix"));
+
+ }
}
@@ -621,36 +621,36 @@
if(trackHits.size() != 0 ){
-
- // Calculates the final generated particle position
- double d0 = 139.3 - trackHits.get(0).getPositionVec().z()/10.0;
- double px = trackHits.get(0).getMomentum()[0];
- double py = trackHits.get(0).getMomentum()[1];
- double pz = trackHits.get(0).getMomentum()[2];
- double xpos = trackHits.get(0).getPosition()[0]/10.0;
- double ypos = trackHits.get(0).getPosition()[1]/10.0;
-
- double xGen = xpos + d0*px/pz;
- double yGen = ypos + d0*py/pz;
-
- boolean validNum = false;
- if((Math.abs(xCl)>0)&&(Math.abs(yCl)>0)&&(Math.abs(xGen)>0)&&(Math.abs(yGen)>0)){
- validNum=true;
- }
-
-
-
- //position fitting
-// writeHits.append("\t"+seedList.get(0).getIdentifierFieldValue("ix")+"\t"+seedList.get(0).getIdentifierFieldValue("iy")+"\t"
-// +xCl+"\t"+yCl+"\t"+xF+"\t"+yF+"\t"+mcList.get(0).getEnergy()+"\t"+crystalAngle+"\t"+ECl+"\n");
- if(validNum==true){
-// writeHits.append("\t"+xCl+"\t"+yCl+"\t"+xGen+"\t"+yGen+"\t"+mcList.get(0).getEnergy()+"\t"+crystalAngle+"\t"+ECl+"\n");
-
- }
-
- }
-
-
+
+ // Calculates the final generated particle position
+ double d0 = 139.3 - trackHits.get(0).getPositionVec().z()/10.0;
+ double px = trackHits.get(0).getMomentum()[0];
+ double py = trackHits.get(0).getMomentum()[1];
+ double pz = trackHits.get(0).getMomentum()[2];
+ double xpos = trackHits.get(0).getPosition()[0]/10.0;
+ double ypos = trackHits.get(0).getPosition()[1]/10.0;
+
+ double xGen = xpos + d0*px/pz;
+ double yGen = ypos + d0*py/pz;
+
+ boolean validNum = false;
+ if((Math.abs(xCl)>0)&&(Math.abs(yCl)>0)&&(Math.abs(xGen)>0)&&(Math.abs(yGen)>0)){
+ validNum=true;
+ }
+
+
+
+ //position fitting
+// writeHits.append("\t"+seedList.get(0).getIdentifierFieldValue("ix")+"\t"+seedList.get(0).getIdentifierFieldValue("iy")+"\t"
+// +xCl+"\t"+yCl+"\t"+xF+"\t"+yF+"\t"+mcList.get(0).getEnergy()+"\t"+crystalAngle+"\t"+ECl+"\n");
+ if(validNum==true){
+// writeHits.append("\t"+xCl+"\t"+yCl+"\t"+xGen+"\t"+yGen+"\t"+mcList.get(0).getEnergy()+"\t"+crystalAngle+"\t"+ECl+"\n");
+
+ }
+
+ }
+
+
}// end seedList.size != 0
int flag = 1 << LCIOConstants.CLBIT_HITS;
@@ -663,95 +663,95 @@
public void endOfData() {
- // Close the event display output writer.
+ // Close the event display output writer.
try { writeHits.close(); }
catch (IOException e) { }
}
private static class EnergyComparator implements Comparator<CalorimeterHit> {
- /**
- * Compares the first hit with respect to the second. This
- * method will compare hits first by energy, and the spatially.
- * In the case of equal energy hits, the hit closest to the
- * beam gap and closest to the positron side of the detector
- * will be selected. If all of these conditions are true, the
- * hit with the positive y-index will be selected. Hits with
- * all four conditions matching are the same hit.
- * @param hit1 The hit to compare.
- * @param hit2 The hit with respect to which the first should
- * be compared.
- */
+ /**
+ * Compares the first hit with respect to the second. This
+ * method will compare hits first by energy, and the spatially.
+ * In the case of equal energy hits, the hit closest to the
+ * beam gap and closest to the positron side of the detector
+ * will be selected. If all of these conditions are true, the
+ * hit with the positive y-index will be selected. Hits with
+ * all four conditions matching are the same hit.
+ * @param hit1 The hit to compare.
+ * @param hit2 The hit with respect to which the first should
+ * be compared.
+ */
public int compare(CalorimeterHit hit1, CalorimeterHit hit2) {
- // Hits are sorted on a hierarchy by three conditions. First,
- // the hits with the highest energy come first. Next, they
- // are ranked by vertical proximity to the beam gap, and
- // lastly, they are sorted by horizontal proximity to the
- // positron side of the detector.
-
- // Get the hit energies.
- double[] e = { hit1.getCorrectedEnergy(), hit2.getCorrectedEnergy() };
-
- // Perform the energy comparison. The higher energy hit
- // will be ordered first.
- if(e[0] < e[1]) { return 1; }
- else if(e[0] > e[1]) { return -1; }
-
- // If the hits are the same energy, we must perform the
- // spatial comparisons.
- else {
- // Get the position with respect to the beam gap.
- int[] iy = { Math.abs(hit1.getIdentifierFieldValue("iy")), Math.abs(hit2.getIdentifierFieldValue("iy")) };
-
- // The closest hit is first.
- if(iy[0] > iy[1]) { return -1; }
- else if(iy[0] < iy[1]) { return 1; }
-
- // Hits that are identical in vertical distance from
- // beam gap and energy are differentiated with distance
- // horizontally from the positron side of the detector.
- else {
- // Get the position from the positron side.
- int[] ix = { hit1.getIdentifierFieldValue("ix"), hit2.getIdentifierFieldValue("ix") };
-
- // The closest hit is first.
- if(ix[0] > ix[1]) { return 1; }
- else if(ix[0] < ix[1]) { return -1; }
-
- // If all of these checks are the same, compare
- // the raw value for iy. If these are identical,
- // then the two hits are the same. Otherwise, sort
- // the numerical value of iy. (This removes the
- // issue where hits (x, y) and (x, -y) can have
- // the same energy and be otherwise seen as the
- // same hit from the above checks.
- else { return Integer.compare(hit1.getIdentifierFieldValue("iy"), hit2.getIdentifierFieldValue("iy")); }
- }
- }
+ // Hits are sorted on a hierarchy by three conditions. First,
+ // the hits with the highest energy come first. Next, they
+ // are ranked by vertical proximity to the beam gap, and
+ // lastly, they are sorted by horizontal proximity to the
+ // positron side of the detector.
+
+ // Get the hit energies.
+ double[] e = { hit1.getCorrectedEnergy(), hit2.getCorrectedEnergy() };
+
+ // Perform the energy comparison. The higher energy hit
+ // will be ordered first.
+ if(e[0] < e[1]) { return 1; }
+ else if(e[0] > e[1]) { return -1; }
+
+ // If the hits are the same energy, we must perform the
+ // spatial comparisons.
+ else {
+ // Get the position with respect to the beam gap.
+ int[] iy = { Math.abs(hit1.getIdentifierFieldValue("iy")), Math.abs(hit2.getIdentifierFieldValue("iy")) };
+
+ // The closest hit is first.
+ if(iy[0] > iy[1]) { return -1; }
+ else if(iy[0] < iy[1]) { return 1; }
+
+ // Hits that are identical in vertical distance from
+ // beam gap and energy are differentiated with distance
+ // horizontally from the positron side of the detector.
+ else {
+ // Get the position from the positron side.
+ int[] ix = { hit1.getIdentifierFieldValue("ix"), hit2.getIdentifierFieldValue("ix") };
+
+ // The closest hit is first.
+ if(ix[0] > ix[1]) { return 1; }
+ else if(ix[0] < ix[1]) { return -1; }
+
+ // If all of these checks are the same, compare
+ // the raw value for iy. If these are identical,
+ // then the two hits are the same. Otherwise, sort
+ // the numerical value of iy. (This removes the
+ // issue where hits (x, y) and (x, -y) can have
+ // the same energy and be otherwise seen as the
+ // same hit from the above checks.
+ else { return Integer.compare(hit1.getIdentifierFieldValue("iy"), hit2.getIdentifierFieldValue("iy")); }
+ }
+ }
}
}
// Handles pathological case where multiple neighboring crystals have EXACTLY the same energy.
private boolean equalEnergies(CalorimeterHit hit, CalorimeterHit neighbor){
- boolean isSeed = true;
-
- int hix = hit.getIdentifierFieldValue("ix");
- int hiy = Math.abs(hit.getIdentifierFieldValue("iy"));
- int nix = neighbor.getIdentifierFieldValue("ix");
- int niy = Math.abs(neighbor.getIdentifierFieldValue("iy"));
- double hE = hit.getCorrectedEnergy();
- double nE = neighbor.getCorrectedEnergy();
- if(hE < nE) {
- isSeed = false;
- }
- else if((hE == nE) && (hiy > niy)) {
- isSeed = false;
- }
- else if((hE == nE) && (hiy == niy) && (hix > nix)) {
- isSeed = false;
- }
- return isSeed;
+ boolean isSeed = true;
+
+ int hix = hit.getIdentifierFieldValue("ix");
+ int hiy = Math.abs(hit.getIdentifierFieldValue("iy"));
+ int nix = neighbor.getIdentifierFieldValue("ix");
+ int niy = Math.abs(neighbor.getIdentifierFieldValue("iy"));
+ double hE = hit.getCorrectedEnergy();
+ double nE = neighbor.getCorrectedEnergy();
+ if(hE < nE) {
+ isSeed = false;
+ }
+ else if((hE == nE) && (hiy > niy)) {
+ isSeed = false;
+ }
+ else if((hE == nE) && (hiy == niy) && (hix > nix)) {
+ isSeed = false;
+ }
+ return isSeed;
}
Modified: java/trunk/users/src/main/java/org/hps/users/holly/EcalClustererCosmics.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/holly/EcalClustererCosmics.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/holly/EcalClustererCosmics.java Wed Mar 9 11:43:24 2016
@@ -124,13 +124,13 @@
// Loop over ECal hits to find cluster seeds.
for (CalorimeterHit hit : map.values()) {
- // int ix = hit.getIdentifierFieldValue("ix");
+ // int ix = hit.getIdentifierFieldValue("ix");
// int iy = hit.getIdentifierFieldValue("iy");
// System.out.println("ix = "+ix);
// System.out.println("iy = "+iy);
-
- // Cut on min seed E.
+
+ // Cut on min seed E.
if (hit.getRawEnergy() < seedEMin) {
continue;
}
Modified: java/trunk/users/src/main/java/org/hps/users/holly/EcalRawConverter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/holly/EcalRawConverter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/holly/EcalRawConverter.java Wed Mar 9 11:43:24 2016
@@ -106,42 +106,42 @@
private EcalConditions ecalConditions = null;
public EcalRawConverter() {
- // Track changes in the DAQ configuration.
- ConfigurationManager.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- // If the DAQ configuration should be used, load the
- // relevant settings into the driver.
- if(useDAQConfig) {
- // Get the FADC configuration.
- config = ConfigurationManager.getInstance().getFADCConfig();
-
- // Load the settings.
- NSB = config.getNSB();
- NSA = config.getNSA();
- windowSamples = config.getWindowWidth() / 4;
-
- // Get the number of peaks.
- if(config.getMode() == 1) {
- nPeak = Integer.MAX_VALUE;
- } else {
- nPeak = config.getMaxPulses();
- }
-
- // Print the FADC configuration.
- System.out.println();
- System.out.println();
- System.out.printf("NSA :: %d ns%n", NSA);
- System.out.printf("NSB :: %d ns%n", NSB);
- System.out.printf("Window Samples :: %d clock-cycles%n", windowSamples);
- System.out.printf("Max Peaks :: %d peaks%n", nPeak);
- System.out.println("======================================================================");
- System.out.println("=== FADC Pulse-Processing Settings ===================================");
- System.out.println("======================================================================");
- config.printConfig(System.out);
- }
- }
- });
+ // Track changes in the DAQ configuration.
+ ConfigurationManager.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // If the DAQ configuration should be used, load the
+ // relevant settings into the driver.
+ if(useDAQConfig) {
+ // Get the FADC configuration.
+ config = ConfigurationManager.getInstance().getFADCConfig();
+
+ // Load the settings.
+ NSB = config.getNSB();
+ NSA = config.getNSA();
+ windowSamples = config.getWindowWidth() / 4;
+
+ // Get the number of peaks.
+ if(config.getMode() == 1) {
+ nPeak = Integer.MAX_VALUE;
+ } else {
+ nPeak = config.getMaxPulses();
+ }
+
+ // Print the FADC configuration.
+ System.out.println();
+ System.out.println();
+ System.out.printf("NSA :: %d ns%n", NSA);
+ System.out.printf("NSB :: %d ns%n", NSB);
+ System.out.printf("Window Samples :: %d clock-cycles%n", windowSamples);
+ System.out.printf("Max Peaks :: %d peaks%n", nPeak);
+ System.out.println("======================================================================");
+ System.out.println("=== FADC Pulse-Processing Settings ===================================");
+ System.out.println("======================================================================");
+ config.printConfig(System.out);
+ }
+ }
+ });
}
public void setLeadingEdgeThreshold(double thresh) {
@@ -196,7 +196,7 @@
}
public void setUseDAQConfig(boolean state) {
- useDAQConfig = state;
+ useDAQConfig = state;
}
/*
@@ -206,10 +206,10 @@
EcalChannelConstants channelData = findChannel(hit.getCellID());
double pedestal;
if(useDAQConfig) {
- //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
- pedestal = config.getPedestal(hit.getCellID());
+ //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
+ pedestal = config.getPedestal(hit.getCellID());
} else {
- pedestal = channelData.getCalibration().getPedestal();
+ pedestal = channelData.getCalibration().getPedestal();
}
int sum = 0;
@@ -237,10 +237,10 @@
* Choose whether to use static pedestal from database or running pedestal from mode-7.
*/
public double getSingleSamplePedestal(EventHeader event,long cellID) {
- if(useDAQConfig) {
- //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(cellID);
- return config.getPedestal(cellID);
- }
+ if(useDAQConfig) {
+ //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(cellID);
+ return config.getPedestal(cellID);
+ }
if (useRunningPedestal && event!=null) {
if (event.hasItem("EcalRunningPedestals")) {
Map<EcalChannel, Double> runningPedMap = (Map<EcalChannel, Double>) event.get("EcalRunningPedestals");
@@ -409,12 +409,12 @@
// threshold is pedestal plus threshold configuration parameter:
final int absoluteThreshold;
if(useDAQConfig) {
- //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
- //int leadingEdgeThreshold = ConfigurationManager.getInstance().getFADCConfig().getThreshold(channel.getChannelId());
- int leadingEdgeThreshold = config.getThreshold(cellID);
- absoluteThreshold = (int) (getSingleSamplePedestal(event, cellID) + leadingEdgeThreshold);
+ //EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
+ //int leadingEdgeThreshold = ConfigurationManager.getInstance().getFADCConfig().getThreshold(channel.getChannelId());
+ int leadingEdgeThreshold = config.getThreshold(cellID);
+ absoluteThreshold = (int) (getSingleSamplePedestal(event, cellID) + leadingEdgeThreshold);
} else {
- absoluteThreshold = (int) (getSingleSamplePedestal(event, cellID) + leadingEdgeThreshold);
+ absoluteThreshold = (int) (getSingleSamplePedestal(event, cellID) + leadingEdgeThreshold);
}
ArrayList <Integer> thresholdCrossings = new ArrayList<Integer>();
@@ -435,10 +435,10 @@
// search for next threshold crossing begins at end of this pulse:
if(useDAQConfig && ConfigurationManager.getInstance().getFADCConfig().getMode() == 1) {
// special case, emulating SSP:
- ii += 8;
+ ii += 8;
} else {
// "normal" case, emulating FADC250:
- ii += NSA/nsPerSample - 1;
+ ii += NSA/nsPerSample - 1;
}
// firmware limit on # of peaks:
@@ -532,8 +532,8 @@
EcalChannelConstants channelData = findChannel(cellID);
if(useDAQConfig) {
- //float gain = ConfigurationManager.getInstance().getFADCConfig().getGain(ecalConditions.getChannelCollection().findGeometric(cellID));
- return config.getGain(cellID) * adcSum * EcalUtils.MeV;
+ //float gain = ConfigurationManager.getInstance().getFADCConfig().getGain(ecalConditions.getChannelCollection().findGeometric(cellID));
+ return config.getGain(cellID) * adcSum * EcalUtils.MeV;
} else if(use2014Gain) {
if (constantGain) {
return adcSum * EcalUtils.gainFactor * EcalUtils.ecalReadoutPeriod;
Modified: java/trunk/users/src/main/java/org/hps/users/holly/HPSEcalClusterIC.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/holly/HPSEcalClusterIC.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/holly/HPSEcalClusterIC.java Wed Mar 9 11:43:24 2016
@@ -55,11 +55,11 @@
}
public void addSharedHit(CalorimeterHit sharedHit) {
- sharedHitList.add(sharedHit);
+ sharedHitList.add(sharedHit);
}
public List<CalorimeterHit> getSharedHits() {
- return sharedHitList;
+ return sharedHitList;
}
// public double[] getPosition() {
@@ -155,12 +155,12 @@
for(int i=0;i<hits.size();i++)
{
CalorimeterHit hit = hits.get(i);
- // CalorimeterIDDecoder decoder = hit.getDecoder();
- // decoder.setID(hit.getCellID());
- // double[] pos = new double[3];
- // pos[0] = decoder.getX();
- // pos[1] = decoder.getY();
- // pos[2] = decoder.getZ();
+ // CalorimeterIDDecoder decoder = hit.getDecoder();
+ // decoder.setID(hit.getCellID());
+ // double[] pos = new double[3];
+ // pos[0] = decoder.getX();
+ // pos[1] = decoder.getY();
+ // pos[2] = decoder.getZ();
//double[] pos = hit.getPosition();
//Find position at shower max
IGeometryInfo geom = hit.getDetectorElement().getGeometry();
@@ -296,104 +296,104 @@
EV[1] = E2;
EV[2] = E3;
// Now calculate principal axes
- // For eigenvalue EV, the axis is (nx, ny, nz) where:
- // (Exx - EV)nx + (Exy)ny + (Exz)nz = 0
- // (Eyx)nx + (Eyy - EV)ny + (Eyz)nz = 0
- // (Ezx)nx + (Ezy)ny + (Ezz - EV)nz = 0
- // Setting nx = 1, we have:
- // (Exx - EV) + (Exy)ny + (Exz)nz = 0
- // (Eyx) + (Eyy - EV)ny + (Eyz)nz = 0
- // (Ezx) + (Ezy)ny + (Ezz - EV)nz = 0
- // and so
- // (Exy)ny = EV - Exx - (Exz)nz => ny = (EV - Exx - Exz*nz)/Exy
- // What if Exy = 0? Then provided Eyz is non-zero we can write:
- // (Ezx) + (Ezy)ny + (Ezz - EV)nz = 0
- // ny = (Exz - (Ezz-EV)*nz)/Eyz
- // What if Exy = 0 and Eyz = 0 but (Eyy - EV) is non-zero?
- // (Eyy - EV)ny + (Eyz)nz = 0
- // ny = -(Eyz*nz)/(Eyy-EV)
-
- // In the pathological case where Exz = Eyz = Ezz = 0:
- // (Exx - EV)nx + (Exy)ny = 0 => ny/nx = -(Exx-EV)/Exy
- // (Eyx)nx + (Eyy - EV)ny = 0 => ny/nx = -Eyx/(Eyy-EV)
- // (EV)nz = 0
- // so
- // -ny/nx = (EV-Exx)/Exy = Eyx/(EV-Eyy)
- // But watch out for order! Recalculate eigenvalues for this pathological case.
- // (EV-Exx)(EV-Eyy) = Eyx*Exy
- // EV^2 - EV(Exx+Eyy) + Exx*Eyy - Eyx*Exy = 0
- //
- // In another pathological case, Exz = Exy = 0:
- // (Exx - EV)nx = 0
- // (Eyy - EV)ny + (Eyz)nz = 0 => ny/nz = -(Eyz)/(Eyy-EV)
- // (Ezy)ny + (Ezz - EV)nz = 0 => ny/nz = -(Ezz-EV)/(Ezy)
- // so we cannot set nx = 1. Instead, write:
- // -ny/nz = (Eyz)/(Eyy-EV) = (Ezz-EV)/(Ezy)
- // Then
- // (Eyz)(Ezy) = (Eyy-EV)(Ezz-EV)
- // (Eyz)^2 = (Eyy)(Ezz) - (Eyy)(EV) - (Ezz)(EV) + (EV)^2
- // EV^2 - EV(Eyy+Ezz) + Eyy*Ezz - Eyz*Eyz = 0
-
- // Handle pathological case
- if (Exz == 0.0 && Eyz == 0.0) {
- // Recompute eigenvectors.
- EV[0] = 0.5*(Exx+Eyy) + 0.5*Math.sqrt((Exx+Eyy)*(Exx+Eyy) + 4.0*Exy*Exy);
- EV[1] = 0.5*(Exx+Eyy) - 0.5*Math.sqrt((Exx+Eyy)*(Exx+Eyy) + 4.0*Exy*Exy);
- EV[2] = 0.0;
- for( int i = 0 ; i < 2 ; i++ ) {
- double nx_over_ny = Exy / (Exx-EV[i]);
- double nx_unnormalized = nx_over_ny;
- double ny_unnormalized = 1.0;
- double norm = Math.sqrt(nx_unnormalized*nx_unnormalized + ny_unnormalized*ny_unnormalized);
- mm_PA[i][0] = ny_unnormalized/norm;
- mm_PA[i][1] = nx_unnormalized/norm;
- mm_PA[i][2] = 0.0;
- }
- // ... and now set third eigenvector to the z direction:
- mm_PA[2][0] = 0.0;
- mm_PA[2][1] = 0.0;
- mm_PA[2][2] = 1.0;
- } else if (Exz == 0.0 && Exy == 0.0) {
- // Another pathological case
- EV[0] = 0.5*(Eyy+Ezz) + 0.5*Math.sqrt((Eyy+Ezz)*(Eyy+Ezz) + 4.0*Eyz*Eyz);
- EV[1] = 0.5*(Eyy+Ezz) - 0.5*Math.sqrt((Eyy+Ezz)*(Eyy+Ezz) + 4.0*Eyz*Eyz);
- EV[2] = 0.0;
- for( int i = 0 ; i < 2 ; i++ ) {
- double ny_over_nz = Eyz / (Eyy-EV[i]);
- double ny_unnormalized = ny_over_nz;
- double nz_unnormalized = 1.0;
- double norm = Math.sqrt(ny_unnormalized*ny_unnormalized + nz_unnormalized*nz_unnormalized);
- mm_PA[i][0] = nz_unnormalized/norm;
- mm_PA[i][1] = ny_unnormalized/norm;
- mm_PA[i][2] = 0.0;
- }
- mm_PA[2][0] = 0.0;
- mm_PA[2][1] = 0.0;
- mm_PA[2][2] = 1.0;
- } else {
- for( int i = 0 ; i < 3 ; i++ )
- {
- double[] C = new double[3];
- C[0] = 1.0;
- C[2] = (Exy*Exy + (Eyy - EV[i])*(EV[i] - Exx))/
- ((Eyy - EV[i])*Exz - Eyz*Exy);
- C[1] = (EV[i] - Exx - Exz*C[2])/Exy;
- if (Exy == 0.0) {
- // Recompute
- if (Eyz != 0.0) {
- // ny = (Exz - (Ezz-EV)*nz)/Eyz
- C[1] = (Exz - (Ezz-EV[i])*C[2])/Eyz;
- } else {
- // ny = -(Eyz*nz)/(Eyy-EV)
- C[1] = -(Eyz*C[2])/(Eyy-EV[i]);
- }
- }
- double norm = Math.sqrt(C[0]*C[0] + C[1]*C[1] + C[2]*C[2]);
- mm_PA[i][0] = C[0]/norm;
- mm_PA[i][1] = C[1]/norm;
- mm_PA[i][2] = C[2]/norm;
- }
- }
+ // For eigenvalue EV, the axis is (nx, ny, nz) where:
+ // (Exx - EV)nx + (Exy)ny + (Exz)nz = 0
+ // (Eyx)nx + (Eyy - EV)ny + (Eyz)nz = 0
+ // (Ezx)nx + (Ezy)ny + (Ezz - EV)nz = 0
+ // Setting nx = 1, we have:
+ // (Exx - EV) + (Exy)ny + (Exz)nz = 0
+ // (Eyx) + (Eyy - EV)ny + (Eyz)nz = 0
+ // (Ezx) + (Ezy)ny + (Ezz - EV)nz = 0
+ // and so
+ // (Exy)ny = EV - Exx - (Exz)nz => ny = (EV - Exx - Exz*nz)/Exy
+ // What if Exy = 0? Then provided Eyz is non-zero we can write:
+ // (Ezx) + (Ezy)ny + (Ezz - EV)nz = 0
+ // ny = (Exz - (Ezz-EV)*nz)/Eyz
+ // What if Exy = 0 and Eyz = 0 but (Eyy - EV) is non-zero?
+ // (Eyy - EV)ny + (Eyz)nz = 0
+ // ny = -(Eyz*nz)/(Eyy-EV)
+
+ // In the pathological case where Exz = Eyz = Ezz = 0:
+ // (Exx - EV)nx + (Exy)ny = 0 => ny/nx = -(Exx-EV)/Exy
+ // (Eyx)nx + (Eyy - EV)ny = 0 => ny/nx = -Eyx/(Eyy-EV)
+ // (EV)nz = 0
+ // so
+ // -ny/nx = (EV-Exx)/Exy = Eyx/(EV-Eyy)
+ // But watch out for order! Recalculate eigenvalues for this pathological case.
+ // (EV-Exx)(EV-Eyy) = Eyx*Exy
+ // EV^2 - EV(Exx+Eyy) + Exx*Eyy - Eyx*Exy = 0
+ //
+ // In another pathological case, Exz = Exy = 0:
+ // (Exx - EV)nx = 0
+ // (Eyy - EV)ny + (Eyz)nz = 0 => ny/nz = -(Eyz)/(Eyy-EV)
+ // (Ezy)ny + (Ezz - EV)nz = 0 => ny/nz = -(Ezz-EV)/(Ezy)
+ // so we cannot set nx = 1. Instead, write:
+ // -ny/nz = (Eyz)/(Eyy-EV) = (Ezz-EV)/(Ezy)
+ // Then
+ // (Eyz)(Ezy) = (Eyy-EV)(Ezz-EV)
+ // (Eyz)^2 = (Eyy)(Ezz) - (Eyy)(EV) - (Ezz)(EV) + (EV)^2
+ // EV^2 - EV(Eyy+Ezz) + Eyy*Ezz - Eyz*Eyz = 0
+
+ // Handle pathological case
+ if (Exz == 0.0 && Eyz == 0.0) {
+ // Recompute eigenvectors.
+ EV[0] = 0.5*(Exx+Eyy) + 0.5*Math.sqrt((Exx+Eyy)*(Exx+Eyy) + 4.0*Exy*Exy);
+ EV[1] = 0.5*(Exx+Eyy) - 0.5*Math.sqrt((Exx+Eyy)*(Exx+Eyy) + 4.0*Exy*Exy);
+ EV[2] = 0.0;
+ for( int i = 0 ; i < 2 ; i++ ) {
+ double nx_over_ny = Exy / (Exx-EV[i]);
+ double nx_unnormalized = nx_over_ny;
+ double ny_unnormalized = 1.0;
+ double norm = Math.sqrt(nx_unnormalized*nx_unnormalized + ny_unnormalized*ny_unnormalized);
+ mm_PA[i][0] = ny_unnormalized/norm;
+ mm_PA[i][1] = nx_unnormalized/norm;
+ mm_PA[i][2] = 0.0;
+ }
+ // ... and now set third eigenvector to the z direction:
+ mm_PA[2][0] = 0.0;
+ mm_PA[2][1] = 0.0;
+ mm_PA[2][2] = 1.0;
+ } else if (Exz == 0.0 && Exy == 0.0) {
+ // Another pathological case
+ EV[0] = 0.5*(Eyy+Ezz) + 0.5*Math.sqrt((Eyy+Ezz)*(Eyy+Ezz) + 4.0*Eyz*Eyz);
+ EV[1] = 0.5*(Eyy+Ezz) - 0.5*Math.sqrt((Eyy+Ezz)*(Eyy+Ezz) + 4.0*Eyz*Eyz);
+ EV[2] = 0.0;
+ for( int i = 0 ; i < 2 ; i++ ) {
+ double ny_over_nz = Eyz / (Eyy-EV[i]);
+ double ny_unnormalized = ny_over_nz;
+ double nz_unnormalized = 1.0;
+ double norm = Math.sqrt(ny_unnormalized*ny_unnormalized + nz_unnormalized*nz_unnormalized);
+ mm_PA[i][0] = nz_unnormalized/norm;
+ mm_PA[i][1] = ny_unnormalized/norm;
+ mm_PA[i][2] = 0.0;
+ }
+ mm_PA[2][0] = 0.0;
+ mm_PA[2][1] = 0.0;
+ mm_PA[2][2] = 1.0;
+ } else {
+ for( int i = 0 ; i < 3 ; i++ )
+ {
+ double[] C = new double[3];
+ C[0] = 1.0;
+ C[2] = (Exy*Exy + (Eyy - EV[i])*(EV[i] - Exx))/
+ ((Eyy - EV[i])*Exz - Eyz*Exy);
+ C[1] = (EV[i] - Exx - Exz*C[2])/Exy;
+ if (Exy == 0.0) {
+ // Recompute
+ if (Eyz != 0.0) {
+ // ny = (Exz - (Ezz-EV)*nz)/Eyz
+ C[1] = (Exz - (Ezz-EV[i])*C[2])/Eyz;
+ } else {
+ // ny = -(Eyz*nz)/(Eyy-EV)
+ C[1] = -(Eyz*C[2])/(Eyy-EV[i]);
+ }
+ }
+ double norm = Math.sqrt(C[0]*C[0] + C[1]*C[1] + C[2]*C[2]);
+ mm_PA[i][0] = C[0]/norm;
+ mm_PA[i][1] = C[1]/norm;
+ mm_PA[i][2] = C[2]/norm;
+ }
+ }
}
mm_NE[0] = NE1;
mm_NE[1] = NE2;
@@ -417,7 +417,7 @@
double dr = Math.sqrt( (position[0]+mm_PA[0][0])*(position[0]+mm_PA[0][0]) +
(position[1]+mm_PA[0][1])*(position[1]+mm_PA[0][1]) +
(position[2]+mm_PA[0][2])*(position[2]+mm_PA[0][2]) ) -
- Math.sqrt( (position[0])*(position[0]) +
+ Math.sqrt( (position[0])*(position[0]) +
(position[1])*(position[1]) +
(position[2])*(position[2]) ) ;
double sign = 1.;
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/ClusterAnalysisDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/ClusterAnalysisDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/ClusterAnalysisDriver.java Wed Mar 9 11:43:24 2016
@@ -11,84 +11,84 @@
import org.lcsim.util.aida.AIDA;
public class ClusterAnalysisDriver extends Driver {
- // Analysis plots.
+ // Analysis plots.
AIDA aida = AIDA.defaultInstance();
- IHistogram1D clusterTotalEnergy;
- IHistogram1D clusterSeedEnergy;
- IHistogram1D clusterHitCount;
- IHistogram2D clusterDistribution;
-
- IHistogram1D fClusterTotalEnergy;
- IHistogram1D fClusterSeedEnergy;
- IHistogram1D fClusterHitCount;
- IHistogram2D fClusterDistribution;
-
- IHistogram1D nClusterTotalEnergy;
- IHistogram1D nClusterSeedEnergy;
- IHistogram1D nClusterHitCount;
- IHistogram2D nClusterDistribution;
-
- // Hit collection names.
- private String clusterCollectionName = "EcalClusters";
-
- public void setClusterCollectionName(String clusterCollectionName) {
- this.clusterCollectionName = clusterCollectionName;
- }
-
- @Override
- public void startOfData() {
- // Initialize the histograms.
- clusterTotalEnergy = aida.histogram1D("Cluster Plot :: Cluster Total Energy", 110, 0.00, 2.2);
- clusterSeedEnergy = aida.histogram1D("Cluster Plot :: Seed Hit Energy", 110, 0.00, 2.2);
- clusterHitCount = aida.histogram1D("Cluster Plot :: Cluster Hit Count", 8, 1, 9);
- clusterDistribution = aida.histogram2D("Cluster Plot :: Seed Hit Distribution", 46, -23, 23, 11, -5.5, 5.5);
-
- // Initialize the filtered histograms.
- fClusterTotalEnergy = aida.histogram1D("Cluster Plot :: Cluster Total Energy (Over 100 MeV)", 110, 0.00, 2.2);
- fClusterSeedEnergy = aida.histogram1D("Cluster Plot :: Seed Hit Energy (Over 100 MeV)", 110, 0.00, 2.2);
- fClusterHitCount = aida.histogram1D("Cluster Plot :: Cluster Hit Count (Over 100 MeV)", 8, 1, 9);
- fClusterDistribution = aida.histogram2D("Cluster Plot :: Seed Hit Distribution (Over 100 MeV)", 46, -23, 23, 11, -5.5, 5.5);
-
- // Initialize the more filtered histograms.
- nClusterTotalEnergy = aida.histogram1D("Cluster Plot :: Cluster Total Energy (Over 100 MeV, > 1 Hit)", 110, 0.00, 2.2);
- nClusterSeedEnergy = aida.histogram1D("Cluster Plot :: Seed Hit Energy (Over 100 MeV, > 1 Hit)", 110, 0.00, 2.2);
- nClusterHitCount = aida.histogram1D("Cluster Plot :: Cluster Hit Count (Over 100 MeV, > 1 Hit)", 8, 1, 9);
- nClusterDistribution = aida.histogram2D("Cluster Plot :: Seed Hit Distribution (Over 100 MeV, > 1 Hit)", 46, -23, 23, 11, -5.5, 5.5);
- }
-
- public void process(EventHeader event) {
- // Check if there exists a cluster collection.
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Get the raw hit collection.
- List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
-
- // Output the information on each hit to the histograms.
- for(Cluster cluster : clusterList) {
- // Get the x and y indices for the hits.
- int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
- int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
- if(ix > 0) { ix = ix - 1; }
-
- // Write to the histograms.
- clusterTotalEnergy.fill(cluster.getEnergy());
- clusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
- clusterHitCount.fill(cluster.getCalorimeterHits().size());
- clusterDistribution.fill(ix, iy, 1.0);
-
- if(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() > 0.100) {
- fClusterTotalEnergy.fill(cluster.getEnergy());
- fClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
- fClusterHitCount.fill(cluster.getCalorimeterHits().size());
- fClusterDistribution.fill(ix, iy, 1.0);
-
- if(cluster.getCalorimeterHits().size() > 1) {
- nClusterTotalEnergy.fill(cluster.getEnergy());
- nClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
- nClusterHitCount.fill(cluster.getCalorimeterHits().size());
- nClusterDistribution.fill(ix, iy, 1.0);
- }
- }
- }
- }
- }
+ IHistogram1D clusterTotalEnergy;
+ IHistogram1D clusterSeedEnergy;
+ IHistogram1D clusterHitCount;
+ IHistogram2D clusterDistribution;
+
+ IHistogram1D fClusterTotalEnergy;
+ IHistogram1D fClusterSeedEnergy;
+ IHistogram1D fClusterHitCount;
+ IHistogram2D fClusterDistribution;
+
+ IHistogram1D nClusterTotalEnergy;
+ IHistogram1D nClusterSeedEnergy;
+ IHistogram1D nClusterHitCount;
+ IHistogram2D nClusterDistribution;
+
+ // Hit collection names.
+ private String clusterCollectionName = "EcalClusters";
+
+ public void setClusterCollectionName(String clusterCollectionName) {
+ this.clusterCollectionName = clusterCollectionName;
+ }
+
+ @Override
+ public void startOfData() {
+ // Initialize the histograms.
+ clusterTotalEnergy = aida.histogram1D("Cluster Plot :: Cluster Total Energy", 110, 0.00, 2.2);
+ clusterSeedEnergy = aida.histogram1D("Cluster Plot :: Seed Hit Energy", 110, 0.00, 2.2);
+ clusterHitCount = aida.histogram1D("Cluster Plot :: Cluster Hit Count", 8, 1, 9);
+ clusterDistribution = aida.histogram2D("Cluster Plot :: Seed Hit Distribution", 46, -23, 23, 11, -5.5, 5.5);
+
+ // Initialize the filtered histograms.
+ fClusterTotalEnergy = aida.histogram1D("Cluster Plot :: Cluster Total Energy (Over 100 MeV)", 110, 0.00, 2.2);
+ fClusterSeedEnergy = aida.histogram1D("Cluster Plot :: Seed Hit Energy (Over 100 MeV)", 110, 0.00, 2.2);
+ fClusterHitCount = aida.histogram1D("Cluster Plot :: Cluster Hit Count (Over 100 MeV)", 8, 1, 9);
+ fClusterDistribution = aida.histogram2D("Cluster Plot :: Seed Hit Distribution (Over 100 MeV)", 46, -23, 23, 11, -5.5, 5.5);
+
+ // Initialize the more filtered histograms.
+ nClusterTotalEnergy = aida.histogram1D("Cluster Plot :: Cluster Total Energy (Over 100 MeV, > 1 Hit)", 110, 0.00, 2.2);
+ nClusterSeedEnergy = aida.histogram1D("Cluster Plot :: Seed Hit Energy (Over 100 MeV, > 1 Hit)", 110, 0.00, 2.2);
+ nClusterHitCount = aida.histogram1D("Cluster Plot :: Cluster Hit Count (Over 100 MeV, > 1 Hit)", 8, 1, 9);
+ nClusterDistribution = aida.histogram2D("Cluster Plot :: Seed Hit Distribution (Over 100 MeV, > 1 Hit)", 46, -23, 23, 11, -5.5, 5.5);
+ }
+
+ public void process(EventHeader event) {
+ // Check if there exists a cluster collection.
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Get the raw hit collection.
+ List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
+
+ // Output the information on each hit to the histograms.
+ for(Cluster cluster : clusterList) {
+ // Get the x and y indices for the hits.
+ int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ int iy = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+ if(ix > 0) { ix = ix - 1; }
+
+ // Write to the histograms.
+ clusterTotalEnergy.fill(cluster.getEnergy());
+ clusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
+ clusterHitCount.fill(cluster.getCalorimeterHits().size());
+ clusterDistribution.fill(ix, iy, 1.0);
+
+ if(cluster.getCalorimeterHits().get(0).getCorrectedEnergy() > 0.100) {
+ fClusterTotalEnergy.fill(cluster.getEnergy());
+ fClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
+ fClusterHitCount.fill(cluster.getCalorimeterHits().size());
+ fClusterDistribution.fill(ix, iy, 1.0);
+
+ if(cluster.getCalorimeterHits().size() > 1) {
+ nClusterTotalEnergy.fill(cluster.getEnergy());
+ nClusterSeedEnergy.fill(cluster.getCalorimeterHits().get(0).getCorrectedEnergy());
+ nClusterHitCount.fill(cluster.getCalorimeterHits().size());
+ nClusterDistribution.fill(ix, iy, 1.0);
+ }
+ }
+ }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/CountTriggersDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/CountTriggersDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/CountTriggersDriver.java Wed Mar 9 11:43:24 2016
@@ -16,64 +16,64 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class CountTriggersDriver extends Driver {
- // Store programmable parameters.
- private String bankCollectionName = "TriggerBank";
-
- // Track the number of triggers seen for each trigger type.
- private int[] triggers = new int[6];
- private static final int PULSER = 0;
- private static final int SINGLES0 = 1;
- private static final int SINGLES1 = 2;
- private static final int PAIR0 = 3;
- private static final int PAIR1 = 4;
- private static final int COSMIC = 5;
-
- /**
- * Outputs the total number of triggers seen for each trigger type.
- */
- @Override
- public void endOfData() {
- System.out.println("Trigger Counts:");
- System.out.printf("Singles 0 :: %d%n", triggers[SINGLES0]);
- System.out.printf("Singles 1 :: %d%n", triggers[SINGLES1]);
- System.out.printf("Pair 0 :: %d%n", triggers[PAIR0]);
- System.out.printf("Pair 1 :: %d%n", triggers[PAIR1]);
- System.out.printf("Pulser :: %d%n", triggers[PULSER]);
- System.out.printf("Cosmic :: %d%n", triggers[COSMIC]);
- }
-
- /**
- * Checks whether a trigger of each given type was seen by the TI
- * for each event and increments the total trigger count for that
- * type as appropriate.
- */
- @Override
- public void process(EventHeader event) {
- // Extract the TI bank from the data stream.
- TIData tiBank = null;
- if(event.hasCollection(GenericObject.class, bankCollectionName)) {
- // Get the bank list.
- List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
-
- // Search through the banks and get the TI bank.
- for(GenericObject obj : bankList) {
- if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) {
- tiBank = new TIData(obj);
- }
- }
- }
-
- // If there is no TI bank, the event can not be processed.
- if(tiBank == null) {
- return;
- }
-
- // Otherwise, increment the relevant trigger counts.
- if(tiBank.isPulserTrigger()) { triggers[PULSER]++; }
- if(tiBank.isSingle0Trigger()) { triggers[SINGLES0]++; }
- if(tiBank.isSingle1Trigger()) { triggers[SINGLES1]++; }
- if(tiBank.isPair0Trigger()) { triggers[PAIR0]++; }
- if(tiBank.isPair1Trigger()) { triggers[PAIR1]++; }
- if(tiBank.isCalibTrigger()) { triggers[COSMIC]++; }
- }
+ // Store programmable parameters.
+ private String bankCollectionName = "TriggerBank";
+
+ // Track the number of triggers seen for each trigger type.
+ private int[] triggers = new int[6];
+ private static final int PULSER = 0;
+ private static final int SINGLES0 = 1;
+ private static final int SINGLES1 = 2;
+ private static final int PAIR0 = 3;
+ private static final int PAIR1 = 4;
+ private static final int COSMIC = 5;
+
+ /**
+ * Outputs the total number of triggers seen for each trigger type.
+ */
+ @Override
+ public void endOfData() {
+ System.out.println("Trigger Counts:");
+ System.out.printf("Singles 0 :: %d%n", triggers[SINGLES0]);
+ System.out.printf("Singles 1 :: %d%n", triggers[SINGLES1]);
+ System.out.printf("Pair 0 :: %d%n", triggers[PAIR0]);
+ System.out.printf("Pair 1 :: %d%n", triggers[PAIR1]);
+ System.out.printf("Pulser :: %d%n", triggers[PULSER]);
+ System.out.printf("Cosmic :: %d%n", triggers[COSMIC]);
+ }
+
+ /**
+ * Checks whether a trigger of each given type was seen by the TI
+ * for each event and increments the total trigger count for that
+ * type as appropriate.
+ */
+ @Override
+ public void process(EventHeader event) {
+ // Extract the TI bank from the data stream.
+ TIData tiBank = null;
+ if(event.hasCollection(GenericObject.class, bankCollectionName)) {
+ // Get the bank list.
+ List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
+
+ // Search through the banks and get the TI bank.
+ for(GenericObject obj : bankList) {
+ if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) {
+ tiBank = new TIData(obj);
+ }
+ }
+ }
+
+ // If there is no TI bank, the event can not be processed.
+ if(tiBank == null) {
+ return;
+ }
+
+ // Otherwise, increment the relevant trigger counts.
+ if(tiBank.isPulserTrigger()) { triggers[PULSER]++; }
+ if(tiBank.isSingle0Trigger()) { triggers[SINGLES0]++; }
+ if(tiBank.isSingle1Trigger()) { triggers[SINGLES1]++; }
+ if(tiBank.isPair0Trigger()) { triggers[PAIR0]++; }
+ if(tiBank.isPair1Trigger()) { triggers[PAIR1]++; }
+ if(tiBank.isCalibTrigger()) { triggers[COSMIC]++; }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/EvioAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/EvioAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/EvioAnalysis.java Wed Mar 9 11:43:24 2016
@@ -17,17 +17,17 @@
import org.lcsim.util.aida.AIDA;
public class EvioAnalysis extends Driver {
- // Store index reference variables.
+ // Store index reference variables.
private static final int RECON = 0;
private static final int SSP = 1;
-
- // Create histogram arrays for cut distributions.
+
+ // Create histogram arrays for cut distributions.
private AIDA aida = AIDA.defaultInstance();
private IHistogram1D[] clusterEnergyPlot = new IHistogram1D[2];
private IHistogram1D[] clusterHitCountPlot = new IHistogram1D[2];
private IHistogram1D[] clusterTimePlot = new IHistogram1D[2];
- private IHistogram2D[] clusterSlopePlot = new IHistogram2D[2];
-
+ private IHistogram2D[] clusterSlopePlot = new IHistogram2D[2];
+
private IHistogram1D[] pairClusterEnergyPlot = new IHistogram1D[2];
private IHistogram1D[] pairHitCountPlot = new IHistogram1D[2];
private IHistogram1D[] pairTimePlot = new IHistogram1D[2];
@@ -38,129 +38,129 @@
private IHistogram1D[] pairCoplanarityPlot = new IHistogram1D[2];
private IHistogram1D[] pairTriggerTimePlot = new IHistogram1D[2];
- // Store programmable values.
- private String clusterCollectionName = "EcalClusters";
- private String bankCollectionName = "SSPData";
- private double energySlopeParamF = 0.0055;
- private double beamEnergy = 1.1;
-
- @Override
- public void startOfData() {
- // Store the plot source type name.
- String[] plotType = new String[2];
- plotType[RECON] = " (Recon)";
- plotType[SSP] = " (SSP)";
-
- // Set the bin sizes based on the beam energy.
- int bins = (int) beamEnergy * 100;
-
- for(int i = 0; i < 2; i++) {
- // Instantiate the single cluster distribution plots.
- clusterEnergyPlot[i] = aida.histogram1D("Raw/Cluster Energy" + plotType[i], bins, 0.0, beamEnergy);
- clusterHitCountPlot[i] = aida.histogram1D("Raw/Cluster Hit Count" + plotType[i], 9, 0.5, 9.5);
- clusterTimePlot[i] = aida.histogram1D("Raw/Cluster Time" + plotType[i], 100, 0, 400);
- clusterSlopePlot[i] = aida.histogram2D("Raw/Cluster Energy Slope" + plotType[i], 300, 0.0, 3.0, 200, 0, 400);
-
- // Instantiate the cluster pair distribution plots.
- pairSumPlot[i] = aida.histogram1D("Raw/Pair Energy Sum" + plotType[i], (int) 1.5 * bins, 0.0, 1.5 * beamEnergy);
- pairSumEnergiesPlot[i] = aida.histogram2D("Raw/Pair 2D Energy Sum" + plotType[i], (int) 1.5 * bins, 0.0, 1.5 * beamEnergy, (int) 1.5 * bins, 0.0, 1.5 * beamEnergy);
- pairDiffPlot[i] = aida.histogram1D("Raw/Pair Energy Difference" + plotType[i], bins, 0.0, beamEnergy);
- pairSlopePlot[i] = aida.histogram1D("Raw/Pair Energy Slope" + plotType[i], 100, 0.0, 4.0);
- pairCoplanarityPlot[i] = aida.histogram1D("Raw/Pair Coplanarity" + plotType[i], 180, 0.0, 180);
- }
- }
-
- @Override
- public void process(EventHeader event) {
- // Skip the event if there are no clusters.
- if(!event.hasCollection(Cluster.class, clusterCollectionName) || !event.hasCollection(GenericObject.class, bankCollectionName)) {
- return;
- }
-
- // Get the list of clusters.
- List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
-
- // Get the SSP data bank.
- List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
-
- // Get the SSP bank from the generic object bank list.
- SSPData sspBank = null;
- for(GenericObject obj : bankList) {
- if(AbstractIntData.getTag(obj) == SSPData.BANK_TAG) {
- sspBank = new SSPData(obj);
- }
- }
-
- // Make sure that the SSP bank was initialized.
- if(sspBank == null) {
- return;
- }
-
- // Iterate over the reconstructed clusters and populate
- // the singles plots.
- for(Cluster cluster : clusters) {
- // Get the cluster properties.
- int hitCount = cluster.getCalorimeterHits().size();
- double x = TriggerModule.getClusterX(cluster);
- double z = TriggerModule.getClusterZ(cluster);
- double slopeParamR = Math.sqrt((x * x) + (z * z));
-
- // Populate the plots.
- clusterEnergyPlot[RECON].fill(cluster.getEnergy());
- clusterHitCountPlot[RECON].fill(cluster.getCalorimeterHits().size());
- clusterTimePlot[RECON].fill(cluster.getCalorimeterHits().get(0).getTime());
- clusterSlopePlot[RECON].fill(cluster.getEnergy(), slopeParamR);
- }
-
- // Get the list of pairs.
- List<Cluster[]> pairs = makePairs(clusters);
-
- // Iterate over the pairs and populate the pair plots.
- for(Cluster[] pair : pairs) {
- pairSumPlot[RECON].fill(TriggerModule.getValueEnergySum(pair));
- pairSumEnergiesPlot[RECON].fill(pair[0].getEnergy(), pair[1].getEnergy());
- pairDiffPlot[RECON].fill(TriggerModule.getValueEnergyDifference(pair));
- pairSlopePlot[RECON].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF));
- pairCoplanarityPlot[RECON].fill(TriggerModule.getValueCoplanarity(pair));
- }
- }
-
- private List<Cluster[]> makePairs(List<Cluster> clusters) {
- // Create seperate lists for top and bottom clusters.
- List<Cluster> topList = new ArrayList<Cluster>();
- List<Cluster> bottomList = new ArrayList<Cluster>();
- List<Cluster[]> pairList = new ArrayList<Cluster[]>();
-
- // Sort the clusters into the appropriate list.
- for(Cluster cluster : clusters) {
- if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
- topList.add(cluster);
- } else {
- bottomList.add(cluster);
- }
- }
-
- // Create all possible cluster pairs.
- for(Cluster topCluster : topList) {
- for(Cluster bottomCluster : bottomList) {
- Cluster[] pair = { topCluster, bottomCluster };
- pairList.add(pair);
- }
- }
-
- // Return the list of cluster pairs.
- return pairList;
- }
-
- public void setClusterCollectionName(String clusterCollectionName) {
- this.clusterCollectionName = clusterCollectionName;
- }
-
- public void setBankCollectionName(String bankCollectionName) {
- this.bankCollectionName = bankCollectionName;
- }
-
- public void setEnergySlopeParamF(double energySlopeParamF) {
- this.energySlopeParamF = energySlopeParamF;
- }
+ // Store programmable values.
+ private String clusterCollectionName = "EcalClusters";
+ private String bankCollectionName = "SSPData";
+ private double energySlopeParamF = 0.0055;
+ private double beamEnergy = 1.1;
+
+ @Override
+ public void startOfData() {
+ // Store the plot source type name.
+ String[] plotType = new String[2];
+ plotType[RECON] = " (Recon)";
+ plotType[SSP] = " (SSP)";
+
+ // Set the bin sizes based on the beam energy.
+ int bins = (int) beamEnergy * 100;
+
+ for(int i = 0; i < 2; i++) {
+ // Instantiate the single cluster distribution plots.
+ clusterEnergyPlot[i] = aida.histogram1D("Raw/Cluster Energy" + plotType[i], bins, 0.0, beamEnergy);
+ clusterHitCountPlot[i] = aida.histogram1D("Raw/Cluster Hit Count" + plotType[i], 9, 0.5, 9.5);
+ clusterTimePlot[i] = aida.histogram1D("Raw/Cluster Time" + plotType[i], 100, 0, 400);
+ clusterSlopePlot[i] = aida.histogram2D("Raw/Cluster Energy Slope" + plotType[i], 300, 0.0, 3.0, 200, 0, 400);
+
+ // Instantiate the cluster pair distribution plots.
+ pairSumPlot[i] = aida.histogram1D("Raw/Pair Energy Sum" + plotType[i], (int) 1.5 * bins, 0.0, 1.5 * beamEnergy);
+ pairSumEnergiesPlot[i] = aida.histogram2D("Raw/Pair 2D Energy Sum" + plotType[i], (int) 1.5 * bins, 0.0, 1.5 * beamEnergy, (int) 1.5 * bins, 0.0, 1.5 * beamEnergy);
+ pairDiffPlot[i] = aida.histogram1D("Raw/Pair Energy Difference" + plotType[i], bins, 0.0, beamEnergy);
+ pairSlopePlot[i] = aida.histogram1D("Raw/Pair Energy Slope" + plotType[i], 100, 0.0, 4.0);
+ pairCoplanarityPlot[i] = aida.histogram1D("Raw/Pair Coplanarity" + plotType[i], 180, 0.0, 180);
+ }
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ // Skip the event if there are no clusters.
+ if(!event.hasCollection(Cluster.class, clusterCollectionName) || !event.hasCollection(GenericObject.class, bankCollectionName)) {
+ return;
+ }
+
+ // Get the list of clusters.
+ List<Cluster> clusters = event.get(Cluster.class, clusterCollectionName);
+
+ // Get the SSP data bank.
+ List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
+
+ // Get the SSP bank from the generic object bank list.
+ SSPData sspBank = null;
+ for(GenericObject obj : bankList) {
+ if(AbstractIntData.getTag(obj) == SSPData.BANK_TAG) {
+ sspBank = new SSPData(obj);
+ }
+ }
+
+ // Make sure that the SSP bank was initialized.
+ if(sspBank == null) {
+ return;
+ }
+
+ // Iterate over the reconstructed clusters and populate
+ // the singles plots.
+ for(Cluster cluster : clusters) {
+ // Get the cluster properties.
+ int hitCount = cluster.getCalorimeterHits().size();
+ double x = TriggerModule.getClusterX(cluster);
+ double z = TriggerModule.getClusterZ(cluster);
+ double slopeParamR = Math.sqrt((x * x) + (z * z));
+
+ // Populate the plots.
+ clusterEnergyPlot[RECON].fill(cluster.getEnergy());
+ clusterHitCountPlot[RECON].fill(cluster.getCalorimeterHits().size());
+ clusterTimePlot[RECON].fill(cluster.getCalorimeterHits().get(0).getTime());
+ clusterSlopePlot[RECON].fill(cluster.getEnergy(), slopeParamR);
+ }
+
+ // Get the list of pairs.
+ List<Cluster[]> pairs = makePairs(clusters);
+
+ // Iterate over the pairs and populate the pair plots.
+ for(Cluster[] pair : pairs) {
+ pairSumPlot[RECON].fill(TriggerModule.getValueEnergySum(pair));
+ pairSumEnergiesPlot[RECON].fill(pair[0].getEnergy(), pair[1].getEnergy());
+ pairDiffPlot[RECON].fill(TriggerModule.getValueEnergyDifference(pair));
+ pairSlopePlot[RECON].fill(TriggerModule.getValueEnergySlope(pair, energySlopeParamF));
+ pairCoplanarityPlot[RECON].fill(TriggerModule.getValueCoplanarity(pair));
+ }
+ }
+
+ private List<Cluster[]> makePairs(List<Cluster> clusters) {
+ // Create seperate lists for top and bottom clusters.
+ List<Cluster> topList = new ArrayList<Cluster>();
+ List<Cluster> bottomList = new ArrayList<Cluster>();
+ List<Cluster[]> pairList = new ArrayList<Cluster[]>();
+
+ // Sort the clusters into the appropriate list.
+ for(Cluster cluster : clusters) {
+ if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
+ topList.add(cluster);
+ } else {
+ bottomList.add(cluster);
+ }
+ }
+
+ // Create all possible cluster pairs.
+ for(Cluster topCluster : topList) {
+ for(Cluster bottomCluster : bottomList) {
+ Cluster[] pair = { topCluster, bottomCluster };
+ pairList.add(pair);
+ }
+ }
+
+ // Return the list of cluster pairs.
+ return pairList;
+ }
+
+ public void setClusterCollectionName(String clusterCollectionName) {
+ this.clusterCollectionName = clusterCollectionName;
+ }
+
+ public void setBankCollectionName(String bankCollectionName) {
+ this.bankCollectionName = bankCollectionName;
+ }
+
+ public void setEnergySlopeParamF(double energySlopeParamF) {
+ this.energySlopeParamF = energySlopeParamF;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/FADCAnalysisDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/FADCAnalysisDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/FADCAnalysisDriver.java Wed Mar 9 11:43:24 2016
@@ -11,82 +11,82 @@
import org.lcsim.util.aida.AIDA;
public class FADCAnalysisDriver extends Driver {
- // Analysis plots.
+ // Analysis plots.
AIDA aida = AIDA.defaultInstance();
- IHistogram1D rawHitEnergy;
- IHistogram1D fadcHitEnergy;
- IHistogram2D rawHitDistribution;
- IHistogram2D fadcHitDistribution;
- IHistogram2D fadcFilteredHitDistribution;
- IHistogram1D eventRawHitCount;
- IHistogram1D eventFADCHitCount;
-
- // Hit collection names.
- private String rawHitsCollectionName = "EcalHits";
- private String fadcHitsCollectionName = "EcalCorrectedHits";
-
- public void setFadcHitsCollectionName(String fadcHitsCollectionName) {
- this.fadcHitsCollectionName = fadcHitsCollectionName;
- }
-
- public void setRawHitsCollectionName(String rawHitsCollectionName) {
- this.rawHitsCollectionName = rawHitsCollectionName;
- }
-
- @Override
- public void startOfData() {
- // Initialize the histograms.
- rawHitEnergy = aida.histogram1D("FADC Plot :: Raw Hit Energy", 110, 0.00, 2.2);
- fadcHitEnergy = aida.histogram1D("FADC Plot :: FADC Hit Energy", 80, 0.00, 1.6);
- rawHitDistribution = aida.histogram2D("FADC Plot :: Raw Hit Distribution", 46, -23, 23, 11, -5.5, 5.5);
- fadcHitDistribution = aida.histogram2D("FADC Plot :: FADC Hit Distribution", 46, -23, 23, 11, -5.5, 5.5);
- fadcFilteredHitDistribution = aida.histogram2D("FADC Plot :: FADC Hit Distribution Over 100 MeV", 46, -23, 23, 11, -5.5, 5.5);
- eventRawHitCount = aida.histogram1D("FADC Plot :: Event Raw Hit Count", 159, 1, 160);
- eventFADCHitCount = aida.histogram1D("FADC Plot :: Event FADC Hit Count", 15, 1, 16);
- }
-
- public void process(EventHeader event) {
- // Check if there exists a raw hits collection.
- if(event.hasCollection(CalorimeterHit.class, rawHitsCollectionName)) {
- // Get the raw hit collection.
- List<CalorimeterHit> hitList = event.get(CalorimeterHit.class, rawHitsCollectionName);
-
- // Output the information on each hit to the histograms.
- for(CalorimeterHit hit : hitList) {
- // Get the x and y indices for the hits.
- int ix = hit.getIdentifierFieldValue("ix");
- int iy = hit.getIdentifierFieldValue("iy");
- if(ix > 0) { ix = ix - 1; }
-
- // Write to the histograms.
- rawHitEnergy.fill(hit.getCorrectedEnergy());
- rawHitDistribution.fill(ix, iy, 1.0);
-
- // If there are hits, fill the hit count histogram.
- if(hitList.size() != 0) { eventRawHitCount.fill(hitList.size()); }
- }
- }
-
- // Check if there exists an FADC hits collection.
- if(event.hasCollection(CalorimeterHit.class, fadcHitsCollectionName)) {
- // Get the raw hit collection.
- List<CalorimeterHit> hitList = event.get(CalorimeterHit.class, fadcHitsCollectionName);
-
- // Output the information on each hit to the histograms.
- for(CalorimeterHit hit : hitList) {
- // Get the x and y indices for the hits.
- int ix = hit.getIdentifierFieldValue("ix");
- int iy = hit.getIdentifierFieldValue("iy");
- if(ix > 0) { ix = ix - 1; }
-
- // Write to the histograms.
- fadcHitEnergy.fill(hit.getCorrectedEnergy());
- fadcHitDistribution.fill(ix, iy, 1.0);
- if(hit.getCorrectedEnergy() > 0.100) { fadcFilteredHitDistribution.fill(ix, iy, 1.0); }
-
- // If there are hits, fill the hit count histogram.
- if(hitList.size() != 0) { eventFADCHitCount.fill(hitList.size()); }
- }
- }
- }
+ IHistogram1D rawHitEnergy;
+ IHistogram1D fadcHitEnergy;
+ IHistogram2D rawHitDistribution;
+ IHistogram2D fadcHitDistribution;
+ IHistogram2D fadcFilteredHitDistribution;
+ IHistogram1D eventRawHitCount;
+ IHistogram1D eventFADCHitCount;
+
+ // Hit collection names.
+ private String rawHitsCollectionName = "EcalHits";
+ private String fadcHitsCollectionName = "EcalCorrectedHits";
+
+ public void setFadcHitsCollectionName(String fadcHitsCollectionName) {
+ this.fadcHitsCollectionName = fadcHitsCollectionName;
+ }
+
+ public void setRawHitsCollectionName(String rawHitsCollectionName) {
+ this.rawHitsCollectionName = rawHitsCollectionName;
+ }
+
+ @Override
+ public void startOfData() {
+ // Initialize the histograms.
+ rawHitEnergy = aida.histogram1D("FADC Plot :: Raw Hit Energy", 110, 0.00, 2.2);
+ fadcHitEnergy = aida.histogram1D("FADC Plot :: FADC Hit Energy", 80, 0.00, 1.6);
+ rawHitDistribution = aida.histogram2D("FADC Plot :: Raw Hit Distribution", 46, -23, 23, 11, -5.5, 5.5);
+ fadcHitDistribution = aida.histogram2D("FADC Plot :: FADC Hit Distribution", 46, -23, 23, 11, -5.5, 5.5);
+ fadcFilteredHitDistribution = aida.histogram2D("FADC Plot :: FADC Hit Distribution Over 100 MeV", 46, -23, 23, 11, -5.5, 5.5);
+ eventRawHitCount = aida.histogram1D("FADC Plot :: Event Raw Hit Count", 159, 1, 160);
+ eventFADCHitCount = aida.histogram1D("FADC Plot :: Event FADC Hit Count", 15, 1, 16);
+ }
+
+ public void process(EventHeader event) {
+ // Check if there exists a raw hits collection.
+ if(event.hasCollection(CalorimeterHit.class, rawHitsCollectionName)) {
+ // Get the raw hit collection.
+ List<CalorimeterHit> hitList = event.get(CalorimeterHit.class, rawHitsCollectionName);
+
+ // Output the information on each hit to the histograms.
+ for(CalorimeterHit hit : hitList) {
+ // Get the x and y indices for the hits.
+ int ix = hit.getIdentifierFieldValue("ix");
+ int iy = hit.getIdentifierFieldValue("iy");
+ if(ix > 0) { ix = ix - 1; }
+
+ // Write to the histograms.
+ rawHitEnergy.fill(hit.getCorrectedEnergy());
+ rawHitDistribution.fill(ix, iy, 1.0);
+
+ // If there are hits, fill the hit count histogram.
+ if(hitList.size() != 0) { eventRawHitCount.fill(hitList.size()); }
+ }
+ }
+
+ // Check if there exists an FADC hits collection.
+ if(event.hasCollection(CalorimeterHit.class, fadcHitsCollectionName)) {
+ // Get the raw hit collection.
+ List<CalorimeterHit> hitList = event.get(CalorimeterHit.class, fadcHitsCollectionName);
+
+ // Output the information on each hit to the histograms.
+ for(CalorimeterHit hit : hitList) {
+ // Get the x and y indices for the hits.
+ int ix = hit.getIdentifierFieldValue("ix");
+ int iy = hit.getIdentifierFieldValue("iy");
+ if(ix > 0) { ix = ix - 1; }
+
+ // Write to the histograms.
+ fadcHitEnergy.fill(hit.getCorrectedEnergy());
+ fadcHitDistribution.fill(ix, iy, 1.0);
+ if(hit.getCorrectedEnergy() > 0.100) { fadcFilteredHitDistribution.fill(ix, iy, 1.0); }
+
+ // If there are hits, fill the hit count histogram.
+ if(hitList.size() != 0) { eventFADCHitCount.fill(hitList.size()); }
+ }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/HPSEcalDataPlotsDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/HPSEcalDataPlotsDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/HPSEcalDataPlotsDriver.java Wed Mar 9 11:43:24 2016
@@ -27,22 +27,22 @@
* @author Kyle McCarty <[log in to unmask]>
*/
public class HPSEcalDataPlotsDriver extends Driver {
- private String plotsGroupName= "Data Plots";
- private String bankCollectionName = "TriggerBank";
- private String clusterCollectionName = "EcalClusters";
-
- private static final int PULSER = 0;
- private static final int SINGLES0 = 1;
- private static final int SINGLES1 = 2;
- private static final int PAIR0 = 3;
- private static final int PAIR1 = 4;
-
- private static final int ALL = 0;
- private static final int EDGE = 1;
- private static final int FIDUCIAL = 2;
-
- private AIDA aida = AIDA.defaultInstance();
- private IHistogram1D[][] clusterTotalEnergy = new IHistogram1D[5][3];
+ private String plotsGroupName= "Data Plots";
+ private String bankCollectionName = "TriggerBank";
+ private String clusterCollectionName = "EcalClusters";
+
+ private static final int PULSER = 0;
+ private static final int SINGLES0 = 1;
+ private static final int SINGLES1 = 2;
+ private static final int PAIR0 = 3;
+ private static final int PAIR1 = 4;
+
+ private static final int ALL = 0;
+ private static final int EDGE = 1;
+ private static final int FIDUCIAL = 2;
+
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D[][] clusterTotalEnergy = new IHistogram1D[5][3];
private IHistogram1D[][] clusterTime = new IHistogram1D[5][3];
private IHistogram1D[][] clusterHitCount = new IHistogram1D[5][3];
private IHistogram1D[][] clusterSeedEnergy = new IHistogram1D[5][3];
@@ -56,249 +56,249 @@
private IHistogram2D[][] clusterSeedPosition = new IHistogram2D[5][3];
private IHistogram2D[][] pairEnergySlope2D = new IHistogram2D[5][3];
private IHistogram2D[][] pairCoplanarityEnergySum = new IHistogram2D[5][3];
-
+
/**
* Initializes the plots.
*/
- @Override
- public void startOfData() {
- // Define trigger names.
- String[] triggerNames = {
- "Pulser", "Singles 0", "Singles 1", "Pair 0", "Pair 1"
- };
-
- // Define the positional names.
- String[] positionNames = {
- "All", "Edge", "Fiducial"
- };
-
- // Instantiate the plots.
- for(int i = 0; i < 5; i++) {
- for(int j = 0; j < 3; j++) {
- clusterTotalEnergy[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Cluster Total Energy", 150, 0.000, 1.500);
+ @Override
+ public void startOfData() {
+ // Define trigger names.
+ String[] triggerNames = {
+ "Pulser", "Singles 0", "Singles 1", "Pair 0", "Pair 1"
+ };
+
+ // Define the positional names.
+ String[] positionNames = {
+ "All", "Edge", "Fiducial"
+ };
+
+ // Instantiate the plots.
+ for(int i = 0; i < 5; i++) {
+ for(int j = 0; j < 3; j++) {
+ clusterTotalEnergy[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
+ + positionNames[j] + "/Cluster Total Energy", 150, 0.000, 1.500);
clusterTime[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Cluster Hit Time", 100, 0.0, 100.0);
+ + positionNames[j] + "/Cluster Hit Time", 100, 0.0, 100.0);
clusterHitCount[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Cluster Hit Count", 10, -0.5, 9.5);
+ + positionNames[j] + "/Cluster Hit Count", 10, -0.5, 9.5);
clusterSeedEnergy[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Cluster Seed Energy", 150, 0.000, 1.500);
+ + positionNames[j] + "/Cluster Seed Energy", 150, 0.000, 1.500);
pairEnergySum[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Pair Energy Sum", 150, 0.000, 1.500);
+ + positionNames[j] + "/Pair Energy Sum", 150, 0.000, 1.500);
pairEnergyDifference[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Pair Energy Difference", 150, 0.000, 1.500);
+ + positionNames[j] + "/Pair Energy Difference", 150, 0.000, 1.500);
pairEnergySlope[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Pair Energy Slope", 100, 0.000, 4.000);
+ + positionNames[j] + "/Pair Energy Slope", 100, 0.000, 4.000);
pairCoplanarity[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Pair Coplanarity", 180, 0.000, 180);
+ + positionNames[j] + "/Pair Coplanarity", 180, 0.000, 180);
pairTimeCoincidence[i][j] = aida.histogram1D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Pair Time Coincidence", 80, 0, 20);
+ + positionNames[j] + "/Pair Time Coincidence", 80, 0, 20);
clusterSeedPosition[i][j] = aida.histogram2D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Cluster Seed Position", 46, -23, 23, 11, -5.5, 5.5);
+ + positionNames[j] + "/Cluster Seed Position", 46, -23, 23, 11, -5.5, 5.5);
pairEnergySum2D[i][j] = aida.histogram2D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Pair Energy Sum 2D", 150, 0.000, 1.500, 150, 0.000, 1.500);
+ + positionNames[j] + "/Pair Energy Sum 2D", 150, 0.000, 1.500, 150, 0.000, 1.500);
pairCoplanarityEnergySum[i][j] = aida.histogram2D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Pair Energy Sum vs. Coplanarity", 150, 0.000, 1.500, 180, 0, 180);
+ + positionNames[j] + "/Pair Energy Sum vs. Coplanarity", 150, 0.000, 1.500, 180, 0, 180);
pairEnergySlope2D[i][j] = aida.histogram2D(plotsGroupName + "/" + triggerNames[i] + "/"
- + positionNames[j] + "/Pair Energy Slope 2D", 75, 0.000, 1.500, 100, 0.0, 400.0);
- }
- }
- }
-
- /**
- * Processes the event clusters and populates distribution charts
- * from them for each trigger. Also creates separate plots for the
- * edge and fiducial regions.
- * @param event - The event containing LCIO collections to be used
- * for plot population.
- */
- @Override
- public void process(EventHeader event) {
- // Get the TI and SSP banks.
- TIData tiBank = null;
- SSPData sspBank = null;
- if(event.hasCollection(GenericObject.class, bankCollectionName)) {
- // Get the bank list.
- List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
-
- // Search through the banks and get the SSP and TI banks.
- for(GenericObject obj : bankList) {
- // If this is an SSP bank, parse it.
- if(AbstractIntData.getTag(obj) == SSPData.BANK_TAG) {
- sspBank = new SSPData(obj);
- }
-
- // Otherwise, if this is a TI bank, parse it.
- else if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) {
- tiBank = new TIData(obj);
- }
- }
- }
-
- // Get the list of clusters.
- List<Cluster> clusters = null;
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- clusters = event.get(Cluster.class, clusterCollectionName);
- }
-
- // Require that all collections be initialized.
- if(sspBank == null || tiBank == null || clusters == null) {
- return;
- }
-
- // Track which triggers are active.
- boolean[] activeTrigger = new boolean[5];
- activeTrigger[PULSER] = tiBank.isPulserTrigger();
- activeTrigger[SINGLES0] = tiBank.isSingle0Trigger();
- activeTrigger[SINGLES1] = tiBank.isSingle1Trigger();
- activeTrigger[PAIR0] = tiBank.isPair0Trigger();
- activeTrigger[PAIR1] = tiBank.isPair1Trigger();
-
- // Plot all cluster properties for each trigger.
- for(Cluster cluster : clusters) {
- // Check whether the cluster is a fiducial or edge cluster.
- int positional = inFiducialRegion(cluster) ? FIDUCIAL : EDGE;
-
- // Fill the appropriate plots for each trigger with an
- // active trigger bit for single clusters.
- for(int i = 0; i < 5; i++) {
- if(activeTrigger[i]) {
- // Populate the ALL plots.
- clusterSeedEnergy[i][ALL].fill(TriggerModule.getValueClusterSeedEnergy(cluster));
- clusterTotalEnergy[i][ALL].fill(cluster.getEnergy());
- clusterHitCount[i][ALL].fill(TriggerModule.getClusterHitCount(cluster));
- clusterTime[i][ALL].fill(TriggerModule.getClusterTime(cluster));
- clusterSeedPosition[i][ALL].fill(TriggerModule.getClusterXIndex(cluster),
- TriggerModule.getClusterYIndex(cluster));
-
- // Populate the positional plots.
- clusterSeedEnergy[i][positional].fill(TriggerModule.getValueClusterSeedEnergy(cluster));
- clusterTotalEnergy[i][positional].fill(cluster.getEnergy());
- clusterHitCount[i][positional].fill(TriggerModule.getClusterHitCount(cluster));
- clusterTime[i][positional].fill(TriggerModule.getClusterTime(cluster));
- clusterSeedPosition[i][positional].fill(TriggerModule.getClusterXIndex(cluster),
- TriggerModule.getClusterYIndex(cluster));
- }
- }
- }
-
- // Plot all pair properties for each trigger.
- List<Cluster[]> pairs = TriggerModule.getTopBottomPairs(clusters, Cluster.class);
- for(Cluster[] pair : pairs) {
- // Check whether the cluster is a fiducial or edge cluster.
- boolean[] isFiducial = {
- inFiducialRegion(pair[0]),
- inFiducialRegion(pair[1])
- };
- int positional = (isFiducial[0] && isFiducial[1]) ? FIDUCIAL : EDGE;
-
- // Fill the appropriate plots for each trigger with an
- // active trigger bit for single clusters.
- for(int i = 0; i < 5; i++) {
- if(activeTrigger[i]) {
- // Calculate the values.
- double energySum = TriggerModule.getValueEnergySum(pair);
- double energyDiff = TriggerModule.getValueEnergyDifference(pair);
- double energySlope = TriggerModule.getValueEnergySlope(pair, 0.00550);
- double coplanarity = TriggerModule.getValueCoplanarity(pair);
- double timeCoincidence = TriggerModule.getValueTimeCoincidence(pair);
-
- // Get the energy slope values.
- Cluster lowCluster = pair[0].getEnergy() < pair[1].getEnergy() ? pair[0] : pair[1];
- double clusterDistance = TriggerModule.getClusterDistance(lowCluster);
-
- // Populate the ALL plots.
- pairEnergySum[i][ALL].fill(energySum);
- pairEnergyDifference[i][ALL].fill(energyDiff);
- pairEnergySlope[i][ALL].fill(energySlope);
- pairCoplanarity[i][ALL].fill(coplanarity);
- pairTimeCoincidence[i][ALL].fill(timeCoincidence);
- pairEnergySum2D[i][ALL].fill(pair[0].getEnergy(), pair[1].getEnergy());
- pairCoplanarityEnergySum[i][ALL].fill(energySum, coplanarity);
- pairEnergySlope2D[i][ALL].fill(lowCluster.getEnergy(), clusterDistance);
-
- // Populate the positional plots.
- pairEnergySum[i][positional].fill(energySum);
- pairEnergyDifference[i][positional].fill(energyDiff);
- pairEnergySlope[i][positional].fill(energySlope);
- pairCoplanarity[i][positional].fill(coplanarity);
- pairTimeCoincidence[i][positional].fill(timeCoincidence);
- pairEnergySum2D[i][positional].fill(pair[0].getEnergy(), pair[1].getEnergy());
- pairCoplanarityEnergySum[i][positional].fill(energySum, coplanarity);
- pairEnergySlope2D[i][positional].fill(lowCluster.getEnergy(), clusterDistance);
- }
- }
- }
- }
-
- /**
- * Indicates whether the argument cluster is located in the fiducial
- * region or not.
- * @param cluster - The cluster to check.
- * @return Returns <code>true</code> if the cluster is located in
- * the fiducial region and <code>false</code> otherwise.
- */
- private static final boolean inFiducialRegion(Cluster cluster) {
- // Get the x and y indices for the cluster.
- int ix = TriggerModule.getClusterXIndex(cluster);
- int absx = Math.abs(TriggerModule.getClusterXIndex(cluster));
- int absy = Math.abs(TriggerModule.getClusterYIndex(cluster));
-
- // Check if the cluster is on the top or the bottom of the
- // calorimeter, as defined by |y| == 5. This is an edge cluster
- // and is not in the fiducial region.
- if(absy == 5) {
- return false;
- }
-
- // Check if the cluster is on the extreme left or right side
- // of the calorimeter, as defined by |x| == 23. This is also
- // and edge cluster is not in the fiducial region.
- if(absx == 23) {
- return false;
- }
-
- // Check if the cluster is along the beam gap, as defined by
- // |y| == 1. This is an internal edge cluster and is not in the
- // fiducial region.
- if(absy == 1) {
- return false;
- }
-
- // Lastly, check if the cluster falls along the beam hole, as
- // defined by clusters with -11 <= x <= -1 and |y| == 2. This
- // is not the fiducial region.
- if(absy == 2 && ix <= -1 && ix >= -11) {
- return false;
- }
-
- // If all checks fail, the cluster is in the fiducial region.
- return true;
- }
-
- /**
- * Sets the name of the LCIO collection containing the clusters
- * that are to be plotted.
- * @param collection - The LCIO collection name.
- */
- public void setClusterCollectionName(String collection) {
- clusterCollectionName = collection;
- }
-
- /**
- * Defines the name of the LCIO collection containing the TI bank.
- * @param collection - The LCIO collection name.
- */
- public void setBankCollectionName(String collection) {
- bankCollectionName = collection;
- }
-
- /**
- * Sets the name of the super-group folder containing all plots.
- * @param name - The name of the plots folder.
- */
- public void setPlotsGroupName(String name) {
- plotsGroupName = name;
- }
+ + positionNames[j] + "/Pair Energy Slope 2D", 75, 0.000, 1.500, 100, 0.0, 400.0);
+ }
+ }
+ }
+
+ /**
+ * Processes the event clusters and populates distribution charts
+ * from them for each trigger. Also creates separate plots for the
+ * edge and fiducial regions.
+ * @param event - The event containing LCIO collections to be used
+ * for plot population.
+ */
+ @Override
+ public void process(EventHeader event) {
+ // Get the TI and SSP banks.
+ TIData tiBank = null;
+ SSPData sspBank = null;
+ if(event.hasCollection(GenericObject.class, bankCollectionName)) {
+ // Get the bank list.
+ List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
+
+ // Search through the banks and get the SSP and TI banks.
+ for(GenericObject obj : bankList) {
+ // If this is an SSP bank, parse it.
+ if(AbstractIntData.getTag(obj) == SSPData.BANK_TAG) {
+ sspBank = new SSPData(obj);
+ }
+
+ // Otherwise, if this is a TI bank, parse it.
+ else if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) {
+ tiBank = new TIData(obj);
+ }
+ }
+ }
+
+ // Get the list of clusters.
+ List<Cluster> clusters = null;
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ clusters = event.get(Cluster.class, clusterCollectionName);
+ }
+
+ // Require that all collections be initialized.
+ if(sspBank == null || tiBank == null || clusters == null) {
+ return;
+ }
+
+ // Track which triggers are active.
+ boolean[] activeTrigger = new boolean[5];
+ activeTrigger[PULSER] = tiBank.isPulserTrigger();
+ activeTrigger[SINGLES0] = tiBank.isSingle0Trigger();
+ activeTrigger[SINGLES1] = tiBank.isSingle1Trigger();
+ activeTrigger[PAIR0] = tiBank.isPair0Trigger();
+ activeTrigger[PAIR1] = tiBank.isPair1Trigger();
+
+ // Plot all cluster properties for each trigger.
+ for(Cluster cluster : clusters) {
+ // Check whether the cluster is a fiducial or edge cluster.
+ int positional = inFiducialRegion(cluster) ? FIDUCIAL : EDGE;
+
+ // Fill the appropriate plots for each trigger with an
+ // active trigger bit for single clusters.
+ for(int i = 0; i < 5; i++) {
+ if(activeTrigger[i]) {
+ // Populate the ALL plots.
+ clusterSeedEnergy[i][ALL].fill(TriggerModule.getValueClusterSeedEnergy(cluster));
+ clusterTotalEnergy[i][ALL].fill(cluster.getEnergy());
+ clusterHitCount[i][ALL].fill(TriggerModule.getClusterHitCount(cluster));
+ clusterTime[i][ALL].fill(TriggerModule.getClusterTime(cluster));
+ clusterSeedPosition[i][ALL].fill(TriggerModule.getClusterXIndex(cluster),
+ TriggerModule.getClusterYIndex(cluster));
+
+ // Populate the positional plots.
+ clusterSeedEnergy[i][positional].fill(TriggerModule.getValueClusterSeedEnergy(cluster));
+ clusterTotalEnergy[i][positional].fill(cluster.getEnergy());
+ clusterHitCount[i][positional].fill(TriggerModule.getClusterHitCount(cluster));
+ clusterTime[i][positional].fill(TriggerModule.getClusterTime(cluster));
+ clusterSeedPosition[i][positional].fill(TriggerModule.getClusterXIndex(cluster),
+ TriggerModule.getClusterYIndex(cluster));
+ }
+ }
+ }
+
+ // Plot all pair properties for each trigger.
+ List<Cluster[]> pairs = TriggerModule.getTopBottomPairs(clusters, Cluster.class);
+ for(Cluster[] pair : pairs) {
+ // Check whether the cluster is a fiducial or edge cluster.
+ boolean[] isFiducial = {
+ inFiducialRegion(pair[0]),
+ inFiducialRegion(pair[1])
+ };
+ int positional = (isFiducial[0] && isFiducial[1]) ? FIDUCIAL : EDGE;
+
+ // Fill the appropriate plots for each trigger with an
+ // active trigger bit for single clusters.
+ for(int i = 0; i < 5; i++) {
+ if(activeTrigger[i]) {
+ // Calculate the values.
+ double energySum = TriggerModule.getValueEnergySum(pair);
+ double energyDiff = TriggerModule.getValueEnergyDifference(pair);
+ double energySlope = TriggerModule.getValueEnergySlope(pair, 0.00550);
+ double coplanarity = TriggerModule.getValueCoplanarity(pair);
+ double timeCoincidence = TriggerModule.getValueTimeCoincidence(pair);
+
+ // Get the energy slope values.
+ Cluster lowCluster = pair[0].getEnergy() < pair[1].getEnergy() ? pair[0] : pair[1];
+ double clusterDistance = TriggerModule.getClusterDistance(lowCluster);
+
+ // Populate the ALL plots.
+ pairEnergySum[i][ALL].fill(energySum);
+ pairEnergyDifference[i][ALL].fill(energyDiff);
+ pairEnergySlope[i][ALL].fill(energySlope);
+ pairCoplanarity[i][ALL].fill(coplanarity);
+ pairTimeCoincidence[i][ALL].fill(timeCoincidence);
+ pairEnergySum2D[i][ALL].fill(pair[0].getEnergy(), pair[1].getEnergy());
+ pairCoplanarityEnergySum[i][ALL].fill(energySum, coplanarity);
+ pairEnergySlope2D[i][ALL].fill(lowCluster.getEnergy(), clusterDistance);
+
+ // Populate the positional plots.
+ pairEnergySum[i][positional].fill(energySum);
+ pairEnergyDifference[i][positional].fill(energyDiff);
+ pairEnergySlope[i][positional].fill(energySlope);
+ pairCoplanarity[i][positional].fill(coplanarity);
+ pairTimeCoincidence[i][positional].fill(timeCoincidence);
+ pairEnergySum2D[i][positional].fill(pair[0].getEnergy(), pair[1].getEnergy());
+ pairCoplanarityEnergySum[i][positional].fill(energySum, coplanarity);
+ pairEnergySlope2D[i][positional].fill(lowCluster.getEnergy(), clusterDistance);
+ }
+ }
+ }
+ }
+
+ /**
+ * Indicates whether the argument cluster is located in the fiducial
+ * region or not.
+ * @param cluster - The cluster to check.
+ * @return Returns <code>true</code> if the cluster is located in
+ * the fiducial region and <code>false</code> otherwise.
+ */
+ private static final boolean inFiducialRegion(Cluster cluster) {
+ // Get the x and y indices for the cluster.
+ int ix = TriggerModule.getClusterXIndex(cluster);
+ int absx = Math.abs(TriggerModule.getClusterXIndex(cluster));
+ int absy = Math.abs(TriggerModule.getClusterYIndex(cluster));
+
+ // Check if the cluster is on the top or the bottom of the
+ // calorimeter, as defined by |y| == 5. This is an edge cluster
+ // and is not in the fiducial region.
+ if(absy == 5) {
+ return false;
+ }
+
+ // Check if the cluster is on the extreme left or right side
+ // of the calorimeter, as defined by |x| == 23. This is also
+ // and edge cluster is not in the fiducial region.
+ if(absx == 23) {
+ return false;
+ }
+
+ // Check if the cluster is along the beam gap, as defined by
+ // |y| == 1. This is an internal edge cluster and is not in the
+ // fiducial region.
+ if(absy == 1) {
+ return false;
+ }
+
+ // Lastly, check if the cluster falls along the beam hole, as
+ // defined by clusters with -11 <= x <= -1 and |y| == 2. This
+ // is not the fiducial region.
+ if(absy == 2 && ix <= -1 && ix >= -11) {
+ return false;
+ }
+
+ // If all checks fail, the cluster is in the fiducial region.
+ return true;
+ }
+
+ /**
+ * Sets the name of the LCIO collection containing the clusters
+ * that are to be plotted.
+ * @param collection - The LCIO collection name.
+ */
+ public void setClusterCollectionName(String collection) {
+ clusterCollectionName = collection;
+ }
+
+ /**
+ * Defines the name of the LCIO collection containing the TI bank.
+ * @param collection - The LCIO collection name.
+ */
+ public void setBankCollectionName(String collection) {
+ bankCollectionName = collection;
+ }
+
+ /**
+ * Sets the name of the super-group folder containing all plots.
+ * @param name - The name of the plots folder.
+ */
+ public void setPlotsGroupName(String name) {
+ plotsGroupName = name;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/InvariantMassPairDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/InvariantMassPairDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/InvariantMassPairDriver.java Wed Mar 9 11:43:24 2016
@@ -15,255 +15,255 @@
import org.lcsim.util.aida.AIDA;
public class InvariantMassPairDriver extends Driver {
- private int[] events = new int[3];
- private TriggerModule[] trigger = new TriggerModule[2];
-
- private String gtpClusterCollectionName = "EcalClustersGTP";
- private String particleCollectionName = "FinalStateParticles";
- private String reconParticleCollectionName = "UnconstrainedV0Candidates";
-
- private AIDA aida = AIDA.defaultInstance();
- private IHistogram1D electronEnergyHist = aida.histogram1D("Trident Analysis/Electron Energy", 150, 0.000, 1.500);
- private IHistogram1D positronEnergyHist = aida.histogram1D("Trident Analysis/Positron Energy", 150, 0.000, 1.500);
- private IHistogram1D pairEnergyHist = aida.histogram1D("Trident Analysis/Energy Sum Distribution", 220, 0.00, 2.200);
- private IHistogram2D pair2DEnergyHist = aida.histogram2D("Trident Analysis/2D Energy Distribution", 55, 0, 1.1, 55, 0, 1.1);
- private IHistogram1D pair1MassHist = aida.histogram1D("Trident Analysis/Particle Invariant Mass (1 Hit)", 240, 0.000, 0.120);
- private IHistogram1D pair1ModMassHist = aida.histogram1D("Trident Analysis/Particle Invariant Mass (2 Hit)", 240, 0.000, 0.120);
- private IHistogram1D elasticElectronEnergyHist = aida.histogram1D("Trident Analysis/Trident Electron Energy", 150, 0.000, 1.500);
- private IHistogram1D elasticPositronEnergyHist = aida.histogram1D("Trident Analysis/Trident Positron Energy", 150, 0.000, 1.500);
-
- @Override
- public void startOfData() {
- // Instantiate the pair 1 trigger.
- trigger[0] = new TriggerModule();
- trigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 1);
- trigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.054);
- trigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 0.630);
- trigger[0].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 30);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 0.540);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.180);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 0.860);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.600);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.0055);
- trigger[0].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 12);
-
- // Instantiate the pair 1 trigger with a hit count cut of two.
- trigger[1] = new TriggerModule();
- trigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 2);
- trigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.054);
- trigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 0.630);
- trigger[0].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 30);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 0.540);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.180);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 0.860);
- trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.600);
- trigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.0055);
- trigger[0].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 12);
- }
-
- @Override
- public void endOfData() {
- System.out.printf("Pair 1 :: %d / %d%n", events[0], events[2]);
- System.out.printf("Pair 1 Mod :: %d / %d%n", events[1], events[2]);
- }
-
- @Override
- public void process(EventHeader event) {
- // Skip the event if there is no reconstructed particle list.
- if(!event.hasCollection(ReconstructedParticle.class, particleCollectionName)) {
- return;
- }
-
- // Get a list of all tracks in the event.
- List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, particleCollectionName);
-
- // Plot the energies of the electrons and positrons.
- for(ReconstructedParticle track : trackList) {
- // Positive tracks are assumed to be positrons.
- if(track.getCharge() > 0) {
- positronEnergyHist.fill(track.getMomentum().magnitude());
- }
-
- // Negative tracks are assumed to be electrons.
- else if(track.getCharge() < 0) {
- electronEnergyHist.fill(track.getMomentum().magnitude());
- }
- }
-
- // Get track pairs.
- List<ReconstructedParticle[]> trackPairList = getTrackPairs(trackList);
-
- // Populate the pair plots.
- trackPairLoop:
- for(ReconstructedParticle[] trackPair : trackPairList) {
- // Note the polarity of the tracks.
- boolean[] trackIsPositive = {
- trackPair[0].getCharge() > 0,
- trackPair[1].getCharge() > 0
- };
-
- // Require that one track be positive and one be negative.
- if(!(trackIsPositive[0] ^ trackIsPositive[1])) {
- continue trackPairLoop;
- }
-
- // Populate the track pair plots.
- pairEnergyHist.fill(VecOp.add(trackPair[0].getMomentum(), trackPair[1].getMomentum()).magnitude());
- if(trackIsPositive[0]) {
- pair2DEnergyHist.fill(trackPair[0].getMomentum().magnitude(), trackPair[1].getMomentum().magnitude());
- } else {
- pair2DEnergyHist.fill(trackPair[1].getMomentum().magnitude(), trackPair[0].getMomentum().magnitude());
- }
- }
-
- // Check that the event has a collection of GTP clusters.
- if(!event.hasCollection(Cluster.class, gtpClusterCollectionName)) {
- return;
- }
-
- // Increment the total event count.
- events[2]++;
-
- // Get the GTP clusters.
- List<Cluster> clusters = event.get(Cluster.class, gtpClusterCollectionName);
-
- // Get the list of top/bottom pairs.
- List<Cluster[]> pairs = getClusterPairs(clusters);
-
- // Iterate over the pairs and determine if any cluster passes
- // pair 1 trigger or the pair 1 modified trigger.
- boolean passedPair1 = false;
- boolean passedPair1Mod = false;
- pairLoop:
- for(Cluster[] pair : pairs) {
- // Check the cluster energy cut.
- if(!trigger[0].clusterTotalEnergyCut(pair[0])) { continue pairLoop; }
- if(!trigger[0].clusterTotalEnergyCut(pair[1])) { continue pairLoop; }
-
- // Check the pair cuts.
- if(!trigger[0].pairCoplanarityCut(pair)) { continue pairLoop; }
- if(!trigger[0].pairEnergyDifferenceCut(pair)) { continue pairLoop; }
- if(!trigger[0].pairEnergySumCut(pair)) { continue pairLoop; }
- if(!trigger[0].pairEnergySlopeCut(pair)) { continue pairLoop; }
-
- // Check if the pair passes the singles 0 hit count cut.
- if(trigger[0].clusterHitCountCut(pair[0]) && trigger[0].clusterHitCountCut(pair[1])) {
- // Note that a pair passed the pair 1 trigger.
- passedPair1 = true;
-
- // Check whether the pair passed the modified pair 1
- // trigger hit count cut.
- if(trigger[1].clusterHitCountCut(pair[0]) && trigger[1].clusterHitCountCut(pair[1])) {
- passedPair1Mod = true;
- }
- } else { continue pairLoop; }
- }
-
- // If no pair passed the pair 1 cut, nothing further need be done.
- if(!passedPair1) { return; }
-
- // Otherwise, increment the "passed pair 1" count and the
- // "passed pair 1 mod" count, if appropriate.
- events[0]++;
- if(passedPair1Mod) { events[1]++; }
-
- // Get the collection of reconstructed V0 candidates.
- List<ReconstructedParticle> candidateList = event.get(ReconstructedParticle.class, reconParticleCollectionName);
-
- // Populate the invariant mass plot.
- candidateLoop:
- for(ReconstructedParticle particle : candidateList) {
- // Track the electron and positron momenta.
- double electronMomentum = 0.0;
- double positronMomentum = 0.0;
-
- // Check that it has component particles that meet the
- // trident condition.
- boolean seenPositive = false;
- boolean seenNegative = false;
- for(ReconstructedParticle track : particle.getParticles()) {
- // Exactly one track must be negative. Its energy is
- // disallowed from exceeding 900 MeV.
- if(track.getCharge() < 0) {
- // Reject a second negative particle.
- if(seenNegative) { continue candidateLoop; }
-
- // Otherwise, note that one has been seen.
- seenNegative = true;
- electronMomentum = track.getMomentum().magnitude();
-
- // Reject electrons with a momentum exceeding 900 MeV.
- if(track.getMomentum().magnitude() > 0.900) {
- continue candidateLoop;
- }
- }
-
- // Exactly one track must be positive. Its energy is
- // not constrained.
- else if(track.getCharge() > 0) {
- // Reject a second positive particle.
- if(seenPositive) { continue candidateLoop; }
-
- // Otherwise, note that one has been seen.
- seenPositive = true;
- positronMomentum = track.getMomentum().magnitude();
- }
-
- // Lastly, reject any particle that produced a photon.
- else { continue candidateLoop; }
- }
-
- // Populate the plots.
- pair1MassHist.fill(particle.getMass());
- elasticElectronEnergyHist.fill(electronMomentum);
- elasticPositronEnergyHist.fill(positronMomentum);
- if(passedPair1Mod) { pair1ModMassHist.fill(particle.getMass()); }
- }
- }
-
- /**
- * Creates a list of top/bottom cluster pairs.
- * @param clusters - A <code>List</code> collection of objects of
- * type <code>Cluster</code>.
- * @return Returns a <code>List</code> collection of 2-entry arrays
- * of <code>Cluster</code> objects representing top/bottom cluster
- * pairs. The first entry is always the top cluster.
- */
- private static final List<Cluster[]> getClusterPairs(List<Cluster> clusters) {
- // Separate the clusters into top and bottom clusters.
- List<Cluster> topList = new ArrayList<Cluster>();
- List<Cluster> botList = new ArrayList<Cluster>();
- for(Cluster cluster : clusters) {
- if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
- topList.add(cluster);
- }
- else { botList.add(cluster); }
- }
-
- // Create a list of all top/bottom pairs.
- List<Cluster[]> pairs = new ArrayList<Cluster[]>();
- for(Cluster topCluster : topList) {
- for(Cluster botCluster : botList) {
- pairs.add(new Cluster[] { topCluster, botCluster });
- }
- }
-
- // Return the list of cluster pairs.
- return pairs;
- }
-
- private static final List<ReconstructedParticle[]> getTrackPairs(List<ReconstructedParticle> trackList) {
- // Create an empty list for the pairs.
- List<ReconstructedParticle[]> pairs = new ArrayList<ReconstructedParticle[]>();
-
- // Add all possible pairs of tracks.
- for(int i = 0; i < trackList.size(); i++) {
- for(int j = i + 1; j < trackList.size(); j++) {
- pairs.add(new ReconstructedParticle[] { trackList.get(i), trackList.get(j) });
- }
- }
-
- // Return the list of tracks.
- return pairs;
- }
+ private int[] events = new int[3];
+ private TriggerModule[] trigger = new TriggerModule[2];
+
+ private String gtpClusterCollectionName = "EcalClustersGTP";
+ private String particleCollectionName = "FinalStateParticles";
+ private String reconParticleCollectionName = "UnconstrainedV0Candidates";
+
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D electronEnergyHist = aida.histogram1D("Trident Analysis/Electron Energy", 150, 0.000, 1.500);
+ private IHistogram1D positronEnergyHist = aida.histogram1D("Trident Analysis/Positron Energy", 150, 0.000, 1.500);
+ private IHistogram1D pairEnergyHist = aida.histogram1D("Trident Analysis/Energy Sum Distribution", 220, 0.00, 2.200);
+ private IHistogram2D pair2DEnergyHist = aida.histogram2D("Trident Analysis/2D Energy Distribution", 55, 0, 1.1, 55, 0, 1.1);
+ private IHistogram1D pair1MassHist = aida.histogram1D("Trident Analysis/Particle Invariant Mass (1 Hit)", 240, 0.000, 0.120);
+ private IHistogram1D pair1ModMassHist = aida.histogram1D("Trident Analysis/Particle Invariant Mass (2 Hit)", 240, 0.000, 0.120);
+ private IHistogram1D elasticElectronEnergyHist = aida.histogram1D("Trident Analysis/Trident Electron Energy", 150, 0.000, 1.500);
+ private IHistogram1D elasticPositronEnergyHist = aida.histogram1D("Trident Analysis/Trident Positron Energy", 150, 0.000, 1.500);
+
+ @Override
+ public void startOfData() {
+ // Instantiate the pair 1 trigger.
+ trigger[0] = new TriggerModule();
+ trigger[0].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 1);
+ trigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.054);
+ trigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 0.630);
+ trigger[0].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 30);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 0.540);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.180);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 0.860);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.600);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.0055);
+ trigger[0].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 12);
+
+ // Instantiate the pair 1 trigger with a hit count cut of two.
+ trigger[1] = new TriggerModule();
+ trigger[1].setCutValue(TriggerModule.CLUSTER_HIT_COUNT_LOW, 2);
+ trigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_LOW, 0.054);
+ trigger[0].setCutValue(TriggerModule.CLUSTER_TOTAL_ENERGY_HIGH, 0.630);
+ trigger[0].setCutValue(TriggerModule.PAIR_COPLANARITY_HIGH, 30);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_DIFFERENCE_HIGH, 0.540);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_LOW, 0.180);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SUM_HIGH, 0.860);
+ trigger[0].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_LOW, 0.600);
+ trigger[1].setCutValue(TriggerModule.PAIR_ENERGY_SLOPE_F, 0.0055);
+ trigger[0].setCutValue(TriggerModule.PAIR_TIME_COINCIDENCE, 12);
+ }
+
+ @Override
+ public void endOfData() {
+ System.out.printf("Pair 1 :: %d / %d%n", events[0], events[2]);
+ System.out.printf("Pair 1 Mod :: %d / %d%n", events[1], events[2]);
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ // Skip the event if there is no reconstructed particle list.
+ if(!event.hasCollection(ReconstructedParticle.class, particleCollectionName)) {
+ return;
+ }
+
+ // Get a list of all tracks in the event.
+ List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, particleCollectionName);
+
+ // Plot the energies of the electrons and positrons.
+ for(ReconstructedParticle track : trackList) {
+ // Positive tracks are assumed to be positrons.
+ if(track.getCharge() > 0) {
+ positronEnergyHist.fill(track.getMomentum().magnitude());
+ }
+
+ // Negative tracks are assumed to be electrons.
+ else if(track.getCharge() < 0) {
+ electronEnergyHist.fill(track.getMomentum().magnitude());
+ }
+ }
+
+ // Get track pairs.
+ List<ReconstructedParticle[]> trackPairList = getTrackPairs(trackList);
+
+ // Populate the pair plots.
+ trackPairLoop:
+ for(ReconstructedParticle[] trackPair : trackPairList) {
+ // Note the polarity of the tracks.
+ boolean[] trackIsPositive = {
+ trackPair[0].getCharge() > 0,
+ trackPair[1].getCharge() > 0
+ };
+
+ // Require that one track be positive and one be negative.
+ if(!(trackIsPositive[0] ^ trackIsPositive[1])) {
+ continue trackPairLoop;
+ }
+
+ // Populate the track pair plots.
+ pairEnergyHist.fill(VecOp.add(trackPair[0].getMomentum(), trackPair[1].getMomentum()).magnitude());
+ if(trackIsPositive[0]) {
+ pair2DEnergyHist.fill(trackPair[0].getMomentum().magnitude(), trackPair[1].getMomentum().magnitude());
+ } else {
+ pair2DEnergyHist.fill(trackPair[1].getMomentum().magnitude(), trackPair[0].getMomentum().magnitude());
+ }
+ }
+
+ // Check that the event has a collection of GTP clusters.
+ if(!event.hasCollection(Cluster.class, gtpClusterCollectionName)) {
+ return;
+ }
+
+ // Increment the total event count.
+ events[2]++;
+
+ // Get the GTP clusters.
+ List<Cluster> clusters = event.get(Cluster.class, gtpClusterCollectionName);
+
+ // Get the list of top/bottom pairs.
+ List<Cluster[]> pairs = getClusterPairs(clusters);
+
+ // Iterate over the pairs and determine if any cluster passes
+ // pair 1 trigger or the pair 1 modified trigger.
+ boolean passedPair1 = false;
+ boolean passedPair1Mod = false;
+ pairLoop:
+ for(Cluster[] pair : pairs) {
+ // Check the cluster energy cut.
+ if(!trigger[0].clusterTotalEnergyCut(pair[0])) { continue pairLoop; }
+ if(!trigger[0].clusterTotalEnergyCut(pair[1])) { continue pairLoop; }
+
+ // Check the pair cuts.
+ if(!trigger[0].pairCoplanarityCut(pair)) { continue pairLoop; }
+ if(!trigger[0].pairEnergyDifferenceCut(pair)) { continue pairLoop; }
+ if(!trigger[0].pairEnergySumCut(pair)) { continue pairLoop; }
+ if(!trigger[0].pairEnergySlopeCut(pair)) { continue pairLoop; }
+
+ // Check if the pair passes the singles 0 hit count cut.
+ if(trigger[0].clusterHitCountCut(pair[0]) && trigger[0].clusterHitCountCut(pair[1])) {
+ // Note that a pair passed the pair 1 trigger.
+ passedPair1 = true;
+
+ // Check whether the pair passed the modified pair 1
+ // trigger hit count cut.
+ if(trigger[1].clusterHitCountCut(pair[0]) && trigger[1].clusterHitCountCut(pair[1])) {
+ passedPair1Mod = true;
+ }
+ } else { continue pairLoop; }
+ }
+
+ // If no pair passed the pair 1 cut, nothing further need be done.
+ if(!passedPair1) { return; }
+
+ // Otherwise, increment the "passed pair 1" count and the
+ // "passed pair 1 mod" count, if appropriate.
+ events[0]++;
+ if(passedPair1Mod) { events[1]++; }
+
+ // Get the collection of reconstructed V0 candidates.
+ List<ReconstructedParticle> candidateList = event.get(ReconstructedParticle.class, reconParticleCollectionName);
+
+ // Populate the invariant mass plot.
+ candidateLoop:
+ for(ReconstructedParticle particle : candidateList) {
+ // Track the electron and positron momenta.
+ double electronMomentum = 0.0;
+ double positronMomentum = 0.0;
+
+ // Check that it has component particles that meet the
+ // trident condition.
+ boolean seenPositive = false;
+ boolean seenNegative = false;
+ for(ReconstructedParticle track : particle.getParticles()) {
+ // Exactly one track must be negative. Its energy is
+ // disallowed from exceeding 900 MeV.
+ if(track.getCharge() < 0) {
+ // Reject a second negative particle.
+ if(seenNegative) { continue candidateLoop; }
+
+ // Otherwise, note that one has been seen.
+ seenNegative = true;
+ electronMomentum = track.getMomentum().magnitude();
+
+ // Reject electrons with a momentum exceeding 900 MeV.
+ if(track.getMomentum().magnitude() > 0.900) {
+ continue candidateLoop;
+ }
+ }
+
+ // Exactly one track must be positive. Its energy is
+ // not constrained.
+ else if(track.getCharge() > 0) {
+ // Reject a second positive particle.
+ if(seenPositive) { continue candidateLoop; }
+
+ // Otherwise, note that one has been seen.
+ seenPositive = true;
+ positronMomentum = track.getMomentum().magnitude();
+ }
+
+ // Lastly, reject any particle that produced a photon.
+ else { continue candidateLoop; }
+ }
+
+ // Populate the plots.
+ pair1MassHist.fill(particle.getMass());
+ elasticElectronEnergyHist.fill(electronMomentum);
+ elasticPositronEnergyHist.fill(positronMomentum);
+ if(passedPair1Mod) { pair1ModMassHist.fill(particle.getMass()); }
+ }
+ }
+
+ /**
+ * Creates a list of top/bottom cluster pairs.
+ * @param clusters - A <code>List</code> collection of objects of
+ * type <code>Cluster</code>.
+ * @return Returns a <code>List</code> collection of 2-entry arrays
+ * of <code>Cluster</code> objects representing top/bottom cluster
+ * pairs. The first entry is always the top cluster.
+ */
+ private static final List<Cluster[]> getClusterPairs(List<Cluster> clusters) {
+ // Separate the clusters into top and bottom clusters.
+ List<Cluster> topList = new ArrayList<Cluster>();
+ List<Cluster> botList = new ArrayList<Cluster>();
+ for(Cluster cluster : clusters) {
+ if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
+ topList.add(cluster);
+ }
+ else { botList.add(cluster); }
+ }
+
+ // Create a list of all top/bottom pairs.
+ List<Cluster[]> pairs = new ArrayList<Cluster[]>();
+ for(Cluster topCluster : topList) {
+ for(Cluster botCluster : botList) {
+ pairs.add(new Cluster[] { topCluster, botCluster });
+ }
+ }
+
+ // Return the list of cluster pairs.
+ return pairs;
+ }
+
+ private static final List<ReconstructedParticle[]> getTrackPairs(List<ReconstructedParticle> trackList) {
+ // Create an empty list for the pairs.
+ List<ReconstructedParticle[]> pairs = new ArrayList<ReconstructedParticle[]>();
+
+ // Add all possible pairs of tracks.
+ for(int i = 0; i < trackList.size(); i++) {
+ for(int j = i + 1; j < trackList.size(); j++) {
+ pairs.add(new ReconstructedParticle[] { trackList.get(i), trackList.get(j) });
+ }
+ }
+
+ // Return the list of tracks.
+ return pairs;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java Wed Mar 9 11:43:24 2016
@@ -24,145 +24,145 @@
import org.lcsim.util.aida.AIDA;
public class MTEAnalysis extends Driver {
- // Define track LCIO information.
- private boolean skipBadSVT = true;
- private String bankCollectionName = "TriggerBank";
- private String particleCollectionName = "FinalStateParticles";
- private static final AIDA aida = AIDA.defaultInstance();
- private IHistogram1D[] chargedTracksPlot = {
- aida.histogram1D("MTE Analysis/Møller Event Tracks", 10, -0.5, 9.5),
- aida.histogram1D("MTE Analysis/Trident Event Tracks", 10, -0.5, 9.5),
- aida.histogram1D("MTE Analysis/Elastic Event Tracks", 10, -0.5, 9.5)
- };
- private IHistogram1D[] clusterCountPlot = {
- aida.histogram1D("MTE Analysis/Møller Event Clusters", 10, -0.5, 9.5),
- aida.histogram1D("MTE Analysis/Trident Event Clusters", 10, -0.5, 9.5),
- aida.histogram1D("MTE Analysis/Elastic Event Clusters", 10, -0.5, 9.5)
- };
- private IHistogram1D[] energyPlot = {
- aida.histogram1D("MTE Analysis/Møller Energy Sum Distribution", 220, 0, 2.2),
- aida.histogram1D("MTE Analysis/Trident Energy Sum Distribution", 220, 0, 2.2),
- aida.histogram1D("MTE Analysis/Elastic Energy Distribution", 110, 0, 1.5)
- };
- private IHistogram1D[] electronPlot = {
- aida.histogram1D("MTE Analysis/Møller Electron Energy Distribution", 220, 0, 2.2),
- aida.histogram1D("MTE Analysis/Trident Electron Energy Distribution", 220, 0, 2.2),
- };
- private IHistogram1D positronPlot = aida.histogram1D("MTE Analysis/Trident Positron Energy Distribution", 220, 0, 2.2);
- private IHistogram2D[] energy2DPlot = {
- aida.histogram2D("MTE Analysis/Møller 2D Energy Distribution", 55, 0, 1.1, 55, 0, 1.1),
- aida.histogram2D("MTE Analysis/Trident 2D Energy Distribution", 55, 0, 1.1, 55, 0, 1.1),
- };
- private IHistogram1D timePlot = aida.histogram1D("MTE Analysis/Track Cluster Time Distribution", 4000, 0, 400);
- private IHistogram1D timeCoincidencePlot = aida.histogram1D("MTE Analysis/Møller Time Coincidence Distribution", 1000, 0, 100);
- private IHistogram1D timeCoincidenceAllCutsPlot = aida.histogram1D("MTE Analysis/Møller Time Coincidence Distribution (All Møller Cuts)", 1000, 0, 100);
- private IHistogram1D negTrackCount = aida.histogram1D("MTE Analysis/All Negative Tracks", 10, -0.5, 9.5);
- private IHistogram1D posTrackCount = aida.histogram1D("MTE Analysis/All Positive Event Tracks", 10, -0.5, 9.5);
- private IHistogram1D chargedTrackCount = aida.histogram1D("MTE Analysis/All Event Event Tracks", 10, -0.5, 9.5);
-
- private IHistogram1D trInvariantMassAll = aida.histogram1D("Trident/Invariant Mass", 1500, 0.0, 1.5);
- private IHistogram1D trInvariantMassFiducial = aida.histogram1D("Trident/Invariant Mass (Fiducial Region)", 1500, 0.0, 1.5);
- private IHistogram1D trTimeCoincidenceAll = aida.histogram1D("Trident/Time Coincidence", 300, -15.0, 15.0);
- private IHistogram1D trTimeCoincidenceFiducial = aida.histogram1D("Trident/Time Coincidence (Fiducial Region)", 300, -15.0, 15.0);
- private IHistogram1D trEnergySumAll = aida.histogram1D("Trident/Energy Sum", 300, 0.0, 1.5);
- private IHistogram1D trEnergySumFiducial = aida.histogram1D("Trident/Energy Sum (Fiducial Region)", 300, 0.0, 1.5);
- private IHistogram2D trEnergySum2DAll = aida.histogram2D("Trident/First Cluster Energy vs. Second Cluster Energy", 300, 0, 1.5, 300, 0, 1.5);
- private IHistogram2D trEnergySum2DFiducial = aida.histogram2D("Trident/First Cluster Energy vs. Second Cluster Energy (Fiducial Region)", 300, 0, 1.5, 300, 0, 1.5);
- private IHistogram2D trSumCoplanarityAll = aida.histogram2D("Trident/Hardware Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 0, 180);
- private IHistogram2D trSumCoplanarityFiducial = aida.histogram2D("Trident/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 0, 180);
- private IHistogram2D trSumCoplanarityCalcAll = aida.histogram2D("Trident/Calculated Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 130, 230);
- private IHistogram2D trSumCoplanarityCalcFiducial = aida.histogram2D("Trident/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 130, 230);
- private IHistogram2D trTimeEnergyAll = aida.histogram2D("Trident/Cluster Time vs. Cluster Energy", 300, 0, 1.5, 100, 0, 100);
- private IHistogram2D trTimeEnergyFiducial = aida.histogram2D("Trident/Cluster Time vs. Cluster Energy (Fiducial Region)", 300, 0, 1.5, 100, 0, 100);
-
- private TriggerPlotsModule allPlots = new TriggerPlotsModule("All");
- private TriggerPlotsModule møllerPlots = new TriggerPlotsModule("Møller");
- private TriggerPlotsModule tridentPlots = new TriggerPlotsModule("Trident");
- private TriggerPlotsModule elasticPlots = new TriggerPlotsModule("Elastic");
- private static final int MÃLLER = 0;
- private static final int TRIDENT = 1;
- private static final int ELASTIC = 2;
- private boolean verbose = false;
- private boolean excludeNoTrackEvents = false;
- private double timeCoincidenceCut = Double.MAX_VALUE;
- private Map<String, Integer> møllerBitMap = new HashMap<String, Integer>();
- private Map<String, Integer> tridentBitMap = new HashMap<String, Integer>();
- private Map<String, Integer> elasticBitMap = new HashMap<String, Integer>();
- private int møllerEvents = 0;
- private int tridentEvents = 0;
- private int elasticEvents = 0;
- private int totalEvents = 0;
- private int pair1Events = 0;
- private int pair0Events = 0;
- private int singles1Events = 0;
- private int singles0Events = 0;
- private int pulserEvents = 0;
-
- @Override
- public void startOfData() {
- for(int s0 = 0; s0 <= 1; s0++) {
- for(int s1 = 0; s1 <= 1; s1++) {
- for(int p0 = 0; p0 <= 1; p0++) {
- for(int p1 = 0; p1 <= 1; p1++) {
- for(int pulser = 0; pulser <=1; pulser++) {
- // Set each "trigger bit."
- boolean s0bit = (s0 == 1);
- boolean s1bit = (s1 == 1);
- boolean p0bit = (p0 == 1);
- boolean p1bit = (p1 == 1);
- boolean pulserBit = (p1 == 1);
-
- // Generate the bit string.
- String bitString = getBitString(s0bit, s1bit, p0bit, p1bit, pulserBit);
-
- // Set a default value of zero for this bit combination.
- møllerBitMap.put(bitString, 1);
- tridentBitMap.put(bitString, 1);
- elasticBitMap.put(bitString, 1);
- }
- }
- }
- }
- }
- }
-
- @Override
- public void endOfData() {
- System.out.println("Møller Events :: " + møllerEvents);
- System.out.println("Trident Events :: " + tridentEvents);
- System.out.println("Elastic Events :: " + elasticEvents);
- System.out.println("Total Events :: " + totalEvents);
- System.out.println("Pair 1 Events :: " + pair1Events);
- System.out.println("Pair 0 Events :: " + pair0Events);
- System.out.println("Singles 1 Events :: " + singles1Events);
- System.out.println("Singles 0 Events :: " + singles0Events);
- System.out.println("Pulser Events :: " + pulserEvents);
-
- System.out.println("Plsr\tS0\tS1\tP0\tP1\tMøller");
- for(Entry<String, Integer> entry : møllerBitMap.entrySet()) {
- System.out.println(entry.getKey() + "\t" + entry.getValue());
- }
-
- System.out.println("Plsr\tS0\tS1\tP0\tP1\tTrident");
- for(Entry<String, Integer> entry : tridentBitMap.entrySet()) {
- System.out.println(entry.getKey() + "\t" + entry.getValue());
- }
-
- System.out.println("Plsr\tS0\tS1\tP0\tP1\tElastic");
- for(Entry<String, Integer> entry : elasticBitMap.entrySet()) {
- System.out.println(entry.getKey() + "\t" + entry.getValue());
- }
- }
-
- private static final String getBitString(boolean s0, boolean s1, boolean p0, boolean p1, boolean pulser) {
- return String.format("%d\t%d\t%d\t%d\t%d", (pulser ? 1 : 0), (s0 ? 1 : 0), (s1 ? 1 : 0), (p0 ? 1 : 0), (p1 ? 1 : 0));
- }
-
- @Override
- public void process(EventHeader event) {
- // Check whether the SVT was active in this event.
- final String[] flagNames = { "svt_bias_good", "svt_burstmode_noise_good", "svt_position_good" };
- boolean svtGood = true;
+ // Define track LCIO information.
+ private boolean skipBadSVT = true;
+ private String bankCollectionName = "TriggerBank";
+ private String particleCollectionName = "FinalStateParticles";
+ private static final AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D[] chargedTracksPlot = {
+ aida.histogram1D("MTE Analysis/Møller Event Tracks", 10, -0.5, 9.5),
+ aida.histogram1D("MTE Analysis/Trident Event Tracks", 10, -0.5, 9.5),
+ aida.histogram1D("MTE Analysis/Elastic Event Tracks", 10, -0.5, 9.5)
+ };
+ private IHistogram1D[] clusterCountPlot = {
+ aida.histogram1D("MTE Analysis/Møller Event Clusters", 10, -0.5, 9.5),
+ aida.histogram1D("MTE Analysis/Trident Event Clusters", 10, -0.5, 9.5),
+ aida.histogram1D("MTE Analysis/Elastic Event Clusters", 10, -0.5, 9.5)
+ };
+ private IHistogram1D[] energyPlot = {
+ aida.histogram1D("MTE Analysis/Møller Energy Sum Distribution", 220, 0, 2.2),
+ aida.histogram1D("MTE Analysis/Trident Energy Sum Distribution", 220, 0, 2.2),
+ aida.histogram1D("MTE Analysis/Elastic Energy Distribution", 110, 0, 1.5)
+ };
+ private IHistogram1D[] electronPlot = {
+ aida.histogram1D("MTE Analysis/Møller Electron Energy Distribution", 220, 0, 2.2),
+ aida.histogram1D("MTE Analysis/Trident Electron Energy Distribution", 220, 0, 2.2),
+ };
+ private IHistogram1D positronPlot = aida.histogram1D("MTE Analysis/Trident Positron Energy Distribution", 220, 0, 2.2);
+ private IHistogram2D[] energy2DPlot = {
+ aida.histogram2D("MTE Analysis/Møller 2D Energy Distribution", 55, 0, 1.1, 55, 0, 1.1),
+ aida.histogram2D("MTE Analysis/Trident 2D Energy Distribution", 55, 0, 1.1, 55, 0, 1.1),
+ };
+ private IHistogram1D timePlot = aida.histogram1D("MTE Analysis/Track Cluster Time Distribution", 4000, 0, 400);
+ private IHistogram1D timeCoincidencePlot = aida.histogram1D("MTE Analysis/Møller Time Coincidence Distribution", 1000, 0, 100);
+ private IHistogram1D timeCoincidenceAllCutsPlot = aida.histogram1D("MTE Analysis/Møller Time Coincidence Distribution (All Møller Cuts)", 1000, 0, 100);
+ private IHistogram1D negTrackCount = aida.histogram1D("MTE Analysis/All Negative Tracks", 10, -0.5, 9.5);
+ private IHistogram1D posTrackCount = aida.histogram1D("MTE Analysis/All Positive Event Tracks", 10, -0.5, 9.5);
+ private IHistogram1D chargedTrackCount = aida.histogram1D("MTE Analysis/All Event Event Tracks", 10, -0.5, 9.5);
+
+ private IHistogram1D trInvariantMassAll = aida.histogram1D("Trident/Invariant Mass", 1500, 0.0, 1.5);
+ private IHistogram1D trInvariantMassFiducial = aida.histogram1D("Trident/Invariant Mass (Fiducial Region)", 1500, 0.0, 1.5);
+ private IHistogram1D trTimeCoincidenceAll = aida.histogram1D("Trident/Time Coincidence", 300, -15.0, 15.0);
+ private IHistogram1D trTimeCoincidenceFiducial = aida.histogram1D("Trident/Time Coincidence (Fiducial Region)", 300, -15.0, 15.0);
+ private IHistogram1D trEnergySumAll = aida.histogram1D("Trident/Energy Sum", 300, 0.0, 1.5);
+ private IHistogram1D trEnergySumFiducial = aida.histogram1D("Trident/Energy Sum (Fiducial Region)", 300, 0.0, 1.5);
+ private IHistogram2D trEnergySum2DAll = aida.histogram2D("Trident/First Cluster Energy vs. Second Cluster Energy", 300, 0, 1.5, 300, 0, 1.5);
+ private IHistogram2D trEnergySum2DFiducial = aida.histogram2D("Trident/First Cluster Energy vs. Second Cluster Energy (Fiducial Region)", 300, 0, 1.5, 300, 0, 1.5);
+ private IHistogram2D trSumCoplanarityAll = aida.histogram2D("Trident/Hardware Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 0, 180);
+ private IHistogram2D trSumCoplanarityFiducial = aida.histogram2D("Trident/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 0, 180);
+ private IHistogram2D trSumCoplanarityCalcAll = aida.histogram2D("Trident/Calculated Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 130, 230);
+ private IHistogram2D trSumCoplanarityCalcFiducial = aida.histogram2D("Trident/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 130, 230);
+ private IHistogram2D trTimeEnergyAll = aida.histogram2D("Trident/Cluster Time vs. Cluster Energy", 300, 0, 1.5, 100, 0, 100);
+ private IHistogram2D trTimeEnergyFiducial = aida.histogram2D("Trident/Cluster Time vs. Cluster Energy (Fiducial Region)", 300, 0, 1.5, 100, 0, 100);
+
+ private TriggerPlotsModule allPlots = new TriggerPlotsModule("All");
+ private TriggerPlotsModule møllerPlots = new TriggerPlotsModule("Møller");
+ private TriggerPlotsModule tridentPlots = new TriggerPlotsModule("Trident");
+ private TriggerPlotsModule elasticPlots = new TriggerPlotsModule("Elastic");
+ private static final int MÃLLER = 0;
+ private static final int TRIDENT = 1;
+ private static final int ELASTIC = 2;
+ private boolean verbose = false;
+ private boolean excludeNoTrackEvents = false;
+ private double timeCoincidenceCut = Double.MAX_VALUE;
+ private Map<String, Integer> møllerBitMap = new HashMap<String, Integer>();
+ private Map<String, Integer> tridentBitMap = new HashMap<String, Integer>();
+ private Map<String, Integer> elasticBitMap = new HashMap<String, Integer>();
+ private int møllerEvents = 0;
+ private int tridentEvents = 0;
+ private int elasticEvents = 0;
+ private int totalEvents = 0;
+ private int pair1Events = 0;
+ private int pair0Events = 0;
+ private int singles1Events = 0;
+ private int singles0Events = 0;
+ private int pulserEvents = 0;
+
+ @Override
+ public void startOfData() {
+ for(int s0 = 0; s0 <= 1; s0++) {
+ for(int s1 = 0; s1 <= 1; s1++) {
+ for(int p0 = 0; p0 <= 1; p0++) {
+ for(int p1 = 0; p1 <= 1; p1++) {
+ for(int pulser = 0; pulser <=1; pulser++) {
+ // Set each "trigger bit."
+ boolean s0bit = (s0 == 1);
+ boolean s1bit = (s1 == 1);
+ boolean p0bit = (p0 == 1);
+ boolean p1bit = (p1 == 1);
+ boolean pulserBit = (p1 == 1);
+
+ // Generate the bit string.
+ String bitString = getBitString(s0bit, s1bit, p0bit, p1bit, pulserBit);
+
+ // Set a default value of zero for this bit combination.
+ møllerBitMap.put(bitString, 1);
+ tridentBitMap.put(bitString, 1);
+ elasticBitMap.put(bitString, 1);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void endOfData() {
+ System.out.println("Møller Events :: " + møllerEvents);
+ System.out.println("Trident Events :: " + tridentEvents);
+ System.out.println("Elastic Events :: " + elasticEvents);
+ System.out.println("Total Events :: " + totalEvents);
+ System.out.println("Pair 1 Events :: " + pair1Events);
+ System.out.println("Pair 0 Events :: " + pair0Events);
+ System.out.println("Singles 1 Events :: " + singles1Events);
+ System.out.println("Singles 0 Events :: " + singles0Events);
+ System.out.println("Pulser Events :: " + pulserEvents);
+
+ System.out.println("Plsr\tS0\tS1\tP0\tP1\tMøller");
+ for(Entry<String, Integer> entry : møllerBitMap.entrySet()) {
+ System.out.println(entry.getKey() + "\t" + entry.getValue());
+ }
+
+ System.out.println("Plsr\tS0\tS1\tP0\tP1\tTrident");
+ for(Entry<String, Integer> entry : tridentBitMap.entrySet()) {
+ System.out.println(entry.getKey() + "\t" + entry.getValue());
+ }
+
+ System.out.println("Plsr\tS0\tS1\tP0\tP1\tElastic");
+ for(Entry<String, Integer> entry : elasticBitMap.entrySet()) {
+ System.out.println(entry.getKey() + "\t" + entry.getValue());
+ }
+ }
+
+ private static final String getBitString(boolean s0, boolean s1, boolean p0, boolean p1, boolean pulser) {
+ return String.format("%d\t%d\t%d\t%d\t%d", (pulser ? 1 : 0), (s0 ? 1 : 0), (s1 ? 1 : 0), (p0 ? 1 : 0), (p1 ? 1 : 0));
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ // Check whether the SVT was active in this event.
+ final String[] flagNames = { "svt_bias_good", "svt_burstmode_noise_good", "svt_position_good" };
+ boolean svtGood = true;
for(int i = 0; i < flagNames.length; i++) {
int[] flag = event.getIntegerParameters().get(flagNames[i]);
if(flag == null || flag[0] == 0) {
@@ -172,437 +172,437 @@
// If the SVT was bad, then skip the event.
if(!svtGood && skipBadSVT) {
- return;
- }
-
- if(event.hasCollection(ReconstructedParticle.class, particleCollectionName)) {
- // Get the list of tracks.
- List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, particleCollectionName);
-
- // Plot the time stamps of all tracks.
- for(ReconstructedParticle track : trackList) {
- if(track.getClusters().size() != 0) {
- Cluster cluster = track.getClusters().get(0);
- timePlot.fill(cluster.getCalorimeterHits().get(0).getTime());
- }
- }
-
- if(verbose) {
- System.out.println(trackList.size() + " tracks found.");
- for(ReconstructedParticle track : trackList) {
- System.out.printf("Track :: Q = %4.1f; E = %6.3f%n",
- track.getCharge(), track.getEnergy());
- }
- }
-
- // Populate the all cluster plots.
- List<Cluster> topClusters = new ArrayList<Cluster>();
- List<Cluster> botClusters = new ArrayList<Cluster>();
- List<Cluster> clusters = event.get(Cluster.class, "EcalClusters");
- for(Cluster cluster : clusters) {
- allPlots.addCluster(cluster);
- if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) { topClusters.add(cluster); }
- else { botClusters.add(cluster); }
- }
-
- // Make cluster pairs.
- List<Cluster[]> clusterPairs = new ArrayList<Cluster[]>();
- for(Cluster topCluster : topClusters) {
- for(Cluster botCluster : botClusters) {
- clusterPairs.add(new Cluster[] { topCluster, botCluster });
- }
- }
-
- // Populate the all cluster pair plots.
- for(Cluster[] pair : clusterPairs) {
- allPlots.addClusterPair(pair);
- }
-
- // Check each of the event-type conditions.
- boolean isMøller = false;
- boolean isTrident = false;
- boolean isElastic = false;
-
- // Produce all possible pairs of tracks.
- List<ReconstructedParticle[]> pairList = getTrackPairs(trackList);
-
- // Check the Møller condition. A Møller event is expected
- // to have two tracks, both negative, with a net energy
- // within a certain band of the beam energy.
- møllerTrackLoop:
- for(ReconstructedParticle[] pair : pairList) {
- // If trackless events are to be excluded, then require
- // that each "track" have a real track.
- if(excludeNoTrackEvents && (pair[0].getTracks().isEmpty() || pair[1].getTracks().isEmpty())) {
- continue møllerTrackLoop;
- }
-
- // Both tracks are required to be negatively charged.
- if(pair[0].getCharge() >= 0 || pair[1].getCharge() >= 0) {
- continue møllerTrackLoop;
- }
-
- // Both tracks must have clusters associated with them.
- Cluster[] trackClusters = new Cluster[2];
- for(int i = 0; i < 2; i++) {
- // Disallow tracks with no associated clusters.
- if(pair[i].getClusters().size() == 0) {
- continue møllerTrackLoop;
- }
-
- // Store the first cluster associated with the track.
- trackClusters[i] = pair[i].getClusters().get(0);
- }
-
- // Require that the track clusters be within a certain
- // time window of one another.
- CalorimeterHit[] seeds = new CalorimeterHit[2];
- seeds[0] = trackClusters[0].getCalorimeterHits().get(0);
- seeds[1] = trackClusters[1].getCalorimeterHits().get(0);
- timeCoincidencePlot.fill(Math.abs(seeds[0].getTime() - seeds[1].getTime()));
- if(Math.abs(trackClusters[0].getCalorimeterHits().get(0).getTime() - trackClusters[1].getCalorimeterHits().get(0).getTime()) > timeCoincidenceCut) {
- continue møllerTrackLoop;
- }
-
- // Require both tracks to occur within the range of
- // 36.5 and 49 ns.
- if(seeds[0].getTime() < 36.5 || seeds[0].getTime() > 49) {
- continue møllerTrackLoop;
- } if(seeds[1].getTime() < 36.5 || seeds[1].getTime() > 49) {
- continue møllerTrackLoop;
- }
-
- // No track may have an energy that exceeds 900 MeV.
- if(pair[0].getMomentum().magnitude() >= 0.900 || pair[1].getMomentum().magnitude() >= 0.900) {
- continue møllerTrackLoop;
- }
-
- // Get the energy sum.
- double sum = VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude();
-
- // "Møller-like" track pairs must have energies within
- // an allowed energy range.
- if(sum < 0.800 || sum > 1.500) {
- continue møllerTrackLoop;
- }
-
- //timeCoincidenceAllCutsPlot.fill(Math.abs(seeds[0].getTime() - seeds[1].getTime()));
-
- // Note that this is a Møller event.
- isMøller = true;
-
- // Populate the Møller plots.
- energyPlot[MÃLLER].fill(sum);
- møllerPlots.addClusterPair(trackClusters);
- electronPlot[MÃLLER].fill(pair[0].getMomentum().magnitude());
- electronPlot[MÃLLER].fill(pair[1].getMomentum().magnitude());
- energy2DPlot[MÃLLER].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- }
-
- // Check the elastic condition. Elastic events should be
- // negatively and have an energy approximately equal to
- // the beam energy.
- elasticTrackLoop:
- for(ReconstructedParticle track : trackList) {
- // If trackless events are to be excluded, then require
- // that the "track" has a real track.
- if(excludeNoTrackEvents && track.getTracks().isEmpty()) {
- continue elasticTrackLoop;
- }
-
- // Check the elastic condition.
- if(track.getCharge() < 0 && track.getMomentum().magnitude() >= 0.900) {
- isElastic = true;
- energyPlot[ELASTIC].fill(track.getMomentum().magnitude());
- if(!track.getClusters().isEmpty()) {
- elasticPlots.addCluster(track.getClusters().get(0));
- }
- }
- }
-
- // Check the trident condition. Tridents are events that
- // contain both one positive and one negative track.
- tridentTrackLoop:
- for(ReconstructedParticle[] pair : pairList) {
- // If trackless events are to be excluded, then require
- // that each "track" have a real track.
- if(pair[0].getTracks().isEmpty() || pair[1].getTracks().isEmpty()) {
- continue tridentTrackLoop;
- }
-
- // Require that all tridents consist of a positive and
- // negative pair.
- boolean isPosNeg = (pair[0].getCharge() < 0 && pair[1].getCharge() > 0) || (pair[0].getCharge() > 0 && pair[1].getCharge() < 0);
- if(!isPosNeg) { continue tridentTrackLoop; }
-
- // Both tracks must have clusters associated with them.
- Cluster[] trackClusters = new Cluster[pair.length];
- for(int i = 0; i < pair.length; i++) {
- // Disallow tracks with no associated clusters.
- if(pair[i].getClusters().size() == 0) {
- continue tridentTrackLoop;
- }
-
- // Store the first cluster associated with the track.
- trackClusters[i] = pair[i].getClusters().get(0);
- }
-
- // Make sure that the clusters are not the same.
- if(trackClusters[0] == trackClusters[1]) {
- continue tridentTrackLoop;
- }
-
- // Require that tridents also be a top/bottom pair.
- boolean isTopBot = (TriggerModule.getClusterYIndex(trackClusters[0]) > 0 && TriggerModule.getClusterYIndex(trackClusters[1]) < 0)
- || (TriggerModule.getClusterYIndex(trackClusters[0]) < 0 && TriggerModule.getClusterYIndex(trackClusters[1]) > 0);
- if(!isTopBot) {
- continue tridentTrackLoop;
- }
-
- // Require that the track clusters be within a certain
- // time window of one another.
- CalorimeterHit[] seeds = new CalorimeterHit[2];
- seeds[0] = trackClusters[0].getCalorimeterHits().get(0);
- seeds[1] = trackClusters[1].getCalorimeterHits().get(0);
- timeCoincidencePlot.fill(Math.abs(seeds[0].getTime() - seeds[1].getTime()));
- if(Math.abs(trackClusters[0].getCalorimeterHits().get(0).getTime() - trackClusters[1].getCalorimeterHits().get(0).getTime()) > timeCoincidenceCut) {
- continue tridentTrackLoop;
- }
-
- // Require that the energy of the electron is below
- // 900 MeV.
- boolean electronNotElastic = (pair[0].getCharge() < 0 && pair[0].getMomentum().magnitude() < 0.900)
- || (pair[1].getCharge() < 0 && pair[1].getMomentum().magnitude() < 0.900);
- if(!electronNotElastic) {
- continue tridentTrackLoop;
- }
-
- // If all tests are passed, this is a trident. Note
- // this and populate the trident plots.
- isTrident = true;
- tridentPlots.addClusterPair(trackClusters);
- if(pair[0].getCharge() > 0) {
- positronPlot.fill(pair[1].getMomentum().magnitude());
- electronPlot[TRIDENT].fill(pair[0].getMomentum().magnitude());
- } else {
- positronPlot.fill(pair[0].getMomentum().magnitude());
- electronPlot[TRIDENT].fill(pair[1].getMomentum().magnitude());
- }
- energyPlot[TRIDENT].fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
- energy2DPlot[TRIDENT].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
-
- // Track which clusters have already been added to the
- // singles plot so that there are no repeats.
- Set<Cluster> plotSet = new HashSet<Cluster>();
- Set<Cluster> plotFiducial = new HashSet<Cluster>();
-
- // Fill the all pairs plots.
- double pairEnergy = trackClusters[0].getEnergy() + trackClusters[1].getEnergy();
- trEnergySumAll.fill(pairEnergy);
- trEnergySum2DAll.fill(trackClusters[1].getEnergy(), trackClusters[0].getEnergy());
- trTimeCoincidenceAll.fill(RafoAnalysis.getTimeConicidence(trackClusters));
- trSumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(trackClusters));
- trSumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(trackClusters));
- trInvariantMassAll.fill(RafoAnalysis.getInvariantMass(pair));
-
- // Fill the singles plots.
- if(!plotSet.contains(trackClusters[0])) {
- plotSet.add(trackClusters[0]);
- trTimeEnergyAll.fill(trackClusters[0].getEnergy(), TriggerModule.getClusterTime(trackClusters[0]));
- } if(!plotSet.contains(trackClusters[1])) {
- plotSet.add(trackClusters[1]);
- trTimeEnergyAll.fill(trackClusters[1].getEnergy(), TriggerModule.getClusterTime(trackClusters[1]));
- }
-
- // Fill the fiducial plots if appropriate.
- if(inFiducialRegion(trackClusters[0]) && inFiducialRegion(trackClusters[1])) {
- trEnergySumFiducial.fill(pairEnergy);
- trEnergySum2DFiducial.fill(trackClusters[1].getEnergy(), trackClusters[0].getEnergy());
- trTimeCoincidenceFiducial.fill(RafoAnalysis.getTimeConicidence(trackClusters));
- trSumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(trackClusters));
- trSumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(trackClusters));
- trInvariantMassFiducial.fill(RafoAnalysis.getInvariantMass(pair));
- }
-
- // Fill the singles fiducial plots if appropriate.
- if(!plotFiducial.contains(trackClusters[0]) && inFiducialRegion(trackClusters[0])) {
- plotFiducial.add(trackClusters[0]);
- trTimeEnergyFiducial.fill(trackClusters[0].getEnergy(), TriggerModule.getClusterTime(trackClusters[0]));
- } if(!plotFiducial.contains(trackClusters[1]) && inFiducialRegion(trackClusters[1])) {
- plotFiducial.add(trackClusters[1]);
- trTimeEnergyFiducial.fill(trackClusters[1].getEnergy(), TriggerModule.getClusterTime(trackClusters[1]));
- }
- }
-
- if(verbose) {
- System.out.printf("\tMøller :: %b%n", isMøller);
- System.out.printf("\tTrident :: %b%n", isTrident);
- System.out.printf("\tElastic :: %b%n", isElastic);
- System.out.println();
- }
-
- // Get the TI bits.
- String bitString = null;
- TIData tiBank = null;
- List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
- for(GenericObject obj : bankList) {
- if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) {
- tiBank = new TIData(obj);
- bitString = getBitString(tiBank.isPulserTrigger(), tiBank.isSingle0Trigger(),
- tiBank.isSingle1Trigger(), tiBank.isPair0Trigger(), tiBank.isPair1Trigger());
-
- if(tiBank.isPair1Trigger()) {
- pair1Events++;
- } else if(tiBank.isPair0Trigger()) {
- pair0Events++;
- } else if(tiBank.isSingle1Trigger()) {
- singles1Events++;
- } else if(tiBank.isSingle0Trigger()) {
- singles0Events++;
- } else if(tiBank.isPulserTrigger()) {
- pulserEvents++;
- }
- }
- }
- if(bitString == null) {
- System.out.println("No TI data found!!");
- }
-
- // Get the number of charged tracks in the event.
- int tracks = 0;
- int posTracks = 0;
- int negTracks = 0;
- for(ReconstructedParticle track : trackList) {
- if(track.getCharge() != 0 && tiBank.isPulserTrigger()) {
- if(excludeNoTrackEvents && !track.getTracks().isEmpty()) {
- tracks++;
- if(track.getCharge() > 0) { posTracks++; }
- else { negTracks++; }
- } else {
- tracks++;
- if(track.getCharge() > 0) { posTracks++; }
- else { negTracks++; }
- }
- }
- }
-
- // Populate the "all tracks" plots.
- posTrackCount.fill(posTracks);
- negTrackCount.fill(negTracks);
- chargedTrackCount.fill(tracks);
-
- // Add the result to the appropriate plots and increment
- // the appropriate trigger bit combination.
- if(isMøller) {
- møllerEvents++;
- chargedTracksPlot[MÃLLER].fill(tracks);
- clusterCountPlot[MÃLLER].fill(clusters.size());
-
- Integer val = møllerBitMap.get(bitString);
- if(val == null) { møllerBitMap.put(bitString, 1); }
- else { møllerBitMap.put(bitString, val + 1); }
- } else if(isTrident) {
- tridentEvents++;
- chargedTracksPlot[TRIDENT].fill(tracks);
- clusterCountPlot[TRIDENT].fill(clusters.size());
-
- Integer val = tridentBitMap.get(bitString);
- if(val == null) { tridentBitMap.put(bitString, 1); }
- else { tridentBitMap.put(bitString, val + 1); }
- } else if(isElastic) {
- elasticEvents++;
- chargedTracksPlot[ELASTIC].fill(tracks);
- clusterCountPlot[ELASTIC].fill(clusters.size());
-
- Integer val = elasticBitMap.get(bitString);
- if(val == null) { elasticBitMap.put(bitString, 1); }
- else { elasticBitMap.put(bitString, val + 1); }
- }
- totalEvents++;
- }
- }
-
- private static final double getCalculatedCoplanarity(Cluster[] pair) {
- // Define the x- and y-coordinates of the clusters as well as
- // calorimeter center.
- final double ORIGIN_X = 42.52;
- double x[] = { pair[0].getPosition()[0], pair[1].getPosition()[0] };
- double y[] = { pair[0].getPosition()[1], pair[1].getPosition()[1] };
-
+ return;
+ }
+
+ if(event.hasCollection(ReconstructedParticle.class, particleCollectionName)) {
+ // Get the list of tracks.
+ List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, particleCollectionName);
+
+ // Plot the time stamps of all tracks.
+ for(ReconstructedParticle track : trackList) {
+ if(track.getClusters().size() != 0) {
+ Cluster cluster = track.getClusters().get(0);
+ timePlot.fill(cluster.getCalorimeterHits().get(0).getTime());
+ }
+ }
+
+ if(verbose) {
+ System.out.println(trackList.size() + " tracks found.");
+ for(ReconstructedParticle track : trackList) {
+ System.out.printf("Track :: Q = %4.1f; E = %6.3f%n",
+ track.getCharge(), track.getEnergy());
+ }
+ }
+
+ // Populate the all cluster plots.
+ List<Cluster> topClusters = new ArrayList<Cluster>();
+ List<Cluster> botClusters = new ArrayList<Cluster>();
+ List<Cluster> clusters = event.get(Cluster.class, "EcalClusters");
+ for(Cluster cluster : clusters) {
+ allPlots.addCluster(cluster);
+ if(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) { topClusters.add(cluster); }
+ else { botClusters.add(cluster); }
+ }
+
+ // Make cluster pairs.
+ List<Cluster[]> clusterPairs = new ArrayList<Cluster[]>();
+ for(Cluster topCluster : topClusters) {
+ for(Cluster botCluster : botClusters) {
+ clusterPairs.add(new Cluster[] { topCluster, botCluster });
+ }
+ }
+
+ // Populate the all cluster pair plots.
+ for(Cluster[] pair : clusterPairs) {
+ allPlots.addClusterPair(pair);
+ }
+
+ // Check each of the event-type conditions.
+ boolean isMøller = false;
+ boolean isTrident = false;
+ boolean isElastic = false;
+
+ // Produce all possible pairs of tracks.
+ List<ReconstructedParticle[]> pairList = getTrackPairs(trackList);
+
+ // Check the Møller condition. A Møller event is expected
+ // to have two tracks, both negative, with a net energy
+ // within a certain band of the beam energy.
+ møllerTrackLoop:
+ for(ReconstructedParticle[] pair : pairList) {
+ // If trackless events are to be excluded, then require
+ // that each "track" have a real track.
+ if(excludeNoTrackEvents && (pair[0].getTracks().isEmpty() || pair[1].getTracks().isEmpty())) {
+ continue møllerTrackLoop;
+ }
+
+ // Both tracks are required to be negatively charged.
+ if(pair[0].getCharge() >= 0 || pair[1].getCharge() >= 0) {
+ continue møllerTrackLoop;
+ }
+
+ // Both tracks must have clusters associated with them.
+ Cluster[] trackClusters = new Cluster[2];
+ for(int i = 0; i < 2; i++) {
+ // Disallow tracks with no associated clusters.
+ if(pair[i].getClusters().size() == 0) {
+ continue møllerTrackLoop;
+ }
+
+ // Store the first cluster associated with the track.
+ trackClusters[i] = pair[i].getClusters().get(0);
+ }
+
+ // Require that the track clusters be within a certain
+ // time window of one another.
+ CalorimeterHit[] seeds = new CalorimeterHit[2];
+ seeds[0] = trackClusters[0].getCalorimeterHits().get(0);
+ seeds[1] = trackClusters[1].getCalorimeterHits().get(0);
+ timeCoincidencePlot.fill(Math.abs(seeds[0].getTime() - seeds[1].getTime()));
+ if(Math.abs(trackClusters[0].getCalorimeterHits().get(0).getTime() - trackClusters[1].getCalorimeterHits().get(0).getTime()) > timeCoincidenceCut) {
+ continue møllerTrackLoop;
+ }
+
+ // Require both tracks to occur within the range of
+ // 36.5 and 49 ns.
+ if(seeds[0].getTime() < 36.5 || seeds[0].getTime() > 49) {
+ continue møllerTrackLoop;
+ } if(seeds[1].getTime() < 36.5 || seeds[1].getTime() > 49) {
+ continue møllerTrackLoop;
+ }
+
+ // No track may have an energy that exceeds 900 MeV.
+ if(pair[0].getMomentum().magnitude() >= 0.900 || pair[1].getMomentum().magnitude() >= 0.900) {
+ continue møllerTrackLoop;
+ }
+
+ // Get the energy sum.
+ double sum = VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude();
+
+ // "Møller-like" track pairs must have energies within
+ // an allowed energy range.
+ if(sum < 0.800 || sum > 1.500) {
+ continue møllerTrackLoop;
+ }
+
+ //timeCoincidenceAllCutsPlot.fill(Math.abs(seeds[0].getTime() - seeds[1].getTime()));
+
+ // Note that this is a Møller event.
+ isMøller = true;
+
+ // Populate the Møller plots.
+ energyPlot[MÃLLER].fill(sum);
+ møllerPlots.addClusterPair(trackClusters);
+ electronPlot[MÃLLER].fill(pair[0].getMomentum().magnitude());
+ electronPlot[MÃLLER].fill(pair[1].getMomentum().magnitude());
+ energy2DPlot[MÃLLER].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ }
+
+ // Check the elastic condition. Elastic events should be
+ // negatively and have an energy approximately equal to
+ // the beam energy.
+ elasticTrackLoop:
+ for(ReconstructedParticle track : trackList) {
+ // If trackless events are to be excluded, then require
+ // that the "track" has a real track.
+ if(excludeNoTrackEvents && track.getTracks().isEmpty()) {
+ continue elasticTrackLoop;
+ }
+
+ // Check the elastic condition.
+ if(track.getCharge() < 0 && track.getMomentum().magnitude() >= 0.900) {
+ isElastic = true;
+ energyPlot[ELASTIC].fill(track.getMomentum().magnitude());
+ if(!track.getClusters().isEmpty()) {
+ elasticPlots.addCluster(track.getClusters().get(0));
+ }
+ }
+ }
+
+ // Check the trident condition. Tridents are events that
+ // contain both one positive and one negative track.
+ tridentTrackLoop:
+ for(ReconstructedParticle[] pair : pairList) {
+ // If trackless events are to be excluded, then require
+ // that each "track" have a real track.
+ if(pair[0].getTracks().isEmpty() || pair[1].getTracks().isEmpty()) {
+ continue tridentTrackLoop;
+ }
+
+ // Require that all tridents consist of a positive and
+ // negative pair.
+ boolean isPosNeg = (pair[0].getCharge() < 0 && pair[1].getCharge() > 0) || (pair[0].getCharge() > 0 && pair[1].getCharge() < 0);
+ if(!isPosNeg) { continue tridentTrackLoop; }
+
+ // Both tracks must have clusters associated with them.
+ Cluster[] trackClusters = new Cluster[pair.length];
+ for(int i = 0; i < pair.length; i++) {
+ // Disallow tracks with no associated clusters.
+ if(pair[i].getClusters().size() == 0) {
+ continue tridentTrackLoop;
+ }
+
+ // Store the first cluster associated with the track.
+ trackClusters[i] = pair[i].getClusters().get(0);
+ }
+
+ // Make sure that the clusters are not the same.
+ if(trackClusters[0] == trackClusters[1]) {
+ continue tridentTrackLoop;
+ }
+
+ // Require that tridents also be a top/bottom pair.
+ boolean isTopBot = (TriggerModule.getClusterYIndex(trackClusters[0]) > 0 && TriggerModule.getClusterYIndex(trackClusters[1]) < 0)
+ || (TriggerModule.getClusterYIndex(trackClusters[0]) < 0 && TriggerModule.getClusterYIndex(trackClusters[1]) > 0);
+ if(!isTopBot) {
+ continue tridentTrackLoop;
+ }
+
+ // Require that the track clusters be within a certain
+ // time window of one another.
+ CalorimeterHit[] seeds = new CalorimeterHit[2];
+ seeds[0] = trackClusters[0].getCalorimeterHits().get(0);
+ seeds[1] = trackClusters[1].getCalorimeterHits().get(0);
+ timeCoincidencePlot.fill(Math.abs(seeds[0].getTime() - seeds[1].getTime()));
+ if(Math.abs(trackClusters[0].getCalorimeterHits().get(0).getTime() - trackClusters[1].getCalorimeterHits().get(0).getTime()) > timeCoincidenceCut) {
+ continue tridentTrackLoop;
+ }
+
+ // Require that the energy of the electron is below
+ // 900 MeV.
+ boolean electronNotElastic = (pair[0].getCharge() < 0 && pair[0].getMomentum().magnitude() < 0.900)
+ || (pair[1].getCharge() < 0 && pair[1].getMomentum().magnitude() < 0.900);
+ if(!electronNotElastic) {
+ continue tridentTrackLoop;
+ }
+
+ // If all tests are passed, this is a trident. Note
+ // this and populate the trident plots.
+ isTrident = true;
+ tridentPlots.addClusterPair(trackClusters);
+ if(pair[0].getCharge() > 0) {
+ positronPlot.fill(pair[1].getMomentum().magnitude());
+ electronPlot[TRIDENT].fill(pair[0].getMomentum().magnitude());
+ } else {
+ positronPlot.fill(pair[0].getMomentum().magnitude());
+ electronPlot[TRIDENT].fill(pair[1].getMomentum().magnitude());
+ }
+ energyPlot[TRIDENT].fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
+ energy2DPlot[TRIDENT].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+
+ // Track which clusters have already been added to the
+ // singles plot so that there are no repeats.
+ Set<Cluster> plotSet = new HashSet<Cluster>();
+ Set<Cluster> plotFiducial = new HashSet<Cluster>();
+
+ // Fill the all pairs plots.
+ double pairEnergy = trackClusters[0].getEnergy() + trackClusters[1].getEnergy();
+ trEnergySumAll.fill(pairEnergy);
+ trEnergySum2DAll.fill(trackClusters[1].getEnergy(), trackClusters[0].getEnergy());
+ trTimeCoincidenceAll.fill(RafoAnalysis.getTimeConicidence(trackClusters));
+ trSumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(trackClusters));
+ trSumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(trackClusters));
+ trInvariantMassAll.fill(RafoAnalysis.getInvariantMass(pair));
+
+ // Fill the singles plots.
+ if(!plotSet.contains(trackClusters[0])) {
+ plotSet.add(trackClusters[0]);
+ trTimeEnergyAll.fill(trackClusters[0].getEnergy(), TriggerModule.getClusterTime(trackClusters[0]));
+ } if(!plotSet.contains(trackClusters[1])) {
+ plotSet.add(trackClusters[1]);
+ trTimeEnergyAll.fill(trackClusters[1].getEnergy(), TriggerModule.getClusterTime(trackClusters[1]));
+ }
+
+ // Fill the fiducial plots if appropriate.
+ if(inFiducialRegion(trackClusters[0]) && inFiducialRegion(trackClusters[1])) {
+ trEnergySumFiducial.fill(pairEnergy);
+ trEnergySum2DFiducial.fill(trackClusters[1].getEnergy(), trackClusters[0].getEnergy());
+ trTimeCoincidenceFiducial.fill(RafoAnalysis.getTimeConicidence(trackClusters));
+ trSumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(trackClusters));
+ trSumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(trackClusters));
+ trInvariantMassFiducial.fill(RafoAnalysis.getInvariantMass(pair));
+ }
+
+ // Fill the singles fiducial plots if appropriate.
+ if(!plotFiducial.contains(trackClusters[0]) && inFiducialRegion(trackClusters[0])) {
+ plotFiducial.add(trackClusters[0]);
+ trTimeEnergyFiducial.fill(trackClusters[0].getEnergy(), TriggerModule.getClusterTime(trackClusters[0]));
+ } if(!plotFiducial.contains(trackClusters[1]) && inFiducialRegion(trackClusters[1])) {
+ plotFiducial.add(trackClusters[1]);
+ trTimeEnergyFiducial.fill(trackClusters[1].getEnergy(), TriggerModule.getClusterTime(trackClusters[1]));
+ }
+ }
+
+ if(verbose) {
+ System.out.printf("\tMøller :: %b%n", isMøller);
+ System.out.printf("\tTrident :: %b%n", isTrident);
+ System.out.printf("\tElastic :: %b%n", isElastic);
+ System.out.println();
+ }
+
+ // Get the TI bits.
+ String bitString = null;
+ TIData tiBank = null;
+ List<GenericObject> bankList = event.get(GenericObject.class, bankCollectionName);
+ for(GenericObject obj : bankList) {
+ if(AbstractIntData.getTag(obj) == TIData.BANK_TAG) {
+ tiBank = new TIData(obj);
+ bitString = getBitString(tiBank.isPulserTrigger(), tiBank.isSingle0Trigger(),
+ tiBank.isSingle1Trigger(), tiBank.isPair0Trigger(), tiBank.isPair1Trigger());
+
+ if(tiBank.isPair1Trigger()) {
+ pair1Events++;
+ } else if(tiBank.isPair0Trigger()) {
+ pair0Events++;
+ } else if(tiBank.isSingle1Trigger()) {
+ singles1Events++;
+ } else if(tiBank.isSingle0Trigger()) {
+ singles0Events++;
+ } else if(tiBank.isPulserTrigger()) {
+ pulserEvents++;
+ }
+ }
+ }
+ if(bitString == null) {
+ System.out.println("No TI data found!!");
+ }
+
+ // Get the number of charged tracks in the event.
+ int tracks = 0;
+ int posTracks = 0;
+ int negTracks = 0;
+ for(ReconstructedParticle track : trackList) {
+ if(track.getCharge() != 0 && tiBank.isPulserTrigger()) {
+ if(excludeNoTrackEvents && !track.getTracks().isEmpty()) {
+ tracks++;
+ if(track.getCharge() > 0) { posTracks++; }
+ else { negTracks++; }
+ } else {
+ tracks++;
+ if(track.getCharge() > 0) { posTracks++; }
+ else { negTracks++; }
+ }
+ }
+ }
+
+ // Populate the "all tracks" plots.
+ posTrackCount.fill(posTracks);
+ negTrackCount.fill(negTracks);
+ chargedTrackCount.fill(tracks);
+
+ // Add the result to the appropriate plots and increment
+ // the appropriate trigger bit combination.
+ if(isMøller) {
+ møllerEvents++;
+ chargedTracksPlot[MÃLLER].fill(tracks);
+ clusterCountPlot[MÃLLER].fill(clusters.size());
+
+ Integer val = møllerBitMap.get(bitString);
+ if(val == null) { møllerBitMap.put(bitString, 1); }
+ else { møllerBitMap.put(bitString, val + 1); }
+ } else if(isTrident) {
+ tridentEvents++;
+ chargedTracksPlot[TRIDENT].fill(tracks);
+ clusterCountPlot[TRIDENT].fill(clusters.size());
+
+ Integer val = tridentBitMap.get(bitString);
+ if(val == null) { tridentBitMap.put(bitString, 1); }
+ else { tridentBitMap.put(bitString, val + 1); }
+ } else if(isElastic) {
+ elasticEvents++;
+ chargedTracksPlot[ELASTIC].fill(tracks);
+ clusterCountPlot[ELASTIC].fill(clusters.size());
+
+ Integer val = elasticBitMap.get(bitString);
+ if(val == null) { elasticBitMap.put(bitString, 1); }
+ else { elasticBitMap.put(bitString, val + 1); }
+ }
+ totalEvents++;
+ }
+ }
+
+ private static final double getCalculatedCoplanarity(Cluster[] pair) {
+ // Define the x- and y-coordinates of the clusters as well as
+ // calorimeter center.
+ final double ORIGIN_X = 42.52;
+ double x[] = { pair[0].getPosition()[0], pair[1].getPosition()[0] };
+ double y[] = { pair[0].getPosition()[1], pair[1].getPosition()[1] };
+
// Get the cluster angles.
double[] clusterAngle = new double[2];
for(int i = 0; i < 2; i++) {
- clusterAngle[i] = Math.atan2(y[i], x[i] - ORIGIN_X) * 180 / Math.PI;
- if(clusterAngle[i] <= 0) { clusterAngle[i] += 360; }
+ clusterAngle[i] = Math.atan2(y[i], x[i] - ORIGIN_X) * 180 / Math.PI;
+ if(clusterAngle[i] <= 0) { clusterAngle[i] += 360; }
}
// Calculate the coplanarity cut value.
double clusterDiff = clusterAngle[0] - clusterAngle[1];
return clusterDiff > 0 ? clusterDiff : clusterDiff + 360;
- }
-
- public void setTimeCoincidenceCut(double value) {
- timeCoincidenceCut = value;
- }
-
- public void setExcludeNoTrackEvents(boolean state) {
- excludeNoTrackEvents = state;
- }
-
- public void setSkipBadSVT(boolean state) {
- skipBadSVT = state;
- }
-
- private static final boolean inFiducialRegion(Cluster cluster) {
- // Get the x and y indices for the cluster.
- int ix = TriggerModule.getClusterXIndex(cluster);
- int absx = Math.abs(TriggerModule.getClusterXIndex(cluster));
- int absy = Math.abs(TriggerModule.getClusterYIndex(cluster));
-
- // Check if the cluster is on the top or the bottom of the
- // calorimeter, as defined by |y| == 5. This is an edge cluster
- // and is not in the fiducial region.
- if(absy == 5) {
- return false;
- }
-
- // Check if the cluster is on the extreme left or right side
- // of the calorimeter, as defined by |x| == 23. This is also
- // and edge cluster is not in the fiducial region.
- if(absx == 23) {
- return false;
- }
-
- // Check if the cluster is along the beam gap, as defined by
- // |y| == 1. This is an internal edge cluster and is not in the
- // fiducial region.
- if(absy == 1) {
- return false;
- }
-
- // Lastly, check if the cluster falls along the beam hole, as
- // defined by clusters with -11 <= x <= -1 and |y| == 2. This
- // is not the fiducial region.
- if(absy == 2 && ix <= -1 && ix >= -11) {
- return false;
- }
-
- // If all checks fail, the cluster is in the fiducial region.
- return true;
- }
-
- private static final List<ReconstructedParticle[]> getTrackPairs(List<ReconstructedParticle> trackList) {
- // Create an empty list for the pairs.
- List<ReconstructedParticle[]> pairs = new ArrayList<ReconstructedParticle[]>();
-
- // Add all possible pairs of tracks.
- for(int i = 0; i < trackList.size(); i++) {
- for(int j = i + 1; j < trackList.size(); j++) {
- pairs.add(new ReconstructedParticle[] { trackList.get(i), trackList.get(j) });
- }
- }
-
- // Return the list of tracks.
- return pairs;
- }
+ }
+
+ public void setTimeCoincidenceCut(double value) {
+ timeCoincidenceCut = value;
+ }
+
+ public void setExcludeNoTrackEvents(boolean state) {
+ excludeNoTrackEvents = state;
+ }
+
+ public void setSkipBadSVT(boolean state) {
+ skipBadSVT = state;
+ }
+
+ private static final boolean inFiducialRegion(Cluster cluster) {
+ // Get the x and y indices for the cluster.
+ int ix = TriggerModule.getClusterXIndex(cluster);
+ int absx = Math.abs(TriggerModule.getClusterXIndex(cluster));
+ int absy = Math.abs(TriggerModule.getClusterYIndex(cluster));
+
+ // Check if the cluster is on the top or the bottom of the
+ // calorimeter, as defined by |y| == 5. This is an edge cluster
+ // and is not in the fiducial region.
+ if(absy == 5) {
+ return false;
+ }
+
+ // Check if the cluster is on the extreme left or right side
+ // of the calorimeter, as defined by |x| == 23. This is also
+ // and edge cluster is not in the fiducial region.
+ if(absx == 23) {
+ return false;
+ }
+
+ // Check if the cluster is along the beam gap, as defined by
+ // |y| == 1. This is an internal edge cluster and is not in the
+ // fiducial region.
+ if(absy == 1) {
+ return false;
+ }
+
+ // Lastly, check if the cluster falls along the beam hole, as
+ // defined by clusters with -11 <= x <= -1 and |y| == 2. This
+ // is not the fiducial region.
+ if(absy == 2 && ix <= -1 && ix >= -11) {
+ return false;
+ }
+
+ // If all checks fail, the cluster is in the fiducial region.
+ return true;
+ }
+
+ private static final List<ReconstructedParticle[]> getTrackPairs(List<ReconstructedParticle> trackList) {
+ // Create an empty list for the pairs.
+ List<ReconstructedParticle[]> pairs = new ArrayList<ReconstructedParticle[]>();
+
+ // Add all possible pairs of tracks.
+ for(int i = 0; i < trackList.size(); i++) {
+ for(int j = i + 1; j < trackList.size(); j++) {
+ pairs.add(new ReconstructedParticle[] { trackList.get(i), trackList.get(j) });
+ }
+ }
+
+ // Return the list of tracks.
+ return pairs;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/MTETriggerPlotsFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/MTETriggerPlotsFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/MTETriggerPlotsFormatter.java Wed Mar 9 11:43:24 2016
@@ -15,164 +15,164 @@
public class MTETriggerPlotsFormatter {
- public static void main(String[] args) throws IllegalArgumentException, IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\";
-
- // Define the new name of the file containing the trigger plots.
- String plotFile = rootDir + "5772-ana.aida";
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(plotFile);
- if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
-
- // Define the 1D trigger plot names for Møllers and tridents.
- String[] plotNames1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy",
- "Pair Coplanarity", "Pair Energy Difference", "Pair Energy Slope", "Pair Energy Sum" };
- String[] displayNames1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy",
- "Pair Coplanarity", "Pair Energy Difference", "Pair Energy Slope", "Pair Energy Sum" };
- String[] xAxisNames1D = { "Hit Count", "Seed Energy (GeV)", "Total Energy (GeV)",
- "Coplanarity (Degrees)", "Energy Difference (GeV)", "Energy Slope (GeV)", "Energy Sum (GeV)" };
- String yAxisName1D = "Count";
-
- // Define the 2D trigger plot names for Møllers and tridents.
- String[] plotNames2D = { "Cluster Seed", "Pair Energy Sum 2D" };
- String[] displayNames2D = { "Cluster Seed Distribution", "2D Energy Sum" };
- String[] xAxisNames2D = { "x-Index", "Second Cluster Energy (GeV)" };
- String[] yAxisNames2D = { "y-Index", "First Cluster Energy (GeV)" };
-
- // Define the 1D trigger plot names for elastics.
- String[] plotNamesElastic1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy" };
- String[] displayNamesElastic1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy" };
- String[] xAxisNamesElastic1D = { "Hit Count", "Seed Energy (GeV)", "Total Energy (GeV)" };
- String yAxisNameElastic1D = "Count";
-
- // Define the 2D trigger plot names for elastics.
- String[] plotNamesElastic2D = { "Cluster Seed" };
- String[] displayNamesElastic2D = { "Cluster Seed Distribution" };
- String[] xAxisNamesElastic2D = { "x-Index" };
- String[] yAxisNamesElastic2D = { "y-Index" };
-
- // Define the Møller, trident, and elastic prefixes.
- String allPrefix = "All Trigger Plots/Pair Plots/";
- String møllerPrefix = "Møller Trigger Plots/Pair Plots/";
- String tridentPrefix = "Trident Trigger Plots/Pair Plots/";
- String elasticPrefix = "Elastic Trigger Plots/Singles Plots/";
- String allSinglesPrefix = "All Trigger Plots/Singles Plots/";
-
- // Define the plot type prefix.
- String allTypeName = "All Pairs - ";
- String møllerTypeName = "Møller - ";
- String tridentTypeName = "Trident - ";
- String elasticTypeName = "Elastic - ";
- String allSinglesTypeName = "All Singles - ";
-
- // Define the plot type colors.
- ColorStyle allColor = PlotsFormatter.ColorStyle.GREY;
- ColorStyle møllerColor = PlotsFormatter.ColorStyle.MS_BLUE;
- ColorStyle tridentColor = PlotsFormatter.ColorStyle.MS_ORANGE;
- ColorStyle elasticColor = PlotsFormatter.ColorStyle.MS_GREEN;
-
- // Create a plot formatting module.
- PlotFormatModule module = new PlotFormatModule();
-
- // Get the histograms and add them to the module. Start with the
- // trident and Møller plots.
- for(int i = 0; i < plotNames1D.length; i++) {
- // Get the Møller and trident plots.
- IHistogram1D allPlot = (IHistogram1D) tree.find(allPrefix + plotNames1D[i]);
- IHistogram1D møllerPlot = (IHistogram1D) tree.find(møllerPrefix + plotNames1D[i]);
- IHistogram1D tridentPlot = (IHistogram1D) tree.find(tridentPrefix + plotNames1D[i]);
-
- // Make a formatted plot for each.
- FormattedPlot1D allFormattedPlot = new FormattedPlot1D(allPlot, allColor, xAxisNames1D[i], yAxisName1D, allTypeName + displayNames1D[i]);
- FormattedPlot1D møllerFormattedPlot = new FormattedPlot1D(møllerPlot, møllerColor, xAxisNames1D[i], yAxisName1D, møllerTypeName + displayNames1D[i]);
- FormattedPlot1D tridentFormattedPlot = new FormattedPlot1D(tridentPlot, tridentColor, xAxisNames1D[i], yAxisName1D, tridentTypeName + displayNames1D[i]);
-
- // Add them to the module.
- module.addPlot1D(allFormattedPlot);
- module.addPlot1D(møllerFormattedPlot);
- module.addPlot1D(tridentFormattedPlot);
- }
- for(int i = 0; i < plotNames2D.length; i++) {
- // Get the Møller and trident plots.
- IHistogram2D allPlot = (IHistogram2D) tree.find(allPrefix + plotNames2D[i]);
- IHistogram2D møllerPlot = (IHistogram2D) tree.find(møllerPrefix + plotNames2D[i]);
- IHistogram2D tridentPlot = (IHistogram2D) tree.find(tridentPrefix + plotNames2D[i]);
-
- // Make a formatted plot for each.
- FormattedPlot2D allFormattedPlot = new FormattedPlot2D(allPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], allTypeName + displayNames2D[i]);
- FormattedPlot2D møllerFormattedPlot = new FormattedPlot2D(møllerPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], møllerTypeName + displayNames2D[i]);
- FormattedPlot2D tridentFormattedPlot = new FormattedPlot2D(tridentPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], tridentTypeName + displayNames2D[i]);
-
- // Add them to the module.
- module.addPlot2D(allFormattedPlot);
- module.addPlot2D(møllerFormattedPlot);
- module.addPlot2D(tridentFormattedPlot);
- }
-
- // Get the histograms for the elastic plots and add them to the module.
- for(int i = 0; i < plotNamesElastic1D.length; i++) {
- // Get the Møller and trident plots.
- IHistogram1D allPlot = (IHistogram1D) tree.find(allSinglesPrefix + plotNames1D[i]);
- IHistogram1D elasticPlot = (IHistogram1D) tree.find(elasticPrefix + plotNames1D[i]);
-
- // Make a formatted plot for each.
- FormattedPlot1D allFormattedPlot = new FormattedPlot1D(allPlot, allColor, xAxisNamesElastic1D[i], yAxisNameElastic1D,
- allSinglesTypeName + displayNamesElastic1D[i]);
- FormattedPlot1D elasticFormattedPlot = new FormattedPlot1D(elasticPlot, elasticColor, xAxisNamesElastic1D[i], yAxisNameElastic1D,
- elasticTypeName + displayNamesElastic1D[i]);
-
- // Add them to the module.
- module.addPlot1D(allFormattedPlot);
- module.addPlot1D(elasticFormattedPlot);
- }
- for(int i = 0; i < plotNamesElastic2D.length; i++) {
- // Get the Møller and trident plots.
- IHistogram2D allPlot = (IHistogram2D) tree.find(allPrefix + plotNamesElastic2D[i]);
- IHistogram2D elasticPlot = (IHistogram2D) tree.find(møllerPrefix + plotNamesElastic2D[i]);
-
- // Make a formatted plot for each.
- FormattedPlot2D allFormattedPlot = new FormattedPlot2D(allPlot, i == 0 ? true : false, xAxisNamesElastic2D[i], yAxisNamesElastic2D[i],
- allSinglesTypeName + plotNames2D[i]);
- FormattedPlot2D elasticFormattedPlot = new FormattedPlot2D(elasticPlot, i == 0 ? true : false, xAxisNamesElastic2D[i], yAxisNamesElastic2D[i],
- elasticTypeName + displayNamesElastic2D[i]);
-
- // Add them to the module.
- module.addPlot2D(allFormattedPlot);
- module.addPlot2D(elasticFormattedPlot);
- }
-
- // Add the MTE plots to the module.
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Elastic Energy Distribution"), elasticColor,
- "Momentum (GeV)", "Count", "Elastic - Momentum"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Elastic Event Tracks"), elasticColor,
- "Tracks", "Count", "Elastic - Tracks in Event"));
-
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Energy Sum Distribution"), møllerColor,
- "Momentum Sum (GeV)", "Count", "Møller - Momentum Sum"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Electron Energy Distribution"), møllerColor,
- "Momentum (GeV)", "Count", "Møller - Momentum (Electron)"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Time Coincidence Distribution (All Møller Cuts)"), møllerColor,
- "Time (ns)", "Count", "Møller - Time Coincidence"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Event Tracks"), møllerColor,
- "Tracks", "Count", "Møller - Tracks in Event"));
- module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MTE Analysis/Møller 2D Energy Distribution"), false,
- "First Track Momentum (GeV)", "Second Track Momentum (GeV)", "Møller - 2D Momentum Sum"));
-
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Energy Sum Distribution"), tridentColor,
- "Momentum Sum (GeV)", "Count", "Trident - Momentum Sum"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Electron Energy Distribution"), tridentColor,
- "Momentum (GeV)", "Count", "Trident - Momentum (Electron)"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Positron Energy Distribution"), tridentColor,
- "Momentum (GeV)", "Count", "Trident - Momentum (Positron)"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Event Tracks"), tridentColor,
- "Tracks", "Count", "Trident - Tracks in Event"));
- module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MTE Analysis/Trident 2D Energy Distribution"), false,
- "First Track Momentum (GeV)", "Second Track Momentum (GeV)", "Trident - 2D Momentum Sum"));
-
- // Display the plots.
- module.savePlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\TestPrint\\");
- }
+ public static void main(String[] args) throws IllegalArgumentException, IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String plotFile = rootDir + "5772-ana.aida";
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(plotFile);
+ if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+
+ // Define the 1D trigger plot names for Møllers and tridents.
+ String[] plotNames1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy",
+ "Pair Coplanarity", "Pair Energy Difference", "Pair Energy Slope", "Pair Energy Sum" };
+ String[] displayNames1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy",
+ "Pair Coplanarity", "Pair Energy Difference", "Pair Energy Slope", "Pair Energy Sum" };
+ String[] xAxisNames1D = { "Hit Count", "Seed Energy (GeV)", "Total Energy (GeV)",
+ "Coplanarity (Degrees)", "Energy Difference (GeV)", "Energy Slope (GeV)", "Energy Sum (GeV)" };
+ String yAxisName1D = "Count";
+
+ // Define the 2D trigger plot names for Møllers and tridents.
+ String[] plotNames2D = { "Cluster Seed", "Pair Energy Sum 2D" };
+ String[] displayNames2D = { "Cluster Seed Distribution", "2D Energy Sum" };
+ String[] xAxisNames2D = { "x-Index", "Second Cluster Energy (GeV)" };
+ String[] yAxisNames2D = { "y-Index", "First Cluster Energy (GeV)" };
+
+ // Define the 1D trigger plot names for elastics.
+ String[] plotNamesElastic1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy" };
+ String[] displayNamesElastic1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy" };
+ String[] xAxisNamesElastic1D = { "Hit Count", "Seed Energy (GeV)", "Total Energy (GeV)" };
+ String yAxisNameElastic1D = "Count";
+
+ // Define the 2D trigger plot names for elastics.
+ String[] plotNamesElastic2D = { "Cluster Seed" };
+ String[] displayNamesElastic2D = { "Cluster Seed Distribution" };
+ String[] xAxisNamesElastic2D = { "x-Index" };
+ String[] yAxisNamesElastic2D = { "y-Index" };
+
+ // Define the Møller, trident, and elastic prefixes.
+ String allPrefix = "All Trigger Plots/Pair Plots/";
+ String møllerPrefix = "Møller Trigger Plots/Pair Plots/";
+ String tridentPrefix = "Trident Trigger Plots/Pair Plots/";
+ String elasticPrefix = "Elastic Trigger Plots/Singles Plots/";
+ String allSinglesPrefix = "All Trigger Plots/Singles Plots/";
+
+ // Define the plot type prefix.
+ String allTypeName = "All Pairs - ";
+ String møllerTypeName = "Møller - ";
+ String tridentTypeName = "Trident - ";
+ String elasticTypeName = "Elastic - ";
+ String allSinglesTypeName = "All Singles - ";
+
+ // Define the plot type colors.
+ ColorStyle allColor = PlotsFormatter.ColorStyle.GREY;
+ ColorStyle møllerColor = PlotsFormatter.ColorStyle.MS_BLUE;
+ ColorStyle tridentColor = PlotsFormatter.ColorStyle.MS_ORANGE;
+ ColorStyle elasticColor = PlotsFormatter.ColorStyle.MS_GREEN;
+
+ // Create a plot formatting module.
+ PlotFormatModule module = new PlotFormatModule();
+
+ // Get the histograms and add them to the module. Start with the
+ // trident and Møller plots.
+ for(int i = 0; i < plotNames1D.length; i++) {
+ // Get the Møller and trident plots.
+ IHistogram1D allPlot = (IHistogram1D) tree.find(allPrefix + plotNames1D[i]);
+ IHistogram1D møllerPlot = (IHistogram1D) tree.find(møllerPrefix + plotNames1D[i]);
+ IHistogram1D tridentPlot = (IHistogram1D) tree.find(tridentPrefix + plotNames1D[i]);
+
+ // Make a formatted plot for each.
+ FormattedPlot1D allFormattedPlot = new FormattedPlot1D(allPlot, allColor, xAxisNames1D[i], yAxisName1D, allTypeName + displayNames1D[i]);
+ FormattedPlot1D møllerFormattedPlot = new FormattedPlot1D(møllerPlot, møllerColor, xAxisNames1D[i], yAxisName1D, møllerTypeName + displayNames1D[i]);
+ FormattedPlot1D tridentFormattedPlot = new FormattedPlot1D(tridentPlot, tridentColor, xAxisNames1D[i], yAxisName1D, tridentTypeName + displayNames1D[i]);
+
+ // Add them to the module.
+ module.addPlot1D(allFormattedPlot);
+ module.addPlot1D(møllerFormattedPlot);
+ module.addPlot1D(tridentFormattedPlot);
+ }
+ for(int i = 0; i < plotNames2D.length; i++) {
+ // Get the Møller and trident plots.
+ IHistogram2D allPlot = (IHistogram2D) tree.find(allPrefix + plotNames2D[i]);
+ IHistogram2D møllerPlot = (IHistogram2D) tree.find(møllerPrefix + plotNames2D[i]);
+ IHistogram2D tridentPlot = (IHistogram2D) tree.find(tridentPrefix + plotNames2D[i]);
+
+ // Make a formatted plot for each.
+ FormattedPlot2D allFormattedPlot = new FormattedPlot2D(allPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], allTypeName + displayNames2D[i]);
+ FormattedPlot2D møllerFormattedPlot = new FormattedPlot2D(møllerPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], møllerTypeName + displayNames2D[i]);
+ FormattedPlot2D tridentFormattedPlot = new FormattedPlot2D(tridentPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], tridentTypeName + displayNames2D[i]);
+
+ // Add them to the module.
+ module.addPlot2D(allFormattedPlot);
+ module.addPlot2D(møllerFormattedPlot);
+ module.addPlot2D(tridentFormattedPlot);
+ }
+
+ // Get the histograms for the elastic plots and add them to the module.
+ for(int i = 0; i < plotNamesElastic1D.length; i++) {
+ // Get the Møller and trident plots.
+ IHistogram1D allPlot = (IHistogram1D) tree.find(allSinglesPrefix + plotNames1D[i]);
+ IHistogram1D elasticPlot = (IHistogram1D) tree.find(elasticPrefix + plotNames1D[i]);
+
+ // Make a formatted plot for each.
+ FormattedPlot1D allFormattedPlot = new FormattedPlot1D(allPlot, allColor, xAxisNamesElastic1D[i], yAxisNameElastic1D,
+ allSinglesTypeName + displayNamesElastic1D[i]);
+ FormattedPlot1D elasticFormattedPlot = new FormattedPlot1D(elasticPlot, elasticColor, xAxisNamesElastic1D[i], yAxisNameElastic1D,
+ elasticTypeName + displayNamesElastic1D[i]);
+
+ // Add them to the module.
+ module.addPlot1D(allFormattedPlot);
+ module.addPlot1D(elasticFormattedPlot);
+ }
+ for(int i = 0; i < plotNamesElastic2D.length; i++) {
+ // Get the Møller and trident plots.
+ IHistogram2D allPlot = (IHistogram2D) tree.find(allPrefix + plotNamesElastic2D[i]);
+ IHistogram2D elasticPlot = (IHistogram2D) tree.find(møllerPrefix + plotNamesElastic2D[i]);
+
+ // Make a formatted plot for each.
+ FormattedPlot2D allFormattedPlot = new FormattedPlot2D(allPlot, i == 0 ? true : false, xAxisNamesElastic2D[i], yAxisNamesElastic2D[i],
+ allSinglesTypeName + plotNames2D[i]);
+ FormattedPlot2D elasticFormattedPlot = new FormattedPlot2D(elasticPlot, i == 0 ? true : false, xAxisNamesElastic2D[i], yAxisNamesElastic2D[i],
+ elasticTypeName + displayNamesElastic2D[i]);
+
+ // Add them to the module.
+ module.addPlot2D(allFormattedPlot);
+ module.addPlot2D(elasticFormattedPlot);
+ }
+
+ // Add the MTE plots to the module.
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Elastic Energy Distribution"), elasticColor,
+ "Momentum (GeV)", "Count", "Elastic - Momentum"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Elastic Event Tracks"), elasticColor,
+ "Tracks", "Count", "Elastic - Tracks in Event"));
+
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Energy Sum Distribution"), møllerColor,
+ "Momentum Sum (GeV)", "Count", "Møller - Momentum Sum"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Electron Energy Distribution"), møllerColor,
+ "Momentum (GeV)", "Count", "Møller - Momentum (Electron)"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Time Coincidence Distribution (All Møller Cuts)"), møllerColor,
+ "Time (ns)", "Count", "Møller - Time Coincidence"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Event Tracks"), møllerColor,
+ "Tracks", "Count", "Møller - Tracks in Event"));
+ module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MTE Analysis/Møller 2D Energy Distribution"), false,
+ "First Track Momentum (GeV)", "Second Track Momentum (GeV)", "Møller - 2D Momentum Sum"));
+
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Energy Sum Distribution"), tridentColor,
+ "Momentum Sum (GeV)", "Count", "Trident - Momentum Sum"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Electron Energy Distribution"), tridentColor,
+ "Momentum (GeV)", "Count", "Trident - Momentum (Electron)"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Positron Energy Distribution"), tridentColor,
+ "Momentum (GeV)", "Count", "Trident - Momentum (Positron)"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Event Tracks"), tridentColor,
+ "Tracks", "Count", "Trident - Tracks in Event"));
+ module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MTE Analysis/Trident 2D Energy Distribution"), false,
+ "First Track Momentum (GeV)", "Second Track Momentum (GeV)", "Trident - 2D Momentum Sum"));
+
+ // Display the plots.
+ module.savePlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\TestPrint\\");
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/ParticleMCAnalysisDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/ParticleMCAnalysisDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/ParticleMCAnalysisDriver.java Wed Mar 9 11:43:24 2016
@@ -13,136 +13,136 @@
import org.lcsim.util.aida.AIDA;
public class ParticleMCAnalysisDriver extends Driver {
- // Store collection names.
- private String particleCollectionName = "MCParticle";
-
- // Declare plots.
- private AIDA aida = AIDA.defaultInstance();
- private IHistogram1D chargedTracksPlot = aida.histogram1D("MC Analysis/Event Tracks", 10, -0.5, 9.5);
- private IHistogram1D allPlot = aida.histogram1D("MC Analysis/Electron Energy Distribution", 110, 0, 1.1);
- private IHistogram1D electronPlot = aida.histogram1D("MC Analysis/Electron Energy Distribution", 110, 0, 1.1);
- private IHistogram1D positronPlot = aida.histogram1D("MC Analysis/Positron Energy Distribution", 110, 0, 1.1);
- private IHistogram1D momentumXPlot = aida.histogram1D("MC Analysis/Particle x-Momentum Distribution", 110, 0.0, 1.1);
- private IHistogram1D momentumYPlot = aida.histogram1D("MC Analysis/Particle y-Momentum Distribution", 110, 0.0, 1.1);
- private IHistogram1D momentumZPlot = aida.histogram1D("MC Analysis/Particle z-Momentum Distribution", 110, 0.0, 1.1);
- private IHistogram1D epAnglePlot = aida.histogram1D("MC Analysis/Positron\\Electron Pair Angle Distribution", 90, 0, 180);
- private IHistogram1D eeAnglePlot = aida.histogram1D("MC Analysis/Electron\\Electron Pair Angle Distribution", 90, 0, 180);
- private IHistogram1D epMomentumSumPlot = aida.histogram1D("MC Analysis/Positron\\Electron Momentum Sum Distribution", 220, 0, 2.2);
- private IHistogram1D eeMomentumSumPlot = aida.histogram1D("MC Analysis/Electron\\Electron Momentum Sum Distribution", 220, 0, 2.2);
- private IHistogram2D momentumPlot = aida.histogram2D("MC Analysis/Particle Momentum Distribution", 100, 0.0, 0.40, 110, 0.0, 0.40);
- private IHistogram2D epMomentumSum2DPlot = aida.histogram2D("MC Analysis/Positron\\Electron 2D Momentum Distribution", 55, 0, 1.1, 55, 0, 1.1);
- private IHistogram2D eeMomentumSum2DPlot = aida.histogram2D("MC Analysis/Electron\\Electron 2D Momentum Distribution", 55, 0, 1.1, 55, 0, 1.1);
-
- @Override
- public void process(EventHeader event) {
- // Skip the event if there is no Monte Carlo collection.
- if(!event.hasCollection(MCParticle.class, particleCollectionName)) {
- return;
- }
-
- // Get the list of Monte Carlo particles.
- List<MCParticle> particleList = event.get(MCParticle.class, particleCollectionName);
-
- // Track the positive and negative particles.
- List<MCParticle> electronList = new ArrayList<MCParticle>();
- List<MCParticle> positronList = new ArrayList<MCParticle>();
-
- // Count the number of particles in the event.
- int chargedParticles = 0;
-
- // Iterate through the particles.
- for(MCParticle particle : particleList) {
- // Look at only t = 0 particles.
- if(particle.getProductionTime() == 0) {
- // Plot the x/y momentum of each particle.
- momentumPlot.fill(particle.getMomentum().x(), particle.getMomentum().y());
-
- // If the particle is charged, increment the charged
- // particle count.
- if(particle.getCharge() > 0) {
- chargedParticles++;
- }
-
- // Get the particle momentum in each direction.
- momentumXPlot.fill(particle.getMomentum().x());
- momentumYPlot.fill(particle.getMomentum().y());
- momentumZPlot.fill(particle.getMomentum().z());
-
- // Populate the general momentum plot.
- allPlot.fill(particle.getMomentum().magnitude());
- momentumPlot.fill(particle.getMomentum().x(), particle.getMomentum().y());
-
- // Store each particle based on its PID and populate
- // the appropriate plot.
- if(particle.getPDGID() == 11) {
- electronList.add(particle);
- electronPlot.fill(particle.getMomentum().magnitude());
- } else if(particle.getPDGID() == -11) {
- positronList.add(particle);
- positronPlot.fill(particle.getMomentum().magnitude());
- }
- }
- }
-
- // Populate the charged particles plot.
- chargedTracksPlot.fill(chargedParticles);
-
- // Form all electron/positron pairs.
- List<MCParticle[]> epPairList = new ArrayList<MCParticle[]>();
- for(MCParticle electron : electronList) {
- for(MCParticle positron : positronList) {
- epPairList.add(new MCParticle[] { electron, positron });
- }
- }
-
- // Populate the positron/electron pair plots.
- for(MCParticle[] pair : epPairList) {
- epAnglePlot.fill(getVectorAngle(pair[0].getMomentum(), pair[1].getMomentum()));
- epMomentumSumPlot.fill(getVectorSum(pair[0].getMomentum(), pair[1].getMomentum()));
- epMomentumSum2DPlot.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- }
-
- // Form all electron/electron pairs.
- List<MCParticle[]> eePairList = new ArrayList<MCParticle[]>();
- for(int i = 0; i < electronList.size(); i++) {
- for(int j = i + 1; j < electronList.size(); j++) {
- eePairList.add(new MCParticle[] { electronList.get(i), electronList.get(j) });
- }
- }
-
- // Populate the electron/electron pair plots.
- for(MCParticle[] pair : eePairList) {
- eeAnglePlot.fill(getVectorAngle(pair[0].getMomentum(), pair[1].getMomentum()));
- eeMomentumSumPlot.fill(getVectorSum(pair[0].getMomentum(), pair[1].getMomentum()));
- eeMomentumSum2DPlot.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- }
- }
-
- private static final double getVectorSum(Hep3Vector v1, Hep3Vector v2) {
- // Calculate the sum of the sum of the vector components, squared.
- double sum = 0;
- for(int i = 0; i < 3; i++) {
- double elementSum = v1.v()[i] + v2.v()[i];
- sum += (elementSum * elementSum);
- }
-
- // Return the square root of the sum.
- return Math.sqrt(sum);
- }
-
- private static final double getVectorAngle(Hep3Vector v1, Hep3Vector v2) {
- // The vector angle is defined as Acos[(v1 · v2) / (âv1â à âv2â)]
- return Math.acos(getDotProduct(v1, v2) / (v1.magnitude() * v2.magnitude())) / Math.PI * 180.0;
- }
-
- private static final double getDotProduct(Hep3Vector v1, Hep3Vector v2) {
- // Calculate the sum of the vector element products.
- int product = 0;
- for(int i = 0; i < 3; i++) {
- product += (v1.v()[i] * v2.v()[i]);
- }
-
- // Return the result.
- return product;
- }
+ // Store collection names.
+ private String particleCollectionName = "MCParticle";
+
+ // Declare plots.
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D chargedTracksPlot = aida.histogram1D("MC Analysis/Event Tracks", 10, -0.5, 9.5);
+ private IHistogram1D allPlot = aida.histogram1D("MC Analysis/Electron Energy Distribution", 110, 0, 1.1);
+ private IHistogram1D electronPlot = aida.histogram1D("MC Analysis/Electron Energy Distribution", 110, 0, 1.1);
+ private IHistogram1D positronPlot = aida.histogram1D("MC Analysis/Positron Energy Distribution", 110, 0, 1.1);
+ private IHistogram1D momentumXPlot = aida.histogram1D("MC Analysis/Particle x-Momentum Distribution", 110, 0.0, 1.1);
+ private IHistogram1D momentumYPlot = aida.histogram1D("MC Analysis/Particle y-Momentum Distribution", 110, 0.0, 1.1);
+ private IHistogram1D momentumZPlot = aida.histogram1D("MC Analysis/Particle z-Momentum Distribution", 110, 0.0, 1.1);
+ private IHistogram1D epAnglePlot = aida.histogram1D("MC Analysis/Positron\\Electron Pair Angle Distribution", 90, 0, 180);
+ private IHistogram1D eeAnglePlot = aida.histogram1D("MC Analysis/Electron\\Electron Pair Angle Distribution", 90, 0, 180);
+ private IHistogram1D epMomentumSumPlot = aida.histogram1D("MC Analysis/Positron\\Electron Momentum Sum Distribution", 220, 0, 2.2);
+ private IHistogram1D eeMomentumSumPlot = aida.histogram1D("MC Analysis/Electron\\Electron Momentum Sum Distribution", 220, 0, 2.2);
+ private IHistogram2D momentumPlot = aida.histogram2D("MC Analysis/Particle Momentum Distribution", 100, 0.0, 0.40, 110, 0.0, 0.40);
+ private IHistogram2D epMomentumSum2DPlot = aida.histogram2D("MC Analysis/Positron\\Electron 2D Momentum Distribution", 55, 0, 1.1, 55, 0, 1.1);
+ private IHistogram2D eeMomentumSum2DPlot = aida.histogram2D("MC Analysis/Electron\\Electron 2D Momentum Distribution", 55, 0, 1.1, 55, 0, 1.1);
+
+ @Override
+ public void process(EventHeader event) {
+ // Skip the event if there is no Monte Carlo collection.
+ if(!event.hasCollection(MCParticle.class, particleCollectionName)) {
+ return;
+ }
+
+ // Get the list of Monte Carlo particles.
+ List<MCParticle> particleList = event.get(MCParticle.class, particleCollectionName);
+
+ // Track the positive and negative particles.
+ List<MCParticle> electronList = new ArrayList<MCParticle>();
+ List<MCParticle> positronList = new ArrayList<MCParticle>();
+
+ // Count the number of particles in the event.
+ int chargedParticles = 0;
+
+ // Iterate through the particles.
+ for(MCParticle particle : particleList) {
+ // Look at only t = 0 particles.
+ if(particle.getProductionTime() == 0) {
+ // Plot the x/y momentum of each particle.
+ momentumPlot.fill(particle.getMomentum().x(), particle.getMomentum().y());
+
+ // If the particle is charged, increment the charged
+ // particle count.
+ if(particle.getCharge() > 0) {
+ chargedParticles++;
+ }
+
+ // Get the particle momentum in each direction.
+ momentumXPlot.fill(particle.getMomentum().x());
+ momentumYPlot.fill(particle.getMomentum().y());
+ momentumZPlot.fill(particle.getMomentum().z());
+
+ // Populate the general momentum plot.
+ allPlot.fill(particle.getMomentum().magnitude());
+ momentumPlot.fill(particle.getMomentum().x(), particle.getMomentum().y());
+
+ // Store each particle based on its PID and populate
+ // the appropriate plot.
+ if(particle.getPDGID() == 11) {
+ electronList.add(particle);
+ electronPlot.fill(particle.getMomentum().magnitude());
+ } else if(particle.getPDGID() == -11) {
+ positronList.add(particle);
+ positronPlot.fill(particle.getMomentum().magnitude());
+ }
+ }
+ }
+
+ // Populate the charged particles plot.
+ chargedTracksPlot.fill(chargedParticles);
+
+ // Form all electron/positron pairs.
+ List<MCParticle[]> epPairList = new ArrayList<MCParticle[]>();
+ for(MCParticle electron : electronList) {
+ for(MCParticle positron : positronList) {
+ epPairList.add(new MCParticle[] { electron, positron });
+ }
+ }
+
+ // Populate the positron/electron pair plots.
+ for(MCParticle[] pair : epPairList) {
+ epAnglePlot.fill(getVectorAngle(pair[0].getMomentum(), pair[1].getMomentum()));
+ epMomentumSumPlot.fill(getVectorSum(pair[0].getMomentum(), pair[1].getMomentum()));
+ epMomentumSum2DPlot.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ }
+
+ // Form all electron/electron pairs.
+ List<MCParticle[]> eePairList = new ArrayList<MCParticle[]>();
+ for(int i = 0; i < electronList.size(); i++) {
+ for(int j = i + 1; j < electronList.size(); j++) {
+ eePairList.add(new MCParticle[] { electronList.get(i), electronList.get(j) });
+ }
+ }
+
+ // Populate the electron/electron pair plots.
+ for(MCParticle[] pair : eePairList) {
+ eeAnglePlot.fill(getVectorAngle(pair[0].getMomentum(), pair[1].getMomentum()));
+ eeMomentumSumPlot.fill(getVectorSum(pair[0].getMomentum(), pair[1].getMomentum()));
+ eeMomentumSum2DPlot.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ }
+ }
+
+ private static final double getVectorSum(Hep3Vector v1, Hep3Vector v2) {
+ // Calculate the sum of the sum of the vector components, squared.
+ double sum = 0;
+ for(int i = 0; i < 3; i++) {
+ double elementSum = v1.v()[i] + v2.v()[i];
+ sum += (elementSum * elementSum);
+ }
+
+ // Return the square root of the sum.
+ return Math.sqrt(sum);
+ }
+
+ private static final double getVectorAngle(Hep3Vector v1, Hep3Vector v2) {
+ // The vector angle is defined as Acos[(v1 · v2) / (âv1â à âv2â)]
+ return Math.acos(getDotProduct(v1, v2) / (v1.magnitude() * v2.magnitude())) / Math.PI * 180.0;
+ }
+
+ private static final double getDotProduct(Hep3Vector v1, Hep3Vector v2) {
+ // Calculate the sum of the vector element products.
+ int product = 0;
+ for(int i = 0; i < 3; i++) {
+ product += (v1.v()[i] * v2.v()[i]);
+ }
+
+ // Return the result.
+ return product;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/PlotsFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/PlotsFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/PlotsFormatter.java Wed Mar 9 11:43:24 2016
@@ -8,120 +8,120 @@
import java.awt.Font;
public class PlotsFormatter {
- // Define plot fonts.
- public static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 30);
- public static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 35);
- public static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 45);
-
- // Defines the color style options for plot data.
- public static enum ColorStyle {
- MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
- MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
- MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
- RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
- FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
- TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
- BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
- PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
-
- private final Color fillColor;
- private final Color lineColor;
-
- private ColorStyle(Color fillColor, Color lineColor) {
- this.fillColor = fillColor;
- this.lineColor = lineColor;
- }
-
- public Color getFillColor() { return fillColor; }
-
- public Color getLineColor() { return lineColor; }
- };
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- * @param color - The data color settings to use.
- */
- public static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
- // Get the names of each plot on in the region.
- String[] dataNames = region.getAllDataNames();
-
- // Check whether this is an overlay plot. Overlay plots contain
- // more than one data name.
- boolean overlay = (dataNames.length > 1 ? true : false);
-
- // Iterate over each plot in the region.
- for(int i = 0; i < dataNames.length; i++) {
- // Set the overlay style if needed.
- if(overlay) {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with no fill. The color is set by the "color" argument.
- fillStyle.setHistogramFill(false);
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarLineColor(color[i].getFillColor());
-
- // Set the legend text style.
- region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
- }
-
- // Otherwise, set the fill style for a single plot.
- else {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with a fill color. The colors are defined by the
- // "color" argument.
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarColor(color[i].getFillColor());
- fillStyle.setHistogramBarLineColor(color[i].getLineColor());
- }
-
- // Set the statistics box style.
- region.getPlot().getStats().setVisible(true);
- region.getPlot().getStats().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
- }
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- */
- public static final void setDefault2DStyle(PlotterRegion region, boolean logarithmic) {
- // Get the fill style object. 2D plots should never be overlay
- // plots, so there should only ever be one data name.
- JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
-
- // Set the fill style for a two-dimensional plot.
- if(logarithmic) { fillStyle.setLogZ(true); }
- fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
- fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
-
- // Make the statistics box invisible.
- region.getPlot().getStats().setVisible(false);
-
- // Set the general plot font (which is also the z-axis font).
- region.getPlot().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
+ // Define plot fonts.
+ public static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 30);
+ public static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 35);
+ public static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 45);
+
+ // Defines the color style options for plot data.
+ public static enum ColorStyle {
+ MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
+ MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
+ MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
+ RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
+ FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
+ TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
+ BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
+ PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
+
+ private final Color fillColor;
+ private final Color lineColor;
+
+ private ColorStyle(Color fillColor, Color lineColor) {
+ this.fillColor = fillColor;
+ this.lineColor = lineColor;
+ }
+
+ public Color getFillColor() { return fillColor; }
+
+ public Color getLineColor() { return lineColor; }
+ };
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ * @param color - The data color settings to use.
+ */
+ public static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
+ // Get the names of each plot on in the region.
+ String[] dataNames = region.getAllDataNames();
+
+ // Check whether this is an overlay plot. Overlay plots contain
+ // more than one data name.
+ boolean overlay = (dataNames.length > 1 ? true : false);
+
+ // Iterate over each plot in the region.
+ for(int i = 0; i < dataNames.length; i++) {
+ // Set the overlay style if needed.
+ if(overlay) {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with no fill. The color is set by the "color" argument.
+ fillStyle.setHistogramFill(false);
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarLineColor(color[i].getFillColor());
+
+ // Set the legend text style.
+ region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
+ }
+
+ // Otherwise, set the fill style for a single plot.
+ else {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with a fill color. The colors are defined by the
+ // "color" argument.
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarColor(color[i].getFillColor());
+ fillStyle.setHistogramBarLineColor(color[i].getLineColor());
+ }
+
+ // Set the statistics box style.
+ region.getPlot().getStats().setVisible(true);
+ region.getPlot().getStats().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
+ }
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ */
+ public static final void setDefault2DStyle(PlotterRegion region, boolean logarithmic) {
+ // Get the fill style object. 2D plots should never be overlay
+ // plots, so there should only ever be one data name.
+ JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
+
+ // Set the fill style for a two-dimensional plot.
+ if(logarithmic) { fillStyle.setLogZ(true); }
+ fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
+ fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
+
+ // Make the statistics box invisible.
+ region.getPlot().getStats().setVisible(false);
+
+ // Set the general plot font (which is also the z-axis font).
+ region.getPlot().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/RafoAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/RafoAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/RafoAnalysis.java Wed Mar 9 11:43:24 2016
@@ -16,431 +16,431 @@
import org.lcsim.util.aida.AIDA;
public class RafoAnalysis extends Driver {
- private boolean useGoodSVT = false;
- private String clusterCollectionName = "EcalClustersCorr";
- private String particleCollectionName = "FinalStateParticles";
-
- private AIDA aida = AIDA.defaultInstance();
- private IHistogram1D t0TimeCoincidenceAll = aida.histogram1D("Tier 0/Time Coincidence", 300, -15.0, 15.0);
- private IHistogram1D t0TimeCoincidenceFiducial = aida.histogram1D("Tier 0/Time Coincidence (Fiducial Region)", 300, -15.0, 15.0);
- private IHistogram1D t0EnergySumAll = aida.histogram1D("Tier 0/Energy Sum", 300, 0.0, 1.5);
- private IHistogram1D t0EnergySumFiducial = aida.histogram1D("Tier 0/Energy Sum (Fiducial Region)", 300, 0.0, 1.5);
- private IHistogram1D t0InvariantMassAll = aida.histogram1D("Tier 0/Invariant Mass", 2200, 0.0, 1.1);
- private IHistogram2D t0EnergySum2DAll = aida.histogram2D("Tier 0/Top Cluster Energy vs. Bottom Cluster Energy", 300, 0, 1.5, 300, 0, 1.5);
- private IHistogram2D t0EnergySum2DFiducial = aida.histogram2D("Tier 0/Top Cluster Energy vs. Bottom Cluster Energy (Fiducial Region)", 300, 0, 1.5, 300, 0, 1.5);
- private IHistogram2D t0SumCoplanarityAll = aida.histogram2D("Tier 0/Hardware Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 0, 230);
- private IHistogram2D t0SumCoplanarityFiducial = aida.histogram2D("Tier 0/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 0, 230);
- private IHistogram2D t0SumCoplanarityCalcAll = aida.histogram2D("Tier 0/Calculated Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 130, 230);
- private IHistogram2D t0SumCoplanarityCalcFiducial = aida.histogram2D("Tier 0/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 130, 230);
- private IHistogram2D t0TimeEnergyAll = aida.histogram2D("Tier 0/Cluster Time vs. Cluster Energy", 300, 0, 1.5, 100, 0, 100);
- private IHistogram2D t0TimeEnergyFiducial = aida.histogram2D("Tier 0/Cluster Time vs. Cluster Energy (Fiducial Region)", 300, 0, 1.5, 100, 0, 100);
-
- private IHistogram1D t1TimeCoincidenceAll = aida.histogram1D("Tier 1/Time Coincidence", 300, -15.0, 15.0);
- private IHistogram1D t1TimeCoincidenceFiducial = aida.histogram1D("Tier 1/Time Coincidence (Fiducial Region)", 300, -15.0, 15.0);
- private IHistogram1D t1EnergySumAll = aida.histogram1D("Tier 1/Energy Sum", 300, 0.0, 1.5);
- private IHistogram1D t1EnergySumFiducial = aida.histogram1D("Tier 1/Energy Sum (Fiducial Region)", 300, 0.0, 1.5);
- private IHistogram1D t1InvariantMassAll = aida.histogram1D("Tier 1/Invariant Mass", 2200, 0.0, 1.1);
- private IHistogram2D t1EnergySum2DAll = aida.histogram2D("Tier 1/Top Cluster Energy vs. Bottom Cluster Energy", 300, 0, 1.5, 300, 0, 1.5);
- private IHistogram2D t1EnergySum2DFiducial = aida.histogram2D("Tier 1/Top Cluster Energy vs. Bottom Cluster Energy (Fiducial Region)", 300, 0, 1.5, 300, 0, 1.5);
- private IHistogram2D t1SumCoplanarityAll = aida.histogram2D("Tier 1/Hardware Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 0, 230);
- private IHistogram2D t1SumCoplanarityFiducial = aida.histogram2D("Tier 1/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 0, 230);
- private IHistogram2D t1SumCoplanarityCalcAll = aida.histogram2D("Tier 1/Calculated Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 130, 230);
- private IHistogram2D t1SumCoplanarityCalcFiducial = aida.histogram2D("Tier 1/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 130, 230);
- private IHistogram2D t1TimeEnergyAll = aida.histogram2D("Tier 1/Cluster Time vs. Cluster Energy", 300, 0, 1.5, 100, 0, 100);
- private IHistogram2D t1TimeEnergyFiducial = aida.histogram2D("Tier 1/Cluster Time vs. Cluster Energy (Fiducial Region)", 300, 0, 1.5, 100, 0, 100);
-
- private IHistogram1D t2TimeCoincidenceAll = aida.histogram1D("Tier 2/Time Coincidence", 300, -15.0, 15.0);
- private IHistogram1D t2TimeCoincidenceFiducial = aida.histogram1D("Tier 2/Time Coincidence (Fiducial Region)", 300, -15.0, 15.0);
- private IHistogram1D t2EnergySumAll = aida.histogram1D("Tier 2/Energy Sum", 300, 0.0, 1.5);
- private IHistogram1D t2EnergySumFiducial = aida.histogram1D("Tier 2/Energy Sum (Fiducial Region)", 300, 0.0, 1.5);
- private IHistogram1D t2InvariantMassAll = aida.histogram1D("Tier 2/Invariant Mass", 2200, 0.0, 1.1);
- private IHistogram2D t2EnergySum2DAll = aida.histogram2D("Tier 2/Top Cluster Energy vs. Bottom Cluster Energy", 300, 0, 1.5, 300, 0, 1.5);
- private IHistogram2D t2EnergySum2DFiducial = aida.histogram2D("Tier 2/Top Cluster Energy vs. Bottom Cluster Energy (Fiducial Region)", 300, 0, 1.5, 300, 0, 1.5);
- private IHistogram2D t2SumCoplanarityAll = aida.histogram2D("Tier 2/Hardware Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 0, 230);
- private IHistogram2D t2SumCoplanarityFiducial = aida.histogram2D("Tier 2/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 0, 230);
- private IHistogram2D t2SumCoplanarityCalcAll = aida.histogram2D("Tier 2/Calculated Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 130, 230);
- private IHistogram2D t2SumCoplanarityCalcFiducial = aida.histogram2D("Tier 2/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 130, 230);
- private IHistogram2D t2TimeEnergyAll = aida.histogram2D("Tier 2/Cluster Time vs. Cluster Energy", 300, 0, 1.5, 100, 0, 100);
- private IHistogram2D t2TimeEnergyFiducial = aida.histogram2D("Tier 2/Cluster Time vs. Cluster Energy (Fiducial Region)", 300, 0, 1.5, 100, 0, 100);
-
- private int t0Events = 0;
- private int t1Events = 0;
- private int t2Events = 0;
-
- @Override
- public void endOfData() {
- System.out.printf("Tier 0 Events: %d%n", t0Events);
- System.out.printf("Tier 1 Events: %d%n", t1Events);
- System.out.printf("Tier 2 Events: %d%n", t2Events);
- }
-
- @Override
- public void process(EventHeader event) {
- // Check whether the SVT was active in this event.
- final String[] flagNames = { "svt_bias_good", "svt_burstmode_noise_good", "svt_position_good" };
- boolean svtGood = true;
+ private boolean useGoodSVT = false;
+ private String clusterCollectionName = "EcalClustersCorr";
+ private String particleCollectionName = "FinalStateParticles";
+
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D t0TimeCoincidenceAll = aida.histogram1D("Tier 0/Time Coincidence", 300, -15.0, 15.0);
+ private IHistogram1D t0TimeCoincidenceFiducial = aida.histogram1D("Tier 0/Time Coincidence (Fiducial Region)", 300, -15.0, 15.0);
+ private IHistogram1D t0EnergySumAll = aida.histogram1D("Tier 0/Energy Sum", 300, 0.0, 1.5);
+ private IHistogram1D t0EnergySumFiducial = aida.histogram1D("Tier 0/Energy Sum (Fiducial Region)", 300, 0.0, 1.5);
+ private IHistogram1D t0InvariantMassAll = aida.histogram1D("Tier 0/Invariant Mass", 2200, 0.0, 1.1);
+ private IHistogram2D t0EnergySum2DAll = aida.histogram2D("Tier 0/Top Cluster Energy vs. Bottom Cluster Energy", 300, 0, 1.5, 300, 0, 1.5);
+ private IHistogram2D t0EnergySum2DFiducial = aida.histogram2D("Tier 0/Top Cluster Energy vs. Bottom Cluster Energy (Fiducial Region)", 300, 0, 1.5, 300, 0, 1.5);
+ private IHistogram2D t0SumCoplanarityAll = aida.histogram2D("Tier 0/Hardware Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 0, 230);
+ private IHistogram2D t0SumCoplanarityFiducial = aida.histogram2D("Tier 0/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 0, 230);
+ private IHistogram2D t0SumCoplanarityCalcAll = aida.histogram2D("Tier 0/Calculated Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 130, 230);
+ private IHistogram2D t0SumCoplanarityCalcFiducial = aida.histogram2D("Tier 0/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 130, 230);
+ private IHistogram2D t0TimeEnergyAll = aida.histogram2D("Tier 0/Cluster Time vs. Cluster Energy", 300, 0, 1.5, 100, 0, 100);
+ private IHistogram2D t0TimeEnergyFiducial = aida.histogram2D("Tier 0/Cluster Time vs. Cluster Energy (Fiducial Region)", 300, 0, 1.5, 100, 0, 100);
+
+ private IHistogram1D t1TimeCoincidenceAll = aida.histogram1D("Tier 1/Time Coincidence", 300, -15.0, 15.0);
+ private IHistogram1D t1TimeCoincidenceFiducial = aida.histogram1D("Tier 1/Time Coincidence (Fiducial Region)", 300, -15.0, 15.0);
+ private IHistogram1D t1EnergySumAll = aida.histogram1D("Tier 1/Energy Sum", 300, 0.0, 1.5);
+ private IHistogram1D t1EnergySumFiducial = aida.histogram1D("Tier 1/Energy Sum (Fiducial Region)", 300, 0.0, 1.5);
+ private IHistogram1D t1InvariantMassAll = aida.histogram1D("Tier 1/Invariant Mass", 2200, 0.0, 1.1);
+ private IHistogram2D t1EnergySum2DAll = aida.histogram2D("Tier 1/Top Cluster Energy vs. Bottom Cluster Energy", 300, 0, 1.5, 300, 0, 1.5);
+ private IHistogram2D t1EnergySum2DFiducial = aida.histogram2D("Tier 1/Top Cluster Energy vs. Bottom Cluster Energy (Fiducial Region)", 300, 0, 1.5, 300, 0, 1.5);
+ private IHistogram2D t1SumCoplanarityAll = aida.histogram2D("Tier 1/Hardware Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 0, 230);
+ private IHistogram2D t1SumCoplanarityFiducial = aida.histogram2D("Tier 1/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 0, 230);
+ private IHistogram2D t1SumCoplanarityCalcAll = aida.histogram2D("Tier 1/Calculated Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 130, 230);
+ private IHistogram2D t1SumCoplanarityCalcFiducial = aida.histogram2D("Tier 1/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 130, 230);
+ private IHistogram2D t1TimeEnergyAll = aida.histogram2D("Tier 1/Cluster Time vs. Cluster Energy", 300, 0, 1.5, 100, 0, 100);
+ private IHistogram2D t1TimeEnergyFiducial = aida.histogram2D("Tier 1/Cluster Time vs. Cluster Energy (Fiducial Region)", 300, 0, 1.5, 100, 0, 100);
+
+ private IHistogram1D t2TimeCoincidenceAll = aida.histogram1D("Tier 2/Time Coincidence", 300, -15.0, 15.0);
+ private IHistogram1D t2TimeCoincidenceFiducial = aida.histogram1D("Tier 2/Time Coincidence (Fiducial Region)", 300, -15.0, 15.0);
+ private IHistogram1D t2EnergySumAll = aida.histogram1D("Tier 2/Energy Sum", 300, 0.0, 1.5);
+ private IHistogram1D t2EnergySumFiducial = aida.histogram1D("Tier 2/Energy Sum (Fiducial Region)", 300, 0.0, 1.5);
+ private IHistogram1D t2InvariantMassAll = aida.histogram1D("Tier 2/Invariant Mass", 2200, 0.0, 1.1);
+ private IHistogram2D t2EnergySum2DAll = aida.histogram2D("Tier 2/Top Cluster Energy vs. Bottom Cluster Energy", 300, 0, 1.5, 300, 0, 1.5);
+ private IHistogram2D t2EnergySum2DFiducial = aida.histogram2D("Tier 2/Top Cluster Energy vs. Bottom Cluster Energy (Fiducial Region)", 300, 0, 1.5, 300, 0, 1.5);
+ private IHistogram2D t2SumCoplanarityAll = aida.histogram2D("Tier 2/Hardware Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 0, 230);
+ private IHistogram2D t2SumCoplanarityFiducial = aida.histogram2D("Tier 2/Hardware Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 0, 230);
+ private IHistogram2D t2SumCoplanarityCalcAll = aida.histogram2D("Tier 2/Calculated Coplanarity vs. Energy Sum", 300, 0, 1.5, 115, 130, 230);
+ private IHistogram2D t2SumCoplanarityCalcFiducial = aida.histogram2D("Tier 2/Calculated Coplanarity vs. Energy Sum (Fiducial Region)", 300, 0, 1.5, 115, 130, 230);
+ private IHistogram2D t2TimeEnergyAll = aida.histogram2D("Tier 2/Cluster Time vs. Cluster Energy", 300, 0, 1.5, 100, 0, 100);
+ private IHistogram2D t2TimeEnergyFiducial = aida.histogram2D("Tier 2/Cluster Time vs. Cluster Energy (Fiducial Region)", 300, 0, 1.5, 100, 0, 100);
+
+ private int t0Events = 0;
+ private int t1Events = 0;
+ private int t2Events = 0;
+
+ @Override
+ public void endOfData() {
+ System.out.printf("Tier 0 Events: %d%n", t0Events);
+ System.out.printf("Tier 1 Events: %d%n", t1Events);
+ System.out.printf("Tier 2 Events: %d%n", t2Events);
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ // Check whether the SVT was active in this event.
+ final String[] flagNames = { "svt_bias_good", "svt_burstmode_noise_good", "svt_position_good" };
+ boolean svtGood = true;
for(int i = 0; i < flagNames.length; i++) {
int[] flag = event.getIntegerParameters().get(flagNames[i]);
if(flag == null || flag[0] == 0) {
svtGood = false;
}
}
-
+
// If the SVT is not properly running, skip the event.
if(!svtGood && useGoodSVT) { return; }
- // Get the list of particles, if it exists.
- List<ReconstructedParticle> trackList = null;
- if(event.hasCollection(ReconstructedParticle.class, particleCollectionName)) {
- trackList = event.get(ReconstructedParticle.class, particleCollectionName);
- }
-
- // Get the list of clusters, if it exists.
- List<Cluster> clusterList = null;
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- clusterList = event.get(Cluster.class, clusterCollectionName);
- }
-
- // Make sure that the cluster and track lists both exist.
- if(clusterList == null || trackList == null) {
- return;
- }
-
- // Perform tier 1 analysis. This requires that there be at
- // least one top/bottom cluster pair with a time difference
- // of less then 4 ns.
- double t1TimeThreshold = 1.5;
-
- // Get a list of cluster pairs.
- List<Cluster[]> pairList = getClusterPairs(clusterList);
-
- // Iterate over the cluster pairs.
- boolean t1Passed = false;
- t1ClusterLoop:
- for(Cluster[] pair : pairList) {
- // Check that the time difference for the cluster pair
- // meets the time cut.
- if(TriggerModule.getValueTimeCoincidence(pair) <= t1TimeThreshold) {
- // Note that the tier 1 analysis condition passed.
- t1Passed = true;
-
- // Break from the loop.
- break t1ClusterLoop;
- }
- }
-
- // Perform the additional checks for tier 2 analysis. This
- // requires that there be at least one top/bottom track pair
- // and that one track be positive and the other be negative.
-
- // Get a list of top and bottom track pairs.
- List<ReconstructedParticle[]> trackPairList = getTrackPairs(trackList);
-
- // Check that at least one top/bottom track has one negative and
- // one positive track.
- boolean t2Passed = false;
- t2TrackLoop:
- for(ReconstructedParticle[] pair : trackPairList) {
- if((pair[0].getCharge() > 0 && pair[1].getCharge() < 0) || (pair[0].getCharge() < 0 && pair[1].getCharge() > 0)) {
- t2Passed = true;
- break t2TrackLoop;
- }
- }
-
- // Populate the tier 0 analysis plot.
- if(true) {
- // Increment the number of tier 1 events found.
- t0Events++;
-
- // Track which clusters have already been added to the
- // singles plot so that there are no repeats.
- Set<Cluster> plotSet = new HashSet<Cluster>(clusterList.size());
- Set<Cluster> plotFiducial = new HashSet<Cluster>(clusterList.size());
-
- for(ReconstructedParticle[] pair : trackPairList) {
- t0InvariantMassAll.fill(getInvariantMass(pair));
- }
-
- for(Cluster[] pair : pairList) {
- // Fill the all pairs plots.
- double pairEnergy = pair[0].getEnergy() + pair[1].getEnergy();
- t0EnergySumAll.fill(pairEnergy);
- t0EnergySum2DAll.fill(pair[1].getEnergy(), pair[0].getEnergy());
- t0TimeCoincidenceAll.fill(getTimeConicidence(pair));
- t0SumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(pair));
- t0SumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
-
- // Fill the singles plots.
- if(!plotSet.contains(pair[0])) {
- plotSet.add(pair[0]);
- t0TimeEnergyAll.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
- } if(!plotSet.contains(pair[1])) {
- plotSet.add(pair[1]);
- t0TimeEnergyAll.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
- }
-
- // Fill the fiducial plots if appropriate.
- if(inFiducialRegion(pair[0]) && inFiducialRegion(pair[1])) {
- t0EnergySumFiducial.fill(pairEnergy);
- t0EnergySum2DFiducial.fill(pair[1].getEnergy(), pair[0].getEnergy());
- t0TimeCoincidenceFiducial.fill(getTimeConicidence(pair));
- t0SumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(pair));
- t0SumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
- }
-
- // Fill the singles fiducial plots if appropriate.
- if(!plotFiducial.contains(pair[0]) && inFiducialRegion(pair[0])) {
- plotFiducial.add(pair[0]);
- t0TimeEnergyFiducial.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
- } if(!plotFiducial.contains(pair[1]) && inFiducialRegion(pair[1])) {
- plotFiducial.add(pair[1]);
- t0TimeEnergyFiducial.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
- }
- }
- }
-
- // Populate the tier 1 analysis plots, if the conditions were met.
- if(t1Passed) {
- // Increment the number of tier 1 events found.
- t1Events++;
-
- // Track which clusters have already been added to the
- // singles plot so that there are no repeats.
- Set<Cluster> plotSet = new HashSet<Cluster>(clusterList.size());
- Set<Cluster> plotFiducial = new HashSet<Cluster>(clusterList.size());
-
- for(ReconstructedParticle[] pair : trackPairList) {
- t1InvariantMassAll.fill(getInvariantMass(pair));
- }
-
- for(Cluster[] pair : pairList) {
- // Only include clusters that pass the time coincidence.
- if(TriggerModule.getValueTimeCoincidence(pair) > t1TimeThreshold) {
- continue;
- }
-
- // Fill the all pairs plots.
- double pairEnergy = pair[0].getEnergy() + pair[1].getEnergy();
- t1EnergySumAll.fill(pairEnergy);
- t1EnergySum2DAll.fill(pair[1].getEnergy(), pair[0].getEnergy());
- t1TimeCoincidenceAll.fill(getTimeConicidence(pair));
- t1SumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(pair));
- t1SumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
-
- // Fill the singles plots.
- if(!plotSet.contains(pair[0])) {
- plotSet.add(pair[0]);
- t1TimeEnergyAll.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
- } if(!plotSet.contains(pair[1])) {
- plotSet.add(pair[1]);
- t1TimeEnergyAll.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
- }
-
- // Fill the fiducial plots if appropriate.
- if(inFiducialRegion(pair[0]) && inFiducialRegion(pair[1])) {
- t1EnergySumFiducial.fill(pairEnergy);
- t1EnergySum2DFiducial.fill(pair[1].getEnergy(), pair[0].getEnergy());
- t1TimeCoincidenceFiducial.fill(getTimeConicidence(pair));
- t1SumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(pair));
- t1SumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
- }
-
- // Fill the singles fiducial plots if appropriate.
- if(!plotFiducial.contains(pair[0]) && inFiducialRegion(pair[0])) {
- plotFiducial.add(pair[0]);
- t1TimeEnergyFiducial.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
- } if(!plotFiducial.contains(pair[1]) && inFiducialRegion(pair[1])) {
- plotFiducial.add(pair[1]);
- t1TimeEnergyFiducial.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
- }
- }
- }
-
- // Populate the tier 2 analysis plots, if the conditions were met.
- if(t1Passed && t2Passed) {
- // Increment the number of tier 2 events found.
- t2Events++;
-
- // Track which clusters have already been added to the
- // singles plot so that there are no repeats.
- Set<Cluster> plotSet = new HashSet<Cluster>(clusterList.size());
- Set<Cluster> plotFiducial = new HashSet<Cluster>(clusterList.size());
-
- for(ReconstructedParticle[] pair : trackPairList) {
- t2InvariantMassAll.fill(getInvariantMass(pair));
- }
-
- for(Cluster[] pair : pairList) {
- // Only include clusters that pass the time coincidence.
- if(TriggerModule.getValueTimeCoincidence(pair) > t1TimeThreshold) {
- continue;
- }
-
- // Fill the all pairs plots.
- double pairEnergy = pair[0].getEnergy() + pair[1].getEnergy();
- t2EnergySumAll.fill(pairEnergy);
- t2EnergySum2DAll.fill(pair[1].getEnergy(), pair[0].getEnergy());
- t2TimeCoincidenceAll.fill(getTimeConicidence(pair));
- t2SumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(pair));
- t2SumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
-
- // Fill the singles plots.
- if(!plotSet.contains(pair[0])) {
- plotSet.add(pair[0]);
- t2TimeEnergyAll.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
- } if(!plotSet.contains(pair[1])) {
- plotSet.add(pair[1]);
- t2TimeEnergyAll.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
- }
-
- // Fill the fiducial plots if appropriate.
- if(inFiducialRegion(pair[0]) && inFiducialRegion(pair[1])) {
- t2EnergySumFiducial.fill(pairEnergy);
- t2EnergySum2DFiducial.fill(pair[1].getEnergy(), pair[0].getEnergy());
- t2TimeCoincidenceFiducial.fill(getTimeConicidence(pair));
- t2SumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(pair));
- t2SumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
- }
-
- // Fill the singles fiducial plots if appropriate.
- if(!plotFiducial.contains(pair[0]) && inFiducialRegion(pair[0])) {
- plotFiducial.add(pair[0]);
- t2TimeEnergyFiducial.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
- } if(!plotFiducial.contains(pair[1]) && inFiducialRegion(pair[1])) {
- plotFiducial.add(pair[1]);
- t2TimeEnergyFiducial.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
- }
- }
- }
- }
-
- public static final double getInvariantMass(ReconstructedParticle[] pair) {
- // Get energy.
- double[] energy = new double[2];
- final double electronMassSquared = Math.pow(0.00051099891, 2);
- energy[0] = Math.sqrt(pair[0].getMomentum().magnitudeSquared() + electronMassSquared);
- energy[1] = Math.sqrt(pair[1].getMomentum().magnitudeSquared() + electronMassSquared);
-
- // Calculate the invariant mass.
- return Math.sqrt(Math.pow(energy[0] + energy[1], 2) - Math.pow(pair[0].getMomentum().x() + pair[1].getMomentum().x(), 2)
- + Math.pow(pair[0].getMomentum().y() + pair[1].getMomentum().y(), 2) + Math.pow(pair[0].getMomentum().z() + pair[1].getMomentum().z(), 2));
- }
-
- public static final double getCalculatedCoplanarity(Cluster[] pair) {
- // Define the x- and y-coordinates of the clusters as well as
- // calorimeter center.
- final double ORIGIN_X = 42.52;
- double x[] = { pair[0].getPosition()[0], pair[1].getPosition()[0] };
- double y[] = { pair[0].getPosition()[1], pair[1].getPosition()[1] };
-
+ // Get the list of particles, if it exists.
+ List<ReconstructedParticle> trackList = null;
+ if(event.hasCollection(ReconstructedParticle.class, particleCollectionName)) {
+ trackList = event.get(ReconstructedParticle.class, particleCollectionName);
+ }
+
+ // Get the list of clusters, if it exists.
+ List<Cluster> clusterList = null;
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ clusterList = event.get(Cluster.class, clusterCollectionName);
+ }
+
+ // Make sure that the cluster and track lists both exist.
+ if(clusterList == null || trackList == null) {
+ return;
+ }
+
+ // Perform tier 1 analysis. This requires that there be at
+ // least one top/bottom cluster pair with a time difference
+ // of less then 4 ns.
+ double t1TimeThreshold = 1.5;
+
+ // Get a list of cluster pairs.
+ List<Cluster[]> pairList = getClusterPairs(clusterList);
+
+ // Iterate over the cluster pairs.
+ boolean t1Passed = false;
+ t1ClusterLoop:
+ for(Cluster[] pair : pairList) {
+ // Check that the time difference for the cluster pair
+ // meets the time cut.
+ if(TriggerModule.getValueTimeCoincidence(pair) <= t1TimeThreshold) {
+ // Note that the tier 1 analysis condition passed.
+ t1Passed = true;
+
+ // Break from the loop.
+ break t1ClusterLoop;
+ }
+ }
+
+ // Perform the additional checks for tier 2 analysis. This
+ // requires that there be at least one top/bottom track pair
+ // and that one track be positive and the other be negative.
+
+ // Get a list of top and bottom track pairs.
+ List<ReconstructedParticle[]> trackPairList = getTrackPairs(trackList);
+
+ // Check that at least one top/bottom track has one negative and
+ // one positive track.
+ boolean t2Passed = false;
+ t2TrackLoop:
+ for(ReconstructedParticle[] pair : trackPairList) {
+ if((pair[0].getCharge() > 0 && pair[1].getCharge() < 0) || (pair[0].getCharge() < 0 && pair[1].getCharge() > 0)) {
+ t2Passed = true;
+ break t2TrackLoop;
+ }
+ }
+
+ // Populate the tier 0 analysis plot.
+ if(true) {
+ // Increment the number of tier 1 events found.
+ t0Events++;
+
+ // Track which clusters have already been added to the
+ // singles plot so that there are no repeats.
+ Set<Cluster> plotSet = new HashSet<Cluster>(clusterList.size());
+ Set<Cluster> plotFiducial = new HashSet<Cluster>(clusterList.size());
+
+ for(ReconstructedParticle[] pair : trackPairList) {
+ t0InvariantMassAll.fill(getInvariantMass(pair));
+ }
+
+ for(Cluster[] pair : pairList) {
+ // Fill the all pairs plots.
+ double pairEnergy = pair[0].getEnergy() + pair[1].getEnergy();
+ t0EnergySumAll.fill(pairEnergy);
+ t0EnergySum2DAll.fill(pair[1].getEnergy(), pair[0].getEnergy());
+ t0TimeCoincidenceAll.fill(getTimeConicidence(pair));
+ t0SumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(pair));
+ t0SumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
+
+ // Fill the singles plots.
+ if(!plotSet.contains(pair[0])) {
+ plotSet.add(pair[0]);
+ t0TimeEnergyAll.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
+ } if(!plotSet.contains(pair[1])) {
+ plotSet.add(pair[1]);
+ t0TimeEnergyAll.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
+ }
+
+ // Fill the fiducial plots if appropriate.
+ if(inFiducialRegion(pair[0]) && inFiducialRegion(pair[1])) {
+ t0EnergySumFiducial.fill(pairEnergy);
+ t0EnergySum2DFiducial.fill(pair[1].getEnergy(), pair[0].getEnergy());
+ t0TimeCoincidenceFiducial.fill(getTimeConicidence(pair));
+ t0SumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(pair));
+ t0SumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
+ }
+
+ // Fill the singles fiducial plots if appropriate.
+ if(!plotFiducial.contains(pair[0]) && inFiducialRegion(pair[0])) {
+ plotFiducial.add(pair[0]);
+ t0TimeEnergyFiducial.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
+ } if(!plotFiducial.contains(pair[1]) && inFiducialRegion(pair[1])) {
+ plotFiducial.add(pair[1]);
+ t0TimeEnergyFiducial.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
+ }
+ }
+ }
+
+ // Populate the tier 1 analysis plots, if the conditions were met.
+ if(t1Passed) {
+ // Increment the number of tier 1 events found.
+ t1Events++;
+
+ // Track which clusters have already been added to the
+ // singles plot so that there are no repeats.
+ Set<Cluster> plotSet = new HashSet<Cluster>(clusterList.size());
+ Set<Cluster> plotFiducial = new HashSet<Cluster>(clusterList.size());
+
+ for(ReconstructedParticle[] pair : trackPairList) {
+ t1InvariantMassAll.fill(getInvariantMass(pair));
+ }
+
+ for(Cluster[] pair : pairList) {
+ // Only include clusters that pass the time coincidence.
+ if(TriggerModule.getValueTimeCoincidence(pair) > t1TimeThreshold) {
+ continue;
+ }
+
+ // Fill the all pairs plots.
+ double pairEnergy = pair[0].getEnergy() + pair[1].getEnergy();
+ t1EnergySumAll.fill(pairEnergy);
+ t1EnergySum2DAll.fill(pair[1].getEnergy(), pair[0].getEnergy());
+ t1TimeCoincidenceAll.fill(getTimeConicidence(pair));
+ t1SumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(pair));
+ t1SumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
+
+ // Fill the singles plots.
+ if(!plotSet.contains(pair[0])) {
+ plotSet.add(pair[0]);
+ t1TimeEnergyAll.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
+ } if(!plotSet.contains(pair[1])) {
+ plotSet.add(pair[1]);
+ t1TimeEnergyAll.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
+ }
+
+ // Fill the fiducial plots if appropriate.
+ if(inFiducialRegion(pair[0]) && inFiducialRegion(pair[1])) {
+ t1EnergySumFiducial.fill(pairEnergy);
+ t1EnergySum2DFiducial.fill(pair[1].getEnergy(), pair[0].getEnergy());
+ t1TimeCoincidenceFiducial.fill(getTimeConicidence(pair));
+ t1SumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(pair));
+ t1SumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
+ }
+
+ // Fill the singles fiducial plots if appropriate.
+ if(!plotFiducial.contains(pair[0]) && inFiducialRegion(pair[0])) {
+ plotFiducial.add(pair[0]);
+ t1TimeEnergyFiducial.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
+ } if(!plotFiducial.contains(pair[1]) && inFiducialRegion(pair[1])) {
+ plotFiducial.add(pair[1]);
+ t1TimeEnergyFiducial.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
+ }
+ }
+ }
+
+ // Populate the tier 2 analysis plots, if the conditions were met.
+ if(t1Passed && t2Passed) {
+ // Increment the number of tier 2 events found.
+ t2Events++;
+
+ // Track which clusters have already been added to the
+ // singles plot so that there are no repeats.
+ Set<Cluster> plotSet = new HashSet<Cluster>(clusterList.size());
+ Set<Cluster> plotFiducial = new HashSet<Cluster>(clusterList.size());
+
+ for(ReconstructedParticle[] pair : trackPairList) {
+ t2InvariantMassAll.fill(getInvariantMass(pair));
+ }
+
+ for(Cluster[] pair : pairList) {
+ // Only include clusters that pass the time coincidence.
+ if(TriggerModule.getValueTimeCoincidence(pair) > t1TimeThreshold) {
+ continue;
+ }
+
+ // Fill the all pairs plots.
+ double pairEnergy = pair[0].getEnergy() + pair[1].getEnergy();
+ t2EnergySumAll.fill(pairEnergy);
+ t2EnergySum2DAll.fill(pair[1].getEnergy(), pair[0].getEnergy());
+ t2TimeCoincidenceAll.fill(getTimeConicidence(pair));
+ t2SumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(pair));
+ t2SumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
+
+ // Fill the singles plots.
+ if(!plotSet.contains(pair[0])) {
+ plotSet.add(pair[0]);
+ t2TimeEnergyAll.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
+ } if(!plotSet.contains(pair[1])) {
+ plotSet.add(pair[1]);
+ t2TimeEnergyAll.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
+ }
+
+ // Fill the fiducial plots if appropriate.
+ if(inFiducialRegion(pair[0]) && inFiducialRegion(pair[1])) {
+ t2EnergySumFiducial.fill(pairEnergy);
+ t2EnergySum2DFiducial.fill(pair[1].getEnergy(), pair[0].getEnergy());
+ t2TimeCoincidenceFiducial.fill(getTimeConicidence(pair));
+ t2SumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(pair));
+ t2SumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(pair));
+ }
+
+ // Fill the singles fiducial plots if appropriate.
+ if(!plotFiducial.contains(pair[0]) && inFiducialRegion(pair[0])) {
+ plotFiducial.add(pair[0]);
+ t2TimeEnergyFiducial.fill(pair[0].getEnergy(), TriggerModule.getClusterTime(pair[0]));
+ } if(!plotFiducial.contains(pair[1]) && inFiducialRegion(pair[1])) {
+ plotFiducial.add(pair[1]);
+ t2TimeEnergyFiducial.fill(pair[1].getEnergy(), TriggerModule.getClusterTime(pair[1]));
+ }
+ }
+ }
+ }
+
+ public static final double getInvariantMass(ReconstructedParticle[] pair) {
+ // Get energy.
+ double[] energy = new double[2];
+ final double electronMassSquared = Math.pow(0.00051099891, 2);
+ energy[0] = Math.sqrt(pair[0].getMomentum().magnitudeSquared() + electronMassSquared);
+ energy[1] = Math.sqrt(pair[1].getMomentum().magnitudeSquared() + electronMassSquared);
+
+ // Calculate the invariant mass.
+ return Math.sqrt(Math.pow(energy[0] + energy[1], 2) - Math.pow(pair[0].getMomentum().x() + pair[1].getMomentum().x(), 2)
+ + Math.pow(pair[0].getMomentum().y() + pair[1].getMomentum().y(), 2) + Math.pow(pair[0].getMomentum().z() + pair[1].getMomentum().z(), 2));
+ }
+
+ public static final double getCalculatedCoplanarity(Cluster[] pair) {
+ // Define the x- and y-coordinates of the clusters as well as
+ // calorimeter center.
+ final double ORIGIN_X = 42.52;
+ double x[] = { pair[0].getPosition()[0], pair[1].getPosition()[0] };
+ double y[] = { pair[0].getPosition()[1], pair[1].getPosition()[1] };
+
// Get the cluster angles.
double[] clusterAngle = new double[2];
for(int i = 0; i < 2; i++) {
- clusterAngle[i] = Math.atan2(y[i], x[i] - ORIGIN_X) * 180 / Math.PI;
- if(clusterAngle[i] <= 0) { clusterAngle[i] += 360; }
+ clusterAngle[i] = Math.atan2(y[i], x[i] - ORIGIN_X) * 180 / Math.PI;
+ if(clusterAngle[i] <= 0) { clusterAngle[i] += 360; }
}
// Calculate the coplanarity cut value.
double clusterDiff = clusterAngle[0] - clusterAngle[1];
return clusterDiff > 0 ? clusterDiff : clusterDiff + 360;
- }
-
- private static final boolean inFiducialRegion(Cluster cluster) {
- // Get the x and y indices for the cluster.
- int ix = TriggerModule.getClusterXIndex(cluster);
- int absx = Math.abs(TriggerModule.getClusterXIndex(cluster));
- int absy = Math.abs(TriggerModule.getClusterYIndex(cluster));
-
- // Check if the cluster is on the top or the bottom of the
- // calorimeter, as defined by |y| == 5. This is an edge cluster
- // and is not in the fiducial region.
- if(absy == 5) {
- return false;
- }
-
- // Check if the cluster is on the extreme left or right side
- // of the calorimeter, as defined by |x| == 23. This is also
- // and edge cluster is not in the fiducial region.
- if(absx == 23) {
- return false;
- }
-
- // Check if the cluster is along the beam gap, as defined by
- // |y| == 1. This is an internal edge cluster and is not in the
- // fiducial region.
- if(absy == 1) {
- return false;
- }
-
- // Lastly, check if the cluster falls along the beam hole, as
- // defined by clusters with -11 <= x <= -1 and |y| == 2. This
- // is not the fiducial region.
- if(absy == 2 && ix <= -1 && ix >= -11) {
- return false;
- }
-
- // If all checks fail, the cluster is in the fiducial region.
- return true;
- }
-
- private static final List<ReconstructedParticle[]> getTrackPairs(List<ReconstructedParticle> tracks) {
- // Separate the tracks into top and bottom tracks.
- List<ReconstructedParticle> topList = new ArrayList<ReconstructedParticle>();
- List<ReconstructedParticle> botList = new ArrayList<ReconstructedParticle>();
- for(ReconstructedParticle track : tracks) {
- // Make sure that the track actually contains tracks.
- if(track.getTracks().size() > 0) {
- // Use the tan(Î) to differentiate "top" and "bottom"
- // tracks from one another.
- if(track.getTracks().get(0).getTrackStates().get(0).getTanLambda() > 0) {
- topList.add(track);
- } else {
- botList.add(track);
- }
- }
- }
-
- // Form all permutations of top and bottom tracks.
- List<ReconstructedParticle[]> pairList = new ArrayList<ReconstructedParticle[]>();
- for(ReconstructedParticle topTrack : topList) {
- for(ReconstructedParticle botTrack : botList) {
- pairList.add(new ReconstructedParticle[] { topTrack, botTrack });
- }
- }
-
- // Return the resulting cluster pairs.
- return pairList;
- }
-
- private static final List<Cluster[]> getClusterPairs(List<Cluster> clusters) {
- // Separate the clusters into top and bottom clusters.
- List<Cluster> topList = new ArrayList<Cluster>();
- List<Cluster> botList = new ArrayList<Cluster>();
- for(Cluster cluster : clusters) {
- if(TriggerModule.getClusterYIndex(cluster) > 0) {
- topList.add(cluster);
- } else {
- botList.add(cluster);
- }
- }
-
- // Form all permutations of top and bottom clusters.
- List<Cluster[]> pairList = new ArrayList<Cluster[]>();
- for(Cluster topCluster : topList) {
- for(Cluster botCluster : botList) {
- pairList.add(new Cluster[] { topCluster, botCluster });
- }
- }
-
- // Return the resulting cluster pairs.
- return pairList;
- }
-
- public static final double getTimeConicidence(Cluster[] pair) {
- return TriggerModule.getClusterSeedHit(pair[1]).getTime() - TriggerModule.getClusterSeedHit(pair[0]).getTime();
- }
-
- public void setUseGoodSVT(boolean state) {
- useGoodSVT = state;
- }
+ }
+
+ private static final boolean inFiducialRegion(Cluster cluster) {
+ // Get the x and y indices for the cluster.
+ int ix = TriggerModule.getClusterXIndex(cluster);
+ int absx = Math.abs(TriggerModule.getClusterXIndex(cluster));
+ int absy = Math.abs(TriggerModule.getClusterYIndex(cluster));
+
+ // Check if the cluster is on the top or the bottom of the
+ // calorimeter, as defined by |y| == 5. This is an edge cluster
+ // and is not in the fiducial region.
+ if(absy == 5) {
+ return false;
+ }
+
+ // Check if the cluster is on the extreme left or right side
+ // of the calorimeter, as defined by |x| == 23. This is also
+ // and edge cluster is not in the fiducial region.
+ if(absx == 23) {
+ return false;
+ }
+
+ // Check if the cluster is along the beam gap, as defined by
+ // |y| == 1. This is an internal edge cluster and is not in the
+ // fiducial region.
+ if(absy == 1) {
+ return false;
+ }
+
+ // Lastly, check if the cluster falls along the beam hole, as
+ // defined by clusters with -11 <= x <= -1 and |y| == 2. This
+ // is not the fiducial region.
+ if(absy == 2 && ix <= -1 && ix >= -11) {
+ return false;
+ }
+
+ // If all checks fail, the cluster is in the fiducial region.
+ return true;
+ }
+
+ private static final List<ReconstructedParticle[]> getTrackPairs(List<ReconstructedParticle> tracks) {
+ // Separate the tracks into top and bottom tracks.
+ List<ReconstructedParticle> topList = new ArrayList<ReconstructedParticle>();
+ List<ReconstructedParticle> botList = new ArrayList<ReconstructedParticle>();
+ for(ReconstructedParticle track : tracks) {
+ // Make sure that the track actually contains tracks.
+ if(track.getTracks().size() > 0) {
+ // Use the tan(Î) to differentiate "top" and "bottom"
+ // tracks from one another.
+ if(track.getTracks().get(0).getTrackStates().get(0).getTanLambda() > 0) {
+ topList.add(track);
+ } else {
+ botList.add(track);
+ }
+ }
+ }
+
+ // Form all permutations of top and bottom tracks.
+ List<ReconstructedParticle[]> pairList = new ArrayList<ReconstructedParticle[]>();
+ for(ReconstructedParticle topTrack : topList) {
+ for(ReconstructedParticle botTrack : botList) {
+ pairList.add(new ReconstructedParticle[] { topTrack, botTrack });
+ }
+ }
+
+ // Return the resulting cluster pairs.
+ return pairList;
+ }
+
+ private static final List<Cluster[]> getClusterPairs(List<Cluster> clusters) {
+ // Separate the clusters into top and bottom clusters.
+ List<Cluster> topList = new ArrayList<Cluster>();
+ List<Cluster> botList = new ArrayList<Cluster>();
+ for(Cluster cluster : clusters) {
+ if(TriggerModule.getClusterYIndex(cluster) > 0) {
+ topList.add(cluster);
+ } else {
+ botList.add(cluster);
+ }
+ }
+
+ // Form all permutations of top and bottom clusters.
+ List<Cluster[]> pairList = new ArrayList<Cluster[]>();
+ for(Cluster topCluster : topList) {
+ for(Cluster botCluster : botList) {
+ pairList.add(new Cluster[] { topCluster, botCluster });
+ }
+ }
+
+ // Return the resulting cluster pairs.
+ return pairList;
+ }
+
+ public static final double getTimeConicidence(Cluster[] pair) {
+ return TriggerModule.getClusterSeedHit(pair[1]).getTime() - TriggerModule.getClusterSeedHit(pair[0]).getTime();
+ }
+
+ public void setUseGoodSVT(boolean state) {
+ useGoodSVT = state;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/TridentTrackDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/TridentTrackDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/TridentTrackDriver.java Wed Mar 9 11:43:24 2016
@@ -15,229 +15,229 @@
import org.lcsim.util.aida.AIDA;
public class TridentTrackDriver extends Driver {
- private String finalStateCollectionName = "FinalStateParticles";
- private String candidateCollectionName = "UnconstrainedV0Candidates";
-
- private int tracksCandidate = 0;
- private int tracksFinalState = 0;
- private int tracksCandidateCluster = 0;
- private int tracksFinalStateCluster = 0;
-
- private static final int ANY_CLUSTER = 0;
- private static final int HAS_CLUSTER = 1;
-
- private AIDA aida = AIDA.defaultInstance();
- private IHistogram1D[] tracks = new IHistogram1D[2];
- private IHistogram1D[] posTracks = new IHistogram1D[2];
- private IHistogram1D[] negTracks = new IHistogram1D[2];
- private IHistogram1D[] posMomentum = new IHistogram1D[2];
- private IHistogram1D[] negMomentum = new IHistogram1D[2];
- private IHistogram1D[] energySum = new IHistogram1D[2];
- private IHistogram1D[] energyMomentumDiff = new IHistogram1D[2];
- private IHistogram1D[] momentumSum = new IHistogram1D[2];
- private IHistogram1D[] invariantMass = new IHistogram1D[2];
- private IHistogram2D[] energySum2D = new IHistogram2D[2];
- private IHistogram2D[] momentumSum2D = new IHistogram2D[2];
- private IHistogram2D[] position = new IHistogram2D[2];
-
- @Override
- public void startOfData() {
- // Instantiate the "any cluster status" plots.
- tracks[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Tracks in Event (All)", 7, -0.5, 6.5);
- posTracks[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Tracks in Event (Positive)", 7, -0.5, 6.5);
- negTracks[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Tracks in Event (Negative)", 7, -0.5, 6.5);
- posMomentum[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Momentum (Positive)", 110, 0, 1.1);
- negMomentum[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Momentum (Negative)", 110, 0, 1.1);
- energySum[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Energy Sum", 55, 0, 2.2);
- momentumSum[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Momentum Sum", 55, 0, 2.2);
- energyMomentumDiff[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Energy-Momentum Difference", 55, 0, 2.2);
- invariantMass[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Invariant Mass", 240, 0.000, 0.120);
- energySum2D[ANY_CLUSTER] = aida.histogram2D("Trident Analysis/All/2D Energy Sum", 55, 0, 1.1, 55, 0, 1.1);
- momentumSum2D[ANY_CLUSTER] = aida.histogram2D("Trident Analysis/All/2D Momentum Sum", 55, 0, 1.1, 55, 0, 1.1);
- position[ANY_CLUSTER] = aida.histogram2D("Trident Analysis/All/Track Cluster Position", 46, -23, 23, 11, -5.5, 5.5);
-
- // Instantiate the "has a cluster" plots.
- tracks[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Tracks in Event (All)", 7, -0.5, 6.5);
- posTracks[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Tracks in Event (Positive)", 7, -0.5, 6.5);
- negTracks[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Tracks in Event (Negative)", 7, -0.5, 6.5);
- posMomentum[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Momentum (Positive)", 110, 0, 1.1);
- negMomentum[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Momentum (Negative)", 110, 0, 1.1);
- energySum[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Energy Sum", 55, 0, 2.2);
- momentumSum[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Momentum Sum", 55, 0, 2.2);
- energyMomentumDiff[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Energy-Momentum Difference", 55, 0, 2.2);
- invariantMass[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Invariant Mass", 240, 0.000, 0.120);
- energySum2D[HAS_CLUSTER] = aida.histogram2D("Trident Analysis/Cluster/2D Energy Sum", 55, 0, 1.1, 55, 0, 1.1);
- momentumSum2D[HAS_CLUSTER] = aida.histogram2D("Trident Analysis/Cluster/2D Momentum Sum", 55, 0, 1.1, 55, 0, 1.1);
- position[HAS_CLUSTER] = aida.histogram2D("Trident Analysis/Cluster/Track Cluster Position", 46, -23, 23, 11, -5.5, 5.5);
- }
-
- @Override
- public void endOfData() {
- System.out.printf("Tracks (Candidate) :: %d%n", tracksCandidate);
- System.out.printf("Tracks (Final State) :: %d%n", tracksFinalState);
- System.out.printf("Cluster Tracks (Candidate) :: %d%n", tracksCandidateCluster);
- System.out.printf("Cluster Tracks (Final State) :: %d%n", tracksFinalStateCluster);
- }
-
- @Override
- public void process(EventHeader event) {
- // Check for final state particles.
- if(event.hasCollection(ReconstructedParticle.class, finalStateCollectionName)) {
- // Get the final state particles.
- List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, finalStateCollectionName);
-
- // Store the positive and negative tracks.
- List<ReconstructedParticle> allTrackList = new ArrayList<ReconstructedParticle>();
- List<ReconstructedParticle> posTrackList = new ArrayList<ReconstructedParticle>();
- List<ReconstructedParticle> negTrackList = new ArrayList<ReconstructedParticle>();
-
- // Store the same tracks, but limited to those with clusters.
- List<ReconstructedParticle> allClusterTrackList = new ArrayList<ReconstructedParticle>();
- List<ReconstructedParticle> posClusterTrackList = new ArrayList<ReconstructedParticle>();
- List<ReconstructedParticle> negClusterTrackList = new ArrayList<ReconstructedParticle>();
-
- // Iterate over the tracks and populate the lists.
- for(ReconstructedParticle track : trackList) {
- // Skip instances with no raw tracks.
- if(track.getTracks().size() == 0) { continue; }
-
- // Add the cluster to the all track list.
- allTrackList.add(track);
-
- // Track the number of cluster tracks.
- tracksFinalState++;
- if(!track.getClusters().isEmpty()) {
- tracksFinalStateCluster++;
- }
-
- // Process the track position plots.
- Hep3Vector trackPosAtEcal = TrackUtils.extrapolateTrack(track.getTracks().get(0), 1394.5);
- position[ANY_CLUSTER].fill(trackPosAtEcal.x(), trackPosAtEcal.y());
-
- // Process the tracks based on charge.
- if(track.getCharge() > 0) {
- // Increment the counters and populate the momentum plots.
- posTrackList.add(track);
- posMomentum[ANY_CLUSTER].fill(track.getMomentum().magnitude());
-
- // Repeat for the "has clusters" plots if necessary.
- if(track.getClusters().size() > 0) {
- // Increment the counters and populate the
- // momentum plot.
- posClusterTrackList.add(track);
- allClusterTrackList.add(track);
- posMomentum[HAS_CLUSTER].fill(track.getMomentum().magnitude());
-
- // Populate the cluster position plot.
- //int ix = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
- //int iy = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
- position[HAS_CLUSTER].fill(trackPosAtEcal.x(), trackPosAtEcal.y());
- }
- } else if(track.getCharge() < 0) {
- // Increment the counters and populate the momentum plots.
- negTrackList.add(track);
- negMomentum[ANY_CLUSTER].fill(track.getMomentum().magnitude());
-
- // Repeat for the "has clusters" plots if necessary.
- if(track.getClusters().size() > 0) {
- // Increment the counters and populate the
- // momentum plot.
- negClusterTrackList.add(track);
- allClusterTrackList.add(track);
- negMomentum[HAS_CLUSTER].fill(track.getMomentum().magnitude());
-
- // Populate the cluster position plot.
- //int ix = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
- //int iy = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
- position[HAS_CLUSTER].fill(trackPosAtEcal.x(), trackPosAtEcal.y());
- }
- } else {
- if(track.getClusters().size() > 0) {
- // Increment the counter.
- allClusterTrackList.add(track);
-
- // Populate the cluster position plot.
- //int ix = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
- //int iy = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
- position[HAS_CLUSTER].fill(trackPosAtEcal.x(), trackPosAtEcal.y());
- }
- }
- }
-
- // Populate the tracks per event plots.
- tracks[ANY_CLUSTER].fill(allTrackList.size());
- tracks[HAS_CLUSTER].fill(allClusterTrackList.size());
- posTracks[ANY_CLUSTER].fill(posTrackList.size());
- posTracks[HAS_CLUSTER].fill(posClusterTrackList.size());
- negTracks[ANY_CLUSTER].fill(negTrackList.size());
- negTracks[HAS_CLUSTER].fill(negClusterTrackList.size());
-
- /// Store track pairs.
- List<ReconstructedParticle[]> pairList = new ArrayList<ReconstructedParticle[]>();
- List<ReconstructedParticle[]> pairClusterList = new ArrayList<ReconstructedParticle[]>();
-
- // Form track pairs for all tracks.
- for(ReconstructedParticle posTrack : posTrackList) {
- for(ReconstructedParticle negTrack : negTrackList) {
- pairList.add(new ReconstructedParticle[] { posTrack, negTrack });
- }
- }
-
- // Form track pairs for cluster tracks.
- for(ReconstructedParticle posTrack : posClusterTrackList) {
- for(ReconstructedParticle negTrack : negClusterTrackList) {
- pairClusterList.add(new ReconstructedParticle[] { posTrack, negTrack });
- }
- }
-
- // Populate the track pair plots.
- for(ReconstructedParticle[] pair : pairList) {
- Hep3Vector pSum = new BasicHep3Vector(
- pair[0].getMomentum().x() + pair[1].getMomentum().x(),
- pair[0].getMomentum().y() + pair[1].getMomentum().y(),
- pair[0].getMomentum().z() + pair[1].getMomentum().z());
-
- energySum[ANY_CLUSTER].fill(pair[0].getEnergy() + pair[1].getEnergy());
- momentumSum[ANY_CLUSTER].fill(pSum.magnitude());
- energySum2D[ANY_CLUSTER].fill(pair[0].getEnergy(), pair[1].getEnergy());
- momentumSum2D[ANY_CLUSTER].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- energyMomentumDiff[ANY_CLUSTER].fill(Math.abs((pair[0].getEnergy() + pair[1].getEnergy()) - pSum.magnitude()));
- }
-
- // Populate the cluster track pair plots.
- for(ReconstructedParticle[] pair : pairClusterList) {
- Hep3Vector pSum = new BasicHep3Vector(
- pair[0].getMomentum().x() + pair[1].getMomentum().x(),
- pair[0].getMomentum().y() + pair[1].getMomentum().y(),
- pair[0].getMomentum().z() + pair[1].getMomentum().z());
-
- energySum[HAS_CLUSTER].fill(pair[0].getEnergy() + pair[1].getEnergy());
- momentumSum[HAS_CLUSTER].fill(pSum.magnitude());
- energySum2D[HAS_CLUSTER].fill(pair[0].getEnergy(), pair[1].getEnergy());
- momentumSum2D[HAS_CLUSTER].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- energyMomentumDiff[HAS_CLUSTER].fill(Math.abs((pair[0].getEnergy() + pair[1].getEnergy()) - pSum.magnitude()));
- }
- }
-
- // Check for V0 candidates.
- if(event.hasCollection(ReconstructedParticle.class, candidateCollectionName)) {
- // Get the candidate particles.
- List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, candidateCollectionName);
-
- // Increment the counter.
- tracksCandidate += trackList.size();
-
- // Increment the counter for cluster tracks.
- for(ReconstructedParticle track : trackList) {
- // Populate the invariant mass plot.
- invariantMass[ANY_CLUSTER].fill(track.getMass());
-
- // Check for a cluster track.
- if(track.getClusters().size() > 0) {
- tracksCandidateCluster++;
- invariantMass[HAS_CLUSTER].fill(track.getMass());
- }
- }
- }
- }
+ private String finalStateCollectionName = "FinalStateParticles";
+ private String candidateCollectionName = "UnconstrainedV0Candidates";
+
+ private int tracksCandidate = 0;
+ private int tracksFinalState = 0;
+ private int tracksCandidateCluster = 0;
+ private int tracksFinalStateCluster = 0;
+
+ private static final int ANY_CLUSTER = 0;
+ private static final int HAS_CLUSTER = 1;
+
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D[] tracks = new IHistogram1D[2];
+ private IHistogram1D[] posTracks = new IHistogram1D[2];
+ private IHistogram1D[] negTracks = new IHistogram1D[2];
+ private IHistogram1D[] posMomentum = new IHistogram1D[2];
+ private IHistogram1D[] negMomentum = new IHistogram1D[2];
+ private IHistogram1D[] energySum = new IHistogram1D[2];
+ private IHistogram1D[] energyMomentumDiff = new IHistogram1D[2];
+ private IHistogram1D[] momentumSum = new IHistogram1D[2];
+ private IHistogram1D[] invariantMass = new IHistogram1D[2];
+ private IHistogram2D[] energySum2D = new IHistogram2D[2];
+ private IHistogram2D[] momentumSum2D = new IHistogram2D[2];
+ private IHistogram2D[] position = new IHistogram2D[2];
+
+ @Override
+ public void startOfData() {
+ // Instantiate the "any cluster status" plots.
+ tracks[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Tracks in Event (All)", 7, -0.5, 6.5);
+ posTracks[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Tracks in Event (Positive)", 7, -0.5, 6.5);
+ negTracks[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Tracks in Event (Negative)", 7, -0.5, 6.5);
+ posMomentum[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Momentum (Positive)", 110, 0, 1.1);
+ negMomentum[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Momentum (Negative)", 110, 0, 1.1);
+ energySum[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Energy Sum", 55, 0, 2.2);
+ momentumSum[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Momentum Sum", 55, 0, 2.2);
+ energyMomentumDiff[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Energy-Momentum Difference", 55, 0, 2.2);
+ invariantMass[ANY_CLUSTER] = aida.histogram1D("Trident Analysis/All/Invariant Mass", 240, 0.000, 0.120);
+ energySum2D[ANY_CLUSTER] = aida.histogram2D("Trident Analysis/All/2D Energy Sum", 55, 0, 1.1, 55, 0, 1.1);
+ momentumSum2D[ANY_CLUSTER] = aida.histogram2D("Trident Analysis/All/2D Momentum Sum", 55, 0, 1.1, 55, 0, 1.1);
+ position[ANY_CLUSTER] = aida.histogram2D("Trident Analysis/All/Track Cluster Position", 46, -23, 23, 11, -5.5, 5.5);
+
+ // Instantiate the "has a cluster" plots.
+ tracks[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Tracks in Event (All)", 7, -0.5, 6.5);
+ posTracks[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Tracks in Event (Positive)", 7, -0.5, 6.5);
+ negTracks[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Tracks in Event (Negative)", 7, -0.5, 6.5);
+ posMomentum[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Momentum (Positive)", 110, 0, 1.1);
+ negMomentum[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Momentum (Negative)", 110, 0, 1.1);
+ energySum[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Energy Sum", 55, 0, 2.2);
+ momentumSum[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Momentum Sum", 55, 0, 2.2);
+ energyMomentumDiff[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Energy-Momentum Difference", 55, 0, 2.2);
+ invariantMass[HAS_CLUSTER] = aida.histogram1D("Trident Analysis/Cluster/Invariant Mass", 240, 0.000, 0.120);
+ energySum2D[HAS_CLUSTER] = aida.histogram2D("Trident Analysis/Cluster/2D Energy Sum", 55, 0, 1.1, 55, 0, 1.1);
+ momentumSum2D[HAS_CLUSTER] = aida.histogram2D("Trident Analysis/Cluster/2D Momentum Sum", 55, 0, 1.1, 55, 0, 1.1);
+ position[HAS_CLUSTER] = aida.histogram2D("Trident Analysis/Cluster/Track Cluster Position", 46, -23, 23, 11, -5.5, 5.5);
+ }
+
+ @Override
+ public void endOfData() {
+ System.out.printf("Tracks (Candidate) :: %d%n", tracksCandidate);
+ System.out.printf("Tracks (Final State) :: %d%n", tracksFinalState);
+ System.out.printf("Cluster Tracks (Candidate) :: %d%n", tracksCandidateCluster);
+ System.out.printf("Cluster Tracks (Final State) :: %d%n", tracksFinalStateCluster);
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ // Check for final state particles.
+ if(event.hasCollection(ReconstructedParticle.class, finalStateCollectionName)) {
+ // Get the final state particles.
+ List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, finalStateCollectionName);
+
+ // Store the positive and negative tracks.
+ List<ReconstructedParticle> allTrackList = new ArrayList<ReconstructedParticle>();
+ List<ReconstructedParticle> posTrackList = new ArrayList<ReconstructedParticle>();
+ List<ReconstructedParticle> negTrackList = new ArrayList<ReconstructedParticle>();
+
+ // Store the same tracks, but limited to those with clusters.
+ List<ReconstructedParticle> allClusterTrackList = new ArrayList<ReconstructedParticle>();
+ List<ReconstructedParticle> posClusterTrackList = new ArrayList<ReconstructedParticle>();
+ List<ReconstructedParticle> negClusterTrackList = new ArrayList<ReconstructedParticle>();
+
+ // Iterate over the tracks and populate the lists.
+ for(ReconstructedParticle track : trackList) {
+ // Skip instances with no raw tracks.
+ if(track.getTracks().size() == 0) { continue; }
+
+ // Add the cluster to the all track list.
+ allTrackList.add(track);
+
+ // Track the number of cluster tracks.
+ tracksFinalState++;
+ if(!track.getClusters().isEmpty()) {
+ tracksFinalStateCluster++;
+ }
+
+ // Process the track position plots.
+ Hep3Vector trackPosAtEcal = TrackUtils.extrapolateTrack(track.getTracks().get(0), 1394.5);
+ position[ANY_CLUSTER].fill(trackPosAtEcal.x(), trackPosAtEcal.y());
+
+ // Process the tracks based on charge.
+ if(track.getCharge() > 0) {
+ // Increment the counters and populate the momentum plots.
+ posTrackList.add(track);
+ posMomentum[ANY_CLUSTER].fill(track.getMomentum().magnitude());
+
+ // Repeat for the "has clusters" plots if necessary.
+ if(track.getClusters().size() > 0) {
+ // Increment the counters and populate the
+ // momentum plot.
+ posClusterTrackList.add(track);
+ allClusterTrackList.add(track);
+ posMomentum[HAS_CLUSTER].fill(track.getMomentum().magnitude());
+
+ // Populate the cluster position plot.
+ //int ix = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ //int iy = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+ position[HAS_CLUSTER].fill(trackPosAtEcal.x(), trackPosAtEcal.y());
+ }
+ } else if(track.getCharge() < 0) {
+ // Increment the counters and populate the momentum plots.
+ negTrackList.add(track);
+ negMomentum[ANY_CLUSTER].fill(track.getMomentum().magnitude());
+
+ // Repeat for the "has clusters" plots if necessary.
+ if(track.getClusters().size() > 0) {
+ // Increment the counters and populate the
+ // momentum plot.
+ negClusterTrackList.add(track);
+ allClusterTrackList.add(track);
+ negMomentum[HAS_CLUSTER].fill(track.getMomentum().magnitude());
+
+ // Populate the cluster position plot.
+ //int ix = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ //int iy = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+ position[HAS_CLUSTER].fill(trackPosAtEcal.x(), trackPosAtEcal.y());
+ }
+ } else {
+ if(track.getClusters().size() > 0) {
+ // Increment the counter.
+ allClusterTrackList.add(track);
+
+ // Populate the cluster position plot.
+ //int ix = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+ //int iy = track.getClusters().get(0).getCalorimeterHits().get(0).getIdentifierFieldValue("iy");
+ position[HAS_CLUSTER].fill(trackPosAtEcal.x(), trackPosAtEcal.y());
+ }
+ }
+ }
+
+ // Populate the tracks per event plots.
+ tracks[ANY_CLUSTER].fill(allTrackList.size());
+ tracks[HAS_CLUSTER].fill(allClusterTrackList.size());
+ posTracks[ANY_CLUSTER].fill(posTrackList.size());
+ posTracks[HAS_CLUSTER].fill(posClusterTrackList.size());
+ negTracks[ANY_CLUSTER].fill(negTrackList.size());
+ negTracks[HAS_CLUSTER].fill(negClusterTrackList.size());
+
+ /// Store track pairs.
+ List<ReconstructedParticle[]> pairList = new ArrayList<ReconstructedParticle[]>();
+ List<ReconstructedParticle[]> pairClusterList = new ArrayList<ReconstructedParticle[]>();
+
+ // Form track pairs for all tracks.
+ for(ReconstructedParticle posTrack : posTrackList) {
+ for(ReconstructedParticle negTrack : negTrackList) {
+ pairList.add(new ReconstructedParticle[] { posTrack, negTrack });
+ }
+ }
+
+ // Form track pairs for cluster tracks.
+ for(ReconstructedParticle posTrack : posClusterTrackList) {
+ for(ReconstructedParticle negTrack : negClusterTrackList) {
+ pairClusterList.add(new ReconstructedParticle[] { posTrack, negTrack });
+ }
+ }
+
+ // Populate the track pair plots.
+ for(ReconstructedParticle[] pair : pairList) {
+ Hep3Vector pSum = new BasicHep3Vector(
+ pair[0].getMomentum().x() + pair[1].getMomentum().x(),
+ pair[0].getMomentum().y() + pair[1].getMomentum().y(),
+ pair[0].getMomentum().z() + pair[1].getMomentum().z());
+
+ energySum[ANY_CLUSTER].fill(pair[0].getEnergy() + pair[1].getEnergy());
+ momentumSum[ANY_CLUSTER].fill(pSum.magnitude());
+ energySum2D[ANY_CLUSTER].fill(pair[0].getEnergy(), pair[1].getEnergy());
+ momentumSum2D[ANY_CLUSTER].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ energyMomentumDiff[ANY_CLUSTER].fill(Math.abs((pair[0].getEnergy() + pair[1].getEnergy()) - pSum.magnitude()));
+ }
+
+ // Populate the cluster track pair plots.
+ for(ReconstructedParticle[] pair : pairClusterList) {
+ Hep3Vector pSum = new BasicHep3Vector(
+ pair[0].getMomentum().x() + pair[1].getMomentum().x(),
+ pair[0].getMomentum().y() + pair[1].getMomentum().y(),
+ pair[0].getMomentum().z() + pair[1].getMomentum().z());
+
+ energySum[HAS_CLUSTER].fill(pair[0].getEnergy() + pair[1].getEnergy());
+ momentumSum[HAS_CLUSTER].fill(pSum.magnitude());
+ energySum2D[HAS_CLUSTER].fill(pair[0].getEnergy(), pair[1].getEnergy());
+ momentumSum2D[HAS_CLUSTER].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ energyMomentumDiff[HAS_CLUSTER].fill(Math.abs((pair[0].getEnergy() + pair[1].getEnergy()) - pSum.magnitude()));
+ }
+ }
+
+ // Check for V0 candidates.
+ if(event.hasCollection(ReconstructedParticle.class, candidateCollectionName)) {
+ // Get the candidate particles.
+ List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, candidateCollectionName);
+
+ // Increment the counter.
+ tracksCandidate += trackList.size();
+
+ // Increment the counter for cluster tracks.
+ for(ReconstructedParticle track : trackList) {
+ // Populate the invariant mass plot.
+ invariantMass[ANY_CLUSTER].fill(track.getMass());
+
+ // Check for a cluster track.
+ if(track.getClusters().size() > 0) {
+ tracksCandidateCluster++;
+ invariantMass[HAS_CLUSTER].fill(track.getMass());
+ }
+ }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerPlotsModule.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerPlotsModule.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerPlotsModule.java Wed Mar 9 11:43:24 2016
@@ -8,8 +8,8 @@
import org.lcsim.util.aida.AIDA;
public class TriggerPlotsModule {
- // Define plots.
- private AIDA aida = AIDA.defaultInstance();
+ // Define plots.
+ private AIDA aida = AIDA.defaultInstance();
private IHistogram1D singleSeedEnergy;
private IHistogram1D singleHitCount;
private IHistogram1D singleTotalEnergy;
@@ -25,43 +25,43 @@
private IHistogram2D pairDistribution;
private IHistogram2D pairEnergySum2D;
- public TriggerPlotsModule(String moduleName) {
- singleSeedEnergy = aida.histogram1D(moduleName + " Trigger Plots/Singles Plots/Cluster Seed Energy", 176, 0.0, 1.1);
- singleHitCount = aida.histogram1D(moduleName + " Trigger Plots/Singles Plots/Cluster Hit Count", 9, 0.5, 9.5);
- singleTotalEnergy = aida.histogram1D(moduleName + " Trigger Plots/Singles Plots/Cluster Total Energy", 176, 0.0, 1.1);
- singleDistribution = aida.histogram2D(moduleName + " Trigger Plots/Singles Plots/Cluster Seed", 46, -23.0, 23.0, 11, -5.5, 5.5);
- pairSeedEnergy = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Cluster Seed Energy", 176, 0.0, 1.1);
- pairHitCount = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Cluster Hit Count", 9, 0.5, 9.5);
- pairTotalEnergy = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Cluster Total Energy", 176, 0.0, 1.1);
- pairEnergySum = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Pair Energy Sum", 176, 0.0, 2.2);
- pairEnergyDifference = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Pair Energy Difference", 176, 0.0, 1.1);
- pairCoplanarity = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Pair Coplanarity", 180, 0.0, 180.0);
- pairEnergySlope = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Pair Energy Slope", 200, 0.0, 3.0);
- pairDistribution = aida.histogram2D(moduleName + " Trigger Plots/Pair Plots/Cluster Seed", 46, -23.0, 23.0, 11, -5.5, 5.5);
- pairEnergySum2D = aida.histogram2D(moduleName + " Trigger Plots/Pair Plots/Pair Energy Sum 2D", 110, 0.0, 1.1, 110, 0.0, 1.1);
- }
-
- public void addCluster(Cluster cluster) {
- singleSeedEnergy.fill(TriggerModule.getValueClusterSeedEnergy(cluster));
- singleHitCount.fill(TriggerModule.getValueClusterHitCount(cluster));
- singleTotalEnergy.fill(TriggerModule.getValueClusterTotalEnergy(cluster));
- singleDistribution.fill(TriggerModule.getClusterXIndex(cluster), TriggerModule.getClusterYIndex(cluster));
- }
-
- public void addClusterPair(Cluster[] pair) {
- // Populate the singles plots.
- for(Cluster cluster : pair) {
- pairSeedEnergy.fill(TriggerModule.getValueClusterSeedEnergy(cluster));
- pairHitCount.fill(TriggerModule.getValueClusterHitCount(cluster));
- pairTotalEnergy.fill(TriggerModule.getValueClusterTotalEnergy(cluster));
- pairDistribution.fill(TriggerModule.getClusterXIndex(cluster), TriggerModule.getClusterYIndex(cluster));
- }
-
- // Populate the pair plots.
- pairEnergySum.fill(TriggerModule.getValueEnergySum(pair));
- pairEnergyDifference.fill(TriggerModule.getValueEnergyDifference(pair));
- pairCoplanarity.fill(TriggerModule.getValueCoplanarity(pair));
- pairEnergySlope.fill(TriggerModule.getValueEnergySlope(pair, 0.0055));
- pairEnergySum2D.fill(TriggerModule.getValueClusterTotalEnergy(pair[0]), TriggerModule.getValueClusterTotalEnergy(pair[1]));
- }
+ public TriggerPlotsModule(String moduleName) {
+ singleSeedEnergy = aida.histogram1D(moduleName + " Trigger Plots/Singles Plots/Cluster Seed Energy", 176, 0.0, 1.1);
+ singleHitCount = aida.histogram1D(moduleName + " Trigger Plots/Singles Plots/Cluster Hit Count", 9, 0.5, 9.5);
+ singleTotalEnergy = aida.histogram1D(moduleName + " Trigger Plots/Singles Plots/Cluster Total Energy", 176, 0.0, 1.1);
+ singleDistribution = aida.histogram2D(moduleName + " Trigger Plots/Singles Plots/Cluster Seed", 46, -23.0, 23.0, 11, -5.5, 5.5);
+ pairSeedEnergy = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Cluster Seed Energy", 176, 0.0, 1.1);
+ pairHitCount = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Cluster Hit Count", 9, 0.5, 9.5);
+ pairTotalEnergy = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Cluster Total Energy", 176, 0.0, 1.1);
+ pairEnergySum = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Pair Energy Sum", 176, 0.0, 2.2);
+ pairEnergyDifference = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Pair Energy Difference", 176, 0.0, 1.1);
+ pairCoplanarity = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Pair Coplanarity", 180, 0.0, 180.0);
+ pairEnergySlope = aida.histogram1D(moduleName + " Trigger Plots/Pair Plots/Pair Energy Slope", 200, 0.0, 3.0);
+ pairDistribution = aida.histogram2D(moduleName + " Trigger Plots/Pair Plots/Cluster Seed", 46, -23.0, 23.0, 11, -5.5, 5.5);
+ pairEnergySum2D = aida.histogram2D(moduleName + " Trigger Plots/Pair Plots/Pair Energy Sum 2D", 110, 0.0, 1.1, 110, 0.0, 1.1);
+ }
+
+ public void addCluster(Cluster cluster) {
+ singleSeedEnergy.fill(TriggerModule.getValueClusterSeedEnergy(cluster));
+ singleHitCount.fill(TriggerModule.getValueClusterHitCount(cluster));
+ singleTotalEnergy.fill(TriggerModule.getValueClusterTotalEnergy(cluster));
+ singleDistribution.fill(TriggerModule.getClusterXIndex(cluster), TriggerModule.getClusterYIndex(cluster));
+ }
+
+ public void addClusterPair(Cluster[] pair) {
+ // Populate the singles plots.
+ for(Cluster cluster : pair) {
+ pairSeedEnergy.fill(TriggerModule.getValueClusterSeedEnergy(cluster));
+ pairHitCount.fill(TriggerModule.getValueClusterHitCount(cluster));
+ pairTotalEnergy.fill(TriggerModule.getValueClusterTotalEnergy(cluster));
+ pairDistribution.fill(TriggerModule.getClusterXIndex(cluster), TriggerModule.getClusterYIndex(cluster));
+ }
+
+ // Populate the pair plots.
+ pairEnergySum.fill(TriggerModule.getValueEnergySum(pair));
+ pairEnergyDifference.fill(TriggerModule.getValueEnergyDifference(pair));
+ pairCoplanarity.fill(TriggerModule.getValueCoplanarity(pair));
+ pairEnergySlope.fill(TriggerModule.getValueEnergySlope(pair, 0.0055));
+ pairEnergySum2D.fill(TriggerModule.getValueClusterTotalEnergy(pair[0]), TriggerModule.getValueClusterTotalEnergy(pair[1]));
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerProcessAnalysisDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerProcessAnalysisDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerProcessAnalysisDriver.java Wed Mar 9 11:43:24 2016
@@ -21,768 +21,768 @@
import org.lcsim.util.aida.AIDA;
public class TriggerProcessAnalysisDriver extends Driver {
- private int eventsProcessed = 0;
- private int møllersProcessed = 0;
- private boolean checkSVT = false;
- private int tridentsProcessed = 0;
- private int gblMøllersProcessed = 0;
- private int gblTridentsProcessed = 0;
- private double timeCoincidence = 2.5;
- private double elasticThreshold = 0.800;
- private double møllerLowerRange = 0.900;
- private double møllerUpperRange = 1.200;
- private AIDA aida = AIDA.defaultInstance();
- private boolean checkTriggerTimeWindow = false;
- private String clusterCollectionName = "EcalClustersCorr";
- private String particleCollectionName = "FinalStateParticles";
-
- // Define trident cluster-track matched condition plots.
- private IHistogram1D trctmInvariantMass = aida.histogram1D("Tridents CTMatched/Invariant Mass", 140, 0.0, 0.070);
- private IHistogram1D trctmInstancesInEvent = aida.histogram1D("Tridents CTMatched/Instances in Event", 9, 0.5, 9.5);
- private IHistogram1D trctmEnergySum1D = aida.histogram1D("Tridents CTMatched/Cluster Energy Sum", 150, 0.000, 1.500);
- private IHistogram1D trctmMomentumSum1D = aida.histogram1D("Tridents CTMatched/Track Momentum Sum", 150, 0.000, 1.500);
- private IHistogram1D trctmElectronEnergy = aida.histogram1D("Tridents CTMatched/Electron Cluster Energy", 150, 0.000, 1.500);
- private IHistogram1D trctmElectronMomentum = aida.histogram1D("Tridents CTMatched/Electron Track Momentum", 150, 0.000, 1.500);
- private IHistogram1D trctmPositronEnergy = aida.histogram1D("Tridents CTMatched/Positron Cluster Energy", 150, 0.000, 1.500);
- private IHistogram1D trctmPositronMomentum = aida.histogram1D("Tridents CTMatched/Positron Track Momentum", 150, 0.000, 1.500);
- private IHistogram1D trctmTimeCoincidence = aida.histogram1D("Tridents CTMatched/Time Coincidence", 100, -4, 4);
- private IHistogram2D trctmClusterPosition = aida.histogram2D("Tridents CTMatched/Cluster Seed Position", 46, -23, 23, 11, -5.5, 5.5);
- private IHistogram2D trctmEnergySum2D = aida.histogram2D("Tridents CTMatched/Cluster Energy Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
- private IHistogram2D trctmTrackPosition = aida.histogram2D("Tridents CTMatched/Extrapolated Track Position", 200, -400, 400, 55, -110, 110);
- private IHistogram2D trctmMomentumSum2D = aida.histogram2D("Tridents CTMatched/Track Momentum Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
- private IHistogram2D trctmESumCoplanarity = aida.histogram2D("Tridents CTMatched/Cluster Energy Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
- private IHistogram2D trctmPSumCoplanarity = aida.histogram2D("Tridents CTMatched/Track Momentum Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
-
- // Define the Møller cluster-track matched condition plots.
- private IHistogram1D møctmInvariantMass = aida.histogram1D("Møller CTMatched/Invariant Mass", 140, 0.0, 0.070);
- private IHistogram1D møctmInstancesInEvent = aida.histogram1D("Møller CTMatched/Instances in Event", 9, 0.5, 9.5);
- private IHistogram1D møctmEnergySum1D = aida.histogram1D("Møller CTMatched/Cluster Energy Sum", 150, 0.000, 1.500);
- private IHistogram1D møctmMomentumSum1D = aida.histogram1D("Møller CTMatched/Track Momentum Sum", 150, 0.000, 1.500);
- private IHistogram1D møctmElectronEnergy = aida.histogram1D("Møller CTMatched/Electron Cluster Energy", 150, 0.000, 1.500);
- private IHistogram1D møctmElectronMomentum = aida.histogram1D("Møller CTMatched/Electron Track Momentum", 150, 0.000, 1.500);
- private IHistogram1D møctmTimeCoincidence = aida.histogram1D("Møller CTMatched/Time Coincidence", 100, -4, 4);
- private IHistogram2D møctmClusterPosition = aida.histogram2D("Møller CTMatched/Cluster Seed Position", 46, -23, 23, 11, -5.5, 5.5);
- private IHistogram2D møctmEnergySum2D = aida.histogram2D("Møller CTMatched/Cluster Energy Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
- private IHistogram2D møctmTrackPosition = aida.histogram2D("Møller CTMatched/Extrapolated Track Position", 200, -400, 400, 55, -110, 110);
- private IHistogram2D møctmMomentumSum2D = aida.histogram2D("Møller CTMatched/Track Momentum Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
- private IHistogram2D møctmESumCoplanarity = aida.histogram2D("Møller CTMatched/Cluster Energy Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
- private IHistogram2D møctmPSumCoplanarity = aida.histogram2D("Møller CTMatched/Track Momentum Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
-
- // Define the Møller track-only condition plots.
- private IHistogram1D møgblTimeCoincidence = aida.histogram1D("Møller Track-Only/Time Coincidence", 100, -4, 4);
- private IHistogram1D møgblInvariantMass = aida.histogram1D("Møller Track-Only/Invariant Mass", 140, 0.0, 0.070);
- private IHistogram1D møgblInstancesInEvent = aida.histogram1D("Møller Track-Only/Instances in Event", 9, 0.5, 9.5);
- private IHistogram1D møgblMomentumSum1D = aida.histogram1D("Møller Track-Only/Track Momentum Sum", 150, 0.000, 1.500);
- private IHistogram1D møgblElectronMomentum = aida.histogram1D("Møller Track-Only/Electron Track Momentum", 150, 0.000, 1.500);
- private IHistogram2D møgblTrackPosition = aida.histogram2D("Møller Track-Only/Extrapolated Track Position", 200, -400, 400, 55, -110, 110);
- private IHistogram2D møgblMomentumSum2D = aida.histogram2D("Møller Track-Only/Track Momentum Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
- private IHistogram2D møgblPSumCoplanarity = aida.histogram2D("Møller Track-Only/Track Momentum Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
-
- // Define the GBL trident condition plots.
- private IHistogram1D trgblInvariantMass = aida.histogram1D("Tridents Track-Only/Invariant Mass", 140, 0.0, 0.070);
- private IHistogram1D trgblInstancesInEvent = aida.histogram1D("Tridents Track-Only/Instances in Event", 9, 0.5, 9.5);
- private IHistogram1D trgblMomentumSum1D = aida.histogram1D("Tridents Track-Only/Track Momentum Sum", 150, 0.000, 1.500);
- private IHistogram1D trgblElectronMomentum = aida.histogram1D("Tridents Track-Only/Electron Track Momentum", 150, 0.000, 1.500);
- private IHistogram1D trgblPositronMomentum = aida.histogram1D("Tridents Track-Only/Positron Track Momentum", 150, 0.000, 1.500);
- private IHistogram1D trgblTimeCoincidence = aida.histogram1D("Tridents Track-Only/Time Coincidence", 100, -4, 4);
- private IHistogram2D trgblTrackPosition = aida.histogram2D("Tridents Track-Only/Extrapolated Track Position", 200, -400, 400, 55, -110, 110);
- private IHistogram2D trgblMomentumSum2D = aida.histogram2D("Tridents Track-Only/Track Momentum Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
- private IHistogram2D trgblPSumCoplanarity = aida.histogram2D("Tridents Track-Only/Track Momentum Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
-
- @Override
- public void endOfData() {
- // Calculate the scaling factor for Hertz.
- double scale = 19000.0 / eventsProcessed;
-
- System.out.println("Processed " + eventsProcessed + " events.");
- System.out.println("Processed " + møllersProcessed + " Møller events");
- System.out.println("\tAcceptance :: " + (100.0 * møllersProcessed / eventsProcessed) + "%");
- System.out.println("\tRate :: " + (møllersProcessed * scale) + " Hz");
-
- System.out.println("Processed " + tridentsProcessed + " trident events");
- System.out.println("\tAcceptance :: " + (100.0 * tridentsProcessed / eventsProcessed) + "%");
- System.out.println("\tRate :: " + (tridentsProcessed * scale) + " Hz");
-
- System.out.println("Processed " + gblMøllersProcessed + " track-only Møller events");
- System.out.println("\tAcceptance :: " + (100.0 * gblMøllersProcessed / eventsProcessed) + "%");
- System.out.println("\tRate :: " + (gblMøllersProcessed * scale) + " Hz");
-
- System.out.println("Processed " + gblTridentsProcessed + " Rafo trident events");
- System.out.println("\tAcceptance :: " + (100.0 * gblTridentsProcessed / eventsProcessed) + "%");
- System.out.println("\tRate :: " + (gblTridentsProcessed * scale) + " Hz");
- }
-
- @Override
- public void process(EventHeader event) {
- // Check whether the SVT was active in this event and, if so,
- // skip it. This can be disabled through the steering file for
- // Monte Carlo data, where the "SVT" is always active.
- if(checkSVT) {
- final String[] flagNames = { "svt_bias_good", "svt_burstmode_noise_good", "svt_position_good" };
- boolean svtGood = true;
- for(int i = 0; i < flagNames.length; i++) {
- int[] flag = event.getIntegerParameters().get(flagNames[i]);
- if(flag == null || flag[0] == 0) {
- svtGood = false;
- }
- }
- if(!svtGood) { return; }
- }
+ private int eventsProcessed = 0;
+ private int møllersProcessed = 0;
+ private boolean checkSVT = false;
+ private int tridentsProcessed = 0;
+ private int gblMøllersProcessed = 0;
+ private int gblTridentsProcessed = 0;
+ private double timeCoincidence = 2.5;
+ private double elasticThreshold = 0.800;
+ private double møllerLowerRange = 0.900;
+ private double møllerUpperRange = 1.200;
+ private AIDA aida = AIDA.defaultInstance();
+ private boolean checkTriggerTimeWindow = false;
+ private String clusterCollectionName = "EcalClustersCorr";
+ private String particleCollectionName = "FinalStateParticles";
+
+ // Define trident cluster-track matched condition plots.
+ private IHistogram1D trctmInvariantMass = aida.histogram1D("Tridents CTMatched/Invariant Mass", 140, 0.0, 0.070);
+ private IHistogram1D trctmInstancesInEvent = aida.histogram1D("Tridents CTMatched/Instances in Event", 9, 0.5, 9.5);
+ private IHistogram1D trctmEnergySum1D = aida.histogram1D("Tridents CTMatched/Cluster Energy Sum", 150, 0.000, 1.500);
+ private IHistogram1D trctmMomentumSum1D = aida.histogram1D("Tridents CTMatched/Track Momentum Sum", 150, 0.000, 1.500);
+ private IHistogram1D trctmElectronEnergy = aida.histogram1D("Tridents CTMatched/Electron Cluster Energy", 150, 0.000, 1.500);
+ private IHistogram1D trctmElectronMomentum = aida.histogram1D("Tridents CTMatched/Electron Track Momentum", 150, 0.000, 1.500);
+ private IHistogram1D trctmPositronEnergy = aida.histogram1D("Tridents CTMatched/Positron Cluster Energy", 150, 0.000, 1.500);
+ private IHistogram1D trctmPositronMomentum = aida.histogram1D("Tridents CTMatched/Positron Track Momentum", 150, 0.000, 1.500);
+ private IHistogram1D trctmTimeCoincidence = aida.histogram1D("Tridents CTMatched/Time Coincidence", 100, -4, 4);
+ private IHistogram2D trctmClusterPosition = aida.histogram2D("Tridents CTMatched/Cluster Seed Position", 46, -23, 23, 11, -5.5, 5.5);
+ private IHistogram2D trctmEnergySum2D = aida.histogram2D("Tridents CTMatched/Cluster Energy Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
+ private IHistogram2D trctmTrackPosition = aida.histogram2D("Tridents CTMatched/Extrapolated Track Position", 200, -400, 400, 55, -110, 110);
+ private IHistogram2D trctmMomentumSum2D = aida.histogram2D("Tridents CTMatched/Track Momentum Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
+ private IHistogram2D trctmESumCoplanarity = aida.histogram2D("Tridents CTMatched/Cluster Energy Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
+ private IHistogram2D trctmPSumCoplanarity = aida.histogram2D("Tridents CTMatched/Track Momentum Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
+
+ // Define the Møller cluster-track matched condition plots.
+ private IHistogram1D møctmInvariantMass = aida.histogram1D("Møller CTMatched/Invariant Mass", 140, 0.0, 0.070);
+ private IHistogram1D møctmInstancesInEvent = aida.histogram1D("Møller CTMatched/Instances in Event", 9, 0.5, 9.5);
+ private IHistogram1D møctmEnergySum1D = aida.histogram1D("Møller CTMatched/Cluster Energy Sum", 150, 0.000, 1.500);
+ private IHistogram1D møctmMomentumSum1D = aida.histogram1D("Møller CTMatched/Track Momentum Sum", 150, 0.000, 1.500);
+ private IHistogram1D møctmElectronEnergy = aida.histogram1D("Møller CTMatched/Electron Cluster Energy", 150, 0.000, 1.500);
+ private IHistogram1D møctmElectronMomentum = aida.histogram1D("Møller CTMatched/Electron Track Momentum", 150, 0.000, 1.500);
+ private IHistogram1D møctmTimeCoincidence = aida.histogram1D("Møller CTMatched/Time Coincidence", 100, -4, 4);
+ private IHistogram2D møctmClusterPosition = aida.histogram2D("Møller CTMatched/Cluster Seed Position", 46, -23, 23, 11, -5.5, 5.5);
+ private IHistogram2D møctmEnergySum2D = aida.histogram2D("Møller CTMatched/Cluster Energy Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
+ private IHistogram2D møctmTrackPosition = aida.histogram2D("Møller CTMatched/Extrapolated Track Position", 200, -400, 400, 55, -110, 110);
+ private IHistogram2D møctmMomentumSum2D = aida.histogram2D("Møller CTMatched/Track Momentum Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
+ private IHistogram2D møctmESumCoplanarity = aida.histogram2D("Møller CTMatched/Cluster Energy Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
+ private IHistogram2D møctmPSumCoplanarity = aida.histogram2D("Møller CTMatched/Track Momentum Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
+
+ // Define the Møller track-only condition plots.
+ private IHistogram1D møgblTimeCoincidence = aida.histogram1D("Møller Track-Only/Time Coincidence", 100, -4, 4);
+ private IHistogram1D møgblInvariantMass = aida.histogram1D("Møller Track-Only/Invariant Mass", 140, 0.0, 0.070);
+ private IHistogram1D møgblInstancesInEvent = aida.histogram1D("Møller Track-Only/Instances in Event", 9, 0.5, 9.5);
+ private IHistogram1D møgblMomentumSum1D = aida.histogram1D("Møller Track-Only/Track Momentum Sum", 150, 0.000, 1.500);
+ private IHistogram1D møgblElectronMomentum = aida.histogram1D("Møller Track-Only/Electron Track Momentum", 150, 0.000, 1.500);
+ private IHistogram2D møgblTrackPosition = aida.histogram2D("Møller Track-Only/Extrapolated Track Position", 200, -400, 400, 55, -110, 110);
+ private IHistogram2D møgblMomentumSum2D = aida.histogram2D("Møller Track-Only/Track Momentum Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
+ private IHistogram2D møgblPSumCoplanarity = aida.histogram2D("Møller Track-Only/Track Momentum Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
+
+ // Define the GBL trident condition plots.
+ private IHistogram1D trgblInvariantMass = aida.histogram1D("Tridents Track-Only/Invariant Mass", 140, 0.0, 0.070);
+ private IHistogram1D trgblInstancesInEvent = aida.histogram1D("Tridents Track-Only/Instances in Event", 9, 0.5, 9.5);
+ private IHistogram1D trgblMomentumSum1D = aida.histogram1D("Tridents Track-Only/Track Momentum Sum", 150, 0.000, 1.500);
+ private IHistogram1D trgblElectronMomentum = aida.histogram1D("Tridents Track-Only/Electron Track Momentum", 150, 0.000, 1.500);
+ private IHistogram1D trgblPositronMomentum = aida.histogram1D("Tridents Track-Only/Positron Track Momentum", 150, 0.000, 1.500);
+ private IHistogram1D trgblTimeCoincidence = aida.histogram1D("Tridents Track-Only/Time Coincidence", 100, -4, 4);
+ private IHistogram2D trgblTrackPosition = aida.histogram2D("Tridents Track-Only/Extrapolated Track Position", 200, -400, 400, 55, -110, 110);
+ private IHistogram2D trgblMomentumSum2D = aida.histogram2D("Tridents Track-Only/Track Momentum Sum 2D", 300, 0.000, 1.500, 300, 0.000, 1.500);
+ private IHistogram2D trgblPSumCoplanarity = aida.histogram2D("Tridents Track-Only/Track Momentum Sum vs. Coplanarity", 300, 0.000, 1.500, 360, 0, 360);
+
+ @Override
+ public void endOfData() {
+ // Calculate the scaling factor for Hertz.
+ double scale = 19000.0 / eventsProcessed;
+
+ System.out.println("Processed " + eventsProcessed + " events.");
+ System.out.println("Processed " + møllersProcessed + " Møller events");
+ System.out.println("\tAcceptance :: " + (100.0 * møllersProcessed / eventsProcessed) + "%");
+ System.out.println("\tRate :: " + (møllersProcessed * scale) + " Hz");
+
+ System.out.println("Processed " + tridentsProcessed + " trident events");
+ System.out.println("\tAcceptance :: " + (100.0 * tridentsProcessed / eventsProcessed) + "%");
+ System.out.println("\tRate :: " + (tridentsProcessed * scale) + " Hz");
+
+ System.out.println("Processed " + gblMøllersProcessed + " track-only Møller events");
+ System.out.println("\tAcceptance :: " + (100.0 * gblMøllersProcessed / eventsProcessed) + "%");
+ System.out.println("\tRate :: " + (gblMøllersProcessed * scale) + " Hz");
+
+ System.out.println("Processed " + gblTridentsProcessed + " Rafo trident events");
+ System.out.println("\tAcceptance :: " + (100.0 * gblTridentsProcessed / eventsProcessed) + "%");
+ System.out.println("\tRate :: " + (gblTridentsProcessed * scale) + " Hz");
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ // Check whether the SVT was active in this event and, if so,
+ // skip it. This can be disabled through the steering file for
+ // Monte Carlo data, where the "SVT" is always active.
+ if(checkSVT) {
+ final String[] flagNames = { "svt_bias_good", "svt_burstmode_noise_good", "svt_position_good" };
+ boolean svtGood = true;
+ for(int i = 0; i < flagNames.length; i++) {
+ int[] flag = event.getIntegerParameters().get(flagNames[i]);
+ if(flag == null || flag[0] == 0) {
+ svtGood = false;
+ }
+ }
+ if(!svtGood) { return; }
+ }
// Track the number of events with good SVT.
eventsProcessed++;
- // Check if the event has a collection of tracks. If it exists,
+ // Check if the event has a collection of tracks. If it exists,
// extract it. Otherwise, skip the event.
- if(!event.hasCollection(ReconstructedParticle.class, particleCollectionName)) {
- return;
- }
- List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, particleCollectionName);
-
- // Check if the event has a collection of clusters. If it
- // exists, extract it. Otherwise, skip the event.
- if(!event.hasCollection(Cluster.class, clusterCollectionName)) {
- return;
- }
- List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
-
- // Get cluster-track matched top/bottom pairs.
- List<ReconstructedParticle[]> gblMatchedPairs = getTopBottomTracksGBL(trackList);
- List<ReconstructedParticle[]> ctMatchedPairs = getTopBottomTracksCTMatched(trackList);
-
- System.out.println("CTM Pairs :: " + ctMatchedPairs.size());
- System.out.println("GBL Pairs :: " + gblMatchedPairs.size());
-
- // Get the trident and Møller tracks for the matched track
- // and cluster pair condition sets.
- List<ReconstructedParticle[]> møllers = getMøllerTracksCTMatched(ctMatchedPairs);
- List<ReconstructedParticle[]> møllersGBL = getMøllerTracksGBL(gblMatchedPairs, event);
- List<ReconstructedParticle[]> tridents = getTridentTracksCTMatched(ctMatchedPairs);
- List<ReconstructedParticle[]> tridentsGBL = getTridentClustersGBL(gblMatchedPairs, TriggerModule.getTopBottomPairs(clusterList, Cluster.class), event);
-
- // Track how many events had tridents and Møllers.
- if(!møllers.isEmpty()) { møllersProcessed++; }
- if(!tridents.isEmpty()) { tridentsProcessed++; }
- if(!møllersGBL.isEmpty()) { gblMøllersProcessed++; }
- if(!tridentsGBL.isEmpty()) { gblTridentsProcessed++; }
-
- // Produce Møller cluster-track matched plots.
- møctmInstancesInEvent.fill(møllers.size());
- for(ReconstructedParticle[] pair : møllers) {
- // Get the track clusters.
- Track[] tracks = { pair[0].getTracks().get(0), pair[1].getTracks().get(0) };
- Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
-
- // Populate the cluster plots.
- møctmElectronEnergy.fill(trackClusters[0].getEnergy());
- møctmElectronEnergy.fill(trackClusters[1].getEnergy());
- møctmEnergySum1D.fill(TriggerModule.getValueEnergySum(trackClusters));
- møctmEnergySum2D.fill(trackClusters[0].getEnergy(), trackClusters[1].getEnergy());
- møctmESumCoplanarity.fill(TriggerModule.getValueEnergySum(trackClusters), getCalculatedCoplanarity(trackClusters));
- møctmTimeCoincidence.fill(TriggerModule.getClusterTime(trackClusters[0]) - TriggerModule.getClusterTime(trackClusters[1]));
- møctmClusterPosition.fill(TriggerModule.getClusterXIndex(trackClusters[0]), TriggerModule.getClusterYIndex(trackClusters[0]));
- møctmClusterPosition.fill(TriggerModule.getClusterXIndex(trackClusters[1]), TriggerModule.getClusterYIndex(trackClusters[1]));
-
- // Populate the momentum plots.
- møctmInvariantMass.fill(getInvariantMass(pair));
- møctmElectronMomentum.fill(pair[0].getMomentum().magnitude());
- møctmElectronMomentum.fill(pair[1].getMomentum().magnitude());
- møctmMomentumSum1D.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
- møctmMomentumSum2D.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- møctmTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[0]).x(), TrackUtils.getTrackPositionAtEcal(tracks[0]).y());
- møctmTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[1]).x(), TrackUtils.getTrackPositionAtEcal(tracks[1]).y());
- møctmPSumCoplanarity.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude(),
- getCalculatedCoplanarity(new Track[] { pair[0].getTracks().get(0), pair[1].getTracks().get(0) }));
- }
-
- // Produce trident cluster-track matched plots.
- trctmInstancesInEvent.fill(tridents.size());
- for(ReconstructedParticle[] pair : tridents) {
- // Get the electron and positron tracks.
- ReconstructedParticle electronTrack = pair[pair[0].getCharge() < 0 ? 0 : 1];
- ReconstructedParticle positronTrack = pair[pair[0].getCharge() > 0 ? 0 : 1];
-
- // Get the track clusters.
- Cluster electronCluster = electronTrack.getClusters().get(0);
- Cluster positronCluster = positronTrack.getClusters().get(0);
- Track[] tracks = { pair[0].getTracks().get(0), pair[1].getTracks().get(0) };
- Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
-
- // Populate the cluster plots.
- trctmElectronEnergy.fill(electronCluster.getEnergy());
- trctmPositronEnergy.fill(positronCluster.getEnergy());
- trctmEnergySum2D.fill(pair[0].getEnergy(), pair[1].getEnergy());
- trctmEnergySum1D.fill(TriggerModule.getValueEnergySum(trackClusters));
- trctmESumCoplanarity.fill(TriggerModule.getValueEnergySum(trackClusters), getCalculatedCoplanarity(trackClusters));
- trctmTimeCoincidence.fill(TriggerModule.getClusterTime(trackClusters[0]) - TriggerModule.getClusterTime(trackClusters[1]));
- trctmClusterPosition.fill(TriggerModule.getClusterXIndex(trackClusters[0]), TriggerModule.getClusterYIndex(trackClusters[0]));
- trctmClusterPosition.fill(TriggerModule.getClusterXIndex(trackClusters[1]), TriggerModule.getClusterYIndex(trackClusters[1]));
-
- // Populate the momentum plots.
- trctmInvariantMass.fill(getInvariantMass(pair));
- trctmElectronMomentum.fill(electronTrack.getMomentum().magnitude());
- trctmPositronMomentum.fill(positronTrack.getMomentum().magnitude());
- trctmMomentumSum1D.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
- trctmMomentumSum2D.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- trctmTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[0]).x(), TrackUtils.getTrackPositionAtEcal(tracks[0]).y());
- trctmTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[1]).x(), TrackUtils.getTrackPositionAtEcal(tracks[1]).y());
- trctmPSumCoplanarity.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude(),
- getCalculatedCoplanarity(new Track[] { pair[0].getTracks().get(0), pair[1].getTracks().get(0) }));
- }
-
- // Produce the Møller track-only plots.
- møgblInstancesInEvent.fill(møllersGBL.size());
- RelationalTable<?, ?> hitToStrips = TrackUtils.getHitToStripsTable(event);
- RelationalTable<?, ?> hitToRotated = TrackUtils.getHitToRotatedTable(event);
- for(ReconstructedParticle pair[] : møllersGBL) {
- // Get the tracks and track times.
- Track[] tracks = { pair[0].getTracks().get(0), pair[1].getTracks().get(0) };
- double times[] = {
- TrackUtils.getTrackTime(tracks[0], hitToStrips, hitToRotated),
- TrackUtils.getTrackTime(tracks[1], hitToStrips, hitToRotated)
- };
-
- // Fill the plots.
- møgblTimeCoincidence.fill(times[0] - times[1]);
- møgblInvariantMass.fill(getInvariantMass(pair));
- møgblElectronMomentum.fill(pair[0].getMomentum().magnitude());
- møgblElectronMomentum.fill(pair[1].getMomentum().magnitude());
- møgblMomentumSum1D.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
- møgblMomentumSum2D.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- møgblTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[0]).x(), TrackUtils.getTrackPositionAtEcal(tracks[0]).y());
- møgblTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[1]).x(), TrackUtils.getTrackPositionAtEcal(tracks[1]).y());
- møgblPSumCoplanarity.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude(),
- getCalculatedCoplanarity(new Track[] { pair[0].getTracks().get(0), pair[1].getTracks().get(0) }));
- }
-
- // Produce track-only trident plots.
- trgblInstancesInEvent.fill(tridentsGBL.size());
- for(ReconstructedParticle[] pair : tridentsGBL) {
- // Get the tracks and track times.
- Track[] tracks = { pair[0].getTracks().get(0), pair[1].getTracks().get(0) };
- double times[] = {
- TrackUtils.getTrackTime(tracks[0], hitToStrips, hitToRotated),
- TrackUtils.getTrackTime(tracks[1], hitToStrips, hitToRotated)
- };
-
- // Get the positron and the electron.
- ReconstructedParticle positron = pair[0].getCharge() > 0 ? pair[0] : pair[1];
- ReconstructedParticle electron = pair[0].getCharge() < 0 ? pair[0] : pair[1];
-
- // Fill the plots.
- trgblTimeCoincidence.fill(times[0] - times[1]);
- trgblInvariantMass.fill(getInvariantMass(pair));
- trgblElectronMomentum.fill(electron.getMomentum().magnitude());
- trgblPositronMomentum.fill(positron.getMomentum().magnitude());
- trgblMomentumSum1D.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
- trgblMomentumSum2D.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
- trgblTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[0]).x(), TrackUtils.getTrackPositionAtEcal(tracks[0]).y());
- trgblTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[1]).x(), TrackUtils.getTrackPositionAtEcal(tracks[1]).y());
- trgblPSumCoplanarity.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude(),
- getCalculatedCoplanarity(new Track[] { pair[0].getTracks().get(0), pair[1].getTracks().get(0) }));
- }
- }
-
- public void setCheckSVT(boolean state) {
- checkSVT = state;
- }
-
- public void setCheckTriggerTimeWindow(boolean state) {
- checkTriggerTimeWindow = state;
- }
-
- /**
- * Gets a list of all possible GBL top/bottom track pairs. These
- * tracks are not guaranteed to have a matched cluster.
- * @param trackList - A list of all possible tracks.
- * @return Returns a list of track pairs.
- */
- private static final List<ReconstructedParticle[]> getTopBottomTracksGBL(List<ReconstructedParticle> trackList) {
- // Separate the tracks into top and bottom tracks based on
- // the value of tan(Î). Use only GBL tracks to avoid track
- // duplication.
- List<ReconstructedParticle> topTracks = new ArrayList<ReconstructedParticle>();
- List<ReconstructedParticle> botTracks = new ArrayList<ReconstructedParticle>();
- trackLoop:
- for(ReconstructedParticle track : trackList) {
- // Require that the ReconstructedParticle contain an actual
- // Track object.
- if(track.getTracks().isEmpty()) {
- continue trackLoop;
- }
-
- // Ignore tracks that are not GBL tracks.
- if(!TrackType.isGBL(track.getType())) {
- continue trackLoop;
- }
-
- // If the above tests pass, the ReconstructedParticle has
- // a track and is also a GBL track. Separate it into either
- // a top or a bottom track based on its tan(Î) value.
- if(track.getTracks().get(0).getTrackStates().get(0).getTanLambda() > 0) {
- topTracks.add(track);
- } else {
- botTracks.add(track);
- }
- }
-
- // Form all top/bottom pairs with the unique tracks.
- List<ReconstructedParticle[]> pairList = new ArrayList<ReconstructedParticle[]>();
- for(ReconstructedParticle topTrack : topTracks) {
- for(ReconstructedParticle botTrack : botTracks) {
- pairList.add(new ReconstructedParticle[] { topTrack, botTrack });
- }
- }
-
- // Return the result.
- return pairList;
- }
-
- /**
- * Produces pairs of tracks. The track pairs are required to be
- * matched to a cluster and the associated clusters must form a
- * top/bottom pair. If more than one track points to the same
- * cluster, only the first track is retained.
- * @param trackList - A list of all tracks.
- * @return Returns a list of track pairs meeting the aforementioned
- * conditions.
- */
- private static final List<ReconstructedParticle[]> getTopBottomTracksCTMatched(List<ReconstructedParticle> trackList) {
- // Track clusters that have already been seen to prevent clusters
- // that have duplicate tracks from reappearing.
- Set<Cluster> clusterSet = new HashSet<Cluster>();
-
- // Separate the tracks into top and bottom tracks based on
- // the track cluster. Filter out tracks with no clusters.
- List<ReconstructedParticle> topTracks = new ArrayList<ReconstructedParticle>();
- List<ReconstructedParticle> botTracks = new ArrayList<ReconstructedParticle>();
- trackLoop:
- for(ReconstructedParticle track : trackList) {
- // Check if the track has a cluster. If not, skip it.
- if(track.getClusters().isEmpty()) {
- continue trackLoop;
- }
-
- // If the track doesn't have actual tracks, skip it.
- if(track.getTracks().isEmpty()) {
- continue trackLoop;
- }
-
- // Check if the track cluster has already seen.
- Cluster trackCluster = track.getClusters().get(0);
- if(clusterSet.contains(trackCluster)) {
- continue trackLoop;
- }
-
- // If the track has a unique cluster, add it to the proper
- // list based on the cluster y-index.
- clusterSet.add(trackCluster);
- if(TriggerModule.getClusterYIndex(trackCluster) > 0) {
- topTracks.add(track);
- } else {
- botTracks.add(track);
- }
- }
-
- // Form all top/bottom pairs with the unique tracks.
- List<ReconstructedParticle[]> pairList = new ArrayList<ReconstructedParticle[]>();
- for(ReconstructedParticle topTrack : topTracks) {
- for(ReconstructedParticle botTrack : botTracks) {
- pairList.add(new ReconstructedParticle[] { topTrack, botTrack });
- }
- }
-
- // Return the result.
- return pairList;
- }
-
- private final List<ReconstructedParticle[]> getTridentClustersGBL(List<ReconstructedParticle[]> pairList, List<Cluster[]> clusterList, EventHeader event) {
- // Store the set of track pairs that meet the trident condition.
- List<ReconstructedParticle[]> tridentTracks = new ArrayList<ReconstructedParticle[]>();
-
- // Extract track relational tables from the event object.
- RelationalTable<?, ?> hitToStrips = TrackUtils.getHitToStripsTable(event);
- RelationalTable<?, ?> hitToRotated = TrackUtils.getHitToRotatedTable(event);
-
- // Tracks will not be considered for trident analysis unless there
- // is at least one top/bottom cluster pair within the time window.
- boolean passesClusterCondition = false;
- tridentClusterLoop:
- for(Cluster[] pair : clusterList) {
- // Ignore clusters that are too far apart temporally.
- if(TriggerModule.getValueTimeCoincidence(pair) > timeCoincidence) {
- continue tridentClusterLoop;
- }
-
- // Require that the cluster pair be top/bottom.
- boolean hasTop = TriggerModule.getClusterYIndex(pair[0]) > 0 || TriggerModule.getClusterYIndex(pair[1]) > 0;
- boolean hasBot = TriggerModule.getClusterYIndex(pair[0]) < 0 || TriggerModule.getClusterYIndex(pair[1]) < 0;
- if(!hasTop || !hasBot) {
- continue tridentClusterLoop;
- }
-
- // If the cluster passes, mark that it has done so and skip
- // the rest. Only one pair need pass.
- passesClusterCondition = true;
- break tridentClusterLoop;
- }
-
- // If no cluster pair passed the cluster condition, no tracks
- // are allowed to pass either.
- if(!passesClusterCondition) {
- return tridentTracks;
- }
-
- // Next, check the track pair list. A track pair must have a
- // positive and a negative track and must also be within the
- // time coincidence window.
- tridentTrackLoop:
- for(ReconstructedParticle[] pair : pairList) {
- // Check that there is at least one positive and one negative
- // track in the pair.
- boolean hasPositive = pair[0].getCharge() > 0 || pair[1].getCharge() > 0;
- boolean hasNegative = pair[0].getCharge() < 0 || pair[1].getCharge() < 0;
- if(!hasPositive || !hasNegative) {
- break tridentTrackLoop;
- }
-
- // Check that the track pair passes the time cut.
- double times[] = {
- TrackUtils.getTrackTime(pair[0].getTracks().get(0), hitToStrips, hitToRotated),
- TrackUtils.getTrackTime(pair[1].getTracks().get(0), hitToStrips, hitToRotated)
- };
-
- if(Math.abs(times[0] - times[1]) > timeCoincidence) {
- continue tridentTrackLoop;
- }
-
- // Require that the negative track have less than the
- // elastic threshold momentum to exclude elastic electrons.
- if(pair[0].getCharge() < 0 && pair[0].getMomentum().magnitude() > elasticThreshold
- || pair[1].getCharge() < 0 && pair[1].getMomentum().magnitude() > elasticThreshold) {
- continue tridentTrackLoop;
- }
-
- // If the track passes both, it is considered a trident pair.
- tridentTracks.add(pair);
- }
-
- // Return the resultant pairs.
- return tridentTracks;
- }
-
- /**
- * Gets a list track pairs that meet the trident condition defined
- * using tracks with matched calorimeter clusters. A pair meets the
- * cluster/track matched trident condition is it meets the following:
- * <ul><li>Both tracks have matched clusters.</li>
- * <li>Has one positive track.</li>
- * <li>Has one negative track.</li>
- * <li>Clusters have a time coincidence of 2.5 ns or less.</li>
- * <li>The electron momentum is below 900 MeV.</li></ul>
- * @param pairList - A <code>List</code> collection of parameterized
- * type <code>ReconstructedParticle[]</code> containing all valid
- * top/bottom pairs of tracks with matched clusters. These will be
- * tested to see if they meet the process criteria.
- * @return Returns a list containing pairs of tracks that meet the
- * trident condition.
- */
- private final List<ReconstructedParticle[]> getTridentTracksCTMatched(List<ReconstructedParticle[]> pairList) {
- // Store the set of track pairs that meet the trident condition.
- List<ReconstructedParticle[]> tridentTracks = new ArrayList<ReconstructedParticle[]>();
-
- // Loop over the filtered pair list and apply the trident
- // condition test.
- tridentLoop:
- for(ReconstructedParticle[] pair : pairList) {
- // There must be one positive and one negative track.
- ReconstructedParticle electron = null;
- ReconstructedParticle positron = null;
- if(pair[0].getCharge() > 0) { positron = pair[0]; }
- else if(pair[1].getCharge() > 0) { positron = pair[1]; }
- if(pair[0].getCharge() < 0) { electron = pair[0]; }
- else if(pair[1].getCharge() < 0) { electron = pair[1]; }
- if(electron == null || positron == null) {
- continue tridentLoop;
- }
-
- // Make sure that the clusters are not the same. This should
- // not actually ever be possible...
- if(pair[0].getClusters().get(0) == pair[1].getClusters().get(0)) {
- continue tridentLoop;
- }
-
- // The clusters must within a limited time window.
- /*
- Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
- if(TriggerModule.getValueTimeCoincidence(trackClusters) > timeCoincidence) {
- continue tridentLoop;
- }
- */
-
- // The clusters must be coincidental within an energy
- // dependent coincidence window.
- Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
- if(!isCoincidental(trackClusters)) {
- continue tridentLoop;
- }
-
- // Require that the electron in the pair have an energy
- // below the elastic threshold to exclude elastic electrons.
- if(electron.getMomentum().magnitude() >= elasticThreshold) {
- continue tridentLoop;
- }
-
- // Require that all clusters occur within the trigger time
- // window to exclude accidentals.
- if(checkTriggerTimeWindow) {
- if(!inTriggerWindow(trackClusters[0]) || !inTriggerWindow(trackClusters[1])) {
- continue tridentLoop;
- }
- }
-
- // If all the above conditions are met, the pair is to be
- // considered a trident pair. Add it to the list.
- tridentTracks.add(pair);
- }
-
- // Return the list of pairs that passed the condition.
- return tridentTracks;
- }
-
- private final List<ReconstructedParticle[]> getMøllerTracksGBL(List<ReconstructedParticle[]> pairList, EventHeader event) {
- // Store the set of track pairs that meet the Møller condition.
- List<ReconstructedParticle[]> møllerTracks = new ArrayList<ReconstructedParticle[]>();
-
- // Extract track relational tables from the event object.
- RelationalTable<?, ?> hitToStrips = TrackUtils.getHitToStripsTable(event);
- RelationalTable<?, ?> hitToRotated = TrackUtils.getHitToRotatedTable(event);
-
- // Loop over the filtered pair list and apply the Møller
- // condition test.
- møllerLoop:
- for(ReconstructedParticle[] pair : pairList) {
- // Both tracks must be negatively charged.
- if(pair[0].getCharge() > 0 || pair[1].getCharge() > 0) {
- continue møllerLoop;
- }
-
- // The clusters must within a limited time window.
- double times[] = {
- TrackUtils.getTrackTime(pair[0].getTracks().get(0), hitToStrips, hitToRotated),
- TrackUtils.getTrackTime(pair[1].getTracks().get(0), hitToStrips, hitToRotated)
- };
-
- if(Math.abs(times[0] - times[1]) > timeCoincidence) {
- continue møllerLoop;
- }
-
- // Require that the electrons in the pair have energies
- // below the elastic threshold to exclude said electrons.
- if(pair[0].getMomentum().magnitude() > elasticThreshold || pair[1].getMomentum().magnitude() > elasticThreshold) {
- continue møllerLoop;
- }
-
- // Require that the energy of the pair be within a range
- // that is sufficiently "Møller-like."
- double momentumSum = VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude();
- if(momentumSum < møllerLowerRange || momentumSum > møllerUpperRange) {
- continue møllerLoop;
- }
-
- // If all the above conditions are met, the pair is to be
- // considered a trident pair. Add it to the list.
- møllerTracks.add(pair);
- }
-
- // Return the list of pairs that passed the condition.
- return møllerTracks;
- }
-
- /**
- * Gets a list track pairs that meet the Møller condition defined
- * using tracks with matched calorimeter clusters. A pair meets the
- * cluster/track matched Møller condition is it meets the following:
- * <ul><li>Both tracks have matched clusters.</li>
- * <li>Both tracks are negative.</li>
- * <li>Clusters have a time coincidence of 2.5 ns or less.</li>
- * <li>The electron momenta are below 900 MeV.</li>
- * <li>The momentum sum of the tracks is in the range <code>800 MeV
- * ⤠p1 + p2 ⤠1500 MeV</li></ul>
- * @param pairList - A <code>List</code> collection of parameterized
- * type <code>ReconstructedParticle[]</code> containing all valid
- * top/bottom pairs of tracks with matched clusters. These will be
- * tested to see if they meet the process criteria.
- * @return Returns a list containing pairs of tracks that meet the
- * Møller condition.
- */
- private final List<ReconstructedParticle[]> getMøllerTracksCTMatched(List<ReconstructedParticle[]> pairList) {
- // Store the set of track pairs that meet the Møller condition.
- List<ReconstructedParticle[]> møllerTracks = new ArrayList<ReconstructedParticle[]>();
-
- // Loop over the filtered pair list and apply the Møller
- // condition test.
- møllerLoop:
- for(ReconstructedParticle[] pair : pairList) {
- // Both tracks must be negatively charged.
- if(pair[0].getCharge() > 0 || pair[1].getCharge() > 0) {
- continue møllerLoop;
- }
-
- // The clusters must within a limited time window.
- /*
- Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
- if(TriggerModule.getValueTimeCoincidence(trackClusters) > timeCoincidence) {
- continue møllerLoop;
- }
- */
-
- // The clusters must be coincidental within an energy
- // dependent coincidence window.
- Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
- if(!isCoincidental(trackClusters)) {
- continue møllerLoop;
- }
-
- // Require that the electrons in the pair have energies
- // below the elastic threshold to exclude said electrons.
- if(pair[0].getMomentum().magnitude() > elasticThreshold || pair[1].getMomentum().magnitude() > elasticThreshold) {
- continue møllerLoop;
- }
-
- // Require that the energy of the pair be within a range
- // that is sufficiently "Møller-like."
- double momentumSum = VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude();
- if(momentumSum < møllerLowerRange || momentumSum > møllerUpperRange) {
- continue møllerLoop;
- }
-
- // Require that all clusters occur within the trigger time
- // window to exclude accidentals.
- if(checkTriggerTimeWindow) {
- if(!inTriggerWindow(trackClusters[0]) || !inTriggerWindow(trackClusters[1])) {
- continue møllerLoop;
- }
- }
-
- // If all the above conditions are met, the pair is to be
- // considered a trident pair. Add it to the list.
- møllerTracks.add(pair);
- }
-
- // Return the list of pairs that passed the condition.
- return møllerTracks;
- }
-
- /**
- * Calculates the approximate invariant mass for a pair of tracks
- * from their momentum. This assumes that the particles are either
- * electrons or positrons, and thusly have a sufficiently small
- * mass term that it can be safely excluded.
- * @param pair - The track pair for which to calculate the invariant
- * mass.
- * @return Returns the approximate invariant mass in units of GeV.
- */
- private static final double getInvariantMass(ReconstructedParticle[] pair) {
- // Get the momentum squared.
- double p2 = Math.pow(pair[0].getMomentum().magnitude() + pair[1].getMomentum().magnitude(), 2);
-
- // Get the remaining terms.
- double xPro = pair[0].getMomentum().x() + pair[1].getMomentum().x();
- double yPro = pair[0].getMomentum().y() + pair[1].getMomentum().y();
- double zPro = pair[0].getMomentum().z() + pair[1].getMomentum().z();
-
- // Calculate the invariant mass.
- return Math.sqrt(p2 - Math.pow(xPro, 2) - Math.pow(yPro, 2) - Math.pow(zPro, 2));
- }
-
- /**
- * Calculates the coplanarity angle between two points, specified
- * by a double array. The array must be of the format (x, y, z).
- * @param position - The first position array.
- * @param otherPosition - The second position array.
- * @return Returns the coplanarity angle between the points in units
- * of degrees.
- */
- private static final double getCalculatedCoplanarity(double[] position, double[] otherPosition) {
- // Define the x- and y-coordinates of the clusters as well as
- // calorimeter center.
- final double ORIGIN_X = 42.52;
- double x[] = { position[0], otherPosition[0] };
- double y[] = { position[1], otherPosition[1] };
-
+ if(!event.hasCollection(ReconstructedParticle.class, particleCollectionName)) {
+ return;
+ }
+ List<ReconstructedParticle> trackList = event.get(ReconstructedParticle.class, particleCollectionName);
+
+ // Check if the event has a collection of clusters. If it
+ // exists, extract it. Otherwise, skip the event.
+ if(!event.hasCollection(Cluster.class, clusterCollectionName)) {
+ return;
+ }
+ List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
+
+ // Get cluster-track matched top/bottom pairs.
+ List<ReconstructedParticle[]> gblMatchedPairs = getTopBottomTracksGBL(trackList);
+ List<ReconstructedParticle[]> ctMatchedPairs = getTopBottomTracksCTMatched(trackList);
+
+ System.out.println("CTM Pairs :: " + ctMatchedPairs.size());
+ System.out.println("GBL Pairs :: " + gblMatchedPairs.size());
+
+ // Get the trident and Møller tracks for the matched track
+ // and cluster pair condition sets.
+ List<ReconstructedParticle[]> møllers = getMøllerTracksCTMatched(ctMatchedPairs);
+ List<ReconstructedParticle[]> møllersGBL = getMøllerTracksGBL(gblMatchedPairs, event);
+ List<ReconstructedParticle[]> tridents = getTridentTracksCTMatched(ctMatchedPairs);
+ List<ReconstructedParticle[]> tridentsGBL = getTridentClustersGBL(gblMatchedPairs, TriggerModule.getTopBottomPairs(clusterList, Cluster.class), event);
+
+ // Track how many events had tridents and Møllers.
+ if(!møllers.isEmpty()) { møllersProcessed++; }
+ if(!tridents.isEmpty()) { tridentsProcessed++; }
+ if(!møllersGBL.isEmpty()) { gblMøllersProcessed++; }
+ if(!tridentsGBL.isEmpty()) { gblTridentsProcessed++; }
+
+ // Produce Møller cluster-track matched plots.
+ møctmInstancesInEvent.fill(møllers.size());
+ for(ReconstructedParticle[] pair : møllers) {
+ // Get the track clusters.
+ Track[] tracks = { pair[0].getTracks().get(0), pair[1].getTracks().get(0) };
+ Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
+
+ // Populate the cluster plots.
+ møctmElectronEnergy.fill(trackClusters[0].getEnergy());
+ møctmElectronEnergy.fill(trackClusters[1].getEnergy());
+ møctmEnergySum1D.fill(TriggerModule.getValueEnergySum(trackClusters));
+ møctmEnergySum2D.fill(trackClusters[0].getEnergy(), trackClusters[1].getEnergy());
+ møctmESumCoplanarity.fill(TriggerModule.getValueEnergySum(trackClusters), getCalculatedCoplanarity(trackClusters));
+ møctmTimeCoincidence.fill(TriggerModule.getClusterTime(trackClusters[0]) - TriggerModule.getClusterTime(trackClusters[1]));
+ møctmClusterPosition.fill(TriggerModule.getClusterXIndex(trackClusters[0]), TriggerModule.getClusterYIndex(trackClusters[0]));
+ møctmClusterPosition.fill(TriggerModule.getClusterXIndex(trackClusters[1]), TriggerModule.getClusterYIndex(trackClusters[1]));
+
+ // Populate the momentum plots.
+ møctmInvariantMass.fill(getInvariantMass(pair));
+ møctmElectronMomentum.fill(pair[0].getMomentum().magnitude());
+ møctmElectronMomentum.fill(pair[1].getMomentum().magnitude());
+ møctmMomentumSum1D.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
+ møctmMomentumSum2D.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ møctmTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[0]).x(), TrackUtils.getTrackPositionAtEcal(tracks[0]).y());
+ møctmTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[1]).x(), TrackUtils.getTrackPositionAtEcal(tracks[1]).y());
+ møctmPSumCoplanarity.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude(),
+ getCalculatedCoplanarity(new Track[] { pair[0].getTracks().get(0), pair[1].getTracks().get(0) }));
+ }
+
+ // Produce trident cluster-track matched plots.
+ trctmInstancesInEvent.fill(tridents.size());
+ for(ReconstructedParticle[] pair : tridents) {
+ // Get the electron and positron tracks.
+ ReconstructedParticle electronTrack = pair[pair[0].getCharge() < 0 ? 0 : 1];
+ ReconstructedParticle positronTrack = pair[pair[0].getCharge() > 0 ? 0 : 1];
+
+ // Get the track clusters.
+ Cluster electronCluster = electronTrack.getClusters().get(0);
+ Cluster positronCluster = positronTrack.getClusters().get(0);
+ Track[] tracks = { pair[0].getTracks().get(0), pair[1].getTracks().get(0) };
+ Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
+
+ // Populate the cluster plots.
+ trctmElectronEnergy.fill(electronCluster.getEnergy());
+ trctmPositronEnergy.fill(positronCluster.getEnergy());
+ trctmEnergySum2D.fill(pair[0].getEnergy(), pair[1].getEnergy());
+ trctmEnergySum1D.fill(TriggerModule.getValueEnergySum(trackClusters));
+ trctmESumCoplanarity.fill(TriggerModule.getValueEnergySum(trackClusters), getCalculatedCoplanarity(trackClusters));
+ trctmTimeCoincidence.fill(TriggerModule.getClusterTime(trackClusters[0]) - TriggerModule.getClusterTime(trackClusters[1]));
+ trctmClusterPosition.fill(TriggerModule.getClusterXIndex(trackClusters[0]), TriggerModule.getClusterYIndex(trackClusters[0]));
+ trctmClusterPosition.fill(TriggerModule.getClusterXIndex(trackClusters[1]), TriggerModule.getClusterYIndex(trackClusters[1]));
+
+ // Populate the momentum plots.
+ trctmInvariantMass.fill(getInvariantMass(pair));
+ trctmElectronMomentum.fill(electronTrack.getMomentum().magnitude());
+ trctmPositronMomentum.fill(positronTrack.getMomentum().magnitude());
+ trctmMomentumSum1D.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
+ trctmMomentumSum2D.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ trctmTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[0]).x(), TrackUtils.getTrackPositionAtEcal(tracks[0]).y());
+ trctmTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[1]).x(), TrackUtils.getTrackPositionAtEcal(tracks[1]).y());
+ trctmPSumCoplanarity.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude(),
+ getCalculatedCoplanarity(new Track[] { pair[0].getTracks().get(0), pair[1].getTracks().get(0) }));
+ }
+
+ // Produce the Møller track-only plots.
+ møgblInstancesInEvent.fill(møllersGBL.size());
+ RelationalTable<?, ?> hitToStrips = TrackUtils.getHitToStripsTable(event);
+ RelationalTable<?, ?> hitToRotated = TrackUtils.getHitToRotatedTable(event);
+ for(ReconstructedParticle pair[] : møllersGBL) {
+ // Get the tracks and track times.
+ Track[] tracks = { pair[0].getTracks().get(0), pair[1].getTracks().get(0) };
+ double times[] = {
+ TrackUtils.getTrackTime(tracks[0], hitToStrips, hitToRotated),
+ TrackUtils.getTrackTime(tracks[1], hitToStrips, hitToRotated)
+ };
+
+ // Fill the plots.
+ møgblTimeCoincidence.fill(times[0] - times[1]);
+ møgblInvariantMass.fill(getInvariantMass(pair));
+ møgblElectronMomentum.fill(pair[0].getMomentum().magnitude());
+ møgblElectronMomentum.fill(pair[1].getMomentum().magnitude());
+ møgblMomentumSum1D.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
+ møgblMomentumSum2D.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ møgblTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[0]).x(), TrackUtils.getTrackPositionAtEcal(tracks[0]).y());
+ møgblTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[1]).x(), TrackUtils.getTrackPositionAtEcal(tracks[1]).y());
+ møgblPSumCoplanarity.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude(),
+ getCalculatedCoplanarity(new Track[] { pair[0].getTracks().get(0), pair[1].getTracks().get(0) }));
+ }
+
+ // Produce track-only trident plots.
+ trgblInstancesInEvent.fill(tridentsGBL.size());
+ for(ReconstructedParticle[] pair : tridentsGBL) {
+ // Get the tracks and track times.
+ Track[] tracks = { pair[0].getTracks().get(0), pair[1].getTracks().get(0) };
+ double times[] = {
+ TrackUtils.getTrackTime(tracks[0], hitToStrips, hitToRotated),
+ TrackUtils.getTrackTime(tracks[1], hitToStrips, hitToRotated)
+ };
+
+ // Get the positron and the electron.
+ ReconstructedParticle positron = pair[0].getCharge() > 0 ? pair[0] : pair[1];
+ ReconstructedParticle electron = pair[0].getCharge() < 0 ? pair[0] : pair[1];
+
+ // Fill the plots.
+ trgblTimeCoincidence.fill(times[0] - times[1]);
+ trgblInvariantMass.fill(getInvariantMass(pair));
+ trgblElectronMomentum.fill(electron.getMomentum().magnitude());
+ trgblPositronMomentum.fill(positron.getMomentum().magnitude());
+ trgblMomentumSum1D.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude());
+ trgblMomentumSum2D.fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude());
+ trgblTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[0]).x(), TrackUtils.getTrackPositionAtEcal(tracks[0]).y());
+ trgblTrackPosition.fill(TrackUtils.getTrackPositionAtEcal(tracks[1]).x(), TrackUtils.getTrackPositionAtEcal(tracks[1]).y());
+ trgblPSumCoplanarity.fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude(),
+ getCalculatedCoplanarity(new Track[] { pair[0].getTracks().get(0), pair[1].getTracks().get(0) }));
+ }
+ }
+
+ public void setCheckSVT(boolean state) {
+ checkSVT = state;
+ }
+
+ public void setCheckTriggerTimeWindow(boolean state) {
+ checkTriggerTimeWindow = state;
+ }
+
+ /**
+ * Gets a list of all possible GBL top/bottom track pairs. These
+ * tracks are not guaranteed to have a matched cluster.
+ * @param trackList - A list of all possible tracks.
+ * @return Returns a list of track pairs.
+ */
+ private static final List<ReconstructedParticle[]> getTopBottomTracksGBL(List<ReconstructedParticle> trackList) {
+ // Separate the tracks into top and bottom tracks based on
+ // the value of tan(Î). Use only GBL tracks to avoid track
+ // duplication.
+ List<ReconstructedParticle> topTracks = new ArrayList<ReconstructedParticle>();
+ List<ReconstructedParticle> botTracks = new ArrayList<ReconstructedParticle>();
+ trackLoop:
+ for(ReconstructedParticle track : trackList) {
+ // Require that the ReconstructedParticle contain an actual
+ // Track object.
+ if(track.getTracks().isEmpty()) {
+ continue trackLoop;
+ }
+
+ // Ignore tracks that are not GBL tracks.
+ if(!TrackType.isGBL(track.getType())) {
+ continue trackLoop;
+ }
+
+ // If the above tests pass, the ReconstructedParticle has
+ // a track and is also a GBL track. Separate it into either
+ // a top or a bottom track based on its tan(Î) value.
+ if(track.getTracks().get(0).getTrackStates().get(0).getTanLambda() > 0) {
+ topTracks.add(track);
+ } else {
+ botTracks.add(track);
+ }
+ }
+
+ // Form all top/bottom pairs with the unique tracks.
+ List<ReconstructedParticle[]> pairList = new ArrayList<ReconstructedParticle[]>();
+ for(ReconstructedParticle topTrack : topTracks) {
+ for(ReconstructedParticle botTrack : botTracks) {
+ pairList.add(new ReconstructedParticle[] { topTrack, botTrack });
+ }
+ }
+
+ // Return the result.
+ return pairList;
+ }
+
+ /**
+ * Produces pairs of tracks. The track pairs are required to be
+ * matched to a cluster and the associated clusters must form a
+ * top/bottom pair. If more than one track points to the same
+ * cluster, only the first track is retained.
+ * @param trackList - A list of all tracks.
+ * @return Returns a list of track pairs meeting the aforementioned
+ * conditions.
+ */
+ private static final List<ReconstructedParticle[]> getTopBottomTracksCTMatched(List<ReconstructedParticle> trackList) {
+ // Track clusters that have already been seen to prevent clusters
+ // that have duplicate tracks from reappearing.
+ Set<Cluster> clusterSet = new HashSet<Cluster>();
+
+ // Separate the tracks into top and bottom tracks based on
+ // the track cluster. Filter out tracks with no clusters.
+ List<ReconstructedParticle> topTracks = new ArrayList<ReconstructedParticle>();
+ List<ReconstructedParticle> botTracks = new ArrayList<ReconstructedParticle>();
+ trackLoop:
+ for(ReconstructedParticle track : trackList) {
+ // Check if the track has a cluster. If not, skip it.
+ if(track.getClusters().isEmpty()) {
+ continue trackLoop;
+ }
+
+ // If the track doesn't have actual tracks, skip it.
+ if(track.getTracks().isEmpty()) {
+ continue trackLoop;
+ }
+
+ // Check if the track cluster has already seen.
+ Cluster trackCluster = track.getClusters().get(0);
+ if(clusterSet.contains(trackCluster)) {
+ continue trackLoop;
+ }
+
+ // If the track has a unique cluster, add it to the proper
+ // list based on the cluster y-index.
+ clusterSet.add(trackCluster);
+ if(TriggerModule.getClusterYIndex(trackCluster) > 0) {
+ topTracks.add(track);
+ } else {
+ botTracks.add(track);
+ }
+ }
+
+ // Form all top/bottom pairs with the unique tracks.
+ List<ReconstructedParticle[]> pairList = new ArrayList<ReconstructedParticle[]>();
+ for(ReconstructedParticle topTrack : topTracks) {
+ for(ReconstructedParticle botTrack : botTracks) {
+ pairList.add(new ReconstructedParticle[] { topTrack, botTrack });
+ }
+ }
+
+ // Return the result.
+ return pairList;
+ }
+
+ private final List<ReconstructedParticle[]> getTridentClustersGBL(List<ReconstructedParticle[]> pairList, List<Cluster[]> clusterList, EventHeader event) {
+ // Store the set of track pairs that meet the trident condition.
+ List<ReconstructedParticle[]> tridentTracks = new ArrayList<ReconstructedParticle[]>();
+
+ // Extract track relational tables from the event object.
+ RelationalTable<?, ?> hitToStrips = TrackUtils.getHitToStripsTable(event);
+ RelationalTable<?, ?> hitToRotated = TrackUtils.getHitToRotatedTable(event);
+
+ // Tracks will not be considered for trident analysis unless there
+ // is at least one top/bottom cluster pair within the time window.
+ boolean passesClusterCondition = false;
+ tridentClusterLoop:
+ for(Cluster[] pair : clusterList) {
+ // Ignore clusters that are too far apart temporally.
+ if(TriggerModule.getValueTimeCoincidence(pair) > timeCoincidence) {
+ continue tridentClusterLoop;
+ }
+
+ // Require that the cluster pair be top/bottom.
+ boolean hasTop = TriggerModule.getClusterYIndex(pair[0]) > 0 || TriggerModule.getClusterYIndex(pair[1]) > 0;
+ boolean hasBot = TriggerModule.getClusterYIndex(pair[0]) < 0 || TriggerModule.getClusterYIndex(pair[1]) < 0;
+ if(!hasTop || !hasBot) {
+ continue tridentClusterLoop;
+ }
+
+ // If the cluster passes, mark that it has done so and skip
+ // the rest. Only one pair need pass.
+ passesClusterCondition = true;
+ break tridentClusterLoop;
+ }
+
+ // If no cluster pair passed the cluster condition, no tracks
+ // are allowed to pass either.
+ if(!passesClusterCondition) {
+ return tridentTracks;
+ }
+
+ // Next, check the track pair list. A track pair must have a
+ // positive and a negative track and must also be within the
+ // time coincidence window.
+ tridentTrackLoop:
+ for(ReconstructedParticle[] pair : pairList) {
+ // Check that there is at least one positive and one negative
+ // track in the pair.
+ boolean hasPositive = pair[0].getCharge() > 0 || pair[1].getCharge() > 0;
+ boolean hasNegative = pair[0].getCharge() < 0 || pair[1].getCharge() < 0;
+ if(!hasPositive || !hasNegative) {
+ break tridentTrackLoop;
+ }
+
+ // Check that the track pair passes the time cut.
+ double times[] = {
+ TrackUtils.getTrackTime(pair[0].getTracks().get(0), hitToStrips, hitToRotated),
+ TrackUtils.getTrackTime(pair[1].getTracks().get(0), hitToStrips, hitToRotated)
+ };
+
+ if(Math.abs(times[0] - times[1]) > timeCoincidence) {
+ continue tridentTrackLoop;
+ }
+
+ // Require that the negative track have less than the
+ // elastic threshold momentum to exclude elastic electrons.
+ if(pair[0].getCharge() < 0 && pair[0].getMomentum().magnitude() > elasticThreshold
+ || pair[1].getCharge() < 0 && pair[1].getMomentum().magnitude() > elasticThreshold) {
+ continue tridentTrackLoop;
+ }
+
+ // If the track passes both, it is considered a trident pair.
+ tridentTracks.add(pair);
+ }
+
+ // Return the resultant pairs.
+ return tridentTracks;
+ }
+
+ /**
+ * Gets a list track pairs that meet the trident condition defined
+ * using tracks with matched calorimeter clusters. A pair meets the
+ * cluster/track matched trident condition is it meets the following:
+ * <ul><li>Both tracks have matched clusters.</li>
+ * <li>Has one positive track.</li>
+ * <li>Has one negative track.</li>
+ * <li>Clusters have a time coincidence of 2.5 ns or less.</li>
+ * <li>The electron momentum is below 900 MeV.</li></ul>
+ * @param pairList - A <code>List</code> collection of parameterized
+ * type <code>ReconstructedParticle[]</code> containing all valid
+ * top/bottom pairs of tracks with matched clusters. These will be
+ * tested to see if they meet the process criteria.
+ * @return Returns a list containing pairs of tracks that meet the
+ * trident condition.
+ */
+ private final List<ReconstructedParticle[]> getTridentTracksCTMatched(List<ReconstructedParticle[]> pairList) {
+ // Store the set of track pairs that meet the trident condition.
+ List<ReconstructedParticle[]> tridentTracks = new ArrayList<ReconstructedParticle[]>();
+
+ // Loop over the filtered pair list and apply the trident
+ // condition test.
+ tridentLoop:
+ for(ReconstructedParticle[] pair : pairList) {
+ // There must be one positive and one negative track.
+ ReconstructedParticle electron = null;
+ ReconstructedParticle positron = null;
+ if(pair[0].getCharge() > 0) { positron = pair[0]; }
+ else if(pair[1].getCharge() > 0) { positron = pair[1]; }
+ if(pair[0].getCharge() < 0) { electron = pair[0]; }
+ else if(pair[1].getCharge() < 0) { electron = pair[1]; }
+ if(electron == null || positron == null) {
+ continue tridentLoop;
+ }
+
+ // Make sure that the clusters are not the same. This should
+ // not actually ever be possible...
+ if(pair[0].getClusters().get(0) == pair[1].getClusters().get(0)) {
+ continue tridentLoop;
+ }
+
+ // The clusters must within a limited time window.
+ /*
+ Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
+ if(TriggerModule.getValueTimeCoincidence(trackClusters) > timeCoincidence) {
+ continue tridentLoop;
+ }
+ */
+
+ // The clusters must be coincidental within an energy
+ // dependent coincidence window.
+ Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
+ if(!isCoincidental(trackClusters)) {
+ continue tridentLoop;
+ }
+
+ // Require that the electron in the pair have an energy
+ // below the elastic threshold to exclude elastic electrons.
+ if(electron.getMomentum().magnitude() >= elasticThreshold) {
+ continue tridentLoop;
+ }
+
+ // Require that all clusters occur within the trigger time
+ // window to exclude accidentals.
+ if(checkTriggerTimeWindow) {
+ if(!inTriggerWindow(trackClusters[0]) || !inTriggerWindow(trackClusters[1])) {
+ continue tridentLoop;
+ }
+ }
+
+ // If all the above conditions are met, the pair is to be
+ // considered a trident pair. Add it to the list.
+ tridentTracks.add(pair);
+ }
+
+ // Return the list of pairs that passed the condition.
+ return tridentTracks;
+ }
+
+ private final List<ReconstructedParticle[]> getMøllerTracksGBL(List<ReconstructedParticle[]> pairList, EventHeader event) {
+ // Store the set of track pairs that meet the Møller condition.
+ List<ReconstructedParticle[]> møllerTracks = new ArrayList<ReconstructedParticle[]>();
+
+ // Extract track relational tables from the event object.
+ RelationalTable<?, ?> hitToStrips = TrackUtils.getHitToStripsTable(event);
+ RelationalTable<?, ?> hitToRotated = TrackUtils.getHitToRotatedTable(event);
+
+ // Loop over the filtered pair list and apply the Møller
+ // condition test.
+ møllerLoop:
+ for(ReconstructedParticle[] pair : pairList) {
+ // Both tracks must be negatively charged.
+ if(pair[0].getCharge() > 0 || pair[1].getCharge() > 0) {
+ continue møllerLoop;
+ }
+
+ // The clusters must within a limited time window.
+ double times[] = {
+ TrackUtils.getTrackTime(pair[0].getTracks().get(0), hitToStrips, hitToRotated),
+ TrackUtils.getTrackTime(pair[1].getTracks().get(0), hitToStrips, hitToRotated)
+ };
+
+ if(Math.abs(times[0] - times[1]) > timeCoincidence) {
+ continue møllerLoop;
+ }
+
+ // Require that the electrons in the pair have energies
+ // below the elastic threshold to exclude said electrons.
+ if(pair[0].getMomentum().magnitude() > elasticThreshold || pair[1].getMomentum().magnitude() > elasticThreshold) {
+ continue møllerLoop;
+ }
+
+ // Require that the energy of the pair be within a range
+ // that is sufficiently "Møller-like."
+ double momentumSum = VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude();
+ if(momentumSum < møllerLowerRange || momentumSum > møllerUpperRange) {
+ continue møllerLoop;
+ }
+
+ // If all the above conditions are met, the pair is to be
+ // considered a trident pair. Add it to the list.
+ møllerTracks.add(pair);
+ }
+
+ // Return the list of pairs that passed the condition.
+ return møllerTracks;
+ }
+
+ /**
+ * Gets a list track pairs that meet the Møller condition defined
+ * using tracks with matched calorimeter clusters. A pair meets the
+ * cluster/track matched Møller condition is it meets the following:
+ * <ul><li>Both tracks have matched clusters.</li>
+ * <li>Both tracks are negative.</li>
+ * <li>Clusters have a time coincidence of 2.5 ns or less.</li>
+ * <li>The electron momenta are below 900 MeV.</li>
+ * <li>The momentum sum of the tracks is in the range <code>800 MeV
+ * ⤠p1 + p2 ⤠1500 MeV</li></ul>
+ * @param pairList - A <code>List</code> collection of parameterized
+ * type <code>ReconstructedParticle[]</code> containing all valid
+ * top/bottom pairs of tracks with matched clusters. These will be
+ * tested to see if they meet the process criteria.
+ * @return Returns a list containing pairs of tracks that meet the
+ * Møller condition.
+ */
+ private final List<ReconstructedParticle[]> getMøllerTracksCTMatched(List<ReconstructedParticle[]> pairList) {
+ // Store the set of track pairs that meet the Møller condition.
+ List<ReconstructedParticle[]> møllerTracks = new ArrayList<ReconstructedParticle[]>();
+
+ // Loop over the filtered pair list and apply the Møller
+ // condition test.
+ møllerLoop:
+ for(ReconstructedParticle[] pair : pairList) {
+ // Both tracks must be negatively charged.
+ if(pair[0].getCharge() > 0 || pair[1].getCharge() > 0) {
+ continue møllerLoop;
+ }
+
+ // The clusters must within a limited time window.
+ /*
+ Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
+ if(TriggerModule.getValueTimeCoincidence(trackClusters) > timeCoincidence) {
+ continue møllerLoop;
+ }
+ */
+
+ // The clusters must be coincidental within an energy
+ // dependent coincidence window.
+ Cluster[] trackClusters = { pair[0].getClusters().get(0), pair[1].getClusters().get(0) };
+ if(!isCoincidental(trackClusters)) {
+ continue møllerLoop;
+ }
+
+ // Require that the electrons in the pair have energies
+ // below the elastic threshold to exclude said electrons.
+ if(pair[0].getMomentum().magnitude() > elasticThreshold || pair[1].getMomentum().magnitude() > elasticThreshold) {
+ continue møllerLoop;
+ }
+
+ // Require that the energy of the pair be within a range
+ // that is sufficiently "Møller-like."
+ double momentumSum = VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude();
+ if(momentumSum < møllerLowerRange || momentumSum > møllerUpperRange) {
+ continue møllerLoop;
+ }
+
+ // Require that all clusters occur within the trigger time
+ // window to exclude accidentals.
+ if(checkTriggerTimeWindow) {
+ if(!inTriggerWindow(trackClusters[0]) || !inTriggerWindow(trackClusters[1])) {
+ continue møllerLoop;
+ }
+ }
+
+ // If all the above conditions are met, the pair is to be
+ // considered a trident pair. Add it to the list.
+ møllerTracks.add(pair);
+ }
+
+ // Return the list of pairs that passed the condition.
+ return møllerTracks;
+ }
+
+ /**
+ * Calculates the approximate invariant mass for a pair of tracks
+ * from their momentum. This assumes that the particles are either
+ * electrons or positrons, and thusly have a sufficiently small
+ * mass term that it can be safely excluded.
+ * @param pair - The track pair for which to calculate the invariant
+ * mass.
+ * @return Returns the approximate invariant mass in units of GeV.
+ */
+ private static final double getInvariantMass(ReconstructedParticle[] pair) {
+ // Get the momentum squared.
+ double p2 = Math.pow(pair[0].getMomentum().magnitude() + pair[1].getMomentum().magnitude(), 2);
+
+ // Get the remaining terms.
+ double xPro = pair[0].getMomentum().x() + pair[1].getMomentum().x();
+ double yPro = pair[0].getMomentum().y() + pair[1].getMomentum().y();
+ double zPro = pair[0].getMomentum().z() + pair[1].getMomentum().z();
+
+ // Calculate the invariant mass.
+ return Math.sqrt(p2 - Math.pow(xPro, 2) - Math.pow(yPro, 2) - Math.pow(zPro, 2));
+ }
+
+ /**
+ * Calculates the coplanarity angle between two points, specified
+ * by a double array. The array must be of the format (x, y, z).
+ * @param position - The first position array.
+ * @param otherPosition - The second position array.
+ * @return Returns the coplanarity angle between the points in units
+ * of degrees.
+ */
+ private static final double getCalculatedCoplanarity(double[] position, double[] otherPosition) {
+ // Define the x- and y-coordinates of the clusters as well as
+ // calorimeter center.
+ final double ORIGIN_X = 42.52;
+ double x[] = { position[0], otherPosition[0] };
+ double y[] = { position[1], otherPosition[1] };
+
// Get the cluster angles.
double[] clusterAngle = new double[2];
for(int i = 0; i < 2; i++) {
- clusterAngle[i] = Math.atan2(y[i], x[i] - ORIGIN_X) * 180 / Math.PI;
- if(clusterAngle[i] <= 0) { clusterAngle[i] += 360; }
+ clusterAngle[i] = Math.atan2(y[i], x[i] - ORIGIN_X) * 180 / Math.PI;
+ if(clusterAngle[i] <= 0) { clusterAngle[i] += 360; }
}
// Calculate the coplanarity cut value.
double clusterDiff = clusterAngle[0] - clusterAngle[1];
return clusterDiff > 0 ? clusterDiff : clusterDiff + 360;
- }
-
- /**
- * Calculates the coplanarity angle of a pair of clusters.
- * @param pair - The pair of clusters for which to calculate the
- * coplanarity angle.
- * @return Returns the coplanarity angle between the two clusters
- * in degrees.
- */
- private static final double getCalculatedCoplanarity(Cluster[] pair) {
- return getCalculatedCoplanarity(pair[0].getPosition(), pair[1].getPosition());
- }
-
- /**
- * Calculates the coplanarity angle of a pair of tracks. The track
- * is extrapolated to the calorimeter face and its position there
- * used for the arguments in the calculation.
- * @param pair - The pair of tracks for which to calculate the
- * coplanarity angle.
- * @return Returns the coplanarity angle between the two tracks
- * in degrees.
- */
- private static final double getCalculatedCoplanarity(Track[] pair) {
- return getCalculatedCoplanarity(TrackUtils.getTrackPositionAtEcal(pair[0]).v(), TrackUtils.getTrackPositionAtEcal(pair[1]).v());
- }
-
- private static final boolean inTriggerWindow(Cluster cluster) {
- // Get the cluster time.
- double clusterTime = TriggerModule.getClusterTime(cluster);
-
- // Check that it is within the allowed bounds.
- return (35 <= clusterTime && clusterTime <= 50);
- }
-
- private static final boolean isCoincidental(Cluster[] pair) {
- // Get the energy sum and the time coincidence.
- double energySum = pair[0].getEnergy() + pair[1].getEnergy();
- double timeCoincidence = TriggerModule.getValueTimeCoincidence(pair);
-
- // Get the upper and lower bounds of the allowed range.
- double mean = getTimeDependenceMean(energySum);
- double threeSigma = 3.0 * getTimeDependenceSigma(energySum);
- double lowerBound = mean - threeSigma;
- double upperBound = mean + threeSigma;
-
- // Perform the time coincidence check.
- return (lowerBound <= timeCoincidence && timeCoincidence <= upperBound);
- }
-
- private static final double getTimeDependenceMean(double energySum) {
- // Define the fit parameters.
- double[] param = { 0.289337, -2.81998, 9.03475, -12.93, 8.71476, -2.26969 };
-
- // Calculate the mean.
- return param[0] + energySum * (param[1] + energySum * (param[2] + energySum * (param[3] + energySum * (param[4] + energySum * (param[5])))));
- }
-
- private static final double getTimeDependenceSigma(double energySum) {
- // Define the fit parameters.
- double[] param = { 4.3987, -24.2371, 68.9567, -98.2586, 67.562, -17.8987 };
-
- // Calculate the standard deviation.
- return param[0] + energySum * (param[1] + energySum * (param[2] + energySum * (param[3] + energySum * (param[4] + energySum * (param[5])))));
- }
+ }
+
+ /**
+ * Calculates the coplanarity angle of a pair of clusters.
+ * @param pair - The pair of clusters for which to calculate the
+ * coplanarity angle.
+ * @return Returns the coplanarity angle between the two clusters
+ * in degrees.
+ */
+ private static final double getCalculatedCoplanarity(Cluster[] pair) {
+ return getCalculatedCoplanarity(pair[0].getPosition(), pair[1].getPosition());
+ }
+
+ /**
+ * Calculates the coplanarity angle of a pair of tracks. The track
+ * is extrapolated to the calorimeter face and its position there
+ * used for the arguments in the calculation.
+ * @param pair - The pair of tracks for which to calculate the
+ * coplanarity angle.
+ * @return Returns the coplanarity angle between the two tracks
+ * in degrees.
+ */
+ private static final double getCalculatedCoplanarity(Track[] pair) {
+ return getCalculatedCoplanarity(TrackUtils.getTrackPositionAtEcal(pair[0]).v(), TrackUtils.getTrackPositionAtEcal(pair[1]).v());
+ }
+
+ private static final boolean inTriggerWindow(Cluster cluster) {
+ // Get the cluster time.
+ double clusterTime = TriggerModule.getClusterTime(cluster);
+
+ // Check that it is within the allowed bounds.
+ return (35 <= clusterTime && clusterTime <= 50);
+ }
+
+ private static final boolean isCoincidental(Cluster[] pair) {
+ // Get the energy sum and the time coincidence.
+ double energySum = pair[0].getEnergy() + pair[1].getEnergy();
+ double timeCoincidence = TriggerModule.getValueTimeCoincidence(pair);
+
+ // Get the upper and lower bounds of the allowed range.
+ double mean = getTimeDependenceMean(energySum);
+ double threeSigma = 3.0 * getTimeDependenceSigma(energySum);
+ double lowerBound = mean - threeSigma;
+ double upperBound = mean + threeSigma;
+
+ // Perform the time coincidence check.
+ return (lowerBound <= timeCoincidence && timeCoincidence <= upperBound);
+ }
+
+ private static final double getTimeDependenceMean(double energySum) {
+ // Define the fit parameters.
+ double[] param = { 0.289337, -2.81998, 9.03475, -12.93, 8.71476, -2.26969 };
+
+ // Calculate the mean.
+ return param[0] + energySum * (param[1] + energySum * (param[2] + energySum * (param[3] + energySum * (param[4] + energySum * (param[5])))));
+ }
+
+ private static final double getTimeDependenceSigma(double energySum) {
+ // Define the fit parameters.
+ double[] param = { 4.3987, -24.2371, 68.9567, -98.2586, 67.562, -17.8987 };
+
+ // Calculate the standard deviation.
+ return param[0] + energySum * (param[1] + energySum * (param[2] + energySum * (param[3] + energySum * (param[4] + energySum * (param[5])))));
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/AddPlots.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/AddPlots.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/AddPlots.java Wed Mar 9 11:43:24 2016
@@ -14,241 +14,241 @@
import hep.aida.ITree;
public class AddPlots {
-
- public static void main(String[] args) throws IllegalArgumentException, IOException {
- // Define the root directory for the plots.
- String rootDir = null;
-
- // Get the option identifier from the command arguments.
- boolean isHelp = false;
- boolean isFileList = false;
- boolean isDirectory = false;
- if(args.length > 0) {
- if(args[0].compareTo("-h") == 0) { isHelp = true; }
- else if(args[0].compareTo("-f") == 0) { isFileList = true; }
- else if(args[0].compareTo("-d") == 0) { isDirectory = true; }
- } else {
- System.err.println("Insufficient arguments. See \"AddPlots -h\"");
- System.exit(1);
- }
-
- // Process the command line argument.
- List<File> plotFiles = new ArrayList<File>();
- if(isHelp) {
- System.out.println("Usage:");
- System.out.println("\tAddPlots -d [PLOT_DIRECTORY]");
- System.out.println("\tAddPlots -f [PLOT_FILE] [PLOT_FILE] ...");
- System.exit(0);
- } else if(isDirectory) {
- // Make sure that a directory is specified.
- if(args.length < 2) {
- System.err.println("Insufficient arguments. Must specify at least two files.");
- System.exit(1);
- }
-
- // Get the plot directory from the second argument.
- File plotDirectory = new File(args[1]);
-
- // Verify that it exists and is a directory.
- if(!plotDirectory.exists()) {
- System.err.println("File path does not exist.");
- System.exit(1);
- } if(!plotDirectory.isDirectory()) {
- System.err.println("Indicated path must be a directory.");
- System.exit(1);
- }
-
- // Store the root directory.
- rootDir = plotDirectory.getAbsolutePath() + "/";
-
- // Extract the AIDA files from the directory.
- for(File file : plotDirectory.listFiles()) {
- System.out.println(file.getName());
- int indexOfExtension = file.getName().lastIndexOf('.');
- if(indexOfExtension == -1) { continue; }
- if(file.getName().substring(indexOfExtension).compareToIgnoreCase(".aida") == 0) {
- plotFiles.add(file);
- }
- }
-
- // Debug status print.
- System.out.println("Processing plots in directory \"" + plotDirectory.getAbsolutePath() + "\"");
- } else if(isFileList) {
- // Make sure that at least one file was specified.
- if(args.length < 3) {
- System.err.println("Insufficient arguments. Must specify at least two files.");
- System.exit(1);
- }
-
- // Get the root directory.
- rootDir = System.getProperty("user.dir") + "/";
-
- // Create and verify the specified files.
- for(int i = 1; i < args.length; i++) {
- // Create the file object and make sure that it exists.
- File file = new File(args[i]);
- if(!file.exists()) {
- System.err.println("Specified file does not exist: " + args[i]);
- System.exit(1);
- }
-
- // Add it to the file list.
- plotFiles.add(file);
- }
- } else {
- System.err.println("Option \"" + args[0] + "\" is not recognized.");
- System.exit(1);
- }
-
- // Make sure that there are actually files.
- if(plotFiles.isEmpty()) {
- System.err.println("No AIDA files found!");
- System.exit(1);
- }
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(plotFiles.get(0).getAbsolutePath());
- if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
-
- // Get the histograms names.
- List<String> objectNameList = getTreeFiles(tree);
-
- // Separate the plots into 1D and 2D plots and extract their
- // bin sizes and other properties.
- List<Integer> xBins1D = new ArrayList<Integer>();
- List<Double> xBins1DMin = new ArrayList<Double>();
- List<Double> xBins1DMax = new ArrayList<Double>();
- List<Integer> xBins2D = new ArrayList<Integer>();
- List<Double> xBins2DMin = new ArrayList<Double>();
- List<Double> xBins2DMax = new ArrayList<Double>();
- List<Integer> yBins2D = new ArrayList<Integer>();
- List<Double> yBins2DMin = new ArrayList<Double>();
- List<Double> yBins2DMax = new ArrayList<Double>();
- List<String> histogramNames1D = new ArrayList<String>();
- List<String> histogramNames2D = new ArrayList<String>();
- for(String objectName : objectNameList) {
- // Get the object.
- IManagedObject object = tree.find(objectName);
-
- // If it is a 1D histogram, process it.
- if(object instanceof IHistogram1D) {
- // Add the object to the 1D histogram list.
- histogramNames1D.add(objectName);
-
- // Get the bin size.
- IHistogram1D plot = (IHistogram1D) object;
- xBins1D.add(plot.axis().bins());
- xBins1DMin.add(plot.axis().lowerEdge());
- xBins1DMax.add(plot.axis().upperEdge());
- }
-
- // If it is a 1D histogram, process it.
- else if(object instanceof IHistogram2D) {
- // Add the object to the 2D histogram list.
- histogramNames2D.add(objectName);
-
- // Get the bin size.
- IHistogram2D plot = (IHistogram2D) object;
- xBins2D.add(plot.xAxis().bins());
- xBins2DMin.add(plot.xAxis().lowerEdge());
- xBins2DMax.add(plot.xAxis().upperEdge());
- yBins2D.add(plot.yAxis().bins());
- yBins2DMin.add(plot.yAxis().lowerEdge());
- yBins2DMax.add(plot.yAxis().upperEdge());
- }
- }
-
- // Create plots corresponding to each of the plot objects.
- AIDA aida = AIDA.defaultInstance();
- List<IHistogram1D> histograms1D = new ArrayList<IHistogram1D>(histogramNames1D.size());
- List<IHistogram2D> histograms2D = new ArrayList<IHistogram2D>(histogramNames2D.size());
- for(int i = 0; i < histogramNames1D.size(); i++) {
- IHistogram1D histogram = aida.histogram1D(histogramNames1D.get(i), xBins1D.get(i), xBins1DMin.get(i), xBins1DMax.get(i));
- histograms1D.add(histogram);
- }
- for(int i = 0; i < histogramNames2D.size(); i++) {
- IHistogram2D histogram = aida.histogram2D(histogramNames2D.get(i), xBins2D.get(i), xBins2DMin.get(i), xBins2DMax.get(i), yBins2D.get(i), yBins2DMin.get(i), yBins2DMax.get(i));
- histograms2D.add(histogram);
- }
-
- // Iterate over each file and add their entries to the compiled
- // plots.
- for(File file : plotFiles) {
- // Open the file.
- ITree fileTree = af.createTreeFactory().create(file.getAbsolutePath());
-
- // For each plot, get the equivalent plot from the file
- // and add each bin entry to the compiled plot.
- for(int i = 0; i < histogramNames1D.size(); i++) {
- // Get the histogram object.
- IHistogram1D histogram = (IHistogram1D) fileTree.find(histogramNames1D.get(i));
-
- // Iterate over the bins.
- for(int x = 0; x < xBins1D.get(i); x++) {
- // Get the entries in this bin and the bin average.
- int entries = histogram.binEntries(x);
- double average = histogram.binMean(x);
-
- // Add the entries to the compiled plot.
- for(int j = 0; j < entries; j++) {
- histograms1D.get(i).fill(average);
- }
- }
- }
- for(int i = 0; i < histogramNames2D.size(); i++) {
- // Get the histogram object.
- IHistogram2D histogram = (IHistogram2D) fileTree.find(histogramNames2D.get(i));
-
- // Iterate over the bins.
- for(int x = 0; x < xBins2D.get(i); x++) {
- for(int y = 0; y < yBins2D.get(i); y++) {
- // Get the entries in this bin and the bin average.
- int entries = histogram.binEntries(x, y);
- double averageX = histogram.binMeanX(x, y);
- double averageY = histogram.binMeanY(x, y);
-
- // Add the entries to the compiled plot.
- for(int j = 0; j < entries; j++) {
- histograms2D.get(i).fill(averageX, averageY);
- }
- }
- }
- }
- }
-
- // Save the compiled plots to a new file.
- aida.saveAs(rootDir + "compiled-plots.aida");
- System.out.println("Plots written to path " + rootDir + "compiled-plots.aida");
- }
-
- private static final List<String> getTreeFiles(ITree tree) {
- return getTreeFiles(tree, "/");
- }
-
- private static final List<String> getTreeFiles(ITree tree, String rootDir) {
- // Make a list to contain the plot names.
- List<String> list = new ArrayList<String>();
-
- // Iterate over the objects at the indicated directory of the tree.
- String objectNames[] = tree.listObjectNames(rootDir);
- for(String objectName : objectNames) {
- // Convert the object name to a char array and check the
- // last character. Directories end in '/'.
- char[] plotChars = objectName.toCharArray();
-
- // If the object is a directory, process any objects inside
- // of it as well.
- if(plotChars[plotChars.length - 1] == '/') {
- List<String> dirList = getTreeFiles(tree, objectName);
- list.addAll(dirList);
- }
-
- // Otherwise, just add the object to the list.
- else { list.add(objectName); }
- }
-
- // Return the compiled list.
- return list;
- }
+
+ public static void main(String[] args) throws IllegalArgumentException, IOException {
+ // Define the root directory for the plots.
+ String rootDir = null;
+
+ // Get the option identifier from the command arguments.
+ boolean isHelp = false;
+ boolean isFileList = false;
+ boolean isDirectory = false;
+ if(args.length > 0) {
+ if(args[0].compareTo("-h") == 0) { isHelp = true; }
+ else if(args[0].compareTo("-f") == 0) { isFileList = true; }
+ else if(args[0].compareTo("-d") == 0) { isDirectory = true; }
+ } else {
+ System.err.println("Insufficient arguments. See \"AddPlots -h\"");
+ System.exit(1);
+ }
+
+ // Process the command line argument.
+ List<File> plotFiles = new ArrayList<File>();
+ if(isHelp) {
+ System.out.println("Usage:");
+ System.out.println("\tAddPlots -d [PLOT_DIRECTORY]");
+ System.out.println("\tAddPlots -f [PLOT_FILE] [PLOT_FILE] ...");
+ System.exit(0);
+ } else if(isDirectory) {
+ // Make sure that a directory is specified.
+ if(args.length < 2) {
+ System.err.println("Insufficient arguments. Must specify at least two files.");
+ System.exit(1);
+ }
+
+ // Get the plot directory from the second argument.
+ File plotDirectory = new File(args[1]);
+
+ // Verify that it exists and is a directory.
+ if(!plotDirectory.exists()) {
+ System.err.println("File path does not exist.");
+ System.exit(1);
+ } if(!plotDirectory.isDirectory()) {
+ System.err.println("Indicated path must be a directory.");
+ System.exit(1);
+ }
+
+ // Store the root directory.
+ rootDir = plotDirectory.getAbsolutePath() + "/";
+
+ // Extract the AIDA files from the directory.
+ for(File file : plotDirectory.listFiles()) {
+ System.out.println(file.getName());
+ int indexOfExtension = file.getName().lastIndexOf('.');
+ if(indexOfExtension == -1) { continue; }
+ if(file.getName().substring(indexOfExtension).compareToIgnoreCase(".aida") == 0) {
+ plotFiles.add(file);
+ }
+ }
+
+ // Debug status print.
+ System.out.println("Processing plots in directory \"" + plotDirectory.getAbsolutePath() + "\"");
+ } else if(isFileList) {
+ // Make sure that at least one file was specified.
+ if(args.length < 3) {
+ System.err.println("Insufficient arguments. Must specify at least two files.");
+ System.exit(1);
+ }
+
+ // Get the root directory.
+ rootDir = System.getProperty("user.dir") + "/";
+
+ // Create and verify the specified files.
+ for(int i = 1; i < args.length; i++) {
+ // Create the file object and make sure that it exists.
+ File file = new File(args[i]);
+ if(!file.exists()) {
+ System.err.println("Specified file does not exist: " + args[i]);
+ System.exit(1);
+ }
+
+ // Add it to the file list.
+ plotFiles.add(file);
+ }
+ } else {
+ System.err.println("Option \"" + args[0] + "\" is not recognized.");
+ System.exit(1);
+ }
+
+ // Make sure that there are actually files.
+ if(plotFiles.isEmpty()) {
+ System.err.println("No AIDA files found!");
+ System.exit(1);
+ }
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(plotFiles.get(0).getAbsolutePath());
+ if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+
+ // Get the histograms names.
+ List<String> objectNameList = getTreeFiles(tree);
+
+ // Separate the plots into 1D and 2D plots and extract their
+ // bin sizes and other properties.
+ List<Integer> xBins1D = new ArrayList<Integer>();
+ List<Double> xBins1DMin = new ArrayList<Double>();
+ List<Double> xBins1DMax = new ArrayList<Double>();
+ List<Integer> xBins2D = new ArrayList<Integer>();
+ List<Double> xBins2DMin = new ArrayList<Double>();
+ List<Double> xBins2DMax = new ArrayList<Double>();
+ List<Integer> yBins2D = new ArrayList<Integer>();
+ List<Double> yBins2DMin = new ArrayList<Double>();
+ List<Double> yBins2DMax = new ArrayList<Double>();
+ List<String> histogramNames1D = new ArrayList<String>();
+ List<String> histogramNames2D = new ArrayList<String>();
+ for(String objectName : objectNameList) {
+ // Get the object.
+ IManagedObject object = tree.find(objectName);
+
+ // If it is a 1D histogram, process it.
+ if(object instanceof IHistogram1D) {
+ // Add the object to the 1D histogram list.
+ histogramNames1D.add(objectName);
+
+ // Get the bin size.
+ IHistogram1D plot = (IHistogram1D) object;
+ xBins1D.add(plot.axis().bins());
+ xBins1DMin.add(plot.axis().lowerEdge());
+ xBins1DMax.add(plot.axis().upperEdge());
+ }
+
+ // If it is a 1D histogram, process it.
+ else if(object instanceof IHistogram2D) {
+ // Add the object to the 2D histogram list.
+ histogramNames2D.add(objectName);
+
+ // Get the bin size.
+ IHistogram2D plot = (IHistogram2D) object;
+ xBins2D.add(plot.xAxis().bins());
+ xBins2DMin.add(plot.xAxis().lowerEdge());
+ xBins2DMax.add(plot.xAxis().upperEdge());
+ yBins2D.add(plot.yAxis().bins());
+ yBins2DMin.add(plot.yAxis().lowerEdge());
+ yBins2DMax.add(plot.yAxis().upperEdge());
+ }
+ }
+
+ // Create plots corresponding to each of the plot objects.
+ AIDA aida = AIDA.defaultInstance();
+ List<IHistogram1D> histograms1D = new ArrayList<IHistogram1D>(histogramNames1D.size());
+ List<IHistogram2D> histograms2D = new ArrayList<IHistogram2D>(histogramNames2D.size());
+ for(int i = 0; i < histogramNames1D.size(); i++) {
+ IHistogram1D histogram = aida.histogram1D(histogramNames1D.get(i), xBins1D.get(i), xBins1DMin.get(i), xBins1DMax.get(i));
+ histograms1D.add(histogram);
+ }
+ for(int i = 0; i < histogramNames2D.size(); i++) {
+ IHistogram2D histogram = aida.histogram2D(histogramNames2D.get(i), xBins2D.get(i), xBins2DMin.get(i), xBins2DMax.get(i), yBins2D.get(i), yBins2DMin.get(i), yBins2DMax.get(i));
+ histograms2D.add(histogram);
+ }
+
+ // Iterate over each file and add their entries to the compiled
+ // plots.
+ for(File file : plotFiles) {
+ // Open the file.
+ ITree fileTree = af.createTreeFactory().create(file.getAbsolutePath());
+
+ // For each plot, get the equivalent plot from the file
+ // and add each bin entry to the compiled plot.
+ for(int i = 0; i < histogramNames1D.size(); i++) {
+ // Get the histogram object.
+ IHistogram1D histogram = (IHistogram1D) fileTree.find(histogramNames1D.get(i));
+
+ // Iterate over the bins.
+ for(int x = 0; x < xBins1D.get(i); x++) {
+ // Get the entries in this bin and the bin average.
+ int entries = histogram.binEntries(x);
+ double average = histogram.binMean(x);
+
+ // Add the entries to the compiled plot.
+ for(int j = 0; j < entries; j++) {
+ histograms1D.get(i).fill(average);
+ }
+ }
+ }
+ for(int i = 0; i < histogramNames2D.size(); i++) {
+ // Get the histogram object.
+ IHistogram2D histogram = (IHistogram2D) fileTree.find(histogramNames2D.get(i));
+
+ // Iterate over the bins.
+ for(int x = 0; x < xBins2D.get(i); x++) {
+ for(int y = 0; y < yBins2D.get(i); y++) {
+ // Get the entries in this bin and the bin average.
+ int entries = histogram.binEntries(x, y);
+ double averageX = histogram.binMeanX(x, y);
+ double averageY = histogram.binMeanY(x, y);
+
+ // Add the entries to the compiled plot.
+ for(int j = 0; j < entries; j++) {
+ histograms2D.get(i).fill(averageX, averageY);
+ }
+ }
+ }
+ }
+ }
+
+ // Save the compiled plots to a new file.
+ aida.saveAs(rootDir + "compiled-plots.aida");
+ System.out.println("Plots written to path " + rootDir + "compiled-plots.aida");
+ }
+
+ private static final List<String> getTreeFiles(ITree tree) {
+ return getTreeFiles(tree, "/");
+ }
+
+ private static final List<String> getTreeFiles(ITree tree, String rootDir) {
+ // Make a list to contain the plot names.
+ List<String> list = new ArrayList<String>();
+
+ // Iterate over the objects at the indicated directory of the tree.
+ String objectNames[] = tree.listObjectNames(rootDir);
+ for(String objectName : objectNames) {
+ // Convert the object name to a char array and check the
+ // last character. Directories end in '/'.
+ char[] plotChars = objectName.toCharArray();
+
+ // If the object is a directory, process any objects inside
+ // of it as well.
+ if(plotChars[plotChars.length - 1] == '/') {
+ List<String> dirList = getTreeFiles(tree, objectName);
+ list.addAll(dirList);
+ }
+
+ // Otherwise, just add the object to the list.
+ else { list.add(objectName); }
+ }
+
+ // Return the compiled list.
+ return list;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot.java Wed Mar 9 11:43:24 2016
@@ -1,25 +1,25 @@
package org.hps.users.kmccarty.plots;
public abstract class FormattedPlot {
- private final String xAxis;
- private final String yAxis;
- private final String plotName;
-
- public FormattedPlot(String xAxis, String yAxis, String plotName) {
- this.xAxis = xAxis;
- this.yAxis = yAxis;
- this.plotName = plotName;
- }
-
- public String getPlotName() {
- return plotName;
- }
-
- public String getXAxisName() {
- return xAxis;
- }
-
- public String getYAxisName() {
- return yAxis;
- }
+ private final String xAxis;
+ private final String yAxis;
+ private final String plotName;
+
+ public FormattedPlot(String xAxis, String yAxis, String plotName) {
+ this.xAxis = xAxis;
+ this.yAxis = yAxis;
+ this.plotName = plotName;
+ }
+
+ public String getPlotName() {
+ return plotName;
+ }
+
+ public String getXAxisName() {
+ return xAxis;
+ }
+
+ public String getYAxisName() {
+ return yAxis;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot1D.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot1D.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot1D.java Wed Mar 9 11:43:24 2016
@@ -5,37 +5,37 @@
import hep.aida.IHistogram1D;
public class FormattedPlot1D extends FormattedPlot {
- private final ColorStyle style;
- private final IHistogram1D plot;
- private final double axisRange;
-
- public FormattedPlot1D(IHistogram1D plot, ColorStyle style, String xAxis, String yAxis, String plotName) {
- super(xAxis, yAxis, plotName);
- this.plot = plot;
- this.style = style;
- this.axisRange = -1;
- }
-
- public FormattedPlot1D(IHistogram1D plot, ColorStyle style, String xAxis, String yAxis, String plotName, double axisRange) {
- super(xAxis, yAxis, plotName);
- this.plot = plot;
- this.style = style;
- this.axisRange = axisRange;
- }
-
- public IHistogram1D getPlot() {
- return plot;
- }
-
- public ColorStyle getColorStyle() {
- return style;
- }
-
- public boolean definesAxisRange() {
- return axisRange != -1;
- }
-
- public double getAxisRange() {
- return axisRange;
- }
+ private final ColorStyle style;
+ private final IHistogram1D plot;
+ private final double axisRange;
+
+ public FormattedPlot1D(IHistogram1D plot, ColorStyle style, String xAxis, String yAxis, String plotName) {
+ super(xAxis, yAxis, plotName);
+ this.plot = plot;
+ this.style = style;
+ this.axisRange = -1;
+ }
+
+ public FormattedPlot1D(IHistogram1D plot, ColorStyle style, String xAxis, String yAxis, String plotName, double axisRange) {
+ super(xAxis, yAxis, plotName);
+ this.plot = plot;
+ this.style = style;
+ this.axisRange = axisRange;
+ }
+
+ public IHistogram1D getPlot() {
+ return plot;
+ }
+
+ public ColorStyle getColorStyle() {
+ return style;
+ }
+
+ public boolean definesAxisRange() {
+ return axisRange != -1;
+ }
+
+ public double getAxisRange() {
+ return axisRange;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot2D.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot2D.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/FormattedPlot2D.java Wed Mar 9 11:43:24 2016
@@ -3,48 +3,48 @@
import hep.aida.IHistogram2D;
public class FormattedPlot2D extends FormattedPlot {
- private final IHistogram2D plot;
- private final boolean logarithmic;
- private final double xAxisRange;
- private final double yAxisRange;
-
- public FormattedPlot2D(IHistogram2D plot, boolean logarithmic, String xAxis, String yAxis, String plotName) {
- super(xAxis, yAxis, plotName);
- this.plot = plot;
- this.xAxisRange = -1;
- this.yAxisRange = -1;
- this.logarithmic = logarithmic;
- }
-
- public FormattedPlot2D(IHistogram2D plot, boolean logarithmic, String xAxis, String yAxis, String plotName, double xAxisRange, double yAxisRange) {
- super(xAxis, yAxis, plotName);
- this.plot = plot;
- this.xAxisRange = xAxisRange;
- this.yAxisRange = yAxisRange;
- this.logarithmic = logarithmic;
- }
-
- public IHistogram2D getPlot() {
- return plot;
- }
-
- public boolean isLogarithmic() {
- return logarithmic;
- }
-
- public boolean definesXAxisRange() {
- return xAxisRange != -1;
- }
-
- public boolean definesYAxisRange() {
- return yAxisRange != -1;
- }
-
- public double getXAxisRange() {
- return xAxisRange;
- }
-
- public double getYAxisRange() {
- return yAxisRange;
- }
+ private final IHistogram2D plot;
+ private final boolean logarithmic;
+ private final double xAxisRange;
+ private final double yAxisRange;
+
+ public FormattedPlot2D(IHistogram2D plot, boolean logarithmic, String xAxis, String yAxis, String plotName) {
+ super(xAxis, yAxis, plotName);
+ this.plot = plot;
+ this.xAxisRange = -1;
+ this.yAxisRange = -1;
+ this.logarithmic = logarithmic;
+ }
+
+ public FormattedPlot2D(IHistogram2D plot, boolean logarithmic, String xAxis, String yAxis, String plotName, double xAxisRange, double yAxisRange) {
+ super(xAxis, yAxis, plotName);
+ this.plot = plot;
+ this.xAxisRange = xAxisRange;
+ this.yAxisRange = yAxisRange;
+ this.logarithmic = logarithmic;
+ }
+
+ public IHistogram2D getPlot() {
+ return plot;
+ }
+
+ public boolean isLogarithmic() {
+ return logarithmic;
+ }
+
+ public boolean definesXAxisRange() {
+ return xAxisRange != -1;
+ }
+
+ public boolean definesYAxisRange() {
+ return yAxisRange != -1;
+ }
+
+ public double getXAxisRange() {
+ return xAxisRange;
+ }
+
+ public double getYAxisRange() {
+ return yAxisRange;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotFormatModule.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotFormatModule.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotFormatModule.java Wed Mar 9 11:43:24 2016
@@ -17,189 +17,189 @@
import java.util.List;
public class PlotFormatModule {
- private String width = "2000";
- private String height = "1200";
- private List<FormattedPlot1D> formattedPlots1D = new ArrayList<FormattedPlot1D>();
- private List<FormattedPlot2D> formattedPlots2D = new ArrayList<FormattedPlot2D>();
-
- public void addPlot1D(FormattedPlot1D plot) {
- formattedPlots1D.add(plot);
- }
-
- public void addPlot2D(FormattedPlot2D plot) {
- formattedPlots2D.add(plot);
- }
-
- public void setDisplayHeight(int height) {
- this.height = "" + height;
- }
-
- public void setDisplayWidth(int width) {
- this.width = "" + width;
- }
-
- public void displayPlots() {
- try { processPlots(null); }
- catch (IOException e) { e.printStackTrace(); }
- }
-
- public void savePlots(String filePath) throws IOException {
- processPlots(filePath);
- }
-
- private void processPlots(String filePath) throws IOException {
- // Create a plotter factory.
- IAnalysisFactory af = IAnalysisFactory.create();
- IPlotterFactory plotterFactory = af.createPlotterFactory();
-
- // Format and display the 1D plots.
- for(FormattedPlot1D formattedPlot : formattedPlots1D) {
- // Get the plot.
- IHistogram1D plot = formattedPlot.getPlot();
-
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create(plot.title());
- plotter.createRegions(1);
- plotter.region(0).plot(plot);
-
- // Set the axis range.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- if(formattedPlot.definesAxisRange()) {
- region.getPlot().getXAxis().setMax(formattedPlot.getAxisRange());
- }
-
- // Format the axis labels.
- region.getPlot().setTitle(formattedPlot.getPlotName());
- region.getPlot().getXAxis().setLabel(formattedPlot.getXAxisName());
- region.getPlot().getYAxis().setLabel(formattedPlot.getYAxisName());
-
- // Format the fonts and general plot presentation.
- PlotsFormatter.setDefault1DStyle(region, new ColorStyle[] { formattedPlot.getColorStyle() });
-
- // Set the plotter dimensions.
- plotter.setParameter("plotterWidth", width);
- plotter.setParameter("plotterHeight", height);
-
- // If the file path is null, display the plots. Otherwise,
- // save them to the destination folder.
- if(filePath == null) { plotter.show(); }
- else {
- File plotFile = new File(filePath + formattedPlot.getPlotName() + ".png");
- if(plotFile.exists()) { plotFile.delete(); }
- plotter.writeToFile(filePath + formattedPlot.getPlotName() + ".png");
- System.out.printf("Saved plot \"%s\" to path: %s%n", formattedPlot.getPlotName(), filePath + formattedPlot.getPlotName() + ".png");
- }
- }
-
- // Format and display the 2D plots.
- for(FormattedPlot2D formattedPlot : formattedPlots2D) {
- // Get the plot.
- IHistogram2D plot = formattedPlot.getPlot();
-
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create(formattedPlot.getPlotName());
- plotter.createRegions(1);
- plotter.region(0).plot(plot);
-
- // Set the axis range.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- if(formattedPlot.definesXAxisRange()) {
- region.getPlot().getXAxis().setMax(formattedPlot.getXAxisRange());
- } if(formattedPlot.definesYAxisRange()) {
- region.getPlot().getYAxis().setMax(formattedPlot.getYAxisRange());
- }
-
- // Format the axis labels.
- region.getPlot().setTitle(formattedPlot.getPlotName());
- region.getPlot().getXAxis().setLabel(formattedPlot.getXAxisName());
- region.getPlot().getYAxis().setLabel(formattedPlot.getYAxisName());
-
- // Format the fonts and general plot presentation.
- PlotsFormatter.setDefault2DStyle(region, formattedPlot.isLogarithmic());
-
- // Set the plotter dimensions.
- plotter.setParameter("plotterWidth", width);
- plotter.setParameter("plotterHeight", height);
-
- // If the file path is null, display the plots. Otherwise,
- // save them to the destination folder.
- if(filePath == null) { plotter.show(); }
- else {
- File plotFile = new File(filePath + formattedPlot.getPlotName() + ".png");
- if(plotFile.exists()) { plotFile.delete(); }
- plotter.writeToFile(filePath + formattedPlot.getPlotName() + ".png");
- System.out.printf("Saved plot \"%s\" to path: %s%n", formattedPlot.getPlotName(), filePath + formattedPlot.getPlotName() + ".png");
- }
- }
- }
-
- public void exportPlots(String filePath) throws IOException {
- // Export the 1D plots in a text format.
- for(FormattedPlot1D plot : formattedPlots1D) {
- exportPlot(filePath, plot);
- }
-
- // Export the 2D plots in a text format.
- for(FormattedPlot2D plot : formattedPlots2D) {
- exportPlot(filePath, plot);
- }
- }
-
- private static final void exportPlot(String filePath, FormattedPlot plot) throws IOException {
- // Check if this is a one or two dimensional plot.
- boolean is1D = plot instanceof FormattedPlot1D;
-
- // Create a file object for the plot.
- String plotPath = filePath + plot.getPlotName() + (is1D ? ".aida1D" : ".aida2D");
- File datFile = new File(plotPath);
-
- // If the plot file already exists, delete it.
- if(datFile.exists()) { datFile.delete(); }
-
- // Create a new file for the plot to occupy.
- datFile.createNewFile();
-
- // Get the textual form of the plot.
- String plotText = null;
- if(is1D) { plotText = toTextFormat(((FormattedPlot1D) plot).getPlot()); }
- else { plotText = toTextFormat(((FormattedPlot2D) plot).getPlot()); }
-
- // Write the plot text to the file.
- BufferedWriter writer = new BufferedWriter(new FileWriter(datFile));
- writer.write(plotText);
- writer.close();
-
- // Note that the file was written.
- System.out.printf("Plot \"%s\" was exported to path: %s%n", plot.getPlotName(), plotPath);
- }
-
- private static final String toTextFormat(IHistogram1D plot) {
- // Create a buffer to hold the converted plot.
- StringBuffer buffer = new StringBuffer();
-
- // Iterate over the bins and output the plot in the format of
- // "[BIN_MEAN] [BIN_VALUE]" with a tab delimiter.
- for(int bin = 0; bin < plot.axis().bins(); bin++) {
- buffer.append(String.format("%f\t%f%n", plot.binMean(bin), plot.binHeight(bin)));
- }
-
- // Return the converted file.
- return buffer.toString();
- }
-
- private static final String toTextFormat(IHistogram2D plot) {
- // Create a buffer to hold the converted plot.
- StringBuffer buffer = new StringBuffer();
-
- // Iterate over the bins and output the plot in the format of
- // "[X_BIN_MEAN] [Y_BIN_MEAN] [BIN_VALUE]" with a tab delimiter.
- for(int xBin = 0; xBin < plot.xAxis().bins(); xBin++) {
- for(int yBin = 0; yBin < plot.yAxis().bins(); yBin++) {
- buffer.append(String.format("%f\t%f\t%f%n", plot.binMeanX(xBin, yBin), plot.binMeanY(xBin, yBin), plot.binHeight(xBin, yBin)));
- }
- }
-
- // Return the converted file.
- return buffer.toString();
- }
+ private String width = "2000";
+ private String height = "1200";
+ private List<FormattedPlot1D> formattedPlots1D = new ArrayList<FormattedPlot1D>();
+ private List<FormattedPlot2D> formattedPlots2D = new ArrayList<FormattedPlot2D>();
+
+ public void addPlot1D(FormattedPlot1D plot) {
+ formattedPlots1D.add(plot);
+ }
+
+ public void addPlot2D(FormattedPlot2D plot) {
+ formattedPlots2D.add(plot);
+ }
+
+ public void setDisplayHeight(int height) {
+ this.height = "" + height;
+ }
+
+ public void setDisplayWidth(int width) {
+ this.width = "" + width;
+ }
+
+ public void displayPlots() {
+ try { processPlots(null); }
+ catch (IOException e) { e.printStackTrace(); }
+ }
+
+ public void savePlots(String filePath) throws IOException {
+ processPlots(filePath);
+ }
+
+ private void processPlots(String filePath) throws IOException {
+ // Create a plotter factory.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ IPlotterFactory plotterFactory = af.createPlotterFactory();
+
+ // Format and display the 1D plots.
+ for(FormattedPlot1D formattedPlot : formattedPlots1D) {
+ // Get the plot.
+ IHistogram1D plot = formattedPlot.getPlot();
+
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create(plot.title());
+ plotter.createRegions(1);
+ plotter.region(0).plot(plot);
+
+ // Set the axis range.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ if(formattedPlot.definesAxisRange()) {
+ region.getPlot().getXAxis().setMax(formattedPlot.getAxisRange());
+ }
+
+ // Format the axis labels.
+ region.getPlot().setTitle(formattedPlot.getPlotName());
+ region.getPlot().getXAxis().setLabel(formattedPlot.getXAxisName());
+ region.getPlot().getYAxis().setLabel(formattedPlot.getYAxisName());
+
+ // Format the fonts and general plot presentation.
+ PlotsFormatter.setDefault1DStyle(region, new ColorStyle[] { formattedPlot.getColorStyle() });
+
+ // Set the plotter dimensions.
+ plotter.setParameter("plotterWidth", width);
+ plotter.setParameter("plotterHeight", height);
+
+ // If the file path is null, display the plots. Otherwise,
+ // save them to the destination folder.
+ if(filePath == null) { plotter.show(); }
+ else {
+ File plotFile = new File(filePath + formattedPlot.getPlotName() + ".png");
+ if(plotFile.exists()) { plotFile.delete(); }
+ plotter.writeToFile(filePath + formattedPlot.getPlotName() + ".png");
+ System.out.printf("Saved plot \"%s\" to path: %s%n", formattedPlot.getPlotName(), filePath + formattedPlot.getPlotName() + ".png");
+ }
+ }
+
+ // Format and display the 2D plots.
+ for(FormattedPlot2D formattedPlot : formattedPlots2D) {
+ // Get the plot.
+ IHistogram2D plot = formattedPlot.getPlot();
+
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create(formattedPlot.getPlotName());
+ plotter.createRegions(1);
+ plotter.region(0).plot(plot);
+
+ // Set the axis range.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ if(formattedPlot.definesXAxisRange()) {
+ region.getPlot().getXAxis().setMax(formattedPlot.getXAxisRange());
+ } if(formattedPlot.definesYAxisRange()) {
+ region.getPlot().getYAxis().setMax(formattedPlot.getYAxisRange());
+ }
+
+ // Format the axis labels.
+ region.getPlot().setTitle(formattedPlot.getPlotName());
+ region.getPlot().getXAxis().setLabel(formattedPlot.getXAxisName());
+ region.getPlot().getYAxis().setLabel(formattedPlot.getYAxisName());
+
+ // Format the fonts and general plot presentation.
+ PlotsFormatter.setDefault2DStyle(region, formattedPlot.isLogarithmic());
+
+ // Set the plotter dimensions.
+ plotter.setParameter("plotterWidth", width);
+ plotter.setParameter("plotterHeight", height);
+
+ // If the file path is null, display the plots. Otherwise,
+ // save them to the destination folder.
+ if(filePath == null) { plotter.show(); }
+ else {
+ File plotFile = new File(filePath + formattedPlot.getPlotName() + ".png");
+ if(plotFile.exists()) { plotFile.delete(); }
+ plotter.writeToFile(filePath + formattedPlot.getPlotName() + ".png");
+ System.out.printf("Saved plot \"%s\" to path: %s%n", formattedPlot.getPlotName(), filePath + formattedPlot.getPlotName() + ".png");
+ }
+ }
+ }
+
+ public void exportPlots(String filePath) throws IOException {
+ // Export the 1D plots in a text format.
+ for(FormattedPlot1D plot : formattedPlots1D) {
+ exportPlot(filePath, plot);
+ }
+
+ // Export the 2D plots in a text format.
+ for(FormattedPlot2D plot : formattedPlots2D) {
+ exportPlot(filePath, plot);
+ }
+ }
+
+ private static final void exportPlot(String filePath, FormattedPlot plot) throws IOException {
+ // Check if this is a one or two dimensional plot.
+ boolean is1D = plot instanceof FormattedPlot1D;
+
+ // Create a file object for the plot.
+ String plotPath = filePath + plot.getPlotName() + (is1D ? ".aida1D" : ".aida2D");
+ File datFile = new File(plotPath);
+
+ // If the plot file already exists, delete it.
+ if(datFile.exists()) { datFile.delete(); }
+
+ // Create a new file for the plot to occupy.
+ datFile.createNewFile();
+
+ // Get the textual form of the plot.
+ String plotText = null;
+ if(is1D) { plotText = toTextFormat(((FormattedPlot1D) plot).getPlot()); }
+ else { plotText = toTextFormat(((FormattedPlot2D) plot).getPlot()); }
+
+ // Write the plot text to the file.
+ BufferedWriter writer = new BufferedWriter(new FileWriter(datFile));
+ writer.write(plotText);
+ writer.close();
+
+ // Note that the file was written.
+ System.out.printf("Plot \"%s\" was exported to path: %s%n", plot.getPlotName(), plotPath);
+ }
+
+ private static final String toTextFormat(IHistogram1D plot) {
+ // Create a buffer to hold the converted plot.
+ StringBuffer buffer = new StringBuffer();
+
+ // Iterate over the bins and output the plot in the format of
+ // "[BIN_MEAN] [BIN_VALUE]" with a tab delimiter.
+ for(int bin = 0; bin < plot.axis().bins(); bin++) {
+ buffer.append(String.format("%f\t%f%n", plot.binMean(bin), plot.binHeight(bin)));
+ }
+
+ // Return the converted file.
+ return buffer.toString();
+ }
+
+ private static final String toTextFormat(IHistogram2D plot) {
+ // Create a buffer to hold the converted plot.
+ StringBuffer buffer = new StringBuffer();
+
+ // Iterate over the bins and output the plot in the format of
+ // "[X_BIN_MEAN] [Y_BIN_MEAN] [BIN_VALUE]" with a tab delimiter.
+ for(int xBin = 0; xBin < plot.xAxis().bins(); xBin++) {
+ for(int yBin = 0; yBin < plot.yAxis().bins(); yBin++) {
+ buffer.append(String.format("%f\t%f\t%f%n", plot.binMeanX(xBin, yBin), plot.binMeanY(xBin, yBin), plot.binHeight(xBin, yBin)));
+ }
+ }
+
+ // Return the converted file.
+ return buffer.toString();
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotsFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotsFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/PlotsFormatter.java Wed Mar 9 11:43:24 2016
@@ -8,120 +8,120 @@
import java.awt.Font;
public class PlotsFormatter {
- // Define plot fonts.
- public static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 30);
- public static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 35);
- public static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 45);
-
- // Defines the color style options for plot data.
- public static enum ColorStyle {
- MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
- MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
- MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
- RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
- FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
- TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
- BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
- PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
-
- private final Color fillColor;
- private final Color lineColor;
-
- private ColorStyle(Color fillColor, Color lineColor) {
- this.fillColor = fillColor;
- this.lineColor = lineColor;
- }
-
- public Color getFillColor() { return fillColor; }
-
- public Color getLineColor() { return lineColor; }
- };
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- * @param color - The data color settings to use.
- */
- public static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
- // Get the names of each plot on in the region.
- String[] dataNames = region.getAllDataNames();
-
- // Check whether this is an overlay plot. Overlay plots contain
- // more than one data name.
- boolean overlay = (dataNames.length > 1 ? true : false);
-
- // Iterate over each plot in the region.
- for(int i = 0; i < dataNames.length; i++) {
- // Set the overlay style if needed.
- if(overlay) {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with no fill. The color is set by the "color" argument.
- fillStyle.setHistogramFill(false);
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarLineColor(color[i].getFillColor());
-
- // Set the legend text style.
- region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
- }
-
- // Otherwise, set the fill style for a single plot.
- else {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with a fill color. The colors are defined by the
- // "color" argument.
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarColor(color[i].getFillColor());
- fillStyle.setHistogramBarLineColor(color[i].getLineColor());
- }
-
- // Set the statistics box style.
- region.getPlot().getStats().setVisible(true);
- region.getPlot().getStats().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
- }
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- */
- public static final void setDefault2DStyle(PlotterRegion region, boolean logarithmic) {
- // Get the fill style object. 2D plots should never be overlay
- // plots, so there should only ever be one data name.
- JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
-
- // Set the fill style for a two-dimensional plot.
- if(logarithmic) { fillStyle.setLogZ(true); }
- fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
- fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
-
- // Make the statistics box invisible.
- region.getPlot().getStats().setVisible(false);
-
- // Set the general plot font (which is also the z-axis font).
- region.getPlot().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
+ // Define plot fonts.
+ public static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 30);
+ public static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 35);
+ public static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 45);
+
+ // Defines the color style options for plot data.
+ public static enum ColorStyle {
+ MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
+ MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
+ MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
+ RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
+ FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
+ TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
+ BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
+ PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
+
+ private final Color fillColor;
+ private final Color lineColor;
+
+ private ColorStyle(Color fillColor, Color lineColor) {
+ this.fillColor = fillColor;
+ this.lineColor = lineColor;
+ }
+
+ public Color getFillColor() { return fillColor; }
+
+ public Color getLineColor() { return lineColor; }
+ };
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ * @param color - The data color settings to use.
+ */
+ public static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
+ // Get the names of each plot on in the region.
+ String[] dataNames = region.getAllDataNames();
+
+ // Check whether this is an overlay plot. Overlay plots contain
+ // more than one data name.
+ boolean overlay = (dataNames.length > 1 ? true : false);
+
+ // Iterate over each plot in the region.
+ for(int i = 0; i < dataNames.length; i++) {
+ // Set the overlay style if needed.
+ if(overlay) {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with no fill. The color is set by the "color" argument.
+ fillStyle.setHistogramFill(false);
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarLineColor(color[i].getFillColor());
+
+ // Set the legend text style.
+ region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
+ }
+
+ // Otherwise, set the fill style for a single plot.
+ else {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with a fill color. The colors are defined by the
+ // "color" argument.
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarColor(color[i].getFillColor());
+ fillStyle.setHistogramBarLineColor(color[i].getLineColor());
+ }
+
+ // Set the statistics box style.
+ region.getPlot().getStats().setVisible(true);
+ region.getPlot().getStats().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
+ }
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ */
+ public static final void setDefault2DStyle(PlotterRegion region, boolean logarithmic) {
+ // Get the fill style object. 2D plots should never be overlay
+ // plots, so there should only ever be one data name.
+ JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
+
+ // Set the fill style for a two-dimensional plot.
+ if(logarithmic) { fillStyle.setLogZ(true); }
+ fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
+ fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
+
+ // Make the statistics box invisible.
+ region.getPlot().getStats().setVisible(false);
+
+ // Set the general plot font (which is also the z-axis font).
+ region.getPlot().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/InvariantMassPlotsFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/InvariantMassPlotsFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/InvariantMassPlotsFormatter.java Wed Mar 9 11:43:24 2016
@@ -19,317 +19,317 @@
import hep.aida.ref.plotter.PlotterRegion;
public class InvariantMassPlotsFormatter {
- // Define plot fonts.
- private static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 20);
- private static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 25);
- private static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 35);
-
- // Defines the color style options for plot data.
- private enum ColorStyle {
- MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
- MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
- MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
- RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
- FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
- TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
- BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
- PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
-
- private final Color fillColor;
- private final Color lineColor;
-
- private ColorStyle(Color fillColor, Color lineColor) {
- this.fillColor = fillColor;
- this.lineColor = lineColor;
- }
-
- public Color getFillColor() { return fillColor; }
-
- public Color getLineColor() { return lineColor; }
- };
-
- /**
- * Loads all plots in a file and formats them according to the
- * indicated style.
- * @param args - Unused default executable parameter.
- * @throws IOException Occurs if there is an issue opening the file.
- */
- public static void main(String[] args) throws IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\";
-
- // Define the new name of the file containing the trigger plots.
- String[] plotFile = {
- rootDir + "temp.aida"
- };
-
- // Define the run numbers for each file.
- String[] runNumber = { "1 Hits", "2 Hits" };
-
- // Define the scaling factors for each plot.
- double scaleFactor = 13.254;
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree[] tree = new ITree[plotFile.length];
- for(int i = 0; i < plotFile.length; i++) {
- tree[i] = af.createTreeFactory().create(plotFile[i]);
- if(tree[i] == null) { throw new IllegalArgumentException("Unable to load plot file."); }
- }
-
- // Get the histograms.
- IHistogram1D[] invariantMassPlots = new IHistogram1D[3];
- invariantMassPlots[0] = (IHistogram1D) tree[0].find("Trident Analysis/Particle Invariant Mass (1 Hit)");
- invariantMassPlots[1] = (IHistogram1D) tree[0].find("Trident Analysis/Particle Invariant Mass (2 Hit)");
- IHistogram1D electronEnergyPlot = (IHistogram1D) tree[0].find("Trident Analysis/Electron Energy");
- IHistogram1D positronEnergyPlot = (IHistogram1D) tree[0].find("Trident Analysis/Positron Energy");
- IHistogram1D energySumPlot = (IHistogram1D) tree[0].find("Trident Analysis/Energy Sum Distribution");
- IHistogram2D energySum2DPlot = (IHistogram2D) tree[0].find("Trident Analysis/2D Energy Distribution");
- IHistogram1D tridentElectronEnergyPlot = (IHistogram1D) tree[0].find("Trident Analysis/Trident Electron Energy");
- IHistogram1D tridentPositronEnergyPlot = (IHistogram1D) tree[0].find("Trident Analysis/Trident Positron Energy");
-
- // Define the plot titles and arrays.
- IHistogram[] plots = { electronEnergyPlot, positronEnergyPlot, energySumPlot, tridentElectronEnergyPlot, tridentPositronEnergyPlot };
- String[] titles = { "Electron Energy", "Positron Energy", "Energy Sum", "Trident Electron Energy", "Trident Positron Energy" };
- String[] xTitles = { "Energy (GeV)", "Energy (GeV)", "Energy Sum (GeV)", "Energy (GeV)", "Energy (GeV)" };
-
- // Re-bin the histograms to have 5-times larger bins. First,
- // get the bin count and upper and lower bounds of the plot.
- int bins = invariantMassPlots[0].axis().bins();
- double low = invariantMassPlots[0].axis().binLowerEdge(0);
- double high = invariantMassPlots[0].axis().binUpperEdge(invariantMassPlots[0].axis().bins() - 1);
-
- // Create new plots with the larger bin sizes.
- AIDA aida = AIDA.defaultInstance();
- IHistogram1D[] newPlot = new IHistogram1D[2];
- newPlot[0] = aida.histogram1D("Particle Invariant Mass (1 Hit)", bins / 5, low, high);
- newPlot[1] = aida.histogram1D("Particle Invariant Mass (2 Hit)", bins / 5, low, high);
-
- // Populate the new plots with the data from the old ones.
- for(int j = 0; j < 2; j++) {
- for(int i = 0; i < bins; i++) {
- int entries = invariantMassPlots[j].binEntries(i);
- double center = invariantMassPlots[j].axis().binCenter(i);
- for(int k = 0; k < entries; k++) {
- newPlot[j].fill(center);
- }
- }
- }
-
- // Replace the old plots.
- invariantMassPlots = newPlot;
-
- // Create a plotter factory.
- IPlotterFactory plotterFactory = af.createPlotterFactory();
-
- // Format and display the basic histograms.
- for(int i = 0; i < plots.length; i++) {
- // Scale the histogram by the appropriate scaling factor.
- plots[i].scale(1.0 / scaleFactor);
-
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create(titles[i]);
- plotter.createRegions(1);
- plotter.region(0).plot(plots[i]);
-
- // Format the axis labels.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- region.getPlot().setTitle(titles[i]);
- region.getPlot().getXAxis().setLabel(xTitles[i]);
- region.getPlot().getYAxis().setLabel("Rate (Hz)");
-
- // Format the fonts and general plot presentation.
- setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
-
- // Show the plot.
- plotter.setParameter("plotterWidth", "2000");
- plotter.setParameter("plotterHeight", "1200");
- plotter.show();
- }
-
- // Format and display the 2D histogram.
- energySum2DPlot.scale(1.0 / scaleFactor);
- IPlotter plotter2D = plotterFactory.create("2D Energy Sum");
- plotter2D.createRegions(1);
- plotter2D.region(0).plot(energySum2DPlot);
-
- // Format the axis labels.
- PlotterRegion region2D = (PlotterRegion) plotter2D.region(0);
- region2D.getPlot().setTitle("2D Energy Sum");
- region2D.getPlot().getXAxis().setLabel("Electron Energy (GeV)");
- region2D.getPlot().getYAxis().setLabel("Positron Energy (GeV)");
-
- // Format the fonts and general plot presentation.
- setDefault2DStyle(region2D, false);
-
- // Show the plot.
- plotter2D.setParameter("plotterWidth", "2000");
- plotter2D.setParameter("plotterHeight", "1200");
- plotter2D.show();
-
- // Format and display the histograms.
- for(int i = 0; i < 2; i++) {
- // Scale the histogram by the appropriate scaling factor.
- invariantMassPlots[i].scale(1.0 / scaleFactor);
-
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create("Particle Invariant Mass (" + runNumber[i] + ")");
- plotter.createRegions(1);
- plotter.region(0).plot(invariantMassPlots[i]);
-
- // Format the axis labels.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- region.getPlot().setTitle("Particle Invariant Mass (" + runNumber[i] + ")");
- region.getPlot().getXAxis().setLabel("Invariant Mass (GeV)");
- region.getPlot().getYAxis().setLabel("Rate (Hz)");
-
- // Format the fonts and general plot presentation.
- setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
-
- // Show the plot.
- plotter.setParameter("plotterWidth", "2000");
- plotter.setParameter("plotterHeight", "1200");
- plotter.show();
- }
-
- // Note which plot is the numerator and which is the denominator.
- int numerator = 0;
- int denominator = 1;
-
- // Create a new histogram to display the ratios of the rates.
- IHistogram1D ratioPlot = AIDA.defaultInstance().histogram1D("Invariant Mass Ratio (" + runNumber[numerator] + " / "
- + runNumber[denominator] + ")", invariantMassPlots[0].axis().bins(),
- invariantMassPlots[0].axis().lowerEdge(), invariantMassPlots[0].axis().upperEdge());
-
- // Iterate over each bin.
- for(int bin = 0; bin < invariantMassPlots[0].axis().bins(); bin++) {
- // Calculate the ratio.
- double ratio = invariantMassPlots[numerator].binHeight(bin) / invariantMassPlots[denominator].binHeight(bin);
-
- // If the ratio is either not a number of infinite, skip
- // this bin.
- if(Double.isNaN(ratio) || Double.isInfinite(ratio)) { continue; }
-
- // Populate the ratio plot bin.
- ratioPlot.fill(invariantMassPlots[0].axis().binCenter(bin), ratio);
- }
-
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create("Invariant Mass Ratio (5411 / 5554)");
- plotter.createRegions(1);
- plotter.region(0).plot(ratioPlot);
-
- // Format the axis labels.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- region.getPlot().setTitle("Invariant Mass Ratio (" + runNumber[numerator] + " / " + runNumber[denominator] + ")");
- region.getPlot().getXAxis().setLabel("Invariant Mass (GeV)");
- region.getPlot().getXAxis().setMin(0.010);
- region.getPlot().getXAxis().setMax(0.060);
- region.getPlot().getYAxis().setLabel("Ratio");
-
- // Format the fonts and general plot presentation.
- setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
-
- // Disable the error bars.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
- fillStyle.setShowErrorBars(false);
-
- // Show the plot.
- plotter.setParameter("plotterWidth", "2000");
- plotter.setParameter("plotterHeight", "1200");
- plotter.show();
-
- // Close the trees.
- for(int i = 0; i < plotFile.length; i++) {
- tree[i].close();
- }
- }
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- * @param color - The data color settings to use.
- */
- private static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
- // Get the names of each plot on in the region.
- String[] dataNames = region.getAllDataNames();
-
- // Check whether this is an overlay plot. Overlay plots contain
- // more than one data name.
- boolean overlay = (dataNames.length > 1 ? true : false);
-
- // Iterate over each plot in the region.
- for(int i = 0; i < dataNames.length; i++) {
- // Set the overlay style if needed.
- if(overlay) {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with no fill. The color is set by the "color" argument.
- fillStyle.setHistogramFill(false);
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarLineColor(color[i].getFillColor());
-
- // Set the legend text style.
- region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
- }
-
- // Otherwise, set the fill style for a single plot.
- else {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with a fill color. The colors are defined by the
- // "color" argument.
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarColor(color[i].getFillColor());
- fillStyle.setHistogramBarLineColor(color[i].getLineColor());
- }
-
- // Set the statistics box style.
- region.getPlot().getStats().setVisible(true);
- region.getPlot().getStats().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
- }
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- */
- private static final void setDefault2DStyle(PlotterRegion region, boolean logarithmic) {
- // Get the fill style object. 2D plots should never be overlay
- // plots, so there should only ever be one data name.
- JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
-
- // Set the fill style for a two-dimensional plot.
- if(logarithmic) { fillStyle.setLogZ(true); }
- fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
- fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
-
- // Make the statistics box invisible.
- region.getPlot().getStats().setVisible(false);
-
- // Set the general plot font (which is also the z-axis font).
- region.getPlot().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
+ // Define plot fonts.
+ private static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 20);
+ private static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 25);
+ private static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 35);
+
+ // Defines the color style options for plot data.
+ private enum ColorStyle {
+ MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
+ MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
+ MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
+ RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
+ FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
+ TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
+ BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
+ PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
+
+ private final Color fillColor;
+ private final Color lineColor;
+
+ private ColorStyle(Color fillColor, Color lineColor) {
+ this.fillColor = fillColor;
+ this.lineColor = lineColor;
+ }
+
+ public Color getFillColor() { return fillColor; }
+
+ public Color getLineColor() { return lineColor; }
+ };
+
+ /**
+ * Loads all plots in a file and formats them according to the
+ * indicated style.
+ * @param args - Unused default executable parameter.
+ * @throws IOException Occurs if there is an issue opening the file.
+ */
+ public static void main(String[] args) throws IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String[] plotFile = {
+ rootDir + "temp.aida"
+ };
+
+ // Define the run numbers for each file.
+ String[] runNumber = { "1 Hits", "2 Hits" };
+
+ // Define the scaling factors for each plot.
+ double scaleFactor = 13.254;
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree[] tree = new ITree[plotFile.length];
+ for(int i = 0; i < plotFile.length; i++) {
+ tree[i] = af.createTreeFactory().create(plotFile[i]);
+ if(tree[i] == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+ }
+
+ // Get the histograms.
+ IHistogram1D[] invariantMassPlots = new IHistogram1D[3];
+ invariantMassPlots[0] = (IHistogram1D) tree[0].find("Trident Analysis/Particle Invariant Mass (1 Hit)");
+ invariantMassPlots[1] = (IHistogram1D) tree[0].find("Trident Analysis/Particle Invariant Mass (2 Hit)");
+ IHistogram1D electronEnergyPlot = (IHistogram1D) tree[0].find("Trident Analysis/Electron Energy");
+ IHistogram1D positronEnergyPlot = (IHistogram1D) tree[0].find("Trident Analysis/Positron Energy");
+ IHistogram1D energySumPlot = (IHistogram1D) tree[0].find("Trident Analysis/Energy Sum Distribution");
+ IHistogram2D energySum2DPlot = (IHistogram2D) tree[0].find("Trident Analysis/2D Energy Distribution");
+ IHistogram1D tridentElectronEnergyPlot = (IHistogram1D) tree[0].find("Trident Analysis/Trident Electron Energy");
+ IHistogram1D tridentPositronEnergyPlot = (IHistogram1D) tree[0].find("Trident Analysis/Trident Positron Energy");
+
+ // Define the plot titles and arrays.
+ IHistogram[] plots = { electronEnergyPlot, positronEnergyPlot, energySumPlot, tridentElectronEnergyPlot, tridentPositronEnergyPlot };
+ String[] titles = { "Electron Energy", "Positron Energy", "Energy Sum", "Trident Electron Energy", "Trident Positron Energy" };
+ String[] xTitles = { "Energy (GeV)", "Energy (GeV)", "Energy Sum (GeV)", "Energy (GeV)", "Energy (GeV)" };
+
+ // Re-bin the histograms to have 5-times larger bins. First,
+ // get the bin count and upper and lower bounds of the plot.
+ int bins = invariantMassPlots[0].axis().bins();
+ double low = invariantMassPlots[0].axis().binLowerEdge(0);
+ double high = invariantMassPlots[0].axis().binUpperEdge(invariantMassPlots[0].axis().bins() - 1);
+
+ // Create new plots with the larger bin sizes.
+ AIDA aida = AIDA.defaultInstance();
+ IHistogram1D[] newPlot = new IHistogram1D[2];
+ newPlot[0] = aida.histogram1D("Particle Invariant Mass (1 Hit)", bins / 5, low, high);
+ newPlot[1] = aida.histogram1D("Particle Invariant Mass (2 Hit)", bins / 5, low, high);
+
+ // Populate the new plots with the data from the old ones.
+ for(int j = 0; j < 2; j++) {
+ for(int i = 0; i < bins; i++) {
+ int entries = invariantMassPlots[j].binEntries(i);
+ double center = invariantMassPlots[j].axis().binCenter(i);
+ for(int k = 0; k < entries; k++) {
+ newPlot[j].fill(center);
+ }
+ }
+ }
+
+ // Replace the old plots.
+ invariantMassPlots = newPlot;
+
+ // Create a plotter factory.
+ IPlotterFactory plotterFactory = af.createPlotterFactory();
+
+ // Format and display the basic histograms.
+ for(int i = 0; i < plots.length; i++) {
+ // Scale the histogram by the appropriate scaling factor.
+ plots[i].scale(1.0 / scaleFactor);
+
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create(titles[i]);
+ plotter.createRegions(1);
+ plotter.region(0).plot(plots[i]);
+
+ // Format the axis labels.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ region.getPlot().setTitle(titles[i]);
+ region.getPlot().getXAxis().setLabel(xTitles[i]);
+ region.getPlot().getYAxis().setLabel("Rate (Hz)");
+
+ // Format the fonts and general plot presentation.
+ setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
+
+ // Show the plot.
+ plotter.setParameter("plotterWidth", "2000");
+ plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+ }
+
+ // Format and display the 2D histogram.
+ energySum2DPlot.scale(1.0 / scaleFactor);
+ IPlotter plotter2D = plotterFactory.create("2D Energy Sum");
+ plotter2D.createRegions(1);
+ plotter2D.region(0).plot(energySum2DPlot);
+
+ // Format the axis labels.
+ PlotterRegion region2D = (PlotterRegion) plotter2D.region(0);
+ region2D.getPlot().setTitle("2D Energy Sum");
+ region2D.getPlot().getXAxis().setLabel("Electron Energy (GeV)");
+ region2D.getPlot().getYAxis().setLabel("Positron Energy (GeV)");
+
+ // Format the fonts and general plot presentation.
+ setDefault2DStyle(region2D, false);
+
+ // Show the plot.
+ plotter2D.setParameter("plotterWidth", "2000");
+ plotter2D.setParameter("plotterHeight", "1200");
+ plotter2D.show();
+
+ // Format and display the histograms.
+ for(int i = 0; i < 2; i++) {
+ // Scale the histogram by the appropriate scaling factor.
+ invariantMassPlots[i].scale(1.0 / scaleFactor);
+
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create("Particle Invariant Mass (" + runNumber[i] + ")");
+ plotter.createRegions(1);
+ plotter.region(0).plot(invariantMassPlots[i]);
+
+ // Format the axis labels.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ region.getPlot().setTitle("Particle Invariant Mass (" + runNumber[i] + ")");
+ region.getPlot().getXAxis().setLabel("Invariant Mass (GeV)");
+ region.getPlot().getYAxis().setLabel("Rate (Hz)");
+
+ // Format the fonts and general plot presentation.
+ setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
+
+ // Show the plot.
+ plotter.setParameter("plotterWidth", "2000");
+ plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+ }
+
+ // Note which plot is the numerator and which is the denominator.
+ int numerator = 0;
+ int denominator = 1;
+
+ // Create a new histogram to display the ratios of the rates.
+ IHistogram1D ratioPlot = AIDA.defaultInstance().histogram1D("Invariant Mass Ratio (" + runNumber[numerator] + " / "
+ + runNumber[denominator] + ")", invariantMassPlots[0].axis().bins(),
+ invariantMassPlots[0].axis().lowerEdge(), invariantMassPlots[0].axis().upperEdge());
+
+ // Iterate over each bin.
+ for(int bin = 0; bin < invariantMassPlots[0].axis().bins(); bin++) {
+ // Calculate the ratio.
+ double ratio = invariantMassPlots[numerator].binHeight(bin) / invariantMassPlots[denominator].binHeight(bin);
+
+ // If the ratio is either not a number of infinite, skip
+ // this bin.
+ if(Double.isNaN(ratio) || Double.isInfinite(ratio)) { continue; }
+
+ // Populate the ratio plot bin.
+ ratioPlot.fill(invariantMassPlots[0].axis().binCenter(bin), ratio);
+ }
+
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create("Invariant Mass Ratio (5411 / 5554)");
+ plotter.createRegions(1);
+ plotter.region(0).plot(ratioPlot);
+
+ // Format the axis labels.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ region.getPlot().setTitle("Invariant Mass Ratio (" + runNumber[numerator] + " / " + runNumber[denominator] + ")");
+ region.getPlot().getXAxis().setLabel("Invariant Mass (GeV)");
+ region.getPlot().getXAxis().setMin(0.010);
+ region.getPlot().getXAxis().setMax(0.060);
+ region.getPlot().getYAxis().setLabel("Ratio");
+
+ // Format the fonts and general plot presentation.
+ setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
+
+ // Disable the error bars.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
+ fillStyle.setShowErrorBars(false);
+
+ // Show the plot.
+ plotter.setParameter("plotterWidth", "2000");
+ plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+
+ // Close the trees.
+ for(int i = 0; i < plotFile.length; i++) {
+ tree[i].close();
+ }
+ }
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ * @param color - The data color settings to use.
+ */
+ private static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
+ // Get the names of each plot on in the region.
+ String[] dataNames = region.getAllDataNames();
+
+ // Check whether this is an overlay plot. Overlay plots contain
+ // more than one data name.
+ boolean overlay = (dataNames.length > 1 ? true : false);
+
+ // Iterate over each plot in the region.
+ for(int i = 0; i < dataNames.length; i++) {
+ // Set the overlay style if needed.
+ if(overlay) {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with no fill. The color is set by the "color" argument.
+ fillStyle.setHistogramFill(false);
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarLineColor(color[i].getFillColor());
+
+ // Set the legend text style.
+ region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
+ }
+
+ // Otherwise, set the fill style for a single plot.
+ else {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with a fill color. The colors are defined by the
+ // "color" argument.
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarColor(color[i].getFillColor());
+ fillStyle.setHistogramBarLineColor(color[i].getLineColor());
+ }
+
+ // Set the statistics box style.
+ region.getPlot().getStats().setVisible(true);
+ region.getPlot().getStats().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
+ }
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ */
+ private static final void setDefault2DStyle(PlotterRegion region, boolean logarithmic) {
+ // Get the fill style object. 2D plots should never be overlay
+ // plots, so there should only ever be one data name.
+ JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
+
+ // Set the fill style for a two-dimensional plot.
+ if(logarithmic) { fillStyle.setLogZ(true); }
+ fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
+ fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
+
+ // Make the statistics box invisible.
+ region.getPlot().getStats().setVisible(false);
+
+ // Set the general plot font (which is also the z-axis font).
+ region.getPlot().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/MTEPlotFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/MTEPlotFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/MTEPlotFormatter.java Wed Mar 9 11:43:24 2016
@@ -19,308 +19,308 @@
import hep.aida.ref.plotter.PlotterRegion;
public class MTEPlotFormatter {
- // Define plot fonts.
- private static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 20);
- private static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 25);
- private static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 35);
-
- // Defines the color style options for plot data.
- private enum ColorStyle {
- MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
- MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
- MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
- RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
- FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
- TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
- BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
- PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
-
- private final Color fillColor;
- private final Color lineColor;
-
- private ColorStyle(Color fillColor, Color lineColor) {
- this.fillColor = fillColor;
- this.lineColor = lineColor;
- }
-
- public Color getFillColor() { return fillColor; }
-
- public Color getLineColor() { return lineColor; }
- };
-
- /**
- * Loads all plots in a file and formats them according to the
- * indicated style.
- * @param args - Unused default executable parameter.
- * @throws IOException Occurs if there is an issue opening the file.
- */
- public static void main(String[] args) throws IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\";
-
- // Define the new name of the file containing the trigger plots.
- String plotFile = rootDir + "temp.aida";
-
- // Define the scaling factors for each plot.
- double scaleFactor = 1;
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(plotFile);
- if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
-
- // Define index references for each event type.
- int MOLLER = 0;
- int TRIDENT = 1;
- int ELASTIC = 2;
-
- // Get the histograms.
- IHistogram1D[] trackCountPlots = new IHistogram1D[3];
- trackCountPlots[MOLLER] = (IHistogram1D) tree.find("MTE Analysis/Møller Event Tracks");
- trackCountPlots[TRIDENT] = (IHistogram1D) tree.find("MTE Analysis/Trident Event Tracks");
- trackCountPlots[ELASTIC] = (IHistogram1D) tree.find("MTE Analysis/Elastic Event Tracks");
-
- IHistogram1D[] energyPlots = new IHistogram1D[3];
- energyPlots[MOLLER] = (IHistogram1D) tree.find("MTE Analysis/Møller Electron Energy Distribution");
- energyPlots[TRIDENT] = (IHistogram1D) tree.find("MTE Analysis/Trident Electron Energy Distribution");
- energyPlots[ELASTIC] = (IHistogram1D) tree.find("MTE Analysis/Elastic Energy Distribution");
-
- IHistogram1D[] energySumPlots = new IHistogram1D[2];
- energySumPlots[MOLLER] = (IHistogram1D) tree.find("MTE Analysis/Møller Energy Sum Distribution");
- energySumPlots[TRIDENT] = (IHistogram1D) tree.find("MTE Analysis/Trident Energy Sum Distribution");
-
- IHistogram2D[] energy2DPlots = new IHistogram2D[2];
- energy2DPlots[MOLLER] = (IHistogram2D) tree.find("MTE Analysis/Møller 2D Energy Distribution");
- energy2DPlots[TRIDENT] = (IHistogram2D) tree.find("MTE Analysis/Trident 2D Energy Distribution");
-
- // Create a plotter factory.
- IPlotterFactory plotterFactory = af.createPlotterFactory();
-
- // Format the track count plots.
- for(IHistogram1D trackCountPlot : trackCountPlots) {
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create(trackCountPlot.title());
- plotter.createRegions(1);
- plotter.region(0).plot(trackCountPlot);
-
- // Format the axis labels.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- region.getPlot().setTitle(trackCountPlot.title());
- region.getPlot().getXAxis().setLabel("Number of Tracks");
- region.getPlot().getYAxis().setLabel("Count");
-
- // Format the fonts and general plot presentation.
- setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
-
- // Show the plot.
- plotter.setParameter("plotterWidth", "2000");
- plotter.setParameter("plotterHeight", "1200");
- plotter.show();
- }
-
- // Format the electron energy plots.
- for(IHistogram1D energyPlot : energyPlots) {
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create(energyPlot.title());
- plotter.createRegions(1);
- plotter.region(0).plot(energyPlot);
-
- // Format the axis labels.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- region.getPlot().setTitle(energyPlot.title());
- region.getPlot().getXAxis().setLabel("Track Energy (GeV)");
- region.getPlot().getYAxis().setLabel("Count");
-
- // Format the fonts and general plot presentation.
- setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
-
- // Show the plot.
- plotter.setParameter("plotterWidth", "2000");
- plotter.setParameter("plotterHeight", "1200");
- plotter.show();
- }
-
- // Format the energy sum plots.
- for(IHistogram1D energySumPlot : energySumPlots) {
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create(energySumPlot.title());
- plotter.createRegions(1);
- plotter.region(0).plot(energySumPlot);
-
- // Format the axis labels.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- region.getPlot().setTitle(energySumPlot.title());
- region.getPlot().getXAxis().setLabel("Track Energy (GeV)");
- region.getPlot().getYAxis().setLabel("Count");
-
- // Format the fonts and general plot presentation.
- setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
-
- // Show the plot.
- plotter.setParameter("plotterWidth", "2000");
- plotter.setParameter("plotterHeight", "1200");
- plotter.show();
- }
-
- // Format the 2D energy sum plots.
- for(IHistogram2D energy2DPlot : energy2DPlots) {
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create(energy2DPlot.title());
- plotter.createRegions(1);
- plotter.region(0).plot(energy2DPlot);
-
- // Format the axis labels.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- region.getPlot().setTitle(energy2DPlot.title());
- region.getPlot().getXAxis().setLabel("First Track Energy (GeV)");
- region.getPlot().getYAxis().setLabel("Second Track Energy (GeV)");
-
-
- // Format the fonts and general plot presentation.
- setDefault2DStyle(region, false);
-
- // Show the plot.
- plotter.setParameter("plotterWidth", "2000");
- plotter.setParameter("plotterHeight", "1200");
- plotter.show();
- }
-
- // Disable the error bars.
- //JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
- //fillStyle.setShowErrorBars(false);
-
- // Close the tree.
- tree.close();
- }
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- * @param color - The data color settings to use.
- */
- private static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
- // Get the names of each plot on in the region.
- String[] dataNames = region.getAllDataNames();
-
- // Check whether this is an overlay plot. Overlay plots contain
- // more than one data name.
- boolean overlay = (dataNames.length > 1 ? true : false);
-
- // Iterate over each plot in the region.
- for(int i = 0; i < dataNames.length; i++) {
- // Set the overlay style if needed.
- if(overlay) {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with no fill. The color is set by the "color" argument.
- fillStyle.setHistogramFill(false);
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarLineColor(color[i].getFillColor());
-
- // Set the legend text style.
- region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
- }
-
- // Otherwise, set the fill style for a single plot.
- else {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with a fill color. The colors are defined by the
- // "color" argument.
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarColor(color[i].getFillColor());
- fillStyle.setHistogramBarLineColor(color[i].getLineColor());
- }
-
- // Set the statistics box style.
- region.getPlot().getStats().setVisible(true);
- region.getPlot().getStats().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
- }
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- */
- private static final void setDefault2DStyle(PlotterRegion region, boolean logarithmic) {
- // Get the fill style object. 2D plots should never be overlay
- // plots, so there should only ever be one data name.
- JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
-
- // Set the fill style for a two-dimensional plot.
- if(logarithmic) { fillStyle.setLogZ(true); }
- fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
- fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
-
- // Make the statistics box invisible.
- region.getPlot().getStats().setVisible(false);
-
- // Set the general plot font (which is also the z-axis font).
- region.getPlot().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
-
- /**
- * Recursive method that gets all object names from a tree that
- * are not directories. Method should not be called directly, but
- * rather called only through the <code>getHistograms(ITree)</code>
- * method.
- * @param tree - The tree from which to obtain the object names.
- * @param directory - The directory in which to search for objects.
- * @param list - The list in which to place the objects.
- * @return Returns the <code>List</code> collection that was given
- * as an argument.
- */
- private static final List<String> getHistograms(ITree tree, String directory, List<String> list) {
- // Get the list of objects in the directory.
- String[] treeObjects = tree.listObjectNames(directory);
-
- // Print the objects.
- for(String objectName : treeObjects) {
- // Check if the object is a directory.
- boolean isDirectory = isDirectory(objectName);
-
- // If the object is a directory, get the histograms from it.
- if(isDirectory) {
- getHistograms(tree, objectName, list);
- }
-
- // If the object is a plot, add it to the list.
- else { list.add(objectName); }
- }
-
- // Return the list.
- return list;
- }
-
- /**
- * Checks whether a tree object is a directory.
- * @param object - The object to check.
- * @return Returns <code>true</code> if the object is a directory
- * and <code>false</code> otherwise.
- */
- private static final boolean isDirectory(String object) {
- return (object.toCharArray()[object.length() - 1] == '/');
- }
+ // Define plot fonts.
+ private static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 20);
+ private static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 25);
+ private static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 35);
+
+ // Defines the color style options for plot data.
+ private enum ColorStyle {
+ MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
+ MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
+ MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
+ RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
+ FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
+ TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
+ BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
+ PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
+
+ private final Color fillColor;
+ private final Color lineColor;
+
+ private ColorStyle(Color fillColor, Color lineColor) {
+ this.fillColor = fillColor;
+ this.lineColor = lineColor;
+ }
+
+ public Color getFillColor() { return fillColor; }
+
+ public Color getLineColor() { return lineColor; }
+ };
+
+ /**
+ * Loads all plots in a file and formats them according to the
+ * indicated style.
+ * @param args - Unused default executable parameter.
+ * @throws IOException Occurs if there is an issue opening the file.
+ */
+ public static void main(String[] args) throws IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String plotFile = rootDir + "temp.aida";
+
+ // Define the scaling factors for each plot.
+ double scaleFactor = 1;
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(plotFile);
+ if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+
+ // Define index references for each event type.
+ int MOLLER = 0;
+ int TRIDENT = 1;
+ int ELASTIC = 2;
+
+ // Get the histograms.
+ IHistogram1D[] trackCountPlots = new IHistogram1D[3];
+ trackCountPlots[MOLLER] = (IHistogram1D) tree.find("MTE Analysis/Møller Event Tracks");
+ trackCountPlots[TRIDENT] = (IHistogram1D) tree.find("MTE Analysis/Trident Event Tracks");
+ trackCountPlots[ELASTIC] = (IHistogram1D) tree.find("MTE Analysis/Elastic Event Tracks");
+
+ IHistogram1D[] energyPlots = new IHistogram1D[3];
+ energyPlots[MOLLER] = (IHistogram1D) tree.find("MTE Analysis/Møller Electron Energy Distribution");
+ energyPlots[TRIDENT] = (IHistogram1D) tree.find("MTE Analysis/Trident Electron Energy Distribution");
+ energyPlots[ELASTIC] = (IHistogram1D) tree.find("MTE Analysis/Elastic Energy Distribution");
+
+ IHistogram1D[] energySumPlots = new IHistogram1D[2];
+ energySumPlots[MOLLER] = (IHistogram1D) tree.find("MTE Analysis/Møller Energy Sum Distribution");
+ energySumPlots[TRIDENT] = (IHistogram1D) tree.find("MTE Analysis/Trident Energy Sum Distribution");
+
+ IHistogram2D[] energy2DPlots = new IHistogram2D[2];
+ energy2DPlots[MOLLER] = (IHistogram2D) tree.find("MTE Analysis/Møller 2D Energy Distribution");
+ energy2DPlots[TRIDENT] = (IHistogram2D) tree.find("MTE Analysis/Trident 2D Energy Distribution");
+
+ // Create a plotter factory.
+ IPlotterFactory plotterFactory = af.createPlotterFactory();
+
+ // Format the track count plots.
+ for(IHistogram1D trackCountPlot : trackCountPlots) {
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create(trackCountPlot.title());
+ plotter.createRegions(1);
+ plotter.region(0).plot(trackCountPlot);
+
+ // Format the axis labels.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ region.getPlot().setTitle(trackCountPlot.title());
+ region.getPlot().getXAxis().setLabel("Number of Tracks");
+ region.getPlot().getYAxis().setLabel("Count");
+
+ // Format the fonts and general plot presentation.
+ setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
+
+ // Show the plot.
+ plotter.setParameter("plotterWidth", "2000");
+ plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+ }
+
+ // Format the electron energy plots.
+ for(IHistogram1D energyPlot : energyPlots) {
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create(energyPlot.title());
+ plotter.createRegions(1);
+ plotter.region(0).plot(energyPlot);
+
+ // Format the axis labels.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ region.getPlot().setTitle(energyPlot.title());
+ region.getPlot().getXAxis().setLabel("Track Energy (GeV)");
+ region.getPlot().getYAxis().setLabel("Count");
+
+ // Format the fonts and general plot presentation.
+ setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
+
+ // Show the plot.
+ plotter.setParameter("plotterWidth", "2000");
+ plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+ }
+
+ // Format the energy sum plots.
+ for(IHistogram1D energySumPlot : energySumPlots) {
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create(energySumPlot.title());
+ plotter.createRegions(1);
+ plotter.region(0).plot(energySumPlot);
+
+ // Format the axis labels.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ region.getPlot().setTitle(energySumPlot.title());
+ region.getPlot().getXAxis().setLabel("Track Energy (GeV)");
+ region.getPlot().getYAxis().setLabel("Count");
+
+ // Format the fonts and general plot presentation.
+ setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
+
+ // Show the plot.
+ plotter.setParameter("plotterWidth", "2000");
+ plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+ }
+
+ // Format the 2D energy sum plots.
+ for(IHistogram2D energy2DPlot : energy2DPlots) {
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create(energy2DPlot.title());
+ plotter.createRegions(1);
+ plotter.region(0).plot(energy2DPlot);
+
+ // Format the axis labels.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ region.getPlot().setTitle(energy2DPlot.title());
+ region.getPlot().getXAxis().setLabel("First Track Energy (GeV)");
+ region.getPlot().getYAxis().setLabel("Second Track Energy (GeV)");
+
+
+ // Format the fonts and general plot presentation.
+ setDefault2DStyle(region, false);
+
+ // Show the plot.
+ plotter.setParameter("plotterWidth", "2000");
+ plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+ }
+
+ // Disable the error bars.
+ //JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
+ //fillStyle.setShowErrorBars(false);
+
+ // Close the tree.
+ tree.close();
+ }
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ * @param color - The data color settings to use.
+ */
+ private static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
+ // Get the names of each plot on in the region.
+ String[] dataNames = region.getAllDataNames();
+
+ // Check whether this is an overlay plot. Overlay plots contain
+ // more than one data name.
+ boolean overlay = (dataNames.length > 1 ? true : false);
+
+ // Iterate over each plot in the region.
+ for(int i = 0; i < dataNames.length; i++) {
+ // Set the overlay style if needed.
+ if(overlay) {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with no fill. The color is set by the "color" argument.
+ fillStyle.setHistogramFill(false);
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarLineColor(color[i].getFillColor());
+
+ // Set the legend text style.
+ region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
+ }
+
+ // Otherwise, set the fill style for a single plot.
+ else {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with a fill color. The colors are defined by the
+ // "color" argument.
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarColor(color[i].getFillColor());
+ fillStyle.setHistogramBarLineColor(color[i].getLineColor());
+ }
+
+ // Set the statistics box style.
+ region.getPlot().getStats().setVisible(true);
+ region.getPlot().getStats().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
+ }
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ */
+ private static final void setDefault2DStyle(PlotterRegion region, boolean logarithmic) {
+ // Get the fill style object. 2D plots should never be overlay
+ // plots, so there should only ever be one data name.
+ JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
+
+ // Set the fill style for a two-dimensional plot.
+ if(logarithmic) { fillStyle.setLogZ(true); }
+ fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
+ fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
+
+ // Make the statistics box invisible.
+ region.getPlot().getStats().setVisible(false);
+
+ // Set the general plot font (which is also the z-axis font).
+ region.getPlot().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
+
+ /**
+ * Recursive method that gets all object names from a tree that
+ * are not directories. Method should not be called directly, but
+ * rather called only through the <code>getHistograms(ITree)</code>
+ * method.
+ * @param tree - The tree from which to obtain the object names.
+ * @param directory - The directory in which to search for objects.
+ * @param list - The list in which to place the objects.
+ * @return Returns the <code>List</code> collection that was given
+ * as an argument.
+ */
+ private static final List<String> getHistograms(ITree tree, String directory, List<String> list) {
+ // Get the list of objects in the directory.
+ String[] treeObjects = tree.listObjectNames(directory);
+
+ // Print the objects.
+ for(String objectName : treeObjects) {
+ // Check if the object is a directory.
+ boolean isDirectory = isDirectory(objectName);
+
+ // If the object is a directory, get the histograms from it.
+ if(isDirectory) {
+ getHistograms(tree, objectName, list);
+ }
+
+ // If the object is a plot, add it to the list.
+ else { list.add(objectName); }
+ }
+
+ // Return the list.
+ return list;
+ }
+
+ /**
+ * Checks whether a tree object is a directory.
+ * @param object - The object to check.
+ * @return Returns <code>true</code> if the object is a directory
+ * and <code>false</code> otherwise.
+ */
+ private static final boolean isDirectory(String object) {
+ return (object.toCharArray()[object.length() - 1] == '/');
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/MTETriggerPlotsFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/MTETriggerPlotsFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/MTETriggerPlotsFormatter.java Wed Mar 9 11:43:24 2016
@@ -15,164 +15,164 @@
public class MTETriggerPlotsFormatter {
- public static void main(String[] args) throws IllegalArgumentException, IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\";
-
- // Define the new name of the file containing the trigger plots.
- String plotFile = rootDir + "5772-ana.aida";
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(plotFile);
- if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
-
- // Define the 1D trigger plot names for Møllers and tridents.
- String[] plotNames1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy",
- "Pair Coplanarity", "Pair Energy Difference", "Pair Energy Slope", "Pair Energy Sum" };
- String[] displayNames1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy",
- "Pair Coplanarity", "Pair Energy Difference", "Pair Energy Slope", "Pair Energy Sum" };
- String[] xAxisNames1D = { "Hit Count", "Seed Energy (GeV)", "Total Energy (GeV)",
- "Coplanarity (Degrees)", "Energy Difference (GeV)", "Energy Slope (GeV)", "Energy Sum (GeV)" };
- String yAxisName1D = "Count";
-
- // Define the 2D trigger plot names for Møllers and tridents.
- String[] plotNames2D = { "Cluster Seed", "Pair Energy Sum 2D" };
- String[] displayNames2D = { "Cluster Seed Distribution", "2D Energy Sum" };
- String[] xAxisNames2D = { "x-Index", "Second Cluster Energy (GeV)" };
- String[] yAxisNames2D = { "y-Index", "First Cluster Energy (GeV)" };
-
- // Define the 1D trigger plot names for elastics.
- String[] plotNamesElastic1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy" };
- String[] displayNamesElastic1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy" };
- String[] xAxisNamesElastic1D = { "Hit Count", "Seed Energy (GeV)", "Total Energy (GeV)" };
- String yAxisNameElastic1D = "Count";
-
- // Define the 2D trigger plot names for elastics.
- String[] plotNamesElastic2D = { "Cluster Seed" };
- String[] displayNamesElastic2D = { "Cluster Seed Distribution" };
- String[] xAxisNamesElastic2D = { "x-Index" };
- String[] yAxisNamesElastic2D = { "y-Index" };
-
- // Define the Møller, trident, and elastic prefixes.
- String allPrefix = "All Trigger Plots/Pair Plots/";
- String møllerPrefix = "Møller Trigger Plots/Pair Plots/";
- String tridentPrefix = "Trident Trigger Plots/Pair Plots/";
- String elasticPrefix = "Elastic Trigger Plots/Singles Plots/";
- String allSinglesPrefix = "All Trigger Plots/Singles Plots/";
-
- // Define the plot type prefix.
- String allTypeName = "All Pairs - ";
- String møllerTypeName = "Møller - ";
- String tridentTypeName = "Trident - ";
- String elasticTypeName = "Elastic - ";
- String allSinglesTypeName = "All Singles - ";
-
- // Define the plot type colors.
- ColorStyle allColor = PlotsFormatter.ColorStyle.GREY;
- ColorStyle møllerColor = PlotsFormatter.ColorStyle.MS_BLUE;
- ColorStyle tridentColor = PlotsFormatter.ColorStyle.MS_ORANGE;
- ColorStyle elasticColor = PlotsFormatter.ColorStyle.MS_GREEN;
-
- // Create a plot formatting module.
- PlotFormatModule module = new PlotFormatModule();
-
- // Get the histograms and add them to the module. Start with the
- // trident and Møller plots.
- for(int i = 0; i < plotNames1D.length; i++) {
- // Get the Møller and trident plots.
- IHistogram1D allPlot = (IHistogram1D) tree.find(allPrefix + plotNames1D[i]);
- IHistogram1D møllerPlot = (IHistogram1D) tree.find(møllerPrefix + plotNames1D[i]);
- IHistogram1D tridentPlot = (IHistogram1D) tree.find(tridentPrefix + plotNames1D[i]);
-
- // Make a formatted plot for each.
- FormattedPlot1D allFormattedPlot = new FormattedPlot1D(allPlot, allColor, xAxisNames1D[i], yAxisName1D, allTypeName + displayNames1D[i]);
- FormattedPlot1D møllerFormattedPlot = new FormattedPlot1D(møllerPlot, møllerColor, xAxisNames1D[i], yAxisName1D, møllerTypeName + displayNames1D[i]);
- FormattedPlot1D tridentFormattedPlot = new FormattedPlot1D(tridentPlot, tridentColor, xAxisNames1D[i], yAxisName1D, tridentTypeName + displayNames1D[i]);
-
- // Add them to the module.
- module.addPlot1D(allFormattedPlot);
- module.addPlot1D(møllerFormattedPlot);
- module.addPlot1D(tridentFormattedPlot);
- }
- for(int i = 0; i < plotNames2D.length; i++) {
- // Get the Møller and trident plots.
- IHistogram2D allPlot = (IHistogram2D) tree.find(allPrefix + plotNames2D[i]);
- IHistogram2D møllerPlot = (IHistogram2D) tree.find(møllerPrefix + plotNames2D[i]);
- IHistogram2D tridentPlot = (IHistogram2D) tree.find(tridentPrefix + plotNames2D[i]);
-
- // Make a formatted plot for each.
- FormattedPlot2D allFormattedPlot = new FormattedPlot2D(allPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], allTypeName + displayNames2D[i]);
- FormattedPlot2D møllerFormattedPlot = new FormattedPlot2D(møllerPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], møllerTypeName + displayNames2D[i]);
- FormattedPlot2D tridentFormattedPlot = new FormattedPlot2D(tridentPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], tridentTypeName + displayNames2D[i]);
-
- // Add them to the module.
- module.addPlot2D(allFormattedPlot);
- module.addPlot2D(møllerFormattedPlot);
- module.addPlot2D(tridentFormattedPlot);
- }
-
- // Get the histograms for the elastic plots and add them to the module.
- for(int i = 0; i < plotNamesElastic1D.length; i++) {
- // Get the Møller and trident plots.
- IHistogram1D allPlot = (IHistogram1D) tree.find(allSinglesPrefix + plotNames1D[i]);
- IHistogram1D elasticPlot = (IHistogram1D) tree.find(elasticPrefix + plotNames1D[i]);
-
- // Make a formatted plot for each.
- FormattedPlot1D allFormattedPlot = new FormattedPlot1D(allPlot, allColor, xAxisNamesElastic1D[i], yAxisNameElastic1D,
- allSinglesTypeName + displayNamesElastic1D[i]);
- FormattedPlot1D elasticFormattedPlot = new FormattedPlot1D(elasticPlot, elasticColor, xAxisNamesElastic1D[i], yAxisNameElastic1D,
- elasticTypeName + displayNamesElastic1D[i]);
-
- // Add them to the module.
- module.addPlot1D(allFormattedPlot);
- module.addPlot1D(elasticFormattedPlot);
- }
- for(int i = 0; i < plotNamesElastic2D.length; i++) {
- // Get the Møller and trident plots.
- IHistogram2D allPlot = (IHistogram2D) tree.find(allPrefix + plotNamesElastic2D[i]);
- IHistogram2D elasticPlot = (IHistogram2D) tree.find(møllerPrefix + plotNamesElastic2D[i]);
-
- // Make a formatted plot for each.
- FormattedPlot2D allFormattedPlot = new FormattedPlot2D(allPlot, i == 0 ? true : false, xAxisNamesElastic2D[i], yAxisNamesElastic2D[i],
- allSinglesTypeName + plotNames2D[i]);
- FormattedPlot2D elasticFormattedPlot = new FormattedPlot2D(elasticPlot, i == 0 ? true : false, xAxisNamesElastic2D[i], yAxisNamesElastic2D[i],
- elasticTypeName + displayNamesElastic2D[i]);
-
- // Add them to the module.
- module.addPlot2D(allFormattedPlot);
- module.addPlot2D(elasticFormattedPlot);
- }
-
- // Add the MTE plots to the module.
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Elastic Energy Distribution"), elasticColor,
- "Momentum (GeV)", "Count", "Elastic - Momentum"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Elastic Event Tracks"), elasticColor,
- "Tracks", "Count", "Elastic - Tracks in Event"));
-
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Energy Sum Distribution"), møllerColor,
- "Momentum Sum (GeV)", "Count", "Møller - Momentum Sum"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Electron Energy Distribution"), møllerColor,
- "Momentum (GeV)", "Count", "Møller - Momentum (Electron)"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Time Coincidence Distribution (All Møller Cuts)"), møllerColor,
- "Time (ns)", "Count", "Møller - Time Coincidence"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Event Tracks"), møllerColor,
- "Tracks", "Count", "Møller - Tracks in Event"));
- module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MTE Analysis/Møller 2D Energy Distribution"), false,
- "First Track Momentum (GeV)", "Second Track Momentum (GeV)", "Møller - 2D Momentum Sum"));
-
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Energy Sum Distribution"), tridentColor,
- "Momentum Sum (GeV)", "Count", "Trident - Momentum Sum"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Electron Energy Distribution"), tridentColor,
- "Momentum (GeV)", "Count", "Trident - Momentum (Electron)"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Positron Energy Distribution"), tridentColor,
- "Momentum (GeV)", "Count", "Trident - Momentum (Positron)"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Event Tracks"), tridentColor,
- "Tracks", "Count", "Trident - Tracks in Event"));
- module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MTE Analysis/Trident 2D Energy Distribution"), false,
- "First Track Momentum (GeV)", "Second Track Momentum (GeV)", "Trident - 2D Momentum Sum"));
-
- // Display the plots.
- module.savePlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\TestPrint\\");
- }
+ public static void main(String[] args) throws IllegalArgumentException, IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String plotFile = rootDir + "5772-ana.aida";
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(plotFile);
+ if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+
+ // Define the 1D trigger plot names for Møllers and tridents.
+ String[] plotNames1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy",
+ "Pair Coplanarity", "Pair Energy Difference", "Pair Energy Slope", "Pair Energy Sum" };
+ String[] displayNames1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy",
+ "Pair Coplanarity", "Pair Energy Difference", "Pair Energy Slope", "Pair Energy Sum" };
+ String[] xAxisNames1D = { "Hit Count", "Seed Energy (GeV)", "Total Energy (GeV)",
+ "Coplanarity (Degrees)", "Energy Difference (GeV)", "Energy Slope (GeV)", "Energy Sum (GeV)" };
+ String yAxisName1D = "Count";
+
+ // Define the 2D trigger plot names for Møllers and tridents.
+ String[] plotNames2D = { "Cluster Seed", "Pair Energy Sum 2D" };
+ String[] displayNames2D = { "Cluster Seed Distribution", "2D Energy Sum" };
+ String[] xAxisNames2D = { "x-Index", "Second Cluster Energy (GeV)" };
+ String[] yAxisNames2D = { "y-Index", "First Cluster Energy (GeV)" };
+
+ // Define the 1D trigger plot names for elastics.
+ String[] plotNamesElastic1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy" };
+ String[] displayNamesElastic1D = { "Cluster Hit Count", "Cluster Seed Energy", "Cluster Total Energy" };
+ String[] xAxisNamesElastic1D = { "Hit Count", "Seed Energy (GeV)", "Total Energy (GeV)" };
+ String yAxisNameElastic1D = "Count";
+
+ // Define the 2D trigger plot names for elastics.
+ String[] plotNamesElastic2D = { "Cluster Seed" };
+ String[] displayNamesElastic2D = { "Cluster Seed Distribution" };
+ String[] xAxisNamesElastic2D = { "x-Index" };
+ String[] yAxisNamesElastic2D = { "y-Index" };
+
+ // Define the Møller, trident, and elastic prefixes.
+ String allPrefix = "All Trigger Plots/Pair Plots/";
+ String møllerPrefix = "Møller Trigger Plots/Pair Plots/";
+ String tridentPrefix = "Trident Trigger Plots/Pair Plots/";
+ String elasticPrefix = "Elastic Trigger Plots/Singles Plots/";
+ String allSinglesPrefix = "All Trigger Plots/Singles Plots/";
+
+ // Define the plot type prefix.
+ String allTypeName = "All Pairs - ";
+ String møllerTypeName = "Møller - ";
+ String tridentTypeName = "Trident - ";
+ String elasticTypeName = "Elastic - ";
+ String allSinglesTypeName = "All Singles - ";
+
+ // Define the plot type colors.
+ ColorStyle allColor = PlotsFormatter.ColorStyle.GREY;
+ ColorStyle møllerColor = PlotsFormatter.ColorStyle.MS_BLUE;
+ ColorStyle tridentColor = PlotsFormatter.ColorStyle.MS_ORANGE;
+ ColorStyle elasticColor = PlotsFormatter.ColorStyle.MS_GREEN;
+
+ // Create a plot formatting module.
+ PlotFormatModule module = new PlotFormatModule();
+
+ // Get the histograms and add them to the module. Start with the
+ // trident and Møller plots.
+ for(int i = 0; i < plotNames1D.length; i++) {
+ // Get the Møller and trident plots.
+ IHistogram1D allPlot = (IHistogram1D) tree.find(allPrefix + plotNames1D[i]);
+ IHistogram1D møllerPlot = (IHistogram1D) tree.find(møllerPrefix + plotNames1D[i]);
+ IHistogram1D tridentPlot = (IHistogram1D) tree.find(tridentPrefix + plotNames1D[i]);
+
+ // Make a formatted plot for each.
+ FormattedPlot1D allFormattedPlot = new FormattedPlot1D(allPlot, allColor, xAxisNames1D[i], yAxisName1D, allTypeName + displayNames1D[i]);
+ FormattedPlot1D møllerFormattedPlot = new FormattedPlot1D(møllerPlot, møllerColor, xAxisNames1D[i], yAxisName1D, møllerTypeName + displayNames1D[i]);
+ FormattedPlot1D tridentFormattedPlot = new FormattedPlot1D(tridentPlot, tridentColor, xAxisNames1D[i], yAxisName1D, tridentTypeName + displayNames1D[i]);
+
+ // Add them to the module.
+ module.addPlot1D(allFormattedPlot);
+ module.addPlot1D(møllerFormattedPlot);
+ module.addPlot1D(tridentFormattedPlot);
+ }
+ for(int i = 0; i < plotNames2D.length; i++) {
+ // Get the Møller and trident plots.
+ IHistogram2D allPlot = (IHistogram2D) tree.find(allPrefix + plotNames2D[i]);
+ IHistogram2D møllerPlot = (IHistogram2D) tree.find(møllerPrefix + plotNames2D[i]);
+ IHistogram2D tridentPlot = (IHistogram2D) tree.find(tridentPrefix + plotNames2D[i]);
+
+ // Make a formatted plot for each.
+ FormattedPlot2D allFormattedPlot = new FormattedPlot2D(allPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], allTypeName + displayNames2D[i]);
+ FormattedPlot2D møllerFormattedPlot = new FormattedPlot2D(møllerPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], møllerTypeName + displayNames2D[i]);
+ FormattedPlot2D tridentFormattedPlot = new FormattedPlot2D(tridentPlot, i == 0 ? true : false, xAxisNames2D[i], yAxisNames2D[i], tridentTypeName + displayNames2D[i]);
+
+ // Add them to the module.
+ module.addPlot2D(allFormattedPlot);
+ module.addPlot2D(møllerFormattedPlot);
+ module.addPlot2D(tridentFormattedPlot);
+ }
+
+ // Get the histograms for the elastic plots and add them to the module.
+ for(int i = 0; i < plotNamesElastic1D.length; i++) {
+ // Get the Møller and trident plots.
+ IHistogram1D allPlot = (IHistogram1D) tree.find(allSinglesPrefix + plotNames1D[i]);
+ IHistogram1D elasticPlot = (IHistogram1D) tree.find(elasticPrefix + plotNames1D[i]);
+
+ // Make a formatted plot for each.
+ FormattedPlot1D allFormattedPlot = new FormattedPlot1D(allPlot, allColor, xAxisNamesElastic1D[i], yAxisNameElastic1D,
+ allSinglesTypeName + displayNamesElastic1D[i]);
+ FormattedPlot1D elasticFormattedPlot = new FormattedPlot1D(elasticPlot, elasticColor, xAxisNamesElastic1D[i], yAxisNameElastic1D,
+ elasticTypeName + displayNamesElastic1D[i]);
+
+ // Add them to the module.
+ module.addPlot1D(allFormattedPlot);
+ module.addPlot1D(elasticFormattedPlot);
+ }
+ for(int i = 0; i < plotNamesElastic2D.length; i++) {
+ // Get the Møller and trident plots.
+ IHistogram2D allPlot = (IHistogram2D) tree.find(allPrefix + plotNamesElastic2D[i]);
+ IHistogram2D elasticPlot = (IHistogram2D) tree.find(møllerPrefix + plotNamesElastic2D[i]);
+
+ // Make a formatted plot for each.
+ FormattedPlot2D allFormattedPlot = new FormattedPlot2D(allPlot, i == 0 ? true : false, xAxisNamesElastic2D[i], yAxisNamesElastic2D[i],
+ allSinglesTypeName + plotNames2D[i]);
+ FormattedPlot2D elasticFormattedPlot = new FormattedPlot2D(elasticPlot, i == 0 ? true : false, xAxisNamesElastic2D[i], yAxisNamesElastic2D[i],
+ elasticTypeName + displayNamesElastic2D[i]);
+
+ // Add them to the module.
+ module.addPlot2D(allFormattedPlot);
+ module.addPlot2D(elasticFormattedPlot);
+ }
+
+ // Add the MTE plots to the module.
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Elastic Energy Distribution"), elasticColor,
+ "Momentum (GeV)", "Count", "Elastic - Momentum"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Elastic Event Tracks"), elasticColor,
+ "Tracks", "Count", "Elastic - Tracks in Event"));
+
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Energy Sum Distribution"), møllerColor,
+ "Momentum Sum (GeV)", "Count", "Møller - Momentum Sum"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Electron Energy Distribution"), møllerColor,
+ "Momentum (GeV)", "Count", "Møller - Momentum (Electron)"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Time Coincidence Distribution (All Møller Cuts)"), møllerColor,
+ "Time (ns)", "Count", "Møller - Time Coincidence"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Møller Event Tracks"), møllerColor,
+ "Tracks", "Count", "Møller - Tracks in Event"));
+ module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MTE Analysis/Møller 2D Energy Distribution"), false,
+ "First Track Momentum (GeV)", "Second Track Momentum (GeV)", "Møller - 2D Momentum Sum"));
+
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Energy Sum Distribution"), tridentColor,
+ "Momentum Sum (GeV)", "Count", "Trident - Momentum Sum"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Electron Energy Distribution"), tridentColor,
+ "Momentum (GeV)", "Count", "Trident - Momentum (Electron)"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Positron Energy Distribution"), tridentColor,
+ "Momentum (GeV)", "Count", "Trident - Momentum (Positron)"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MTE Analysis/Trident Event Tracks"), tridentColor,
+ "Tracks", "Count", "Trident - Tracks in Event"));
+ module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MTE Analysis/Trident 2D Energy Distribution"), false,
+ "First Track Momentum (GeV)", "Second Track Momentum (GeV)", "Trident - 2D Momentum Sum"));
+
+ // Display the plots.
+ module.savePlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\TestPrint\\");
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/ParticleMCAnalysisPlotsFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/ParticleMCAnalysisPlotsFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/ParticleMCAnalysisPlotsFormatter.java Wed Mar 9 11:43:24 2016
@@ -13,43 +13,43 @@
import org.hps.users.kmccarty.plots.PlotsFormatter.ColorStyle;
public class ParticleMCAnalysisPlotsFormatter {
- public static void main(String[] args) throws IllegalArgumentException, IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\";
-
- // Define the new name of the file containing the trigger plots.
- String plotFile = rootDir + "moller-mc-out_triggerPlots.aida";
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(plotFile);
- if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
-
- // Create a plot formatting module.
- PlotFormatModule module = new PlotFormatModule();
-
- // Define the plot color.
- ColorStyle plotColor = ColorStyle.MS_BLUE;
-
- // Define the plots to be read.
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Electron Energy Distribution"),
- plotColor, "Electron Energy (GeV)", "Count", "Electron Energy Distribution"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Electron\\Electron Momentum Sum Distribution"),
- plotColor, "Momentum Sum (GeV)", "Count", "Momentum Sum Distribution"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Electron\\Electron Pair Angle Distribution"),
- plotColor, "Momentum Sum (GeV)", "Count", "Pair Angle Distribution"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Particle x-Momentum Distribution"),
- plotColor, "Momentum (GeV)", "Count", "Particle x-Momentum Distribution"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Particle y-Momentum Distribution"),
- plotColor, "Momentum (GeV)", "Count", "Particle y-Momentum Distribution"));
- module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Particle z-Momentum Distribution"),
- plotColor, "Momentum (GeV)", "Count", "Particle z-Momentum Distribution"));
- module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MC Analysis/Electron\\Electron 2D Momentum Distribution"),
- true, "Particle 1 Momentum (GeV)", "Particle 2 Momentum (GeV)", "2D Momentum Sum Distribution"));
- module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MC Analysis/Particle Momentum Distribution"),
- true, "px (GeV)", "py (GeV)", "Particle x/y Momentum Distribution"));
-
- // Display the plots.
- module.displayPlots();
- }
+ public static void main(String[] args) throws IllegalArgumentException, IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String plotFile = rootDir + "moller-mc-out_triggerPlots.aida";
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(plotFile);
+ if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+
+ // Create a plot formatting module.
+ PlotFormatModule module = new PlotFormatModule();
+
+ // Define the plot color.
+ ColorStyle plotColor = ColorStyle.MS_BLUE;
+
+ // Define the plots to be read.
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Electron Energy Distribution"),
+ plotColor, "Electron Energy (GeV)", "Count", "Electron Energy Distribution"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Electron\\Electron Momentum Sum Distribution"),
+ plotColor, "Momentum Sum (GeV)", "Count", "Momentum Sum Distribution"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Electron\\Electron Pair Angle Distribution"),
+ plotColor, "Momentum Sum (GeV)", "Count", "Pair Angle Distribution"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Particle x-Momentum Distribution"),
+ plotColor, "Momentum (GeV)", "Count", "Particle x-Momentum Distribution"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Particle y-Momentum Distribution"),
+ plotColor, "Momentum (GeV)", "Count", "Particle y-Momentum Distribution"));
+ module.addPlot1D(new FormattedPlot1D((IHistogram1D) tree.find("MC Analysis/Particle z-Momentum Distribution"),
+ plotColor, "Momentum (GeV)", "Count", "Particle z-Momentum Distribution"));
+ module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MC Analysis/Electron\\Electron 2D Momentum Distribution"),
+ true, "Particle 1 Momentum (GeV)", "Particle 2 Momentum (GeV)", "2D Momentum Sum Distribution"));
+ module.addPlot2D(new FormattedPlot2D((IHistogram2D) tree.find("MC Analysis/Particle Momentum Distribution"),
+ true, "px (GeV)", "py (GeV)", "Particle x/y Momentum Distribution"));
+
+ // Display the plots.
+ module.displayPlots();
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/RafoTridentFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/RafoTridentFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/RafoTridentFormatter.java Wed Mar 9 11:43:24 2016
@@ -13,101 +13,101 @@
import hep.aida.ITree;
public class RafoTridentFormatter {
- /**
- * Loads all plots in a file and formats them according to the
- * indicated style.
- * @param args - Unused default executable parameter.
- * @throws IOException Occurs if there is an issue opening the file.
- */
- public static void main(String[] args) throws IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\";
-
- // Define the new name of the file containing the trigger plots.
- String plotFile = rootDir + "mte-out.aida";
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(plotFile);
- if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
-
- // Declare the histogram names.
- String energySumName = "Energy Sum";
- String timeCoincidenceName = "Time Coincidence";
- String timeEnergy2DName = "Cluster Time vs. Cluster Energy";
- String hCoplanaritySum2DName = "Hardware Coplanarity vs. Energy Sum";
- String coplanaritySum2DName = "Calculated Coplanarity vs. Energy Sum";
- String energySum2DName = "Top Cluster Energy vs. Bottom Cluster Energy";
- String fiducial = " (Fiducial Region)";
-
- // Get the histograms.
- IHistogram1D[] energySum = {
- (IHistogram1D) tree.find("Trident/" + energySumName),
- (IHistogram1D) tree.find("Trident/" + energySumName + fiducial)
- };
- IHistogram1D[] timeCoincidence = {
- (IHistogram1D) tree.find("Trident/" + timeCoincidenceName),
- (IHistogram1D) tree.find("Trident/" + timeCoincidenceName + fiducial)
- };
- IHistogram2D[] coplanaritySum = {
- (IHistogram2D) tree.find("Trident/" + coplanaritySum2DName),
- (IHistogram2D) tree.find("Trident/" + coplanaritySum2DName + fiducial)
- };
- IHistogram2D[] hcoplanaritySum = {
- (IHistogram2D) tree.find("Trident/" + hCoplanaritySum2DName),
- (IHistogram2D) tree.find("Trident/" + hCoplanaritySum2DName + fiducial)
- };
- IHistogram2D[] energySum2D = {
- (IHistogram2D) tree.find("Trident/" + energySum2DName),
- (IHistogram2D) tree.find("Trident/" + energySum2DName + fiducial)
- };
- IHistogram2D[] timeEnergy = {
- (IHistogram2D) tree.find("Trident/" + timeEnergy2DName),
- (IHistogram2D) tree.find("Trident/" + timeEnergy2DName + fiducial)
- };
-
- // Define the scaling factors for each plot.
- double scaleFactor = 19000.0 / 9736969.0;
-
- // Define the plot titles and arrays for 1D plots.
- IHistogram1D[][] plots = { energySum, timeCoincidence };
- String titles[] = { energySumName, timeCoincidenceName, coplanaritySum2DName, hCoplanaritySum2DName, energySum2DName, timeEnergy2DName };
- String[] xTitles = { "Energy (GeV)", "Time Difference (ns)" };
- String yTitle = "Rate (Hz)";
-
- // Define the plot titles and arrays for 2D plots.
- IHistogram2D[][] plots2D = { coplanaritySum, hcoplanaritySum, energySum2D, timeEnergy };
- String[] titles2D = { coplanaritySum2DName, hCoplanaritySum2DName, energySum2DName, timeEnergy2DName };
- String[] xTitles2D = { "Coplanarity (Degrees)", "Coplanarity (Degrees)", "Top Cluster Energy (GeV)", "Time Coincidence (ns)" };
- String[] yTitles2D = { "Energy Sum (GeV)", "Energy Sum (GeV)", "Bottom Cluster Energy (GeV)", "Energy Sum (GeV)" };
- String zTitle2D = "Rate (Hz)";
-
- // Create a plot formatting module.
- PlotFormatModule module = new PlotFormatModule();
-
- // Define the plot color.
- ColorStyle plotColor = ColorStyle.MS_BLUE;
-
- // Define the plots to be read.
- for(int i = 0; i < plots.length; i++) {
- plots[i][0].scale(scaleFactor);
- plots[i][1].scale(scaleFactor);
- module.addPlot1D(new FormattedPlot1D(plots[i][0], plotColor, xTitles[i], yTitle, titles[i]));
- module.addPlot1D(new FormattedPlot1D(plots[i][1], plotColor, xTitles[i], yTitle, titles[i] + fiducial));
- }
- for(int i = 0; i < plots2D.length; i++) {
- plots2D[i][0].scale(scaleFactor);
- plots2D[i][1].scale(scaleFactor);
- module.addPlot2D(new FormattedPlot2D(plots2D[i][0], false, xTitles2D[i], yTitles2D[i], titles2D[i]));
- module.addPlot2D(new FormattedPlot2D(plots2D[i][1], false, xTitles2D[i], yTitles2D[i], titles2D[i] + fiducial));
- }
-
- // Display the plots.
- //module.displayPlots();
- module.savePlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\run-5772\\RafoPlots\\");
- module.exportPlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\run-5772\\RafoPlots\\");
-
- // Close the tree.
- tree.close();
- }
+ /**
+ * Loads all plots in a file and formats them according to the
+ * indicated style.
+ * @param args - Unused default executable parameter.
+ * @throws IOException Occurs if there is an issue opening the file.
+ */
+ public static void main(String[] args) throws IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String plotFile = rootDir + "mte-out.aida";
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(plotFile);
+ if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+
+ // Declare the histogram names.
+ String energySumName = "Energy Sum";
+ String timeCoincidenceName = "Time Coincidence";
+ String timeEnergy2DName = "Cluster Time vs. Cluster Energy";
+ String hCoplanaritySum2DName = "Hardware Coplanarity vs. Energy Sum";
+ String coplanaritySum2DName = "Calculated Coplanarity vs. Energy Sum";
+ String energySum2DName = "Top Cluster Energy vs. Bottom Cluster Energy";
+ String fiducial = " (Fiducial Region)";
+
+ // Get the histograms.
+ IHistogram1D[] energySum = {
+ (IHistogram1D) tree.find("Trident/" + energySumName),
+ (IHistogram1D) tree.find("Trident/" + energySumName + fiducial)
+ };
+ IHistogram1D[] timeCoincidence = {
+ (IHistogram1D) tree.find("Trident/" + timeCoincidenceName),
+ (IHistogram1D) tree.find("Trident/" + timeCoincidenceName + fiducial)
+ };
+ IHistogram2D[] coplanaritySum = {
+ (IHistogram2D) tree.find("Trident/" + coplanaritySum2DName),
+ (IHistogram2D) tree.find("Trident/" + coplanaritySum2DName + fiducial)
+ };
+ IHistogram2D[] hcoplanaritySum = {
+ (IHistogram2D) tree.find("Trident/" + hCoplanaritySum2DName),
+ (IHistogram2D) tree.find("Trident/" + hCoplanaritySum2DName + fiducial)
+ };
+ IHistogram2D[] energySum2D = {
+ (IHistogram2D) tree.find("Trident/" + energySum2DName),
+ (IHistogram2D) tree.find("Trident/" + energySum2DName + fiducial)
+ };
+ IHistogram2D[] timeEnergy = {
+ (IHistogram2D) tree.find("Trident/" + timeEnergy2DName),
+ (IHistogram2D) tree.find("Trident/" + timeEnergy2DName + fiducial)
+ };
+
+ // Define the scaling factors for each plot.
+ double scaleFactor = 19000.0 / 9736969.0;
+
+ // Define the plot titles and arrays for 1D plots.
+ IHistogram1D[][] plots = { energySum, timeCoincidence };
+ String titles[] = { energySumName, timeCoincidenceName, coplanaritySum2DName, hCoplanaritySum2DName, energySum2DName, timeEnergy2DName };
+ String[] xTitles = { "Energy (GeV)", "Time Difference (ns)" };
+ String yTitle = "Rate (Hz)";
+
+ // Define the plot titles and arrays for 2D plots.
+ IHistogram2D[][] plots2D = { coplanaritySum, hcoplanaritySum, energySum2D, timeEnergy };
+ String[] titles2D = { coplanaritySum2DName, hCoplanaritySum2DName, energySum2DName, timeEnergy2DName };
+ String[] xTitles2D = { "Coplanarity (Degrees)", "Coplanarity (Degrees)", "Top Cluster Energy (GeV)", "Time Coincidence (ns)" };
+ String[] yTitles2D = { "Energy Sum (GeV)", "Energy Sum (GeV)", "Bottom Cluster Energy (GeV)", "Energy Sum (GeV)" };
+ String zTitle2D = "Rate (Hz)";
+
+ // Create a plot formatting module.
+ PlotFormatModule module = new PlotFormatModule();
+
+ // Define the plot color.
+ ColorStyle plotColor = ColorStyle.MS_BLUE;
+
+ // Define the plots to be read.
+ for(int i = 0; i < plots.length; i++) {
+ plots[i][0].scale(scaleFactor);
+ plots[i][1].scale(scaleFactor);
+ module.addPlot1D(new FormattedPlot1D(plots[i][0], plotColor, xTitles[i], yTitle, titles[i]));
+ module.addPlot1D(new FormattedPlot1D(plots[i][1], plotColor, xTitles[i], yTitle, titles[i] + fiducial));
+ }
+ for(int i = 0; i < plots2D.length; i++) {
+ plots2D[i][0].scale(scaleFactor);
+ plots2D[i][1].scale(scaleFactor);
+ module.addPlot2D(new FormattedPlot2D(plots2D[i][0], false, xTitles2D[i], yTitles2D[i], titles2D[i]));
+ module.addPlot2D(new FormattedPlot2D(plots2D[i][1], false, xTitles2D[i], yTitles2D[i], titles2D[i] + fiducial));
+ }
+
+ // Display the plots.
+ //module.displayPlots();
+ module.savePlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\run-5772\\RafoPlots\\");
+ module.exportPlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\run-5772\\RafoPlots\\");
+
+ // Close the tree.
+ tree.close();
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/SingleTriggerPlotsFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/SingleTriggerPlotsFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/SingleTriggerPlotsFormatter.java Wed Mar 9 11:43:24 2016
@@ -13,151 +13,151 @@
import hep.aida.ITree;
public class SingleTriggerPlotsFormatter {
-
- public static void main(String[] args) throws IllegalArgumentException, IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\";
-
- // Define the new name of the file containing the trigger plots.
- String plotFile = rootDir + "trident-readout-full.aida";
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(plotFile);
- if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
-
- // Define plots variables.
- int UNCUT = 0;
- int TRIGGERED = 1;
- String[] plotsDir = { "NoCuts/", "PassedAll/" };
- int PLOT_HIT_COUNT = 0;
- int PLOT_SEED_ENERGY = 1;
- int PLOT_CLUSTER_ENERGY = 2;
- int PLOT_COPLANARITY = 3;
- int PLOT_ENERGY_SUM = 4;
- int PLOT_ENERGY_DIFF = 5;
- int PLOT_ENERGY_SLOPE = 6;
- int PLOT_SEED_DIST = 0;
- int PLOT_ENERGY_SUM_2D = 1;
-
- // Define the internal plot names.
- String[] plotNameInternal1D = new String[7];
- String[] plotNameInternal2D = new String[2];
- plotNameInternal1D[PLOT_HIT_COUNT] = "Cluster Hit Count";
- plotNameInternal1D[PLOT_SEED_ENERGY] = "Cluster Seed Energy";
- plotNameInternal1D[PLOT_CLUSTER_ENERGY] = "Cluster Total Energy";
- plotNameInternal1D[PLOT_COPLANARITY] = "Pair Coplanarity";
- plotNameInternal1D[PLOT_ENERGY_SUM] = "Pair Energy Sum";
- plotNameInternal1D[PLOT_ENERGY_DIFF] = "Pair Energy Difference";
- plotNameInternal1D[PLOT_ENERGY_SLOPE] = "Pair Energy Slope";
- plotNameInternal2D[PLOT_SEED_DIST] = "Cluster Seed";
- plotNameInternal2D[PLOT_ENERGY_SUM_2D] = "Pair Energy Sum 2D";
-
- // Define the plot display names.
- String[] plotName1D = new String[7];
- String[] plotName2D = new String[2];
- for(int j = 0; j < plotNameInternal1D.length; j++) {
- plotName1D[j] = plotNameInternal1D[j];
- }
- for(int j = 0; j < plotNameInternal2D.length; j++) {
- plotName2D[j] = plotNameInternal2D[j];
- }
- plotName1D[PLOT_ENERGY_SUM] = "1D Pair Energy Sum";
- plotName2D[PLOT_SEED_DIST] = "Cluster Seed Distribution";
- plotName2D[PLOT_ENERGY_SUM_2D] = "2D Pair Energy Sum";
-
- String[] xTitles1D = new String[plotName1D.length];
- String[] xTitles2D = new String[plotName2D.length];
- xTitles1D[PLOT_HIT_COUNT] = "Hit Count";
- xTitles1D[PLOT_SEED_ENERGY] = "Seed Energy (GeV)";
- xTitles1D[PLOT_CLUSTER_ENERGY] = "Cluster Energy (GeV)";
- xTitles1D[PLOT_COPLANARITY] = "Coplanarity Angle (Degrees)";
- xTitles1D[PLOT_ENERGY_SUM] = "Energy Sum (GeV)";
- xTitles1D[PLOT_ENERGY_DIFF] = "Energy Difference (GeV)";
- xTitles1D[PLOT_ENERGY_SLOPE] = "Energy Slope (GeV)";
- xTitles2D[PLOT_SEED_DIST] = "x-Index";
- xTitles2D[PLOT_ENERGY_SUM_2D] = "First Cluster Energy (GeV)";
- String yTitle1D = "Count";
- String[] yTitles2D = new String[plotName2D.length];
- yTitles2D[PLOT_SEED_DIST] = "y-Index";
- yTitles2D[PLOT_ENERGY_SUM_2D] = "Second Cluster Energy (GeV)";
-
- // Define axis ranges.
- double[] axisRanges1D = new double[plotName1D.length];
- axisRanges1D[PLOT_HIT_COUNT] = -1;
- axisRanges1D[PLOT_SEED_ENERGY] = 1.1;
- axisRanges1D[PLOT_CLUSTER_ENERGY] = 1.1;
- axisRanges1D[PLOT_COPLANARITY] = 180;
- axisRanges1D[PLOT_ENERGY_SUM] = 2.2;
- axisRanges1D[PLOT_ENERGY_DIFF] = 1.1;
- axisRanges1D[PLOT_ENERGY_SLOPE] = 2.4;
- double[] xAxisRanges2D = new double[plotName2D.length];
- double[] yAxisRanges2D = new double[plotName2D.length];
- xAxisRanges2D[PLOT_SEED_DIST] = -1;
- xAxisRanges2D[PLOT_ENERGY_SUM_2D] = 1.1;
- yAxisRanges2D[PLOT_SEED_DIST] = -1;
- yAxisRanges2D[PLOT_ENERGY_SUM_2D] = 1.1;
-
- // Define the plot names.
- String[][] plotLocations1D = new String[plotsDir.length][plotNameInternal1D.length];
- String[][] plotLocations2D = new String[plotsDir.length][plotNameInternal2D.length];
- for(int i = 0; i < plotsDir.length; i++) {
- for(int j = 0; j < plotNameInternal1D.length; j++) {
- plotLocations1D[i][j] = plotsDir[i] + plotNameInternal1D[j];
- }
- }
- for(int i = 0; i < plotsDir.length; i++) {
- for(int j = 0; j < plotNameInternal2D.length; j++) {
- plotLocations2D[i][j] = plotsDir[i] + plotNameInternal2D[j];
- }
- }
-
- // Create a plot formatting module.
- PlotFormatModule module = new PlotFormatModule();
-
- // Load the plot objects.
- for(int i = 0; i < plotName1D.length; i++) {
- // Get the uncut and triggered plots.
- IHistogram1D uncutPlot = (IHistogram1D) tree.find(plotLocations1D[UNCUT][i]);
- IHistogram1D triggeredPlot = (IHistogram1D) tree.find(plotLocations1D[TRIGGERED][i] + " (Passed All Cuts)");
-
- // Make a formatted plot for each.
- FormattedPlot1D uncutFormattedPlot;
- FormattedPlot1D triggeredFormattedPlot;
- if(axisRanges1D[i] != -1) {
- uncutFormattedPlot = new FormattedPlot1D(uncutPlot, PlotsFormatter.ColorStyle.GREY, xTitles1D[i], yTitle1D, plotName1D[i] + " (No Cuts)", axisRanges1D[i]);
- triggeredFormattedPlot = new FormattedPlot1D(triggeredPlot, PlotsFormatter.ColorStyle.MS_GREEN, xTitles1D[i], yTitle1D, plotName1D[i] + " (Triggered)", axisRanges1D[i]);
- } else {
- uncutFormattedPlot = new FormattedPlot1D(uncutPlot, PlotsFormatter.ColorStyle.GREY, xTitles1D[i], yTitle1D, plotName1D[i] + " (No Cuts)");
- triggeredFormattedPlot = new FormattedPlot1D(triggeredPlot, PlotsFormatter.ColorStyle.MS_GREEN, xTitles1D[i], yTitle1D, plotName1D[i] + " (Triggered)");
- }
-
- // Add the plots to the module.
- module.addPlot1D(uncutFormattedPlot);
- module.addPlot1D(triggeredFormattedPlot);
- }
- for(int i = 0; i < plotName2D.length; i++) {
- // Get the uncut and triggered plots.
- IHistogram2D uncutPlot = (IHistogram2D) tree.find(plotLocations2D[UNCUT][i]);
- IHistogram2D triggeredPlot = (IHistogram2D) tree.find(plotLocations2D[TRIGGERED][i] + " (Passed All Cuts)");
-
- // Make a formatted plot for each.
- FormattedPlot2D uncutFormattedPlot;
- FormattedPlot2D triggeredFormattedPlot;
- if(xAxisRanges2D[i] != -1) {
- uncutFormattedPlot = new FormattedPlot2D(uncutPlot, true, xTitles2D[i], yTitles2D[i], plotName2D[i] + " (No Cuts)", xAxisRanges2D[i], yAxisRanges2D[i]);
- triggeredFormattedPlot = new FormattedPlot2D(triggeredPlot, true, xTitles2D[i], yTitles2D[i], plotName2D[i] + " (Triggered)", xAxisRanges2D[i], yAxisRanges2D[i]);
- } else {
- uncutFormattedPlot = new FormattedPlot2D(uncutPlot, true, xTitles2D[i], yTitles2D[i], plotName2D[i] + " (No Cuts)");
- triggeredFormattedPlot = new FormattedPlot2D(triggeredPlot, true, xTitles2D[i], yTitles2D[i], plotName2D[i] + " (Triggered)");
- }
-
- // Add the plots to the module.
- module.addPlot2D(uncutFormattedPlot);
- module.addPlot2D(triggeredFormattedPlot);
- }
-
- // Save the plots.
- module.savePlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\MonteCarlo\\Trident\\Trigger\\");
- }
+
+ public static void main(String[] args) throws IllegalArgumentException, IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String plotFile = rootDir + "trident-readout-full.aida";
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(plotFile);
+ if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+
+ // Define plots variables.
+ int UNCUT = 0;
+ int TRIGGERED = 1;
+ String[] plotsDir = { "NoCuts/", "PassedAll/" };
+ int PLOT_HIT_COUNT = 0;
+ int PLOT_SEED_ENERGY = 1;
+ int PLOT_CLUSTER_ENERGY = 2;
+ int PLOT_COPLANARITY = 3;
+ int PLOT_ENERGY_SUM = 4;
+ int PLOT_ENERGY_DIFF = 5;
+ int PLOT_ENERGY_SLOPE = 6;
+ int PLOT_SEED_DIST = 0;
+ int PLOT_ENERGY_SUM_2D = 1;
+
+ // Define the internal plot names.
+ String[] plotNameInternal1D = new String[7];
+ String[] plotNameInternal2D = new String[2];
+ plotNameInternal1D[PLOT_HIT_COUNT] = "Cluster Hit Count";
+ plotNameInternal1D[PLOT_SEED_ENERGY] = "Cluster Seed Energy";
+ plotNameInternal1D[PLOT_CLUSTER_ENERGY] = "Cluster Total Energy";
+ plotNameInternal1D[PLOT_COPLANARITY] = "Pair Coplanarity";
+ plotNameInternal1D[PLOT_ENERGY_SUM] = "Pair Energy Sum";
+ plotNameInternal1D[PLOT_ENERGY_DIFF] = "Pair Energy Difference";
+ plotNameInternal1D[PLOT_ENERGY_SLOPE] = "Pair Energy Slope";
+ plotNameInternal2D[PLOT_SEED_DIST] = "Cluster Seed";
+ plotNameInternal2D[PLOT_ENERGY_SUM_2D] = "Pair Energy Sum 2D";
+
+ // Define the plot display names.
+ String[] plotName1D = new String[7];
+ String[] plotName2D = new String[2];
+ for(int j = 0; j < plotNameInternal1D.length; j++) {
+ plotName1D[j] = plotNameInternal1D[j];
+ }
+ for(int j = 0; j < plotNameInternal2D.length; j++) {
+ plotName2D[j] = plotNameInternal2D[j];
+ }
+ plotName1D[PLOT_ENERGY_SUM] = "1D Pair Energy Sum";
+ plotName2D[PLOT_SEED_DIST] = "Cluster Seed Distribution";
+ plotName2D[PLOT_ENERGY_SUM_2D] = "2D Pair Energy Sum";
+
+ String[] xTitles1D = new String[plotName1D.length];
+ String[] xTitles2D = new String[plotName2D.length];
+ xTitles1D[PLOT_HIT_COUNT] = "Hit Count";
+ xTitles1D[PLOT_SEED_ENERGY] = "Seed Energy (GeV)";
+ xTitles1D[PLOT_CLUSTER_ENERGY] = "Cluster Energy (GeV)";
+ xTitles1D[PLOT_COPLANARITY] = "Coplanarity Angle (Degrees)";
+ xTitles1D[PLOT_ENERGY_SUM] = "Energy Sum (GeV)";
+ xTitles1D[PLOT_ENERGY_DIFF] = "Energy Difference (GeV)";
+ xTitles1D[PLOT_ENERGY_SLOPE] = "Energy Slope (GeV)";
+ xTitles2D[PLOT_SEED_DIST] = "x-Index";
+ xTitles2D[PLOT_ENERGY_SUM_2D] = "First Cluster Energy (GeV)";
+ String yTitle1D = "Count";
+ String[] yTitles2D = new String[plotName2D.length];
+ yTitles2D[PLOT_SEED_DIST] = "y-Index";
+ yTitles2D[PLOT_ENERGY_SUM_2D] = "Second Cluster Energy (GeV)";
+
+ // Define axis ranges.
+ double[] axisRanges1D = new double[plotName1D.length];
+ axisRanges1D[PLOT_HIT_COUNT] = -1;
+ axisRanges1D[PLOT_SEED_ENERGY] = 1.1;
+ axisRanges1D[PLOT_CLUSTER_ENERGY] = 1.1;
+ axisRanges1D[PLOT_COPLANARITY] = 180;
+ axisRanges1D[PLOT_ENERGY_SUM] = 2.2;
+ axisRanges1D[PLOT_ENERGY_DIFF] = 1.1;
+ axisRanges1D[PLOT_ENERGY_SLOPE] = 2.4;
+ double[] xAxisRanges2D = new double[plotName2D.length];
+ double[] yAxisRanges2D = new double[plotName2D.length];
+ xAxisRanges2D[PLOT_SEED_DIST] = -1;
+ xAxisRanges2D[PLOT_ENERGY_SUM_2D] = 1.1;
+ yAxisRanges2D[PLOT_SEED_DIST] = -1;
+ yAxisRanges2D[PLOT_ENERGY_SUM_2D] = 1.1;
+
+ // Define the plot names.
+ String[][] plotLocations1D = new String[plotsDir.length][plotNameInternal1D.length];
+ String[][] plotLocations2D = new String[plotsDir.length][plotNameInternal2D.length];
+ for(int i = 0; i < plotsDir.length; i++) {
+ for(int j = 0; j < plotNameInternal1D.length; j++) {
+ plotLocations1D[i][j] = plotsDir[i] + plotNameInternal1D[j];
+ }
+ }
+ for(int i = 0; i < plotsDir.length; i++) {
+ for(int j = 0; j < plotNameInternal2D.length; j++) {
+ plotLocations2D[i][j] = plotsDir[i] + plotNameInternal2D[j];
+ }
+ }
+
+ // Create a plot formatting module.
+ PlotFormatModule module = new PlotFormatModule();
+
+ // Load the plot objects.
+ for(int i = 0; i < plotName1D.length; i++) {
+ // Get the uncut and triggered plots.
+ IHistogram1D uncutPlot = (IHistogram1D) tree.find(plotLocations1D[UNCUT][i]);
+ IHistogram1D triggeredPlot = (IHistogram1D) tree.find(plotLocations1D[TRIGGERED][i] + " (Passed All Cuts)");
+
+ // Make a formatted plot for each.
+ FormattedPlot1D uncutFormattedPlot;
+ FormattedPlot1D triggeredFormattedPlot;
+ if(axisRanges1D[i] != -1) {
+ uncutFormattedPlot = new FormattedPlot1D(uncutPlot, PlotsFormatter.ColorStyle.GREY, xTitles1D[i], yTitle1D, plotName1D[i] + " (No Cuts)", axisRanges1D[i]);
+ triggeredFormattedPlot = new FormattedPlot1D(triggeredPlot, PlotsFormatter.ColorStyle.MS_GREEN, xTitles1D[i], yTitle1D, plotName1D[i] + " (Triggered)", axisRanges1D[i]);
+ } else {
+ uncutFormattedPlot = new FormattedPlot1D(uncutPlot, PlotsFormatter.ColorStyle.GREY, xTitles1D[i], yTitle1D, plotName1D[i] + " (No Cuts)");
+ triggeredFormattedPlot = new FormattedPlot1D(triggeredPlot, PlotsFormatter.ColorStyle.MS_GREEN, xTitles1D[i], yTitle1D, plotName1D[i] + " (Triggered)");
+ }
+
+ // Add the plots to the module.
+ module.addPlot1D(uncutFormattedPlot);
+ module.addPlot1D(triggeredFormattedPlot);
+ }
+ for(int i = 0; i < plotName2D.length; i++) {
+ // Get the uncut and triggered plots.
+ IHistogram2D uncutPlot = (IHistogram2D) tree.find(plotLocations2D[UNCUT][i]);
+ IHistogram2D triggeredPlot = (IHistogram2D) tree.find(plotLocations2D[TRIGGERED][i] + " (Passed All Cuts)");
+
+ // Make a formatted plot for each.
+ FormattedPlot2D uncutFormattedPlot;
+ FormattedPlot2D triggeredFormattedPlot;
+ if(xAxisRanges2D[i] != -1) {
+ uncutFormattedPlot = new FormattedPlot2D(uncutPlot, true, xTitles2D[i], yTitles2D[i], plotName2D[i] + " (No Cuts)", xAxisRanges2D[i], yAxisRanges2D[i]);
+ triggeredFormattedPlot = new FormattedPlot2D(triggeredPlot, true, xTitles2D[i], yTitles2D[i], plotName2D[i] + " (Triggered)", xAxisRanges2D[i], yAxisRanges2D[i]);
+ } else {
+ uncutFormattedPlot = new FormattedPlot2D(uncutPlot, true, xTitles2D[i], yTitles2D[i], plotName2D[i] + " (No Cuts)");
+ triggeredFormattedPlot = new FormattedPlot2D(triggeredPlot, true, xTitles2D[i], yTitles2D[i], plotName2D[i] + " (Triggered)");
+ }
+
+ // Add the plots to the module.
+ module.addPlot2D(uncutFormattedPlot);
+ module.addPlot2D(triggeredFormattedPlot);
+ }
+
+ // Save the plots.
+ module.savePlots("C:\\Users\\Kyle\\Desktop\\EnergyShift\\MonteCarlo\\Trident\\Trigger\\");
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/TridentTrackFormatter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/TridentTrackFormatter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/TridentTrackFormatter.java Wed Mar 9 11:43:24 2016
@@ -16,187 +16,187 @@
import hep.aida.ref.plotter.PlotterRegion;
public class TridentTrackFormatter {
- /**
- * Loads all plots in a file and formats them according to the
- * indicated style.
- * @param args - Unused default executable parameter.
- * @throws IOException Occurs if there is an issue opening the file.
- */
- public static void main(String[] args) throws IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\tmp\\";
-
- // Define the new name of the file containing the trigger plots.
- String plotFile = rootDir + "trident-out.aida";
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(plotFile);
- if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
-
- // Declare the histogram names.
- String trackName = "Tracks in Event (All)";
- String posTrackName = "Tracks in Event (Positive)";
- String negTrackName = "Tracks in Event (Negative)";
- String posMomentumName = "Momentum (Positive)";
- String negMomentumName = "Momentum (Negative)";
- String energySumName = "Energy Sum";
- String momentumSumName = "Momentum Sum";
- String energyMomentumDiffName = "Energy-Momentum Difference";
- String invariantMassName = "Invariant Mass";
- String energySum2DName = "2D Energy Sum";
- String momentumSum2DName = "2D Momentum Sum";
- String positionName = "Track Cluster Position";
-
- // Get the histograms.
- IHistogram1D[] tracks = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + trackName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + trackName)
- };
- IHistogram1D[] posTracks = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + posTrackName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + posTrackName)
- };
- IHistogram1D[] negTracks = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + negTrackName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + negTrackName)
- };
- IHistogram1D[] posMomentum = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + posMomentumName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + posMomentumName)
- };
- IHistogram1D[] negMomentum = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + negMomentumName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + negMomentumName)
- };
- IHistogram1D[] energySum = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + energySumName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + energySumName)
- };
- IHistogram1D[] momentumSum = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + momentumSumName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + momentumSumName)
- };
- IHistogram1D[] energyMomentumDiff = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + energyMomentumDiffName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + energyMomentumDiffName)
- };
- IHistogram1D[] invariantMass = {
- (IHistogram1D) tree.find("Trident Analysis/All/" + invariantMassName),
- (IHistogram1D) tree.find("Trident Analysis/Cluster/" + invariantMassName)
- };
- IHistogram2D[] energySum2D = {
- (IHistogram2D) tree.find("Trident Analysis/All/" + energySum2DName),
- (IHistogram2D) tree.find("Trident Analysis/Cluster/" + energySum2DName)
- };
- IHistogram2D[] momentumSum2D = {
- (IHistogram2D) tree.find("Trident Analysis/All/" + momentumSum2DName),
- (IHistogram2D) tree.find("Trident Analysis/Cluster/" + momentumSum2DName)
- };
- IHistogram2D[] position = {
- (IHistogram2D) tree.find("Trident Analysis/All/" + positionName),
- (IHistogram2D) tree.find("Trident Analysis/Cluster/" + positionName)
- };
-
- // Re-bin the histograms to have 5-times larger bins. First,
- // get the bin count and upper and lower bounds of the plot.
- int bins = invariantMass[0].axis().bins();
- double low = invariantMass[0].axis().binLowerEdge(0);
- double high = invariantMass[0].axis().binUpperEdge(invariantMass[0].axis().bins() - 1);
-
- // Create new plots with the larger bin sizes.
- AIDA aida = AIDA.defaultInstance();
- IHistogram1D[] newPlot = new IHistogram1D[2];
- newPlot[0] = aida.histogram1D(invariantMassName, bins / 5, low, high);
- newPlot[1] = aida.histogram1D("Cluster " + invariantMassName, bins / 5, low, high);
-
- // Populate the new plots with the data from the old ones.
- for(int j = 0; j < 2; j++) {
- for(int i = 0; i < bins; i++) {
- int entries = invariantMass[j].binEntries(i);
- double center = invariantMass[j].axis().binCenter(i);
- for(int k = 0; k < entries; k++) {
- newPlot[j].fill(center);
- }
- }
- }
-
- // Replace the old plots.
- invariantMass = newPlot;
-
- // Define the scaling factors for each plot.
- double scaleFactor = 1;
-
- // Define the plot titles and arrays for 1D plots.
- IHistogram[][] plots = { tracks, posTracks, negTracks, posMomentum, negMomentum, energySum, momentumSum, energyMomentumDiff, invariantMass };
- String[] titles = { trackName, posTrackName, negTrackName, posMomentumName, negMomentumName, energySumName, momentumSumName,
- energyMomentumDiffName, invariantMassName };
- String[] xTitles = { "Tracks", "Tracks", "Tracks", "Momentum (GeV)", "Momentum (GeV)", "Energy Sum (GeV)", "Momentum Sum (GeV)",
- "|E_Cluster - P_Track| (GeV)", "Invariant Mass (GeV)" };
- String yTitle = "Count";
-
- // Define the plot titles and arrays for 2D plots.
- IHistogram2D[][] plots2D = { energySum2D, momentumSum2D, position };
- String[] titles2D = { energySum2DName, momentumSum2DName, positionName };
- String[] xTitles2D = { "Positive Cluster Energy", "Positive Track Momentum", "x-Index" };
- String[] yTitles2D = { "Negative Cluster Energy", "Negative Track Momentum", "y-Index" };
- String zTitle2D = "Count";
-
- // Create a plotter factory.
- IPlotterFactory plotterFactory = af.createPlotterFactory();
-
- // Format and display the basic histograms.
- for(int i = 0; i < plots.length; i++) {
- for(int j = 0; j < 2; j++) {
- // Scale the histogram by the appropriate scaling factor.
- plots[i][j].scale(1.0 / scaleFactor);
-
- // Create a plotter and plotting region for the plot.
- IPlotter plotter = plotterFactory.create((j == 1 ? "Cluster " : "") + titles[i]);
- plotter.createRegions(1);
- plotter.region(0).plot(plots[i][j]);
-
- // Format the axis labels.
- PlotterRegion region = (PlotterRegion) plotter.region(0);
- region.getPlot().setTitle((j == 1 ? "Cluster " : "") + titles[i]);
- region.getPlot().getXAxis().setLabel(xTitles[i]);
- region.getPlot().getYAxis().setLabel(yTitle);
-
- // Format the fonts and general plot presentation.
- PlotsFormatter.setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
-
- // Show the plot.
- plotter.setParameter("plotterWidth", "2000");
- plotter.setParameter("plotterHeight", "1200");
- plotter.show();
- }
- }
-
- // Format and display the 2D histogram.
- for(int i = 0; i < plots2D.length; i++) {
- for(int j = 0; j < 2; j++) {
- plots2D[i][j].scale(1.0 / scaleFactor);
- IPlotter plotter2D = plotterFactory.create((j == 1 ? "Cluster " : "") + titles2D[i]);
- plotter2D.createRegions(1);
- plotter2D.region(0).plot(plots2D[i][j]);
-
- // Format the axis labels.
- PlotterRegion region2D = (PlotterRegion) plotter2D.region(0);
- region2D.getPlot().setTitle((j == 1 ? "Cluster " : "") + titles2D[i]);
- region2D.getPlot().getXAxis().setLabel(xTitles2D[i]);
- region2D.getPlot().getYAxis().setLabel(yTitles2D[i]);
-
- // Format the fonts and general plot presentation.
- PlotsFormatter.setDefault2DStyle(region2D, true);
-
- // Show the plot.
- plotter2D.setParameter("plotterWidth", "2000");
- plotter2D.setParameter("plotterHeight", "1200");
- plotter2D.show();
- }
- }
-
- // Close the tree.
- tree.close();
- }
+ /**
+ * Loads all plots in a file and formats them according to the
+ * indicated style.
+ * @param args - Unused default executable parameter.
+ * @throws IOException Occurs if there is an issue opening the file.
+ */
+ public static void main(String[] args) throws IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\tmp\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String plotFile = rootDir + "trident-out.aida";
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(plotFile);
+ if(tree == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+
+ // Declare the histogram names.
+ String trackName = "Tracks in Event (All)";
+ String posTrackName = "Tracks in Event (Positive)";
+ String negTrackName = "Tracks in Event (Negative)";
+ String posMomentumName = "Momentum (Positive)";
+ String negMomentumName = "Momentum (Negative)";
+ String energySumName = "Energy Sum";
+ String momentumSumName = "Momentum Sum";
+ String energyMomentumDiffName = "Energy-Momentum Difference";
+ String invariantMassName = "Invariant Mass";
+ String energySum2DName = "2D Energy Sum";
+ String momentumSum2DName = "2D Momentum Sum";
+ String positionName = "Track Cluster Position";
+
+ // Get the histograms.
+ IHistogram1D[] tracks = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + trackName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + trackName)
+ };
+ IHistogram1D[] posTracks = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + posTrackName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + posTrackName)
+ };
+ IHistogram1D[] negTracks = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + negTrackName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + negTrackName)
+ };
+ IHistogram1D[] posMomentum = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + posMomentumName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + posMomentumName)
+ };
+ IHistogram1D[] negMomentum = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + negMomentumName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + negMomentumName)
+ };
+ IHistogram1D[] energySum = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + energySumName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + energySumName)
+ };
+ IHistogram1D[] momentumSum = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + momentumSumName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + momentumSumName)
+ };
+ IHistogram1D[] energyMomentumDiff = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + energyMomentumDiffName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + energyMomentumDiffName)
+ };
+ IHistogram1D[] invariantMass = {
+ (IHistogram1D) tree.find("Trident Analysis/All/" + invariantMassName),
+ (IHistogram1D) tree.find("Trident Analysis/Cluster/" + invariantMassName)
+ };
+ IHistogram2D[] energySum2D = {
+ (IHistogram2D) tree.find("Trident Analysis/All/" + energySum2DName),
+ (IHistogram2D) tree.find("Trident Analysis/Cluster/" + energySum2DName)
+ };
+ IHistogram2D[] momentumSum2D = {
+ (IHistogram2D) tree.find("Trident Analysis/All/" + momentumSum2DName),
+ (IHistogram2D) tree.find("Trident Analysis/Cluster/" + momentumSum2DName)
+ };
+ IHistogram2D[] position = {
+ (IHistogram2D) tree.find("Trident Analysis/All/" + positionName),
+ (IHistogram2D) tree.find("Trident Analysis/Cluster/" + positionName)
+ };
+
+ // Re-bin the histograms to have 5-times larger bins. First,
+ // get the bin count and upper and lower bounds of the plot.
+ int bins = invariantMass[0].axis().bins();
+ double low = invariantMass[0].axis().binLowerEdge(0);
+ double high = invariantMass[0].axis().binUpperEdge(invariantMass[0].axis().bins() - 1);
+
+ // Create new plots with the larger bin sizes.
+ AIDA aida = AIDA.defaultInstance();
+ IHistogram1D[] newPlot = new IHistogram1D[2];
+ newPlot[0] = aida.histogram1D(invariantMassName, bins / 5, low, high);
+ newPlot[1] = aida.histogram1D("Cluster " + invariantMassName, bins / 5, low, high);
+
+ // Populate the new plots with the data from the old ones.
+ for(int j = 0; j < 2; j++) {
+ for(int i = 0; i < bins; i++) {
+ int entries = invariantMass[j].binEntries(i);
+ double center = invariantMass[j].axis().binCenter(i);
+ for(int k = 0; k < entries; k++) {
+ newPlot[j].fill(center);
+ }
+ }
+ }
+
+ // Replace the old plots.
+ invariantMass = newPlot;
+
+ // Define the scaling factors for each plot.
+ double scaleFactor = 1;
+
+ // Define the plot titles and arrays for 1D plots.
+ IHistogram[][] plots = { tracks, posTracks, negTracks, posMomentum, negMomentum, energySum, momentumSum, energyMomentumDiff, invariantMass };
+ String[] titles = { trackName, posTrackName, negTrackName, posMomentumName, negMomentumName, energySumName, momentumSumName,
+ energyMomentumDiffName, invariantMassName };
+ String[] xTitles = { "Tracks", "Tracks", "Tracks", "Momentum (GeV)", "Momentum (GeV)", "Energy Sum (GeV)", "Momentum Sum (GeV)",
+ "|E_Cluster - P_Track| (GeV)", "Invariant Mass (GeV)" };
+ String yTitle = "Count";
+
+ // Define the plot titles and arrays for 2D plots.
+ IHistogram2D[][] plots2D = { energySum2D, momentumSum2D, position };
+ String[] titles2D = { energySum2DName, momentumSum2DName, positionName };
+ String[] xTitles2D = { "Positive Cluster Energy", "Positive Track Momentum", "x-Index" };
+ String[] yTitles2D = { "Negative Cluster Energy", "Negative Track Momentum", "y-Index" };
+ String zTitle2D = "Count";
+
+ // Create a plotter factory.
+ IPlotterFactory plotterFactory = af.createPlotterFactory();
+
+ // Format and display the basic histograms.
+ for(int i = 0; i < plots.length; i++) {
+ for(int j = 0; j < 2; j++) {
+ // Scale the histogram by the appropriate scaling factor.
+ plots[i][j].scale(1.0 / scaleFactor);
+
+ // Create a plotter and plotting region for the plot.
+ IPlotter plotter = plotterFactory.create((j == 1 ? "Cluster " : "") + titles[i]);
+ plotter.createRegions(1);
+ plotter.region(0).plot(plots[i][j]);
+
+ // Format the axis labels.
+ PlotterRegion region = (PlotterRegion) plotter.region(0);
+ region.getPlot().setTitle((j == 1 ? "Cluster " : "") + titles[i]);
+ region.getPlot().getXAxis().setLabel(xTitles[i]);
+ region.getPlot().getYAxis().setLabel(yTitle);
+
+ // Format the fonts and general plot presentation.
+ PlotsFormatter.setDefault1DStyle(region, new ColorStyle[] { ColorStyle.GREY });
+
+ // Show the plot.
+ plotter.setParameter("plotterWidth", "2000");
+ plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+ }
+ }
+
+ // Format and display the 2D histogram.
+ for(int i = 0; i < plots2D.length; i++) {
+ for(int j = 0; j < 2; j++) {
+ plots2D[i][j].scale(1.0 / scaleFactor);
+ IPlotter plotter2D = plotterFactory.create((j == 1 ? "Cluster " : "") + titles2D[i]);
+ plotter2D.createRegions(1);
+ plotter2D.region(0).plot(plots2D[i][j]);
+
+ // Format the axis labels.
+ PlotterRegion region2D = (PlotterRegion) plotter2D.region(0);
+ region2D.getPlot().setTitle((j == 1 ? "Cluster " : "") + titles2D[i]);
+ region2D.getPlot().getXAxis().setLabel(xTitles2D[i]);
+ region2D.getPlot().getYAxis().setLabel(yTitles2D[i]);
+
+ // Format the fonts and general plot presentation.
+ PlotsFormatter.setDefault2DStyle(region2D, true);
+
+ // Show the plot.
+ plotter2D.setParameter("plotterWidth", "2000");
+ plotter2D.setParameter("plotterHeight", "1200");
+ plotter2D.show();
+ }
+ }
+
+ // Close the tree.
+ tree.close();
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/TriggerPlotsFormat.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/TriggerPlotsFormat.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/formatter/TriggerPlotsFormat.java Wed Mar 9 11:43:24 2016
@@ -20,331 +20,331 @@
import hep.aida.ref.plotter.PlotterRegion;
public class TriggerPlotsFormat {
- // Define plot fonts.
- private static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 20);
- private static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 25);
- private static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 35);
-
- // Defines the color style options for plot data.
- private enum ColorStyle {
- MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
- MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
- MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
- RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
- FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
- TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
- BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
- PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
-
- private final Color fillColor;
- private final Color lineColor;
-
- private ColorStyle(Color fillColor, Color lineColor) {
- this.fillColor = fillColor;
- this.lineColor = lineColor;
- }
-
- public Color getFillColor() { return fillColor; }
-
- public Color getLineColor() { return lineColor; }
- };
-
- /**
- * Loads all plots in a file and formats them according to the
- * indicated style.
- * @param args - Unused default executable parameter.
- * @throws IOException Occurs if there is an issue opening the file.
- */
- public static void main(String[] args) throws IOException {
- // Define the root directory for the plots.
- String rootDir = "D:\\cygwin64\\home\\Kyle\\beam-plots\\base\\";
- //String rootDir = "D:\\cygwin64\\home\\Kyle\\aprime-plots\\base\\readout-plots\\";
-
- // Define the new name of the file containing the trigger plots.
- String[] plotFile = {
- rootDir + "compiled-plots.aida"
- //rootDir + "15-MeV\\compiled-plots.aida",
- //rootDir + "20-MeV\\compiled-plots.aida",
- //rootDir + "30-MeV\\compiled-plots.aida",
- //rootDir + "40-MeV\\compiled-plots.aida",
- //rootDir + "50-MeV\\compiled-plots.aida"
- };
-
- // Define the names of each plot. This will be used for the
- // legend in the case of multiple plots.
- String[] treeName = {
- "Background",
- "15 MeV A'",
- "20 MeV A'",
- "30 MeV A'",
- "40 MeV A'",
- "50 MeV A'"
- };
-
- // Define the color style for the plots.
- ColorStyle[] dataColorStyle = {
- ColorStyle.GREY,
- ColorStyle.MS_GREEN,
- ColorStyle.MS_BLUE,
- ColorStyle.MS_ORANGE,
- ColorStyle.MS_RED,
- ColorStyle.TEAL,
- ColorStyle.CRIMSON,
- ColorStyle.FOREST
- };
-
- // Get the plots file and open it.
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree[] tree = new ITree[plotFile.length];
- for(int i = 0; i < plotFile.length; i++) {
- tree[i] = af.createTreeFactory().create(plotFile[i]);
- if(tree[i] == null) { throw new IllegalArgumentException("Unable to load plot file."); }
- }
-
- // Get a list of all the histograms in the file.
- List<List<String>> treeHistograms = new ArrayList<List<String>>(plotFile.length);
- for(int i = 0; i < plotFile.length; i++) {
- treeHistograms.add(getHistograms(tree[i], "/NoCuts/"));//, "/PassedAll/"));
- }
-
- // Create a plotter factory.
- IPlotterFactory plotterFactory = af.createPlotterFactory();
-
- // Plot each histogram and format it.
- for(String histogram : treeHistograms.get(0)) {
- // Get the plot from the tree and verify that it is a 1D
- // or 2D histogram. Other types are not supported.
- IManagedObject histObject = tree[0].find(histogram);
- if(!(histObject instanceof IHistogram1D) && !(histObject instanceof IHistogram2D)) {
- continue;
- }
-
- // Obtain the histogram object.
- IBaseHistogram hist;
- if(histObject instanceof IHistogram1D) { hist = (IHistogram1D) histObject; }
- else { hist = (IHistogram2D) histObject; }
-
- // Define whether this is an overlay plot and whether
- // this is a one or two dimensional plot.
- boolean overlay = plotFile.length > 1;
- boolean twoDimensional = hist instanceof IHistogram2D;
-
- // Generate the plotter and set its title. The plotter will
- // use the title of the first tree's plot.
- String plotTitle = hist.title();
- IPlotter plotter = plotterFactory.create(plotTitle);
-
- // For single plots and one-dimensional overlay plots,
- // there should only be a single plotter region.
- if(!twoDimensional || !overlay) { plotter.createRegions(1); }
-
- // For two-dimensional overlay plots, create a region for
- // each plot individually.
- else { plotter.createRegions(2, (int) Math.ceil(plotFile.length / 2.0)); }
-
- // Find the histogram in each of the trees and plot them
- // all on the same region.
- for(int i = 0; i < plotFile.length; i++) {
- // Get the histogram from the tree.
- IManagedObject treeObject = tree[i].find(histogram);
- IBaseHistogram treeHist;
- if(treeObject instanceof IHistogram1D) { treeHist = (IHistogram1D) treeObject; }
- else { treeHist = (IHistogram2D) treeObject; }
-
- // Display the plot.
- if(treeHist != null) {
- // Set the title of plot to the name associated with
- // its tree. This ensures that the correct name will
- // appear on the legend.
- if(plotFile.length > 1) {
- treeHist.setTitle(treeName[i]);
- }
-
- // Plot the tree's data in the plotter region.
- if(!twoDimensional || !overlay) { plotter.region(0).plot(treeHist); }
- else {
- plotter.region(i).plot(treeHist);
- setDefault2DStyle(((PlotterRegion) plotter.region(i)), dataColorStyle);
- }
- }
- }
-
- // Format the plot region.
- if(!twoDimensional) { setDefault1DStyle(((PlotterRegion) plotter.region(0)), dataColorStyle); }
- else { setDefault2DStyle(((PlotterRegion) plotter.region(0)), dataColorStyle); }
-
- // Show the plotter.
- plotter.region(0).setTitle(plotTitle);
- plotter.setParameter("plotterWidth", "750");
- plotter.setParameter("plotterHeight", "600");
- //plotter.setParameter("plotterWidth", "2000");
- //plotter.setParameter("plotterHeight", "1200");
- plotter.show();
- }
-
- // Close the trees.
- for(int i = 0; i < plotFile.length; i++) {
- tree[i].close();
- }
- }
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- * @param color - The data color settings to use.
- */
- private static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
- // Get the names of each plot on in the region.
- String[] dataNames = region.getAllDataNames();
-
- // Check whether this is an overlay plot. Overlay plots contain
- // more than one data name.
- boolean overlay = (dataNames.length > 1 ? true : false);
-
- // Iterate over each plot in the region.
- for(int i = 0; i < dataNames.length; i++) {
- // Set the overlay style if needed.
- if(overlay) {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with no fill. The color is set by the "color" argument.
- fillStyle.setHistogramFill(false);
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarLineColor(color[i].getFillColor());
-
- // Set the legend text style.
- region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
- }
-
- // Otherwise, set the fill style for a single plot.
- else {
- // Get the fill style for the current data type.
- JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
-
- // Set the histogram style to display thick-lined bars
- // with a fill color. The colors are defined by the
- // "color" argument.
- fillStyle.setHistogramBarLineWidth(3);
- fillStyle.setHistogramBarColor(color[i].getFillColor());
- fillStyle.setHistogramBarLineColor(color[i].getLineColor());
- }
-
- // Set the statistics box style.
- region.getPlot().getStats().setVisible(true);
- region.getPlot().getStats().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set generic axis titles.
- region.getPlot().getXAxis().setLabel("Data Label (Unit)");
- region.getPlot().getYAxis().setLabel("Count");
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
- }
-
- /**
- * Sets the plot display formatting for 1D plots.
- * @param region - The plotter region to format.
- * @param color - The data color settings to use.
- */
- private static final void setDefault2DStyle(PlotterRegion region, ColorStyle[] color) {
- // Get the fill style object. 2D plots should never be overlay
- // plots, so there should only ever be one data name.
- JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
-
- // Set the fill style for a two-dimensional plot.
- fillStyle.setLogZ(true);
- fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
- fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
-
- // Make the statistics box invisible.
- region.getPlot().getStats().setVisible(false);
-
- // Set the general plot font (which is also the z-axis font).
- region.getPlot().setFont(BASIC_FONT);
-
- // Set the title font.
- region.getPlot().getTitleObject().setFont(TITLE_FONT);
-
- // Set generic axis titles.
- region.getPlot().getXAxis().setLabel("Data Label (Unit)");
- region.getPlot().getYAxis().setLabel("Data Label (Unit)");
-
- // Set the axis tick-mark fonts.
- region.getPlot().getXAxis().setFont(BASIC_FONT);
- region.getPlot().getYAxis().setFont(BASIC_FONT);
- region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
- region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
- }
-
- /**
- * Gets a list of all objects that are not directories in a tree.
- * @param tree - The tree from which to extract the object names.
- * @return Returns the object names as <code>String</code> objects
- * in a <code>List</code> collection.
- */
- private static final List<String> getHistograms(ITree tree) {
- return getHistograms(tree, "/");
- }
-
- /**
- * Gets a list of all objects that are not directories in a tree.
- * @param tree - The tree from which to extract the object names.
- * @return Returns the object names as <code>String</code> objects
- * in a <code>List</code> collection.
- */
- private static final List<String> getHistograms(ITree tree, String rootDir) {
- return getHistograms(tree, rootDir, new ArrayList<String>());
- }
-
- /**
- * Recursive method that gets all object names from a tree that
- * are not directories. Method should not be called directly, but
- * rather called only through the <code>getHistograms(ITree)</code>
- * method.
- * @param tree - The tree from which to obtain the object names.
- * @param directory - The directory in which to search for objects.
- * @param list - The list in which to place the objects.
- * @return Returns the <code>List</code> collection that was given
- * as an argument.
- */
- private static final List<String> getHistograms(ITree tree, String directory, List<String> list) {
- // Get the list of objects in the directory.
- String[] treeObjects = tree.listObjectNames(directory);
-
- // Print the objects.
- for(String objectName : treeObjects) {
- // Check if the object is a directory.
- boolean isDirectory = isDirectory(objectName);
-
- // If the object is a directory, get the histograms from it.
- if(isDirectory) {
- getHistograms(tree, objectName, list);
- }
-
- // If the object is a plot, add it to the list.
- else { list.add(objectName); }
- }
-
- // Return the list.
- return list;
- }
-
- /**
- * Checks whether a tree object is a directory.
- * @param object - The object to check.
- * @return Returns <code>true</code> if the object is a directory
- * and <code>false</code> otherwise.
- */
- private static final boolean isDirectory(String object) {
- return (object.toCharArray()[object.length() - 1] == '/');
- }
+ // Define plot fonts.
+ private static final Font BASIC_FONT = new Font("Calibri", Font.PLAIN, 20);
+ private static final Font AXIS_FONT = new Font("Calibri", Font.BOLD, 25);
+ private static final Font TITLE_FONT = new Font("Calibri", Font.BOLD, 35);
+
+ // Defines the color style options for plot data.
+ private enum ColorStyle {
+ MS_BLUE(new Color( 79, 129, 189), new Color( 36, 64, 97)), MS_ORANGE(new Color(247, 150, 70), new Color(152, 72, 6)),
+ MS_RED(new Color(192, 80, 77), new Color( 99, 36, 35)), GREY(new Color(166, 166, 166), new Color( 89, 89, 89)),
+ MS_GREEN(new Color(155, 187, 89), new Color( 79, 98, 40)), CRIMSON(new Color(161, 0, 0), new Color(104, 0, 0)),
+ RUST(new Color(161, 80, 0), new Color(105, 80, 0)), YELLOW(new Color(161, 161, 0), new Color(122, 109, 8)),
+ FOREST(new Color( 65, 102, 0), new Color( 37, 79, 0)), GREEN(new Color( 7, 132, 70), new Color( 7, 82, 30)),
+ TEAL(new Color( 0, 130, 130), new Color( 0, 90, 100)), CERULEAN(new Color( 0, 86, 130), new Color( 0, 28, 83)),
+ BLUE(new Color( 0, 33, 203), new Color( 0, 0, 137)), INDIGO(new Color( 68, 10, 127), new Color( 0, 0, 61)),
+ PURPLE(new Color(106, 0, 106), new Color( 63, 0, 56)), FUSCHIA(new Color(119, 0, 60), new Color( 60, 0, 60));
+
+ private final Color fillColor;
+ private final Color lineColor;
+
+ private ColorStyle(Color fillColor, Color lineColor) {
+ this.fillColor = fillColor;
+ this.lineColor = lineColor;
+ }
+
+ public Color getFillColor() { return fillColor; }
+
+ public Color getLineColor() { return lineColor; }
+ };
+
+ /**
+ * Loads all plots in a file and formats them according to the
+ * indicated style.
+ * @param args - Unused default executable parameter.
+ * @throws IOException Occurs if there is an issue opening the file.
+ */
+ public static void main(String[] args) throws IOException {
+ // Define the root directory for the plots.
+ String rootDir = "D:\\cygwin64\\home\\Kyle\\beam-plots\\base\\";
+ //String rootDir = "D:\\cygwin64\\home\\Kyle\\aprime-plots\\base\\readout-plots\\";
+
+ // Define the new name of the file containing the trigger plots.
+ String[] plotFile = {
+ rootDir + "compiled-plots.aida"
+ //rootDir + "15-MeV\\compiled-plots.aida",
+ //rootDir + "20-MeV\\compiled-plots.aida",
+ //rootDir + "30-MeV\\compiled-plots.aida",
+ //rootDir + "40-MeV\\compiled-plots.aida",
+ //rootDir + "50-MeV\\compiled-plots.aida"
+ };
+
+ // Define the names of each plot. This will be used for the
+ // legend in the case of multiple plots.
+ String[] treeName = {
+ "Background",
+ "15 MeV A'",
+ "20 MeV A'",
+ "30 MeV A'",
+ "40 MeV A'",
+ "50 MeV A'"
+ };
+
+ // Define the color style for the plots.
+ ColorStyle[] dataColorStyle = {
+ ColorStyle.GREY,
+ ColorStyle.MS_GREEN,
+ ColorStyle.MS_BLUE,
+ ColorStyle.MS_ORANGE,
+ ColorStyle.MS_RED,
+ ColorStyle.TEAL,
+ ColorStyle.CRIMSON,
+ ColorStyle.FOREST
+ };
+
+ // Get the plots file and open it.
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree[] tree = new ITree[plotFile.length];
+ for(int i = 0; i < plotFile.length; i++) {
+ tree[i] = af.createTreeFactory().create(plotFile[i]);
+ if(tree[i] == null) { throw new IllegalArgumentException("Unable to load plot file."); }
+ }
+
+ // Get a list of all the histograms in the file.
+ List<List<String>> treeHistograms = new ArrayList<List<String>>(plotFile.length);
+ for(int i = 0; i < plotFile.length; i++) {
+ treeHistograms.add(getHistograms(tree[i], "/NoCuts/"));//, "/PassedAll/"));
+ }
+
+ // Create a plotter factory.
+ IPlotterFactory plotterFactory = af.createPlotterFactory();
+
+ // Plot each histogram and format it.
+ for(String histogram : treeHistograms.get(0)) {
+ // Get the plot from the tree and verify that it is a 1D
+ // or 2D histogram. Other types are not supported.
+ IManagedObject histObject = tree[0].find(histogram);
+ if(!(histObject instanceof IHistogram1D) && !(histObject instanceof IHistogram2D)) {
+ continue;
+ }
+
+ // Obtain the histogram object.
+ IBaseHistogram hist;
+ if(histObject instanceof IHistogram1D) { hist = (IHistogram1D) histObject; }
+ else { hist = (IHistogram2D) histObject; }
+
+ // Define whether this is an overlay plot and whether
+ // this is a one or two dimensional plot.
+ boolean overlay = plotFile.length > 1;
+ boolean twoDimensional = hist instanceof IHistogram2D;
+
+ // Generate the plotter and set its title. The plotter will
+ // use the title of the first tree's plot.
+ String plotTitle = hist.title();
+ IPlotter plotter = plotterFactory.create(plotTitle);
+
+ // For single plots and one-dimensional overlay plots,
+ // there should only be a single plotter region.
+ if(!twoDimensional || !overlay) { plotter.createRegions(1); }
+
+ // For two-dimensional overlay plots, create a region for
+ // each plot individually.
+ else { plotter.createRegions(2, (int) Math.ceil(plotFile.length / 2.0)); }
+
+ // Find the histogram in each of the trees and plot them
+ // all on the same region.
+ for(int i = 0; i < plotFile.length; i++) {
+ // Get the histogram from the tree.
+ IManagedObject treeObject = tree[i].find(histogram);
+ IBaseHistogram treeHist;
+ if(treeObject instanceof IHistogram1D) { treeHist = (IHistogram1D) treeObject; }
+ else { treeHist = (IHistogram2D) treeObject; }
+
+ // Display the plot.
+ if(treeHist != null) {
+ // Set the title of plot to the name associated with
+ // its tree. This ensures that the correct name will
+ // appear on the legend.
+ if(plotFile.length > 1) {
+ treeHist.setTitle(treeName[i]);
+ }
+
+ // Plot the tree's data in the plotter region.
+ if(!twoDimensional || !overlay) { plotter.region(0).plot(treeHist); }
+ else {
+ plotter.region(i).plot(treeHist);
+ setDefault2DStyle(((PlotterRegion) plotter.region(i)), dataColorStyle);
+ }
+ }
+ }
+
+ // Format the plot region.
+ if(!twoDimensional) { setDefault1DStyle(((PlotterRegion) plotter.region(0)), dataColorStyle); }
+ else { setDefault2DStyle(((PlotterRegion) plotter.region(0)), dataColorStyle); }
+
+ // Show the plotter.
+ plotter.region(0).setTitle(plotTitle);
+ plotter.setParameter("plotterWidth", "750");
+ plotter.setParameter("plotterHeight", "600");
+ //plotter.setParameter("plotterWidth", "2000");
+ //plotter.setParameter("plotterHeight", "1200");
+ plotter.show();
+ }
+
+ // Close the trees.
+ for(int i = 0; i < plotFile.length; i++) {
+ tree[i].close();
+ }
+ }
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ * @param color - The data color settings to use.
+ */
+ private static final void setDefault1DStyle(PlotterRegion region, ColorStyle[] color) {
+ // Get the names of each plot on in the region.
+ String[] dataNames = region.getAllDataNames();
+
+ // Check whether this is an overlay plot. Overlay plots contain
+ // more than one data name.
+ boolean overlay = (dataNames.length > 1 ? true : false);
+
+ // Iterate over each plot in the region.
+ for(int i = 0; i < dataNames.length; i++) {
+ // Set the overlay style if needed.
+ if(overlay) {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with no fill. The color is set by the "color" argument.
+ fillStyle.setHistogramFill(false);
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarLineColor(color[i].getFillColor());
+
+ // Set the legend text style.
+ region.getPlot().getLegend().setFont(new Font("Calibri", Font.PLAIN, 20));
+ }
+
+ // Otherwise, set the fill style for a single plot.
+ else {
+ // Get the fill style for the current data type.
+ JASHist1DHistogramStyle fillStyle = (JASHist1DHistogramStyle) region.getDataForName(dataNames[i]).getStyle();
+
+ // Set the histogram style to display thick-lined bars
+ // with a fill color. The colors are defined by the
+ // "color" argument.
+ fillStyle.setHistogramBarLineWidth(3);
+ fillStyle.setHistogramBarColor(color[i].getFillColor());
+ fillStyle.setHistogramBarLineColor(color[i].getLineColor());
+ }
+
+ // Set the statistics box style.
+ region.getPlot().getStats().setVisible(true);
+ region.getPlot().getStats().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set generic axis titles.
+ region.getPlot().getXAxis().setLabel("Data Label (Unit)");
+ region.getPlot().getYAxis().setLabel("Count");
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
+ }
+
+ /**
+ * Sets the plot display formatting for 1D plots.
+ * @param region - The plotter region to format.
+ * @param color - The data color settings to use.
+ */
+ private static final void setDefault2DStyle(PlotterRegion region, ColorStyle[] color) {
+ // Get the fill style object. 2D plots should never be overlay
+ // plots, so there should only ever be one data name.
+ JASHist2DHistogramStyle fillStyle = (JASHist2DHistogramStyle) region.getDataForName(region.getAllDataNames()[0]).getStyle();
+
+ // Set the fill style for a two-dimensional plot.
+ fillStyle.setLogZ(true);
+ fillStyle.setHistStyle(JASHist2DHistogramStyle.STYLE_COLORMAP);
+ fillStyle.setColorMapScheme(JASHist2DHistogramStyle.COLORMAP_RAINBOW);
+
+ // Make the statistics box invisible.
+ region.getPlot().getStats().setVisible(false);
+
+ // Set the general plot font (which is also the z-axis font).
+ region.getPlot().setFont(BASIC_FONT);
+
+ // Set the title font.
+ region.getPlot().getTitleObject().setFont(TITLE_FONT);
+
+ // Set generic axis titles.
+ region.getPlot().getXAxis().setLabel("Data Label (Unit)");
+ region.getPlot().getYAxis().setLabel("Data Label (Unit)");
+
+ // Set the axis tick-mark fonts.
+ region.getPlot().getXAxis().setFont(BASIC_FONT);
+ region.getPlot().getYAxis().setFont(BASIC_FONT);
+ region.getPlot().getXAxis().getLabelObject().setFont(AXIS_FONT);
+ region.getPlot().getYAxis().getLabelObject().setFont(AXIS_FONT);
+ }
+
+ /**
+ * Gets a list of all objects that are not directories in a tree.
+ * @param tree - The tree from which to extract the object names.
+ * @return Returns the object names as <code>String</code> objects
+ * in a <code>List</code> collection.
+ */
+ private static final List<String> getHistograms(ITree tree) {
+ return getHistograms(tree, "/");
+ }
+
+ /**
+ * Gets a list of all objects that are not directories in a tree.
+ * @param tree - The tree from which to extract the object names.
+ * @return Returns the object names as <code>String</code> objects
+ * in a <code>List</code> collection.
+ */
+ private static final List<String> getHistograms(ITree tree, String rootDir) {
+ return getHistograms(tree, rootDir, new ArrayList<String>());
+ }
+
+ /**
+ * Recursive method that gets all object names from a tree that
+ * are not directories. Method should not be called directly, but
+ * rather called only through the <code>getHistograms(ITree)</code>
+ * method.
+ * @param tree - The tree from which to obtain the object names.
+ * @param directory - The directory in which to search for objects.
+ * @param list - The list in which to place the objects.
+ * @return Returns the <code>List</code> collection that was given
+ * as an argument.
+ */
+ private static final List<String> getHistograms(ITree tree, String directory, List<String> list) {
+ // Get the list of objects in the directory.
+ String[] treeObjects = tree.listObjectNames(directory);
+
+ // Print the objects.
+ for(String objectName : treeObjects) {
+ // Check if the object is a directory.
+ boolean isDirectory = isDirectory(objectName);
+
+ // If the object is a directory, get the histograms from it.
+ if(isDirectory) {
+ getHistograms(tree, objectName, list);
+ }
+
+ // If the object is a plot, add it to the list.
+ else { list.add(objectName); }
+ }
+
+ // Return the list.
+ return list;
+ }
+
+ /**
+ * Checks whether a tree object is a directory.
+ * @param object - The object to check.
+ * @return Returns <code>true</code> if the object is a directory
+ * and <code>false</code> otherwise.
+ */
+ private static final boolean isDirectory(String object) {
+ return (object.toCharArray()[object.length() - 1] == '/');
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/luca/FADCVariableTriggerFEEDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/FADCVariableTriggerFEEDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/FADCVariableTriggerFEEDriver.java Wed Mar 9 11:43:24 2016
@@ -25,64 +25,64 @@
// ==================================================================
// ==== Trigger Cut Default Parameters ==============================
// ==================================================================
- private int minHitCount = 1; // Minimum required cluster hit count threshold. (Hits)
- private double seedEnergyHigh = Double.MAX_VALUE; // Maximum allowed cluster seed energy. (GeV)
- private double seedEnergyLow = Double.MIN_VALUE; // Minimum required cluster seed energy. (GeV)
- private double clusterEnergyHigh = 1.5 * EcalUtils.GeV; // Maximum allowed cluster total energy. (GeV)
- private double clusterEnergyLow = .1 * EcalUtils.GeV; // Minimum required cluster total energy. (GeV)
- private double energySumHigh = 1.9 * EcalUtils.GeV; // Maximum allowed pair energy sum. (GeV)
- private double energySumLow = 0.0 * EcalUtils.GeV; // Minimum required pair energy sum. (GeV)
- private double energyDifferenceHigh = 2.2 * EcalUtils.GeV; // Maximum allowed pair energy difference. (GeV)
- private double energySlopeLow = 1.1; // Minimum required pair energy slope value.
- private double coplanarityHigh = 35; // Maximum allowed pair coplanarity deviation. (Degrees)
+ private int minHitCount = 1; // Minimum required cluster hit count threshold. (Hits)
+ private double seedEnergyHigh = Double.MAX_VALUE; // Maximum allowed cluster seed energy. (GeV)
+ private double seedEnergyLow = Double.MIN_VALUE; // Minimum required cluster seed energy. (GeV)
+ private double clusterEnergyHigh = 1.5 * EcalUtils.GeV; // Maximum allowed cluster total energy. (GeV)
+ private double clusterEnergyLow = .1 * EcalUtils.GeV; // Minimum required cluster total energy. (GeV)
+ private double energySumHigh = 1.9 * EcalUtils.GeV; // Maximum allowed pair energy sum. (GeV)
+ private double energySumLow = 0.0 * EcalUtils.GeV; // Minimum required pair energy sum. (GeV)
+ private double energyDifferenceHigh = 2.2 * EcalUtils.GeV; // Maximum allowed pair energy difference. (GeV)
+ private double energySlopeLow = 1.1; // Minimum required pair energy slope value.
+ private double coplanarityHigh = 35; // Maximum allowed pair coplanarity deviation. (Degrees)
// ==================================================================
// ==== Trigger General Default Parameters ==========================
// ==================================================================
- private String clusterCollectionName = "EcalClusters"; // Name for the LCIO cluster collection.
- private int pairCoincidence = 2; // Maximum allowed time difference between clusters. (4 ns clock-cycles)
- private double energySlopeParamF = 0.005500; // A parameter value used for the energy slope calculation.
- private double originX = 1393.0 * Math.tan(0.03052); // ECal mid-plane, defined by photon beam position (30.52 mrad) at ECal face (z=1393 mm)
- private int backgroundLevel = -1; // Automatically sets the cuts to achieve a predetermined background rate.
+ private String clusterCollectionName = "EcalClusters"; // Name for the LCIO cluster collection.
+ private int pairCoincidence = 2; // Maximum allowed time difference between clusters. (4 ns clock-cycles)
+ private double energySlopeParamF = 0.005500; // A parameter value used for the energy slope calculation.
+ private double originX = 1393.0 * Math.tan(0.03052); // ECal mid-plane, defined by photon beam position (30.52 mrad) at ECal face (z=1393 mm)
+ private int backgroundLevel = -1; // Automatically sets the cuts to achieve a predetermined background rate.
// ==================================================================
// ==== Driver Internal Variables ===================================
// ==================================================================
- private Queue<List<Cluster>> topClusterQueue = null; // Store clusters on the top half of the calorimeter.
- private Queue<List<Cluster>> botClusterQueue = null; // Store clusters on the bottom half of the calorimeter.
- private int allClusters = 0; // Track the number of clusters processed.
- private int allPairs = 0; // Track the number of cluster pairs processed.
- private int clusterTotalEnergyCount = 0; // Track the clusters which pass the total energy cut.
- private int clusterSeedEnergyCount = 0; // Track the clusters which pass the seed energy cut.
- private int clusterHitCountCount = 0; // Track the clusters which pass the hit count cut.
- private int pairEnergySumCount = 0; // Track the pairs which pass the energy sum cut.
- private int pairEnergyDifferenceCount = 0; // Track the pairs which pass the energy difference cut.
- private int pairEnergySlopeCount = 0; // Track the pairs which pass the energy slope cut.
- private int pairCoplanarityCount = 0; // Track the pairs which pass the coplanarity cut.
+ private Queue<List<Cluster>> topClusterQueue = null; // Store clusters on the top half of the calorimeter.
+ private Queue<List<Cluster>> botClusterQueue = null; // Store clusters on the bottom half of the calorimeter.
+ private int allClusters = 0; // Track the number of clusters processed.
+ private int allPairs = 0; // Track the number of cluster pairs processed.
+ private int clusterTotalEnergyCount = 0; // Track the clusters which pass the total energy cut.
+ private int clusterSeedEnergyCount = 0; // Track the clusters which pass the seed energy cut.
+ private int clusterHitCountCount = 0; // Track the clusters which pass the hit count cut.
+ private int pairEnergySumCount = 0; // Track the pairs which pass the energy sum cut.
+ private int pairEnergyDifferenceCount = 0; // Track the pairs which pass the energy difference cut.
+ private int pairEnergySlopeCount = 0; // Track the pairs which pass the energy slope cut.
+ private int pairCoplanarityCount = 0; // Track the pairs which pass the coplanarity cut.
/**
* Prints out the results of the trigger at the end of the run.
*/
@Override
public void endOfData() {
- // Print out the results of the trigger cuts.
- System.out.printf("Trigger Processing Results%n");
- System.out.printf("\tSingle-Cluster Cuts%n");
- System.out.printf("\t\tTotal Clusters Processed :: %d%n", allClusters);
- System.out.printf("\t\tPassed Seed Energy Cut :: %d%n", clusterSeedEnergyCount);
- System.out.printf("\t\tPassed Hit Count Cut :: %d%n", clusterHitCountCount);
- System.out.printf("\t\tPassed Total Energy Cut :: %d%n", clusterTotalEnergyCount);
- System.out.printf("%n");
- System.out.printf("\tCluster Pair Cuts%n");
- System.out.printf("\t\tTotal Pairs Processed :: %d%n", allPairs);
- System.out.printf("\t\tPassed Energy Sum Cut :: %d%n", pairEnergySumCount);
- System.out.printf("\t\tPassed Energy Difference Cut :: %d%n", pairEnergyDifferenceCount);
- System.out.printf("\t\tPassed Energy Slope Cut :: %d%n", pairEnergySlopeCount);
- System.out.printf("\t\tPassed Coplanarity Cut :: %d%n", pairCoplanarityCount);
- System.out.printf("%n");
- System.out.printf("\tTrigger Count :: %d%n", numTriggers);
-
- // Run the superclass method.
+ // Print out the results of the trigger cuts.
+ System.out.printf("Trigger Processing Results%n");
+ System.out.printf("\tSingle-Cluster Cuts%n");
+ System.out.printf("\t\tTotal Clusters Processed :: %d%n", allClusters);
+ System.out.printf("\t\tPassed Seed Energy Cut :: %d%n", clusterSeedEnergyCount);
+ System.out.printf("\t\tPassed Hit Count Cut :: %d%n", clusterHitCountCount);
+ System.out.printf("\t\tPassed Total Energy Cut :: %d%n", clusterTotalEnergyCount);
+ System.out.printf("%n");
+ System.out.printf("\tCluster Pair Cuts%n");
+ System.out.printf("\t\tTotal Pairs Processed :: %d%n", allPairs);
+ System.out.printf("\t\tPassed Energy Sum Cut :: %d%n", pairEnergySumCount);
+ System.out.printf("\t\tPassed Energy Difference Cut :: %d%n", pairEnergyDifferenceCount);
+ System.out.printf("\t\tPassed Energy Slope Cut :: %d%n", pairEnergySlopeCount);
+ System.out.printf("\t\tPassed Coplanarity Cut :: %d%n", pairCoplanarityCount);
+ System.out.printf("%n");
+ System.out.printf("\tTrigger Count :: %d%n", numTriggers);
+
+ // Run the superclass method.
super.endOfData();
}
@@ -92,53 +92,53 @@
*/
@Override
public void process(EventHeader event) {
- // Process the list of clusters for the event, if it exists.
+ // Process the list of clusters for the event, if it exists.
if (event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Get the collection of clusters.
- List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
-
- // Create a list to hold clusters which pass the single
- // cluster cuts.
- List<Cluster> goodClusterList = new ArrayList<Cluster>(clusterList.size());
-
- // Sort through the cluster list and add clusters that pass
- // the single cluster cuts to the good list.
- clusterLoop:
- for(Cluster cluster : clusterList) {
- // Increment the number of processed clusters.
- allClusters++;
-
- // ==== Seed Hit Energy Cut ====================================
- // =============================================================
- // If the cluster fails the cut, skip to the next cluster.
- if(!clusterSeedEnergyCut(cluster)) { continue clusterLoop; }
-
- // Otherwise, note that it passed the cut.
- clusterSeedEnergyCount++;
-
- // ==== Cluster Hit Count Cut ==================================
- // =============================================================
- // If the cluster fails the cut, skip to the next cluster.
- if(!clusterHitCountCut(cluster)) { continue clusterLoop; }
-
- // Otherwise, note that it passed the cut.
- clusterHitCountCount++;
-
- // ==== Cluster Total Energy Cut ===============================
- // =============================================================
- // If the cluster fails the cut, skip to the next cluster.
- if(!clusterTotalEnergyCut(cluster)) { continue clusterLoop; }
-
- // Otherwise, note that it passed the cut.
- clusterTotalEnergyCount++;
-
- // A cluster that passes all of the single-cluster cuts
- // can be used in cluster pairs.
- goodClusterList.add(cluster);
- }
-
- // Put the good clusters into the cluster queue.
- updateClusterQueues(goodClusterList);
+ // Get the collection of clusters.
+ List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
+
+ // Create a list to hold clusters which pass the single
+ // cluster cuts.
+ List<Cluster> goodClusterList = new ArrayList<Cluster>(clusterList.size());
+
+ // Sort through the cluster list and add clusters that pass
+ // the single cluster cuts to the good list.
+ clusterLoop:
+ for(Cluster cluster : clusterList) {
+ // Increment the number of processed clusters.
+ allClusters++;
+
+ // ==== Seed Hit Energy Cut ====================================
+ // =============================================================
+ // If the cluster fails the cut, skip to the next cluster.
+ if(!clusterSeedEnergyCut(cluster)) { continue clusterLoop; }
+
+ // Otherwise, note that it passed the cut.
+ clusterSeedEnergyCount++;
+
+ // ==== Cluster Hit Count Cut ==================================
+ // =============================================================
+ // If the cluster fails the cut, skip to the next cluster.
+ if(!clusterHitCountCut(cluster)) { continue clusterLoop; }
+
+ // Otherwise, note that it passed the cut.
+ clusterHitCountCount++;
+
+ // ==== Cluster Total Energy Cut ===============================
+ // =============================================================
+ // If the cluster fails the cut, skip to the next cluster.
+ if(!clusterTotalEnergyCut(cluster)) { continue clusterLoop; }
+
+ // Otherwise, note that it passed the cut.
+ clusterTotalEnergyCount++;
+
+ // A cluster that passes all of the single-cluster cuts
+ // can be used in cluster pairs.
+ goodClusterList.add(cluster);
+ }
+
+ // Put the good clusters into the cluster queue.
+ updateClusterQueues(goodClusterList);
}
// Perform the superclass event processing.
@@ -152,7 +152,7 @@
* be set. Actual background rates equal about (5 * backgroundLevel) kHz.
*/
public void setBackgroundLevel(int backgroundLevel) {
- this.backgroundLevel = backgroundLevel;
+ this.backgroundLevel = backgroundLevel;
}
/**
@@ -215,7 +215,7 @@
* @param energySlopeLow - The parameter value.
*/
public void setEnergySlopeLow(double energySlopeLow) {
- this.energySlopeLow = energySlopeLow;
+ this.energySlopeLow = energySlopeLow;
}
/**
@@ -299,12 +299,12 @@
*/
@Override
public void startOfData() {
- // Make sure that a valid cluster collection name has been
- // defined. If it has not, throw an exception.
+ // Make sure that a valid cluster collection name has been
+ // defined. If it has not, throw an exception.
if (clusterCollectionName == null) {
throw new RuntimeException("The parameter clusterCollectionName was not set!");
}
-
+
// Initialize the top and bottom cluster queues.
topClusterQueue = new LinkedList<List<Cluster>>();
botClusterQueue = new LinkedList<List<Cluster>>();
@@ -345,9 +345,9 @@
for (Cluster botCluster : botClusterQueue.element()) {
for (List<Cluster> topClusters : topClusterQueue) {
for (Cluster topCluster : topClusters) {
- // The first cluster in a pair should always be
- // the higher energy cluster. If the top cluster
- // is higher energy, it goes first.
+ // The first cluster in a pair should always be
+ // the higher energy cluster. If the top cluster
+ // is higher energy, it goes first.
if (topCluster.getEnergy() > botCluster.getEnergy()) {
Cluster[] clusterPair = {topCluster, botCluster};
clusterPairs.add(clusterPair);
@@ -366,24 +366,24 @@
return clusterPairs;
}
- /**
- * Determines if the event produces a trigger.
- *
- * @return Returns <code>true</code> if the event produces a trigger
- * and <code>false</code> if it does not.
- */
- @Override
- protected boolean triggerDecision(EventHeader event) {
- // If there is a list of clusters present for this event,
- // check whether it passes the trigger conditions.
- if (event.hasCollection(Cluster.class, clusterCollectionName)) {
- return testTrigger();
+ /**
+ * Determines if the event produces a trigger.
+ *
+ * @return Returns <code>true</code> if the event produces a trigger
+ * and <code>false</code> if it does not.
+ */
+ @Override
+ protected boolean triggerDecision(EventHeader event) {
+ // If there is a list of clusters present for this event,
+ // check whether it passes the trigger conditions.
+ if (event.hasCollection(Cluster.class, clusterCollectionName)) {
+ return testTrigger();
}
// Otherwise, this event can not produce a trigger and should
// return false automatically.
else { return false; }
- }
+ }
/**
* Checks whether the argument cluster possesses the minimum
@@ -394,7 +394,7 @@
* and <code>false</code> if the cluster does not.
*/
private boolean clusterHitCountCut(Cluster cluster) {
- return (getValueClusterHitCount(cluster) >= minHitCount);
+ return (getValueClusterHitCount(cluster) >= minHitCount);
}
/**
@@ -406,12 +406,12 @@
* and <code>false</code> if the cluster does not.
*/
private boolean clusterSeedEnergyCut(Cluster cluster) {
- // Get the cluster seed energy.
- double energy = getValueClusterSeedEnergy(cluster);
-
- // Check that it is above the minimum threshold and below the
- // maximum threshold.
- return (energy < seedEnergyHigh) && (energy > seedEnergyLow);
+ // Get the cluster seed energy.
+ double energy = getValueClusterSeedEnergy(cluster);
+
+ // Check that it is above the minimum threshold and below the
+ // maximum threshold.
+ return (energy < seedEnergyHigh) && (energy > seedEnergyLow);
}
/**
@@ -423,12 +423,12 @@
* and <code>false</code> if the cluster does not.
*/
private boolean clusterTotalEnergyCut(Cluster cluster) {
- // Get the total cluster energy.
- double energy = getValueClusterTotalEnergy(cluster);
-
- // Check that it is above the minimum threshold and below the
- // maximum threshold.
- return (energy < clusterEnergyHigh) && (energy > clusterEnergyLow);
+ // Get the total cluster energy.
+ double energy = getValueClusterTotalEnergy(cluster);
+
+ // Check that it is above the minimum threshold and below the
+ // maximum threshold.
+ return (energy < clusterEnergyHigh) && (energy > clusterEnergyLow);
}
/**
@@ -450,7 +450,7 @@
* @return Returns the cut value.
*/
private double getValueClusterTotalEnergy(Cluster cluster) {
- return cluster.getEnergy();
+ return cluster.getEnergy();
}
/**
@@ -461,7 +461,7 @@
* @return Returns the cut value.
*/
private int getValueClusterHitCount(Cluster cluster) {
- return cluster.getCalorimeterHits().size();
+ return cluster.getCalorimeterHits().size();
}
/**
@@ -472,7 +472,7 @@
* @return Returns the cut value.
*/
private double getValueClusterSeedEnergy(Cluster cluster) {
- return cluster.getCalorimeterHits().get(0).getCorrectedEnergy();
+ return cluster.getCalorimeterHits().get(0).getCorrectedEnergy();
}
/**
@@ -483,16 +483,16 @@
* @return Returns the cut value.
*/
private double getValueCoplanarity(Cluster[] clusterPair) {
- // Get the cluster angles.
- double[] clusterAngle = new double[2];
- for(int i = 0; i < 2; i++) {
+ // Get the cluster angles.
+ double[] clusterAngle = new double[2];
+ for(int i = 0; i < 2; i++) {
double position[] = clusterPair[i].getCalorimeterHits().get(0).getPosition();
//clusterAngle[i] = Math.toDegrees(Math.atan2(position[1], position[0] - originX));
//clusterAngle[i] = (clusterAngle[i] + 180.0) % 180.0;
clusterAngle[i] = (Math.toDegrees(Math.atan2(position[1], position[0] - originX)) + 180.0) % 180.0;
- }
-
- // Calculate the coplanarity cut value.
+ }
+
+ // Calculate the coplanarity cut value.
return Math.abs(clusterAngle[1] - clusterAngle[0]);
}
@@ -504,7 +504,7 @@
* @return Returns the cut value.
*/
private double getValueEnergyDifference(Cluster[] clusterPair) {
- return clusterPair[0].getEnergy() - clusterPair[1].getEnergy();
+ return clusterPair[0].getEnergy() - clusterPair[1].getEnergy();
}
/**
@@ -515,15 +515,15 @@
* @return Returns the cut value.
*/
private double getValueEnergySlope(Cluster[] clusterPair) {
- // E + R*F
- // Get the low energy cluster energy.
- double slopeParamE = clusterPair[1].getEnergy();
-
- // Get the low energy cluster radial distance.
- double slopeParamR = getClusterDistance(clusterPair[1]);
-
- // Calculate the energy slope.
- return slopeParamE + slopeParamR * energySlopeParamF;
+ // E + R*F
+ // Get the low energy cluster energy.
+ double slopeParamE = clusterPair[1].getEnergy();
+
+ // Get the low energy cluster radial distance.
+ double slopeParamR = getClusterDistance(clusterPair[1]);
+
+ // Calculate the energy slope.
+ return slopeParamE + slopeParamR * energySlopeParamF;
}
/**
@@ -534,7 +534,7 @@
* @return Returns the cut value.
*/
private double getValueEnergySum(Cluster[] clusterPair) {
- return clusterPair[0].getEnergy() + clusterPair[1].getEnergy();
+ return clusterPair[0].getEnergy() + clusterPair[1].getEnergy();
}
/**
@@ -570,7 +570,7 @@
* @return true if pair is found, false otherwise
*/
private boolean pairEnergySlopeCut(Cluster[] clusterPair) {
- return (getValueEnergySlope(clusterPair) > energySlopeLow);
+ return (getValueEnergySlope(clusterPair) > energySlopeLow);
}
/**
@@ -582,175 +582,175 @@
* the cut and <code>false</code> if it does not.
*/
private boolean pairEnergySumCut(Cluster[] clusterPair) {
- // Get the energy sum value.
- double energySum = getValueEnergySum(clusterPair);
-
- // Check that it is within the allowed range.
+ // Get the energy sum value.
+ double energySum = getValueEnergySum(clusterPair);
+
+ // Check that it is within the allowed range.
return (energySum < energySumHigh) && (energySum > energySumLow);
}
-
+
private void setBackgroundCuts(int backgroundLevel) {
- // Make sure that the background level is valid.
- if(backgroundLevel < 1 || backgroundLevel > 10) {
- throw new RuntimeException(String.format("Trigger cuts are undefined for background level %d.", backgroundLevel));
- }
-
- // Otherwise, set the trigger cuts. Certain cuts are constant
- // across all background levels.
- clusterEnergyLow = 0.000;
- seedEnergyLow = 0.100;
-
- // Set the variable values.
- if(backgroundLevel == 1) {
- clusterEnergyHigh = 1.700;
- seedEnergyHigh = 1.300;
- energySumLow = 0.400;
- energySumHigh = 2.00;
- energyDifferenceHigh = 1.500;
- energySlopeLow = 1.0;
- coplanarityHigh = 40;
- minHitCount = 2;
- } else if(backgroundLevel == 2) {
- clusterEnergyHigh = 1.600;
- seedEnergyHigh = 1.200;
- energySumLow = 0.300;
- energySumHigh = 2.00;
- energyDifferenceHigh = 1.400;
- energySlopeLow = 0.8;
- coplanarityHigh = 40;
- minHitCount = 2;
- } else if(backgroundLevel == 3) {
- clusterEnergyHigh = 1.600;
- seedEnergyHigh = 1.200;
- energySumLow = 0.200;
- energySumHigh = 2.000;
- energyDifferenceHigh = 1.400;
- energySlopeLow = 0.7;
- coplanarityHigh = 40;
- minHitCount = 2;
- } else if(backgroundLevel == 4) {
- clusterEnergyHigh = 1.500;
- seedEnergyHigh = 1.200;
- energySumLow = 0.500;
- energySumHigh = 1.950;
- energyDifferenceHigh = 1.400;
- energySlopeLow = 0.6;
- coplanarityHigh = 40;
- minHitCount = 2;
- } else if(backgroundLevel == 5) {
- clusterEnergyHigh = 1.500;
- seedEnergyHigh = 1.200;
- energySumLow = 0.400;
- energySumHigh = 2.000;
- energyDifferenceHigh = 1.400;
- energySlopeLow = 0.6;
- coplanarityHigh = 45;
- minHitCount = 2;
- } else if(backgroundLevel == 6) {
- clusterEnergyHigh = 1.500;
- seedEnergyHigh = 1.200;
- energySumLow = 0.200;
- energySumHigh = 1.950;
- energyDifferenceHigh = 1.400;
- energySlopeLow = 0.6;
- coplanarityHigh = 55;
- minHitCount = 2;
- } else if(backgroundLevel == 7) {
- clusterEnergyHigh = 1.700;
- seedEnergyHigh = 1.200;
- energySumLow = 0.200;
- energySumHigh = 2.000;
- energyDifferenceHigh = 1.500;
- energySlopeLow = 0.6;
- coplanarityHigh = 60;
- minHitCount = 2;
- } else if(backgroundLevel == 8) {
- clusterEnergyHigh = 1.700;
- seedEnergyHigh = 1.300;
- energySumLow = 0.200;
- energySumHigh = 2.000;
- energyDifferenceHigh = 1.500;
- energySlopeLow = 0.6;
- coplanarityHigh = 65;
- minHitCount = 2;
- } else if(backgroundLevel == 9) {
- clusterEnergyHigh = 1.500;
- seedEnergyHigh = 1.200;
- energySumLow = 0.400;
- energySumHigh = 1.950;
- energyDifferenceHigh = 1.400;
- energySlopeLow = 0.5;
- coplanarityHigh = 60;
- minHitCount = 2;
- } else if(backgroundLevel == 10) {
- clusterEnergyHigh = 1.500;
- seedEnergyHigh = 1.200;
- energySumLow = 0.400;
- energySumHigh = 2.000;
- energyDifferenceHigh = 1.400;
- energySlopeLow = 0.5;
- coplanarityHigh = 65;
- minHitCount = 2;
- }
- }
-
- /**
- * Tests all of the current cluster pairs for triggers.
- *
- * @return Returns <code>true</code> if one of the cluster pairs
- * passes all of the cluster cuts and <code>false</code> otherwise.
- */
+ // Make sure that the background level is valid.
+ if(backgroundLevel < 1 || backgroundLevel > 10) {
+ throw new RuntimeException(String.format("Trigger cuts are undefined for background level %d.", backgroundLevel));
+ }
+
+ // Otherwise, set the trigger cuts. Certain cuts are constant
+ // across all background levels.
+ clusterEnergyLow = 0.000;
+ seedEnergyLow = 0.100;
+
+ // Set the variable values.
+ if(backgroundLevel == 1) {
+ clusterEnergyHigh = 1.700;
+ seedEnergyHigh = 1.300;
+ energySumLow = 0.400;
+ energySumHigh = 2.00;
+ energyDifferenceHigh = 1.500;
+ energySlopeLow = 1.0;
+ coplanarityHigh = 40;
+ minHitCount = 2;
+ } else if(backgroundLevel == 2) {
+ clusterEnergyHigh = 1.600;
+ seedEnergyHigh = 1.200;
+ energySumLow = 0.300;
+ energySumHigh = 2.00;
+ energyDifferenceHigh = 1.400;
+ energySlopeLow = 0.8;
+ coplanarityHigh = 40;
+ minHitCount = 2;
+ } else if(backgroundLevel == 3) {
+ clusterEnergyHigh = 1.600;
+ seedEnergyHigh = 1.200;
+ energySumLow = 0.200;
+ energySumHigh = 2.000;
+ energyDifferenceHigh = 1.400;
+ energySlopeLow = 0.7;
+ coplanarityHigh = 40;
+ minHitCount = 2;
+ } else if(backgroundLevel == 4) {
+ clusterEnergyHigh = 1.500;
+ seedEnergyHigh = 1.200;
+ energySumLow = 0.500;
+ energySumHigh = 1.950;
+ energyDifferenceHigh = 1.400;
+ energySlopeLow = 0.6;
+ coplanarityHigh = 40;
+ minHitCount = 2;
+ } else if(backgroundLevel == 5) {
+ clusterEnergyHigh = 1.500;
+ seedEnergyHigh = 1.200;
+ energySumLow = 0.400;
+ energySumHigh = 2.000;
+ energyDifferenceHigh = 1.400;
+ energySlopeLow = 0.6;
+ coplanarityHigh = 45;
+ minHitCount = 2;
+ } else if(backgroundLevel == 6) {
+ clusterEnergyHigh = 1.500;
+ seedEnergyHigh = 1.200;
+ energySumLow = 0.200;
+ energySumHigh = 1.950;
+ energyDifferenceHigh = 1.400;
+ energySlopeLow = 0.6;
+ coplanarityHigh = 55;
+ minHitCount = 2;
+ } else if(backgroundLevel == 7) {
+ clusterEnergyHigh = 1.700;
+ seedEnergyHigh = 1.200;
+ energySumLow = 0.200;
+ energySumHigh = 2.000;
+ energyDifferenceHigh = 1.500;
+ energySlopeLow = 0.6;
+ coplanarityHigh = 60;
+ minHitCount = 2;
+ } else if(backgroundLevel == 8) {
+ clusterEnergyHigh = 1.700;
+ seedEnergyHigh = 1.300;
+ energySumLow = 0.200;
+ energySumHigh = 2.000;
+ energyDifferenceHigh = 1.500;
+ energySlopeLow = 0.6;
+ coplanarityHigh = 65;
+ minHitCount = 2;
+ } else if(backgroundLevel == 9) {
+ clusterEnergyHigh = 1.500;
+ seedEnergyHigh = 1.200;
+ energySumLow = 0.400;
+ energySumHigh = 1.950;
+ energyDifferenceHigh = 1.400;
+ energySlopeLow = 0.5;
+ coplanarityHigh = 60;
+ minHitCount = 2;
+ } else if(backgroundLevel == 10) {
+ clusterEnergyHigh = 1.500;
+ seedEnergyHigh = 1.200;
+ energySumLow = 0.400;
+ energySumHigh = 2.000;
+ energyDifferenceHigh = 1.400;
+ energySlopeLow = 0.5;
+ coplanarityHigh = 65;
+ minHitCount = 2;
+ }
+ }
+
+ /**
+ * Tests all of the current cluster pairs for triggers.
+ *
+ * @return Returns <code>true</code> if one of the cluster pairs
+ * passes all of the cluster cuts and <code>false</code> otherwise.
+ */
private boolean testTrigger() {
- // Get the list of cluster pairs.
- List<Cluster[]> clusterPairs = getClusterPairsTopBot();
+ // Get the list of cluster pairs.
+ List<Cluster[]> clusterPairs = getClusterPairsTopBot();
// Iterate over the cluster pairs and perform each of the cluster
// pair cuts on them. A cluster pair that passes all of the
// cuts registers as a trigger.
- pairLoop:
+ pairLoop:
for (Cluster[] clusterPair : clusterPairs) {
- // Increment the number of processed cluster pairs.
- allPairs++;
-
- // ==== Pair Energy Sum Cut ====================================
- // =============================================================
- // If the cluster fails the cut, skip to the next pair.
- if(!pairEnergySumCut(clusterPair)) { continue pairLoop; }
-
- // Otherwise, note that it passed the cut.
- pairEnergySumCount++;
-
- // ==== Pair Energy Difference Cut =============================
- // =============================================================
- // If the cluster fails the cut, skip to the next pair.
- if(!pairEnergyDifferenceCut(clusterPair)) { continue pairLoop; }
-
- // Otherwise, note that it passed the cut.
- pairEnergyDifferenceCount++;
-
- // ==== Pair Energy Slope Cut ==================================
- // =============================================================
- // If the cluster fails the cut, skip to the next pair.
- //if(!energyDistanceCut(clusterPair)) { continue pairLoop; }
- if(!pairEnergySlopeCut(clusterPair)) { continue pairLoop; }
-
- // Otherwise, note that it passed the cut.
- pairEnergySlopeCount++;
-
- // ==== Pair Coplanarity Cut ===================================
- // =============================================================
- // If the cluster fails the cut, skip to the next pair.
- if(!pairCoplanarityCut(clusterPair)) { continue pairLoop; }
-
- // Otherwise, note that it passed the cut.
- pairCoplanarityCount++;
-
- // Clusters that pass all of the pair cuts produce a trigger.
- return true;
+ // Increment the number of processed cluster pairs.
+ allPairs++;
+
+ // ==== Pair Energy Sum Cut ====================================
+ // =============================================================
+ // If the cluster fails the cut, skip to the next pair.
+ if(!pairEnergySumCut(clusterPair)) { continue pairLoop; }
+
+ // Otherwise, note that it passed the cut.
+ pairEnergySumCount++;
+
+ // ==== Pair Energy Difference Cut =============================
+ // =============================================================
+ // If the cluster fails the cut, skip to the next pair.
+ if(!pairEnergyDifferenceCut(clusterPair)) { continue pairLoop; }
+
+ // Otherwise, note that it passed the cut.
+ pairEnergyDifferenceCount++;
+
+ // ==== Pair Energy Slope Cut ==================================
+ // =============================================================
+ // If the cluster fails the cut, skip to the next pair.
+ //if(!energyDistanceCut(clusterPair)) { continue pairLoop; }
+ if(!pairEnergySlopeCut(clusterPair)) { continue pairLoop; }
+
+ // Otherwise, note that it passed the cut.
+ pairEnergySlopeCount++;
+
+ // ==== Pair Coplanarity Cut ===================================
+ // =============================================================
+ // If the cluster fails the cut, skip to the next pair.
+ if(!pairCoplanarityCut(clusterPair)) { continue pairLoop; }
+
+ // Otherwise, note that it passed the cut.
+ pairCoplanarityCount++;
+
+ // Clusters that pass all of the pair cuts produce a trigger.
+ return true;
}
// If the loop terminates without producing a trigger, there
- // are no cluster pairs which meet the trigger conditions.
+ // are no cluster pairs which meet the trigger conditions.
return false;
}
@@ -761,14 +761,14 @@
* @param clusterList - The clusters to add to the queues.
*/
private void updateClusterQueues(List<Cluster> clusterList) {
- // Create lists to store the top and bottom clusters.
+ // Create lists to store the top and bottom clusters.
ArrayList<Cluster> topClusterList = new ArrayList<Cluster>();
ArrayList<Cluster> botClusterList = new ArrayList<Cluster>();
// Loop over the clusters in the cluster list.
for (Cluster cluster : clusterList) {
- // If the cluster is on the top of the calorimeter, it
- // goes into the top cluster list.
+ // If the cluster is on the top of the calorimeter, it
+ // goes into the top cluster list.
if (cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy") > 0) {
topClusterList.add(cluster);
}
Modified: java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger.java Wed Mar 9 11:43:24 2016
@@ -15,209 +15,209 @@
* @author Luca Colaneri
*/
public class FEETrigger extends TriggerDriver {
- // Store the LCIO cluster collection name.
- private String clusterCollectionName = "EcalClusters";
-
- // Store the cluster total energy trigger threshold.
- private double energyThreshold = 1.5;
-
- // Track the number of over-threshold clusters in each region.
- private int zone1Count = 0;
- private int zone2Count = 0;
- private int zone3Count = 0;
-
+ // Store the LCIO cluster collection name.
+ private String clusterCollectionName = "EcalClusters";
+
+ // Store the cluster total energy trigger threshold.
+ private double energyThreshold = 1.5;
+
+ // Track the number of over-threshold clusters in each region.
+ private int zone1Count = 0;
+ private int zone2Count = 0;
+ private int zone3Count = 0;
+
// The number of cluster over threshold that must occur in a region
- // before a trigger occurs.
- private int zone1Prescaling = 50;
- private int zone2Prescaling = 10;
-
- /**
- * Sets the energy threshold required for a cluster to be counted.
- *
- * @param energyThreshold - The energy threshold in GeV.
- */
- public void setEnergyThreshold(int energyThreshold) {
- this.energyThreshold = energyThreshold;
- }
-
- /**
- * Sets the number of events over threshold which must occur in the
- * first region in order for a trigger to occur.
- *
- * @param zone1Prescaling - The number of over-threshold clusters needed
- * for a trigger.
- */
- public void setZone1Prescaling(int zone1Prescaling) {
- this.zone1Prescaling = zone1Prescaling;
- }
-
- /**
- * Sets the number of events over threshold which must occur in the
- * second region in order for a trigger to occur.
- *
- * @param zone2Prescaling - The number of over-threshold clusters needed
- * for a trigger.
- */
- public void setZone2Prescaling(int zone2Prescaling) {
- this.zone2Prescaling = zone2Prescaling;
- }
-
- /**
- * Checks if any clusters exist over the set energy threshold and,
- * if they do, increments the appropriate over-threshold count
- * variable for the zone in which the cluster resides.
- *
- * @param event - The event from which clusters should be extracted.
- */
- @Override
- public void process(EventHeader event) {
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Get the list of clusters from the event.
- List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
-
- // Loop over the clusters and check for any that pass the threshold.
- for(Cluster cluster : clusterList) {
- // Check if the current cluster exceeds the energy
- // threshold. If it does not, continue to the next
- // cluster in the list.
- if(cluster.getEnergy() > energyThreshold) {
- // Get the x-index of the seed hit.
- int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
-
- // Determine in which region the cluster is located
- // and increment the counter for that region. Zones
- // are defined as:
- // Zone 1 is -13 < ix < -4 and 14 < ix < 21 MISTAKE!!! it's all reversed!! remember!!!
- // Zone 2 is -20 < ix < -14 and ix > 20
- // Zone 3 is -23 <= ix < -18
+ // before a trigger occurs.
+ private int zone1Prescaling = 50;
+ private int zone2Prescaling = 10;
+
+ /**
+ * Sets the energy threshold required for a cluster to be counted.
+ *
+ * @param energyThreshold - The energy threshold in GeV.
+ */
+ public void setEnergyThreshold(int energyThreshold) {
+ this.energyThreshold = energyThreshold;
+ }
+
+ /**
+ * Sets the number of events over threshold which must occur in the
+ * first region in order for a trigger to occur.
+ *
+ * @param zone1Prescaling - The number of over-threshold clusters needed
+ * for a trigger.
+ */
+ public void setZone1Prescaling(int zone1Prescaling) {
+ this.zone1Prescaling = zone1Prescaling;
+ }
+
+ /**
+ * Sets the number of events over threshold which must occur in the
+ * second region in order for a trigger to occur.
+ *
+ * @param zone2Prescaling - The number of over-threshold clusters needed
+ * for a trigger.
+ */
+ public void setZone2Prescaling(int zone2Prescaling) {
+ this.zone2Prescaling = zone2Prescaling;
+ }
+
+ /**
+ * Checks if any clusters exist over the set energy threshold and,
+ * if they do, increments the appropriate over-threshold count
+ * variable for the zone in which the cluster resides.
+ *
+ * @param event - The event from which clusters should be extracted.
+ */
+ @Override
+ public void process(EventHeader event) {
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Get the list of clusters from the event.
+ List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
+
+ // Loop over the clusters and check for any that pass the threshold.
+ for(Cluster cluster : clusterList) {
+ // Check if the current cluster exceeds the energy
+ // threshold. If it does not, continue to the next
+ // cluster in the list.
+ if(cluster.getEnergy() > energyThreshold) {
+ // Get the x-index of the seed hit.
+ int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+
+ // Determine in which region the cluster is located
+ // and increment the counter for that region. Zones
+ // are defined as:
+ // Zone 1 is -13 < ix < -4 and 14 < ix < 21 MISTAKE!!! it's all reversed!! remember!!!
+ // Zone 2 is -20 < ix < -14 and ix > 20
+ // Zone 3 is -23 <= ix < -18
//V3
/*
- if( ix > 18 || ix < -22) { zone3Count++; }
- if(ix < 19 && ix > 12 ) { zone2Count++; }
- if((ix > 4 && ix < 13) || (ix > -23 && ix < -14)) { zone1Count++; }
+ if( ix > 18 || ix < -22) { zone3Count++; }
+ if(ix < 19 && ix > 12 ) { zone2Count++; }
+ if((ix > 4 && ix < 13) || (ix > -23 && ix < -14)) { zone1Count++; }
*/
//V2
/*
- if( ix > 18 ) { zone3Count++; }
- if(ix < 19 && ix > 12 || ix <-20) { zone2Count++; }
- if((ix > 4 && ix < 13) || (ix > -21 && ix < -14)) { zone1Count++; }
+ if( ix > 18 ) { zone3Count++; }
+ if(ix < 19 && ix > 12 || ix <-20) { zone2Count++; }
+ if((ix > 4 && ix < 13) || (ix > -21 && ix < -14)) { zone1Count++; }
*/
//v4/*
/*
if( ix > 19 || ix < -22) { zone3Count++; }
- if(ix < 20 && ix > 12 || ix <-20 && ix > -23) { zone2Count++; }
- if((ix > 4 && ix < 13) || (ix > -21 && ix < -14)) { zone1Count++; }
+ if(ix < 20 && ix > 12 || ix <-20 && ix > -23) { zone2Count++; }
+ if((ix > 4 && ix < 13) || (ix > -21 && ix < -14)) { zone1Count++; }
*/
//V prova
/*
- if( ix != 50 ) { zone2Count++; }
- */
+ if( ix != 50 ) { zone2Count++; }
+ */
//V6
/*
if( ix > 19 || ix < -22) { zone3Count++; }
- if(ix < 20 && ix > 8 || ix <-16 && ix > -23) { zone2Count++; }
- if((ix > 4 && ix < 9) || (ix > -17 && ix < -14)) { zone1Count++; }
+ if(ix < 20 && ix > 8 || ix <-16 && ix > -23) { zone2Count++; }
+ if((ix > 4 && ix < 9) || (ix > -17 && ix < -14)) { zone1Count++; }
*/
//V7
/*
if( ix > 19 || ix < -22) { zone3Count++; }
- if(ix < 20 && ix > 15 ) { zone2Count++; }
- if((ix > 5 && ix < 16) || (ix > -23 && ix < -14)) { zone1Count++; }
+ if(ix < 20 && ix > 15 ) { zone2Count++; }
+ if((ix > 5 && ix < 16) || (ix > -23 && ix < -14)) { zone1Count++; }
*/
//V8
/*
if( ix > 19 || ix < -17) { zone3Count++; } //x1
- if(ix < 20 && ix > 9 ) { zone2Count++; }//x10
- if((ix > 5 && ix < 10) || (ix > -18 && ix < -14)) { zone1Count++; } //x50
+ if(ix < 20 && ix > 9 ) { zone2Count++; }//x10
+ if((ix > 5 && ix < 10) || (ix > -18 && ix < -14)) { zone1Count++; } //x50
}*/
//V9
/*
if( ix > 19 || ix < -21) { zone3Count++; } //x1
- if(ix < 20 && ix > 9 || ix > -22 && ix <-17) { zone2Count++; }//x10
- if((ix > 5 && ix < 10) || (ix > -18 && ix < -14)) { zone1Count++; } //x50
+ if(ix < 20 && ix > 9 || ix > -22 && ix <-17) { zone2Count++; }//x10
+ if((ix > 5 && ix < 10) || (ix > -18 && ix < -14)) { zone1Count++; } //x50
*/
//10
/*
if( ix > 19 || ix < -22) { zone3Count++; } //x1
- if(ix < 20 && ix > 9 || ix > -22 && ix <-17) { zone2Count++; }//x10
- if((ix > 5 && ix < 10) || (ix > -18 && ix < -14)) { zone1Count++; } //x50
+ if(ix < 20 && ix > 9 || ix > -22 && ix <-17) { zone2Count++; }//x10
+ if((ix > 5 && ix < 10) || (ix > -18 && ix < -14)) { zone1Count++; } //x50
*/
//V11
if( ix > 19 || ix < -22) { zone3Count++; } //x1
- if(ix < 20 && ix > 11 || ix > -22 && ix <-19) { zone2Count++; }//x10
- if((ix > 5 && ix < 12) || (ix > -20 && ix < -14)) { zone1Count++; } //x50
+ if(ix < 20 && ix > 11 || ix > -22 && ix <-19) { zone2Count++; }//x10
+ if((ix > 5 && ix < 12) || (ix > -20 && ix < -14)) { zone1Count++; } //x50
}
- }
- }
-
- // Run the superclass event processing.
- super.process(event);
- }
-
- /**
- * Checks whether or not a trigger occurred.
- *
- * @param event - The event on which to base the trigger decision.
- * @return Returns <code>true</code> if a trigger occurred and <code>
- * false</code> if a trigger did not.
- */
- @Override
- protected boolean triggerDecision(EventHeader event) {
- // Check if the event has clusters. An event with no clusters
- // should never result in a trigger.
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Check if any of the zone counts are high enough to trigger.
- return triggerTest();
- }
-
- // Events without clusters can not trigger.
- else { return false; }
- }
-
- /**
- * Checks if any of the regional counts are sufficiently high to
- * register a trigger.
- *
- * @return Returns <code>true</code> if a region has enough clusters
- * to trigger and <code>false</code> otherwise.
- */
- private boolean triggerTest() {
- // Track whether a trigger occurred.
- boolean trigger = false;
-
- // If any clusters occur in zone 3, reset the count and note
- // that a trigger occurred.
- if(zone3Count > 0) {
- zone3Count = 0;
+ }
+ }
+
+ // Run the superclass event processing.
+ super.process(event);
+ }
+
+ /**
+ * Checks whether or not a trigger occurred.
+ *
+ * @param event - The event on which to base the trigger decision.
+ * @return Returns <code>true</code> if a trigger occurred and <code>
+ * false</code> if a trigger did not.
+ */
+ @Override
+ protected boolean triggerDecision(EventHeader event) {
+ // Check if the event has clusters. An event with no clusters
+ // should never result in a trigger.
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Check if any of the zone counts are high enough to trigger.
+ return triggerTest();
+ }
+
+ // Events without clusters can not trigger.
+ else { return false; }
+ }
+
+ /**
+ * Checks if any of the regional counts are sufficiently high to
+ * register a trigger.
+ *
+ * @return Returns <code>true</code> if a region has enough clusters
+ * to trigger and <code>false</code> otherwise.
+ */
+ private boolean triggerTest() {
+ // Track whether a trigger occurred.
+ boolean trigger = false;
+
+ // If any clusters occur in zone 3, reset the count and note
+ // that a trigger occurred.
+ if(zone3Count > 0) {
+ zone3Count = 0;
if(zone2Count==zone2Prescaling){zone2Count=0;}
if(zone1Count==zone1Prescaling){zone1Count=0;}
- trigger = true;
- }
-
- // If zone 2 has sufficient clusters (100 by default) to
- // trigger, reset its count and note that a trigger occurred.
- else if(zone2Count == zone2Prescaling) {
- zone2Count = 0;
+ trigger = true;
+ }
+
+ // If zone 2 has sufficient clusters (100 by default) to
+ // trigger, reset its count and note that a trigger occurred.
+ else if(zone2Count == zone2Prescaling) {
+ zone2Count = 0;
if(zone3Count>0){zone3Count=0;}
if(zone1Count==zone1Prescaling){zone1Count=0;}
- trigger = true;
- }
-
- // If zone 3 has sufficient clusters (1000 by default) to
- // trigger, reset its count and note that a trigger occurred.
- else if(zone1Count == zone1Prescaling) {
- zone1Count = 0;
+ trigger = true;
+ }
+
+ // If zone 3 has sufficient clusters (1000 by default) to
+ // trigger, reset its count and note that a trigger occurred.
+ else if(zone1Count == zone1Prescaling) {
+ zone1Count = 0;
if(zone3Count>0){zone3Count=0;}
if(zone2Count==zone2Prescaling){zone2Count=0;}
- trigger = true;
- }
-
- // Return whether or not a trigger occurred.
- return trigger;
- }
+ trigger = true;
+ }
+
+ // Return whether or not a trigger occurred.
+ return trigger;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger2.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger2.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/FEETrigger2.java Wed Mar 9 11:43:24 2016
@@ -15,159 +15,159 @@
* @author Luca Colaneri
*/
public class FEETrigger2 extends TriggerDriver {
- // Store the LCIO cluster collection name.
- private String clusterCollectionName = "EcalClusters";
-
- // Store the cluster total energy trigger threshold.
- private double energyThreshold = 1.5;
-
- // Track the number of over-threshold clusters in each region.
- private int zone1Count = 0;
- private int zone2Count = 0;
- private int zone3Count = 0;
+ // Store the LCIO cluster collection name.
+ private String clusterCollectionName = "EcalClusters";
+
+ // Store the cluster total energy trigger threshold.
+ private double energyThreshold = 1.5;
+
+ // Track the number of over-threshold clusters in each region.
+ private int zone1Count = 0;
+ private int zone2Count = 0;
+ private int zone3Count = 0;
private int zone4Count = 0;
-
+
// The number of cluster over threshold that must occur in a region
- // before a trigger occurs.
- private int zone1Prescaling = 1000;
- private int zone2Prescaling = 70;
- private int zone4Prescaling = 200;
- /**
- * Sets the energy threshold required for a cluster to be counted.
- *
- * @param energyThreshold - The energy threshold in GeV.
- */
- public void setEnergyThreshold(int energyThreshold) {
- this.energyThreshold = energyThreshold;
- }
-
- /**
- * Sets the number of events over threshold which must occur in the
- * first region in order for a trigger to occur.
- *
- * @param zone1Prescaling - The number of over-threshold clusters needed
- * for a trigger.
- */
- public void setZone1Prescaling(int zone1Prescaling) {
- this.zone1Prescaling = zone1Prescaling;
- }
-
- /**
- * Sets the number of events over threshold which must occur in the
- * second region in order for a trigger to occur.
- *
- * @param zone2Prescaling - The number of over-threshold clusters needed
- * for a trigger.
- */
- public void setZone2Prescaling(int zone2Prescaling) {
- this.zone2Prescaling = zone2Prescaling;
- }
-
- /**
- * Checks if any clusters exist over the set energy threshold and,
- * if they do, increments the appropriate over-threshold count
- * variable for the zone in which the cluster resides.
- *
- * @param event - The event from which clusters should be extracted.
- */
- @Override
- public void process(EventHeader event) {
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Get the list of clusters from the event.
- List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
-
- // Loop over the clusters and check for any that pass the threshold.
- for(Cluster cluster : clusterList) {
- // Check if the current cluster exceeds the energy
- // threshold. If it does not, continue to the next
- // cluster in the list.
- if(cluster.getEnergy() > energyThreshold) {
- // Get the x-index of the seed hit.
- int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
-
- // Determine in which region the cluster is located
- // and increment the counter for that region. Zones
- // are defined as:
- // Zone 1 is -13 < ix < -4 and 14 < ix < 21
- // Zone 2 is -20 < ix < -14 and ix > 20
- // Zone 3 is -23 <= ix < -19
- if(-23 <= ix && ix < -19) { zone3Count++; }
- if((-20 < ix && ix < -14)) { zone2Count++; }
- if((-13 < ix && ix < -4) || (14 < ix && ix < 21)) { zone1Count++; }
+ // before a trigger occurs.
+ private int zone1Prescaling = 1000;
+ private int zone2Prescaling = 70;
+ private int zone4Prescaling = 200;
+ /**
+ * Sets the energy threshold required for a cluster to be counted.
+ *
+ * @param energyThreshold - The energy threshold in GeV.
+ */
+ public void setEnergyThreshold(int energyThreshold) {
+ this.energyThreshold = energyThreshold;
+ }
+
+ /**
+ * Sets the number of events over threshold which must occur in the
+ * first region in order for a trigger to occur.
+ *
+ * @param zone1Prescaling - The number of over-threshold clusters needed
+ * for a trigger.
+ */
+ public void setZone1Prescaling(int zone1Prescaling) {
+ this.zone1Prescaling = zone1Prescaling;
+ }
+
+ /**
+ * Sets the number of events over threshold which must occur in the
+ * second region in order for a trigger to occur.
+ *
+ * @param zone2Prescaling - The number of over-threshold clusters needed
+ * for a trigger.
+ */
+ public void setZone2Prescaling(int zone2Prescaling) {
+ this.zone2Prescaling = zone2Prescaling;
+ }
+
+ /**
+ * Checks if any clusters exist over the set energy threshold and,
+ * if they do, increments the appropriate over-threshold count
+ * variable for the zone in which the cluster resides.
+ *
+ * @param event - The event from which clusters should be extracted.
+ */
+ @Override
+ public void process(EventHeader event) {
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Get the list of clusters from the event.
+ List<Cluster> clusterList = event.get(Cluster.class, clusterCollectionName);
+
+ // Loop over the clusters and check for any that pass the threshold.
+ for(Cluster cluster : clusterList) {
+ // Check if the current cluster exceeds the energy
+ // threshold. If it does not, continue to the next
+ // cluster in the list.
+ if(cluster.getEnergy() > energyThreshold) {
+ // Get the x-index of the seed hit.
+ int ix = cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix");
+
+ // Determine in which region the cluster is located
+ // and increment the counter for that region. Zones
+ // are defined as:
+ // Zone 1 is -13 < ix < -4 and 14 < ix < 21
+ // Zone 2 is -20 < ix < -14 and ix > 20
+ // Zone 3 is -23 <= ix < -19
+ if(-23 <= ix && ix < -19) { zone3Count++; }
+ if((-20 < ix && ix < -14)) { zone2Count++; }
+ if((-13 < ix && ix < -4) || (14 < ix && ix < 21)) { zone1Count++; }
if(ix>20){zone4Count++;}
- }
- }
- }
-
- // Run the superclass event processing.
- super.process(event);
- }
-
- /**
- * Checks whether or not a trigger occurred.
- *
- * @param event - The event on which to base the trigger decision.
- * @return Returns <code>true</code> if a trigger occurred and <code>
- * false</code> if a trigger did not.
- */
- @Override
- protected boolean triggerDecision(EventHeader event) {
- // Check if the event has clusters. An event with no clusters
- // should never result in a trigger.
- if(event.hasCollection(Cluster.class, clusterCollectionName)) {
- // Check if any of the zone counts are high enough to trigger.
- return triggerTest();
- }
-
- // Events without clusters can not trigger.
- else { return false; }
- }
-
- /**
- * Checks if any of the regional counts are sufficiently high to
- * register a trigger.
- *
- * @return Returns <code>true</code> if a region has enough clusters
- * to trigger and <code>false</code> otherwise.
- */
- private boolean triggerTest() {
- // Track whether a trigger occurred.
- boolean trigger = false;
-
- // If any clusters occur in zone 3, reset the count and note
- // that a trigger occurred.
- if(zone3Count > 0) {
- zone3Count = 0;
+ }
+ }
+ }
+
+ // Run the superclass event processing.
+ super.process(event);
+ }
+
+ /**
+ * Checks whether or not a trigger occurred.
+ *
+ * @param event - The event on which to base the trigger decision.
+ * @return Returns <code>true</code> if a trigger occurred and <code>
+ * false</code> if a trigger did not.
+ */
+ @Override
+ protected boolean triggerDecision(EventHeader event) {
+ // Check if the event has clusters. An event with no clusters
+ // should never result in a trigger.
+ if(event.hasCollection(Cluster.class, clusterCollectionName)) {
+ // Check if any of the zone counts are high enough to trigger.
+ return triggerTest();
+ }
+
+ // Events without clusters can not trigger.
+ else { return false; }
+ }
+
+ /**
+ * Checks if any of the regional counts are sufficiently high to
+ * register a trigger.
+ *
+ * @return Returns <code>true</code> if a region has enough clusters
+ * to trigger and <code>false</code> otherwise.
+ */
+ private boolean triggerTest() {
+ // Track whether a trigger occurred.
+ boolean trigger = false;
+
+ // If any clusters occur in zone 3, reset the count and note
+ // that a trigger occurred.
+ if(zone3Count > 0) {
+ zone3Count = 0;
if(zone2Count==zone2Prescaling){zone2Count=0;}
if(zone1Count==zone1Prescaling){zone1Count=0;}
- trigger = true;
- }
-
- // If zone 2 has sufficient clusters (100 by default) to
- // trigger, reset its count and note that a trigger occurred.
- else if(zone2Count == zone2Prescaling) {
- zone2Count = 0;
+ trigger = true;
+ }
+
+ // If zone 2 has sufficient clusters (100 by default) to
+ // trigger, reset its count and note that a trigger occurred.
+ else if(zone2Count == zone2Prescaling) {
+ zone2Count = 0;
if(zone3Count>0){zone3Count=0;}
if(zone1Count==zone1Prescaling){zone1Count=0;}
- trigger = true;
- }
-
- // If zone 3 has sufficient clusters (1000 by default) to
- // trigger, reset its count and note that a trigger occurred.
- else if(zone1Count == zone1Prescaling) {
- zone1Count = 0;
+ trigger = true;
+ }
+
+ // If zone 3 has sufficient clusters (1000 by default) to
+ // trigger, reset its count and note that a trigger occurred.
+ else if(zone1Count == zone1Prescaling) {
+ zone1Count = 0;
if(zone3Count>0){zone3Count=0;}
if(zone2Count==zone2Prescaling){zone2Count=0;}
- trigger = true;
- }
- else if(zone4Count == zone4Prescaling) {
- zone4Count = 0;
+ trigger = true;
+ }
+ else if(zone4Count == zone4Prescaling) {
+ zone4Count = 0;
if(zone3Count>0){zone3Count=0;}
if(zone2Count==zone2Prescaling){zone2Count=0;}
if(zone1Count==zone1Prescaling){zone1Count=0;}
- trigger = true;
- }
- // Return whether or not a trigger occurred.
- return trigger;
- }
+ trigger = true;
+ }
+ // Return whether or not a trigger occurred.
+ return trigger;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/luca/LCIOReadScript.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/LCIOReadScript.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/LCIOReadScript.java Wed Mar 9 11:43:24 2016
@@ -10,91 +10,91 @@
import org.lcsim.lcio.LCIOWriter;
public class LCIOReadScript {
- public static void main(String[] args) {
- // Make sure there arguments are valid.
- if(args.length != 2) {
- System.err.println("Error: Arguments must be [Input_File] [Output_File]");
- System.exit(1);
- }
-
- // Set the input/output files.
- File inputFile = new File(args[0]);
- File outputFile = new File(args[1]);
-
- // Make sure that the input file exists.
- if(!inputFile.canRead()) {
- System.err.println("Error: Input file can not be found.");
- System.exit(1);
- }
-
- // Create an LCIO reader to read it in.
- LCIOReader reader = null;
- try { reader = new LCIOReader(inputFile); }
- catch(IOException e) {
- e.printStackTrace();
- System.exit(1);
- }
-
- // Create an LCIO writer to output the new file.
- LCIOWriter writer = null;
- try { writer = new LCIOWriter(outputFile); }
- catch(IOException e) {
- e.printStackTrace();
- System.exit(1);
- }
-
- // Keep looping through events until there are no more.
- while(true) {
- // Try to get an event.
- EventHeader event = null;
- try { event = reader.read(); }
- catch(IOException e) { }
-
- // If the event is still null, there either was no event
- // or an error occurred.
- if(event == null) { break; }
-
- // Get the event number to print a status update.
- int num = event.getEventNumber();
- if(num % 10000 == 0) { System.out.println("Parsing event " + num + "."); }
-
- // See if the MCParticle collection exists.
- if(event.hasCollection(MCParticle.class, "MCParticle")) {
- // Get the MCParticle collection from the event.
- ArrayList<MCParticle> particleList = (ArrayList<MCParticle>) event.get(MCParticle.class, "MCParticle");
-
- // Remove the MCParticle collection from the event.
- event.remove("MCParticle");
-
- // Make a new list for good particles which pass some test.
- ArrayList<MCParticle> goodParticles = new ArrayList<MCParticle>();
-
- // Sort through the list of MCParticle objects in the
- // full list and add good ones to the good list.
- for(MCParticle p : particleList) {
- if(p.getEnergy() >= 2.1) { goodParticles.add(p); }
- }
-
- // Write the good particles back to the event.
- event.put("MCParticle", goodParticles);
- }
-
- // Write the event back out to the new file.
- try { writer.write(event); }
- catch(IOException e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- // Close the reader and writer.
- try {
- reader.close();
- writer.close();
- }
- catch(IOException e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
+ public static void main(String[] args) {
+ // Make sure there arguments are valid.
+ if(args.length != 2) {
+ System.err.println("Error: Arguments must be [Input_File] [Output_File]");
+ System.exit(1);
+ }
+
+ // Set the input/output files.
+ File inputFile = new File(args[0]);
+ File outputFile = new File(args[1]);
+
+ // Make sure that the input file exists.
+ if(!inputFile.canRead()) {
+ System.err.println("Error: Input file can not be found.");
+ System.exit(1);
+ }
+
+ // Create an LCIO reader to read it in.
+ LCIOReader reader = null;
+ try { reader = new LCIOReader(inputFile); }
+ catch(IOException e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ // Create an LCIO writer to output the new file.
+ LCIOWriter writer = null;
+ try { writer = new LCIOWriter(outputFile); }
+ catch(IOException e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ // Keep looping through events until there are no more.
+ while(true) {
+ // Try to get an event.
+ EventHeader event = null;
+ try { event = reader.read(); }
+ catch(IOException e) { }
+
+ // If the event is still null, there either was no event
+ // or an error occurred.
+ if(event == null) { break; }
+
+ // Get the event number to print a status update.
+ int num = event.getEventNumber();
+ if(num % 10000 == 0) { System.out.println("Parsing event " + num + "."); }
+
+ // See if the MCParticle collection exists.
+ if(event.hasCollection(MCParticle.class, "MCParticle")) {
+ // Get the MCParticle collection from the event.
+ ArrayList<MCParticle> particleList = (ArrayList<MCParticle>) event.get(MCParticle.class, "MCParticle");
+
+ // Remove the MCParticle collection from the event.
+ event.remove("MCParticle");
+
+ // Make a new list for good particles which pass some test.
+ ArrayList<MCParticle> goodParticles = new ArrayList<MCParticle>();
+
+ // Sort through the list of MCParticle objects in the
+ // full list and add good ones to the good list.
+ for(MCParticle p : particleList) {
+ if(p.getEnergy() >= 2.1) { goodParticles.add(p); }
+ }
+
+ // Write the good particles back to the event.
+ event.put("MCParticle", goodParticles);
+ }
+
+ // Write the event back out to the new file.
+ try { writer.write(event); }
+ catch(IOException e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ // Close the reader and writer.
+ try {
+ reader.close();
+ writer.close();
+ }
+ catch(IOException e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/luca/rate.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/rate.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/rate.java Wed Mar 9 11:43:24 2016
@@ -435,15 +435,15 @@
nevents++;
- /* natha's code for trigger
- List <AbstractIntData> aids = event.get(AbstractIntData.class, "TriggerBank");
- for (AbstractIntData aid : aids) {
- if (aid.getTag() == TIData.BANK_TAG) {
- TIData tt=(TIData)aid;
- if (!tt.isSingle1Trigger()) return;
+ /* natha's code for trigger
+ List <AbstractIntData> aids = event.get(AbstractIntData.class, "TriggerBank");
+ for (AbstractIntData aid : aids) {
+ if (aid.getTag() == TIData.BANK_TAG) {
+ TIData tt=(TIData)aid;
+ if (!tt.isSingle1Trigger()) return;
break;
- }
- }
+ }
+ }
*/ //nathans code for trigger end
Modified: java/trunk/users/src/main/java/org/hps/users/luca/ratesim.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/luca/ratesim.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/luca/ratesim.java Wed Mar 9 11:43:24 2016
@@ -238,15 +238,15 @@
nevents++;
- /* natha's code for trigger
- List <AbstractIntData> aids = event.get(AbstractIntData.class, "TriggerBank");
- for (AbstractIntData aid : aids) {
- if (aid.getTag() == TIData.BANK_TAG) {
- TIData tt=(TIData)aid;
- if (!tt.isSingle1Trigger()) return;
+ /* natha's code for trigger
+ List <AbstractIntData> aids = event.get(AbstractIntData.class, "TriggerBank");
+ for (AbstractIntData aid : aids) {
+ if (aid.getTag() == TIData.BANK_TAG) {
+ TIData tt=(TIData)aid;
+ if (!tt.isSingle1Trigger()) return;
break;
- }
- }
+ }
+ }
*/ //nathans code for trigger end
Modified: java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalAnalogPrintDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalAnalogPrintDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalAnalogPrintDriver.java Wed Mar 9 11:43:24 2016
@@ -22,67 +22,67 @@
*/
public class HPSEcalAnalogPrintDriver extends Driver {
- Subdetector ecal;
- IDDecoder dec;
- String ecalName;
- String ecalReadoutName = "EcalHits";
- String ecalCollectionName = null;
- String outputFileName;
- PrintWriter outputStream = null;
- int flags;
+ Subdetector ecal;
+ IDDecoder dec;
+ String ecalName;
+ String ecalReadoutName = "EcalHits";
+ String ecalCollectionName = null;
+ String outputFileName;
+ PrintWriter outputStream = null;
+ int flags;
- public HPSEcalAnalogPrintDriver() {
- }
+ public HPSEcalAnalogPrintDriver() {
+ }
- public void setEcalCollectionName(String ecalCollectionName) {
- this.ecalCollectionName = ecalCollectionName;
- }
+ public void setEcalCollectionName(String ecalCollectionName) {
+ this.ecalCollectionName = ecalCollectionName;
+ }
- public void setEcalName(String ecalName) {
- this.ecalName = ecalName;
- }
+ public void setEcalName(String ecalName) {
+ this.ecalName = ecalName;
+ }
- public void setOutputFileName(String outputFileName) {
- this.outputFileName = outputFileName;
- }
+ public void setOutputFileName(String outputFileName) {
+ this.outputFileName = outputFileName;
+ }
- @Override
- public void startOfData() {
- if (ecalCollectionName == null) {
- throw new RuntimeException("The parameter ecalCollectionName was not set!");
- }
+ @Override
+ public void startOfData() {
+ if (ecalCollectionName == null) {
+ throw new RuntimeException("The parameter ecalCollectionName was not set!");
+ }
- if (ecalName == null) {
- throw new RuntimeException("The parameter ecalName was not set!");
- }
+ if (ecalName == null) {
+ throw new RuntimeException("The parameter ecalName was not set!");
+ }
- if (outputFileName != null) {
- try {
- outputStream = new PrintWriter(outputFileName);
- } catch (IOException ex) {
- throw new RuntimeException("Invalid outputFilePath!");
- }
- } else {
- outputStream = new PrintWriter(System.out, true);
- }
- }
+ if (outputFileName != null) {
+ try {
+ outputStream = new PrintWriter(outputFileName);
+ } catch (IOException ex) {
+ throw new RuntimeException("Invalid outputFilePath!");
+ }
+ } else {
+ outputStream = new PrintWriter(System.out, true);
+ }
+ }
- public void detectorChanged(Detector detector) {
- // Get the Subdetector.
- ecal = (Subdetector) detector.getSubdetector(ecalName);
- dec = ecal.getIDDecoder();
- }
+ public void detectorChanged(Detector detector) {
+ // Get the Subdetector.
+ ecal = (Subdetector) detector.getSubdetector(ecalName);
+ dec = ecal.getIDDecoder();
+ }
- @Override
- public void process(EventHeader event) {
- // Get the list of ECal hits.
- if (event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
- //outputStream.println("Reading RawTrackerHits from event " + event.getEventNumber());
- List<CalorimeterHit> hits = event.get(CalorimeterHit.class, ecalCollectionName);
- for (CalorimeterHit hit : hits) {
- dec.setID(hit.getCellID());
- outputStream.printf("%d\t%d\t%f\t%f\n", dec.getValue("ix"), dec.getValue("iy"), hit.getTime(), hit.getRawEnergy());
- }
- }
- }
+ @Override
+ public void process(EventHeader event) {
+ // Get the list of ECal hits.
+ if (event.hasCollection(CalorimeterHit.class, ecalCollectionName)) {
+ //outputStream.println("Reading RawTrackerHits from event " + event.getEventNumber());
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class, ecalCollectionName);
+ for (CalorimeterHit hit : hits) {
+ dec.setID(hit.getCellID());
+ outputStream.printf("%d\t%d\t%f\t%f\n", dec.getValue("ix"), dec.getValue("iy"), hit.getTime(), hit.getRawEnergy());
+ }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalDigitalPrintDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalDigitalPrintDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalDigitalPrintDriver.java Wed Mar 9 11:43:24 2016
@@ -22,70 +22,70 @@
*/
public class HPSEcalDigitalPrintDriver extends Driver {
- Subdetector ecal;
- IDDecoder dec;
- String ecalName = "Ecal";
- String ecalReadoutName = "EcalHits";
- String ecalCollectionName = "EcalRawHits";
- String outputFileName;
- PrintWriter outputStream = null;
- int timeScale = 1;
- int flags;
+ Subdetector ecal;
+ IDDecoder dec;
+ String ecalName = "Ecal";
+ String ecalReadoutName = "EcalHits";
+ String ecalCollectionName = "EcalRawHits";
+ String outputFileName;
+ PrintWriter outputStream = null;
+ int timeScale = 1;
+ int flags;
- public HPSEcalDigitalPrintDriver() {
- }
+ public HPSEcalDigitalPrintDriver() {
+ }
- public void setTimeScale(int timeScale) {
- this.timeScale = timeScale;
- }
+ public void setTimeScale(int timeScale) {
+ this.timeScale = timeScale;
+ }
- public void setEcalCollectionName(String ecalCollectionName) {
- this.ecalCollectionName = ecalCollectionName;
- }
+ public void setEcalCollectionName(String ecalCollectionName) {
+ this.ecalCollectionName = ecalCollectionName;
+ }
- public void setEcalName(String ecalName) {
- this.ecalName = ecalName;
- }
+ public void setEcalName(String ecalName) {
+ this.ecalName = ecalName;
+ }
- public void setOutputFileName(String outputFileName) {
- this.outputFileName = outputFileName;
- }
+ public void setOutputFileName(String outputFileName) {
+ this.outputFileName = outputFileName;
+ }
- public void startOfData() {
- if (ecalCollectionName == null) {
- throw new RuntimeException("The parameter ecalCollectionName was not set!");
- }
+ public void startOfData() {
+ if (ecalCollectionName == null) {
+ throw new RuntimeException("The parameter ecalCollectionName was not set!");
+ }
- if (ecalName == null) {
- throw new RuntimeException("The parameter ecalName was not set!");
- }
+ if (ecalName == null) {
+ throw new RuntimeException("The parameter ecalName was not set!");
+ }
- if (outputFileName != null) {
- try {
- outputStream = new PrintWriter(outputFileName);
- } catch (IOException ex) {
- throw new RuntimeException("Invalid outputFilePath!");
- }
- } else {
- outputStream = new PrintWriter(System.out, true);
- }
- }
+ if (outputFileName != null) {
+ try {
+ outputStream = new PrintWriter(outputFileName);
+ } catch (IOException ex) {
+ throw new RuntimeException("Invalid outputFilePath!");
+ }
+ } else {
+ outputStream = new PrintWriter(System.out, true);
+ }
+ }
- public void detectorChanged(Detector detector) {
- // Get the Subdetector.
- ecal = (Subdetector) detector.getSubdetector(ecalName);
- dec = ecal.getIDDecoder();
- }
+ public void detectorChanged(Detector detector) {
+ // Get the Subdetector.
+ ecal = (Subdetector) detector.getSubdetector(ecalName);
+ dec = ecal.getIDDecoder();
+ }
- public void process(EventHeader event) {
- // Get the list of ECal hits.
- if (event.hasCollection(RawCalorimeterHit.class, ecalCollectionName)) {
- List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class, ecalCollectionName);
- //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
- for (RawCalorimeterHit hit : hits) {
- dec.setID(hit.getCellID());
- outputStream.printf("%d\t%d\t%d\t%d\n", dec.getValue("ix"), dec.getValue("iy"), hit.getTimeStamp() * timeScale, hit.getAmplitude());
- }
- }
- }
+ public void process(EventHeader event) {
+ // Get the list of ECal hits.
+ if (event.hasCollection(RawCalorimeterHit.class, ecalCollectionName)) {
+ List<RawCalorimeterHit> hits = event.get(RawCalorimeterHit.class, ecalCollectionName);
+ //outputStream.println("Reading RawCalorimeterHit from event " + event.getEventNumber());
+ for (RawCalorimeterHit hit : hits) {
+ dec.setID(hit.getCellID());
+ outputStream.printf("%d\t%d\t%d\t%d\n", dec.getValue("ix"), dec.getValue("iy"), hit.getTimeStamp() * timeScale, hit.getAmplitude());
+ }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalRawTrackerHitPrintDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalRawTrackerHitPrintDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/HPSEcalRawTrackerHitPrintDriver.java Wed Mar 9 11:43:24 2016
@@ -22,68 +22,68 @@
*/
public class HPSEcalRawTrackerHitPrintDriver extends Driver {
- Subdetector ecal;
- IDDecoder dec;
- String ecalName = "Ecal";
- String ecalReadoutName = "EcalHits";
- String ecalCollectionName = "EcalRawHits";
- String outputFileName;
- PrintWriter outputStream = null;
- int flags;
+ Subdetector ecal;
+ IDDecoder dec;
+ String ecalName = "Ecal";
+ String ecalReadoutName = "EcalHits";
+ String ecalCollectionName = "EcalRawHits";
+ String outputFileName;
+ PrintWriter outputStream = null;
+ int flags;
- public HPSEcalRawTrackerHitPrintDriver() {
- }
+ public HPSEcalRawTrackerHitPrintDriver() {
+ }
- public void setEcalCollectionName(String ecalCollectionName) {
- this.ecalCollectionName = ecalCollectionName;
- }
+ public void setEcalCollectionName(String ecalCollectionName) {
+ this.ecalCollectionName = ecalCollectionName;
+ }
- public void setEcalName(String ecalName) {
- this.ecalName = ecalName;
- }
+ public void setEcalName(String ecalName) {
+ this.ecalName = ecalName;
+ }
- public void setOutputFileName(String outputFileName) {
- this.outputFileName = outputFileName;
- }
+ public void setOutputFileName(String outputFileName) {
+ this.outputFileName = outputFileName;
+ }
- public void startOfData() {
- if (ecalCollectionName == null) {
- throw new RuntimeException("The parameter ecalCollectionName was not set!");
- }
+ public void startOfData() {
+ if (ecalCollectionName == null) {
+ throw new RuntimeException("The parameter ecalCollectionName was not set!");
+ }
- if (ecalName == null) {
- throw new RuntimeException("The parameter ecalName was not set!");
- }
+ if (ecalName == null) {
+ throw new RuntimeException("The parameter ecalName was not set!");
+ }
- if (outputFileName != null) {
- try {
- outputStream = new PrintWriter(outputFileName);
- } catch (IOException ex) {
- throw new RuntimeException("Invalid outputFilePath!");
- }
- } else {
- outputStream = new PrintWriter(System.out, true);
- }
- }
+ if (outputFileName != null) {
+ try {
+ outputStream = new PrintWriter(outputFileName);
+ } catch (IOException ex) {
+ throw new RuntimeException("Invalid outputFilePath!");
+ }
+ } else {
+ outputStream = new PrintWriter(System.out, true);
+ }
+ }
- public void detectorChanged(Detector detector) {
- // Get the Subdetector.
- ecal = (Subdetector) detector.getSubdetector(ecalName);
- dec = ecal.getIDDecoder();
- }
+ public void detectorChanged(Detector detector) {
+ // Get the Subdetector.
+ ecal = (Subdetector) detector.getSubdetector(ecalName);
+ dec = ecal.getIDDecoder();
+ }
- public void process(EventHeader event) {
- // Get the list of ECal hits.
- if (event.hasCollection(RawTrackerHit.class, ecalCollectionName)) {
- //outputStream.println("Reading RawTrackerHits from event " + event.getEventNumber());
- List<RawTrackerHit> hits = event.get(RawTrackerHit.class, ecalCollectionName);
- for (RawTrackerHit hit : hits) {
- dec.setID(hit.getCellID());
- outputStream.printf("%d\t%d\t%d\t%d\n", dec.getValue("ix"), dec.getValue("iy"), hit.getTime(), hit.getADCValues().length);
- for (int i = 0; i < hit.getADCValues().length; i++) {
- outputStream.printf("%d\n", hit.getADCValues()[i]);
- }
- }
- }
- }
+ public void process(EventHeader event) {
+ // Get the list of ECal hits.
+ if (event.hasCollection(RawTrackerHit.class, ecalCollectionName)) {
+ //outputStream.println("Reading RawTrackerHits from event " + event.getEventNumber());
+ List<RawTrackerHit> hits = event.get(RawTrackerHit.class, ecalCollectionName);
+ for (RawTrackerHit hit : hits) {
+ dec.setID(hit.getCellID());
+ outputStream.printf("%d\t%d\t%d\t%d\n", dec.getValue("ix"), dec.getValue("iy"), hit.getTime(), hit.getADCValues().length);
+ for (int i = 0; i < hit.getADCValues().length; i++) {
+ outputStream.printf("%d\n", hit.getADCValues()[i]);
+ }
+ }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/meeg/HPSGenericRawTrackerHitPrintDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/meeg/HPSGenericRawTrackerHitPrintDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/HPSGenericRawTrackerHitPrintDriver.java Wed Mar 9 11:43:24 2016
@@ -20,42 +20,42 @@
*/
public class HPSGenericRawTrackerHitPrintDriver extends Driver {
- String outputFileName;
- PrintWriter outputStream = null;
+ String outputFileName;
+ PrintWriter outputStream = null;
- public HPSGenericRawTrackerHitPrintDriver() {
- }
+ public HPSGenericRawTrackerHitPrintDriver() {
+ }
- public void setOutputFileName(String outputFileName) {
- this.outputFileName = outputFileName;
- }
+ public void setOutputFileName(String outputFileName) {
+ this.outputFileName = outputFileName;
+ }
- public void startOfData() {
- if (outputFileName != null) {
- try {
- outputStream = new PrintWriter(outputFileName);
- } catch (IOException ex) {
- throw new RuntimeException("Invalid outputFilePath!");
- }
- } else {
- outputStream = new PrintWriter(System.out, true);
- }
- }
+ public void startOfData() {
+ if (outputFileName != null) {
+ try {
+ outputStream = new PrintWriter(outputFileName);
+ } catch (IOException ex) {
+ throw new RuntimeException("Invalid outputFilePath!");
+ }
+ } else {
+ outputStream = new PrintWriter(System.out, true);
+ }
+ }
- public void process(EventHeader event) {
- // Get the list of ECal hits.
- if (event.hasCollection(RawTrackerHit.class)) {
- //outputStream.println("Reading RawTrackerHits from event " + event.getEventNumber());
- List<List<RawTrackerHit>> listOfLists = event.get(RawTrackerHit.class);
- for (List<RawTrackerHit> hits : listOfLists) {
- outputStream.printf("List with %d RawTrackerHits:\n", hits.size());
- for (RawTrackerHit hit : hits) {
- outputStream.printf("%d\t%d\n", hit.getCellID(), hit.getADCValues().length);
- for (int i = 0; i < hit.getADCValues().length; i++) {
- outputStream.printf("%d\n", hit.getADCValues()[i]);
- }
- }
- }
- }
- }
+ public void process(EventHeader event) {
+ // Get the list of ECal hits.
+ if (event.hasCollection(RawTrackerHit.class)) {
+ //outputStream.println("Reading RawTrackerHits from event " + event.getEventNumber());
+ List<List<RawTrackerHit>> listOfLists = event.get(RawTrackerHit.class);
+ for (List<RawTrackerHit> hits : listOfLists) {
+ outputStream.printf("List with %d RawTrackerHits:\n", hits.size());
+ for (RawTrackerHit hit : hits) {
+ outputStream.printf("%d\t%d\n", hit.getCellID(), hit.getADCValues().length);
+ for (int i = 0; i < hit.getADCValues().length; i++) {
+ outputStream.printf("%d\n", hit.getADCValues()[i]);
+ }
+ }
+ }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/meeg/LCIOTrackAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/meeg/LCIOTrackAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/LCIOTrackAnalysis.java Wed Mar 9 11:43:24 2016
@@ -24,7 +24,7 @@
* @author Sho Uemura <[log in to unmask]>
*/
// TODO: This is an exact duplicate of the class in the analysis.example package.
-// One of them should be sandboxed
+// One of them should be sandboxed
public class LCIOTrackAnalysis {
protected Track track;
Modified: java/trunk/users/src/main/java/org/hps/users/mgraham/HPSTrackerHit.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mgraham/HPSTrackerHit.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/mgraham/HPSTrackerHit.java Wed Mar 9 11:43:24 2016
@@ -16,23 +16,23 @@
double t0;
double amp;
public HPSTrackerHit(
- long id,
- int time,
- short[] adcValues, double t0, double Amp) {
- this.cellId = id;
- this.packedID = new Identifier(id);
- this.time = time;
- this.adcValues = adcValues;
+ long id,
+ int time,
+ short[] adcValues, double t0, double Amp) {
+ this.cellId = id;
+ this.packedID = new Identifier(id);
+ this.time = time;
+ this.adcValues = adcValues;
this.t0=t0;
this.amp=Amp;
}
public HPSTrackerHit(
- RawTrackerHit rth, double t0, double Amp) {
- this.cellId = rth.getCellID();
- this.packedID = new Identifier(rth.getCellID());
- this.time = rth.getTime();
- this.adcValues = rth.getADCValues();
+ RawTrackerHit rth, double t0, double Amp) {
+ this.cellId = rth.getCellID();
+ this.packedID = new Identifier(rth.getCellID());
+ this.time = rth.getTime();
+ this.adcValues = rth.getADCValues();
this.t0=t0;
this.amp=Amp;
}
Modified: java/trunk/users/src/main/java/org/hps/users/mgraham/SVTRawTrackerHitThresholdDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/mgraham/SVTRawTrackerHitThresholdDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/mgraham/SVTRawTrackerHitThresholdDriver.java Wed Mar 9 11:43:24 2016
@@ -15,7 +15,7 @@
* @author Matt Graham
*/
// TODO: Check that this Driver works as expected after it was updated to use
-// the database conditions system.
+// the database conditions system.
public class SVTRawTrackerHitThresholdDriver extends Driver {
private String rawTrackerHitCollectionName = "RawTrackerHitMaker_RawTrackerHits";
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/EcalScoringPlaneDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/EcalScoringPlaneDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/EcalScoringPlaneDriver.java Wed Mar 9 11:43:24 2016
@@ -23,136 +23,136 @@
*/
public class EcalScoringPlaneDriver extends Driver {
- boolean verbose = false;
-
- // Collection Names
- String ecalScoringPlaneHitsCollectionName = "TrackerHitsECal";
- String tracksCollectionName = "MatchedTracks";
- String trackToScoringPlaneHitRelationsName = "TrackToEcalScoringPlaneHitRelations";
- String trackToMCParticleRelationsName = "TrackToMCParticleRelations";
-
- /**
- * Enable/disable verbose mode
- *
- * @param verbose : set true to enable, false otherwise
- */
- public void setVerbose(boolean verbose){
- this.verbose = verbose;
- }
-
- @Override
- protected void process(EventHeader event){
-
- // If the event doesn't have a collection of Tracks, skip it
- if(!event.hasCollection(Track.class, tracksCollectionName)) return;
-
- // If the event doesn't have a collection of Ecal scoring plane hits,
- // skip it
- if(!event.hasCollection(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName)) return;
-
- // Get the collection of tracks from the event
- List<Track> tracks = event.get(Track.class, tracksCollectionName);
-
- // Get the collection of Ecal scoring plane hits from the event
- List<SimTrackerHit> scoringPlaneHits = event.get(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName);
-
- // Create a collection to hold the scoring plane hits that were found to match
- // a track
- List<SimTrackerHit> matchedScoringPlaneHits = new ArrayList<SimTrackerHit>();
-
- // Create a collection of LCRelations between a track and the scoring plane hit
- List<LCRelation> trackToScoringPlaneHitRelations = new ArrayList<LCRelation>();
-
- // Create a collection of LCRelations between a track and its corresponding MC particle
- List<LCRelation> trackToMCParticleRelations = new ArrayList<LCRelation>();
-
- MCParticle particle = null;
- for(Track track : tracks){
-
- // Get the MC particle associated with this track
- particle = this.getMCParticleAssociatedWithTrack(track);
- // If the MC particle is null, then the hits associated with the
- // track did not have an MC particle associated with them
- // TODO: Find out why some hits don't have any MC particles associated with them
- if(particle == null) continue;
-
- // Add an LCRelation between the track and the corresponding MC particle
- trackToMCParticleRelations.add(new BaseLCRelation(track, particle));
-
- // Loop over all of the scoring plane hits and check if the associated MC particle
- // matches the one from the track
- for(SimTrackerHit scoringPlaneHit : scoringPlaneHits){
-
- // If the MC particles don't match, move on to the next particle
- if(!(scoringPlaneHit.getMCParticle() == particle)) continue;
-
- this.printVerbose("Found a match between a track and a scoring plane hit.");
-
- // If a match is found, add the scoring plane hit to the list of matched hits and
- // an LCRelation between the track and the scoring plane.
- matchedScoringPlaneHits.add(scoringPlaneHit);
- trackToScoringPlaneHitRelations.add(new BaseLCRelation(track, scoringPlaneHit));
-
- // Once a match is found, there is no need to loop through the rest of the list
- break;
- }
- }
-
- // Store all of the collections in the event
- event.put(ecalScoringPlaneHitsCollectionName, matchedScoringPlaneHits, SimTrackerHit.class, 0);
- event.put(trackToScoringPlaneHitRelationsName, trackToScoringPlaneHitRelations, LCRelation.class, 0);
- event.put(trackToMCParticleRelationsName, trackToMCParticleRelations, LCRelation.class, 0);
- }
-
- /**
- * Print a message if verbose has been enabled.
- *
- * @param message : message to print.
- */
- private void printVerbose(String message){
- if(verbose)
- System.out.println(this.getClass().getSimpleName() + ": " + message);
- }
-
- /**
- * Get the MC particle associated with a track.
- *
- * @param track : Track to get the MC particle for
- * @return The MC particle associated with the track
- */
- private MCParticle getMCParticleAssociatedWithTrack(Track track){
-
- Map <MCParticle, int[]>mcParticleMultiplicity = new HashMap<MCParticle, int[]>();
- MCParticle particle;
- for(TrackerHit hit : track.getTrackerHits()){
-
- // If one of the tracker hits doesn't have any MC particles associated
- // with it, return null for now.
- if(((HelicalTrackHit) hit).getMCParticles().size() == 0){
- this.printVerbose("HelicalTrackHit is not associated with any MC particles.");
- return null;
- }
-
- particle = ((HelicalTrackHit) hit).getMCParticles().get(0);
- if(!mcParticleMultiplicity.containsKey(particle)){
- mcParticleMultiplicity.put(particle, new int[1]);
- mcParticleMultiplicity.get(particle)[0] = 0;
- }
-
- mcParticleMultiplicity.get(particle)[0]++;
-
- }
-
- // Look for the MC particle that occurs the most of the track
- int maxValue = 0;
- particle = null;
- for(Map.Entry<MCParticle, int[]> entry : mcParticleMultiplicity.entrySet()){
- if(maxValue < entry.getValue()[0]){
- particle = entry.getKey();
- maxValue = entry.getValue()[0];
- }
- }
-
- return particle;
- }
+ boolean verbose = false;
+
+ // Collection Names
+ String ecalScoringPlaneHitsCollectionName = "TrackerHitsECal";
+ String tracksCollectionName = "MatchedTracks";
+ String trackToScoringPlaneHitRelationsName = "TrackToEcalScoringPlaneHitRelations";
+ String trackToMCParticleRelationsName = "TrackToMCParticleRelations";
+
+ /**
+ * Enable/disable verbose mode
+ *
+ * @param verbose : set true to enable, false otherwise
+ */
+ public void setVerbose(boolean verbose){
+ this.verbose = verbose;
+ }
+
+ @Override
+ protected void process(EventHeader event){
+
+ // If the event doesn't have a collection of Tracks, skip it
+ if(!event.hasCollection(Track.class, tracksCollectionName)) return;
+
+ // If the event doesn't have a collection of Ecal scoring plane hits,
+ // skip it
+ if(!event.hasCollection(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName)) return;
+
+ // Get the collection of tracks from the event
+ List<Track> tracks = event.get(Track.class, tracksCollectionName);
+
+ // Get the collection of Ecal scoring plane hits from the event
+ List<SimTrackerHit> scoringPlaneHits = event.get(SimTrackerHit.class, ecalScoringPlaneHitsCollectionName);
+
+ // Create a collection to hold the scoring plane hits that were found to match
+ // a track
+ List<SimTrackerHit> matchedScoringPlaneHits = new ArrayList<SimTrackerHit>();
+
+ // Create a collection of LCRelations between a track and the scoring plane hit
+ List<LCRelation> trackToScoringPlaneHitRelations = new ArrayList<LCRelation>();
+
+ // Create a collection of LCRelations between a track and its corresponding MC particle
+ List<LCRelation> trackToMCParticleRelations = new ArrayList<LCRelation>();
+
+ MCParticle particle = null;
+ for(Track track : tracks){
+
+ // Get the MC particle associated with this track
+ particle = this.getMCParticleAssociatedWithTrack(track);
+ // If the MC particle is null, then the hits associated with the
+ // track did not have an MC particle associated with them
+ // TODO: Find out why some hits don't have any MC particles associated with them
+ if(particle == null) continue;
+
+ // Add an LCRelation between the track and the corresponding MC particle
+ trackToMCParticleRelations.add(new BaseLCRelation(track, particle));
+
+ // Loop over all of the scoring plane hits and check if the associated MC particle
+ // matches the one from the track
+ for(SimTrackerHit scoringPlaneHit : scoringPlaneHits){
+
+ // If the MC particles don't match, move on to the next particle
+ if(!(scoringPlaneHit.getMCParticle() == particle)) continue;
+
+ this.printVerbose("Found a match between a track and a scoring plane hit.");
+
+ // If a match is found, add the scoring plane hit to the list of matched hits and
+ // an LCRelation between the track and the scoring plane.
+ matchedScoringPlaneHits.add(scoringPlaneHit);
+ trackToScoringPlaneHitRelations.add(new BaseLCRelation(track, scoringPlaneHit));
+
+ // Once a match is found, there is no need to loop through the rest of the list
+ break;
+ }
+ }
+
+ // Store all of the collections in the event
+ event.put(ecalScoringPlaneHitsCollectionName, matchedScoringPlaneHits, SimTrackerHit.class, 0);
+ event.put(trackToScoringPlaneHitRelationsName, trackToScoringPlaneHitRelations, LCRelation.class, 0);
+ event.put(trackToMCParticleRelationsName, trackToMCParticleRelations, LCRelation.class, 0);
+ }
+
+ /**
+ * Print a message if verbose has been enabled.
+ *
+ * @param message : message to print.
+ */
+ private void printVerbose(String message){
+ if(verbose)
+ System.out.println(this.getClass().getSimpleName() + ": " + message);
+ }
+
+ /**
+ * Get the MC particle associated with a track.
+ *
+ * @param track : Track to get the MC particle for
+ * @return The MC particle associated with the track
+ */
+ private MCParticle getMCParticleAssociatedWithTrack(Track track){
+
+ Map <MCParticle, int[]>mcParticleMultiplicity = new HashMap<MCParticle, int[]>();
+ MCParticle particle;
+ for(TrackerHit hit : track.getTrackerHits()){
+
+ // If one of the tracker hits doesn't have any MC particles associated
+ // with it, return null for now.
+ if(((HelicalTrackHit) hit).getMCParticles().size() == 0){
+ this.printVerbose("HelicalTrackHit is not associated with any MC particles.");
+ return null;
+ }
+
+ particle = ((HelicalTrackHit) hit).getMCParticles().get(0);
+ if(!mcParticleMultiplicity.containsKey(particle)){
+ mcParticleMultiplicity.put(particle, new int[1]);
+ mcParticleMultiplicity.get(particle)[0] = 0;
+ }
+
+ mcParticleMultiplicity.get(particle)[0]++;
+
+ }
+
+ // Look for the MC particle that occurs the most of the track
+ int maxValue = 0;
+ particle = null;
+ for(Map.Entry<MCParticle, int[]> entry : mcParticleMultiplicity.entrySet()){
+ if(maxValue < entry.getValue()[0]){
+ particle = entry.getKey();
+ maxValue = entry.getValue()[0];
+ }
+ }
+
+ return particle;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/ExtrapolationAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/ExtrapolationAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/ExtrapolationAnalysis.java Wed Mar 9 11:43:24 2016
@@ -30,312 +30,312 @@
*/
public class ExtrapolationAnalysis extends Driver {
- AIDA aida = null;
- List<IPlotter> plotters;
-
- Hep3Vector bField = null;
-
- boolean verbose = false;
-
- // Collection Names
- String matchedEcalScoringPlaneHitsCollectionName = "MatchedTrackerHitsEcal";
- String trackToScoringPlaneHitRelationsName = "TrackToEcalScoringPlaneHitRelations";
- String trackToMCParticleRelationsName = "TrackToMCParticleRelations";
-
- /**
- * Enable/disable verbose mode
- *
- * @param verbose : true to enable, false otherwise
- */
- public void setVerbose(boolean verbose){
- this.verbose = verbose;
- }
-
- public void detectorChanged(Detector detector){
-
- // Get the magnetic field from the geometry
- bField = detector.getFieldMap().getField(new BasicHep3Vector(0,0,0));
-
- //-----------------------//
- //--- Setup all plots ---//
- //-----------------------//
-
- // Setup AIDA
- aida = AIDA.defaultInstance();
- aida.tree().cd("/");
-
- // Instantiate a list to hold the collection of plotters
- plotters = new ArrayList<IPlotter>();
- IPlotter plotter = null;
-
- //--- Plots of scoring plane positions ---//
- //----------------------------------------//
- plotter = PlotUtils.setupPlotter("Positions of Scoring plane hits matched to tracks", 2, 2);
- PlotUtils.setup1DRegion(plotter, "Scoring plane hit position - x", 0, "x (mm)",
- aida.histogram1D("Scoring plane hit position - x", 100, -400, 400));
- PlotUtils.setup1DRegion(plotter, "Scoring plane hit position - y", 1, "y (mm)",
- aida.histogram1D("Scoring plane hit position - y", 100, -200, 200));
- PlotUtils.setup1DRegion(plotter, "Scoring plane hit position - z", 2, "z (mm)",
- aida.histogram1D("Scoring plane hit position - z", 100, 1000, 1500));
- PlotUtils.setup2DRegion(plotter, "Scoring plane hit position - x-y", 3, "x (mm)", "y (mm)",
- aida.histogram2D("Scoring plane hit position - x-y", 100, -400, 400, 100, -200, 200));
- plotters.add(plotter);
-
- //--- Plots of residuals at scoring plane ---//
- //-------------------------------------------//
- plotter = PlotUtils.setupPlotter("Residuals at scoring plane", 3, 3);
- PlotUtils.setup1DRegion(plotter, "Top tracks - Bend plane residuals at scoring plane", 0, "x_{ep} - x_{sp} (mm)",
- aida.histogram1D("Top electron tracks - Bend plane residual at scoring plane", 60, -30, 30));
- PlotUtils.setup1DRegion(plotter, "Top tracks - Bend plane residuals at scoring plane", 0, "x_{ep} - x_{sp} (mm)",
- aida.histogram1D("Top positron tracks - Bend plane residual at scoring plane", 60, -30, 30));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - Bend plane residuals at scoring plane", 1, "x_{ep} - x_{sp} (mm)",
- aida.histogram1D("Bottom electron tracks - Bend plane residuals at scoring plane", 60, -30, 30));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - Bend plane residuals at scoring plane", 1, "x_{ep} - x_{sp} (mm)",
- aida.histogram1D("Bottom positron tracks - Bend plane residuals at scoring plane", 60, -30, 30));
- PlotUtils.setup1DRegion(plotter, "Bend plane residuals at scoring plane", 2, "x_{ep} - x_{sp} (mm)",
- aida.histogram1D("Bend plane residuals at scoring plane", 60, -30, 30));
- PlotUtils.setup1DRegion(plotter, "Bend plane residuals at scoring plane", 2, "x_{ep} - x_{sp} (mm)",
- aida.histogram1D("Bend plane residuals at scoring plane", 60, -30, 30));
- PlotUtils.setup1DRegion(plotter, "Top tracks - Non-bend plane residuals at scoring plane", 3,"y_{ep} - y_{sp} (mm)",
- aida.histogram1D("Top electron tracks - Non-bend plane residuals at scoring plane", 30, -15, 15));
- PlotUtils.setup1DRegion(plotter, "Top tracks - Non-bend plane residuals at scoring plane", 3,"y_{ep} - y_{sp} (mm)",
- aida.histogram1D("Top positron tracks - Non-bend plane residuals at scoring plane", 30, -15, 15));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - Non-bend plane residuals at scoring plane", 4,"y_{ep} - y_{sp} (mm)",
- aida.histogram1D("Bottom electron tracks - Non-bend plane residuals at scoring plane", 30, -15, 15));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - Non-bend plane residuals at scoring plane", 4,"y_{ep} - y_{sp} (mm)",
- aida.histogram1D("Bottom positron tracks - Non-bend plane residuals at scoring plane", 30, -15, 15));
- PlotUtils.setup1DRegion(plotter, "Non-bend plane residuals at scoring plane", 5,"y_{ep} - y_{sp} (mm)",
- aida.histogram1D("Non-bend plane residuals at scoring plane", 30, -15, 15));
- PlotUtils.setup1DRegion(plotter, "Top tracks - z residuals at scoring plane", 6, "z_{ep} - z_{sp} (mm)",
- aida.histogram1D("Top electron tracks - z residuals at scoring plane", 10, -5, 5));
- PlotUtils.setup1DRegion(plotter, "Top tracks - z residuals at scoring plane", 6, "z_{ep} - z_{sp} (mm)",
- aida.histogram1D("Top positron tracks - z residuals at scoring plane", 10, -5, 5));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - z residuals at scoring plane", 7, "z_{ep} - z_{sp} (mm)",
- aida.histogram1D("Bottom electron tracks - z residuals at scoring plane", 10, -5, 5));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - z residuals at scoring plane", 7, "z_{ep} - z_{sp} (mm)",
- aida.histogram1D("Bottom positron tracks - z residuals at scoring plane", 10, -5, 5));
- PlotUtils.setup1DRegion(plotter, "z residuals at scoring plane", 7, "z_{ep} - z_{sp} (mm)",
- aida.histogram1D("z residuals at scoring plane", 10, -5, 5));
- plotters.add(plotter);
-
- //--- Plots of residuals at target ---//
- //------------------------------------//
- plotter = PlotUtils.setupPlotter("Residuals at target", 3, 3);
- PlotUtils.setup1DRegion(plotter, "Top tracks - Bend plane residuals at target", 0, "x_{ep} - x_{t} (mm)",
- aida.histogram1D("Top electron tracks - Bend plane residual at target", 40, -4, 4));
- PlotUtils.setup1DRegion(plotter, "Top tracks - Bend plane residuals at target", 0, "x_{ep} - x_{t} (mm)",
- aida.histogram1D("Top positron tracks - Bend plane residual at target", 40, -4, 4));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - Bend plane residuals at target", 1, "x_{ep} - x_{t} (mm)",
- aida.histogram1D("Bottom electron tracks - Bend plane residuals at target", 40, -4, 4));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - Bend plane residuals at target", 1, "x_{ep} - x_{t} (mm)",
- aida.histogram1D("Bottom positron tracks - Bend plane residuals at target", 40, -4, 4));
- PlotUtils.setup1DRegion(plotter, "Bend plane residuals at target", 2, "x_{ep} - x_{t} (mm)",
- aida.histogram1D("Bend plane residuals at target", 40, -4, 4));
- PlotUtils.setup1DRegion(plotter, "Top tracks - Non-bend plane residuals at target", 3, "y_{ep} - y_{t} (mm)",
- aida.histogram1D("Top electron tracks - Non-bend plane residuals at target", 20, -2, 2));
- PlotUtils.setup1DRegion(plotter, "Top tracks - Non-bend plane residuals at target", 3, "y_{ep} - y_{t} (mm)",
- aida.histogram1D("Top positron tracks - Non-bend plane residuals at target", 20, -2, 2));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - Non-bend plane residuals at target", 4, "y_{ep} - y_{t} (mm)",
- aida.histogram1D("Bottom electron tracks - Non-bend plane residuals at target", 20, -2, 2));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - Non-bend plane residuals at target", 4, "y_{ep} - y_{t} (mm)",
- aida.histogram1D("Bottom positron tracks - Non-bend plane residuals at target", 20, -2, 2));
- PlotUtils.setup1DRegion(plotter, "Non-bend plane residuals at target", 5, "y_{ep} - y_{t} (mm)",
- aida.histogram1D("Non-bend plane residuals at target", 20, -2, 2));
- PlotUtils.setup1DRegion(plotter, "Top tracks - z residuals at target", 6, "z_{ep} - z_{t} (mm)",
- aida.histogram1D("Top electron tracks - z residuals at target", 50, -5, 5));
- PlotUtils.setup1DRegion(plotter, "Top tracks - z residuals at target", 6, "z_{ep} - z_{t} (mm)",
- aida.histogram1D("Top positron tracks - z residuals at target", 50, -5, 5));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - z residuals at target", 7, "z_{ep} - z_{t} (mm)",
- aida.histogram1D("Bottom electron tracks - z residuals at target", 50, -5, 5));
- PlotUtils.setup1DRegion(plotter, "Bottom tracks - z residuals at target", 7, "z_{ep} - z_{t} (mm)",
- aida.histogram1D("Bottom positron tracks - z residuals at target", 50, -5, 5));
- PlotUtils.setup1DRegion(plotter, "z residuals at target", 8, "z_{ep} - z_{t} (mm)",
- aida.histogram1D("z residuals at target", 50, -5, 5));
- plotters.add(plotter);
-
- //--- Plot of residuals at scoring plane vs momentum ---//
- //------------------------------------------------------//
- plotter = PlotUtils.setupPlotter("Residuals vs Momentum", 2, 2);
- PlotUtils.setup2DRegion(plotter, "Bend plane residuals vs momentum at scoring plane", 0,
- "Momentum (GeV)", "x_{ep} - x_{sp} (mm)",
- aida.histogram2D("Bend plane residuals vs momentum at scoring plane", 5, 0, 2.5, 60, -30, 30));
- PlotUtils.setup2DRegion(plotter, "Non-bend plane residuals vs momentum at scoring plane", 1,
- "Momentum (GeV)", "y_{ep} - y_{sp} (mm)",
- aida.histogram2D("Non-bend plane residuals vs momentum at scoring plane", 5, 0, 2.5, 60, -30, 30));
- PlotUtils.setup2DRegion(plotter, "Bend plane residuals vs momentum at target", 2,
- "Momentum (GeV)", "x_{ep} - x_{t} (mm)",
- aida.histogram2D("Bend plane residuals vs momentum at target", 5, 0, 2.5, 60, -3, 3));
- PlotUtils.setup2DRegion(plotter, "Non-bend plane residuals vs momentum at target", 3,
- "Momentum (GeV)", "y_{ep} - y_{t} (mm)",
- aida.histogram2D("Non-bend plane residuals vs momentum at target", 5, 0, 2.5, 50, -2.5, 2.5));
- plotters.add(plotter);
-
- for(IPlotter iPlotter : plotters){
- iPlotter.show();
- }
-
- }
-
- public void process(EventHeader event){
-
- // If the event doesn't contain an LCRelation between a track and its
- // corresponding ECal scoring plane hit, skip the event.
- if(!event.hasCollection(LCRelation.class, trackToScoringPlaneHitRelationsName)) return;
-
- List<LCRelation> trackToScoringPlaneHitRelations = event.get(LCRelation.class, trackToScoringPlaneHitRelationsName);
-
- for(LCRelation trackToScoringPlaneHitRelation : trackToScoringPlaneHitRelations){
-
- // Get the track
- Track track = (Track) trackToScoringPlaneHitRelation.getFrom();
-
- // Get the track momentum
- double[] momentum = BaseTrackState.computeMomentum(track.getTrackStates().get(0), bField.y());
- double p = Math.sqrt(momentum[0]*momentum[0] + momentum[1]*momentum[1] + momentum[2]*momentum[2]);
- this.printVerbose("Track momentum: " + p);
-
- // Get the corresponding scoring plane hit
- SimTrackerHit scoringPlaneHit = (SimTrackerHit) trackToScoringPlaneHitRelation.getTo();
- Hep3Vector scoringPlaneHitPosition = scoringPlaneHit.getPositionVec();
- this.printVerbose("Scoring plane hit position: " + scoringPlaneHitPosition.toString());
-
- // Fill the scoring plane position histograms
- aida.histogram1D("Scoring plane hit position - x").fill(scoringPlaneHitPosition.x());
- aida.histogram1D("Scoring plane hit position - y").fill(scoringPlaneHitPosition.y());
- aida.histogram1D("Scoring plane hit position - z").fill(scoringPlaneHitPosition.z());
- aida.histogram2D("Scoring plane hit position - x-y").fill(scoringPlaneHitPosition.x(), scoringPlaneHitPosition.y());
-
- // Extrapolate the track to the scoring plane position
- Hep3Vector trackPositionAtScoringPlane = TrackUtils.extrapolateTrack(track, scoringPlaneHitPosition.z());
- this.printVerbose("Extrapolated track position: " + trackPositionAtScoringPlane.toString());
-
- // Find the residual between the extrapolated track position and the scoring plane hit position
- double deltaX = trackPositionAtScoringPlane.x() - scoringPlaneHitPosition.x();
- double deltaY = trackPositionAtScoringPlane.y() - scoringPlaneHitPosition.y();
- // This should be 0 but it serves as a sanity check.
- double deltaZ = trackPositionAtScoringPlane.z() - scoringPlaneHitPosition.z();
-
- if(track.getTrackerHits().get(0).getPosition()[2] > 0){
- if(track.getTrackStates().get(0).getOmega() > 0){
- aida.histogram1D("Top positron tracks - Bend plane residual at scoring plane").fill(deltaX);
- aida.histogram1D("Top positron tracks - Non-bend plane residuals at scoring plane").fill(deltaY);
- aida.histogram1D("Top positron tracks - z residuals at scoring plane").fill(deltaZ);
- } else {
- aida.histogram1D("Top electron tracks - Bend plane residual at scoring plane").fill(deltaX);
- aida.histogram1D("Top electron tracks - Non-bend plane residuals at scoring plane").fill(deltaY);
- aida.histogram1D("Top electron tracks - z residuals at scoring plane").fill(deltaZ);
- }
- } else {
- if(track.getTrackStates().get(0).getOmega() > 0){
- aida.histogram1D("Bottom positron tracks - Bend plane residuals at scoring plane").fill(deltaX);
- aida.histogram1D("Bottom positron tracks - Non-bend plane residuals at scoring plane").fill(deltaY);
- aida.histogram1D("Bottom positron tracks - z residuals at scoring plane").fill(deltaZ);
- } else {
- aida.histogram1D("Bottom electron tracks - Bend plane residuals at scoring plane").fill(deltaX);
- aida.histogram1D("Bottom electron tracks - Non-bend plane residuals at scoring plane").fill(deltaY);
- aida.histogram1D("Bottom electron tracks - z residuals at scoring plane").fill(deltaZ);
- }
- }
-
- aida.histogram1D("Bend plane residuals at scoring plane").fill(deltaX);
- aida.histogram1D("Non-bend plane residuals at scoring plane").fill(deltaY);
- aida.histogram1D("z residuals at target").fill(deltaZ);
- aida.histogram2D("Bend plane residuals vs momentum at scoring plane").fill(p, deltaX);
- aida.histogram2D("Non-bend plane residuals vs momentum at scoring plane").fill(p, deltaY);
- }
-
- if(!event.hasCollection(LCRelation.class, trackToMCParticleRelationsName)) return;
-
- List<LCRelation> trackToMCParticleRelations = event.get(LCRelation.class, trackToMCParticleRelationsName);
-
- for(LCRelation trackToMCParticleRelation : trackToMCParticleRelations){
-
- // Get the track
- Track track = (Track) trackToMCParticleRelation.getFrom();
-
- // Get the track momentum
- double[] momentum = BaseTrackState.computeMomentum(track.getTrackStates().get(0), bField.y());
- double p = Math.sqrt(momentum[0]*momentum[0] + momentum[1]*momentum[1] + momentum[2]*momentum[2]);
- this.printVerbose("Track momentum: " + p);
-
- // Get the corresponding MC particle
- MCParticle particle = (MCParticle) trackToMCParticleRelation.getTo();
-
- // Extrapolate the track to the origin
- Hep3Vector trackPositionAtOrigin = TrackUtils.extrapolateTrack(track, particle.getOriginZ());
-
- // Find the residual between the extrapolated track and the position of the scoring plane at the origin
- double deltaX = trackPositionAtOrigin.x() - particle.getOriginX();
- double deltaY = trackPositionAtOrigin.y() - particle.getOriginY();
- double deltaZ = trackPositionAtOrigin.z() - particle.getOriginZ();
-
- if(track.getTrackerHits().get(0).getPosition()[2] > 0){
- if(track.getTrackStates().get(0).getOmega() > 0){
- aida.histogram1D("Top positron tracks - Bend plane residual at target").fill(deltaX);
- aida.histogram1D("Top positron tracks - Non-bend plane residuals at target").fill(deltaY);
- aida.histogram1D("Top positron tracks - z residuals at target").fill(deltaZ);
- } else {
- aida.histogram1D("Top electron tracks - Bend plane residual at target").fill(deltaX);
- aida.histogram1D("Top electron tracks - Non-bend plane residuals at target").fill(deltaY);
- aida.histogram1D("Top electron tracks - z residuals at target").fill(deltaZ);
- }
- } else {
-
- if(track.getTrackStates().get(0).getOmega() > 0){
- aida.histogram1D("Bottom positron tracks - Bend plane residuals at target").fill(deltaX);
- aida.histogram1D("Bottom positron tracks - Non-bend plane residuals at target").fill(deltaY);
- aida.histogram1D("Bottom positron tracks - z residuals at target").fill(deltaZ);
- } else {
- aida.histogram1D("Bottom electron tracks - Bend plane residuals at target").fill(deltaX);
- aida.histogram1D("Bottom electron tracks - Non-bend plane residuals at target").fill(deltaY);
- aida.histogram1D("Bottom electron tracks - z residuals at target").fill(deltaZ);
- }
- }
-
- aida.histogram1D("Bend plane residuals at target").fill(deltaX);
- aida.histogram1D("Non-bend plane residuals at target").fill(deltaY);
- aida.histogram1D("z residuals at target").fill(deltaZ);
- aida.histogram2D("Bend plane residuals vs momentum at target").fill(p, deltaX);
- aida.histogram2D("Non-bend plane residuals vs momentum at target").fill(p, deltaY);
- }
- }
-
- @Override
- protected void endOfData(){
-
- IHistogram2D histogram = aida.histogram2D("Bend plane residuals vs momentum at scoring plane");
- int binsX = histogram.xAxis().bins();
- for(int binX = 0; binX < binsX; binX++){
- PlotUtils.getYProjection(binX, histogram);
- }
-
- histogram = aida.histogram2D("Non-bend plane residuals vs momentum at scoring plane");
- binsX = histogram.xAxis().bins();
- for(int binX = 0; binX < binsX; binX++){
- PlotUtils.getYProjection(binX, histogram);
- }
-
- histogram = aida.histogram2D("Bend plane residuals vs momentum at target");
- binsX = histogram.xAxis().bins();
- for(int binX = 0; binX < binsX; binX++){
- PlotUtils.getYProjection(binX, histogram);
- }
-
- histogram = aida.histogram2D("Non-bend plane residuals vs momentum at target");
- binsX = histogram.xAxis().bins();
- for(int binX = 0; binX < binsX; binX++){
- PlotUtils.getYProjection(binX, histogram);
- }
- }
-
- /**
- * Print a message if verbose has been enabled.
- *
- * @param message : message to print.
- */
- private void printVerbose(String message){
- if(verbose)
- System.out.println(this.getClass().getSimpleName() + ": " + message);
- }
-
+ AIDA aida = null;
+ List<IPlotter> plotters;
+
+ Hep3Vector bField = null;
+
+ boolean verbose = false;
+
+ // Collection Names
+ String matchedEcalScoringPlaneHitsCollectionName = "MatchedTrackerHitsEcal";
+ String trackToScoringPlaneHitRelationsName = "TrackToEcalScoringPlaneHitRelations";
+ String trackToMCParticleRelationsName = "TrackToMCParticleRelations";
+
+ /**
+ * Enable/disable verbose mode
+ *
+ * @param verbose : true to enable, false otherwise
+ */
+ public void setVerbose(boolean verbose){
+ this.verbose = verbose;
+ }
+
+ public void detectorChanged(Detector detector){
+
+ // Get the magnetic field from the geometry
+ bField = detector.getFieldMap().getField(new BasicHep3Vector(0,0,0));
+
+ //-----------------------//
+ //--- Setup all plots ---//
+ //-----------------------//
+
+ // Setup AIDA
+ aida = AIDA.defaultInstance();
+ aida.tree().cd("/");
+
+ // Instantiate a list to hold the collection of plotters
+ plotters = new ArrayList<IPlotter>();
+ IPlotter plotter = null;
+
+ //--- Plots of scoring plane positions ---//
+ //----------------------------------------//
+ plotter = PlotUtils.setupPlotter("Positions of Scoring plane hits matched to tracks", 2, 2);
+ PlotUtils.setup1DRegion(plotter, "Scoring plane hit position - x", 0, "x (mm)",
+ aida.histogram1D("Scoring plane hit position - x", 100, -400, 400));
+ PlotUtils.setup1DRegion(plotter, "Scoring plane hit position - y", 1, "y (mm)",
+ aida.histogram1D("Scoring plane hit position - y", 100, -200, 200));
+ PlotUtils.setup1DRegion(plotter, "Scoring plane hit position - z", 2, "z (mm)",
+ aida.histogram1D("Scoring plane hit position - z", 100, 1000, 1500));
+ PlotUtils.setup2DRegion(plotter, "Scoring plane hit position - x-y", 3, "x (mm)", "y (mm)",
+ aida.histogram2D("Scoring plane hit position - x-y", 100, -400, 400, 100, -200, 200));
+ plotters.add(plotter);
+
+ //--- Plots of residuals at scoring plane ---//
+ //-------------------------------------------//
+ plotter = PlotUtils.setupPlotter("Residuals at scoring plane", 3, 3);
+ PlotUtils.setup1DRegion(plotter, "Top tracks - Bend plane residuals at scoring plane", 0, "x_{ep} - x_{sp} (mm)",
+ aida.histogram1D("Top electron tracks - Bend plane residual at scoring plane", 60, -30, 30));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - Bend plane residuals at scoring plane", 0, "x_{ep} - x_{sp} (mm)",
+ aida.histogram1D("Top positron tracks - Bend plane residual at scoring plane", 60, -30, 30));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - Bend plane residuals at scoring plane", 1, "x_{ep} - x_{sp} (mm)",
+ aida.histogram1D("Bottom electron tracks - Bend plane residuals at scoring plane", 60, -30, 30));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - Bend plane residuals at scoring plane", 1, "x_{ep} - x_{sp} (mm)",
+ aida.histogram1D("Bottom positron tracks - Bend plane residuals at scoring plane", 60, -30, 30));
+ PlotUtils.setup1DRegion(plotter, "Bend plane residuals at scoring plane", 2, "x_{ep} - x_{sp} (mm)",
+ aida.histogram1D("Bend plane residuals at scoring plane", 60, -30, 30));
+ PlotUtils.setup1DRegion(plotter, "Bend plane residuals at scoring plane", 2, "x_{ep} - x_{sp} (mm)",
+ aida.histogram1D("Bend plane residuals at scoring plane", 60, -30, 30));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - Non-bend plane residuals at scoring plane", 3,"y_{ep} - y_{sp} (mm)",
+ aida.histogram1D("Top electron tracks - Non-bend plane residuals at scoring plane", 30, -15, 15));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - Non-bend plane residuals at scoring plane", 3,"y_{ep} - y_{sp} (mm)",
+ aida.histogram1D("Top positron tracks - Non-bend plane residuals at scoring plane", 30, -15, 15));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - Non-bend plane residuals at scoring plane", 4,"y_{ep} - y_{sp} (mm)",
+ aida.histogram1D("Bottom electron tracks - Non-bend plane residuals at scoring plane", 30, -15, 15));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - Non-bend plane residuals at scoring plane", 4,"y_{ep} - y_{sp} (mm)",
+ aida.histogram1D("Bottom positron tracks - Non-bend plane residuals at scoring plane", 30, -15, 15));
+ PlotUtils.setup1DRegion(plotter, "Non-bend plane residuals at scoring plane", 5,"y_{ep} - y_{sp} (mm)",
+ aida.histogram1D("Non-bend plane residuals at scoring plane", 30, -15, 15));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - z residuals at scoring plane", 6, "z_{ep} - z_{sp} (mm)",
+ aida.histogram1D("Top electron tracks - z residuals at scoring plane", 10, -5, 5));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - z residuals at scoring plane", 6, "z_{ep} - z_{sp} (mm)",
+ aida.histogram1D("Top positron tracks - z residuals at scoring plane", 10, -5, 5));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - z residuals at scoring plane", 7, "z_{ep} - z_{sp} (mm)",
+ aida.histogram1D("Bottom electron tracks - z residuals at scoring plane", 10, -5, 5));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - z residuals at scoring plane", 7, "z_{ep} - z_{sp} (mm)",
+ aida.histogram1D("Bottom positron tracks - z residuals at scoring plane", 10, -5, 5));
+ PlotUtils.setup1DRegion(plotter, "z residuals at scoring plane", 7, "z_{ep} - z_{sp} (mm)",
+ aida.histogram1D("z residuals at scoring plane", 10, -5, 5));
+ plotters.add(plotter);
+
+ //--- Plots of residuals at target ---//
+ //------------------------------------//
+ plotter = PlotUtils.setupPlotter("Residuals at target", 3, 3);
+ PlotUtils.setup1DRegion(plotter, "Top tracks - Bend plane residuals at target", 0, "x_{ep} - x_{t} (mm)",
+ aida.histogram1D("Top electron tracks - Bend plane residual at target", 40, -4, 4));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - Bend plane residuals at target", 0, "x_{ep} - x_{t} (mm)",
+ aida.histogram1D("Top positron tracks - Bend plane residual at target", 40, -4, 4));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - Bend plane residuals at target", 1, "x_{ep} - x_{t} (mm)",
+ aida.histogram1D("Bottom electron tracks - Bend plane residuals at target", 40, -4, 4));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - Bend plane residuals at target", 1, "x_{ep} - x_{t} (mm)",
+ aida.histogram1D("Bottom positron tracks - Bend plane residuals at target", 40, -4, 4));
+ PlotUtils.setup1DRegion(plotter, "Bend plane residuals at target", 2, "x_{ep} - x_{t} (mm)",
+ aida.histogram1D("Bend plane residuals at target", 40, -4, 4));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - Non-bend plane residuals at target", 3, "y_{ep} - y_{t} (mm)",
+ aida.histogram1D("Top electron tracks - Non-bend plane residuals at target", 20, -2, 2));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - Non-bend plane residuals at target", 3, "y_{ep} - y_{t} (mm)",
+ aida.histogram1D("Top positron tracks - Non-bend plane residuals at target", 20, -2, 2));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - Non-bend plane residuals at target", 4, "y_{ep} - y_{t} (mm)",
+ aida.histogram1D("Bottom electron tracks - Non-bend plane residuals at target", 20, -2, 2));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - Non-bend plane residuals at target", 4, "y_{ep} - y_{t} (mm)",
+ aida.histogram1D("Bottom positron tracks - Non-bend plane residuals at target", 20, -2, 2));
+ PlotUtils.setup1DRegion(plotter, "Non-bend plane residuals at target", 5, "y_{ep} - y_{t} (mm)",
+ aida.histogram1D("Non-bend plane residuals at target", 20, -2, 2));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - z residuals at target", 6, "z_{ep} - z_{t} (mm)",
+ aida.histogram1D("Top electron tracks - z residuals at target", 50, -5, 5));
+ PlotUtils.setup1DRegion(plotter, "Top tracks - z residuals at target", 6, "z_{ep} - z_{t} (mm)",
+ aida.histogram1D("Top positron tracks - z residuals at target", 50, -5, 5));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - z residuals at target", 7, "z_{ep} - z_{t} (mm)",
+ aida.histogram1D("Bottom electron tracks - z residuals at target", 50, -5, 5));
+ PlotUtils.setup1DRegion(plotter, "Bottom tracks - z residuals at target", 7, "z_{ep} - z_{t} (mm)",
+ aida.histogram1D("Bottom positron tracks - z residuals at target", 50, -5, 5));
+ PlotUtils.setup1DRegion(plotter, "z residuals at target", 8, "z_{ep} - z_{t} (mm)",
+ aida.histogram1D("z residuals at target", 50, -5, 5));
+ plotters.add(plotter);
+
+ //--- Plot of residuals at scoring plane vs momentum ---//
+ //------------------------------------------------------//
+ plotter = PlotUtils.setupPlotter("Residuals vs Momentum", 2, 2);
+ PlotUtils.setup2DRegion(plotter, "Bend plane residuals vs momentum at scoring plane", 0,
+ "Momentum (GeV)", "x_{ep} - x_{sp} (mm)",
+ aida.histogram2D("Bend plane residuals vs momentum at scoring plane", 5, 0, 2.5, 60, -30, 30));
+ PlotUtils.setup2DRegion(plotter, "Non-bend plane residuals vs momentum at scoring plane", 1,
+ "Momentum (GeV)", "y_{ep} - y_{sp} (mm)",
+ aida.histogram2D("Non-bend plane residuals vs momentum at scoring plane", 5, 0, 2.5, 60, -30, 30));
+ PlotUtils.setup2DRegion(plotter, "Bend plane residuals vs momentum at target", 2,
+ "Momentum (GeV)", "x_{ep} - x_{t} (mm)",
+ aida.histogram2D("Bend plane residuals vs momentum at target", 5, 0, 2.5, 60, -3, 3));
+ PlotUtils.setup2DRegion(plotter, "Non-bend plane residuals vs momentum at target", 3,
+ "Momentum (GeV)", "y_{ep} - y_{t} (mm)",
+ aida.histogram2D("Non-bend plane residuals vs momentum at target", 5, 0, 2.5, 50, -2.5, 2.5));
+ plotters.add(plotter);
+
+ for(IPlotter iPlotter : plotters){
+ iPlotter.show();
+ }
+
+ }
+
+ public void process(EventHeader event){
+
+ // If the event doesn't contain an LCRelation between a track and its
+ // corresponding ECal scoring plane hit, skip the event.
+ if(!event.hasCollection(LCRelation.class, trackToScoringPlaneHitRelationsName)) return;
+
+ List<LCRelation> trackToScoringPlaneHitRelations = event.get(LCRelation.class, trackToScoringPlaneHitRelationsName);
+
+ for(LCRelation trackToScoringPlaneHitRelation : trackToScoringPlaneHitRelations){
+
+ // Get the track
+ Track track = (Track) trackToScoringPlaneHitRelation.getFrom();
+
+ // Get the track momentum
+ double[] momentum = BaseTrackState.computeMomentum(track.getTrackStates().get(0), bField.y());
+ double p = Math.sqrt(momentum[0]*momentum[0] + momentum[1]*momentum[1] + momentum[2]*momentum[2]);
+ this.printVerbose("Track momentum: " + p);
+
+ // Get the corresponding scoring plane hit
+ SimTrackerHit scoringPlaneHit = (SimTrackerHit) trackToScoringPlaneHitRelation.getTo();
+ Hep3Vector scoringPlaneHitPosition = scoringPlaneHit.getPositionVec();
+ this.printVerbose("Scoring plane hit position: " + scoringPlaneHitPosition.toString());
+
+ // Fill the scoring plane position histograms
+ aida.histogram1D("Scoring plane hit position - x").fill(scoringPlaneHitPosition.x());
+ aida.histogram1D("Scoring plane hit position - y").fill(scoringPlaneHitPosition.y());
+ aida.histogram1D("Scoring plane hit position - z").fill(scoringPlaneHitPosition.z());
+ aida.histogram2D("Scoring plane hit position - x-y").fill(scoringPlaneHitPosition.x(), scoringPlaneHitPosition.y());
+
+ // Extrapolate the track to the scoring plane position
+ Hep3Vector trackPositionAtScoringPlane = TrackUtils.extrapolateTrack(track, scoringPlaneHitPosition.z());
+ this.printVerbose("Extrapolated track position: " + trackPositionAtScoringPlane.toString());
+
+ // Find the residual between the extrapolated track position and the scoring plane hit position
+ double deltaX = trackPositionAtScoringPlane.x() - scoringPlaneHitPosition.x();
+ double deltaY = trackPositionAtScoringPlane.y() - scoringPlaneHitPosition.y();
+ // This should be 0 but it serves as a sanity check.
+ double deltaZ = trackPositionAtScoringPlane.z() - scoringPlaneHitPosition.z();
+
+ if(track.getTrackerHits().get(0).getPosition()[2] > 0){
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ aida.histogram1D("Top positron tracks - Bend plane residual at scoring plane").fill(deltaX);
+ aida.histogram1D("Top positron tracks - Non-bend plane residuals at scoring plane").fill(deltaY);
+ aida.histogram1D("Top positron tracks - z residuals at scoring plane").fill(deltaZ);
+ } else {
+ aida.histogram1D("Top electron tracks - Bend plane residual at scoring plane").fill(deltaX);
+ aida.histogram1D("Top electron tracks - Non-bend plane residuals at scoring plane").fill(deltaY);
+ aida.histogram1D("Top electron tracks - z residuals at scoring plane").fill(deltaZ);
+ }
+ } else {
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ aida.histogram1D("Bottom positron tracks - Bend plane residuals at scoring plane").fill(deltaX);
+ aida.histogram1D("Bottom positron tracks - Non-bend plane residuals at scoring plane").fill(deltaY);
+ aida.histogram1D("Bottom positron tracks - z residuals at scoring plane").fill(deltaZ);
+ } else {
+ aida.histogram1D("Bottom electron tracks - Bend plane residuals at scoring plane").fill(deltaX);
+ aida.histogram1D("Bottom electron tracks - Non-bend plane residuals at scoring plane").fill(deltaY);
+ aida.histogram1D("Bottom electron tracks - z residuals at scoring plane").fill(deltaZ);
+ }
+ }
+
+ aida.histogram1D("Bend plane residuals at scoring plane").fill(deltaX);
+ aida.histogram1D("Non-bend plane residuals at scoring plane").fill(deltaY);
+ aida.histogram1D("z residuals at target").fill(deltaZ);
+ aida.histogram2D("Bend plane residuals vs momentum at scoring plane").fill(p, deltaX);
+ aida.histogram2D("Non-bend plane residuals vs momentum at scoring plane").fill(p, deltaY);
+ }
+
+ if(!event.hasCollection(LCRelation.class, trackToMCParticleRelationsName)) return;
+
+ List<LCRelation> trackToMCParticleRelations = event.get(LCRelation.class, trackToMCParticleRelationsName);
+
+ for(LCRelation trackToMCParticleRelation : trackToMCParticleRelations){
+
+ // Get the track
+ Track track = (Track) trackToMCParticleRelation.getFrom();
+
+ // Get the track momentum
+ double[] momentum = BaseTrackState.computeMomentum(track.getTrackStates().get(0), bField.y());
+ double p = Math.sqrt(momentum[0]*momentum[0] + momentum[1]*momentum[1] + momentum[2]*momentum[2]);
+ this.printVerbose("Track momentum: " + p);
+
+ // Get the corresponding MC particle
+ MCParticle particle = (MCParticle) trackToMCParticleRelation.getTo();
+
+ // Extrapolate the track to the origin
+ Hep3Vector trackPositionAtOrigin = TrackUtils.extrapolateTrack(track, particle.getOriginZ());
+
+ // Find the residual between the extrapolated track and the position of the scoring plane at the origin
+ double deltaX = trackPositionAtOrigin.x() - particle.getOriginX();
+ double deltaY = trackPositionAtOrigin.y() - particle.getOriginY();
+ double deltaZ = trackPositionAtOrigin.z() - particle.getOriginZ();
+
+ if(track.getTrackerHits().get(0).getPosition()[2] > 0){
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ aida.histogram1D("Top positron tracks - Bend plane residual at target").fill(deltaX);
+ aida.histogram1D("Top positron tracks - Non-bend plane residuals at target").fill(deltaY);
+ aida.histogram1D("Top positron tracks - z residuals at target").fill(deltaZ);
+ } else {
+ aida.histogram1D("Top electron tracks - Bend plane residual at target").fill(deltaX);
+ aida.histogram1D("Top electron tracks - Non-bend plane residuals at target").fill(deltaY);
+ aida.histogram1D("Top electron tracks - z residuals at target").fill(deltaZ);
+ }
+ } else {
+
+ if(track.getTrackStates().get(0).getOmega() > 0){
+ aida.histogram1D("Bottom positron tracks - Bend plane residuals at target").fill(deltaX);
+ aida.histogram1D("Bottom positron tracks - Non-bend plane residuals at target").fill(deltaY);
+ aida.histogram1D("Bottom positron tracks - z residuals at target").fill(deltaZ);
+ } else {
+ aida.histogram1D("Bottom electron tracks - Bend plane residuals at target").fill(deltaX);
+ aida.histogram1D("Bottom electron tracks - Non-bend plane residuals at target").fill(deltaY);
+ aida.histogram1D("Bottom electron tracks - z residuals at target").fill(deltaZ);
+ }
+ }
+
+ aida.histogram1D("Bend plane residuals at target").fill(deltaX);
+ aida.histogram1D("Non-bend plane residuals at target").fill(deltaY);
+ aida.histogram1D("z residuals at target").fill(deltaZ);
+ aida.histogram2D("Bend plane residuals vs momentum at target").fill(p, deltaX);
+ aida.histogram2D("Non-bend plane residuals vs momentum at target").fill(p, deltaY);
+ }
+ }
+
+ @Override
+ protected void endOfData(){
+
+ IHistogram2D histogram = aida.histogram2D("Bend plane residuals vs momentum at scoring plane");
+ int binsX = histogram.xAxis().bins();
+ for(int binX = 0; binX < binsX; binX++){
+ PlotUtils.getYProjection(binX, histogram);
+ }
+
+ histogram = aida.histogram2D("Non-bend plane residuals vs momentum at scoring plane");
+ binsX = histogram.xAxis().bins();
+ for(int binX = 0; binX < binsX; binX++){
+ PlotUtils.getYProjection(binX, histogram);
+ }
+
+ histogram = aida.histogram2D("Bend plane residuals vs momentum at target");
+ binsX = histogram.xAxis().bins();
+ for(int binX = 0; binX < binsX; binX++){
+ PlotUtils.getYProjection(binX, histogram);
+ }
+
+ histogram = aida.histogram2D("Non-bend plane residuals vs momentum at target");
+ binsX = histogram.xAxis().bins();
+ for(int binX = 0; binX < binsX; binX++){
+ PlotUtils.getYProjection(binX, histogram);
+ }
+ }
+
+ /**
+ * Print a message if verbose has been enabled.
+ *
+ * @param message : message to print.
+ */
+ private void printVerbose(String message){
+ if(verbose)
+ System.out.println(this.getClass().getSimpleName() + ": " + message);
+ }
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/LheToStdhep.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/LheToStdhep.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/LheToStdhep.java Wed Mar 9 11:43:24 2016
@@ -32,248 +32,248 @@
* TODO: Make this converter more generic.
*/
public class LheToStdhep {
-
- private static final int N_PARTICLE_INDEX = 0;
- private static final int PDG_ID_INDEX = 1;
- private static final int STATUS_INDEX = 2;
- private static final int FIRST_MOTHER_INDEX = 3;
- private static final int SECOND_MOTHER_INDEX = 4;
- private static final int FIRST_DAUGHTER_INDEX = 5;
- private static final int SECOND_DAUGHTER_INDEX = 6;
-
- private static double sigmaX = 0.2;
- private static double sigmaY = 0.02;
- private static double sigmaZ = 0.0;
-
- private static double offsetX = 0;
- private static double offsetY = 0;
- private static double offsetZ = 0.03;
-
- static int eventNumber = 0;
-
-
- public static void main(String[] args) throws IOException{
-
- String lheFileName = null;
- String stdhepFileName = "output.stdhep";
-
- // Instantiate te command line parser
- CommandLineParser parser = new PosixParser();
-
- // Create the Options
- // TODO: Add ability to parse list of files.
- // Allow a user to pass tag.gz files
- Options options = new Options();
- options.addOption("i", "input", true, "Input LHE file name");
- options.addOption("o", "output", true, "Output Stdhep file name");
-
- try {
- // Parse the command line arguments
- CommandLine line = parser.parse(options, args);
-
- // If the file is not specified, notify the user and exit the program
- if(!line.hasOption("i")){
- System.out.println("Please specify an LHE file to process");
- System.exit(0);
- }
- lheFileName = line.getOptionValue("i");
-
- // Check if the user has specified the output file name and that the
- // extension is stdhep. If not, add the extension
- if(line.hasOption("o")){
- stdhepFileName = line.getOptionValue("o");
- }
- } catch(ParseException e){
- System.out.println("Unexpected exception: " + e.getMessage());
- }
-
- convertToStdhep(lheFileName, stdhepFileName);
-
- }
-
- /**
- *
- */
- static private void convertToStdhep(String lheFileName, String stdhepFileName) throws IOException{
- List<Element> events = readLhe(lheFileName);
-
- StdhepWriter writer = new StdhepWriter(
- stdhepFileName,
- "Import Stdhep Events",
- "Imported from LHE generated from MadGraph",
- events.size()
- );
- writer.setCompatibilityMode(false);
-
- for(Element event : events){
- writeEvent(event, writer);
- }
- writer.close();
- }
-
- /**
- *
- */
- private static List<Element> readLhe(String lheFileName){
-
- // Instantiate the SAX parser used to build the JDOM document
- SAXBuilder builder = new SAXBuilder();
-
- // Open the lhe file
- File lheFile = new File(lheFileName);
-
- // Parse the lhe file and build the JDOM document
- Document document = null;
- List<Element> eventNodes = null;
- try {
-
- document = (Document) builder.build(lheFile);
-
- // Get the root node
- Element rootNode = document.getRootElement();
-
- // Get a list of all nodes of type event
- eventNodes = rootNode.getChildren("event");
-
- } catch (JDOMException e) {
- e.printStackTrace();
-
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return eventNodes;
- }
-
- /**
- *
- */
- private static void writeEvent(Element event, StdhepWriter writer) throws IOException{
-
- int numberOfParticles = 0;
- int particleIndex = 0;
- int pdgID[] = null;
- int particleStatus[] = null;
- int motherParticles[] = null;
- int daughterParticles[] = null;
- double particleMomentum[] = null;
- double particleVertex[] = null;
-
- Random generator = new Random();
-
- eventNumber++;
-
- System.out.println("#================================================#\n#");
- System.out.println("# Event: " + eventNumber);
-
-
- // Get the text within the event element node. An element node contains
- // information describing the event and it's particles. The PDG ID of
- // a particle along with it's kinematics is listed on it's own line.
- // In order to parse the information for each particle, the text is
- // split using the newline character as a delimiter.
- String[] eventData = event.getTextTrim().split("\n");
-
- for(int datumIndex = 0; datumIndex < eventData.length; datumIndex++){
-
- // Split a line by whitespace
- String[] eventTokens = eventData[datumIndex].split("\\s+");
-
- if(datumIndex == 0){
-
- numberOfParticles = Integer.valueOf(eventTokens[N_PARTICLE_INDEX]);
- System.out.println("# Number of particles: " + numberOfParticles + "\n#");
- System.out.println("#================================================#");
-
- // Reset all arrays used to build the Stdhep event
- particleIndex = 0;
- particleStatus = new int[numberOfParticles];
- pdgID = new int[numberOfParticles];
- motherParticles = new int[numberOfParticles*2];
- daughterParticles = new int[numberOfParticles*2];
- particleMomentum = new double[numberOfParticles*5];
- particleVertex = new double[numberOfParticles*4];
-
- continue;
- }
-
- // Get the PDG ID of the particle
- pdgID[particleIndex] = Integer.valueOf(eventTokens[PDG_ID_INDEX]);
-
-
- System.out.println(">>> PDG ID: " + pdgID[particleIndex]);
-
- // Get the status of the particle (initial state = -1, final state = 1, resonance = 2)
- particleStatus[particleIndex] = Integer.valueOf(eventTokens[STATUS_INDEX]);
- if(particleStatus[particleIndex] == -1) particleStatus[particleIndex] = 3;
- System.out.println(">>>> Particle Status: " + particleStatus[particleIndex]);
-
- // Get the mothers of a particle. If the particle is a trident electron, then assign it
- // a mother value of 10 so it's distinguishable from the beam electron.
- if(pdgID[particleIndex] == 611){
- motherParticles[particleIndex*2] = 10;
- // If the PDG ID is equal to 611/-611 (trident electron) change it back to 11/-11.
- // Otherwise, SLIC won't do anything with them.
- pdgID[particleIndex] = 11;
- } else if(pdgID[particleIndex] == -611){
- motherParticles[particleIndex*2] = 10;
- pdgID[particleIndex] = -11;
- } else {
- motherParticles[particleIndex*2] = Integer.valueOf(eventTokens[FIRST_MOTHER_INDEX]);
- }
- motherParticles[particleIndex*2 + 1] = Integer.valueOf(eventTokens[SECOND_MOTHER_INDEX]);
- System.out.println(">>>> Mothers: 1) " + motherParticles[particleIndex*2] + " 2) " + motherParticles[particleIndex*2 + 1]);
-
- // Get the daughter particles
- daughterParticles[particleIndex*2] = Integer.valueOf(eventTokens[FIRST_DAUGHTER_INDEX]);
- daughterParticles[particleIndex*2 + 1] = Integer.valueOf(eventTokens[SECOND_DAUGHTER_INDEX]);
- System.out.println(">>>> Daughter: 1) " + daughterParticles[particleIndex*2] + " 2) " + daughterParticles[particleIndex*2 + 1]);
-
- // Get the particle momentum, its mass and energy
- particleMomentum[particleIndex*5] = Double.valueOf(eventTokens[7]); // px
- particleMomentum[particleIndex*5 + 1] = Double.valueOf(eventTokens[8]); // py
- particleMomentum[particleIndex*5 + 2] = Double.valueOf(eventTokens[9]); // pz
- particleMomentum[particleIndex*5 + 3] = Double.valueOf(eventTokens[10]); // Particle Energy
- particleMomentum[particleIndex*5 + 4] = Double.valueOf(eventTokens[11]); // Particle Mass
-
- // Rotate the particle by 30 mrad around the beam axis
- Hep3Vector rotatedMomentum =
- rotateToDetector(particleMomentum[particleIndex*5],
- particleMomentum[particleIndex*5+1],
- particleMomentum[particleIndex*5+1]);
-
- particleMomentum[particleIndex*5] = rotatedMomentum.x();
- particleMomentum[particleIndex*5 + 1] = rotatedMomentum.y();
- particleMomentum[particleIndex*5 + 2] = rotatedMomentum.z();
-
- // Set the origin of the particle
- Hep3Vector rotatedVertex = rotateToDetector(sigmaX*generator.nextGaussian() + offsetX,
- sigmaY*generator.nextGaussian() + offsetY,
- sigmaZ*generator.nextGaussian() + offsetZ);
- particleVertex[particleIndex*4] = rotatedVertex.x();
- particleVertex[particleIndex*4+1] = rotatedVertex.y();
- particleVertex[particleIndex*4+2] = rotatedVertex.z();
- particleVertex[particleIndex*4+3] = 0;
-
- // Increment the particle number
- particleIndex++;
-
- System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
- }
-
- // Create the Stdhep event and write it
- StdhepEvent stdhepEvent = new StdhepEvent(eventNumber, numberOfParticles, particleStatus,
- pdgID, motherParticles, daughterParticles, particleMomentum, particleVertex);
- writer.writeRecord(stdhepEvent);
- }
-
- /**
- *
- */
- private static Hep3Vector rotateToDetector(double x, double y, double z){
- IRotation3D rotation = new RotationGeant(0.0, 0.03, 0.0);
- Hep3Vector vector = new BasicHep3Vector(x, y, z);
- return rotation.rotated(vector);
- }
+
+ private static final int N_PARTICLE_INDEX = 0;
+ private static final int PDG_ID_INDEX = 1;
+ private static final int STATUS_INDEX = 2;
+ private static final int FIRST_MOTHER_INDEX = 3;
+ private static final int SECOND_MOTHER_INDEX = 4;
+ private static final int FIRST_DAUGHTER_INDEX = 5;
+ private static final int SECOND_DAUGHTER_INDEX = 6;
+
+ private static double sigmaX = 0.2;
+ private static double sigmaY = 0.02;
+ private static double sigmaZ = 0.0;
+
+ private static double offsetX = 0;
+ private static double offsetY = 0;
+ private static double offsetZ = 0.03;
+
+ static int eventNumber = 0;
+
+
+ public static void main(String[] args) throws IOException{
+
+ String lheFileName = null;
+ String stdhepFileName = "output.stdhep";
+
+ // Instantiate te command line parser
+ CommandLineParser parser = new PosixParser();
+
+ // Create the Options
+ // TODO: Add ability to parse list of files.
+ // Allow a user to pass tag.gz files
+ Options options = new Options();
+ options.addOption("i", "input", true, "Input LHE file name");
+ options.addOption("o", "output", true, "Output Stdhep file name");
+
+ try {
+ // Parse the command line arguments
+ CommandLine line = parser.parse(options, args);
+
+ // If the file is not specified, notify the user and exit the program
+ if(!line.hasOption("i")){
+ System.out.println("Please specify an LHE file to process");
+ System.exit(0);
+ }
+ lheFileName = line.getOptionValue("i");
+
+ // Check if the user has specified the output file name and that the
+ // extension is stdhep. If not, add the extension
+ if(line.hasOption("o")){
+ stdhepFileName = line.getOptionValue("o");
+ }
+ } catch(ParseException e){
+ System.out.println("Unexpected exception: " + e.getMessage());
+ }
+
+ convertToStdhep(lheFileName, stdhepFileName);
+
+ }
+
+ /**
+ *
+ */
+ static private void convertToStdhep(String lheFileName, String stdhepFileName) throws IOException{
+ List<Element> events = readLhe(lheFileName);
+
+ StdhepWriter writer = new StdhepWriter(
+ stdhepFileName,
+ "Import Stdhep Events",
+ "Imported from LHE generated from MadGraph",
+ events.size()
+ );
+ writer.setCompatibilityMode(false);
+
+ for(Element event : events){
+ writeEvent(event, writer);
+ }
+ writer.close();
+ }
+
+ /**
+ *
+ */
+ private static List<Element> readLhe(String lheFileName){
+
+ // Instantiate the SAX parser used to build the JDOM document
+ SAXBuilder builder = new SAXBuilder();
+
+ // Open the lhe file
+ File lheFile = new File(lheFileName);
+
+ // Parse the lhe file and build the JDOM document
+ Document document = null;
+ List<Element> eventNodes = null;
+ try {
+
+ document = (Document) builder.build(lheFile);
+
+ // Get the root node
+ Element rootNode = document.getRootElement();
+
+ // Get a list of all nodes of type event
+ eventNodes = rootNode.getChildren("event");
+
+ } catch (JDOMException e) {
+ e.printStackTrace();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return eventNodes;
+ }
+
+ /**
+ *
+ */
+ private static void writeEvent(Element event, StdhepWriter writer) throws IOException{
+
+ int numberOfParticles = 0;
+ int particleIndex = 0;
+ int pdgID[] = null;
+ int particleStatus[] = null;
+ int motherParticles[] = null;
+ int daughterParticles[] = null;
+ double particleMomentum[] = null;
+ double particleVertex[] = null;
+
+ Random generator = new Random();
+
+ eventNumber++;
+
+ System.out.println("#================================================#\n#");
+ System.out.println("# Event: " + eventNumber);
+
+
+ // Get the text within the event element node. An element node contains
+ // information describing the event and it's particles. The PDG ID of
+ // a particle along with it's kinematics is listed on it's own line.
+ // In order to parse the information for each particle, the text is
+ // split using the newline character as a delimiter.
+ String[] eventData = event.getTextTrim().split("\n");
+
+ for(int datumIndex = 0; datumIndex < eventData.length; datumIndex++){
+
+ // Split a line by whitespace
+ String[] eventTokens = eventData[datumIndex].split("\\s+");
+
+ if(datumIndex == 0){
+
+ numberOfParticles = Integer.valueOf(eventTokens[N_PARTICLE_INDEX]);
+ System.out.println("# Number of particles: " + numberOfParticles + "\n#");
+ System.out.println("#================================================#");
+
+ // Reset all arrays used to build the Stdhep event
+ particleIndex = 0;
+ particleStatus = new int[numberOfParticles];
+ pdgID = new int[numberOfParticles];
+ motherParticles = new int[numberOfParticles*2];
+ daughterParticles = new int[numberOfParticles*2];
+ particleMomentum = new double[numberOfParticles*5];
+ particleVertex = new double[numberOfParticles*4];
+
+ continue;
+ }
+
+ // Get the PDG ID of the particle
+ pdgID[particleIndex] = Integer.valueOf(eventTokens[PDG_ID_INDEX]);
+
+
+ System.out.println(">>> PDG ID: " + pdgID[particleIndex]);
+
+ // Get the status of the particle (initial state = -1, final state = 1, resonance = 2)
+ particleStatus[particleIndex] = Integer.valueOf(eventTokens[STATUS_INDEX]);
+ if(particleStatus[particleIndex] == -1) particleStatus[particleIndex] = 3;
+ System.out.println(">>>> Particle Status: " + particleStatus[particleIndex]);
+
+ // Get the mothers of a particle. If the particle is a trident electron, then assign it
+ // a mother value of 10 so it's distinguishable from the beam electron.
+ if(pdgID[particleIndex] == 611){
+ motherParticles[particleIndex*2] = 10;
+ // If the PDG ID is equal to 611/-611 (trident electron) change it back to 11/-11.
+ // Otherwise, SLIC won't do anything with them.
+ pdgID[particleIndex] = 11;
+ } else if(pdgID[particleIndex] == -611){
+ motherParticles[particleIndex*2] = 10;
+ pdgID[particleIndex] = -11;
+ } else {
+ motherParticles[particleIndex*2] = Integer.valueOf(eventTokens[FIRST_MOTHER_INDEX]);
+ }
+ motherParticles[particleIndex*2 + 1] = Integer.valueOf(eventTokens[SECOND_MOTHER_INDEX]);
+ System.out.println(">>>> Mothers: 1) " + motherParticles[particleIndex*2] + " 2) " + motherParticles[particleIndex*2 + 1]);
+
+ // Get the daughter particles
+ daughterParticles[particleIndex*2] = Integer.valueOf(eventTokens[FIRST_DAUGHTER_INDEX]);
+ daughterParticles[particleIndex*2 + 1] = Integer.valueOf(eventTokens[SECOND_DAUGHTER_INDEX]);
+ System.out.println(">>>> Daughter: 1) " + daughterParticles[particleIndex*2] + " 2) " + daughterParticles[particleIndex*2 + 1]);
+
+ // Get the particle momentum, its mass and energy
+ particleMomentum[particleIndex*5] = Double.valueOf(eventTokens[7]); // px
+ particleMomentum[particleIndex*5 + 1] = Double.valueOf(eventTokens[8]); // py
+ particleMomentum[particleIndex*5 + 2] = Double.valueOf(eventTokens[9]); // pz
+ particleMomentum[particleIndex*5 + 3] = Double.valueOf(eventTokens[10]); // Particle Energy
+ particleMomentum[particleIndex*5 + 4] = Double.valueOf(eventTokens[11]); // Particle Mass
+
+ // Rotate the particle by 30 mrad around the beam axis
+ Hep3Vector rotatedMomentum =
+ rotateToDetector(particleMomentum[particleIndex*5],
+ particleMomentum[particleIndex*5+1],
+ particleMomentum[particleIndex*5+1]);
+
+ particleMomentum[particleIndex*5] = rotatedMomentum.x();
+ particleMomentum[particleIndex*5 + 1] = rotatedMomentum.y();
+ particleMomentum[particleIndex*5 + 2] = rotatedMomentum.z();
+
+ // Set the origin of the particle
+ Hep3Vector rotatedVertex = rotateToDetector(sigmaX*generator.nextGaussian() + offsetX,
+ sigmaY*generator.nextGaussian() + offsetY,
+ sigmaZ*generator.nextGaussian() + offsetZ);
+ particleVertex[particleIndex*4] = rotatedVertex.x();
+ particleVertex[particleIndex*4+1] = rotatedVertex.y();
+ particleVertex[particleIndex*4+2] = rotatedVertex.z();
+ particleVertex[particleIndex*4+3] = 0;
+
+ // Increment the particle number
+ particleIndex++;
+
+ System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+ }
+
+ // Create the Stdhep event and write it
+ StdhepEvent stdhepEvent = new StdhepEvent(eventNumber, numberOfParticles, particleStatus,
+ pdgID, motherParticles, daughterParticles, particleMomentum, particleVertex);
+ writer.writeRecord(stdhepEvent);
+ }
+
+ /**
+ *
+ */
+ private static Hep3Vector rotateToDetector(double x, double y, double z){
+ IRotation3D rotation = new RotationGeant(0.0, 0.03, 0.0);
+ Hep3Vector vector = new BasicHep3Vector(x, y, z);
+ return rotation.rotated(vector);
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/PlotUtils.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/PlotUtils.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/PlotUtils.java Wed Mar 9 11:43:24 2016
@@ -20,71 +20,71 @@
*/
public class PlotUtils {
- // Default ctor
- public PlotUtils(){}
+ // Default ctor
+ public PlotUtils(){}
- public static IPlotter setupPlotter(String title, int regionX, int regionY){
- IPlotter plotter = AIDA.defaultInstance().analysisFactory().createPlotterFactory().create(title);
- plotter.setTitle(title);
-
- if(regionX < 0 || regionY < 0) throw new RuntimeException("Region dimensions need to be greater than 0!");
- else if(regionX != 0 || regionY != 0) plotter.createRegions(regionX, regionY);
-
- plotter.style().statisticsBoxStyle().setVisible(false);
- plotter.style().dataStyle().errorBarStyle().setVisible(false);
- plotter.setParameter("plotterWidth", "800");
- plotter.setParameter("plotterHeight", "800");
-
- return plotter;
-
- }
+ public static IPlotter setupPlotter(String title, int regionX, int regionY){
+ IPlotter plotter = AIDA.defaultInstance().analysisFactory().createPlotterFactory().create(title);
+ plotter.setTitle(title);
+
+ if(regionX < 0 || regionY < 0) throw new RuntimeException("Region dimensions need to be greater than 0!");
+ else if(regionX != 0 || regionY != 0) plotter.createRegions(regionX, regionY);
+
+ plotter.style().statisticsBoxStyle().setVisible(false);
+ plotter.style().dataStyle().errorBarStyle().setVisible(false);
+ plotter.setParameter("plotterWidth", "800");
+ plotter.setParameter("plotterHeight", "800");
+
+ return plotter;
+
+ }
public static void setup2DRegion(IPlotter plotter, String title, int region, String xTitle, String yTitle, IHistogram2D histo){
-
- // Check if the specified region is valid
- if(region > plotter.numberOfRegions())
- throw new RuntimeException("Region is invalid! " + title + " contains " + plotter.numberOfRegions() + " regions");
-
- plotter.region(region).style().xAxisStyle().setLabel(xTitle);
- plotter.region(region).style().xAxisStyle().labelStyle().setFontSize(14);
- plotter.region(region).style().yAxisStyle().setLabel(yTitle);
- plotter.region(region).style().yAxisStyle().labelStyle().setFontSize(14);
- plotter.region(region).style().xAxisStyle().setVisible(true);
- plotter.region(region).style().yAxisStyle().setVisible(true);
- plotter.region(region).style().setParameter("hist2DStyle", "colorMap");
- plotter.region(region).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-
- if(histo != null) plotter.region(region).plot(histo);
+
+ // Check if the specified region is valid
+ if(region > plotter.numberOfRegions())
+ throw new RuntimeException("Region is invalid! " + title + " contains " + plotter.numberOfRegions() + " regions");
+
+ plotter.region(region).style().xAxisStyle().setLabel(xTitle);
+ plotter.region(region).style().xAxisStyle().labelStyle().setFontSize(14);
+ plotter.region(region).style().yAxisStyle().setLabel(yTitle);
+ plotter.region(region).style().yAxisStyle().labelStyle().setFontSize(14);
+ plotter.region(region).style().xAxisStyle().setVisible(true);
+ plotter.region(region).style().yAxisStyle().setVisible(true);
+ plotter.region(region).style().setParameter("hist2DStyle", "colorMap");
+ plotter.region(region).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+
+ if(histo != null) plotter.region(region).plot(histo);
}
public static void setup2DRegion(IPlotter plotter, String title, int region, String xTitle, String yTitle, ICloud2D cloud, IPlotterStyle style){
-
- // Check if the specified region is valid
- if(region > plotter.numberOfRegions())
- throw new RuntimeException("Region is invalid! " + title + " contains " + plotter.numberOfRegions() + " regions");
-
- plotter.region(region).style().xAxisStyle().setLabel(xTitle);
- plotter.region(region).style().xAxisStyle().labelStyle().setFontSize(14);
- String[] pars = plotter.region(region).style().xAxisStyle().availableParameters();
- plotter.region(region).style().yAxisStyle().setLabel(yTitle);
- plotter.region(region).style().yAxisStyle().labelStyle().setFontSize(14);
- plotter.region(region).style().xAxisStyle().setVisible(true);
- plotter.region(region).style().yAxisStyle().setVisible(true);
- plotter.region(region).style().setParameter("showAsScatterPlot", "true");
-
- if(cloud != null) plotter.region(region).plot(cloud, style);
+
+ // Check if the specified region is valid
+ if(region > plotter.numberOfRegions())
+ throw new RuntimeException("Region is invalid! " + title + " contains " + plotter.numberOfRegions() + " regions");
+
+ plotter.region(region).style().xAxisStyle().setLabel(xTitle);
+ plotter.region(region).style().xAxisStyle().labelStyle().setFontSize(14);
+ String[] pars = plotter.region(region).style().xAxisStyle().availableParameters();
+ plotter.region(region).style().yAxisStyle().setLabel(yTitle);
+ plotter.region(region).style().yAxisStyle().labelStyle().setFontSize(14);
+ plotter.region(region).style().xAxisStyle().setVisible(true);
+ plotter.region(region).style().yAxisStyle().setVisible(true);
+ plotter.region(region).style().setParameter("showAsScatterPlot", "true");
+
+ if(cloud != null) plotter.region(region).plot(cloud, style);
}
public static void setup1DRegion(IPlotter plotter, String title, int region, String xTitle, IHistogram1D histo){
-
- plotter.region(region).style().xAxisStyle().setLabel(xTitle);
- plotter.region(region).style().xAxisStyle().labelStyle().setFontSize(14);
- plotter.region(region).style().xAxisStyle().setVisible(true);
- plotter.region(region).style().dataStyle().fillStyle().setVisible(false);
- plotter.region(region).style().dataStyle().lineStyle().setThickness(3);
-
- if(histo != null) plotter.region(region).plot(histo);
+
+ plotter.region(region).style().xAxisStyle().setLabel(xTitle);
+ plotter.region(region).style().xAxisStyle().labelStyle().setFontSize(14);
+ plotter.region(region).style().xAxisStyle().setVisible(true);
+ plotter.region(region).style().dataStyle().fillStyle().setVisible(false);
+ plotter.region(region).style().dataStyle().lineStyle().setThickness(3);
+
+ if(histo != null) plotter.region(region).plot(histo);
}
/**
@@ -98,7 +98,7 @@
int ix = (layer - 1) / 2;
int iy = 0;
if (!((HpsSiSensor) sensor).isTopLayer()){
- iy += 2;
+ iy += 2;
}
if (layer % 2 == 0) {
iy += 1;
@@ -108,35 +108,35 @@
}
public static IHistogram1D getYProjection(int binX, IHistogram2D histogram){
- int binsY = histogram.yAxis().bins();
- double yMin = histogram.yAxis().lowerEdge();
- double yMax = histogram.yAxis().upperEdge();
-
- IHistogram1D projection
- = AIDA.defaultInstance().histogram1D(histogram.title() + "_" + binX, binsY, yMin, yMax);
- projection.reset();
-
- double dataY = 0;
- for(int binY = 0; binY < binsY; binY++){
- dataY = histogram.binEntries(binX, binY);
- projection.fill(yMin, dataY);
- yMin++;
- }
-
- return projection;
+ int binsY = histogram.yAxis().bins();
+ double yMin = histogram.yAxis().lowerEdge();
+ double yMax = histogram.yAxis().upperEdge();
+
+ IHistogram1D projection
+ = AIDA.defaultInstance().histogram1D(histogram.title() + "_" + binX, binsY, yMin, yMax);
+ projection.reset();
+
+ double dataY = 0;
+ for(int binY = 0; binY < binsY; binY++){
+ dataY = histogram.binEntries(binX, binY);
+ projection.fill(yMin, dataY);
+ yMin++;
+ }
+
+ return projection;
}
public static double[] fitToGuassian(IHistogram1D histogram){
-
- double[] fitParameters = {0, 0};
- IFitter fitter = AIDA.defaultInstance().analysisFactory().createFitFactory().createFitter();
- IFitResult fitResult = fitter.fit(histogram, "g");
- int meanIndex = fitResult.fittedFunction().indexOfParameter("mean");
- fitParameters[0] = fitResult.fittedParameters()[meanIndex];
+
+ double[] fitParameters = {0, 0};
+ IFitter fitter = AIDA.defaultInstance().analysisFactory().createFitFactory().createFitter();
+ IFitResult fitResult = fitter.fit(histogram, "g");
+ int meanIndex = fitResult.fittedFunction().indexOfParameter("mean");
+ fitParameters[0] = fitResult.fittedParameters()[meanIndex];
- int sigmaIndex = fitResult.fittedFunction().indexOfParameter("sigma");
- fitParameters[1] = fitResult.fittedParameters()[sigmaIndex];
-
- return fitParameters;
+ int sigmaIndex = fitResult.fittedFunction().indexOfParameter("sigma");
+ fitParameters[1] = fitResult.fittedParameters()[sigmaIndex];
+
+ return fitParameters;
}
}
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/ReconstructedParticleChecker.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/ReconstructedParticleChecker.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/ReconstructedParticleChecker.java Wed Mar 9 11:43:24 2016
@@ -29,92 +29,92 @@
*
*/
public class ReconstructedParticleChecker extends Driver {
-
- private AIDA aida;
- private List<IPlotter> plotters = new ArrayList<IPlotter>();
+
+ private AIDA aida;
+ private List<IPlotter> plotters = new ArrayList<IPlotter>();
- IHistogram1D xPositionResidual;
- IHistogram1D yPositionResidual;
- IHistogram1D zPositionResidual;
- IHistogram1D r;
-
- // Collection Names
- private String finalStateParticlesCollectionName = "FinalStateParticles";
-
- boolean debug = true;
- int plotterIndex = 0;
-
- public ReconstructedParticleChecker(){}
-
- protected void detectorChanged(Detector detector){
- super.detectorChanged(detector);
-
- // Setup AIDA
- aida = AIDA.defaultInstance();
- aida.tree().cd("/");
-
- plotters.add(PlotUtils.setupPlotter("Track-Cluster Position Residual", 2, 2));
- xPositionResidual = aida.histogram1D("x Residual", 100, -100, 100);
- yPositionResidual = aida.histogram1D("y Residual", 100, -100, 100);
- zPositionResidual = aida.histogram1D("z Residual", 100, -100, 100);
- r = aida.histogram1D("r", 100, -100, 100);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "x Residual", 0, "delta x [mm]", xPositionResidual);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "y Residual", 1, "delta y [mm]", yPositionResidual);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "z Residual", 2, "delta z [mm]", zPositionResidual);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "r", 3, "r [mm]", r);
-
-
- for(IPlotter plotter : plotters){
- plotter.show();
- }
- }
-
- public void process(EventHeader event){
-
- // If the event doesn't contain any final state reconstructed
- // particles, skip the event
- if(!event.hasCollection(ReconstructedParticle.class, finalStateParticlesCollectionName)){
- this.printDebug("Event does not contain ReconstructedParticles");
- return;
- }
-
- // Get the collections of reconstructed final state particles from the
- // event
- List<ReconstructedParticle> finalStateParticles
- = event.get(ReconstructedParticle.class, finalStateParticlesCollectionName);
-
-
- // Loop over all of the reconstructed particles in the event
- for(ReconstructedParticle finalStateParticle : finalStateParticles){
-
- // Get the list of clusters from the event
- List<Cluster> ecalClusters = finalStateParticle.getClusters();
- this.printDebug("Number of Ecal clusters: " + ecalClusters.size());
- if(ecalClusters.isEmpty()){
- this.printDebug("Number of Ecal clusters: " + ecalClusters.size());
- this.printDebug("List of Ecal cluster is empty ... skipping");
- continue;
- }
-
- // Get the list of tracks from the event
- List<Track> tracks = finalStateParticle.getTracks();
- if(tracks.isEmpty()){
- this.printDebug("List of tracks is empty ... skipping");
- continue;
- }
-
- Hep3Vector ecalPosition = new BasicHep3Vector(ecalClusters.get(0).getPosition());
- Hep3Vector trackPositionAtEcal = TrackUtils.extrapolateTrack(tracks.get(0),ecalPosition.z());
- xPositionResidual.fill(trackPositionAtEcal.x() - ecalPosition.x());
- yPositionResidual.fill(trackPositionAtEcal.y() - ecalPosition.y());
- zPositionResidual.fill(trackPositionAtEcal.z() - ecalPosition.z());
- r.fill(VecOp.sub(trackPositionAtEcal, ecalPosition).magnitude());
- }
-
- }
-
- private void printDebug(String debugMessage){
- if(debug)
- System.out.println(this.getClass().getSimpleName() + ": " + debugMessage);
- }
+ IHistogram1D xPositionResidual;
+ IHistogram1D yPositionResidual;
+ IHistogram1D zPositionResidual;
+ IHistogram1D r;
+
+ // Collection Names
+ private String finalStateParticlesCollectionName = "FinalStateParticles";
+
+ boolean debug = true;
+ int plotterIndex = 0;
+
+ public ReconstructedParticleChecker(){}
+
+ protected void detectorChanged(Detector detector){
+ super.detectorChanged(detector);
+
+ // Setup AIDA
+ aida = AIDA.defaultInstance();
+ aida.tree().cd("/");
+
+ plotters.add(PlotUtils.setupPlotter("Track-Cluster Position Residual", 2, 2));
+ xPositionResidual = aida.histogram1D("x Residual", 100, -100, 100);
+ yPositionResidual = aida.histogram1D("y Residual", 100, -100, 100);
+ zPositionResidual = aida.histogram1D("z Residual", 100, -100, 100);
+ r = aida.histogram1D("r", 100, -100, 100);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "x Residual", 0, "delta x [mm]", xPositionResidual);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "y Residual", 1, "delta y [mm]", yPositionResidual);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "z Residual", 2, "delta z [mm]", zPositionResidual);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "r", 3, "r [mm]", r);
+
+
+ for(IPlotter plotter : plotters){
+ plotter.show();
+ }
+ }
+
+ public void process(EventHeader event){
+
+ // If the event doesn't contain any final state reconstructed
+ // particles, skip the event
+ if(!event.hasCollection(ReconstructedParticle.class, finalStateParticlesCollectionName)){
+ this.printDebug("Event does not contain ReconstructedParticles");
+ return;
+ }
+
+ // Get the collections of reconstructed final state particles from the
+ // event
+ List<ReconstructedParticle> finalStateParticles
+ = event.get(ReconstructedParticle.class, finalStateParticlesCollectionName);
+
+
+ // Loop over all of the reconstructed particles in the event
+ for(ReconstructedParticle finalStateParticle : finalStateParticles){
+
+ // Get the list of clusters from the event
+ List<Cluster> ecalClusters = finalStateParticle.getClusters();
+ this.printDebug("Number of Ecal clusters: " + ecalClusters.size());
+ if(ecalClusters.isEmpty()){
+ this.printDebug("Number of Ecal clusters: " + ecalClusters.size());
+ this.printDebug("List of Ecal cluster is empty ... skipping");
+ continue;
+ }
+
+ // Get the list of tracks from the event
+ List<Track> tracks = finalStateParticle.getTracks();
+ if(tracks.isEmpty()){
+ this.printDebug("List of tracks is empty ... skipping");
+ continue;
+ }
+
+ Hep3Vector ecalPosition = new BasicHep3Vector(ecalClusters.get(0).getPosition());
+ Hep3Vector trackPositionAtEcal = TrackUtils.extrapolateTrack(tracks.get(0),ecalPosition.z());
+ xPositionResidual.fill(trackPositionAtEcal.x() - ecalPosition.x());
+ yPositionResidual.fill(trackPositionAtEcal.y() - ecalPosition.y());
+ zPositionResidual.fill(trackPositionAtEcal.z() - ecalPosition.z());
+ r.fill(VecOp.sub(trackPositionAtEcal, ecalPosition).magnitude());
+ }
+
+ }
+
+ private void printDebug(String debugMessage){
+ if(debug)
+ System.out.println(this.getClass().getSimpleName() + ": " + debugMessage);
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SharedHitAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SharedHitAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SharedHitAnalysis.java Wed Mar 9 11:43:24 2016
@@ -98,14 +98,14 @@
}
- protected void detectorChanged(Detector detector){
-
- for (int layer = 1; layer <= 6; layer++) {
-
- topLayerToStereoHit.put(layer, new ArrayList<TrackerHit>());
- bottomLayerToStereoHit.put(layer, new ArrayList<TrackerHit>());
- }
-
+ protected void detectorChanged(Detector detector){
+
+ for (int layer = 1; layer <= 6; layer++) {
+
+ topLayerToStereoHit.put(layer, new ArrayList<TrackerHit>());
+ bottomLayerToStereoHit.put(layer, new ArrayList<TrackerHit>());
+ }
+
tree = IAnalysisFactory.create().createTreeFactory().create();
histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree);
@@ -159,18 +159,18 @@
plotters.get("Track Parameters").region(4).plot(trackPlots.get("tan_lambda"), this.createStyle(1, "", ""));
plotters.get("Track Parameters").region(4).plot(trackPlots.get("tan_lambda - shared strip hit"), this.createStyle(2, "", ""));
plotters.get("Track Parameters").region(4).plot(trackPlots.get("tan_lambda - l1 Isolation"), this.createStyle(3, "", ""));
-
- for (IPlotter plotter : plotters.values()) {
- plotter.show();
- }
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
+
+ for (IPlotter plotter : plotters.values()) {
+ plotter.show();
+ }
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public void process(EventHeader event){
// If the event doesn't have any tracks, skip it
- if(!event.hasCollection(Track.class, trackCollectionName)) return;
-
+ if(!event.hasCollection(Track.class, trackCollectionName)) return;
+
// Get the collection of tracks from the event
List<Track> tracks = event.get(Track.class, trackCollectionName);
@@ -198,13 +198,13 @@
this.mapStereoHits(stereoHits);
// Loop over all of the tracks in the event
- for(Track track : tracks){
-
- boolean sharedHitTrack = false;
+ for(Track track : tracks){
+
+ boolean sharedHitTrack = false;
boolean l1Isolation = true;
-
- // Fill the track parameter plots
-
+
+ // Fill the track parameter plots
+
// Loop through all of the stereo hits associated with a track
for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
@@ -277,15 +277,15 @@
trackPlots.get("tan_lambda - l1 Isolation").fill(TrackUtils.getTanLambda(track));
trackPlots.get("chi2 - l1 Isolation").fill(track.getChi2());
}
- }
- }
-
+ }
+ }
+
private void mapStereoHits(List<TrackerHit> stereoHits) {
- for (int layer = 1; layer <= 6; layer++) {
- topLayerToStereoHit.get(layer).clear();
- bottomLayerToStereoHit.get(layer).clear();;
- }
+ for (int layer = 1; layer <= 6; layer++) {
+ topLayerToStereoHit.get(layer).clear();
+ bottomLayerToStereoHit.get(layer).clear();;
+ }
for (TrackerHit stereoHit : stereoHits) {
HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) stereoHit.getRawHits().get(0)).getDetectorElement();
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtClusterAnalysis.java Wed Mar 9 11:43:24 2016
@@ -50,28 +50,28 @@
// Plotting
ITree tree;
IHistogramFactory histogramFactory;
- IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
- protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
-
- // All clusters
- private Map<String, IHistogram1D> clusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> singleHitClusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> multHitClusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> signalToNoisePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> singleHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> multHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> clusterSizePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> clusterTimePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram2D> clusterChargeVsTimePlots = new HashMap<String, IHistogram2D>();
-
- // Clusters on track
- private Map<String, IHistogram1D> trackClusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> trackHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> trackClusterTimePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram2D> trackClusterChargeVsMomentum = new HashMap<String, IHistogram2D>();
- private Map<String, IHistogram2D> trackClusterChargeVsCosTheta = new HashMap<String, IHistogram2D>();
- private Map<String, IHistogram2D> trackClusterChargeVsSinPhi = new HashMap<String, IHistogram2D>();
-
+ IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
+ protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
+
+ // All clusters
+ private Map<String, IHistogram1D> clusterChargePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> singleHitClusterChargePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> multHitClusterChargePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> signalToNoisePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> singleHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> multHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> clusterSizePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> clusterTimePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram2D> clusterChargeVsTimePlots = new HashMap<String, IHistogram2D>();
+
+ // Clusters on track
+ private Map<String, IHistogram1D> trackClusterChargePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> trackHitSignalToNoisePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> trackClusterTimePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram2D> trackClusterChargeVsMomentum = new HashMap<String, IHistogram2D>();
+ private Map<String, IHistogram2D> trackClusterChargeVsCosTheta = new HashMap<String, IHistogram2D>();
+ private Map<String, IHistogram2D> trackClusterChargeVsSinPhi = new HashMap<String, IHistogram2D>();
+
// Detector name
private static final String SUBDETECTOR_NAME = "Tracker";
@@ -92,29 +92,29 @@
private int computePlotterRegion(HpsSiSensor sensor) {
- if (sensor.getLayerNumber() < 7) {
- if (sensor.isTopLayer()) {
- return 6*(sensor.getLayerNumber() - 1);
- } else {
- return 6*(sensor.getLayerNumber() - 1) + 1;
- }
- } else {
-
- if (sensor.isTopLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6*(sensor.getLayerNumber() - 7) + 2;
- } else {
- return 6*(sensor.getLayerNumber() - 7) + 3;
- }
- } else if (sensor.isBottomLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6*(sensor.getLayerNumber() - 7) + 4;
- } else {
- return 6*(sensor.getLayerNumber() - 7) + 5;
- }
- }
- }
- return -1;
+ if (sensor.getLayerNumber() < 7) {
+ if (sensor.isTopLayer()) {
+ return 6*(sensor.getLayerNumber() - 1);
+ } else {
+ return 6*(sensor.getLayerNumber() - 1) + 1;
+ }
+ } else {
+
+ if (sensor.isTopLayer()) {
+ if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+ return 6*(sensor.getLayerNumber() - 7) + 2;
+ } else {
+ return 6*(sensor.getLayerNumber() - 7) + 3;
+ }
+ } else if (sensor.isBottomLayer()) {
+ if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+ return 6*(sensor.getLayerNumber() - 7) + 4;
+ } else {
+ return 6*(sensor.getLayerNumber() - 7) + 5;
+ }
+ }
+ }
+ return -1;
}
protected void detectorChanged(Detector detector) {
@@ -249,12 +249,12 @@
.get(sensor.getName()));
}
- for (IPlotter plotter : plotters.values()) {
- plotter.show();
- }
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
+ for (IPlotter plotter : plotters.values()) {
+ plotter.show();
+ }
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public void process(EventHeader event) {
if (runNumber == -1) runNumber = event.getRunNumber();
@@ -354,18 +354,18 @@
this.mapReconstructedParticlesToTracks(tracks, fsParticles);
// Loop over all of the tracks in the event
- for(Track track : tracks){
+ for(Track track : tracks){
// Calculate the momentum of the track
double p = this.getReconstructedParticle(track).getMomentum().magnitude();
-
- for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
-
- // Get the HelicalTrackHit corresponding to the RotatedHelicalTrackHit
- // associated with a track
+
+ for (TrackerHit rotatedStereoHit : track.getTrackerHits()) {
+
+ // Get the HelicalTrackHit corresponding to the RotatedHelicalTrackHit
+ // associated with a track
Set<TrackerHit> trackClusters = stereoHitToClusters.allFrom(hthToRotatedHth.from(rotatedStereoHit));
-
- for (TrackerHit trackCluster : trackClusters) {
+
+ for (TrackerHit trackCluster : trackClusters) {
// Get the raw hits composing this cluster and use them to calculate the amplitude of the hit
double amplitudeSum = 0;
@@ -405,9 +405,9 @@
trackClusterChargeVsCosTheta.get(sensor.getName()).fill(TrackUtils.getCosTheta(track), amplitudeSum);
trackClusterChargeVsSinPhi.get(sensor.getName()).fill(Math.sin(TrackUtils.getPhi0(track)), amplitudeSum);
//trackClusterTimePlots.get(sensor.getName()).fill(trackCluster.time());
- }
- }
- }
+ }
+ }
+ }
}
public void endOfData() {
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtDataRates.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtDataRates.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtDataRates.java Wed Mar 9 11:43:24 2016
@@ -12,81 +12,81 @@
public class SvtDataRates extends Driver {
- //Map<VOLUMES, double[]> rawHitsPerLayer = new HashMap<VOLUMES, double[]>();
- double[][] rawHitsPerLayer = new double[12][4];
-
- //public enum VOLUMES { TOP, BOTTOM };
-
- // Collection Names
- String rawTrackerHitCollectionName = "SVTRawTrackerHits";
+ //Map<VOLUMES, double[]> rawHitsPerLayer = new HashMap<VOLUMES, double[]>();
+ double[][] rawHitsPerLayer = new double[12][4];
+
+ //public enum VOLUMES { TOP, BOTTOM };
+
+ // Collection Names
+ String rawTrackerHitCollectionName = "SVTRawTrackerHits";
- double totalEvents = 0;
- int totalLayersPerVolume = 0;
-
- public SvtDataRates(){}
-
- //static {
- // hep.aida.jfree.AnalysisFactory.register();
- //}
-
- protected void detectorChanged(Detector detector){
-
- List<HpsSiSensor> sensors = detector.getDetectorElement().findDescendants(HpsSiSensor.class);
- for(HpsSiSensor sensor : sensors){
- this.printDebug("Layer: " + sensor.getLayerNumber() + " Module: " + sensor.getModuleNumber());
- }
- totalLayersPerVolume = sensors.size()/2;
- //for(VOLUMES volume : VOLUMES.values()){
- // rawHitsPerLayer.put(volume, new double[totalLayersPerVolume]);
- //}
- }
-
- protected void process(EventHeader event){
-
- if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)){
- return;
- }
-
- totalEvents++;
-
- List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
- for(RawTrackerHit rawHit : rawHits){
-
- HpsSiSensor sensor = (HpsSiSensor) rawHit.getDetectorElement();
- int layer = sensor.getLayerNumber();
- int module = sensor.getModuleNumber();
- //if(sensor.isTopLayer()){
- // rawHitsPerLayer.get(VOLUMES.TOP)[layer]++;
- //} else {
- // rawHitsPerLayer.get(VOLUMES.BOTTOM)[layer]++;
- //}
-
- rawHitsPerLayer[layer-1][module]++;
- }
- }
-
- protected void endOfData(){
-
- //for(VOLUMES volume : VOLUMES.values()){
- //System.out.println("Volume: " + volume);
- //System.out.println("Hits per layer per event: ");
- //for(int layer = 0; layer < totalLayersPerVolume; layer++){
- // System.out.println("Layer: " + (layer+1) + ": " + rawHitsPerLayer.get(volume)[layer]/totalEvents);
- //}
- //}
-
- for(int layer = 0; layer < 12; layer++){
-
- for(int module = 0; module < 4; module++){
- System.out.println("Layer: " + layer +
- " Module: " + module +
- " Hits Per Layer: " + rawHitsPerLayer[layer][module]/totalEvents);
- }
- }
- }
+ double totalEvents = 0;
+ int totalLayersPerVolume = 0;
+
+ public SvtDataRates(){}
+
+ //static {
+ // hep.aida.jfree.AnalysisFactory.register();
+ //}
+
+ protected void detectorChanged(Detector detector){
+
+ List<HpsSiSensor> sensors = detector.getDetectorElement().findDescendants(HpsSiSensor.class);
+ for(HpsSiSensor sensor : sensors){
+ this.printDebug("Layer: " + sensor.getLayerNumber() + " Module: " + sensor.getModuleNumber());
+ }
+ totalLayersPerVolume = sensors.size()/2;
+ //for(VOLUMES volume : VOLUMES.values()){
+ // rawHitsPerLayer.put(volume, new double[totalLayersPerVolume]);
+ //}
+ }
+
+ protected void process(EventHeader event){
+
+ if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)){
+ return;
+ }
+
+ totalEvents++;
+
+ List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+ for(RawTrackerHit rawHit : rawHits){
+
+ HpsSiSensor sensor = (HpsSiSensor) rawHit.getDetectorElement();
+ int layer = sensor.getLayerNumber();
+ int module = sensor.getModuleNumber();
+ //if(sensor.isTopLayer()){
+ // rawHitsPerLayer.get(VOLUMES.TOP)[layer]++;
+ //} else {
+ // rawHitsPerLayer.get(VOLUMES.BOTTOM)[layer]++;
+ //}
+
+ rawHitsPerLayer[layer-1][module]++;
+ }
+ }
+
+ protected void endOfData(){
+
+ //for(VOLUMES volume : VOLUMES.values()){
+ //System.out.println("Volume: " + volume);
+ //System.out.println("Hits per layer per event: ");
+ //for(int layer = 0; layer < totalLayersPerVolume; layer++){
+ // System.out.println("Layer: " + (layer+1) + ": " + rawHitsPerLayer.get(volume)[layer]/totalEvents);
+ //}
+ //}
+
+ for(int layer = 0; layer < 12; layer++){
+
+ for(int module = 0; module < 4; module++){
+ System.out.println("Layer: " + layer +
+ " Module: " + module +
+ " Hits Per Layer: " + rawHitsPerLayer[layer][module]/totalEvents);
+ }
+ }
+ }
- private void printDebug(String debugMessage){
- System.out.println(this.getClass().getSimpleName() + ": " + debugMessage);
- }
-
+ private void printDebug(String debugMessage){
+ System.out.println(this.getClass().getSimpleName() + ": " + debugMessage);
+ }
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitCorrelations.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitCorrelations.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitCorrelations.java Wed Mar 9 11:43:24 2016
@@ -28,12 +28,12 @@
*/
public class SvtHitCorrelations extends Driver {
- // TODO: Add documentation
- static {
- hep.aida.jfree.AnalysisFactory.register();
- }
+ // TODO: Add documentation
+ static {
+ hep.aida.jfree.AnalysisFactory.register();
+ }
- // Plotting
+ // Plotting
ITree tree;
IHistogramFactory histogramFactory;
IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
@@ -59,46 +59,46 @@
boolean enableBottomAxialAxial = false;
boolean enableBottomAxialStereo = false;
- /**
- *
- */
- public void setEnableTopAxialAxial(boolean enableTopAxialAxial){
- this.enableTopAxialAxial = enableTopAxialAxial;
- }
-
- /**
- *
- */
- public void setEnableTopAxialStereo(boolean enableTopAxialStereo){
- this.enableTopAxialStereo = enableTopAxialStereo;
- }
-
- /**
- *
- */
- public void setEnableBottomAxialAxial(boolean enableBottomAxialAxial){
- this.enableBottomAxialAxial = enableBottomAxialAxial;
- }
-
- /**
- *
- */
- public void setEnableBottomAxialStereo(boolean enableBottomAxialStereo){
- this.enableBottomAxialStereo = enableBottomAxialStereo;
- }
-
- /**
- *
- */
- private int computePlotterRegion(HpsSiSensor firstSensor, HpsSiSensor secondSensor) {
- return (this.getLayerNumber(firstSensor) - 1) + (this.getLayerNumber(secondSensor) - 1)*6;
- }
-
- protected void detectorChanged(Detector detector){
-
+ /**
+ *
+ */
+ public void setEnableTopAxialAxial(boolean enableTopAxialAxial){
+ this.enableTopAxialAxial = enableTopAxialAxial;
+ }
+
+ /**
+ *
+ */
+ public void setEnableTopAxialStereo(boolean enableTopAxialStereo){
+ this.enableTopAxialStereo = enableTopAxialStereo;
+ }
+
+ /**
+ *
+ */
+ public void setEnableBottomAxialAxial(boolean enableBottomAxialAxial){
+ this.enableBottomAxialAxial = enableBottomAxialAxial;
+ }
+
+ /**
+ *
+ */
+ public void setEnableBottomAxialStereo(boolean enableBottomAxialStereo){
+ this.enableBottomAxialStereo = enableBottomAxialStereo;
+ }
+
+ /**
+ *
+ */
+ private int computePlotterRegion(HpsSiSensor firstSensor, HpsSiSensor secondSensor) {
+ return (this.getLayerNumber(firstSensor) - 1) + (this.getLayerNumber(secondSensor) - 1)*6;
+ }
+
+ protected void detectorChanged(Detector detector){
+
tree = IAnalysisFactory.create().createTreeFactory().create();
histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree);
-
+
sensors = detector.getSubdetector(SUBDETECTOR_NAME).getDetectorElement().findDescendants(HpsSiSensor.class);
if (sensors.size() == 0) {
@@ -178,55 +178,55 @@
}
for (IPlotter plotter : plotters.values()) plotter.show();
- }
-
- public void process(EventHeader event){
-
+ }
+
+ public void process(EventHeader event){
+
if (runNumber == -1) runNumber = event.getRunNumber();
-
- if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) return;
-
- List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
-
- String plotName = "";
- for(RawTrackerHit firstRawHit : rawHits){
-
- HpsSiSensor firstSensor = (HpsSiSensor) firstRawHit.getDetectorElement();
- int firstChannel = firstRawHit.getIdentifierFieldValue("strip");
-
- for(RawTrackerHit secondRawHit : rawHits){
-
- HpsSiSensor secondSensor = (HpsSiSensor) secondRawHit.getDetectorElement();
- int secondChannel = secondRawHit.getIdentifierFieldValue("strip");
-
- if(firstSensor.isTopLayer() && secondSensor.isTopLayer()){
- if(enableTopAxialAxial && firstSensor.isAxial() && secondSensor.isAxial()){
-
- plotName = "Top Axial Layer " + this.getLayerNumber(firstSensor)
- + " vs Top Axial Layer " + this.getLayerNumber(secondSensor);
- topAxialAxialPlots.get(plotName).fill(firstChannel, secondChannel);
- } else if (enableTopAxialStereo && firstSensor.isAxial() && secondSensor.isStereo()) {
-
- plotName = "Top Axial Layer " + this.getLayerNumber(firstSensor)
- + " vs Top Stereo Layer " + this.getLayerNumber(secondSensor);
- topAxialStereoPlots.get(plotName).fill(firstChannel, secondChannel);
- }
- } else if (firstSensor.isBottomLayer() && secondSensor.isBottomLayer()) {
- if(enableBottomAxialAxial && firstSensor.isAxial() && secondSensor.isAxial()){
-
- plotName = "Bottom Axial Layer " + this.getLayerNumber(firstSensor)
- + " vs Bottom Axial Layer " + this.getLayerNumber(secondSensor);
- bottomAxialAxialPlots.get(plotName).fill(firstChannel, secondChannel);
- } else if (enableBottomAxialStereo && firstSensor.isAxial() && secondSensor.isStereo()) {
-
- plotName = "Bottom Axial Layer " + this.getLayerNumber(firstSensor)
- + " vs Bottom Stereo Layer " + this.getLayerNumber(secondSensor);
- bottomAxialStereoPlots.get(plotName).fill(firstChannel, secondChannel);
- }
- }
- }
- }
- }
+
+ if(!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) return;
+
+ List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+
+ String plotName = "";
+ for(RawTrackerHit firstRawHit : rawHits){
+
+ HpsSiSensor firstSensor = (HpsSiSensor) firstRawHit.getDetectorElement();
+ int firstChannel = firstRawHit.getIdentifierFieldValue("strip");
+
+ for(RawTrackerHit secondRawHit : rawHits){
+
+ HpsSiSensor secondSensor = (HpsSiSensor) secondRawHit.getDetectorElement();
+ int secondChannel = secondRawHit.getIdentifierFieldValue("strip");
+
+ if(firstSensor.isTopLayer() && secondSensor.isTopLayer()){
+ if(enableTopAxialAxial && firstSensor.isAxial() && secondSensor.isAxial()){
+
+ plotName = "Top Axial Layer " + this.getLayerNumber(firstSensor)
+ + " vs Top Axial Layer " + this.getLayerNumber(secondSensor);
+ topAxialAxialPlots.get(plotName).fill(firstChannel, secondChannel);
+ } else if (enableTopAxialStereo && firstSensor.isAxial() && secondSensor.isStereo()) {
+
+ plotName = "Top Axial Layer " + this.getLayerNumber(firstSensor)
+ + " vs Top Stereo Layer " + this.getLayerNumber(secondSensor);
+ topAxialStereoPlots.get(plotName).fill(firstChannel, secondChannel);
+ }
+ } else if (firstSensor.isBottomLayer() && secondSensor.isBottomLayer()) {
+ if(enableBottomAxialAxial && firstSensor.isAxial() && secondSensor.isAxial()){
+
+ plotName = "Bottom Axial Layer " + this.getLayerNumber(firstSensor)
+ + " vs Bottom Axial Layer " + this.getLayerNumber(secondSensor);
+ bottomAxialAxialPlots.get(plotName).fill(firstChannel, secondChannel);
+ } else if (enableBottomAxialStereo && firstSensor.isAxial() && secondSensor.isStereo()) {
+
+ plotName = "Bottom Axial Layer " + this.getLayerNumber(firstSensor)
+ + " vs Bottom Stereo Layer " + this.getLayerNumber(secondSensor);
+ bottomAxialStereoPlots.get(plotName).fill(firstChannel, secondChannel);
+ }
+ }
+ }
+ }
+ }
public void endOfData() {
@@ -240,12 +240,12 @@
e.printStackTrace();
}
}
-
-
- private int getLayerNumber(HpsSiSensor sensor) {
- return (int) Math.ceil(((double) sensor.getLayerNumber())/2);
- }
-
+
+
+ private int getLayerNumber(HpsSiSensor sensor) {
+ return (int) Math.ceil(((double) sensor.getLayerNumber())/2);
+ }
+
IPlotterStyle createStyle(String xAxisTitle, String yAxisTitle) {
// Create a default style
@@ -279,5 +279,5 @@
return style;
}
-
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtQA.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtQA.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtQA.java Wed Mar 9 11:43:24 2016
@@ -54,7 +54,7 @@
int channelNumber = 0;
int plotterIndex = 0;
- int apvNumber = 0;
+ int apvNumber = 0;
double totalNumberEvents = 0;
double totalNumberOfRawHitEvents = 0;
double[] totalTopSamples = new double[6];
@@ -210,7 +210,7 @@
*
*/
public void setEnableTotalNumberOfHitsPlots(boolean enableTotalNumberOfHitsPlots){
- this.enableTotalNumberOfHitsPlots = enableTotalNumberOfHitsPlots;
+ this.enableTotalNumberOfHitsPlots = enableTotalNumberOfHitsPlots;
}
/**
@@ -391,13 +391,13 @@
}
if(enableTotalNumberOfHitsPlots){
- title = "Total Number of RawTrackerHits";
- plotters.add(PlotUtils.setupPlotter(title, 0, 0));
- plotters.get(plotterIndex).style().statisticsBoxStyle().setVisible(true);
- histo1D = aida.histogram1D(title, 100, 0, 75);
- histos1D.add(histo1D);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), title, 0, "Number of RawTrackerHits", histo1D);
- plotterIndex++;
+ title = "Total Number of RawTrackerHits";
+ plotters.add(PlotUtils.setupPlotter(title, 0, 0));
+ plotters.get(plotterIndex).style().statisticsBoxStyle().setVisible(true);
+ histo1D = aida.histogram1D(title, 100, 0, 75);
+ histos1D.add(histo1D);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), title, 0, "Number of RawTrackerHits", histo1D);
+ plotterIndex++;
}
for(IPlotter plotter : plotters) plotter.show();
@@ -488,7 +488,7 @@
aida.histogram1D(title).fill(sample);
}
title = "Shaper Signal Amplitude";
- aida.histogram1D(title).fill(fit.getAmp());
+ aida.histogram1D(title).fill(fit.getAmp());
System.out.println("Amplitude: " + fit.getAmp());
title="t0";
aida.histogram1D(title).fill(fit.getT0());
@@ -595,9 +595,9 @@
topSamples[sampleN-1] += samples[sampleN-1] - sensor.getPedestal(channel, sampleN-1);
}
else{
- aida.histogram2D("APV Sample Number vs Sample Amplitude - Bottom").fill(sampleN, samples[sampleN-1] - sensor.getPedestal(channel, sampleN-1));
- totalBottomSamples[sampleN-1]++;
- bottomSamples[sampleN-1] += samples[sampleN - 1] - sensor.getPedestal(channel, sampleN-1);
+ aida.histogram2D("APV Sample Number vs Sample Amplitude - Bottom").fill(sampleN, samples[sampleN-1] - sensor.getPedestal(channel, sampleN-1));
+ totalBottomSamples[sampleN-1]++;
+ bottomSamples[sampleN-1] += samples[sampleN - 1] - sensor.getPedestal(channel, sampleN-1);
}
}
}
@@ -659,7 +659,7 @@
int channel = ((RawTrackerHit) hts.rawhits().get(0)).getIdentifierFieldValue("strip");
if(sensorName.equals("all")){
- aida.histogram2D(sensor.getName() + " - t0 Resolution vs Channel #").fill(channel, meanT0 - hts.time());
+ aida.histogram2D(sensor.getName() + " - t0 Resolution vs Channel #").fill(channel, meanT0 - hts.time());
} else {
if(sensor.getName().equals(sensorName)){
aida.histogram1D(sensorName + " - Hit Time Resolution").fill(meanT0 - hts.time());
@@ -675,67 +675,67 @@
@Override
public void endOfData(){
- String title;
-
-
-
+ String title;
+
+
+
String plotName;
- if(enableOccupancy){
- for(HpsSiSensor sensor : sensors){
- title = sensor.getName() + " - Occupancy";
- // Scale the hits per channel by the number of events
- aida.histogram1D(title).scale(1/totalNumberEvents);
-
- // Write the occupancies to a file
- if(sensor.isTopLayer()){
- plotName = outputFile + "_top_";
- } else {
- plotName = outputFile + "_bottom_";
- }
-
- if(sensor.getLayerNumber() < 10){
- plotName += "0" + sensor.getLayerNumber() + ".dat";
- } else {
- plotName += sensor.getLayerNumber() + ".dat";
- }
-
- // Open the output files stream
- if(plotName != null){
- try{
- output = new BufferedWriter(new FileWriter(plotName));
- for(int channel = 0; channel < 640; channel++){
- output.write(channel + " " + aida.histogram1D(title).binHeight(channel) + "\n");
- }
- output.close();
- } catch(Exception e) {
- System.out.println(this.getClass().getSimpleName() + " :Error! " + e.getMessage());
- }
- }
- }
- }
-
- if(enableT0Plots){
- int bins = aida.histogram1D(sensorName + " - Hit Time Resolution").axis().bins();
- for(int bin = 0; bin < bins; bin++){
- System.out.println(bin + " " + aida.histogram1D(sensorName + " - Hit Time Resolution").binHeight(bin));
- }
- }
-
-
- /*
+ if(enableOccupancy){
for(HpsSiSensor sensor : sensors){
- if(outputFile != null && sensorName.equals(sensor.getName())){
- try{
- for(int channel = 0; channel < 639; channel++){
- output.write(channel + " " + this.getOccupancy(sensor, channel) + "\n");
- }
- output.close();
- } catch(IOException e){
- System.out.println(this.getClass().getSimpleName() + ": Error! " + e.getMessage());
- }
- }
-
- System.out.println("%===================================================================%");
+ title = sensor.getName() + " - Occupancy";
+ // Scale the hits per channel by the number of events
+ aida.histogram1D(title).scale(1/totalNumberEvents);
+
+ // Write the occupancies to a file
+ if(sensor.isTopLayer()){
+ plotName = outputFile + "_top_";
+ } else {
+ plotName = outputFile + "_bottom_";
+ }
+
+ if(sensor.getLayerNumber() < 10){
+ plotName += "0" + sensor.getLayerNumber() + ".dat";
+ } else {
+ plotName += sensor.getLayerNumber() + ".dat";
+ }
+
+ // Open the output files stream
+ if(plotName != null){
+ try{
+ output = new BufferedWriter(new FileWriter(plotName));
+ for(int channel = 0; channel < 640; channel++){
+ output.write(channel + " " + aida.histogram1D(title).binHeight(channel) + "\n");
+ }
+ output.close();
+ } catch(Exception e) {
+ System.out.println(this.getClass().getSimpleName() + " :Error! " + e.getMessage());
+ }
+ }
+ }
+ }
+
+ if(enableT0Plots){
+ int bins = aida.histogram1D(sensorName + " - Hit Time Resolution").axis().bins();
+ for(int bin = 0; bin < bins; bin++){
+ System.out.println(bin + " " + aida.histogram1D(sensorName + " - Hit Time Resolution").binHeight(bin));
+ }
+ }
+
+
+ /*
+ for(HpsSiSensor sensor : sensors){
+ if(outputFile != null && sensorName.equals(sensor.getName())){
+ try{
+ for(int channel = 0; channel < 639; channel++){
+ output.write(channel + " " + this.getOccupancy(sensor, channel) + "\n");
+ }
+ output.close();
+ } catch(IOException e){
+ System.out.println(this.getClass().getSimpleName() + ": Error! " + e.getMessage());
+ }
+ }
+
+ System.out.println("%===================================================================%");
System.out.println(sensor.getName() + " Bad Channels");
System.out.println("%===================================================================%");
for(int index = 0; index < 640; index++){
@@ -769,21 +769,21 @@
}
if(enableSamples){
- double sigma = 0;
- double[] topMean = new double[6];
- double[] bottomMean = new double[6];
-
+ double sigma = 0;
+ double[] topMean = new double[6];
+ double[] bottomMean = new double[6];
+
System.out.println("%===================================================================% \n");
- for(int index = 0; index < topSamples.length; index++){
- topMean[index] = topSamples[index]/totalTopSamples[index];
- System.out.println("Top sample " + index + " mean: " + topMean[index]);
- }
-
+ for(int index = 0; index < topSamples.length; index++){
+ topMean[index] = topSamples[index]/totalTopSamples[index];
+ System.out.println("Top sample " + index + " mean: " + topMean[index]);
+ }
+
System.out.println("\n%===================================================================% \n");
- for(int index = 0; index < bottomSamples.length; index++){
- bottomMean[index] = bottomSamples[index]/totalBottomSamples[index];
- System.out.println("Bottom sample " + index + " mean: " + bottomMean[index]);
- }
+ for(int index = 0; index < bottomSamples.length; index++){
+ bottomMean[index] = bottomSamples[index]/totalBottomSamples[index];
+ System.out.println("Bottom sample " + index + " mean: " + bottomMean[index]);
+ }
System.out.println("\n%===================================================================% \n");
}
}
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java Wed Mar 9 11:43:24 2016
@@ -46,8 +46,8 @@
IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
private Map<String, IHistogram1D> trackPlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> clusterChargePlots = new HashMap<String, IHistogram1D>();
- private Map<String, IHistogram1D> clusterSizePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> clusterChargePlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> clusterSizePlots = new HashMap<String, IHistogram1D>();
private List<HpsSiSensor> sensors;
private Map<RawTrackerHit, LCRelation> fittedRawTrackerHitMap
@@ -64,67 +64,67 @@
private int runNumber = -1;
- int npositive = 0;
- int nnegative = 0;
- double ntracks = 0;
- double ntracksTop = 0;
- double ntracksBottom = 0;
- double nTwoTracks = 0;
- double nevents = 0;
-
- double d0Cut = -9999;
-
- // Flags
- boolean electronCut = false;
- boolean positronCut = false;
-
+ int npositive = 0;
+ int nnegative = 0;
+ double ntracks = 0;
+ double ntracksTop = 0;
+ double ntracksBottom = 0;
+ double nTwoTracks = 0;
+ double nevents = 0;
+
+ double d0Cut = -9999;
+
+ // Flags
+ boolean electronCut = false;
+ boolean positronCut = false;
+
/**
* Default Constructor
*/
- public SvtTrackAnalysis(){
- }
-
- public void setEnableElectronCut(boolean electronCut) {
- this.electronCut = electronCut;
- }
-
- public void setEnablePositronCut(boolean positronCut) {
- this.positronCut = positronCut;
- }
-
- public void setD0Cut(double d0Cut) {
- this.d0Cut = d0Cut;
- }
-
- private int computePlotterRegion(HpsSiSensor sensor) {
-
- if (sensor.getLayerNumber() < 7) {
- if (sensor.isTopLayer()) {
- return 6*(sensor.getLayerNumber() - 1);
- } else {
- return 6*(sensor.getLayerNumber() - 1) + 1;
- }
- } else {
-
- if (sensor.isTopLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6*(sensor.getLayerNumber() - 7) + 2;
- } else {
- return 6*(sensor.getLayerNumber() - 7) + 3;
- }
- } else if (sensor.isBottomLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6*(sensor.getLayerNumber() - 7) + 4;
- } else {
- return 6*(sensor.getLayerNumber() - 7) + 5;
- }
- }
- }
- return -1;
- }
-
- protected void detectorChanged(Detector detector){
-
+ public SvtTrackAnalysis(){
+ }
+
+ public void setEnableElectronCut(boolean electronCut) {
+ this.electronCut = electronCut;
+ }
+
+ public void setEnablePositronCut(boolean positronCut) {
+ this.positronCut = positronCut;
+ }
+
+ public void setD0Cut(double d0Cut) {
+ this.d0Cut = d0Cut;
+ }
+
+ private int computePlotterRegion(HpsSiSensor sensor) {
+
+ if (sensor.getLayerNumber() < 7) {
+ if (sensor.isTopLayer()) {
+ return 6*(sensor.getLayerNumber() - 1);
+ } else {
+ return 6*(sensor.getLayerNumber() - 1) + 1;
+ }
+ } else {
+
+ if (sensor.isTopLayer()) {
+ if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+ return 6*(sensor.getLayerNumber() - 7) + 2;
+ } else {
+ return 6*(sensor.getLayerNumber() - 7) + 3;
+ }
+ } else if (sensor.isBottomLayer()) {
+ if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+ return 6*(sensor.getLayerNumber() - 7) + 4;
+ } else {
+ return 6*(sensor.getLayerNumber() - 7) + 5;
+ }
+ }
+ }
+ return -1;
+ }
+
+ protected void detectorChanged(Detector detector){
+
tree = IAnalysisFactory.create().createTreeFactory().create();
histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree);
@@ -195,66 +195,66 @@
}
- //--- Track Extrapolation ---//
- //---------------------------//
- /*plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal"));
- plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal", 200, -350, 350, 200, -100, 100));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ //--- Track Extrapolation ---//
+ //---------------------------//
+ /*plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal"));
+ plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal", 200, -350, 350, 200, -100, 100));
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style();
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Harp"));
plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Harp", 200, -200, 200, 100, -50, 50));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
- nPlotters++;
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal: curvature < 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal: curvature < 0",200, -350, 350, 200, -100, 100));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
- nPlotters++;
-
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+ nPlotters++;
+
plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Harp: curvature < 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Harp: curvature < 0", 200, -200, 200, 100, -50, 50));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
- nPlotters++;
-
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+ nPlotters++;
+
plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal: curvature > 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal: curvature > 0", 200, -350, 350, 200, -100, 100));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
- nPlotters++;
-
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+ nPlotters++;
+
plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Harp: curvature > 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Harp: curvature > 0", 200, -200, 200, 100, -50, 50));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
- nPlotters++;
-
- plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal: Two Tracks"));
- plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal: Two Tracks", 200, -350, 350, 200, -100, 100));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+ nPlotters++;
+
+ plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal: Two Tracks"));
+ plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal: Two Tracks", 200, -350, 350, 200, -100, 100));
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style();
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Harp: Two Tracks"));
plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Harp: Two Tracks", 200, -200, 200, 100, -50, 50));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
- nPlotters++;
-
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+ nPlotters++;
+
//--- Momentum ---//
//----------------//
@@ -262,99 +262,99 @@
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Px", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Py"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Py", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Pz"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Pz", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
-
+ nPlotters++;
+
plotters.add(aida.analysisFactory().createPlotterFactory().create("Px: C > 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Px: C > 0", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Py: C > 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Py: C > 0", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Pz: C > 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Pz: C > 0", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
-
+ nPlotters++;
+
plotters.add(aida.analysisFactory().createPlotterFactory().create("Px: C < 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Px: C < 0", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Py: C < 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Py: C < 0", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("Pz: C < 0"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Pz: C < 0", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
-
+ nPlotters++;
+
plotters.add(aida.analysisFactory().createPlotterFactory().create("Px: Two Tracks"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("Px: Two Tracks", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
+ nPlotters++;
plotters.add(aida.analysisFactory().createPlotterFactory().create("E over P"));
plotters.get(nPlotters).region(0).plot(aida.histogram1D("E over P", 100, 0, 5));
plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
plotters.get(nPlotters).style().dataStyle().errorBarStyle().setVisible(false);
- nPlotters++;
-
- plotters.add(aida.analysisFactory().createPlotterFactory().create("E versus P"));
- plotters.get(nPlotters).region(0).plot(aida.histogram2D("E versus P", 100, 0, 1500, 100, 0, 4000));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
- nPlotters++;
+ nPlotters++;
+
+ plotters.add(aida.analysisFactory().createPlotterFactory().create("E versus P"));
+ plotters.get(nPlotters).region(0).plot(aida.histogram2D("E versus P", 100, 0, 1500, 100, 0, 4000));
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+ nPlotters++;
//--- Cluster Matching ---//
//------------------------//
plotters.add(aida.analysisFactory().createPlotterFactory().create("XY Difference between Ecal Cluster and Track Position"));
plotters.get(nPlotters).region(0).plot(aida.histogram2D("XY Difference between Ecal Cluster and Track Position", 200, -200, 200, 100, -50, 50));
- plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
- plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
- nPlotters++;
- */
- for (IPlotter plotter : plotters.values()) {
- plotter.show();
- }
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
+ plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+ plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+ nPlotters++;
+ */
+ for (IPlotter plotter : plotters.values()) {
+ plotter.show();
+ }
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
public void process(EventHeader event){
- nevents++;
-
- // Get the run number from the event
+ nevents++;
+
+ // Get the run number from the event
if (runNumber == -1) runNumber = event.getRunNumber();
-
+
// If the event doesn't have any tracks, skip it
- if(!event.hasCollection(Track.class, trackCollectionName)) return;
-
+ if(!event.hasCollection(Track.class, trackCollectionName)) return;
+
// Get the collection of tracks from the event
List<Track> tracks = event.get(Track.class, trackCollectionName);
@@ -386,17 +386,17 @@
trackPlots.get("Number of tracks").fill(tracks.size());
// Loop over all of the tracks in the event
- for(Track track : tracks){
-
- if (TrackUtils.getR(track) < 0 && electronCut) continue;
-
- if (TrackUtils.getR(track) > 0 && positronCut) continue;
-
- if (d0Cut != -9999 && Math.abs(TrackUtils.getDoca(track)) < d0Cut) continue;
-
- trackPlots.get("Track charge").fill(TrackUtils.getR(track), 1);
-
- // Fill the track parameter plots
+ for(Track track : tracks){
+
+ if (TrackUtils.getR(track) < 0 && electronCut) continue;
+
+ if (TrackUtils.getR(track) > 0 && positronCut) continue;
+
+ if (d0Cut != -9999 && Math.abs(TrackUtils.getDoca(track)) < d0Cut) continue;
+
+ trackPlots.get("Track charge").fill(TrackUtils.getR(track), 1);
+
+ // Fill the track parameter plots
trackPlots.get("doca").fill(TrackUtils.getDoca(track));
trackPlots.get("z0").fill(TrackUtils.getZ0(track));
trackPlots.get("sin(phi0)").fill(TrackUtils.getPhi0(track));
@@ -444,8 +444,8 @@
}
}
}
-
- public void endOfData() {
+
+ public void endOfData() {
String rootFile = "run" + runNumber + "_track_analysis.root";
RootFileStore store = new RootFileStore(rootFile);
@@ -473,7 +473,7 @@
fittedRawTrackerHitMap.put(FittedRawTrackerHit.getRawTrackerHit(fittedHit), fittedHit);
}
}
-
+
/**
*
* @param rawHit
@@ -489,101 +489,101 @@
/*
ntracks++;
- Hep3Vector positionEcal = TrackUtils.getTrackPositionAtEcal(track);
- System.out.println("Position at Ecal: " + positionEcal);
- Hep3Vector positionConverter = TrackUtils.extrapolateTrack(track,-700);
-
- aida.histogram2D("Track Position at Ecal").fill(positionEcal.y(), positionEcal.z());
- aida.histogram2D("Track Position at Harp").fill(positionConverter.y(), positionConverter.z());
-
- if(positionEcal.z() > 0 ) ntracksTop++;
- else if(positionEcal.z() < 0) ntracksBottom++;
+ Hep3Vector positionEcal = TrackUtils.getTrackPositionAtEcal(track);
+ System.out.println("Position at Ecal: " + positionEcal);
+ Hep3Vector positionConverter = TrackUtils.extrapolateTrack(track,-700);
+
+ aida.histogram2D("Track Position at Ecal").fill(positionEcal.y(), positionEcal.z());
+ aida.histogram2D("Track Position at Harp").fill(positionConverter.y(), positionConverter.z());
+
+ if(positionEcal.z() > 0 ) ntracksTop++;
+ else if(positionEcal.z() < 0) ntracksBottom++;
*/
-
-
+
+
/*
- aida.histogram1D("Px").fill(track.getTrackStates().get(0).getMomentum()[0]);
- aida.histogram1D("Py").fill(track.getTrackStates().get(0).getMomentum()[1]);
- aida.histogram1D("Pz").fill(track.getTrackStates().get(0).getMomentum()[2]);
- aida.histogram1D("ChiSquared").fill(track.getChi2());
-
- if(Math.signum(TrackUtils.getR(track)) < 0){
- aida.histogram2D("Track Position at Ecal: curvature < 0").fill(positionEcal.y(), positionEcal.z());
- aida.histogram2D("Track Position at Harp: curvature < 0").fill(positionConverter.y(), positionConverter.z());
- aida.histogram1D("Px: C < 0").fill(track.getTrackStates().get(0).getMomentum()[0]);
- aida.histogram1D("Py: C < 0").fill(track.getTrackStates().get(0).getMomentum()[1]);
- aida.histogram1D("Pz: C < 0").fill(track.getTrackStates().get(0).getMomentum()[2]);
- nnegative++;
- } else if(Math.signum(TrackUtils.getR(track)) > 0){
- aida.histogram2D("Track Position at Ecal: curvature > 0").fill(positionEcal.y(), positionEcal.z());
- aida.histogram2D("Track Position at Harp: curvature > 0").fill(positionConverter.y(), positionConverter.z());
- aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[0]);
- aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[1]);
- aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[2]);
- npositive++;
- }
-
- if(tracks.size() > 1){
- aida.histogram2D("Track Position at Ecal: Two Tracks").fill(positionEcal.y(), positionEcal.z());
- aida.histogram2D("Track Position at Harp: Two Tracks").fill(positionConverter.y(), positionConverter.z());
- aida.histogram1D("Px: Two Tracks").fill(track.getTrackStates().get(0).getMomentum()[0]);
- if(tracks.size() == 2) nTwoTracks++;
- }
-
- trackToEcalPosition.put(positionEcal, track);
- ecalPos.add(positionEcal);
- }
-
- if(!event.hasCollection(Cluster.class, "EcalClusters")) return;
- List<Cluster> clusters = event.get(Cluster.class, "EcalClusters");
-
-
- for(Hep3Vector ecalP : ecalPos){
- double xdiff = 1000;
- double ydiff = 1000;
- for(Cluster cluster : clusters){
- double xd = ecalP.y() - cluster.getPosition()[0];
- double yd = ecalP.z() - cluster.getPosition()[1];
- if(yd < ydiff){
- xdiff = xd;
- ydiff = yd;
- trackToCluster.put(trackToEcalPosition.get(ecalP),cluster);
- }
- }
- clusters.remove(trackToCluster.get(trackToEcalPosition.get(ecalP)));
- aida.histogram2D("XY Difference between Ecal Cluster and Track Position").fill(xdiff, ydiff);
- }
-
- for(Map.Entry<Track, Cluster> entry : trackToCluster.entrySet()){
- double Energy = entry.getValue().getEnergy();
- Track track = entry.getKey();
- double pTotal = Math.sqrt(track.getTrackStates().get(0).getMomentum()[0]*track.getTrackStates().get(0).getMomentum()[0] + track.getTrackStates().get(0).getMomentum()[1]*track.getTrackStates().get(0).getMomentum()[1] + track.getTrackStates().get(0).getMomentum()[2]*track.getTrackStates().get(0).getMomentum()[2]);
-
- double ep = Energy/(pTotal*1000);
-
- System.out.println("Energy: " + Energy + "P: " + pTotal + " E over P: " + ep);
-
- aida.histogram1D("E over P").fill(ep);
- aida.histogram2D("E versus P").fill(Energy, pTotal*1000);
- }
-
- for(Cluster cluster : clusters){
- double[] clusterPosition = cluster.getPosition();
-
- System.out.println("Cluster Position: [" + clusterPosition[0] + ", " + clusterPosition[1] + ", " + clusterPosition[2]+ "]");
- }
-
- double ratio = nnegative/npositive;
- System.out.println("Ratio of Negative to Position Tracks: " + ratio);
-
- double tracksRatio = ntracks/nevents;
- double tracksTopRatio = ntracksTop/nevents;
- double tracksBottomRatio = ntracksBottom/nevents;
- double twoTrackRatio = nTwoTracks/nevents;
- System.out.println("Number of tracks per event: " + tracksRatio);
- System.out.println("Number of top tracks per event: " + tracksTopRatio);
- System.out.println("Number of bottom tracks per event: " + tracksBottomRatio);
- System.out.println("Number of two track events: " + twoTrackRatio);
- }*/
-
-
+ aida.histogram1D("Px").fill(track.getTrackStates().get(0).getMomentum()[0]);
+ aida.histogram1D("Py").fill(track.getTrackStates().get(0).getMomentum()[1]);
+ aida.histogram1D("Pz").fill(track.getTrackStates().get(0).getMomentum()[2]);
+ aida.histogram1D("ChiSquared").fill(track.getChi2());
+
+ if(Math.signum(TrackUtils.getR(track)) < 0){
+ aida.histogram2D("Track Position at Ecal: curvature < 0").fill(positionEcal.y(), positionEcal.z());
+ aida.histogram2D("Track Position at Harp: curvature < 0").fill(positionConverter.y(), positionConverter.z());
+ aida.histogram1D("Px: C < 0").fill(track.getTrackStates().get(0).getMomentum()[0]);
+ aida.histogram1D("Py: C < 0").fill(track.getTrackStates().get(0).getMomentum()[1]);
+ aida.histogram1D("Pz: C < 0").fill(track.getTrackStates().get(0).getMomentum()[2]);
+ nnegative++;
+ } else if(Math.signum(TrackUtils.getR(track)) > 0){
+ aida.histogram2D("Track Position at Ecal: curvature > 0").fill(positionEcal.y(), positionEcal.z());
+ aida.histogram2D("Track Position at Harp: curvature > 0").fill(positionConverter.y(), positionConverter.z());
+ aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[0]);
+ aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[1]);
+ aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[2]);
+ npositive++;
+ }
+
+ if(tracks.size() > 1){
+ aida.histogram2D("Track Position at Ecal: Two Tracks").fill(positionEcal.y(), positionEcal.z());
+ aida.histogram2D("Track Position at Harp: Two Tracks").fill(positionConverter.y(), positionConverter.z());
+ aida.histogram1D("Px: Two Tracks").fill(track.getTrackStates().get(0).getMomentum()[0]);
+ if(tracks.size() == 2) nTwoTracks++;
+ }
+
+ trackToEcalPosition.put(positionEcal, track);
+ ecalPos.add(positionEcal);
+ }
+
+ if(!event.hasCollection(Cluster.class, "EcalClusters")) return;
+ List<Cluster> clusters = event.get(Cluster.class, "EcalClusters");
+
+
+ for(Hep3Vector ecalP : ecalPos){
+ double xdiff = 1000;
+ double ydiff = 1000;
+ for(Cluster cluster : clusters){
+ double xd = ecalP.y() - cluster.getPosition()[0];
+ double yd = ecalP.z() - cluster.getPosition()[1];
+ if(yd < ydiff){
+ xdiff = xd;
+ ydiff = yd;
+ trackToCluster.put(trackToEcalPosition.get(ecalP),cluster);
+ }
+ }
+ clusters.remove(trackToCluster.get(trackToEcalPosition.get(ecalP)));
+ aida.histogram2D("XY Difference between Ecal Cluster and Track Position").fill(xdiff, ydiff);
+ }
+
+ for(Map.Entry<Track, Cluster> entry : trackToCluster.entrySet()){
+ double Energy = entry.getValue().getEnergy();
+ Track track = entry.getKey();
+ double pTotal = Math.sqrt(track.getTrackStates().get(0).getMomentum()[0]*track.getTrackStates().get(0).getMomentum()[0] + track.getTrackStates().get(0).getMomentum()[1]*track.getTrackStates().get(0).getMomentum()[1] + track.getTrackStates().get(0).getMomentum()[2]*track.getTrackStates().get(0).getMomentum()[2]);
+
+ double ep = Energy/(pTotal*1000);
+
+ System.out.println("Energy: " + Energy + "P: " + pTotal + " E over P: " + ep);
+
+ aida.histogram1D("E over P").fill(ep);
+ aida.histogram2D("E versus P").fill(Energy, pTotal*1000);
+ }
+
+ for(Cluster cluster : clusters){
+ double[] clusterPosition = cluster.getPosition();
+
+ System.out.println("Cluster Position: [" + clusterPosition[0] + ", " + clusterPosition[1] + ", " + clusterPosition[2]+ "]");
+ }
+
+ double ratio = nnegative/npositive;
+ System.out.println("Ratio of Negative to Position Tracks: " + ratio);
+
+ double tracksRatio = ntracks/nevents;
+ double tracksTopRatio = ntracksTop/nevents;
+ double tracksBottomRatio = ntracksBottom/nevents;
+ double twoTrackRatio = nTwoTracks/nevents;
+ System.out.println("Number of tracks per event: " + tracksRatio);
+ System.out.println("Number of top tracks per event: " + tracksTopRatio);
+ System.out.println("Number of bottom tracks per event: " + tracksBottomRatio);
+ System.out.println("Number of two track events: " + twoTrackRatio);
+ }*/
+
+
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackRecoEfficiency.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackRecoEfficiency.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackRecoEfficiency.java Wed Mar 9 11:43:24 2016
@@ -100,7 +100,7 @@
* Set the name of the file to output efficiency data to
*/
public void setEfficiencyOutputFile(String efficiencyOutputFile){
- this.efficiencyOutputFile = efficiencyOutputFile;
+ this.efficiencyOutputFile = efficiencyOutputFile;
}
/**
@@ -124,31 +124,31 @@
* @param message : debug message
*/
private void printDebug(String message){
- if(debug){
- System.out.println(this.getClass().getSimpleName() + ": " + message);
- }
+ if(debug){
+ System.out.println(this.getClass().getSimpleName() + ": " + message);
+ }
}
/**
*
*/
protected void detectorChanged(Detector detector){
- super.detectorChanged(detector);
-
- sensors = detector.getSubdetector("Tracker").getDetectorElement().findDescendants(HpsSiSensor.class);
-
+ super.detectorChanged(detector);
+
+ sensors = detector.getSubdetector("Tracker").getDetectorElement().findDescendants(HpsSiSensor.class);
+
// setup AIDA
aida = AIDA.defaultInstance();
aida.tree().cd("/");
// Open the output file stream
if(efficiencyOutputFile != null && momentumOutputFile != null){
- try{
- efficiencyOutput = new BufferedWriter(new FileWriter(efficiencyOutputFile));
+ try{
+ efficiencyOutput = new BufferedWriter(new FileWriter(efficiencyOutputFile));
momentumOutput = new BufferedWriter(new FileWriter(momentumOutputFile));
- } catch(Exception e){
- System.out.println(this.getClass().getSimpleName() + ": Error! " + e.getMessage());
- }
+ } catch(Exception e){
+ System.out.println(this.getClass().getSimpleName() + ": Error! " + e.getMessage());
+ }
}
// Get the total number of SVT layers
@@ -164,28 +164,28 @@
}
if(trackingEfficiencyPlots){
- plotters.add(PlotUtils.setupPlotter("Track Momentum", 0, 0));
- histo1D.add(aida.histogram1D("Momentum - Reconstructed Tracks", 14, 0, 5.6));
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "Reconstructed Tracks", 0, "Momentum [GeV]", histo1D.get(histo1DIndex));
+ plotters.add(PlotUtils.setupPlotter("Track Momentum", 0, 0));
+ histo1D.add(aida.histogram1D("Momentum - Reconstructed Tracks", 14, 0, 5.6));
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "Reconstructed Tracks", 0, "Momentum [GeV]", histo1D.get(histo1DIndex));
histo1DIndex++;
histo1D.add(aida.histogram1D("Momentum - Findable Tracks", 14, 0, 5.6));
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "Findable Tracks", 0, "Momentum [GeV]", histo1D.get(histo1DIndex));
- plotterIndex++;
- histo1DIndex++;
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "Findable Tracks", 0, "Momentum [GeV]", histo1D.get(histo1DIndex));
+ plotterIndex++;
+ histo1DIndex++;
}
for(IPlotter plotter : plotters){
- plotter.show();
+ plotter.show();
}
}
private String samplesToString(short[] samples){
- String sampleList = "[ ";
- for(short sample : samples){
- sampleList += Short.toString(sample) + ", ";
- }
- sampleList += "]";
- return sampleList;
+ String sampleList = "[ ";
+ for(short sample : samples){
+ sampleList += Short.toString(sample) + ", ";
+ }
+ sampleList += "]";
+ return sampleList;
}
/**
@@ -196,7 +196,7 @@
@Override
protected void process(EventHeader event){
- // For now, only look at events with a single track
+ // For now, only look at events with a single track
if(event.get(Track.class, trackCollectionName).size() > 1) return;
eventNumber++;
@@ -204,46 +204,46 @@
if(!event.hasCollection(SimTrackerHit.class, simTrackerHitCollectionName)) return;
List<SimTrackerHit> simTrackerHits = event.get(SimTrackerHit.class, simTrackerHitCollectionName);
this.printDebug("\nEvent " + eventNumber + " contains " + simTrackerHits.size() + " SimTrackerHits");
- // Loop through all SimTrackerHits and confirm that a corresponding RawTrackerHit was created
- for(SimTrackerHit simTrackHit : simTrackerHits){
-
- this.printDebug("SimTrackerHit Layer Number: " + simTrackHit.getLayerNumber());
- }
+ // Loop through all SimTrackerHits and confirm that a corresponding RawTrackerHit was created
+ for(SimTrackerHit simTrackHit : simTrackerHits){
+
+ this.printDebug("SimTrackerHit Layer Number: " + simTrackHit.getLayerNumber());
+ }
// Get the list of RawTrackerHits and add them to the sensor readout
List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
String volume;
for(RawTrackerHit rawHit : rawHits){
- HpsSiSensor sensor = (HpsSiSensor) rawHit.getDetectorElement();
- if(sensor.isTopLayer()){
- volume = "Top Volume ";
- } else {
- volume = "Bottom Volume ";
- }
- this.printDebug(volume + "RawTrackerHit Channel #: " + rawHit.getIdentifierFieldValue("strip") + " Layer Number: " + rawHit.getLayerNumber()
- + " Samples: " + samplesToString(rawHit.getADCValues()));
+ HpsSiSensor sensor = (HpsSiSensor) rawHit.getDetectorElement();
+ if(sensor.isTopLayer()){
+ volume = "Top Volume ";
+ } else {
+ volume = "Bottom Volume ";
+ }
+ this.printDebug(volume + "RawTrackerHit Channel #: " + rawHit.getIdentifierFieldValue("strip") + " Layer Number: " + rawHit.getLayerNumber()
+ + " Samples: " + samplesToString(rawHit.getADCValues()));
((HpsSiSensor) rawHit.getDetectorElement()).getReadout().addHit(rawHit);
}
if(event.hasCollection(SiTrackerHit.class, siTrackerHitCollectionName)){
- List<SiTrackerHit> hitlist = event.get(SiTrackerHit.class, siTrackerHitCollectionName);
- for(SiTrackerHit siTrackerHit : hitlist){
- this.printDebug("Cluster is comprised by the following raw hits:");
- for(RawTrackerHit rawHit : siTrackerHit.getRawHits()){
- this.printDebug("RawTrackerHit Channel #: " + rawHit.getIdentifierFieldValue("strip") + " Layer Number: " + rawHit.getLayerNumber());
- }
- }
+ List<SiTrackerHit> hitlist = event.get(SiTrackerHit.class, siTrackerHitCollectionName);
+ for(SiTrackerHit siTrackerHit : hitlist){
+ this.printDebug("Cluster is comprised by the following raw hits:");
+ for(RawTrackerHit rawHit : siTrackerHit.getRawHits()){
+ this.printDebug("RawTrackerHit Channel #: " + rawHit.getIdentifierFieldValue("strip") + " Layer Number: " + rawHit.getLayerNumber());
+ }
+ }
}
// Get the MC Particles associated with the SimTrackerHits
List<MCParticle> mcParticles = event.getMCParticles();
if(debug){
- String particleList = "[ ";
- for(MCParticle mcParticle : mcParticles){
- particleList += mcParticle.getPDGID() + ", ";
- }
- particleList += "]";
- this.printDebug("MC Particles: " + particleList);
+ String particleList = "[ ";
+ for(MCParticle mcParticle : mcParticles){
+ particleList += mcParticle.getPDGID() + ", ";
+ }
+ particleList += "]";
+ this.printDebug("MC Particles: " + particleList);
}
// Get the magnetic field
@@ -264,10 +264,10 @@
Set<SimTrackerHit> trackerHits = findable.getSimTrackerHits(mcParticle);
if(this.isSameSvtVolume(trackerHits)){
if(debug){
- this.printDebug("Track is findable");
- this.printDebug("MC particle momentum: " + mcParticle.getMomentum().toString());
- }
-
+ this.printDebug("Track is findable");
+ this.printDebug("MC particle momentum: " + mcParticle.getMomentum().toString());
+ }
+
findableTracks++;
trackIsFindable = true;
}
@@ -303,8 +303,8 @@
if(!mcParticles.isEmpty() && trackingEfficiencyPlots){
// If the list still contains MC Particles, a matching track wasn't found
- this.printDebug("No matching track found");
-
+ this.printDebug("No matching track found");
+
// Check that all stereoHits were correctly assigned to an MCParticle
for(MCParticle mcParticle : mcParticles){
@@ -326,7 +326,7 @@
// Determine if the MC particle passed through the top or bottom SVT volume
for(SimTrackerHit simHit : simHits){
- HpsSiSensor sensor = (HpsSiSensor) simHit.getDetectorElement();
+ HpsSiSensor sensor = (HpsSiSensor) simHit.getDetectorElement();
if(sensor.isTopLayer()){
this.printDebug("MC Particle passed through the top layer");
isTopTrack = true;
@@ -376,7 +376,7 @@
{
int volumeIndex = 0;
for(SimTrackerHit simTrackerHit : simTrackerHits){
- HpsSiSensor sensor = (HpsSiSensor) simTrackerHit.getDetectorElement();
+ HpsSiSensor sensor = (HpsSiSensor) simTrackerHit.getDetectorElement();
if(sensor.isTopLayer()) volumeIndex++;
else volumeIndex--;
}
@@ -454,24 +454,24 @@
@Override
public void endOfData()
{
-
+
if(trackingEfficiencyPlots && efficiencyOutputFile != null && momentumOutputFile != null){
- try{
- int bins = aida.histogram1D("Momentum - Findable Tracks").axis().bins();
- for(int index = 0; index < bins; index++){
- if(aida.histogram1D("Momentum - Reconstructed Tracks").binEntries(index) == 0) efficiencyOutput.write(index + " " + 0 + "\n");
- else efficiencyOutput.write(index + " " + aida.histogram1D("Momentum - Reconstructed Tracks").binEntries(index) + "\n");
-
+ try{
+ int bins = aida.histogram1D("Momentum - Findable Tracks").axis().bins();
+ for(int index = 0; index < bins; index++){
+ if(aida.histogram1D("Momentum - Reconstructed Tracks").binEntries(index) == 0) efficiencyOutput.write(index + " " + 0 + "\n");
+ else efficiencyOutput.write(index + " " + aida.histogram1D("Momentum - Reconstructed Tracks").binEntries(index) + "\n");
+
if(aida.histogram1D("Momentum - Findable Tracks").binEntries(index) == 0) momentumOutput.write(index + " " + 0 + "\n");
- else momentumOutput.write(index + " " + aida.histogram1D("Momentum - Findable Tracks").binEntries(index) + "\n");
- }
- efficiencyOutput.close();
+ else momentumOutput.write(index + " " + aida.histogram1D("Momentum - Findable Tracks").binEntries(index) + "\n");
+ }
+ efficiencyOutput.close();
momentumOutput.close();
- } catch(IOException e){
- System.out.println(this.getClass().getSimpleName() + ": Error! " + e.getMessage());
- }
+ } catch(IOException e){
+ System.out.println(this.getClass().getSimpleName() + ": Error! " + e.getMessage());
+ }
}
-
+
System.out.println("%===============================================================%");
System.out.println("%============== Track Reconstruction Efficiencies ==============%");
System.out.println("%===============================================================%\n%");
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/TestRunTrackReconEfficiency.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/TestRunTrackReconEfficiency.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/TestRunTrackReconEfficiency.java Wed Mar 9 11:43:24 2016
@@ -60,18 +60,18 @@
boolean topTrigger = false;
// Collection Names
- String stereoHitCollectionName = "HelicalTrackHits";
- String trackCollectionName = "MatchedTracks";
- String ecalClustersCollectionName = "EcalClusters";
- String triggerDataCollectionName = "TriggerBank";
+ String stereoHitCollectionName = "HelicalTrackHits";
+ String trackCollectionName = "MatchedTracks";
+ String ecalClustersCollectionName = "EcalClusters";
+ String triggerDataCollectionName = "TriggerBank";
// Plots
IHistogram1D findableTrackMomentum;
IHistogram1D totalTrackMomentum;
- IHistogram1D xPositionResidual;
- IHistogram1D yPositionResidual;
- IHistogram1D zPositionResidual;
- IHistogram1D r;
+ IHistogram1D xPositionResidual;
+ IHistogram1D yPositionResidual;
+ IHistogram1D zPositionResidual;
+ IHistogram1D r;
/**
* Dflt Ctor
@@ -89,7 +89,7 @@
*
*/
public void setThresholdEnergy(double thresholdEnergy){
- this.thresholdEnergy = thresholdEnergy;
+ this.thresholdEnergy = thresholdEnergy;
}
public void setClusterEnergyDifference(double energyDifference){
@@ -117,15 +117,15 @@
plotterIndex++;
// Create plot for diffence in track and cluster position
- plotters.add(PlotUtils.setupPlotter("Track-Cluster Position Residual", 2, 2));
- xPositionResidual = aida.histogram1D("x Residual", 100, -100, 100);
- yPositionResidual = aida.histogram1D("y Residual", 100, -100, 100);
- zPositionResidual = aida.histogram1D("z Residual", 100, -100, 100);
- r = aida.histogram1D("r", 100, -100, 100);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "x Residual", 0, "delta x [mm]", xPositionResidual);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "y Residual", 1, "delta y [mm]", yPositionResidual);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "z Residual", 2, "delta z [mm]", zPositionResidual);
- PlotUtils.setup1DRegion(plotters.get(plotterIndex), "r", 3, "r [mm]", r);
+ plotters.add(PlotUtils.setupPlotter("Track-Cluster Position Residual", 2, 2));
+ xPositionResidual = aida.histogram1D("x Residual", 100, -100, 100);
+ yPositionResidual = aida.histogram1D("y Residual", 100, -100, 100);
+ zPositionResidual = aida.histogram1D("z Residual", 100, -100, 100);
+ r = aida.histogram1D("r", 100, -100, 100);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "x Residual", 0, "delta x [mm]", xPositionResidual);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "y Residual", 1, "delta y [mm]", yPositionResidual);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "z Residual", 2, "delta z [mm]", zPositionResidual);
+ PlotUtils.setup1DRegion(plotters.get(plotterIndex), "r", 3, "r [mm]", r);
plotterIndex++;
// Show all of the plotters
@@ -154,138 +154,138 @@
// If the event has a single Ecal cluster satisfying the threshold cut,
// check if there is a track that is well matched to the cluster
if(ecalClusters.size() == 1){
- Cluster ecalCluster = ecalClusters.get(0);
-
- // If the cluster is above the energy threshold, then the track should
- // be findable
- if(!isClusterAboveEnergyThreshold(ecalCluster)) return;
- findableSingleTracks++;
-
- double[] clusterPosition = ecalCluster.getPosition();
-
- if(clusterPosition[0] > 0 && clusterPosition[1] > 0) findableSingleTracksQuad1++;
- else if(clusterPosition[0] < 0 && clusterPosition[1] > 0) findableSingleTracksQuad2++;
- else if(clusterPosition[0] < 0 && clusterPosition[1] < 0) findableSingleTracksQuad3++;
- else if(clusterPosition[0] > 0 && clusterPosition[1] < 0) findableSingleTracksQuad4++;
-
- if(!isClusterMatchedToTrack(ecalCluster, tracks)) return;
- foundSingleTracks++;
-
- if(clusterPosition[0] > 0 && clusterPosition[1] > 0) foundSingleTracksQuad1++;
- else if(clusterPosition[0] < 0 && clusterPosition[1] > 0) foundSingleTracksQuad2++;
- else if(clusterPosition[0] < 0 && clusterPosition[1] < 0) foundSingleTracksQuad3++;
- else if(clusterPosition[0] > 0 && clusterPosition[1] < 0) foundSingleTracksQuad4++;
+ Cluster ecalCluster = ecalClusters.get(0);
+
+ // If the cluster is above the energy threshold, then the track should
+ // be findable
+ if(!isClusterAboveEnergyThreshold(ecalCluster)) return;
+ findableSingleTracks++;
+
+ double[] clusterPosition = ecalCluster.getPosition();
+
+ if(clusterPosition[0] > 0 && clusterPosition[1] > 0) findableSingleTracksQuad1++;
+ else if(clusterPosition[0] < 0 && clusterPosition[1] > 0) findableSingleTracksQuad2++;
+ else if(clusterPosition[0] < 0 && clusterPosition[1] < 0) findableSingleTracksQuad3++;
+ else if(clusterPosition[0] > 0 && clusterPosition[1] < 0) findableSingleTracksQuad4++;
+
+ if(!isClusterMatchedToTrack(ecalCluster, tracks)) return;
+ foundSingleTracks++;
+
+ if(clusterPosition[0] > 0 && clusterPosition[1] > 0) foundSingleTracksQuad1++;
+ else if(clusterPosition[0] < 0 && clusterPosition[1] > 0) foundSingleTracksQuad2++;
+ else if(clusterPosition[0] < 0 && clusterPosition[1] < 0) foundSingleTracksQuad3++;
+ else if(clusterPosition[0] > 0 && clusterPosition[1] < 0) foundSingleTracksQuad4++;
}
// Only look at events which have two Ecal cluster
if(ecalClusters.size() != 2) return;
// Check that the Ecal clusters are in opposite Ecal volumes. If
- // they don't, skip the event.
- if(!hasClustersInOppositeVolumes(ecalClusters)){
- this.printDebug("Ecal clusters are not in opposite volumes");
- return;
- }
- nOppositeVolume++;
+ // they don't, skip the event.
+ if(!hasClustersInOppositeVolumes(ecalClusters)){
+ this.printDebug("Ecal clusters are not in opposite volumes");
+ return;
+ }
+ nOppositeVolume++;
- // Check that the Ecal clusters lie within some pre-defined window. If
- // they don't, skip the event.
+ // Check that the Ecal clusters lie within some pre-defined window. If
+ // they don't, skip the event.
if(!isClusterWithinWindow(ecalClusters.get(0)) || !isClusterWithinWindow(ecalClusters.get(1))){
- this.printDebug("Ecal cluster falls outside of window.");
- return;
+ this.printDebug("Ecal cluster falls outside of window.");
+ return;
}
nWithinWindow++;
// Check that the Ecal clusters are above the threshold energy. If
// they don't, skip the event.
if(!isClusterAboveEnergyThreshold(ecalClusters.get(0)) || !isClusterAboveEnergyThreshold(ecalClusters.get(1))){
- this.printDebug("Ecal cluster energies are below threshold.");
- return;
- }
- nAboveThreshold++;
+ this.printDebug("Ecal cluster energies are below threshold.");
+ return;
+ }
+ nAboveThreshold++;
- // Check that the difference between the Ecal cluster energies is
+ // Check that the difference between the Ecal cluster energies is
// reasonable
- double energyDiff = Math.abs(ecalClusters.get(0).getEnergy() - ecalClusters.get(1).getEnergy());
- if(energyDiff > energyDifference){
- this.printDebug("The energy difference between the two clusters is too great.");
- return;
- }
+ double energyDiff = Math.abs(ecalClusters.get(0).getEnergy() - ecalClusters.get(1).getEnergy());
+ if(energyDiff > energyDifference){
+ this.printDebug("The energy difference between the two clusters is too great.");
+ return;
+ }
// Check if the event contains a collection of tracks. If it doesn't,
// move on to the next event.
if(!event.hasCollection(Track.class, trackCollectionName)){
- this.printDebug("Event doesn't contain a collection of tracks!");
- return;
+ this.printDebug("Event doesn't contain a collection of tracks!");
+ return;
}
// If there are no tracks in the collection, move on to the next event.
if(tracks.isEmpty()){
- this.printDebug("Event doesn't contain any tracks!");
- return;
+ this.printDebug("Event doesn't contain any tracks!");
+ return;
}
// Sort the tracks by SVT volume
- topTracks = new ArrayList<Track>();
- botTracks = new ArrayList<Track>();
+ topTracks = new ArrayList<Track>();
+ botTracks = new ArrayList<Track>();
for(Track track : tracks){
- if(track.getTrackStates().get(0).getZ0() > 0) topTracks.add(track);
- else if(track.getTrackStates().get(0).getZ0() < 0) botTracks.add(track);
- }
-
- // Get the trigger information from the event
- List<GenericObject> triggerData = event.get(GenericObject.class, triggerDataCollectionName);
- GenericObject triggerDatum = triggerData.get(0);
- if(triggerDatum.getIntVal(4) > 0){
- this.printDebug("Ecal triggered by top cluster");
- topTrigger = true;
- } else if(triggerDatum.getIntVal(5) > 0){
- this.printDebug("Ecal triggered by bottom cluster");
- topTrigger = false;
- }
-
- // Match a track to the trigger cluster
- Cluster matchedCluster = null;
- for(Cluster ecalCluster : ecalClusters){
- if(ecalCluster.getPosition()[1] > 0 && topTrigger){
- if(!isClusterMatchedToTrack(ecalCluster, topTracks)){
- this.printDebug("Trigger cluster-track match was not found.");
- return;
- }
- matchedCluster = ecalCluster;
- findableBottomTracks++;
- break;
- } else if( ecalCluster.getPosition()[1] < 0 && !topTrigger){
- if(!isClusterMatchedToTrack(ecalCluster, botTracks)){
- this.printDebug("Trigger cluster-track match was not found.");
- return;
- }
- matchedCluster = ecalCluster;
- findableTopTracks++;
- break;
- }
- }
- if(matchedCluster != null) ecalClusters.remove(matchedCluster);
- nTrigClusterTrackMatch++;
-
+ if(track.getTrackStates().get(0).getZ0() > 0) topTracks.add(track);
+ else if(track.getTrackStates().get(0).getZ0() < 0) botTracks.add(track);
+ }
+
+ // Get the trigger information from the event
+ List<GenericObject> triggerData = event.get(GenericObject.class, triggerDataCollectionName);
+ GenericObject triggerDatum = triggerData.get(0);
+ if(triggerDatum.getIntVal(4) > 0){
+ this.printDebug("Ecal triggered by top cluster");
+ topTrigger = true;
+ } else if(triggerDatum.getIntVal(5) > 0){
+ this.printDebug("Ecal triggered by bottom cluster");
+ topTrigger = false;
+ }
+
+ // Match a track to the trigger cluster
+ Cluster matchedCluster = null;
+ for(Cluster ecalCluster : ecalClusters){
+ if(ecalCluster.getPosition()[1] > 0 && topTrigger){
+ if(!isClusterMatchedToTrack(ecalCluster, topTracks)){
+ this.printDebug("Trigger cluster-track match was not found.");
+ return;
+ }
+ matchedCluster = ecalCluster;
+ findableBottomTracks++;
+ break;
+ } else if( ecalCluster.getPosition()[1] < 0 && !topTrigger){
+ if(!isClusterMatchedToTrack(ecalCluster, botTracks)){
+ this.printDebug("Trigger cluster-track match was not found.");
+ return;
+ }
+ matchedCluster = ecalCluster;
+ findableTopTracks++;
+ break;
+ }
+ }
+ if(matchedCluster != null) ecalClusters.remove(matchedCluster);
+ nTrigClusterTrackMatch++;
+
// If the cluster passes all requirements, then there is likely a track
// associated with it
findableTracks++;
// Now check if a track is associated with the non-trigger cluster
if(topTrigger){
- if(!isClusterMatchedToTrack(ecalClusters.get(0), botTracks)){
- this.printDebug("Non trigger cluster-track match was not found.");
- return;
- }
- totalBottomTracks++;
+ if(!isClusterMatchedToTrack(ecalClusters.get(0), botTracks)){
+ this.printDebug("Non trigger cluster-track match was not found.");
+ return;
+ }
+ totalBottomTracks++;
} else if(!topTrigger){
- if(!isClusterMatchedToTrack(ecalClusters.get(0), topTracks)){
- this.printDebug("Non trigger cluster-track match was not found.");
- return;
- }
- totalTopTracks++;
+ if(!isClusterMatchedToTrack(ecalClusters.get(0), topTracks)){
+ this.printDebug("Non trigger cluster-track match was not found.");
+ return;
+ }
+ totalTopTracks++;
}
++totalTracks;
}
@@ -305,67 +305,67 @@
*
*/
private boolean isClusterWithinWindow(Cluster clusterPosition){
- return true;
+ return true;
}
/**
*
*/
private boolean isClusterAboveEnergyThreshold(Cluster ecalCluster){
- if(ecalCluster.getEnergy() > thresholdEnergy) return true;
- return false;
+ if(ecalCluster.getEnergy() > thresholdEnergy) return true;
+ return false;
}
/**
*
*/
private boolean hasClustersInOppositeVolumes(List<Cluster> ecalClusters){
- this.printPosition(ecalClusters.get(0).getPosition());
- this.printPosition(ecalClusters.get(1).getPosition());
- if((ecalClusters.get(0).getPosition()[1] > 0 && ecalClusters.get(1).getPosition()[1] < 0)
- || (ecalClusters.get(0).getPosition()[1] < 0 && ecalClusters.get(1).getPosition()[1] > 0)){
- return true;
- }
- return false;
+ this.printPosition(ecalClusters.get(0).getPosition());
+ this.printPosition(ecalClusters.get(1).getPosition());
+ if((ecalClusters.get(0).getPosition()[1] > 0 && ecalClusters.get(1).getPosition()[1] < 0)
+ || (ecalClusters.get(0).getPosition()[1] < 0 && ecalClusters.get(1).getPosition()[1] > 0)){
+ return true;
+ }
+ return false;
}
/**
*
*/
private boolean isClusterMatchedToTrack(Cluster cluster, List<Track> tracks){
- Hep3Vector clusterPos = new BasicHep3Vector(cluster.getPosition());
- double rMax = Double.MAX_VALUE;
- Track matchedTrack = null;
- for(Track track : tracks){
-
- Hep3Vector trkPosAtShowerMax = TrackUtils.extrapolateTrack(track,clusterPos.z());
- if(Double.isNaN(trkPosAtShowerMax.x()) || Double.isNaN(trkPosAtShowerMax.y())){
- this.printDebug("Invalid track position");
- return false;
- }
- this.printDebug("Track position at shower max: " + trkPosAtShowerMax.toString());
+ Hep3Vector clusterPos = new BasicHep3Vector(cluster.getPosition());
+ double rMax = Double.MAX_VALUE;
+ Track matchedTrack = null;
+ for(Track track : tracks){
+
+ Hep3Vector trkPosAtShowerMax = TrackUtils.extrapolateTrack(track,clusterPos.z());
+ if(Double.isNaN(trkPosAtShowerMax.x()) || Double.isNaN(trkPosAtShowerMax.y())){
+ this.printDebug("Invalid track position");
+ return false;
+ }
+ this.printDebug("Track position at shower max: " + trkPosAtShowerMax.toString());
- // Find the distance between the track position at shower
- // max and the cluster position
- double r = VecOp.sub(trkPosAtShowerMax, clusterPos).magnitude();
- this.printDebug("Distance between Ecal cluster and track position at shower max: " + r + " mm");
-
- // Check if the track is the closest to the cluster. If it is, then
- // save the track and contineu looping over all other tracks
- if (r < rMax /*&& r <= maxTrackClusterDistance*/) {
- rMax = r;
- matchedTrack = track;
- }
- }
- if(matchedTrack != null) return true;
- return false;
+ // Find the distance between the track position at shower
+ // max and the cluster position
+ double r = VecOp.sub(trkPosAtShowerMax, clusterPos).magnitude();
+ this.printDebug("Distance between Ecal cluster and track position at shower max: " + r + " mm");
+
+ // Check if the track is the closest to the cluster. If it is, then
+ // save the track and contineu looping over all other tracks
+ if (r < rMax /*&& r <= maxTrackClusterDistance*/) {
+ rMax = r;
+ matchedTrack = track;
+ }
+ }
+ if(matchedTrack != null) return true;
+ return false;
}
/**
*
*/
private void printPosition(double[] position){
- this.printDebug("[ " + position[0] + ", " + position[1] + ", " + position[2] + " ]");
+ this.printDebug("[ " + position[0] + ", " + position[1] + ", " + position[2] + " ]");
}
@@ -373,28 +373,28 @@
public void endOfData(){
System.out.println("%===================================================================% \n");
if(findableSingleTracks > 0){
- System.out.println("% Total single track efficiency: " + foundSingleTracks + " / " + findableSingleTracks + " = " + (foundSingleTracks/findableSingleTracks)*100 + "%");
+ System.out.println("% Total single track efficiency: " + foundSingleTracks + " / " + findableSingleTracks + " = " + (foundSingleTracks/findableSingleTracks)*100 + "%");
}
if(findableSingleTracksQuad1 > 0){
- System.out.println("% Total single track efficiency - Quad 1: " + foundSingleTracksQuad1 + " / " + findableSingleTracksQuad1 + " = " + (foundSingleTracksQuad1/findableSingleTracksQuad1)*100 + "%");
+ System.out.println("% Total single track efficiency - Quad 1: " + foundSingleTracksQuad1 + " / " + findableSingleTracksQuad1 + " = " + (foundSingleTracksQuad1/findableSingleTracksQuad1)*100 + "%");
}
if(findableSingleTracksQuad2 > 0){
- System.out.println("% Total single track efficiency - Quad 2: " + foundSingleTracksQuad2 + " / " + findableSingleTracksQuad2 + " = " + (foundSingleTracksQuad2/findableSingleTracksQuad2)*100 + "%");
+ System.out.println("% Total single track efficiency - Quad 2: " + foundSingleTracksQuad2 + " / " + findableSingleTracksQuad2 + " = " + (foundSingleTracksQuad2/findableSingleTracksQuad2)*100 + "%");
}
if(findableSingleTracksQuad3 > 0){
- System.out.println("% Total single track efficiency - Quad 3: " + foundSingleTracksQuad3 + " / " + findableSingleTracksQuad3 + " = " + (foundSingleTracksQuad3/findableSingleTracksQuad3)*100 + "%");
+ System.out.println("% Total single track efficiency - Quad 3: " + foundSingleTracksQuad3 + " / " + findableSingleTracksQuad3 + " = " + (foundSingleTracksQuad3/findableSingleTracksQuad3)*100 + "%");
}
if(findableSingleTracksQuad4 > 0){
- System.out.println("% Total single track efficiency - Quad 4: " + foundSingleTracksQuad4 + " / " + findableSingleTracksQuad4 + " = " + (foundSingleTracksQuad4/findableSingleTracksQuad4)*100 + "%");
+ System.out.println("% Total single track efficiency - Quad 4: " + foundSingleTracksQuad4 + " / " + findableSingleTracksQuad4 + " = " + (foundSingleTracksQuad4/findableSingleTracksQuad4)*100 + "%");
}
if(nOppositeVolume > 0){
- System.out.println("% Total events passing opposite volume requirement: " + nOppositeVolume + " / " + eventNumber + " = " + (nOppositeVolume/eventNumber)*100 + "%");
+ System.out.println("% Total events passing opposite volume requirement: " + nOppositeVolume + " / " + eventNumber + " = " + (nOppositeVolume/eventNumber)*100 + "%");
}
if(nAboveThreshold > 0){
- System.out.println("% Total events with both clusters above energy threshold: " + nAboveThreshold + " / " + eventNumber + " = " + (nAboveThreshold/eventNumber)*100 + "%");
+ System.out.println("% Total events with both clusters above energy threshold: " + nAboveThreshold + " / " + eventNumber + " = " + (nAboveThreshold/eventNumber)*100 + "%");
}
if(nTrigClusterTrackMatch > 0){
- System.out.println("% Total events with a trigger cluster-track match: " + nTrigClusterTrackMatch + " / " + eventNumber + " = " + (nTrigClusterTrackMatch/eventNumber)*100 + "%");
+ System.out.println("% Total events with a trigger cluster-track match: " + nTrigClusterTrackMatch + " / " + eventNumber + " = " + (nTrigClusterTrackMatch/eventNumber)*100 + "%");
}
if(findableTracks > 0){
System.out.println("% Total Track Reconstruction Efficiency: " + totalTracks + " / " + findableTracks + " = " + (totalTracks / findableTracks) * 100 + "%");
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/FastTrackResidualDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/FastTrackResidualDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/FastTrackResidualDriver.java Wed Mar 9 11:43:24 2016
@@ -78,11 +78,11 @@
}
public void detectorChanged(Detector detector) {
- // Get the Subdetector.
- ecal = detector.getSubdetector(ecalName);
-
- // Cache ref to decoder.
- dec = ecal.getIDDecoder();
+ // Get the Subdetector.
+ ecal = detector.getSubdetector(ecalName);
+
+ // Cache ref to decoder.
+ dec = ecal.getIDDecoder();
//Ecal geometry
crystalX = (13.3 + 16.0) / 2;
@@ -793,7 +793,7 @@
style.setParameter("hist2DStyle", "colorMap");
style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
((PlotterRegion) plotter_ecalhitmult.region(idx)).getPlot().setAllowUserInteraction(false);
- ((PlotterRegion) plotter_ecalhitmult.region(idx)).getPlot().setAllowPopupMenus(false);
+ ((PlotterRegion) plotter_ecalhitmult.region(idx)).getPlot().setAllowPopupMenus(false);
}
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/GblResidualDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/GblResidualDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/GblResidualDriver.java Wed Mar 9 11:43:24 2016
@@ -156,7 +156,7 @@
// select GBL tracks
if(TrackType.isGBL(track.getType())) {
-
+
TrackState stateIP = null;
TrackState stateLast = null;
for(TrackState state : track.getTrackStates()) {
@@ -164,14 +164,14 @@
if (state.getLocation() == TrackState.AtIP) stateIP = state;
}
- System.out.println("Event " + event.getEventNumber()
- + " gbl track parameters " +
- stateIP.getD0() + " " +
- stateIP.getZ0() + " " +
- stateIP.getPhi() + " " +
- stateIP.getOmega() + " " +
- stateIP.getTanLambda()
- );
+ System.out.println("Event " + event.getEventNumber()
+ + " gbl track parameters " +
+ stateIP.getD0() + " " +
+ stateIP.getZ0() + " " +
+ stateIP.getPhi() + " " +
+ stateIP.getOmega() + " " +
+ stateIP.getTanLambda()
+ );
// find seed track
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/SimpleResiduals.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/SimpleResiduals.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/SimpleResiduals.java Wed Mar 9 11:43:24 2016
@@ -98,11 +98,11 @@
}
public void detectorChanged(Detector detector) {
- // Get the Subdetector.
- ecal = detector.getSubdetector(ecalName);
-
- // Cache ref to decoder.
- dec = ecal.getIDDecoder();
+ // Get the Subdetector.
+ ecal = detector.getSubdetector(ecalName);
+
+ // Cache ref to decoder.
+ dec = ecal.getIDDecoder();
}
public SimpleResiduals() {
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/gbl/GBLDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/gbl/GBLDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/gbl/GBLDriver.java Wed Mar 9 11:43:24 2016
@@ -22,81 +22,81 @@
*/
public class GBLDriver extends Driver {
- private boolean _debug = false;
- private boolean _isMC = false;
- MaterialSupervisor _materialManager = null;
- MultipleScattering _scattering = null;
- private HpsGblFitter _gbl_fitter = null;
- private String milleBinaryName = "";
-
- public GBLDriver() {
- }
-
- public void setDebug(boolean debug) {
- _debug = debug;
- }
-
- public void setIsMC(boolean mcflag) {
- _isMC = mcflag;
- }
-
- protected void detectorChanged(Detector det) {
- System.out.printf("%s: detectorChanged\n",getClass().getSimpleName());
+ private boolean _debug = false;
+ private boolean _isMC = false;
+ MaterialSupervisor _materialManager = null;
+ MultipleScattering _scattering = null;
+ private HpsGblFitter _gbl_fitter = null;
+ private String milleBinaryName = "";
+
+ public GBLDriver() {
+ }
+
+ public void setDebug(boolean debug) {
+ _debug = debug;
+ }
+
+ public void setIsMC(boolean mcflag) {
+ _isMC = mcflag;
+ }
+
+ protected void detectorChanged(Detector det) {
+ System.out.printf("%s: detectorChanged\n",getClass().getSimpleName());
Hep3Vector bfieldvec = det.getFieldMap().getField(new BasicHep3Vector(0., 1., 0.));
double bfield = bfieldvec.y();
System.out.printf("%s: b-field %s\n",getClass().getSimpleName(),bfieldvec.toString());
- _materialManager = new MaterialSupervisor();
- _scattering = new MultipleScattering(_materialManager);
- _materialManager.buildModel(det);
- _scattering.setBField(Math.abs(bfield)); // only absolute of B is needed as it's used for momentum calculation only
- _gbl_fitter = new HpsGblFitter(bfield, _scattering, _isMC);
- if(!milleBinaryName.equalsIgnoreCase("")) {
- _gbl_fitter.setMilleBinary(new MilleBinary());
- }
- System.out.printf("%s: detectorChanged end\n",getClass().getSimpleName());
- }
+ _materialManager = new MaterialSupervisor();
+ _scattering = new MultipleScattering(_materialManager);
+ _materialManager.buildModel(det);
+ _scattering.setBField(Math.abs(bfield)); // only absolute of B is needed as it's used for momentum calculation only
+ _gbl_fitter = new HpsGblFitter(bfield, _scattering, _isMC);
+ if(!milleBinaryName.equalsIgnoreCase("")) {
+ _gbl_fitter.setMilleBinary(new MilleBinary());
+ }
+ System.out.printf("%s: detectorChanged end\n",getClass().getSimpleName());
+ }
- protected void process(EventHeader event) {
+ protected void process(EventHeader event) {
- List<Track> seedTracks = null;
+ List<Track> seedTracks = null;
if(event.hasCollection(Track.class,"MatchedTracks")) {
seedTracks = event.get(Track.class, "MatchedTracks");
if(_debug) {
System.out.printf("%s: Event %d has %d tracks\n", this.getClass().getSimpleName(),event.getEventNumber(),seedTracks.size());
}
} else {
- if(_debug) {
+ if(_debug) {
System.out.printf("%s: No tracks in Event %d \n", this.getClass().getSimpleName(),event.getEventNumber());
}
- return;
+ return;
}
-
+
for(int itrack = 0; itrack < seedTracks.size(); ++itrack) {
- if(_debug) {
- System.out.printf("%s: do the fit for track %d \n", this.getClass().getSimpleName(),itrack);
- }
+ if(_debug) {
+ System.out.printf("%s: do the fit for track %d \n", this.getClass().getSimpleName(),itrack);
+ }
- // Reset
- _gbl_fitter.clear();
-
- // Run the GBL fit on this track
- int status = _gbl_fitter.Fit(seedTracks.get(itrack));
+ // Reset
+ _gbl_fitter.clear();
+
+ // Run the GBL fit on this track
+ int status = _gbl_fitter.Fit(seedTracks.get(itrack));
- if(_debug) {
- System.out.printf("%s: fit status %d \n", this.getClass().getSimpleName(),status);
- }
+ if(_debug) {
+ System.out.printf("%s: fit status %d \n", this.getClass().getSimpleName(),status);
+ }
}
- }
+ }
- protected void endOfData() {
- }
+ protected void endOfData() {
+ }
-
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/gbl/HpsGblFitter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/gbl/HpsGblFitter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/gbl/HpsGblFitter.java Wed Mar 9 11:43:24 2016
@@ -118,7 +118,7 @@
// Store the projection from local to measurement frame for each strip cluster
// need to use pointer for TMatrix here?
// Map<Integer, Matrix> proL2m_list = new HashMap<Integer, Matrix>();
- // Save the association between strip cluster and label
+ // Save the association between strip cluster and label
// Map<HelicalTrackStrip, Integer> stripLabelMap = new HashMap<HelicalTrackStrip, Integer>();
//start trajectory at refence point (s=0) - this point has no measurement
GblPoint ref_point = new GblPoint(jacPointToPoint);
@@ -253,7 +253,7 @@
BasicMatrix meas = new BasicMatrix(1, 2);
meas.setElement(0, 0, res_meas.x());
meas.setElement(0, 1, 0.);
-// //meas[0][0] += deltaU[iLayer] # misalignment
+// //meas[0][0] += deltaU[iLayer] # misalignment
BasicMatrix measErr = new BasicMatrix(1, 2);
measErr.setElement(0, 0, res_err_meas.x());
@@ -411,7 +411,7 @@
//double diff = endTime - startTime;
//double cps = CLOCKS_PER_SEC;
//if( m_debug ) {
- // std::cout << "HpsGblFitter: " << " Time elapsed " << diff / cps << " s" << std::endl;
+ // std::cout << "HpsGblFitter: " << " Time elapsed " << diff / cps << " s" << std::endl;
//}
if (_debug) {
System.out.printf("%s: Fit() done successfully.\n", this.getClass().getSimpleName());
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/testrun/TrigRateDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/testrun/TrigRateDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/testrun/TrigRateDriver.java Wed Mar 9 11:43:24 2016
@@ -80,11 +80,11 @@
}
public void detectorChanged(Detector detector) {
- // Get the Subdetector.
- ecal = detector.getSubdetector(ecalName);
-
- // Cache ref to decoder.
- dec = ecal.getIDDecoder();
+ // Get the Subdetector.
+ ecal = detector.getSubdetector(ecalName);
+
+ // Cache ref to decoder.
+ dec = ecal.getIDDecoder();
//plotterFrame = new AIDAFrame();
//plotterFrame.setTitle("TrigRateFrame");
Modified: java/trunk/users/src/main/java/org/hps/users/phansson/tools/TrackingGeometryChecker.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/phansson/tools/TrackingGeometryChecker.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/phansson/tools/TrackingGeometryChecker.java Wed Mar 9 11:43:24 2016
@@ -14,29 +14,29 @@
import org.lcsim.geometry.Detector;
import org.lcsim.util.Driver;
-/**
+/**
* Check tracking geometry.
* @author Per Hansson Adrian <[log in to unmask]>
*
*/
public class TrackingGeometryChecker extends Driver {
- private int debug = 1;
+ private int debug = 1;
- /**
- * Check tracking geometry.
- */
- public TrackingGeometryChecker() {
- }
-
- protected void detectorChanged(Detector arg0) {
- super.detectorChanged(arg0);
-
- // Get all of the sensors composing the SVT and add them to the set of all sensors
+ /**
+ * Check tracking geometry.
+ */
+ public TrackingGeometryChecker() {
+ }
+
+ protected void detectorChanged(Detector arg0) {
+ super.detectorChanged(arg0);
+
+ // Get all of the sensors composing the SVT and add them to the set of all sensors
IDetectorElement detectorElement = arg0.getDetectorElement().findDetectorElement("Tracker");
IIdentifierHelper helper = detectorElement.getIdentifierHelper();
List<HpsSiSensor> sensors = new ArrayList<HpsSiSensor>();
- sensors.addAll(detectorElement.findDescendants(HpsSiSensor.class));
+ sensors.addAll(detectorElement.findDescendants(HpsSiSensor.class));
System.out.printf("%s: Total number of sensors: %d\n",getClass().getSimpleName(), sensors.size());
IIdentifier sensorIdent;
@@ -70,57 +70,57 @@
IDetectorElement m = sensor;
int im=0;
while((m=m.getParent()) != null) {
- System.out.printf("%s: DE mother %d name %s\n",getClass().getSimpleName(), im, m.getName());
- if(m.hasGeometryInfo()) {
- System.out.printf("%s: DE mother %d pos %s\n",getClass().getSimpleName(), im, m.getGeometry().getPosition().toString());
- } else {
- System.out.printf("%s: DE mother - no geom info - \n",getClass().getSimpleName(), im);
- }
+ System.out.printf("%s: DE mother %d name %s\n",getClass().getSimpleName(), im, m.getName());
+ if(m.hasGeometryInfo()) {
+ System.out.printf("%s: DE mother %d pos %s\n",getClass().getSimpleName(), im, m.getGeometry().getPosition().toString());
+ } else {
+ System.out.printf("%s: DE mother - no geom info - \n",getClass().getSimpleName(), im);
+ }
im++;
}
}
-
- }
-
- protected void startOfData() {
- super.startOfData();
- }
-
- protected void process(EventHeader event) {
-
-
-// List<SimTrackerHit> simTrackerHits = event.get(SimTrackerHit.class, "TrackerHits");
+
+ }
+
+ protected void startOfData() {
+ super.startOfData();
+ }
+
+ protected void process(EventHeader event) {
+
+
+// List<SimTrackerHit> simTrackerHits = event.get(SimTrackerHit.class, "TrackerHits");
// if (simTrackerHits == null) {
// throw new RuntimeException("Missing SimTrackerHit collection");
// }
//
// if(debug>0) System.out.printf("%s: found %d simTrackerHits\n",getClass().getSimpleName(),simTrackerHits.size());
// for(SimTrackerHit simTrackerHit : simTrackerHits) {
-// if(debug>0) printSimTrackerHitInfo(simTrackerHit);
+// if(debug>0) printSimTrackerHitInfo(simTrackerHit);
// }
- }
-
- protected void endOfData() {
- super.endOfData();
- }
+ }
+
+ protected void endOfData() {
+ super.endOfData();
+ }
- protected int getDebug() {
- return debug;
- }
+ protected int getDebug() {
+ return debug;
+ }
- protected void setDebug(int debug) {
- this.debug = debug;
- }
+ protected void setDebug(int debug) {
+ this.debug = debug;
+ }
- private static void printSimTrackerHitInfo(SimTrackerHit simTrackerHit) {
- System.out.printf("\nSimTrackerHit:\n");
- System.out.printf("\t position: %s\n",simTrackerHit.getPositionVec().toString());
- System.out.printf("\t DetectorElement: %s\n",simTrackerHit.getDetectorElement().getName());
- System.out.printf("\t DetectorElement position: %s\n",simTrackerHit.getDetectorElement().getGeometry().getPosition().toString());
- System.out.printf("\t PhysVol name at position: %s\n",simTrackerHit.getDetectorElement().getGeometry().getPhysicalVolume(simTrackerHit.getPositionVec()).getName());
- }
+ private static void printSimTrackerHitInfo(SimTrackerHit simTrackerHit) {
+ System.out.printf("\nSimTrackerHit:\n");
+ System.out.printf("\t position: %s\n",simTrackerHit.getPositionVec().toString());
+ System.out.printf("\t DetectorElement: %s\n",simTrackerHit.getDetectorElement().getName());
+ System.out.printf("\t DetectorElement position: %s\n",simTrackerHit.getDetectorElement().getGeometry().getPosition().toString());
+ System.out.printf("\t PhysVol name at position: %s\n",simTrackerHit.getDetectorElement().getGeometry().getPhysicalVolume(simTrackerHit.getPositionVec()).getName());
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/rafo/test1.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/rafo/test1.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/rafo/test1.java Wed Mar 9 11:43:24 2016
@@ -4,15 +4,15 @@
import org.lcsim.util.Driver;
public class test1 extends Driver {
- private int clusterID;
+ private int clusterID;
- public void process(EventHeader event) {
- System.out.println("The cluster ID = " + clusterID);
- }
+ public void process(EventHeader event) {
+ System.out.println("The cluster ID = " + clusterID);
+ }
- public void setClusterID(int clusterID) {
- this.clusterID = clusterID;
- }
+ public void setClusterID(int clusterID) {
+ this.clusterID = clusterID;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/GetChargeFromScalersMultirun.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/GetChargeFromScalersMultirun.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/GetChargeFromScalersMultirun.java Wed Mar 9 11:43:24 2016
@@ -18,144 +18,144 @@
*
*/
public class GetChargeFromScalersMultirun {
- private static ArrayList<String> runs;
- private static ArrayList<Date> starts;
- private static ArrayList<Date> ends;
+ private static ArrayList<String> runs;
+ private static ArrayList<Date> starts;
+ private static ArrayList<Date> ends;
- public static void main(String[] arg) throws FileNotFoundException, ParseException{
- String inputFile = arg[0];
- String timingInfoFile = arg[1];
- String outputFile = arg[2];
-
-
- readTimingInfoFile(timingInfoFile);
-
- Map map = getCharges(runs, starts, ends, inputFile);
- mergeBiasIntervals(map);
-
- ArrayList<String> keys = new ArrayList(map.keySet());
- Collections.sort(keys);
-
-
- PrintWriter pw = new PrintWriter(new File(outputFile));
- for(String s : keys){
- pw.println(s + "\t" + map.get(s));
- System.out.println(s + "\t" + map.get(s));
- }
- pw.close();
- }
+ public static void main(String[] arg) throws FileNotFoundException, ParseException{
+ String inputFile = arg[0];
+ String timingInfoFile = arg[1];
+ String outputFile = arg[2];
+
+
+ readTimingInfoFile(timingInfoFile);
+
+ Map map = getCharges(runs, starts, ends, inputFile);
+ mergeBiasIntervals(map);
+
+ ArrayList<String> keys = new ArrayList(map.keySet());
+ Collections.sort(keys);
+
+
+ PrintWriter pw = new PrintWriter(new File(outputFile));
+ for(String s : keys){
+ pw.println(s + "\t" + map.get(s));
+ System.out.println(s + "\t" + map.get(s));
+ }
+ pw.close();
+ }
- static void readTimingInfoFile(String s) throws FileNotFoundException, ParseException{
- Scanner scanner = new Scanner(new File(s));
- scanner.useDelimiter("[\n\t]");
- runs = new ArrayList();
- starts = new ArrayList();
- ends = new ArrayList();
- DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z");
-
- while(scanner.hasNext()){
- runs.add(scanner.next());
- String n = scanner.next();
- if(n.matches("\\d+"))
- starts.add(new Date(Long.parseLong(n)));
- else
- starts.add(df.parse(n));
- n = scanner.next();
- if(n.matches("\\d+"))
- ends.add(new Date(Long.parseLong(n)));
- else
- ends.add(df.parse(n));
-
- }
- scanner.close();
- }
-
-
-
-
-
- /**
- * returns charge in microCoulombs
- * @param runs names of the runs
- * @param starts starting times of the runs
- * @param ends ending times of the runs
- * @param file the mya file that we need to use
- * @return a map relating the runs to the charges (uC).
- * @throws FileNotFoundException
- */
-
- static Map<String, Double> getCharges(ArrayList<String> runs, ArrayList<Date> starts, ArrayList<Date> ends, String file) throws FileNotFoundException{
- Scanner s = new Scanner(new File(file));
- HashMap<String, Double> map = new HashMap();
- long prev = 0;
- long time = 0;
- for(int i = 0; i< runs.size(); i++){
- long endt = ends.get(i).getTime();
- long startt = starts.get(i).getTime();
-
- double charge = 0;
- boolean started = false;
- double prevval = 0;
- if(time > endt){
- s.close();
- s = new Scanner(new File(file));
- }
- inner : while(s.hasNext()){
- String var = s.next();
- prev = time;
- time = s.nextLong()*1000; //convert from s to ms
+ static void readTimingInfoFile(String s) throws FileNotFoundException, ParseException{
+ Scanner scanner = new Scanner(new File(s));
+ scanner.useDelimiter("[\n\t]");
+ runs = new ArrayList();
+ starts = new ArrayList();
+ ends = new ArrayList();
+ DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z");
+
+ while(scanner.hasNext()){
+ runs.add(scanner.next());
+ String n = scanner.next();
+ if(n.matches("\\d+"))
+ starts.add(new Date(Long.parseLong(n)));
+ else
+ starts.add(df.parse(n));
+ n = scanner.next();
+ if(n.matches("\\d+"))
+ ends.add(new Date(Long.parseLong(n)));
+ else
+ ends.add(df.parse(n));
+
+ }
+ scanner.close();
+ }
+
+
+
+
+
+ /**
+ * returns charge in microCoulombs
+ * @param runs names of the runs
+ * @param starts starting times of the runs
+ * @param ends ending times of the runs
+ * @param file the mya file that we need to use
+ * @return a map relating the runs to the charges (uC).
+ * @throws FileNotFoundException
+ */
+
+ static Map<String, Double> getCharges(ArrayList<String> runs, ArrayList<Date> starts, ArrayList<Date> ends, String file) throws FileNotFoundException{
+ Scanner s = new Scanner(new File(file));
+ HashMap<String, Double> map = new HashMap();
+ long prev = 0;
+ long time = 0;
+ for(int i = 0; i< runs.size(); i++){
+ long endt = ends.get(i).getTime();
+ long startt = starts.get(i).getTime();
+
+ double charge = 0;
+ boolean started = false;
+ double prevval = 0;
+ if(time > endt){
+ s.close();
+ s = new Scanner(new File(file));
+ }
+ inner : while(s.hasNext()){
+ String var = s.next();
+ prev = time;
+ time = s.nextLong()*1000; //convert from s to ms
- double val = s.nextDouble();
- if(!var.equals("scaler_calc1"))
- continue;
-
- if(!started && time> startt){ //first sample in the run
- charge += (val)/2.*(time-startt);
- started= true;
- }
-
- else if(time > startt && endt > time){ //middle samples in the run
- charge += (val/*+prevval*/)/*/2.*/*(time-prev);
-
- }
-
- if(endt < time){ //last sample that is in the run
- charge += (/*prev*/val)/2.*(endt-prev);
- break inner;
- }
- prevval = val;
- }
- charge/=1e6;
- map.put(runs.get(i), charge);
- }
- s.close();
- return map;
+ double val = s.nextDouble();
+ if(!var.equals("scaler_calc1"))
+ continue;
+
+ if(!started && time> startt){ //first sample in the run
+ charge += (val)/2.*(time-startt);
+ started= true;
+ }
+
+ else if(time > startt && endt > time){ //middle samples in the run
+ charge += (val/*+prevval*/)/*/2.*/*(time-prev);
+
+ }
+
+ if(endt < time){ //last sample that is in the run
+ charge += (/*prev*/val)/2.*(endt-prev);
+ break inner;
+ }
+ prevval = val;
+ }
+ charge/=1e6;
+ map.put(runs.get(i), charge);
+ }
+ s.close();
+ return map;
- }
-
- /**
- * If the subsections of the runs in which the bias is on are labeled according to a scheme,
- they will be added together.
- for instance, 5779a, 5779b, 5779c, etc. will be added up as 5779bias.
- * @param map the map of run names (and portions of runs that have bias labeled as [run number][a,b,c,d...],
- * corresponding to the total charge in that run (or piece of a run).
- */
- static void mergeBiasIntervals(Map<String, Double> map){
- Map<String, Double> map2 = new HashMap();
- for(Map.Entry<String, Double> entry : map.entrySet()){
- String key1 = entry.getKey();
- if(!entry.getKey().matches("\\d+a"))
- continue;
- double charge = entry.getValue();
- for(Map.Entry<String, Double> entry2 : map.entrySet()){
- if(entry2.getKey().matches(key1.substring(0, 4) + "[b-z]"))
- charge += entry2.getValue();
- }
- map2.put(key1.substring(0, 4) + "bias", charge);
-
- }
- for(Map.Entry<String, Double> e : map2.entrySet()){
- map.put(e.getKey(), e.getValue());
- }
- }
+ }
+
+ /**
+ * If the subsections of the runs in which the bias is on are labeled according to a scheme,
+ they will be added together.
+ for instance, 5779a, 5779b, 5779c, etc. will be added up as 5779bias.
+ * @param map the map of run names (and portions of runs that have bias labeled as [run number][a,b,c,d...],
+ * corresponding to the total charge in that run (or piece of a run).
+ */
+ static void mergeBiasIntervals(Map<String, Double> map){
+ Map<String, Double> map2 = new HashMap();
+ for(Map.Entry<String, Double> entry : map.entrySet()){
+ String key1 = entry.getKey();
+ if(!entry.getKey().matches("\\d+a"))
+ continue;
+ double charge = entry.getValue();
+ for(Map.Entry<String, Double> entry2 : map.entrySet()){
+ if(entry2.getKey().matches(key1.substring(0, 4) + "[b-z]"))
+ charge += entry2.getValue();
+ }
+ map2.put(key1.substring(0, 4) + "bias", charge);
+
+ }
+ for(Map.Entry<String, Double> e : map2.entrySet()){
+ map.put(e.getKey(), e.getValue());
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/HitrateHistograms.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/HitrateHistograms.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/HitrateHistograms.java Wed Mar 9 11:43:24 2016
@@ -19,109 +19,109 @@
import org.lcsim.util.Driver;
public class HitrateHistograms extends Driver{
- HashMap<String, IHistogram2D[]> hist2d = new HashMap<String, IHistogram2D[]>();
+ HashMap<String, IHistogram2D[]> hist2d = new HashMap<String, IHistogram2D[]>();
- IAnalysisFactory af = IAnalysisFactory.create();
- IHistogramFactory hf = af.createHistogramFactory(af.createTreeFactory().create());
- IPlotterFactory pf = af.createPlotterFactory();
- public HitrateHistograms(){
- addHistograms2D("Ecal", 1, -30, 30, -8, 16);
- addHistograms2D("muon", 8, -30, 30, -8, 16);
+ IAnalysisFactory af = IAnalysisFactory.create();
+ IHistogramFactory hf = af.createHistogramFactory(af.createTreeFactory().create());
+ IPlotterFactory pf = af.createPlotterFactory();
+ public HitrateHistograms(){
+ addHistograms2D("Ecal", 1, -30, 30, -8, 16);
+ addHistograms2D("muon", 8, -30, 30, -8, 16);
- try {
- ecalDecoder = new IDDecoder(new IDDescriptor("system:0:6,layer:6:2,ix:8:-8,iy:16:-6"));
- } catch (IDException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ try {
+ ecalDecoder = new IDDecoder(new IDDescriptor("system:0:6,layer:6:2,ix:8:-8,iy:16:-6"));
+ } catch (IDException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
- }
- private void addHistograms2D(String detector, int nLayers, int ixMin, int ixMax, int iyMin, int iyMax){
- IPlotter plotter1 = pf.create("detector");
- int nx = (int)Math.ceil(Math.sqrt(nLayers));
- int ny = (int)Math.ceil(nLayers/(double)nx);
- plotter1.createRegions(nx, ny);
+ }
+ private void addHistograms2D(String detector, int nLayers, int ixMin, int ixMax, int iyMin, int iyMax){
+ IPlotter plotter1 = pf.create("detector");
+ int nx = (int)Math.ceil(Math.sqrt(nLayers));
+ int ny = (int)Math.ceil(nLayers/(double)nx);
+ plotter1.createRegions(nx, ny);
- hist2d.put(detector,new IHistogram2D[nLayers]);
- for(int i = 0; i< nLayers; i++){
- hist2d.get(detector)[i]
- = hf.createHistogram2D(detector + " layer " + (i+1), ixMax-ixMin, ixMin, ixMax, iyMax-iyMin, iyMin, iyMax);
- plotter1.region(i).plot(hist2d.get(detector)[i]);
+ hist2d.put(detector,new IHistogram2D[nLayers]);
+ for(int i = 0; i< nLayers; i++){
+ hist2d.get(detector)[i]
+ = hf.createHistogram2D(detector + " layer " + (i+1), ixMax-ixMin, ixMin, ixMax, iyMax-iyMin, iyMin, iyMax);
+ plotter1.region(i).plot(hist2d.get(detector)[i]);
- }
- }
+ }
+ }
- IDDecoder ecalDecoder;
- private float recency;
+ IDDecoder ecalDecoder;
+ private float recency;
- public void process(EventHeader header){
+ public void process(EventHeader header){
- //System.out.println(header.keys());
+ //System.out.println(header.keys());
- for(SIOSimCalorimeterHit hit: header.get(SIOSimCalorimeterHit.class,"EcalHits")){
- int fieldCount = hit.getIDDecoder().getFieldCount();
- ecalDecoder.setID(hit.getCellID());
- int ix = ecalDecoder.getValue("ix");
- int iy = ecalDecoder.getValue("iy");
- int layer = ecalDecoder.getValue("layer");
- hist2d.get("Ecal")[layer].fill(ix, iy);
- }
-
-
- /*if(recency != 0)
- for(IHistogram2D[] hists : hist2d.values()){
- for(IHistogram2D hist : hists){
- hf.
- }
- }*/
- //}
- }
- /**
- * "recency" is a parameter used to determine how to time-weight the
- * histogram so that the more recent events are more highly weighted.
- * A recency of zero means that there is no time weightedness.
- * A recency of R means that each event is weighted by a factor of (1-R)^n,
- * where n is the number of events that have taken place since the event shown.
- * @param recency
- */
- //public void setRecency(float recency){
- //this.recency = recency;
- //}
+ for(SIOSimCalorimeterHit hit: header.get(SIOSimCalorimeterHit.class,"EcalHits")){
+ int fieldCount = hit.getIDDecoder().getFieldCount();
+ ecalDecoder.setID(hit.getCellID());
+ int ix = ecalDecoder.getValue("ix");
+ int iy = ecalDecoder.getValue("iy");
+ int layer = ecalDecoder.getValue("layer");
+ hist2d.get("Ecal")[layer].fill(ix, iy);
+ }
+
+
+ /*if(recency != 0)
+ for(IHistogram2D[] hists : hist2d.values()){
+ for(IHistogram2D hist : hists){
+ hf.
+ }
+ }*/
+ //}
+ }
+ /**
+ * "recency" is a parameter used to determine how to time-weight the
+ * histogram so that the more recent events are more highly weighted.
+ * A recency of zero means that there is no time weightedness.
+ * A recency of R means that each event is weighted by a factor of (1-R)^n,
+ * where n is the number of events that have taken place since the event shown.
+ * @param recency
+ */
+ //public void setRecency(float recency){
+ //this.recency = recency;
+ //}
- public void startOfData(){
+ public void startOfData(){
- }
- public void endOfData(){
+ }
+ public void endOfData(){
- for(String name : hist2d.keySet()){
- IHistogram2D[] hists = hist2d.get(name);
- System.out.println(name);
- for(int i = 0; i< hists.length; i++){
- double max = hists[i].maxBinHeight();
- double total = hists[i].sumAllBinHeights();
- double ratioPercent = 100.*max/(double)total;
- System.out.printf(" layer %d: %.2f %% of hits were in the most populated bin\n",i, ratioPercent);
- }
- }
- }
- public static void main(String arg[]) throws IOException{
- LCIOReader lcReader = new LCIOReader(new File(arg[0]));
- HitrateHistograms driver = new HitrateHistograms();
- driver.startOfData();
- for(int i=0;i<1000;i++){
- EventHeader event = lcReader.read();
+ for(String name : hist2d.keySet()){
+ IHistogram2D[] hists = hist2d.get(name);
+ System.out.println(name);
+ for(int i = 0; i< hists.length; i++){
+ double max = hists[i].maxBinHeight();
+ double total = hists[i].sumAllBinHeights();
+ double ratioPercent = 100.*max/(double)total;
+ System.out.printf(" layer %d: %.2f %% of hits were in the most populated bin\n",i, ratioPercent);
+ }
+ }
+ }
+ public static void main(String arg[]) throws IOException{
+ LCIOReader lcReader = new LCIOReader(new File(arg[0]));
+ HitrateHistograms driver = new HitrateHistograms();
+ driver.startOfData();
+ for(int i=0;i<1000;i++){
+ EventHeader event = lcReader.read();
- if(event == null)
- break;
- driver.process(event);
+ if(event == null)
+ break;
+ driver.process(event);
- }
- driver.endOfData();
- }
+ }
+ driver.endOfData();
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/PulserFilter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/PulserFilter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/PulserFilter.java Wed Mar 9 11:43:24 2016
@@ -25,65 +25,65 @@
public class PulserFilter extends Driver{
- public void process(EventHeader event) {
+ public void process(EventHeader event) {
- // only keep pulser triggers:
- if (!event.hasCollection(GenericObject.class,"TriggerBank"))
- throw new Driver.NextEventException();
- boolean isPulser=false;
- for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
- {
- if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
- TIData tid = new TIData(gob);
- if (tid.isPulserTrigger())
- {
- isPulser=true;
- break;
- }
- }
+ // only keep pulser triggers:
+ if (!event.hasCollection(GenericObject.class,"TriggerBank"))
+ throw new Driver.NextEventException();
+ boolean isPulser=false;
+ for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
+ {
+ if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
+ TIData tid = new TIData(gob);
+ if (tid.isPulserTrigger())
+ {
+ isPulser=true;
+ break;
+ }
+ }
- // don't drop any events with EPICS data or scalers data
- // (could also do this via event tag=31)
- final EpicsData edata = EpicsData.read(event);
- if (edata != null) return;
- ScalerData sdata = ScalerData.read(event);
- if(sdata != null) return;
+ // don't drop any events with EPICS data or scalers data
+ // (could also do this via event tag=31)
+ final EpicsData edata = EpicsData.read(event);
+ if (edata != null) return;
+ ScalerData sdata = ScalerData.read(event);
+ if(sdata != null) return;
- if (!isPulser) throw new Driver.NextEventException();
+ if (!isPulser) throw new Driver.NextEventException();
- }
+ }
- public static void main(String arg[]) throws IOException{
- ConditionsDriver hack = new ConditionsDriver();
- hack.setDetectorName("HPS-EngRun2015-Nominal-v1");
- hack.setFreeze(true);
- hack.setRunNumber(Integer.parseInt(arg[2]));
- hack.initialize();
- PulserFilter pf = new PulserFilter();
- LCIOWriter writer = new LCIOWriter(arg[1]);
- File file = new File(arg[0]);
- LCIOReader reader = new LCIOReader(file);
- System.out.println(file.getPath());
+ public static void main(String arg[]) throws IOException{
+ ConditionsDriver hack = new ConditionsDriver();
+ hack.setDetectorName("HPS-EngRun2015-Nominal-v1");
+ hack.setFreeze(true);
+ hack.setRunNumber(Integer.parseInt(arg[2]));
+ hack.initialize();
+ PulserFilter pf = new PulserFilter();
+ LCIOWriter writer = new LCIOWriter(arg[1]);
+ File file = new File(arg[0]);
+ LCIOReader reader = new LCIOReader(file);
+ System.out.println(file.getPath());
- try{
- while(true){
- try{
- EventHeader eh = reader.read();
- if(eh.getEventNumber() %100 == 0)
- System.out.println(eh.getEventNumber());
- pf.process(eh);
- writer.write(eh);
- }catch(Driver.NextEventException e){
+ try{
+ while(true){
+ try{
+ EventHeader eh = reader.read();
+ if(eh.getEventNumber() %100 == 0)
+ System.out.println(eh.getEventNumber());
+ pf.process(eh);
+ writer.write(eh);
+ }catch(Driver.NextEventException e){
- }
- }
- }catch(IOException e){
- e.printStackTrace();
- reader.close();
- }
+ }
+ }
+ }catch(IOException e){
+ e.printStackTrace();
+ reader.close();
+ }
- writer.close();
- }
+ writer.close();
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java Wed Mar 9 11:43:24 2016
@@ -13,183 +13,183 @@
import hep.aida.ref.plotter.PlotterUtilities;
public class StyleUtil {
-
- public static void stylize(IPlotterRegion r, String title, String lx, String ly, double xmin, double xmax, double ymin, double ymax){
- r.setTitle(title);
- stylize(r, lx, ly);
- r.setXLimits(xmin, xmax);
- r.setYLimits(ymin, ymax);
- }
- public static void stylize(IPlotterRegion r, String title, String lx, String ly){
- r.setTitle(title);
- stylize(r, lx, ly);
- }
- public static void stylize(IPlotterRegion r, String lx, String ly){
-
- r.style().titleStyle().textStyle().setFontSize(22);
- r.style().xAxisStyle().setLabel(lx);
- r.style().xAxisStyle().labelStyle().setFontSize(16);
- r.style().xAxisStyle().tickLabelStyle().setFontSize(14);
- r.style().yAxisStyle().setLabel(ly);
- r.style().yAxisStyle().labelStyle().setFontSize(16);
- r.style().yAxisStyle().tickLabelStyle().setFontSize(14);
- // r.style().statisticsBoxStyle().set;
- //debugPrint());
- r.style().legendBoxStyle().textStyle().setFontSize(16);
- r.style().statisticsBoxStyle().textStyle().setFontSize(16);
-
- //r.style().dataStyle().showInLegendBox(false);
-
- r.style().legendBoxStyle().boxStyle().foregroundStyle().setOpacity(1.0);
- r.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- r.style().dataStyle().fillStyle().setParameter("showZeroHeightBins", "false");
- //debugPrint(r.style().dataStyle().availableParameters()));
- //r.style().dataStyle().setParameter("showDataInStatisticsBox", "false");
- r.style().setParameter("hist2DStyle", "colorMap");
- //r.style().dataBoxStyle()
- }
- public static void addHorizontalLine(IPlotterRegion r, double y, String name){
- IAnalysisFactory af = IAnalysisFactory.create();
- IFunction f = af.createFunctionFactory(af.createTreeFactory().create()).createFunctionByName(name, "p0");
- f.setParameter("p0", y);
- r.plot(f);
- }
- public static void addParabola(IPlotterRegion region, double p0,
- double p1, double p2, String string) {
- IAnalysisFactory af = IAnalysisFactory.create();
- IFunction f = af.createFunctionFactory(af.createTreeFactory().create()).createFunctionByName(string, "p2");
- f.setParameter("p0", p0);
- f.setParameter("p1", p1);
- f.setParameter("p2", p2);
- region.plot(f);
- }
- public static void noFillHistogramBars(IPlotterRegion region) {
- region.style().dataStyle().setParameter("fillHistogramBars", "false");
- region.style().dataStyle().fillStyle().setVisible(false);
-
+
+ public static void stylize(IPlotterRegion r, String title, String lx, String ly, double xmin, double xmax, double ymin, double ymax){
+ r.setTitle(title);
+ stylize(r, lx, ly);
+ r.setXLimits(xmin, xmax);
+ r.setYLimits(ymin, ymax);
+ }
+ public static void stylize(IPlotterRegion r, String title, String lx, String ly){
+ r.setTitle(title);
+ stylize(r, lx, ly);
+ }
+ public static void stylize(IPlotterRegion r, String lx, String ly){
+
+ r.style().titleStyle().textStyle().setFontSize(22);
+ r.style().xAxisStyle().setLabel(lx);
+ r.style().xAxisStyle().labelStyle().setFontSize(16);
+ r.style().xAxisStyle().tickLabelStyle().setFontSize(14);
+ r.style().yAxisStyle().setLabel(ly);
+ r.style().yAxisStyle().labelStyle().setFontSize(16);
+ r.style().yAxisStyle().tickLabelStyle().setFontSize(14);
+ // r.style().statisticsBoxStyle().set;
+ //debugPrint());
+ r.style().legendBoxStyle().textStyle().setFontSize(16);
+ r.style().statisticsBoxStyle().textStyle().setFontSize(16);
+
+ //r.style().dataStyle().showInLegendBox(false);
+
+ r.style().legendBoxStyle().boxStyle().foregroundStyle().setOpacity(1.0);
+ r.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ r.style().dataStyle().fillStyle().setParameter("showZeroHeightBins", "false");
+ //debugPrint(r.style().dataStyle().availableParameters()));
+ //r.style().dataStyle().setParameter("showDataInStatisticsBox", "false");
+ r.style().setParameter("hist2DStyle", "colorMap");
+ //r.style().dataBoxStyle()
+ }
+ public static void addHorizontalLine(IPlotterRegion r, double y, String name){
+ IAnalysisFactory af = IAnalysisFactory.create();
+ IFunction f = af.createFunctionFactory(af.createTreeFactory().create()).createFunctionByName(name, "p0");
+ f.setParameter("p0", y);
+ r.plot(f);
+ }
+ public static void addParabola(IPlotterRegion region, double p0,
+ double p1, double p2, String string) {
+ IAnalysisFactory af = IAnalysisFactory.create();
+ IFunction f = af.createFunctionFactory(af.createTreeFactory().create()).createFunctionByName(string, "p2");
+ f.setParameter("p0", p0);
+ f.setParameter("p1", p1);
+ f.setParameter("p2", p2);
+ region.plot(f);
+ }
+ public static void noFillHistogramBars(IPlotterRegion region) {
+ region.style().dataStyle().setParameter("fillHistogramBars", "false");
+ region.style().dataStyle().fillStyle().setVisible(false);
+
- region.style().dataStyle().lineStyle().setParameter("colorRotateMethod", "regionOverlayIndex");
- region.style().dataStyle().lineStyle().setParameter("colorRotate", "black, red, green, blue");
- region.style().dataStyle().lineStyle().setParameter("thickness", "3");
- region.style().dataStyle().outlineStyle().setParameter("colorRotateMethod", "regionOverlayIndex");
- //debug = true;
- debugPrint(region.style().dataStyle().outlineStyle().availableParameters());
- region.style().dataStyle().outlineStyle().setParameter("colorRotate", "black, red, green, blue");
- region.style().dataStyle().outlineStyle().setParameter("thickness", "3");
- region.style().dataStyle().errorBarStyle().setVisible(false);
- debugPrint(region.style().dataStyle().lineStyle().availableParameterOptions("colorRotateMethod"));
- }
- public static void setSize(IPlotter p, int width, int height){
- p.setParameter("plotterWidth", width +"");
- p.setParameter("plotterHeight", height +"");
- }
-
- public static void setLog(IPlotterRegion r){
+ region.style().dataStyle().lineStyle().setParameter("colorRotateMethod", "regionOverlayIndex");
+ region.style().dataStyle().lineStyle().setParameter("colorRotate", "black, red, green, blue");
+ region.style().dataStyle().lineStyle().setParameter("thickness", "3");
+ region.style().dataStyle().outlineStyle().setParameter("colorRotateMethod", "regionOverlayIndex");
+ //debug = true;
+ debugPrint(region.style().dataStyle().outlineStyle().availableParameters());
+ region.style().dataStyle().outlineStyle().setParameter("colorRotate", "black, red, green, blue");
+ region.style().dataStyle().outlineStyle().setParameter("thickness", "3");
+ region.style().dataStyle().errorBarStyle().setVisible(false);
+ debugPrint(region.style().dataStyle().lineStyle().availableParameterOptions("colorRotateMethod"));
+ }
+ public static void setSize(IPlotter p, int width, int height){
+ p.setParameter("plotterWidth", width +"");
+ p.setParameter("plotterHeight", height +"");
+ }
+
+ public static void setLog(IPlotterRegion r){
- r.style().yAxisStyle().setParameter("scale", "log");
- r.style().gridStyle().setUnits(100);
- debugPrint(r.style().gridStyle().availableParameters());
-
- }
- static boolean debug = false;
- static void debugPrint(String[] stuff){
- if(debug){
- System.out.println(Arrays.toString(stuff));
- }
- }
- public static void main(String arg[]){
- IAnalysisFactory af = IAnalysisFactory.create();
- IHistogramFactory hf = af.createHistogramFactory(af.createTreeFactory().create());
-
- IPlotter p = af.createPlotterFactory().create();
- debugPrint(p.availableParameters());
- p.createRegions(1, 2);
- IHistogram1D h1 = hf.createHistogram1D("blah", 100, -5, 5);
- IHistogram1D h2 = hf.createHistogram1D("bleh", 100, -5, 5);
- Random random = new Random();
- for(int i = 0; i< 100000; i++){
- h1.fill(random.nextGaussian());
- h2.fill(random.nextGaussian()*2);
- }
- hideLegendAndStats(p.region(1));
- noFillHistogramBars(p.region(0));
- stylize(p.region(0), "title", "x axis label", "y axis label");
- stylize(p.region(1), "stuff", "x axis label", "y axis label");
- p.region(0).plot(h1);
- p.region(0).plot(h2);
-
+ r.style().yAxisStyle().setParameter("scale", "log");
+ r.style().gridStyle().setUnits(100);
+ debugPrint(r.style().gridStyle().availableParameters());
+
+ }
+ static boolean debug = false;
+ static void debugPrint(String[] stuff){
+ if(debug){
+ System.out.println(Arrays.toString(stuff));
+ }
+ }
+ public static void main(String arg[]){
+ IAnalysisFactory af = IAnalysisFactory.create();
+ IHistogramFactory hf = af.createHistogramFactory(af.createTreeFactory().create());
+
+ IPlotter p = af.createPlotterFactory().create();
+ debugPrint(p.availableParameters());
+ p.createRegions(1, 2);
+ IHistogram1D h1 = hf.createHistogram1D("blah", 100, -5, 5);
+ IHistogram1D h2 = hf.createHistogram1D("bleh", 100, -5, 5);
+ Random random = new Random();
+ for(int i = 0; i< 100000; i++){
+ h1.fill(random.nextGaussian());
+ h2.fill(random.nextGaussian()*2);
+ }
+ hideLegendAndStats(p.region(1));
+ noFillHistogramBars(p.region(0));
+ stylize(p.region(0), "title", "x axis label", "y axis label");
+ stylize(p.region(1), "stuff", "x axis label", "y axis label");
+ p.region(0).plot(h1);
+ p.region(0).plot(h2);
+
- IHistogram2D h3 = hf.createHistogram2D("blah", 100, -5, 5, 100, -5,5);
-
- for(int i = 0; i< 100000; i++){
- h3.fill(random.nextGaussian(), random.nextGaussian());
- }
-
- p.region(1).plot(h3);
-
-
-
- p.show();
-
- p = af.createPlotterFactory().create();
- debugPrint(p.availableParameters());
- p.createRegions(1, 2);
-
- p.region(0).plot(h1);
- setLog(p.region(0));
-
-
-
- p.show();
- }
- public static void hideLegendAndStats(IPlotterRegion r){
- r.style().statisticsBoxStyle().setVisible(false);
- r.style().legendBoxStyle().setVisible(false);
- }
- public static IPlotterStyle smoothCurveStyle(IPlotterFactory pf) {
- IPlotterStyle style = pf.createPlotterStyle();
- debugPrint(style.dataStyle().availableParameters());
-
- style.dataStyle().markerStyle().setVisible(false);
-
- return style;
- }
- public static void writeToFile(IPlotter plotter, String filename, String filetype){
- //JFrame frame = new JFrame()
- //if(plotter.)
- //plotter.hide();
- //plotter.show();
- //PlotterUtilities.writeToFile(plotter, filename, filetype, null);
- try {
-
-
- //PlotterUtilities.writeToFile(plotter, filename, filetype, null);
- Thread.sleep(1000);
- Component c = PlotterUtilities.componentForPlotter(plotter);
- int width = Integer.parseInt(plotter.parameterValue("plotterWidth"));
- int height = Integer.parseInt(plotter.parameterValue("plotterHeight"));
- if(width <= 0){
- width = 300;
- plotter.setParameter("plotterWidth", Integer.toString(width));
- }
- if(height <= 0){
- height = 300;
+ IHistogram2D h3 = hf.createHistogram2D("blah", 100, -5, 5, 100, -5,5);
+
+ for(int i = 0; i< 100000; i++){
+ h3.fill(random.nextGaussian(), random.nextGaussian());
+ }
+
+ p.region(1).plot(h3);
+
+
+
+ p.show();
+
+ p = af.createPlotterFactory().create();
+ debugPrint(p.availableParameters());
+ p.createRegions(1, 2);
+
+ p.region(0).plot(h1);
+ setLog(p.region(0));
+
+
+
+ p.show();
+ }
+ public static void hideLegendAndStats(IPlotterRegion r){
+ r.style().statisticsBoxStyle().setVisible(false);
+ r.style().legendBoxStyle().setVisible(false);
+ }
+ public static IPlotterStyle smoothCurveStyle(IPlotterFactory pf) {
+ IPlotterStyle style = pf.createPlotterStyle();
+ debugPrint(style.dataStyle().availableParameters());
+
+ style.dataStyle().markerStyle().setVisible(false);
+
+ return style;
+ }
+ public static void writeToFile(IPlotter plotter, String filename, String filetype){
+ //JFrame frame = new JFrame()
+ //if(plotter.)
+ //plotter.hide();
+ //plotter.show();
+ //PlotterUtilities.writeToFile(plotter, filename, filetype, null);
+ try {
+
+
+ //PlotterUtilities.writeToFile(plotter, filename, filetype, null);
+ Thread.sleep(1000);
+ Component c = PlotterUtilities.componentForPlotter(plotter);
+ int width = Integer.parseInt(plotter.parameterValue("plotterWidth"));
+ int height = Integer.parseInt(plotter.parameterValue("plotterHeight"));
+ if(width <= 0){
+ width = 300;
+ plotter.setParameter("plotterWidth", Integer.toString(width));
+ }
+ if(height <= 0){
+ height = 300;
- plotter.setParameter("plotterHeight", Integer.toString(height));
- }
-
- c.setSize(width, height);
- BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
- Graphics2D graphics2D = image.createGraphics();
- c.paint(graphics2D);
- ImageIO.write(image,filetype, new File(filename));
- Runtime.getRuntime().exec("open " + filename);
- System.out.println("saved");
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
+ plotter.setParameter("plotterHeight", Integer.toString(height));
+ }
+
+ c.setSize(width, height);
+ BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+ Graphics2D graphics2D = image.createGraphics();
+ c.paint(graphics2D);
+ ImageIO.write(image,filetype, new File(filename));
+ Runtime.getRuntime().exec("open " + filename);
+ System.out.println("saved");
+
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java Wed Mar 9 11:43:24 2016
@@ -17,156 +17,156 @@
// full of aida output files. Then add up all of the histograms in each sub folder,
// and put the sums in separate files in a folder called "sums"
public class SumEverything {
- public static void main(String arg[]) throws IllegalArgumentException, IOException{
- if(arg.length == 2){
- twoArg(arg[0], arg[1]);
- }
- else if(arg.length == 1){
- oneArg(arg[0]);
- }
- else
- polyArg(arg);
- }
- static void oneArg(final String indir) throws IllegalArgumentException, IOException{
- File outdir = new File(indir + "/sums");
- outdir.mkdir();
- ArrayList<Thread> threads = new ArrayList<Thread>();
- for(final File subdirf : new File(indir).listFiles()){
- Thread t = new Thread(){
- public void run(){
+ public static void main(String arg[]) throws IllegalArgumentException, IOException{
+ if(arg.length == 2){
+ twoArg(arg[0], arg[1]);
+ }
+ else if(arg.length == 1){
+ oneArg(arg[0]);
+ }
+ else
+ polyArg(arg);
+ }
+ static void oneArg(final String indir) throws IllegalArgumentException, IOException{
+ File outdir = new File(indir + "/sums");
+ outdir.mkdir();
+ ArrayList<Thread> threads = new ArrayList<Thread>();
+ for(final File subdirf : new File(indir).listFiles()){
+ Thread t = new Thread(){
+ public void run(){
- String subdir = subdirf.getAbsolutePath();
- if(subdir.matches(".*/sums/?"))
- return;
- String split[] = subdir.split("/");
- String outfile = indir + "/sums/" + split[split.length-1] + ".aida";
- try {
- twoArg(subdir, outfile);
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- };
- threads.add(t);
- t.start();
- }
- for(Thread t : threads){
- try {
- t.join();
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- new File(indir + "/sums/total.aida").delete();
- twoArg(outdir.getAbsolutePath(), indir + "/sums/total.aida");
+ String subdir = subdirf.getAbsolutePath();
+ if(subdir.matches(".*/sums/?"))
+ return;
+ String split[] = subdir.split("/");
+ String outfile = indir + "/sums/" + split[split.length-1] + ".aida";
+ try {
+ twoArg(subdir, outfile);
+ } catch (IllegalArgumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ };
+ threads.add(t);
+ t.start();
+ }
+ for(Thread t : threads){
+ try {
+ t.join();
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ new File(indir + "/sums/total.aida").delete();
+ twoArg(outdir.getAbsolutePath(), indir + "/sums/total.aida");
- }
+ }
- static void twoArg(String indir, String out) throws IllegalArgumentException, IOException{
+ static void twoArg(String indir, String out) throws IllegalArgumentException, IOException{
- run(new File(indir).listFiles(), out);
- }
- static void run(File[] files, String out) throws IllegalArgumentException, IOException{
-
- long timeStart = System.currentTimeMillis();
- IAnalysisFactory af = IAnalysisFactory.create();
- ITreeFactory tf = af.createTreeFactory();
- new File(out).delete();
- ITree outtree = tf.create(out, "xml", false, true);
- //IHistogramFactory hf = af.createHistogramFactory(outtree);
- int j = 0;
- String names[] = null;
- for(File s : files){
- if(!s.getAbsolutePath().endsWith("aida"))
- continue;
- try{
- ITree tree = tf.create(s.getAbsolutePath(),"xml");
+ run(new File(indir).listFiles(), out);
+ }
+ static void run(File[] files, String out) throws IllegalArgumentException, IOException{
+
+ long timeStart = System.currentTimeMillis();
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITreeFactory tf = af.createTreeFactory();
+ new File(out).delete();
+ ITree outtree = tf.create(out, "xml", false, true);
+ //IHistogramFactory hf = af.createHistogramFactory(outtree);
+ int j = 0;
+ String names[] = null;
+ for(File s : files){
+ if(!s.getAbsolutePath().endsWith("aida"))
+ continue;
+ try{
+ ITree tree = tf.create(s.getAbsolutePath(),"xml");
- if(j == 0){
- names = tree.listObjectNames("/", true);
- System.out.println(Arrays.toString(names));
- outtree.mount("/tmp", tree, "/");
- for(String name : names){
- if(name.endsWith("/")){
- outtree.mkdirs(name);
- continue;
- }
- Object o = tree.find(name);
- if(o instanceof IHistogram1D || o instanceof IHistogram2D)
- outtree.cp("/tmp" + name, name);
- }
- outtree.unmount("/tmp");
- //tree.close();
+ if(j == 0){
+ names = tree.listObjectNames("/", true);
+ System.out.println(Arrays.toString(names));
+ outtree.mount("/tmp", tree, "/");
+ for(String name : names){
+ if(name.endsWith("/")){
+ outtree.mkdirs(name);
+ continue;
+ }
+ Object o = tree.find(name);
+ if(o instanceof IHistogram1D || o instanceof IHistogram2D)
+ outtree.cp("/tmp" + name, name);
+ }
+ outtree.unmount("/tmp");
+ //tree.close();
- }
- else{
- //tree.
- //String [] names = tree.listObjectNames("/", true);
- //outtree.mount("/tmp", tree, "/");
- //System.out.println(Arrays.toString(names));
- for(String name : names){
- if(name.endsWith("/"))
- continue;
- Object o = null;
- try{
- o = tree.find(name);
- } catch(IllegalArgumentException e){
- System.err.println("couldn't find object called " + name + " in file " + s);
- throw e;
- }
- if(o instanceof IHistogram1D){
- if(((IHistogram1D)o).allEntries() != 0)
- ((IHistogram1D)outtree.find(name)).add((IHistogram1D)o);
- }
- if(o instanceof IHistogram2D)
- if(((IHistogram2D)o).allEntries() != 0)
- ((IHistogram2D)outtree.find(name)).add((IHistogram2D)o);
- }
- //outtree.unmount("/tmp");
- //tree.close();
- }
+ }
+ else{
+ //tree.
+ //String [] names = tree.listObjectNames("/", true);
+ //outtree.mount("/tmp", tree, "/");
+ //System.out.println(Arrays.toString(names));
+ for(String name : names){
+ if(name.endsWith("/"))
+ continue;
+ Object o = null;
+ try{
+ o = tree.find(name);
+ } catch(IllegalArgumentException e){
+ System.err.println("couldn't find object called " + name + " in file " + s);
+ throw e;
+ }
+ if(o instanceof IHistogram1D){
+ if(((IHistogram1D)o).allEntries() != 0)
+ ((IHistogram1D)outtree.find(name)).add((IHistogram1D)o);
+ }
+ if(o instanceof IHistogram2D)
+ if(((IHistogram2D)o).allEntries() != 0)
+ ((IHistogram2D)outtree.find(name)).add((IHistogram2D)o);
+ }
+ //outtree.unmount("/tmp");
+ //tree.close();
+ }
- tree.close();
- j++;
- System.out.println(j + " files have been read (" +(System.currentTimeMillis()-timeStart)/j + " ms per event");
+ tree.close();
+ j++;
+ System.out.println(j + " files have been read (" +(System.currentTimeMillis()-timeStart)/j + " ms per event");
- } catch(IllegalArgumentException e){
- //print the filename
- System.out.println("Exception happened at file " + s.getAbsolutePath());
+ } catch(IllegalArgumentException e){
+ //print the filename
+ System.out.println("Exception happened at file " + s.getAbsolutePath());
- e.printStackTrace();
- }
+ e.printStackTrace();
+ }
- outtree.commit();
- System.out.println("summed file " + out +" commited. Total time = " + (System.currentTimeMillis()-timeStart)/1000 + " seconds");
- }
- }
+ outtree.commit();
+ System.out.println("summed file " + out +" commited. Total time = " + (System.currentTimeMillis()-timeStart)/1000 + " seconds");
+ }
+ }
- static void polyArg(String[] arg) throws IllegalArgumentException, IOException{
- ArrayList<File> files = new ArrayList<File>();
- boolean nextIsOutput = false;
- for(String a : arg){
- if(a.equals("-o")){
- nextIsOutput = true;
- continue;
- }
- if(nextIsOutput){
- run(files.toArray(new File[0]), a);
- nextIsOutput = false;
- files.clear();
- continue;
- }
- files.add(new File(a));
+ static void polyArg(String[] arg) throws IllegalArgumentException, IOException{
+ ArrayList<File> files = new ArrayList<File>();
+ boolean nextIsOutput = false;
+ for(String a : arg){
+ if(a.equals("-o")){
+ nextIsOutput = true;
+ continue;
+ }
+ if(nextIsOutput){
+ run(files.toArray(new File[0]), a);
+ nextIsOutput = false;
+ files.clear();
+ continue;
+ }
+ files.add(new File(a));
- }
- }
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/BinGenerator.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/BinGenerator.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/BinGenerator.java Wed Mar 9 11:43:24 2016
@@ -5,86 +5,86 @@
import java.io.PrintWriter;
public class BinGenerator {
- public static void main(String arg[]) throws FileNotFoundException{
- int nBins = 32;
+ public static void main(String arg[]) throws FileNotFoundException{
+ int nBins = 32;
- PrintStream pw = new PrintStream("generatedbins.txt");
- pw.println(nBins);
- double[] thetaBins = getThetaBins(nBins);
- for(int i = 0; i< nBins; i++){
- double thetaMin = thetaBins[i];
- double thetaMax = thetaBins[i+1];
- double phiBounds[] = getPhiBounds(thetaMin, thetaMax);
- pw.printf("%d %.4f %.4f ", phiBounds.length/2, thetaMin, thetaMax);
- for(int j = 0; j< phiBounds.length; j++){
- pw.printf("%.4f ", phiBounds[j]);
- }
- pw.println();
- }
- ShowCustomBinning.main(new String[]{"generatedbins.txt"});
+ PrintStream pw = new PrintStream("generatedbins.txt");
+ pw.println(nBins);
+ double[] thetaBins = getThetaBins(nBins);
+ for(int i = 0; i< nBins; i++){
+ double thetaMin = thetaBins[i];
+ double thetaMax = thetaBins[i+1];
+ double phiBounds[] = getPhiBounds(thetaMin, thetaMax);
+ pw.printf("%d %.4f %.4f ", phiBounds.length/2, thetaMin, thetaMax);
+ for(int j = 0; j< phiBounds.length; j++){
+ pw.printf("%.4f ", phiBounds[j]);
+ }
+ pw.println();
+ }
+ ShowCustomBinning.main(new String[]{"generatedbins.txt"});
- }
+ }
- private static double[] getThetaBins(int nBins){
- /*double thetaMin = 0.035;
- double dTheta = .2/nBins;
- double[] bins = new double[nBins +1];
- for(int i = 0; i< nBins+1; i++){
- bins[i] = thetaMin+dTheta*i;
- }
- return bins; */
- double thetaMax = .200;
- double thetaMin = .040;
+ private static double[] getThetaBins(int nBins){
+ /*double thetaMin = 0.035;
+ double dTheta = .2/nBins;
+ double[] bins = new double[nBins +1];
+ for(int i = 0; i< nBins+1; i++){
+ bins[i] = thetaMin+dTheta*i;
+ }
+ return bins; */
+ double thetaMax = .200;
+ double thetaMin = .040;
- double[] bins = new double[nBins +1];
- for(int i = 0; i<nBins+1; i++){
- bins[i] = thetaMin+i*(thetaMax-thetaMin)/nBins;
- }
- return bins;
- /*double xMin = 1/(thetaMax*thetaMax);
- double xMax = 1/(thetaMin*thetaMin);
- for(int i = 0; i< nBins+1; i++){
- double x = xMax - i*(xMax-xMin)/nBins;
- bins[i] = Math.pow(x, -.5);
- }
- return bins;*/
- }
- private static double[] getPhiBounds(double thetaMin, double thetaMax){
- double phiBins[] = new double[6];
- double dphi = .01;
- int edgeNumber = 0;
+ double[] bins = new double[nBins +1];
+ for(int i = 0; i<nBins+1; i++){
+ bins[i] = thetaMin+i*(thetaMax-thetaMin)/nBins;
+ }
+ return bins;
+ /*double xMin = 1/(thetaMax*thetaMax);
+ double xMax = 1/(thetaMin*thetaMin);
+ for(int i = 0; i< nBins+1; i++){
+ double x = xMax - i*(xMax-xMin)/nBins;
+ bins[i] = Math.pow(x, -.5);
+ }
+ return bins;*/
+ }
+ private static double[] getPhiBounds(double thetaMin, double thetaMax){
+ double phiBins[] = new double[6];
+ double dphi = .01;
+ int edgeNumber = 0;
- boolean prevInRange = false;
- for(double phi = 0; phi< 3.14; phi+= dphi){
-
- // make the angular cuts on the tracks such that the particles that go into that cut
- // are expected to be within 4 mm (~= 2 times the angular resolution of 1.5 mrad) of
- // the ecal cuts.
- double d = 4;
-
- boolean inRange = EcalUtil.fid_ECal_spherical_more_strict(thetaMin, phi, d) && EcalUtil.fid_ECal_spherical_more_strict(thetaMax, phi, d)
- && EcalUtil.fid_ECal_spherical_more_strict(thetaMin, -phi, d) && EcalUtil.fid_ECal_spherical_more_strict(thetaMax, -phi, d);
- if(inRange && !prevInRange)
- phiBins[edgeNumber++] = phi;
- if(prevInRange && !inRange)
- phiBins[edgeNumber++] = phi-dphi;
- prevInRange = inRange;
- }
- if(phiBins[2] == 0)
- return new double[]{phiBins[0], phiBins[1]};
- if(phiBins[4] == 0)
- return new double[]{phiBins[0], phiBins[1],phiBins[2], phiBins[3]};
-
- //3 segments: choose the largest two
- if(phiBins[4] != 0 && phiBins[1] - phiBins[0] > phiBins[3]-phiBins[2] && phiBins[5] - phiBins[4] > phiBins[3]-phiBins[2]){
- return new double[]{phiBins[0], phiBins[1],phiBins[4], phiBins[5]};
- }
- if(phiBins[4] != 0 && phiBins[3] - phiBins[2] > phiBins[1]-phiBins[0] && phiBins[5] - phiBins[4] > phiBins[1]-phiBins[0]){
- return new double[]{phiBins[2], phiBins[3],phiBins[4], phiBins[5]};
- }
- return new double[]{phiBins[0], phiBins[1],phiBins[2], phiBins[3]};
-
-
- }
+ boolean prevInRange = false;
+ for(double phi = 0; phi< 3.14; phi+= dphi){
+
+ // make the angular cuts on the tracks such that the particles that go into that cut
+ // are expected to be within 4 mm (~= 2 times the angular resolution of 1.5 mrad) of
+ // the ecal cuts.
+ double d = 4;
+
+ boolean inRange = EcalUtil.fid_ECal_spherical_more_strict(thetaMin, phi, d) && EcalUtil.fid_ECal_spherical_more_strict(thetaMax, phi, d)
+ && EcalUtil.fid_ECal_spherical_more_strict(thetaMin, -phi, d) && EcalUtil.fid_ECal_spherical_more_strict(thetaMax, -phi, d);
+ if(inRange && !prevInRange)
+ phiBins[edgeNumber++] = phi;
+ if(prevInRange && !inRange)
+ phiBins[edgeNumber++] = phi-dphi;
+ prevInRange = inRange;
+ }
+ if(phiBins[2] == 0)
+ return new double[]{phiBins[0], phiBins[1]};
+ if(phiBins[4] == 0)
+ return new double[]{phiBins[0], phiBins[1],phiBins[2], phiBins[3]};
+
+ //3 segments: choose the largest two
+ if(phiBins[4] != 0 && phiBins[1] - phiBins[0] > phiBins[3]-phiBins[2] && phiBins[5] - phiBins[4] > phiBins[3]-phiBins[2]){
+ return new double[]{phiBins[0], phiBins[1],phiBins[4], phiBins[5]};
+ }
+ if(phiBins[4] != 0 && phiBins[3] - phiBins[2] > phiBins[1]-phiBins[0] && phiBins[5] - phiBins[4] > phiBins[1]-phiBins[0]){
+ return new double[]{phiBins[2], phiBins[3],phiBins[4], phiBins[5]};
+ }
+ return new double[]{phiBins[0], phiBins[1],phiBins[2], phiBins[3]};
+
+
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/CustomBinning.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/CustomBinning.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/CustomBinning.java Wed Mar 9 11:43:24 2016
@@ -5,76 +5,76 @@
import java.util.Scanner;
public class CustomBinning {
- public CustomBinning(File f) throws FileNotFoundException{
- Scanner s = new Scanner(f);
+ public CustomBinning(File f) throws FileNotFoundException{
+ Scanner s = new Scanner(f);
- nTheta = s.nextInt(); //number of bins in theta;
- thetaMax = new double[nTheta];
- thetaMin = new double[nTheta];
-
- phiMax = new double[nTheta][];
- phiMin = new double[nTheta][];
- int i = 0;
- while(s.hasNext()){ //new row
- int nPhi = s.nextInt();
- thetaMin[i] = s.nextDouble();
- thetaMax[i] = s.nextDouble();
-
- phiMax[i] = new double[nPhi];
- phiMin[i] = new double[nPhi];
- for(int j = 0; j<nPhi; j++){
- phiMin[i][j] = s.nextDouble();
- phiMax[i][j] = s.nextDouble();
- }
- i++;
- }
- }
- double[][] phiMax;
- double[][] phiMin;
- public double thetaMax[], thetaMin[];
- public int nTheta;
+ nTheta = s.nextInt(); //number of bins in theta;
+ thetaMax = new double[nTheta];
+ thetaMin = new double[nTheta];
+
+ phiMax = new double[nTheta][];
+ phiMin = new double[nTheta][];
+ int i = 0;
+ while(s.hasNext()){ //new row
+ int nPhi = s.nextInt();
+ thetaMin[i] = s.nextDouble();
+ thetaMax[i] = s.nextDouble();
+
+ phiMax[i] = new double[nPhi];
+ phiMin[i] = new double[nPhi];
+ for(int j = 0; j<nPhi; j++){
+ phiMin[i][j] = s.nextDouble();
+ phiMax[i][j] = s.nextDouble();
+ }
+ i++;
+ }
+ }
+ double[][] phiMax;
+ double[][] phiMin;
+ public double thetaMax[], thetaMin[];
+ public int nTheta;
- double getSteradians(int binNumber){
- double t1 = thetaMin[binNumber];
- double t2 = thetaMax[binNumber];
- double dCos = Math.cos(t1)-Math.cos(t2);
- double dPhiTot = 0;
- for(int i = 0; i< phiMax[binNumber].length; i++){
- dPhiTot += phiMax[binNumber][i]-phiMin[binNumber][i];
- }
- return 2*dPhiTot*dCos; //factor of two because top and bottom
- }
- boolean inRange(double theta, double phi){
- phi = Math.abs(phi);
- /*int i =(int) Math.floor((theta-theta0)/deltaTheta);
- if(i>= nTheta || i<0)
- return false;*/
- if(theta > thetaMax[nTheta-1] || theta < thetaMin[0])
- return false;
- int i;
- boolean found = false;
- for(i = 0; i< nTheta; i++){
- if(theta > thetaMin[i] && theta < thetaMax[i]){
- found = true;
- break;
- }
- }
- if(!found)
- return false;
-
- for(int j = 0; j<phiMax[i].length; j++){
- if(phi>phiMin[i][j] && phi< phiMax[i][j])
- return true;
- }
- return false;
+ double getSteradians(int binNumber){
+ double t1 = thetaMin[binNumber];
+ double t2 = thetaMax[binNumber];
+ double dCos = Math.cos(t1)-Math.cos(t2);
+ double dPhiTot = 0;
+ for(int i = 0; i< phiMax[binNumber].length; i++){
+ dPhiTot += phiMax[binNumber][i]-phiMin[binNumber][i];
+ }
+ return 2*dPhiTot*dCos; //factor of two because top and bottom
+ }
+ boolean inRange(double theta, double phi){
+ phi = Math.abs(phi);
+ /*int i =(int) Math.floor((theta-theta0)/deltaTheta);
+ if(i>= nTheta || i<0)
+ return false;*/
+ if(theta > thetaMax[nTheta-1] || theta < thetaMin[0])
+ return false;
+ int i;
+ boolean found = false;
+ for(i = 0; i< nTheta; i++){
+ if(theta > thetaMin[i] && theta < thetaMax[i]){
+ found = true;
+ break;
+ }
+ }
+ if(!found)
+ return false;
+
+ for(int j = 0; j<phiMax[i].length; j++){
+ if(phi>phiMin[i][j] && phi< phiMax[i][j])
+ return true;
+ }
+ return false;
- }
- public double getTotSteradians() {
- double tot = 0;
- for(int i = 0; i<nTheta; i++){
- tot += getSteradians(i);
- }
- return tot;
- }
+ }
+ public double getTotSteradians() {
+ double tot = 0;
+ for(int i = 0; i<nTheta; i++){
+ tot += getSteradians(i);
+ }
+ return tot;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/DisplayHistograms.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/DisplayHistograms.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/DisplayHistograms.java Wed Mar 9 11:43:24 2016
@@ -3,8 +3,8 @@
import java.io.IOException;
public class DisplayHistograms {
- public static void main(String arg[]) throws IllegalArgumentException, IOException{
- //System.out.println("dognabo");
- MakeHistograms.main(new String[]{arg[0]});
- }
+ public static void main(String arg[]) throws IllegalArgumentException, IOException{
+ //System.out.println("dognabo");
+ MakeHistograms.main(new String[]{arg[0]});
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/EcalUtil.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/EcalUtil.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/EcalUtil.java Wed Mar 9 11:43:24 2016
@@ -12,232 +12,232 @@
import org.lcsim.event.Cluster;
public class EcalUtil {
-
- static int[] getCrystalIndex(Cluster c){
- if(map == null){
- try{
- readMap();
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- c.getPosition();
- int bestix = 0, bestiy = 0;
- double bestdist = 100000;
-
- double cx = c.getPosition()[0];
- double cy = c.getPosition()[1];
- for(int ix = -23; ix<= 23; ix++){
- if(!map.containsKey(200+ix))
- continue;
- double x = map.get(200+ix)[0];
- if(Math.abs(x-cx)<bestdist){
- bestdist = Math.abs(x-cx);
- bestix = ix;
- }
- }
-
- bestdist = 100000;
- for(int iy = -5; iy<= 5; iy++){
- if(!map.containsKey(100*iy + bestix))
- continue;
- double y = map.get(100*iy + bestix)[1];
- if(Math.abs(y-cy)<bestdist){
- bestdist = Math.abs(y-cy);
- bestiy = iy;
- }
- }
- return new int[]{bestix, bestiy};
- }
-
-
- /**
- * Holly's algorithm.
- * @param x x position of cluster
- * @param y y position of cluster
- * @param e energy of cluster
- * @param pid type of particle (11 = electron; -1 = positron)
- * @return array of doubles
- * <br> [0] theta = atan(py/pz)
- * <br> [1] phi = atan(px/pz)
- */
- static double [] toHollysCoordinates(double x, double y, double e, int pid){
- if(pid == 11){
- return new double[]{0.00071 * y +0.000357, 0.00071*x + 0.00003055*e + 0.04572/e +0.0006196};
- } else if(pid == -11){
- return new double[]{0.00071 * y +0.000357, 0.00071*x - 0.0006465*e + 0.045757/e +0.003465};
- }
- return null;
- }
-
- static double getSteradians(double x, double y, double e,int pid, double dA){
- double thetaPhi[] = toHollysCoordinates(x, y, e, pid);
- return .00071*.00071*dA/Math.sqrt(thetaPhi[0]*thetaPhi[0]+ thetaPhi[1]*thetaPhi[1]+1);
- }
-
- static boolean isSeedEdge(Cluster c){
- CalorimeterHit seedhit = (CalorimeterHit)c.getCalorimeterHits().get(0);
- // seedhit
- int ix = seedhit.getIdentifierFieldValue("ix");
- int iy = seedhit.getIdentifierFieldValue("iy");
-
- //seedhit.get
- return isEdge(ix, iy);
- }
- static boolean isEdge(int ix, int iy){
- if(iy == 5 || iy == 1 || iy == -1 || iy == -5)
- return true;
- if(ix == -23 || ix == 23)
- return true;
- if((iy == 2 || iy == -2) && (ix >=-11 && ix <= -1))
- return true;
- return false;
- }
- public static boolean fid_ECal(Cluster c){
- return fid_ECal(c.getPosition()[0], c.getPosition()[1]);
- }
- public static boolean fid_ECal(double x, double y)
- {
- y = Math.abs(y);
-
- boolean in_fid = false;
- double x_edge_low = -262.74;
- double x_edge_high = 347.7;
- double y_edge_low = 33.54;
- double y_edge_high = 75.18;
-
- double x_gap_low = -106.66;
- double x_gap_high = 42.17;
- double y_gap_high = 47.18;
-
- y = Math.abs(y);
-
- if( x > x_edge_low && x < x_edge_high && y > y_edge_low && y < y_edge_high )
- {
- if( !(x > x_gap_low && x < x_gap_high && y > y_edge_low && y < y_gap_high) )
- {
- in_fid = true;
- }
- }
-
- return in_fid;
- }
- /**
- *
- * @param x
- * @param y
- * @param d the additional distance from the edge of the ecal in addition
- * to what is required by fid_Cal(double, double)
- * @return
- */
- public static boolean fid_ecal_more_strict(double x, double y, double d){
- y = Math.abs(y);
-
- boolean in_fid = false;
-
- double x_edge_low = -262.74 + d;
- double x_edge_high = 347.7 - d;
- double y_edge_low = 33.54 + d;
- double y_edge_high = 75.18 - d;
-
- double x_gap_low = -106.66 - d;
- double x_gap_high = 42.17 + d;
- double y_gap_high = 47.18 + d;
-
- y = Math.abs(y);
-
- if( x > x_edge_low && x < x_edge_high && y > y_edge_low && y < y_edge_high )
- {
- if( !(x > x_gap_low && x < x_gap_high && y > y_edge_low && y < y_gap_high) )
- {
- in_fid = true;
- }
- }
-
- return in_fid;
- }
- static double[] toSphericalFromBeam(double pxpz, double pypz){
- double x = pxpz, y = pypz, z = 1;
- double beamTilt = .03057;
- double xtemp = Math.cos(beamTilt)*x - Math.sin(beamTilt)*z;
- double ztemp = Math.cos(beamTilt)*z + Math.sin(beamTilt)*x;
- double ytemp = y;
-
- double theta = Math.atan(Math.hypot(xtemp, ytemp)/ ztemp);
- double phi = Math.atan2(ytemp, xtemp);
-
-
- return new double[]{theta, phi};
- }
- static Map<Integer, double[]> map ;
- static void readMap() throws FileNotFoundException{
- Scanner s = new Scanner(new File(System.getenv("HOME") + "/ecal_positions.txt"));
- map = new HashMap();
-
- while(s.hasNext()){
- int ix =s.nextInt();
- int iy = s.nextInt();
- double x = s.nextDouble();
- double y =s.nextDouble();
- map.put(ix+100*iy, new double[]{x, y});
-
- }
- s.close();
- }
- static double getArea(int ix, int iy){
- int ixp = ix+1;
- if(ixp == 0)
- ixp = 1;
- int ixm = ix-1;
- if(ixm == 0)
- ixm = -1;
- double[] plus = map.get(ixp+100*(iy+1));
- double[] minus = map.get(ixm+100*(iy-1));
- return (plus[0]-minus[0])*(plus[1]-minus[1])/4;
- }
-
- public static double[] getThetaPhiSpherical(double x,double y){
- double hcoord[] = toHollysCoordinates(x,y, 1.056, 11);
- return toSphericalFromBeam(Math.tan(hcoord[1]),Math.tan(hcoord[0]));
- }
- /*beam tilt*/
- static double tilt = .03057;
- //assuming FEE electron.
-
- public static double[] getXY(double theta, double phi){
-
- double ux = Math.cos(phi)*Math.sin(theta)*Math.cos(tilt)+Math.cos(theta)*Math.sin(tilt);
- double uy = Math.sin(phi)*Math.sin(theta);
- double uz = Math.cos(theta)*Math.cos(tilt)-Math.cos(phi)*Math.sin(theta)*Math.sin(tilt);
- double pxpz = ux/uz;
- double pypz = uy/uz;
- //holly's coordinates:
- double h1 = Math.atan(pypz);
- double h2 = Math.atan(pxpz);
- //0.00071 * y +0.000357,
- //0.00071*x + 0.00003055*e + 0.04572/e +0.0006196
- double y = (h1-0.000357)/0.00071;
- double e = 1.056;
- double x = (h2 - 0.00003055*e - 0.04572/e -0.0006196)/0.00071;
- return new double[]{x,y};
- }
- public static boolean fid_ECal_spherical(double theta, double phi){
- double[] xy = getXY(theta, phi);
- double x = xy[0];
- double y = xy[1];
- return fid_ECal(x, y);
- }
- public static boolean fid_ECal_spherical_more_strict(double theta, double phi, double d){
- double[] xy = getXY(theta, phi);
- double x = xy[0];
- double y = xy[1];
- return fid_ecal_more_strict(x, y, d);
- }
- public static void main(String arg[]){
- double x = 0, y = 0;
- double sp[] = getThetaPhiSpherical(x,y);
- System.out.println(Arrays.toString(getXY(sp[0], sp[1])));
- }
+
+ static int[] getCrystalIndex(Cluster c){
+ if(map == null){
+ try{
+ readMap();
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+ c.getPosition();
+ int bestix = 0, bestiy = 0;
+ double bestdist = 100000;
+
+ double cx = c.getPosition()[0];
+ double cy = c.getPosition()[1];
+ for(int ix = -23; ix<= 23; ix++){
+ if(!map.containsKey(200+ix))
+ continue;
+ double x = map.get(200+ix)[0];
+ if(Math.abs(x-cx)<bestdist){
+ bestdist = Math.abs(x-cx);
+ bestix = ix;
+ }
+ }
+
+ bestdist = 100000;
+ for(int iy = -5; iy<= 5; iy++){
+ if(!map.containsKey(100*iy + bestix))
+ continue;
+ double y = map.get(100*iy + bestix)[1];
+ if(Math.abs(y-cy)<bestdist){
+ bestdist = Math.abs(y-cy);
+ bestiy = iy;
+ }
+ }
+ return new int[]{bestix, bestiy};
+ }
+
+
+ /**
+ * Holly's algorithm.
+ * @param x x position of cluster
+ * @param y y position of cluster
+ * @param e energy of cluster
+ * @param pid type of particle (11 = electron; -1 = positron)
+ * @return array of doubles
+ * <br> [0] theta = atan(py/pz)
+ * <br> [1] phi = atan(px/pz)
+ */
+ static double [] toHollysCoordinates(double x, double y, double e, int pid){
+ if(pid == 11){
+ return new double[]{0.00071 * y +0.000357, 0.00071*x + 0.00003055*e + 0.04572/e +0.0006196};
+ } else if(pid == -11){
+ return new double[]{0.00071 * y +0.000357, 0.00071*x - 0.0006465*e + 0.045757/e +0.003465};
+ }
+ return null;
+ }
+
+ static double getSteradians(double x, double y, double e,int pid, double dA){
+ double thetaPhi[] = toHollysCoordinates(x, y, e, pid);
+ return .00071*.00071*dA/Math.sqrt(thetaPhi[0]*thetaPhi[0]+ thetaPhi[1]*thetaPhi[1]+1);
+ }
+
+ static boolean isSeedEdge(Cluster c){
+ CalorimeterHit seedhit = (CalorimeterHit)c.getCalorimeterHits().get(0);
+ // seedhit
+ int ix = seedhit.getIdentifierFieldValue("ix");
+ int iy = seedhit.getIdentifierFieldValue("iy");
+
+ //seedhit.get
+ return isEdge(ix, iy);
+ }
+ static boolean isEdge(int ix, int iy){
+ if(iy == 5 || iy == 1 || iy == -1 || iy == -5)
+ return true;
+ if(ix == -23 || ix == 23)
+ return true;
+ if((iy == 2 || iy == -2) && (ix >=-11 && ix <= -1))
+ return true;
+ return false;
+ }
+ public static boolean fid_ECal(Cluster c){
+ return fid_ECal(c.getPosition()[0], c.getPosition()[1]);
+ }
+ public static boolean fid_ECal(double x, double y)
+ {
+ y = Math.abs(y);
+
+ boolean in_fid = false;
+ double x_edge_low = -262.74;
+ double x_edge_high = 347.7;
+ double y_edge_low = 33.54;
+ double y_edge_high = 75.18;
+
+ double x_gap_low = -106.66;
+ double x_gap_high = 42.17;
+ double y_gap_high = 47.18;
+
+ y = Math.abs(y);
+
+ if( x > x_edge_low && x < x_edge_high && y > y_edge_low && y < y_edge_high )
+ {
+ if( !(x > x_gap_low && x < x_gap_high && y > y_edge_low && y < y_gap_high) )
+ {
+ in_fid = true;
+ }
+ }
+
+ return in_fid;
+ }
+ /**
+ *
+ * @param x
+ * @param y
+ * @param d the additional distance from the edge of the ecal in addition
+ * to what is required by fid_Cal(double, double)
+ * @return
+ */
+ public static boolean fid_ecal_more_strict(double x, double y, double d){
+ y = Math.abs(y);
+
+ boolean in_fid = false;
+
+ double x_edge_low = -262.74 + d;
+ double x_edge_high = 347.7 - d;
+ double y_edge_low = 33.54 + d;
+ double y_edge_high = 75.18 - d;
+
+ double x_gap_low = -106.66 - d;
+ double x_gap_high = 42.17 + d;
+ double y_gap_high = 47.18 + d;
+
+ y = Math.abs(y);
+
+ if( x > x_edge_low && x < x_edge_high && y > y_edge_low && y < y_edge_high )
+ {
+ if( !(x > x_gap_low && x < x_gap_high && y > y_edge_low && y < y_gap_high) )
+ {
+ in_fid = true;
+ }
+ }
+
+ return in_fid;
+ }
+ static double[] toSphericalFromBeam(double pxpz, double pypz){
+ double x = pxpz, y = pypz, z = 1;
+ double beamTilt = .03057;
+ double xtemp = Math.cos(beamTilt)*x - Math.sin(beamTilt)*z;
+ double ztemp = Math.cos(beamTilt)*z + Math.sin(beamTilt)*x;
+ double ytemp = y;
+
+ double theta = Math.atan(Math.hypot(xtemp, ytemp)/ ztemp);
+ double phi = Math.atan2(ytemp, xtemp);
+
+
+ return new double[]{theta, phi};
+ }
+ static Map<Integer, double[]> map ;
+ static void readMap() throws FileNotFoundException{
+ Scanner s = new Scanner(new File(System.getenv("HOME") + "/ecal_positions.txt"));
+ map = new HashMap();
+
+ while(s.hasNext()){
+ int ix =s.nextInt();
+ int iy = s.nextInt();
+ double x = s.nextDouble();
+ double y =s.nextDouble();
+ map.put(ix+100*iy, new double[]{x, y});
+
+ }
+ s.close();
+ }
+ static double getArea(int ix, int iy){
+ int ixp = ix+1;
+ if(ixp == 0)
+ ixp = 1;
+ int ixm = ix-1;
+ if(ixm == 0)
+ ixm = -1;
+ double[] plus = map.get(ixp+100*(iy+1));
+ double[] minus = map.get(ixm+100*(iy-1));
+ return (plus[0]-minus[0])*(plus[1]-minus[1])/4;
+ }
+
+ public static double[] getThetaPhiSpherical(double x,double y){
+ double hcoord[] = toHollysCoordinates(x,y, 1.056, 11);
+ return toSphericalFromBeam(Math.tan(hcoord[1]),Math.tan(hcoord[0]));
+ }
+ /*beam tilt*/
+ static double tilt = .03057;
+ //assuming FEE electron.
+
+ public static double[] getXY(double theta, double phi){
+
+ double ux = Math.cos(phi)*Math.sin(theta)*Math.cos(tilt)+Math.cos(theta)*Math.sin(tilt);
+ double uy = Math.sin(phi)*Math.sin(theta);
+ double uz = Math.cos(theta)*Math.cos(tilt)-Math.cos(phi)*Math.sin(theta)*Math.sin(tilt);
+ double pxpz = ux/uz;
+ double pypz = uy/uz;
+ //holly's coordinates:
+ double h1 = Math.atan(pypz);
+ double h2 = Math.atan(pxpz);
+ //0.00071 * y +0.000357,
+ //0.00071*x + 0.00003055*e + 0.04572/e +0.0006196
+ double y = (h1-0.000357)/0.00071;
+ double e = 1.056;
+ double x = (h2 - 0.00003055*e - 0.04572/e -0.0006196)/0.00071;
+ return new double[]{x,y};
+ }
+ public static boolean fid_ECal_spherical(double theta, double phi){
+ double[] xy = getXY(theta, phi);
+ double x = xy[0];
+ double y = xy[1];
+ return fid_ECal(x, y);
+ }
+ public static boolean fid_ECal_spherical_more_strict(double theta, double phi, double d){
+ double[] xy = getXY(theta, phi);
+ double x = xy[0];
+ double y = xy[1];
+ return fid_ecal_more_strict(x, y, d);
+ }
+ public static void main(String arg[]){
+ double x = 0, y = 0;
+ double sp[] = getThetaPhiSpherical(x,y);
+ System.out.println(Arrays.toString(getXY(sp[0], sp[1])));
+ }
}
-
-
+
+
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ExtractFormFactors.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ExtractFormFactors.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ExtractFormFactors.java Wed Mar 9 11:43:24 2016
@@ -17,129 +17,129 @@
//arg[5] is the radius (in fm) for calculating predicted form factors
public class ExtractFormFactors {
- static double Na = 6.022e23;
- static double hbarc = .1973269788;
- static double alpha = 1/137.;
- static double q = 1.602e-19;
- static double amu = .931454;
- public static void main(String arg[]) throws IllegalArgumentException, IOException{
- IAnalysisFactory af = IAnalysisFactory.create();
- ITreeFactory tf = af.createTreeFactory();
+ static double Na = 6.022e23;
+ static double hbarc = .1973269788;
+ static double alpha = 1/137.;
+ static double q = 1.602e-19;
+ static double amu = .931454;
+ public static void main(String arg[]) throws IllegalArgumentException, IOException{
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITreeFactory tf = af.createTreeFactory();
- String[] inpaths = new String[]{"theta", "theta top", "theta bottom"};
- String[] outpaths = new String[]{"form factors", "top only", "bottom only"};
-
- for(int config = 0; config < 3; config ++){
- ITree treeNew = af.createTreeFactory().create();
+ String[] inpaths = new String[]{"theta", "theta top", "theta bottom"};
+ String[] outpaths = new String[]{"form factors", "top only", "bottom only"};
+
+ for(int config = 0; config < 3; config ++){
+ ITree treeNew = af.createTreeFactory().create();
- IDataPointSetFactory dpsf = af.createDataPointSetFactory(treeNew);
+ IDataPointSetFactory dpsf = af.createDataPointSetFactory(treeNew);
- IPlotterFactory pf = af.createPlotterFactory();
- IPlotter p = pf.create(outpaths[config]);
+ IPlotterFactory pf = af.createPlotterFactory();
+ IPlotter p = pf.create(outpaths[config]);
- int Nsets = arg.length/10;
- dpsMeasured = new IDataPointSet[Nsets];
+ int Nsets = arg.length/10;
+ dpsMeasured = new IDataPointSet[Nsets];
- for(int set = 0; set< Nsets; set++){
- String title = arg[0+10*set];
- String inputFile = arg[1+10*set];
- CustomBinning cb = new CustomBinning(new File(arg[2+10*set]));
+ for(int set = 0; set< Nsets; set++){
+ String title = arg[0+10*set];
+ String inputFile = arg[1+10*set];
+ CustomBinning cb = new CustomBinning(new File(arg[2+10*set]));
- double Q = Double.parseDouble(arg[3+10*set]); //in nC
- double E = Double.parseDouble(arg[4+10*set]); //in GeV
- double aDensity = Double.parseDouble(arg[5+10*set]); //in g/cm^2
- double M = Double.parseDouble(arg[6+10*set]); // in amu
- double Z = Double.parseDouble(arg[7+10*set]);
- double r = Double.parseDouble(arg[8+10*set]);
- double prescale = Math.pow(2,Double.parseDouble(arg[9+10*set]));
+ double Q = Double.parseDouble(arg[3+10*set]); //in nC
+ double E = Double.parseDouble(arg[4+10*set]); //in GeV
+ double aDensity = Double.parseDouble(arg[5+10*set]); //in g/cm^2
+ double M = Double.parseDouble(arg[6+10*set]); // in amu
+ double Z = Double.parseDouble(arg[7+10*set]);
+ double r = Double.parseDouble(arg[8+10*set]);
+ double prescale = Math.pow(2,Double.parseDouble(arg[9+10*set]));
- double luminosity = Q*1e-9/q*aDensity/(M/Na)*1e-24; //nuclei per barn times # of beam electrons
-
- double scale = Math.pow((Z*alpha*hbarc)/(2*E), 2)/100; //this should be in barns
-
- if(config != 0) //one half of the detector only
- scale /= 2;
- double recoil = 2*E/(M*amu);
+ double luminosity = Q*1e-9/q*aDensity/(M/Na)*1e-24; //nuclei per barn times # of beam electrons
+
+ double scale = Math.pow((Z*alpha*hbarc)/(2*E), 2)/100; //this should be in barns
+
+ if(config != 0) //one half of the detector only
+ scale /= 2;
+ double recoil = 2*E/(M*amu);
- //double luminosity = Double.parseDouble(arg[2]);
- //double scale = Double.parseDouble(arg[3]);
- //double recoil = Double.parseDouble(arg[4]);
- //double r = Double.parseDouble(arg[5]);
+ //double luminosity = Double.parseDouble(arg[2]);
+ //double scale = Double.parseDouble(arg[3]);
+ //double recoil = Double.parseDouble(arg[4]);
+ //double r = Double.parseDouble(arg[5]);
- ITree tree0 = tf.create(inputFile, "xml");
- //IHistogram1D hist_iso = (IHistogram1D) tree0.find("theta isolated ");
- IHistogram1D hist = (IHistogram1D) tree0.find(inpaths[config]);
- System.out.println(inpaths[config] + " " + title + " " + hist.binHeight(0));
+ ITree tree0 = tf.create(inputFile, "xml");
+ //IHistogram1D hist_iso = (IHistogram1D) tree0.find("theta isolated ");
+ IHistogram1D hist = (IHistogram1D) tree0.find(inpaths[config]);
+ System.out.println(inpaths[config] + " " + title + " " + hist.binHeight(0));
- dpsMeasured[set] = dpsf.create(title, 2);
- //IDataPointSet dps_iso = dpsf.create("F(Q)^2 (measured isolated)", 2);
+ dpsMeasured[set] = dpsf.create(title, 2);
+ //IDataPointSet dps_iso = dpsf.create("F(Q)^2 (measured isolated)", 2);
- if(set == 0)
- dpsTheory = dpsf.create("theoretical", 2);
+ if(set == 0)
+ dpsTheory = dpsf.create("theoretical", 2);
- int nBins = hist.axis().bins();
+ int nBins = hist.axis().bins();
- for(int i = 0; i< nBins; i++){
- double thmax = cb.thetaMax[i];
- double thmin = cb.thetaMin[i];
- double n = hist.binHeight(i);
- //double n_iso = hist_iso.binHeight(i);
+ for(int i = 0; i< nBins; i++){
+ double thmax = cb.thetaMax[i];
+ double thmin = cb.thetaMin[i];
+ double n = hist.binHeight(i);
+ //double n_iso = hist_iso.binHeight(i);
- //scale = Math.pow(74/137.*.2/(2*1.057), 2);
- double mottInt = MottIntegral.mottIntegral(recoil, scale, i, cb);
- double F2 =n*prescale/luminosity/mottInt;
- double dF2 = Math.sqrt(n)*prescale/luminosity/mottInt;
+ //scale = Math.pow(74/137.*.2/(2*1.057), 2);
+ double mottInt = MottIntegral.mottIntegral(recoil, scale, i, cb);
+ double F2 =n*prescale/luminosity/mottInt;
+ double dF2 = Math.sqrt(n)*prescale/luminosity/mottInt;
- //double F2_iso =n_iso*prescale/luminosity/mottInt;
- //double dF2_iso = Math.sqrt(n_iso)*prescale/luminosity/mottInt;
+ //double F2_iso =n_iso*prescale/luminosity/mottInt;
+ //double dF2_iso = Math.sqrt(n_iso)*prescale/luminosity/mottInt;
- IDataPoint dp = dpsMeasured[set].addPoint();
+ IDataPoint dp = dpsMeasured[set].addPoint();
- double trigStuff = Math.pow(Math.sin((thmax+thmin)/4),2);
- double Q2 = 4*E*E*trigStuff/(1+recoil*trigStuff);
- double dQ2 = E*E*(thmax+thmin)*(thmax-thmin)*2;
- dp.coordinate(0).setValue(Q2);
- dp.coordinate(0).setErrorMinus(dQ2);
- dp.coordinate(0).setErrorPlus(dQ2);
- dp.coordinate(1).setValue(F2);
- dp.coordinate(1).setErrorMinus(dF2);
- dp.coordinate(1).setErrorPlus(dF2);
+ double trigStuff = Math.pow(Math.sin((thmax+thmin)/4),2);
+ double Q2 = 4*E*E*trigStuff/(1+recoil*trigStuff);
+ double dQ2 = E*E*(thmax+thmin)*(thmax-thmin)*2;
+ dp.coordinate(0).setValue(Q2);
+ dp.coordinate(0).setErrorMinus(dQ2);
+ dp.coordinate(0).setErrorPlus(dQ2);
+ dp.coordinate(1).setValue(F2);
+ dp.coordinate(1).setErrorMinus(dF2);
+ dp.coordinate(1).setErrorPlus(dF2);
- /*dp = dps_iso.addPoint();
- dp.coordinate(0).setValue(Q2);
- dp.coordinate(0).setErrorMinus(dQ2);
- dp.coordinate(0).setErrorPlus(dQ2);
- dp.coordinate(1).setValue(F2_iso);
- dp.coordinate(1).setErrorMinus(dF2_iso);
- dp.coordinate(1).setErrorPlus(dF2_iso);
- */
- double F_calc = 0;
- if(Z == 74){
- //double R = 5.373;
- double R = 6.87;
- F_calc = F_calc(Q2, R);
- } else if(Z== 6){
- double rp = 0.8786;
- double a = 1.64;
- F_calc = F_calc_alt(Q2, 6,a, Math.sqrt(a*a*(1-1/12.)+rp*rp) );
- }
+ /*dp = dps_iso.addPoint();
+ dp.coordinate(0).setValue(Q2);
+ dp.coordinate(0).setErrorMinus(dQ2);
+ dp.coordinate(0).setErrorPlus(dQ2);
+ dp.coordinate(1).setValue(F2_iso);
+ dp.coordinate(1).setErrorMinus(dF2_iso);
+ dp.coordinate(1).setErrorPlus(dF2_iso);
+ */
+ double F_calc = 0;
+ if(Z == 74){
+ //double R = 5.373;
+ double R = 6.87;
+ F_calc = F_calc(Q2, R);
+ } else if(Z== 6){
+ double rp = 0.8786;
+ double a = 1.64;
+ F_calc = F_calc_alt(Q2, 6,a, Math.sqrt(a*a*(1-1/12.)+rp*rp) );
+ }
- if(set == 0){
- dp = dpsTheory.addPoint();
- dp.coordinate(0).setValue(Q2);
- //double F_calc = 1-r*r*Q2/(6*hbarc*hbarc);
- dp.coordinate(1).setValue(F_calc*F_calc);
- dp.coordinate(1).setErrorMinus(0);
- dp.coordinate(1).setErrorPlus(0);
+ if(set == 0){
+ dp = dpsTheory.addPoint();
+ dp.coordinate(0).setValue(Q2);
+ //double F_calc = 1-r*r*Q2/(6*hbarc*hbarc);
+ dp.coordinate(1).setValue(F_calc*F_calc);
+ dp.coordinate(1).setErrorMinus(0);
+ dp.coordinate(1).setErrorPlus(0);
- }
- //System.out.println(i + "\t" + thmin+ "\t" + thmax + "\t"+ F_calc*F_calc + "\t" + F2 + "\t" + dF2);
+ }
+ //System.out.println(i + "\t" + thmin+ "\t" + thmax + "\t"+ F_calc*F_calc + "\t" + F2 + "\t" + dF2);
@@ -147,36 +147,36 @@
- }
+ }
- p.region(0).plot(dpsMeasured[set]);
+ p.region(0).plot(dpsMeasured[set]);
- //p.region(0).plot(dps_iso);
- }
-
- IPlotterStyle style = StyleUtil.smoothCurveStyle(pf);
- p.region(0).plot(dpsTheory, style);
- StyleUtil.stylize(p.region(0), "Form Factors", "Q^2 (GeV^2)", "|F(Q^2)|^2");
- p.show();
- }
+ //p.region(0).plot(dps_iso);
+ }
+
+ IPlotterStyle style = StyleUtil.smoothCurveStyle(pf);
+ p.region(0).plot(dpsTheory, style);
+ StyleUtil.stylize(p.region(0), "Form Factors", "Q^2 (GeV^2)", "|F(Q^2)|^2");
+ p.show();
+ }
- }
- static IDataPointSet dpsMeasured[];
- static IDataPointSet dpsTheory;
+ }
+ static IDataPointSet dpsMeasured[];
+ static IDataPointSet dpsTheory;
- static double F_calc(double Q2, double r){
- double x = Math.sqrt(Q2*r*r/(hbarc*hbarc));
- double F_calc = 3/(x*x*x)*(Math.sin(x)-x*Math.cos(x));
- return F_calc;
- }
+ static double F_calc(double Q2, double r){
+ double x = Math.sqrt(Q2*r*r/(hbarc*hbarc));
+ double F_calc = 3/(x*x*x)*(Math.sin(x)-x*Math.cos(x));
+ return F_calc;
+ }
- static double F_calc_alt(double Q2, double Z, double a, double b){
- return (1-(Z-2)/(6*Z)*a*a*Q2/(hbarc*hbarc))*Math.exp(-1/4.*b*b*Q2/(hbarc*hbarc));
- }
+ static double F_calc_alt(double Q2, double Z, double a, double b){
+ return (1-(Z-2)/(6*Z)*a*a*Q2/(hbarc*hbarc))*Math.exp(-1/4.*b*b*Q2/(hbarc*hbarc));
+ }
- void temp_test(){
-
- }
+ void temp_test(){
+
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FEESpectrumGenerator.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FEESpectrumGenerator.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FEESpectrumGenerator.java Wed Mar 9 11:43:24 2016
@@ -11,285 +11,285 @@
import static java.lang.Math.*;
public class FEESpectrumGenerator {
- /*************
- * CONSTANTS *
- *************/
- static double alpha = 1/137., hbarc = .197, q = 1.6e-19, Na= 6.022e23;
- static double me = .000511;
- static double amu = 931.4941;
-
- private static double sqrt2 = Math.sqrt(2);
-
- /***************
- * OTHER STUFF *
- ***************/
-
- static int counter = 0;
-
- static Random random = new Random();
- static double thetaMax = .1;
- static double thetaMin = .03;
- /**
- *
- * @return a random angle theta, with no form factor.
- */
- public static double getRandomThetaBare(){
- double r = random.nextDouble();
- double dTheta = (thetaMax-thetaMin)/4;
- double theta = (thetaMax+thetaMin)/2;
- int nIter = 11;
- for(int i = 0; i< nIter; i++){
- double x = MottIntegral.integral(a, theta);
- double f = (x-xmin)/(xmax-xmin);
- if(f<r){
- theta += dTheta;
- } else if(f> r){
- theta -= dTheta;
- }
- dTheta /= 2;
- }
- return theta;
-
-
- }
-
- static double combine(double theta, double rms){
- return theta + sqrt2 *rms*random.nextGaussian();
- }
-
-
- /**
- *
- * @param a recoil factor = 2*E/M
- * @return a random angle theta, with no form factor.
- */
- public static double getRandomThetaWithFormFactor(FormFactor f){
- while(true){
- double theta = getRandomThetaBare();
- double trigstuff = pow(sin(theta/2), 2);
- double Q2 = 4*E*E*trigstuff/(1+a*trigstuff);
- counter ++;
- double f2 = f.getFormFactorSquared(Q2);
- if(f2 > random.nextDouble())
- return theta;
- }
- }
-
-
-
- static double b = -1;
-
-
-
-
- static boolean radCorrections = false;
- static int Nevents;
- static double M, E, Q, aDensity;
- static int Z;
- static double a, xmax, xmin;
- static boolean display;
-
-
- private static CustomBinning cb;
- public static void main(String arg[]) throws IOException{
- String filename = arg[0];
- M = Double.parseDouble(arg[1]);
- E = Double.parseDouble(arg[2]);
- thetaMin = Double.parseDouble(arg[3]);
- thetaMax = Double.parseDouble(arg[4]);
- Z = Integer.parseInt(arg[5]);
-
- String outfile = null;
- aDensity = Double.parseDouble(arg[6]);
- Q = Double.parseDouble(arg[7]);
-
- radCorrections = Boolean.parseBoolean(arg[8]);
-
- if(arg.length>9){
- display = true;
- cb = new CustomBinning(new File(arg[9]));
- outfile = arg[10];
- }
-
-
- a = 2*E/(M*amu);
- xmin = MottIntegral.integral(a, thetaMin);
- xmax = MottIntegral.integral(a, thetaMax);
-
- double scale = Math.pow((Z*alpha*hbarc)/(2*E), 2)/100; //this should be in barns
- double sigma = MottIntegral.mottIntegralWithFormFactor(a, scale, thetaMin, thetaMax, FormFactor.get(Z), 1000, E);
-
- double luminosity = Q*1e-9/q*aDensity/(M/Na)*1e-24;
- Nevents = (int)(sigma*luminosity);
-
-
- System.out.println(Nevents);
-
- String title = "fee";
- String comment = "fee";
- StdhepWriter writer = new StdhepWriter(filename, title, comment, Nevents);
- IAnalysisFactory af = null;
- ITree tree = null;
-
- if(display){
- af = IAnalysisFactory.create();
- tree = af.createTreeFactory().create(outfile,"xml",false,true);
- IHistogramFactory hf = af.createHistogramFactory(tree);
-
- double thetaBins[] = new double[cb.nTheta+1];
- for(int i = 0; i<cb.nTheta; i++){
- thetaBins[i] = cb.thetaMin[i];
- }
-
- thetaBins[thetaBins.length-1] = cb.thetaMax[cb.nTheta-1];
-
- thetaHist = hf.createHistogram1D("theta", "theta", thetaBins);
-
- EHist = hf.createHistogram1D("energy", 200, 0, 1.3);
- IPlotter p = af.createPlotterFactory().create();
- p.createRegions(2,1);
- p.region(0).plot(thetaHist);
- p.region(1).plot(EHist);
- p.show();
- }
-
- for(int i = 1; i<= Nevents; i++){
- int nevhep = i;
- int nhep = 1;
- int[] isthep = {1};
- int[] idhep = {11};
- int[] jmohep = {0,0};
- int[] jdahep = {0,0};
- double[] phep = randomMomentum();
- double[] vhep = {0,0,0,0};
-
-
- if(phep[3] > .5*E){
- StdhepEvent event = new StdhepEvent(nevhep, nhep, isthep, idhep, jmohep, jdahep, phep, vhep);
- double smear = .02;
- if(display)
- EHist.fill(phep[3]*(1+random.nextGaussian()*smear));
- writer.writeRecord(event);
- }
- else{ // if the event has enough energy loss,
- // write it out as a blank event. This way,
- // slic doesnt have to deal with low energy electrons
- //
- StdhepEvent event = new StdhepEvent(i, 0,
- new int[0],
- new int[0],
- new int[0],
- new int[0],
- new double[0],
- new double[0]);
- writer.writeRecord(event);
- }
- if(i%1000 == 0)
- System.out.println("event " + i);
- }
- writer.close();
- if(tree != null)
- tree.commit();
-
- /*
- String title = arg[0+10*set];
- String inputFile = arg[1+10*set];
- CustomBinning cb = new CustomBinning(new File(arg[2+10*set]));
-
-
- double Q = Double.parseDouble(arg[3+10*set]); //in nC
- double E = Double.parseDouble(arg[4+10*set]); //in GeV
- double aDensity = Double.parseDouble(arg[5+10*set]); //in g/cm^2
- double M = Double.parseDouble(arg[6+10*set]); // in amu
- double Z = Double.parseDouble(arg[7+10*set]);
- double r = Double.parseDouble(arg[8+10*set]);
- double prescale = Math.pow(2,Double.parseDouble(arg[9+10*set]));
- */
- if(display){
- ExtractFormFactors.main(new String[]{
- "generated",
- outfile,
- arg[9],
- Double.toString(Q),
- Double.toString(E),
- Double.toString(aDensity),
- Double.toString(M),
- Double.toString(Z),
- "3", //not used
- "0" //no prescale
-
- });
-
- displayResiduals();
-
- }
- }
-
- private static void displayResiduals() {
- IAnalysisFactory af = IAnalysisFactory.create();
- IDataPointSetFactory dpsf = af.createDataPointSetFactory(af.createTreeFactory().create());
- IDataPointSet residuals = dpsf.create("residuals", 2);
- for(int i = 0; i<ExtractFormFactors.dpsMeasured[0].size(); i++){
- IDataPoint gen = ExtractFormFactors.dpsMeasured[0].point(i);
- IDataPoint the = ExtractFormFactors.dpsTheory.point(i);
-
- IDataPoint res = residuals.addPoint();
- res.coordinate(0).setValue(gen.coordinate(0).value());
- res.coordinate(1).setValue(gen.coordinate(1).value()-the.coordinate(1).value());
- double err = Math.hypot(gen.coordinate(1).errorMinus(), the.coordinate(1).errorMinus());
- res.coordinate(1).setErrorMinus(err);
- res.coordinate(1).setErrorPlus(err);
- }
- IPlotter p = af.createPlotterFactory().create();
- p.region(0).plot(residuals);
- p.show();
-
- }
-
-
-
- static IHistogram1D thetaHist = null, EHist;
-
-
-
- private static double[] randomMomentum() {
- double theta = getRandomThetaWithFormFactor(FormFactor.get(Z));
- double phi = random.nextDouble()*2*PI-PI;
- if(thetaHist != null)
- if(cb.inRange(theta, phi))
- thetaHist.fill(theta);
- double trigstuff = pow(sin(theta/2.), 2);
- double Ep = E/(1+a*trigstuff);
- double m = .000511;
-
-
-
- if(radCorrections){
-
- // L.W. Mo, Y.S. Tsai, Radiative Corrections to Elastic and inelastic ep and $\mu$p scattering
- // Stanford Linear Accelerator Center, Stanford University, Stanford, CA
- // Reviews of Modern Physics Volume 41 Number 1, January 1969
-
- //otherwise apply radiative corrections
- double Q2 = 4*E*Ep*trigstuff;
-
- //effective number of pre and post radiation lengths caused by radiative effects
- double t = 3/4.*(alpha/Math.PI)*(Math.log(Q2/(me*me)-1));
-
- // rms theta for
- double theta_rms = MultipleScattering.getThetaRMS(t, E);
- theta = combine(theta, theta_rms);
-
- if(b == -1){
- b = MultipleScattering.b(Z);
- }
- double bt = b*t;
- Ep *= MultipleScattering.getRandomEnergyFraction(bt)*MultipleScattering.getRandomEnergyFraction(bt);
-
- }
- if(Double.isNaN(Ep))
- return null;
- double p = sqrt(Ep*Ep-m*m);
- return new double[]{p*sin(theta)*cos(phi), p*sin(theta)*sin(phi), p*cos(theta), Ep, m};
- }
+ /*************
+ * CONSTANTS *
+ *************/
+ static double alpha = 1/137., hbarc = .197, q = 1.6e-19, Na= 6.022e23;
+ static double me = .000511;
+ static double amu = 931.4941;
+
+ private static double sqrt2 = Math.sqrt(2);
+
+ /***************
+ * OTHER STUFF *
+ ***************/
+
+ static int counter = 0;
+
+ static Random random = new Random();
+ static double thetaMax = .1;
+ static double thetaMin = .03;
+ /**
+ *
+ * @return a random angle theta, with no form factor.
+ */
+ public static double getRandomThetaBare(){
+ double r = random.nextDouble();
+ double dTheta = (thetaMax-thetaMin)/4;
+ double theta = (thetaMax+thetaMin)/2;
+ int nIter = 11;
+ for(int i = 0; i< nIter; i++){
+ double x = MottIntegral.integral(a, theta);
+ double f = (x-xmin)/(xmax-xmin);
+ if(f<r){
+ theta += dTheta;
+ } else if(f> r){
+ theta -= dTheta;
+ }
+ dTheta /= 2;
+ }
+ return theta;
+
+
+ }
+
+ static double combine(double theta, double rms){
+ return theta + sqrt2 *rms*random.nextGaussian();
+ }
+
+
+ /**
+ *
+ * @param a recoil factor = 2*E/M
+ * @return a random angle theta, with no form factor.
+ */
+ public static double getRandomThetaWithFormFactor(FormFactor f){
+ while(true){
+ double theta = getRandomThetaBare();
+ double trigstuff = pow(sin(theta/2), 2);
+ double Q2 = 4*E*E*trigstuff/(1+a*trigstuff);
+ counter ++;
+ double f2 = f.getFormFactorSquared(Q2);
+ if(f2 > random.nextDouble())
+ return theta;
+ }
+ }
+
+
+
+ static double b = -1;
+
+
+
+
+ static boolean radCorrections = false;
+ static int Nevents;
+ static double M, E, Q, aDensity;
+ static int Z;
+ static double a, xmax, xmin;
+ static boolean display;
+
+
+ private static CustomBinning cb;
+ public static void main(String arg[]) throws IOException{
+ String filename = arg[0];
+ M = Double.parseDouble(arg[1]);
+ E = Double.parseDouble(arg[2]);
+ thetaMin = Double.parseDouble(arg[3]);
+ thetaMax = Double.parseDouble(arg[4]);
+ Z = Integer.parseInt(arg[5]);
+
+ String outfile = null;
+ aDensity = Double.parseDouble(arg[6]);
+ Q = Double.parseDouble(arg[7]);
+
+ radCorrections = Boolean.parseBoolean(arg[8]);
+
+ if(arg.length>9){
+ display = true;
+ cb = new CustomBinning(new File(arg[9]));
+ outfile = arg[10];
+ }
+
+
+ a = 2*E/(M*amu);
+ xmin = MottIntegral.integral(a, thetaMin);
+ xmax = MottIntegral.integral(a, thetaMax);
+
+ double scale = Math.pow((Z*alpha*hbarc)/(2*E), 2)/100; //this should be in barns
+ double sigma = MottIntegral.mottIntegralWithFormFactor(a, scale, thetaMin, thetaMax, FormFactor.get(Z), 1000, E);
+
+ double luminosity = Q*1e-9/q*aDensity/(M/Na)*1e-24;
+ Nevents = (int)(sigma*luminosity);
+
+
+ System.out.println(Nevents);
+
+ String title = "fee";
+ String comment = "fee";
+ StdhepWriter writer = new StdhepWriter(filename, title, comment, Nevents);
+ IAnalysisFactory af = null;
+ ITree tree = null;
+
+ if(display){
+ af = IAnalysisFactory.create();
+ tree = af.createTreeFactory().create(outfile,"xml",false,true);
+ IHistogramFactory hf = af.createHistogramFactory(tree);
+
+ double thetaBins[] = new double[cb.nTheta+1];
+ for(int i = 0; i<cb.nTheta; i++){
+ thetaBins[i] = cb.thetaMin[i];
+ }
+
+ thetaBins[thetaBins.length-1] = cb.thetaMax[cb.nTheta-1];
+
+ thetaHist = hf.createHistogram1D("theta", "theta", thetaBins);
+
+ EHist = hf.createHistogram1D("energy", 200, 0, 1.3);
+ IPlotter p = af.createPlotterFactory().create();
+ p.createRegions(2,1);
+ p.region(0).plot(thetaHist);
+ p.region(1).plot(EHist);
+ p.show();
+ }
+
+ for(int i = 1; i<= Nevents; i++){
+ int nevhep = i;
+ int nhep = 1;
+ int[] isthep = {1};
+ int[] idhep = {11};
+ int[] jmohep = {0,0};
+ int[] jdahep = {0,0};
+ double[] phep = randomMomentum();
+ double[] vhep = {0,0,0,0};
+
+
+ if(phep[3] > .5*E){
+ StdhepEvent event = new StdhepEvent(nevhep, nhep, isthep, idhep, jmohep, jdahep, phep, vhep);
+ double smear = .02;
+ if(display)
+ EHist.fill(phep[3]*(1+random.nextGaussian()*smear));
+ writer.writeRecord(event);
+ }
+ else{ // if the event has enough energy loss,
+ // write it out as a blank event. This way,
+ // slic doesnt have to deal with low energy electrons
+ //
+ StdhepEvent event = new StdhepEvent(i, 0,
+ new int[0],
+ new int[0],
+ new int[0],
+ new int[0],
+ new double[0],
+ new double[0]);
+ writer.writeRecord(event);
+ }
+ if(i%1000 == 0)
+ System.out.println("event " + i);
+ }
+ writer.close();
+ if(tree != null)
+ tree.commit();
+
+ /*
+ String title = arg[0+10*set];
+ String inputFile = arg[1+10*set];
+ CustomBinning cb = new CustomBinning(new File(arg[2+10*set]));
+
+
+ double Q = Double.parseDouble(arg[3+10*set]); //in nC
+ double E = Double.parseDouble(arg[4+10*set]); //in GeV
+ double aDensity = Double.parseDouble(arg[5+10*set]); //in g/cm^2
+ double M = Double.parseDouble(arg[6+10*set]); // in amu
+ double Z = Double.parseDouble(arg[7+10*set]);
+ double r = Double.parseDouble(arg[8+10*set]);
+ double prescale = Math.pow(2,Double.parseDouble(arg[9+10*set]));
+ */
+ if(display){
+ ExtractFormFactors.main(new String[]{
+ "generated",
+ outfile,
+ arg[9],
+ Double.toString(Q),
+ Double.toString(E),
+ Double.toString(aDensity),
+ Double.toString(M),
+ Double.toString(Z),
+ "3", //not used
+ "0" //no prescale
+
+ });
+
+ displayResiduals();
+
+ }
+ }
+
+ private static void displayResiduals() {
+ IAnalysisFactory af = IAnalysisFactory.create();
+ IDataPointSetFactory dpsf = af.createDataPointSetFactory(af.createTreeFactory().create());
+ IDataPointSet residuals = dpsf.create("residuals", 2);
+ for(int i = 0; i<ExtractFormFactors.dpsMeasured[0].size(); i++){
+ IDataPoint gen = ExtractFormFactors.dpsMeasured[0].point(i);
+ IDataPoint the = ExtractFormFactors.dpsTheory.point(i);
+
+ IDataPoint res = residuals.addPoint();
+ res.coordinate(0).setValue(gen.coordinate(0).value());
+ res.coordinate(1).setValue(gen.coordinate(1).value()-the.coordinate(1).value());
+ double err = Math.hypot(gen.coordinate(1).errorMinus(), the.coordinate(1).errorMinus());
+ res.coordinate(1).setErrorMinus(err);
+ res.coordinate(1).setErrorPlus(err);
+ }
+ IPlotter p = af.createPlotterFactory().create();
+ p.region(0).plot(residuals);
+ p.show();
+
+ }
+
+
+
+ static IHistogram1D thetaHist = null, EHist;
+
+
+
+ private static double[] randomMomentum() {
+ double theta = getRandomThetaWithFormFactor(FormFactor.get(Z));
+ double phi = random.nextDouble()*2*PI-PI;
+ if(thetaHist != null)
+ if(cb.inRange(theta, phi))
+ thetaHist.fill(theta);
+ double trigstuff = pow(sin(theta/2.), 2);
+ double Ep = E/(1+a*trigstuff);
+ double m = .000511;
+
+
+
+ if(radCorrections){
+
+ // L.W. Mo, Y.S. Tsai, Radiative Corrections to Elastic and inelastic ep and $\mu$p scattering
+ // Stanford Linear Accelerator Center, Stanford University, Stanford, CA
+ // Reviews of Modern Physics Volume 41 Number 1, January 1969
+
+ //otherwise apply radiative corrections
+ double Q2 = 4*E*Ep*trigstuff;
+
+ //effective number of pre and post radiation lengths caused by radiative effects
+ double t = 3/4.*(alpha/Math.PI)*(Math.log(Q2/(me*me)-1));
+
+ // rms theta for
+ double theta_rms = MultipleScattering.getThetaRMS(t, E);
+ theta = combine(theta, theta_rms);
+
+ if(b == -1){
+ b = MultipleScattering.b(Z);
+ }
+ double bt = b*t;
+ Ep *= MultipleScattering.getRandomEnergyFraction(bt)*MultipleScattering.getRandomEnergyFraction(bt);
+
+ }
+ if(Double.isNaN(Ep))
+ return null;
+ double p = sqrt(Ep*Ep-m*m);
+ return new double[]{p*sin(theta)*cos(phi), p*sin(theta)*sin(phi), p*cos(theta), Ep, m};
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FormFactor.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FormFactor.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/FormFactor.java Wed Mar 9 11:43:24 2016
@@ -2,42 +2,42 @@
public abstract class FormFactor {
- abstract double getFormFactor(double q2);
+ abstract double getFormFactor(double q2);
- double getFormFactorSquared(double q2){
- return Math.pow(getFormFactor(q2), 2);
- }
- static double hbarc = .197;
- static FormFactor carbon = new FormFactor(){
+ double getFormFactorSquared(double q2){
+ return Math.pow(getFormFactor(q2), 2);
+ }
+ static double hbarc = .197;
+ static FormFactor carbon = new FormFactor(){
- @Override
- public double getFormFactor(double Q2) {
- double Z= 6;
- double rp = 0.8786;
- double a = 1.64;
- double b = Math.sqrt(a*a*(1-1/12.)+rp*rp);
- return (1-(Z-2)/(6*Z)*a*a*Q2/(hbarc*hbarc))*Math.exp(-1/4.*b*b*Q2/(hbarc*hbarc));
- }
+ @Override
+ public double getFormFactor(double Q2) {
+ double Z= 6;
+ double rp = 0.8786;
+ double a = 1.64;
+ double b = Math.sqrt(a*a*(1-1/12.)+rp*rp);
+ return (1-(Z-2)/(6*Z)*a*a*Q2/(hbarc*hbarc))*Math.exp(-1/4.*b*b*Q2/(hbarc*hbarc));
+ }
- };
- static FormFactor tungsten = new FormFactor(){
+ };
+ static FormFactor tungsten = new FormFactor(){
- @Override
- public double getFormFactor(double Q2) {
- double Z= 74;
- double r = 6.87;
- double x = Math.sqrt(Q2*r*r/(hbarc*hbarc));
- double F_calc = 3/(x*x*x)*(Math.sin(x)-x*Math.cos(x));
- return F_calc;
- }
-
- };
- static FormFactor get(int Z){
- if(Z == 6)
- return carbon;
- if(Z == 74)
- return tungsten;
- System.err.println("Form Factor for " + Z + " not implemented");
- return null;
- }
+ @Override
+ public double getFormFactor(double Q2) {
+ double Z= 74;
+ double r = 6.87;
+ double x = Math.sqrt(Q2*r*r/(hbarc*hbarc));
+ double F_calc = 3/(x*x*x)*(Math.sin(x)-x*Math.cos(x));
+ return F_calc;
+ }
+
+ };
+ static FormFactor get(int Z){
+ if(Z == 6)
+ return carbon;
+ if(Z == 74)
+ return tungsten;
+ System.err.println("Form Factor for " + Z + " not implemented");
+ return null;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java Wed Mar 9 11:43:24 2016
@@ -35,448 +35,448 @@
import org.hps.users.spaul.StyleUtil;
public class MakeHistograms {
-
-
-
- static boolean display = false;
- static CustomBinning cb;
- public static void main(String arg[]) throws IllegalArgumentException, IOException{
- if(arg.length == 1){
- File file = new File(arg[0]);
- String path = arg[0];
- if(file.isDirectory()){
- org.hps.users.spaul.SumEverything.main(new String[]{path, "temp.aida"});
- path = "temp.aida";
- }
- IAnalysisFactory af = IAnalysisFactory.create();
- ITreeFactory tf = af.createTreeFactory();
- ITree tree0 = tf.create(path, "xml");
- extractHistograms(tree0);
- setupPlotter(af);
-
- } else{
-
- String input = arg[0];
- String output = arg[1];
- cb = new CustomBinning(new File(arg[2]));
- if(arg[arg.length -1].equals("display"))
- display = true;
- IAnalysisFactory af = IAnalysisFactory.create();
- ITree tree = af.createTreeFactory().create(output,"xml",false,true);
- IHistogramFactory hf = af.createHistogramFactory(tree);
- setupHistograms(hf);
- if(display){
- setupPlotter(af);
- }
- ConditionsDriver hack = new ConditionsDriver();
- //hack.setXmlConfigResource("/u/group/hps/hps_soft/detector-data/detectors/HPS-EngRun2015-Nominal-v3");
- hack.setDetectorName("HPS-EngRun2015-Nominal-v3");
- hack.setFreeze(true);
- hack.setRunNumber(Integer.parseInt(arg[3]));
-
- hack.initialize();
- beamTiltY = Double.parseDouble(arg[4]);
- beamTiltX = Double.parseDouble(arg[5]);
- LCIOReader reader = new LCIOReader(new File(input));
- //reader.open(input);
- //reader.
- EventHeader event = reader.read();
- int nEvents = 0;
- try{
- outer : while(event != null){
- processEvent(event);
-
- //System.out.println(Q2);
-
- event = reader.read();
- }
- } catch (Exception e){
- e.printStackTrace();
- }
- tree.commit();
- tree.close();
- }
-
- }
-
- static IHistogram2D h1, h2, h2a, h2b, h2c;
- static IHistogram2D h4,h4a;
- static IHistogram1D h3, /*h3a,*/ h3_t, h3_b;
- static IHistogram1D h5, h5a;
- //static IHistogram2D h6, h6a;
- static IHistogram1D h7, h7a;
- static IHistogram1D h8;
- static IHistogram1D h9_t, h9_b;
- static IHistogram1D h10_t, h10_b;
- private static IHistogram1D h4y;
-
- private static void extractHistograms(ITree tree0) {
- h1 = (IHistogram2D) tree0.find("theta vs energy");
-
- h2 = (IHistogram2D) tree0.find("theta vs phi");
- h2a = (IHistogram2D) tree0.find("theta vs phi cut");
- h2b = (IHistogram2D) tree0.find("theta vs phi cut alt");
- h2c = (IHistogram2D) tree0.find("theta vs phi alt");
-
- h3 = (IHistogram1D) tree0.find("theta");
- //h3a = (IHistogram1D) tree0.find("theta isolated ");
- h3_t = (IHistogram1D) tree0.find("theta top");
- h3_b = (IHistogram1D) tree0.find("theta bottom");
-
- h4 = (IHistogram2D) tree0.find("px\\/pz vs py\\/pz");
- h4a = (IHistogram2D) tree0.find("px\\/pz vs py\\/pz cut");
- System.out.println(h4a.xAxis().bins());
- h5 = (IHistogram1D) tree0.find("energy top");
- h5 = (IHistogram1D) tree0.find("energy bottom");
-
-// h6 = (IHistogram2D) tree0.find("cluster");
-// h6a = (IHistogram2D) tree0.find("cluster matched");
- h7 = (IHistogram1D) tree0.find("y top");
- h7a = (IHistogram1D) tree0.find("y bottom");
- h8 = (IHistogram1D) tree0.find("seed energy");
-
-
- h9_t = (IHistogram1D) tree0.find("pz top");
- h9_b = (IHistogram1D) tree0.find("pz bottom");
-
-
- h10_t = (IHistogram1D) tree0.find("clustsize top");
- h10_b = (IHistogram1D) tree0.find("clustsize bottom");
-
- }
- static void setupHistograms(IHistogramFactory hf){
- //h1 = hf.createHistogram2D("px\\/pz vs py\\/pz", 160, -.16, .24, 160, -.2, .2);
-
-
-
-
- h2 = hf.createHistogram2D("theta vs phi", 300, 0, .3, 314, -3.14, 3.14);
-
- h2a = hf.createHistogram2D("theta vs phi cut", 300, 0, .3, 314, -3.14, 3.14);
-
- double thetaBins[] = new double[cb.nTheta+1];
- for(int i = 0; i<cb.nTheta; i++){
- thetaBins[i] = cb.thetaMin[i];
- }
-
- thetaBins[thetaBins.length-1] = cb.thetaMax[cb.nTheta-1];
-
- double phiBins[] = new double[315];
- for(int i = 0; i<315; i++){
- phiBins[i] = i/50.-3.14; //every 10 mrad;
- }
-
- double eBins[] = new double[66];
- for(int i = 0; i<66; i++){
- eBins[i] = i/50.; //every 20 MeV up to 1300 MeV
- }
-
-
- h1 = hf.createHistogram2D("theta vs energy", "theta vs energy", thetaBins, eBins);
-
-
- //identical to h2a, except different binning
- h2b = hf.createHistogram2D("theta vs phi cut alt", "theta vs phi cut alt", thetaBins, phiBins);
- h2c = hf.createHistogram2D("theta vs phi alt", "theta vs phi alt", thetaBins, phiBins);
-
- h3 = hf.createHistogram1D("theta", "theta", thetaBins);
-// h3a = hf.createHistogram1D("theta isolated ", "theta isolated", thetaBins);
-
- h3_t = hf.createHistogram1D("theta top", "theta top", thetaBins);
- h3_b = hf.createHistogram1D("theta bottom", "theta bottom", thetaBins);
-
-
- h4 = hf.createHistogram2D("px\\/pz vs py\\/pz", 300, -.16, .24, 300, -.2, .2);
- h4a = hf.createHistogram2D("px\\/pz vs py\\/pz cut", 300, -.16, .24, 300, -.2, .2);
- h4y = hf.createHistogram1D("py\\pz", 1200, -.06, .06);
-
- h5 = hf.createHistogram1D("energy top", 75, 0, 1.5);
- h5a = hf.createHistogram1D("energy bottom", 75, 0, 1.5);
-
-
- h9_t = hf.createHistogram1D("pz top", 75, 0, 1.5);
- h9_b = hf.createHistogram1D("pz bottom", 75, 0, 1.5);
-
-// h6 = hf.createHistogram2D("cluster", 47, -23.5, 23.5, 11, -5.5, 5.5);
-// h6a = hf.createHistogram2D("cluster matched", 47, -23.5, 23.5, 11, -5.5, 5.5);
-
- h7 = hf.createHistogram1D("y top", 500, 0, 100);
-
- h7a = hf.createHistogram1D("y bottom", 500, 0, 100);
-
- h8 = hf.createHistogram1D("seed energy", 120, 0, 1.2);
-
- h10_t = hf.createHistogram1D("clustsize top", 10,0, 10);
- h10_b = hf.createHistogram1D("clustsize bottom", 10,0, 10);
- }
- static void setupPlotter(IAnalysisFactory af){
- IPlotterFactory pf = af.createPlotterFactory();
- IPlotter p = pf.create();
- p.createRegions(2,2);
- p.region(0).plot(h2);
- StyleUtil.stylize(p.region(0), "theta", "phi");
-// p.region(1).plot(h3a);
- StyleUtil.stylize(p.region(1), "theta", "# of particles");
- p.region(2).plot(h9_t);
- p.region(2).plot(h9_b);
- StyleUtil.noFillHistogramBars(p.region(2));
- StyleUtil.stylize(p.region(2), "pztilt" ,"pztilt", "# of particles");
- p.region(3).plot(h5);
- p.region(3).plot(h5a);
- StyleUtil.noFillHistogramBars(p.region(3));
- StyleUtil.stylize(p.region(3), "energy", "# of particles");
-
- p.show();
-
- //new window for the next plot
- IPlotter p2 = pf.create();
- p2.region(0).plot(h2b);
- //IDataPointSetFactory dpsf = af.createDataPointSetFactory(af.createTreeFactory().create());
-
- StyleUtil.stylize(p2.region(0), "theta", "phi");
-
- p2.show();
-
- //new window for the next plot
- IPlotter p3 = pf.create();
- p3.region(0).plot(h2c);
- StyleUtil.stylize(p3.region(0), "theta", "phi");
-
- p3.show();
-
- //new window for the next plot
- IPlotter p4 = pf.create();
- p4.region(0).plot(h4);
- StyleUtil.stylize(p4.region(0), "px/pz", "py/pz");
-
- p4.show();
-
- //new window for the next plot
- IPlotter p5 = pf.create();
- p5.region(0).plot(h4a);
- StyleUtil.stylize(p5.region(0), "px/pz", "py/pz");
-
- p5.show();
-
- IPlotter p6 = pf.create("efficiency");
- p6.createRegions(1,2);
-// p6.region(0).plot(h6);
- StyleUtil.stylize(p6.region(0), "ix", "iy");
-// p6.region(1).plot(h6a);
- StyleUtil.stylize(p6.region(1), "ix", "iy");
- p6.show();
-
- IPlotter p7 = pf.create("theta vs energy");
- //p6.createRegions(1,2);
- p7.region(0).plot(h1);
- StyleUtil.stylize(p7.region(0), "theta", "energy");
- // StyleUtil.stylize(p6.region(1), "ix", "iy");
- p7.show();
-
- IPlotter p8 = pf.create("y");
- //p6.createRegions(1,2);
- p8.region(0).plot(h7);
- p8.region(0).plot(h7a);
- StyleUtil.stylize(p8.region(0), "y", "# of particles");
- // StyleUtil.stylize(p6.region(1), "ix", "iy");
- p8.show();
-
- IPlotter p9 = pf.create("theta: top vs. bottom");
- //p6.createRegions(1,2);
- p9.region(0).plot(h3_t);
- p9.region(0).plot(h3_b);
- StyleUtil.stylize(p9.region(0), "theta", "theta", "# of particles");
- StyleUtil.noFillHistogramBars(p9.region(0));
- //StyleUtil.stylize(p6.region(1), "ix", "iy");
- p9.show();
-
- IPlotter p10 = pf.create("seed energy");
- //p6.createRegions(1,2);
- p10.createRegions(2,1);
- p10.region(0).plot(h8);
- StyleUtil.stylize(p10.region(0), "seed energy", "seed energy (GeV)", "# of particles");
-
- p10.region(1).plot(h10_t);
- p10.region(1).plot(h10_b);
- StyleUtil.noFillHistogramBars(p10.region(1));
- StyleUtil.stylize(p10.region(1), "clust size", "n ecal hits", "# of particles");
-
- //StyleUtil.noFillHistogramBars(p10.region(0));
- //StyleUtil.stylize(p6.region(1), "ix", "iy");
- p10.show();
-
- }
- private static void processEvent(EventHeader event) {
- if(event.getEventNumber() %10000 == 0)
- System.out.println("event number " + event.getEventNumber());
-
- for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
- {
- if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
- TIData tid = new TIData(gob);
- if (!tid.isSingle1Trigger())
- {
- return;
- }
- }
- List<ReconstructedParticle> particles = event.get(ReconstructedParticle.class, "FinalStateParticles");
- particles = RemoveDuplicateParticles.removeDuplicateParticles(particles);
- outer : for(ReconstructedParticle p : particles){
-
-
- boolean isGood = addParticle(p);
-
-
- }
-
- }
-
-
-
- static double eMin = .8;
- static double eMax = 1.2;
- static double beamEnergy = 1.057;
-
- static double beamTiltX = .03057;
- static double beamTiltY;
- static double maxChi2 = 50;
- //maximum difference between the reconstructed energy and momentum
- static double maxdE = .5;
-
- static double seedEnergyCut = .4;
-
-
- static boolean addParticle(ReconstructedParticle part){
- if(part.getTracks().size() != 0){
- if(part.getMomentum().magnitudeSquared() > .8
- && part.getTracks().get(0).getChi2() > maxChi2){
- h4y.fill(part.getMomentum().y()/part.getMomentum().z());
- }
- }
- if(part.getCharge() != -1)
- return false;
- if(part.getClusters().size() == 0)
- return false;
- Cluster c = part.getClusters().get(0);
- double time = c.getCalorimeterHits().get(0).getTime();
-
- if(!(time>40 && time <50))
- return false;
- double seedEnergy = 0;
- for(CalorimeterHit hit : c.getCalorimeterHits()){
- if(hit.getCorrectedEnergy() > seedEnergy)
- seedEnergy = hit.getCorrectedEnergy();
- }
- h8.fill(seedEnergy);
-
-
- if(seedEnergy < seedEnergyCut)
- return false;
-
- if(c.getPosition()[1] > 0){
- h10_t.fill(c.getSize());
- }
- else{
- h10_b.fill(c.getSize());
- }
-
-
- if(c.getCalorimeterHits().size() < 3)
- return false;
-
-
- if(c.getEnergy() > eMin && c.getEnergy() < eMax){
- if(c.getPosition()[1] > 0)
- h7.fill(c.getPosition()[1]);
- else if(c.getPosition()[1] < 0)
- h7a.fill(-c.getPosition()[1]);
- }
-
- if(EcalUtil.fid_ECal(c)){
-
- if(c.getPosition()[1] > 0){
- h5.fill(c.getEnergy());
- }
- else{
- h5a.fill(c.getEnergy());
- }
- if(part.getTracks().size() == 0)
- return false;
- Track t = part.getTracks().get(0);
- if(t.getChi2()>maxChi2){
- return false;
- }
- if(!TrackType.isGBL(t.getType()))
- return false;
-
-
-
- Hep3Vector p = part.getMomentum();
-
-
-
- double px = p.x(), pz = p.z();
- double pxtilt = px*Math.cos(beamTiltX)-pz*Math.sin(beamTiltX);
- double py = p.y();
- double pztilt = pz*Math.cos(beamTiltX)+px*Math.sin(beamTiltX);
-
- double pytilt = py*Math.cos(beamTiltY)-pztilt*Math.sin(beamTiltY);
- pztilt = pz*Math.cos(beamTiltY) + pytilt*Math.sin(beamTiltY);
-
- if(Math.abs(pztilt - c.getEnergy()) > maxdE)
- return false;
- if(c.getPosition()[1] > 0)
- h9_t.fill(pztilt);
- else
- h9_b.fill(pztilt);
-
- double theta = Math.atan(Math.hypot(pxtilt, pytilt)/pztilt);
- double phi =Math.atan2(pytilt, pxtilt);
- boolean inRange = cb.inRange(theta, phi);
- if(inRange)
- h1.fill(theta, c.getEnergy());
-
-
-
- if(c.getEnergy() > eMin && c.getEnergy() < eMax) {
-
-
-
- h2.fill(theta, phi);
- h2c.fill(theta, phi);
-
- h4.fill(px/pz, py/pz);
- //h4y.fill(py/pz);
-
- if(inRange){
-
- //System.out.println(c.getEnergy() + " " + t.getType());
- /*for(TrackState ts : t.getTrackStates()){
- if(ts.getLocation() == TrackState.AtIP)
- System.out.println(Arrays.toString(
- ts.getReferencePoint()));
- }*/
- h2a.fill(theta, phi);
- h2b.fill(theta, phi);
-
- h3.fill(theta);
- if(py > 0)
- h3_t.fill(theta);
- else
- h3_b.fill(theta);
- //if(h3_t.sumBinHeights()+h3_b.sumBinHeights() != h3.sumBinHeights())
- //System.out.println("NABO ERROR");
-
-
- h4a.fill(px/pz, py/pz);
- }
-
-
- return true;
- }
-
- }
- return false;
- }
-
+
+
+
+ static boolean display = false;
+ static CustomBinning cb;
+ public static void main(String arg[]) throws IllegalArgumentException, IOException{
+ if(arg.length == 1){
+ File file = new File(arg[0]);
+ String path = arg[0];
+ if(file.isDirectory()){
+ org.hps.users.spaul.SumEverything.main(new String[]{path, "temp.aida"});
+ path = "temp.aida";
+ }
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITreeFactory tf = af.createTreeFactory();
+ ITree tree0 = tf.create(path, "xml");
+ extractHistograms(tree0);
+ setupPlotter(af);
+
+ } else{
+
+ String input = arg[0];
+ String output = arg[1];
+ cb = new CustomBinning(new File(arg[2]));
+ if(arg[arg.length -1].equals("display"))
+ display = true;
+ IAnalysisFactory af = IAnalysisFactory.create();
+ ITree tree = af.createTreeFactory().create(output,"xml",false,true);
+ IHistogramFactory hf = af.createHistogramFactory(tree);
+ setupHistograms(hf);
+ if(display){
+ setupPlotter(af);
+ }
+ ConditionsDriver hack = new ConditionsDriver();
+ //hack.setXmlConfigResource("/u/group/hps/hps_soft/detector-data/detectors/HPS-EngRun2015-Nominal-v3");
+ hack.setDetectorName("HPS-EngRun2015-Nominal-v3");
+ hack.setFreeze(true);
+ hack.setRunNumber(Integer.parseInt(arg[3]));
+
+ hack.initialize();
+ beamTiltY = Double.parseDouble(arg[4]);
+ beamTiltX = Double.parseDouble(arg[5]);
+ LCIOReader reader = new LCIOReader(new File(input));
+ //reader.open(input);
+ //reader.
+ EventHeader event = reader.read();
+ int nEvents = 0;
+ try{
+ outer : while(event != null){
+ processEvent(event);
+
+ //System.out.println(Q2);
+
+ event = reader.read();
+ }
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ tree.commit();
+ tree.close();
+ }
+
+ }
+
+ static IHistogram2D h1, h2, h2a, h2b, h2c;
+ static IHistogram2D h4,h4a;
+ static IHistogram1D h3, /*h3a,*/ h3_t, h3_b;
+ static IHistogram1D h5, h5a;
+ //static IHistogram2D h6, h6a;
+ static IHistogram1D h7, h7a;
+ static IHistogram1D h8;
+ static IHistogram1D h9_t, h9_b;
+ static IHistogram1D h10_t, h10_b;
+ private static IHistogram1D h4y;
+
+ private static void extractHistograms(ITree tree0) {
+ h1 = (IHistogram2D) tree0.find("theta vs energy");
+
+ h2 = (IHistogram2D) tree0.find("theta vs phi");
+ h2a = (IHistogram2D) tree0.find("theta vs phi cut");
+ h2b = (IHistogram2D) tree0.find("theta vs phi cut alt");
+ h2c = (IHistogram2D) tree0.find("theta vs phi alt");
+
+ h3 = (IHistogram1D) tree0.find("theta");
+ //h3a = (IHistogram1D) tree0.find("theta isolated ");
+ h3_t = (IHistogram1D) tree0.find("theta top");
+ h3_b = (IHistogram1D) tree0.find("theta bottom");
+
+ h4 = (IHistogram2D) tree0.find("px\\/pz vs py\\/pz");
+ h4a = (IHistogram2D) tree0.find("px\\/pz vs py\\/pz cut");
+ System.out.println(h4a.xAxis().bins());
+ h5 = (IHistogram1D) tree0.find("energy top");
+ h5 = (IHistogram1D) tree0.find("energy bottom");
+
+// h6 = (IHistogram2D) tree0.find("cluster");
+// h6a = (IHistogram2D) tree0.find("cluster matched");
+ h7 = (IHistogram1D) tree0.find("y top");
+ h7a = (IHistogram1D) tree0.find("y bottom");
+ h8 = (IHistogram1D) tree0.find("seed energy");
+
+
+ h9_t = (IHistogram1D) tree0.find("pz top");
+ h9_b = (IHistogram1D) tree0.find("pz bottom");
+
+
+ h10_t = (IHistogram1D) tree0.find("clustsize top");
+ h10_b = (IHistogram1D) tree0.find("clustsize bottom");
+
+ }
+ static void setupHistograms(IHistogramFactory hf){
+ //h1 = hf.createHistogram2D("px\\/pz vs py\\/pz", 160, -.16, .24, 160, -.2, .2);
+
+
+
+
+ h2 = hf.createHistogram2D("theta vs phi", 300, 0, .3, 314, -3.14, 3.14);
+
+ h2a = hf.createHistogram2D("theta vs phi cut", 300, 0, .3, 314, -3.14, 3.14);
+
+ double thetaBins[] = new double[cb.nTheta+1];
+ for(int i = 0; i<cb.nTheta; i++){
+ thetaBins[i] = cb.thetaMin[i];
+ }
+
+ thetaBins[thetaBins.length-1] = cb.thetaMax[cb.nTheta-1];
+
+ double phiBins[] = new double[315];
+ for(int i = 0; i<315; i++){
+ phiBins[i] = i/50.-3.14; //every 10 mrad;
+ }
+
+ double eBins[] = new double[66];
+ for(int i = 0; i<66; i++){
+ eBins[i] = i/50.; //every 20 MeV up to 1300 MeV
+ }
+
+
+ h1 = hf.createHistogram2D("theta vs energy", "theta vs energy", thetaBins, eBins);
+
+
+ //identical to h2a, except different binning
+ h2b = hf.createHistogram2D("theta vs phi cut alt", "theta vs phi cut alt", thetaBins, phiBins);
+ h2c = hf.createHistogram2D("theta vs phi alt", "theta vs phi alt", thetaBins, phiBins);
+
+ h3 = hf.createHistogram1D("theta", "theta", thetaBins);
+// h3a = hf.createHistogram1D("theta isolated ", "theta isolated", thetaBins);
+
+ h3_t = hf.createHistogram1D("theta top", "theta top", thetaBins);
+ h3_b = hf.createHistogram1D("theta bottom", "theta bottom", thetaBins);
+
+
+ h4 = hf.createHistogram2D("px\\/pz vs py\\/pz", 300, -.16, .24, 300, -.2, .2);
+ h4a = hf.createHistogram2D("px\\/pz vs py\\/pz cut", 300, -.16, .24, 300, -.2, .2);
+ h4y = hf.createHistogram1D("py\\pz", 1200, -.06, .06);
+
+ h5 = hf.createHistogram1D("energy top", 75, 0, 1.5);
+ h5a = hf.createHistogram1D("energy bottom", 75, 0, 1.5);
+
+
+ h9_t = hf.createHistogram1D("pz top", 75, 0, 1.5);
+ h9_b = hf.createHistogram1D("pz bottom", 75, 0, 1.5);
+
+// h6 = hf.createHistogram2D("cluster", 47, -23.5, 23.5, 11, -5.5, 5.5);
+// h6a = hf.createHistogram2D("cluster matched", 47, -23.5, 23.5, 11, -5.5, 5.5);
+
+ h7 = hf.createHistogram1D("y top", 500, 0, 100);
+
+ h7a = hf.createHistogram1D("y bottom", 500, 0, 100);
+
+ h8 = hf.createHistogram1D("seed energy", 120, 0, 1.2);
+
+ h10_t = hf.createHistogram1D("clustsize top", 10,0, 10);
+ h10_b = hf.createHistogram1D("clustsize bottom", 10,0, 10);
+ }
+ static void setupPlotter(IAnalysisFactory af){
+ IPlotterFactory pf = af.createPlotterFactory();
+ IPlotter p = pf.create();
+ p.createRegions(2,2);
+ p.region(0).plot(h2);
+ StyleUtil.stylize(p.region(0), "theta", "phi");
+// p.region(1).plot(h3a);
+ StyleUtil.stylize(p.region(1), "theta", "# of particles");
+ p.region(2).plot(h9_t);
+ p.region(2).plot(h9_b);
+ StyleUtil.noFillHistogramBars(p.region(2));
+ StyleUtil.stylize(p.region(2), "pztilt" ,"pztilt", "# of particles");
+ p.region(3).plot(h5);
+ p.region(3).plot(h5a);
+ StyleUtil.noFillHistogramBars(p.region(3));
+ StyleUtil.stylize(p.region(3), "energy", "# of particles");
+
+ p.show();
+
+ //new window for the next plot
+ IPlotter p2 = pf.create();
+ p2.region(0).plot(h2b);
+ //IDataPointSetFactory dpsf = af.createDataPointSetFactory(af.createTreeFactory().create());
+
+ StyleUtil.stylize(p2.region(0), "theta", "phi");
+
+ p2.show();
+
+ //new window for the next plot
+ IPlotter p3 = pf.create();
+ p3.region(0).plot(h2c);
+ StyleUtil.stylize(p3.region(0), "theta", "phi");
+
+ p3.show();
+
+ //new window for the next plot
+ IPlotter p4 = pf.create();
+ p4.region(0).plot(h4);
+ StyleUtil.stylize(p4.region(0), "px/pz", "py/pz");
+
+ p4.show();
+
+ //new window for the next plot
+ IPlotter p5 = pf.create();
+ p5.region(0).plot(h4a);
+ StyleUtil.stylize(p5.region(0), "px/pz", "py/pz");
+
+ p5.show();
+
+ IPlotter p6 = pf.create("efficiency");
+ p6.createRegions(1,2);
+// p6.region(0).plot(h6);
+ StyleUtil.stylize(p6.region(0), "ix", "iy");
+// p6.region(1).plot(h6a);
+ StyleUtil.stylize(p6.region(1), "ix", "iy");
+ p6.show();
+
+ IPlotter p7 = pf.create("theta vs energy");
+ //p6.createRegions(1,2);
+ p7.region(0).plot(h1);
+ StyleUtil.stylize(p7.region(0), "theta", "energy");
+ // StyleUtil.stylize(p6.region(1), "ix", "iy");
+ p7.show();
+
+ IPlotter p8 = pf.create("y");
+ //p6.createRegions(1,2);
+ p8.region(0).plot(h7);
+ p8.region(0).plot(h7a);
+ StyleUtil.stylize(p8.region(0), "y", "# of particles");
+ // StyleUtil.stylize(p6.region(1), "ix", "iy");
+ p8.show();
+
+ IPlotter p9 = pf.create("theta: top vs. bottom");
+ //p6.createRegions(1,2);
+ p9.region(0).plot(h3_t);
+ p9.region(0).plot(h3_b);
+ StyleUtil.stylize(p9.region(0), "theta", "theta", "# of particles");
+ StyleUtil.noFillHistogramBars(p9.region(0));
+ //StyleUtil.stylize(p6.region(1), "ix", "iy");
+ p9.show();
+
+ IPlotter p10 = pf.create("seed energy");
+ //p6.createRegions(1,2);
+ p10.createRegions(2,1);
+ p10.region(0).plot(h8);
+ StyleUtil.stylize(p10.region(0), "seed energy", "seed energy (GeV)", "# of particles");
+
+ p10.region(1).plot(h10_t);
+ p10.region(1).plot(h10_b);
+ StyleUtil.noFillHistogramBars(p10.region(1));
+ StyleUtil.stylize(p10.region(1), "clust size", "n ecal hits", "# of particles");
+
+ //StyleUtil.noFillHistogramBars(p10.region(0));
+ //StyleUtil.stylize(p6.region(1), "ix", "iy");
+ p10.show();
+
+ }
+ private static void processEvent(EventHeader event) {
+ if(event.getEventNumber() %10000 == 0)
+ System.out.println("event number " + event.getEventNumber());
+
+ for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
+ {
+ if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
+ TIData tid = new TIData(gob);
+ if (!tid.isSingle1Trigger())
+ {
+ return;
+ }
+ }
+ List<ReconstructedParticle> particles = event.get(ReconstructedParticle.class, "FinalStateParticles");
+ particles = RemoveDuplicateParticles.removeDuplicateParticles(particles);
+ outer : for(ReconstructedParticle p : particles){
+
+
+ boolean isGood = addParticle(p);
+
+
+ }
+
+ }
+
+
+
+ static double eMin = .8;
+ static double eMax = 1.2;
+ static double beamEnergy = 1.057;
+
+ static double beamTiltX = .03057;
+ static double beamTiltY;
+ static double maxChi2 = 50;
+ //maximum difference between the reconstructed energy and momentum
+ static double maxdE = .5;
+
+ static double seedEnergyCut = .4;
+
+
+ static boolean addParticle(ReconstructedParticle part){
+ if(part.getTracks().size() != 0){
+ if(part.getMomentum().magnitudeSquared() > .8
+ && part.getTracks().get(0).getChi2() > maxChi2){
+ h4y.fill(part.getMomentum().y()/part.getMomentum().z());
+ }
+ }
+ if(part.getCharge() != -1)
+ return false;
+ if(part.getClusters().size() == 0)
+ return false;
+ Cluster c = part.getClusters().get(0);
+ double time = c.getCalorimeterHits().get(0).getTime();
+
+ if(!(time>40 && time <50))
+ return false;
+ double seedEnergy = 0;
+ for(CalorimeterHit hit : c.getCalorimeterHits()){
+ if(hit.getCorrectedEnergy() > seedEnergy)
+ seedEnergy = hit.getCorrectedEnergy();
+ }
+ h8.fill(seedEnergy);
+
+
+ if(seedEnergy < seedEnergyCut)
+ return false;
+
+ if(c.getPosition()[1] > 0){
+ h10_t.fill(c.getSize());
+ }
+ else{
+ h10_b.fill(c.getSize());
+ }
+
+
+ if(c.getCalorimeterHits().size() < 3)
+ return false;
+
+
+ if(c.getEnergy() > eMin && c.getEnergy() < eMax){
+ if(c.getPosition()[1] > 0)
+ h7.fill(c.getPosition()[1]);
+ else if(c.getPosition()[1] < 0)
+ h7a.fill(-c.getPosition()[1]);
+ }
+
+ if(EcalUtil.fid_ECal(c)){
+
+ if(c.getPosition()[1] > 0){
+ h5.fill(c.getEnergy());
+ }
+ else{
+ h5a.fill(c.getEnergy());
+ }
+ if(part.getTracks().size() == 0)
+ return false;
+ Track t = part.getTracks().get(0);
+ if(t.getChi2()>maxChi2){
+ return false;
+ }
+ if(!TrackType.isGBL(t.getType()))
+ return false;
+
+
+
+ Hep3Vector p = part.getMomentum();
+
+
+
+ double px = p.x(), pz = p.z();
+ double pxtilt = px*Math.cos(beamTiltX)-pz*Math.sin(beamTiltX);
+ double py = p.y();
+ double pztilt = pz*Math.cos(beamTiltX)+px*Math.sin(beamTiltX);
+
+ double pytilt = py*Math.cos(beamTiltY)-pztilt*Math.sin(beamTiltY);
+ pztilt = pz*Math.cos(beamTiltY) + pytilt*Math.sin(beamTiltY);
+
+ if(Math.abs(pztilt - c.getEnergy()) > maxdE)
+ return false;
+ if(c.getPosition()[1] > 0)
+ h9_t.fill(pztilt);
+ else
+ h9_b.fill(pztilt);
+
+ double theta = Math.atan(Math.hypot(pxtilt, pytilt)/pztilt);
+ double phi =Math.atan2(pytilt, pxtilt);
+ boolean inRange = cb.inRange(theta, phi);
+ if(inRange)
+ h1.fill(theta, c.getEnergy());
+
+
+
+ if(c.getEnergy() > eMin && c.getEnergy() < eMax) {
+
+
+
+ h2.fill(theta, phi);
+ h2c.fill(theta, phi);
+
+ h4.fill(px/pz, py/pz);
+ //h4y.fill(py/pz);
+
+ if(inRange){
+
+ //System.out.println(c.getEnergy() + " " + t.getType());
+ /*for(TrackState ts : t.getTrackStates()){
+ if(ts.getLocation() == TrackState.AtIP)
+ System.out.println(Arrays.toString(
+ ts.getReferencePoint()));
+ }*/
+ h2a.fill(theta, phi);
+ h2b.fill(theta, phi);
+
+ h3.fill(theta);
+ if(py > 0)
+ h3_t.fill(theta);
+ else
+ h3_b.fill(theta);
+ //if(h3_t.sumBinHeights()+h3_b.sumBinHeights() != h3.sumBinHeights())
+ //System.out.println("NABO ERROR");
+
+
+ h4a.fill(px/pz, py/pz);
+ }
+
+
+ return true;
+ }
+
+ }
+ return false;
+ }
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MottIntegral.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MottIntegral.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MottIntegral.java Wed Mar 9 11:43:24 2016
@@ -1,66 +1,66 @@
package org.hps.users.spaul.feecc;
public class MottIntegral {
- /**
- * @param bin
- * @param scale = Z^2alpha^2/(4*E^2)
- * @param recoil = 2E/M
- * @return the integral of 1/sin^4(th/2)*cos^2(th/2)/(1+a*sin^2(th/2)) times dPhi*sin(theta),
- * which appears in the integral of mott scattering.
- *
- * NOTE the sin(theta) is because dOmega = dTheta*dPhi*sin(theta)
- */
- static double mottIntegral(double recoil, double scale, int bin, CustomBinning cb){
- double dPhi = 0;
- for(int i = 0; i< cb.phiMax[bin].length; i++)
- dPhi += 2*(cb.phiMax[bin][i] - cb.phiMin[bin][i]); //factor of 2 from top and bottom
-
- double Imax = integral(recoil, cb.thetaMax[bin]);
-
- double Imin = integral(recoil, cb.thetaMin[bin]);
- double dI = Imax-Imin;
-
-
- double retval = scale*dPhi*dI;
- return retval;
- }
-
- static double mottIntegral(double recoil, double scale, double thetaMin, double thetaMax){
- double Imax = integral(recoil, thetaMax);
-
- double Imin = integral(recoil, thetaMin);
- double dI = Imax-Imin;
-
- double dPhi = 2*Math.PI; //full range in phi
- double retval = scale*dPhi*dI;
- return retval;
- }
-
- static double integral(double a, double th){
- double sinth22 = Math.pow(Math.sin(th/2), 2);
- return 2*(-1/sinth22+(1+a)*(Math.log(2/sinth22+2*a)));
- }
-
- static double mottIntegralWithFormFactor(double recoil, double scale, double thetaMin, double thetaMax, FormFactor ff, int nsteps, double E){
- double sum = 0;
- double prev = -1;
+ /**
+ * @param bin
+ * @param scale = Z^2alpha^2/(4*E^2)
+ * @param recoil = 2E/M
+ * @return the integral of 1/sin^4(th/2)*cos^2(th/2)/(1+a*sin^2(th/2)) times dPhi*sin(theta),
+ * which appears in the integral of mott scattering.
+ *
+ * NOTE the sin(theta) is because dOmega = dTheta*dPhi*sin(theta)
+ */
+ static double mottIntegral(double recoil, double scale, int bin, CustomBinning cb){
+ double dPhi = 0;
+ for(int i = 0; i< cb.phiMax[bin].length; i++)
+ dPhi += 2*(cb.phiMax[bin][i] - cb.phiMin[bin][i]); //factor of 2 from top and bottom
+
+ double Imax = integral(recoil, cb.thetaMax[bin]);
+
+ double Imin = integral(recoil, cb.thetaMin[bin]);
+ double dI = Imax-Imin;
+
+
+ double retval = scale*dPhi*dI;
+ return retval;
+ }
+
+ static double mottIntegral(double recoil, double scale, double thetaMin, double thetaMax){
+ double Imax = integral(recoil, thetaMax);
+
+ double Imin = integral(recoil, thetaMin);
+ double dI = Imax-Imin;
+
+ double dPhi = 2*Math.PI; //full range in phi
+ double retval = scale*dPhi*dI;
+ return retval;
+ }
+
+ static double integral(double a, double th){
+ double sinth22 = Math.pow(Math.sin(th/2), 2);
+ return 2*(-1/sinth22+(1+a)*(Math.log(2/sinth22+2*a)));
+ }
+
+ static double mottIntegralWithFormFactor(double recoil, double scale, double thetaMin, double thetaMax, FormFactor ff, int nsteps, double E){
+ double sum = 0;
+ double prev = -1;
- double dTheta = (thetaMax-thetaMin)/nsteps;
- for(int i = 0; i<nsteps; i++){
- double theta = i*(thetaMax-thetaMin)/nsteps+thetaMin;
- double I = integral(recoil, theta);
- if(i != 0)
- {
- double ts = Math.pow(Math.sin(theta/2),2);
- double q2 = 4*E*E*ts/(1+recoil*ts);
- double f2 = ff.getFormFactorSquared(q2);
- sum+= (I-prev)*f2;
- }
- prev = I;
-
- }
- double dPhi = 2*Math.PI; //full range in phi
- double retval = scale*dPhi*sum;
- return retval;
- }
+ double dTheta = (thetaMax-thetaMin)/nsteps;
+ for(int i = 0; i<nsteps; i++){
+ double theta = i*(thetaMax-thetaMin)/nsteps+thetaMin;
+ double I = integral(recoil, theta);
+ if(i != 0)
+ {
+ double ts = Math.pow(Math.sin(theta/2),2);
+ double q2 = 4*E*E*ts/(1+recoil*ts);
+ double f2 = ff.getFormFactorSquared(q2);
+ sum+= (I-prev)*f2;
+ }
+ prev = I;
+
+ }
+ double dPhi = 2*Math.PI; //full range in phi
+ double retval = scale*dPhi*sum;
+ return retval;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MultipleScattering.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MultipleScattering.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MultipleScattering.java Wed Mar 9 11:43:24 2016
@@ -8,99 +8,99 @@
import java.util.Random;
public class MultipleScattering {
-
-
- /*
- V.L. Highland, Nucl. Instrum. Methods 129, 497 (1975); Nucl. Instrum. Methods 161, 171 (1979)
-
- G.R. Lynch and O.I. Dahl, Nucl. Instrum. Methods B58, 6 (1991).
-
- */
- /**
- * @param t number of scattering lengths
- * @param p momentum in GeV/c
- * @return the rms scattering angle of an electron with beta == 1.
- */
- static double getThetaRMS(double t, double p){
- return .0136/p*Math.sqrt(t)*(1+.038*Math.log(t));
- }
- /**
- * Mo Tsai equations A.4-5
- * @param Z
- * @return
- */
- static double b(int Z){
- double xi = Math.log(1440.*Math.pow(Z, -2/3.))/Math.log(183.*Math.pow(Z,-1/3.));
- System.out.println(xi);
- return 4/3.*(1+1/9.*(Z+1.)/(Z+xi)/Math.log(183.*Math.pow(Z,-1/3.)));
-
-
- }
-
-
- public static void main(String arg[]){
-
- System.out.println(b(6));
- System.out.println(b(74));
-
- double bt = 0.03;
-
- IAnalysisFactory af = IAnalysisFactory.create();
- IHistogramFactory hf = af.createHistogramFactory(af.createTreeFactory().create());
- IHistogram1D h = hf.createHistogram1D("x", 100, 0, 1.5);
- IPlotter p = af.createPlotterFactory().create();
- p.region(0).plot(h);
- p.show();
- for(int i = 0; i< 100000; i++){
- h.fill(getRandomEnergyFraction(bt)*getRandomEnergyFraction(bt)*(1+r.nextGaussian()*.045)*1.056);
- }
- }
-
- static double pdf(double x, double bt){
- return bt/(1-x)*(x+3/4.*(1-x)*(1-x))*Math.pow(Math.log(1./x), bt);
- }
- static Random r = new Random();
- /**************************
- * CONFIGURABLE VARIABLES *
- **************************/
- /**
- * step size in x
- */
- static double dx = .001;
- /**
- * starting distance from peak to begin numerical integration
- */
- static double delta0 = .05;
-
- /**
- * fraction of the energy to cut off at. (all events with less than this energy will be blanked out,
- * and therefore not simulated in slic. Slic was having problems dealing with low energy events.
- */
- static double xCutoff = .5;
-
- static double getRandomEnergyFraction(double bt){
- double p = r.nextDouble();
- if(p< Math.pow(delta0, bt)){
- return 1-Math.pow(p, 1/bt);
- }
- double sum = Math.pow(delta0,bt);
- if(sum > p){
- return 1;
- }
- double x = 1-delta0;
- while(true){
- double contribution = pdf(x, bt)*dx;
- if(sum + contribution > p)
- {
- return x - (p-sum)/contribution*dx;
- }
- if(x < 0)
- {
- return 0;
- }
- x -= dx;
- sum += contribution;
- }
- //return 1;
- }
+
+
+ /*
+ V.L. Highland, Nucl. Instrum. Methods 129, 497 (1975); Nucl. Instrum. Methods 161, 171 (1979)
+
+ G.R. Lynch and O.I. Dahl, Nucl. Instrum. Methods B58, 6 (1991).
+
+ */
+ /**
+ * @param t number of scattering lengths
+ * @param p momentum in GeV/c
+ * @return the rms scattering angle of an electron with beta == 1.
+ */
+ static double getThetaRMS(double t, double p){
+ return .0136/p*Math.sqrt(t)*(1+.038*Math.log(t));
+ }
+ /**
+ * Mo Tsai equations A.4-5
+ * @param Z
+ * @return
+ */
+ static double b(int Z){
+ double xi = Math.log(1440.*Math.pow(Z, -2/3.))/Math.log(183.*Math.pow(Z,-1/3.));
+ System.out.println(xi);
+ return 4/3.*(1+1/9.*(Z+1.)/(Z+xi)/Math.log(183.*Math.pow(Z,-1/3.)));
+
+
+ }
+
+
+ public static void main(String arg[]){
+
+ System.out.println(b(6));
+ System.out.println(b(74));
+
+ double bt = 0.03;
+
+ IAnalysisFactory af = IAnalysisFactory.create();
+ IHistogramFactory hf = af.createHistogramFactory(af.createTreeFactory().create());
+ IHistogram1D h = hf.createHistogram1D("x", 100, 0, 1.5);
+ IPlotter p = af.createPlotterFactory().create();
+ p.region(0).plot(h);
+ p.show();
+ for(int i = 0; i< 100000; i++){
+ h.fill(getRandomEnergyFraction(bt)*getRandomEnergyFraction(bt)*(1+r.nextGaussian()*.045)*1.056);
+ }
+ }
+
+ static double pdf(double x, double bt){
+ return bt/(1-x)*(x+3/4.*(1-x)*(1-x))*Math.pow(Math.log(1./x), bt);
+ }
+ static Random r = new Random();
+ /**************************
+ * CONFIGURABLE VARIABLES *
+ **************************/
+ /**
+ * step size in x
+ */
+ static double dx = .001;
+ /**
+ * starting distance from peak to begin numerical integration
+ */
+ static double delta0 = .05;
+
+ /**
+ * fraction of the energy to cut off at. (all events with less than this energy will be blanked out,
+ * and therefore not simulated in slic. Slic was having problems dealing with low energy events.
+ */
+ static double xCutoff = .5;
+
+ static double getRandomEnergyFraction(double bt){
+ double p = r.nextDouble();
+ if(p< Math.pow(delta0, bt)){
+ return 1-Math.pow(p, 1/bt);
+ }
+ double sum = Math.pow(delta0,bt);
+ if(sum > p){
+ return 1;
+ }
+ double x = 1-delta0;
+ while(true){
+ double contribution = pdf(x, bt)*dx;
+ if(sum + contribution > p)
+ {
+ return x - (p-sum)/contribution*dx;
+ }
+ if(x < 0)
+ {
+ return 0;
+ }
+ x -= dx;
+ sum += contribution;
+ }
+ //return 1;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java Wed Mar 9 11:43:24 2016
@@ -7,61 +7,61 @@
import org.lcsim.event.ReconstructedParticle;
public class RemoveDuplicateParticles {
- public static List<ReconstructedParticle> removeDuplicateParticles(List<ReconstructedParticle> input){
- //System.out.println("\n" + input.size());
- List<ReconstructedParticle> output = new ArrayList();
- for(ReconstructedParticle p : input){
- boolean add = true;
- boolean replace = false;
- ReconstructedParticle duplicate = null;
- /*if(p.getTracks().size() == 0){
- //System.out.println("no track");
- continue;
- }
- if(!TrackType.isGBL(p.getTracks().get(0).getType())){
- //System.out.println("non gbl track");
- continue;
- }*/
- inner : for(ReconstructedParticle p2 : output){
- if(p.getEnergy() == p2.getEnergy()){
-
- if(betterThan(p, p2)){
- duplicate = p2;
- replace = true;
- }
- else{
- add = false; //keep the one that is already there
- }
- break inner;
- }
- }
- if(replace){
- output.remove(duplicate);
- //System.out.println("replaced");
- output.add(p);
- }else if(add){
- output.add(p);
- //System.out.println("added");
- }else{
- //System.out.println("retained");
- }
- }
- //System.out.println(output.size());
- return output;
- }
+ public static List<ReconstructedParticle> removeDuplicateParticles(List<ReconstructedParticle> input){
+ //System.out.println("\n" + input.size());
+ List<ReconstructedParticle> output = new ArrayList();
+ for(ReconstructedParticle p : input){
+ boolean add = true;
+ boolean replace = false;
+ ReconstructedParticle duplicate = null;
+ /*if(p.getTracks().size() == 0){
+ //System.out.println("no track");
+ continue;
+ }
+ if(!TrackType.isGBL(p.getTracks().get(0).getType())){
+ //System.out.println("non gbl track");
+ continue;
+ }*/
+ inner : for(ReconstructedParticle p2 : output){
+ if(p.getEnergy() == p2.getEnergy()){
+
+ if(betterThan(p, p2)){
+ duplicate = p2;
+ replace = true;
+ }
+ else{
+ add = false; //keep the one that is already there
+ }
+ break inner;
+ }
+ }
+ if(replace){
+ output.remove(duplicate);
+ //System.out.println("replaced");
+ output.add(p);
+ }else if(add){
+ output.add(p);
+ //System.out.println("added");
+ }else{
+ //System.out.println("retained");
+ }
+ }
+ //System.out.println(output.size());
+ return output;
+ }
- private static boolean betterThan(ReconstructedParticle p,
- ReconstructedParticle p2) {
- if(p.getTracks().size() == 0)
- return false;
- if(p.getTracks().size() == 1 && p.getTracks().size() == 0)
- return true;
- if(TrackType.isGBL(p.getTracks().get(0).getType()) && !TrackType.isGBL(p2.getTracks().get(0).getType()))
- return true;
-
- if(p.getTracks().get(0).getChi2() < p2.getTracks().get(0).getChi2()){
- return true;
- }
- return false;
- }
+ private static boolean betterThan(ReconstructedParticle p,
+ ReconstructedParticle p2) {
+ if(p.getTracks().size() == 0)
+ return false;
+ if(p.getTracks().size() == 1 && p.getTracks().size() == 0)
+ return true;
+ if(TrackType.isGBL(p.getTracks().get(0).getType()) && !TrackType.isGBL(p2.getTracks().get(0).getType()))
+ return true;
+
+ if(p.getTracks().get(0).getChi2() < p2.getTracks().get(0).getChi2()){
+ return true;
+ }
+ return false;
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinning.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinning.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinning.java Wed Mar 9 11:43:24 2016
@@ -24,277 +24,277 @@
import hep.aida.ITreeFactory;
public class ShowCustomBinning extends Canvas{
- /**
- * show Rafo's fiducial cuts translated into rotated theta and phi,
- * and overlay this with my bins in x and y.
- * @param arg
- * @throws FileNotFoundException
- */
- public static void main(String arg[]) throws FileNotFoundException{
- JFrame frame = new JFrame();
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- Canvas c = new ShowCustomBinning(new File(arg[0]));
- String outdir = arg[1];
- frame.add(c);
- frame.setSize(1200, 800);
- frame.setVisible(true);
-
-
- try {
- BufferedImage im = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
- c.paint(im.getGraphics());
- ImageIO.write(im, "PNG", new File(outdir +"/bins.png"));
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- frame = new JFrame();
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- c = new ShowCustomBinningXY(new File(arg[0]));
- frame.add(c);
- frame.setSize(1200, 615);
- frame.setVisible(true);
-
- try {
- BufferedImage im = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
- c.paint(im.getGraphics());
- ImageIO.write(im, "PNG", new File(outdir + "/bins_xy.png"));
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public void paint(Graphics g){
- g.setFont(new Font(Font.DIALOG, Font.PLAIN, 24));
-
- drawEcalOutline(g);
- drawFidEcalOutline(g);
- drawCustomBinRectangles(g);
- g.setColor(Color.BLACK);
- drawXAxis(g);
- drawYAxis(g);
- }
-
- void drawFidEcalOutline(Graphics g){
- g.setColor(Color.GRAY);
- double x_edge_low = -262.74;
- double x_edge_high = 347.7;
- double y_edge_low = 33.54;
- double y_edge_high = 75.18;
-
- double x_gap_low = -106.66;
- double x_gap_high = 42.17;
- double y_gap_high = 47.18;
- double x1,y1, x2, y2;
- double nPoints = 500;
- for(int i = 0; i< nPoints-1; i++){
- x1 = x_gap_high+i/nPoints*(x_edge_high-x_gap_high);
- x2 = x_gap_high+(i+1)/nPoints*(x_edge_high-x_gap_high);
- y1 = y_edge_low;
- y2 = y1;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
-
- x1 = x_edge_low+i/nPoints*(x_gap_low-x_edge_low);
- x2 = x_edge_low+(i+1)/nPoints*(x_gap_low-x_edge_low);
- y1 = y2 = y_edge_low;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
-
-
- x1 = x_gap_low+i/nPoints*(x_gap_high-x_gap_low);
- x2 = x_gap_low+(i+1)/nPoints*(x_gap_high-x_gap_low);
- y1 = y2 = y_gap_high;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
- x1 = x_edge_low+i/nPoints*(x_edge_high-x_edge_low);
- x2 = x_edge_low+(i+1)/nPoints*(x_edge_high-x_edge_low);
- y1 = y2 = y_edge_high;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
- }
- drawEcalFaceLine(g, x_gap_low, y_edge_low, x_gap_low, y_gap_high);
- drawEcalFaceLine(g, x_gap_high, y_edge_low, x_gap_high, y_gap_high);
-
- drawEcalFaceLine(g, x_edge_low, y_edge_low, x_edge_low, y_edge_high);
- drawEcalFaceLine(g, x_edge_high, y_edge_low, x_edge_high, y_edge_high);
-
-
- drawEcalFaceLine(g, x_gap_low, -y_edge_low, x_gap_low, -y_gap_high);
- drawEcalFaceLine(g, x_gap_high, -y_edge_low, x_gap_high, -y_gap_high);
-
- drawEcalFaceLine(g, x_edge_low, -y_edge_low, x_edge_low, -y_edge_high);
- drawEcalFaceLine(g, x_edge_high, -y_edge_low, x_edge_high, -y_edge_high);
-
- }
-
- void drawEcalOutline(Graphics g){
- /*double x_edge_low = -262.74;
- double x_edge_high = 347.7;
- double y_edge_low = 33.54;
- double y_edge_high = 75.18;
-
- double x_gap_low = -106.66;
- double x_gap_high = 42.17;
- double y_gap_high = 47.18;*/
-
- g.setColor(Color.BLACK);
- double x_edge_low = -269.56;
- double x_edge_high = 354.52;
- double y_edge_low = 26.72;
- double y_edge_high = 82;
-
- double x_gap_low = -99.84;
- double x_gap_high = 33.35;
- double y_gap_high = 40.36;
- double x1,y1, x2, y2;
- double nPoints = 500;
- for(int i = 0; i< nPoints-1; i++){
- x1 = x_gap_high+i/nPoints*(x_edge_high-x_gap_high);
- x2 = x_gap_high+(i+1)/nPoints*(x_edge_high-x_gap_high);
- y1 = y_edge_low;
- y2 = y1;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
-
- x1 = x_edge_low+i/nPoints*(x_gap_low-x_edge_low);
- x2 = x_edge_low+(i+1)/nPoints*(x_gap_low-x_edge_low);
- y1 = y2 = y_edge_low;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
-
-
- x1 = x_gap_low+i/nPoints*(x_gap_high-x_gap_low);
- x2 = x_gap_low+(i+1)/nPoints*(x_gap_high-x_gap_low);
- y1 = y2 = y_gap_high;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
- x1 = x_edge_low+i/nPoints*(x_edge_high-x_edge_low);
- x2 = x_edge_low+(i+1)/nPoints*(x_edge_high-x_edge_low);
- y1 = y2 = y_edge_high;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
- }
- drawEcalFaceLine(g, x_gap_low, y_edge_low, x_gap_low, y_gap_high);
- drawEcalFaceLine(g, x_gap_high, y_edge_low, x_gap_high, y_gap_high);
-
- drawEcalFaceLine(g, x_edge_low, y_edge_low, x_edge_low, y_edge_high);
- drawEcalFaceLine(g, x_edge_high, y_edge_low, x_edge_high, y_edge_high);
-
-
- drawEcalFaceLine(g, x_gap_low, -y_edge_low, x_gap_low, -y_gap_high);
- drawEcalFaceLine(g, x_gap_high, -y_edge_low, x_gap_high, -y_gap_high);
-
- drawEcalFaceLine(g, x_edge_low, -y_edge_low, x_edge_low, -y_edge_high);
- drawEcalFaceLine(g, x_edge_high, -y_edge_low, x_edge_high, -y_edge_high);
- }
-
- CustomBinning binning;
-
- ShowCustomBinning(File file) throws FileNotFoundException{
- this.binning = new CustomBinning(file);
- print(this.binning);
- }
- Color altBin1 = new Color(0, 0, 128);
- Color altBin2 = new Color(0,128,0);
- Color fillBin1 = new Color(196, 196, 255);
- Color fillBin2 = new Color(196,255,196);
- void drawCustomBinRectangles(Graphics g){
- for(int i = 0; i<binning.nTheta; i++){
- g.setColor(i%2 == 0 ? altBin1 : altBin2);
- for(int j = 0; j<binning.phiMax[i].length; j++){
- double phi1 = binning.phiMax[i][j];
- double phi2 = binning.phiMin[i][j];
- double theta1 = binning.thetaMin[i];
- double theta2 = binning.thetaMax[i];
-
- int x =getX(theta1)+1, y = getY(phi1), w = getX(theta2)-getX(theta1), h = getY(phi2)-getY(phi1);
-
- g.setColor(i%2 == 0 ? fillBin1 : fillBin2);
- g.fillRect(x, y, w, h);
- g.setColor(i%2 == 0 ? altBin1 : altBin2);
- g.drawRect(x, y, w, h);
- x =getX(theta1)+1; y = getY(-phi2); w = getX(theta2)-getX(theta1); h = getY(-phi1)-getY(-phi2);
- g.setColor(i%2 == 0 ? fillBin1 : fillBin2);
- g.fillRect(x, y, w, h);
- g.setColor(i%2 == 0 ? altBin1 : altBin2);
- g.drawRect(x, y, w, h);
- }
-
- }
- }
- void drawXAxis(Graphics g){
- //x axis
- g.drawString("θ", getX(.28), getY(0) - 40);
- g.drawLine(getX(0), getY(0), getX(.28), getY(0));
- for(int i = 0; i< 28; i++){
- if(i%5 == 0 && i != 0){
- g.drawString(i/100.+"", getX(i/100.)-15, getY(0)-20);
- g.drawLine(getX(i/100.), getY(0), getX(i/100.), getY(0)-15);
- }
- g.drawLine(getX(i/100.), getY(0), getX(i/100.), getY(0)-5);
- }
- }
- void drawYAxis(Graphics g){
- g.drawString("Ï", getX(0)+70, getY(3));
- g.drawLine(getX(0), getY(-3), getX(0), getY(3));
- for(int i = -30; i<= 30; i++){
- if(i%5 == 0 && i != 0){
- g.drawString(i/10.+"", getX(0)+20, getY(i/10.) + 5);
-
- g.drawLine(getX(0), getY(i/10.), getX(0) + 15, getY(i/10.));
- }
- if(i == 0){
- //g.drawString(i/10.+"", getX(0)+10, getY(i/10.) - 15);
- }
- g.drawLine(getX(0), getY(i/10.), getX(0) + 5, getY(i/10.));
- }
- }
-
-
- void drawEcalFaceLine(Graphics g, double x1, double y1, double x2, double y2){
-
- double[] polar1 = EcalUtil.getThetaPhiSpherical(x1, y1);
- double[] polar2 = EcalUtil.getThetaPhiSpherical(x2, y2);
- g.drawLine(getX(polar1[0]), getY(polar1[1]), getX(polar2[0]), getY(polar2[1]));
-
- }
- int getX(double theta){
- return (int)(this.getWidth()*theta/.3)+left_margin;
- }
- int left_margin = 20;
- int getY(double phi){
- return (int)(this.getHeight()*(3.2-phi)/6.4);
- }
- static void print(CustomBinning binning){
- System.out.println(" Bin \\# & $\\theta_{\\textrm{min}}$ & $\\theta_{\\textrm{max}}$ & $\\phi_{\\textrm{min 1}}$ & $\\phi_{\\textrm{max 1}}$ & $\\phi_{\\textrm{min 2}}$ & $\\phi_{\\textrm{max 2}}$ & Solid angle \\\\");
- for(int i = 0; i<binning.nTheta; i++){
- if(binning.phiMax[i].length == 1)
- System.out.printf("%d & %.0f & %.0f & %.0f & %.0f & -- & -- & %.0f \\\\\n",
- i+1,
- binning.thetaMin[i]*1000,
- binning.thetaMax[i]*1000,
- binning.phiMin[i][0]*1000,
- binning.phiMax[i][0]*1000.,
- binning.getSteradians(i)*1e6);
- if(binning.phiMax[i].length == 2)
- System.out.printf("%d & %.0f & %.0f & %.0f & %.0f & %.0f & %.0f & %.0f \\\\\n",
- i+1,
- binning.thetaMin[i]*1000,
- binning.thetaMax[i]*1000,
- binning.phiMin[i][0]*1000,
- binning.phiMax[i][0]*1000,
- binning.phiMin[i][1]*1000,
- binning.phiMax[i][1]*1000,
- binning.getSteradians(i)*1e6);
- }
- System.out.println("total " + binning.getTotSteradians()*1e6 + " microsteradians");
- }
+ /**
+ * show Rafo's fiducial cuts translated into rotated theta and phi,
+ * and overlay this with my bins in x and y.
+ * @param arg
+ * @throws FileNotFoundException
+ */
+ public static void main(String arg[]) throws FileNotFoundException{
+ JFrame frame = new JFrame();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ Canvas c = new ShowCustomBinning(new File(arg[0]));
+ String outdir = arg[1];
+ frame.add(c);
+ frame.setSize(1200, 800);
+ frame.setVisible(true);
+
+
+ try {
+ BufferedImage im = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
+ c.paint(im.getGraphics());
+ ImageIO.write(im, "PNG", new File(outdir +"/bins.png"));
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ frame = new JFrame();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ c = new ShowCustomBinningXY(new File(arg[0]));
+ frame.add(c);
+ frame.setSize(1200, 615);
+ frame.setVisible(true);
+
+ try {
+ BufferedImage im = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
+ c.paint(im.getGraphics());
+ ImageIO.write(im, "PNG", new File(outdir + "/bins_xy.png"));
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ public void paint(Graphics g){
+ g.setFont(new Font(Font.DIALOG, Font.PLAIN, 24));
+
+ drawEcalOutline(g);
+ drawFidEcalOutline(g);
+ drawCustomBinRectangles(g);
+ g.setColor(Color.BLACK);
+ drawXAxis(g);
+ drawYAxis(g);
+ }
+
+ void drawFidEcalOutline(Graphics g){
+ g.setColor(Color.GRAY);
+ double x_edge_low = -262.74;
+ double x_edge_high = 347.7;
+ double y_edge_low = 33.54;
+ double y_edge_high = 75.18;
+
+ double x_gap_low = -106.66;
+ double x_gap_high = 42.17;
+ double y_gap_high = 47.18;
+ double x1,y1, x2, y2;
+ double nPoints = 500;
+ for(int i = 0; i< nPoints-1; i++){
+ x1 = x_gap_high+i/nPoints*(x_edge_high-x_gap_high);
+ x2 = x_gap_high+(i+1)/nPoints*(x_edge_high-x_gap_high);
+ y1 = y_edge_low;
+ y2 = y1;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+
+ x1 = x_edge_low+i/nPoints*(x_gap_low-x_edge_low);
+ x2 = x_edge_low+(i+1)/nPoints*(x_gap_low-x_edge_low);
+ y1 = y2 = y_edge_low;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+
+
+ x1 = x_gap_low+i/nPoints*(x_gap_high-x_gap_low);
+ x2 = x_gap_low+(i+1)/nPoints*(x_gap_high-x_gap_low);
+ y1 = y2 = y_gap_high;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+ x1 = x_edge_low+i/nPoints*(x_edge_high-x_edge_low);
+ x2 = x_edge_low+(i+1)/nPoints*(x_edge_high-x_edge_low);
+ y1 = y2 = y_edge_high;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+ }
+ drawEcalFaceLine(g, x_gap_low, y_edge_low, x_gap_low, y_gap_high);
+ drawEcalFaceLine(g, x_gap_high, y_edge_low, x_gap_high, y_gap_high);
+
+ drawEcalFaceLine(g, x_edge_low, y_edge_low, x_edge_low, y_edge_high);
+ drawEcalFaceLine(g, x_edge_high, y_edge_low, x_edge_high, y_edge_high);
+
+
+ drawEcalFaceLine(g, x_gap_low, -y_edge_low, x_gap_low, -y_gap_high);
+ drawEcalFaceLine(g, x_gap_high, -y_edge_low, x_gap_high, -y_gap_high);
+
+ drawEcalFaceLine(g, x_edge_low, -y_edge_low, x_edge_low, -y_edge_high);
+ drawEcalFaceLine(g, x_edge_high, -y_edge_low, x_edge_high, -y_edge_high);
+
+ }
+
+ void drawEcalOutline(Graphics g){
+ /*double x_edge_low = -262.74;
+ double x_edge_high = 347.7;
+ double y_edge_low = 33.54;
+ double y_edge_high = 75.18;
+
+ double x_gap_low = -106.66;
+ double x_gap_high = 42.17;
+ double y_gap_high = 47.18;*/
+
+ g.setColor(Color.BLACK);
+ double x_edge_low = -269.56;
+ double x_edge_high = 354.52;
+ double y_edge_low = 26.72;
+ double y_edge_high = 82;
+
+ double x_gap_low = -99.84;
+ double x_gap_high = 33.35;
+ double y_gap_high = 40.36;
+ double x1,y1, x2, y2;
+ double nPoints = 500;
+ for(int i = 0; i< nPoints-1; i++){
+ x1 = x_gap_high+i/nPoints*(x_edge_high-x_gap_high);
+ x2 = x_gap_high+(i+1)/nPoints*(x_edge_high-x_gap_high);
+ y1 = y_edge_low;
+ y2 = y1;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+
+ x1 = x_edge_low+i/nPoints*(x_gap_low-x_edge_low);
+ x2 = x_edge_low+(i+1)/nPoints*(x_gap_low-x_edge_low);
+ y1 = y2 = y_edge_low;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+
+
+ x1 = x_gap_low+i/nPoints*(x_gap_high-x_gap_low);
+ x2 = x_gap_low+(i+1)/nPoints*(x_gap_high-x_gap_low);
+ y1 = y2 = y_gap_high;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+ x1 = x_edge_low+i/nPoints*(x_edge_high-x_edge_low);
+ x2 = x_edge_low+(i+1)/nPoints*(x_edge_high-x_edge_low);
+ y1 = y2 = y_edge_high;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+ }
+ drawEcalFaceLine(g, x_gap_low, y_edge_low, x_gap_low, y_gap_high);
+ drawEcalFaceLine(g, x_gap_high, y_edge_low, x_gap_high, y_gap_high);
+
+ drawEcalFaceLine(g, x_edge_low, y_edge_low, x_edge_low, y_edge_high);
+ drawEcalFaceLine(g, x_edge_high, y_edge_low, x_edge_high, y_edge_high);
+
+
+ drawEcalFaceLine(g, x_gap_low, -y_edge_low, x_gap_low, -y_gap_high);
+ drawEcalFaceLine(g, x_gap_high, -y_edge_low, x_gap_high, -y_gap_high);
+
+ drawEcalFaceLine(g, x_edge_low, -y_edge_low, x_edge_low, -y_edge_high);
+ drawEcalFaceLine(g, x_edge_high, -y_edge_low, x_edge_high, -y_edge_high);
+ }
+
+ CustomBinning binning;
+
+ ShowCustomBinning(File file) throws FileNotFoundException{
+ this.binning = new CustomBinning(file);
+ print(this.binning);
+ }
+ Color altBin1 = new Color(0, 0, 128);
+ Color altBin2 = new Color(0,128,0);
+ Color fillBin1 = new Color(196, 196, 255);
+ Color fillBin2 = new Color(196,255,196);
+ void drawCustomBinRectangles(Graphics g){
+ for(int i = 0; i<binning.nTheta; i++){
+ g.setColor(i%2 == 0 ? altBin1 : altBin2);
+ for(int j = 0; j<binning.phiMax[i].length; j++){
+ double phi1 = binning.phiMax[i][j];
+ double phi2 = binning.phiMin[i][j];
+ double theta1 = binning.thetaMin[i];
+ double theta2 = binning.thetaMax[i];
+
+ int x =getX(theta1)+1, y = getY(phi1), w = getX(theta2)-getX(theta1), h = getY(phi2)-getY(phi1);
+
+ g.setColor(i%2 == 0 ? fillBin1 : fillBin2);
+ g.fillRect(x, y, w, h);
+ g.setColor(i%2 == 0 ? altBin1 : altBin2);
+ g.drawRect(x, y, w, h);
+ x =getX(theta1)+1; y = getY(-phi2); w = getX(theta2)-getX(theta1); h = getY(-phi1)-getY(-phi2);
+ g.setColor(i%2 == 0 ? fillBin1 : fillBin2);
+ g.fillRect(x, y, w, h);
+ g.setColor(i%2 == 0 ? altBin1 : altBin2);
+ g.drawRect(x, y, w, h);
+ }
+
+ }
+ }
+ void drawXAxis(Graphics g){
+ //x axis
+ g.drawString("θ", getX(.28), getY(0) - 40);
+ g.drawLine(getX(0), getY(0), getX(.28), getY(0));
+ for(int i = 0; i< 28; i++){
+ if(i%5 == 0 && i != 0){
+ g.drawString(i/100.+"", getX(i/100.)-15, getY(0)-20);
+ g.drawLine(getX(i/100.), getY(0), getX(i/100.), getY(0)-15);
+ }
+ g.drawLine(getX(i/100.), getY(0), getX(i/100.), getY(0)-5);
+ }
+ }
+ void drawYAxis(Graphics g){
+ g.drawString("Ï", getX(0)+70, getY(3));
+ g.drawLine(getX(0), getY(-3), getX(0), getY(3));
+ for(int i = -30; i<= 30; i++){
+ if(i%5 == 0 && i != 0){
+ g.drawString(i/10.+"", getX(0)+20, getY(i/10.) + 5);
+
+ g.drawLine(getX(0), getY(i/10.), getX(0) + 15, getY(i/10.));
+ }
+ if(i == 0){
+ //g.drawString(i/10.+"", getX(0)+10, getY(i/10.) - 15);
+ }
+ g.drawLine(getX(0), getY(i/10.), getX(0) + 5, getY(i/10.));
+ }
+ }
+
+
+ void drawEcalFaceLine(Graphics g, double x1, double y1, double x2, double y2){
+
+ double[] polar1 = EcalUtil.getThetaPhiSpherical(x1, y1);
+ double[] polar2 = EcalUtil.getThetaPhiSpherical(x2, y2);
+ g.drawLine(getX(polar1[0]), getY(polar1[1]), getX(polar2[0]), getY(polar2[1]));
+
+ }
+ int getX(double theta){
+ return (int)(this.getWidth()*theta/.3)+left_margin;
+ }
+ int left_margin = 20;
+ int getY(double phi){
+ return (int)(this.getHeight()*(3.2-phi)/6.4);
+ }
+ static void print(CustomBinning binning){
+ System.out.println(" Bin \\# & $\\theta_{\\textrm{min}}$ & $\\theta_{\\textrm{max}}$ & $\\phi_{\\textrm{min 1}}$ & $\\phi_{\\textrm{max 1}}$ & $\\phi_{\\textrm{min 2}}$ & $\\phi_{\\textrm{max 2}}$ & Solid angle \\\\");
+ for(int i = 0; i<binning.nTheta; i++){
+ if(binning.phiMax[i].length == 1)
+ System.out.printf("%d & %.0f & %.0f & %.0f & %.0f & -- & -- & %.0f \\\\\n",
+ i+1,
+ binning.thetaMin[i]*1000,
+ binning.thetaMax[i]*1000,
+ binning.phiMin[i][0]*1000,
+ binning.phiMax[i][0]*1000.,
+ binning.getSteradians(i)*1e6);
+ if(binning.phiMax[i].length == 2)
+ System.out.printf("%d & %.0f & %.0f & %.0f & %.0f & %.0f & %.0f & %.0f \\\\\n",
+ i+1,
+ binning.thetaMin[i]*1000,
+ binning.thetaMax[i]*1000,
+ binning.phiMin[i][0]*1000,
+ binning.phiMax[i][0]*1000,
+ binning.phiMin[i][1]*1000,
+ binning.phiMax[i][1]*1000,
+ binning.getSteradians(i)*1e6);
+ }
+ System.out.println("total " + binning.getTotSteradians()*1e6 + " microsteradians");
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinningXY.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinningXY.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinningXY.java Wed Mar 9 11:43:24 2016
@@ -8,241 +8,241 @@
import java.io.FileNotFoundException;
public class ShowCustomBinningXY extends ShowCustomBinning{
- ShowCustomBinningXY(File file) throws FileNotFoundException
- {
- super(file);
- }
- @Override
- void drawCustomBinRectangles(Graphics g){
- for(int i = 0; i<binning.nTheta; i++){
- g.setColor(i%2 == 0 ? altBin1 : altBin2);
- for(int j = 0; j<binning.phiMax[i].length; j++){
- double phi1 = binning.phiMax[i][j];
- double phi2 = binning.phiMin[i][j];
- double theta1 = binning.thetaMin[i];
- double theta2 = binning.thetaMax[i];
-
- double nK = 10;
- for(int sign = -1; sign <=1; sign +=2){
-
- Polygon p = new Polygon();
- for(int k = 0; k< nK; k++){
- drawLineFromPolar(theta1, sign*(phi1+(phi2-phi1)*k/nK), theta1, sign*(phi1+(phi2-phi1)*(k+1)/nK),g,p);
- }
- for(int k = 0; k< nK; k++){
- drawLineFromPolar(theta1 + (theta2-theta1)*k/nK, sign*phi2, theta1 + (theta2-theta1)*(k+1)/nK, sign*phi2,g,p);
- }
- for(int k = 0; k< nK; k++){
- drawLineFromPolar(theta2, sign*(phi2+(phi1-phi2)*k/nK), theta2, sign*(phi2+(phi1-phi2)*(k+1)/nK),g, p);
- }
- for(int k = 0; k< nK; k++){
- drawLineFromPolar(theta2 + (theta1-theta2)*k/nK, sign*phi1, theta2 + (theta1-theta2)*(k+1)/nK, sign*phi1,g, p);
- }
-
- closePolarFigure(g, i%2 == 0 ? altBin1 : altBin2, i%2 == 0 ? fillBin1 : fillBin2, p);
- }
-
- }
- }
- }
- private void drawLineFromPolar(double theta1, double phi1, double theta2,
- double phi2, Graphics g, Polygon p) {
- double[] xy1 = toXY(theta1, phi1);
- double[] xy2 = toXY(theta2, phi2);
-
- if(p == null)
- p = new Polygon();
- /*g.drawLine(getX(xy1[0]),
- getY(xy1[1]),
- getX(xy2[0]),
- getY(xy2[1]));*/
- p.addPoint(getX(xy2[0]), getY(xy2[1]));
- }
- private void closePolarFigure(Graphics g, Color outlineColor, Color fillColor, Polygon p){
- g.setColor(fillColor);
- g.fillPolygon(p);
- g.setColor(outlineColor);
- g.drawPolygon(p);
-
- }
- double xtilt = .0294;
- double ytilt = -.00082;
- double[] toXY(double theta, double phi){
- double ux = Math.cos(phi)*Math.sin(theta)*Math.cos(xtilt)+Math.cos(theta)*Math.sin(xtilt);
- double uy = Math.sin(phi)*Math.sin(theta);
- double uz = Math.cos(theta)*Math.cos(xtilt)-Math.cos(phi)*Math.sin(theta)*Math.sin(xtilt);
-
- double temp = Math.cos(ytilt)*uy+Math.sin(ytilt)*uz;
- uz = Math.cos(ytilt)*uz-Math.sin(ytilt)*uy;
- uy = temp;
-
- double pxpz = ux/uz;
- double pypz = uy/uz;
- return new double[]{pxpz, pypz};
- }
- int getX(double pxpz){
- //return (int)((pxpz -(-.16))/(.34-(-.16))*getWidth());
- return (int)((.32-pxpz)/(.32-(-.18))*getWidth());
- }
- int getY(double pypz){
- return getHeight()-(int)((pypz -(-.125))/(.125-(-.125))*getHeight());
- }
- void drawFidEcalOutline(Graphics g){
- g.setColor(Color.GRAY);
- double x_edge_low = -262.74;
- double x_edge_high = 347.7;
- double y_edge_low = 33.54;
- double y_edge_high = 75.18;
-
- double x_gap_low = -106.66;
- double x_gap_high = 42.17;
- double y_gap_high = 47.18;
- double x1,y1, x2, y2;
- double nPoints = 500;
- for(int i = 0; i< nPoints-1; i++){
- x1 = x_gap_high+i/nPoints*(x_edge_high-x_gap_high);
- x2 = x_gap_high+(i+1)/nPoints*(x_edge_high-x_gap_high);
- y1 = y_edge_low;
- y2 = y1;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
-
- x1 = x_edge_low+i/nPoints*(x_gap_low-x_edge_low);
- x2 = x_edge_low+(i+1)/nPoints*(x_gap_low-x_edge_low);
- y1 = y2 = y_edge_low;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
-
-
- x1 = x_gap_low+i/nPoints*(x_gap_high-x_gap_low);
- x2 = x_gap_low+(i+1)/nPoints*(x_gap_high-x_gap_low);
- y1 = y2 = y_gap_high;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
- x1 = x_edge_low+i/nPoints*(x_edge_high-x_edge_low);
- x2 = x_edge_low+(i+1)/nPoints*(x_edge_high-x_edge_low);
- y1 = y2 = y_edge_high;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
- }
- drawEcalFaceLine(g, x_gap_low, y_edge_low, x_gap_low, y_gap_high);
- drawEcalFaceLine(g, x_gap_high, y_edge_low, x_gap_high, y_gap_high);
-
- drawEcalFaceLine(g, x_edge_low, y_edge_low, x_edge_low, y_edge_high);
- drawEcalFaceLine(g, x_edge_high, y_edge_low, x_edge_high, y_edge_high);
-
-
- drawEcalFaceLine(g, x_gap_low, -y_edge_low, x_gap_low, -y_gap_high);
- drawEcalFaceLine(g, x_gap_high, -y_edge_low, x_gap_high, -y_gap_high);
-
- drawEcalFaceLine(g, x_edge_low, -y_edge_low, x_edge_low, -y_edge_high);
- drawEcalFaceLine(g, x_edge_high, -y_edge_low, x_edge_high, -y_edge_high);
-
- }
-
- void drawEcalOutline(Graphics g){
- g.setColor(Color.BLACK);
- double x_edge_low = -269.56;
- double x_edge_high = 354.52;
- double y_edge_low = 26.72;
- double y_edge_high = 82;
-
- double x_gap_low = -99.84;
- double x_gap_high = 33.35;
- double y_gap_high = 40.36;
- double x1,y1, x2, y2;
- x1 = x_gap_high;
- x2 = x_edge_high;
- y1 = y_edge_low;
- y2 = y1;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
-
- x1 = x_edge_low;
- x2 = x_gap_low;
- y1 = y2 = y_edge_low;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
-
-
- x1 = x_gap_low;
- x2 = x_gap_high;
- y1 = y2 = y_gap_high;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
- x1 = x_edge_low;
- x2 = x_edge_high;
- y1 = y2 = y_edge_high;
- drawEcalFaceLine(g, x1, y1, x2, y2);
- drawEcalFaceLine(g, x1, -y1, x2, -y2);
-
- drawEcalFaceLine(g, x_gap_low, y_edge_low, x_gap_low, y_gap_high);
- drawEcalFaceLine(g, x_gap_high, y_edge_low, x_gap_high, y_gap_high);
-
- drawEcalFaceLine(g, x_edge_low, y_edge_low, x_edge_low, y_edge_high);
- drawEcalFaceLine(g, x_edge_high, y_edge_low, x_edge_high, y_edge_high);
-
-
- drawEcalFaceLine(g, x_gap_low, -y_edge_low, x_gap_low, -y_gap_high);
- drawEcalFaceLine(g, x_gap_high, -y_edge_low, x_gap_high, -y_gap_high);
-
- drawEcalFaceLine(g, x_edge_low, -y_edge_low, x_edge_low, -y_edge_high);
- drawEcalFaceLine(g, x_edge_high, -y_edge_low, x_edge_high, -y_edge_high);
- }
- void drawEcalFaceLine(Graphics g, double x1, double y1, double x2, double y2){
-
- double[] h1 = EcalUtil.toHollysCoordinates(x1, y1, 1.057, 11);
- double[] h2 = EcalUtil.toHollysCoordinates(x2, y2, 1.057, 11);
- g.drawLine(getX(Math.tan(h1[1])), getY(Math.tan(h1[0])), getX(Math.tan(h2[1])), getY(Math.tan(h2[0])));
-
- }
-
- void drawXAxis(Graphics g){
- //x axis
- g.drawString("px/pz", getX(.30)-10, getY(0) - 45);
- g.drawLine(getX(-.15), getY(0), getX(.30), getY(0));
- for(int i = -15; i<= 30; i++){
- if(i%5 == 0 && i != 0){
- g.drawString(i/100.+"", getX(i/100.)-15, getY(0)-20);
- g.drawLine(getX(i/100.), getY(0), getX(i/100.), getY(0)-15);
- }
- g.drawLine(getX(i/100.), getY(0), getX(i/100.), getY(0)-5);
- }
- }
- void drawYAxis(Graphics g){
- g.drawString("py/pz", getX(0), getY(.1)-20);
- g.drawLine(getX(0), getY(-.1), getX(0), getY(.1));
- for(int i = -10; i<= 10; i++){
- if(i%5 == 0 && i != 0){
- g.drawString(i/100.+"", getX(0)+15, getY(i/100.) + 5);
-
- g.drawLine(getX(0), getY(i/100.), getX(0) + 10, getY(i/100.));
- }
- if(i == 0){
- //g.drawString(i/10.+"", getX(0)+10, getY(i/10.) - 15);
- }
- g.drawLine(getX(0), getY(i/100.), getX(0) + 5, getY(i/100.));
- }
- }
- public void paint(Graphics g){
- super.paint(g);
- drawBeamspot(g);
- }
-
- void drawBeamspot(Graphics g){
- g.setColor(Color.red);
- int x = getX(xtilt), y = getY(ytilt);
- g.drawLine(x+10, y, x-10, y);
- g.drawLine(x+10, y+1, x-10, y+1);
- g.drawLine(x+10, y-1, x-10, y-1);
- g.drawLine(x, y-10, x, y+10);
- g.drawLine(x+1, y-10, x+1, y+10);
- g.drawLine(x-1, y-10, x-1, y+10);
- }
+ ShowCustomBinningXY(File file) throws FileNotFoundException
+ {
+ super(file);
+ }
+ @Override
+ void drawCustomBinRectangles(Graphics g){
+ for(int i = 0; i<binning.nTheta; i++){
+ g.setColor(i%2 == 0 ? altBin1 : altBin2);
+ for(int j = 0; j<binning.phiMax[i].length; j++){
+ double phi1 = binning.phiMax[i][j];
+ double phi2 = binning.phiMin[i][j];
+ double theta1 = binning.thetaMin[i];
+ double theta2 = binning.thetaMax[i];
+
+ double nK = 10;
+ for(int sign = -1; sign <=1; sign +=2){
+
+ Polygon p = new Polygon();
+ for(int k = 0; k< nK; k++){
+ drawLineFromPolar(theta1, sign*(phi1+(phi2-phi1)*k/nK), theta1, sign*(phi1+(phi2-phi1)*(k+1)/nK),g,p);
+ }
+ for(int k = 0; k< nK; k++){
+ drawLineFromPolar(theta1 + (theta2-theta1)*k/nK, sign*phi2, theta1 + (theta2-theta1)*(k+1)/nK, sign*phi2,g,p);
+ }
+ for(int k = 0; k< nK; k++){
+ drawLineFromPolar(theta2, sign*(phi2+(phi1-phi2)*k/nK), theta2, sign*(phi2+(phi1-phi2)*(k+1)/nK),g, p);
+ }
+ for(int k = 0; k< nK; k++){
+ drawLineFromPolar(theta2 + (theta1-theta2)*k/nK, sign*phi1, theta2 + (theta1-theta2)*(k+1)/nK, sign*phi1,g, p);
+ }
+
+ closePolarFigure(g, i%2 == 0 ? altBin1 : altBin2, i%2 == 0 ? fillBin1 : fillBin2, p);
+ }
+
+ }
+ }
+ }
+ private void drawLineFromPolar(double theta1, double phi1, double theta2,
+ double phi2, Graphics g, Polygon p) {
+ double[] xy1 = toXY(theta1, phi1);
+ double[] xy2 = toXY(theta2, phi2);
+
+ if(p == null)
+ p = new Polygon();
+ /*g.drawLine(getX(xy1[0]),
+ getY(xy1[1]),
+ getX(xy2[0]),
+ getY(xy2[1]));*/
+ p.addPoint(getX(xy2[0]), getY(xy2[1]));
+ }
+ private void closePolarFigure(Graphics g, Color outlineColor, Color fillColor, Polygon p){
+ g.setColor(fillColor);
+ g.fillPolygon(p);
+ g.setColor(outlineColor);
+ g.drawPolygon(p);
+
+ }
+ double xtilt = .0294;
+ double ytilt = -.00082;
+ double[] toXY(double theta, double phi){
+ double ux = Math.cos(phi)*Math.sin(theta)*Math.cos(xtilt)+Math.cos(theta)*Math.sin(xtilt);
+ double uy = Math.sin(phi)*Math.sin(theta);
+ double uz = Math.cos(theta)*Math.cos(xtilt)-Math.cos(phi)*Math.sin(theta)*Math.sin(xtilt);
+
+ double temp = Math.cos(ytilt)*uy+Math.sin(ytilt)*uz;
+ uz = Math.cos(ytilt)*uz-Math.sin(ytilt)*uy;
+ uy = temp;
+
+ double pxpz = ux/uz;
+ double pypz = uy/uz;
+ return new double[]{pxpz, pypz};
+ }
+ int getX(double pxpz){
+ //return (int)((pxpz -(-.16))/(.34-(-.16))*getWidth());
+ return (int)((.32-pxpz)/(.32-(-.18))*getWidth());
+ }
+ int getY(double pypz){
+ return getHeight()-(int)((pypz -(-.125))/(.125-(-.125))*getHeight());
+ }
+ void drawFidEcalOutline(Graphics g){
+ g.setColor(Color.GRAY);
+ double x_edge_low = -262.74;
+ double x_edge_high = 347.7;
+ double y_edge_low = 33.54;
+ double y_edge_high = 75.18;
+
+ double x_gap_low = -106.66;
+ double x_gap_high = 42.17;
+ double y_gap_high = 47.18;
+ double x1,y1, x2, y2;
+ double nPoints = 500;
+ for(int i = 0; i< nPoints-1; i++){
+ x1 = x_gap_high+i/nPoints*(x_edge_high-x_gap_high);
+ x2 = x_gap_high+(i+1)/nPoints*(x_edge_high-x_gap_high);
+ y1 = y_edge_low;
+ y2 = y1;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+
+ x1 = x_edge_low+i/nPoints*(x_gap_low-x_edge_low);
+ x2 = x_edge_low+(i+1)/nPoints*(x_gap_low-x_edge_low);
+ y1 = y2 = y_edge_low;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+
+
+ x1 = x_gap_low+i/nPoints*(x_gap_high-x_gap_low);
+ x2 = x_gap_low+(i+1)/nPoints*(x_gap_high-x_gap_low);
+ y1 = y2 = y_gap_high;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+ x1 = x_edge_low+i/nPoints*(x_edge_high-x_edge_low);
+ x2 = x_edge_low+(i+1)/nPoints*(x_edge_high-x_edge_low);
+ y1 = y2 = y_edge_high;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+ }
+ drawEcalFaceLine(g, x_gap_low, y_edge_low, x_gap_low, y_gap_high);
+ drawEcalFaceLine(g, x_gap_high, y_edge_low, x_gap_high, y_gap_high);
+
+ drawEcalFaceLine(g, x_edge_low, y_edge_low, x_edge_low, y_edge_high);
+ drawEcalFaceLine(g, x_edge_high, y_edge_low, x_edge_high, y_edge_high);
+
+
+ drawEcalFaceLine(g, x_gap_low, -y_edge_low, x_gap_low, -y_gap_high);
+ drawEcalFaceLine(g, x_gap_high, -y_edge_low, x_gap_high, -y_gap_high);
+
+ drawEcalFaceLine(g, x_edge_low, -y_edge_low, x_edge_low, -y_edge_high);
+ drawEcalFaceLine(g, x_edge_high, -y_edge_low, x_edge_high, -y_edge_high);
+
+ }
+
+ void drawEcalOutline(Graphics g){
+ g.setColor(Color.BLACK);
+ double x_edge_low = -269.56;
+ double x_edge_high = 354.52;
+ double y_edge_low = 26.72;
+ double y_edge_high = 82;
+
+ double x_gap_low = -99.84;
+ double x_gap_high = 33.35;
+ double y_gap_high = 40.36;
+ double x1,y1, x2, y2;
+ x1 = x_gap_high;
+ x2 = x_edge_high;
+ y1 = y_edge_low;
+ y2 = y1;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+
+ x1 = x_edge_low;
+ x2 = x_gap_low;
+ y1 = y2 = y_edge_low;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+
+
+ x1 = x_gap_low;
+ x2 = x_gap_high;
+ y1 = y2 = y_gap_high;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+ x1 = x_edge_low;
+ x2 = x_edge_high;
+ y1 = y2 = y_edge_high;
+ drawEcalFaceLine(g, x1, y1, x2, y2);
+ drawEcalFaceLine(g, x1, -y1, x2, -y2);
+
+ drawEcalFaceLine(g, x_gap_low, y_edge_low, x_gap_low, y_gap_high);
+ drawEcalFaceLine(g, x_gap_high, y_edge_low, x_gap_high, y_gap_high);
+
+ drawEcalFaceLine(g, x_edge_low, y_edge_low, x_edge_low, y_edge_high);
+ drawEcalFaceLine(g, x_edge_high, y_edge_low, x_edge_high, y_edge_high);
+
+
+ drawEcalFaceLine(g, x_gap_low, -y_edge_low, x_gap_low, -y_gap_high);
+ drawEcalFaceLine(g, x_gap_high, -y_edge_low, x_gap_high, -y_gap_high);
+
+ drawEcalFaceLine(g, x_edge_low, -y_edge_low, x_edge_low, -y_edge_high);
+ drawEcalFaceLine(g, x_edge_high, -y_edge_low, x_edge_high, -y_edge_high);
+ }
+ void drawEcalFaceLine(Graphics g, double x1, double y1, double x2, double y2){
+
+ double[] h1 = EcalUtil.toHollysCoordinates(x1, y1, 1.057, 11);
+ double[] h2 = EcalUtil.toHollysCoordinates(x2, y2, 1.057, 11);
+ g.drawLine(getX(Math.tan(h1[1])), getY(Math.tan(h1[0])), getX(Math.tan(h2[1])), getY(Math.tan(h2[0])));
+
+ }
+
+ void drawXAxis(Graphics g){
+ //x axis
+ g.drawString("px/pz", getX(.30)-10, getY(0) - 45);
+ g.drawLine(getX(-.15), getY(0), getX(.30), getY(0));
+ for(int i = -15; i<= 30; i++){
+ if(i%5 == 0 && i != 0){
+ g.drawString(i/100.+"", getX(i/100.)-15, getY(0)-20);
+ g.drawLine(getX(i/100.), getY(0), getX(i/100.), getY(0)-15);
+ }
+ g.drawLine(getX(i/100.), getY(0), getX(i/100.), getY(0)-5);
+ }
+ }
+ void drawYAxis(Graphics g){
+ g.drawString("py/pz", getX(0), getY(.1)-20);
+ g.drawLine(getX(0), getY(-.1), getX(0), getY(.1));
+ for(int i = -10; i<= 10; i++){
+ if(i%5 == 0 && i != 0){
+ g.drawString(i/100.+"", getX(0)+15, getY(i/100.) + 5);
+
+ g.drawLine(getX(0), getY(i/100.), getX(0) + 10, getY(i/100.));
+ }
+ if(i == 0){
+ //g.drawString(i/10.+"", getX(0)+10, getY(i/10.) - 15);
+ }
+ g.drawLine(getX(0), getY(i/100.), getX(0) + 5, getY(i/100.));
+ }
+ }
+ public void paint(Graphics g){
+ super.paint(g);
+ drawBeamspot(g);
+ }
+
+ void drawBeamspot(Graphics g){
+ g.setColor(Color.red);
+ int x = getX(xtilt), y = getY(ytilt);
+ g.drawLine(x+10, y, x-10, y);
+ g.drawLine(x+10, y+1, x-10, y+1);
+ g.drawLine(x+10, y-1, x-10, y-1);
+ g.drawLine(x, y-10, x, y+10);
+ g.drawLine(x+1, y-10, x+1, y+10);
+ g.drawLine(x-1, y-10, x-1, y+10);
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitAllProfiles.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitAllProfiles.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitAllProfiles.java Wed Mar 9 11:43:24 2016
@@ -12,45 +12,45 @@
import java.io.IOException;
public class FitAllProfiles {
- static IAnalysisFactory af = IAnalysisFactory.create();
- static IFitFactory ff = af.createFitFactory();
-
- public static void main(String arg[]) throws IllegalArgumentException, IOException{
-
- ITree tree = af.createTreeFactory().create(arg[0]);
- IPlotter p = af.createPlotterFactory().create();
- p.createRegions(3,2);
- plotAndFit(p, 0, (IHistogram1D)tree.find("pypz"));
- plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz"));
- plotAndFit(p, 2, (IProfile1D)tree.find("pypz vs diff"));
- plotAndFit(p, 3, (IProfile1D)tree.find("pxpz vs diff"));
-
- p.show();
- }
- public static void plotAndFit(IPlotter p, int r, IHistogram1D h){
- p.region(r).plot(h);
- IFitResult fit = ff.createFitter().fit(h, "g");
- IFunction func = fit.fittedFunction();
- System.out.println("\n" + h.title());
- String names[] = func.parameterNames();
- double params[] = func.parameters();
- for(int i = 0; i< names.length; i++){
- System.out.printf("%s: %f\n", names[i], params[i]);
- }
- p.region(r).plot(func);
-
- }
- public static void plotAndFit(IPlotter p, int r, IProfile1D h){
- p.region(r).plot(h);
- IFitResult fit = ff.createFitter().fit(h, "p4");
- IFunction func = fit.fittedFunction();
- System.out.println("\n" + h.title());
- String names[] = func.parameterNames();
- double params[] = func.parameters();
- for(int i = 0; i< names.length; i++){
- System.out.printf("%s: %f\t", names[i], params[i]);
- }
- p.region(r).plot(func);
-
- }
+ static IAnalysisFactory af = IAnalysisFactory.create();
+ static IFitFactory ff = af.createFitFactory();
+
+ public static void main(String arg[]) throws IllegalArgumentException, IOException{
+
+ ITree tree = af.createTreeFactory().create(arg[0]);
+ IPlotter p = af.createPlotterFactory().create();
+ p.createRegions(3,2);
+ plotAndFit(p, 0, (IHistogram1D)tree.find("pypz"));
+ plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz"));
+ plotAndFit(p, 2, (IProfile1D)tree.find("pypz vs diff"));
+ plotAndFit(p, 3, (IProfile1D)tree.find("pxpz vs diff"));
+
+ p.show();
+ }
+ public static void plotAndFit(IPlotter p, int r, IHistogram1D h){
+ p.region(r).plot(h);
+ IFitResult fit = ff.createFitter().fit(h, "g");
+ IFunction func = fit.fittedFunction();
+ System.out.println("\n" + h.title());
+ String names[] = func.parameterNames();
+ double params[] = func.parameters();
+ for(int i = 0; i< names.length; i++){
+ System.out.printf("%s: %f\n", names[i], params[i]);
+ }
+ p.region(r).plot(func);
+
+ }
+ public static void plotAndFit(IPlotter p, int r, IProfile1D h){
+ p.region(r).plot(h);
+ IFitResult fit = ff.createFitter().fit(h, "p4");
+ IFunction func = fit.fittedFunction();
+ System.out.println("\n" + h.title());
+ String names[] = func.parameterNames();
+ double params[] = func.parameters();
+ for(int i = 0; i< names.length; i++){
+ System.out.printf("%s: %f\t", names[i], params[i]);
+ }
+ p.region(r).plot(func);
+
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitMollerPyPzGraphs.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitMollerPyPzGraphs.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/FitMollerPyPzGraphs.java Wed Mar 9 11:43:24 2016
@@ -8,67 +8,67 @@
import hep.aida.*;
public class FitMollerPyPzGraphs {
- static IAnalysisFactory af = IAnalysisFactory.create();
- static IFitFactory ff = af.createFitFactory();
-
- public static void main(String arg[]) throws IllegalArgumentException, IOException{
-
- ITree tree = af.createTreeFactory().create(arg[0]);
- /*IPlotter p = af.createPlotterFactory().create();
- p.createRegions(4,2);
- plotAndFit(p, 0, (IHistogram1D)tree.find("pypz"), "uy all", "uy");
- plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz"), "ux all", "ux");
- plotAndFit(p, 2, (IHistogram1D)tree.find("pypz bot"), "uy (bot)", "uy");
- plotAndFit(p, 3, (IHistogram1D)tree.find("pxpz bot"), "ux (bot)", "ux");
- plotAndFit(p, 4, (IHistogram1D)tree.find("pypz mid"), "uy (mid)", "uy");
- plotAndFit(p, 5, (IHistogram1D)tree.find("pxpz mid"), "ux (mid)", "ux");
- plotAndFit(p, 6, (IHistogram1D)tree.find("pypz top"), "uy (top)", "uy");
- plotAndFit(p, 7, (IHistogram1D)tree.find("pxpz top"), "ux (top)", "ux");
+ static IAnalysisFactory af = IAnalysisFactory.create();
+ static IFitFactory ff = af.createFitFactory();
+
+ public static void main(String arg[]) throws IllegalArgumentException, IOException{
+
+ ITree tree = af.createTreeFactory().create(arg[0]);
+ /*IPlotter p = af.createPlotterFactory().create();
+ p.createRegions(4,2);
+ plotAndFit(p, 0, (IHistogram1D)tree.find("pypz"), "uy all", "uy");
+ plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz"), "ux all", "ux");
+ plotAndFit(p, 2, (IHistogram1D)tree.find("pypz bot"), "uy (bot)", "uy");
+ plotAndFit(p, 3, (IHistogram1D)tree.find("pxpz bot"), "ux (bot)", "ux");
+ plotAndFit(p, 4, (IHistogram1D)tree.find("pypz mid"), "uy (mid)", "uy");
+ plotAndFit(p, 5, (IHistogram1D)tree.find("pxpz mid"), "ux (mid)", "ux");
+ plotAndFit(p, 6, (IHistogram1D)tree.find("pypz top"), "uy (top)", "uy");
+ plotAndFit(p, 7, (IHistogram1D)tree.find("pxpz top"), "ux (top)", "ux");
- StyleUtil.setSize(p, 1000, 500);
- p.show();*/
-
+ StyleUtil.setSize(p, 1000, 500);
+ p.show();*/
+
- IPlotter p;
- p = af.createPlotterFactory().create();
- p.region(0).plot((IHistogram1D) tree.find("diff"));
- StyleUtil.stylize(p.region(0), "pz top - pz bottom (GeV)", "#");
- p.show();
-
- p = af.createPlotterFactory().create();
- p.createRegions(2, 1);
- plotAndFit(p, 0, (IHistogram1D)tree.find("pypz bot"), "bot", "uy");
- plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz bot"), "bot", "ux");
- plotAndFit(p, 0, (IHistogram1D)tree.find("pypz mid"), "mid", "uy");
- plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz mid"), "mid", "ux");
- plotAndFit(p, 0, (IHistogram1D)tree.find("pypz top"), "top", "uy");
- plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz top"), "top", "ux");
- StyleUtil.setSize(p, 1000, 500);
- p.show();
-
- }
- public static void plotAndFit(IPlotter p, int r, IHistogram1D h, String title, String xAxis){
- p.region(r).plot(h);
- h.setTitle(title);
- StyleUtil.noFillHistogramBars(p.region(r));
- IFitResult fit = ff.createFitter().fit(h, "g");
- StyleUtil.stylize(p.region(r), title, xAxis, "#");
- IFunction func = fit.fittedFunction();
- System.out.println("\n" + h.title());
- String names[] = func.parameterNames();
- double params[] = func.parameters();
- for(int i = 0; i< names.length; i++){
- System.out.printf("%s: %f\t", names[i], params[i]);
- }
- //System.out.println(Arrays.toString(fit.);
-
- p.region(r).plot(func);
- StyleUtil.stylize(p.region(r), title, xAxis, "#");
- p.region(r).style().statisticsBoxStyle().setVisible(true);
- p.region(r).style().legendBoxStyle().setVisible(false);
- //System.out.println(Arrays.toString(p.region(r).style().statisticsBoxStyle().availableParameters()));
- //p.show();
- }
-
-
+ IPlotter p;
+ p = af.createPlotterFactory().create();
+ p.region(0).plot((IHistogram1D) tree.find("diff"));
+ StyleUtil.stylize(p.region(0), "pz top - pz bottom (GeV)", "#");
+ p.show();
+
+ p = af.createPlotterFactory().create();
+ p.createRegions(2, 1);
+ plotAndFit(p, 0, (IHistogram1D)tree.find("pypz bot"), "bot", "uy");
+ plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz bot"), "bot", "ux");
+ plotAndFit(p, 0, (IHistogram1D)tree.find("pypz mid"), "mid", "uy");
+ plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz mid"), "mid", "ux");
+ plotAndFit(p, 0, (IHistogram1D)tree.find("pypz top"), "top", "uy");
+ plotAndFit(p, 1, (IHistogram1D)tree.find("pxpz top"), "top", "ux");
+ StyleUtil.setSize(p, 1000, 500);
+ p.show();
+
+ }
+ public static void plotAndFit(IPlotter p, int r, IHistogram1D h, String title, String xAxis){
+ p.region(r).plot(h);
+ h.setTitle(title);
+ StyleUtil.noFillHistogramBars(p.region(r));
+ IFitResult fit = ff.createFitter().fit(h, "g");
+ StyleUtil.stylize(p.region(r), title, xAxis, "#");
+ IFunction func = fit.fittedFunction();
+ System.out.println("\n" + h.title());
+ String names[] = func.parameterNames();
+ double params[] = func.parameters();
+ for(int i = 0; i< names.length; i++){
+ System.out.printf("%s: %f\t", names[i], params[i]);
+ }
+ //System.out.println(Arrays.toString(fit.);
+
+ p.region(r).plot(func);
+ StyleUtil.stylize(p.region(r), title, xAxis, "#");
+ p.region(r).style().statisticsBoxStyle().setVisible(true);
+ p.region(r).style().legendBoxStyle().setVisible(false);
+ //System.out.println(Arrays.toString(p.region(r).style().statisticsBoxStyle().availableParameters()));
+ //p.show();
+ }
+
+
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltAnalysis.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltAnalysis.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltAnalysis.java Wed Mar 9 11:43:24 2016
@@ -16,299 +16,299 @@
import org.lcsim.util.aida.AIDA;
public class MollerBeamtiltAnalysis extends Driver{
- @Override
- public void process(EventHeader event){
- List<Vertex> mollers = event.get(Vertex.class, "TargetConstrainedMollerVertices");
- for(Vertex v : mollers){
- if(!passesCuts(v))
- continue;
- ReconstructedParticle m = v.getAssociatedParticle();
- ReconstructedParticle top;
- ReconstructedParticle bottom;
- if(m.getParticles().get(0).getMomentum().y()>0){
- top = m.getParticles().get(0);
- bottom = m.getParticles().get(1);
- }else{
- top = m.getParticles().get(1);
- bottom = m.getParticles().get(0);
- }
-
- double pypz = m.getMomentum().y()/m.getMomentum().z();
- double pxpz = m.getMomentum().x()/m.getMomentum().z();
- //double pypz = (top.getMomentum().y()+bottom.getMomentum().y())/(top.getMomentum().z()+bottom.getMomentum().z());
- //double pxpz = (top.getMomentum().x()+bottom.getMomentum().x())/(top.getMomentum().z()+bottom.getMomentum().z());
-
- hpypz.fill(pypz);
- hpxpz.fill(pxpz);
-
-
- double diff = top.getMomentum().z()-bottom.getMomentum().z();
- double sum = m.getMomentum().z();//top.getMomentum().z()+bottom.getMomentum().z();
- double mass = m.getMass();
-
- if(diff > -.05 && diff < .05){
- hpypz_mid.fill(pypz);
- hpxpz_mid.fill(pxpz);
- }
-
- if(diff > .2 && diff < .3){
- hpypz_topHighE.fill(pypz);
- hpxpz_topHighE.fill(pxpz);
- }
-
- if(diff > -.3 && diff < -.2){
- hpypz_botHighE.fill(pypz);
- hpxpz_botHighE.fill(pxpz);
- }
-
-
- this.diff.fill(diff);
- this.sum.fill(sum);
- this.mass.fill(mass);
- pypz_vs_diff.fill(diff,pypz );
- pxpz_vs_diff.fill(diff, pxpz );
-
-
-
- pxpz_vs_sum.fill(sum, pxpz );
- pypz_vs_sum.fill(sum, pypz );
-
- pxpz_vs_mass.fill(mass, pxpz );
- pypz_vs_mass.fill(mass, pypz );
- timediff.fill(top.getClusters().get(0).getCalorimeterHits().get(0).getTime()
- -bottom.getClusters().get(0).getCalorimeterHits().get(0).getTime());
- /*if(moreEnergetic.getMomentum().y() > 0)
- {
- pypz_tophighE.fill(pypz);
- pxpz_tophighE.fill(pxpz);
- }
- if(moreEnergetic.getMomentum().y() < 0)
- {
- pypz_bottomhighE.fill(pypz);
- pxpz_bottomhighE.fill(pxpz);
- }*/
- }
- }
-
- double _maxVtxChi2 = 15;
- double _maxTrkChi2 = 30;
- double _maxMass = .037;
- double _minMass = .030;
- double _minPz = 1.0;
- double _maxPz = 1.1;
- boolean passesCuts(Vertex vertex){
- ReconstructedParticle m = vertex.getAssociatedParticle();
- if(!TrackType.isGBL(m.getType()))
- return false;
- if(m.getMomentum().z() > _maxPz || m.getMomentum().z() < _minPz)
- return false;
- if(m.getMass() > _maxMass || m.getMass() < _minMass)
- return false;
-
- if(m.getParticles().get(0).getCharge() != -1
- || m.getParticles().get(1).getCharge() != -1 )
- return false;
-
- if(vertex.getChi2() > _maxVtxChi2)
- return false;
-
-
- if(m.getParticles().get(0).getClusters().size() == 0)
- return false;
- if(m.getParticles().get(1).getClusters().size() == 0)
- return false;
-
- if(m.getParticles().get(0).getTracks().get(0).getChi2() > _maxTrkChi2)
- return false;
- if(m.getParticles().get(1).getTracks().get(0).getChi2() > _maxTrkChi2)
- return false;
- return true;
- }
-
- IHistogram1D hpypz, hpxpz, diff, sum, mass,
- hpypz_topHighE, hpxpz_topHighE,
- hpypz_botHighE, hpxpz_botHighE,
- hpypz_mid, hpxpz_mid;
-
- boolean display = false;
-
-
-
-
- public double getMaxVtxChi2() {
- return _maxVtxChi2;
- }
-
-
- public void setMaxVtxChi2(double _maxVtxChi2) {
- this._maxVtxChi2 = _maxVtxChi2;
- }
-
-
- public double getMaxTrkChi2() {
- return _maxTrkChi2;
- }
-
-
- public void setMaxTrkChi2(double _maxTrkChi2) {
- this._maxTrkChi2 = _maxTrkChi2;
- }
-
-
- public double getMaxMass() {
- return _maxMass;
- }
-
-
- public void setMaxMass(double _maxMass) {
- this._maxMass = _maxMass;
- }
-
-
- public double getMinMass() {
- return _minMass;
- }
-
-
- public void setMinMass(double _minMass) {
- this._minMass = _minMass;
- }
-
-
- public double getMinPz() {
- return _minPz;
- }
-
-
- public void setMinPz(double _minPz) {
- this._minPz = _minPz;
- }
-
-
- public double getMaxPz() {
- return _maxPz;
- }
-
-
- public void setMaxPz(double _maxPz) {
- this._maxPz = _maxPz;
- }
-
-
- public boolean getDisplay() {
- return display;
- }
-
-
- public void setDisplay(boolean display) {
- this.display = display;
- }
-
- IHistogram1D vtx_x, vtx_y, timediff;
-
- IProfile1D pxpz_vs_diff, pypz_vs_diff, pxpz_vs_sum, pypz_vs_sum,
- pxpz_vs_mass, pypz_vs_mass;
-
-
- //IHistogram1D pypz_tophighE, pxpz_tophighE;
- //IHistogram1D pypz_bottomhighE, pxpz_bottomhighE;
- @Override
- public void startOfData(){
- AIDA aida = AIDA.defaultInstance();
- hpypz = aida.histogram1D("pypz", 60, -.005,.005);
- hpxpz = aida.histogram1D("pxpz", 60, .025,.035);
-
-
- hpypz_mid = aida.histogram1D("pypz mid", 60, -.005,.005);
- hpxpz_mid = aida.histogram1D("pxpz mid", 60, .025,.035);
-
- hpypz_topHighE = aida.histogram1D("pypz top", 30, -.005,.005);
- hpxpz_topHighE = aida.histogram1D("pxpz top", 30, .025,.035);
-
- hpypz_botHighE = aida.histogram1D("pypz bot", 30, -.005,.005);
- hpxpz_botHighE = aida.histogram1D("pxpz bot", 30, .025,.035);
-
-
- pxpz_vs_diff = aida.profile1D("pxpz vs diff", 25, -.60, .60);
- pypz_vs_diff = aida.profile1D("pypz vs diff", 25, -.60, .60);
-
- diff = aida.histogram1D("diff", 50, -.60, .60);
-
- sum = aida.histogram1D("sum", 50, 1.0, 1.1);
-
- pxpz_vs_sum = aida.profile1D("pxpz vs sum", 25, 1.0, 1.1);
- pypz_vs_sum = aida.profile1D("pypz vs sum", 25, 1.0, 1.1);
-
- pxpz_vs_mass = aida.profile1D("pxpz vs mass", 25, .03, .037);
- pypz_vs_mass = aida.profile1D("pypz vs mass", 25, .03, .037);
-
- //vtx_x = aida.histogram1D("vtx x", 60, -1, 1);
- //vtx_y = aida.histogram1D("vtx y", 60, -1, 1);
- mass = aida.histogram1D("mass", 60, .030, .037);
- timediff = aida.histogram1D("time diff", 60, -6, 6);
-
-
- /*pypz_tophighE = aida.histogram1D("topHighE pypz", 60, -.005,.005);
- pxpz_tophighE = aida.histogram1D("topHighE pxpz", 60, .025,.035);
- pypz_bottomhighE = aida.histogram1D("bottomHighE pypz", 60, -.005,.005);
- pxpz_bottomhighE = aida.histogram1D("bottomHighE pxpz", 60, .025,.035);*/
- if(display){
- IPlotter p = aida.analysisFactory().createPlotterFactory().create();
- StyleUtil.setSize(p, 1300, 900);
- //p.createRegions(3, 2);
- p.createRegions(4, 3);
-
- p.region(0).plot(hpypz);
- p.region(1).plot(hpxpz);
- p.region(2).plot(timediff);
- p.region(3).plot(pypz_vs_diff);
- p.region(4).plot(pxpz_vs_diff);
- p.region(5).plot(diff);
- p.region(6).plot(pypz_vs_sum);
- p.region(7).plot(pxpz_vs_sum);
- p.region(8).plot(sum);
-
- p.region(9).plot(pypz_vs_mass);
- p.region(10).plot(pxpz_vs_mass);
- p.region(11).plot(mass);
- /*p.region(2).plot(pypz_tophighE);
- p.region(3).plot(pxpz_tophighE);
- p.region(4).plot(pypz_bottomhighE);
- p.region(5).plot(pxpz_bottomhighE);*/
- StyleUtil.stylize(p.region(0),"py/pz", "py/pz", "#");
- StyleUtil.stylize(p.region(1),"px/pz", "px/pz", "#");
- StyleUtil.stylize(p.region(2),"time diff (t-b)", "diff (ns)", "#");
- StyleUtil.stylize(p.region(3),"py/pz vs diff", "diff (GeV)", "py/pz");
- StyleUtil.stylize(p.region(4),"px/pz vs diff", "diff (GeV)", "px/pz");
- StyleUtil.stylize(p.region(5),"diff", "diff (GeV)", "#");
-
- StyleUtil.stylize(p.region(6),"py/pz vs sum", "sum (GeV)", "py/pz");
- StyleUtil.stylize(p.region(7),"px/pz vs sum", "sum (GeV)", "px/pz");
- StyleUtil.stylize(p.region(8),"sum", "sum (GeV)", "#");
-
- StyleUtil.stylize(p.region(9),"py/pz vs mass", "mass (GeV)", "py/pz");
- StyleUtil.stylize(p.region(10),"px/pz vs mass", "mass (GeV)", "px/pz");
- StyleUtil.stylize(p.region(11),"mass", "mass (GeV)", "#");
-
- p.show();
-
- IPlotter p2 = aida.analysisFactory().createPlotterFactory().create();
-
- p2.createRegions(2, 1);
-
-
- p2.region(0).plot(hpypz_botHighE);
- p2.region(1).plot(hpxpz_botHighE);
- p2.region(0).plot(hpypz_mid);
- p2.region(1).plot(hpxpz_mid);
- p2.region(0).plot(hpypz_topHighE);
- p2.region(1).plot(hpxpz_topHighE);
-
- StyleUtil.stylize(p2.region(0),"py/pz", "py/pz", "#");
- StyleUtil.stylize(p2.region(1),"px/pz", "py/pz", "#");
- StyleUtil.noFillHistogramBars(p2.region(0));
- StyleUtil.noFillHistogramBars(p2.region(1));
- p2.show();
- }
- }
+ @Override
+ public void process(EventHeader event){
+ List<Vertex> mollers = event.get(Vertex.class, "TargetConstrainedMollerVertices");
+ for(Vertex v : mollers){
+ if(!passesCuts(v))
+ continue;
+ ReconstructedParticle m = v.getAssociatedParticle();
+ ReconstructedParticle top;
+ ReconstructedParticle bottom;
+ if(m.getParticles().get(0).getMomentum().y()>0){
+ top = m.getParticles().get(0);
+ bottom = m.getParticles().get(1);
+ }else{
+ top = m.getParticles().get(1);
+ bottom = m.getParticles().get(0);
+ }
+
+ double pypz = m.getMomentum().y()/m.getMomentum().z();
+ double pxpz = m.getMomentum().x()/m.getMomentum().z();
+ //double pypz = (top.getMomentum().y()+bottom.getMomentum().y())/(top.getMomentum().z()+bottom.getMomentum().z());
+ //double pxpz = (top.getMomentum().x()+bottom.getMomentum().x())/(top.getMomentum().z()+bottom.getMomentum().z());
+
+ hpypz.fill(pypz);
+ hpxpz.fill(pxpz);
+
+
+ double diff = top.getMomentum().z()-bottom.getMomentum().z();
+ double sum = m.getMomentum().z();//top.getMomentum().z()+bottom.getMomentum().z();
+ double mass = m.getMass();
+
+ if(diff > -.05 && diff < .05){
+ hpypz_mid.fill(pypz);
+ hpxpz_mid.fill(pxpz);
+ }
+
+ if(diff > .2 && diff < .3){
+ hpypz_topHighE.fill(pypz);
+ hpxpz_topHighE.fill(pxpz);
+ }
+
+ if(diff > -.3 && diff < -.2){
+ hpypz_botHighE.fill(pypz);
+ hpxpz_botHighE.fill(pxpz);
+ }
+
+
+ this.diff.fill(diff);
+ this.sum.fill(sum);
+ this.mass.fill(mass);
+ pypz_vs_diff.fill(diff,pypz );
+ pxpz_vs_diff.fill(diff, pxpz );
+
+
+
+ pxpz_vs_sum.fill(sum, pxpz );
+ pypz_vs_sum.fill(sum, pypz );
+
+ pxpz_vs_mass.fill(mass, pxpz );
+ pypz_vs_mass.fill(mass, pypz );
+ timediff.fill(top.getClusters().get(0).getCalorimeterHits().get(0).getTime()
+ -bottom.getClusters().get(0).getCalorimeterHits().get(0).getTime());
+ /*if(moreEnergetic.getMomentum().y() > 0)
+ {
+ pypz_tophighE.fill(pypz);
+ pxpz_tophighE.fill(pxpz);
+ }
+ if(moreEnergetic.getMomentum().y() < 0)
+ {
+ pypz_bottomhighE.fill(pypz);
+ pxpz_bottomhighE.fill(pxpz);
+ }*/
+ }
+ }
+
+ double _maxVtxChi2 = 15;
+ double _maxTrkChi2 = 30;
+ double _maxMass = .037;
+ double _minMass = .030;
+ double _minPz = 1.0;
+ double _maxPz = 1.1;
+ boolean passesCuts(Vertex vertex){
+ ReconstructedParticle m = vertex.getAssociatedParticle();
+ if(!TrackType.isGBL(m.getType()))
+ return false;
+ if(m.getMomentum().z() > _maxPz || m.getMomentum().z() < _minPz)
+ return false;
+ if(m.getMass() > _maxMass || m.getMass() < _minMass)
+ return false;
+
+ if(m.getParticles().get(0).getCharge() != -1
+ || m.getParticles().get(1).getCharge() != -1 )
+ return false;
+
+ if(vertex.getChi2() > _maxVtxChi2)
+ return false;
+
+
+ if(m.getParticles().get(0).getClusters().size() == 0)
+ return false;
+ if(m.getParticles().get(1).getClusters().size() == 0)
+ return false;
+
+ if(m.getParticles().get(0).getTracks().get(0).getChi2() > _maxTrkChi2)
+ return false;
+ if(m.getParticles().get(1).getTracks().get(0).getChi2() > _maxTrkChi2)
+ return false;
+ return true;
+ }
+
+ IHistogram1D hpypz, hpxpz, diff, sum, mass,
+ hpypz_topHighE, hpxpz_topHighE,
+ hpypz_botHighE, hpxpz_botHighE,
+ hpypz_mid, hpxpz_mid;
+
+ boolean display = false;
+
+
+
+
+ public double getMaxVtxChi2() {
+ return _maxVtxChi2;
+ }
+
+
+ public void setMaxVtxChi2(double _maxVtxChi2) {
+ this._maxVtxChi2 = _maxVtxChi2;
+ }
+
+
+ public double getMaxTrkChi2() {
+ return _maxTrkChi2;
+ }
+
+
+ public void setMaxTrkChi2(double _maxTrkChi2) {
+ this._maxTrkChi2 = _maxTrkChi2;
+ }
+
+
+ public double getMaxMass() {
+ return _maxMass;
+ }
+
+
+ public void setMaxMass(double _maxMass) {
+ this._maxMass = _maxMass;
+ }
+
+
+ public double getMinMass() {
+ return _minMass;
+ }
+
+
+ public void setMinMass(double _minMass) {
+ this._minMass = _minMass;
+ }
+
+
+ public double getMinPz() {
+ return _minPz;
+ }
+
+
+ public void setMinPz(double _minPz) {
+ this._minPz = _minPz;
+ }
+
+
+ public double getMaxPz() {
+ return _maxPz;
+ }
+
+
+ public void setMaxPz(double _maxPz) {
+ this._maxPz = _maxPz;
+ }
+
+
+ public boolean getDisplay() {
+ return display;
+ }
+
+
+ public void setDisplay(boolean display) {
+ this.display = display;
+ }
+
+ IHistogram1D vtx_x, vtx_y, timediff;
+
+ IProfile1D pxpz_vs_diff, pypz_vs_diff, pxpz_vs_sum, pypz_vs_sum,
+ pxpz_vs_mass, pypz_vs_mass;
+
+
+ //IHistogram1D pypz_tophighE, pxpz_tophighE;
+ //IHistogram1D pypz_bottomhighE, pxpz_bottomhighE;
+ @Override
+ public void startOfData(){
+ AIDA aida = AIDA.defaultInstance();
+ hpypz = aida.histogram1D("pypz", 60, -.005,.005);
+ hpxpz = aida.histogram1D("pxpz", 60, .025,.035);
+
+
+ hpypz_mid = aida.histogram1D("pypz mid", 60, -.005,.005);
+ hpxpz_mid = aida.histogram1D("pxpz mid", 60, .025,.035);
+
+ hpypz_topHighE = aida.histogram1D("pypz top", 30, -.005,.005);
+ hpxpz_topHighE = aida.histogram1D("pxpz top", 30, .025,.035);
+
+ hpypz_botHighE = aida.histogram1D("pypz bot", 30, -.005,.005);
+ hpxpz_botHighE = aida.histogram1D("pxpz bot", 30, .025,.035);
+
+
+ pxpz_vs_diff = aida.profile1D("pxpz vs diff", 25, -.60, .60);
+ pypz_vs_diff = aida.profile1D("pypz vs diff", 25, -.60, .60);
+
+ diff = aida.histogram1D("diff", 50, -.60, .60);
+
+ sum = aida.histogram1D("sum", 50, 1.0, 1.1);
+
+ pxpz_vs_sum = aida.profile1D("pxpz vs sum", 25, 1.0, 1.1);
+ pypz_vs_sum = aida.profile1D("pypz vs sum", 25, 1.0, 1.1);
+
+ pxpz_vs_mass = aida.profile1D("pxpz vs mass", 25, .03, .037);
+ pypz_vs_mass = aida.profile1D("pypz vs mass", 25, .03, .037);
+
+ //vtx_x = aida.histogram1D("vtx x", 60, -1, 1);
+ //vtx_y = aida.histogram1D("vtx y", 60, -1, 1);
+ mass = aida.histogram1D("mass", 60, .030, .037);
+ timediff = aida.histogram1D("time diff", 60, -6, 6);
+
+
+ /*pypz_tophighE = aida.histogram1D("topHighE pypz", 60, -.005,.005);
+ pxpz_tophighE = aida.histogram1D("topHighE pxpz", 60, .025,.035);
+ pypz_bottomhighE = aida.histogram1D("bottomHighE pypz", 60, -.005,.005);
+ pxpz_bottomhighE = aida.histogram1D("bottomHighE pxpz", 60, .025,.035);*/
+ if(display){
+ IPlotter p = aida.analysisFactory().createPlotterFactory().create();
+ StyleUtil.setSize(p, 1300, 900);
+ //p.createRegions(3, 2);
+ p.createRegions(4, 3);
+
+ p.region(0).plot(hpypz);
+ p.region(1).plot(hpxpz);
+ p.region(2).plot(timediff);
+ p.region(3).plot(pypz_vs_diff);
+ p.region(4).plot(pxpz_vs_diff);
+ p.region(5).plot(diff);
+ p.region(6).plot(pypz_vs_sum);
+ p.region(7).plot(pxpz_vs_sum);
+ p.region(8).plot(sum);
+
+ p.region(9).plot(pypz_vs_mass);
+ p.region(10).plot(pxpz_vs_mass);
+ p.region(11).plot(mass);
+ /*p.region(2).plot(pypz_tophighE);
+ p.region(3).plot(pxpz_tophighE);
+ p.region(4).plot(pypz_bottomhighE);
+ p.region(5).plot(pxpz_bottomhighE);*/
+ StyleUtil.stylize(p.region(0),"py/pz", "py/pz", "#");
+ StyleUtil.stylize(p.region(1),"px/pz", "px/pz", "#");
+ StyleUtil.stylize(p.region(2),"time diff (t-b)", "diff (ns)", "#");
+ StyleUtil.stylize(p.region(3),"py/pz vs diff", "diff (GeV)", "py/pz");
+ StyleUtil.stylize(p.region(4),"px/pz vs diff", "diff (GeV)", "px/pz");
+ StyleUtil.stylize(p.region(5),"diff", "diff (GeV)", "#");
+
+ StyleUtil.stylize(p.region(6),"py/pz vs sum", "sum (GeV)", "py/pz");
+ StyleUtil.stylize(p.region(7),"px/pz vs sum", "sum (GeV)", "px/pz");
+ StyleUtil.stylize(p.region(8),"sum", "sum (GeV)", "#");
+
+ StyleUtil.stylize(p.region(9),"py/pz vs mass", "mass (GeV)", "py/pz");
+ StyleUtil.stylize(p.region(10),"px/pz vs mass", "mass (GeV)", "px/pz");
+ StyleUtil.stylize(p.region(11),"mass", "mass (GeV)", "#");
+
+ p.show();
+
+ IPlotter p2 = aida.analysisFactory().createPlotterFactory().create();
+
+ p2.createRegions(2, 1);
+
+
+ p2.region(0).plot(hpypz_botHighE);
+ p2.region(1).plot(hpxpz_botHighE);
+ p2.region(0).plot(hpypz_mid);
+ p2.region(1).plot(hpxpz_mid);
+ p2.region(0).plot(hpypz_topHighE);
+ p2.region(1).plot(hpxpz_topHighE);
+
+ StyleUtil.stylize(p2.region(0),"py/pz", "py/pz", "#");
+ StyleUtil.stylize(p2.region(1),"px/pz", "py/pz", "#");
+ StyleUtil.noFillHistogramBars(p2.region(0));
+ StyleUtil.noFillHistogramBars(p2.region(1));
+ p2.show();
+ }
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltFitter.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltFitter.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerBeamtiltFitter.java Wed Mar 9 11:43:24 2016
@@ -15,51 +15,51 @@
import org.hps.users.spaul.StyleUtil;
public class MollerBeamtiltFitter {
- static IAnalysisFactory af = IAnalysisFactory.create();
- static IFitFactory ff = af.createFitFactory();
- static IPlotterFactory pf = af.createPlotterFactory();
-
- public static void main(String arg[]) throws IllegalArgumentException, IOException{
-
- ITree tree = af.createTreeFactory().create(arg[0]);
-
+ static IAnalysisFactory af = IAnalysisFactory.create();
+ static IFitFactory ff = af.createFitFactory();
+ static IPlotterFactory pf = af.createPlotterFactory();
+
+ public static void main(String arg[]) throws IllegalArgumentException, IOException{
+
+ ITree tree = af.createTreeFactory().create(arg[0]);
+
- IPlotter p;
-
- p = pf.create();
- p.createRegions(2, 1);
+ IPlotter p;
+
+ p = pf.create();
+ p.createRegions(2, 1);
- plotAndFit(p, 0, (IHistogram1D)tree.find("pxpz"), "ux", "ux");
- plotAndFit(p, 1, (IHistogram1D)tree.find("pypz"), "uy", "uy");
- StyleUtil.setSize(p, 1000, 500);
- p.show();
-
- }
- public static void plotAndFit(IPlotter p, int r, IHistogram1D h, String title, String xAxis){
- p.region(r).plot(h);
- h.setTitle(title);
-
- double xmin = h.mean()-2*h.rms();
- double xmax = h.mean()+2*h.rms();
- String range = String.format("range=\"(%f,%f)\"", xmin, xmax);
- //range = "";
- IFitResult fit = ff.createFitter().fit(h, "g", range);
- IFunction func = fit.fittedFunction();
- System.out.println("\n" + h.title());
- String names[] = func.parameterNames();
- double params[] = func.parameters();
- for(int i = 0; i< names.length; i++){
- System.out.printf("%s: %f\t", names[i], params[i]);
- }
- //System.out.println(Arrays.toString(fit.);
- IPlotterStyle style = p.region(r).style();
- style.dataStyle().outlineStyle().setColor("blue");
- p.region(r).plot(func, style);
- StyleUtil.noFillHistogramBars(p.region(r));
- StyleUtil.stylize(p.region(r), title, xAxis, "#");
- p.region(r).style().statisticsBoxStyle().setVisible(true);
- p.region(r).style().legendBoxStyle().setVisible(false);
- //System.out.println(Arrays.toString(p.region(r).style().statisticsBoxStyle().availableParameters()));
- //p.show();
- }
+ plotAndFit(p, 0, (IHistogram1D)tree.find("pxpz"), "ux", "ux");
+ plotAndFit(p, 1, (IHistogram1D)tree.find("pypz"), "uy", "uy");
+ StyleUtil.setSize(p, 1000, 500);
+ p.show();
+
+ }
+ public static void plotAndFit(IPlotter p, int r, IHistogram1D h, String title, String xAxis){
+ p.region(r).plot(h);
+ h.setTitle(title);
+
+ double xmin = h.mean()-2*h.rms();
+ double xmax = h.mean()+2*h.rms();
+ String range = String.format("range=\"(%f,%f)\"", xmin, xmax);
+ //range = "";
+ IFitResult fit = ff.createFitter().fit(h, "g", range);
+ IFunction func = fit.fittedFunction();
+ System.out.println("\n" + h.title());
+ String names[] = func.parameterNames();
+ double params[] = func.parameters();
+ for(int i = 0; i< names.length; i++){
+ System.out.printf("%s: %f\t", names[i], params[i]);
+ }
+ //System.out.println(Arrays.toString(fit.);
+ IPlotterStyle style = p.region(r).style();
+ style.dataStyle().outlineStyle().setColor("blue");
+ p.region(r).plot(func, style);
+ StyleUtil.noFillHistogramBars(p.region(r));
+ StyleUtil.stylize(p.region(r), title, xAxis, "#");
+ p.region(r).style().statisticsBoxStyle().setVisible(true);
+ p.region(r).style().legendBoxStyle().setVisible(false);
+ //System.out.println(Arrays.toString(p.region(r).style().statisticsBoxStyle().availableParameters()));
+ //p.show();
+ }
}
Modified: java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerStdhepTest.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerStdhepTest.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/moller/MollerStdhepTest.java Wed Mar 9 11:43:24 2016
@@ -8,8 +8,8 @@
public class MollerStdhepTest
{
- public static void main(String arg[]) throws IOException
- {
-
- }
+ public static void main(String arg[]) throws IOException
+ {
+
+ }
}
Modified: java/trunk/util/src/main/java/org/hps/util/ConvertToStdhep.java
=============================================================================
--- java/trunk/util/src/main/java/org/hps/util/ConvertToStdhep.java (original)
+++ java/trunk/util/src/main/java/org/hps/util/ConvertToStdhep.java Wed Mar 9 11:43:24 2016
@@ -502,10 +502,10 @@
}*/
static private double getDecayLength(double gamma){
- Random generator = new Random();
- double a = generator.nextDouble();
- double l = -gamma*_declength*Math.log(1-a);
- return l;
+ Random generator = new Random();
+ double a = generator.nextDouble();
+ double l = -gamma*_declength*Math.log(1-a);
+ return l;
}
/*
@@ -724,7 +724,7 @@
double gamma = ApEnergy / ApMass;
if (expDecay) {
decLen = getDecayLength(gamma);
- // decLen = getDecayLength(maxWght, gamma);
+ // decLen = getDecayLength(maxWght, gamma);
}
if (flatDecay) {
decLen = generator.nextDouble() * maxLen;
Modified: java/trunk/util/src/main/java/org/hps/util/DumpLHEEventsToASCII.java
=============================================================================
--- java/trunk/util/src/main/java/org/hps/util/DumpLHEEventsToASCII.java (original)
+++ java/trunk/util/src/main/java/org/hps/util/DumpLHEEventsToASCII.java Wed Mar 9 11:43:24 2016
@@ -108,7 +108,7 @@
String sigyString = String.valueOf(sigy);
eptString = convertDecimal(eptString);
if (cl.hasOption("t")) {
- trident=true;
+ trident=true;
}
if (cl.hasOption("m")) {
massString = cl.getOptionValue("m");
@@ -475,7 +475,7 @@
throw new RuntimeException("Unexpected entry for number of particles");
}
int nhep = nums.get(0).intValue();
- // System.out.println("Number of particles for event " + nevhep + ": " + nhep);
+ // System.out.println("Number of particles for event " + nevhep + ": " + nhep);
double decLen = 0;
double maxWght = 0;
@@ -503,14 +503,14 @@
if (vals.size() != 13) {
throw new RuntimeException("Unexpected entry for a particle");
}
- idhepTmp = vals.get(0).intValue();
-// System.out.println(idhepTmp);
+ idhepTmp = vals.get(0).intValue();
+// System.out.println(idhepTmp);
if (vals.get(1).intValue() == 9) {//apparently, vertices aren't counted in nhep
- nhep++;
- }
+ nhep++;
+ }
if (vals.get(1).intValue() == 1) {//ignore initial & intermediate state particles
- // System.out.println("Ok...good"+idhepTmp);
+ // System.out.println("Ok...good"+idhepTmp);
@@ -523,8 +523,8 @@
phepRec[j] = vals.get(j + 6);
if (idhepTmp == -623){
phepNuc[j] = vals.get(j + 6);
- // System.out.println("Found the recoil nucleus");
- }
+ // System.out.println("Found the recoil nucleus");
+ }
}
|