Print

Print


Author: [log in to unmask]
Date: Sun Jan  3 10:49:02 2016
New Revision: 4076

Log: (empty)

Added:
    java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java

Added: java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/spaul/feecc/RemoveDuplicateParticles.java	Sun Jan  3 10:49:02 2016
@@ -0,0 +1,67 @@
+package org.hps.users.spaul.feecc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hps.recon.tracking.TrackType;
+import org.lcsim.event.ReconstructedParticle;
+
+public class RemoveDuplicateParticles {
+	public static List<ReconstructedParticle> removeDuplicateParticles(List<ReconstructedParticle> input){
+		//System.out.println("\n" + input.size());
+		List<ReconstructedParticle> output = new ArrayList();
+		for(ReconstructedParticle p : input){
+			boolean add = true;
+			boolean replace = false;
+			ReconstructedParticle duplicate = null;
+			/*if(p.getTracks().size() == 0){
+				//System.out.println("no track");
+				continue;
+			}
+			if(!TrackType.isGBL(p.getTracks().get(0).getType())){
+				//System.out.println("non gbl track");
+				continue;
+			}*/
+			inner : for(ReconstructedParticle p2 : output){
+				if(p.getEnergy() == p2.getEnergy()){
+					
+					if(betterThan(p, p2)){
+						duplicate = p2;
+						replace = true;
+					}
+					else{
+						add = false; //keep the one that is already there
+					}
+					break inner;
+				}
+			}
+			if(replace){
+				output.remove(duplicate);
+				//System.out.println("replaced");
+				output.add(p);
+			}else if(add){
+				output.add(p);
+				//System.out.println("added");
+			}else{
+				//System.out.println("retained");
+			}
+		}
+		//System.out.println(output.size());
+		return output;
+	}
+
+	private static boolean betterThan(ReconstructedParticle p,
+			ReconstructedParticle p2) {
+		if(p.getTracks().size() == 0)
+			return false;
+		if(p.getTracks().size() == 1 && p.getTracks().size() == 0)
+			return true;
+		if(TrackType.isGBL(p.getTracks().get(0).getType()) && !TrackType.isGBL(p.getTracks().get(0).getType()))
+				return true;
+		
+		if(p.getTracks().get(0).getChi2() < p2.getTracks().get(0).getChi2()){
+			return true;
+		}
+		return false;
+	}
+}