Print

Print


Commit in lcsim/sandbox/TimBarklow on MAIN
VertexFinderDriver.java+221added 1.1
driver for hep.lcd version of zvtop 

lcsim/sandbox/TimBarklow
VertexFinderDriver.java added at 1.1
diff -N VertexFinderDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ VertexFinderDriver.java	30 Oct 2007 08:10:25 -0000	1.1
@@ -0,0 +1,221 @@
+package org.lcsim.contrib.timb;
+
+import org.lcsim.mc.fast.reconstructedparticle.MCFastReconstructedParticle;
+import org.lcsim.mc.fast.reconstructedparticle.MCFastParticleID;
+import hep.physics.jet.JadeEJetFinder;
+import hep.physics.jet.JetFinder;
+import hep.physics.matrix.SymmetricMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.HepLorentzVector;
+import hep.physics.vec.BasicHepLorentzVector;
+import hep.physics.vec.VecOp;
+import hep.physics.particle.properties.ParticlePropertyManager;
+import hep.physics.particle.properties.ParticlePropertyProvider;
+import hep.physics.particle.properties.ParticleType;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.Track;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import hep.lcd.vertexing.zvtop.ZvTrackList;
+import hep.lcd.vertexing.zvtop.ZvTrack;
+import hep.lcd.vertexing.zvtop.ZvTopVertexer;
+import hep.lcd.vertexing.zvtop.ZvVertexList;
+import hep.lcd.vertexing.zvtop.ZvVertex;
+import hep.lcd.vertexing.zvtop.ZvBField;
+import static java.lang.Math.pow;
+import static java.lang.Math.abs;
+import static java.lang.Math.sqrt;
+
+//
+// Find vertices using ZVTOP and modify MCFastReconstructedParticles accordingly
+//
+public class VertexFinderDriver extends Driver
+{
+    private static int nevent = 0 ;
+    //    private static final int nevent_min = 11 ;
+    private static final int nevent_min = 0 ;
+    private static final int nprint_max = 2 ;
+    private static final int n_chg_min = 2 ;
+    private static final boolean convert_mm_to_cm =  true;
+    private static final double cmTOmm = 10.;
+    private static final double av = 0.1;
+    private static final double ov = 0.1;
+    private static final Hep3Vector IP = new BasicHep3Vector(0,0,0);
+    private static final String defaultInCollectionName  = "MCFastReconstructedParticles";
+    private static final String defaultJetCollectionName  = "Jets";
+    private static final String defaultOutCollectionName  = "MCFastZVReconstructedParticles";
+    private String inCollectionName = defaultInCollectionName;
+    private String jetCollectionName = defaultJetCollectionName;
+    private String outCollectionName = defaultOutCollectionName;
+    private ZvTopVertexer vertexer = VertexFinderFuncs.initZvTopVertexer();
+    private static final ParticleType k0s;
+    private static final ParticleType lambdab0;
+    private static ParticlePropertyProvider ppp;
+    static { 
+	ppp = ParticlePropertyManager.getParticlePropertyProvider();
+	k0s = ppp.get(310);
+	lambdab0 = ppp.get(5122);
+    }
+   
+    /** Creates a new instance of VertexFinderDriver */
+    public VertexFinderDriver()
+    {
+    }
+    public VertexFinderDriver(String inCollectionName, String jetCollectionName, String outCollectionName)
+    {
+	this.inCollectionName = inCollectionName;
+	this.jetCollectionName = jetCollectionName;
+	this.outCollectionName = outCollectionName;
+    }
+   
+    public String getInCollectionName()
+    {
+	return inCollectionName;
+    }
+   
+    public String getJetCollectionName()
+    {
+	return jetCollectionName;
+    }
+   
+    public String getOutCollectionName()
+    {
+	return outCollectionName;
+    }
+   
+    protected void process(EventHeader event)
+    {
+	nevent++;
+	double bField = event.getDetector().getFieldMap().getField(IP.v())[2];
+	ZvBField.setBZ(bField);
+	boolean zp = nevent <= nprint_max;
+	// Find the input reconstructed Particles
+	List<ReconstructedParticle> list_in;
+	list_in = event.get(ReconstructedParticle.class,inCollectionName);
+	// Find the jet reconstructed Particles
+	List<ReconstructedParticle> list_jet;
+	list_jet = event.get(ReconstructedParticle.class,jetCollectionName);
+
+	// create output list
+        List<ReconstructedParticle> list_out = new ArrayList<ReconstructedParticle>(list_in);
+	 
+	if(zp) System.out.println(" VertexFinderDriver nevent= "+nevent+" list_in.size= "+list_in.size()+" list_jet.size= "+list_jet.size());
+	for(ReconstructedParticle rpj : list_jet){
+	    Map<hep.lcd.mc.fast.tracking.ReconTrack,ReconstructedParticle> m_tr = new HashMap<hep.lcd.mc.fast.tracking.ReconTrack,ReconstructedParticle>();
+	    Vector<hep.lcd.mc.fast.tracking.ReconTrack> vector_heprt = new Vector<hep.lcd.mc.fast.tracking.ReconTrack>();
+	    List<ReconstructedParticle> list_rp = rpj.getParticles();
+	    for(ReconstructedParticle rp : list_rp) {
+		List<Track> list_trk = rp.getTracks();
+		//		System.out.println(" VertexFinderDriver list_trk.size= "+list_trk.size()+" list_rp.size= "+list_rp.size());
+		for(Track trk : list_trk){
+		    double [] m_parm = new double [5];
+		    for(int j=0 ; j<5 ; j++) m_parm[j] = trk.getTrackParameter(j);
+		    SymmetricMatrix sym_err = trk.getErrorMatrix();
+		    double [][] m_err = new double [5][5];
+		    for(int j=0 ; j<5 ; j++) for(int k=0 ; k<5 ; k++) m_err[k][j]=sym_err.e(k,j);
+		    if(zp) {
+			for(int j=0; j<5 ; j++)  System.out.println(" VertexFinderDriver before any conversion j= "+j+" m_parm[j]= "+m_parm[j]);
+			System.out.println(" VertexFinderDriver trk.getCharge= "+trk.getCharge()+" trk.getMomentum= "+Arrays.toString(trk.getMomentum()));
+		    }
+		    m_parm[2]=-m_parm[2];   // hep.lcd as opposite sign convention for omega
+		    if(convert_mm_to_cm) {
+			m_parm[0]*=av;
+			m_parm[2]/=ov;
+			m_parm[3]*=av;
+			m_err[0][0]*=pow(av,2);
+			m_err[0][1]*=av;
+			m_err[0][2]=av*m_err[0][2]/ov;
+			m_err[0][3]*=pow(av,2);
+			m_err[0][4]*=av;
+			m_err[1][2]/=ov;
+			m_err[1][3]*=av;
+			m_err[2][2]/=pow(ov,2);
+			m_err[2][3]=av*m_err[2][3]/ov;
+			m_err[2][4]/=ov;
+			m_err[3][3]*=pow(av,2);
+			m_err[3][4]*=av;
+			for(int j=0 ; j<4 ; j++) for(int k=j+1 ; k<5 ; k++) m_err[k][j]=m_err[j][k] ;
+		    }
+		    hep.lcd.mc.fast.tracking.DocaTrackParameters doca = new hep.lcd.mc.fast.tracking.DocaTrackParameters(m_parm,m_err);
+		    hep.lcd.mc.fast.tracking.ReconTrack hrt = new hep.lcd.mc.fast.tracking.ReconTrack(doca);
+		    vector_heprt.addElement(hrt);
+		    m_tr.put(hrt,rp);
+		    // System.out.println(" VertexFinderDriver heprt.getCharge= "+((hep.lcd.mc.fast.tracking.ReconTrack)(vector_heprt.lastElement())).getCharge()
+		    //	       +" heprt.getMomentum= "+Arrays.toString(((hep.lcd.mc.fast.tracking.ReconTrack)(vector_heprt.lastElement())).getMomentum()));
+		    //		    System.out.println(" VertexFinderDriver vector_heprt.size= "+vector_heprt.size()+" list_rp.size= "+list_rp.size());
+		}
+	    }
+	    if(zp) System.out.println(" VertexFinderDriver vector_heprt.size= "+vector_heprt.size()+" list_rp.size= "+list_rp.size());
+	    if(vector_heprt.size()>=n_chg_min) {
+		ZvTrackList jetTrackList = new ZvTrackList(vector_heprt.elements());
+		if(zp) for(int j=0; j<jetTrackList.getNTracks() ; j++) System.out.println(" VertexFinderDriver zvtrk.getCharge= "+jetTrackList.trackAt(j).getCharge()
+										   +" zvtrk.getMomentum= "+Arrays.toString(jetTrackList.trackAt(j).getMomentum()));
+		if(nevent >= nevent_min) {
+		    ZvVertexList vtxList = VertexFinderFuncs.calcSeedVertex(vertexer,jetTrackList);
+		    int nVtx = vtxList.getNVertices();
+		    if(zp) System.out.println(" From VertexFinderDriver nevent= "+nevent);
+		    for(int i=0; i< nVtx ; i++) {
+			ZvVertex vtx = vtxList.vertexAt(i);
+			double [] vpos = vtx.getVertexPos();
+			for(int j=0 ; j<vpos.length ; j++) vpos[j] *= cmTOmm;
+			Hep3Vector bpos = new BasicHep3Vector(vpos);
+		        if(zp) System.out.println(" i= "+i+" vtx.getNumTracks= "+vtx.getNumTracks()+" vtx.getSumCharge= "+vtx.getSumCharge()+" vpos[0]= "+vpos[0]+" vpos[1]= "+vpos[1]+" vpos[2]= "+vpos[2]+" mag= "+bpos.magnitude());
+			if(i>0) {
+			    ZvTrackList zvtl = vtx.getVtxTracks();
+			    HepLorentzVector vtp = new BasicHepLorentzVector();
+			    for(int j=0; j<zvtl.getNTracks(); j++){
+				ZvTrack zvt = zvtl.trackAt(j);
+				hep.lcd.mc.fast.tracking.ReconTrack trk = zvt.getOrigReconTrack();
+				int lind = list_in.indexOf(m_tr.get(trk));
+				ReconstructedParticle rp = list_in.get(lind);
+			        Hep3Vector zvtmom = new BasicHep3Vector(zvt.getMomentum());
+				vtp = VecOp.add(vtp,new BasicHepLorentzVector(sqrt(zvtmom.magnitudeSquared()+pow(rp.getMass(),2)),zvtmom));
+			    }
+			    MCFastReconstructedParticle rplambdab0 = new MCFastReconstructedParticle(vpos,(vtp.v3()).v(),vtp.magnitude(),vtx.getSumCharge(),lambdab0);
+			    for(int j=0; j<zvtl.getNTracks(); j++){
+				ZvTrack zvt = zvtl.trackAt(j);
+				hep.lcd.mc.fast.tracking.ReconTrack trk = zvt.getOrigReconTrack();
+				int lind = list_in.indexOf(m_tr.get(trk));
+			//		for(int k=0; k<5 ; k++)  System.out.println(" VertexFinderFuncs j= "+j+" k= "+k+" m_parm[k]= "+(trk.getTrackParameters())[k]);
+		                if(zp) System.out.println(" VertexFinderFuncs lind= "+lind+" i= "+i+" j= "+j+" zvt.getCharge= "+zvt.getCharge()+"  trk.getMomentum= "+Arrays.toString(trk.getMomentum()));
+				ReconstructedParticle rp = list_in.get(lind);
+				int typeold = rp.getType();
+				int typenew = 9900000+abs(typeold);
+				if(typeold < 0 ) typenew = -typenew;
+				rp.addParticleID(new MCFastParticleID(ppp.get(typenew)));
+		                if(zp) System.out.println(" VertexFinderFuncs  i= "+i+" j= "+j+" reconst part   charge= "+rp.getCharge()+" rp.getMomentum= "+Arrays.toString((rp.getMomentum()).v())
+						   +" typeold= "+typeold+" typenew= "+typenew+" rp.getType= "+rp.getType());
+				rplambdab0.addParticle(rp);
+				
+		       	    }
+			    list_out.add(rplambdab0);
+			    List<ReconstructedParticle> list_rpinrplambdab0 = rplambdab0.getParticles();
+			    if(zp) System.out.println(" VertexFinderFuncs  i= "+i+" rplambdab0.charge = "+rplambdab0.getCharge()+" mass= "+rplambdab0.getMass()+" Momentum= "+Arrays.toString((rplambdab0.getMomentum()).v())
+					       +" ref= "+Arrays.toString((rplambdab0.getReferencePoint()).v())+" type= "+rplambdab0.getType()+" list_rpinrplambdab0.size= "+list_rpinrplambdab0.size());
+			}
+		    }
+		    if(zp) {
+			for(ReconstructedParticle rp : list_rp) {
+			    System.out.println(" ");
+			    List<Track> list_trk = rp.getTracks();
+			    for(Track trk : list_trk){
+				double [] m_parm = trk.getTrackParameters();
+				for(int j=0; j<5 ; j++)  System.out.println(" VertexFinderDriver after filling recon particles  j= "+j+" m_parm[j]= "+m_parm[j]);
+			    }
+			}
+		    }
+		}
+	    }
+	}
+	event.put(outCollectionName, list_out, ReconstructedParticle.class, 0);
+    }
+}
CVSspam 0.2.8