Skip to content

Commit 5d0d333

Browse files
authored
Modify forward electron Vz to add target window (#464)
1 parent 1bcf95b commit 5d0d333

5 files changed

Lines changed: 58 additions & 15 deletions

File tree

src/main/java/org/jlab/clas/timeline/analysis/forward/forward_Tracking_EleVz.groovy

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class forward_Tracking_EleVz {
99

1010
def data = new ConcurrentHashMap()
1111
def data_2nd_peak = new ConcurrentHashMap()
12+
def data_upstream = new ConcurrentHashMap()
1213

1314
def is_RGD_LD2 = { run ->
1415
return (RunDependentCut.runIsInRange(run, 18305, 18313, true) ||
@@ -32,6 +33,11 @@ def processRun(dir, run) {
3233
def sigmalist_2nd_peak = []
3334
def chi2list_2nd_peak = []
3435

36+
def funclist_upstream = []
37+
def meanlist_upstream = []
38+
def sigmalist_upstream = []
39+
def chi2list_upstream = []
40+
3541
def histlist = (0..<6).collect{
3642
def h1 = dir.getObject('/elec/H_trig_vz_mom_S'+(it+1)).projectionY()
3743
h1.setName("sec"+(it+1))
@@ -56,7 +62,12 @@ def processRun(dir, run) {
5662
}
5763
}
5864
else if (dataset == 'rgl') {
59-
f1 = ForwardFitter.fitRGL(h1)
65+
f1 = ForwardFitter.fitRGL(h1, 10, 30)
66+
def f1_upstream = ForwardFitter.fitRGL(h1, -40, -20)
67+
funclist_upstream.add(f1_upstream)
68+
meanlist_upstream.add(f1_upstream.getParameter(1))
69+
sigmalist_upstream.add(f1_upstream.getParameter(2).abs())
70+
chi2list_upstream.add(f1_upstream.getChiSquare())
6071
}
6172
else {
6273
f1 = ForwardFitter.fit(h1)
@@ -80,6 +91,9 @@ def processRun(dir, run) {
8091
if (funclist_2nd_peak.size() > 0) {
8192
data_2nd_peak[run] = [run:run, hlist:histlist, flist:funclist_2nd_peak, mean:meanlist_2nd_peak, sigma:sigmalist_2nd_peak, clist:chi2list_2nd_peak]
8293
}
94+
if (funclist_upstream.size() > 0) {
95+
data_upstream[run] = [run:run, hlist:histlist, flist:funclist_upstream, mean:meanlist_upstream, sigma:sigmalist_upstream, clist:chi2list_upstream]
96+
}
8397
}
8498

8599

@@ -118,6 +132,30 @@ def write() {
118132
if (data_2nd_peak.size() != 0) {
119133
out.addDataSet(grtl_2nd_peak)
120134
}
135+
136+
if (data_upstream.size() != 0) {
137+
def grtl_upstream = new GraphErrors('sec'+(sec+1)+'_upstream')
138+
grtl_upstream.setTitle("VZ (upstream peak value) for electrons per sector")
139+
grtl_upstream.setTitleY("VZ (upstream peak value) for electrons per sector (cm)")
140+
grtl_upstream.setTitleX("run number")
141+
142+
def grtl_window = new GraphErrors('sec'+(sec+1)+'_window')
143+
grtl_window.setTitle("VZ target window length (downstream - upstream peak distance) per sector")
144+
grtl_window.setTitleY("VZ target window length (cm)")
145+
grtl_window.setTitleX("run number")
146+
147+
data_upstream.sort{it.key}.each{run,it->
148+
out.cd('/'+it.run)
149+
out.addDataSet(it.flist[sec])
150+
grtl_upstream.addPoint(it.run, it.mean[sec], 0, 0)
151+
def window_length = (data[run].mean[sec] - it.mean[sec]).abs()
152+
grtl_window.addPoint(it.run, window_length, 0, 0)
153+
}
154+
155+
out.cd('/timelines')
156+
out.addDataSet(grtl_upstream)
157+
out.addDataSet(grtl_window)
158+
}
121159
}
122160

123161
out.writeFile('forward_electron_VZ.hipo')

src/main/java/org/jlab/clas/timeline/analysis/forward/forward_Tracking_NegVz.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def processRun(dir, run) {
5555
}
5656
}
5757
else if (dataset == 'rgl') {
58-
f1 = ForwardFitter.fitRGL(h1)
58+
f1 = ForwardFitter.fitRGL(h1, 10, 30)
5959
}
6060
else {
6161
f1 = ForwardFitter.fit(h1)

src/main/java/org/jlab/clas/timeline/analysis/forward/forward_Tracking_PosVz.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def processRun(dir, run) {
5555
}
5656
}
5757
else if (dataset == 'rgl') {
58-
f1 = ForwardFitter.fitRGL(h1)
58+
f1 = ForwardFitter.fitRGL(h1, 10, 30)
5959
}
6060
else {
6161
f1 = ForwardFitter.fit(h1)

src/main/java/org/jlab/clas/timeline/fitter/ForwardFitter.groovy

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,30 +52,35 @@ class ForwardFitter{
5252
}
5353

5454

55-
static F1D fitRGL(H1F h1) {
56-
def f1 = new F1D("fit:"+h1.getName(), "[amp]*gaus(x,[mean],[sigma])", 15, 25);
57-
double hAmp = h1.getBinContent(h1.getMaximumBin());
58-
double hMean = h1.getAxis().getBinCenter(h1.getMaximumBin());
59-
double hRMS = h1.getRMS(); //cm
60-
f1.setRange(hMean-1.0, hMean+1.0);
55+
static F1D fitRGL(H1F h1, double fit_left, double fit_right) {
56+
def f1 = new F1D("fit:"+h1.getName(), "[amp]*gaus(x,[mean],[sigma])", fit_left, fit_right);
57+
58+
// find local max within [fit_left, fit_right] only, avoiding the other peak
59+
int binLeft = Math.max(0, h1.getAxis().getBin(fit_left))
60+
int binRight = Math.min(h1.getAxis().getNBins() - 1, h1.getAxis().getBin(fit_right))
61+
int maxBin = binLeft
62+
for (int i = binLeft + 1; i <= binRight; i++) {
63+
if (h1.getBinContent(i) > h1.getBinContent(maxBin)) maxBin = i
64+
}
65+
double hAmp = h1.getBinContent(maxBin)
66+
double hMean = h1.getAxis().getBinCenter(maxBin)
67+
68+
f1.setRange(hMean - 2.0, hMean + 2.0);
6169
f1.setParameter(0, hAmp);
6270
f1.setParameter(1, hMean);
63-
//f1.setParameter(2, hRMS);
64-
f1.setParameter(2, 0.3);
71+
f1.setParameter(2, 1);
6572
MoreFitter.fit(f1,h1,"LQ");
6673

6774
def makefit = {func->
6875
hMean = func.getParameter(1)
69-
hRMS = func.getParameter(2).abs()
70-
func.setRange(hMean-1.0,hMean+1.0)
76+
func.setRange(hMean - 2.0, hMean + 2.0)
7177
MoreFitter.fit(func,h1,"LQ")
7278
return [func.getChiSquare(), (0..<func.getNPars()).collect{func.getParameter(it)}]
7379
}
7480

7581
def fits1 = (0..20).collect{makefit(f1)}
7682
def bestfit = fits1.sort()[0]
7783
f1.setParameters(*bestfit[1])
78-
//makefit(f1)
7984

8085
return f1
8186
}

src/main/java/org/jlab/clas/timeline/histograms/GeneralMon.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1250,7 +1250,7 @@ public GeneralMon(int reqrunNum, String reqOutputDir, float reqEB, boolean reqTi
12501250
H_trig_theta_phi_S[s].setTitle(String.format("e sect %d",s+1));
12511251
H_trig_theta_phi_S[s].setTitleX("#phi (^o)");
12521252
H_trig_theta_phi_S[s].setTitleY("#theta (^o)");
1253-
H_trig_vz_mom_S[s] = new H2F(String.format("H_trig_vz_mom_S%d",s+1),String.format("H_trig_vz_mom_S%d",s+1),100,0,EB,100,-25,50);
1253+
H_trig_vz_mom_S[s] = new H2F(String.format("H_trig_vz_mom_S%d",s+1),String.format("H_trig_vz_mom_S%d",s+1),100,0,EB,200,-50,50);
12541254
H_trig_vz_mom_S[s].setTitle(String.format("e sect %d",s+1));
12551255
H_trig_vz_mom_S[s].setTitleX("p (GeV)");
12561256
H_trig_vz_mom_S[s].setTitleY("vz (cm)");

0 commit comments

Comments
 (0)