From cea0c2e435dad6689da1c903126dd83f5d57b030 Mon Sep 17 00:00:00 2001 From: Sebouh Paul <sebouh.paul@gmail.com> Date: Wed, 18 Sep 2024 14:34:30 -0400 Subject: [PATCH] Delete benchmarks/pi0_zdc/analysis/gen_pi0_decay.cxx~ --- .../pi0_zdc/analysis/gen_pi0_decay.cxx~ | 182 ------------------ 1 file changed, 182 deletions(-) delete mode 100644 benchmarks/pi0_zdc/analysis/gen_pi0_decay.cxx~ diff --git a/benchmarks/pi0_zdc/analysis/gen_pi0_decay.cxx~ b/benchmarks/pi0_zdc/analysis/gen_pi0_decay.cxx~ deleted file mode 100644 index 953dbdf5..00000000 --- a/benchmarks/pi0_zdc/analysis/gen_pi0_decay.cxx~ +++ /dev/null @@ -1,182 +0,0 @@ -#include "HepMC3/GenEvent.h" -#include "HepMC3/ReaderAscii.h" -#include "HepMC3/WriterAscii.h" -#include "HepMC3/Print.h" - -#include "TRandom3.h" -#include "TVector3.h" - -#include <TDatabasePDG.h> -#include <TParticlePDG.h> - -#include <iostream> -#include <random> -#include <TMath.h> - -using namespace HepMC3; - -std::tuple<double, int, double> GetParticleInfo(TDatabasePDG* pdg, TString particle_name) -{ - TParticlePDG *particle = pdg->GetParticle(particle_name); - const double mass = particle->Mass(); - const int pdgID = particle->PdgCode(); - const double lifetime = particle->Lifetime(); - return std::make_tuple(mass, pdgID, lifetime); -} -// Calculates the decay length of a particle. Samples from an exponential decay. -double GetDecayLength(TRandom3* r1, double lifetime, double mass, double momentum_magnitude) -{ - double c_speed = TMath::C() * 1000.; // speed of light im mm/sec - double average_decay_length = (momentum_magnitude/mass) * lifetime * c_speed; - return r1->Exp(average_decay_length); -} - -// Generate single pi0 mesons and decay them to 2 photons -void gen_pi0_decay(int n_events = 100000, UInt_t seed = 0, char* out_fname = "pi0_decay.hepmc", - double p_min = 60., // in GeV/c - double p_max = 275.) // in GeV/c -{ - - const double theta_min = 0.0; // in mRad - const double theta_max = 4; // in mRad - //const double p_min = 100.; // in GeV/c - //const double p_max = 275.; // in GeV/c - - WriterAscii hepmc_output(out_fname); - int events_parsed = 0; - GenEvent evt(Units::GEV, Units::MM); - - // Random number generator - TRandom3 *r1 = new TRandom3(seed); //Default = 0, which uses clock to set seed - cout<<"Random number seed is "<<r1->GetSeed()<<"!"<<endl; - - // Getting generated particle information - TDatabasePDG *pdg = new TDatabasePDG(); - - auto pi0_info = GetParticleInfo(pdg, "pi0"); - double pi0_mass = std::get<0>(pi0_info); - int pi0_pdgID = std::get<1>(pi0_info); - double pi0_lifetime = std::get<2>(pi0_info); - - auto photon_info = GetParticleInfo(pdg, "gamma"); - double photon_mass = std::get<0>(photon_info); - int photon_pdgID = std::get<1>(photon_info); - - for (events_parsed = 0; events_parsed < n_events; events_parsed++) { - - //Set the event number - evt.set_event_number(events_parsed); - - // FourVector(px,py,pz,e,pdgid,status) - // type 4 is beam - // pdgid 11 - electron - // pdgid 2212 - proton - GenParticlePtr p1 = - std::make_shared<GenParticle>(FourVector(0.0, 0.0, 10.0, 10.0), 11, 4); - GenParticlePtr p2 = std::make_shared<GenParticle>( - FourVector(0.0, 0.0, 0.0, 0.938), 2212, 4); - - // Define momentum with respect to EIC proton beam direction - Double_t pi0_p = r1->Uniform(p_min, p_max); - Double_t pi0_phi = r1->Uniform(0.0, 2.0 * M_PI); - Double_t pi0_th = r1->Uniform(theta_min/1000., theta_max/1000.); // Divide by 1000 for radians - Double_t pi0_px = pi0_p * TMath::Cos(pi0_phi) * TMath::Sin(pi0_th); - Double_t pi0_py = pi0_p * TMath::Sin(pi0_phi) * TMath::Sin(pi0_th); - Double_t pi0_pz = pi0_p * TMath::Cos(pi0_th); - Double_t pi0_E = TMath::Sqrt(pi0_p*pi0_p + pi0_mass*pi0_mass); - - // Rotate to lab coordinate system - TVector3 pi0_pvec(pi0_px, pi0_py, pi0_pz); - double cross_angle = -25./1000.; // in Rad - TVector3 pbeam_dir(TMath::Sin(cross_angle), 0, TMath::Cos(cross_angle)); //proton beam direction - pi0_pvec.RotateY(cross_angle); // Theta is returned positive, beam in negative X - - // type 2 is state that will decay - GenParticlePtr p_pi0 = std::make_shared<GenParticle>( - FourVector(pi0_pvec.X(), pi0_pvec.Y(), pi0_pvec.Z(), pi0_E), pi0_pdgID, 2 ); - - // Generating pi0 particle, will be generated at origin - // Must have input electron + proton for vertex - GenVertexPtr pi0_initial_vertex = std::make_shared<GenVertex>(); - pi0_initial_vertex->add_particle_in(p1); - pi0_initial_vertex->add_particle_in(p2); - pi0_initial_vertex->add_particle_out(p_pi0); - evt.add_vertex(pi0_initial_vertex); - - // Generate gamma1 + gamma1 in pi0 rest frame - TLorentzVector gamma1_rest, gamma2_rest; - - // Generating uniformly along a sphere - double cost_gamma1_rest = r1->Uniform(-1,1); - double th_gamma1_rest = TMath::ACos(cost_gamma1_rest); - double sint_gamma1_rest = TMath::Sin(th_gamma1_rest); - - double phi_gamma1_rest = r1->Uniform(-1.*TMath::Pi(),1.*TMath::Pi()); - double cosp_gamma1_rest = TMath::Cos(phi_gamma1_rest); - double sinp_gamma1_rest = TMath::Sin(phi_gamma1_rest); - - // Calculate energy of each particle in the pi0 rest frame - // This is half the pi0 mass - double E_gamma1_rest = pi0_mass/2; - double E_gamma2_rest = pi0_mass/2; - - // Both particles will have the same momentum, and are massless - double momentum_rest = pi0_mass/2; - - gamma1_rest.SetE(E_gamma1_rest); - gamma1_rest.SetPx( momentum_rest * sint_gamma1_rest * cosp_gamma1_rest ); - gamma1_rest.SetPy( momentum_rest * sint_gamma1_rest * sinp_gamma1_rest ); - gamma1_rest.SetPz( momentum_rest * cost_gamma1_rest ); - - gamma2_rest.SetE(E_gamma2_rest); - gamma2_rest.SetPx( -gamma1_rest.Px() ); - gamma2_rest.SetPy( -gamma1_rest.Py() ); - gamma2_rest.SetPz( -gamma1_rest.Pz() ); - - // Boost both gammas to lab frame - TLorentzVector pi0_lab(pi0_pvec.X(), pi0_pvec.Y(), pi0_pvec.Z(), pi0_E); - TVector3 pi0_boost = pi0_lab.BoostVector(); - TLorentzVector gamma1_lab, gamma2_lab; - gamma1_lab = gamma1_rest; - gamma1_lab.Boost(pi0_boost); - gamma2_lab = gamma2_rest; - gamma2_lab.Boost(pi0_boost); - - // Calculating position for pi0 decay - TVector3 pi0_unit = pi0_lab.Vect().Unit(); - double pi0_decay_length = GetDecayLength(r1, pi0_lifetime, pi0_mass, pi0_lab.P()); - TVector3 pi0_decay_position = pi0_unit * pi0_decay_length; - double pi0_decay_time = pi0_decay_length / pi0_lab.Beta() ; // Decay time in lab frame in length units (mm) - - // Generating vertex for pi0 decay - GenParticlePtr p_gamma1 = std::make_shared<GenParticle>( - FourVector(gamma1_lab.Px(), gamma1_lab.Py(), gamma1_lab.Pz(), gamma1_lab.E()), photon_pdgID, 1 ); - - GenParticlePtr p_gamma2 = std::make_shared<GenParticle>( - FourVector(gamma2_lab.Px(), gamma2_lab.Py(), gamma2_lab.Pz(), gamma2_lab.E()), photon_pdgID, 1 ); - - GenVertexPtr v_pi0_decay = std::make_shared<GenVertex>(FourVector(pi0_decay_position.X(), pi0_decay_position.Y(), pi0_decay_position.Z(), pi0_decay_time)); - v_pi0_decay->add_particle_in(p_pi0); - v_pi0_decay->add_particle_out(p_gamma1); - v_pi0_decay->add_particle_out(p_gamma2); - - evt.add_vertex(v_pi0_decay); - - if (events_parsed == 0) { - std::cout << "First event: " << std::endl; - Print::listing(evt); - } - double zdc_z=35800; - TVector3 extrap_gamma1=pi0_decay_position+gamma1_lab.Vect()*((zdc_z-pbeam_dir.Dot(pi0_decay_position))/(pbeam_dir.Dot(gamma1_lab.Vect()))); - TVector3 extrap_gamma2=pi0_decay_position+gamma2_lab.Vect()*((zdc_z-pbeam_dir.Dot(pi0_decay_position))/(pbeam_dir.Dot(gamma2_lab.Vect()))); - if (extrap_gamma1.Angle(pbeam_dir)<0.004 && extrap_gamma2.Angle(pbeam_dir)<0.004 && lambda_decay_position.Dot(pbeam_dir)<zdc_z) - hepmc_output.write_event(evt); - if (events_parsed % 1000 == 0) { - std::cout << "Event: " << events_parsed << std::endl; - } - evt.clear(); - } - hepmc_output.close(); - - std::cout << "Events parsed and written: " << events_parsed << std::endl; -} -- GitLab