Skip to content

Commit 9708f12

Browse files
authored
Merge pull request #1086 from JeffersonLab/skimtest
Classes for skimming recon events and a possible V0 skim setup
2 parents 714ecfd + 05261ae commit 9708f12

File tree

12 files changed

+828
-9
lines changed

12 files changed

+828
-9
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package org.hps.recon.filtering;
2+
3+
import static java.lang.Math.abs;
4+
import java.util.List;
5+
import java.util.ArrayList;
6+
import org.lcsim.event.Cluster;
7+
import org.lcsim.event.base.BaseCluster;
8+
import org.hps.recon.ecal.cluster.ClusterUtilities;
9+
import org.lcsim.event.EventHeader;
10+
import org.lcsim.geometry.Detector;
11+
12+
/**
13+
* Class to strip off 3-prong trident candidates, using only the ECal cluster energy sum,
14+
* requires exactly 3 in-time clusters, with at least 1 top and 1 bottom and
15+
* the 3-cluster energy sum be within eMin<3-Esum<eMax
16+
*/
17+
public class ThreeProngECalFilter extends EventReconFilter {
18+
19+
private String _ECalClusterCollectionName = "EcalClustersCorr";
20+
private double _triggerTimeOffset = 38.0; //good for 2021 data
21+
private double _triggerWindowSize = 10.0; //+/- ns
22+
private double _clusterRelativeTimingCut = 5.0;
23+
private double _eMin = 3.0;
24+
private double _eMax = 4.0;
25+
26+
@Override
27+
protected void process(EventHeader event) {
28+
incrementEventProcessed();
29+
30+
if (!event.hasCollection(Cluster.class, _ECalClusterCollectionName)) {
31+
skipEvent();
32+
}
33+
List<Cluster> clusters = event.get(Cluster.class, _ECalClusterCollectionName);
34+
if(clusters.size()<3) //have to have three clusters for this
35+
skipEvent();
36+
37+
38+
boolean hasTop=false;
39+
boolean hasBottom=false;
40+
List<Cluster> inTimeClusters=new ArrayList<Cluster>();
41+
for (Cluster clu : clusters){
42+
double clTime= ClusterUtilities.getSeedHitTime(clu);
43+
if( clTime>(_triggerTimeOffset-_triggerWindowSize)
44+
&& clTime<(_triggerTimeOffset+_triggerWindowSize)){
45+
if(clu.getPosition()[1]>0)
46+
hasTop=true;
47+
else
48+
hasBottom=true;
49+
inTimeClusters.add(clu);
50+
}
51+
}
52+
// System.out.println("Found "+inTimeClusters.size()+" in time clusters");
53+
if(inTimeClusters.size()!=3) //have to have exactly three in time clusters for this
54+
skipEvent();
55+
56+
if(! (hasTop && hasBottom))
57+
skipEvent();
58+
59+
double t0= ClusterUtilities.getSeedHitTime(inTimeClusters.get(0));
60+
double t1= ClusterUtilities.getSeedHitTime(inTimeClusters.get(1));
61+
double t2= ClusterUtilities.getSeedHitTime(inTimeClusters.get(2));
62+
63+
// require that all 3 clusters are within _clusterRelativeTimingCut
64+
if(abs(t0-t1)>_clusterRelativeTimingCut)
65+
skipEvent();
66+
if(abs(t1-t2)>_clusterRelativeTimingCut)
67+
skipEvent();
68+
if(abs(t2-t0)>_clusterRelativeTimingCut)
69+
skipEvent();
70+
// forget to add energy cut!
71+
double clEneSum=inTimeClusters.get(0).getEnergy()
72+
+inTimeClusters.get(1).getEnergy()
73+
+inTimeClusters.get(2).getEnergy();
74+
if(clEneSum<_eMin || clEneSum>_eMax)
75+
skipEvent();
76+
77+
incrementEventPassed();
78+
}
79+
80+
protected void detectorChanged(Detector detector) {
81+
super.detectorChanged(detector);
82+
}
83+
}

recon/src/main/java/org/hps/recon/filtering/V0CandidateFilter.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@
2121
public class V0CandidateFilter extends EventReconFilter {
2222

2323
private String _V0CandidateCollectionName = "UnconstrainedV0Candidates";
24-
private double _clusterTimingCut = 20.0;
24+
private double _clusterTimingCut = 20.0; // only used if _tight is true
2525
private double v0Chi2Cut = 100.0;
2626
private double trackChi2Cut = 80.0;
2727
private double trackDtCut = 20.0;
2828
private double trackPMax = 0.9;
2929
private double v0PMax = 1.4;
30+
private int nHitsMin=10;
3031

3132
private boolean _tight = false;
3233
private boolean _keepEpicsDataEvents = false;
@@ -57,13 +58,19 @@ protected void process(EventHeader event) {
5758
ReconstructedParticle electron = v0.getParticles().get(ReconParticleDriver.ELECTRON);
5859
ReconstructedParticle positron = v0.getParticles().get(ReconParticleDriver.POSITRON);
5960

60-
if (!TrackType.isGBL(v0.getType())) { // we only care about GBL vertices
61+
// if (!TrackType.isGBL(v0.getType())) { // we only care about GBL vertices
62+
// continue;
63+
//}
64+
65+
if (v0.getStartVertex().getChi2() > v0Chi2Cut) {
6166
continue;
6267
}
63-
if (v0.getStartVertex().getChi2() > v0Chi2Cut) {
64-
continue;
65-
}
66-
if (electron.getTracks().get(0).getChi2() > trackChi2Cut
68+
69+
if(electron.getTracks().get(0).getTrackerHits().size()<nHitsMin
70+
|| positron.getTracks().get(0).getTrackerHits().size()<nHitsMin){
71+
continue;
72+
}
73+
if (electron.getTracks().get(0).getChi2() > trackChi2Cut
6774
|| positron.getTracks().get(0).getChi2() > trackChi2Cut) {
6875
continue;
6976
}
@@ -180,7 +187,11 @@ public void setTightConstraint(boolean b) {
180187
public void setKeepEpicsDataEvents(boolean b) {
181188
_keepEpicsDataEvents = b;
182189
}
183-
190+
191+
public void setNHitsMin(int m){
192+
nHitsMin=m;
193+
}
194+
184195
protected void detectorChanged(Detector detector) {
185196
super.detectorChanged(detector);
186197
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.hps.recon.skims;
2+
3+
import org.lcsim.event.EventHeader;
4+
5+
6+
public class FEESkimmer extends Skimmer {
7+
private String _FEECandidateCollectionName = "UnconstrainedFEECandidates";
8+
private double _clusterTimingCut = 20.0; // only used if _tight is true
9+
private double _v0Chi2Cut = 100.0;
10+
private double _trackChi2Cut = 80.0;
11+
private double _trackDtCut = 20.0;
12+
private double _trackPMax = 0.9;
13+
private double _v0PMax = 1.4;
14+
private int _nHitsMin=10;
15+
16+
@Override
17+
public boolean passSelection(EventHeader event){
18+
System.out.println(this.getClass().getName()+":: in pass selection");
19+
boolean pass=true;
20+
21+
22+
return pass;
23+
}
24+
@Override
25+
public void setParameters(String parsFileName){
26+
return;
27+
}
28+
29+
30+
public FEESkimmer(String file) {
31+
super(file, null);
32+
// this(super.addFileExtension(file), null);
33+
}
34+
35+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.hps.recon.skims;
2+
3+
import org.lcsim.event.EventHeader;
4+
5+
6+
public class MollerSkimmer extends Skimmer {
7+
private String _MollerCandidateCollectionName = "UnconstrainedMollerCandidates";
8+
private double _clusterTimingCut = 20.0; // only used if _tight is true
9+
private double _v0Chi2Cut = 100.0;
10+
private double _trackChi2Cut = 80.0;
11+
private double _trackDtCut = 20.0;
12+
private double _trackPMax = 0.9;
13+
private double _v0PMax = 1.4;
14+
private int _nHitsMin=10;
15+
16+
@Override
17+
public boolean passSelection(EventHeader event){
18+
System.out.println(this.getClass().getName()+":: in pass selection");
19+
boolean pass=true;
20+
21+
22+
return pass;
23+
}
24+
25+
26+
@Override
27+
public void setParameters(String parsFileName){
28+
return;
29+
}
30+
31+
public MollerSkimmer(String file) {
32+
super(file, null);
33+
// this(super.addFileExtension(file), null);
34+
}
35+
36+
}

0 commit comments

Comments
 (0)