//Pure public static Tuple <Atom, Particle> ElectronCaputre(Atom Atom, FRandom Rand) { return(new Tuple <Atom, Particle>(AtomCreator(Atom.AtomicNumber - 1, Atom.MassNumber), VectorFunctions.SingularEjection(new ElectronNeutrino(1), Rand))); }
//Pure public static Tuple <Photon, Photon> Annialation(Particles.Particle Particle, Particles.Particle AntiParticle, FRandom Rand) // Simple collision { return(VectorFunctions.OppositeEjections(CreateAnnialationPhoton(Particle, AntiParticle), CreateAnnialationPhoton(Particle, AntiParticle), Rand)); }
//Pure public static Tuple <Particle, Particle> PairProductionPhoton(Photon Photon, FRandom Rand) { //This is all one line, it has been split onto multiple lines for readability return(FrequencyToEnergy(Photon) >= MassToEnergy(new Proton(1).RestMass) ? VectorFunctions.OppositeEjections(CreatePairproductionOutputGreaterThanProtonRestMass(Photon), CreatePairproductionOutputGreaterThanProtonRestMass(Photon), Rand): VectorFunctions.OppositeEjections(CreatePairproductionOutputLessThanProtonRestMass(Photon), CreatePairproductionOutputLessThanProtonRestMass(Photon), Rand)); }
//Need to add proton decay public static Tuple <Particle, Particle> ElectrostaticRepulsion <T>(T P1, T P2, FRandom Rand, Vector3D StartingPositionParticle1, Vector3D StartingPositionParticle2) where T : Particle { return(new Tuple <Particle, Particle>((T)Activator.CreateInstance(P1.GetType(), VectorFunctions.AcelerationOfParticlesFromElectrostaticForce(P1, P2, StartingPositionParticle1, StartingPositionParticle2), VectorFunctions.CreateOpposite(VectorFunctions.VectorBetween(StartingPositionParticle1, StartingPositionParticle2)).Item2), (T)Activator.CreateInstance(P2.GetType(), VectorFunctions.AcelerationOfParticlesFromElectrostaticForce(P2, P1, StartingPositionParticle1, StartingPositionParticle2), VectorFunctions.VectorBetween(StartingPositionParticle1, StartingPositionParticle2)))); }