Print

Print


In our reconstruction code, ReconParticleDriver.java, we set the pid of the cluster in track cluster matching. This definitely happens because this then goes to set energy and position corrections to the cluster in ClusterEnergyCorrection.java and ClusterPositionCorrection.java. Both of these correction drivers call "cluster.getParticleId()" to determine what particle type is associate with this cluster. 

I'm guessing that this is not getting written out to the cluster collections somehow, although it should be written out to the corrected collection. The reason this is good information to have is to know which corrections were used for a cluster. 

I've been trying to read the particle id of clusters when running the tuple driver, but it is not working since they are all set to 0. Maybe casting it wasn't the correct thing to do, but then I want to know why this is not being written out to the corrected cluster collection.

On Fri, Feb 3, 2017 at 3:08 PM, McCormick, Jeremy I. <[log in to unmask]> wrote:
Hi,

From what I can tell the particle ID on Cluster was never implemented.  It is always hard-coded to ‘0’ in the output code, but this could be easily changed to write out the value from getParticleId() and still be backward compatible (there is a space for an int there in the Cluster output that we are already using/reserving).  It looks like maybe the LCIO standard indicates there could be multiple particle IDs, as there is some commented out code in the SIO class for writing a list of PID values.

The SIOCluster class seems to implement Cluster directly, so it isn’t a BaseCluster (for some reason it was done differently than the other SIO classes that extend a base class).  That’s why the cast fails.  I’m not sure what you are trying to do, but you can use the copy constructor of BaseCluster to create an object with the same information.  If you’re trying to modify the collection in place though, this probably won’t do what you want.  You would probably need to create a new collection to contain the copied Cluster objects.

—Jeremy

On Feb 2, 2017, at 6:19 PM, Holly Vance <[log in to unmask]> wrote:

Hi Jeremy,

I'm trying to write out from recon files what the pid is of the cluster. During recon, we assign this as a BaseCluster and setParticleId(). Additionally, when applying cluster corrections to energy and position, we use cluster.getParticleId(), and this returns something like +/-11, 22.

However, when I look at a fully reconstructed file and try to do cluster.getParticleId(), it is always set to 0. 

I tried casting this to BaseCluster, but it doesn't work. I've tried this on both collections "EcalClusters" and "EcalClustersCorr".  

   if (event.hasCollection(Cluster.class,"EcalClustersCorr")){

            List<Cluster> ecalClusters = event.get(Cluster.class,"EcalClustersCorr");

Cluster c1 = ecalClusters.get(0));


            System.out.println("Cluster pid:\t"+c1.getParticleId());


If I try to do: 

((BaseCluster)c1).getParticleId()

then I get 

org.lcsim.job.EventMarkerDriver process :: Event 10085820 with sequence 0

java.lang.ClassCastException: org.lcsim.lcio.SIOCluster cannot be cast to org.lcsim.event.base.BaseCluster


Is there a reason this is not persisted?

-Holly






Use REPLY-ALL to reply to list

To unsubscribe from the HPS-SOFTWARE list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=HPS-SOFTWARE&A=1