Example #1
0
    def make_cluster(self, ptc, detname, fraction=1., size=None):
        '''adds a cluster in a given detector, with a given fraction of
        the particle energy.'''
        detector = self.detector.elements[detname]
        propagator(ptc.q()).propagate_one(
            ptc, detector.volume.inner,
            self.detector.elements['field'].magnitude)
        if size is None:
            size = detector.cluster_size(ptc)
        cylname = detector.volume.inner.name
        if not cylname in ptc.points:
            # TODO Colin particle was not extrapolated here...
            # issue must be solved!
            errormsg = '''
SimulationError : cannot make cluster for particle: 
particle: {ptc}
with vertex rho={rho:5.2f}, z={zed:5.2f}
cannot be extrapolated to : {det}\n'''.format(ptc=ptc,
                                              rho=ptc.vertex.Perp(),
                                              zed=ptc.vertex.Z(),
                                              det=detector.volume.inner)
            self.logger.warning(errormsg)
            raise SimulationError(
                'Particle not extrapolated to the detector, so cannot make a cluster there. No worries for now, problem will be solved :-)'
            )
        cluster = Cluster(ptc.p4().E() * fraction, ptc.points[cylname], size,
                          cylname, ptc)
        ptc.clusters[cylname] = cluster
        pdebugger.info(" ".join(("Made", cluster.__str__())))
        return cluster
Example #2
0
 def cluster_collection(self, layer):
     if layer == 'ecal_in':
         return self.true_ecals
     elif layer == 'hcal_in':
         return self.true_hcals
     else:
         raise SimulationError("unrecognised layer for a cluster")
Example #3
0
 def smeared_cluster_collection(self, layer):
     if layer == 'ecal_in':
         return self.smeared_ecals
     elif layer == 'hcal_in':
         return self.smeared_hcals
     else:
         raise SimulationError("unrecognised layer for a smeared cluster")
Example #4
0
 def cluster_collection(self, layer, smeared):
     '''returns the correct cluster collection depending on the layer,
     and whether the true or smeared collection is requested.
     
     @param layer: either "ecal_in" or "hcal_in".
     @param smeared: boolean - if True, the smeared collection is returned.
      otherwise, the unsmeared collection
     '''
     if layer == 'ecal_in':
         if smeared:
             return self.smeared_ecals
         else:
             return self.true_ecals
     elif layer == 'hcal_in':
         if smeared:
             return self.smeared_hcals
         else:
             return self.true_hcals
     else:
         raise SimulationError("unrecognised layer for a cluster")