Skip to content

Commit f7ec407

Browse files
committed
added helix fit support
1 parent 2f5e972 commit f7ec407

File tree

13 files changed

+207
-697
lines changed

13 files changed

+207
-697
lines changed

build-coatjava.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,6 @@ cp reconstruction/rich/target/clas12detector-rich-*-SNAPSHOT.jar coatjava/lib/se
109109
cp reconstruction/fvt/target/clas12detector-fmt-*-SNAPSHOT.jar coatjava/lib/services/
110110
cp reconstruction/eb/target/clas12detector-eb-*-SNAPSHOT.jar coatjava/lib/services/
111111
cp reconstruction/band/target/clas12detector-band-*-SNAPSHOT.jar coatjava/lib/services/
112-
cp reconstruction/rtpc/target/clas12detector-rtpc-*-SNAPSHOT.jar coatjava/lib/services/
112+
cp reconstruction/rtpc/target/rtpc-*-SNAPSHOT.jar coatjava/lib/services/
113113

114114
echo "COATJAVA SUCCESSFULLY BUILT !"

etc/bankdefs/hipo4/rtpc.json

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,20 @@
1313
{"name":"posZ", "type":"F", "info":"z pos (cm)"},
1414
{"name":"tdiff", "type":"F", "info":"Time shift (ns)"}
1515
]
16-
}
16+
},
17+
{
18+
"name": "RTPC::trackinfo",
19+
"group": 1720,
20+
"item" : 2,
21+
"info" : "reconstructed track info",
22+
"entries": [
23+
{"name":"TID", "type":"I", "info":"Track ID of the hit"},
24+
{"name":"px", "type":"F", "info":"X component of the momentum"},
25+
{"name":"py", "type":"F", "info":"Y component of the momentum"},
26+
{"name":"pz", "type":"F", "info":"Z component of the momentum"},
27+
{"name":"vz", "type":"F", "info":"Z component of the reconstructed vertex"},
28+
{"name":"trackl", "type":"F", "info":"Length of the Track"},
29+
{"name":"dEdx", "type":"F", "info":"dEdx for the Track"}
30+
]
31+
}
1732
]

reconstruction/rtpc/src/main/java/org/jlab/rec/rtpc/banks/RecoBankWriter.java

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.jlab.rec.rtpc.hit.RecoHitVector;
77
import java.util.List;
88
import java.util.HashMap;
9+
import org.jlab.rec.rtpc.hit.FinalTrackInfo;
910

1011
public class RecoBankWriter {
1112

@@ -31,7 +32,8 @@ public DataBank fillRTPCHitsBank(DataEvent event, HitParameters params) {
3132
}
3233

3334
DataBank bank = event.createBank("RTPC::rec", listsize);
34-
35+
36+
3537
if (bank == null) {
3638
System.err.println("COULD NOT CREATE A BANK!!!!!!");
3739
return null;
@@ -60,4 +62,38 @@ public DataBank fillRTPCHitsBank(DataEvent event, HitParameters params) {
6062

6163
return bank;
6264
}
65+
66+
public DataBank fillRTPCTrackBank(DataEvent event, HitParameters params) {
67+
/*if(hitlist==null)
68+
return null;
69+
if(hitlist.size()==0)
70+
return null;*/
71+
HashMap<Integer, FinalTrackInfo> finaltrackinfomap = params.get_finaltrackinfomap();
72+
int listsize = finaltrackinfomap.size();
73+
int row = 0;
74+
75+
76+
DataBank bank = event.createBank("RTPC::trackinfo", listsize);
77+
78+
79+
if (bank == null) {
80+
System.err.println("COULD NOT CREATE A BANK!!!!!!");
81+
return null;
82+
}
83+
84+
for(int TID : finaltrackinfomap.keySet()) {
85+
86+
bank.setInt("TID", row, TID);
87+
bank.setFloat("px", row, (float) finaltrackinfomap.get(TID).get_px());
88+
bank.setFloat("py", row, (float) finaltrackinfomap.get(TID).get_py());
89+
bank.setFloat("pz", row, (float) finaltrackinfomap.get(TID).get_pz());
90+
bank.setFloat("vz", row, (float) finaltrackinfomap.get(TID).get_vz());
91+
bank.setFloat("trackl", row, (float) finaltrackinfomap.get(TID).get_tl());
92+
bank.setFloat("dEdx", row, (float) finaltrackinfomap.get(TID).get_dEdx());
93+
row++;
94+
95+
}
96+
97+
return bank;
98+
}
6399
}

reconstruction/rtpc/src/main/java/org/jlab/rec/rtpc/hit/ADCMap.java

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ public class ADCMap {
1616
private HashMap<Integer,double[]> _ADCMap;
1717
private HashMap<Integer,double[]> _intADCMap;
1818

19-
private int TrigWindSize = 10000;
20-
private int SignalStepSize = 10;
19+
final private int TrigWindSize = 10000;
20+
final private int SignalStepSize = 10;
2121

2222
public ADCMap(){
2323
_ADCMap = new HashMap<>();
@@ -30,49 +30,58 @@ public void simulateSignal(int Pad, double time, double Edep){
3030
_ADCMap.put(Pad, new double[TrigWindSize]);
3131
}
3232
for(int tbin=0;tbin<TrigWindSize;tbin+=SignalStepSize){
33-
_ADCMap.get(Pad)[tbin] += EtoS(time,tbin,Edep);
33+
_ADCMap.get(Pad)[tbin] += getSignalAtBin(time,tbin,Edep);
3434
}
3535
}
3636

37-
public void integrateSignal(int Pad){
37+
public void integrateSignal(int pad){
3838
double integral = 0;
3939
int BinSize = 40;
4040
int NBinKept = 3;
4141
for(int tbin = 0; tbin < TrigWindSize; tbin += SignalStepSize){
42-
if(tbin>0) integral+=0.5*(_ADCMap.get(Pad)[tbin-SignalStepSize]+_ADCMap.get(Pad)[tbin])*SignalStepSize;
42+
if(tbin>0){
43+
integral+=0.5*(getSignal(pad,tbin-SignalStepSize)+getSignal(pad,tbin))*SignalStepSize;
44+
}
4345
if(tbin%BinSize==0 && tbin>0){ // integration over BinSize
4446
if(tbin%(BinSize*NBinKept)==0){ // one BinSize over NBinKept is read out
45-
if(!_intADCMap.containsKey(Pad)){
46-
_intADCMap.put(Pad, new double[TrigWindSize]);
47+
if(!_intADCMap.containsKey(pad)){
48+
_intADCMap.put(pad, new double[TrigWindSize]);
4749
}
48-
_intADCMap.get(Pad)[tbin] = integral;
50+
_intADCMap.get(pad)[tbin] = integral;
4951
}
5052
integral=0;
5153
}
5254
}
5355
}
5456

55-
public double getSignal(int Pad, int Time){
57+
public double getADC(int Pad, int Time){
5658
return _intADCMap.get(Pad)[Time];
5759
}
5860

5961
public HashMap<Integer,double[]> getADCMap(){
6062
return _intADCMap;
6163
}
6264

63-
private double EtoS(double tsignal, double t, double e_tot){
65+
private double getSignal(int pad, int time){
66+
return _ADCMap.get(pad)[time];
67+
}
68+
69+
private double getSignalAtBin(double tsignal, double t, double edep){
6470

65-
double sig;
71+
double signal_height;
6672
//t = noise_elec(t); // change t to simulate the electronics noise, also modifies the amplitude
6773
double p0 = 0.0;
6874
double p2 = 178.158;
6975
double p3 = 165.637;
7076
double p4 = 165.165;
7177

72-
if(t<tsignal) sig = p0+e_tot*p2*Math.exp(-(t-tsignal)*(t-tsignal)/(2*p3*p3))/(0.5*(p3+p4)*Math.sqrt(2*Math.PI));
73-
else sig = p0+e_tot*p2*Math.exp(-(t-tsignal)*(t-tsignal)/(2*p4*p4))/(0.5*(p3+p4)*Math.sqrt(2*Math.PI));
78+
if(t<tsignal){
79+
signal_height = p0+edep*p2*Math.exp(-(t-tsignal)*(t-tsignal)/(2*p3*p3))/(0.5*(p3+p4)*Math.sqrt(2*Math.PI));
80+
}else{
81+
signal_height = p0+edep*p2*Math.exp(-(t-tsignal)*(t-tsignal)/(2*p4*p4))/(0.5*(p3+p4)*Math.sqrt(2*Math.PI));
82+
}
7483

75-
return sig;
84+
return signal_height;
7685
}
7786

7887
/*private double noise_elec(double time){
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package org.jlab.rec.rtpc.hit;
7+
8+
/**
9+
*
10+
* @author davidpayette
11+
*/
12+
public class FinalTrackInfo {
13+
14+
private double _px;
15+
private double _py;
16+
private double _pz;
17+
private double _vz;
18+
private double _tl;
19+
private double _dEdx;
20+
21+
public FinalTrackInfo(){}
22+
23+
public FinalTrackInfo(double px, double py, double pz, double vz, double tl, double dEdx){
24+
_px = px;
25+
_py = py;
26+
_pz = pz;
27+
_tl = tl;
28+
_dEdx = dEdx;
29+
}
30+
31+
public void set_px(double px){
32+
_px = px;
33+
}
34+
public void set_py(double py){
35+
_py = py;
36+
}
37+
public void set_pz(double pz){
38+
_pz = pz;
39+
}
40+
public void set_tl(double tl){
41+
_tl = tl;
42+
}
43+
public void set_dEdx(double dEdx){
44+
_dEdx = dEdx;
45+
}
46+
public void set_vz(double vz){
47+
_vz = vz;
48+
}
49+
50+
public double get_px(){
51+
return _px;
52+
}
53+
public double get_py(){
54+
return _py;
55+
}
56+
public double get_pz(){
57+
return _pz;
58+
}
59+
public double get_tl(){
60+
return _tl;
61+
}
62+
public double get_dEdx(){
63+
return _dEdx;
64+
}
65+
public double get_vz(){
66+
return _vz;
67+
}
68+
}

reconstruction/rtpc/src/main/java/org/jlab/rec/rtpc/hit/HelixFitJava.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,9 @@ HelixFitObject HelixFit(int PointNum, double szPos[][], double R, double A, doub
822822
h.set_Rho(R);
823823
h.set_Phi(Phi_deg);
824824
h.set_Theta(Theta_deg);
825+
h.set_A(A);
826+
h.set_B(B);
827+
h.set_Z0(Z0);
825828
return h;
826829
}
827830

reconstruction/rtpc/src/main/java/org/jlab/rec/rtpc/hit/HelixFitObject.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,15 @@ public void set_Rho(double Rho){
4646
public double get_A(){
4747
return _A;
4848
}
49+
public void set_A(double A){
50+
_A = A;
51+
}
4952
public double get_B(){
5053
return _B;
5154
}
55+
public void set_B(double B){
56+
_B = B;
57+
}
5258
public double get_Phi(){
5359
return _Phi;
5460
}
@@ -69,13 +75,33 @@ public double get_Y0(){
6975
}
7076
public double get_Z0(){
7177
return _Z0;
72-
}
78+
}
79+
public void set_Z0(double Z0){
80+
_Z0 = Z0;
81+
}
7382
public double get_DCA(){
7483
return _DCA;
7584
}
7685
public double get_Chi2(){
7786
return _Chi2;
7887
}
79-
88+
public double get_Mom(){
89+
return 0.3*50*get_Rho()/10;
90+
}
91+
public double get_px(){
92+
return get_Mom()*Math.cos(get_Phi())*Math.sin(get_Theta());
93+
}
94+
public double get_py(){
95+
return get_Mom()*Math.sin(get_Phi())*Math.sin(get_Theta());
96+
}
97+
public double get_pz(){
98+
return get_Mom()*Math.cos(get_Theta());
99+
}
100+
public double get_trackl(){
101+
return 0;
102+
}
103+
public double get_dEdx(){
104+
return 0;
105+
}
80106

81107
}

0 commit comments

Comments
 (0)