From bf00c2c80a3fb75dd5c5c832ffb2c7f89e186e0e Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Mon, 16 Oct 2023 11:42:08 +0200 Subject: [PATCH 01/60] added beam offset analysis --- .../java/org/clas/dc/alignment/Alignment.java | 8 ++ .../java/org/clas/dc/alignment/Constants.java | 11 ++- .../java/org/clas/dc/alignment/Histo.java | 93 ++++++++++++++++++- 3 files changed, 109 insertions(+), 3 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 4dbfcf2..a6ccb1c 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -350,6 +350,9 @@ private double getShiftSizeError(String key, int sector) { } public EmbeddedCanvasTabbed analyzeFits() { + // check beam offset + this.getBeamOffset(); + EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("nominal"); LOGGER.info("\nPlotting nominal geometry residuals"); canvas.getCanvas("nominal").draw(this.getResidualGraphs(null)); @@ -520,6 +523,11 @@ private Parameter[] fit(int sector) { return fittedPars; } + private void getBeamOffset() { + double[][] offset = this.histos.get("nominal").getBeamOffset(); + LOGGER.info(String.format("\nBeam offset from scattering-chamber exit window analysis: x=(%.3f \u00B1 %.3f), y=(%.3f \u00B1 %.3f)", + offset[0][0], offset[0][1], offset[1][0], offset[1][1])); + } private DataGroup getResidualGraphs(Table alignment) { double[] layers = new double[Constants.NLAYER+Constants.NTARGET]; diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java index d6bae64..70dc0d9 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java @@ -91,13 +91,22 @@ public class Constants { public static double TARGETLENGTH = DEFAULT[1]; public static double WINDOWDIST = DEFAULT[2]; public static double SCEXIT = DEFAULT[3]; + public static double TARGETCENTER = DEFAULT[0]-DEFAULT[1]/2; + public static double PEAKWIDTH = 2; public static double SCALE = 1000; + // moller cone entrance + public static double MOLLERZ = 45.389; + public static double MOLLERR = 3.2; + public static void initTargetPars(double[] pars) { if(pars.length>0 && pars.length<=DEFAULT.length) { TARGETPOS = pars[0]; - if(pars.length>1) + TARGETCENTER = pars[0]; + if(pars.length>1) { TARGETLENGTH = pars[1]; + TARGETCENTER = pars[0]-pars[1]/2; + } if(pars.length>2) WINDOWDIST = pars[2]; if(pars.length>3) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index fea09ad..c3cee33 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.logging.Logger; import org.jlab.clas.physics.Particle; +import org.jlab.groot.data.GraphErrors; import org.jlab.groot.data.H1F; import org.jlab.groot.data.H2F; import org.jlab.groot.data.IDataSet; @@ -31,12 +32,14 @@ public class Histo { private DataGroup electron = null; private DataGroup binning = null; + private DataGroup offset = null; private DataGroup[][][] residuals = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][][] time = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][] vertex = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains sectors private double[][][][] parValues = null; private double[][][][] parErrors = null; + private double[][] beamOffset= {{0, 0}, {0, 0}}; private Bin[] thetaBins = null; private Bin[] phiBins = null; @@ -184,8 +187,19 @@ private void createHistos(String optStats) { H2F hi_vtxtheta = new H2F("hi_S" + sector, "Sector " + sector, nbinsVtx, minVtx, maxVtx, 100, 0., 35); hi_vtxtheta.setTitleX("Vertex (cm)"); hi_vtxtheta.setTitleY("#theta (deg)"); + F1D ftheta = new F1D("ftheta","57.29*atan([r]/([z0]-x))",minVtx, maxVtx); + ftheta.setParameter(0, Constants.MOLLERR); + ftheta.setParameter(1, Constants.MOLLERZ); + ftheta.setLineColor(2); + ftheta.setLineWidth(2); this.binning.addDataSet(hi_vtxtheta, is); + this.binning.addDataSet(ftheta, is); } + this.offset = new DataGroup(1,2); + H2F hi_thetasc = new H2F("hi_thetasc", "", 36, -180, 180, 100, 0, 20.); + hi_thetasc.setTitleX("#phi(deg)"); + hi_thetasc.setTitleY("#theta(deg)"); + this.offset.addDataSet(hi_thetasc, 0); } private class Hit { @@ -259,6 +273,7 @@ private int getElectronIndex(Event event) { for(int i=0; i1) { + GraphErrors grradius = this.fitOffset(grthetasc, Constants.MOLLERZ-(Constants.SCEXIT+Constants.TARGETCENTER)); + this.beamOffset[0][0] = grradius.getFunction().getParameter(1)*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2))); + this.beamOffset[1][0] = grradius.getFunction().getParameter(1)*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2))); + this.beamOffset[0][1] = Math.sqrt(Math.pow(grradius.getFunction().parameter(1).error()*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2))),2)+ + Math.pow(grradius.getFunction().getParameter(1)*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2)))*Math.toRadians(grradius.getFunction().parameter(2).error()),2)); + this.beamOffset[1][1] = Math.sqrt(Math.pow(grradius.getFunction().parameter(1).error()*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2))),2)+ + Math.pow(grradius.getFunction().getParameter(1)*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2)))*Math.toRadians(grradius.getFunction().parameter(2).error()),2)); + offset.addDataSet(grthetasc, 0); + offset.addDataSet(grradius, 1); + } + } + + public double[][] getBeamOffset() { + return this.beamOffset; } public double[] getParValues(int sector, int itheta, int iphi) { @@ -498,13 +533,16 @@ public double[] getParErrors(int sector, int itheta, int iphi) { } public EmbeddedCanvasTabbed getElectronPlots() { - EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("electron", "binning"); + EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("electron", "binning", "offset"); canvas.getCanvas("electron").draw(electron); canvas.getCanvas("electron").getPad(3).getAxisY().setLog(true); canvas.getCanvas("electron").getPad(5).getAxisZ().setLog(true); canvas.getCanvas("binning").draw(binning); for(EmbeddedPad pad : canvas.getCanvas("binning").getCanvasPads()) pad.getAxisZ().setLog(true); + canvas.getCanvas("offset").draw(offset); + for(EmbeddedPad pad : canvas.getCanvas("offset").getCanvasPads()) + pad.getAxisZ().setLog(true); return canvas; } @@ -1081,6 +1119,27 @@ public static void fitVertex(H1F histo) { } } + private GraphErrors fitOffset(GraphErrors grTheta, double deltaZ) { + GraphErrors grOffset = new GraphErrors("R2"); + grOffset.setTitleX("#phi(deg)"); + grOffset.setTitleY("r(cm)"); + for(int i=0; i hslices = hi.getSlicesX(); + for(int ix=0; ix10) { + graph.addPoint(hi.getDataX(ix), Histo.getThresholdCrossing(hix, fraction), 0, (hix.getDataX(1)-hix.getDataX(0))/2); + } + } + return graph; + } + + private static double getThresholdCrossing(H1F hi, double fraction) { + if(fraction<0 || fraction>=1) { + System.out.println("[ERROR] Invalid constant fraction threshold " + fraction + " for histogram " + hi.getName()); + System.exit(1); + } + double hiMax = hi.getMax(); + int iHalf = -1; + for(int i=0; ihiMax*fraction) { + iHalf = i; + break; + } + } + return hi.getDataX(iHalf); + } + private static double getRMSIDataSet(IDataSet data, double min, double max) { int nsamples = 0; double mean = getMeanIDataSet(data, min, max); From 76685439b0ca0d2364ff0228a076b37a5b71af71 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Mon, 16 Oct 2023 15:34:38 +0200 Subject: [PATCH 02/60] used moment at R1 --- .../java/org/clas/dc/alignment/Constants.java | 2 +- .../java/org/clas/dc/alignment/Histo.java | 33 ++++++++++++++----- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java index 70dc0d9..ea21834 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java @@ -92,7 +92,7 @@ public class Constants { public static double WINDOWDIST = DEFAULT[2]; public static double SCEXIT = DEFAULT[3]; public static double TARGETCENTER = DEFAULT[0]-DEFAULT[1]/2; - public static double PEAKWIDTH = 2; + public static double PEAKWIDTH = TARGETPOS+WINDOWDIST+(SCEXIT-TARGETLENGTH/2)/2; public static double SCALE = 1000; // moller cone entrance diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index c3cee33..96a748b 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -4,6 +4,9 @@ import java.util.List; import java.util.logging.Logger; import org.jlab.clas.physics.Particle; +import org.jlab.geom.prim.Line3D; +import org.jlab.geom.prim.Point3D; +import org.jlab.geom.prim.Vector3D; import org.jlab.groot.data.GraphErrors; import org.jlab.groot.data.H1F; import org.jlab.groot.data.H2F; @@ -196,7 +199,7 @@ private void createHistos(String optStats) { this.binning.addDataSet(ftheta, is); } this.offset = new DataGroup(1,2); - H2F hi_thetasc = new H2F("hi_thetasc", "", 36, -180, 180, 100, 0, 20.); + H2F hi_thetasc = new H2F("hi_thetasc", "", 36, -180, 180, 40, 0, 20.); hi_thetasc.setTitleX("#phi(deg)"); hi_thetasc.setTitleY("#theta(deg)"); this.offset.addDataSet(hi_thetasc, 0); @@ -244,6 +247,12 @@ public int id() { public int sector() { return sector; } + + public double phiSector() { + Vector3D dir = new Vector3D(this.px(), this.py(), this.pz()); + dir.rotateZ(-Math.PI/3*(sector-1)); + return dir.phi(); + } } private int getElectronIndex(Event event) { @@ -312,15 +321,23 @@ private Electron getElectron(Event event) { if(trackBank!=null) event.read(trackBank); if(trackBank!=null && trackBank.getRows()>0) { + Line3D track = new Line3D(new Point3D(trackBank.getFloat("t1_x", iele), + trackBank.getFloat("t1_y", iele), + trackBank.getFloat("t1_z", iele)), + new Vector3D(trackBank.getFloat("t1_px", iele), + trackBank.getFloat("t1_py", iele), + trackBank.getFloat("t1_pz", iele))); + Point3D vertex = track.distance(new Line3D(0,0,0,0,0,1)).lerpPoint(0); Electron elec = new Electron(11, - trackBank.getFloat("p0_x", iele), - trackBank.getFloat("p0_y", iele), - trackBank.getFloat("p0_z", iele), - trackBank.getFloat("Vtx0_x", iele), - trackBank.getFloat("Vtx0_y", iele), - trackBank.getFloat("Vtx0_z", iele), + trackBank.getFloat("t1_px", iele), + trackBank.getFloat("t1_py", iele), + trackBank.getFloat("t1_pz", iele), + vertex.x(),//trackBank.getFloat("Vtx0_x", iele), + vertex.y(),//trackBank.getFloat("Vtx0_y", iele), + vertex.z(),//trackBank.getFloat("Vtx0_z", iele), trackBank.getInt("id", iele), trackBank.getByte("sector", iele)); +// System.out.println(vertex + " " + elec.vertex() + "\n"); return elec; } return null; @@ -338,7 +355,7 @@ private void processEvent(Event event, Event shifted) { this.binning.getH2F("hi_S" + electron.sector()).fill(electron.vz(), Math.toDegrees(electron.theta())); - if(Math.abs(electron.vz()-(Constants.SCEXIT+Constants.TARGETCENTER)) Date: Wed, 18 Oct 2023 00:36:02 +0200 Subject: [PATCH 03/60] saving new offset histograms to the histogram file --- .../src/main/java/org/clas/dc/alignment/Histo.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 96a748b..6af5e21 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -1256,6 +1256,7 @@ private static double getRMSIDataSet(IDataSet data, double min, double max) { public void readDataGroup(String folder, TDirectory dir) { electron = this.readDataGroup(folder + "/electron/electron", dir, electron); binning = this.readDataGroup(folder + "/electron/binning", dir, binning); + offset = this.readDataGroup(folder + "/electron/offset", dir, offset); for(int is=0; is Date: Fri, 20 Oct 2023 13:02:07 +0200 Subject: [PATCH 04/60] improving offset fit and reverting to use track vertex variables --- .../java/org/clas/dc/alignment/Constants.java | 2 +- .../java/org/clas/dc/alignment/Histo.java | 40 ++++++++++++------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java index ea21834..78b66ee 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java @@ -92,7 +92,7 @@ public class Constants { public static double WINDOWDIST = DEFAULT[2]; public static double SCEXIT = DEFAULT[3]; public static double TARGETCENTER = DEFAULT[0]-DEFAULT[1]/2; - public static double PEAKWIDTH = TARGETPOS+WINDOWDIST+(SCEXIT-TARGETLENGTH/2)/2; + public static double PEAKWIDTH = 4; public static double SCALE = 1000; // moller cone entrance diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 6af5e21..7efb4c7 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -321,23 +321,32 @@ private Electron getElectron(Event event) { if(trackBank!=null) event.read(trackBank); if(trackBank!=null && trackBank.getRows()>0) { - Line3D track = new Line3D(new Point3D(trackBank.getFloat("t1_x", iele), - trackBank.getFloat("t1_y", iele), - trackBank.getFloat("t1_z", iele)), - new Vector3D(trackBank.getFloat("t1_px", iele), - trackBank.getFloat("t1_py", iele), - trackBank.getFloat("t1_pz", iele))); - Point3D vertex = track.distance(new Line3D(0,0,0,0,0,1)).lerpPoint(0); +// Line3D track = new Line3D(new Point3D(trackBank.getFloat("t1_x", iele), +// trackBank.getFloat("t1_y", iele), +// trackBank.getFloat("t1_z", iele)), +// new Vector3D(trackBank.getFloat("t1_px", iele), +// trackBank.getFloat("t1_py", iele), +// trackBank.getFloat("t1_pz", iele))); +// Point3D vertex = track.distance(new Line3D(0,0,0,0,0,1)).lerpPoint(0); +// Electron elec = new Electron(11, +// trackBank.getFloat("t1_px", iele), +// trackBank.getFloat("t1_py", iele), +// trackBank.getFloat("t1_pz", iele), +// vertex.x(),//trackBank.getFloat("Vtx0_x", iele), +// vertex.y(),//trackBank.getFloat("Vtx0_y", iele), +// vertex.z(),//trackBank.getFloat("Vtx0_z", iele), +// trackBank.getInt("id", iele), +// trackBank.getByte("sector", iele)); +// System.out.println(vertex + " " + elec.vertex() + "\n"); Electron elec = new Electron(11, - trackBank.getFloat("t1_px", iele), - trackBank.getFloat("t1_py", iele), - trackBank.getFloat("t1_pz", iele), - vertex.x(),//trackBank.getFloat("Vtx0_x", iele), - vertex.y(),//trackBank.getFloat("Vtx0_y", iele), - vertex.z(),//trackBank.getFloat("Vtx0_z", iele), + trackBank.getFloat("p0_x", iele), + trackBank.getFloat("p0_y", iele), + trackBank.getFloat("p0_z", iele), + trackBank.getFloat("Vtx0_x", iele), + trackBank.getFloat("Vtx0_y", iele), + trackBank.getFloat("Vtx0_z", iele), trackBank.getInt("id", iele), trackBank.getByte("sector", iele)); -// System.out.println(vertex + " " + elec.vertex() + "\n"); return elec; } return null; @@ -1140,16 +1149,19 @@ private GraphErrors fitOffset(GraphErrors grTheta, double deltaZ) { GraphErrors grOffset = new GraphErrors("R2"); grOffset.setTitleX("#phi(deg)"); grOffset.setTitleY("r(cm)"); + double phimin = 0; for(int i=0; i Date: Fri, 20 Oct 2023 15:55:11 +0200 Subject: [PATCH 05/60] added theta threshold function with offset --- .../src/main/java/org/clas/dc/alignment/Histo.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 7efb4c7..8c5b80c 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -195,8 +195,15 @@ private void createHistos(String optStats) { ftheta.setParameter(1, Constants.MOLLERZ); ftheta.setLineColor(2); ftheta.setLineWidth(2); + F1D fthetaOff = new F1D("fthetaOff","57.29*atan([r]/([z0]-x))",minVtx, maxVtx); + double y0=0.715; + fthetaOff.setParameter(0, -y0*Math.sin(Math.toRadians(is*60))+Math.sqrt(Math.pow(Constants.MOLLERR, 2)-Math.pow(y0*Math.cos(Math.toRadians(is*60)), 2))); + fthetaOff.setParameter(1, Constants.MOLLERZ); + fthetaOff.setLineColor(4); + fthetaOff.setLineWidth(2); this.binning.addDataSet(hi_vtxtheta, is); this.binning.addDataSet(ftheta, is); + this.binning.addDataSet(fthetaOff, is); } this.offset = new DataGroup(1,2); H2F hi_thetasc = new H2F("hi_thetasc", "", 36, -180, 180, 40, 0, 20.); From 21db196b28d9072441d2764f603a6e6f7e7bcb3f Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Mon, 30 Oct 2023 15:43:33 +0100 Subject: [PATCH 06/60] changing function names to be sector dependent --- .../src/main/java/org/clas/dc/alignment/Histo.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 8c5b80c..d497e0a 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -190,12 +190,12 @@ private void createHistos(String optStats) { H2F hi_vtxtheta = new H2F("hi_S" + sector, "Sector " + sector, nbinsVtx, minVtx, maxVtx, 100, 0., 35); hi_vtxtheta.setTitleX("Vertex (cm)"); hi_vtxtheta.setTitleY("#theta (deg)"); - F1D ftheta = new F1D("ftheta","57.29*atan([r]/([z0]-x))",minVtx, maxVtx); + F1D ftheta = new F1D("ftheta_S" + sector,"57.29*atan([r]/([z0]-x))",minVtx, maxVtx); ftheta.setParameter(0, Constants.MOLLERR); ftheta.setParameter(1, Constants.MOLLERZ); ftheta.setLineColor(2); ftheta.setLineWidth(2); - F1D fthetaOff = new F1D("fthetaOff","57.29*atan([r]/([z0]-x))",minVtx, maxVtx); + F1D fthetaOff = new F1D("fthetaOff_S" + sector,"57.29*atan([r]/([z0]-x))",minVtx, maxVtx); double y0=0.715; fthetaOff.setParameter(0, -y0*Math.sin(Math.toRadians(is*60))+Math.sqrt(Math.pow(Constants.MOLLERR, 2)-Math.pow(y0*Math.cos(Math.toRadians(is*60)), 2))); fthetaOff.setParameter(1, Constants.MOLLERZ); @@ -1318,6 +1318,13 @@ private DataGroup readDataGroup(String folder, TDirectory dir, DataGroup dg) { for(int k=0; k Date: Fri, 8 Dec 2023 11:02:03 -0500 Subject: [PATCH 07/60] restore time residual plots, update to skimming script --- .../java/org/clas/dc/alignment/Alignment.java | 2 +- .../java/org/clas/dc/alignment/Histo.java | 24 ++++++++++--------- dc/utilities/createSkims.csh | 6 ++--- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index a6ccb1c..20a0f55 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -944,7 +944,7 @@ public static void main(String[] args){ parser.getOptionParser("-process").addOption("-theta" , "5:10:20", "theta bin limits, e.g. \"5:10:20:30\""); parser.getOptionParser("-process").addOption("-phi" , "-30:0:30", "phi bin limits, e.g. \"-30:-10:0:10:30\""); parser.getOptionParser("-process").addOption("-shifts" , "0", "use event-by-event subtraction for unit shifts (1=on, 0=off)"); -// parser.getOptionParser("-process").addOption("-time" , "0", "make time residual histograms (1=true, 0=false)"); + parser.getOptionParser("-process").addOption("-time" , "0", "make time residual histograms (1=true, 0=false)"); parser.getOptionParser("-process").addOption("-residuals", "2", "fit residuals (2) or use mean (1)"); parser.getOptionParser("-process").addOption("-vertfit" , "5", "fit vertex plots with:\n" + "\t\t- RG-D layout (7), new cryotarget, \n" + diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index d497e0a..cc56522 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -527,17 +527,19 @@ public void analyzeHisto(int fit, int vertexFit) { } } } - GraphErrors grthetasc = Histo.getThresholdCrossingProfile(offset.getH2F("hi_thetasc"), 0.5); - if(grthetasc.getDataSize(0)>1) { - GraphErrors grradius = this.fitOffset(grthetasc, Constants.MOLLERZ-(Constants.SCEXIT+Constants.TARGETCENTER)); - this.beamOffset[0][0] = grradius.getFunction().getParameter(1)*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2))); - this.beamOffset[1][0] = grradius.getFunction().getParameter(1)*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2))); - this.beamOffset[0][1] = Math.sqrt(Math.pow(grradius.getFunction().parameter(1).error()*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2))),2)+ - Math.pow(grradius.getFunction().getParameter(1)*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2)))*Math.toRadians(grradius.getFunction().parameter(2).error()),2)); - this.beamOffset[1][1] = Math.sqrt(Math.pow(grradius.getFunction().parameter(1).error()*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2))),2)+ - Math.pow(grradius.getFunction().getParameter(1)*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2)))*Math.toRadians(grradius.getFunction().parameter(2).error()),2)); - offset.addDataSet(grthetasc, 0); - offset.addDataSet(grradius, 1); + if(offset.getH2F("hi_thetasc")!=null) { + GraphErrors grthetasc = Histo.getThresholdCrossingProfile(offset.getH2F("hi_thetasc"), 0.5); + if(grthetasc.getDataSize(0)>1) { + GraphErrors grradius = this.fitOffset(grthetasc, Constants.MOLLERZ-(Constants.SCEXIT+Constants.TARGETCENTER)); + this.beamOffset[0][0] = grradius.getFunction().getParameter(1)*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2))); + this.beamOffset[1][0] = grradius.getFunction().getParameter(1)*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2))); + this.beamOffset[0][1] = Math.sqrt(Math.pow(grradius.getFunction().parameter(1).error()*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2))),2)+ + Math.pow(grradius.getFunction().getParameter(1)*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2)))*Math.toRadians(grradius.getFunction().parameter(2).error()),2)); + this.beamOffset[1][1] = Math.sqrt(Math.pow(grradius.getFunction().parameter(1).error()*Math.sin(Math.toRadians(grradius.getFunction().getParameter(2))),2)+ + Math.pow(grradius.getFunction().getParameter(1)*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2)))*Math.toRadians(grradius.getFunction().parameter(2).error()),2)); + offset.addDataSet(grthetasc, 0); + offset.addDataSet(grradius, 1); + } } } diff --git a/dc/utilities/createSkims.csh b/dc/utilities/createSkims.csh index 66779ec..bafb549 100755 --- a/dc/utilities/createSkims.csh +++ b/dc/utilities/createSkims.csh @@ -28,14 +28,14 @@ echo foreach var ( r0 r1_x r1_y r1_z r1_cy r1_cz r2_x r2_y r2_z r2_cy r2_cz r3_x r3_y r3_z r3_cy r3_cz ) - mkdir -p $outdir/skims/$var - set vardir = $indir/$var/$schema/recon - if(`filetest -d $vardir` == 1 ) then + if(`filetest -d $vardir` == 1 && `ls $vardir | wc -l` > 0) then echo echo found variation $var + mkdir -p $outdir/skims/$var + foreach rundir (`ls -d $vardir/*/`) set run = `echo $rundir | rev | awk -F"/" '{print$1}' | rev` hipo-utils -reduce -ct "REC::Particle://beta>0[GT]0,REC::Cherenkov://nphe>2[GT]0,REC::Calorimeter://energy>0[GT]0,TimeBasedTrkg::TBTracks://Vtx0_z>-15&&Vtx0_z<35[GT]0" -r "TimeBasedTrkg::TBHits://trkID>0" -b "RUN::config,REC::Particle,REC::Cherenkov,REC::Calorimeter,REC::Track,TimeBasedTrkg::TBTracks,TimeBasedTrkg::TBHits" -merge -o $outdir/skims/$var/$var"_clas_"$run".hipo" $vardir/$run/* From 2b9341e5087fe6783ad8d346de19ecf0d39bba0b Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 8 Dec 2023 11:19:09 -0500 Subject: [PATCH 08/60] restore time residual plots, attempt2 --- .../src/main/java/org/clas/dc/alignment/Alignment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 20a0f55..f626dde 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -1038,7 +1038,7 @@ public static void main(String[] args){ String thetaBins = parser.getOptionParser("-process").getOption("-theta").stringValue(); String phiBins = parser.getOptionParser("-process").getOption("-phi").stringValue(); String optStats = parser.getOptionParser("-process").getOption("-stats").stringValue(); - boolean time = false;//parser.getOptionParser("-process").getOption("-time").intValue()!=0; + boolean time = parser.getOptionParser("-process").getOption("-time").intValue()!=0; int residuals = parser.getOptionParser("-process").getOption("-residuals").intValue(); int vertexFit = parser.getOptionParser("-process").getOption("-vertfit").intValue(); String vertexPar = parser.getOptionParser("-process").getOption("-vertpar").stringValue(); From 7d628e131394e81165bb11ff5c924fc5e0ae9c79 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Mon, 11 Dec 2023 17:22:04 -0500 Subject: [PATCH 09/60] restoring writing of time residuals to file --- .../java/org/clas/dc/alignment/Histo.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index cc56522..b062e6e 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -4,8 +4,6 @@ import java.util.List; import java.util.logging.Logger; import org.jlab.clas.physics.Particle; -import org.jlab.geom.prim.Line3D; -import org.jlab.geom.prim.Point3D; import org.jlab.geom.prim.Vector3D; import org.jlab.groot.data.GraphErrors; import org.jlab.groot.data.H1F; @@ -1357,18 +1355,18 @@ public void writeDataGroup(String root, String folder, TDirectory dir) { } } } -// dir.cd("/" + root + "/" + folder); -// dir.mkdir("time"); -// dir.cd("time"); -// for(int is=0; is Date: Tue, 12 Dec 2023 21:58:08 -0500 Subject: [PATCH 10/60] reading time histograms when reanalyzing or refitting --- .../java/org/clas/dc/alignment/Alignment.java | 5 +- .../java/org/clas/dc/alignment/Fitter.java | 2 +- .../java/org/clas/dc/alignment/Histo.java | 46 ++++++++++++------- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index f626dde..c0f3d11 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -896,10 +896,13 @@ public void readHistos(String fileName, String optStats) { dir.cd("/" + folder); dir.ls(); for(Object entry : dir.getDir().getDirectoryMap().entrySet()) { + dir.cd("/" + folder); Map.Entry object = (Map.Entry) entry; String key = object.getKey(); boolean shift = !key.equals("nominal") && subtractedShifts; - this.addHistoSet(key, new Histo(shift, thetaBins, phiBins, vertexRange, optStats)); + Map dgs = dir.getDirectoryByPath(key).getDirectoryMap(); + boolean time = dgs.containsKey("time"); + this.addHistoSet(key, new Histo(shift, thetaBins, phiBins, time, vertexRange, optStats)); histos.get(key).readDataGroup(folder+"/"+key, dir); } System.setOut(outStream); diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java index 1b3d585..2da57cb 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java @@ -83,7 +83,7 @@ public double getChi2(double[] pars){ double chi2 = 0.0; int ndf = 0; - for(int im=0; im Date: Mon, 18 Dec 2023 14:26:39 -0500 Subject: [PATCH 11/60] restoring vertex constraint --- .../src/main/java/org/clas/dc/alignment/Fitter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java index 2da57cb..1b3d585 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java @@ -83,7 +83,7 @@ public double getChi2(double[] pars){ double chi2 = 0.0; int ndf = 0; - for(int im=1; im Date: Wed, 20 Dec 2023 15:59:06 -0500 Subject: [PATCH 12/60] set a 10 count threshold on the scattering chamber exit window peak for including the fitted position in the global fit --- .../dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 655d83f..62e2bd0 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -525,7 +525,7 @@ public void analyzeHisto(int fit, int vertexFit) { } if(hvtx.getFunction().getName().equals("f4vertex") && isc>=0 && iscw>=0 && - hvtx.getFunction().getParameter(isc)>0) { + hvtx.getFunction().getParameter(isc)>10) { this.parValues[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = (hvtx.getFunction().getParameter(iscw)-Constants.SCEXIT)*Constants.SCALE; this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = hvtx.getFunction().parameter(iscw).error()*Constants.SCALE; } From 41764926767ac1cac2c74c18f9af320081d99221 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 9 Feb 2024 18:30:27 -0500 Subject: [PATCH 13/60] improved vertex fit for new cryotarget --- .../java/org/clas/dc/alignment/Histo.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 62e2bd0..051ca7a 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -1058,15 +1058,15 @@ public static void fitRGDVertex(H1F histo) { ibin1 = ibin0; ibin0 = ibin2; } - int ibinsc = Histo.getMaximumBinBetween(histo, (Constants.SCEXIT-Constants.TARGETPOS)*0.9, (Constants.SCEXIT-Constants.TARGETPOS)*1.1); + int ibinsc = Histo.getMaximumBinBetween(histo, (Constants.SCEXIT+Constants.TARGETCENTER)*0.9, (Constants.SCEXIT+Constants.TARGETCENTER)*1.1); double mean = histo.getDataX(ibin0); double amp = histo.getBinContent(ibin0); double sc = histo.getBinContent(ibinsc); - double sigma = 0.5; + double sigma = 0.3; double bg = histo.getBinContent((ibin1+ibin0)/2); - String function = "[amp]*gaus(x,[exw]-[tl],[sigma])+" - + "[amp]*gaus(x,[exw],[sigma])*1.2+" + String function = "[ampU]*gaus(x,[exw]-[tl],[sigma])+" + + "[ampD]*gaus(x,[exw],[sigma])+" + "[bg]*gaus(x,[exw]-[tl]/2,[tl]*0.6)+" + "[sc]*gaus(x,[exw]+[scw]-[tl]/2,[sigma])+" + "[air]*landau(x,[exw]+[scw]-[tl]/2+[sigma]*2,[sigma]*4)"; @@ -1074,15 +1074,16 @@ public static void fitRGDVertex(H1F histo) { f1_vtx.setLineColor(2); f1_vtx.setLineWidth(2); f1_vtx.setOptStat("11111111111"); - f1_vtx.setParameter(0, amp/2); + f1_vtx.setParameter(0, amp); f1_vtx.setParameter(1, mean); f1_vtx.setParameter(2, Constants.TARGETLENGTH); - f1_vtx.setParLimits(2, Constants.TARGETLENGTH*0.99, Constants.TARGETLENGTH*1.01); + f1_vtx.setParLimits(2, Constants.TARGETLENGTH*0.9, Constants.TARGETLENGTH*1.1); f1_vtx.setParameter(3, sigma); - f1_vtx.setParameter(4, bg); - f1_vtx.setParameter(5, sc); - f1_vtx.setParameter(6, Constants.SCEXIT-Constants.TARGETPOS); - f1_vtx.setParLimits(6, (Constants.SCEXIT-Constants.TARGETPOS)*0.9, (Constants.SCEXIT-Constants.TARGETPOS)*1.1); + f1_vtx.setParameter(4, amp); + f1_vtx.setParameter(5, bg); + f1_vtx.setParameter(6, sc); + f1_vtx.setParameter(7, Constants.SCEXIT); + f1_vtx.setParLimits(7, (Constants.SCEXIT)*0.9, (Constants.SCEXIT)*1.1); f1_vtx.setRange(mean-Constants.TARGETLENGTH*1.5,Constants.SCEXIT+Constants.TARGETLENGTH*0.6); DataFitter.fit(f1_vtx, histo, "Q"); //No options uses error for sigma // if(f1_vtx.getParameter(6) Date: Mon, 12 Feb 2024 12:15:06 -0500 Subject: [PATCH 14/60] added time residuals calibration plots, switched to newer coatjava version, added target length constraint, changed global transformation to translation only --- dc/java/dc-alignment/bin/dc-alignment | 4 +- dc/java/dc-alignment/pom.xml | 4 +- .../java/org/clas/dc/alignment/Alignment.java | 107 +++++++++--------- .../java/org/clas/dc/alignment/Constants.java | 5 +- .../java/org/clas/dc/alignment/Fitter.java | 16 ++- .../java/org/clas/dc/alignment/Histo.java | 41 ++++++- 6 files changed, 114 insertions(+), 63 deletions(-) diff --git a/dc/java/dc-alignment/bin/dc-alignment b/dc/java/dc-alignment/bin/dc-alignment index a90959e..9997333 100755 --- a/dc/java/dc-alignment/bin/dc-alignment +++ b/dc/java/dc-alignment/bin/dc-alignment @@ -1,6 +1,8 @@ #!/bin/sh SCRIPT_DIR=`dirname $0` +jar=`ls $SCRIPT_DIR/../target/dc-alignment-*-jar-with-dependencies.jar` -java -Dsun.java2d.pmoffscreen=false -Xmx4096m -Xms1024m -cp "$SCRIPT_DIR/../target/dc-alignment-0.9-jar-with-dependencies.jar" org.clas.dc.alignment.Alignment $* +java -Dsun.java2d.pmoffscreen=false \ + -Xmx8096m -Xms1024m -cp $jar org.clas.dc.alignment.Alignment $* diff --git a/dc/java/dc-alignment/pom.xml b/dc/java/dc-alignment/pom.xml index 07a5e9d..f02eb79 100644 --- a/dc/java/dc-alignment/pom.xml +++ b/dc/java/dc-alignment/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.clas.detector dc-alignment - 0.9 + 1.0 jar @@ -15,7 +15,7 @@ org.jlab.coat coat-libs - 7.0.1-SNAPSHOT + 10.0.4-SNAPSHOT jar diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index c0f3d11..06e5ac5 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -35,6 +35,7 @@ import org.jlab.groot.graphics.EmbeddedPad; import org.jlab.groot.group.DataGroup; import org.jlab.jnp.utils.options.OptionStore; +import org.jlab.logging.DefaultLogger; /** * DC alignment code, implementing the procedure developed by T. Hayward @@ -75,6 +76,7 @@ public class Alignment { private static PrintStream errStream = System.err; private static final Logger LOGGER = Logger.getLogger(Constants.LOGGERNAME); + private static Level LEVEL = Level.CONFIG; public Alignment() { this.initInputs(); @@ -90,42 +92,13 @@ private void initConstants(int run, String initVariation, String compareVariatio } private void initLogger(Level level) { - - LOGGER.setUseParentHandlers(false); - - try{ - SimpleFormatter formatter = new SimpleFormatter() { - private static final String format = " %3$s %n"; - - @Override - public synchronized String format(LogRecord lr) { - return String.format("%s\n", lr.getMessage()); - } - }; - //Creating consoleHandler and fileHandler - Handler consoleHandler = new ConsoleHandler(); - Handler fileHandler = new FileHandler(Constants.LOGGERNAME + ".log"); - - //Assigning handlers to LOGGER object - LOGGER.addHandler(consoleHandler); - LOGGER.addHandler(fileHandler); - - //Setting logger format - consoleHandler.setFormatter(formatter); - fileHandler.setFormatter(formatter); - - //Setting levels to handlers and LOGGER - this.setLoggerLevel(level); - } - catch(IOException exception){ - LOGGER.log(Level.SEVERE, "Error occur in configuring Logging file", exception); - } - LOGGER.config("[CONFIG] Completed logger configuration, level set to " + LOGGER.getLevel().getName()); + DefaultLogger.debug(); + this.setLoggerLevel(level); } private void setLoggerLevel(Level level) { - LOGGER.setLevel(level); - for(Handler handler : LOGGER.getHandlers()) handler.setLevel(level); + LEVEL = level; + LOGGER.setLevel(level); } public void setFitOptions(boolean sector, int iteration) { @@ -216,7 +189,7 @@ public void analyzeHistos(int resFit, int vertexFit, String vertexPar, boolean t this.initVertexPar(vertexFit, vertexPar); for(String key : histos.keySet()) { if(test && !key.equals("nominal")) continue; - LOGGER.info("\nAnalyzing histos for variation " + key); + LOGGER.log(LEVEL,"\nAnalyzing histos for variation " + key); histos.get(key).analyzeHisto(resFit, vertexFit); for(int i=0; i0) { for(int is=0; is=Constants.NLAYER+Constants.NTARGET-2) gr_fit.setMarkerColor(1); else gr_fit.setMarkerColor(this.markerColor[(il-1)/6]); gr_fit.setMarkerStyle(this.markerStyle[ip-1]); gr_fit.setMarkerSize(this.markerSize); @@ -799,6 +772,33 @@ public String[] getInputs() { public Table getGlobalOffsets(Table table) { + // apply global translation based on region 1 position + int refRegion = 1; + Table global = table.copy(); + for(int is=0; is=3){ + upar.fix(par.name()); + } + if(par.min()>-1e9&&par.max()<1e9){ + upar.setLimits(par.name(), par.min(), par.max()); + } + } + } + else { for(int loop = 0; loop < pars.length; loop++){ UserParameter par = this.pars[loop]; upar.add(par.name(),par.value(),par.getStep()); @@ -212,7 +226,7 @@ public void fit(String options){ upar.setLimits(par.name(), par.min(), par.max()); } } - + } MnScan scanner = new MnScan(this,upar); for(int i = 0; i < pars.length; i++){ diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 051ca7a..2102cce 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -29,11 +29,13 @@ public class Histo { private final int nSector = Constants.NSECTOR; private final int nLayer = Constants.NLAYER; + private final int nSLayer = Constants.NSUPERLAYER; private final int nTarget = Constants.NTARGET; private DataGroup electron = null; private DataGroup binning = null; private DataGroup offset = null; + private DataGroup calib = null; private DataGroup[][][] residuals = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][][] time = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][] vertex = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains sectors @@ -121,6 +123,7 @@ private void createHistos(String optStats) { maxVtx = Constants.VDFMAX; } + this.calib = new DataGroup(nSector, nSLayer); for(int is=0; is=0 && iscw>=0 && hvtx.getFunction().getParameter(isc)>10) { this.parValues[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = (hvtx.getFunction().getParameter(iscw)-Constants.SCEXIT)*Constants.SCALE; - this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = hvtx.getFunction().parameter(iscw).error()*Constants.SCALE; + this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = Math.max(hvtx.getFunction().parameter(iscw).error()*Constants.SCALE, Constants.SCALE*dx); + } + if(hvtx.getFunction().getName().equals("f4vertex") && + hvtx.getFunction().getParameter(0)>10) { + this.parValues[is][it][ip][Constants.NLAYER+Constants.NTARGET-2] = (hvtx.getFunction().getParameter(2)-Constants.TARGETLENGTH)*Constants.SCALE; + this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-2] = Math.max(hvtx.getFunction().parameter(2).error()*Constants.SCALE, Constants.SCALE*dx); } } } @@ -588,7 +612,8 @@ public EmbeddedCanvasTabbed getElectronPlots() { } public EmbeddedCanvasTabbed plotHistos() { - EmbeddedCanvasTabbed canvas = null; + EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("TimeResiduals"); + canvas.getCanvas("TimeResiduals").draw(calib); if(tres) { for(int is=0; is Date: Mon, 12 Feb 2024 20:35:52 -0500 Subject: [PATCH 15/60] modified reading and writing of histogram file to save fitted functions --- .../java/org/clas/dc/alignment/Histo.java | 62 ++++++++++++------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 2102cce..08cad57 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -502,8 +502,10 @@ public void analyzeHisto(int fit, int vertexFit) { for(int isl=0; isl=0 && iscw>=0 && - hvtx.getFunction().getParameter(isc)>10) { + if(isc>=0 && iscw>=0 && hvtx.getFunction().getParameter(isc)>10) { this.parValues[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = (hvtx.getFunction().getParameter(iscw)-Constants.SCEXIT)*Constants.SCALE; this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = Math.max(hvtx.getFunction().parameter(iscw).error()*Constants.SCALE, Constants.SCALE*dx); } - if(hvtx.getFunction().getName().equals("f4vertex") && - hvtx.getFunction().getParameter(0)>10) { - this.parValues[is][it][ip][Constants.NLAYER+Constants.NTARGET-2] = (hvtx.getFunction().getParameter(2)-Constants.TARGETLENGTH)*Constants.SCALE; - this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-2] = Math.max(hvtx.getFunction().parameter(2).error()*Constants.SCALE, Constants.SCALE*dx); + if(itl>=0 && hvtx.getFunction().getParameter(0)>10) { + this.parValues[is][it][ip][Constants.NLAYER+Constants.NTARGET-2] = (hvtx.getFunction().getParameter(itl)-Constants.TARGETLENGTH)*Constants.SCALE; + this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-2] = Math.max(hvtx.getFunction().parameter(itl).error()*Constants.SCALE, Constants.SCALE*dx); } } } @@ -612,8 +613,8 @@ public EmbeddedCanvasTabbed getElectronPlots() { } public EmbeddedCanvasTabbed plotHistos() { - EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("TimeResiduals"); - canvas.getCanvas("TimeResiduals").draw(calib); + EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration"); + canvas.getCanvas("Calibration").draw(calib); if(tres) { for(int is=0; is= 0.67 * amp) { - F1D f1_vtx = new F1D("f1vertex","[amp]*gaus(x,[mean],[sigma])", -10, 10); + F1D f1_vtx = new F1D("f"+histo.getName(),"[amp]*gaus(x,[mean],[sigma])", -10, 10); f1_vtx.setLineColor(2); f1_vtx.setLineWidth(2); f1_vtx.setOptStat("1111"); @@ -1175,7 +1176,7 @@ public static void fitVertex(H1F histo) { //So max peak is the leftmost peak (upstream peak) //Since the downstream peak is desired, the peak to the right of the max peak is fit else { - F1D f2_vtx = new F1D("f2vertex","[amp2]*gaus(x,[mean2],[sigma2])", -10, 10); + F1D f2_vtx = new F1D("f"+histo.getName(),"[amp2]*gaus(x,[mean2],[sigma2])", -10, 10); f2_vtx.setLineColor(2); f2_vtx.setLineWidth(2); f2_vtx.setOptStat("1111"); @@ -1314,7 +1315,7 @@ public void readDataGroup(String folder, TDirectory dir) { electron = this.readDataGroup(folder + "/electron/electron", dir, electron); binning = this.readDataGroup(folder + "/electron/binning", dir, binning); offset = this.readDataGroup(folder + "/electron/offset", dir, offset); - calib = this.readDataGroup(folder + "/time/residuals", dir, calib); + calib = this.readDataGroup(folder + "/calibration/residuals", dir, calib); for(int is=0; is " + ds.getName()); dir.addDataSet(ds); + if(ds instanceof H1F) { + H1F h1 = (H1F) ds; + if(h1.getFunction()!=null) { + Func1D f1 = h1.getFunction(); + f1.setName("f"+h1.getName()); + dir.addDataSet(f1); + } + } } } } From 7599aeabe9784c72769375f9717a7017ed4d0338 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Thu, 15 Feb 2024 21:03:11 -0500 Subject: [PATCH 16/60] added fit of integrated vertex distribution, setting of residual stat box accuracy --- .../java/org/clas/dc/alignment/Histo.java | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 08cad57..f59c2ce 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -497,15 +497,13 @@ public void processFiles(int maxEvents) { public void analyzeHisto(int fit, int vertexFit) { + this.fitVertex(vertexFit,electron.getH1F("hi_vtx")); for(int is=0; is5) { + f1.parameter(1).setError(sigma/Math.sqrt(histo.getIntegral())); + + if(fit==2 && amp>5) { f1.setParLimits(0, amp*0.2, amp*1.2); f1.setParLimits(1, mean*0.5, mean*1.5); f1.setParLimits(2, sigma*0.2, sigma*2); @@ -727,14 +724,13 @@ public static boolean fitResiduals(H1F histo) { f1.setRange(mean-2.0*sigma,mean+2.0*sigma); DataFitter.fit(f1, histo, "Q"); // System.out.print("2nd"); - return true; } - else { - double integral = Histo.getIntegralIDataSet(histo, f1.getMin(), f1.getMax()); - f1.parameter(1).setError(sigma/Math.sqrt(integral)); + else if(fit==1) { histo.setFunction(f1); - return false; } + histo.getFunction().setStatBoxFormat("%.1f"); + histo.getFunction().setStatBoxErrorFormat("%.1f"); + return histo.getFunction().isFitValid(); } /** From fdaadb96e4737ee5add3355935d32656003b95fa Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Thu, 15 Feb 2024 21:08:38 -0500 Subject: [PATCH 17/60] renamed histograms --- .../java/org/clas/dc/alignment/Alignment.java | 6 +- .../java/org/clas/dc/alignment/Histo.java | 60 +++++++++---------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 06e5ac5..e3c13a0 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -578,8 +578,8 @@ private DataGroup getShiftsHisto(int sector) { int icol = 1; if(it>0) icol = this.markerColor[(it-1)%6]; icol += 20*(ip%phiBins.length); - H1F hi_res = new H1F("hi_res" + "_theta " + it + "_phi" + ip, "Shift", "#Deltaresidual (um)", nbin, 0, inputs.length-1); - H1F hi_vtx = new H1F("hi_vtx" + "_theta " + it + "_phi" + ip, "Shift", "#Deltavertex (cm)", nbin, 0, inputs.length-1); + H1F hi_res = new H1F("hi-res" + "_theta " + it + "_phi" + ip, "Shift", "#Deltaresidual (um)", nbin, 0, inputs.length-1); + H1F hi_vtx = new H1F("hi-vtx" + "_theta " + it + "_phi" + ip, "Shift", "#Deltavertex (cm)", nbin, 0, inputs.length-1); hi_res.setLineColor(icol); hi_res.setFillColor(icol); hi_res.setLineWidth(0); @@ -648,7 +648,7 @@ private DataGroup getSectorHistograms(Table alignment, int icol) { DataGroup residuals = new DataGroup(3,2); for(int is=0; is=0) { - electron.getH1F("hi_nphe").fill(nphe); - electron.getH1F("hi_ecal").fill(energy); + electron.getH1F("hi-nphe").fill(nphe); + electron.getH1F("hi-ecal").fill(energy); break; } } @@ -382,15 +382,15 @@ private void processEvent(Event event, Event shifted) { Electron electron = this.getElectron(event); if(electron!=null) { - this.electron.getH1F("hi_vtx").fill(electron.vz()); - this.electron.getH1F("hi_theta").fill(Math.toDegrees(electron.theta())); - this.electron.getH1F("hi_phi").fill(Math.toDegrees(electron.phi())); - this.electron.getH2F("hi_thetaphi").fill(Math.toDegrees(electron.phi()), Math.toDegrees(electron.theta())); + this.electron.getH1F("hi-vtx").fill(electron.vz()); + this.electron.getH1F("hi-theta").fill(Math.toDegrees(electron.theta())); + this.electron.getH1F("hi-phi").fill(Math.toDegrees(electron.phi())); + this.electron.getH2F("hi-thetaphi").fill(Math.toDegrees(electron.phi()), Math.toDegrees(electron.theta())); - this.binning.getH2F("hi_S" + electron.sector()).fill(electron.vz(), Math.toDegrees(electron.theta())); + this.binning.getH2F("hi-S" + electron.sector()).fill(electron.vz(), Math.toDegrees(electron.theta())); if(Math.abs(electron.vz()-(Constants.SCEXIT+Constants.TARGETCENTER))1) { GraphErrors grradius = this.fitOffset(grthetasc, Constants.MOLLERZ-(Constants.SCEXIT+Constants.TARGETCENTER)); this.beamOffset[0][0] = grradius.getFunction().getParameter(1)*Math.cos(Math.toRadians(grradius.getFunction().getParameter(2))); From 9ae06af3d46d4680824f445b8c44905f75ba2d59 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 16 Feb 2024 18:44:58 -0500 Subject: [PATCH 18/60] disabled jminuit log during histogram fitting --- .../src/main/java/org/clas/dc/alignment/Histo.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index c208c28..baf2ff7 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +import java.util.logging.LogManager; import java.util.logging.Logger; import org.jlab.clas.physics.Particle; import org.jlab.geom.prim.Vector3D; @@ -497,6 +499,7 @@ public void processFiles(int maxEvents) { public void analyzeHisto(int fit, int vertexFit) { + Logger.getLogger("org.freehep.math.minuit").setLevel(Level.WARNING); this.fitVertex(vertexFit,electron.getH1F("hi-vtx")); for(int is=0; is Date: Sat, 17 Feb 2024 14:47:49 -0500 Subject: [PATCH 19/60] added checks on histograms fit convergence and code cleanups --- .../java/org/clas/dc/alignment/Alignment.java | 26 +-- .../java/org/clas/dc/alignment/Histo.java | 156 +++++++++++------- 2 files changed, 101 insertions(+), 81 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index e3c13a0..ac78199 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -71,10 +71,6 @@ public class Alignment { private int[] markerStyle = {2, 3, 1, 4}; private String fontName = "Arial"; - ByteArrayOutputStream pipeOut = new ByteArrayOutputStream(); - private static PrintStream outStream = System.out; - private static PrintStream errStream = System.err; - private static final Logger LOGGER = Logger.getLogger(Constants.LOGGERNAME); private static Level LEVEL = Level.CONFIG; @@ -886,16 +882,12 @@ public void processFiles(int maxEvents) { public void readHistos(String fileName, String optStats) { LOGGER.log(LEVEL,"Opening file: " + fileName); - PrintStream pipeStream = new PrintStream(pipeOut); - System.setOut(pipeStream); - System.setErr(pipeStream); TDirectory dir = new TDirectory(); dir.readFile(fileName); String folder = dir.getDirectoryList().get(0); String[] bins = folder.split("_"); this.setAngularBins(bins[1], bins[2]); dir.cd("/" + folder); - dir.ls(); for(Object entry : dir.getDir().getDirectoryMap().entrySet()) { dir.cd("/" + folder); Map.Entry object = (Map.Entry) entry; @@ -903,19 +895,13 @@ public void readHistos(String fileName, String optStats) { boolean shift = !key.equals("nominal") && subtractedShifts; Map dgs = dir.getDirectoryByPath(key).getDirectoryMap(); boolean time = dgs.containsKey("time"); - this.addHistoSet(key, new Histo(shift, thetaBins, phiBins, time, vertexRange, optStats)); + this.addHistoSet(key, new Histo(key, shift, thetaBins, phiBins, time, vertexRange, optStats)); histos.get(key).readDataGroup(folder+"/"+key, dir); } - System.setOut(outStream); - System.setErr(errStream); - this.setAngularBins(bins[1],bins[2]); // just to get the printout } public void saveHistos(String fileName) { LOGGER.log(LEVEL,"\nSaving histograms to file " + fileName); - PrintStream pipeStream = new PrintStream(pipeOut); - System.setOut(pipeStream); - System.setErr(pipeStream); TDirectory dir = new TDirectory(); String folder = "angles_" + this.getBinString(thetaBins) + "_" + this.getBinString(phiBins); dir.mkdir("/" + folder); @@ -924,8 +910,6 @@ public void saveHistos(String fileName) { histos.get(key).writeDataGroup(folder, key, dir); } dir.writeFile(fileName); - System.setOut(outStream); - System.setErr(errStream); } public static void main(String[] args){ @@ -1064,16 +1048,18 @@ public static void main(String[] args){ align.setFitOptions(sector, iter); align.initConstants(11, initVar, compareVar); - align.addHistoSet(inputs[0], new Histo(Alignment.getFileNames(nominal),align.getThetaBins(),align.getPhiBins(), time, align.getVertexRange(), optStats)); + align.addHistoSet(inputs[0], new Histo(inputs[0], Alignment.getFileNames(nominal),align.getThetaBins(),align.getPhiBins(), time, align.getVertexRange(), optStats)); for(int i=1; i files, Bin[] thetabins, Bin[] phibins, double[] vertexrange, String optstats) { + public Histo(String name, List files, Bin[] thetabins, Bin[] phibins, double[] vertexrange, String optstats) { + this.name = name; this.thetaBins = thetabins; this.phiBins = phibins; this.nominalFiles = files; this.createHistos(optstats); } - public Histo(List files, Bin[] thetabins, Bin[] phibins, boolean time, double[] vertexrange, String optstats) { + public Histo(String name, List files, Bin[] thetabins, Bin[] phibins, boolean time, double[] vertexrange, String optstats) { + this.name = name; this.thetaBins = thetabins; this.phiBins = phibins; this.minVtx = vertexrange[0]; @@ -78,7 +81,8 @@ public Histo(List files, Bin[] thetabins, Bin[] phibins, boolean time, d this.createHistos(optstats); } - public Histo(List files, List shifted, Bin[] thetabins, Bin[] phibins, double[] vertexrange, String optstats) { + public Histo(String name, List files, List shifted, Bin[] thetabins, Bin[] phibins, double[] vertexrange, String optstats) { + this.name = name; this.thetaBins = thetabins; this.phiBins = phibins; this.nominalFiles = files; @@ -87,14 +91,16 @@ public Histo(List files, List shifted, Bin[] thetabins, Bin[] ph this.createHistos(optstats); } - public Histo(boolean shift, Bin[] thetabins, Bin[] phibins, double[] vertexrange, String optstats) { + public Histo(String name, boolean shift, Bin[] thetabins, Bin[] phibins, double[] vertexrange, String optstats) { + this.name = name; this.thetaBins = thetabins; this.phiBins = phibins; this.shift = shift; this.createHistos(optstats); } - public Histo(boolean shift, Bin[] thetabins, Bin[] phibins, boolean time, double[] vertexrange, String optstats) { + public Histo(String name, boolean shift, Bin[] thetabins, Bin[] phibins, boolean time, double[] vertexrange, String optstats) { + this.name = name; this.thetaBins = thetabins; this.phiBins = phibins; this.shift = shift; @@ -103,9 +109,10 @@ public Histo(boolean shift, Bin[] thetabins, Bin[] phibins, boolean time, double } private void createHistos(String optStats) { - LOGGER.info("Creating histograms for " + nSector + " sectors, " - + (thetaBins.length-1) + " theta bins, " - + (phiBins.length-1) + " phi bins"); + LOGGER.info("[Histo] Creating histograms for " + nSector + " sectors, " + + (thetaBins.length-1) + " theta bins, " + + (phiBins.length-1) + " phi bins " + + "for variation " + name); this.residuals = new DataGroup[nSector][thetaBins.length][phiBins.length]; if(tres) this.time = new DataGroup[nSector][thetaBins.length][phiBins.length]; this.vertex = new DataGroup[thetaBins.length][phiBins.length]; @@ -500,7 +507,7 @@ public void processFiles(int maxEvents) { public void analyzeHisto(int fit, int vertexFit) { Logger.getLogger("org.freehep.math.minuit").setLevel(Level.WARNING); - this.fitVertex(vertexFit,electron.getH1F("hi-vtx")); + Histo.fitVertex(vertexFit,electron.getH1F("hi-vtx")); for(int is=0; is=0 && iscw>=0 && hvtx.getFunction().getParameter(isc)>10) { - this.parValues[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = (hvtx.getFunction().getParameter(iscw)-Constants.SCEXIT)*Constants.SCALE; - this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-1] = Math.max(hvtx.getFunction().parameter(iscw).error()*Constants.SCALE, Constants.SCALE*dx); - } - if(itl>=0 && hvtx.getFunction().getParameter(0)>10) { - this.parValues[is][it][ip][Constants.NLAYER+Constants.NTARGET-2] = (hvtx.getFunction().getParameter(itl)-Constants.TARGETLENGTH)*Constants.SCALE; - this.parErrors[is][it][ip][Constants.NLAYER+Constants.NTARGET-2] = Math.max(hvtx.getFunction().parameter(itl).error()*Constants.SCALE, Constants.SCALE*dx); + if(Histo.fitVertex(vertexFit, hvtx)) { + this.parValues[is][it][ip][0] = hvtx.getFunction().getParameter(1)*Constants.SCALE; + this.parErrors[is][it][ip][0] = hvtx.getFunction().parameter(1).error()*Constants.SCALE; + if(!shift) { + this.parValues[is][it][ip][0] -= Constants.TARGETPOS*Constants.SCALE; + this.parErrors[is][it][ip][0] = Math.max(this.parErrors[is][it][ip][0], Constants.SCALE*dx/2); + int itl = -1; + int isc = -1; + int iscw = -1; + for(int i=0; i=0 && iscw>=0 && hvtx.getFunction().getParameter(isc)>10) { + this.parValues[is][it][ip][nLayer+nTarget-1] = (hvtx.getFunction().getParameter(iscw)-Constants.SCEXIT)*Constants.SCALE; + this.parErrors[is][it][ip][nLayer+nTarget-1] = Math.max(hvtx.getFunction().parameter(iscw).error()*Constants.SCALE, Constants.SCALE*dx); + } + if(itl>=0 && hvtx.getFunction().getParameter(0)>10) { + this.parValues[is][it][ip][nLayer+nTarget-2] = (hvtx.getFunction().getParameter(itl)-Constants.TARGETLENGTH)*Constants.SCALE; + this.parErrors[is][it][ip][nLayer+nTarget-2] = Math.max(hvtx.getFunction().parameter(itl).error()*Constants.SCALE, Constants.SCALE*dx); + } } } } @@ -573,9 +574,36 @@ public void analyzeHisto(int fit, int vertexFit) { offset.addDataSet(grradius, 1); } } + System.out.print("\n"); Logger.getLogger("org.freehep.math.minuit").setLevel(Level.INFO); + this.getFailedFitStats(); + } + + + public void getFailedFitStats() { + int nfailed = 0; + for(int is=0; is5) { + if(amp<5) { + return false; + } + else if(fit==1) { + f1.setFitValid(true); + histo.setFunction(f1); + } + else if(fit==2) { f1.setParLimits(0, amp*0.2, amp*1.2); f1.setParLimits(1, mean*0.5, mean*1.5); f1.setParLimits(2, sigma*0.2, sigma*2); -// System.out.print("1st..."); DataFitter.fit(f1, histo, "Q"); mean = f1.getParameter(1); sigma = f1.getParameter(2); @@ -728,10 +761,9 @@ public static boolean fitResiduals(int fit, H1F histo) { f1.setParLimits(2, 0, sigma*2); f1.setRange(mean-2.0*sigma,mean+2.0*sigma); DataFitter.fit(f1, histo, "Q"); -// System.out.print("2nd"); } - else if(fit==1) { - histo.setFunction(f1); + else if(histo.getFunction()!=null) { + histo.getFunction().setFitValid(true); } histo.getFunction().setStatBoxFormat("%.1f"); histo.getFunction().setStatBoxErrorFormat("%.1f"); @@ -1089,12 +1121,14 @@ public static void fitRGDVertex(H1F histo) { ibin1 = ibin0; ibin0 = ibin2; } - int ibinsc = Histo.getMaximumBinBetween(histo, (Constants.SCEXIT+Constants.TARGETCENTER)*0.9, (Constants.SCEXIT+Constants.TARGETCENTER)*1.1); + int ibinsc = Histo.getMaximumBinBetween(histo, (Constants.SCEXIT+Constants.TARGETCENTER)*0.8, (Constants.SCEXIT+Constants.TARGETCENTER)*1.2); double mean = histo.getDataX(ibin0); double amp = histo.getBinContent(ibin0); double sc = histo.getBinContent(ibinsc); - double sigma = 0.3; + double scw = Constants.SCEXIT; + if(sc>10) scw = histo.getDataX(ibinsc)-mean+Constants.TARGETLENGTH/2; + double sigma = 0.5; double bg = histo.getBinContent((ibin1+ibin0)/2); String function = "[ampU]*gaus(x,[exw]-[tl],[sigma])+" + "[ampD]*gaus(x,[exw],[sigma])+" @@ -1113,8 +1147,8 @@ public static void fitRGDVertex(H1F histo) { f1_vtx.setParameter(4, amp); f1_vtx.setParameter(5, bg); f1_vtx.setParameter(6, sc); - f1_vtx.setParameter(7, Constants.SCEXIT); - f1_vtx.setParLimits(7, (Constants.SCEXIT)*0.9, (Constants.SCEXIT)*1.1); + f1_vtx.setParameter(7, scw); + f1_vtx.setParLimits(7, (Constants.SCEXIT)*0.7, (Constants.SCEXIT)*1.3); f1_vtx.setRange(mean-Constants.TARGETLENGTH*1.5,Constants.SCEXIT+Constants.TARGETLENGTH*0.6); DataFitter.fit(f1_vtx, histo, "Q"); //No options uses error for sigma // if(f1_vtx.getParameter(6) Date: Sat, 17 Feb 2024 17:25:57 -0500 Subject: [PATCH 20/60] restored log file --- .../java/org/clas/dc/alignment/Alignment.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index ac78199..81002a7 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -2,15 +2,12 @@ import eu.mihosoft.vrl.v3d.Vector3d; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; -import java.io.PrintStream; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.logging.ConsoleHandler; import java.util.logging.FileHandler; import java.util.logging.Handler; import java.util.logging.Level; @@ -89,12 +86,37 @@ private void initConstants(int run, String initVariation, String compareVariatio private void initLogger(Level level) { DefaultLogger.debug(); - this.setLoggerLevel(level); + LEVEL = level; + try{ + SimpleFormatter formatter = new SimpleFormatter() { + private static final String format = " %3$s %n"; + + @Override + public synchronized String format(LogRecord lr) { + return String.format("%s\n", lr.getMessage()); + } + }; + //Creating fileHandler + Handler fileHandler = new FileHandler(Constants.LOGGERNAME + ".log"); + + //Assigning handlers to LOGGER object + LOGGER.addHandler(fileHandler); + + //Setting logger format + fileHandler.setFormatter(formatter); + + //Setting levels to handlers and LOGGER + LOGGER.setLevel(level); + } + catch(IOException exception){ + LOGGER.log(Level.SEVERE, "Error occur in configuring Logging file", exception); + } + LOGGER.config("[CONFIG] Completed logger configuration, level set to " + LOGGER.getLevel().getName()); } private void setLoggerLevel(Level level) { - LEVEL = level; - LOGGER.setLevel(level); + LOGGER.setLevel(level); + for(Handler handler : LOGGER.getHandlers()) handler.setLevel(level); } public void setFitOptions(boolean sector, int iteration) { From ad30c3d62936fd1854e2ee48fc86ac4eaca82123 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Mon, 19 Feb 2024 12:06:47 -0500 Subject: [PATCH 21/60] now selecting status=0 hits, added wire plots --- .../java/org/clas/dc/alignment/Histo.java | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 384bd2c..010b0ee 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -39,6 +39,7 @@ public class Histo { private DataGroup binning = null; private DataGroup offset = null; private DataGroup calib = null; + private DataGroup[] wires = null; private DataGroup[][][] residuals = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][][] time = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][] vertex = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains sectors @@ -114,7 +115,10 @@ private void createHistos(String optStats) { + (phiBins.length-1) + " phi bins " + "for variation " + name); this.residuals = new DataGroup[nSector][thetaBins.length][phiBins.length]; - if(tres) this.time = new DataGroup[nSector][thetaBins.length][phiBins.length]; + if(tres) { + this.wires = new DataGroup[nSector]; + this.time = new DataGroup[nSector][thetaBins.length][phiBins.length]; + } this.vertex = new DataGroup[thetaBins.length][phiBins.length]; this.parValues = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; this.parErrors = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; @@ -161,6 +165,14 @@ private void createHistos(String optStats) { if(tres) { for(int is=0; is getHits(Event event, int sector, int tid) { if(hitBank!=null && hitBank.getRows()>0) { for (int i = 0; i < hitBank.getRows(); i++) { - if ((tid<0 || hitBank.getInt("trkID", i) == tid) && + if ((/*tid<0 ||*/ hitBank.getInt("trkID", i) == tid) && + hitBank.getInt("status", i) == 0 && hitBank.getInt("sector", i) == sector) { double residual = 10000 * hitBank.getFloat("fitResidual", i); double time = 10000 * hitBank.getFloat("timeResidual", i); int superlayer = hitBank.getInt("superlayer", i); int layer = hitBank.getInt("layer", i) + 6 * (superlayer - 1); int wire = hitBank.getInt("wire", i); - Hit hit = new Hit(sector, layer, wire, residual, time); + int status = hitBank.getInt("status", i); + Hit hit = new Hit(sector, layer, wire, residual, time, status); hits.add(hit); } } @@ -646,6 +664,12 @@ public EmbeddedCanvasTabbed plotHistos() { EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration"); canvas.getCanvas("Calibration").draw(calib); if(tres) { + for(int is=0; is Date: Sun, 25 Feb 2024 20:27:19 -0500 Subject: [PATCH 22/60] r1 translations are now global, changing theta to traj point --- .../java/org/clas/dc/alignment/Histo.java | 18 ++++++++--- .../java/org/clas/dc/alignment/Table.java | 31 ++++++++++++------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 010b0ee..5f71d5e 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -282,9 +282,11 @@ public boolean equals(Hit h) { private class Electron extends Particle { private int id; private int sector; + private Vector3D traj; - public Electron(int pid, double px, double py, double pz, double vx, double vy, double vz, int trackId, int sector) { + public Electron(int pid, double px, double py, double pz, double vx, double vy, double vz, double tx, double ty, double tz, int trackId, int sector) { super(pid, px, py, pz, vx, vy, vz); + this.traj = new Vector3D(tx, ty, tz); this.id = trackId; this.sector = sector; } @@ -302,6 +304,10 @@ public double phiSector() { dir.rotateZ(-Math.PI/3*(sector-1)); return dir.phi(); } + + public double thetaDC() { + return this.traj.theta(); + } } private int getElectronIndex(Event event) { @@ -366,10 +372,9 @@ private Electron getElectron(Event event) { if(iele<0) return null; Bank trackBank = new Bank(schema.getSchema("TimeBasedTrkg::TBTracks")); - - if(trackBank!=null) event.read(trackBank); + event.read(trackBank); - if(trackBank!=null && trackBank.getRows()>0) { + if(trackBank.getRows()>0) { // Line3D track = new Line3D(new Point3D(trackBank.getFloat("t1_x", iele), // trackBank.getFloat("t1_y", iele), // trackBank.getFloat("t1_z", iele)), @@ -394,6 +399,9 @@ private Electron getElectron(Event event) { trackBank.getFloat("Vtx0_x", iele), trackBank.getFloat("Vtx0_y", iele), trackBank.getFloat("Vtx0_z", iele), + trackBank.getFloat("t1_x", iele), + trackBank.getFloat("t1_y", iele), + trackBank.getFloat("t1_z", iele), trackBank.getInt("id", iele), trackBank.getByte("sector", iele)); return elec; @@ -417,7 +425,7 @@ private void processEvent(Event event, Event shifted) { this.offset.getH2F("hi-thetasc").fill(Math.toDegrees(electron.phi()), Math.toDegrees(electron.theta())); electron.vector().rotateZ(Math.toRadians(-60*(electron.sector()-1))); - double theta = Math.toDegrees(electron.theta()); + double theta = Math.toDegrees(electron.thetaDC()); double phi = Math.toDegrees(electron.phi()); double vz = electron.vz(); int sector = electron.sector(); diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Table.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Table.java index 1677bc4..58436c2 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Table.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Table.java @@ -171,8 +171,9 @@ public Table subtract(Table table) { } public final void update(IndexedTable table) { - for(int ir=0; ir Date: Sun, 25 Feb 2024 20:37:37 -0500 Subject: [PATCH 23/60] bug fix --- .../src/main/java/org/clas/dc/alignment/Histo.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 5f71d5e..645fbf2 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -455,9 +455,10 @@ private void processEvent(Event event, Event shifted) { for(Hit hit : hits) { this.residuals[sector - 1][it][ip].getH1F("hi-L" + hit.layer).fill(hit.residual); this.calib.getH1F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time); - if(tres) + if(tres) { this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); this.time[sector - 1][it][ip].getH1F("hi-L" + hit.layer).fill(hit.time); + } } this.vertex[it][ip].getH1F("hi-S" + sector).fill(vz); From 21f7e84e1bc0d99d3361af879409bc4d60346941 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Tue, 27 Feb 2024 14:25:06 -0500 Subject: [PATCH 24/60] added option to initialize misalignment fit from CCDB table (-init), previous iteration table option changed to -previous --- .../java/org/clas/dc/alignment/Alignment.java | 124 ++++++++++-------- 1 file changed, 70 insertions(+), 54 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 81002a7..79cda58 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -46,17 +46,19 @@ public class Alignment { - private Map histos = new LinkedHashMap(); - private String[] inputs = new String[Constants.NPARS+1]; - private Bin[] thetaBins = null; - private Bin[] phiBins = null; - private double[] vertexRange = null; - private ConstantsManager manager = new ConstantsManager(); - private String compareVariation = null; - private String initVariation = null; - private Table compareAlignment = null; - private Table initAlignment = new Table(); - private DCGeant4Factory dcDetector = null; + private Map histos = new LinkedHashMap(); + private String[] inputs = new String[Constants.NPARS+1]; + private Bin[] thetaBins = null; + private Bin[] phiBins = null; + private double[] vertexRange = null; + private ConstantsManager manager = new ConstantsManager(); + private String compareVariation = null; + private String previousVariation = null; + private String initVariation = null; + private Table compareAlignment = null; + private Table previousAlignment = null; + private Table initAlignment = new Table(); + private DCGeant4Factory dcDetector = null; private boolean subtractedShifts = true; private boolean sectorShifts = false; @@ -75,13 +77,18 @@ public Alignment() { this.initInputs(); } - private void initConstants(int run, String initVariation, String compareVariation) { + private void initConstants(int run, String initVariation, String previousVariation, String compareVariation) { ConstantProvider provider = GeometryFactory.getConstants(DetectorType.DC, 11, "default"); dcDetector = new DCGeant4Factory(provider, DCGeant4Factory.MINISTAGGERON, false); - this.compareVariation = compareVariation; - this.initVariation = initVariation; - initAlignment = this.getTable(run, initVariation); - compareAlignment = this.getTable(run, compareVariation); + this.compareVariation = compareVariation; + this.previousVariation = previousVariation; + if(initVariation.isBlank()) + this.initVariation = this.previousVariation; + else + this.initVariation = initVariation; + initAlignment = this.getTable(run, this.initVariation); + previousAlignment = this.getTable(run, this.previousVariation); + compareAlignment = this.getTable(run, this.compareVariation); } private void initLogger(Level level) { @@ -385,8 +392,8 @@ public EmbeddedCanvasTabbed analyzeFits() { } if(compareAlignment!=null) { LOGGER.log(LEVEL,"\nFitting residuals"); - LOGGER.log(LEVEL,"\nInitial alignment parameters (variation: " + this.initVariation + ") in the DC tilted sector frame\n" + this.initAlignment.toString()); - LOGGER.log(LEVEL,"\nInitial alignment parameters (variation: " + this.initVariation + ") in CCDB format\n" + this.initAlignment.toCCDBTable()); + LOGGER.log(LEVEL,"\nInitial alignment parameters (variation: " + this.previousVariation + ") in the DC tilted sector frame\n" + this.previousAlignment.toString()); + LOGGER.log(LEVEL,"\nInitial alignment parameters (variation: " + this.previousVariation + ") in CCDB format\n" + this.previousAlignment.toCCDBTable()); Table fittedAlignment = new Table(); if(this.setActiveParameters()>0) { for(int is=0; is Date: Tue, 27 Feb 2024 16:11:26 -0500 Subject: [PATCH 25/60] added command-line options to choose frame and global/loval R1 translation --- .../java/org/clas/dc/alignment/Alignment.java | 47 +++++++++++++------ .../java/org/clas/dc/alignment/Table.java | 25 ++++++---- 2 files changed, 47 insertions(+), 25 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 79cda58..108ba9c 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -57,13 +57,14 @@ public class Alignment { private String initVariation = null; private Table compareAlignment = null; private Table previousAlignment = null; - private Table initAlignment = new Table(); + private Table initAlignment = null; private DCGeant4Factory dcDetector = null; - private boolean subtractedShifts = true; + private boolean subtractedShifts = true; private boolean sectorShifts = false; - private boolean initFitPar = false; - private int fitIteration = 1; + private int fitIteration = 1; + private boolean tscFrame = true; + private boolean globalTranslation = false; private int markerSize = 4; private int[] markerColor = {2,3,4,5,7,9}; @@ -126,11 +127,15 @@ private void setLoggerLevel(Level level) { for(Handler handler : LOGGER.getHandlers()) handler.setLevel(level); } - public void setFitOptions(boolean sector, int iteration) { - this.sectorShifts = sector; - this.fitIteration = iteration; - this.printConfig(sectorShifts, "sectorShifts", ""); - this.printConfig(fitIteration, "fitIteration", ""); + public void setFitOptions(boolean sector, int iteration, boolean tsc, boolean global) { + this.sectorShifts = sector; + this.fitIteration = iteration; + this.tscFrame = tsc; + this.globalTranslation = global; + this.printConfig(sectorShifts, "sectorShifts", ""); + this.printConfig(fitIteration, "fitIteration", ""); + this.printConfig(tscFrame, "tscFrame", ""); + this.printConfig(globalTranslation, "globalTranslation", ""); } private void setShiftsMode(boolean shifts) { @@ -193,7 +198,7 @@ public Table getTable(int run, String variation) { if(!variation.isEmpty()) { manager.reset(); manager.setVariation(variation); - alignment = new Table(manager.getConstants(run, table)); + alignment = new Table(manager.getConstants(run, table), tscFrame, globalTranslation); } return alignment; } @@ -394,7 +399,7 @@ public EmbeddedCanvasTabbed analyzeFits() { LOGGER.log(LEVEL,"\nFitting residuals"); LOGGER.log(LEVEL,"\nInitial alignment parameters (variation: " + this.previousVariation + ") in the DC tilted sector frame\n" + this.previousAlignment.toString()); LOGGER.log(LEVEL,"\nInitial alignment parameters (variation: " + this.previousVariation + ") in CCDB format\n" + this.previousAlignment.toCCDBTable()); - Table fittedAlignment = new Table(); + Table fittedAlignment = new Table(tscFrame, globalTranslation); if(this.setActiveParameters()>0) { for(int is=0; is Date: Tue, 27 Feb 2024 16:12:35 -0500 Subject: [PATCH 26/60] cleanup --- .../main/java/org/clas/dc/alignment/Fitter.java | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java index 65ca522..3961ce6 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Fitter.java @@ -203,20 +203,7 @@ public void fit(String options){ MnUserParameters upar = new MnUserParameters(); - if(options.contains("G")) { for(int loop = 0; loop < pars.length; loop++){ - UserParameter par = this.pars[loop%6]; - upar.add(par.name(),par.value(),par.getStep()); - if(par.getStep()=3){ - upar.fix(par.name()); - } - if(par.min()>-1e9&&par.max()<1e9){ - upar.setLimits(par.name(), par.min(), par.max()); - } - } - } - else { - for(int loop = 0; loop < pars.length; loop++){ UserParameter par = this.pars[loop]; upar.add(par.name(),par.value(),par.getStep()); if(par.getStep() Date: Tue, 27 Feb 2024 16:58:23 -0500 Subject: [PATCH 27/60] increased R3 residual error by x2 and added alpha plots --- .../java/org/clas/dc/alignment/Histo.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 645fbf2..32c4d65 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -39,6 +39,7 @@ public class Histo { private DataGroup binning = null; private DataGroup offset = null; private DataGroup calib = null; + private DataGroup alpha = null; private DataGroup[] wires = null; private DataGroup[][][] residuals = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][][] time = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers @@ -137,6 +138,7 @@ private void createHistos(String optStats) { } this.calib = new DataGroup(nSector, nSLayer); + this.alpha = new DataGroup(nSector, nSLayer); for(int is=0; is getHits(Event event, int sector, int tid) { hitBank.getInt("sector", i) == sector) { double residual = 10000 * hitBank.getFloat("fitResidual", i); double time = 10000 * hitBank.getFloat("timeResidual", i); + double alpha = hitBank.getFloat("Alpha", i); int superlayer = hitBank.getInt("superlayer", i); int layer = hitBank.getInt("layer", i) + 6 * (superlayer - 1); int wire = hitBank.getInt("wire", i); int status = hitBank.getInt("status", i); - Hit hit = new Hit(sector, layer, wire, residual, time, status); + Hit hit = new Hit(sector, layer, wire, residual, time, alpha, status); hits.add(hit); } } @@ -554,7 +564,10 @@ public void analyzeHisto(int fit, int vertexFit) { if(Histo.fitResiduals(fit, hres)) { this.parValues[is][it][ip][l] = hres.getFunction().getParameter(1); this.parErrors[is][it][ip][l] = hres.getFunction().parameter(1).error(); - if(!shift) this.parErrors[is][it][ip][l] = Math.max(this.parErrors[is][it][ip][l],(Constants.RESMAX-Constants.RESMIN)/Constants.RESBINS/2); + if(!shift) { + this.parErrors[is][it][ip][l] = Math.max(this.parErrors[is][it][ip][l],(Constants.RESMAX-Constants.RESMIN)/Constants.RESBINS/2); + if(l>24) this.parErrors[is][it][ip][l] *= 2; + } } System.out.print("\r"); } @@ -670,8 +683,9 @@ public EmbeddedCanvasTabbed getElectronPlots() { } public EmbeddedCanvasTabbed plotHistos() { - EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration"); + EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration", "Alpha"); canvas.getCanvas("Calibration").draw(calib); + canvas.getCanvas("Alpha").draw(alpha); if(tres) { for(int is=0; is Date: Tue, 27 Feb 2024 17:35:01 -0500 Subject: [PATCH 28/60] changed alpha to reducedalpha --- .../src/main/java/org/clas/dc/alignment/Histo.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 32c4d65..c41e265 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -162,7 +162,7 @@ private void createHistos(String optStats) { hi_time.setTitleY("Counts"); hi_time.setOptStat(optStats); this.calib.addDataSet(hi_time, is+isl*nSector); - H2F hi_alpha = new H2F("hi-SL" + superlayer + "_S" + sector, "SL " + superlayer + " Sector " + sector, nbinsRes, minRes, maxRes, 100, -35, 35); + H2F hi_alpha = new H2F("hi-SL" + superlayer + "_S" + sector, "SL " + superlayer + " Sector " + sector, nbinsRes, minRes, maxRes, 100, 0, 36); hi_alpha.setTitleX("Residuals (um)"); hi_alpha.setTitleY("Wire"); this.alpha.addDataSet(hi_alpha, is+isl*nSector); @@ -273,8 +273,13 @@ public Hit(int sector, int layer, int wire, double residual, double time, double this.superlayer = (layer-1)/6 +1; this.residual = residual; this.time = time; - this.alpha = alpha; this.status = status; + + this.alpha = Math.abs(alpha); + if(this.alpha>60) + this.alpha = this.alpha%60; + if(this.alpha>30) + this.alpha = 60-this.alpha; } public boolean equals(Hit h) { From bf68dafab9d1f1c706787ba6e27a391e0e7872bd Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Thu, 29 Feb 2024 18:13:01 -0500 Subject: [PATCH 29/60] fix to global transformation handling and more time plots --- .../java/org/clas/dc/alignment/Alignment.java | 13 +++-- .../java/org/clas/dc/alignment/Histo.java | 54 ++++++++++++------- .../java/org/clas/dc/alignment/Table.java | 28 +++++----- 3 files changed, 58 insertions(+), 37 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 108ba9c..be598cc 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -816,9 +816,16 @@ public Table getGlobalOffsets(Table table) { pars[(refRegion-1)*6+1].value(), pars[(refRegion-1)*6+2].value()); for(int ir=0; ir60) - this.alpha = this.alpha%60; - if(this.alpha>30) - this.alpha = 60-this.alpha; } public boolean equals(Hit h) { @@ -343,9 +346,11 @@ private int getElectronIndex(Event event) { trackBank!= null && trackBank.getRows()>0) { for(int loop=0; loop getHits(Event event, int sector, int tid) { double residual = 10000 * hitBank.getFloat("fitResidual", i); double time = 10000 * hitBank.getFloat("timeResidual", i); double alpha = hitBank.getFloat("Alpha", i); + double doca = hitBank.getFloat("doca", i); int superlayer = hitBank.getInt("superlayer", i); int layer = hitBank.getInt("layer", i) + 6 * (superlayer - 1); int wire = hitBank.getInt("wire", i); int status = hitBank.getInt("status", i); - Hit hit = new Hit(sector, layer, wire, residual, time, alpha, status); + Hit hit = new Hit(sector, layer, wire, residual, time, doca, alpha, status); hits.add(hit); } } @@ -571,7 +580,7 @@ public void analyzeHisto(int fit, int vertexFit) { this.parErrors[is][it][ip][l] = hres.getFunction().parameter(1).error(); if(!shift) { this.parErrors[is][it][ip][l] = Math.max(this.parErrors[is][it][ip][l],(Constants.RESMAX-Constants.RESMIN)/Constants.RESBINS/2); - if(l>24) this.parErrors[is][it][ip][l] *= 2; +// if(l>24) this.parErrors[is][it][ip][l] *= 2; } } System.out.print("\r"); @@ -688,9 +697,10 @@ public EmbeddedCanvasTabbed getElectronPlots() { } public EmbeddedCanvasTabbed plotHistos() { - EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration", "Alpha"); + EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration", "Alpha", "Doca"); canvas.getCanvas("Calibration").draw(calib); canvas.getCanvas("Alpha").draw(alpha); + canvas.getCanvas("Doca").draw(doca); if(tres) { for(int is=0; is Date: Sat, 2 Mar 2024 16:12:06 -0500 Subject: [PATCH 30/60] more plots and improved fitting --- dc/utilities/kinematics.groovy | 144 +++++++++++++++++++++++++++------ 1 file changed, 120 insertions(+), 24 deletions(-) diff --git a/dc/utilities/kinematics.groovy b/dc/utilities/kinematics.groovy index faa8580..3760f12 100644 --- a/dc/utilities/kinematics.groovy +++ b/dc/utilities/kinematics.groovy @@ -4,12 +4,15 @@ import java.io.File; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.JFrame; import org.jlab.clas.pdg.PhysicsConstants; import org.jlab.clas.physics.LorentzVector; import org.jlab.clas.physics.Particle; import org.jlab.clas.physics.PhysicsEvent; import org.jlab.groot.base.GStyle; +import org.jlab.groot.data.DataLine; import org.jlab.groot.data.H1F; import org.jlab.groot.data.H2F; import org.jlab.groot.data.IDataSet; @@ -33,6 +36,9 @@ import org.jlab.jnp.utils.options.OptionStore; public class Kinematics { private double ebeam = 10.6; + private double targetPos = -3.5; + private double targetLength = 5; + private double scWindow = 27+targetPos; private String fontName = "Arial"; private File lundfile = null; @@ -60,7 +66,7 @@ public class Kinematics { public double getMaxW() { double maxW = ebeam*0.4+0.6; - if(ebeam>6) maxW = 4.5; + if(ebeam>6.5) maxW = 4.5; return maxW; } @@ -82,10 +88,10 @@ public class Kinematics { public void createHistos() { // General - H2F hi_q2w = new H2F("hi_q2w","hi_q2w",100, 0.6, this.getMaxW(), 100, 0.5, this.getMaxQ2()); + H2F hi_q2w = new H2F("hi_q2w","hi_q2w",100, 0.6, this.getMaxW(), 100, 0.0, this.getMaxQ2()); hi_q2w.setTitleX("W (GeV)"); hi_q2w.setTitleY("Q2 (GeV2)"); - H1F hi_w = new H1F("hi_w","hi_w",250, 0.6, this.getMaxW()); + H1F hi_w = new H1F("hi_w","hi_w",500, 0.6, this.getMaxW()); hi_w.setTitleX("W (GeV)"); hi_w.setTitleY("Counts"); H2F hi_w_phi = new H2F("hi_w_phi","hi_w_phi",100, -180.0, 180.0, 250, 0.6, this.getMaxW()); @@ -112,10 +118,47 @@ public class Kinematics { dg_general.addDataSet(hi_w_phi, 4); dg_general.addDataSet(hi_z_phi, 5); histos.put("General", dg_general); + // Elastic + H1F hi_ela = new H1F("hi_w","hi_w",500, 0.6, 1.3); + hi_ela.setTitleX("W (GeV)"); + hi_ela.setTitleY("Counts"); + H2F hi_ela_phi = new H2F("hi_w_phi","hi_w_phi",100, -180.0, 180.0, 250, 0.6, 1.3); + hi_ela_phi.setTitleX("#phi (deg)"); + hi_ela_phi.setTitleY("W (GeV)"); + H2F hi_ela_theta = new H2F("hi_w_theta","hi_w_theta",100, 5.0, 15.0, 250, 0.6, 1.3); + hi_ela_theta.setTitleX("#theta (deg)"); + hi_ela_theta.setTitleY("W (GeV)"); + H2F hi_ela_p = new H2F("hi_w_p","hi_w_p",100, ebeam*0.8, ebeam, 100, 0.6, 1.3); + hi_ela_p.setTitleX("p (GeV)"); + hi_ela_p.setTitleY("W (GeV)"); + hi_ela_p.setTitle("Electron"); + DataGroup dg_elastic = new DataGroup(2,2); + dg_elastic.addDataSet(hi_ela, 0); + dg_elastic.addDataSet(hi_ela_p, 1); + dg_elastic.addDataSet(hi_ela_theta, 2); + dg_elastic.addDataSet(hi_ela_phi, 3); + histos.put("Elastic", dg_elastic); + // vertex + String[] names= ["pi+", "pi-", "el"]; + DataGroup dg_vertex = new DataGroup(3, 4); + for(int i=0; i1) rmin = -1; + double rmin = 0.5; + double rmax = 2; + if(i>1) rmin = -0.5; H1F hi_mmass = new H1F("mxt" + i, "", 200, rmin, rmax); hi_mmass.setTitleX(a2pimx[i-1]); hi_mmass.setTitleY("Counts"); @@ -153,14 +196,14 @@ public class Kinematics { DataGroup dg_1pi = new DataGroup(2,2); String[] atitle = ["M_X(ep#rarrow e'^#pi+X) (GeV)","M_^X2(ep#rarrow e'pX) (Ge^V2)"]; for(int i=1; i<=2; i++) { - double rmin = 0; - double rmax = 3; - if(i>1) rmin = -1; + double rmin = 0.5; + double rmax = 2; + if(i>1) rmin = -0.5; H2F hi_mw = new H2F("W" + i, "", 100, -180, 180, 100, rmin, rmax); hi_mw.setTitleX("W (GeV)"); hi_mw.setTitleY(atitle[i-1]); // hi_w.setLineColor(col); - H1F hi_mmass = new H1F("mxt" + i, "", 200, rmin, rmax); + H1F hi_mmass = new H1F("mxt" + i, "", 400, rmin, rmax); hi_mmass.setTitleX(atitle[i-1]); hi_mmass.setTitleY("Counts"); // hi_mmass.setLineColor(col); @@ -274,7 +317,7 @@ public class Kinematics { if(track.getShort("pindex", j)==loop) recEl.setProperty("sector", (double) track.getByte("sector", j)); } } - else if(bank.getInt("charge", loop)!=0 && status==2 && Math.abs(bank.getFloat("vz", loop)+3)<10 && Math.abs(bank.getFloat("chi2pid",loop))<5) { + else if(bank.getInt("charge", loop)!=0 && status==2 && Math.abs(bank.getFloat("vz", loop)+3)<30 && Math.abs(bank.getFloat("chi2pid",loop))<5) { Particle part = new Particle( bank.getInt("pid", loop), bank.getFloat("px", loop), @@ -315,7 +358,15 @@ public class Kinematics { histos.get("General").getH2F("hi_w_phi").fill(Math.toDegrees(recEl.phi()), hadronSystem.mass()); histos.get("General").getH2F("hi_w_theta").fill(Math.toDegrees(recEl.theta()), hadronSystem.mass()); histos.get("General").getH2F("hi_el").fill(recEl.p(),Math.toDegrees(recEl.theta())); + histos.get("Elastic").getH1F("hi_w").fill(hadronSystem.mass()); + histos.get("Elastic").getH2F("hi_w_phi").fill(Math.toDegrees(recEl.phi()), hadronSystem.mass()); + histos.get("Elastic").getH2F("hi_w_theta").fill(Math.toDegrees(recEl.theta()), hadronSystem.mass()); + histos.get("Elastic").getH2F("hi_w_p").fill(recEl.p(),hadronSystem.mass()); histos.get("W").getH1F("hi_w_" + secEl).fill(hadronSystem.mass()); + histos.get("Vertex").getH1F("h1_vz_el").fill(recEl.vz()); + histos.get("Vertex").getH2F("h2_theta_el").fill(recEl.vz(), Math.toDegrees(recEl.theta())); + histos.get("Vertex").getH2F("h2_phi_el").fill(recEl.vz()), Math.toDegrees(recEl.phi()); + histos.get("Vertex").getH2F("h2_p_el").fill(recEl.vz(), recEl.p()); } if(hadronSystem.mass()<1.1) { if(recPr != null) { @@ -341,6 +392,18 @@ public class Kinematics { } } } + if(recPip!=null) { + histos.get("Vertex").getH1F("h1_vz_pi+").fill(recPip.vz()); + histos.get("Vertex").getH2F("h2_theta_pi+").fill(recPip.vz(), Math.toDegrees(recPip.theta())); + histos.get("Vertex").getH2F("h2_phi_pi+").fill(recPip.vz(), Math.toDegrees(recPip.phi())); + histos.get("Vertex").getH2F("h2_p_pi+").fill(recPip.vz(), recPip.p()); + } + if(recPim!=null) { + histos.get("Vertex").getH1F("h1_vz_pi-").fill(recPim.vz()); + histos.get("Vertex").getH2F("h2_theta_pi-").fill(recPim.vz(), Math.toDegrees(recPim.theta())); + histos.get("Vertex").getH2F("h2_phi_pi-").fill(recPim.vz(), Math.toDegrees(recPim.phi())); + histos.get("Vertex").getH2F("h2_p_pi-").fill(recPim.vz(), recPim.p()); + } } if(recEl!=null && recPip!=null && recPim!=null) { recPro = new Particle(); @@ -412,11 +475,17 @@ public class Kinematics { } public void analyzeHistos() { - fitW(histos.get("General").getH1F("hi_w")); - fitW(histos.get("2pi").getH1F("mxt1")); - fitW(histos.get("1pi").getH1F("mxt1")); + Logger.getLogger("org.freehep.math.minuit").setLevel(Level.WARNING); + + fitW(histos.get("General").getH1F("hi_w"), 0.8, 1.1); + fitW(histos.get("Elastic").getH1F("hi_w")), 0.8, 1.1; + fitW(histos.get("2pi").getH1F("mxt1"), 0.8, 1.1); + fitW(histos.get("2pi").getH1F("mxt2"), -0.1, 0.2); + fitW(histos.get("2pi").getH1F("mxt3"), -0.1, 0.2); + fitW(histos.get("1pi").getH1F("mxt1"), 0.8, 1.1); + fitW(histos.get("1pi").getH1F("mxt2"), -0.1, 0.2); for(int sector=1; sector <= 6; sector++) { - fitW(histos.get("W").getH1F("hi_w_" + sector)); + fitW(histos.get("W").getH1F("hi_w_" + sector), 0.8, 1.1); fitGauss(histos.get("Phi").getH1F("hi_dphi_" + sector)); fitGauss(histos.get("Beam").getH1F("hi_beam_" + sector)); } @@ -451,6 +520,29 @@ public class Kinematics { } } } + for(EmbeddedPad pad : canvas.getCanvas("Vertex").getCanvasPads()) { + IDataSet ds = pad.getDatasetPlotters().get(0).getDataSet(); + if(ds instanceof H2F) { + pad.getAxisZ().setLog(true); + DataLine lineU = new DataLine(targetPos-targetLength/2,((H2F) ds).getYAxis().min(),targetPos-targetLength/2,((H2F) ds).getYAxis().max()); + DataLine lineD = new DataLine(targetPos+targetLength/2,((H2F) ds).getYAxis().min(),targetPos+targetLength/2,((H2F) ds).getYAxis().max()); + DataLine lineX = new DataLine(scWindow,((H2F) ds).getYAxis().min(),scWindow,((H2F) ds).getYAxis().max()); + pad.draw(lineU); + pad.draw(lineD); + pad.draw(lineX); + } + else if(ds instanceof H1F) { + DataLine lineU = new DataLine(targetPos-targetLength/2,0,targetPos-targetLength/2,((H1F) ds).getMax()); + DataLine lineD = new DataLine(targetPos+targetLength/2,0,targetPos+targetLength/2,((H1F) ds).getMax()); + DataLine lineX = new DataLine(scWindow,0,scWindow,((H1F) ds).getMax()); + lineU.setLineColor(2); + lineD.setLineColor(2); + lineX.setLineColor(2); + pad.draw(lineU); + pad.draw(lineD); + pad.draw(lineX); + } + } return canvas; } @@ -498,12 +590,12 @@ public class Kinematics { } } - private void fitW(H1F hiw) { + private void fitW(H1F hiw, double min, double max) { - F1D f1w = new F1D("f1_w", "[amp]*gaus(x,[mean],[sigma])", 0.8, 1.1); + F1D f1w = new F1D("f1_w", "[amp]*gaus(x,[mean],[sigma])", min, max); // get histogram maximum in the rane 0.7-1.1 - int i1=hiw.getXaxis().getBin(0.7); - int i2=hiw.getXaxis().getBin(1.1); + int i1=hiw.getXaxis().getBin(min); + int i2=hiw.getXaxis().getBin(max); double hiMax=0; int imax=i1; for(int i=i1; i<=i2; i++) { @@ -533,13 +625,17 @@ public class Kinematics { amp = f1w.getParameter(0); mean = f1w.getParameter(1); sigma = f1w.getParameter(2); - rmax = mean + 4.0 * Math.abs(sigma); - rmin = mean - 4.0 * Math.abs(sigma); + rmax = mean + 5.0 * Math.abs(sigma); + rmin = mean - 6.0 * Math.abs(sigma); hiw.setFunction(null); - f1w = new F1D("f1_w", "[amp]*gaus(x,[mean],[sigma])+[p0]+[p1]*x", rmin, rmax); +// f1w = new F1D("f1_w", "[amp]*gaus(x,[mean],[sigma])+[p0]+[p1]*x+[p2]*x*x", rmin, rmax); + f1w = new F1D("f1_w", "[amp]*gaus(x,[mean],[sigma])+[amp1]*gaus(x,[mean1],[sigma1])", rmin, rmax); f1w.setParameter(0, amp); f1w.setParameter(1, mean); f1w.setParameter(2, sigma); + f1w.setParameter(3, amp*0.3); + f1w.setParameter(4, mean+0.1); + f1w.setParameter(5, sigma*10); f1w.setLineColor(2); f1w.setLineWidth(2); f1w.setOptStat("1111"); From 7420fa8190b8295b8c1099a1d8e02aff0038bb77 Mon Sep 17 00:00:00 2001 From: raffaelladevita Date: Fri, 8 Mar 2024 10:37:20 -0500 Subject: [PATCH 31/60] improved DC skimming scripts --- dc/utilities/createSkims.csh | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/dc/utilities/createSkims.csh b/dc/utilities/createSkims.csh index bafb549..b9fb2b8 100755 --- a/dc/utilities/createSkims.csh +++ b/dc/utilities/createSkims.csh @@ -2,43 +2,51 @@ # $1 = cooked files directory # $2 = output skims directory +# $3 = list of variations -if ( $#argv < 0 || $#argv > 2) then +if ( $#argv < 0 || $#argv > 3) then - echo "Usage: createSkims.sh []" + echo "Usage: createSkims.sh [] []" exit 0 endif set indir = $1 if ($#argv >= 2) then -set outdir = $2 + set outdir = $2 else set outdir = $1 endif mkdir -p $outdir/skims +if ( $#argv >= 3) then + set vars = "$3" +else + set vars = "r0 r1_x r1_y r1_z r1_cy r1_cz r2_x r2_y r2_z r2_cy r2_cz r3_x r3_y r3_z r3_cy r3_cz" +endif set schema = `ls $indir/r0` echo echo reading input files from $indir with subdirectory $schema -echo writing skims to $outdir/skims +echo writing skims to $outdir/skims for variations $vars echo -foreach var ( r0 r1_x r1_y r1_z r1_cy r1_cz r2_x r2_y r2_z r2_cy r2_cz r3_x r3_y r3_z r3_cy r3_cz ) +foreach var ( $vars ) +#r0 r1_x r1_y r1_z r1_cy r1_cz r2_x r2_y r2_z r2_cy r2_cz r3_x r3_y r3_z r3_cy r3_cz ) set vardir = $indir/$var/$schema/recon - if(`filetest -d $vardir` == 1 && `ls $vardir | wc -l` > 0) then + if(`filetest -d $vardir` == 1 && `find $vardir -type d | wc -l` > 0) then echo echo found variation $var mkdir -p $outdir/skims/$var - foreach rundir (`ls -d $vardir/*/`) - set run = `echo $rundir | rev | awk -F"/" '{print$1}' | rev` - hipo-utils -reduce -ct "REC::Particle://beta>0[GT]0,REC::Cherenkov://nphe>2[GT]0,REC::Calorimeter://energy>0[GT]0,TimeBasedTrkg::TBTracks://Vtx0_z>-15&&Vtx0_z<35[GT]0" -r "TimeBasedTrkg::TBHits://trkID>0" -b "RUN::config,REC::Particle,REC::Cherenkov,REC::Calorimeter,REC::Track,TimeBasedTrkg::TBTracks,TimeBasedTrkg::TBHits" -merge -o $outdir/skims/$var/$var"_clas_"$run".hipo" $vardir/$run/* + foreach rundir (`find $vardir/* -type d`) + echo skimming files in $rundir + set run = `echo $rundir | rev | awk -F"/" '{print$1}' | rev` + hipo-utils -reduce -ct "REC::Particle://beta>0[GT]0,REC::Cherenkov://nphe>2[GT]0,REC::Calorimeter://energy>0[GT]0,TimeBasedTrkg::TBTracks://Vtx0_z>-15&&Vtx0_z<35[GT]0" -r "TimeBasedTrkg::TBHits://trkID>0" -b "RUN::config,REC::Particle,REC::Cherenkov,REC::Calorimeter,REC::Track,TimeBasedTrkg::TBTracks,TimeBasedTrkg::TBHits" -merge -o $outdir/skims/$var/$var"_clas_"$run".hipo" $rundir/\* end endif From 3335dc9181e641ad5507d7019f576c8976822962 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 8 Mar 2024 12:59:50 -0500 Subject: [PATCH 32/60] restoring time residual bins for angular bins --- .../src/main/java/org/clas/dc/alignment/Histo.java | 6 ++---- dc/utilities/kinematics.groovy | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 27eef60..37230e3 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -476,11 +476,9 @@ private void processEvent(Event event, Event shifted) { this.calib.getH1F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time); this.alpha.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time, hit.alpha); this.doca.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time, hit.doca); - if(tres) { - this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); - this.time[sector - 1][it][ip].getH1F("hi-L" + hit.layer).fill(hit.time); - } + if(tres) this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); } + if(tres) this.time[sector - 1][it][ip].getH1F("hi-L" + hit.layer).fill(hit.time); } this.vertex[it][ip].getH1F("hi-S" + sector).fill(vz); diff --git a/dc/utilities/kinematics.groovy b/dc/utilities/kinematics.groovy index 3760f12..4e46bd1 100644 --- a/dc/utilities/kinematics.groovy +++ b/dc/utilities/kinematics.groovy @@ -625,8 +625,8 @@ public class Kinematics { amp = f1w.getParameter(0); mean = f1w.getParameter(1); sigma = f1w.getParameter(2); - rmax = mean + 5.0 * Math.abs(sigma); - rmin = mean - 6.0 * Math.abs(sigma); + rmax = mean + 6.0 * Math.abs(sigma); + rmin = mean - 7.0 * Math.abs(sigma); hiw.setFunction(null); // f1w = new F1D("f1_w", "[amp]*gaus(x,[mean],[sigma])+[p0]+[p1]*x+[p2]*x*x", rmin, rmax); f1w = new F1D("f1_w", "[amp]*gaus(x,[mean],[sigma])+[amp1]*gaus(x,[mean1],[sigma1])", rmin, rmax); From b66da5772a670fcc3f50d8d58e808ee9e07096f5 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 22 Mar 2024 12:02:10 -0400 Subject: [PATCH 33/60] adding doca cuts --- .../java/org/clas/dc/alignment/Alignment.java | 5 +++++ .../java/org/clas/dc/alignment/Constants.java | 3 +++ .../main/java/org/clas/dc/alignment/Histo.java | 15 +++++++++------ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index be598cc..ff10a66 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -81,6 +81,11 @@ public Alignment() { private void initConstants(int run, String initVariation, String previousVariation, String compareVariation) { ConstantProvider provider = GeometryFactory.getConstants(DetectorType.DC, 11, "default"); dcDetector = new DCGeant4Factory(provider, DCGeant4Factory.MINISTAGGERON, false); + for(int isl=0; isl getHits(Event event, int sector, int tid) { if(hitBank!=null && hitBank.getRows()>0) { for (int i = 0; i < hitBank.getRows(); i++) { - if ((/*tid<0 ||*/ hitBank.getInt("trkID", i) == tid) && - hitBank.getInt("status", i) == 0 && - hitBank.getInt("sector", i) == sector) { + if ((/*tid<0 ||*/ hitBank.getInt("trkID", i) == tid)) { double residual = 10000 * hitBank.getFloat("fitResidual", i); double time = 10000 * hitBank.getFloat("timeResidual", i); double alpha = hitBank.getFloat("Alpha", i); @@ -509,8 +507,13 @@ private List getHits(Event event, int sector, int tid) { int layer = hitBank.getInt("layer", i) + 6 * (superlayer - 1); int wire = hitBank.getInt("wire", i); int status = hitBank.getInt("status", i); - Hit hit = new Hit(sector, layer, wire, residual, time, doca, alpha, status); - hits.add(hit); + if( status==0 && + doca>Constants.DOCAMIN[superlayer-1] && + doca Date: Fri, 22 Mar 2024 14:29:08 -0400 Subject: [PATCH 34/60] improving hit selection --- .../java/org/clas/dc/alignment/Histo.java | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index bea7e14..76a7a28 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -1,7 +1,9 @@ package org.clas.dc.alignment; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import org.jlab.clas.physics.Particle; @@ -164,9 +166,9 @@ private void createHistos(String optStats) { hi_time.setTitleY("Counts"); hi_time.setOptStat(optStats); this.calib.addDataSet(hi_time, is+isl*nSector); - H2F hi_alpha = new H2F("hi-SL" + superlayer + "_S" + sector, "SL " + superlayer + " Sector " + sector, nbinsRes, minRes, maxRes, 100, -30, 30); - hi_alpha.setTitleX("Residuals (um)"); - hi_alpha.setTitleY("#alpha"); + H2F hi_alpha = new H2F("hi-SL" + superlayer + "_S" + sector, "SL " + superlayer + " Sector " + sector, 100, -30, 30, 100, -30, 30); + hi_alpha.setTitleX("#theta-25 (deg)"); + hi_alpha.setTitleY("#alpha (deg)"); this.alpha.addDataSet(hi_alpha, is+isl*nSector); H2F hi_doca = new H2F("hi-SL" + superlayer + "_S" + sector, "SL " + superlayer + " Sector " + sector, nbinsRes, minRes, maxRes, 100, 0, Constants.WPDIST[isl]); hi_doca.setTitleX("Residuals (um)"); @@ -474,7 +476,7 @@ private void processEvent(Event event, Event shifted) { this.residuals[sector - 1][it][ip].getH1F("hi-L" + hit.layer).fill(hit.residual); if(it==0 && ip==0) { this.calib.getH1F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time); - this.alpha.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time, hit.alpha); + this.alpha.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(Math.toDegrees(electron.theta())-Constants.THTHILT, hit.alpha); this.doca.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time, hit.doca); if(tres) this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); } @@ -490,7 +492,8 @@ private void processEvent(Event event, Event shifted) { } } - private List getHits(Event event, int sector, int tid) { + private List getHits(Event event, int sec, int tid) { + Map> allhits = new HashMap<>(); List hits = new ArrayList<>(); Bank hitBank = new Bank(schema.getSchema("TimeBasedTrkg::TBHits")); @@ -503,16 +506,26 @@ private List getHits(Event event, int sector, int tid) { double time = 10000 * hitBank.getFloat("timeResidual", i); double alpha = hitBank.getFloat("Alpha", i); double doca = hitBank.getFloat("doca", i); + int sector = hitBank.getInt("sector", i); int superlayer = hitBank.getInt("superlayer", i); int layer = hitBank.getInt("layer", i) + 6 * (superlayer - 1); int wire = hitBank.getInt("wire", i); int status = hitBank.getInt("status", i); - if( status==0 && - doca>Constants.DOCAMIN[superlayer-1] && - doca()); + allhits.get(superlayer).add(hit); + } + } + for(int sl : allhits.keySet()) { + if(allhits.get(sl).size()>4) { + for(Hit h : allhits.get(sl)) { + if( h.status==0 && + h.doca>Constants.DOCAMIN[sl-1] && + h.doca Date: Fri, 22 Mar 2024 16:40:11 -0400 Subject: [PATCH 35/60] added alpha cuts on hits and double gaussian fit of residuals --- .../java/org/clas/dc/alignment/Alignment.java | 2 +- .../java/org/clas/dc/alignment/Constants.java | 4 ++ .../java/org/clas/dc/alignment/Histo.java | 38 ++++++++++++++----- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index ff10a66..d6b1813 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -982,7 +982,7 @@ public static void main(String[] args){ parser.getOptionParser("-process").addOption("-phi" , "-30:0:30", "phi bin limits, e.g. \"-30:-10:0:10:30\""); parser.getOptionParser("-process").addOption("-shifts" , "0", "use event-by-event subtraction for unit shifts (1=on, 0=off)"); parser.getOptionParser("-process").addOption("-time" , "0", "make time residual histograms (1=true, 0=false)"); - parser.getOptionParser("-process").addOption("-residuals", "2", "fit residuals (2) or use mean (1)"); + parser.getOptionParser("-process").addOption("-residuals", "2", "fit residuals with double gaussian (2), single gaussian (1), or use mean (0)"); parser.getOptionParser("-process").addOption("-vertfit" , "5", "fit vertex plots with:\n" + "\t\t- RG-D layout (7), new cryotarget, \n" + "\t\t- RG-C layout (6),\n" + diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java index 489df70..37b8672 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java @@ -15,8 +15,12 @@ public class Constants { public static double THTHILT = 25; public static int NTARGET = 3; public static double[] WPDIST = new double[NSUPERLAYER]; + + // hit cuts public static double[] DOCAMIN = new double[NSUPERLAYER]; public static double[] DOCAMAX = new double[NSUPERLAYER]; + public static double ALPHACUT = 5; + public static int CLUSMIN = 5; // electron cuts public static double NPHEMIN = 2; diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 76a7a28..2ddd8d1 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -166,7 +166,7 @@ private void createHistos(String optStats) { hi_time.setTitleY("Counts"); hi_time.setOptStat(optStats); this.calib.addDataSet(hi_time, is+isl*nSector); - H2F hi_alpha = new H2F("hi-SL" + superlayer + "_S" + sector, "SL " + superlayer + " Sector " + sector, 100, -30, 30, 100, -30, 30); + H2F hi_alpha = new H2F("hi-SL" + superlayer + "_S" + sector, "SL " + superlayer + " Sector " + sector, 100, -25, 10, 100, -25, 10); hi_alpha.setTitleX("#theta-25 (deg)"); hi_alpha.setTitleY("#alpha (deg)"); this.alpha.addDataSet(hi_alpha, is+isl*nSector); @@ -450,13 +450,13 @@ private void processEvent(Event event, Event shifted) { double vz = electron.vz(); int sector = electron.sector(); - List hits = this.getHits(event, sector, electron.id()); + List hits = this.getHits(event, electron); if(shifted!=null) { Electron shiftedElectron = this.getElectron(shifted); if(shiftedElectron!=null) { vz -= shiftedElectron.vz(); - List shiftedHits = this.getHits(shifted, sector, shiftedElectron.id()); + List shiftedHits = this.getHits(shifted, shiftedElectron); for(Hit hit : hits) { for(Hit shift : shiftedHits) { if(hit.equals(shift)) { @@ -492,7 +492,7 @@ private void processEvent(Event event, Event shifted) { } } - private List getHits(Event event, int sec, int tid) { + private List getHits(Event event, Electron e) { Map> allhits = new HashMap<>(); List hits = new ArrayList<>(); @@ -501,7 +501,7 @@ private List getHits(Event event, int sec, int tid) { if(hitBank!=null && hitBank.getRows()>0) { for (int i = 0; i < hitBank.getRows(); i++) { - if ((/*tid<0 ||*/ hitBank.getInt("trkID", i) == tid)) { + if ((/*tid<0 ||*/ hitBank.getInt("trkID", i) == e.id())) { double residual = 10000 * hitBank.getFloat("fitResidual", i); double time = 10000 * hitBank.getFloat("timeResidual", i); double alpha = hitBank.getFloat("Alpha", i); @@ -518,12 +518,13 @@ private List getHits(Event event, int sec, int tid) { } } for(int sl : allhits.keySet()) { - if(allhits.get(sl).size()>4) { + if(allhits.get(sl).size()>=Constants.CLUSMIN) { for(Hit h : allhits.get(sl)) { if( h.status==0 && h.doca>Constants.DOCAMIN[sl-1] && h.doca0) { f1.setParLimits(0, amp*0.2, amp*1.2); f1.setParLimits(1, mean*0.5, mean*1.5); f1.setParLimits(2, sigma*0.2, sigma*2); @@ -839,6 +840,25 @@ else if(fit==2) { f1.setParLimits(2, 0, sigma*2); f1.setRange(mean-2.0*sigma,mean+2.0*sigma); DataFitter.fit(f1, histo, "Q"); + if(fit==2) { + amp = f1.getParameter(0); + mean = f1.getParameter(1); + sigma = f1.getParameter(2); + f1 = new F1D("f"+histo.getName(),"[amp]*gaus(x,[mean],[sigma])+[amp1]*gaus(x,[mean1],[sigma1])", mean-5*sigma, mean+5*sigma); + f1.setLineColor(2); + f1.setLineWidth(2); + f1.setOptStat("1111111"); + f1.setParameter(0, amp); + f1.setParameter(1, mean); + f1.setParameter(2, sigma); + f1.setParameter(3, 0); + f1.setParameter(4, mean); + f1.setParameter(5, sigma*5); + f1.setParLimits(0, amp*0.8, amp*1.2); + f1.setParLimits(1, mean-sigma, mean+sigma); + f1.setParLimits(2, sigma*0.8, sigma*1.2); + DataFitter.fit(f1, histo, "Q"); + } } else if(histo.getFunction()!=null) { histo.getFunction().setFitValid(true); From a7d313a9e2c7b832d50a5b715adc4406870cb119 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 22 Mar 2024 18:16:50 -0400 Subject: [PATCH 36/60] improving hit selection again --- .../src/main/java/org/clas/dc/alignment/Alignment.java | 2 +- .../src/main/java/org/clas/dc/alignment/Constants.java | 2 +- .../src/main/java/org/clas/dc/alignment/Histo.java | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index d6b1813..41c1b09 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -84,7 +84,7 @@ private void initConstants(int run, String initVariation, String previousVariati for(int isl=0; isl0) { f1.setParameter(3, 0); f1.setParameter(4, mean); f1.setParameter(5, sigma*5); - f1.setParLimits(0, amp*0.8, amp*1.2); + f1.setParLimits(0, 0, 2*amp); f1.setParLimits(1, mean-sigma, mean+sigma); - f1.setParLimits(2, sigma*0.8, sigma*1.2); + f1.setParLimits(2, 0, sigma*2); DataFitter.fit(f1, histo, "Q"); } } From 967a9180ae9fb589236c71c928e08ca28105b6d9 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Mon, 25 Mar 2024 13:28:08 -0400 Subject: [PATCH 37/60] redo failed fits --- .../java/org/clas/dc/alignment/Histo.java | 56 ++++++++++++++----- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index e32e584..a78efa4 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -844,20 +844,37 @@ else if(fit>0) { amp = f1.getParameter(0); mean = f1.getParameter(1); sigma = f1.getParameter(2); - f1 = new F1D("f"+histo.getName(),"[amp]*gaus(x,[mean],[sigma])+[amp1]*gaus(x,[mean1],[sigma1])", mean-5*sigma, mean+5*sigma); - f1.setLineColor(2); - f1.setLineWidth(2); - f1.setOptStat("1111111"); - f1.setParameter(0, amp); - f1.setParameter(1, mean); - f1.setParameter(2, sigma); - f1.setParameter(3, 0); - f1.setParameter(4, mean); - f1.setParameter(5, sigma*5); - f1.setParLimits(0, 0, 2*amp); - f1.setParLimits(1, mean-sigma, mean+sigma); - f1.setParLimits(2, 0, sigma*2); - DataFitter.fit(f1, histo, "Q"); + double amp1 = Math.max(Histo.getValueAt(histo, mean-3*sigma), Histo.getValueAt(histo, mean+3*sigma)); + if(amp1>5 && amp1>0.05*amp) { + F1D f2 = new F1D("f"+histo.getName(),"[amp]*gaus(x,[mean],[sigma])+[amp1]*gaus(x,[mean1],[sigma1])", mean-8*sigma, mean+8*sigma); + f2.setLineColor(2); + f2.setLineWidth(2); + f2.setOptStat("11111111"); + f2.setParameter(0, amp); + f2.setParameter(1, mean); + f2.setParameter(2, sigma); + f2.setParameter(3, amp1); + f2.setParameter(4, mean); + f2.setParameter(5, sigma*5); + f2.setParLimits(0, 0.8*amp, 1.2*amp); + f2.setParLimits(1, mean-sigma, mean+sigma); + f2.setParLimits(2, 0.8*sigma, 1.2*sigma); + f2.setParLimits(3, 0, 3*amp1); + f2.setParLimits(4, mean-4*sigma, mean+4*sigma); + f2.setParLimits(5, 2*sigma, 10*sigma); + DataFitter.fit(f2, histo, "Q"); + for(int i=0; i<5; i++) { + if(f2.isFitValid()) { + break; + } + else { + double mean1 = f2.getParameter(1); + double sigma1 = f2.getParameter(5); + f2.setRange(mean1-2*sigma1, mean1+2*sigma1); + DataFitter.fit(f2, histo, "Q"); + } + } + } } } else if(histo.getFunction()!=null) { @@ -1368,6 +1385,17 @@ public static int getMaximumBinBetween(H1F histo, double min, double max) { return max_bin_num; } + public static int getValueAt(H1F histo, double x) { + int nbin = histo.getData().length; + double xmin = histo.getDataX(0); + double xmax = histo.getDataX(nbin-1); + if(xxmax) + return 0; + else + return (int) ((x-xmin)*nbin/(xmax-xmin)); + + } + private static double getIntegralIDataSet(IDataSet data, double min, double max) { double nEntries = 0; for (int i = 0; i < data.getDataSize(0); i++) { From 56796a10f1a327c0b0c47f2695f44ba11748dd65 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Tue, 26 Mar 2024 13:23:01 -0400 Subject: [PATCH 38/60] added command line options to turn hit cuts on/off --- .../java/org/clas/dc/alignment/Alignment.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 41c1b09..3e88c86 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -765,6 +765,18 @@ private void setVertexRange(String range) { } } + private void setHitCuts(boolean doca, boolean alpha) { + if(!doca) { + for(int i=0; i Date: Wed, 27 Mar 2024 11:52:15 -0400 Subject: [PATCH 39/60] fix setting of doca cuts and added more logging --- .../java/org/clas/dc/alignment/Alignment.java | 23 ++++++++++++++----- .../java/org/clas/dc/alignment/Histo.java | 5 +++- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 3e88c86..867c406 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -83,8 +83,6 @@ private void initConstants(int run, String initVariation, String previousVariati dcDetector = new DCGeant4Factory(provider, DCGeant4Factory.MINISTAGGERON, false); for(int isl=0; isl0) { f1.setParLimits(0, amp*0.2, amp*1.2); From dea57ba9317aa08c31a46f581b9d688e593ba602 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Tue, 9 Apr 2024 14:04:17 -0400 Subject: [PATCH 40/60] added command line option to set the ecal cut, plotting pulls instead of residuals in before/after, better labels and printouts --- .../java/org/clas/dc/alignment/Alignment.java | 19 +++++++++++++++---- .../java/org/clas/dc/alignment/Histo.java | 17 +++++++++++++++++ .../java/org/clas/dc/alignment/Table.java | 1 + 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 867c406..1c9f6c8 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -433,9 +433,11 @@ public EmbeddedCanvasTabbed analyzeFits() { canvas.getCanvas("before/after").draw(this.getSectorHistograms(null, 1)); canvas.getCanvas("before/after").draw(this.getSectorHistograms(compareAlignment.subtract(previousAlignment), 3)); canvas.getCanvas("before/after").draw(this.getSectorHistograms(fittedAlignment, 2)); + canvas.getCanvas().setFont(fontName); canvas.addCanvas("misalignments"); canvas.getCanvas("misalignments").draw(comAlignPars); canvas.getCanvas("misalignments").draw(newAlignPars); + canvas.getCanvas().setFont(fontName); for(int i=0; i " + Constants.ECALMIN + " GeV"); } private void setHitCuts(boolean doca, boolean alpha) { @@ -1021,6 +1030,7 @@ public static void main(String[] args){ "\t\t- 27.3: distance between the scattering chamber exit window and the target center,\n" + "\t\t leave empty to use defaults; units are cm"); parser.getOptionParser("-process").addOption("-vertrange", "-20:35", "comma-separated vertex histogram limits, e.g. -20:35; units are cm"); + parser.getOptionParser("-process").addOption("-ecal" , "0.5", "cut on ECAL energy (GeV) for track selection "); parser.getOptionParser("-process").addOption("-doca" , "1", "cut on doca (1) or not (0)"); parser.getOptionParser("-process").addOption("-alpha" , "1", "cut on alpha, i.e. local angle, (1) or not (0)"); parser.getOptionParser("-process").addOption("-sector" , "1", "sector-dependent derivatives (1) or average (0)"); @@ -1114,6 +1124,7 @@ public static void main(String[] args){ int vertexFit = parser.getOptionParser("-process").getOption("-vertfit").intValue(); String vertexPar = parser.getOptionParser("-process").getOption("-vertpar").stringValue(); String vertexRange = parser.getOptionParser("-process").getOption("-vertrange").stringValue(); + double ecalCut = parser.getOptionParser("-process").getOption("-ecal").doubleValue(); boolean docaCut = parser.getOptionParser("-process").getOption("-doca").intValue()!=0; boolean alphaCut = parser.getOptionParser("-process").getOption("-alpha").intValue()!=0; boolean sector = parser.getOptionParser("-process").getOption("-sector").intValue()!=0; @@ -1133,7 +1144,7 @@ public static void main(String[] args){ align.setShiftsMode(shifts); align.setAngularBins(thetaBins, phiBins); align.initConstants(11, initVar, previousVar, compareVar); - align.setVertexRange(vertexRange); + align.setTrackCuts(vertexRange, ecalCut); align.setHitCuts(docaCut, alphaCut); align.setFitOptions(sector, iter, tscFrame, r1Global); diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 67658fd..33b131a 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -50,6 +50,7 @@ public class Histo { private double[][][][] parValues = null; private double[][][][] parErrors = null; + private double[][][][] parSigmas = null; private double[][] beamOffset= {{0, 0}, {0, 0}}; private Bin[] thetaBins = null; @@ -126,6 +127,7 @@ private void createHistos(String optStats) { this.vertex = new DataGroup[thetaBins.length][phiBins.length]; this.parValues = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; this.parErrors = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; + this.parSigmas = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; int nbinsRes = Constants.RESBINS; double minRes = Constants.RESMIN; @@ -586,6 +588,7 @@ public void analyzeHisto(int fit, int vertexFit) { for(int il=0; il24) this.parErrors[is][it][ip][l] *= 2; @@ -605,6 +609,7 @@ public void analyzeHisto(int fit, int vertexFit) { if(Histo.fitVertex(vertexFit, hvtx)) { this.parValues[is][it][ip][0] = hvtx.getFunction().getParameter(1)*Constants.SCALE; this.parErrors[is][it][ip][0] = hvtx.getFunction().parameter(1).error()*Constants.SCALE; + this.parSigmas[is][it][ip][0] = hvtx.getFunction().getParameter(2)*Constants.SCALE; if(!shift) { this.parValues[is][it][ip][0] -= Constants.TARGETPOS*Constants.SCALE; this.parErrors[is][it][ip][0] = Math.max(this.parErrors[is][it][ip][0], Constants.SCALE*dx/2); @@ -619,10 +624,12 @@ public void analyzeHisto(int fit, int vertexFit) { if(isc>=0 && iscw>=0 && hvtx.getFunction().getParameter(isc)>10) { this.parValues[is][it][ip][nLayer+nTarget-1] = (hvtx.getFunction().getParameter(iscw)-Constants.SCEXIT)*Constants.SCALE; this.parErrors[is][it][ip][nLayer+nTarget-1] = Math.max(hvtx.getFunction().parameter(iscw).error()*Constants.SCALE, Constants.SCALE*dx); + this.parSigmas[is][it][ip][nLayer+nTarget-1] = hvtx.getFunction().getParameter(2)*Constants.SCALE; } if(itl>=0 && hvtx.getFunction().getParameter(0)>10) { this.parValues[is][it][ip][nLayer+nTarget-2] = (hvtx.getFunction().getParameter(itl)-Constants.TARGETLENGTH)*Constants.SCALE; this.parErrors[is][it][ip][nLayer+nTarget-2] = Math.max(hvtx.getFunction().parameter(itl).error()*Constants.SCALE, Constants.SCALE*dx); + this.parSigmas[is][it][ip][nLayer+nTarget-2] = hvtx.getFunction().getParameter(2)*Constants.SCALE; } } } @@ -697,6 +704,16 @@ public double[] getParErrors(int sector, int itheta, int iphi) { return this.parErrors[sector-1][itheta][iphi]; } + public double[] getParSigmas(int sector, int itheta, int iphi) { + if(sector<1 || sector>6) + throw new IllegalArgumentException("Error: invalid sector="+sector); + if(itheta<0 || itheta>=thetaBins.length) + throw new IllegalArgumentException("Error: invalid theta bin="+itheta); + if(iphi<0 || iphi>phiBins.length) + throw new IllegalArgumentException("Error: invalid phi bin="+iphi); + return this.parSigmas[sector-1][itheta][iphi]; + } + public EmbeddedCanvasTabbed getElectronPlots() { EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("electron", "binning", "offset"); canvas.getCanvas("electron").draw(electron); diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Table.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Table.java index 0fb12fc..0f65438 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Table.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Table.java @@ -117,6 +117,7 @@ public GraphErrors getGraph(int sector, int icol, boolean rotation) { if(rotation) graph.setTitleX("Shift (deg)"); else graph.setTitleX("Shift (cm)"); graph.setTitleY("Parameter"); + graph.setTitle("Sector " + sector); return graph; } From 60663598764b015c08f2eaf67302143c196a5642 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 12 Apr 2024 16:25:41 -0400 Subject: [PATCH 41/60] added vertex fit for Spring18 --- .../java/org/clas/dc/alignment/Histo.java | 59 +++++++++++++++++++ dc/utilities/createSkims.csh | 2 +- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 33b131a..f94500f 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -809,6 +809,9 @@ private static boolean fitVertex(int mode, H1F histo) { case 7: Histo.fitRGDVertex(histo); break; + case 8: + Histo.fitRGAS18Vertex(histo); + break; default: if(histo.getFunction()!=null) histo.getFunction().setFitValid(true); @@ -1289,6 +1292,62 @@ public static void fitRGDVertex(H1F histo) { // if(f1_vtx.getParameter(6) 3) then +if ( $#argv < 1 || $#argv > 3) then echo "Usage: createSkims.sh [] []" exit 0 From 3377be7b480feb895326656dec996656cf8b1077 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Mon, 15 Apr 2024 18:02:14 -0400 Subject: [PATCH 42/60] fixing the target length in the RG-A Spring18 fits --- .../dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index f94500f..471e703 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -1332,7 +1332,7 @@ public static void fitRGAS18Vertex(H1F histo) { f1_vtx.setParameter(0, amp); f1_vtx.setParameter(1, mean); f1_vtx.setParameter(2, Constants.TARGETLENGTH); - f1_vtx.setParLimits(2, Constants.TARGETLENGTH*0.9, Constants.TARGETLENGTH*1.1); + f1_vtx.setParLimits(2, Constants.TARGETLENGTH*0.999, Constants.TARGETLENGTH*1.001); f1_vtx.setParameter(3, sigma); f1_vtx.setParameter(4, wd); f1_vtx.setParameter(5, Constants.WINDOWDIST); From fee2a99a5aeb311ac7eac9972834b24739e9b249 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Thu, 18 Apr 2024 16:51:28 -0400 Subject: [PATCH 43/60] changing moller cone distance to FTon --- .../src/main/java/org/clas/dc/alignment/Constants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java index b7f421e..c044401 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java @@ -104,7 +104,7 @@ public class Constants { public static double SCALE = 1000; // moller cone entrance - public static double MOLLERZ = 45.389; + public static double MOLLERZ = 85.87;//45.389; public static double MOLLERR = 3.2; public static void initTargetPars(double[] pars) { From 55a4883039ada11ac0d46865fd75172985bef38a Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 3 May 2024 15:05:31 -0400 Subject: [PATCH 44/60] added angular plot of time residuals --- .../java/org/clas/dc/alignment/Alignment.java | 49 +++++++++++++++++-- .../java/org/clas/dc/alignment/Histo.java | 20 ++++++++ 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 1c9f6c8..1e90d12 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -372,6 +372,12 @@ public EmbeddedCanvasTabbed analyzeFits() { for(EmbeddedPad pad : canvas.getCanvas("nominal vs. theta").getCanvasPads()) pad.getAxisX().setRange(-2000, 2000); + canvas.addCanvas("time residuals vs. theta"); + canvas.getCanvas("time residuals vs. theta").draw(this.getTimeGraph()); + canvas.getCanvas().setFont(fontName); + for(EmbeddedPad pad : canvas.getCanvas("time residuals vs. theta").getCanvasPads()) + pad.getAxisX().setRange(-2000, 2000); + LOGGER.log(LEVEL,"\nPlotting corrected geometry residuals"); canvas.addCanvas("CCDB corrected"); canvas.getCanvas("CCDB corrected").draw(this.getResidualGraphs(compareAlignment.subtract(initAlignment))); @@ -683,23 +689,60 @@ private DataGroup getAngularGraph(Table alignment) { return residuals; } + private DataGroup getTimeGraph() { + double[] zeros = new double[thetaBins.length-1]; + + DataGroup residuals = new DataGroup(6,1); + for(int is=0; is=Constants.NLAYER+Constants.NTARGET-2) gr_fit.setMarkerColor(1); + else gr_fit.setMarkerColor(this.markerColor[(il-1)/6]); + gr_fit.setMarkerStyle(this.markerStyle[ip-1]); + gr_fit.setMarkerSize(this.markerSize); + residuals.addDataSet(gr_fit, is); + } + } + } + return residuals; + } + private DataGroup getSectorHistograms(Table alignment, int icol) { - DataGroup residuals = new DataGroup(3,2); + DataGroup residuals = new DataGroup(6,2); for(int is=0; is6) + throw new IllegalArgumentException("Error: invalid sector="+sector); + if(itheta<0 || itheta>=thetaBins.length) + throw new IllegalArgumentException("Error: invalid theta bin="+itheta); + if(iphi<0 || iphi>phiBins.length) + throw new IllegalArgumentException("Error: invalid phi bin="+iphi); + return this.timeValues[sector-1][itheta][iphi]; + } + public double[] getParValues(int sector, int itheta, int iphi) { if(sector<1 || sector>6) throw new IllegalArgumentException("Error: invalid sector="+sector); From dace5bbf41d1a959c58bf5310b1938d9f46c7746 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Thu, 16 May 2024 14:36:14 -0400 Subject: [PATCH 45/60] do not refit time residual if fit is stored --- .../dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 8e0788c..a34f8f2 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -595,7 +595,7 @@ public void analyzeHisto(int fit, int vertexFit) { for(int l=1; l<=nLayer; l++) { if(tres) { H1F htime = this.time[is][it][ip].getH1F("hi-L" + l); - if(Histo.fitResiduals(2, htime)) { + if(Histo.fitResiduals(fit, htime)) { this.timeValues[is][it][ip][l] = htime.getFunction().getParameter(1); } // double xmax = htime.getDataX(htime.getMaximumBin()); From 1f97e245752cfebbe65e65fd1766eb5b0771e152 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 17 May 2024 09:46:51 -0400 Subject: [PATCH 46/60] creating timeValues array even if tres is false --- .../dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index a34f8f2..e44b45d 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -124,12 +124,12 @@ private void createHistos(String optStats) { if(tres) { this.wires = new DataGroup[nSector]; this.time = new DataGroup[nSector][thetaBins.length][phiBins.length]; - this.timeValues = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; } this.vertex = new DataGroup[thetaBins.length][phiBins.length]; this.parValues = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; this.parErrors = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; this.parSigmas = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; + this.timeValues = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; int nbinsRes = Constants.RESBINS; double minRes = Constants.RESMIN; From d92163fc659053538274d6b5433521c250905209 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 31 May 2024 12:04:02 -0400 Subject: [PATCH 47/60] version bump --- dc/java/dc-alignment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/pom.xml b/dc/java/dc-alignment/pom.xml index f02eb79..0a2bc09 100644 --- a/dc/java/dc-alignment/pom.xml +++ b/dc/java/dc-alignment/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.clas.detector dc-alignment - 1.0 + 2.0 jar From 54d5b5becee72ce86e06cafdecb5a77304d00847 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Mon, 17 Jun 2024 17:56:48 -0400 Subject: [PATCH 48/60] added time residuals for left right hits --- .../java/org/clas/dc/alignment/Constants.java | 3 +- .../java/org/clas/dc/alignment/Histo.java | 28 +++++++++++++++-- dc/utilities/kinematics.groovy | 30 ++++++++++--------- 3 files changed, 43 insertions(+), 18 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java index c044401..2e71c52 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java @@ -104,7 +104,8 @@ public class Constants { public static double SCALE = 1000; // moller cone entrance - public static double MOLLERZ = 85.87;//45.389; + public static double MOLLERZ = 45.389; +// public static double MOLLERZ = 85.87;//45.389; public static double MOLLERR = 3.2; public static void initTargetPars(double[] pars) { diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index e44b45d..4c5b222 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -43,6 +43,7 @@ public class Histo { private DataGroup calib = null; private DataGroup alpha = null; private DataGroup doca = null; + private DataGroup leftright = null; private DataGroup[] wires = null; private DataGroup[][][] residuals = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][][] time = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers @@ -147,6 +148,7 @@ private void createHistos(String optStats) { this.calib = new DataGroup(nSector, nSLayer); this.alpha = new DataGroup(nSector, nSLayer); this.doca = new DataGroup(nSector, nSLayer); + this.leftright = new DataGroup(nSector, nSLayer); for(int is=0; is0) + this.leftright.getH1F("hi-rSL" + hit.superlayer + "_S" + hit.sector).fill(hit.time); + else + this.leftright.getH1F("hi-lSL" + hit.superlayer + "_S" + hit.sector).fill(hit.time); this.alpha.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(Math.toDegrees(electron.theta())-Constants.THTHILT, hit.alpha); this.doca.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time, hit.doca); if(tres) this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); @@ -510,12 +530,13 @@ private List getHits(Event event, Electron e) { double time = 10000 * hitBank.getFloat("timeResidual", i); double alpha = hitBank.getFloat("Alpha", i); double doca = hitBank.getFloat("doca", i); + int lr = hitBank.getInt("LR", i); int sector = hitBank.getInt("sector", i); int superlayer = hitBank.getInt("superlayer", i); int layer = hitBank.getInt("layer", i) + 6 * (superlayer - 1); int wire = hitBank.getInt("wire", i); int status = hitBank.getInt("status", i); - Hit hit = new Hit(sector, layer, wire, residual, time, doca, alpha, status); + Hit hit = new Hit(sector, layer, wire, residual, time, doca, alpha, lr, status); if(!allhits.containsKey(superlayer)) allhits.put(superlayer, new ArrayList<>()); allhits.get(superlayer).add(hit); @@ -749,12 +770,13 @@ public EmbeddedCanvasTabbed getElectronPlots() { } public EmbeddedCanvasTabbed plotHistos() { - EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration", "Alpha", "Doca"); + EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration", "Alpha", "Doca", "LR"); canvas.getCanvas("Calibration").draw(calib); canvas.getCanvas("Alpha").draw(alpha); for(EmbeddedPad pad : canvas.getCanvas("Alpha").getCanvasPads()) pad.getAxisZ().setLog(true); canvas.getCanvas("Doca").draw(doca); + canvas.getCanvas("LR").draw(leftright); if(tres) { for(int is=0; is Date: Tue, 18 Jun 2024 00:06:32 -0400 Subject: [PATCH 49/60] making LR time residual plots layer dependent --- .../java/org/clas/dc/alignment/Histo.java | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 4c5b222..72a1fec 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -43,7 +43,7 @@ public class Histo { private DataGroup calib = null; private DataGroup alpha = null; private DataGroup doca = null; - private DataGroup leftright = null; + private DataGroup[] leftright = null; private DataGroup[] wires = null; private DataGroup[][][] residuals = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][][] time = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers @@ -123,6 +123,7 @@ private void createHistos(String optStats) { + "for variation " + name); this.residuals = new DataGroup[nSector][thetaBins.length][phiBins.length]; if(tres) { + this.leftright = new DataGroup[nSector]; this.wires = new DataGroup[nSector]; this.time = new DataGroup[nSector][thetaBins.length][phiBins.length]; } @@ -148,7 +149,6 @@ private void createHistos(String optStats) { this.calib = new DataGroup(nSector, nSLayer); this.alpha = new DataGroup(nSector, nSLayer); this.doca = new DataGroup(nSector, nSLayer); - this.leftright = new DataGroup(nSector, nSLayer); for(int is=0; is0) - this.leftright.getH1F("hi-rSL" + hit.superlayer + "_S" + hit.sector).fill(hit.time); - else - this.leftright.getH1F("hi-lSL" + hit.superlayer + "_S" + hit.sector).fill(hit.time); this.alpha.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(Math.toDegrees(electron.theta())-Constants.THTHILT, hit.alpha); this.doca.getH2F("hi-SL" + hit.superlayer + "_S" + hit.sector).fill(hit.time, hit.doca); - if(tres) this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); + if(tres) { + if(hit.lr>0) + this.leftright[sector-1].getH1F("hi-rL" + hit.layer + "_S" + hit.sector).fill(hit.time); + else + this.leftright[sector-1].getH1F("hi-lL" + hit.layer + "_S" + hit.sector).fill(hit.time); + this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); + } } if(tres) this.time[sector - 1][it][ip].getH1F("hi-L" + hit.layer).fill(hit.time); } @@ -770,14 +773,19 @@ public EmbeddedCanvasTabbed getElectronPlots() { } public EmbeddedCanvasTabbed plotHistos() { - EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration", "Alpha", "Doca", "LR"); + EmbeddedCanvasTabbed canvas = new EmbeddedCanvasTabbed("Calibration", "Alpha", "Doca"); canvas.getCanvas("Calibration").draw(calib); canvas.getCanvas("Alpha").draw(alpha); for(EmbeddedPad pad : canvas.getCanvas("Alpha").getCanvasPads()) pad.getAxisZ().setLog(true); canvas.getCanvas("Doca").draw(doca); - canvas.getCanvas("LR").draw(leftright); if(tres) { + for(int is=0; is Date: Tue, 18 Jun 2024 11:40:32 -0400 Subject: [PATCH 50/60] saving LR time residuals to the histogram file --- .../java/org/clas/dc/alignment/Histo.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 72a1fec..2fce90b 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -189,12 +189,12 @@ private void createHistos(String optStats) { this.wires[is] = new DataGroup(nSector, nSLayer); for(int il=0; il0) - this.leftright[sector-1].getH1F("hi-rL" + hit.layer + "_S" + hit.sector).fill(hit.time); + this.leftright[sector-1].getH1F("hi-rL" + hit.layer).fill(hit.time); else - this.leftright[sector-1].getH1F("hi-lL" + hit.layer + "_S" + hit.sector).fill(hit.time); + this.leftright[sector-1].getH1F("hi-lL" + hit.layer).fill(hit.time); this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); } } @@ -621,7 +621,11 @@ public void analyzeHisto(int fit, int vertexFit) { H1F htime = this.time[is][it][ip].getH1F("hi-L" + l); if(Histo.fitResiduals(fit, htime)) { this.timeValues[is][it][ip][l] = htime.getFunction().getParameter(1); - } + } + if(it==0 && ip==0) { + Histo.fitResiduals(fit, this.leftright[is].getH1F("hi-lL" + l)); + Histo.fitResiduals(fit, this.leftright[is].getH1F("hi-rL" + l)); + } // double xmax = htime.getDataX(htime.getMaximumBin()); // this.timeValues[is][it][ip][l] = Histo.getMeanIDataSet(htime, xmax-100, xmax+100); } @@ -1621,6 +1625,10 @@ public void readDataGroup(String folder, TDirectory dir) { String subfolder = folder + "/time/sec" + (is+1); wires[is] = this.readDataGroup(subfolder, dir, wires[is]); } + for(int is=0; is Date: Tue, 18 Jun 2024 13:32:17 -0400 Subject: [PATCH 51/60] saving LR time residuals to the histogram file --- .../java/org/clas/dc/alignment/Alignment.java | 37 ++++++ .../java/org/clas/dc/alignment/Histo.java | 115 ++++++++++++------ 2 files changed, 112 insertions(+), 40 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 1e90d12..363e793 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -378,6 +378,12 @@ public EmbeddedCanvasTabbed analyzeFits() { for(EmbeddedPad pad : canvas.getCanvas("time residuals vs. theta").getCanvasPads()) pad.getAxisX().setRange(-2000, 2000); + canvas.addCanvas("LR residuals vs. theta"); + canvas.getCanvas("LR residuals vs. theta").draw(this.getLRGraph()); + canvas.getCanvas().setFont(fontName); + for(EmbeddedPad pad : canvas.getCanvas("LR residuals vs. theta").getCanvasPads()) + pad.getAxisX().setRange(-2000, 2000); + LOGGER.log(LEVEL,"\nPlotting corrected geometry residuals"); canvas.addCanvas("CCDB corrected"); canvas.getCanvas("CCDB corrected").draw(this.getResidualGraphs(compareAlignment.subtract(initAlignment))); @@ -720,6 +726,37 @@ private DataGroup getTimeGraph() { return residuals; } + private DataGroup getLRGraph() { + double[] zeros = new double[thetaBins.length-1]; + + DataGroup residuals = new DataGroup(6,1); + for(int is=0; is=Constants.NLAYER+Constants.NTARGET-2) gr_fit.setMarkerColor(1); + else gr_fit.setMarkerColor(this.markerColor[(il-1)/6]); + gr_fit.setMarkerStyle(this.markerStyle[ip-1]); + gr_fit.setMarkerSize(this.markerSize); + residuals.addDataSet(gr_fit, is); + } + } + } + return residuals; + } + private DataGroup getSectorHistograms(Table alignment, int icol) { DataGroup residuals = new DataGroup(6,2); diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 2fce90b..d16c92f 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -43,13 +43,14 @@ public class Histo { private DataGroup calib = null; private DataGroup alpha = null; private DataGroup doca = null; - private DataGroup[] leftright = null; private DataGroup[] wires = null; private DataGroup[][][] residuals = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][][] time = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers + private DataGroup[][][] leftright = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains layers private DataGroup[][] vertex = null; // indices are theta bin, phi bin and sector, datagroup is 6x6 and contains sectors private double[][][][] timeValues = null; + private double[][][][] lrValues = null; private double[][][][] parValues = null; private double[][][][] parErrors = null; private double[][][][] parSigmas = null; @@ -123,15 +124,16 @@ private void createHistos(String optStats) { + "for variation " + name); this.residuals = new DataGroup[nSector][thetaBins.length][phiBins.length]; if(tres) { - this.leftright = new DataGroup[nSector]; this.wires = new DataGroup[nSector]; this.time = new DataGroup[nSector][thetaBins.length][phiBins.length]; + this.leftright = new DataGroup[nSector][thetaBins.length][phiBins.length]; } this.vertex = new DataGroup[thetaBins.length][phiBins.length]; this.parValues = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; this.parErrors = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; this.parSigmas = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; this.timeValues = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; + this.lrValues = new double[nSector][thetaBins.length][phiBins.length][nLayer+nTarget]; int nbinsRes = Constants.RESBINS; double minRes = Constants.RESMIN; @@ -185,22 +187,9 @@ private void createHistos(String optStats) { if(tres) { for(int is=0; is0) - this.leftright[sector-1].getH1F("hi-rL" + hit.layer).fill(hit.time); - else - this.leftright[sector-1].getH1F("hi-lL" + hit.layer).fill(hit.time); - this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); + this.wires[sector-1].getH2F("hi-L" + hit.layer + "_S" + hit.sector).fill(hit.time, hit.wire); } } - if(tres) this.time[sector - 1][it][ip].getH1F("hi-L" + hit.layer).fill(hit.time); + if(tres) { + this.time[sector - 1][it][ip].getH1F("hi-L" + hit.layer).fill(hit.time); + if(hit.lr>0) + this.leftright[sector-1][it][ip].getH1F("hi-rL" + hit.layer).fill(hit.time); + else + this.leftright[sector-1][it][ip].getH1F("hi-lL" + hit.layer).fill(hit.time); + } } this.vertex[it][ip].getH1F("hi-S" + sector).fill(vz); @@ -622,9 +626,10 @@ public void analyzeHisto(int fit, int vertexFit) { if(Histo.fitResiduals(fit, htime)) { this.timeValues[is][it][ip][l] = htime.getFunction().getParameter(1); } - if(it==0 && ip==0) { - Histo.fitResiduals(fit, this.leftright[is].getH1F("hi-lL" + l)); - Histo.fitResiduals(fit, this.leftright[is].getH1F("hi-rL" + l)); + H1F hleft = this.leftright[is][it][ip].getH1F("hi-lL" + l); + H1F hright = this.leftright[is][it][ip].getH1F("hi-rL" + l); + if(Histo.fitResiduals(fit, hright) && Histo.fitResiduals(fit, hleft)) { + this.lrValues[is][it][ip][l] = hleft.getFunction().getParameter(1)-hright.getFunction().getParameter(1); } // double xmax = htime.getDataX(htime.getMaximumBin()); // this.timeValues[is][it][ip][l] = Histo.getMeanIDataSet(htime, xmax-100, xmax+100); @@ -732,6 +737,16 @@ public double[] getTimeValues(int sector, int itheta, int iphi) { return this.timeValues[sector-1][itheta][iphi]; } + public double[] getLRValues(int sector, int itheta, int iphi) { + if(sector<1 || sector>6) + throw new IllegalArgumentException("Error: invalid sector="+sector); + if(itheta<0 || itheta>=thetaBins.length) + throw new IllegalArgumentException("Error: invalid theta bin="+itheta); + if(iphi<0 || iphi>phiBins.length) + throw new IllegalArgumentException("Error: invalid phi bin="+iphi); + return this.lrValues[sector-1][itheta][iphi]; + } + public double[] getParValues(int sector, int itheta, int iphi) { if(sector<1 || sector>6) throw new IllegalArgumentException("Error: invalid sector="+sector); @@ -784,12 +799,6 @@ public EmbeddedCanvasTabbed plotHistos() { pad.getAxisZ().setLog(true); canvas.getCanvas("Doca").draw(doca); if(tres) { - for(int is=0; is Date: Thu, 20 Jun 2024 12:18:43 -0400 Subject: [PATCH 52/60] added region-by-region before/after plots --- .../java/org/clas/dc/alignment/Alignment.java | 31 +++++++++++++++++++ .../java/org/clas/dc/alignment/Histo.java | 3 ++ 2 files changed, 34 insertions(+) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 363e793..df11888 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -445,6 +445,10 @@ public EmbeddedCanvasTabbed analyzeFits() { canvas.getCanvas("before/after").draw(this.getSectorHistograms(null, 1)); canvas.getCanvas("before/after").draw(this.getSectorHistograms(compareAlignment.subtract(previousAlignment), 3)); canvas.getCanvas("before/after").draw(this.getSectorHistograms(fittedAlignment, 2)); + canvas.addCanvas("before/after by region"); + canvas.getCanvas("before/after by region").draw(this.getRegionHistograms(null, 1)); + canvas.getCanvas("before/after by region").draw(this.getRegionHistograms(compareAlignment.subtract(previousAlignment), 3)); + canvas.getCanvas("before/after by region").draw(this.getRegionHistograms(fittedAlignment, 2)); canvas.getCanvas().setFont(fontName); canvas.addCanvas("misalignments"); canvas.getCanvas("misalignments").draw(comAlignPars); @@ -787,6 +791,33 @@ private DataGroup getSectorHistograms(Table alignment, int icol) { return residuals; } + private DataGroup getRegionHistograms(Table alignment, int icol) { + + DataGroup residuals = new DataGroup(Constants.NSECTOR,Constants.NREGION); + for(int is=0; is Date: Mon, 15 Jul 2024 17:56:19 -0400 Subject: [PATCH 53/60] file name now shown in the jframe title and code cleanups --- .../java/org/clas/dc/alignment/Alignment.java | 177 +++++++----------- .../java/org/clas/dc/alignment/Histo.java | 58 +++--- 2 files changed, 102 insertions(+), 133 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index df11888..fd51400 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -367,50 +367,59 @@ public EmbeddedCanvasTabbed analyzeFits() { pad.getAxisX().setRange(-2000, 2000); canvas.addCanvas("nominal vs. theta"); - canvas.getCanvas("nominal vs. theta").draw(this.getAngularGraph(null)); + canvas.getCanvas("nominal vs. theta").draw(this.getAngularGraph("fit",null)); canvas.getCanvas().setFont(fontName); for(EmbeddedPad pad : canvas.getCanvas("nominal vs. theta").getCanvasPads()) pad.getAxisX().setRange(-2000, 2000); canvas.addCanvas("time residuals vs. theta"); - canvas.getCanvas("time residuals vs. theta").draw(this.getTimeGraph()); + canvas.getCanvas("time residuals vs. theta").draw(this.getAngularGraph("time",null)); canvas.getCanvas().setFont(fontName); for(EmbeddedPad pad : canvas.getCanvas("time residuals vs. theta").getCanvasPads()) pad.getAxisX().setRange(-2000, 2000); canvas.addCanvas("LR residuals vs. theta"); - canvas.getCanvas("LR residuals vs. theta").draw(this.getLRGraph()); + canvas.getCanvas("LR residuals vs. theta").draw(this.getAngularGraph("LR",null)); canvas.getCanvas().setFont(fontName); for(EmbeddedPad pad : canvas.getCanvas("LR residuals vs. theta").getCanvasPads()) pad.getAxisX().setRange(-2000, 2000); - LOGGER.log(LEVEL,"\nPlotting corrected geometry residuals"); - canvas.addCanvas("CCDB corrected"); - canvas.getCanvas("CCDB corrected").draw(this.getResidualGraphs(compareAlignment.subtract(initAlignment))); + canvas.addCanvas("residual mean and sigma"); + canvas.getCanvas("residual mean and sigma").draw(this.getSectorHistograms("fit",null, 1)); + canvas.getCanvas("residual mean and sigma").draw(this.getSectorHistograms("time",null, 4)); canvas.getCanvas().setFont(fontName); - for(EmbeddedPad pad : canvas.getCanvas("CCDB corrected").getCanvasPads()) - pad.getAxisX().setRange(-2000, 2000); - - canvas.addCanvas("CCDB corrected vs. theta"); - canvas.getCanvas("CCDB corrected vs. theta").draw(this.getAngularGraph(compareAlignment.subtract(initAlignment))); + canvas.addCanvas("residuals by region"); + canvas.getCanvas("residuals by region").draw(this.getRegionHistograms("fit",null, 1)); + canvas.getCanvas("residuals by region").draw(this.getRegionHistograms("time",null, 4)); canvas.getCanvas().setFont(fontName); - for(EmbeddedPad pad : canvas.getCanvas("CCDB corrected vs. theta").getCanvasPads()) - pad.getAxisX().setRange(-2000, 2000); - - // shifts - LOGGER.log(LEVEL,"\nPlotting shifted geometry residuals"); - canvas.addCanvas("shift magnitude"); - canvas.getCanvas("shift magnitude").draw(this.getShiftsHisto(1)); - for(String key : histos.keySet()) { - if(!key.equals("nominal")) { - canvas.addCanvas(key); - canvas.getCanvas(key).draw(this.getShiftsGraph(key)); - canvas.getCanvas().setFont(fontName); - for(EmbeddedPad pad : canvas.getCanvas(key).getCanvasPads()) - pad.getAxisX().setRange(-1000, 1000); - } - } + if(compareAlignment!=null) { + LOGGER.log(LEVEL,"\nPlotting corrected geometry residuals"); + canvas.addCanvas("CCDB corrected"); + canvas.getCanvas("CCDB corrected").draw(this.getResidualGraphs(compareAlignment.subtract(initAlignment))); + canvas.getCanvas().setFont(fontName); + for(EmbeddedPad pad : canvas.getCanvas("CCDB corrected").getCanvasPads()) + pad.getAxisX().setRange(-2000, 2000); + + canvas.addCanvas("CCDB corrected vs. theta"); + canvas.getCanvas("CCDB corrected vs. theta").draw(this.getAngularGraph("fit",compareAlignment.subtract(initAlignment))); + canvas.getCanvas().setFont(fontName); + for(EmbeddedPad pad : canvas.getCanvas("CCDB corrected vs. theta").getCanvasPads()) + pad.getAxisX().setRange(-2000, 2000); + + // shifts + LOGGER.log(LEVEL,"\nPlotting shifted geometry residuals"); + canvas.addCanvas("shift magnitude"); + canvas.getCanvas("shift magnitude").draw(this.getShiftsHisto(1)); + for(String key : histos.keySet()) { + if(!key.equals("nominal")) { + canvas.addCanvas(key); + canvas.getCanvas(key).draw(this.getShiftsGraph(key)); + canvas.getCanvas().setFont(fontName); + for(EmbeddedPad pad : canvas.getCanvas(key).getCanvasPads()) + pad.getAxisX().setRange(-1000, 1000); + } + } LOGGER.log(LEVEL,"\nFitting residuals"); LOGGER.log(LEVEL,"\nInitial alignment parameters (variation: " + this.previousVariation + ") in the DC tilted sector frame\n" + this.previousAlignment.toString()); LOGGER.log(LEVEL,"\nInitial alignment parameters (variation: " + this.previousVariation + ") in CCDB format\n" + this.previousAlignment.toCCDBTable()); @@ -434,7 +443,7 @@ public EmbeddedCanvasTabbed analyzeFits() { pad.getAxisX().setRange(-2000, 2000); canvas.addCanvas("corrected (with new parameters) vs. theta"); - canvas.getCanvas("corrected (with new parameters) vs. theta").draw(this.getAngularGraph(fittedAlignment)); + canvas.getCanvas("corrected (with new parameters) vs. theta").draw(this.getAngularGraph("fit",fittedAlignment)); canvas.getCanvas().setFont(fontName); for(EmbeddedPad pad : canvas.getCanvas("corrected (with new parameters) vs. theta").getCanvasPads()) pad.getAxisX().setRange(-2000, 2000); @@ -442,13 +451,14 @@ public EmbeddedCanvasTabbed analyzeFits() { DataGroup preAlignPars = this.previousAlignment.getDataGroup(3); DataGroup newAlignPars = finalAlignment.getDataGroup(2); canvas.addCanvas("before/after"); - canvas.getCanvas("before/after").draw(this.getSectorHistograms(null, 1)); - canvas.getCanvas("before/after").draw(this.getSectorHistograms(compareAlignment.subtract(previousAlignment), 3)); - canvas.getCanvas("before/after").draw(this.getSectorHistograms(fittedAlignment, 2)); + canvas.getCanvas("before/after").draw(this.getSectorHistograms("fit",null, 1)); + canvas.getCanvas("before/after").draw(this.getSectorHistograms("fit",compareAlignment.subtract(previousAlignment), 3)); + canvas.getCanvas("before/after").draw(this.getSectorHistograms("fit",fittedAlignment, 2)); + canvas.getCanvas().setFont(fontName); canvas.addCanvas("before/after by region"); - canvas.getCanvas("before/after by region").draw(this.getRegionHistograms(null, 1)); - canvas.getCanvas("before/after by region").draw(this.getRegionHistograms(compareAlignment.subtract(previousAlignment), 3)); - canvas.getCanvas("before/after by region").draw(this.getRegionHistograms(fittedAlignment, 2)); + canvas.getCanvas("before/after by region").draw(this.getRegionHistograms("fit",null, 1)); + canvas.getCanvas("before/after by region").draw(this.getRegionHistograms("fit",compareAlignment.subtract(previousAlignment), 3)); + canvas.getCanvas("before/after by region").draw(this.getRegionHistograms("fit",fittedAlignment, 2)); canvas.getCanvas().setFont(fontName); canvas.addCanvas("misalignments"); canvas.getCanvas("misalignments").draw(comAlignPars); @@ -664,7 +674,7 @@ private DataGroup getShiftsHisto(int sector) { } - private DataGroup getAngularGraph(Table alignment) { + private DataGroup getAngularGraph(String parameter, Table alignment) { double[] zeros = new double[thetaBins.length-1]; DataGroup residuals = new DataGroup(6,1); @@ -676,10 +686,12 @@ private DataGroup getAngularGraph(Table alignment) { double[] errorRes = new double[thetaBins.length-1]; double[] angles = new double[thetaBins.length-1]; for(int it=1; it=Constants.NLAYER+Constants.NTARGET-2) gr_fit.setMarkerColor(1); - else gr_fit.setMarkerColor(this.markerColor[(il-1)/6]); - gr_fit.setMarkerStyle(this.markerStyle[ip-1]); - gr_fit.setMarkerSize(this.markerSize); - residuals.addDataSet(gr_fit, is); - } - } - } - return residuals; - } - - private DataGroup getLRGraph() { - double[] zeros = new double[thetaBins.length-1]; - - DataGroup residuals = new DataGroup(6,1); - for(int is=0; is=Constants.NLAYER+Constants.NTARGET-2) gr_fit.setMarkerColor(1); - else gr_fit.setMarkerColor(this.markerColor[(il-1)/6]); - gr_fit.setMarkerStyle(this.markerStyle[ip-1]); - gr_fit.setMarkerSize(this.markerSize); - residuals.addDataSet(gr_fit, is); - } - } - } - return residuals; - } - - private DataGroup getSectorHistograms(Table alignment, int icol) { + private DataGroup getSectorHistograms(String parameter, Table alignment, int icol) { DataGroup residuals = new DataGroup(6,2); for(int is=0; is6) - throw new IllegalArgumentException("Error: invalid sector="+sector); - if(itheta<0 || itheta>=thetaBins.length) - throw new IllegalArgumentException("Error: invalid theta bin="+itheta); - if(iphi<0 || iphi>phiBins.length) - throw new IllegalArgumentException("Error: invalid phi bin="+iphi); - return this.timeValues[sector-1][itheta][iphi]; + public double[] getParValues(int sector, int itheta, int iphi) { + return this.getParValues("", sector, itheta, iphi); } - public double[] getLRValues(int sector, int itheta, int iphi) { - if(sector<1 || sector>6) - throw new IllegalArgumentException("Error: invalid sector="+sector); - if(itheta<0 || itheta>=thetaBins.length) - throw new IllegalArgumentException("Error: invalid theta bin="+itheta); - if(iphi<0 || iphi>phiBins.length) - throw new IllegalArgumentException("Error: invalid phi bin="+iphi); - return this.lrValues[sector-1][itheta][iphi]; + public double[] getParErrors(int sector, int itheta, int iphi) { + return this.getParErrors("", sector, itheta, iphi); } - - public double[] getParValues(int sector, int itheta, int iphi) { + + public double[] getParSigmas(int sector, int itheta, int iphi) { + return this.getParSigmas("", sector, itheta, iphi); + } + + public double[] getParValues(String parameter, int sector, int itheta, int iphi) { if(sector<1 || sector>6) throw new IllegalArgumentException("Error: invalid sector="+sector); if(itheta<0 || itheta>=thetaBins.length) throw new IllegalArgumentException("Error: invalid theta bin="+itheta); if(iphi<0 || iphi>phiBins.length) throw new IllegalArgumentException("Error: invalid phi bin="+iphi); - return this.parValues[sector-1][itheta][iphi]; + if(parameter.equals("time")) + return this.timeValues[sector-1][itheta][iphi]; + else if(parameter.equals("LR")) + return this.lrValues[sector-1][itheta][iphi]; + else + return this.parValues[sector-1][itheta][iphi]; } - public double[] getParErrors(int sector, int itheta, int iphi) { + public double[] getParErrors(String parameter, int sector, int itheta, int iphi) { if(sector<1 || sector>6) throw new IllegalArgumentException("Error: invalid sector="+sector); if(itheta<0 || itheta>=thetaBins.length) throw new IllegalArgumentException("Error: invalid theta bin="+itheta); if(iphi<0 || iphi>phiBins.length) throw new IllegalArgumentException("Error: invalid phi bin="+iphi); - return this.parErrors[sector-1][itheta][iphi]; + if(parameter.equals("time")) + return this.zeroes[sector-1][itheta][iphi]; + else if(parameter.equals("LR")) + return this.zeroes[sector-1][itheta][iphi]; + else + return this.parErrors[sector-1][itheta][iphi]; } - public double[] getParSigmas(int sector, int itheta, int iphi) { + public double[] getParSigmas(String parameter, int sector, int itheta, int iphi) { if(sector<1 || sector>6) throw new IllegalArgumentException("Error: invalid sector="+sector); if(itheta<0 || itheta>=thetaBins.length) throw new IllegalArgumentException("Error: invalid theta bin="+itheta); if(iphi<0 || iphi>phiBins.length) throw new IllegalArgumentException("Error: invalid phi bin="+iphi); - return this.parSigmas[sector-1][itheta][iphi]; + if(parameter.equals("time")) + return this.timeSigmas[sector-1][itheta][iphi]; + else if(parameter.equals("LR")) + return this.zeroes[sector-1][itheta][iphi]; + else + return this.parSigmas[sector-1][itheta][iphi]; } public EmbeddedCanvasTabbed getElectronPlots() { From 77ca9df7d6829afe204f40d1d53b27ce3f68eec9 Mon Sep 17 00:00:00 2001 From: raffaelladevita Date: Fri, 26 Jul 2024 15:02:03 -0400 Subject: [PATCH 54/60] more vertex plots in kinematics.groovy --- dc/utilities/kinematics.groovy | 40 +++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/dc/utilities/kinematics.groovy b/dc/utilities/kinematics.groovy index 19f0548..73e2cab 100644 --- a/dc/utilities/kinematics.groovy +++ b/dc/utilities/kinematics.groovy @@ -36,8 +36,9 @@ import org.jlab.jnp.utils.options.OptionStore; public class Kinematics { private double ebeam = 10.6; - private double targetPos = -2.5; + private double targetPos = -3.5; private double targetLength = 5; +// private double scWindow = 17.5+targetPos; private double scWindow = 28.4+targetPos; private String fontName = "Arial"; private File lundfile = null; @@ -142,7 +143,7 @@ public class Kinematics { String[] names= ["pi+", "pi-", "el"]; DataGroup dg_vertex = new DataGroup(3, 4); for(int i=0; i Date: Fri, 23 Aug 2024 18:36:21 -0400 Subject: [PATCH 55/60] added RG-K vertex fit function, excluding measurements with failed fits, storing failed fit information, analyze now saves the histograms, using inputlist for analyze and fit mode --- .../java/org/clas/dc/alignment/Alignment.java | 122 ++++++++++++++---- .../java/org/clas/dc/alignment/Constants.java | 2 + .../java/org/clas/dc/alignment/Histo.java | 121 ++++++++++++++++- dc/utilities/kinematics.groovy | 31 ++++- 4 files changed, 238 insertions(+), 38 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index fd51400..e480bac 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -28,8 +28,10 @@ import org.jlab.groot.data.GraphErrors; import org.jlab.groot.data.H1F; import org.jlab.groot.data.TDirectory; +import org.jlab.groot.graphics.EmbeddedCanvas; import org.jlab.groot.graphics.EmbeddedCanvasTabbed; import org.jlab.groot.graphics.EmbeddedPad; +import org.jlab.groot.graphics.IDataSetPlotter; import org.jlab.groot.group.DataGroup; import org.jlab.jnp.utils.options.OptionStore; import org.jlab.logging.DefaultLogger; @@ -169,6 +171,19 @@ private void initInputs() { } } + private void initMeasurementWeights(double w) { + Constants.MEASWEIGHTS = new double[Constants.NSECTOR][thetaBins.length][phiBins.length][Constants.NLAYER+Constants.NTARGET]; + for(int is=0; is0) pad.getAxisY().setRange(0, yMax*1.2); + } + } private Parameter[] fit(int sector) { String options = ""; @@ -569,9 +622,6 @@ private void getBeamOffset() { } private DataGroup getResidualGraphs(Table alignment) { - double[] layers = new double[Constants.NLAYER+Constants.NTARGET]; - double[] zeros = new double[Constants.NLAYER+Constants.NTARGET]; - for(int il=0; il0) + gr_fit.addPoint(shiftRes[il], il, errorRes[il], 0); } - GraphErrors gr_fit = new GraphErrors("gr_fit_S" + sector + "_theta " + it + "_phi" + ip, - shiftRes, layers, errorRes, zeros); gr_fit.setTitle("Sector " + sector); gr_fit.setTitleX("Residual (um)"); gr_fit.setTitleY("Layer"); @@ -604,7 +655,6 @@ private DataGroup getResidualGraphs(Table alignment) { private DataGroup getShiftsGraph(String key) { double[] layers = new double[Constants.NLAYER+Constants.NTARGET]; double[] zeros = new double[Constants.NLAYER+Constants.NTARGET]; - for(int il=0; il0) + gr_res.addPoint(this.getShifts(key, sector, it, ip)[il], il, this.getShiftsError(key, sector, it, ip)[il], 0); + } gr_res.setTitle("Theta:"+ thetaBins[it].getRange() + " Phi:" + phiBins[ip].getRange()); gr_res.setTitleX("Residual (um)"); gr_res.setTitleY("Layer"); gr_res.setMarkerColor(this.markerColor[is]); gr_res.setMarkerSize(this.markerSize); - shifts.addDataSet(gr_res, ip*thetaBins.length+it); + if(gr_res.getDataSize(0)>0) + shifts.addDataSet(gr_res, ip*thetaBins.length+it); + } + GraphErrors gr_res = new GraphErrors("gr_res" + "_theta " + it + "_phi" + ip); + for(int il=0; il0) + gr_res.addPoint(this.getShifts(key, it, ip)[il], il, this.getShiftsError(key, it, ip)[il], 0); } - GraphErrors gr_res = new GraphErrors("gr_res" + "_theta " + it + "_phi" + ip, this.getShifts(key, it, ip), layers, zeros, zeros); gr_res.setTitle("Theta:"+ thetaBins[it].getRange() + " Phi:" + phiBins[ip].getRange()); gr_res.setTitleX("Residual (um)"); gr_res.setTitleY("Layer"); gr_res.setMarkerColor(1); gr_res.setMarkerSize(this.markerSize); - shifts.addDataSet(gr_res, ip*thetaBins.length+it); + if(gr_res.getDataSize(0)>0) + shifts.addDataSet(gr_res, ip*thetaBins.length+it); } } return shifts; @@ -675,28 +737,25 @@ private DataGroup getShiftsHisto(int sector) { private DataGroup getAngularGraph(String parameter, Table alignment) { - double[] zeros = new double[thetaBins.length-1]; DataGroup residuals = new DataGroup(6,1); for(int is=0; is0 || parameter.equals("time") || parameter.equals("LR")) + gr_fit.addPoint(shiftRes, angles, errorRes, 0.0); } - GraphErrors gr_fit = new GraphErrors("gr_fit_S" + sector + "_layer " + il + "_phi" + ip, - shiftRes, angles, errorRes, zeros); gr_fit.setTitle("Sector " + sector); gr_fit.setTitleX("Residual (um)"); gr_fit.setTitleY("#theta bin/layer"); @@ -1110,7 +1169,8 @@ public static void main(String[] args){ // valid options for histogram-base analysis parser.addCommand("-analyze", "analyze histogram files"); - parser.getOptionParser("-analyze").addRequired("-input" , "input histogram file"); + parser.getOptionParser("-analyze").setRequiresInputList(true); + parser.getOptionParser("-analyze").addOption("-o" ,"", "output histogram file name prefix"); parser.getOptionParser("-analyze").addOption("-display" ,"1", "display histograms (0/1)"); parser.getOptionParser("-analyze").addOption("-stats" ,"", "set histogram stat option"); parser.getOptionParser("-analyze").addOption("-shifts" , "0", "use event-by-event subtraction for unit shifts (1=on, 0=off)"); @@ -1235,6 +1295,11 @@ public static void main(String[] args){ } if(parser.getCommand().equals("-analyze")) { + String namePrefix = parser.getOptionParser("-analyze").getOption("-o").stringValue(); + String histoName = "histo.hipo"; + if(!namePrefix.isEmpty()) { + histoName = namePrefix + "_" + histoName; + } String optStats = parser.getOptionParser("-analyze").getOption("-stats").stringValue(); int residuals = parser.getOptionParser("-analyze").getOption("-residuals").intValue(); int vertexFit = parser.getOptionParser("-analyze").getOption("-vertfit").intValue(); @@ -1253,14 +1318,15 @@ public static void main(String[] args){ if(!openWindow) System.setProperty("java.awt.headless", "true"); if(verbose) align.setLoggerLevel(Level.FINE); - String histoName = parser.getOptionParser("-analyze").getOption("-input").stringValue(); - frameTitle = frameTitle + " - " + histoName; + String inputHisto = parser.getOptionParser("-analyze").getInputList().get(0); + frameTitle = frameTitle + " - " + inputHisto; align.setShiftsMode(shifts); align.setFitOptions(sector, iter, tscFrame, r1Global); align.initConstants(11, initVar, previousVar, compareVar); - align.readHistos(histoName, optStats); + align.readHistos(inputHisto, optStats); align.analyzeHistos(residuals, vertexFit, vertexPar, testFit); + align.saveHistos(histoName); } if(parser.getCommand().equals("-fit")) { @@ -1280,7 +1346,7 @@ public static void main(String[] args){ if(!openWindow) System.setProperty("java.awt.headless", "true"); if(verbose) align.setLoggerLevel(Level.FINE); - String histoName = parser.getOptionParser("-fit").getOption("-input").stringValue(); + String histoName = parser.getOptionParser("-fit").getInputList().get(0); frameTitle = frameTitle + " - " + histoName; align.setShiftsMode(shifts); diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java index 2e71c52..e17b9ff 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Constants.java @@ -42,6 +42,7 @@ public class Constants { public static int VDFBINS = 200; public static double VDFMIN = -5.0; public static double VDFMAX = 5.0; + public static double CHI2MAX = 2.5; // global fit @@ -74,6 +75,7 @@ public class Constants { // measurements weight + public static double[][][][] MEASWEIGHTS = null; public static double[] MEASWEIGHT = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 326eb44..0999a02 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -650,6 +650,9 @@ public void analyzeHisto(int fit, int vertexFit) { // if(l>24) this.parErrors[is][it][ip][l] *= 2; } } + else { + Constants.MEASWEIGHTS[is][it][ip][l]=0; + } System.out.print("\r"); } H1F hvtx = vertex[it][ip].getH1F("hi-S"+s); @@ -669,18 +672,29 @@ public void analyzeHisto(int fit, int vertexFit) { if(hvtx.getFunction().parameter(i).name().equals("sc")) isc = i; if(hvtx.getFunction().parameter(i).name().equals("scw")) iscw = i; } - if(isc>=0 && iscw>=0 && hvtx.getFunction().getParameter(isc)>10) { + if(isc>=0 && iscw>=0 && hvtx.getFunction().getParameter(isc)>0) { this.parValues[is][it][ip][nLayer+nTarget-1] = (hvtx.getFunction().getParameter(iscw)-Constants.SCEXIT)*Constants.SCALE; this.parErrors[is][it][ip][nLayer+nTarget-1] = Math.max(hvtx.getFunction().parameter(iscw).error()*Constants.SCALE, Constants.SCALE*dx); this.parSigmas[is][it][ip][nLayer+nTarget-1] = hvtx.getFunction().getParameter(2)*Constants.SCALE; } - if(itl>=0 && hvtx.getFunction().getParameter(0)>10) { + else { + Constants.MEASWEIGHTS[is][it][ip][nLayer+nTarget-1]=0; + } + if(itl>=0 && hvtx.getFunction().getParameter(0)>0) { this.parValues[is][it][ip][nLayer+nTarget-2] = (hvtx.getFunction().getParameter(itl)-Constants.TARGETLENGTH)*Constants.SCALE; this.parErrors[is][it][ip][nLayer+nTarget-2] = Math.max(hvtx.getFunction().parameter(itl).error()*Constants.SCALE, Constants.SCALE*dx); this.parSigmas[is][it][ip][nLayer+nTarget-2] = hvtx.getFunction().getParameter(2)*Constants.SCALE; } + else { + Constants.MEASWEIGHTS[is][it][ip][nLayer+nTarget-2]=0; + } } } + else { + Constants.MEASWEIGHTS[is][it][ip][0]=0; + Constants.MEASWEIGHTS[is][it][ip][nLayer+nTarget-2]=0; + Constants.MEASWEIGHTS[is][it][ip][nLayer+nTarget-1]=0; + } } } } @@ -714,12 +728,14 @@ public void getFailedFitStats() { !residuals[is][it][ip].getH1F("hi-L"+l).getFunction().isFitValid()) { nfailed++; LOGGER.log(Level.WARNING, String.format("\tResidual fit for sector=%1d theta bin=%1d phi bin=%1d layer=%2d FAILED",is+1,it,ip,l)); + residuals[is][it][ip].getH1F("hi-L"+l).getFunction().setChiSquare(-Math.abs(residuals[is][it][ip].getH1F("hi-L"+l).getFunction().getChiSquare())); } } if(vertex[it][ip].getH1F("hi-S"+(is+1)).getFunction()!=null && !vertex[it][ip].getH1F("hi-S"+(is+1)).getFunction().isFitValid()) { nfailed++; LOGGER.log(Level.WARNING, String.format("\tVertex fit for sector=%1d theta bin=%1d phi bin=%1d FAILED",is+1,it,ip)); + vertex[it][ip].getH1F("hi-S"+(is+1)).getFunction().setChiSquare(-Math.abs(vertex[it][ip].getH1F("hi-S"+(is+1)).getFunction().getChiSquare())); } } } @@ -756,7 +772,7 @@ public double[] getParValues(String parameter, int sector, int itheta, int iphi) else if(parameter.equals("LR")) return this.lrValues[sector-1][itheta][iphi]; else - return this.parValues[sector-1][itheta][iphi]; + return this.getWeightedParValues(sector, itheta, iphi); } public double[] getParErrors(String parameter, int sector, int itheta, int iphi) { @@ -771,7 +787,7 @@ public double[] getParErrors(String parameter, int sector, int itheta, int iphi) else if(parameter.equals("LR")) return this.zeroes[sector-1][itheta][iphi]; else - return this.parErrors[sector-1][itheta][iphi]; + return this.getWeightedParErrors(sector, itheta, iphi); } public double[] getParSigmas(String parameter, int sector, int itheta, int iphi) { @@ -789,6 +805,22 @@ else if(parameter.equals("LR")) return this.parSigmas[sector-1][itheta][iphi]; } + private double[] getWeightedParValues(int sector, int itheta, int iphi) { + double[] wpars = new double[parValues[sector-1][itheta][iphi].length]; + for(int il=0; il0) + histo.getFunction().setFitValid(true); + else + histo.getFunction().setFitValid(false); + } break; } + if(histo.getFunction().getChiSquare()/histo.getFunction().getNDF()>Constants.CHI2MAX) + histo.getFunction().setFitValid(false); histo.getFunction().setStatBoxFormat("%.2f"); histo.getFunction().setStatBoxErrorFormat("%.2f"); return histo.getFunction().isFitValid(); @@ -992,7 +1033,10 @@ else if(fit>0) { } } else if(histo.getFunction()!=null) { - histo.getFunction().setFitValid(true); + if(histo.getFunction().getChiSquare()>0) + histo.getFunction().setFitValid(true); + else + histo.getFunction().setFitValid(false); } histo.getFunction().setStatBoxFormat("%.1f"); histo.getFunction().setStatBoxErrorFormat("%.1f"); @@ -1384,6 +1428,69 @@ public static void fitRGDVertex(H1F histo) { } /** + * 3-peaks vertex fitting function + * Peaks correspond to: target windows and scattering chamber exit window + * Initialized according to: + * - chosen target length (TARGETLENGTH), + * - target exit window position (TARGETPOS) + * - distance between target exit window and insulation foil (WINDOWDIST) + * - distance between the scattering chamber exit window and the target center (SCEXIT) + * Includes two wide Gaussians to account for target residual gas + * and the air outside the scattering chamber + * @param histo + */ + public static void fitRGKVertex(H1F histo) { + int nbin = histo.getData().length; + double dx = histo.getDataX(1)-histo.getDataX(0); + //find downstream window + int ibin0 = Histo.getMaximumBinBetween(histo, histo.getDataX(0), (Constants.TARGETPOS+Constants.SCEXIT)/2); + //check if the found maximum is the first or second peak, ibin is tentative upstream window + int ibin1 = Math.max(0, ibin0 - (int)(Constants.TARGETLENGTH/dx)); + int ibin2 = Math.min(nbin-1, ibin0 + (int)(Constants.TARGETLENGTH/dx)); + if(histo.getBinContent(ibin1)10) scw = histo.getDataX(ibinsc)-mean+Constants.TARGETLENGTH/2; + double bg = histo.getBinContent((ibin1+ibin0)/2); + String function = "[ampU]*gaus(x,[exw]-[tl],[sigma])+" + + "[ampD]*gaus(x,[exw],[sigma])+" + + "[bg]*gaus(x,[exw]-[tl]/2,[tl]*0.6)+" + + "[sc]*gaus(x,[exw]+[scw]-[tl]/2,[sigma])+" + + "[air]*gaus(x,[exw]+[scw]-[tl]/2+[adelta],[asigma])"; + F1D f1_vtx = new F1D("f"+histo.getName(), function, -10, 10); + f1_vtx.setLineColor(2); + f1_vtx.setLineWidth(2); + f1_vtx.setOptStat("1111111111111"); + f1_vtx.setParameter(0, amp); + f1_vtx.setParameter(1, mean); + f1_vtx.setParameter(2, Constants.TARGETLENGTH); + f1_vtx.setParLimits(2, Constants.TARGETLENGTH*0.9, Constants.TARGETLENGTH*1.1); + f1_vtx.setParameter(3, sigma); + f1_vtx.setParameter(4, amp); + f1_vtx.setParameter(5, bg); + f1_vtx.setParameter(6, sc); + f1_vtx.setParameter(7, scw); + f1_vtx.setParLimits(7, (Constants.SCEXIT)*0.7, (Constants.SCEXIT)*1.3); + f1_vtx.setParameter(8, air); + f1_vtx.setParameter(9, sigma*3); + f1_vtx.setParLimits(9, 0, sigma*8); + f1_vtx.setParameter(10, sigma*8); + f1_vtx.setRange(mean-Constants.TARGETLENGTH*2.0,Constants.SCEXIT+Constants.TARGETLENGTH*0.6); +// histo.setFunction(f1_vtx); + DataFitter.fit(f1_vtx, histo, "Q"); //No options uses error for sigma +// if(f1_vtx.getParameter(6) histos = new LinkedHashMap<>(); - public Kinematics(double energy) { + public Kinematics(double energy, String vertex) { this.initGraphics(); + this.initVertexPar(vertex); this.setEbeam(energy); } + private void initVertexPar(String pars) { + if(!pars.isEmpty()) { + double[] parValues = new double[pars.split(":").length]; + for(int i=0; i0) targetPos = parValues[0]; + if(parValues.length>1) targetLength = parValues[1]; + if(parValues.length>2) scWindow = parValues[2]+targetPos; + } + } + public double getEbeam() { return ebeam; } @@ -724,12 +737,22 @@ public class Kinematics { parser.getOptionParser("-process").addOption("-beam" ,"10.6", "beam energy in GeV"); parser.getOptionParser("-process").addOption("-display" ,"1", "display histograms (0/1)"); parser.getOptionParser("-process").addOption("-stats" ,"", "histogram stat option"); + parser.getOptionParser("-process").addOption("-vertpar" , "", "comma-separated vertex function parameters, default values are for Spring19 cryotarget with:\n" + + "\t\t- -3.5: target cell exit window position,\n" + + "\t\t- 5.0: target length,\n" + + "\t\t- 27.3: distance between the scattering chamber exit window and the target center,\n" + + "\t\t leave empty to use defaults; units are cm"); // valid options for histogram-base analysis parser.addCommand("-plot", "plot histogram files"); parser.getOptionParser("-plot").addOption("-beam" ,"10.6", "beam energy in GeV"); parser.getOptionParser("-plot").addOption("-display" ,"1", "display histograms (0/1)"); parser.getOptionParser("-plot").addOption("-stats" ,"", "set histogram stat option"); + parser.getOptionParser("-plot").addOption("-vertpar" , "", "comma-separated vertex function parameters, default values are for Spring19 cryotarget with:\n" + + "\t\t- -3.5: target cell exit window position,\n" + + "\t\t- 5.0: target length,\n" + + "\t\t- 27.3: distance between the scattering chamber exit window and the target center,\n" + + "\t\t leave empty to use defaults; units are cm"); parser.parse(args); @@ -742,6 +765,7 @@ public class Kinematics { if(parser.getCommand().equals("-process")) { int maxEvents = parser.getOptionParser("-process").getOption("-nevent").intValue(); double beamEnergy = parser.getOptionParser("-process").getOption("-beam").doubleValue(); + String vertexPar = parser.getOptionParser("-process").getOption("-vertpar").stringValue(); String namePrefix = parser.getOptionParser("-process").getOption("-o").stringValue(); String histoName = "histo.hipo"; if(!namePrefix.isEmpty()) { @@ -758,7 +782,7 @@ public class Kinematics { System.exit(0); } - analysis = new Kinematics(beamEnergy); + analysis = new Kinematics(beamEnergy, vertexPar); ProgressPrintout progress = new ProgressPrintout(); @@ -790,6 +814,7 @@ public class Kinematics { if(parser.getCommand().equals("-plot")) { double beamEnergy = parser.getOptionParser("-plot").getOption("-beam").doubleValue(); + String vertexPar = parser.getOptionParser("-plot").getOption("-vertpar").stringValue(); optStats = parser.getOptionParser("-plot").getOption("-stats").stringValue(); openWindow = parser.getOptionParser("-plot").getOption("-display").intValue()!=0; if(!openWindow) System.setProperty("java.awt.headless", "true"); @@ -801,7 +826,7 @@ public class Kinematics { System.exit(0); } - analysis = new Kinematics(beamEnergy); + analysis = new Kinematics(beamEnergy, vertexPar); analysis.readHistos(inputList.get(0)); analysis.analyzeHistos(); } From 34877bd6e91f9cf5166df3f845aee58d206fb715 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Tue, 27 Aug 2024 16:31:30 -0400 Subject: [PATCH 56/60] now really switching -fit parser options to use inputlist --- .../src/main/java/org/clas/dc/alignment/Alignment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index e480bac..0b2dc47 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -1201,7 +1201,7 @@ public static void main(String[] args){ // valid options for final minuit-fit parser.addCommand("-fit", "perform misalignment fit"); - parser.getOptionParser("-fit").addRequired("-input" , "input histogram file"); + parser.getOptionParser("-fit").setRequiresInputList(true); parser.getOptionParser("-fit").addOption("-display" ,"1", "display histograms (0/1)"); parser.getOptionParser("-fit").addOption("-stats" ,"", "set histogram stat option"); parser.getOptionParser("-fit").addOption("-shifts" , "0", "use event-by-event subtraction for unit shifts (1=on, 0=off)"); From 129551f202f67aea1a1840cc09ccc75c4758e377 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Tue, 27 Aug 2024 18:15:56 -0400 Subject: [PATCH 57/60] updated .gitignore with dc specific files --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index f2c50ab..adcf15b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,13 @@ target/ *.class *.jar +# DC-specific files. +dc/java/dc-alignment/*.hipo +dc/java/dc-alignment/dc-alignment.log* +dc/java/dc-alignment/*.sqlite +dc/java/dc-alignment/*.txt +dc/utilities/*.hipo + # FMT-specific files. fmt/*.hipo fmt/error_report.txt From b5bd99348230cc47a5370656b21f8bd8e6d3821e Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Thu, 29 Aug 2024 10:11:32 -0400 Subject: [PATCH 58/60] plot only non empty graphs when running only with r0 --- .../main/java/org/clas/dc/alignment/Alignment.java | 4 ++-- .../src/main/java/org/clas/dc/alignment/Histo.java | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java index 55f79c6..3c57d0b 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Alignment.java @@ -432,7 +432,7 @@ public EmbeddedCanvasTabbed analyzeFits() { this.canvasAutoScale(canvas.getCanvas("residuals by region")); canvas.getCanvas().setFont(fontName); - if(compareAlignment!=null) { + if(compareAlignment!=null && this.histos.size()>1) { LOGGER.log(LEVEL,"\nPlotting corrected geometry residuals"); canvas.addCanvas("CCDB corrected"); canvas.getCanvas("CCDB corrected").draw(this.getResidualGraphs(compareAlignment.subtract(initAlignment))); @@ -763,7 +763,7 @@ private DataGroup getAngularGraph(String parameter, Table alignment) { else gr_fit.setMarkerColor(this.markerColor[(il-1)/6]); gr_fit.setMarkerStyle(this.markerStyle[ip-1]); gr_fit.setMarkerSize(this.markerSize); - residuals.addDataSet(gr_fit, is); + if(gr_fit.getDataSize(0)>0) residuals.addDataSet(gr_fit, is); } } } diff --git a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java index 4eec432..000631e 100644 --- a/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java +++ b/dc/java/dc-alignment/src/main/java/org/clas/dc/alignment/Histo.java @@ -946,11 +946,15 @@ private static boolean fitVertex(int mode, H1F histo) { } break; } - if(histo.getFunction().getChiSquare()/histo.getFunction().getNDF()>Constants.CHI2MAX) - histo.getFunction().setFitValid(false); - histo.getFunction().setStatBoxFormat("%.2f"); - histo.getFunction().setStatBoxErrorFormat("%.2f"); - return histo.getFunction().isFitValid(); + if(histo.getFunction()!=null) { + if(histo.getFunction().getChiSquare()/histo.getFunction().getNDF()>Constants.CHI2MAX) + histo.getFunction().setFitValid(false); + histo.getFunction().setStatBoxFormat("%.2f"); + histo.getFunction().setStatBoxErrorFormat("%.2f"); + return histo.getFunction().isFitValid(); + } + else + return false; } From dd7c746b6430557f1aaece781c43e39793b16429 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Fri, 6 Sep 2024 17:34:04 -0400 Subject: [PATCH 59/60] fixed issue with skim script --- dc/utilities/createSkims.csh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/utilities/createSkims.csh b/dc/utilities/createSkims.csh index cc5ceb8..4b42c0c 100755 --- a/dc/utilities/createSkims.csh +++ b/dc/utilities/createSkims.csh @@ -24,7 +24,7 @@ else set vars = "r0 r1_x r1_y r1_z r1_cy r1_cz r2_x r2_y r2_z r2_cy r2_cz r3_x r3_y r3_z r3_cy r3_cz" endif -set schema = `ls $indir/r0` +set schema = `ls $indir/r0/*/recon/README.json | awk -F"$indir/r0/" '{print $2}' | awk -F"/" '{print $1}'` echo echo reading input files from $indir with subdirectory $schema From cd89fd51ac397a2ee0a5a20b303c698961084c7d Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Thu, 12 Dec 2024 16:42:25 +0100 Subject: [PATCH 60/60] version bump --- dc/java/dc-alignment/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dc/java/dc-alignment/pom.xml b/dc/java/dc-alignment/pom.xml index 4a9a2ef..c49bd5f 100644 --- a/dc/java/dc-alignment/pom.xml +++ b/dc/java/dc-alignment/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.clas.detector dc-alignment - 2.1 + 2.2 jar