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
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
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..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
@@ -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; is1) {
LOGGER.log(LEVEL,"\nPlotting corrected geometry residuals");
canvas.addCanvas("CCDB corrected");
canvas.getCanvas("CCDB corrected").draw(this.getResidualGraphs(compareAlignment.subtract(initAlignment)));
@@ -411,6 +450,7 @@ public EmbeddedCanvasTabbed analyzeFits() {
LOGGER.log(LEVEL,"\nPlotting shifted geometry residuals");
canvas.addCanvas("shift magnitude");
canvas.getCanvas("shift magnitude").draw(this.getShiftsHisto(1));
+ this.canvasAutoScale(canvas.getCanvas("shift magnitude"));
for(String key : histos.keySet()) {
if(!key.equals("nominal")) {
canvas.addCanvas(key);
@@ -454,11 +494,13 @@ public EmbeddedCanvasTabbed analyzeFits() {
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));
+ this.canvasAutoScale(canvas.getCanvas("before/after"));
canvas.getCanvas().setFont(fontName);
canvas.addCanvas("before/after by region");
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));
+ this.canvasAutoScale(canvas.getCanvas("before/after by region"));
canvas.getCanvas().setFont(fontName);
canvas.addCanvas("misalignments");
canvas.getCanvas("misalignments").draw(comAlignPars);
@@ -502,6 +544,17 @@ public EmbeddedCanvasTabbed analyzeFits() {
return canvas;
}
+ private void canvasAutoScale(EmbeddedCanvas canvas) {
+ for(EmbeddedPad pad : canvas.getCanvasPads()){
+ double yMax = -1;
+ for(IDataSetPlotter ds : pad.getDatasetPlotters()) {
+ if(ds.getDataSet() instanceof H1F) {
+ yMax = Math.max(yMax, ds.getDataSet().getMax());
+ }
+ }
+ if(yMax>0) 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);
+ }
gr_fit.setTitle("Sector " + sector);
gr_fit.setTitleX("Residual (um)");
gr_fit.setTitleY("#theta bin/layer");
@@ -704,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);
}
}
}
@@ -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)");
@@ -1141,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)");
@@ -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 6e93887..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
@@ -516,9 +516,8 @@ private void processEvent(Event event, Event shifted) {
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);
-
+ }
+ this.vertex[it][ip].getH1F("hi-S" + sector).fill(vz);
}
}
}
@@ -650,6 +649,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 +671,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 +727,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 +771,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 +786,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 +804,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;
}
- 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;
}
@@ -992,7 +1036,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 +1431,72 @@ public static void fitRGDVertex(H1F histo) {
}
/**
+<<<<<<< HEAD
+ * 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)>>>>>> master
* 4-peaks vertex fitting function
* Peaks correspond to: target windows and scattering chamber exit window
* Initialized according to:
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
diff --git a/dc/utilities/kinematics.groovy b/dc/utilities/kinematics.groovy
index 73e2cab..3595fb7 100644
--- a/dc/utilities/kinematics.groovy
+++ b/dc/utilities/kinematics.groovy
@@ -46,11 +46,24 @@ public class Kinematics {
private Map 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();
}