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,"Ecal
> ClustersCorr");
>
> 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