Author: [log in to unmask] Date: Fri Jan 22 18:35:38 2016 New Revision: 4130 Log: (empty) Added: java/trunk/users/src/main/java/org/hps/users/byale/MollerAnalysis.java Added: java/trunk/users/src/main/java/org/hps/users/byale/MollerAnalysis.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/byale/MollerAnalysis.java (added) +++ java/trunk/users/src/main/java/org/hps/users/byale/MollerAnalysis.java Fri Jan 22 18:35:38 2016 @@ -0,0 +1,132 @@ +package org.hps.users.byale; + +import hep.aida.IAnalysisFactory; +import hep.aida.IHistogram1D; +import hep.aida.IHistogram2D; +import hep.aida.IPlotter; +import hep.aida.IPlotterFactory; +import java.util.List; +import org.lcsim.event.EventHeader; +import org.lcsim.event.MCParticle; +import org.lcsim.event.ReconstructedParticle; +import org.lcsim.event.base.BaseMCParticle; +import org.lcsim.geometry.Detector; +import org.lcsim.util.Driver; +import org.lcsim.util.aida.AIDA; + +/** + * + * @author byale (modified from Matt's MCParticleAnalysisDriver) + */ +public class MollerAnalysis extends Driver { + + private AIDA aida = AIDA.defaultInstance(); + private String collectionName = "MCParticle"; + IPlotter plotterMC; + IHistogram1D px; + IHistogram1D py; + IHistogram1D pz; + IHistogram1D pTot; + IHistogram2D EposEele; + IHistogram1D ePos; + IHistogram1D eEle1; + IHistogram1D eEle2; + IHistogram1D EepSum; + IHistogram1D EepSumEndpoint; + IHistogram1D EeepSum; + IHistogram1D EepDiff; + + IHistogram2D ECalPosition; + + @Override + protected void detectorChanged(Detector detector) { + System.out.println("MCParicleAnalysis::detectorChanged Setting up the plotter"); + IAnalysisFactory fac = aida.analysisFactory(); + IPlotterFactory pfac = fac.createPlotterFactory("MC Particles"); + + aida.tree().cd("/"); +// resetOccupancyMap(); // this is for calculatin + plotterMC = pfac.create("MC Particle Momentum"); + plotterMC.createRegions(2, 2); + px = aida.histogram1D("px (GeV)", 50, -0.05, 0.14); + py = aida.histogram1D("py (GeV)", 50, -0.1, 0.1); + pz = aida.histogram1D("pz (GeV)", 50, -0.25, 2.5); + pTot = aida.histogram1D("angle X", 50, -0.01, 0.04); + plotterMC.region(0).plot(px); + plotterMC.region(1).plot(py); + plotterMC.region(2).plot(pz); + plotterMC.region(3).plot(pTot); + plotterMC.show(); + + EposEele = aida.histogram2D("Epos vs Eele", 50, 0, 2.0, 50, 0, 2.0); + + ECalPosition = aida.histogram2D("ECalPosition", 50, -22, 22, 50, -5.5, 5.5); + + ePos = aida.histogram1D("Epos", 50, 0, 2.0); + eEle1 = aida.histogram1D("Eele1", 50, 0, 2.0); + eEle2 = aida.histogram1D("Eele2", 50, 0, 2.0); + EepSumEndpoint = aida.histogram1D("Pair energy: Endpoint", 50, 1.5, 2.0); + EepSum = aida.histogram1D("Pair energy", 50, 0, 2.0); + EeepSum = aida.histogram1D("Trident energy", 50, 0, 2.0); + + // pairs1 + EepDiff = aida.histogram1D("Energy Diff", 50, 0, 2.0); + + + } + + @Override + public void process(EventHeader event) { + /* make sure everything is there */ + if (!event.hasCollection(MCParticle.class, collectionName)) + return; + + List<MCParticle> mcpList = event.get(MCParticle.class, collectionName); + + MCParticle pos = null; + MCParticle ele1 = null; + MCParticle ele2 = null; + + for (MCParticle mcp : mcpList) { + if (mcp.getCharge() < 0 && mcp.getMomentum().magnitude() > 0.025) { + px.fill(mcp.getPX()); + py.fill(mcp.getPY()); + pz.fill(mcp.getPZ()); + pTot.fill(mcp.getPX() / mcp.getMomentum().magnitude()); + + ECalPosition.fill(mcp.getEndPoint().x(),mcp.getEndPoint().y()); + + } + + if (!mcp.getParents().isEmpty()) + if (mcp.getParents().get(0).getPDGID() == 622) + if (mcp.getCharge() > 0) + pos = mcp; + else if (ele1 == null) + ele1 = mcp; + else + ele2 = mcp; + } + if (ele1 != null && ele2 != null && pos != null) { + EposEele.fill(ele1.getEnergy(), pos.getEnergy()); + EposEele.fill(ele2.getEnergy(), pos.getEnergy()); + //EposEele.fill(Math.max(ele2.getEnergy(),ele1.getEnergy()), pos.getEnergy()); + + eEle1.fill(ele1.getEnergy()); + eEle2.fill(ele2.getEnergy()); + ePos.fill(pos.getEnergy()); + + EepSum.fill(ele1.getEnergy() + pos.getEnergy()); + EepSum.fill(ele2.getEnergy() + pos.getEnergy()); + EeepSum.fill(ele1.getEnergy() + pos.getEnergy() + ele2.getEnergy()); + + EepSumEndpoint.fill(ele1.getEnergy() + pos.getEnergy()); + EepSumEndpoint.fill(ele2.getEnergy() + pos.getEnergy()); + + EepDiff.fill(ele1.getEnergy() - pos.getEnergy()); + EepDiff.fill(ele2.getEnergy() - pos.getEnergy()); + + } + + } +}