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
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")
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")
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")