def smear_track(self, track, detector, accept=False): # TODO smearing depends on particle type! ptres = detector.pt_resolution(track) scale_factor = random.gauss(1, ptres) smeared_track = SmearedTrack(track, track.p3 * scale_factor, track.charge, track.path) pdebugger.info(" ".join(("Made", smeared_track.__str__()))) if detector.acceptance(smeared_track) or accept: return smeared_track else: pdebugger.info(str("Rejected {}".format(smeared_track))) return None
def make_smeared_track(self, track, resolution): '''create a new smeared track''' #TODO smearing depends on particle type! scale_factor = random.gauss(1, resolution) smeared_track = SmearedTrack(track, track.p3 * scale_factor, track.charge, track.path, index=len(self.smeared_tracks)) pdebugger.info(" ".join(("Made", smeared_track.__str__()))) return smeared_track
def make_smeared_track(self, track, resolution): '''create a new smeared track''' #TODO smearing depends on particle type! scale_factor = random.gauss(1, resolution) smeared_track = SmearedTrack(track, track.p3 * scale_factor, track.charge, track.path, index = len(self.smeared_tracks)) pdebugger.info(" ".join(("Made", smeared_track.__str__()))) return smeared_track
def smear_track(self, track, detector, accept=False): #TODO smearing depends on particle type! ptres = detector.pt_resolution(track) scale_factor = random.gauss(1, ptres) smeared_track = SmearedTrack(track, track.p3 * scale_factor, track.charge, track.path) pdebugger.info(" ".join(("Made", smeared_track.__str__()))) if detector.acceptance(smeared_track) or accept: return smeared_track else: pdebugger.info(str('Rejected {}'.format(smeared_track))) return None
def make_and_store_smeared_track(self, ptc, track, detector_resolution, detector_acceptance): '''create a new smeared track''' #TODO smearing depends on particle type! resolution = detector_resolution(ptc) scale_factor = random.gauss(1, resolution) smeared_track = SmearedTrack(track, track.p3 * scale_factor, track.charge, track.path, index = len(self.smeared_tracks)) pdebugger.info(" ".join(("Made", smeared_track.__str__()))) if detector_acceptance(smeared_track): self.smeared_tracks[smeared_track.uniqueid] = smeared_track self.update_history(track.uniqueid, smeared_track.uniqueid ) ptc.track_smeared = smeared_track return smeared_track else: pdebugger.info(str('Rejected {}'.format(smeared_track))) return None
def make_and_store_smeared_track(self, ptc, track, detector_resolution, detector_acceptance): '''create a new smeared track''' #TODO smearing depends on particle type! resolution = detector_resolution(track) scale_factor = random.gauss(1, resolution) smeared_track = SmearedTrack(track, track._p3 * scale_factor, track.charge, track.path, index = len(self.smeared_tracks)) pdebugger.info(" ".join(("Made", smeared_track.__str__()))) if detector_acceptance(track): self.smeared_tracks[smeared_track.uniqueid] = smeared_track self.update_history(track.uniqueid, smeared_track.uniqueid) ptc.track_smeared = smeared_track return smeared_track else: pdebugger.info(str('Rejected {}'.format(smeared_track))) return None
def simulate_muon(self, ptc): '''Simulate a muon corresponding to gen particle ptc Uses the methods detector.muon_energy_resolution and detector.muon_acceptance to smear the muon track. Later on, the particle flow algorithm will use the tracks coming from a muon to reconstruct muons. This method does not simulate energy deposits in the calorimeters ''' pdebugger.info("Simulating Muon") self.propagate(ptc) ptres = self.detector.muon_pt_resolution(ptc) scale_factor = random.gauss(1, ptres) track = ptc.track smeared_track = SmearedTrack(track, track.p3 * scale_factor, track.charge, track.path) pdebugger.info(" ".join(("Made", smeared_track.__str__()))) if self.detector.muon_acceptance(smeared_track): ptc.track_smeared = smeared_track else: pdebugger.info(str('Rejected {}'.format(smeared_track)))
def simulate_electron(self, ptc): '''Simulate an electron corresponding to gen particle ptc. Uses the methods detector.electron_energy_resolution and detector.electron_acceptance to smear the electron track. Later on, the particle flow algorithm will use the tracks coming from an electron to reconstruct electrons. This method does not simulate an electron energy deposit in the ECAL. ''' pdebugger.info("Simulating Electron") ecal = self.detector.elements['ecal'] propagator(ptc.q()).propagate_one( ptc, ecal.volume.inner, self.detector.elements['field'].magnitude) eres = self.detector.electron_energy_resolution(ptc) scale_factor = random.gauss(1, eres) track = ptc.track smeared_track = SmearedTrack(track, track.p3 * scale_factor, track.charge, track.path) pdebugger.info(" ".join(("Made", smeared_track.__str__()))) if self.detector.electron_acceptance(smeared_track): ptc.track_smeared = smeared_track else: pdebugger.info(str('Rejected {}'.format(smeared_track)))