LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  November 2015

HPS-SVN November 2015

Subject:

r3965 - in /java/trunk/users/src/main/java/org/hps/users/spaul: ./ feecc/ feecc/analysis/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Tue, 17 Nov 2015 19:36:57 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1185 lines)

Author: [log in to unmask]
Date: Tue Nov 17 11:36:53 2015
New Revision: 3965

Log:
added some of Sebouh's private files and made them public.

Added:
    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/
    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/MakeHistograms.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/analysis/
    java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/CountsPerBinVsCharge.java
    java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/ExtractCrossSections.java
    java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/PlotPhiDependence.java

Added: java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/StyleUtil.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,56 @@
+package org.hps.users.spaul;
+
+import java.util.Arrays;
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IFunction;
+import hep.aida.IPlotterRegion;
+
+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().setParameter("backgroundColor", "white");
+		r.style().statisticsBoxStyle().boxStyle().backgroundStyle().setColor("White");
+		r.style().statisticsBoxStyle().boxStyle().backgroundStyle().setParameter("color", "white");
+		r.style().statisticsBoxStyle().boxStyle().backgroundStyle().setOpacity(100);
+		System.out.println(Arrays.toString(r.style().dataStyle().availableParameters()));
+		r.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+		r.style().dataStyle().fillStyle().setParameter("showZeroHeightBins", "false");
+		//r.style().dataStyle().setParameter("showDataInStatisticsBox", "false");
+		r.style().setParameter("hist2DStyle", "colorMap");
+		//r.style().dataBoxStyle()
+	}
+	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);
+	}
+}

Added: java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/SumEverything.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,89 @@
+package org.hps.users.spaul;
+
+import java.io.File;
+import java.io.IOException;
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
+import hep.aida.IHistogramFactory;
+import hep.aida.ITree;
+import hep.aida.ITreeFactory;
+
+//sums up everything in a folder full of files containing histograms.  Pretty convenient.
+// or if one arg is given, assume that that one arg is a folder full of folders
+// 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 > 1){
+			twoArg(arg[0], arg[1]);
+		}
+		else{
+			oneArg(arg[0]);
+		}
+	}
+	static void oneArg(String indir) throws IllegalArgumentException, IOException{
+		File outdir = new File(indir + "/sums");
+		outdir.mkdir();
+		for(File subdirf : new File(indir).listFiles()){
+			String subdir = subdirf.getAbsolutePath();
+			if(subdir.matches(".*/sums/?"))
+				continue;
+			String split[] = subdir.split("/");
+			String outfile = indir + "/sums/" + split[split.length-1] + ".aida";
+			twoArg(subdir, outfile);
+		}
+		new File(indir + "/sums/total.aida").delete();
+		twoArg(outdir.getAbsolutePath(), indir + "/sums/total.aida");
+		
+	}
+
+	static void twoArg(String indir, String out) throws IllegalArgumentException, IOException{
+		IAnalysisFactory af = IAnalysisFactory.create();
+		ITreeFactory tf = af.createTreeFactory();
+		new File(out).delete();
+		ITree tree0 = tf.create(out, "xml", false, true);
+		IHistogramFactory hf = af.createHistogramFactory(tree0);
+		
+
+		int j = 0;
+		for(File s : new File(indir).listFiles()){
+			ITree tree = af.createTreeFactory().create(s.getAbsolutePath(),"xml");
+
+			
+			if(j == 0){
+				String [] names = tree.listObjectNames();
+				tree0.mount("/tmp", tree, "/");
+				for(String name : names){
+					Object o = tree.find(name);
+					if(o instanceof IHistogram1D || o instanceof IHistogram2D)
+						tree0.cp("/tmp/" + name, name);
+				}
+				tree0.unmount("/tmp");
+				tree.close();
+				
+			}
+			else{
+				//tree.
+				String [] names = tree.listObjectNames();
+				tree0.mount("/tmp", tree, "/");
+				for(String name : names){
+					Object o = tree.find(name);
+					if(o instanceof IHistogram1D)
+						((IHistogram1D)tree0.find(name)).add((IHistogram1D)o);
+					if(o instanceof IHistogram2D)
+						((IHistogram2D)tree0.find(name)).add((IHistogram2D)o);
+				}
+				tree0.unmount("/tmp");
+				tree.close();
+			}
+
+			tree.close();
+			j++;
+			System.out.println(j + " files have been read");
+		}
+		tree0.commit();
+	}
+}
+

Added: 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	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/BinGenerator.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,80 @@
+package org.hps.users.spaul.feecc;
+
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+public class BinGenerator {
+	public static void main(String arg[]) throws FileNotFoundException{
+		int nBins = 20;
+
+		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 = .145;
+		double thetaMin = .035;
+
+		double[] bins = new double[nBins +1];
+		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){
+			boolean inRange = EcalUtil.fid_ECal_spherical(thetaMin, phi) && EcalUtil.fid_ECal_spherical(thetaMax, phi)
+								&& EcalUtil.fid_ECal_spherical(thetaMin, -phi) && EcalUtil.fid_ECal_spherical(thetaMax, -phi);
+			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]};
+		
+		
+	}
+
+}

Added: 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	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/CustomBinning.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,96 @@
+package org.hps.users.spaul.feecc;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Scanner;
+
+public class CustomBinning {
+	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;
+
+	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;
+	}
+	/**
+	 * @param bin
+	 * @param a = 2E/M
+	 * @return the integral of 1/sin^4(th/2)*cos^2(th/2)/(1+a*sin^2(th/2)) times dPhi,
+	 * which appears in the integral of mott scattering.
+	 */
+	public double mottIntegralFactor(double a, int bin){
+		double dPhi = 0;
+		for(int i = 0; i< phiMax[bin].length; i++)
+			dPhi += 2*(phiMax[bin][0] - phiMin[bin][0]); //factor of 2 from top and bottom
+		
+		double csc2 = Math.pow(Math.sin(thetaMax[bin]/2), -2);
+		double Imax = (-csc2+(1+a)*Math.log(a+2*csc2));
+		       csc2 = Math.pow(Math.sin(thetaMin[bin]/2), -2);
+		double Imin = (-csc2+(1+a)*Math.log(a+2*csc2));
+		return 2*dPhi*(Imax-Imin);
+	}
+}

Added: 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	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/DisplayHistograms.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,9 @@
+package org.hps.users.spaul.feecc;
+
+import java.io.IOException;
+
+public class DisplayHistograms {
+	public static void main(String arg[]) throws IllegalArgumentException, IOException{
+		MakeHistograms.main(new String[]{arg[0]});
+	}
+}

Added: 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	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/EcalUtil.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,164 @@
+package org.hps.users.spaul.feecc;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+
+
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
+
+public class EcalUtil {
+	/**
+	 * 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;
+	}
+	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 = new HashMap();
+	static void readMap() throws FileNotFoundException{
+		Scanner s = new Scanner(new File("ecal_positions.txt"));
+
+		
+		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 void main(String arg[]){
+		double x = 0, y = 0;
+		double sp[] = getThetaPhiSpherical(x,y); 
+		System.out.println(Arrays.toString(getXY(sp[0], sp[1])));
+	}
+}
+	
+

Added: 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	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/MakeHistograms.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,260 @@
+package org.hps.users.spaul.feecc;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+
+import org.hps.conditions.ConditionsDriver;
+import org.hps.record.triggerbank.AbstractIntData;
+import org.hps.record.triggerbank.TIData;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.lcio.LCIOReader;
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
+import hep.aida.IHistogramFactory;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterFactory;
+import hep.aida.ITree;
+import hep.aida.ITreeFactory;
+import hep.physics.vec.Hep3Vector;
+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.length == 5)
+				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();
+			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;
+	static IHistogram1D h5, h6;
+	
+	private static void extractHistograms(ITree tree0) {
+		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");
+		h4 = (IHistogram2D) tree0.find("px\\/pz vs py\\/pz");
+		h4a = (IHistogram2D) tree0.find("px\\/pz vs py\\/pz cut");
+		h5 = (IHistogram1D) tree0.find("energy");
+		
+	}
+	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;
+		}
+		
+		//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);
+
+		h4 = hf.createHistogram2D("px\\/pz vs py\\/pz", 160, -.16, .24, 160, -.2, .2);
+		h4a = hf.createHistogram2D("px\\/pz vs py\\/pz cut", 160, -.16, .24, 160, -.2, .2);
+		
+		h5 = hf.createHistogram1D("energy", 75, 0, 1.5);
+	}
+	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(h2a);
+		StyleUtil.stylize(p.region(1), "theta", "phi");
+		p.region(2).plot(h3);
+		StyleUtil.stylize(p.region(2), "theta", "# of particles");
+		p.region(3).plot(h5);
+		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);
+		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();
+	}
+	private static void processEvent(EventHeader event) {
+		if(event.getEventNumber() %1000 == 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");
+
+		for(ReconstructedParticle p : particles){
+
+			boolean isGood = addParticle(p);
+
+
+		}
+	}
+
+	static double eMin = .8;
+	static double eMax = 1.2;
+	static double beamEnergy = 1.057;
+
+	static double beamTilt = .03057;
+	static double maxChi2 = 50;
+	static boolean addParticle(ReconstructedParticle part){
+		
+		if(part.getTracks().size() == 0)
+			return false;
+		if(part.getTracks().get(0).getChi2()>maxChi2){
+			return false;
+		}
+		if(part.getClusters().size() == 0)
+			return false;
+		Cluster c = part.getClusters().get(0);
+		double time = c.getCalorimeterHits().get(0).getTime();
+		if(EcalUtil.fid_ECal(c)){
+			if(c.getCalorimeterHits().size() < 3)
+				return false;
+			if(time>40 && time <48)
+				h5.fill(c.getEnergy());
+			if(c.getEnergy() > eMin && c.getEnergy() < eMax && (time >40 && time < 48)) {
+
+				Hep3Vector p = part.getMomentum();
+				
+				double px = p.x(), pz = p.z();
+				double pxtilt = px*Math.cos(beamTilt)-pz*Math.sin(beamTilt);
+				double py = p.y();
+				double pztilt = pz*Math.cos(beamTilt)+px*Math.sin(beamTilt);
+
+				double theta = Math.atan(Math.hypot(pxtilt, py)/pztilt);
+				double phi =Math.atan2(py, pxtilt);
+
+				h2.fill(theta, phi);
+				h2c.fill(theta, phi);
+				
+				h4.fill(px/pz, py/pz);
+				
+				if(cb.inRange(theta, phi)){
+					h2a.fill(theta, phi);
+					h2b.fill(theta, phi);
+					h3.fill(theta);
+					h4a.fill(px/pz, py/pz);
+				}
+
+
+				return true;
+			}
+
+		}
+		return false;
+	}
+
+}

Added: 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	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/ShowCustomBinning.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,218 @@
+package org.hps.users.spaul.feecc;
+
+import java.awt.Canvas;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import javax.swing.JFrame;
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.ICloud2D;
+import hep.aida.IHistogramFactory;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterFactory;
+import hep.aida.IPlotterRegion;
+import hep.aida.IPlotterStyle;
+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);
+		frame.add(new ShowCustomBinning(new File(arg[0])));
+		frame.setSize(800, 800);
+		frame.setVisible(true);
+		
+	}
+	public void paint(Graphics g){
+		drawEcalOutline(g);
+		drawFidEcalOutline(g);
+		drawCustomBinRectangles(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){
+		g.setColor(Color.BLACK);
+		double x_edge_low = -276.50;
+		double x_edge_high = 361.55;
+		double y_edge_low = 20.17;
+		double y_edge_high = 89;
+
+		double x_gap_low = -93.30;
+		double x_gap_high = 28.93;
+		double y_gap_high = 33.12;
+		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);
+	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.drawRect(x, y, w, h);
+				 x =getX(theta1)+1; y = getY(-phi2); w =  getX(theta2)-getX(theta1); h = getY(-phi1)-getY(-phi2);
+
+				g.drawRect(x, y, w, h);
+				
+				
+			}
+		}
+	}
+	
+	
+	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);
+	}
+	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");
+	} 
+}

Added: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/CountsPerBinVsCharge.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/CountsPerBinVsCharge.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/CountsPerBinVsCharge.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,42 @@
+package org.hps.users.spaul.feecc.analysis;
+
+import hep.aida.*;
+import org.hps.users.spaul.feecc.CustomBinning;
+
+import java.io.File;
+import java.io.IOException;
+
+//arg[0] should point to the sums directory,
+// with files that are named runnum.aida and one file total.aida
+//arg[1] is the binning scheme file.  
+//arg[2] is an overall normalization scale (2E/Zalpha)*sqrt(cc/counts)
+//arg[3] is recoil parameter (2E/M)
+public class CountsPerBinVsCharge {
+	public static void main(String arg[]) throws IllegalArgumentException, IOException{
+		IAnalysisFactory af = IAnalysisFactory.create();
+		ITreeFactory tf = af.createTreeFactory();
+		CustomBinning cb = new CustomBinning(new File(arg[1]));
+		double scale = Double.parseDouble(arg[2]);
+		double recoil = Double.parseDouble(arg[3]);
+		
+		ITree tree0 = tf.create(arg[0], "xml");
+		IHistogram1D hist = (IHistogram1D) tree0.find("theta");
+
+		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 mottInt = cb.mottIntegralFactor(recoil, i);
+			double F = scale*Math.sqrt(n/mottInt);
+			double dF = scale/(2*Math.sqrt(mottInt));
+				System.out.println(i + "\t" + thmin+ "\t" + thmax + "\t" + F + "\t" + dF);
+		}
+
+	}
+
+	private static double getBeamCharge(int runNumber) {
+		//placeholder until we have the beam charges reliably in the database.
+		return 1;  
+	}
+}

Added: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/ExtractCrossSections.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/ExtractCrossSections.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/ExtractCrossSections.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,43 @@
+package org.hps.users.spaul.feecc.analysis;
+
+import hep.aida.*;
+
+import java.io.File;
+import java.io.IOException;
+
+//arg[0] should point to the sums directory,
+// with files that are named runnum.aida and one file total.aida
+public class ExtractCrossSections {
+	public static void main(String arg[]) throws IllegalArgumentException, IOException{
+		IAnalysisFactory af = IAnalysisFactory.create();
+		 ITreeFactory tf = af.createTreeFactory();
+		
+		boolean isFirst = true;
+		int nBins =0;
+		for(File f : new File(arg[0]).listFiles()){
+			String[] split = f.getAbsolutePath().split("[\\./]");
+			String a = split[split.length-2];
+			if(a.equals("total"))
+				continue;
+			int runNumber = Integer.parseInt(a);
+
+			 ITree tree0 = tf.create(f.getAbsolutePath(), "xml");
+			IHistogram1D theta = (IHistogram1D) tree0.find("theta");
+			
+			if(isFirst){
+				nBins = theta.axis().bins();
+				isFirst = false;
+			}
+			double beamCharge = getBeamCharge(runNumber);
+			System.out.println(runNumber + "\t");
+			for(int i = 0; i< nBins; i++)
+				System.out.print(theta.binHeight(i)/beamCharge + "\t");
+			System.out.println();
+		}
+	}
+
+	private static double getBeamCharge(int runNumber) {
+		//placeholder until we have the beam charges reliably in the database.
+		return 1;  
+	}
+}

Added: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/PlotPhiDependence.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/PlotPhiDependence.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/analysis/PlotPhiDependence.java	Tue Nov 17 11:36:53 2015
@@ -0,0 +1,40 @@
+package org.hps.users.spaul.feecc.analysis;
+
+import hep.aida.*;
+
+import org.hps.users.spaul.feecc.CustomBinning;
+import org.hps.users.spaul.StyleUtil;
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+
+//arg[0] should point to the sums directory,
+// with files that are named runnum.aida and one file total.aida
+public class PlotPhiDependence {
+	public static void main(String arg[]) throws IllegalArgumentException, IOException{
+		IAnalysisFactory af = IAnalysisFactory.create();
+		ITreeFactory tf = af.createTreeFactory();
+		IHistogramFactory hf = af.createHistogramFactory(tf.create());
+
+		ITree tree0 = tf.create(arg[0], "xml");
+		IHistogram2D hist = (IHistogram2D) tree0.find("theta vs phi alt");
+
+		int nBinsTheta = hist.xAxis().bins();
+
+		for(int i = 0; i< nBinsTheta; i++){
+			IPlotter p = af.createPlotterFactory().create();
+			IHistogram1D proj = hf.sliceY("bin " + i, hist, i);
+			p.region(0).plot(proj);
+			StyleUtil.stylize(p.region(0),"Phi Dependence", "phi", "# of hits");
+			System.out.println(Arrays.toString(p.region(0).style().dataStyle().markerStyle().availableParameters()));
+			p.region(0).style().dataStyle().setParameter("showHistogramBars", "false");
+			
+			p.show();
+		}
+		
+	}
+
+
+
+
+}

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use