LISTSERV mailing list manager LISTSERV 16.5

Help for LCD-DEV Archives


LCD-DEV Archives

LCD-DEV Archives


LCD-DEV@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

LCD-DEV Home

LCD-DEV Home

LCD-DEV  March 1999

LCD-DEV March 1999

Subject:

RE: track cluster association - corrected version

From:

Tony Johnson <[log in to unmask]>

Date:

15 Mar 1999 23:06:43 -0800Mon, 15 Mar 1999 23:06:43 -0800

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (251 lines)

I have produced a diagram, which I think is close to what Gary proposes
although not quite identical, and which may (or may not) help to
visualize the relationship between the classes.

The diagram is at: 

http://www-sldnt.slac.stanford.edu/jas/documentation/lcd/notes/trackclus
terassociation/

Tony

-----Original Message-----
From: Gary Bower [mailto:[log in to unmask]]
Sent: Monday, March 15, 1999 3:28 PM
To: [log in to unmask]
Subject: track cluster association - corrected version


A framework for track cluster association
3/15/99 - Gary Bower


PREAMBLE

What follows lays out a framework of classes for an OO implementation of
Tracks, Clusters and TrackClusterAssociations. The basic assumption is
that
there will be more than one way available to find tracks, build clusters
and 
associate them together. Further it is assumed that one may want to run
more than one of the finders, builders or associators in the same pass
over
the data so the results of two different methods can be compared in
detail.

In fact, the track finders, cluster builders and track-cluster
associator methods
that are currently in the works or at least concretely envisioned are
actually
given preliminary names below.  Note that different methods to do a
particular
task may use different kinds of inputs. This in embodied in the Java
abstract 
classes with an abstract method for find, build and associate.

At the end is some simple sample syntax to illustrate the usage of the
classes.

The Classes a la Java:
 (Caveat: since none of what follows has had the benefit of
a critic by a compiler it probably has many syntactical errors 
so if it looks wrong it probably is.)
**********************************************************
TRACKING

public class TrackerHit

public class TrackerHitEnumeration

public class Track
//	Track implements LorentzVector with mass initially set to pi
mass.
//	Track has error matix to measure "fuzziness"

public class TrackEnumeration

public Interface ITrackFinder
	void find()
	Track[] getTracks()

public class AbstractTrackFinder implements ITrackFinder
	abstract void find()
	private Track[] m_track;
	Track[] getTracks()

public class MCTrackFinder extends AbstractTrackFinder
//	This is the FastMC guy
	void find( MCParticleEnumeration e )
	private Track[] m_track;
	Track[] getTracks()

public class RonanTrackFinder extends AbstractTrackFinder
//	This is the Ronan/BaBar version
	void find( TrackerHitEnumeration e )
	private Track[] m_track;
	Track[] getTracks()


*******************************************************
CLUSTERING

public class CalHit

public class Cluster
// 	Cluster implements LorentzVectors so the 4-momentum can be both
read and set
//		For example, you use an initial cluster builder and
assume all clusters are mass 0
//            		 Then you do track-cluster assoc and set the
mass of the clusters with tracks to 
pi mass
//	Cluster also implements some kind of "fuzziness" descriptors
comparable to the 
//		Track error matrix. It could be the first few moments in
x-y and the r layer distribution 
//		of the cal hit energy distribution or both or more. 

public class ClusterEnumeration

public Interface IClusterBuilder
	void build()
	Cluster[] getClusters() 

public class AbstractClusterBuilder implements IClusterBuilder
	abstract void build()
	private Cluster[] m_cluster
	public Cluster[] getClusters()

public class MCClusterBuilder extends AbstractClusterBuilder
// 	This is the FastMC version
	private Cluster[] m_cluster
	void build( mcParticleEnumeration e )
	Cluster[] getClusters()

public class ContiguousClusterBuilder extends AbstractClusterBuilder
//	This is the TonyJ version
	private Cluster[] m_cluster
	void build( calHitEnumeration e )
	Cluster[] getClusters()

public class JRBClusterBuilder extends AbstractClusterBuilder
//	This is the JRB version
	private Cluster[] m_cluster
	void build( calHitEnumeration e )
	Cluster[] getCluster()

public class NeutralClusterBuilder extends AbstractClusterBuilder
//	This guy starts with a previously determined cluster set and 
//	subtracts out the clusters due to charged tracks
	private Cluster[] m_cluster
	void build(  Track-Cluster Associator tc )
	Cluster[] getCluster()


***********************************************************
TRACK-CLUSTER ASSOCIATION

public class TrackClusterDescriptor
	Track t
	Cluster c
	double quality()  // overall measure of the association
	double cosThNsig() // costheta difference error
	double phiNSig() // phi difference error
	double pInvNSig() // momentum difference error

public Interface ITrack-Cluster Associator
	void associate( TrackEnumeration t, ClusterEnumeration c ) 
	double quality( Track t, Cluster c )
	double cosThNsig( Track t, Cluster c ) 
	double phiNSig( Track t, Cluster c )
	double pInvNSig( Track t, Cluster c )
	Cluster[] assocClus( Track t ) // all clusters associated with t
	Track[] assocTrack( Cluster c ) // all tracks associated with c
(question: can array be of length 0? ie how to handle tracks and
clusters that have no associations.)


public abstract class AbstractTrackClusterAssociator implements
ITrackClusterAssociation
	abstract void associate( TrackEnumeration t, ClusterEnumeration
c ) 
	private TrackClusterDescriptor[][] m_assoc
	double quality( Track t, Cluster c )
	double cosThNsig( Track t, Cluster c ) 
	double phiNSig( Track t, Cluster c )
	double pInvNSig( Track t, Cluster c )
	Cluster[] assocClus( Track t )
	Track[] assocTrack( Cluster c )
	
public class CheaterTrackClusterAssociator extends
AbstractTrackClusterAssociation
//	This guy use the MC truth to determine the associations but note
that t and c
//		can be from any trackfinder or clusterbuilder
	void associate( TrackEnumeration t, ClusterEnumeration c ) 
	etc

public class RonanTrackClusterAssociator extends
AbstractTrackClusterAssociation
//	This guy uses the version Mike has written based on track
extrapolation 
//                           and again probably t and c can be from any
trackfinder or clusterbuilder
	void associate( TrackEnumeration t, ClusterEnumeration c ) 
	etc

public class CompleteTrackClusterAssociator extends
AbstractTrackClusterAssociation
//	This guy makes no cuts, he calculates the qualities and various
nsigs for every
//		track and cluster pair. The user gets to make the cuts.
Again probably
//		the result of any method of track finding and cluster
building can be used.
	void associate( TrackEnumeration t, ClusterEnumeration c ) 
	etc


*************************************************************
USAGE:

typical syntax:
c is a cluster
t is a track
tc is an xxxTrackClusterAssociator
tc.track(c) is an array of tracks associated by tc with cluster c
tc.track(c)[i]is the ith track associated with cluster c by tc
tc.track(c)[i].quality is the quality of the association between c and
the ith track associated with it.
tc.track(c)[i].cosThNSig is the error in CosTheta of the t-c association
tc.cluster(t).[j].phiNSig is the error in Phi between t and the jth
cluster associated with it.

sample crude psudeo-code for the  neutral cluster builder:
cb is a cluster builder, tf is a track finder.

ca[] = cb.getCluster()  //ca stands for cluster array
ta[] = tf.getTracks()    // ta stands for track array
cnew[] = new Cluster[] // the new neutral cluster array
int j = 0 // the index for cnew
tc = new xxxTrackClusterAssociator //xxx = pick your favorite associator
tc.associate( ta, ca )  // do the association, array inherits from
enumeration so args are ok
for i = 1 to ca.#elements  // loop over initial cluster set
	if  tc.track(ca[i]).#elements = 0  // if no track is associated
with the ith cluster
		cnew[j] = ca[i]    // then put it on the list of new
clusters as the jth element
		j++



-----------------------------------

Gary Bower  ([log in to unmask])
Stanford Linear Accelerator Center
Stanford University
650/926-2460


Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

February 2026
June 2017
April 2017
November 2016
September 2016
April 2016
March 2016
February 2016
November 2015
August 2015
July 2015
May 2015
April 2015
March 2015
January 2015
November 2014
September 2014
May 2014
April 2014
February 2014
November 2013
October 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
December 2012
October 2012
August 2012
July 2012
June 2012
May 2012
April 2012
February 2012
January 2012
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
May 2004
April 2004
March 2004
January 2004
November 2003
September 2003
August 2003
June 2003
May 2003
February 2003
August 2002
July 2002
May 2002
April 2002
March 2002
February 2002
January 2002
November 2001
September 2001
August 2001
June 2001
May 2001
April 2001
March 2001
March 2000
February 2000
January 2000
December 1999
November 1999
October 1999
September 1999
July 1999
May 1999
April 1999
March 1999
February 1999
January 1999
December 1998
November 1998

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use