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.


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: 


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?


Use REPLY-ALL to reply to list

To unsubscribe from the HPS-SOFTWARE list, click the following link: