Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Classes for skimming recon events and a possible V0 skim setup #1086

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package org.hps.recon.filtering;

import static java.lang.Math.abs;
import java.util.List;
import java.util.ArrayList;
import org.lcsim.event.Cluster;
import org.lcsim.event.base.BaseCluster;
import org.hps.recon.ecal.cluster.ClusterUtilities;
import org.lcsim.event.EventHeader;
import org.lcsim.geometry.Detector;

/**
* Class to strip off 3-prong trident candidates, using only the ECal cluster energy sum,
* requires exactly 3 in-time clusters, with at least 1 top and 1 bottom and
* the 3-cluster energy sum be within eMin<3-Esum<eMax
*/
public class ThreeProngECalFilter extends EventReconFilter {

private String _ECalClusterCollectionName = "EcalClustersCorr";
private double _triggerTimeOffset = 38.0; //good for 2021 data
private double _triggerWindowSize = 10.0; //+/- ns
private double _clusterRelativeTimingCut = 5.0;
private double _eMin = 3.0;
private double _eMax = 4.0;

@Override
protected void process(EventHeader event) {
incrementEventProcessed();

if (!event.hasCollection(Cluster.class, _ECalClusterCollectionName)) {
skipEvent();
}
List<Cluster> clusters = event.get(Cluster.class, _ECalClusterCollectionName);
if(clusters.size()<3) //have to have three clusters for this
skipEvent();


boolean hasTop=false;
boolean hasBottom=false;
List<Cluster> inTimeClusters=new ArrayList<Cluster>();
for (Cluster clu : clusters){
double clTime= ClusterUtilities.getSeedHitTime(clu);
if( clTime>(_triggerTimeOffset-_triggerWindowSize)
&& clTime<(_triggerTimeOffset+_triggerWindowSize)){
if(clu.getPosition()[1]>0)
hasTop=true;
else
hasBottom=true;
inTimeClusters.add(clu);
}
}
// System.out.println("Found "+inTimeClusters.size()+" in time clusters");
if(inTimeClusters.size()!=3) //have to have exactly three in time clusters for this
skipEvent();

if(! (hasTop && hasBottom))
skipEvent();

double t0= ClusterUtilities.getSeedHitTime(inTimeClusters.get(0));
double t1= ClusterUtilities.getSeedHitTime(inTimeClusters.get(1));
double t2= ClusterUtilities.getSeedHitTime(inTimeClusters.get(2));

// require that all 3 clusters are within _clusterRelativeTimingCut
if(abs(t0-t1)>_clusterRelativeTimingCut)
skipEvent();
if(abs(t1-t2)>_clusterRelativeTimingCut)
skipEvent();
if(abs(t2-t0)>_clusterRelativeTimingCut)
skipEvent();
// forget to add energy cut!
double clEneSum=inTimeClusters.get(0).getEnergy()
+inTimeClusters.get(1).getEnergy()
+inTimeClusters.get(2).getEnergy();
if(clEneSum<_eMin || clEneSum>_eMax)
skipEvent();

incrementEventPassed();
}

protected void detectorChanged(Detector detector) {
super.detectorChanged(detector);
}
}
25 changes: 18 additions & 7 deletions recon/src/main/java/org/hps/recon/filtering/V0CandidateFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@
public class V0CandidateFilter extends EventReconFilter {

private String _V0CandidateCollectionName = "UnconstrainedV0Candidates";
private double _clusterTimingCut = 20.0;
private double _clusterTimingCut = 20.0; // only used if _tight is true
private double v0Chi2Cut = 100.0;
private double trackChi2Cut = 80.0;
private double trackDtCut = 20.0;
private double trackPMax = 0.9;
private double v0PMax = 1.4;
private int nHitsMin=10;

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

if (!TrackType.isGBL(v0.getType())) { // we only care about GBL vertices
// if (!TrackType.isGBL(v0.getType())) { // we only care about GBL vertices
// continue;
//}

if (v0.getStartVertex().getChi2() > v0Chi2Cut) {
continue;
}
if (v0.getStartVertex().getChi2() > v0Chi2Cut) {
continue;
}
if (electron.getTracks().get(0).getChi2() > trackChi2Cut

if(electron.getTracks().get(0).getTrackerHits().size()<nHitsMin
|| positron.getTracks().get(0).getTrackerHits().size()<nHitsMin){
continue;
}
if (electron.getTracks().get(0).getChi2() > trackChi2Cut
|| positron.getTracks().get(0).getChi2() > trackChi2Cut) {
continue;
}
Expand Down Expand Up @@ -180,7 +187,11 @@ public void setTightConstraint(boolean b) {
public void setKeepEpicsDataEvents(boolean b) {
_keepEpicsDataEvents = b;
}


public void setNHitsMin(int m){
nHitsMin=m;
}

protected void detectorChanged(Detector detector) {
super.detectorChanged(detector);
}
Expand Down
35 changes: 35 additions & 0 deletions recon/src/main/java/org/hps/recon/skims/FEESkimmer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.hps.recon.skims;

import org.lcsim.event.EventHeader;


public class FEESkimmer extends Skimmer {
private String _FEECandidateCollectionName = "UnconstrainedFEECandidates";
private double _clusterTimingCut = 20.0; // only used if _tight is true
private double _v0Chi2Cut = 100.0;
private double _trackChi2Cut = 80.0;
private double _trackDtCut = 20.0;
private double _trackPMax = 0.9;
private double _v0PMax = 1.4;
private int _nHitsMin=10;

@Override
public boolean passSelection(EventHeader event){
System.out.println(this.getClass().getName()+":: in pass selection");
boolean pass=true;


return pass;
}
@Override
public void setParameters(String parsFileName){
return;
}


public FEESkimmer(String file) {
super(file, null);
// this(super.addFileExtension(file), null);
}

}
36 changes: 36 additions & 0 deletions recon/src/main/java/org/hps/recon/skims/MollerSkimmer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.hps.recon.skims;

import org.lcsim.event.EventHeader;


public class MollerSkimmer extends Skimmer {
private String _MollerCandidateCollectionName = "UnconstrainedMollerCandidates";
private double _clusterTimingCut = 20.0; // only used if _tight is true
private double _v0Chi2Cut = 100.0;
private double _trackChi2Cut = 80.0;
private double _trackDtCut = 20.0;
private double _trackPMax = 0.9;
private double _v0PMax = 1.4;
private int _nHitsMin=10;

@Override
public boolean passSelection(EventHeader event){
System.out.println(this.getClass().getName()+":: in pass selection");
boolean pass=true;


return pass;
}


@Override
public void setParameters(String parsFileName){
return;
}

public MollerSkimmer(String file) {
super(file, null);
// this(super.addFileExtension(file), null);
}

}
Loading