Skip to content

Commit b14930d

Browse files
authored
Merge pull request #1133 from mgignac/mgignac-moller-skimmer-2019
Moller skimmer for 2019
2 parents 4736c71 + d625d20 commit b14930d

5 files changed

Lines changed: 168 additions & 27 deletions

File tree

Lines changed: 143 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,164 @@
11
package org.hps.recon.skims;
2+
import static java.lang.Math.abs;
23

4+
import java.util.List;
35
import java.util.Set;
6+
import java.io.BufferedReader;
7+
import java.io.IOException;
8+
import java.io.InputStream;
9+
import java.io.InputStreamReader;
410

5-
import org.lcsim.event.EventHeader;
11+
import hep.physics.vec.BasicHep3Vector;
12+
import hep.physics.vec.Hep3Vector;
613

14+
import org.lcsim.event.EventHeader;
15+
import org.hps.recon.ecal.cluster.ClusterUtilities;
16+
import org.hps.recon.particle.ReconParticleDriver;
17+
import org.hps.recon.tracking.TrackData;
18+
import org.hps.recon.tracking.TrackType;
19+
import org.hps.record.epics.EpicsData;
20+
import org.hps.record.scalers.ScalerData;
21+
import org.lcsim.event.EventHeader;
22+
import org.lcsim.event.ReconstructedParticle;
23+
import org.lcsim.event.Vertex;
724

825
public class MollerSkimmer extends Skimmer {
9-
private String _MollerCandidateCollectionName = "UnconstrainedMollerCandidates";
10-
private double _clusterTimingCut = 20.0; // only used if _tight is true
11-
private double _v0Chi2Cut = 100.0;
12-
private double _trackChi2Cut = 80.0;
13-
private double _trackDtCut = 20.0;
14-
private double _trackPMax = 0.9;
15-
private double _v0PMax = 1.4;
16-
private int _nHitsMin=10;
17-
26+
private String _MollerCandidateCollectionName = "UnconstrainedMollerCandidates_KF";
27+
private String _MollerVertexCollectionName = "UnconstrainedMollerVertices_KF";
28+
private double _vtxChi2Cut = 100.0;
29+
private double _trackChi2Cut = 30.0;
30+
private double _trackDtCut = 20.0;
31+
private int _nHitsMin=9;
32+
private boolean _debug=false;
33+
private int totalMollers=0;
34+
private int totalMollersPassing=0;
35+
1836
@Override
1937
public boolean passSelection(EventHeader event){
20-
System.out.println(this.getClass().getName()+":: in pass selection");
21-
boolean pass=true;
38+
39+
if(_debug)
40+
System.out.println(this.getClass().getName()+":: in pass selection");
41+
incrementEventProcessed();
2242

43+
if (!event.hasCollection(ReconstructedParticle.class, _MollerCandidateCollectionName)) {
44+
return false;
45+
}
46+
if (!event.hasCollection(Vertex.class, _MollerVertexCollectionName)) {
47+
return false;
48+
}
49+
50+
List<ReconstructedParticle> V0Candidates = event.get(ReconstructedParticle.class, _MollerCandidateCollectionName);
51+
List<Vertex> V0Vertexes= event.get(Vertex.class, _MollerVertexCollectionName);
52+
53+
if(V0Candidates.size() != V0Vertexes.size())
54+
System.out.println(this.getClass().getName()+":: Number of Vertexes = "+V0Vertexes.size()+
55+
"; number of candidates = "+V0Candidates.size());
56+
57+
int nMollers = 0;
58+
totalMollers += V0Candidates.size();
59+
for (ReconstructedParticle v0 : V0Candidates) {
60+
61+
ReconstructedParticle eleTop = v0.getParticles().get(ReconParticleDriver.MOLLER_TOP);
62+
ReconstructedParticle eleBot = v0.getParticles().get(ReconParticleDriver.MOLLER_BOT);
63+
64+
if (v0.getStartVertex().getChi2() > _vtxChi2Cut) {
65+
if(_debug)System.out.println(this.getClass().getName()+":: failed vertex chi2");
66+
continue;
67+
}
68+
if(eleTop.getTracks().get(0).getTrackerHits().size()<_nHitsMin
69+
|| eleBot.getTracks().get(0).getTrackerHits().size()<_nHitsMin){
70+
if(_debug)System.out.println(this.getClass().getName()+":: failed nHitsMin "+eleTop.getTracks().get(0).getTrackerHits().size()+" "+eleBot.getTracks().get(0).getTrackerHits().size()+" nHitsMin = "+_nHitsMin);
71+
continue;
72+
}
73+
if ((eleTop.getTracks().get(0).getChi2()/eleTop.getTracks().get(0).getNDF()) > _trackChi2Cut
74+
|| (eleBot.getTracks().get(0).getChi2()/eleBot.getTracks().get(0).getNDF()) > _trackChi2Cut) {
75+
if(_debug)System.out.println(this.getClass().getName()+":: failed track chi2");
76+
continue;
77+
}
78+
79+
double eleTime = TrackData.getTrackTime(TrackData.getTrackData(event, eleTop.getTracks().get(0)));
80+
double posTime = TrackData.getTrackTime(TrackData.getTrackData(event, eleBot.getTracks().get(0)));
81+
if (Math.abs(eleTime - posTime) > _trackDtCut) {
82+
if(_debug)System.out.println(this.getClass().getName()+":: failed track dt");
83+
continue;
84+
}
85+
nMollers++;
86+
totalMollersPassing++;
87+
}
88+
89+
if (nMollers>0){
90+
incrementEventPassed();
91+
return true;
92+
} else
93+
return false;
2394

24-
return pass;
95+
}
96+
97+
public MollerSkimmer(String file) {
98+
super(file, null);
99+
}
100+
public MollerSkimmer(String file, Set<String> ignore) {
101+
super(file, ignore);
25102
}
26103

27-
28104
@Override
29105
public void setParameters(String parsFileName){
106+
String infilePreResDir = "/org/hps/recon/skims/";
107+
String infile=infilePreResDir+parsFileName;
108+
InputStream inParamStream = this.getClass().getResourceAsStream(infile);
109+
System.out.println(this.getClass().getName()+":: reading in Moller skimming cuts from "+infile);
110+
BufferedReader reader = new BufferedReader(new InputStreamReader(inParamStream));
111+
String line;
112+
String delims = "[ ]+";// this will split strings between one or more spaces
113+
try {
114+
while ((line = reader.readLine()) != null) {
115+
String[] tokens = line.split(delims);
116+
String parName=tokens[0].replaceAll("\\s+","");
117+
System.out.println(this.getClass().getName()+":: parameter name = " + parName + "; value = " + tokens[1]);
118+
putParam(parName,tokens[1]);
119+
120+
}
121+
} catch (IOException ex) {
122+
System.out.println(this.getClass().getName()+":: died while reading parameters");
123+
return;
124+
}
30125
return;
31126
}
32127

33-
public MollerSkimmer(String file) {
34-
super(file, null);
35-
// this(super.addFileExtension(file), null);
128+
129+
private void putParam(String parName, String var){
130+
if(parName.equals("MollerCandidateCollectionName"))
131+
_MollerCandidateCollectionName=var;
132+
else if(parName.equals("vtxChi2Cut"))
133+
_vtxChi2Cut=Double.parseDouble(var);
134+
else if(parName.equals("trackChi2Cut"))
135+
_trackChi2Cut=Double.parseDouble(var);
136+
else if(parName.equals("trackDtCut"))
137+
_trackDtCut=Double.parseDouble(var);
138+
else if(parName.equals("nHitsMin"))
139+
_nHitsMin=Integer.parseInt(var);
140+
else
141+
System.out.println(this.getClass().getName()+":: couldn't find "+parName+"!");
36142
}
37-
public MollerSkimmer(String file, Set<String> ignore) {
38-
super(file, ignore);
143+
144+
public int getTotalMollersPassing(){
145+
return totalMollersPassing;
146+
}
147+
148+
public int getTotalMollers(){
149+
return totalMollers;
150+
}
151+
152+
public void setVtxChi2Cut(double cutVal){
153+
this._vtxChi2Cut=cutVal;
154+
}
155+
public void setTrackChi2Cut(double cutVal){
156+
this._trackChi2Cut=cutVal;
157+
}
158+
public void setTrackDtCut(double cutVal){
159+
this._trackDtCut=cutVal;
160+
}
161+
public void setNHitsMin(int cutVal){
162+
this._nHitsMin=cutVal;
39163
}
40164
}

recon/src/main/java/org/hps/recon/skims/MultiSkimDriver.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,25 @@ public class MultiSkimDriver extends Driver {
5151
List<Skimmer> writeSkimList=new ArrayList<Skimmer>();
5252

5353
public void endOfData() {
54+
5455
System.out.println(this.getClass().getSimpleName() + " Summary: ");
56+
5557
if(skimV0){
56-
5758
System.out.println("V0 skim events processed = " + v0Skimmer.getNProcessed());
58-
System.out.println("events passed = " + v0Skimmer.getNPassed());
59-
System.out.println(" pass efficiency = " + v0Skimmer.getPassFraction());
59+
System.out.println("Events passed = " + v0Skimmer.getNPassed());
60+
System.out.println(" Pass efficiency = " + v0Skimmer.getPassFraction());
6061
System.out.println("Total number of V0s processed = "+((V0Skimmer)v0Skimmer).getTotalV0s());
6162
System.out.println("Total number of V0s passing skim = "+((V0Skimmer)v0Skimmer).getTotalV0sPassing());
6263
}
64+
65+
if(skimMoller){
66+
System.out.println("Moller skim events processed = " + mollerSkimmer.getNProcessed());
67+
System.out.println("Events passed = " + mollerSkimmer.getNPassed());
68+
System.out.println(" Pass efficiency = " + mollerSkimmer.getPassFraction());
69+
System.out.println("Total number of Mollers processed = "+((MollerSkimmer)mollerSkimmer).getTotalMollers());
70+
System.out.println("Total number of Mollers passing skim = "+((MollerSkimmer)mollerSkimmer).getTotalMollersPassing());
71+
}
72+
6373
}
6474

6575
@Override

recon/src/main/java/org/hps/recon/skims/V0Skimmer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public void setParameters(String parsFileName){
149149
String infilePreResDir = "/org/hps/recon/skims/";
150150
String infile=infilePreResDir+parsFileName;
151151
InputStream inParamStream = this.getClass().getResourceAsStream(infile);
152-
System.out.println(this.getClass().getName()+":: reading in per-sensor per-phase calibs from "+infile);
152+
System.out.println(this.getClass().getName()+":: reading in V0 skimming cuts from "+infile);
153153
BufferedReader reader = new BufferedReader(new InputStreamReader(inParamStream));
154154
String line;
155155
String delims = "[ ]+";// this will split strings between one or more spaces
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
MollerCandidateCollectionName UnconstrainedMollerCandidates_KF
2+
trackChi2Cut 30.0
3+
nHitsMin 6
4+
vtxChi2Cut 30.0
5+
trackDtCut 20.0

steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2019_pass1_recon_skimmed.lcsim

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
<!-- Event filtering -->
4444
<driver name="StripEvent"/>
4545

46-
<!--<driver name="LCIOWriter"/>-->
46+
<driver name="LCIOWriter"/>
4747
<driver name="AidaSaveDriver"/>
4848
<driver name="CleanupDriver"/>
4949

@@ -183,11 +183,13 @@
183183
</driver>
184184
<driver name="StripEvent" type="org.hps.recon.skims.MultiSkimDriver">
185185
<skimV0>true</skimV0>
186-
<skimThreeBody>false</skimThreeBody>
187-
<skimFEE>false</skimFEE>
188-
<skimMoller>false</skimMoller>
189186
<v0ParamFile>v0skim_parameters_2019_ver0.txt</v0ParamFile>
190187
<v0OutputFile>${outputFile}_v0skim.slcio</v0OutputFile>
188+
<skimMoller>true</skimMoller>
189+
<mollerParamFile>mollerskim_parameters_2019_ver0.txt</mollerParamFile>
190+
<mollerOutputFile>${outputFile}_mollerskim.slcio</mollerOutputFile>
191+
<skimThreeBody>false</skimThreeBody>
192+
<skimFEE>false</skimFEE>
191193
</driver>
192194

193195

0 commit comments

Comments
 (0)