Skip to content

Commit 7befc45

Browse files
feat(timeline): add support for second peak data in forward tracking Vz (#297)
1 parent 65f97fa commit 7befc45

4 files changed

Lines changed: 162 additions & 16 deletions

File tree

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,18 @@ import org.jlab.groot.math.F1D
1111

1212

1313
class ForwardFitter{
14-
static F1D fitBimodal(H1F h1) {
14+
static F1D fitBimodal(H1F h1, float mean1, float mean2, float sigma1, float sigma2, float range_min, float range_max) {
1515
def f1 = new F1D("fit:"+h1.getName(), "[amp1]*gaus(x,[mean1],[sigma1])+[amp2]*gaus(x,[mean2],[sigma2])+[p0]+[p1]*x", -9.0, 0.0);
1616
double hAmp = h1.getBinContent(h1.getMaximumBin());
1717
double hMean = h1.getAxis().getBinCenter(h1.getMaximumBin());
1818
double hRMS = h1.getRMS();
19-
double rangeMin = (-9);
20-
double rangeMax = (0);
21-
f1.setRange(rangeMin, rangeMax);
19+
f1.setRange(range_min, range_max);
2220
f1.setParameter(0, hAmp);
23-
f1.setParameter(1, -8);
24-
f1.setParameter(2, 0.5);
21+
f1.setParameter(1, mean1);
22+
f1.setParameter(2, sigma1);
2523
f1.setParameter(3, hAmp);
26-
f1.setParameter(4, -3);
27-
f1.setParameter(5, 0.5);
24+
f1.setParameter(4, mean2);
25+
f1.setParameter(5, sigma2);
2826
f1.setParameter(6, 1);
2927
f1.setParameter(7, 1);
3028
MoreFitter.fit(f1,h1,"LQ");
@@ -38,7 +36,7 @@ static F1D fitBimodal(H1F h1) {
3836
hRMS1 = func.getParameter(2).abs()
3937
hMean2 = func.getParameter(4)
4038
hRMS2 = func.getParameter(5).abs()
41-
func.setRange(-9, 0)
39+
func.setRange(range_min, range_max)
4240
MoreFitter.fit(func,h1,"Q")
4341

4442
return [func.getChiSquare(), (0..<func.getNPars()).collect{func.getParameter(it)}]

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

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,50 @@ import org.jlab.clas.timeline.fitter.ForwardFitter
77
class forward_Tracking_EleVz {
88

99
def data = new ConcurrentHashMap()
10+
def data_2nd_peak = new ConcurrentHashMap()
11+
12+
def is_RGD_LD2 = { run ->
13+
return ((18305 <= run && run <= 18313) ||
14+
(18317 <= run && run <= 18336) ||
15+
(18419 <= run && run <= 18439) ||
16+
(18528 <= run && run <= 18559) ||
17+
(18644 <= run && run <= 18656) ||
18+
(18763 <= run && run <= 18790) ||
19+
(18851 <= run && run <= 18873) ||
20+
(18977 <= run && run <= 19059))
21+
}
1022

1123
def processDirectory(dir, run) {
1224
def funclist = []
1325
def meanlist = []
1426
def sigmalist = []
1527
def chi2list = []
28+
29+
def funclist_2nd_peak = []
30+
def meanlist_2nd_peak = []
31+
def sigmalist_2nd_peak = []
32+
def chi2list_2nd_peak = []
33+
1634
def histlist = (0..<6).collect{
1735
def h1 = dir.getObject('/elec/H_trig_vz_mom_S'+(it+1)).projectionY()
1836
h1.setName("sec"+(it+1))
1937
h1.setTitle("VZ of electrons")
2038
h1.setTitleX("VZ of electrons (cm)")
2139

40+
def usefitBimodal = false
2241
def f1
2342
if(run >= 18305 && run <= 19131) {
24-
if ((run == 18580) || (18305 <= run && run <= 18336) || (18396 <= run && run <= 18399) || (18406 <= run && run <= 18439) || (18644 <= run && run <= 18656) || (18764 <= run && run <= 18790) || (18851 <= run && run <= 18873) || (18977 <= run && run <= 19060)) {
43+
if (is_RGD_LD2(run)) {
2544
f1 = ForwardFitter.fit(h1)
2645
}
2746
else {
28-
f1 = ForwardFitter.fitBimodal(h1)
47+
if (run == 18399) {
48+
f1 = ForwardFitter.fitBimodal(h1, -17.5, -13, 1, 1, -19, -10)
49+
}
50+
else {
51+
f1 = ForwardFitter.fitBimodal(h1, -8, -3, 0.8, 0.8, -10, 0)
52+
}
53+
usefitBimodal = true
2954
}
3055
} else {
3156
f1 = ForwardFitter.fit(h1)
@@ -35,9 +60,20 @@ def processDirectory(dir, run) {
3560
meanlist.add(f1.getParameter(1))
3661
sigmalist.add(f1.getParameter(2).abs())
3762
chi2list.add(f1.getChiSquare())
63+
64+
if (usefitBimodal) {
65+
funclist_2nd_peak.add(f1)
66+
meanlist_2nd_peak.add(f1.getParameter(4))
67+
sigmalist_2nd_peak.add(f1.getParameter(5).abs())
68+
chi2list_2nd_peak.add(f1.getChiSquare())
69+
}
70+
3871
return h1
3972
}
4073
data[run] = [run:run, hlist:histlist, flist:funclist, mean:meanlist, sigma:sigmalist, clist:chi2list]
74+
if (funclist_2nd_peak.size() > 0) {
75+
data_2nd_peak[run] = [run:run, hlist:histlist, flist:funclist_2nd_peak, mean:meanlist_2nd_peak, sigma:sigmalist_2nd_peak, clist:chi2list_2nd_peak]
76+
}
4177
}
4278

4379

@@ -61,8 +97,21 @@ def close() {
6197
out.addDataSet(it.flist[sec])
6298
grtl.addPoint(it.run, it.mean[sec], 0, 0)
6399
}
100+
101+
def grtl_2nd_peak = new GraphErrors('sec'+(sec+1)+'_2')
102+
grtl_2nd_peak.setTitle("VZ (peak value) for electrons per sector")
103+
grtl_2nd_peak.setTitleY("VZ (peak value) for electrons per sector (cm)")
104+
grtl_2nd_peak.setTitleX("run number")
105+
data_2nd_peak.sort{it.key}.each{run,it->
106+
grtl_2nd_peak.addPoint(it.run, it.mean[sec], 0, 0)
107+
}
108+
64109
out.cd('/timelines')
65110
out.addDataSet(grtl)
111+
112+
if (data_2nd_peak.size() != 0) {
113+
out.addDataSet(grtl_2nd_peak)
114+
}
66115
}
67116

68117
out.writeFile('forward_electron_VZ.hipo')

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

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,49 @@ import org.jlab.clas.timeline.fitter.ForwardFitter
77
class forward_Tracking_NegVz {
88

99
def data = new ConcurrentHashMap()
10+
def data_2nd_peak = new ConcurrentHashMap()
11+
12+
def is_RGD_LD2 = { run ->
13+
return ((18305 <= run && run <= 18313) ||
14+
(18317 <= run && run <= 18336) ||
15+
(18419 <= run && run <= 18439) ||
16+
(18528 <= run && run <= 18559) ||
17+
(18644 <= run && run <= 18656) ||
18+
(18763 <= run && run <= 18790) ||
19+
(18851 <= run && run <= 18873) ||
20+
(18977 <= run && run <= 19059))
21+
}
1022

1123
def processDirectory(dir, run) {
1224
def funclist = []
1325
def meanlist = []
1426
def sigmalist = []
1527
def chi2list = []
28+
29+
def funclist_2nd_peak = []
30+
def meanlist_2nd_peak = []
31+
def sigmalist_2nd_peak = []
32+
def chi2list_2nd_peak = []
33+
1634
def histlist = (0..<6).collect{
1735
def h1 = dir.getObject('/dc/H_dcm_vz_s'+(it+1))
1836
h1.setTitle("VZ of negatives")
1937
h1.setTitleX("VZ of negatives (cm)")
20-
38+
39+
def usefitBimodal = false
2140
def f1
2241
if(run >= 18305 && run <= 19131) {
23-
if ((run == 18580) || (18305 <= run && run <= 18336) || (18396 <= run && run <= 18399) || (18406 <= run && run <= 18439) || (18644 <= run && run <= 18656) || (18764 <= run && run <= 18790) || (18851 <= run && run <= 18873) || (18977 <= run && run <= 19060)) {
42+
if (is_RGD_LD2(run)) {
2443
f1 = ForwardFitter.fit(h1)
2544
}
2645
else {
27-
f1 = ForwardFitter.fitBimodal(h1)
46+
if (run == 18399) {
47+
f1 = ForwardFitter.fitBimodal(h1, -17.5, -13, 1, 1, -19, -10)
48+
}
49+
else {
50+
f1 = ForwardFitter.fitBimodal(h1, -8, -3, 0.8, 0.8, -10, 0)
51+
}
52+
usefitBimodal = true
2853
}
2954
} else {
3055
f1 = ForwardFitter.fit(h1)
@@ -34,9 +59,20 @@ def processDirectory(dir, run) {
3459
meanlist.add(f1.getParameter(1))
3560
sigmalist.add(f1.getParameter(2).abs())
3661
chi2list.add(f1.getChiSquare())
62+
63+
if (usefitBimodal) {
64+
funclist_2nd_peak.add(f1)
65+
meanlist_2nd_peak.add(f1.getParameter(4))
66+
sigmalist_2nd_peak.add(f1.getParameter(5).abs())
67+
chi2list_2nd_peak.add(f1.getChiSquare())
68+
}
69+
3770
return h1
3871
}
3972
data[run] = [run:run, hlist:histlist, flist:funclist, mean:meanlist, sigma:sigmalist, clist:chi2list]
73+
if (funclist_2nd_peak.size() > 0) {
74+
data_2nd_peak[run] = [run:run, hlist:histlist, flist:funclist_2nd_peak, mean:meanlist_2nd_peak, sigma:sigmalist_2nd_peak, clist:chi2list_2nd_peak]
75+
}
4076
}
4177

4278

@@ -60,8 +96,21 @@ def close() {
6096
out.addDataSet(it.flist[sec])
6197
grtl.addPoint(it.run, it.mean[sec], 0, 0)
6298
}
99+
100+
def grtl_2nd_peak = new GraphErrors('sec'+(sec+1)+'_2')
101+
grtl_2nd_peak.setTitle("VZ (peak value) for electrons per sector")
102+
grtl_2nd_peak.setTitleY("VZ (peak value) for electrons per sector (cm)")
103+
grtl_2nd_peak.setTitleX("run number")
104+
data_2nd_peak.sort{it.key}.each{run,it->
105+
grtl_2nd_peak.addPoint(it.run, it.mean[sec], 0, 0)
106+
}
107+
63108
out.cd('/timelines')
64109
out.addDataSet(grtl)
110+
111+
if (data_2nd_peak.size() != 0) {
112+
out.addDataSet(grtl_2nd_peak)
113+
}
65114
}
66115

67116
out.writeFile('forward_negative_VZ.hipo')

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

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,49 @@ import org.jlab.clas.timeline.fitter.ForwardFitter
77
class forward_Tracking_PosVz {
88

99
def data = new ConcurrentHashMap()
10+
def data_2nd_peak = new ConcurrentHashMap()
11+
12+
def is_RGD_LD2 = { run ->
13+
return ((18305 <= run && run <= 18313) ||
14+
(18317 <= run && run <= 18336) ||
15+
(18419 <= run && run <= 18439) ||
16+
(18528 <= run && run <= 18559) ||
17+
(18644 <= run && run <= 18656) ||
18+
(18763 <= run && run <= 18790) ||
19+
(18851 <= run && run <= 18873) ||
20+
(18977 <= run && run <= 19059))
21+
}
1022

1123
def processDirectory(dir, run) {
1224
def funclist = []
1325
def meanlist = []
1426
def sigmalist = []
1527
def chi2list = []
28+
29+
def funclist_2nd_peak = []
30+
def meanlist_2nd_peak = []
31+
def sigmalist_2nd_peak = []
32+
def chi2list_2nd_peak = []
33+
1634
def histlist = (0..<6).collect{
1735
def h1 = dir.getObject('/dc/H_dcp_vz_s'+(it+1))
1836
h1.setTitle("VZ, negatives")
1937
h1.setTitleX("VZ, negatives (cm)")
2038

39+
def usefitBimodal = false
2140
def f1
2241
if(run >= 18305 && run <= 19131) {
23-
if ((run == 18580) || (18305 <= run && run <= 18336) || (18396 <= run && run <= 18399) || (18406 <= run && run <= 18439) || (18644 <= run && run <= 18656) || (18764 <= run && run <= 18790) || (18851 <= run && run <= 18873) || (18977 <= run && run <= 19060)) {
42+
if (is_RGD_LD2(run)) {
2443
f1 = ForwardFitter.fit(h1)
2544
}
2645
else {
27-
f1 = ForwardFitter.fitBimodal(h1)
46+
if (run == 18399) {
47+
f1 = ForwardFitter.fitBimodal(h1, -17.5, -13, 1, 1, -19, -10)
48+
}
49+
else {
50+
f1 = ForwardFitter.fitBimodal(h1, -8, -3, 0.8, 0.8, -10, 0)
51+
}
52+
usefitBimodal = true
2853
}
2954
} else {
3055
f1 = ForwardFitter.fit(h1)
@@ -33,9 +58,21 @@ def processDirectory(dir, run) {
3358
meanlist.add(f1.getParameter(1))
3459
sigmalist.add(f1.getParameter(2).abs())
3560
chi2list.add(f1.getChiSquare())
61+
62+
if (usefitBimodal) {
63+
funclist_2nd_peak.add(f1)
64+
meanlist_2nd_peak.add(f1.getParameter(4))
65+
sigmalist_2nd_peak.add(f1.getParameter(5).abs())
66+
chi2list_2nd_peak.add(f1.getChiSquare())
67+
}
68+
69+
3670
return h1
3771
}
3872
data[run] = [run:run, hlist:histlist, flist:funclist, mean:meanlist, sigma:sigmalist, clist:chi2list]
73+
if (funclist_2nd_peak.size() > 0) {
74+
data_2nd_peak[run] = [run:run, hlist:histlist, flist:funclist_2nd_peak, mean:meanlist_2nd_peak, sigma:sigmalist_2nd_peak, clist:chi2list_2nd_peak]
75+
}
3976
}
4077

4178

@@ -59,8 +96,21 @@ def close() {
5996
out.addDataSet(it.flist[sec])
6097
grtl.addPoint(it.run, it.mean[sec], 0, 0)
6198
}
99+
100+
def grtl_2nd_peak = new GraphErrors('sec'+(sec+1)+'_2')
101+
grtl_2nd_peak.setTitle("VZ (peak value) for electrons per sector")
102+
grtl_2nd_peak.setTitleY("VZ (peak value) for electrons per sector (cm)")
103+
grtl_2nd_peak.setTitleX("run number")
104+
data_2nd_peak.sort{it.key}.each{run,it->
105+
grtl_2nd_peak.addPoint(it.run, it.mean[sec], 0, 0)
106+
}
107+
62108
out.cd('/timelines')
63109
out.addDataSet(grtl)
110+
111+
if (data_2nd_peak.size() != 0) {
112+
out.addDataSet(grtl_2nd_peak)
113+
}
64114
}
65115

66116
out.writeFile('forward_positive_VZ.hipo')

0 commit comments

Comments
 (0)