From f03bbde15bf6ee2071df19ec167a7fb27d7c7e76 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Fri, 24 Jun 2022 03:59:01 -0600 Subject: [PATCH 01/35] Beam energy dependent luminosity values set for PiPlus production routine. Lowered Q2 cut to 3 GeV2 (model is parameterised to here) for 5on41 running --- Config_SoLID.json | 31 +++++++++++++ src/eic_evgen/eic_pim.cc | 2 +- src/eic_evgen/process_routine/PiPlus_prod.cc | 48 +++++++------------- 3 files changed, 49 insertions(+), 32 deletions(-) create mode 100644 Config_SoLID.json diff --git a/Config_SoLID.json b/Config_SoLID.json new file mode 100644 index 0000000..be17aeb --- /dev/null +++ b/Config_SoLID.json @@ -0,0 +1,31 @@ +{ + //Config + // All values should use units of MeV for energies and momenta, + // and degrees for angles. + // n_events indicates number of attempts + // SJDK 17/06/22 - This is an old .json I found from DEMPEvGen, I believe these are still valid options for DEMPGen + "output_file" : "Test.root", + "n_events" : 10000, + "beam_energy": 11000, + "targ_pol_x": 0.865, + "targ_pol_y": 0, + "targ_pol_z": 0, + "scat_elec_Emin": 1100.0, + "scat_elec_Emax": 9900.0, + "scat_elec_thetamin": 5.0, + "scat_elec_thetamax": 27.0, + "prod_pion_thetamin": 5.0, + "prod_pion_thetamax": 20.0, + "multiple_scattering": false, + "ionization": false, + "bremsstrahlung": false, + "final_state_interaction": false, + "fermi_momentum": false, + "weight_cut": true, + "w_cut": true, + "w_min": 2, + "Qsq_cut": true, + "Qsq_min": 4, + "t_cut": true, + "t_min": -1.2 +} diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index f775b1b..cd5b9f0 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -120,7 +120,6 @@ double fBeta_CM_RF, fGamma_CM_RF; double fPhoton_MomZ_RF, fPhoton_MomX_RF, fPhoton_MomY_RF, fPhoton_Theta_RF, fPhoton_Phi_RF, fPion_Energy_RF, fPion_Energy_RF_GeV, fPiqVec_Theta_RF, fPion_Mom_RF, fPion_Mom_RF_GeV, fPion_MomX_RF, fPion_MomY_RF, fPion_MomZ_RF, fPion_Theta_RF, fPion_Phi_RF, fPion_MomX_RF_GeV, fPion_MomY_RF_GeV, fPion_MomZ_RF_GeV; - double fT_Para, fT_Para_GeV, fT, fEpsilon, fx, fy, fz, fNeutron_Energy_RF, fNeutron_Energy_RF_GeV, fNeutron_Mom_RF, fNeutron_Mom_RF_GeV, fNeutron_qVec_Theta_RF, fNeutron_MomX_RF, fNeutron_MomY_RF, fNeutron_MomZ_RF, fNeutron_Theta_RF, fNeutron_Phi_RF, fPhoton_MomX_RF_GeV, fPhoton_MomY_RF_GeV, fPhoton_MomZ_RF_GeV, fNeutron_MomX_RF_GeV, fNeutron_MomY_RF_GeV, fNeutron_MomZ_RF_GeV; double fPhoton_Theta_Col, fPhoton_Phi_Col, fPhoton_Energy_Col, fPhoton_Mom_Col, fPhoton_MomX_Col, fPhoton_MomZ_Col, fPhoton_MomY_Col, fPhoton_Energy_Col_GeV, fPhoton_Mom_Col_GeV, fPhoton_MomX_Col_GeV, fPhoton_MomZ_Col_GeV, fPhoton_MomY_Col_GeV; @@ -234,6 +233,7 @@ void pim::Initilize() { kFSI = false; kMSele = false; kMS = false; + // The luminosity below is some default assumtpion, more up to date values are set in PiPlus prod and depend upon beam energy combinations // fLumi = 0.374e33; // Jlab design fLumi = 1e34; // https://eic.jlab.org/wiki/index.php/EIC_luminosity fuBcm2 = 1.0e-30; diff --git a/src/eic_evgen/process_routine/PiPlus_prod.cc b/src/eic_evgen/process_routine/PiPlus_prod.cc index 2d25f6d..450606e 100644 --- a/src/eic_evgen/process_routine/PiPlus_prod.cc +++ b/src/eic_evgen/process_routine/PiPlus_prod.cc @@ -131,35 +131,21 @@ void PiPlus_Production::Init() { cout << "Produced particle in exclusive production: " << rParticle << "; with mass: " << fX_Mass << " MeV "<< endl; cout << fEBeam << " GeV electrons on " << fPBeam << " GeV ions" << endl; - - // Depending upon beam energy combination, set the value for the max weight from the non normalised version to then generate unit weights - // The values were determined from a set of 100 x 1B events thrown runs, the mean weight value + 6.5 sigma was taken as the "max" weight for a given beam energy combination - // Probability of being more than 6.5 sigma away is over 1 in 12.5B - // The weight has to be scaled by the number thrown in the current calculation - // fEventWeight is now independent of the number of events thrown - - // SJDK 21/06/21 - Commented out for now, reverting to old weighting method - - // if ((fEBeam == 5.0 ) && (fPBeam == 41.0) ){ - // //fEventWeightCeil = 0.0221836 * (1000000000); // Old value - // fEventWeightCeil = 0.002296 * (1000000000); - // } - - // else if ((fEBeam == 5.0 ) && (fPBeam == 100.0) ){ - // //fEventWeightCeil = 0.30281 * (1000000000); // Old value - // fEventWeightCeil = 0.023960 * (1000000000); - // } - - // else if ((fEBeam == 10.0 ) && (fPBeam == 100.0) ){ - // //fEventWeightCeil = 1.77775 * (1000000000); // Old value - // fEventWeightCeil = 0.201569 * (1000000000); - // } - // else { - // fEventWeightCeil = 1.0 * (100000000); - // cout << endl << "!!!!! WARNING !!!!!" << endl; - // cout << "Beam energy combination not recognised, weight ceiling set to 1." << endl; - // cout << "!!!!! WARNING !!!!!" << endl << endl; - // } + + // Set luminosity value based upon beam energy combination + // See slide 11 in https://indico.cern.ch/event/1072579/contributions/4796856/attachments/2456676/4210776/CAP-EIC-June-7-2022-Seryi-r2.pdf + if ((fEBeam == 5.0 ) && (fPBeam == 41.0) ){ + fLumi = 0.44e33; + } + else if ((fEBeam == 5.0 ) && (fPBeam == 100.0) ){ + fLumi = 3.68e33; + } + else if ((fEBeam == 10.0 ) && (fPBeam == 100.0) ){ + fLumi = 4.48e33; + } + else if ((fEBeam == 18.0 ) && (fPBeam == 275.0) ){ + fLumi = 1.54e33; + } } @@ -218,7 +204,7 @@ void PiPlus_Production::Processing_Event() { fQsq_GeV = -1.* r_lphotong.Mag2(); - if ( fQsq_GeV < 5.0 ) { + if ( fQsq_GeV < 3.0 ) { qsq_ev++; return; } @@ -798,7 +784,7 @@ void PiPlus_Production::Detail_Output() { //ppiDetails << "Max weight value " << setw(20) << fEventWeightCeil << endl; ppiDetails << "Number of events with w more than 10.6 " << setw(20) << w_ev << endl; ppiDetails << "Number of events with wsq negative " << setw(20) << w_neg_ev << endl; - ppiDetails << "Number of events with qsq less than 5 " << setw(20) << qsq_ev << endl; + ppiDetails << "Number of events with qsq less than 3 " << setw(20) << qsq_ev << endl; ppiDetails << "Number of events with Meson (X) energy NaN " << setw(20) << fNaN << endl; ppiDetails << "Number of events failing conservation law check " << setw(20) << fConserve << endl; ppiDetails << "Total events passing conservation laws " << setw(20) << conserve << endl; From 4e3b411e8645900f06d207cef682f8c0b62da5ce Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Mon, 19 Dec 2022 06:41:32 -0600 Subject: [PATCH 02/35] Added some comments in a few places, updated some infor printing statements. Pushing before attemtping to modify the structure of the EIC module --- Config_EIC.json | 2 -- json_examples/Config.json | 2 +- src/eic_evgen/eic.cc | 2 +- src/eic_evgen/eic_pim.cc | 7 +++++-- src/eic_evgen/process_routine/KPlus_prod.cc | 2 +- src/eic_evgen/process_routine/PiPlus_prod.cc | 15 ++++++++------- src/main.cxx | 8 ++++---- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/Config_EIC.json b/Config_EIC.json index 61673e4..4087e3f 100644 --- a/Config_EIC.json +++ b/Config_EIC.json @@ -18,12 +18,10 @@ "file_name" : "DEMPGen_EIC_test", "n_events" : 100000000, - "output_file" : "RootFiles/Test.root", "generator_seed": 1234567, //************************************** /// This section if for EIC simulation only - "Targ_dir" : 1, // Target Direction (1->Up, 2->Down) "Kinematics_type" : 1, // Kinematics type (1->FF, 2->TSSA) "particle": "Pion+", // Choices: omega, pi+, pi0, K+ "hadron": "", // Choices: Empty OR Lambda or Sigma0 - For K+ production only! diff --git a/json_examples/Config.json b/json_examples/Config.json index 8e88cd6..f468615 100644 --- a/json_examples/Config.json +++ b/json_examples/Config.json @@ -34,7 +34,7 @@ "prod_pion_thetamin": 5.0, "prod_pion_thetamax": 20.0, "multiple_scattering": false, - "ionization": false, + "ionisation": false, "bremsstrahlung": false, "final_state_interaction": false, "fermi_momentum": false, diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index 5ca9b2a..245c9b9 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -157,7 +157,7 @@ void eic(Json::Value obj) { cout << "Using LUND output format" << endl; } else if (gOutputType == "HEPMC3"){ - cout << "Using HEPMC3 output format for Athena" << endl; + cout << "Using HEPMC3 output format for EPIC" << endl; } else{ cout << "Output type not recognised!" << endl; diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index cd5b9f0..8dc6ca9 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -243,8 +243,11 @@ void pim::Initilize() { fScatElec_Theta_I = 60.0 * fDEG2RAD; fScatElec_Theta_F = 175.0 * fDEG2RAD; - fScatElec_E_Lo = 0.5; // % of beam energy - fScatElec_E_Hi = 2.5; // % of beam energy + // SJDK 29/11/22 - Updated comment on two variables below + // Two parameters below are NOT a percentage of the beam energy as previously clamed. This parameter along with _Hi represent the RANGE of enegries over which the scattered electron is generated + // The range is from 0.5*EBeam to 2.5*EBeam -> Therefore for the phase space calculation, the spread of 2* the incoming beam energy is used in the calculation + fScatElec_E_Lo = 0.5; // NOT a percentage of beam energy + fScatElec_E_Hi = 2.5; // NOT a percentage of beam energy fPion_Theta_I = 0.0 * fDEG2RAD; fPion_Theta_F = 50.0 * fDEG2RAD; fOmega_Theta_I = 0.0 * fDEG2RAD; diff --git a/src/eic_evgen/process_routine/KPlus_prod.cc b/src/eic_evgen/process_routine/KPlus_prod.cc index 8eb25f7..4031eab 100644 --- a/src/eic_evgen/process_routine/KPlus_prod.cc +++ b/src/eic_evgen/process_routine/KPlus_prod.cc @@ -1072,7 +1072,7 @@ void KPlus_Production::KPlus_HEPMC3_Out_Init() { void KPlus_Production::KPlus_HEPMC3_Output() { - // HEPMC3 output for Athena simulations + // HEPMC3 output for Athena/EPIC simulations // First line - E - Event# - #Vertices - #Particles ppiOut << "E" << " " << print_itt << " " << "1" << " " << 5 << endl; diff --git a/src/eic_evgen/process_routine/PiPlus_prod.cc b/src/eic_evgen/process_routine/PiPlus_prod.cc index 450606e..a4da46e 100644 --- a/src/eic_evgen/process_routine/PiPlus_prod.cc +++ b/src/eic_evgen/process_routine/PiPlus_prod.cc @@ -222,7 +222,8 @@ void PiPlus_Production::Processing_Event() { w_neg_ev++; return; } - + + // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- @@ -465,20 +466,20 @@ void PiPlus_Production::Processing_Event() { // ---------------------------------------------------- // Jacobian dt/dcos(theta*)dphi in units of GeV2/sr // ---------------------------------------------------- - fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); + fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); // Eqn 22 in paper - fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; + fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; // Eqn 21 in paper // ---------------------------------------------------- // Jacobian dOmega* / dOmega dimensionless // ---------------------------------------------------- fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - - ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); + ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); // Differs from next line in photon vect -> lphoton_rf vs r_lphoton - fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / + fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / // This one is actually used subsequently, so this must be Eqn 20 ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - - ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); + ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); // cout << lX_rf.Vect().Mag() << " " << << << << << << << << endl; @@ -1023,7 +1024,7 @@ void PiPlus_Production::PiPlus_HEPMC3_Out_Init() { void PiPlus_Production::PiPlus_HEPMC3_Output() { - // HEPMC3 output for Athena simulations + // HEPMC3 output for Athena/EPIC simulations // First line - E - Event# - #Vertices - #Particles ppiOut << "E" << " " << print_itt << " " << "1" << " " << 5 << endl; diff --git a/src/main.cxx b/src/main.cxx index 62eaa7a..0c72382 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -107,8 +107,8 @@ int main(int argc, char** argv){ Gen_seed = gen_seed; - if (obj["ionization"].asBool()) - cout << "Ionization Enabled" << endl; + if (obj["ionisation"].asBool()) + cout << "Ionisation Enabled" << endl; if (obj["bremsstrahlung"].asBool()) cout << "Bremsstrahlung Enabled" << endl; if (obj["fermi_momentum"].asBool()) @@ -309,7 +309,7 @@ int main(int argc, char** argv){ // These effects occur before the reaction, so affect the vertex values targetthickness = ((*VertEvent->Vertex_z+370.0) * Helium_Density)/ (ME->X0(Helium_Z, Helium_A)); - if (obj["ionization"].asBool()){ + if (obj["ionisation"].asBool()){ ME->IonLoss(VertBeamElec, Window_A, Window_Z, Window_Density, targwindowthickness); ME->IonLoss(VertBeamElec, Helium_A, Helium_Z, Helium_Density, targetthickness); } @@ -489,7 +489,7 @@ int main(int argc, char** argv){ //cout << targetthickness << endl; - if (obj["ionization"].asBool()){ + if (obj["ionisation"].asBool()){ //Scattered Electron ME->IonLoss(LCorEvent->ScatElec, Window_A, Window_Z, From cbd0d9e1853370aa4f9bbf6a2b186b5795b0ebec Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Wed, 21 Dec 2022 05:17:13 -0600 Subject: [PATCH 03/35] New DEMP_Reaction.cc process, intended to be a generic DEMP reaction. Will remove older reactions soon --- src/eic_evgen/eic.cc | 30 +- src/eic_evgen/eic_pim.cc | 5 +- src/eic_evgen/eic_pim.h | 4 +- .../process_routine/DEMP_Reaction.cc | 1054 +++++++++++++++++ src/eic_evgen/reaction_routine.cc | 21 +- src/eic_evgen/reaction_routine.h | 165 +++ src/main.cxx | 1 - 7 files changed, 1267 insertions(+), 13 deletions(-) create mode 100644 src/eic_evgen/process_routine/DEMP_Reaction.cc diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index 245c9b9..c4887df 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -83,6 +83,24 @@ void eic(int event_number, int target_direction, int kinematics_type, TString fi r1->process_reaction(); delete r1; } + else if (particle == "pi+" || particle == "Pion+" || particle == "Pi+"){ + hadron = "Neutron"; + particle = ExtractParticle(particle); + charge = ExtractCharge(particle); + //Reaction* r1 = new Reaction(particle); + Reaction* r1 = new Reaction(particle, hadron); + r1->process_reaction(); + delete r1; + } + else if (particle == "pi0" || particle == "Pion0" || particle == "Pi0"){ + hadron = "Proton"; + particle = ExtractParticle(particle); + charge = ExtractCharge(particle); + //Reaction* r1 = new Reaction(particle); + Reaction* r1 = new Reaction(particle, hadron); + r1->process_reaction(); + delete r1; + } else{ particle = ExtractParticle(particle); charge = ExtractCharge(particle); @@ -137,6 +155,13 @@ void eic(Json::Value obj) { hadron = ExtractParticle(hadron); } } + // SJDK - 19/12/22 - Specify hadron to neutron/proton for pi+/pi0 production, for pi0 production, may want to adjust? + else if (particle == "pi+" || particle == "Pion+" || particle == "Pi+"){ + hadron = "Neutron"; + } + else if (particle == "pi0" || particle == "Pion0" || particle == "Pi0"){ + hadron = "Proton"; + } else { // SJDK -09/02/22 - Note that in future this could be changed to get different hadrons in other reactions if desired hadron = ""; } @@ -186,7 +211,8 @@ void eic(Json::Value obj) { } if(particle != "K+"){ - Reaction* r1 = new Reaction(particle); + //Reaction* r1 = new Reaction(particle); + Reaction* r1 = new Reaction(particle, hadron); r1->process_reaction(); delete r1; } @@ -253,7 +279,5 @@ TString ExtractCharge(TString particle) { } else { charge = "0"; } - return charge; - } diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index 8dc6ca9..6bc0742 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -38,7 +38,7 @@ int fWLessShell, fWLess1P9, fSDiff; unsigned long long int fNEvents, fNRecorded, fNGenerated, fWSqNeg, fNMomConserve, fNSigmaNeg, fNaN, fConserve, fNWeightUnphys, fNWeightReject, fLundRecorded, fNFile; -double fK, fm, fElectron_Kin_Col_GeV, fElectron_Kin_Col, fRand, fLumi, fuBcm2, fPI, fDEG2RAD, fRAD2DEG, fEBeam, fPBeam, fScatElec_Theta_I, fScatElec_Theta_F, fPion_Theta_I, fPion_Theta_F, fScatElec_E_Hi, fScatElec_E_Lo, fPSF; +double fK, fm, fElectron_Kin_Col_GeV, fElectron_Kin_Col, fRand, fLumi, fuBcm2, fPI, fDEG2RAD, fRAD2DEG, fEBeam, fPBeam, fScatElec_Theta_I, fScatElec_Theta_F, fPion_Theta_I, fPion_Theta_F, fMesonX_Theta_I, fMesonX_Theta_F, fScatElec_E_Hi, fScatElec_E_Lo, fPSF; double fOmega_Theta_I, fOmega_Theta_F, fOmega_Theta_Col, fOmega_Phi_Col; @@ -248,8 +248,11 @@ void pim::Initilize() { // The range is from 0.5*EBeam to 2.5*EBeam -> Therefore for the phase space calculation, the spread of 2* the incoming beam energy is used in the calculation fScatElec_E_Lo = 0.5; // NOT a percentage of beam energy fScatElec_E_Hi = 2.5; // NOT a percentage of beam energy + // Should remove specific pion/omega values here and JUST use MesonX, should then actually read this in as a parameter, use 0 to 50 as default fPion_Theta_I = 0.0 * fDEG2RAD; fPion_Theta_F = 50.0 * fDEG2RAD; + fMesonX_Theta_I = 0.0 * fDEG2RAD; + fMesonX_Theta_F = 50.0 * fDEG2RAD; fOmega_Theta_I = 0.0 * fDEG2RAD; fOmega_Theta_F = 360.0 * fDEG2RAD; // 02/06/21 - SJDK diff --git a/src/eic_evgen/eic_pim.h b/src/eic_evgen/eic_pim.h index 83f2ce4..c5acfb0 100644 --- a/src/eic_evgen/eic_pim.h +++ b/src/eic_evgen/eic_pim.h @@ -132,8 +132,10 @@ extern double fEBeam; extern double fPBeam; extern double fScatElec_Theta_I; extern double fScatElec_Theta_F; -extern double fPion_Theta_I; +extern double fPion_Theta_I; // SJDK 19/12/22 - These should be removed in future, specific to pion reaction cases. Should be generic MesonX extern double fPion_Theta_F; +extern double fMesonX_Theta_I; +extern double fMesonX_Theta_F; extern double fScatElec_E_Hi; extern double fScatElec_E_Lo; extern double fPSF; diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc new file mode 100644 index 0000000..1ae0d96 --- /dev/null +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -0,0 +1,1054 @@ +#include "reaction_routine.h" +#include "eic.h" + +using namespace std; + +DEMP_Reaction::DEMP_Reaction() { + + cout << "Program Start" << endl; + +} + +/*--------------------------------------------------*/ +/// DEMP_Reaction + +DEMP_Reaction::DEMP_Reaction(TString particle_str, TString hadron_str) { + + rParticle = particle_str; + rHadron = hadron_str; + +} + +DEMP_Reaction::~DEMP_Reaction() { + + DEMPOut.close(); + DEMPDetails.close(); + +} + +void DEMP_Reaction::process_reaction() { + + Init(); + + if (gOutputType == "Pythia6"){ + DEMPReact_Pythia6_Out_Init(); + } + else if (gOutputType == "HEPMC3"){ + DEMPReact_HEPMC3_Out_Init(); + } + + for( long long int i = 0; i < rNEvents; i++ ) { + + rNEvent_itt = i; + fNGenerated ++; + + Progress_Report(); // This is happens at each 10% of the total event is processed + Processing_Event(); + } + + Detail_Output(); + +} + +void DEMP_Reaction::Init() { + + pim* myPim; + + pd = dynamic_cast(myPim); + + rParticle_charge = ExtractCharge(rParticle); + + sTFile = Form("./LundFiles/eic_%s.txt", gfile_name.Data()); + sLFile= Form("./LundFiles/eic_input_%s.dat", gfile_name.Data()); + + DEMPOut.open( sLFile.c_str() ); + DEMPDetails.open( sTFile.c_str() ); + + qsq_ev = 0, t_ev = 0, w_neg_ev = 0, w_ev = 0; + rNEvents = fNEvents; + rNEvent_itt = 0; + + // 02/06/21 SJDK + // Set these values once the beam energies are read in + fPSF = ( fEBeam * ( fScatElec_E_Hi - fScatElec_E_Lo ) *( sin( fScatElec_Theta_F ) - sin( fScatElec_Theta_I ) ) * 2 * fPI *( sin( fMesonX_Theta_F ) - sin( fMesonX_Theta_I ) ) * 2 * fPI ); + fElectron_Kin_Col_GeV = fEBeam; + fElectron_Kin_Col = fElectron_Kin_Col_GeV * 1000.0; + + // cout << rNEvents << " " << fNEvents << endl; + + rFermiMomentum = pd->fermiMomentum(); + + // ---------------------------------------------------- + // Proton in collider (lab) frame + + r_lproton = GetProtonVector_lab(); + r_lprotong = GetProtonVector_lab() * fm; + + // ---------------------------------------------------- + // Electron in collider (lab) frame + + cout << "Fermi momentum: " << rFermiMomentum << endl; + + r_lelectron = GetElectronVector_lab(); + r_lelectrong = r_lelectron * fm; + + ///*--------------------------------------------------*/ + /// Getting the particle mass from the data base + + produced_X = ParticleEnum(rParticle); + fX_Mass = ParticleMass(produced_X)*1000; //MeV + fX_Mass_GeV = fX_Mass/1000; //GeV + + cout << rParticle << " " << produced_X << " " << fX_Mass_GeV << endl; + cout << rParticle_charge << endl; + + if (rHadron == "Neutron" ) { + rParticle_scat_hadron = "Neutron"; + recoil_hadron = Neutron; + f_Scat_hadron_Mass = fNeutron_Mass; + f_Scat_hadron_Mass_GeV = f_Scat_hadron_Mass/1000; + } + else if (rHadron == "Proton" ) { + rParticle_scat_hadron = "Proton"; + recoil_hadron = Proton; + f_Scat_hadron_Mass = fProton_Mass; + f_Scat_hadron_Mass_GeV = f_Scat_hadron_Mass/1000; + } + else if(rHadron == "Lambda"){ + rParticle_scat_hadron = "Lambda"; + recoil_hadron = Lambda; + f_Scat_hadron_Mass = fLambda_Mass; + f_Scat_hadron_Mass_GeV = f_Scat_hadron_Mass/1000; + cout<<"Particle = "<Uniform( cos( fScatElec_Theta_I ) , cos( fScatElec_Theta_F ) ) ); + fScatElec_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); + fScatElec_Energy_Col = fRandom->Uniform( fScatElec_E_Lo * fElectron_Energy_Col , fScatElec_E_Hi * fElectron_Energy_Col ); + + // ---------------------------------------------------- + // Produced Particle X in Collider frame + // ---------------------------------------------------- + + /// The generic produced particle in the exclusive reaction is labelled as X + fX_Theta_Col = acos( fRandom->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); + fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); + + // --------------------------------------------------------------------- + // Specify the energy and solid angle of scatterd electron in Collider (lab) frame + // --------------------------------------------------------------------- + + fScatElec_Mom_Col = sqrt( pow( fScatElec_Energy_Col,2) - pow( fElectron_Mass , 2) ); + fScatElec_MomZ_Col = ( fScatElec_Mom_Col * cos(fScatElec_Theta_Col) ); + fScatElec_MomX_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * cos(fScatElec_Phi_Col) ); + fScatElec_MomY_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * sin(fScatElec_Phi_Col) ); + + r_lscatelec.SetPxPyPzE( fScatElec_MomX_Col, fScatElec_MomY_Col, fScatElec_MomZ_Col, fScatElec_Energy_Col); + + r_lscatelecg = r_lscatelec * fm; + + // ---------------------------------------------------- + // Photon in collider (lab) frame and Qsq + // ---------------------------------------------------- + + r_lphoton = r_lelectron - r_lscatelec; + r_lphotong = r_lelectrong - r_lscatelecg; + + fQsq_GeV = -1.* r_lphotong.Mag2(); + + if ( fQsq_GeV < 3.0 ) { + qsq_ev++; + return; + } + + // ---------------------------------------------------- + // W square, Invariant Mass (P_g + P_p)^2 + // ---------------------------------------------------- + + TLorentzVector lwg; + lwg = r_lprotong + r_lphotong; + fW_GeV = lwg.Mag(); + fWSq_GeV = lwg.Mag2(); + + if ( fWSq_GeV < 0 ) { + w_neg_ev++; + return; + } + + // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum + // --------------------------------------------------------- + // Pion momentum in collider frame, analytic solution starts + // --------------------------------------------------------- + + double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); + double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); + double fupz = cos( fX_Theta_Col ); + + double fuqx = sin( r_lphoton.Theta() ) * cos( r_lphoton.Phi() ); + double fuqy = sin( r_lphoton.Theta() ) * sin( r_lphoton.Phi() ); + double fuqz = cos( r_lphoton.Theta() ); + + double fa = -(r_lphoton.Vect()).Mag() * ( fupx * fuqx + fupy * fuqy + fupz * fuqz ); + double fb = pow ( (r_lphoton.Vect()).Mag() , 2 ); + double fc = r_lphoton.E() + fProton_Mass; + + fa = ( fa - std::abs( (r_lproton.Vect()).Mag() ) * ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fupx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fupy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fupz ) ) ); + + double factor = ( pow( (r_lproton.Vect()).Mag() , 2 ) + 2.0 * (r_lphoton.Vect()).Mag() * (r_lproton.Vect()).Mag() * + ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fuqx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fuqy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fuqz ) ) ); + + fb = fb + factor; + fc = r_lphoton.E() + r_lproton.E(); + + double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; + + double fQA = 4.0 * ( fa * fa - fc * fc ); + double fQB = 4.0 * fc * ft; + + double fQC = -4.0 * fa * fa * fX_Mass * fX_Mass - ft * ft; + + fradical = fQB * fQB - 4.0 * fQA * fQC; + + fepi1 = ( -fQB - sqrt( fradical ) ) / ( 2.0 * fQA ); + fepi2 = ( -fQB + sqrt( fradical ) ) / ( 2.0 * fQA ); + + // --------------------------------------------------------- + // Particle X momentum in collider frame, analytic solution ends + // --------------------------------------------------------- + + r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), + ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), + ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), + fepi1 ); + + r_lX_g = r_lX * fm; + + // ---------------------------------------------------- + // Scattered proton collider (lab) frame + // ---------------------------------------------------- + + r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), + ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), + ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), + sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + + pow( f_Scat_hadron_Mass ,2 ) ) ); + + r_l_scat_hadron_g = r_l_scat_hadron * fm; + + // ---------------------------------------------------------------------------------------------- + // Calculate w = (proton + photon)^2 + // ---------------------------------------------------------------------------------------------- + + if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { + w_ev++; + return; + } + + r_lw = r_lproton + r_lphoton; + fW = r_lw.Mag(); + + // ---------------------------------------------------------------------------------------------- + // Calculate w prime w' = (proton + photon - pion)^2 + // ---------------------------------------------------------------------------------------------- + + lwp = r_lprotong + r_lphotong - r_lX_g; + fW_Prime_GeV = lwp.Mag(); + + fsini = r_lelectron + r_lproton; + fsfin = r_lscatelec + r_lX + r_l_scat_hadron; + + fsinig = fsini * fm; + fsfing = fsfin * fm; + // SJDK 15/06/21 - Mandlestam S conservation check - doesn't actually seem to be utilised? + fMandSConserve = std::abs( fsinig.Mag() - fsfing.Mag() ); + + // SJDK 15/06/21 - Added integer counters for conservation law check and for NaN check + if (r_lX.E() != r_lX.E()){ // SJDK 15/06/21 - If the energy of the produced meson is not a number, return and add to counter + fNaN++; + return; + } + kSConserve = false; + if( std::abs( fsinig.Mag() - fsfing.Mag() ) < fDiff ) { + kSConserve = true; + } + + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 0.5) != 1 ){ + fConserve++; + return; + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // Start // + // Transformation of e', pi- and recoil proton to target's rest frame without energy loss // + //////////////////////////////////////////////////////////////////////////////////////////// + + lproton_rf = r_lproton; + lproton_rf.Boost(-beta_col_rf); + lproton_rfg = lproton_rf * fm; + + lelectron_rf = r_lelectron; + lelectron_rf.Boost(-beta_col_rf); + lelectron_rfg = lelectron_rf * fm; + + lscatelec_rf = r_lscatelec; + lscatelec_rf.Boost(-beta_col_rf); + lscatelec_rfg = lscatelec_rf * fm; + + lphoton_rf = r_lphoton; + lphoton_rf.Boost(-beta_col_rf); + lphoton_rfg = lphoton_rf * fm; + + lX_rf = r_lX; + lX_rf.Boost(-beta_col_rf); + lX_rfg = lX_rf * fm; + + l_scat_hadron_rf = r_l_scat_hadron; + l_scat_hadron_rf.Boost(-beta_col_rf); + l_scat_hadron_rf_g = l_scat_hadron_rf * fm; + + //////////////////////////////////////////////////////////////////////////////////////////// + // End // + // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // + //////////////////////////////////////////////////////////////////////////////////////////// + + + // ----------------------------------------------------------------------------------------- + // Calculate -t + // ----------------------------------------------------------------------------------------- + + fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); + fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; + fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_hadron_Mass , 2) ) / ( 2.0 * fW); + fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); + fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; + fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; + + // this equation is valid for parallel kinematics only! + fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_lX.Vect()).Mag()),2) - pow((r_lphoton.E() - r_lX.E()),2)); + fT_Para_GeV = fT_Para/1000000.0; + + lt = r_lphoton - r_lX; + ltg = lt * fm; + + fT = -1.*lt.Mag2(); + fT_GeV = -1.*ltg.Mag2(); + + if ( gKinematics_type == 1 && fT_GeV > 0.5 ) { + t_ev++; + return; + } + + if ( gKinematics_type == 2 && fT_GeV > 1.3 ) { + t_ev++; + return; + } + + fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); + fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); + fz = r_lX.E()/r_lphoton.E(); + + // ------------------------------------------------------------------------------------------------------- + // Calculation of Phi ( azimuthal angle of pion momentum w.r.t lepton plane in target's rest frame) + // Calculation of PhiS ( azimuthal angle of target polarization w.r.t lepton plane in target's rest frame) + // ------------------------------------------------------------------------------------------------------- + + v3Photon.SetX( lphoton_rfg.X() ); + v3Photon.SetY( lphoton_rfg.Y() ); + v3Photon.SetZ( lphoton_rfg.Z() ); + + v3Electron.SetX( lelectron_rfg.X() ); + v3Electron.SetY( lelectron_rfg.Y() ); + v3Electron.SetZ( lelectron_rfg.Z() ); + + v3X.SetX( lX_rfg.X() ) ; + v3X.SetY( lX_rfg.Y() ) ; + v3X.SetZ( lX_rfg.Z() ); + + v3S.SetX( -1 ); + v3S.SetY( 0 ); + v3S.SetZ( 0 ); + + v3PhotonUnit = v3Photon.Unit(); + v3QxL = v3Photon.Cross(v3Electron); + v3QxP = v3Photon.Cross(v3X); + v3QxS = v3Photon.Cross(v3S); + v3LxP = v3Electron.Cross(v3X); + v3LxS = v3Electron.Cross(v3S); + v3PxL = v3X.Cross(v3Electron); + v3QUnitxL = v3PhotonUnit.Cross(v3Electron); + v3QUnitxP = v3PhotonUnit.Cross(v3X); + v3QUnitxS = v3PhotonUnit.Cross(v3S); + + /*--------------------------------------------------*/ + // Get the Phi scattering angle with respect to the electron scattering plane + fPhi = Get_Phi_X_LeptonPlane_RF (); + + /*--------------------------------------------------*/ + // Get the Phi scattering angle with respect to the electron scattering plane + fPhiS = Get_Phi_TargPol_LeptonPlane_RF(); + + fTheta_X_Photon_RF = fRAD2DEG * acos( ( v3Photon.Dot( v3X ) ) / ( v3Photon.Mag() * v3X.Mag() ) ); + if ( fTheta_X_Photon_RF < 0 ) { fTheta_X_Photon_RF = 180.0 + fTheta_X_Photon_RF; } + + // ----------------------------------------------------------------------------------- + // If we have fermi momentum then epsilon should be in rest frame + // The theta angle of scattered angle used in expression of epsilon is the angle + // with respect to direction of incoming electron in the rest frame of target hadron + // epsilon=1./(1.+ 2.*(pgam_restg**2)/q2g * *(tand(thscat_rest/2.))**2) + // ----------------------------------------------------------------------------------- + + double fTheta_EEp = (lelectron_rf.Vect()).Angle(lscatelec_rf.Vect()); + + fEpsilon = 1.0 / ( 1.0 + 2.0 * ( pow( (lphoton_rfg.Vect()).Mag(),2)/fQsq_GeV ) * pow( tan( fTheta_EEp / 2 ) , 2 ) ); + + // ---------------------------------------------------- + // Virtual Photon flux factor in units of 1/(GeV*Sr) + // ---------------------------------------------------- + fFlux_Factor_Col = (fAlpha/(2.0*pow(fPi,2))) * (r_lscatelecg.E() / r_lelectrong.E()) * + ( pow(fW_GeV,2) - pow(fProton_Mass_GeV,2) ) / (2.0*fProton_Mass_GeV*fQsq_GeV*(1.0 - fEpsilon)); + + fFlux_Factor_RF = ( fAlpha / ( 2.0 * pow( fPi , 2 ) ) ) * ( lscatelec_rfg.E() / lelectron_rfg.E() ) * + ( pow( fW_GeV , 2 ) - pow( fProton_Mass_GeV , 2 ) ) / + ( 2.0 * fProton_Mass_GeV * fQsq_GeV * ( 1.0 - fEpsilon ) ); + + // ---------------------------------------------------- + // Jacobian dt/dcos(theta*)dphi in units of GeV2/sr + // ---------------------------------------------------- + fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); // Eqn 22 in paper + + fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; // Eqn 21 in paper + + // ---------------------------------------------------- + // Jacobian dOmega* / dOmega dimensionless + // ---------------------------------------------------- + fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / + ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - + ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); // Differs from next line in photon vect -> lphoton_rf vs r_lphoton + + fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / // This one is actually used subsequently, so this must be Eqn 20 + ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - + ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); + + + // cout << lX_rf.Vect().Mag() << " " << << << << << << << << endl; + // cout << fJacobian_CM_RF << " " << fJacobian_CM_Col << endl; + + // ----------------------------------------------------------------------------------------------------------- + // CKY sigma L and T starts + // ----------------------------------------------------------------------------------------------------------- + // r_fSig_T = 1; + // r_fSig_L = 1; + // ------------------------------------------------------------------------------------------- + + r_fSig = Get_Total_Cross_Section(); + + // ----------------------------------------------------------------------------------------------------------- + // CKY sigma L and T ends + // ----------------------------------------------------------------------------------------------------------- + + fSigma_Col = r_fSig * fFlux_Factor_Col * fA * fJacobian_CM_Col; + + if ( ( fSigma_Col <= 0 ) || std::isnan( fSigma_Col ) ) { + fNSigmaNeg ++; + return; + } + + // ----------------------------------------------------------------------------------------------------------- + // Lab cross section Phase Space Conversion Luminosity Total events tried + // Hz = ub / ( sr^2 * GeV ) * GeV * sr^2 * ( cm^2 / ub ) * ( # / ( cm^2 * sec ) ) / ( # ) + + // SJDK 11/05/21 - This is the previous non unit weight + // SJDK 24/06/21 - Explicitly taking the absolute value of the weigth such that the value is positive! + fEventWeight = abs(fSigma_Col * fPSF * fuBcm2 * fLumi / fNEvents); // in Hz + // SJDK 21/06/21 - Commenting out "unit weight" calculation for now, reverting to old version + // SJDK 11/05/21 - New weight calculation, division by ceiling weight value to attempt to get a "unit" value + //fEventWeight = abs(fSigma_Col * fPSF * fuBcm2 * fLumi )/fEventWeightCeil; + // if ( (fEventWeight > 1) || (fEventWeight <= 0) ){ + // fNWeightUnphys ++; + // return; + // } + // SJDK 21/06/21 - Reversed sign of condition here, actually want to reject those with a value less than the random number + // fEventWeightRn = fRandom->Uniform( 0, 1.0); + // if ( fEventWeight < fEventWeightRn ){ + // fNWeightReject ++; + // return; + // } + + fNRecorded++; + fLundRecorded++; + fRatio = fNRecorded / fNGenerated; + + if (gOutputType == "Pythia6"){ + DEMPReact_Pythia6_Output(); + } + else if (gOutputType == "LUND"){ + Lund_Output(); + } + else if (gOutputType == "HEPMC3"){ + DEMPReact_HEPMC3_Output(); + } +} + +void DEMP_Reaction::Progress_Report() { + + dFractTime = time(0); + + if ( rNEvent_itt % ( rNEvents / 10 ) == 0 ) { + cout << "Event: " << setw(8) << rNEvent_itt + << " % of events " << setw(4) << ((1.0*rNEvent_itt)/(1.0*rNEvents))*100.0 + << " Day: " << dFractTime.GetDay() + << " Time: " << dFractTime.GetHour() + << ":" << dFractTime.GetMinute() + << ":" << dFractTime.GetSecond() + << endl; + } +} + +TLorentzVector DEMP_Reaction::GetProtonVector_lab() { + + // Crossing angle + // fProton_Theta_Col = 0.050; + // fProton_Theta_Col = 0.025; + // SJDK - 12/01/22 + // Set crossing angle to 0 for fun4all, also required for ATHENA simulations + fProton_Theta_Col = 0.0; + + ///*--------------------------------------------------*/ + /// The + // fProton_Phi_Col = fPi; + fProton_Phi_Col = fProton_incidence_phi; + + fProton_Mom_Col = fPBeam * 1e3; + fVertex_X = 0.; + fVertex_Y = 0.; + fVertex_Z = 0.; + + TLorentzVector lproton( fProton_Mom_Col * sin(fProton_Theta_Col) * cos(fProton_Phi_Col), + fProton_Mom_Col * sin(fProton_Theta_Col) * sin(fProton_Phi_Col), + fProton_Mom_Col * cos(fProton_Theta_Col), + sqrt( pow( fProton_Mom_Col , 2 ) + pow( fProton_Mass , 2 ) ) ); + + return lproton; + +} + +//*--------------------------------------------------*/ +// Proton in collider (lab) frame +// ---------------------------------------------------- + +void DEMP_Reaction::Consider_Proton_Fermi_Momentum() { + + fProton_Mom_Col = fProton_Mom_Col + rFermiMomentum; + fProton_Theta_Col = acos( fRandom->Uniform( cos(0.0) , cos(fPi) ) ); + fProton_Phi_Col = fRandom->Uniform( 0 , 360 ); + + double px, py, pz, e; + + px = fProton_Mom_Col * sin(fProton_Theta_Col) * cos(fProton_Phi_Col); + py = fProton_Mom_Col * sin(fProton_Theta_Col) * sin(fProton_Phi_Col); + pz = fProton_Mom_Col * cos(fProton_Theta_Col); + e = sqrt( pow( fProton_Mom_Col , 2 ) + pow( fProton_Mass , 2 ) ); + + r_lproton.SetPxPyPzE(px,py,pz,e); + + r_lprotong = r_lproton*fm; + +} + +// ---------------------------------------------------- +// Electron in collider (lab) frame +// ---------------------------------------------------- + +TLorentzVector DEMP_Reaction::GetElectronVector_lab() { + + fElectron_Energy_Col = fElectron_Kin_Col; + fElectron_Mom_Col = sqrt( pow(fElectron_Energy_Col , 2) - pow(fElectron_Mass , 2) ); + fElectron_Theta_Col = fPi; + fElectron_Phi_Col = 0.0; + fElectron_MomZ_Col = fElectron_Mom_Col * cos(fElectron_Theta_Col); + fElectron_MomX_Col = fElectron_Mom_Col * sin(fElectron_Theta_Col) * cos(fElectron_Phi_Col); + fElectron_MomY_Col = fElectron_Mom_Col * sin(fElectron_Theta_Col) * sin(fElectron_Phi_Col); + + cout << "Define: " << fElectron_MomZ_Col << " "<< fElectron_Mom_Col << " " << cos(fElectron_Theta_Col) << endl; + + TLorentzVector lelectron( fElectron_MomX_Col, fElectron_MomY_Col, fElectron_MomZ_Col, fElectron_Energy_Col); + + return lelectron; + +} + +Double_t DEMP_Reaction::Get_Phi_X_LeptonPlane_RF () { + + fCos_Phi_X_LeptonPlane_RF = ( ( v3QUnitxL.Dot( v3QUnitxP ) ) / ( v3QUnitxL.Mag() * v3QUnitxP.Mag() ) ); // hep-ph/0410050v2 + fSin_Phi_X_LeptonPlane_RF = ( ( v3LxP.Dot( v3PhotonUnit ) ) / ( v3QUnitxL.Mag() * v3QUnitxP.Mag() ) ); // hep-ph/0410050v2 + if ( fSin_Phi_X_LeptonPlane_RF >= 0 ) + fPhi_X_LeptonPlane_RF = fRAD2DEG * acos( ( v3QUnitxL.Dot( v3QUnitxP ) ) / ( v3QUnitxL.Mag() * v3QUnitxP.Mag() ) ); + if ( fSin_Phi_X_LeptonPlane_RF < 0 ) + fPhi_X_LeptonPlane_RF = 360.0 - std::abs( fRAD2DEG * acos( ( v3QUnitxL.Dot( v3QUnitxP ) ) / ( v3QUnitxL.Mag() * v3QUnitxP.Mag() ) ) ); + + return fPhi_X_LeptonPlane_RF; + +} + +Double_t DEMP_Reaction::Get_Phi_TargPol_LeptonPlane_RF () { + + fCos_Phi_TargPol_LeptonPlane_RF = ( ( v3QUnitxL.Dot( v3QUnitxS ) ) / ( v3QUnitxL.Mag() * v3QUnitxS.Mag() ) ); // hep-ph/0410050v2 + fSin_Phi_TargPol_LeptonPlane_RF = ( ( v3LxS.Dot( v3PhotonUnit ) ) / ( v3QUnitxL.Mag() * v3QUnitxS.Mag() ) ); // hep-ph/0410050v2 + if ( fSin_Phi_TargPol_LeptonPlane_RF >= 0 ) + fPhi_TargPol_LeptonPlane_RF = fRAD2DEG * acos( ( v3QUnitxL.Dot( v3QUnitxS ) ) / ( v3QUnitxL.Mag() * v3QUnitxS.Mag() ) ); + if ( fSin_Phi_TargPol_LeptonPlane_RF < 0 ) + fPhi_TargPol_LeptonPlane_RF = 360.0 - std::abs( fRAD2DEG * acos( ( v3QUnitxL.Dot( v3QUnitxS ) ) / ( v3QUnitxL.Mag() * v3QUnitxS.Mag() ) ) ); + + return fPhi_TargPol_LeptonPlane_RF; + +} + +Double_t DEMP_Reaction::Get_Total_Cross_Section() { + + Double_t total_sig; + + Particle_t p = ParticleEnum(rParticle); + + switch (p) { + + case Pi0: total_sig = GetPi0_CrossSection(); + case PiPlus: total_sig = GetPiPlus_CrossSection(); + } + + return total_sig; + +} + +Double_t DEMP_Reaction::GetPi0_CrossSection() { + + double_t sig_total; + return sig_total; + +} + +/*--------------------------------------------------*/ +/// Charged Pi+ moduel: +/// Author: Z. Ahmed +/// Date: 2017 + +Double_t DEMP_Reaction::GetPiPlus_CrossSection(){ + + double_t sig_total; + + // -------------------------------------------------------------------------------------------------- + // CKY sigma L and T starts + // -------------------------------------------------------------------------------------------------- + double lpar0 = 0., lpar1 = 0., lpar2 = 0., lpar3 = 0., lpar4 = 0., lpar5 = 0., lpar6 = 0.; + double tpar0 = 0., tpar1 = 0., tpar2 = 0., tpar3 = 0., tpar4 = 0.; + + + lpar0 = 0.; lpar1 = 0.; lpar2 = 0.; lpar3 = 0.; lpar4 = 0.; lpar5 = 0.; lpar6 = 0.; + tpar0 = 0.; tpar1 = 0.; tpar2 = 0.; tpar3 = 0.; tpar4 = 0.; + + fSig_L = 0; + fSig_T = 0; + + if ( ( fT_GeV > 0. ) && ( fT_GeV < 0.15 ) ) { + eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLonglandau = new TF1("sigmaL","landau", 0.0 , 0.15 ); + fitCKYLonglandau->FixParameter( 0 , lpar0 ); + fitCKYLonglandau->FixParameter( 1 , lpar1 ); + fitCKYLonglandau->FixParameter( 2 , lpar2 ); + fSig_L = fitCKYLonglandau->Eval(fT_GeV); + if ( lpar0 == 0 || lpar1 == 0 || lpar2 == 0 ) + fSig_L = 0; + fitCKYLonglandau = NULL; + delete fitCKYLonglandau; + } + else if ( ( fT_GeV > 0.15 ) && ( fT_GeV < 0.5 ) ) { + eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLongexpo1 = new TF1("sigmaL","expo", 0.15 , 0.5 ); + fitCKYLongexpo1->FixParameter( 0 , lpar3 ); + fitCKYLongexpo1->FixParameter( 1 , lpar4 ); + fSig_L = fitCKYLongexpo1->Eval(fT_GeV); + if ( lpar3 == 0 || lpar4 == 0 ) + fSig_L = 0; + fitCKYLongexpo1 = NULL; + delete fitCKYLongexpo1; + } + else if ( ( fT_GeV > 0.5 ) && ( fT_GeV < 1.3 ) ) { + eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLongexpo2 = new TF1("sigmaL","expo", 0.5 , 1.3 ); + fitCKYLongexpo2->FixParameter( 0 , lpar5 ); + fitCKYLongexpo2->FixParameter( 1 , lpar6 ); + fSig_L = fitCKYLongexpo2->Eval(fT_GeV); + if ( lpar5 == 0 || lpar6 == 0 ) + fSig_L = 0; + fitCKYLongexpo2 = NULL; + delete fitCKYLongexpo2; + } + else { + fSig_L = 0; + } + + // ------------------------------------------------------------------------------------------- + // SJDK - 02/06/22 - The validity range here was inconsistent, this only went from 0.0 to 0.15, leaving a gap between 0.15 to 0.2 + // I changed the range to remove this gap. + if ( ( fT_GeV > 0.0 ) && ( fT_GeV < 0.2 ) ) { + eicSigmaT( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); + TF1 *fitCKYTranspol2 = new TF1("sigmaL","pol2", 0.0 , 0.2 ); + fitCKYTranspol2->FixParameter( 0 , tpar0 ); + fitCKYTranspol2->FixParameter( 1 , tpar1 ); + fitCKYTranspol2->FixParameter( 2 , tpar2 ); + fSig_T = fitCKYTranspol2->Eval(fT_GeV); + if ( tpar0 == 0 || tpar1 == 0 || tpar2 == 0 ) + fSig_T = 0; + fitCKYTranspol2 = NULL; + delete fitCKYTranspol2; + } + else if ( ( fT_GeV > 0.2 ) && ( fT_GeV < 1.3 ) ) { + eicSigmaT( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); + TF1 *fitCKYTransexpo = new TF1("sigmaL","expo", 0.2 , 1.3 ); + fitCKYTransexpo->FixParameter( 0 , tpar3 ); + fitCKYTransexpo->FixParameter( 1 , tpar4 ); + fSig_T = fitCKYTransexpo->Eval(fT_GeV); + if ( tpar3 == 0 || tpar4 == 0 ) + fSig_T = 0; + fitCKYTransexpo = NULL; + delete fitCKYTransexpo; + } + + // ------------------------------------------------------------------------------------------- + + fSig_VR = fSig_T + fEpsilon * fSig_L; + + sig_total = fSig_VR; + + return sig_total; +} + +/*--------------------------------------------------*/ +/// Output generator detail + +void DEMP_Reaction::Detail_Output() { + + DEMPDetails << "Total events tried " << setw(20) << fNGenerated << endl; + DEMPDetails << "Total events recorded " << setw(20) << fNRecorded << endl; + // 09/02/22 - Commented out, not used anymore + //DEMPDetails << "Max weight value " << setw(20) << fEventWeightCeil << endl; + DEMPDetails << "Number of events with w more than 10.6 " << setw(20) << w_ev << endl; + DEMPDetails << "Number of events with wsq negative " << setw(20) << w_neg_ev << endl; + DEMPDetails << "Number of events with qsq less than 3 " << setw(20) << qsq_ev << endl; + DEMPDetails << "Number of events with Meson (X) energy NaN " << setw(20) << fNaN << endl; + DEMPDetails << "Number of events failing conservation law check " << setw(20) << fConserve << endl; + DEMPDetails << "Total events passing conservation laws " << setw(20) << conserve << endl; + DEMPDetails << "Total events failed energy conservation " << setw(20) << ene << endl; + DEMPDetails << "Total events failed momentum conserveation " << setw(20) << mom << endl; + DEMPDetails << "Number of events with -t more than threshold " << setw(20) << t_ev << endl; + // SJDK 21/06/21 - Commenting out, reverting to old weight determination + //DEMPDetails << "Number of events with unit weight outside of 0 to 1 " << setw(20) << fNWeightUnphys << endl; + //DEMPDetails << "Number of events with unit weight less than random number " << setw(20) << fNWeightReject << endl; + DEMPDetails << "Number of events with w less than threshold " << setw(20) << fWSqNeg << endl; + DEMPDetails << "Number of events with mom not conserve " << setw(20) << fNMomConserve << endl; + DEMPDetails << "Number of events with Sigma negative " << setw(20) << fNSigmaNeg << endl; + DEMPDetails << "Number of lund events " << setw(20) << fLundRecorded << endl; + + DEMPDetails << "Seed used for the Random Number Generator " << setw(20) << fSeed << endl; + +} + +////*-------------------------------------------------- +/// Functions for different output formats follow + +void DEMP_Reaction::Lund_Output() { + + DEMPOut << "3" + << " \t " << fPhi // var 1 + << " \t " << fPhiS // var 2 + << " \t " << fx // var 3 + << " \t " << "1" + << " \t " << fQsq_GeV // var 4 + << " \t " << fT_GeV // var 5 + << " \t " << fW_GeV // var 6 + << " \t " << fEpsilon // var 7 + << " \t " << fEventWeight // var 8 + << endl; + + // Produced Particle X + DEMPOut << setw(10) << "1" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(produced_X) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lX_g.X() + << setw(16) << r_lX_g.Y() + << setw(16) << r_lX_g.Z() + << setw(16) << r_lX_g.E() + << setw(16) << fX_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Scattered electron + DEMPOut << setw(10) << "2" + << setw(10) << "-1" + << setw(10) << "1" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lscatelecg.X() + << setw(16) << r_lscatelecg.Y() + << setw(16) << r_lscatelecg.Z() + << setw(16) << r_lscatelecg.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Recoiled neutron + DEMPOut << setw(10) << "3" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(recoil_hadron) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_l_scat_hadron_g.X() + << setw(16) << r_l_scat_hadron_g.Y() + << setw(16) << r_l_scat_hadron_g.Z() + << setw(16) << r_l_scat_hadron_g.E() + << setw(16) << f_Scat_hadron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; +} + +void DEMP_Reaction::DEMPReact_Pythia6_Out_Init() { + + print_itt = 0; + + DEMPOut << "DEMP Event FILE" << endl; + DEMPOut << "============================================" << endl; + DEMPOut << "I, ievent, nParticles, Weight" << endl; + DEMPOut << "============================================" << endl; + DEMPOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; + DEMPOut << "============================================" << endl; + +} + +void DEMP_Reaction::DEMPReact_Pythia6_Output() { + + DEMPOut << "0" << " \t\t\t " << print_itt << " \t\t\t " << "1" << " \t\t\t " << fEventWeight << endl; // var 1 + + print_itt++; + + DEMPOut << "============================================" << endl; + + ///*--------------------------------------------------*/ + // Initial State + + DEMPOut << "1" + << setw(6) << "21" + << setw(6) << "11" + << setw(6) << "0" + << setw(6) << "3" + << setw(6) << "4" + + << setw(14) << r_lelectrong.X() + << setw(14) << r_lelectrong.Y() + << setw(14) << r_lelectrong.Z() + << setw(14) << r_lelectrong.E() + << setw(14) << fElectron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + DEMPOut << "2" + << setw(6) << "21" + << setw(6) << "2212" + << setw(6) << "0" + << setw(6) << "5" + << setw(6) << "6" + + << setw(14) << r_lprotong.X() + << setw(14) << r_lprotong.Y() + << setw(14) << r_lprotong.Z() + << setw(14) << r_lprotong.E() + << setw(14) << fProton_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + DEMPOut << "3" + << setw(6) << "21" + << setw(6) << "22" + << setw(6) << "1" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lphotong.X() + << setw(14) << r_lphotong.Y() + << setw(14) << r_lphotong.Z() + << setw(14) << r_lphotong.E() + << setw(14) << r_lphotong.M() + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + + ///*--------------------------------------------------*/ + // Final State + + // Scattered electron + DEMPOut << "4" + << setw(6) << "1" + << setw(6) << "11" + << setw(6) << "1" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lscatelecg.X() + << setw(14) << r_lscatelecg.Y() + << setw(14) << r_lscatelecg.Z() + << setw(14) << r_lscatelecg.E() + << setw(14) << fElectron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + // Recoiled hadron + DEMPOut << "5" + << setw(6) << "1" + << setw(6) << PDGtype(recoil_hadron) + << setw(6) << "2" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_l_scat_hadron_g.X() + << setw(14) << r_l_scat_hadron_g.Y() + << setw(14) << r_l_scat_hadron_g.Z() + << setw(14) << r_l_scat_hadron_g.E() + << setw(14) << f_Scat_hadron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + // Produced Particle X + DEMPOut << "6" + << setw(6) << "1" + << setw(6) << PDGtype(produced_X) + << setw(6) << "2" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lX_g.X() + << setw(14) << r_lX_g.Y() + << setw(14) << r_lX_g.Z() + << setw(14) << r_lX_g.E() + << setw(14) << fX_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + DEMPOut << "=============== Event finished ===============" << endl; + +} + +/*--------------------------------------------------*/ + +void DEMP_Reaction::DEMPReact_HEPMC3_Out_Init() { + + print_itt = 0; + DEMPOut << "HepMC::Version 3.02.02" << endl; + DEMPOut << "HepMC::Asciiv3-START_EVENT_LISTING" << endl; + +} + +/*--------------------------------------------------*/ + +void DEMP_Reaction::DEMPReact_HEPMC3_Output() { + + // HEPMC3 output for Athena/EPIC simulations + + // First line - E - Event# - #Vertices - #Particles + DEMPOut << "E" << " " << print_itt << " " << "1" << " " << 5 << endl; + print_itt++; + // Second line, Units - U - ENERGY UNIT - DISTANCE UNIT + DEMPOut << "U" << " " << "GEV" << " " << "MM" << endl; + // Third line, optional attributes, the weight + DEMPOut << "A" << " " << "0" << " " << "weight" << " " << fEventWeight << endl; + // Beam particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (4, incoming beam particle) + DEMPOut << "P" << " " << "1" << " " << "0" << " " << "11" << " " << r_lelectrong.X() << " " << r_lelectrong.Y() << " " << r_lelectrong.Z() << " " << r_lelectrong.E() << " " << fElectron_Mass_GeV << " " << "4" << endl; + DEMPOut << "P" << " " << "2" << " " << "0" << " " << "2212" << " " << r_lprotong.X() << " " << r_lprotong.Y() << " " << r_lprotong.Z() << " " << r_lprotong.E() << " " << fProton_Mass_GeV << " " << "4" << endl; + // Vertex line - V - 1 - 0 - [1,2] + DEMPOut << "V" << " " << "-1" << " " << "0" << " " << "[1,2]" << endl; + // Output particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (1, undecayed physical particle) + // Scattered electron + DEMPOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << fElectron_Mass_GeV << " " << "1" << endl; + // Produced meson + DEMPOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_lX_g.X() << " " << r_lX_g.Y() << " " << r_lX_g.Z() << " " << r_lX_g.E() << " " << fX_Mass_GeV << " " << "1" << endl; + // Recoil hadron + DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << r_l_scat_hadron_g.X() << " " << r_l_scat_hadron_g.Y() << " " << r_l_scat_hadron_g.Z() << " " << r_l_scat_hadron_g.E() << " " << f_Scat_hadron_Mass_GeV << " " << "1" << endl; + +} diff --git a/src/eic_evgen/reaction_routine.cc b/src/eic_evgen/reaction_routine.cc index c598b41..88500b8 100644 --- a/src/eic_evgen/reaction_routine.cc +++ b/src/eic_evgen/reaction_routine.cc @@ -78,12 +78,13 @@ Reaction::~Reaction() { /// void Reaction::process_reaction() { - if (rParticle == "Pi+") { - PiPlus_Production* rr1 = new PiPlus_Production(rParticle); - rr1->process_reaction(); - delete rr1; - } - else if (rParticle == "Pi0") { + // if (rParticle == "Pi+") { + // PiPlus_Production* rr1 = new PiPlus_Production(rParticle); + // rr1->process_reaction(); + // delete rr1; + // } + //else if (rParticle == "Pi0") { + if (rParticle == "Pi0") { // Pi0_Production* r1 = new Pi0_Production("Eta"); Pi0_Production* rr1 = new Pi0_Production(rParticle); rr1->process_reaction(); @@ -95,5 +96,11 @@ void Reaction::process_reaction() { rr1->process_reaction(); delete rr1; } - // SJDK - 08/02/22 - Deleted large block of commented code that was below, was only there as reference? + // SJDK - 19/12/22 - New generic DEMP reaction class, the intention is that this should be able to handle any case + else if (rParticle == "Pi+") { + DEMP_Reaction* rr1 = new DEMP_Reaction(rParticle, rHadron); + rr1->process_reaction(); + delete rr1; + } + } diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index 615b1af..7c07fac 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -30,6 +30,7 @@ class Reaction{ protected: TStopwatch tTime; + TString rParticle; TString rHadron; @@ -415,4 +416,168 @@ class KPlus_Production { }; +class DEMP_Reaction { + + public: + DEMP_Reaction(); + DEMP_Reaction(TString, TString); + ~DEMP_Reaction(); + + void process_reaction(); + TString GetParticle() {return rParticle;}; + TString GetHadron() {return rHadron;}; + + protected: + + void Init(); + void Processing_Event(); + void Progress_Report(); + void Detail_Output(); + void Lund_Output(); + void DEMPReact_Pythia6_Out_Init(); + void DEMPReact_Pythia6_Output(); + void DEMPReact_HEPMC3_Out_Init(); + void DEMPReact_HEPMC3_Output(); + + TRandom2* rRanBd; + + Particle_t recoil_hadron; + Particle_t produced_X; + + Double_t Get_Phi_X_LeptonPlane_RF(); + Double_t Get_Phi_TargPol_LeptonPlane_RF(); + + Double_t Get_Total_Cross_Section(); + + Double_t GetPi0_CrossSection(); + Double_t GetPiPlus_CrossSection(); + Double_t GetKPlus_CrossSection(); + + + /*--------------------------------------------------*/ + // Parameters + + TStopwatch tTime; + TString rParticle; + TString rParticle_charge; + TString rParticle_scat_hadron; + TString rHadron; + + std::string sTFile; /// Generator output files. For documentation and monitoring purposes + std::string sLFile; /// Lund input file into the EIC simulation + + std::ofstream DEMPOut; + std::ofstream DEMPDetails; + + long long int qsq_ev, t_ev, w_neg_ev, w_ev; + + long long int rNEvents; + long long int rNEvent_itt; + TDatime dFractTime; + + double rDEG2RAD; + + double fX_Theta_I, fX_Theta_F; + + TLorentzVector GetProtonVector_lab(); + TLorentzVector GetElectronVector_lab(); + + TLorentzVector r_lproton; // Proton in collider (lab) frame + TLorentzVector r_lprotong; + + TLorentzVector r_lelectron; // Electron in collider (lab) frame + TLorentzVector r_lelectrong; + + TVector3 beta_col_rf; // Boost vector from collider (lab) frame to protons rest frame (Fix target) + + void Consider_Proton_Fermi_Momentum(); + + Double_t rFermiMomentum; + + Double_t fX_Theta_Col, fX_Phi_Col; + + TLorentzVector r_lscatelec; + TLorentzVector r_lscatelecg; + + TLorentzVector r_lphoton; + TLorentzVector r_lphotong; + + TLorentzVector r_lX; + TLorentzVector r_lX_g; + + double fX_Mass; + double fX_Mass_GeV; + + double f_Scat_hadron_Mass; + double f_Scat_hadron_Mass_GeV; + + TLorentzVector r_l_scat_hadron; + TLorentzVector r_l_scat_hadron_g; + + TLorentzVector r_lw; + + TLorentzVector lwp; + + TLorentzVector fsini; + TLorentzVector fsfin; + TLorentzVector fsinig; + TLorentzVector fsfing; + + pim* pd; + + /////////////////////////////////////////// + //Transformation of e', pi- and recoil proton to target's rest frmae without energy loss + + TLorentzVector lproton_rf; + TLorentzVector lproton_rfg; + + TLorentzVector lelectron_rf; + TLorentzVector lelectron_rfg; + + TLorentzVector lscatelec_rf; + TLorentzVector lscatelec_rfg; + + TLorentzVector lphoton_rf; + TLorentzVector lphoton_rfg; + + TLorentzVector lX_rf; + TLorentzVector lX_rfg; + + TLorentzVector l_scat_hadron_rf; + TLorentzVector l_scat_hadron_rf_g; + + /////////////////////////////////////////// + /// Center of Mass parameters for particle X + + double fBeta_CM_RF, fGamma_CM_RF, fX_Energy_CM, fX_Mom_CM, fX_Energy_CM_GeV, fX_Mom_CM_GeV; + + TLorentzVector lt; + TLorentzVector ltg; + + /////////////////////////////////////////// + + TVector3 v3Photon; + TVector3 v3Electron; + TVector3 v3X; + TVector3 v3S; + TVector3 v3PhotonUnit; + TVector3 v3QxL; + TVector3 v3QxP; + TVector3 v3QxS; + TVector3 v3LxP; + TVector3 v3LxS; + TVector3 v3PxL; + TVector3 v3QUnitxL; + TVector3 v3QUnitxP; + TVector3 v3QUnitxS; + + double fCos_Phi_X_LeptonPlane_RF, fSin_Phi_X_LeptonPlane_RF, fTheta_X_Photon_RF, fPhi_X_LeptonPlane_RF; + Double_t r_fSig; + Double_t r_fSig_T; + Double_t r_fSig_L; + + unsigned long long int print_itt; + +}; + # endif diff --git a/src/main.cxx b/src/main.cxx index 0c72382..8ccb7a1 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -13,7 +13,6 @@ /// /// Comment: March 04, 2020: - #pragma clang diagnostic ignored "-Wdeprecated-declarations" #pragma GCC diagnostic ignored "-Wdeprecated-declarations" From 99f63601b8ba7ee268eab58b9f38a6453ddaf0e6 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Wed, 21 Dec 2022 09:51:03 -0600 Subject: [PATCH 04/35] Moved outdated routines to a new subfolder for now. Added in PiPlus cross section routine as a new class. --- CMakeLists.txt | 2 +- Config_EIC.json | 8 +- src/eic_evgen/PiPlus_sig.cc | 99 +++++ src/eic_evgen/PiPlus_sig.h | 6 + .../{tssa_sig_Para.cc => PiPlus_sig_Param.cc} | 20 +- src/eic_evgen/PiPlus_sig_Param.h | 8 + .../KPlus_prod.cc | 0 .../PiPlus_prod.cc | 0 .../{ => archived_routines}/legacy.h | 0 .../legacy_function.cc | 0 .../{ => archived_routines}/legacy_function.h | 0 src/eic_evgen/eic.cc | 19 +- src/eic_evgen/eic.h | 7 +- src/eic_evgen/eic_pim.cc | 18 +- src/eic_evgen/eic_pim.h | 4 +- .../process_routine/DEMP_Reaction.cc | 199 ++++----- src/eic_evgen/process_routine/Pi0_prod.cc | 259 ++++-------- src/eic_evgen/reaction_routine.cc | 14 +- src/eic_evgen/reaction_routine.h | 384 ++---------------- src/eic_evgen/tssa_sig_Para.h | 15 - src/main.cxx | 2 - 21 files changed, 352 insertions(+), 712 deletions(-) create mode 100644 src/eic_evgen/PiPlus_sig.cc create mode 100644 src/eic_evgen/PiPlus_sig.h rename src/eic_evgen/{tssa_sig_Para.cc => PiPlus_sig_Param.cc} (99%) create mode 100644 src/eic_evgen/PiPlus_sig_Param.h rename src/eic_evgen/{process_routine => archived_routines}/KPlus_prod.cc (100%) rename src/eic_evgen/{process_routine => archived_routines}/PiPlus_prod.cc (100%) rename src/eic_evgen/{ => archived_routines}/legacy.h (100%) rename src/eic_evgen/{ => archived_routines}/legacy_function.cc (100%) rename src/eic_evgen/{ => archived_routines}/legacy_function.h (100%) delete mode 100644 src/eic_evgen/tssa_sig_Para.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 5351cd8..a82fbfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ include_directories("src/eic_evgen") include_directories(SYSTEM ${ROOT_INCLUDE_DIRS}) #include_directories(include/json) -file(GLOB SOURCES "src/*" "src/eic_evgen/eic.cc" "src/eic_evgen/eic_pim.cc" "src/eic_evgen/tssa_sig_Para.cc" "src/eic_evgen/reaction_routine.cc" "src/eic_evgen/legacy_function.cc" "src/eic_evgen/legacy_function.cc" "src/eic_evgen/process_routine/*") +file(GLOB SOURCES "src/*" "src/eic_evgen/eic.cc" "src/eic_evgen/eic_pim.cc" "src/eic_evgen/PiPlus_sig_Param.cc" "src/eic_evgen/reaction_routine.cc" "src/eic_evgen/PiPlus_sig.cc" "src/eic_evgen/process_routine/*") # file(GLOB SOURCES "src/*.cpp") message("Root Include Dirs: " ${ROOT_INCLUDE_DIRS}) diff --git a/Config_EIC.json b/Config_EIC.json index 4087e3f..ac43aec 100644 --- a/Config_EIC.json +++ b/Config_EIC.json @@ -24,10 +24,16 @@ /// This section if for EIC simulation only "Kinematics_type" : 1, // Kinematics type (1->FF, 2->TSSA) "particle": "Pion+", // Choices: omega, pi+, pi0, K+ - "hadron": "", // Choices: Empty OR Lambda or Sigma0 - For K+ production only! + "hadron": "neutron", // Choices: Neutron, proton, Lambda or Sigma0 "ebeam": 5, // Electron beam energy in GeV "hbeam": 41, // Hadron beam energy in GeV //"hbeam_part":"proton", // Hadron beam particle, proton, deut or helium3, work in progress, will need to be added to shell script later on as an argument "det_location": "ip8", // choices: ip6 for STAR, ip8 for PHENIX "OutputType": "Pythia6", // choices: LUND (Docker), Pythia6 (ECCE Fun4All) or HEPMC3 (Athena) + "Ee_Low": 0.5, // The minimum scattered electron energy that will be generated as a fraction of the electron beam energy + "Ee_High": 2.5, // The maximum scattered electron energy that will be generated as a fraction of the electron beam energy + "e_Theta_Low": 60.0, // The minimum scattered electron angle (theta) that will be generated in degrees + "e_Theta_High": 175.0, // The maximum scattered electron angle (theta) that will be generated in degrees + "EjectileX_Theta_Low": 0.0, // The minimum ejectile angle (theta) that will be generated in degrees + "EjectileX_Theta_High": 50.0, // The maximum ejectile angle (theta) that will be generated in degrees } diff --git a/src/eic_evgen/PiPlus_sig.cc b/src/eic_evgen/PiPlus_sig.cc new file mode 100644 index 0000000..eef2c69 --- /dev/null +++ b/src/eic_evgen/PiPlus_sig.cc @@ -0,0 +1,99 @@ +// 21/12/22 - SJDK - The PiPlus cross section routine stripped out of the DEMP_Reaction.cc code in Process routine +// Inputs are -t, W, Qsq and epsilon (in GeV where appropriate) + +// Note, there isn't really any reason to split out the parameter determination from this, they could be done in the same file. The PiPlus parameters are a mess anyway. + +#include "PiPlus_sig.h" +#include "PiPlus_sig_Param.h" +#include "reaction_routine.h" +#include "TF1.h" + +double GetPiPlus_CrossSection(double ft, double fw, double fqsq, double feps ){ + + double_t sig_total; + + // -------------------------------------------------------------------------------------------------- + // CKY sigma L and T starts + // -------------------------------------------------------------------------------------------------- + double lpar0 = 0., lpar1 = 0., lpar2 = 0., lpar3 = 0., lpar4 = 0., lpar5 = 0., lpar6 = 0.; + double tpar0 = 0., tpar1 = 0., tpar2 = 0., tpar3 = 0., tpar4 = 0.; + + lpar0 = 0.; lpar1 = 0.; lpar2 = 0.; lpar3 = 0.; lpar4 = 0.; lpar5 = 0.; lpar6 = 0.; + tpar0 = 0.; tpar1 = 0.; tpar2 = 0.; tpar3 = 0.; tpar4 = 0.; + + fSig_L = 0; + fSig_T = 0; + + if ( ( ft > 0. ) && ( ft < 0.15 ) ) { + PiPlus_sigmaL_Param( fw, fqsq, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLonglandau = new TF1("sigmaL","landau", 0.0 , 0.15 ); + fitCKYLonglandau->FixParameter( 0 , lpar0 ); + fitCKYLonglandau->FixParameter( 1 , lpar1 ); + fitCKYLonglandau->FixParameter( 2 , lpar2 ); + fSig_L = fitCKYLonglandau->Eval(ft); + if ( lpar0 == 0 || lpar1 == 0 || lpar2 == 0 ) + fSig_L = 0; + fitCKYLonglandau = NULL; + delete fitCKYLonglandau; + } + else if ( ( ft > 0.15 ) && ( ft < 0.5 ) ) { + PiPlus_sigmaL_Param( fw, fqsq, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLongexpo1 = new TF1("sigmaL","expo", 0.15 , 0.5 ); + fitCKYLongexpo1->FixParameter( 0 , lpar3 ); + fitCKYLongexpo1->FixParameter( 1 , lpar4 ); + fSig_L = fitCKYLongexpo1->Eval(ft); + if ( lpar3 == 0 || lpar4 == 0 ) + fSig_L = 0; + fitCKYLongexpo1 = NULL; + delete fitCKYLongexpo1; + } + else if ( ( ft > 0.5 ) && ( ft < 1.3 ) ) { + PiPlus_sigmaL_Param( fw, fqsq, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLongexpo2 = new TF1("sigmaL","expo", 0.5 , 1.3 ); + fitCKYLongexpo2->FixParameter( 0 , lpar5 ); + fitCKYLongexpo2->FixParameter( 1 , lpar6 ); + fSig_L = fitCKYLongexpo2->Eval(ft); + if ( lpar5 == 0 || lpar6 == 0 ) + fSig_L = 0; + fitCKYLongexpo2 = NULL; + delete fitCKYLongexpo2; + } + else { + fSig_L = 0; + } + + // ------------------------------------------------------------------------------------------- + // SJDK - 02/06/22 - The validity range here was inconsistent, this only went from 0.0 to 0.15, leaving a gap between 0.15 to 0.2 + // I changed the range to remove this gap. + if ( ( ft > 0.0 ) && ( ft < 0.2 ) ) { + PiPlus_sigmaT_Param( fw, fqsq, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); + TF1 *fitCKYTranspol2 = new TF1("sigmaL","pol2", 0.0 , 0.2 ); + fitCKYTranspol2->FixParameter( 0 , tpar0 ); + fitCKYTranspol2->FixParameter( 1 , tpar1 ); + fitCKYTranspol2->FixParameter( 2 , tpar2 ); + fSig_T = fitCKYTranspol2->Eval(ft); + if ( tpar0 == 0 || tpar1 == 0 || tpar2 == 0 ) + fSig_T = 0; + fitCKYTranspol2 = NULL; + delete fitCKYTranspol2; + } + else if ( ( ft > 0.2 ) && ( ft < 1.3 ) ) { + PiPlus_sigmaT_Param( fw, fqsq, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); + TF1 *fitCKYTransexpo = new TF1("sigmaL","expo", 0.2 , 1.3 ); + fitCKYTransexpo->FixParameter( 0 , tpar3 ); + fitCKYTransexpo->FixParameter( 1 , tpar4 ); + fSig_T = fitCKYTransexpo->Eval(ft); + if ( tpar3 == 0 || tpar4 == 0 ) + fSig_T = 0; + fitCKYTransexpo = NULL; + delete fitCKYTransexpo; + } + + // ------------------------------------------------------------------------------------------- + + fSig_VR = fSig_T + feps * fSig_L; + + sig_total = fSig_VR; + + return sig_total; +} diff --git a/src/eic_evgen/PiPlus_sig.h b/src/eic_evgen/PiPlus_sig.h new file mode 100644 index 0000000..d94688d --- /dev/null +++ b/src/eic_evgen/PiPlus_sig.h @@ -0,0 +1,6 @@ +#ifndef PiPlus_Sig_H +#define PiPlus_Sig_H + +double GetPiPlus_CrossSection( double ft, double fw, double fqsq, double feps ); + +#endif diff --git a/src/eic_evgen/tssa_sig_Para.cc b/src/eic_evgen/PiPlus_sig_Param.cc similarity index 99% rename from src/eic_evgen/tssa_sig_Para.cc rename to src/eic_evgen/PiPlus_sig_Param.cc index e3e0240..c5244cc 100644 --- a/src/eic_evgen/tssa_sig_Para.cc +++ b/src/eic_evgen/PiPlus_sig_Param.cc @@ -12,13 +12,12 @@ /// are properly decleared in header file tssa_sig_Para.h /// +/// SJDK 21/12/22 - Renamed this to make it more obvious what this is +/// This function returns the parameters for a corresponding value of w/Qsq, not the cross section itself +#include "PiPlus_sig_Param.h" - -#include "tssa_sig_Para.h" - - -void eicSigmaL( double fw, double fqsq, double& par0, double& par1, double& par2, double& par3, double& par4, double& par5, double& par6 ) { +void PiPlus_sigmaL_Param( double fw, double fqsq, double& par0, double& par1, double& par2, double& par3, double& par4, double& par5, double& par6 ) { if ( ( fw >= 2 ) && ( fw < 2.2 ) ) { if ( ( fqsq >= 3 ) && ( fqsq < 4 ) ) { par0 = 0; par1 = 0; par2 = 0; par3 = 0; par4 = 0; par5 = 0.627856; par6 = -3.63632; } } if ( ( fw >= 2 ) && ( fw < 2.2 ) ) { if ( ( fqsq >= 4 ) && ( fqsq < 5 ) ) { par0 = 0; par1 = 0; par2 = 0; par3 = 0; par4 = 0; par5 = -0.0552142; par6 = -3.0659; } } @@ -1336,17 +1335,10 @@ void eicSigmaL( double fw, double fqsq, double& par0, double& par1, double& par2 } - - /////*--------------------------------------------------*/ - - - - - -void eicSigmaT( double fw, double fqsq, double& par0, double& par1, double& par2 , double& par3 , double& par4 ) { +void PiPlus_sigmaT_Param( double fw, double fqsq, double& par0, double& par1, double& par2 , double& par3 , double& par4 ) { if ( ( fw >= 2 ) && ( fw < 2.2 ) ) { if ( ( fqsq >= 3.5 ) && ( fqsq < 4.5 ) ) { par0 = 0; par1 = 0; par2 = 0; par3 = 0.257887; par4 = -1.96317; } } if ( ( fw >= 2 ) && ( fw < 2.2 ) ) { if ( ( fqsq >= 4.5 ) && ( fqsq < 5.5 ) ) { par0 = 0; par1 = 0; par2 = 0; par3 = -0.311282; par4 = -1.7445; } } @@ -2662,5 +2654,3 @@ void eicSigmaT( double fw, double fqsq, double& par0, double& par1, double& par2 if ( ( fw >= 10 ) && ( fw < 10.2 ) ) { if ( ( fqsq >= 34.5 ) && ( fqsq < 35.5 ) ) { par0 = 6.4485e-07; par1 = 6.81933e-05; par2 = -0.000221823; par3 = -10.8987; par4 = -5.08495; } } } - - diff --git a/src/eic_evgen/PiPlus_sig_Param.h b/src/eic_evgen/PiPlus_sig_Param.h new file mode 100644 index 0000000..e844cd5 --- /dev/null +++ b/src/eic_evgen/PiPlus_sig_Param.h @@ -0,0 +1,8 @@ +#ifndef PiPlus_Sig_Param_H +#define PiPlus_Sig_Param_H + +void PiPlus_sigmaL_Param( double fw, double fqsq, double& par0, double& par1, double& par2, double& par3, double& par4, double& par5, double& par6 ); + +void PiPlus_sigmaT_Param( double fw, double fqsq, double& par0, double& par1, double& par2, double& par3, double& par4); + +#endif diff --git a/src/eic_evgen/process_routine/KPlus_prod.cc b/src/eic_evgen/archived_routines/KPlus_prod.cc similarity index 100% rename from src/eic_evgen/process_routine/KPlus_prod.cc rename to src/eic_evgen/archived_routines/KPlus_prod.cc diff --git a/src/eic_evgen/process_routine/PiPlus_prod.cc b/src/eic_evgen/archived_routines/PiPlus_prod.cc similarity index 100% rename from src/eic_evgen/process_routine/PiPlus_prod.cc rename to src/eic_evgen/archived_routines/PiPlus_prod.cc diff --git a/src/eic_evgen/legacy.h b/src/eic_evgen/archived_routines/legacy.h similarity index 100% rename from src/eic_evgen/legacy.h rename to src/eic_evgen/archived_routines/legacy.h diff --git a/src/eic_evgen/legacy_function.cc b/src/eic_evgen/archived_routines/legacy_function.cc similarity index 100% rename from src/eic_evgen/legacy_function.cc rename to src/eic_evgen/archived_routines/legacy_function.cc diff --git a/src/eic_evgen/legacy_function.h b/src/eic_evgen/archived_routines/legacy_function.h similarity index 100% rename from src/eic_evgen/legacy_function.h rename to src/eic_evgen/archived_routines/legacy_function.h diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index c4887df..0bdce5c 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -87,7 +87,6 @@ void eic(int event_number, int target_direction, int kinematics_type, TString fi hadron = "Neutron"; particle = ExtractParticle(particle); charge = ExtractCharge(particle); - //Reaction* r1 = new Reaction(particle); Reaction* r1 = new Reaction(particle, hadron); r1->process_reaction(); delete r1; @@ -112,7 +111,7 @@ void eic(int event_number, int target_direction, int kinematics_type, TString fi /*--------------------------------------------------*/ /*--------------------------------------------------*/ - +// SJDK 21/12/22 - Note that this is the one that actually gets used, reads in the .json file void eic(Json::Value obj) { TString targetname; @@ -143,7 +142,7 @@ void eic(Json::Value obj) { TString hadron = obj["hadron"].asString(); // 09/02/22 - SJDK - Added in hadron type argument for K+ // SJDK - 08/02/22 - This is terrible, need to change this, particle should just be K+ // Add a new flag which, hadron - where this is specified too, then add conditionals elsewhere based on this - //New conditional, special case for Kaon + // New conditional, special case for Kaon particle = ExtractParticle(particle); charge = ExtractCharge(particle); @@ -210,14 +209,20 @@ void eic(Json::Value obj) { cout << "Therefore default opition ip6 is used." << endl; } - if(particle != "K+"){ - //Reaction* r1 = new Reaction(particle); + fScatElec_E_Lo = obj["Ee_Low"].asDouble(); + fScatElec_E_Hi = obj["Ee_High"].asDouble(); + fScatElec_Theta_I = obj["e_Theta_Low"].asDouble() * fDEG2RAD; + fScatElec_Theta_F = obj["e_Theta_High"].asDouble() * fDEG2RAD; + fEjectileX_Theta_I = obj["EjectileX_Theta_Low"].asDouble() * fDEG2RAD; + fEjectileX_Theta_F = obj["EjectileX_Theta_High"].asDouble() * fDEG2RAD; + + if(particle != "pi0"){ // Default case now Reaction* r1 = new Reaction(particle, hadron); r1->process_reaction(); delete r1; } - else{ // 09/02/22 - Special case for kaons, feed hadron in as well - Reaction* r1 = new Reaction(particle, hadron); + else{ // Treat pi0 slightly differently for now + Reaction* r1 = new Reaction(particle); r1->process_reaction(); delete r1; } diff --git a/src/eic_evgen/eic.h b/src/eic_evgen/eic.h index fdb3661..aed37ac 100644 --- a/src/eic_evgen/eic.h +++ b/src/eic_evgen/eic.h @@ -28,10 +28,13 @@ #include "eic_pim.h" -#include "tssa_sig_Para.h" +#include "PiPlus_sig.h" +#include "PiPlus_sig_Param.h" +//#include "KPlusLambda_sig_Param.h" +//#include "KPlusSigma_sig_Param.h" +//#include "Pi0_sig_Param.h" #include "reaction_routine.h" -#include "legacy.h" #include "json/json.h" #include "json/json-forwards.h" diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index 6bc0742..a5ff698 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -38,7 +38,7 @@ int fWLessShell, fWLess1P9, fSDiff; unsigned long long int fNEvents, fNRecorded, fNGenerated, fWSqNeg, fNMomConserve, fNSigmaNeg, fNaN, fConserve, fNWeightUnphys, fNWeightReject, fLundRecorded, fNFile; -double fK, fm, fElectron_Kin_Col_GeV, fElectron_Kin_Col, fRand, fLumi, fuBcm2, fPI, fDEG2RAD, fRAD2DEG, fEBeam, fPBeam, fScatElec_Theta_I, fScatElec_Theta_F, fPion_Theta_I, fPion_Theta_F, fMesonX_Theta_I, fMesonX_Theta_F, fScatElec_E_Hi, fScatElec_E_Lo, fPSF; +double fK, fm, fElectron_Kin_Col_GeV, fElectron_Kin_Col, fRand, fLumi, fuBcm2, fPI, fDEG2RAD, fRAD2DEG, fEBeam, fPBeam, fScatElec_Theta_I, fScatElec_Theta_F, fPion_Theta_I, fPion_Theta_F, fEjectileX_Theta_I, fEjectileX_Theta_F, fScatElec_E_Hi, fScatElec_E_Lo, fPSF; double fOmega_Theta_I, fOmega_Theta_F, fOmega_Theta_Col, fOmega_Phi_Col; @@ -241,18 +241,20 @@ void pim::Initilize() { fDEG2RAD = fPI/180.0; fRAD2DEG = 180.0/fPI; - fScatElec_Theta_I = 60.0 * fDEG2RAD; - fScatElec_Theta_F = 175.0 * fDEG2RAD; + //fScatElec_Theta_I = 60.0 * fDEG2RAD; + //fScatElec_Theta_F = 175.0 * fDEG2RAD; // SJDK 29/11/22 - Updated comment on two variables below // Two parameters below are NOT a percentage of the beam energy as previously clamed. This parameter along with _Hi represent the RANGE of enegries over which the scattered electron is generated // The range is from 0.5*EBeam to 2.5*EBeam -> Therefore for the phase space calculation, the spread of 2* the incoming beam energy is used in the calculation - fScatElec_E_Lo = 0.5; // NOT a percentage of beam energy - fScatElec_E_Hi = 2.5; // NOT a percentage of beam energy - // Should remove specific pion/omega values here and JUST use MesonX, should then actually read this in as a parameter, use 0 to 50 as default + // SJDK 21/12/22 - Set by .json read in + //fScatElec_E_Lo = 0.5; // NOT a percentage of beam energy + //fScatElec_E_Hi = 2.5; // NOT a percentage of beam energy + // Should remove specific pion/omega values here and JUST use EjectileX, should then actually read this in as a parameter, use 0 to 50 as default fPion_Theta_I = 0.0 * fDEG2RAD; fPion_Theta_F = 50.0 * fDEG2RAD; - fMesonX_Theta_I = 0.0 * fDEG2RAD; - fMesonX_Theta_F = 50.0 * fDEG2RAD; + // SJDK 21/12/22 - Set by .json read in + //fEjectileX_Theta_I = 0.0 * fDEG2RAD; + //fEjectileX_Theta_F = 50.0 * fDEG2RAD; fOmega_Theta_I = 0.0 * fDEG2RAD; fOmega_Theta_F = 360.0 * fDEG2RAD; // 02/06/21 - SJDK diff --git a/src/eic_evgen/eic_pim.h b/src/eic_evgen/eic_pim.h index c5acfb0..53c9571 100644 --- a/src/eic_evgen/eic_pim.h +++ b/src/eic_evgen/eic_pim.h @@ -134,8 +134,8 @@ extern double fScatElec_Theta_I; extern double fScatElec_Theta_F; extern double fPion_Theta_I; // SJDK 19/12/22 - These should be removed in future, specific to pion reaction cases. Should be generic MesonX extern double fPion_Theta_F; -extern double fMesonX_Theta_I; -extern double fMesonX_Theta_F; +extern double fEjectileX_Theta_I; +extern double fEjectileX_Theta_F; extern double fScatElec_E_Hi; extern double fScatElec_E_Lo; extern double fPSF; diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 1ae0d96..9caee57 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -70,7 +70,7 @@ void DEMP_Reaction::Init() { // 02/06/21 SJDK // Set these values once the beam energies are read in - fPSF = ( fEBeam * ( fScatElec_E_Hi - fScatElec_E_Lo ) *( sin( fScatElec_Theta_F ) - sin( fScatElec_Theta_I ) ) * 2 * fPI *( sin( fMesonX_Theta_F ) - sin( fMesonX_Theta_I ) ) * 2 * fPI ); + fPSF = ( fEBeam * ( fScatElec_E_Hi - fScatElec_E_Lo ) *( sin( fScatElec_Theta_F ) - sin( fScatElec_Theta_I ) ) * 2 * fPI *( sin( fEjectileX_Theta_F ) - sin( fEjectileX_Theta_I ) ) * 2 * fPI ); fElectron_Kin_Col_GeV = fEBeam; fElectron_Kin_Col = fElectron_Kin_Col_GeV * 1000.0; @@ -131,8 +131,8 @@ void DEMP_Reaction::Init() { rDEG2RAD = fPI/180.0; - fX_Theta_I = fMesonX_Theta_I ; - fX_Theta_F = fMesonX_Theta_F; + fX_Theta_I = fEjectileX_Theta_I ; + fX_Theta_F = fEjectileX_Theta_F; cout << "Produced particle in exclusive production: " << rParticle << "; with mass: " << fX_Mass << " MeV "<< endl; cout << fEBeam << " GeV electrons on " << fPBeam << " GeV ions" << endl; @@ -514,22 +514,8 @@ void DEMP_Reaction::Processing_Event() { // Lab cross section Phase Space Conversion Luminosity Total events tried // Hz = ub / ( sr^2 * GeV ) * GeV * sr^2 * ( cm^2 / ub ) * ( # / ( cm^2 * sec ) ) / ( # ) - // SJDK 11/05/21 - This is the previous non unit weight - // SJDK 24/06/21 - Explicitly taking the absolute value of the weigth such that the value is positive! + // SJDK 24/06/21 - Explicitly taking the absolute value of the weight such that the value is positive! fEventWeight = abs(fSigma_Col * fPSF * fuBcm2 * fLumi / fNEvents); // in Hz - // SJDK 21/06/21 - Commenting out "unit weight" calculation for now, reverting to old version - // SJDK 11/05/21 - New weight calculation, division by ceiling weight value to attempt to get a "unit" value - //fEventWeight = abs(fSigma_Col * fPSF * fuBcm2 * fLumi )/fEventWeightCeil; - // if ( (fEventWeight > 1) || (fEventWeight <= 0) ){ - // fNWeightUnphys ++; - // return; - // } - // SJDK 21/06/21 - Reversed sign of condition here, actually want to reject those with a value less than the random number - // fEventWeightRn = fRandom->Uniform( 0, 1.0); - // if ( fEventWeight < fEventWeightRn ){ - // fNWeightReject ++; - // return; - // } fNRecorded++; fLundRecorded++; @@ -669,7 +655,8 @@ Double_t DEMP_Reaction::Get_Total_Cross_Section() { switch (p) { case Pi0: total_sig = GetPi0_CrossSection(); - case PiPlus: total_sig = GetPiPlus_CrossSection(); + case PiPlus: total_sig = GetPiPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon); + //case PiPlus: total_sig = GetPiPlus_CrossSection(); } return total_sig; @@ -678,106 +665,105 @@ Double_t DEMP_Reaction::Get_Total_Cross_Section() { Double_t DEMP_Reaction::GetPi0_CrossSection() { - double_t sig_total; + double_t sig_total; return sig_total; } -/*--------------------------------------------------*/ -/// Charged Pi+ moduel: -/// Author: Z. Ahmed -/// Date: 2017 - -Double_t DEMP_Reaction::GetPiPlus_CrossSection(){ +// /*--------------------------------------------------*/ +// /// Charged Pi+ module: +// /// Author: Z. Ahmed +// /// Date: 2017 - double_t sig_total; +// Double_t DEMP_Reaction::GetPiPlus_CrossSection(){ - // -------------------------------------------------------------------------------------------------- - // CKY sigma L and T starts - // -------------------------------------------------------------------------------------------------- - double lpar0 = 0., lpar1 = 0., lpar2 = 0., lpar3 = 0., lpar4 = 0., lpar5 = 0., lpar6 = 0.; - double tpar0 = 0., tpar1 = 0., tpar2 = 0., tpar3 = 0., tpar4 = 0.; +// double_t sig_total; +// // -------------------------------------------------------------------------------------------------- +// // CKY sigma L and T starts +// // -------------------------------------------------------------------------------------------------- +// double lpar0 = 0., lpar1 = 0., lpar2 = 0., lpar3 = 0., lpar4 = 0., lpar5 = 0., lpar6 = 0.; +// double tpar0 = 0., tpar1 = 0., tpar2 = 0., tpar3 = 0., tpar4 = 0.; - lpar0 = 0.; lpar1 = 0.; lpar2 = 0.; lpar3 = 0.; lpar4 = 0.; lpar5 = 0.; lpar6 = 0.; - tpar0 = 0.; tpar1 = 0.; tpar2 = 0.; tpar3 = 0.; tpar4 = 0.; +// lpar0 = 0.; lpar1 = 0.; lpar2 = 0.; lpar3 = 0.; lpar4 = 0.; lpar5 = 0.; lpar6 = 0.; +// tpar0 = 0.; tpar1 = 0.; tpar2 = 0.; tpar3 = 0.; tpar4 = 0.; - fSig_L = 0; - fSig_T = 0; +// fSig_L = 0; +// fSig_T = 0; - if ( ( fT_GeV > 0. ) && ( fT_GeV < 0.15 ) ) { - eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); - TF1 *fitCKYLonglandau = new TF1("sigmaL","landau", 0.0 , 0.15 ); - fitCKYLonglandau->FixParameter( 0 , lpar0 ); - fitCKYLonglandau->FixParameter( 1 , lpar1 ); - fitCKYLonglandau->FixParameter( 2 , lpar2 ); - fSig_L = fitCKYLonglandau->Eval(fT_GeV); - if ( lpar0 == 0 || lpar1 == 0 || lpar2 == 0 ) - fSig_L = 0; - fitCKYLonglandau = NULL; - delete fitCKYLonglandau; - } - else if ( ( fT_GeV > 0.15 ) && ( fT_GeV < 0.5 ) ) { - eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); - TF1 *fitCKYLongexpo1 = new TF1("sigmaL","expo", 0.15 , 0.5 ); - fitCKYLongexpo1->FixParameter( 0 , lpar3 ); - fitCKYLongexpo1->FixParameter( 1 , lpar4 ); - fSig_L = fitCKYLongexpo1->Eval(fT_GeV); - if ( lpar3 == 0 || lpar4 == 0 ) - fSig_L = 0; - fitCKYLongexpo1 = NULL; - delete fitCKYLongexpo1; - } - else if ( ( fT_GeV > 0.5 ) && ( fT_GeV < 1.3 ) ) { - eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); - TF1 *fitCKYLongexpo2 = new TF1("sigmaL","expo", 0.5 , 1.3 ); - fitCKYLongexpo2->FixParameter( 0 , lpar5 ); - fitCKYLongexpo2->FixParameter( 1 , lpar6 ); - fSig_L = fitCKYLongexpo2->Eval(fT_GeV); - if ( lpar5 == 0 || lpar6 == 0 ) - fSig_L = 0; - fitCKYLongexpo2 = NULL; - delete fitCKYLongexpo2; - } - else { - fSig_L = 0; - } +// if ( ( fT_GeV > 0. ) && ( fT_GeV < 0.15 ) ) { +// PiPlus_sigmaL_Param( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); +// TF1 *fitCKYLonglandau = new TF1("sigmaL","landau", 0.0 , 0.15 ); +// fitCKYLonglandau->FixParameter( 0 , lpar0 ); +// fitCKYLonglandau->FixParameter( 1 , lpar1 ); +// fitCKYLonglandau->FixParameter( 2 , lpar2 ); +// fSig_L = fitCKYLonglandau->Eval(fT_GeV); +// if ( lpar0 == 0 || lpar1 == 0 || lpar2 == 0 ) +// fSig_L = 0; +// fitCKYLonglandau = NULL; +// delete fitCKYLonglandau; +// } +// else if ( ( fT_GeV > 0.15 ) && ( fT_GeV < 0.5 ) ) { +// PiPlus_sigmaL_Param( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); +// TF1 *fitCKYLongexpo1 = new TF1("sigmaL","expo", 0.15 , 0.5 ); +// fitCKYLongexpo1->FixParameter( 0 , lpar3 ); +// fitCKYLongexpo1->FixParameter( 1 , lpar4 ); +// fSig_L = fitCKYLongexpo1->Eval(fT_GeV); +// if ( lpar3 == 0 || lpar4 == 0 ) +// fSig_L = 0; +// fitCKYLongexpo1 = NULL; +// delete fitCKYLongexpo1; +// } +// else if ( ( fT_GeV > 0.5 ) && ( fT_GeV < 1.3 ) ) { +// PiPlus_sigmaL_Param( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); +// TF1 *fitCKYLongexpo2 = new TF1("sigmaL","expo", 0.5 , 1.3 ); +// fitCKYLongexpo2->FixParameter( 0 , lpar5 ); +// fitCKYLongexpo2->FixParameter( 1 , lpar6 ); +// fSig_L = fitCKYLongexpo2->Eval(fT_GeV); +// if ( lpar5 == 0 || lpar6 == 0 ) +// fSig_L = 0; +// fitCKYLongexpo2 = NULL; +// delete fitCKYLongexpo2; +// } +// else { +// fSig_L = 0; +// } - // ------------------------------------------------------------------------------------------- - // SJDK - 02/06/22 - The validity range here was inconsistent, this only went from 0.0 to 0.15, leaving a gap between 0.15 to 0.2 - // I changed the range to remove this gap. - if ( ( fT_GeV > 0.0 ) && ( fT_GeV < 0.2 ) ) { - eicSigmaT( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); - TF1 *fitCKYTranspol2 = new TF1("sigmaL","pol2", 0.0 , 0.2 ); - fitCKYTranspol2->FixParameter( 0 , tpar0 ); - fitCKYTranspol2->FixParameter( 1 , tpar1 ); - fitCKYTranspol2->FixParameter( 2 , tpar2 ); - fSig_T = fitCKYTranspol2->Eval(fT_GeV); - if ( tpar0 == 0 || tpar1 == 0 || tpar2 == 0 ) - fSig_T = 0; - fitCKYTranspol2 = NULL; - delete fitCKYTranspol2; - } - else if ( ( fT_GeV > 0.2 ) && ( fT_GeV < 1.3 ) ) { - eicSigmaT( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); - TF1 *fitCKYTransexpo = new TF1("sigmaL","expo", 0.2 , 1.3 ); - fitCKYTransexpo->FixParameter( 0 , tpar3 ); - fitCKYTransexpo->FixParameter( 1 , tpar4 ); - fSig_T = fitCKYTransexpo->Eval(fT_GeV); - if ( tpar3 == 0 || tpar4 == 0 ) - fSig_T = 0; - fitCKYTransexpo = NULL; - delete fitCKYTransexpo; - } +// // ------------------------------------------------------------------------------------------- +// // SJDK - 02/06/22 - The validity range here was inconsistent, this only went from 0.0 to 0.15, leaving a gap between 0.15 to 0.2 +// // I changed the range to remove this gap. +// if ( ( fT_GeV > 0.0 ) && ( fT_GeV < 0.2 ) ) { +// PiPlus_sigmaT_Param( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); +// TF1 *fitCKYTranspol2 = new TF1("sigmaL","pol2", 0.0 , 0.2 ); +// fitCKYTranspol2->FixParameter( 0 , tpar0 ); +// fitCKYTranspol2->FixParameter( 1 , tpar1 ); +// fitCKYTranspol2->FixParameter( 2 , tpar2 ); +// fSig_T = fitCKYTranspol2->Eval(fT_GeV); +// if ( tpar0 == 0 || tpar1 == 0 || tpar2 == 0 ) +// fSig_T = 0; +// fitCKYTranspol2 = NULL; +// delete fitCKYTranspol2; +// } +// else if ( ( fT_GeV > 0.2 ) && ( fT_GeV < 1.3 ) ) { +// PiPlus_sigmaT_Param( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); +// TF1 *fitCKYTransexpo = new TF1("sigmaL","expo", 0.2 , 1.3 ); +// fitCKYTransexpo->FixParameter( 0 , tpar3 ); +// fitCKYTransexpo->FixParameter( 1 , tpar4 ); +// fSig_T = fitCKYTransexpo->Eval(fT_GeV); +// if ( tpar3 == 0 || tpar4 == 0 ) +// fSig_T = 0; +// fitCKYTransexpo = NULL; +// delete fitCKYTransexpo; +// } - // ------------------------------------------------------------------------------------------- +// // ------------------------------------------------------------------------------------------- - fSig_VR = fSig_T + fEpsilon * fSig_L; +// fSig_VR = fSig_T + fEpsilon * fSig_L; - sig_total = fSig_VR; +// sig_total = fSig_VR; - return sig_total; -} +// return sig_total; +// } /*--------------------------------------------------*/ /// Output generator detail @@ -786,8 +772,6 @@ void DEMP_Reaction::Detail_Output() { DEMPDetails << "Total events tried " << setw(20) << fNGenerated << endl; DEMPDetails << "Total events recorded " << setw(20) << fNRecorded << endl; - // 09/02/22 - Commented out, not used anymore - //DEMPDetails << "Max weight value " << setw(20) << fEventWeightCeil << endl; DEMPDetails << "Number of events with w more than 10.6 " << setw(20) << w_ev << endl; DEMPDetails << "Number of events with wsq negative " << setw(20) << w_neg_ev << endl; DEMPDetails << "Number of events with qsq less than 3 " << setw(20) << qsq_ev << endl; @@ -797,9 +781,6 @@ void DEMP_Reaction::Detail_Output() { DEMPDetails << "Total events failed energy conservation " << setw(20) << ene << endl; DEMPDetails << "Total events failed momentum conserveation " << setw(20) << mom << endl; DEMPDetails << "Number of events with -t more than threshold " << setw(20) << t_ev << endl; - // SJDK 21/06/21 - Commenting out, reverting to old weight determination - //DEMPDetails << "Number of events with unit weight outside of 0 to 1 " << setw(20) << fNWeightUnphys << endl; - //DEMPDetails << "Number of events with unit weight less than random number " << setw(20) << fNWeightReject << endl; DEMPDetails << "Number of events with w less than threshold " << setw(20) << fWSqNeg << endl; DEMPDetails << "Number of events with mom not conserve " << setw(20) << fNMomConserve << endl; DEMPDetails << "Number of events with Sigma negative " << setw(20) << fNSigmaNeg << endl; diff --git a/src/eic_evgen/process_routine/Pi0_prod.cc b/src/eic_evgen/process_routine/Pi0_prod.cc index 24b9f17..954c8c3 100644 --- a/src/eic_evgen/process_routine/Pi0_prod.cc +++ b/src/eic_evgen/process_routine/Pi0_prod.cc @@ -34,8 +34,8 @@ Pi0_Production::~Pi0_Production() { // cout << "File closed!" << endl; - ppiOut.close(); - ppiDetails.close(); + DEMPOut.close(); + DEMPDetails.close(); } @@ -334,7 +334,7 @@ void Pi0_Production::Processing_Event() { // double e_photon_rf = lproton_rf.E(); -// fu_min = -fQsq + pow(f_Scat_Nucleon_Mass, 2) -2.*(e_pi0CM*e_photCM -sqrt( (e_pi0CM**2-mass**2)*(e_photCM**2+qsq) )) +// fu_min = -fQsq + pow(f_Scat_hadron_Mass, 2) -2.*(e_pi0CM*e_photCM -sqrt( (e_pi0CM**2-mass**2)*(e_photCM**2+qsq) )) double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; @@ -342,7 +342,7 @@ void Pi0_Production::Processing_Event() { -// double fttt = lproton_rfg * lproton_rfg - 2* lproton_rfg * l_scat_nucleon_rf_g + l_scat_nucleon_rf_g * l_scat_nucleon_rf_g; +// double fttt = lproton_rfg * lproton_rfg - 2* lproton_rfg * l_scat_hadron_rf_g + l_scat_hadron_rf_g * l_scat_hadron_rf_g; // double fuuu = lproton_rfg * lproton_rfg - 2* lproton_rfg * lX_rfg + lX_rfg * lX_rfg; @@ -351,10 +351,10 @@ void Pi0_Production::Processing_Event() { ft_min = -fQsq_GeV + pow(fX_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(fX_Mass, 2)) * (pow(e_photon_rf,2)+fQsq) )); - fu_min = -fQsq_GeV + pow(f_Scat_Nucleon_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Scat_Nucleon_Mass , 2))*(pow(e_photon_rf,2)+fQsq) )); + fu_min = -fQsq_GeV + pow(f_Scat_hadron_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Scat_hadron_Mass , 2))*(pow(e_photon_rf,2)+fQsq) )); -// cout << "asd: " << ft_min << " " << fu_min << f_Scat_Nucleon_Mass << " " << fX_Mass << " " << fProton_Mass << " "<< fQsq << " " << e_photon_rf << " photon photon: " << lphoton_rf.E() << " " << fm << " " << r_lphoton.E() << " " << beta_col_rf.Mag() << endl; +// cout << "asd: " << ft_min << " " << fu_min << f_Scat_hadron_Mass << " " << fX_Mass << " " << fProton_Mass << " "<< fQsq << " " << e_photon_rf << " photon photon: " << lphoton_rf.E() << " " << fm << " " << r_lphoton.E() << " " << beta_col_rf.Mag() << endl; // // // cout << r_lprotong.Px() << " " << r_lprotong.Py() << " " << r_lprotong.Pz() << " " << r_lprotong.E() << endl; @@ -387,20 +387,20 @@ void Pi0_Production::Processing_Event() { r_lX_g = r_lX * fm; // ---------------------------------------------------- - // Scattered nucleon collider (lab) frame + // Scattered hadron collider (lab) frame - r_l_scat_nucleon.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), + r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + - pow( f_Scat_Nucleon_Mass ,2 ) ) ); + pow( f_Scat_hadron_Mass ,2 ) ) ); - r_l_scat_nucleon_g = r_l_scat_nucleon * fm; + r_l_scat_hadron_g = r_l_scat_hadron * fm; -// cout << "Proton Momentum: " << r_l_scat_nucleon_g.Vect().Mag() << " " << r_l_scat_nucleon_g.Vect().Theta() << " Angle: "<< r_l_scat_nucleon_g.Vect().Theta() *180/fPi << endl; +// cout << "Proton Momentum: " << r_l_scat_hadron_g.Vect().Mag() << " " << r_l_scat_hadron_g.Vect().Theta() << " Angle: "<< r_l_scat_hadron_g.Vect().Theta() *180/fPi << endl; // cout << "X Momentum: " << r_lX_g.Vect().Mag() << " Angle: " << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Theta() *180/fPi<< endl ; -// cout << "Proton-X Angle: " << r_lX_g.Vect().Angle(r_l_scat_nucleon_g.Vect())*180/fPi << endl ; +// cout << "Proton-X Angle: " << r_lX_g.Vect().Angle(r_l_scat_hadron_g.Vect())*180/fPi << endl ; // ---------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------- @@ -427,7 +427,7 @@ void Pi0_Production::Processing_Event() { fW_Prime_GeV = lwp.Mag(); fsini = r_lelectron + r_lproton; - fsfin = r_lscatelec + r_lX + r_l_scat_nucleon; + fsfin = r_lscatelec + r_lX + r_l_scat_hadron; fsinig = fsini * fm; fsfing = fsfin * fm; @@ -439,7 +439,7 @@ void Pi0_Production::Processing_Event() { kSConserve = true; } - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_nucleon) != 1 ) + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron) != 1 ) return; @@ -468,9 +468,9 @@ void Pi0_Production::Processing_Event() { lX_rf.Boost(-beta_col_rf); lX_rfg = lX_rf * fm; - l_scat_nucleon_rf = r_l_scat_nucleon; - l_scat_nucleon_rf.Boost(-beta_col_rf); - l_scat_nucleon_rf_g = l_scat_nucleon_rf * fm; + l_scat_hadron_rf = r_l_scat_hadron; + l_scat_hadron_rf.Boost(-beta_col_rf); + l_scat_hadron_rf_g = l_scat_hadron_rf * fm; @@ -498,14 +498,14 @@ void Pi0_Production::Processing_Event() { // cout << fQsq_GeV << " " << fWSq_GeV << " "; // // cout << r_lscatelecg.Vect().Theta() << " " << r_lscatelecg.Vect().Mag() << " " -// << r_l_scat_nucleon_g.Vect().Theta() << " " << r_l_scat_nucleon_g.Vect().Mag() << " " +// << r_l_scat_hadron_g.Vect().Theta() << " " << r_l_scat_hadron_g.Vect().Mag() << " " // << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() // << endl; polar_out << fQsq_GeV << " " << fWSq_GeV << " "; polar_out << r_lscatelecg.Vect().Theta() << " " << r_lscatelecg.Vect().Mag() << " " - << r_l_scat_nucleon_g.Vect().Theta() << " " << r_l_scat_nucleon_g.Vect().Mag() << " " + << r_l_scat_hadron_g.Vect().Theta() << " " << r_l_scat_hadron_g.Vect().Mag() << " " << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() << " " << l_photon_1.Vect().Theta() << " " << l_photon_1.Vect().Mag() << " " << l_photon_2.Vect().Theta() << " " << l_photon_2.Vect().Mag() @@ -561,7 +561,7 @@ void Pi0_Production::Processing_Event() { // double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; - double e_pCM = (fWSq_GeV + pow(fProton_Mass/1000, 2) - pow(f_Scat_Nucleon_Mass/1000, 2))/fW_GeV/2.; + double e_pCM = (fWSq_GeV + pow(fProton_Mass/1000, 2) - pow(f_Scat_hadron_Mass/1000, 2))/fW_GeV/2.; // cout << "*********: " << e_photCM << " " << e_pCM << endl; // cout << "*********: " << e_photon_rf << " "<< e_p_rf << endl; @@ -578,14 +578,14 @@ void Pi0_Production::Processing_Event() { fu_min = -fQsq_GeV + pow(fProton_Mass/1000, 2) -2.*(e_pCM*e_photCM -sqrt( (pow(e_pCM/1000, 2) - pow(fProton_Mass/1000 , 2))*(pow(e_photCM/1000,2)+fQsq_GeV) )); -// cout << fQsq_GeV << " " << "AAAA " << (pow(e_p_rf/1000, 2) - pow(f_Scat_Nucleon_Mass/1000 , 2))*(pow(e_photon_rf/1000,2)+fQsq_GeV) << " :::: " << (pow(e_p_rf/1000, 2) - pow(fProton_Mass/1000 , 2)) << " " << (pow(e_photon_rf/1000,2)+fQsq_GeV) << " " << pow(e_p_rf/1000, 2) << " " << pow(fProton_Mass/1000 , 2) << " " << e_p_rf/1000*e_photon_rf/1000 << endl; +// cout << fQsq_GeV << " " << "AAAA " << (pow(e_p_rf/1000, 2) - pow(f_Scat_hadron_Mass/1000 , 2))*(pow(e_photon_rf/1000,2)+fQsq_GeV) << " :::: " << (pow(e_p_rf/1000, 2) - pow(fProton_Mass/1000 , 2)) << " " << (pow(e_photon_rf/1000,2)+fQsq_GeV) << " " << pow(e_p_rf/1000, 2) << " " << pow(fProton_Mass/1000 , 2) << " " << e_p_rf/1000*e_photon_rf/1000 << endl; // // cout << endl; // cout << endl; // cout << endl; // // -// cout << "asd: " << ft_min << " " << fu_min << " " << f_Scat_Nucleon_Mass << " " << fX_Mass << " " << fProton_Mass << " "<< fQsq << " " << e_photon_rf << " photon photon: " << lphoton_rf.E() << " " << fm << " " << r_lphoton.E() << " " << beta_col_rf.Mag() << endl; +// cout << "asd: " << ft_min << " " << fu_min << " " << f_Scat_hadron_Mass << " " << fX_Mass << " " << fProton_Mass << " "<< fQsq << " " << e_photon_rf << " photon photon: " << lphoton_rf.E() << " " << fm << " " << r_lphoton.E() << " " << beta_col_rf.Mag() << endl; // // // cout << "Photon energy: " << e_X_rf << " " << e_photon_rf << endl; @@ -604,7 +604,7 @@ void Pi0_Production::Processing_Event() { fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; - fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_Nucleon_Mass , 2) ) / ( 2.0 * fW); + fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_hadron_Mass , 2) ) / ( 2.0 * fW); fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; @@ -684,7 +684,7 @@ void Pi0_Production::Processing_Event() { // ----------------------------------------------------------------------------------- // If we have fermi momentum then epsilon should be in rest frame // The theta angle of scattered angle used in expression of epsilon is the angle - // with respect to direction of incoming electron in the rest frame of target nucleon + // with respect to direction of incoming electron in the rest frame of target hadron // epsilon=1./(1.+ 2.*(pgam_restg**2)/q2g * *(tand(thscat_rest/2.))**2) // ----------------------------------------------------------------------------------- @@ -715,13 +715,13 @@ void Pi0_Production::Processing_Event() { fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; -// cout << "LXXXX check: " << ( r_lproton + r_lelectron - r_lscatelec - r_lX).X() << " " << ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y() << " " << ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z() << " " << sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + pow( f_Scat_Nucleon_Mass ,2 ) ) << endl; +// cout << "LXXXX check: " << ( r_lproton + r_lelectron - r_lscatelec - r_lX).X() << " " << ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y() << " " << ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z() << " " << sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + pow( f_Scat_hadron_Mass ,2 ) ) << endl; - double fttt = r_lprotong * r_lprotong - 2 * r_lprotong * r_l_scat_nucleon_g + r_l_scat_nucleon_g * r_l_scat_nucleon_g; + double fttt = r_lprotong * r_lprotong - 2 * r_lprotong * r_l_scat_hadron_g + r_l_scat_hadron_g * r_l_scat_hadron_g; double fuuu = r_lprotong * r_lprotong - 2 * r_lprotong * r_lX_g + r_lX_g * r_lX_g; -// cout << "check this: " << r_lprotong * r_lprotong << " " << r_l_scat_nucleon_g * r_l_scat_nucleon_g << " " << r_lX_g * r_lX_g << endl; +// cout << "check this: " << r_lprotong * r_lprotong << " " << r_l_scat_hadron_g * r_l_scat_hadron_g << " " << r_lX_g * r_lX_g << endl; // // cout << "t: " << ft << " " << fttt << " u: " << fu << " " << fuuu << endl; // @@ -791,11 +791,11 @@ void Pi0_Production::Processing_Event() { void Pi0_Production::Detail_Output() { - ppiDetails << "Total events tried " << setw(50) << fNGenerated << endl; - ppiDetails << "Total events recorded " << setw(50) << fNRecorded << endl; + DEMPDetails << "Total events tried " << setw(50) << fNGenerated << endl; + DEMPDetails << "Total events recorded " << setw(50) << fNRecorded << endl; - ppiDetails << "Seed used for the Random Number Generator " << setw(50) << fSeed << endl; - ppiDetails << "Number of lund events " << setw(50) << fLundRecorded << endl; + DEMPDetails << "Seed used for the Random Number Generator " << setw(50) << fSeed << endl; + DEMPDetails << "Number of lund events " << setw(50) << fLundRecorded << endl; } @@ -806,7 +806,7 @@ void Pi0_Production::Detail_Output() { void Pi0_Production::Pi0_Lund_Output() { - ppiOut << "5" + DEMPOut << "5" << " \t " << fPhi // var 1 << " \t " << fPhiS // var 2 << " \t " << fx // var 3 @@ -821,7 +821,7 @@ void Pi0_Production::Pi0_Lund_Output() { ///*--------------------------------------------------*/ // Initial State - ppiOut << setw(10) << "1" + DEMPOut << setw(10) << "1" << setw(10) << "-1" << setw(10) << "0" << setw(10) << "11" @@ -837,7 +837,7 @@ void Pi0_Production::Pi0_Lund_Output() { << setw(16) << fVertex_Z << endl; - ppiOut << setw(10) << "2" + DEMPOut << setw(10) << "2" << setw(10) << "1" << setw(10) << "0" << setw(10) << "2212" @@ -859,7 +859,7 @@ void Pi0_Production::Pi0_Lund_Output() { // Final State // Produced Particle X - ppiOut << setw(10) << "3" + DEMPOut << setw(10) << "3" << setw(10) << "1" << setw(10) << "1" << setw(10) << PDGtype(produced_X) @@ -876,7 +876,7 @@ void Pi0_Production::Pi0_Lund_Output() { << endl; // Scattered electron - ppiOut << setw(10) << "4" + DEMPOut << setw(10) << "4" << setw(10) << "-1" << setw(10) << "1" << setw(10) << "11" @@ -893,101 +893,21 @@ void Pi0_Production::Pi0_Lund_Output() { << endl; // Recoiled neutron - ppiOut << setw(10) << "5" + DEMPOut << setw(10) << "5" << setw(10) << "1" << setw(10) << "1" - << setw(10) << PDGtype(recoil_nucleon) + << setw(10) << PDGtype(recoil_hadron) << setw(10) << "0" << setw(10) << "0" - << setw(16) << r_l_scat_nucleon_g.X() - << setw(16) << r_l_scat_nucleon_g.Y() - << setw(16) << r_l_scat_nucleon_g.Z() - << setw(16) << r_l_scat_nucleon_g.E() - << setw(16) << f_Scat_Nucleon_Mass_GeV + << setw(16) << r_l_scat_hadron_g.X() + << setw(16) << r_l_scat_hadron_g.Y() + << setw(16) << r_l_scat_hadron_g.Z() + << setw(16) << r_l_scat_hadron_g.E() + << setw(16) << f_Scat_hadron_Mass_GeV << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z << endl; - - -// cout << "Particle check: " << PDGtype(produced_X) << " " << PDGtype(recoil_nucleon) << endl; - - - - - -// ///*--------------------------------------------------*/ -// -// ppiOut << "3" -// << " \t " << fPhi // var 1 -// << " \t " << fPhiS // var 2 -// << " \t " << fx // var 3 -// << " \t " << "1" -// << " \t " << fQsq_GeV // var 4 -// << " \t " << fT_GeV // var 5 -// << " \t " << fW_GeV // var 6 -// << " \t " << fEpsilon // var 7 -// << " \t " << fEventWeight // var 8 -// << endl; -// -// ///*--------------------------------------------------*/ -// // Final State -// -// // Produced Particle X -// ppiOut << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << PDGtype(produced_X) -// << setw(10) << "0" -// << setw(10) << "0" -// << setw(16) << r_lX_g.X() -// << setw(16) << r_lX_g.Y() -// << setw(16) << r_lX_g.Z() -// << setw(16) << r_lX_g.E() -// << setw(16) << fX_Mass_GeV -// << setw(16) << fVertex_X -// << setw(16) << fVertex_Y -// << setw(16) << fVertex_Z -// << endl; -// -// // Scattered electron -// ppiOut << setw(10) << "2" -// << setw(10) << "-1" -// << setw(10) << "1" -// << setw(10) << "11" -// << setw(10) << "0" -// << setw(10) << "0" -// << setw(16) << r_lscatelecg.X() -// << setw(16) << r_lscatelecg.Y() -// << setw(16) << r_lscatelecg.Z() -// << setw(16) << r_lscatelecg.E() -// << setw(16) << fElectron_Mass_GeV -// << setw(16) << fVertex_X -// << setw(16) << fVertex_Y -// << setw(16) << fVertex_Z -// << endl; -// -// // Recoiled neutron -// ppiOut << setw(10) << "3" -// << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << PDGtype(recoil_nucleon) -// << setw(10) << "0" -// << setw(10) << "0" -// << setw(16) << r_l_scat_nucleon_g.X() -// << setw(16) << r_l_scat_nucleon_g.Y() -// << setw(16) << r_l_scat_nucleon_g.Z() -// << setw(16) << r_l_scat_nucleon_g.E() -// << setw(16) << f_Scat_Nucleon_Mass_GeV -// << setw(16) << fVertex_X -// << setw(16) << fVertex_Y -// << setw(16) << fVertex_Z -// << endl; -// -// -// cout << "Particle check: " << PDGtype(produced_X) << " " << PDGtype(recoil_nucleon) << endl; -// - } @@ -996,14 +916,7 @@ void Pi0_Production::Pi0_Lund_Output() { void Pi0_Production::Pi0_Decay_Lund_Output() { -// cout << rNEvents << endl; -// cout << "-----------+++++++++++++-------------------" << endl; -// exit(0); - - - - - ppiOut << "4" + DEMPOut << "4" << " \t " << fPhi // var 1 << " \t " << fPhiS // var 2 << " \t " << fx // var 3 @@ -1015,25 +928,9 @@ void Pi0_Production::Pi0_Decay_Lund_Output() { << " \t " << fEventWeight // var 8 << endl; -// // Produced Particle X -// ppiOut << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << PDGtype(produced_X) -// << setw(10) << "0" -// << setw(10) << "0" -// << setw(16) << r_lX_g.X() -// << setw(16) << r_lX_g.Y() -// << setw(16) << r_lX_g.Z() -// << setw(16) << r_lX_g.E() -// << setw(16) << fX_Mass_GeV -// << setw(16) << fVertex_X -// << setw(16) << fVertex_Y -// << setw(16) << fVertex_Z -// << endl; // Scattered electron - ppiOut << setw(10) << "2" + DEMPOut << setw(10) << "2" << setw(10) << "-1" << setw(10) << "1" << setw(10) << "11" @@ -1050,24 +947,24 @@ void Pi0_Production::Pi0_Decay_Lund_Output() { << endl; // Recoiled neutron - ppiOut << setw(10) << "3" + DEMPOut << setw(10) << "3" << setw(10) << "1" << setw(10) << "1" - << setw(10) << PDGtype(recoil_nucleon) + << setw(10) << PDGtype(recoil_hadron) << setw(10) << "0" << setw(10) << "0" - << setw(16) << r_l_scat_nucleon_g.X() - << setw(16) << r_l_scat_nucleon_g.Y() - << setw(16) << r_l_scat_nucleon_g.Z() - << setw(16) << r_l_scat_nucleon_g.E() - << setw(16) << f_Scat_Nucleon_Mass_GeV + << setw(16) << r_l_scat_hadron_g.X() + << setw(16) << r_l_scat_hadron_g.Y() + << setw(16) << r_l_scat_hadron_g.Z() + << setw(16) << r_l_scat_hadron_g.E() + << setw(16) << f_Scat_hadron_Mass_GeV << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z << endl; // Photon 1 - ppiOut << setw(10) << "3" + DEMPOut << setw(10) << "3" << setw(10) << "1" << setw(10) << "1" << setw(10) << "22" @@ -1084,7 +981,7 @@ void Pi0_Production::Pi0_Decay_Lund_Output() { << endl; // Photon 2 - ppiOut << setw(10) << "4" + DEMPOut << setw(10) << "4" << setw(10) << "1" << setw(10) << "1" << setw(10) << "22" @@ -1114,13 +1011,13 @@ void Pi0_Production::Pi0_Decay_Pythia6_Out_Init() { print_itt = 0; -// ppiOut << "PYTHIA EVENT FILE" << endl; - ppiOut << "SIMPLE Event FILE" << endl; - ppiOut << "============================================" << endl; - ppiOut << "I, ievent, nParticles" << endl; - ppiOut << "============================================" << endl; - ppiOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; - ppiOut << "============================================" << endl; +// DEMPOut << "PYTHIA EVENT FILE" << endl; + DEMPOut << "SIMPLE Event FILE" << endl; + DEMPOut << "============================================" << endl; + DEMPOut << "I, ievent, nParticles" << endl; + DEMPOut << "============================================" << endl; + DEMPOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; + DEMPOut << "============================================" << endl; } @@ -1130,7 +1027,7 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { -// ppiOut << "4" +// DEMPOut << "4" // << " \t " << fPhi // var 1 // << " \t " << fPhiS // var 2 // << " \t " << fx // var 3 @@ -1143,16 +1040,16 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { // << endl; - ppiOut << "0" << " \t\t\t\ " << print_itt << " \t\t\t " << "1" << endl; // var 1 + DEMPOut << "0" << " \t\t\t\ " << print_itt << " \t\t\t " << "1" << endl; // var 1 print_itt++; - ppiOut << "============================================" << endl; + DEMPOut << "============================================" << endl; ///*--------------------------------------------------*/ // Initial State - ppiOut << "1" + DEMPOut << "1" << setw(6) << "21" << setw(6) << "11" << setw(6) << "0" @@ -1169,7 +1066,7 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { << setw(6) << fVertex_Z << endl; - ppiOut << "2" + DEMPOut << "2" << setw(6) << "21" << setw(6) << "2212" << setw(6) << "0" @@ -1186,7 +1083,7 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { << setw(6) << fVertex_Z << endl; - ppiOut << "3" + DEMPOut << "3" << setw(6) << "21" << setw(6) << "22" << setw(6) << "1" @@ -1208,7 +1105,7 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { // Final State // Scattered electron - ppiOut << "4" + DEMPOut << "4" << setw(6) << "1" << setw(6) << "11" << setw(6) << "1" @@ -1225,26 +1122,26 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { << setw(6) << fVertex_Z << endl; - // Recoiled nucleon - ppiOut << "5" + // Recoiled hadron + DEMPOut << "5" << setw(6) << "1" - << setw(6) << PDGtype(recoil_nucleon) + << setw(6) << PDGtype(recoil_hadron) << setw(6) << "2" << setw(6) << "0" << setw(6) << "0" - << setw(14) << r_l_scat_nucleon_g.X() - << setw(14) << r_l_scat_nucleon_g.Y() - << setw(14) << r_l_scat_nucleon_g.Z() - << setw(14) << r_l_scat_nucleon_g.E() - << setw(14) << f_Scat_Nucleon_Mass_GeV + << setw(14) << r_l_scat_hadron_g.X() + << setw(14) << r_l_scat_hadron_g.Y() + << setw(14) << r_l_scat_hadron_g.Z() + << setw(14) << r_l_scat_hadron_g.E() + << setw(14) << f_Scat_hadron_Mass_GeV << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z << endl; // Produced Particle X - ppiOut << "6" + DEMPOut << "6" << setw(6) << "1" << setw(6) << PDGtype(produced_X) << setw(6) << "2" @@ -1261,7 +1158,7 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { << setw(6) << fVertex_Z << endl; - ppiOut << "=============== Event finished ===============" << endl; + DEMPOut << "=============== Event finished ===============" << endl; } diff --git a/src/eic_evgen/reaction_routine.cc b/src/eic_evgen/reaction_routine.cc index 88500b8..1a5fc0c 100644 --- a/src/eic_evgen/reaction_routine.cc +++ b/src/eic_evgen/reaction_routine.cc @@ -78,26 +78,14 @@ Reaction::~Reaction() { /// void Reaction::process_reaction() { - // if (rParticle == "Pi+") { - // PiPlus_Production* rr1 = new PiPlus_Production(rParticle); - // rr1->process_reaction(); - // delete rr1; - // } - //else if (rParticle == "Pi0") { if (rParticle == "Pi0") { // Pi0_Production* r1 = new Pi0_Production("Eta"); Pi0_Production* rr1 = new Pi0_Production(rParticle); rr1->process_reaction(); delete rr1; } - // 09/02/22 - SJDK - K+ production, initialises with particle and hadron specified - else if (rParticle == "K+") { - KPlus_Production* rr1 = new KPlus_Production(rParticle, rHadron); - rr1->process_reaction(); - delete rr1; - } // SJDK - 19/12/22 - New generic DEMP reaction class, the intention is that this should be able to handle any case - else if (rParticle == "Pi+") { + else{ DEMP_Reaction* rr1 = new DEMP_Reaction(rParticle, rHadron); rr1->process_reaction(); delete rr1; diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index 7c07fac..f4e9a02 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -34,18 +34,18 @@ class Reaction{ TString rParticle; TString rHadron; -}; +}; - -class PiPlus_Production { +class DEMP_Reaction { public: - PiPlus_Production(); - PiPlus_Production(TString); - ~PiPlus_Production(); + DEMP_Reaction(); + DEMP_Reaction(TString, TString); + ~DEMP_Reaction(); void process_reaction(); TString GetParticle() {return rParticle;}; + TString GetHadron() {return rHadron;}; protected: @@ -54,14 +54,14 @@ class PiPlus_Production { void Progress_Report(); void Detail_Output(); void Lund_Output(); - void PiPlus_Pythia6_Out_Init(); - void PiPlus_Pythia6_Output(); - void PiPlus_HEPMC3_Out_Init(); - void PiPlus_HEPMC3_Output(); + void DEMPReact_Pythia6_Out_Init(); + void DEMPReact_Pythia6_Output(); + void DEMPReact_HEPMC3_Out_Init(); + void DEMPReact_HEPMC3_Output(); - TRandom2* rRand; + TRandom2* rRanBd; - Particle_t recoil_nucleon; + Particle_t recoil_hadron; Particle_t produced_X; Double_t Get_Phi_X_LeptonPlane_RF(); @@ -70,7 +70,9 @@ class PiPlus_Production { Double_t Get_Total_Cross_Section(); Double_t GetPi0_CrossSection(); - Double_t GetPiPlus_CrossSection(); + //Double_t GetPiPlus_CrossSection(); + Double_t GetKPlus_CrossSection(); + /*--------------------------------------------------*/ // Parameters @@ -78,13 +80,14 @@ class PiPlus_Production { TStopwatch tTime; TString rParticle; TString rParticle_charge; - TString rParticle_scat_nucleon; + TString rParticle_scat_hadron; + TString rHadron; std::string sTFile; /// Generator output files. For documentation and monitoring purposes std::string sLFile; /// Lund input file into the EIC simulation - std::ofstream ppiOut; - std::ofstream ppiDetails; + std::ofstream DEMPOut; + std::ofstream DEMPDetails; long long int qsq_ev, t_ev, w_neg_ev, w_ev; @@ -125,11 +128,11 @@ class PiPlus_Production { double fX_Mass; double fX_Mass_GeV; - double f_Scat_Nucleon_Mass; - double f_Scat_Nucleon_Mass_GeV; + double f_Scat_hadron_Mass; + double f_Scat_hadron_Mass_GeV; - TLorentzVector r_l_scat_nucleon; - TLorentzVector r_l_scat_nucleon_g; + TLorentzVector r_l_scat_hadron; + TLorentzVector r_l_scat_hadron_g; TLorentzVector r_lw; @@ -160,8 +163,8 @@ class PiPlus_Production { TLorentzVector lX_rf; TLorentzVector lX_rfg; - TLorentzVector l_scat_nucleon_rf; - TLorentzVector l_scat_nucleon_rf_g; + TLorentzVector l_scat_hadron_rf; + TLorentzVector l_scat_hadron_rf_g; /////////////////////////////////////////// /// Center of Mass parameters for particle X @@ -195,33 +198,9 @@ class PiPlus_Production { unsigned long long int print_itt; -}; - -// -//class PiPlus_Production: public virtual Reaction{ -// -// public: -// PiPlus_Production(); -// PiPlus_Production(TString); -// ~PiPlus_Production(); -// -// void process_reaction(); -// void Lund_Output(); -// -// protected: -// -// void Init(); -// void Processing_Event(); -// void Progress_Report(); -// void Detail_Output(); -// -// -// -// -//// } -// - -class Pi0_Production:PiPlus_Production{ +}; + +class Pi0_Production:DEMP_Reaction{ public: Pi0_Production(); @@ -273,311 +252,4 @@ class Pi0_Production:PiPlus_Production{ }; -class KPlus_Production { - - public: - - KPlus_Production(); - KPlus_Production(TString, TString); - ~KPlus_Production(); - - void process_reaction(); - TString GetParticle() {return rParticle;}; - TString GetHadron() {return rHadron;}; - - protected: - - void Init(); - void Processing_Event(); - void Progress_Report(); - void Detail_Output(); - void Lund_Output(); - void KPlus_Pythia6_Out_Init(); - void KPlus_Pythia6_Output(); - void KPlus_HEPMC3_Out_Init(); - void KPlus_HEPMC3_Output(); - TRandom2* rRand; - - Particle_t recoil_hadron; - Particle_t produced_X; - - Double_t Get_Phi_X_LeptonPlane_RF(); - Double_t Get_Phi_TargPol_LeptonPlane_RF(); - Double_t Get_Total_Cross_Section(); - Double_t GetPi0_CrossSection(); - Double_t GetPiPlus_CrossSection(); - Double_t GetKPlus_CrossSection(); - // SJDK - 08/02/22 - Only one cross section value for now? Split into KLambda/KSigma later - //Double_t GetKLambda_CrossSection(); - //Double_t GetKSigma_CrossSection(); - - /*--------------------------------------------------*/ - // Parameters - - TStopwatch tTime; - TString rParticle; - TString rParticle_charge; - TString rParticle_scat_hadron; - TString rHadron; - - std::string sTFile; /// Generator output files. For documentation and monitoring purposes - std::string sLFile; /// Lund input file into the EIC simulation - std::ofstream ppiOut; - std::ofstream ppiDetails; - - int qsq_ev, t_ev, w_neg_ev, w_ev; - long long int rNEvents; - long long int rNEvent_itt; - TDatime dFractTime; - double rDEG2RAD; - - double fX_Theta_I, fX_Theta_F; - - TLorentzVector GetProtonVector_lab(); - TLorentzVector GetElectronVector_lab(); - TLorentzVector r_lproton; // Proton in collider (lab) frame - TLorentzVector r_lprotong; - TLorentzVector r_lelectron; // Electron in collider (lab) frame - TLorentzVector r_lelectrong; - - TVector3 beta_col_rf; // Boost vector from collider (lab) frame to protons rest frame (Fix target) - void Consider_Proton_Fermi_Momentum(); - Double_t rFermiMomentum; - Double_t fX_Theta_Col, fX_Phi_Col; - TLorentzVector r_lscatelec; - TLorentzVector r_lscatelecg; - TLorentzVector r_lphoton; - TLorentzVector r_lphotong; - TLorentzVector r_lX; - TLorentzVector r_lX_g; - double fX_Mass; - double fX_Mass_GeV; - double f_Scat_hadron_Mass; - double f_Scat_hadron_Mass_GeV; - - TLorentzVector r_l_scat_hadron; - TLorentzVector r_l_scat_hadron_g; - TLorentzVector r_lw; - TLorentzVector lwp; - TLorentzVector fsini; - TLorentzVector fsfin; - TLorentzVector fsinig; - TLorentzVector fsfing; - pim* pd; - - /////////////////////////////////////////// - // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss - - TLorentzVector lproton_rf; - TLorentzVector lproton_rfg; - TLorentzVector lelectron_rf; - TLorentzVector lelectron_rfg; - TLorentzVector lscatelec_rf; - TLorentzVector lscatelec_rfg; - TLorentzVector lphoton_rf; - TLorentzVector lphoton_rfg; - TLorentzVector lX_rf; - TLorentzVector lX_rfg; - TLorentzVector l_scat_hadron_rf; - TLorentzVector l_scat_hadron_rf_g; - - /////////////////////////////////////////// - /// Center of Mass parameters for particle X - - double fBeta_CM_RF, fGamma_CM_RF, fX_Energy_CM, fX_Mom_CM, fX_Energy_CM_GeV, fX_Mom_CM_GeV; - - TLorentzVector lt; - TLorentzVector ltg; - - /////////////////////////////////////////// - - TVector3 v3Photon; - TVector3 v3Electron; - TVector3 v3X; - TVector3 v3S; - TVector3 v3PhotonUnit; - TVector3 v3QxL; - TVector3 v3QxP; - TVector3 v3QxS; - TVector3 v3LxP; - TVector3 v3LxS; - TVector3 v3PxL; - TVector3 v3QUnitxL; - TVector3 v3QUnitxP; - TVector3 v3QUnitxS; - - double fCos_Phi_X_LeptonPlane_RF, fSin_Phi_X_LeptonPlane_RF, fTheta_X_Photon_RF, fPhi_X_LeptonPlane_RF; - - Double_t r_fSig; - Double_t r_fSig_T; - Double_t r_fSig_L; - - unsigned long long int print_itt; - -}; - -class DEMP_Reaction { - - public: - DEMP_Reaction(); - DEMP_Reaction(TString, TString); - ~DEMP_Reaction(); - - void process_reaction(); - TString GetParticle() {return rParticle;}; - TString GetHadron() {return rHadron;}; - - protected: - - void Init(); - void Processing_Event(); - void Progress_Report(); - void Detail_Output(); - void Lund_Output(); - void DEMPReact_Pythia6_Out_Init(); - void DEMPReact_Pythia6_Output(); - void DEMPReact_HEPMC3_Out_Init(); - void DEMPReact_HEPMC3_Output(); - - TRandom2* rRanBd; - - Particle_t recoil_hadron; - Particle_t produced_X; - - Double_t Get_Phi_X_LeptonPlane_RF(); - Double_t Get_Phi_TargPol_LeptonPlane_RF(); - - Double_t Get_Total_Cross_Section(); - - Double_t GetPi0_CrossSection(); - Double_t GetPiPlus_CrossSection(); - Double_t GetKPlus_CrossSection(); - - - /*--------------------------------------------------*/ - // Parameters - - TStopwatch tTime; - TString rParticle; - TString rParticle_charge; - TString rParticle_scat_hadron; - TString rHadron; - - std::string sTFile; /// Generator output files. For documentation and monitoring purposes - std::string sLFile; /// Lund input file into the EIC simulation - - std::ofstream DEMPOut; - std::ofstream DEMPDetails; - - long long int qsq_ev, t_ev, w_neg_ev, w_ev; - - long long int rNEvents; - long long int rNEvent_itt; - TDatime dFractTime; - - double rDEG2RAD; - - double fX_Theta_I, fX_Theta_F; - - TLorentzVector GetProtonVector_lab(); - TLorentzVector GetElectronVector_lab(); - - TLorentzVector r_lproton; // Proton in collider (lab) frame - TLorentzVector r_lprotong; - - TLorentzVector r_lelectron; // Electron in collider (lab) frame - TLorentzVector r_lelectrong; - - TVector3 beta_col_rf; // Boost vector from collider (lab) frame to protons rest frame (Fix target) - - void Consider_Proton_Fermi_Momentum(); - - Double_t rFermiMomentum; - - Double_t fX_Theta_Col, fX_Phi_Col; - - TLorentzVector r_lscatelec; - TLorentzVector r_lscatelecg; - - TLorentzVector r_lphoton; - TLorentzVector r_lphotong; - - TLorentzVector r_lX; - TLorentzVector r_lX_g; - - double fX_Mass; - double fX_Mass_GeV; - - double f_Scat_hadron_Mass; - double f_Scat_hadron_Mass_GeV; - - TLorentzVector r_l_scat_hadron; - TLorentzVector r_l_scat_hadron_g; - - TLorentzVector r_lw; - - TLorentzVector lwp; - - TLorentzVector fsini; - TLorentzVector fsfin; - TLorentzVector fsinig; - TLorentzVector fsfing; - - pim* pd; - - /////////////////////////////////////////// - //Transformation of e', pi- and recoil proton to target's rest frmae without energy loss - - TLorentzVector lproton_rf; - TLorentzVector lproton_rfg; - - TLorentzVector lelectron_rf; - TLorentzVector lelectron_rfg; - - TLorentzVector lscatelec_rf; - TLorentzVector lscatelec_rfg; - - TLorentzVector lphoton_rf; - TLorentzVector lphoton_rfg; - - TLorentzVector lX_rf; - TLorentzVector lX_rfg; - - TLorentzVector l_scat_hadron_rf; - TLorentzVector l_scat_hadron_rf_g; - - /////////////////////////////////////////// - /// Center of Mass parameters for particle X - - double fBeta_CM_RF, fGamma_CM_RF, fX_Energy_CM, fX_Mom_CM, fX_Energy_CM_GeV, fX_Mom_CM_GeV; - - TLorentzVector lt; - TLorentzVector ltg; - - /////////////////////////////////////////// - - TVector3 v3Photon; - TVector3 v3Electron; - TVector3 v3X; - TVector3 v3S; - TVector3 v3PhotonUnit; - TVector3 v3QxL; - TVector3 v3QxP; - TVector3 v3QxS; - TVector3 v3LxP; - TVector3 v3LxS; - TVector3 v3PxL; - TVector3 v3QUnitxL; - TVector3 v3QUnitxP; - TVector3 v3QUnitxS; - - double fCos_Phi_X_LeptonPlane_RF, fSin_Phi_X_LeptonPlane_RF, fTheta_X_Photon_RF, fPhi_X_LeptonPlane_RF; - Double_t r_fSig; - Double_t r_fSig_T; - Double_t r_fSig_L; - - unsigned long long int print_itt; - -}; - # endif diff --git a/src/eic_evgen/tssa_sig_Para.h b/src/eic_evgen/tssa_sig_Para.h deleted file mode 100644 index 39ceec5..0000000 --- a/src/eic_evgen/tssa_sig_Para.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef TSSA_SIG_PARA_H -#define TSSA_SIG_PARA_H - - -//#include -//#include -//#include - - -void eicSigmaL( double fw, double fqsq, double& par0, double& par1, double& par2, double& par3, double& par4, double& par5, double& par6 ); - - -void eicSigmaT( double fw, double fqsq, double& par0, double& par1, double& par2, double& par3, double& par4); - -#endif diff --git a/src/main.cxx b/src/main.cxx index 8ccb7a1..ff28bdc 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -49,7 +49,6 @@ #include "eic_evgen/eic.h" - using namespace std; using namespace constants; @@ -99,7 +98,6 @@ int main(int argc, char** argv){ double HBeam = obj["hbeam"].asDouble(); TString hadron = obj["hadron"].asString(); // SJDK 08/02/22 - Add the hadron type as an argument // bool = obj["pi0_particle"].asBool() -// eic(nEvents, target_direction, kinematics_type, file_name, gen_seed, particle); eic(obj); } else if (obj["experiment"].asString() == "solid") { From 026bbff2738e54f208af70efe8c8e8a41c1f6093 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Wed, 21 Dec 2022 09:56:38 -0600 Subject: [PATCH 05/35] Cleaned up code and added some comments --- src/eic_evgen/PiPlus_sig.cc | 1 + .../process_routine/DEMP_Reaction.cc | 102 +----------------- 2 files changed, 6 insertions(+), 97 deletions(-) diff --git a/src/eic_evgen/PiPlus_sig.cc b/src/eic_evgen/PiPlus_sig.cc index eef2c69..f28691e 100644 --- a/src/eic_evgen/PiPlus_sig.cc +++ b/src/eic_evgen/PiPlus_sig.cc @@ -2,6 +2,7 @@ // Inputs are -t, W, Qsq and epsilon (in GeV where appropriate) // Note, there isn't really any reason to split out the parameter determination from this, they could be done in the same file. The PiPlus parameters are a mess anyway. +// In future, these files should also probably be moved elsewhere. The includes/dependencies probably need cleaning up too. #include "PiPlus_sig.h" #include "PiPlus_sig_Param.h" diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 9caee57..442299b 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -229,6 +229,7 @@ void DEMP_Reaction::Processing_Event() { } // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum + // 21/12/22 - SJDK - Should split this out into its own class, then have two different variants (Rory vs Ahmed) // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- @@ -645,7 +646,9 @@ Double_t DEMP_Reaction::Get_Phi_TargPol_LeptonPlane_RF () { return fPhi_TargPol_LeptonPlane_RF; } - +// SJDK 21/12/22 - Note, this separation into cases is fine, the kaon could be done several different ways +// 1 - Split the kaon case up into two sub cases, call a different cross section function each time +// 2 - Have the recoil hadron mass as an argument for the kaon cross section, it gets the correponding parameters from this (or scales as appropriate if we go with scaling) Double_t DEMP_Reaction::Get_Total_Cross_Section() { Double_t total_sig; @@ -656,13 +659,13 @@ Double_t DEMP_Reaction::Get_Total_Cross_Section() { case Pi0: total_sig = GetPi0_CrossSection(); case PiPlus: total_sig = GetPiPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon); - //case PiPlus: total_sig = GetPiPlus_CrossSection(); } return total_sig; } +// SJDK 21/12/22 - This function needs updating! Double_t DEMP_Reaction::GetPi0_CrossSection() { double_t sig_total; @@ -670,101 +673,6 @@ Double_t DEMP_Reaction::GetPi0_CrossSection() { } -// /*--------------------------------------------------*/ -// /// Charged Pi+ module: -// /// Author: Z. Ahmed -// /// Date: 2017 - -// Double_t DEMP_Reaction::GetPiPlus_CrossSection(){ - -// double_t sig_total; - -// // -------------------------------------------------------------------------------------------------- -// // CKY sigma L and T starts -// // -------------------------------------------------------------------------------------------------- -// double lpar0 = 0., lpar1 = 0., lpar2 = 0., lpar3 = 0., lpar4 = 0., lpar5 = 0., lpar6 = 0.; -// double tpar0 = 0., tpar1 = 0., tpar2 = 0., tpar3 = 0., tpar4 = 0.; - -// lpar0 = 0.; lpar1 = 0.; lpar2 = 0.; lpar3 = 0.; lpar4 = 0.; lpar5 = 0.; lpar6 = 0.; -// tpar0 = 0.; tpar1 = 0.; tpar2 = 0.; tpar3 = 0.; tpar4 = 0.; - -// fSig_L = 0; -// fSig_T = 0; - -// if ( ( fT_GeV > 0. ) && ( fT_GeV < 0.15 ) ) { -// PiPlus_sigmaL_Param( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); -// TF1 *fitCKYLonglandau = new TF1("sigmaL","landau", 0.0 , 0.15 ); -// fitCKYLonglandau->FixParameter( 0 , lpar0 ); -// fitCKYLonglandau->FixParameter( 1 , lpar1 ); -// fitCKYLonglandau->FixParameter( 2 , lpar2 ); -// fSig_L = fitCKYLonglandau->Eval(fT_GeV); -// if ( lpar0 == 0 || lpar1 == 0 || lpar2 == 0 ) -// fSig_L = 0; -// fitCKYLonglandau = NULL; -// delete fitCKYLonglandau; -// } -// else if ( ( fT_GeV > 0.15 ) && ( fT_GeV < 0.5 ) ) { -// PiPlus_sigmaL_Param( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); -// TF1 *fitCKYLongexpo1 = new TF1("sigmaL","expo", 0.15 , 0.5 ); -// fitCKYLongexpo1->FixParameter( 0 , lpar3 ); -// fitCKYLongexpo1->FixParameter( 1 , lpar4 ); -// fSig_L = fitCKYLongexpo1->Eval(fT_GeV); -// if ( lpar3 == 0 || lpar4 == 0 ) -// fSig_L = 0; -// fitCKYLongexpo1 = NULL; -// delete fitCKYLongexpo1; -// } -// else if ( ( fT_GeV > 0.5 ) && ( fT_GeV < 1.3 ) ) { -// PiPlus_sigmaL_Param( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); -// TF1 *fitCKYLongexpo2 = new TF1("sigmaL","expo", 0.5 , 1.3 ); -// fitCKYLongexpo2->FixParameter( 0 , lpar5 ); -// fitCKYLongexpo2->FixParameter( 1 , lpar6 ); -// fSig_L = fitCKYLongexpo2->Eval(fT_GeV); -// if ( lpar5 == 0 || lpar6 == 0 ) -// fSig_L = 0; -// fitCKYLongexpo2 = NULL; -// delete fitCKYLongexpo2; -// } -// else { -// fSig_L = 0; -// } - -// // ------------------------------------------------------------------------------------------- -// // SJDK - 02/06/22 - The validity range here was inconsistent, this only went from 0.0 to 0.15, leaving a gap between 0.15 to 0.2 -// // I changed the range to remove this gap. -// if ( ( fT_GeV > 0.0 ) && ( fT_GeV < 0.2 ) ) { -// PiPlus_sigmaT_Param( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); -// TF1 *fitCKYTranspol2 = new TF1("sigmaL","pol2", 0.0 , 0.2 ); -// fitCKYTranspol2->FixParameter( 0 , tpar0 ); -// fitCKYTranspol2->FixParameter( 1 , tpar1 ); -// fitCKYTranspol2->FixParameter( 2 , tpar2 ); -// fSig_T = fitCKYTranspol2->Eval(fT_GeV); -// if ( tpar0 == 0 || tpar1 == 0 || tpar2 == 0 ) -// fSig_T = 0; -// fitCKYTranspol2 = NULL; -// delete fitCKYTranspol2; -// } -// else if ( ( fT_GeV > 0.2 ) && ( fT_GeV < 1.3 ) ) { -// PiPlus_sigmaT_Param( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); -// TF1 *fitCKYTransexpo = new TF1("sigmaL","expo", 0.2 , 1.3 ); -// fitCKYTransexpo->FixParameter( 0 , tpar3 ); -// fitCKYTransexpo->FixParameter( 1 , tpar4 ); -// fSig_T = fitCKYTransexpo->Eval(fT_GeV); -// if ( tpar3 == 0 || tpar4 == 0 ) -// fSig_T = 0; -// fitCKYTransexpo = NULL; -// delete fitCKYTransexpo; -// } - -// // ------------------------------------------------------------------------------------------- - -// fSig_VR = fSig_T + fEpsilon * fSig_L; - -// sig_total = fSig_VR; - -// return sig_total; -// } - /*--------------------------------------------------*/ /// Output generator detail From 35624eb56e5ce27b980f6a47e93b7072c5121750 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Wed, 21 Dec 2022 12:19:52 -0600 Subject: [PATCH 06/35] Added new checks in eic.cc to see if .json object actually contains relevant info. Set to defaults if not. Some variables (beam energies) need further testing. --- Config_EIC.json | 2 +- src/eic_evgen/eic.cc | 125 ++++++++++++++++++++++++++++++++----------- 2 files changed, 94 insertions(+), 33 deletions(-) diff --git a/Config_EIC.json b/Config_EIC.json index ac43aec..8f64400 100644 --- a/Config_EIC.json +++ b/Config_EIC.json @@ -28,8 +28,8 @@ "ebeam": 5, // Electron beam energy in GeV "hbeam": 41, // Hadron beam energy in GeV //"hbeam_part":"proton", // Hadron beam particle, proton, deut or helium3, work in progress, will need to be added to shell script later on as an argument - "det_location": "ip8", // choices: ip6 for STAR, ip8 for PHENIX "OutputType": "Pythia6", // choices: LUND (Docker), Pythia6 (ECCE Fun4All) or HEPMC3 (Athena) + "det_location": "ip8", // choices: ip6 for STAR, ip8 for PHENIX "Ee_Low": 0.5, // The minimum scattered electron energy that will be generated as a fraction of the electron beam energy "Ee_High": 2.5, // The maximum scattered electron energy that will be generated as a fraction of the electron beam energy "e_Theta_Low": 60.0, // The minimum scattered electron angle (theta) that will be generated in degrees diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index 0bdce5c..5fdcb01 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -137,13 +137,12 @@ void eic(Json::Value obj) { // TDatime dsTime; // cout << "Start Time: " << dsTime.GetHour() << ":" << dsTime.GetMinute() << endl; - + // 21/12/22 - SJDK - Should do a check if these are defined or not, should crash if not defined or set defaults, see other quantities below TString particle = obj["particle"].asString(); TString hadron = obj["hadron"].asString(); // 09/02/22 - SJDK - Added in hadron type argument for K+ // SJDK - 08/02/22 - This is terrible, need to change this, particle should just be K+ // Add a new flag which, hadron - where this is specified too, then add conditionals elsewhere based on this - // New conditional, special case for Kaon - + // New conditional, special case for Kaon particle = ExtractParticle(particle); charge = ExtractCharge(particle); if (particle == "K+"){ @@ -167,54 +166,116 @@ void eic(Json::Value obj) { // SJDK - 01/06/21 // Set beam energies from .json read in - fEBeam = obj["ebeam"].asDouble(); - fPBeam = obj["hbeam"].asDouble(); + if (obj.isMember("ebeam")){ + fEBeam = obj["ebeam"].asDouble(); + } + else{ + fEBeam = 5; + cout << "Electron beam energy not specified in .json file, defaulting to 5 GeV." << endl; + } + if (obj.isMember("hbeam")){ + fPBeam = obj["hbeam"].asDouble(); + } + else{ + fPBeam = 100; + cout << "Ion beam energy not specified in .json file, defaulting to 100 GeV." << endl; + } // SJDK - 12/01/22 // Set output type as a .json read in // Should be Pythia6, LUND or HEPMC3 - gOutputType = obj["OutputType"].asString(); - if (gOutputType == "Pythia6"){ - cout << "Using Pythia6 output format for Fun4All" << endl; - } - else if (gOutputType == "LUND"){ - cout << "Using LUND output format" << endl; - } - else if (gOutputType == "HEPMC3"){ - cout << "Using HEPMC3 output format for EPIC" << endl; + if (obj.isMember("OutputType")){ + gOutputType = obj["OutputType"].asString(); + if (gOutputType == "Pythia6"){ + cout << "Using Pythia6 output format for Fun4All" << endl; + } + else if (gOutputType == "LUND"){ + cout << "Using LUND output format" << endl; + } + else if (gOutputType == "HEPMC3"){ + cout << "Using HEPMC3 output format for EPIC" << endl; + } + else{ + cout << "Output type not recognised!" << endl; + cout << "Setting output type to Pythia6 by default!" << endl; + gOutputType = "Pythia6"; + } } else{ - cout << "Output type not recognised!" << endl; + cout << "Output type not specified in .json file!" << endl; cout << "Setting output type to Pythia6 by default!" << endl; gOutputType = "Pythia6"; } - ///*--------------------------------------------------*/ /// The detector selection is determined here /// The incidence proton phi angle is + if (obj.isMember("det_location")){ + gDet_location = obj["det_location"].asString(); + if (gDet_location == "ip8") { + fProton_incidence_phi = 0.0; + } + else if (gDet_location == "ip6") { + fProton_incidence_phi = fPi; + } + else { + fProton_incidence_phi = 0.0; + cout << "The interaction point requested is not recognized!" << endl; + cout << "Therefore ip6 is used by default." << endl; + } + } + else{ // 21/12/22 - This could probably be combined with the else statement above in some way + fProton_incidence_phi = 0.0; + cout << "The interaction points was not specified in the .json file!" << endl; + cout << "Therefore ip6 is used by default" << endl; + } - gDet_location = obj["det_location"].asString(); - - if (gDet_location == "ip8") { + if (obj.isMember("Ee_Low")){ + fScatElec_E_Lo = obj["Ee_Low"].asDouble(); + } + else{ + fScatElec_E_Lo = 0.5; + cout << "Minumum scattered electron energy not specified in .json file, defaulting to 0.5*EBeam." << endl; + } - fProton_incidence_phi = 0.0; + if (obj.isMember("Ee_High")){ + fScatElec_E_Hi = obj["Ee_High"].asDouble(); + } + else{ + fScatElec_E_Hi = 2.5; + cout << "Max scattered electron energy not specified in .json file, defaulting to 2.5*EBeam." << endl; + } - } else if (gDet_location == "ip6") { + if (obj.isMember("e_Theta_Low")){ + fScatElec_Theta_I = obj["e_Theta_Low"].asDouble() * fDEG2RAD; + } + else{ + fScatElec_Theta_I = 60.0 * fDEG2RAD; + cout << "Min scattered electron theta not specified in .json file, defaulting to 60 degrees." << endl; + } - fProton_incidence_phi = fPi; + if (obj.isMember("e_Theta_High")){ + fScatElec_Theta_F = obj["e_Theta_High"].asDouble() * fDEG2RAD; + } + else{ + fScatElec_Theta_F = 175.0 * fDEG2RAD; + cout << "Max scattered electron theta not specified in .json file, defaulting to 175 degrees." << endl; + } - } else { - fProton_incidence_phi = 0.0; - cout << "The interaction point not recognized!" << endl; - cout << "Therefore default opition ip6 is used." << endl; + if (obj.isMember("EjectileX_Theta_Low")){ + fEjectileX_Theta_I = obj["EjectileX_Theta_Low"].asDouble() * fDEG2RAD; + } + else{ + fEjectileX_Theta_I = 0.0 * fDEG2RAD; + cout << "Min ejectile X theta not specified in .json file, defaulting to 0 degrees." << endl; } - fScatElec_E_Lo = obj["Ee_Low"].asDouble(); - fScatElec_E_Hi = obj["Ee_High"].asDouble(); - fScatElec_Theta_I = obj["e_Theta_Low"].asDouble() * fDEG2RAD; - fScatElec_Theta_F = obj["e_Theta_High"].asDouble() * fDEG2RAD; - fEjectileX_Theta_I = obj["EjectileX_Theta_Low"].asDouble() * fDEG2RAD; - fEjectileX_Theta_F = obj["EjectileX_Theta_High"].asDouble() * fDEG2RAD; + if (obj.isMember("EjectileX_Theta_High")){ + fEjectileX_Theta_F = obj["EjectileX_Theta_High"].asDouble() * fDEG2RAD; + } + else{ + fEjectileX_Theta_F = 60.0 * fDEG2RAD; + cout << "Max ejectile X theta not specified in .json file, defaulting to 60 degrees." << endl; + } if(particle != "pi0"){ // Default case now Reaction* r1 = new Reaction(particle, hadron); From 445420e10222998b4029352741bb1d29faa3db6d Mon Sep 17 00:00:00 2001 From: billlee Date: Sun, 25 Dec 2022 14:42:54 -0500 Subject: [PATCH 07/35] before merging --- Config_EIC.json | 10 +- data/test.txt | 1008 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1005 insertions(+), 13 deletions(-) diff --git a/Config_EIC.json b/Config_EIC.json index 61673e4..16cefe0 100644 --- a/Config_EIC.json +++ b/Config_EIC.json @@ -16,8 +16,8 @@ // "experiment" : "eic" or "solid" "experiment" : "eic", - "file_name" : "DEMPGen_EIC_test", - "n_events" : 100000000, + "file_name" : "DEMPGen_u-Channel_pi0", + "n_events" : 1000, "output_file" : "RootFiles/Test.root", "generator_seed": 1234567, @@ -25,11 +25,11 @@ /// This section if for EIC simulation only "Targ_dir" : 1, // Target Direction (1->Up, 2->Down) "Kinematics_type" : 1, // Kinematics type (1->FF, 2->TSSA) - "particle": "Pion+", // Choices: omega, pi+, pi0, K+ + "particle": "Pi0", // Choices: omega, pi+, pi0, K+ "hadron": "", // Choices: Empty OR Lambda or Sigma0 - For K+ production only! "ebeam": 5, // Electron beam energy in GeV - "hbeam": 41, // Hadron beam energy in GeV + "hbeam": 100, // Hadron beam energy in GeV //"hbeam_part":"proton", // Hadron beam particle, proton, deut or helium3, work in progress, will need to be added to shell script later on as an argument - "det_location": "ip8", // choices: ip6 for STAR, ip8 for PHENIX + "det_location": "ip6", // choices: ip6 for STAR, ip8 for PHENIX "OutputType": "Pythia6", // choices: LUND (Docker), Pythia6 (ECCE Fun4All) or HEPMC3 (Athena) } diff --git a/data/test.txt b/data/test.txt index 1f50e24..d8aa005 100644 --- a/data/test.txt +++ b/data/test.txt @@ -1,8 +1,1000 @@ -6.85119 9.45587 2.62924 5.33547 0.0405494 34.2436 0.0162945 65.4124 0 0 0 0 -11.6834 9.74112 2.48204 5.57067 0.0481031 42.0629 0.0108613 57.3602 0 0 0 0 -6.70201 10.8995 2.63437 5.32321 0.0293959 64.514 0.0373222 35.1601 0 0 0 0 -7.41622 9.00447 2.60938 5.36186 0.0413418 33.4338 0.0187969 66.1954 0 0 0 0 -10.0168 8.62872 2.52809 5.49282 0.029311 69.8817 0.0318848 29.6233 0 0 0 0 -5.30819 10.5133 2.68817 5.25325 0.0479422 31.5515 0.0168026 68.1855 0 0 0 0 -9.9624 9.88273 2.5296 5.48907 0.0343692 55.6095 0.0241423 43.8977 0 0 0 0 -8.077 11.8172 2.58694 5.38772 0.038776 56.0216 0.0285261 43.587 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 From 5a561aa802b0fd540d5f6a299d57621d3c02fbb7 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Wed, 18 Jan 2023 11:14:36 -0600 Subject: [PATCH 08/35] Added directory to store cross section parameter files. Blank files for now. Should enforce a soft link to a specific file name that is read in each time. Added comments elsewhere, EICC luminosities. Put in dummy code for where cross sectin parameter read in will probably go --- .../CrossSection_Params/KPlusLambda_Param | 0 .../CrossSection_Params/KPlusSigma_Param | 0 src/eic_evgen/CrossSection_Params/Pi0_Param | 0 .../CrossSection_Params/PiPlus_Param | 0 src/eic_evgen/eic.cc | 34 +++++++++++++++++-- src/eic_evgen/eic.h | 8 +++-- src/eic_evgen/eic_pim.cc | 6 ++-- .../process_routine/DEMP_Reaction.cc | 12 ++++++- src/main.cxx | 3 +- 9 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 src/eic_evgen/CrossSection_Params/KPlusLambda_Param create mode 100644 src/eic_evgen/CrossSection_Params/KPlusSigma_Param create mode 100644 src/eic_evgen/CrossSection_Params/Pi0_Param create mode 100644 src/eic_evgen/CrossSection_Params/PiPlus_Param diff --git a/src/eic_evgen/CrossSection_Params/KPlusLambda_Param b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param new file mode 100644 index 0000000..e69de29 diff --git a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param new file mode 100644 index 0000000..e69de29 diff --git a/src/eic_evgen/CrossSection_Params/Pi0_Param b/src/eic_evgen/CrossSection_Params/Pi0_Param new file mode 100644 index 0000000..e69de29 diff --git a/src/eic_evgen/CrossSection_Params/PiPlus_Param b/src/eic_evgen/CrossSection_Params/PiPlus_Param new file mode 100644 index 0000000..e69de29 diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index 5fdcb01..6e69450 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -48,8 +48,8 @@ void eic() { } /*--------------------------------------------------*/ - -void eic(int event_number, int target_direction, int kinematics_type, TString file_name, int fEIC_seed, TString particle, TString hadron, TString det_location, TString OutputType, double EBeam, double HBeam) { +// 18/01/23 - SJDK- This function is never used since eic() is only called with a json object as the argument. Commented out for now, delete later? +/* void eic(int event_number, int target_direction, int kinematics_type, TString file_name, int fEIC_seed, TString particle, TString hadron, TString det_location, TString OutputType, double EBeam, double HBeam) { TString targetname; TString charge; @@ -108,6 +108,7 @@ void eic(int event_number, int target_direction, int kinematics_type, TString fi delete r1; } } +/* /*--------------------------------------------------*/ /*--------------------------------------------------*/ @@ -277,6 +278,9 @@ void eic(Json::Value obj) { cout << "Max ejectile X theta not specified in .json file, defaulting to 60 degrees." << endl; } + // 18/01/23 - SJDK - I think this would probably be the best point to set the parameter read in for cross section calculations, once the particle and hadron are set, it can then read in the relevant parameter array. For example, assign "sigParArray" to the output of "ReadCrossSectionPar" + //sigParArray = ReadCrossSectionPar(particle, hadron); + if(particle != "pi0"){ // Default case now Reaction* r1 = new Reaction(particle, hadron); r1->process_reaction(); @@ -347,3 +351,29 @@ TString ExtractCharge(TString particle) { } return charge; } + +double ReadCrossSectionPar(TString particle, TString hadron){ + + if (particle == "Pi+" && hadron == "Neutron"){ + cout << "Add Pi+/Neutron case here" << endl; + } + else if (particle == "Pi-" && hadron == "Proton"){ + cout << "Add Pi-/Proton case here" << endl; + } + else if (particle == "K+" && hadron == "Lambda"){ + cout << "Add K+/Lambda case here" << endl; + } + else if (particle == "K+" && hadron == "Sigma"){ + cout << "Add K+/Sigma case here" << endl; + } + else if (particle == "Pi0"){ + cout << "Add Pi0 case here" << endl; + } + else{ + cout << "Throw some error" << endl; + } + + // Need to set and return the array, whatever it is + // retrun Array; + +} diff --git a/src/eic_evgen/eic.h b/src/eic_evgen/eic.h index aed37ac..c059cc0 100644 --- a/src/eic_evgen/eic.h +++ b/src/eic_evgen/eic.h @@ -42,7 +42,8 @@ void eic(); //void eic(int, int, int, TString, int, TString); -void eic(int, int, int, TString, int, TString, TString, TString, TString, double, double); +// 18/01/23 - SJDK- This function is never used since eic() is only called with a json object as the argument. Commented out for now, delete later? +//void eic(int, int, int, TString, int, TString, TString, TString, TString, double, double); void eic(Json::Value); extern int fSeed; @@ -50,7 +51,8 @@ extern int fSeed; void SetEICSeed(int); TString ExtractParticle(TString); -TString ExtractCharge(TString) ; +TString ExtractCharge(TString); -#endif +double SetCrossSectionPar(TString, TString); +#endif diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index a5ff698..46a07ab 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -233,9 +233,11 @@ void pim::Initilize() { kFSI = false; kMSele = false; kMS = false; - // The luminosity below is some default assumtpion, more up to date values are set in PiPlus prod and depend upon beam energy combinations + // 18/01/23 - The luminosity below is some default assumtpion, more up to date values are set in PiPlus prod and depend upon beam energy combinations if they are specified + // See slide 11 in https://indico.cern.ch/event/1072579/contributions/4796856/attachments/2456676/4210776/CAP-EIC-June-7-2022-Seryi-r2.pdf for more info // fLumi = 0.374e33; // Jlab design - fLumi = 1e34; // https://eic.jlab.org/wiki/index.php/EIC_luminosity + //fLumi = 1e34; // https://eic.jlab.org/wiki/index.php/EIC_luminosity - OUTDATED + fLumi = 1e33; // 18/01/23, this seems a better default based upon more up to date info, see link above fuBcm2 = 1.0e-30; fPI = 3.1415926; fDEG2RAD = fPI/180.0; diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 442299b..93225c0 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -137,8 +137,9 @@ void DEMP_Reaction::Init() { cout << "Produced particle in exclusive production: " << rParticle << "; with mass: " << fX_Mass << " MeV "<< endl; cout << fEBeam << " GeV electrons on " << fPBeam << " GeV ions" << endl; - // Set luminosity value based upon beam energy combination + // Set luminosity value based upon beam energy combination, note that if no case matches, a default of 1e33 is assumed. Cases are a set of nominal planned beam energy combinations for the EIC (and EICC) // See slide 11 in https://indico.cern.ch/event/1072579/contributions/4796856/attachments/2456676/4210776/CAP-EIC-June-7-2022-Seryi-r2.pdf + // If available in the future, this could be replaced by some fixed function if ((fEBeam == 5.0 ) && (fPBeam == 41.0) ){ fLumi = 0.44e33; } @@ -151,6 +152,15 @@ void DEMP_Reaction::Init() { else if ((fEBeam == 18.0 ) && (fPBeam == 275.0) ){ fLumi = 1.54e33; } + else if ((fEBeam == 3.5 ) && (fPBeam == 20) ){ // EICC optimal beam energy combination + fLumi = 2e33; + } + else if ((fEBeam == 2.8 ) && (fPBeam == 13) ){ // EICC lowest beam energy combination + fLumi = 0.7e33; + } + else{ + cout << "!!! Notice !!! The beam energy combination simulated does not match an expected case, a default luminosity value of - " << fLumi << " cm^2s^-1 has been assumed. !!! Notice !!!" << endl; + } } diff --git a/src/main.cxx b/src/main.cxx index ff28bdc..bc969fa 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -471,8 +471,7 @@ int main(int argc, char** argv){ cout << "Px Violation" << endl; //Matter Effects~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - + targetthickness = ((-330.0 - *VertEvent->Vertex_z) * Helium_Density)/ (ME->X0(Helium_Z, Helium_A)); // Assuming path along z only inside the target. From a3a6193edd255d9929969b69f6f1142f43d2f7b9 Mon Sep 17 00:00:00 2001 From: billlee Date: Mon, 23 Jan 2023 13:39:57 -0500 Subject: [PATCH 09/35] Adding Rory's algorithm to DEMP --- src/eic_evgen/process_routine/Pi0_prod.cc | 1 - src/eic_evgen/process_routine/PiPlus_prod.cc | 417 ++++++++++++++++++- 2 files changed, 416 insertions(+), 2 deletions(-) diff --git a/src/eic_evgen/process_routine/Pi0_prod.cc b/src/eic_evgen/process_routine/Pi0_prod.cc index 24b9f17..7bb788a 100644 --- a/src/eic_evgen/process_routine/Pi0_prod.cc +++ b/src/eic_evgen/process_routine/Pi0_prod.cc @@ -8,7 +8,6 @@ Pi0_Production::Pi0_Production() { cout << "Program Start" << endl; - } /*--------------------------------------------------*/ diff --git a/src/eic_evgen/process_routine/PiPlus_prod.cc b/src/eic_evgen/process_routine/PiPlus_prod.cc index a4da46e..e96b433 100644 --- a/src/eic_evgen/process_routine/PiPlus_prod.cc +++ b/src/eic_evgen/process_routine/PiPlus_prod.cc @@ -1,4 +1,5 @@ #include "reaction_routine.h" + #include "eic.h" using namespace std; @@ -147,6 +148,33 @@ void PiPlus_Production::Init() { fLumi = 1.54e33; } + + + /*--------------------------------------------------*/ + + CoinToss = new TRandom3(); + + F = new TF1("F", + "[6]-sqrt([7]**2+x**2)-sqrt([8]**2+([3]-[0]*x)**2+([4]-[1]*x)**2+([5]-[2]*x)**2)", + 0, 12000); + + extern Json::Value obj; + + char AngleGenName[100] = "AngleGen"; + double dummy[2] = {0,1}; + double ThetaRange[2] = {obj["prod_pion_thetamin"].asDouble()*TMath::DegToRad(), + obj["prod_pion_thetamax"].asDouble()*TMath::DegToRad()}; + + double PhiRange[2] = {0, 360*TMath::DegToRad()}; + AngleGen = new CustomRand(AngleGenName, dummy, + ThetaRange, PhiRange); + + UnitVect = new TVector3(0,0,1); + + Pion = new Particle(); + Proton_Particle = new Particle(); + + } void PiPlus_Production::Processing_Event() { @@ -160,6 +188,20 @@ void PiPlus_Production::Processing_Event() { } + + + + + + + + + + + + + + // ---------------------------------------------------- // Boost vector from collider (lab) frame to protons rest frame (Fix target) // ---------------------------------------------------- @@ -218,6 +260,9 @@ void PiPlus_Production::Processing_Event() { fW_GeV = lwg.Mag(); fWSq_GeV = lwg.Mag2(); + + + if ( fWSq_GeV < 0 ) { w_neg_ev++; return; @@ -227,7 +272,170 @@ void PiPlus_Production::Processing_Event() { // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- - + + + proton_mass_mev = fProton_Mass; + pion_mass_mev = 139.57; + + Interaction = new Particle(); + Target = new Particle(); + Initial = new Particle(); + Final = new Particle(); + + Particle* VertBeamElec = new Particle(); + Particle* VertScatElec = new Particle(); + + Particle* Photon = new Particle(); + + VertBeamElec->SetPxPyPzE(0, 0, 11000, 11000); + VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); + Target->SetPxPyPzE(0, 0, 0, 939.565); + + *Photon = *VertBeamElec - *VertScatElec; + *Interaction = *Photon; + + Solve(); + + +// +// Float_t pion_theta_i, pion_phi_i; +// +// pion_theta_i = 0.282478; +// pion_phi_i = 3.49651; +// +// TVector3* UnitVect = new TVector3(0,0,1); +// UnitVect->SetTheta(pion_theta_i); +// UnitVect->SetPhi(pion_phi_i); +// UnitVect->SetMag(1); +// +// +// r_lelectron + r_lproton; +// + +// +// +// Particle* VertBeamElec = new Particle(); +// Particle* VertScatElec = new Particle(); +// +// Particle* Photon = new Particle(); +// +// VertBeamElec->SetPxPyPzE(0, 0, 11000, 11000); +// VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); +// Target->SetPxPyPzE(0, 0, 0, 939.565); +// +// *Photon = *VertBeamElec - *VertScatElec; +// *Interaction = *Photon; +// +//// Interaction->SetName("VirtPhot"); +//// Interaction->SetVx(868.374); +//// Interaction->SetVy(1281.64); +//// Interaction->SetVz(7854.51); +// +// +// *Initial = *Interaction+*Target; +// +// double pars[9]; +// pars[0] = UnitVect->X(); +// pars[1] = UnitVect->Y(); +// pars[2] = UnitVect->Z(); +// +// pars[3] = Initial->Px(); +// pars[4] = Initial->Py(); +// pars[5] = Initial->Pz(); +// pars[6] = Initial->E(); +// +// pars[7] = pion_mass_mev; +// pars[8] = proton_mass_mev; +// +// cout << Interaction->Px() << " " << Interaction->Py() << " " +// << Interaction->Pz() << " " << Interaction->E() << " "<< Interaction->GetMass() << endl; +// +// F->SetParameters(pars); +// +// double P = F->GetX(0, 0, pars[6], 0.0001, 10000); +// +// //std::cout << "Zero: " << F->Eval(P) << std::endl; +// +// Pion = new Particle(); +// Proton_Particle = new Particle(); +// +// Particle * Pion1 = new Particle(pion_mass_mev, +// P*pars[0], +// P*pars[1], +// P*pars[2]); +// *Pion = *Pion1; +// +// cout << endl; +// cout << pars[0] << " " << pars[1] << " " << pars[2] << endl; +// cout << pars[3] << " " << pars[4] << " " << pars[5] << endl; +// cout << pars[6] << " " << pars[7] << " " << pars[8] << endl; +// +// +// Particle * Proton1 = new Particle(); +// *Proton1 = *Initial-*Pion; +// *Proton_Particle = *Proton1; +// +// cout << Pion->E() << " " << Proton_Particle->E() << endl; +// +// if (TMath::Abs(F->Eval(P)) > 1){ +// delete Pion1; +// delete Proton1; +// } +//// cout << (*Initial).Mag2() << endl; +// +// cout << "AAAAAAAA " << SolnCheck() << endl; +// +// if (!SolnCheck()){ +// delete Pion1; +// delete Proton1; +// } +// +// //Check for Second solution: +// double P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); +// +// if (TMath::Abs(F->Eval(P2))> 1){ +// //No second soln +// delete Pion1; +// delete Proton1; +// } +// +// +// //Try second solution +// Particle * Pion2 = new Particle(pion_mass_mev, +// P*pars[0], +// P*pars[1], +// P*pars[2]); +// *Pion = *Pion2; +// +// Particle * Proton2 = new Particle(); +// *Proton2 = *Initial - * Pion; +// *Proton_Particle = *Proton2; +// +// if (SolnCheck()){ +// //Toss a coin +// if (CoinToss->Uniform(0,1)>0.5){ +//// delete Pion1; +//// delete Pion2; +//// delete Proton1; +//// delete Proton2; +// } +// } +// +// //Either SolnCheck or coin toss failed +// //Revert to original solution +// +// *Proton_Particle = *Proton1; +// *Pion = *Pion1; +// +// delete Pion1; +// delete Pion2; +// delete Proton1; +// delete Proton2; +// +// exit(0); + + /*--------------------------------------------------*/ + double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); double fupz = cos( fX_Theta_Col ); @@ -1047,3 +1255,210 @@ void PiPlus_Production::PiPlus_HEPMC3_Output() { ppiOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_nucleon) << " " << r_l_scat_nucleon_g.X() << " " << r_l_scat_nucleon_g.Y() << " " << r_l_scat_nucleon_g.Z() << " " << r_l_scat_nucleon_g.E() << " " << f_Scat_Nucleon_Mass_GeV << " " << "1" << endl; } + + + + +/*--------------------------------------------------*/ + +bool PiPlus_Production::SolnCheck() +{ + + // Double Checking for solution viability + if (TMath::Abs(proton_mass_mev- Proton_Particle->M())>1){ + //cerr << "Mass Missmatch" << endl; + //cerr << TMath::Abs(proton_mass_mev-Proton->M()) << endl; + return false; + } + if (TMath::Abs(W_in()-W_out())>1){ + //cerr << "W Missmatch" << endl; + //cerr << TMath::Abs(W_in()-W_out()) << endl; + return false; + } + *Final = *Proton_Particle + *Pion; + + if (TMath::Abs(Initial->Px()-Final->Px())>1){ + //cerr << "Px Missmatch" << endl; + //cerr << TMath::Abs(Initial->Px()-Final->Px()) << endl; + return false; + } + + if (TMath::Abs(Initial->Py()-Final->Py())>1){ + //cerr << "Py Missmatch" << endl; + //cerr << TMath::Abs(Initial->Py()-Final->Py()) << endl; + return false; + } + + if (TMath::Abs(Initial->Pz()-Final->Pz())>1){ + //cerr << "Pz Missmatch" << endl; + //cerr << TMath::Abs(Initial->Pz()-Final->Pz()) << endl; + return false; + } + + if (TMath::Abs(Initial->E()-Final->E())>1){ + return false; + } + return true; +} + +/*--------------------------------------------------*/ +double PiPlus_Production::W_in() +{ + return (*Interaction+*Target).Mag2(); +} + +/*--------------------------------------------------*/ +double PiPlus_Production::W_out() +{ + return (*Proton_Particle+*Pion).Mag2(); +} + +/*--------------------------------------------------*/ + +int PiPlus_Production::Solve() +{ + double theta = AngleGen->Theta(); + double phi = AngleGen->Phi(); + + theta = 0.282478; + phi = 3.49651; + + cout << " Theta Phi: "<< theta << " " << phi << endl; + + return this->Solve(theta, phi); + +} + +/*--------------------------------------------------*/ + +int PiPlus_Production::Solve(double theta, double phi) +{ + *Initial = *Interaction+*Target; + + + W_in_val = W_in(); + + + if (W_in_val<0){ + //cout << "W < 0 " << endl; + return 1; + } + + + //cout << proton_mass_mev << endl; + + UnitVect->SetTheta(theta); + UnitVect->SetPhi(phi); + UnitVect->SetMag(1); + + + double pars[9]; + pars[0] = UnitVect->X(); + pars[1] = UnitVect->Y(); + pars[2] = UnitVect->Z(); + pars[3] = Initial->Px(); + pars[4] = Initial->Py(); + pars[5] = Initial->Pz(); + pars[6] = Initial->E(); + pars[7] = pion_mass_mev; + pars[8] = proton_mass_mev; + + + cout << Interaction->Px() << " " << Interaction->Py() << " " << Interaction->Pz() << " " << Interaction->E() << " " << Interaction->GetMass() << endl; + + cout << Target->Px() << " " << Target->Py() << " " << Target->Pz() << " " << Target->E() << " " << Target->GetMass() << endl; + + + cout << endl; + cout << pars[0] << " " << pars[1] << " " << pars[2] << endl; + cout << pars[3] << " " << pars[4] << " " << pars[5] << endl; + cout << pars[6] << " " << pars[7] << " " << pars[8] << endl; + + + F->SetParameters(pars); + + double P = F->GetX(0, 0, pars[6], 0.0001, 10000); + + //std::cout << "Zero: " << F->Eval(P) << std::endl; + + + Particle * Pion1 = new Particle(pion_mass_mev, + P*pars[0], + P*pars[1], + P*pars[2]); + *Pion = *Pion1; + + Particle * Proton1 = new Particle(); + *Proton1 = *Initial-*Pion; + *Proton_Particle = *Proton1; + + cout << Pion->E() << " " << Proton_Particle->E() << endl; + + if (TMath::Abs(F->Eval(P)) > 1){ + delete Pion1; + delete Proton1; + return 1; + } + cout << "AAAAAAAA " << SolnCheck() << endl; + + if (!SolnCheck()){ + delete Pion1; + delete Proton1; + return 1; + } + + + //Check for Second solution: + double P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); + + if (TMath::Abs(F->Eval(P2))> 1){ + //No second soln + delete Pion1; + delete Proton1; + return 0; + } + + + //Try second solution + Particle * Pion2 = new Particle(pion_mass_mev, + P*pars[0], + P*pars[1], + P*pars[2]); + *Pion = *Pion2; + + Particle * Proton2 = new Particle(); + *Proton2 = *Initial - * Pion; + *Proton_Particle = *Proton2; + + if (SolnCheck()){ + //Toss a coin + if (CoinToss->Uniform(0,1)>0.5){ + delete Pion1; + delete Pion2; + delete Proton1; + delete Proton2; + return 0; // Keep second solution + } + } + + //Either SolnCheck or coin toss failed + //Revert to original solution + + *Proton_Particle = *Proton1; + *Pion = *Pion1; + + delete Pion1; + delete Pion2; + delete Proton1; + delete Proton2; + + exit(0); + + return 0; + +} + + + + + From 953d3efe87cb1cdcb2078cc320645e33d86570e8 Mon Sep 17 00:00:00 2001 From: billlee Date: Thu, 26 Jan 2023 10:40:10 -0500 Subject: [PATCH 10/35] Push to add the Solve function --- Config_SoLID.json | 2 ++ src/Asymmetry.cxx | 4 +++ src/ProductGen.cxx | 27 +++++++++++++++++--- src/eic_evgen/reaction_routine.h | 34 +++++++++++++++++++++++++ src/main.cxx | 43 +++++++++++++++++++++++++++++--- 5 files changed, 103 insertions(+), 7 deletions(-) diff --git a/Config_SoLID.json b/Config_SoLID.json index be17aeb..06c6ead 100644 --- a/Config_SoLID.json +++ b/Config_SoLID.json @@ -4,8 +4,10 @@ // and degrees for angles. // n_events indicates number of attempts // SJDK 17/06/22 - This is an old .json I found from DEMPEvGen, I believe these are still valid options for DEMPGen + "experiment" : "solid", "output_file" : "Test.root", "n_events" : 10000, + "particle": "Pion+", "beam_energy": 11000, "targ_pol_x": 0.865, "targ_pol_y": 0, diff --git a/src/Asymmetry.cxx b/src/Asymmetry.cxx index 96e65e1..2a4a910 100644 --- a/src/Asymmetry.cxx +++ b/src/Asymmetry.cxx @@ -36,6 +36,8 @@ Asymmetry::Asymmetry(char * in_AsyName, char * in_Func, int Asymmetry::Parameterize(vector in_Qsq) { + + //Go to default work file if not extern not available if (WorkFile->IsZombie()){ WorkFile = new TFile("../output/test.root"); @@ -80,6 +82,7 @@ int Asymmetry::Parameterize(vector in_Qsq) n = GK_Raw->Draw(tempname2, tempname3, "goff"); + // The previous version of this parameterization used // only one TF1. As a result, the parameters were // initialized by the previous fit. @@ -204,6 +207,7 @@ int Asymmetry::SetPars(vector in_Qsq) // cout << "File Opened" << endl; } + nQsq = in_Qsq.size(); if (nQsq == 0) { return Parameterize(); diff --git a/src/ProductGen.cxx b/src/ProductGen.cxx index dacf0d7..6245b66 100644 --- a/src/ProductGen.cxx +++ b/src/ProductGen.cxx @@ -26,7 +26,6 @@ ProductGen::ProductGen(Particle* inInteraction, Particle* inTarget): extern Json::Value obj; - char AngleGenName[100] = "AngleGen"; double dummy[2] = {0,1}; double ThetaRange[2] = {obj["prod_pion_thetamin"].asDouble()*TMath::DegToRad(), @@ -50,6 +49,9 @@ ProductGen::ProductGen(Particle* inInteraction, Particle* inTarget): "[6]-sqrt([7]**2+x**2)-sqrt([8]**2+([3]-[0]*x)**2+([4]-[1]*x)**2+([5]-[2]*x)**2)", 0, 12000); +// cout << "CCCC "<< inInteraction->Px() << " " << inInteraction->Py() << " " << inInteraction->Pz() << " " << inInteraction->E() << " " << inInteraction->GetMass() << endl; + + } void ProductGen::SetInteraction(Particle * inInteraction) @@ -84,6 +86,11 @@ int ProductGen::Solve() double theta = AngleGen->Theta(); double phi = AngleGen->Phi(); +// theta = 0.282478; +// phi = 3.49651; + +// cout << " Theta Phi: "<< theta << " " << phi << endl; + return this->Solve(theta, phi); } @@ -115,29 +122,41 @@ int ProductGen::Solve(double theta, double phi) pars[7] = pion_mass_mev; pars[8] = proton_mass_mev; +// cout << Interaction->Px() << " " << Interaction->Py() << " " << Interaction->Pz() << " " << Interaction->E() << " " << Interaction->GetMass() << endl; +// +// cout << Target->Px() << " " << Target->Py() << " " << Target->Pz() << " " << Target->E() << " " << Target->GetMass() << endl; +// +// cout << endl; +// cout << pars[0] << " " << pars[1] << " " << pars[2] << endl; +// cout << pars[3] << " " << pars[4] << " " << pars[5] << endl; +// cout << pars[6] << " " << pars[7] << " " << pars[8] << endl; + + F->SetParameters(pars); double P = F->GetX(0, 0, pars[6], 0.0001, 10000); //std::cout << "Zero: " << F->Eval(P) << std::endl; + Particle * Pion1 = new Particle(pion_mass_mev, P*pars[0], P*pars[1], P*pars[2]); *Pion = *Pion1; - //std::cout << Pion->E() << std::endl; - Particle * Proton1 = new Particle(); *Proton1 = *Initial-*Pion; *Proton = *Proton1; +// cout << Pion->E() << " " << Proton->E() << endl; + if (TMath::Abs(F->Eval(P)) > 1){ delete Pion1; delete Proton1; return 1; } +// cout << "AAAAAAAA " << SolnCheck() << endl; if (!SolnCheck()){ delete Pion1; @@ -145,6 +164,7 @@ int ProductGen::Solve(double theta, double phi) return 1; } + //Check for Second solution: double P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); @@ -188,6 +208,7 @@ int ProductGen::Solve(double theta, double phi) delete Proton1; delete Proton2; +// exit(0); return 0; } diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index 615b1af..6450b50 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -16,6 +16,10 @@ #include "TCanvas.h" +#include "Particle.hxx" +#include "CustomRand.hxx" + + class Reaction{ public: @@ -194,6 +198,34 @@ class PiPlus_Production { unsigned long long int print_itt; + ///*--------------------------------------------------*/ + // Rory Check algorithm + + Float_t proton_mass_mev, pion_mass_mev; + + Particle* Pion; + Particle* Proton_Particle; + + Particle* Interaction; + Particle* Target; + + Particle* Initial; + Particle* Final; + + bool SolnCheck(); + double W_in(); + double W_out(); + double W_in_val; + + TRandom3* CoinToss; + CustomRand* AngleGen; + + TF1* F; + TVector3* UnitVect; + + int Solve(); + int Solve(double theta, double phi); + }; // @@ -415,4 +447,6 @@ class KPlus_Production { }; + + # endif diff --git a/src/main.cxx b/src/main.cxx index 0c72382..721785c 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -117,7 +117,7 @@ int main(int argc, char** argv){ cout << "Multiple Scattering Enabled" << endl; if (obj["final_state_interaction"].asBool()) cout << "FSI Enabled" << endl; - + MatterEffects* ME = new MatterEffects(); @@ -151,6 +151,13 @@ int main(int argc, char** argv){ Particle* Photon = VertEvent->VirtPhot; Photon->SetName("VirtPhot"); + +// cout << "aaa " << VertScatElec->Px() << " " << VertScatElec->Py() << " " +// << VertScatElec->Pz() << " " << VertScatElec->E() << " " << VertScatElec->GetMass() << endl; + + cout << "aaa " << Photon->Px() << " " << Photon->Py() << " " + << Photon->Pz() << " " << Photon->E() << " " << Photon->GetMass() << endl; + Particle* FSIProt = new Particle(proton_mass_mev, "FSIProt", pid_prot); @@ -180,11 +187,16 @@ int main(int argc, char** argv){ VertEvent->VirtPhot = Photon; */ +// cout << "bbb " << VertScatElec->Px() << " " << VertScatElec->Py() << " " +// << VertScatElec->Pz() << " " << VertScatElec->E() << " " << VertScatElec->GetMass() << endl; + + cout << "aaa " << Photon->Px() << " " << Photon->Py() << " " + << Photon->Pz() << " " << Photon->E() << " " << Photon->GetMass() << endl; + ProductGen * ProtonPionGen = new ProductGen(Photon, VertTargNeut); - int nSuccess = 0; int nFail = 0; int nNeg = 0; @@ -331,8 +343,28 @@ int main(int argc, char** argv){ // Generate target and scattered electron *VertTargNeut = *NeutGen->GetParticle(); *VertScatElec = *ElecGen->GetParticle(); + + /*--------------------------------------------------*/ + /// Test only +// VertScatElec->Px() = 15.934; +// VertScatElec->Py() = 1106.06; +// VertScatElec->Pz() = 2281.09; +// VertScatElec->E() = 2535.16; + + VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); + *Photon = *VertBeamElec - *VertScatElec; - + + cout << " " << VertBeamElec->Px() << " " << VertBeamElec->Py() << " " << VertBeamElec->Pz() << " " << VertBeamElec->E() << " " << VertBeamElec->GetMass() << endl; + + cout << " " << VertScatElec->Px() << " " << VertScatElec->Py() << " " << VertScatElec->Pz() << " " << VertScatElec->E() << " " << VertScatElec->GetMass() << endl; + + cout << "asdasdabbbbb " << Photon->Px() << " " << Photon->Py() << " " + << Photon->Pz() << " " << Photon->E() << " " << Photon->GetMass() << endl; + + + + // Solve for remaining particles event_status = ProtonPionGen->Solve(); if (event_status == 0) @@ -742,7 +774,6 @@ int main(int argc, char** argv){ t1->SetBranchAddress("Flux_Factor_RF",&Flux_Factor_RF); t1->SetBranchAddress("Flux_Factor_Col",&Flux_Factor_Col); - bool ALERT = false; for (int i=0; iGetParticle(); + /// Setting Photon *Photon = *VertBeamElec - *VertScatElec; ProtonPionGen->Solve(Pion_Theta_Col/DEG,Pion_Phi_Col/DEG); + + /// Setting Pion *VertProdPion = *ProtonPionGen->ProdPion(); + /// Setting Proton *VertProdProt = *ProtonPionGen->ProdProton(); VertEvent->Update(); From 29f2796ab9241ce69e6ebee2102a79e7340ef7d0 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Tue, 31 Jan 2023 13:44:58 -0600 Subject: [PATCH 11/35] Preliminary version of Love's K+ parameterisation now included. Parameter read in for K+Lambda and K+Sigma working. K+ lambda cross section determination working, refinements will be made soon --- .../KPlusLambda_Param_sigL | 1 + .../KPlusLambda_Param_sigL_27_01_23 | 315 +++++++++++++++++ .../KPlusLambda_Param_sigL_30_01_23 | 315 +++++++++++++++++ .../KPlusLambda_Param_sigT | 1 + .../KPlusLambda_Param_sigT_25_01_23 | 315 +++++++++++++++++ .../CrossSection_Params/KPlusSigma_Param_sigL | 1 + .../KPlusSigma_Param_sigL_27_01_23 | 315 +++++++++++++++++ .../CrossSection_Params/KPlusSigma_Param_sigT | 1 + .../KPlusSigma_Param_sigT_25_01_23 | 316 ++++++++++++++++++ .../CrossSection_Params/PiPlus_Param | 0 .../{KPlusLambda_Param => PiPlus_Param_sigL} | 0 .../{KPlusSigma_Param => PiPlus_Param_sigT} | 0 src/eic_evgen/eic.cc | 85 +++-- src/eic_evgen/eic.h | 7 +- src/eic_evgen/eic_pim.cc | 5 +- src/eic_evgen/eic_pim.h | 6 +- .../process_routine/DEMP_Reaction.cc | 6 +- src/eic_evgen/reaction_routine.h | 4 +- 18 files changed, 1662 insertions(+), 31 deletions(-) create mode 120000 src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL create mode 100644 src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL_27_01_23 create mode 100644 src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL_30_01_23 create mode 120000 src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT create mode 100644 src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT_25_01_23 create mode 120000 src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL create mode 100644 src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL_27_01_23 create mode 120000 src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT create mode 100644 src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT_25_01_23 delete mode 100644 src/eic_evgen/CrossSection_Params/PiPlus_Param rename src/eic_evgen/CrossSection_Params/{KPlusLambda_Param => PiPlus_Param_sigL} (100%) rename src/eic_evgen/CrossSection_Params/{KPlusSigma_Param => PiPlus_Param_sigT} (100%) diff --git a/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL new file mode 120000 index 0000000..78ce752 --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL @@ -0,0 +1 @@ +KPlusLambda_Param_sigL_30_01_23 \ No newline at end of file diff --git a/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL_27_01_23 b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL_27_01_23 new file mode 100644 index 0000000..c3710b2 --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL_27_01_23 @@ -0,0 +1,315 @@ +2 1 0.655783 -3.41908 0 -0.356979 -1.6623 -0.940213 -1.10343 0.273385 0.576486 1.04359 +2 2 0.272282 -2.98381 0 -0.427091 -1.90992 -1.62905 -0.824439 0.548669 0.651255 1.1073 +2 3 0 0 0 -1.03534 -1.69 -2.15942 -0.757114 -10001 0.845727 1.20495 +2 4 0 0 0 -1.71285 -1.46249 -2.63081 -0.749062 -10001 1.1551 1.2867 +2 5 0 0 0 0 0 -3.44669 -0.557599 -10001 -10001 1.47226 +2 6 0 0 0 0 0 -4.43881 -0.303917 -10001 -10001 1.79471 +2 7 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 8 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 9 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 10 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 11 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 12 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 13 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 14 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 15 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 16 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 17 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 18 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 19 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 20 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 21 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 22 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 23 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 24 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 25 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 26 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 27 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 28 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 29 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 30 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 31 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 32 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 33 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 34 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 35 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 1 -1.4518 -3.88276 0 -2.07956 -2.80953 -2.8585 -2.14553 0.076573 0.584924 1.17311 +3 2 -1.46702 -4.0696 0 -2.1298 -2.89821 -2.97978 -2.16804 0.15691 0.565797 1.1641 +3 3 -1.67953 -3.99379 0 -2.30029 -2.96438 -3.20928 -2.18572 0.248837 0.603013 1.16739 +3 4 -1.91181 -3.92883 0 -2.49127 -3.01118 -3.45013 -2.19835 0.349275 0.631462 1.17964 +3 5 -2.13665 -3.87286 0 -2.63463 -3.09669 -3.64493 -2.23143 0.456179 0.641583 1.16762 +3 6 -2.37799 -3.76842 0 -2.82256 -3.11422 -3.8551 -2.24596 0.56813 0.679564 1.1892 +3 7 0 0 0 -3.02244 -3.1099 -4.02695 -2.27351 -10001 0.684104 1.20101 +3 8 0 0 0 -3.27962 -3.03873 -4.18826 -2.29891 -10001 0.803344 1.22819 +3 9 0 0 0 -3.5262 -2.97041 -4.34041 -2.32227 -10001 0.925276 1.25623 +3 10 0 0 0 -3.7631 -2.90557 -4.48463 -2.34372 -10001 1.04945 1.28419 +3 11 0 0 0 0 0 -4.55585 -2.40154 -10001 -10001 1.17553 +3 12 0 0 0 0 0 -4.81855 -2.34443 -10001 -10001 1.30322 +3 13 0 0 0 0 0 -5.05233 -2.30324 -10001 -10001 1.4323 +3 14 0 0 0 0 0 -5.29679 -2.25045 -10001 -10001 1.56258 +3 15 0 0 0 0 0 -5.53602 -2.20041 -10001 -10001 1.69392 +3 16 0 0 0 0 0 -5.74498 -2.16568 -10001 -10001 1.82617 +3 17 0 0 0 0 0 -5.97307 -2.11922 -10001 -10001 1.95924 +3 18 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 19 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 20 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 21 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 22 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 23 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 24 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 25 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 26 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 27 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 28 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 29 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 30 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 31 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 32 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 33 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 34 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 35 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 1 0.0383783 0.0394744 -0.743156 -2.92407 -4.34601 -3.93374 -3.29508 0.036156 0.142437 0.960739 +4 2 0.0423415 -0.0582897 -0.262128 -2.9449 -4.39688 -3.95993 -3.31956 0.07196 0.16849 0.94217 +4 3 0 0 0 -3.08729 -4.39902 -4.11829 -3.3347 -10001 0.112693 0.9687 +4 4 0 0 0 -3.23872 -4.45059 -4.30602 -3.33575 -10001 0.157531 0.95735 +4 5 0 0 0 -3.40255 -4.46635 -4.45445 -3.3584 -10001 0.20583 0.949409 +4 6 0 0 0 -3.57053 -4.4557 -4.60804 -3.36794 -10001 0.257076 0.953795 +4 7 0 0 0 -3.73761 -4.43073 -4.74231 -3.38525 -10001 0.310856 0.961002 +4 8 0 0 0 -3.91108 -4.37755 -4.89693 -3.38444 -10001 0.366831 0.992693 +4 9 0 0 0 -4.0722 -4.33924 -5.01821 -3.39728 -10001 0.424722 1.0043 +4 10 0 0 0 -4.22933 -4.29791 -5.13389 -3.40827 -10001 0.484295 1.01678 +4 11 0 0 0 -4.38088 -4.25646 -5.24462 -3.41757 -10001 0.545354 1.02963 +4 12 0 0 0 -4.52778 -4.21448 -5.35097 -3.42532 -10001 0.607734 1.04313 +4 13 0 0 0 -4.65364 -4.19192 -5.42478 -3.44819 -10001 0.671292 1.03686 +4 14 0 0 0 -4.79084 -4.14966 -5.52359 -3.45327 -10001 0.735906 1.05221 +4 15 0 0 0 -4.92451 -4.10784 -5.60624 -3.46848 -10001 0.80147 1.06626 +4 16 0 0 0 -5.05462 -4.06631 -5.69907 -3.47125 -10001 0.867893 1.083 +4 17 0 0 0 -5.18188 -4.0254 -5.78936 -3.47298 -10001 0.935095 1.09969 +4 18 0 0 0 0 0 -5.84775 -3.49079 -10001 -10001 1.003 +4 19 0 0 0 0 0 -5.9786 -3.46857 -10001 -10001 1.07156 +4 20 0 0 0 0 0 -6.1193 -3.43551 -10001 -10001 1.14071 +4 21 0 0 0 0 0 -6.25678 -3.40322 -10001 -10001 1.2104 +4 22 0 0 0 0 0 -6.37336 -3.38166 -10001 -10001 1.28059 +4 23 0 0 0 0 0 -6.50408 -3.35051 -10001 -10001 1.35124 +4 24 0 0 0 0 0 -6.63216 -3.32005 -10001 -10001 1.42231 +4 25 0 0 0 0 0 -6.74012 -3.30119 -10001 -10001 1.49378 +4 26 0 0 0 0 0 -6.86295 -3.27187 -10001 -10001 1.56561 +4 27 0 0 0 0 0 -6.98393 -3.24328 -10001 -10001 1.63778 +4 28 0 0 0 0 0 -7.08325 -3.2258 -10001 -10001 1.71027 +4 29 0 0 0 0 0 -7.19979 -3.19814 -10001 -10001 1.78305 +4 30 0 0 0 0 0 -7.29449 -3.18166 -10001 -10001 1.85611 +4 31 0 0 0 0 0 -7.40742 -3.15495 -10001 -10001 1.92942 +4 32 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 33 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 34 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 35 0 0 0 0 0 0 0 -10001 -10001 -10001 +5 1 0.0115921 0.0275793 -0.312253 -3.96716 -5.02175 -4.8689 -4.09936 0.021237 0.136719 0.977614 +5 2 0.0124275 0.008105 -0.224179 -3.97901 -5.03544 -4.88749 -4.10351 0.041211 0.128219 0.974825 +5 3 0.0117252 -0.0079546 -0.129263 -4.11085 -5.03457 -5.03779 -4.10203 0.063478 0.132815 0.993988 +5 4 0.0111773 -0.0260391 -0.0237622 -4.25262 -5.06173 -5.18166 -4.11129 0.08778 0.18 0.977485 +5 5 -0.000514308 0.138672 -0.647959 -4.3919 -5.07462 -5.32322 -4.11954 0.113899 0.146932 0.975114 +5 6 0 0 0 -4.52649 -5.06796 -5.45829 -4.1263 -10001 0.141647 0.989525 +5 7 0 0 0 -4.64652 -5.09744 -5.5862 -4.13168 -10001 0.170861 0.972994 +5 8 0 0 0 -4.76663 -5.10741 -5.70734 -4.13579 -10001 0.2014 0.968186 +5 9 0 0 0 -4.88586 -5.10392 -5.82238 -4.13874 -10001 0.23314 0.970293 +5 10 0 0 0 -5.00384 -5.09119 -5.932 -4.14061 -10001 0.265974 0.976413 +5 11 0 0 0 -5.11933 -5.07369 -6.03684 -4.14149 -10001 0.299806 0.984246 +5 12 0 0 0 -5.23221 -5.05254 -6.13745 -4.14146 -10001 0.334552 0.993587 +5 13 0 0 0 -5.33461 -5.04621 -6.2085 -4.15511 -10001 0.370136 0.98069 +5 14 0 0 0 -5.44234 -5.01996 -6.30195 -4.15343 -10001 0.406492 0.99202 +5 15 0 0 0 -5.54791 -4.99207 -6.38069 -4.16144 -10001 0.443559 1.00259 +5 16 0 0 0 -5.65138 -4.96304 -6.46839 -4.15835 -10001 0.481285 1.01531 +5 17 0 0 0 -5.75285 -4.93321 -6.55365 -4.15463 -10001 0.51962 1.02855 +5 18 0 0 0 -5.83884 -4.91931 -6.61046 -4.16501 -10001 0.55852 1.02297 +5 19 0 0 0 -5.93567 -4.88844 -6.67958 -4.17065 -10001 0.597947 1.03639 +5 20 0 0 0 -6.03077 -4.85737 -6.75866 -4.16523 -10001 0.637864 1.05164 +5 21 0 0 0 -6.11047 -4.84458 -6.80956 -4.17415 -10001 0.678238 1.04275 +5 22 0 0 0 -6.20185 -4.81334 -6.87337 -4.17837 -10001 0.719041 1.05757 +5 23 0 0 0 -6.2768 -4.80058 -6.92097 -4.18651 -10001 0.760243 1.04902 +5 24 0 0 0 -6.36496 -4.76942 -6.98188 -4.18993 -10001 0.801821 1.06458 +5 25 0 0 0 -6.45198 -4.73849 -7.05348 -4.18224 -10001 0.843751 1.08134 +5 26 0 0 0 -6.52116 -4.72586 -7.09706 -4.18925 -10001 0.886012 1.07321 +5 27 0 0 0 -6.60552 -4.69518 -7.15428 -4.19159 -10001 0.928585 1.0897 +5 28 0 0 0 0 0 -7.16811 -4.21343 -10001 -10001 0.971453 +5 29 0 0 0 0 0 -7.25065 -4.19971 -10001 -10001 1.0146 +5 30 0 0 0 0 0 -7.34369 -4.17539 -10001 -10001 1.058 +5 31 0 0 0 0 0 -7.41972 -4.16028 -10001 -10001 1.10166 +5 32 0 0 0 0 0 -7.50967 -4.13643 -10001 -10001 1.14555 +5 33 0 0 0 0 0 -7.59846 -4.1129 -10001 -10001 1.18966 +5 34 0 0 0 0 0 -7.67206 -4.10013 -10001 -10001 1.23398 +5 35 0 0 0 0 0 -7.75837 -4.07713 -10001 -10001 1.2785 +6 1 0.00446513 0.0172319 -0.168673 -4.82013 -5.55143 -5.67614 -4.69474 0.014055 0.119464 0.999206 +6 2 0.00484376 0.00672344 -0.107508 -4.82345 -5.5617 -5.68771 -4.69684 0.026789 0.131896 0.999296 +6 3 0.00449413 0.00278732 -0.0856669 -4.94541 -5.56201 -5.80415 -4.70149 0.040704 0.128996 0.997933 +6 4 0.0042419 -0.00454978 -0.0388836 -5.0814 -5.57186 -5.95092 -4.7016 0.055706 0.142576 0.999141 +6 5 0.00384229 -0.00596132 -0.0272056 -5.21562 -5.57297 -6.08213 -4.70447 0.071711 0.142231 0.997713 +6 6 0.00362127 -0.00944918 -0.00545778 -5.34161 -5.58118 -6.22006 -4.70292 0.088643 0.140411 1.00021 +6 7 -9.7235e-05 0.0472865 -0.234954 -5.45813 -5.5811 -6.33728 -4.70424 0.106435 0.134659 1.00261 +6 8 0 0 0 -5.53234 -5.78231 -6.461 -4.70126 -10001 0.125025 0.859041 +6 9 0 0 0 -5.67635 -5.56513 -6.55402 -4.71123 -10001 0.144357 1.02784 +6 10 0 0 0 -5.76687 -5.59398 -6.6525 -4.71062 -10001 0.164381 1.00257 +6 11 0 0 0 -5.86057 -5.60357 -6.75737 -4.70399 -10001 0.18505 0.99691 +6 12 0 0 0 -5.94749 -5.6147 -6.83551 -4.71229 -10001 0.206324 0.984068 +6 13 0 0 0 -6.03264 -5.62013 -6.92334 -4.71192 -10001 0.228163 0.98072 +6 14 0 0 0 -6.116 -5.62116 -6.99418 -4.71935 -10001 0.250532 0.973794 +6 15 0 0 0 -6.20323 -5.60288 -7.08428 -4.71058 -10001 0.273399 0.987401 +6 16 0 0 0 -6.28356 -5.5974 -7.14927 -4.71714 -10001 0.296735 0.983463 +6 17 0 0 0 -6.36217 -5.58984 -7.21172 -4.72335 -10001 0.320512 0.980449 +6 18 0 0 0 -6.4391 -5.58061 -7.28319 -4.719 -10001 0.344706 0.979679 +6 19 0 0 0 -6.52194 -5.55318 -7.36624 -4.71054 -10001 0.369291 1.00196 +6 20 0 0 0 -6.59614 -5.54135 -7.42246 -4.71566 -10001 0.394248 1.00077 +6 21 0 0 0 -6.66668 -5.52599 -7.47691 -4.7205 -10001 0.419556 1.00589 +6 22 0 0 0 -6.73761 -5.51257 -7.52972 -4.72507 -10001 0.445197 1.00586 +6 23 0 0 0 -6.80709 -5.4986 -7.58104 -4.72937 -10001 0.471152 1.00615 +6 24 0 0 0 -6.87516 -5.48417 -7.64242 -4.72311 -10001 0.497407 1.00815 +6 25 0 0 0 -6.94179 -5.4706 -7.69104 -4.72688 -10001 0.523946 1.00744 +6 26 0 0 0 -7.00726 -5.45431 -7.73845 -4.73042 -10001 0.550755 1.01009 +6 27 0 0 0 -7.08281 -5.42157 -7.81006 -4.71957 -10001 0.577821 1.03597 +6 28 0 0 0 -7.1462 -5.40604 -7.85531 -4.72263 -10001 0.605132 1.0376 +6 29 0 0 0 -7.20843 -5.39039 -7.89957 -4.72548 -10001 0.632676 1.03945 +6 30 0 0 0 -7.26954 -5.37465 -7.94289 -4.72814 -10001 0.660442 1.04151 +6 31 0 0 0 -7.32973 -5.35893 -7.98531 -4.73062 -10001 0.688421 1.0434 +6 32 0 0 0 -7.38864 -5.34302 -8.02689 -4.73291 -10001 0.716602 1.04614 +6 33 0 0 0 -7.4467 -5.32716 -8.06767 -4.73503 -10001 0.744978 1.0487 +6 34 0 0 0 -7.50385 -5.3113 -8.1077 -4.73699 -10001 0.773539 1.05142 +6 35 0 0 0 -7.56018 -5.29549 -8.14701 -4.73878 -10001 0.802277 1.05411 +7 1 0.00204324 0.00967897 -0.0925583 -5.54218 -5.98592 -6.36827 -5.17207 0.010025 0.115677 1.01503 +7 2 0.00218071 0.00578931 -0.0683278 -5.53932 -5.99362 -6.37894 -5.16592 0.018871 0.124217 1.0144 +7 3 0.00207202 0.0018879 -0.0425477 -5.65413 -5.99969 -6.49655 -5.16898 0.028379 0.133233 1.01409 +7 4 0.00185978 0.00132242 -0.0388186 -5.79057 -5.98156 -6.64189 -5.16168 0.03851 0.127115 1.03833 +7 5 0.00173747 -0.00117352 -0.0215614 -5.91452 -6.00215 -6.76086 -5.16718 0.049229 0.137463 1.01362 +7 6 0.00156314 -0.00123258 -0.0196422 -6.00179 -6.15341 -6.88605 -5.16882 0.060502 0.13623 0.898099 +7 7 0.00147595 -0.00274818 -0.00923944 -6.14915 -6.00449 -6.99066 -5.17351 0.072297 0.143827 1.01267 +7 8 0.00139669 -0.00372717 -0.00267967 -6.25366 -6.0115 -7.10137 -5.17435 0.084587 0.154879 1.0126 +7 9 0.000791551 0.00531051 -0.0414773 -6.35685 -5.99438 -7.21674 -5.16487 0.097345 0.123728 1.03662 +7 10 0.00074311 0.00360369 -0.0290018 -6.44486 -6.0152 -7.29133 -5.1784 0.110546 0.135187 1.01156 +7 11 0 0 0 -6.52636 -6.125 -7.39618 -5.16817 -10001 0.124167 0.90907 +7 12 0 0 0 -6.59072 -6.1566 -7.47244 -5.17106 -10001 0.138187 0.894651 +7 13 0 0 0 -6.6971 -6.00169 -7.55801 -5.1702 -10001 0.152586 1.03539 +7 14 0 0 0 -6.76642 -6.02335 -7.62689 -5.1725 -10001 0.167346 1.0113 +7 15 0 0 0 -6.83729 -6.02812 -7.70592 -5.17107 -10001 0.182448 1.01352 +7 16 0 0 0 -6.90314 -6.04225 -7.76891 -5.17282 -10001 0.197877 0.995791 +7 17 0 0 0 -6.97163 -6.03905 -7.84265 -5.17087 -10001 0.213617 1.00328 +7 18 0 0 0 -7.03477 -6.04694 -7.90084 -5.17212 -10001 0.229655 0.990002 +7 19 0 0 0 -7.10137 -6.03778 -7.97024 -5.1697 -10001 0.245976 1.0009 +7 20 0 0 0 -7.16208 -6.0413 -8.01324 -5.18063 -10001 0.262568 0.988953 +7 21 0 0 0 -7.22701 -6.02792 -8.09022 -5.16763 -10001 0.279419 1.00339 +7 22 0 0 0 -7.28546 -6.02838 -8.12983 -5.17814 -10001 0.296518 0.993098 +7 23 0 0 0 -7.34264 -6.02781 -8.17913 -5.17834 -10001 0.313855 0.984724 +7 24 0 0 0 -7.4052 -6.01029 -8.24048 -5.17486 -10001 0.331419 0.99982 +7 25 0 0 0 -7.46022 -6.01209 -8.28716 -5.17468 -10001 0.349201 0.98749 +7 26 0 0 0 -7.52159 -5.98849 -8.34604 -5.17086 -10001 0.367192 1.00835 +7 27 0 0 0 -7.57479 -5.98472 -8.37912 -5.18053 -10001 0.385383 1.00018 +7 28 0 0 0 -7.62682 -5.98312 -8.4224 -5.17985 -10001 0.403768 0.990423 +7 29 0 0 0 -7.68616 -5.96167 -8.4782 -5.17553 -10001 0.422338 1.0075 +7 30 0 0 0 -7.73653 -5.95416 -8.50828 -5.1848 -10001 0.441086 1.0031 +7 31 0 0 0 -7.78581 -5.94882 -8.54877 -5.18366 -10001 0.460005 0.997121 +7 32 0 0 0 -7.84347 -5.92635 -8.602 -5.17889 -10001 0.479088 1.01481 +7 33 0 0 0 -7.89113 -5.92045 -8.64093 -5.17747 -10001 0.498331 1.00919 +7 34 0 0 0 -7.94786 -5.89747 -8.69266 -5.17246 -10001 0.517726 1.02728 +7 35 0 0 0 -7.99401 -5.89115 -8.71879 -5.18107 -10001 0.537269 1.02069 +8 1 0.00105215 0.00550918 -0.0530551 -6.13915 -6.49142 -7.0043 -5.55598 0.007528 0.114618 0.924855 +8 2 0.00111073 0.00389516 -0.0425679 -6.16024 -6.37156 -6.98356 -5.56428 0.014045 0.119541 1.01987 +8 3 0.00104429 0.00206542 -0.0295219 -6.27093 -6.37563 -7.09356 -5.56896 0.02096 0.126253 1.01978 +8 4 0.000965995 0.000635617 -0.019414 -6.39822 -6.3792 -7.23119 -5.56332 0.028255 0.133251 1.02095 +8 5 0.000859963 0.000728759 -0.0197542 -6.49816 -6.49742 -7.36634 -5.55741 0.035912 0.126989 0.923589 +8 6 0.000801805 -0.000253071 -0.0124894 -6.64187 -6.37762 -7.47049 -5.56447 0.043917 0.132732 1.01902 +8 7 0.000752189 -0.000964339 -0.0073895 -6.7507 -6.38174 -7.5802 -5.56805 0.052253 0.140655 1.01943 +8 8 0.000679891 -0.000754234 -0.00790006 -6.83178 -6.4956 -7.69379 -5.56134 0.060907 0.135828 0.922678 +8 9 0.00064526 -0.00125634 -0.00427033 -6.95281 -6.36733 -7.80102 -5.55442 0.069865 0.141808 1.04342 +8 10 0.000614094 -0.0016078 -0.00176389 -7.03812 -6.38488 -7.87841 -5.56051 0.079114 0.150803 1.01932 +8 11 0.000585301 -0.00184126 -6.44444e-05 -7.12197 -6.38858 -7.96392 -5.56318 0.088642 0.159464 1.02006 +8 12 0.000205787 0.00433973 -0.0268111 -7.20606 -6.37089 -8.05608 -5.55558 0.098438 0.12157 1.04258 +8 13 -0.000248185 0.0107724 -0.0501645 -7.27707 -6.38859 -8.12008 -5.56107 0.108491 0.135068 1.01872 +8 14 0.000406858 -0.000556856 -0.00347222 -7.34831 -6.39229 -8.19375 -5.56315 0.118791 0.148755 1.01966 +8 15 0 0 0 -7.42023 -6.45777 -8.27539 -5.55495 -10001 0.129329 0.947209 +8 16 0 0 0 -7.47083 -6.48835 -8.31882 -5.57004 -10001 0.140095 0.923422 +8 17 0 0 0 -7.52047 -6.51142 -8.39512 -5.56144 -10001 0.15108 0.920707 +8 18 0 0 0 -7.60426 -6.39292 -8.44477 -5.56609 -10001 0.162277 1.01654 +8 19 0 0 0 -7.66088 -6.39692 -8.50559 -5.56732 -10001 0.173677 1.01821 +8 20 0 0 0 -7.71638 -6.39919 -8.57562 -5.55823 -10001 0.185274 1.02174 +8 21 0 0 0 -7.76729 -6.41302 -8.61949 -5.5624 -10001 0.19706 1.00185 +8 22 0 0 0 -7.82101 -6.41126 -8.675 -5.56319 -10001 0.209028 1.00698 +8 23 0 0 0 -7.86985 -6.42174 -8.71572 -5.5671 -10001 0.221172 0.989737 +8 24 0 0 0 -7.92211 -6.41647 -8.76838 -5.56762 -10001 0.233485 0.996959 +8 25 0 0 0 -7.97379 -6.4172 -8.83094 -5.5578 -10001 0.245963 0.997379 +8 26 0 0 0 -8.02005 -6.4229 -8.86781 -5.5613 -10001 0.258599 0.983926 +8 27 0 0 0 -8.07057 -6.40697 -8.91686 -5.56144 -10001 0.271388 1.0009 +8 28 0 0 0 -8.11516 -6.41185 -8.95154 -5.56472 -10001 0.284325 0.987316 +8 29 0 0 0 -8.16458 -6.40063 -8.99858 -5.56464 -10001 0.297405 0.997627 +8 30 0 0 0 -8.20759 -6.40416 -9.03134 -5.56771 -10001 0.310624 0.984811 +8 31 0 0 0 -8.25601 -6.39142 -9.07661 -5.5674 -10001 0.323977 0.995858 +8 32 0 0 0 -8.30407 -6.37802 -9.13231 -5.55674 -10001 0.33746 1.00849 +8 33 0 0 0 -8.34501 -6.38354 -9.15136 -5.56977 -10001 0.351068 0.990875 +8 34 0 0 0 -8.39219 -6.36552 -9.20559 -5.55888 -10001 0.364798 1.00837 +8 35 0 0 0 -8.43176 -6.36675 -9.23447 -5.56143 -10001 0.378647 0.996761 +9 1 0.000590518 0.00324844 -0.0318344 -6.69897 -6.80252 -7.55 -5.89706 0.005869 0.112334 0.939898 +9 2 0.000618768 0.00251284 -0.0269293 -6.68516 -6.81737 -7.52406 -5.90635 0.010879 0.117593 0.92083 +9 3 0.000577334 0.00158497 -0.0199119 -6.78742 -6.83337 -7.63989 -5.90211 0.016142 0.123196 0.915392 +9 4 0.000530206 0.000828596 -0.014186 -6.94115 -6.70959 -7.76133 -5.9078 0.021648 0.126852 1.02294 +9 5 0.000488238 0.000251787 -0.00987367 -7.06296 -6.71172 -7.89122 -5.90318 0.027389 0.132412 1.02438 +9 6 0.00043448 0.000432994 -0.0109244 -7.16365 -6.80246 -8.01415 -5.89839 0.033357 0.123717 0.940733 +9 7 0.000405548 1.97678e-06 -0.00754392 -7.26262 -6.82258 -8.12949 -5.89345 0.039544 0.130398 0.932978 +9 8 0.000381028 -0.000325989 -0.00503717 -7.35591 -6.84029 -8.21343 -5.90157 0.045941 0.13726 0.913504 +9 9 0.000359889 -0.000573137 -0.00318136 -7.47843 -6.71381 -8.30411 -5.90646 0.052542 0.141126 1.02271 +9 10 0.000341321 -0.000756438 -0.00181289 -7.56527 -6.71581 -8.40015 -5.90102 0.059341 0.14758 1.02465 +9 11 0.000311999 -0.000598414 -0.00236772 -7.62796 -6.81863 -8.49118 -5.89545 0.066329 0.141197 0.935046 +9 12 0.000298446 -0.00074687 -0.00125072 -7.69756 -6.83914 -8.55343 -5.90301 0.073502 0.149096 0.914259 +9 13 0.000286005 -0.000854388 -0.000433389 -7.79817 -6.71648 -8.62495 -5.90735 0.080852 0.152949 1.02182 +9 14 0.000274394 -0.00092866 0.000156278 -7.86719 -6.71852 -8.70404 -5.90135 0.088375 0.159974 1.02407 +9 15 -0.00017373 0.0070419 -0.0355225 -7.91347 -6.8232 -8.78 -5.89523 0.096065 0.115133 0.933785 +9 16 0 0 0 -8.05976 -6.47684 -8.82875 -5.90228 -10001 0.103917 1.1 +9 17 0 0 0 -8.11459 -6.51043 -8.88819 -5.90613 -10001 0.111924 1.1 +9 18 0 0 0 -8.17151 -6.53953 -8.95644 -5.89962 -10001 0.120084 1.1 +9 19 0 0 0 -8.18749 -6.74393 -9.0226 -5.89303 -10001 0.12839 0.981453 +9 20 0 0 0 -8.229 -6.77105 -9.06242 -5.89962 -10001 0.136839 0.956378 +9 21 0 0 0 -8.26846 -6.79781 -9.11371 -5.90303 -10001 0.145426 0.944635 +9 22 0 0 0 -8.30643 -6.82595 -9.17455 -5.89608 -10001 0.154147 0.93359 +9 23 0 0 0 -8.34478 -6.85159 -9.20942 -5.90239 -10001 0.162999 0.910922 +9 24 0 0 0 -8.42009 -6.7351 -9.2562 -5.90551 -10001 0.171977 1.00786 +9 25 0 0 0 -8.4651 -6.73654 -9.31286 -5.89825 -10001 0.181077 1.0113 +9 26 0 0 0 -8.50586 -6.74983 -9.34382 -5.90429 -10001 0.190297 0.991038 +9 27 0 0 0 -8.54955 -6.73987 -9.39821 -5.89684 -10001 0.199633 1.00668 +9 28 0 0 0 -8.59243 -6.7381 -9.44029 -5.89959 -10001 0.209082 1.01115 +9 29 0 0 0 -8.63501 -6.73537 -9.49264 -5.89199 -10001 0.21864 1.01689 +9 30 0 0 0 -8.67286 -6.74589 -9.51952 -5.89766 -10001 0.228305 0.998147 +9 31 0 0 0 -8.71443 -6.74125 -9.55883 -5.90017 -10001 0.238073 1.00396 +9 32 0 0 0 -8.75562 -6.7357 -9.60859 -5.89231 -10001 0.247942 1.01136 +9 33 0 0 0 -8.7916 -6.74414 -9.633 -5.89775 -10001 0.257909 0.994102 +9 34 0 0 0 -8.83193 -6.73713 -9.66999 -5.90004 -10001 0.267972 1.00116 +9 35 0 0 0 -8.87196 -6.72942 -9.71757 -5.89195 -10001 0.278128 1.00972 +10 1 0.000353954 0.00198904 -0.019918 -7.19859 -7.08148 -8.041 -6.19732 0.004708 0.110642 0.952777 +10 2 0.00036895 0.00162712 -0.0174687 -7.18256 -7.09507 -8.03566 -6.19412 0.008685 0.114866 0.946887 +10 3 0.000342353 0.0011235 -0.0134716 -7.28502 -7.10733 -8.12352 -6.20394 0.01283 0.11922 0.928164 +10 4 0.000312686 0.000700685 -0.0100875 -7.40274 -7.12087 -8.25233 -6.20036 0.017138 0.12382 0.922954 +10 5 0.000286447 0.000369826 -0.00745846 -7.54815 -7.00683 -8.36741 -6.20692 0.021605 0.126695 1.0242 +10 6 0.000264263 0.000114363 -0.00545025 -7.66086 -7.00808 -8.48659 -6.20311 0.026224 0.131204 1.02579 +10 7 0.000235737 0.000269535 -0.00643264 -7.76047 -7.07502 -8.59815 -6.1992 0.030993 0.120727 0.956448 +10 8 0.000220555 6.33502e-05 -0.00473092 -7.85167 -7.0917 -8.70253 -6.19518 0.035907 0.126017 0.949065 +10 9 0.00020764 -9.93214e-05 -0.00341669 -7.93753 -7.1071 -8.77604 -6.20433 0.040961 0.131416 0.928822 +10 10 0.000196497 -0.000227294 -0.00239969 -8.01647 -7.12357 -8.86823 -6.20008 0.046153 0.137091 0.922334 +10 11 0.000186738 -0.000327311 -0.00161258 -8.12147 -7.00971 -8.94421 -6.20604 0.051477 0.140195 1.02372 +10 12 0.000178068 -0.000404609 -0.00100439 -8.19659 -7.02075 -9.02684 -6.20159 0.056931 0.145464 1.01354 +10 13 0.00016336 -0.000297917 -0.00146022 -8.25967 -7.0849 -9.10551 -6.19707 0.062511 0.13655 0.952709 +10 14 0.000156923 -0.000368088 -0.000906472 -8.31972 -7.1044 -9.18065 -6.19246 0.068214 0.142908 0.944062 +10 15 0.000151022 -0.000422215 -0.000478094 -8.37804 -7.12161 -9.22816 -6.20102 0.074036 0.149365 0.923457 +10 16 0.000145541 -0.000462871 -0.000149306 -8.46248 -7.02124 -9.2973 -6.19622 0.079974 0.152492 1.01187 +10 17 0.00014039 -0.000492236 0.000100367 -8.52087 -7.02265 -9.35265 -6.20163 0.086025 0.158281 1.0131 +10 18 0 0 0 -8.66377 -6.69062 -9.41686 -6.19665 -10001 0.092187 1.1 +10 19 0 0 0 -8.70936 -6.70205 -9.47895 -6.1916 -10001 0.098456 1.1 +10 20 0 0 0 -8.75347 -6.76445 -9.51461 -6.19975 -10001 0.104829 1.1 +10 21 0 0 0 -8.80137 -6.76136 -9.56178 -6.20487 -10001 0.111305 1.1 +10 22 0 0 0 -8.85019 -6.78781 -9.6185 -6.19955 -10001 0.11788 1.1 +10 23 0 0 0 -8.83621 -7.06261 -9.67373 -6.19418 -10001 0.124552 0.964416 +10 24 0 0 0 -8.88719 -7.05684 -9.70301 -6.20206 -10001 0.131319 0.954425 +10 25 0 0 0 -8.92727 -7.05093 -9.75556 -6.19653 -10001 0.138178 0.969449 +10 26 0 0 0 -8.96058 -7.0705 -9.79564 -6.20128 -10001 0.145127 0.960702 +10 27 0 0 0 -8.99207 -7.09458 -9.84583 -6.19562 -10001 0.152164 0.949719 +10 28 0 0 0 -9.02261 -7.11918 -9.89499 -6.1899 -10001 0.159286 0.938779 +10 29 0 0 0 -9.05404 -7.14016 -9.91858 -6.19742 -10001 0.166493 0.917052 +10 30 0 0 0 -9.11944 -7.01788 -9.95456 -6.20193 -10001 0.173781 1.02349 +10 31 0 0 0 -9.15634 -7.01879 -10.0009 -6.196 -10001 0.18115 1.02647 +10 32 0 0 0 -9.19275 -7.01913 -10.0465 -6.19003 -10001 0.188596 1.02969 +10 33 0 0 0 -9.2251 -7.03259 -10.0666 -6.19731 -10001 0.196119 1.0075 +10 34 0 0 0 -9.26054 -7.03162 -10.0994 -6.20159 -10001 0.203716 1.01064 +10 35 0 0 0 -9.29603 -7.03036 -10.1428 -6.19541 -10001 0.211387 1.0141 diff --git a/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL_30_01_23 b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL_30_01_23 new file mode 100644 index 0000000..ce10497 --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL_30_01_23 @@ -0,0 +1,315 @@ +2 1 0.655783 -3.41908 0 -0.356979 -1.6623 -0.940213 -1.10343 0.273385 0.576486 1.04359 -10001 +2 2 0.272282 -2.98381 0 -0.427091 -1.90992 -1.62905 -0.824439 0.548669 0.651255 1.1073 -10001 +2 3 0 0 0 -1.03534 -1.69 -2.15942 -0.757114 -10001 0.845727 1.20495 -10001 +2 4 0 0 0 -1.71285 -1.46249 -2.63081 -0.749062 -10001 1.1551 1.2867 -10001 +2 5 0 0 0 0 0 -3.44669 -0.557599 -10001 -10001 1.47226 -10001 +2 6 0 0 0 0 0 -4.43881 -0.303917 -10001 -10001 1.79471 -10001 +2 7 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 8 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 9 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 10 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 11 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 12 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 13 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 14 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 15 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 16 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 17 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 18 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 19 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 20 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 21 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 22 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 23 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 24 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 25 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 26 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 27 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 28 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 29 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 30 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 31 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 32 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 33 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 34 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 35 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 1 -1.4518 -3.88276 0 -2.07956 -2.80953 -2.8585 -2.14553 0.076573 0.584924 1.17311 -10001 +3 2 -1.46702 -4.0696 0 -2.1298 -2.89821 -2.97978 -2.16804 0.15691 0.565797 1.1641 -10001 +3 3 -1.67953 -3.99379 0 -2.30029 -2.96438 -3.20928 -2.18572 0.248837 0.603013 1.16739 -10001 +3 4 -1.91181 -3.92883 0 -2.49127 -3.01118 -3.45013 -2.19835 0.349275 0.631462 1.17964 -10001 +3 5 -2.13665 -3.87286 0 -2.63463 -3.09669 -3.64493 -2.23143 0.456179 0.641583 1.16762 -10001 +3 6 -2.37799 -3.76842 0 -2.82256 -3.11422 -3.8551 -2.24596 0.56813 0.679564 1.1892 -10001 +3 7 0 0 0 -3.02244 -3.1099 -4.02695 -2.27351 -10001 0.684104 1.20101 -10001 +3 8 0 0 0 -3.27962 -3.03873 -4.18826 -2.29891 -10001 0.803344 1.22819 -10001 +3 9 0 0 0 -3.5262 -2.97041 -4.34041 -2.32227 -10001 0.925276 1.25623 -10001 +3 10 0 0 0 -3.7631 -2.90557 -4.48463 -2.34372 -10001 1.04945 1.28419 -10001 +3 11 0 0 0 0 0 -4.55585 -2.40154 -10001 -10001 1.17553 -10001 +3 12 0 0 0 0 0 -4.81855 -2.34443 -10001 -10001 1.30322 -10001 +3 13 0 0 0 0 0 -5.05233 -2.30324 -10001 -10001 1.4323 -10001 +3 14 0 0 0 0 0 -5.29679 -2.25045 -10001 -10001 1.56258 -10001 +3 15 0 0 0 0 0 -5.53602 -2.20041 -10001 -10001 1.69392 -10001 +3 16 0 0 0 0 0 -5.74498 -2.16568 -10001 -10001 1.82617 -10001 +3 17 0 0 0 0 0 -5.97307 -2.11922 -10001 -10001 1.95924 -10001 +3 18 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 19 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 20 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 21 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 22 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 23 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 24 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 25 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 26 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 27 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 28 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 29 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 30 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 31 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 32 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 33 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 34 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 35 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 1 0.0383783 0.0394744 -0.743156 -2.92407 -4.34601 -3.93374 -3.29508 0.036156 0.142437 0.960739 -10001 +4 2 0.0423415 -0.0582897 -0.262128 -2.9449 -4.39688 -3.95993 -3.31956 0.07196 0.16849 0.94217 -10001 +4 3 0 0 0 -3.08729 -4.39902 -4.11829 -3.3347 -10001 0.112693 0.9687 -10001 +4 4 0 0 0 -3.23872 -4.45059 -4.30602 -3.33575 -10001 0.157531 0.95735 -10001 +4 5 0 0 0 -3.40255 -4.46635 -4.45445 -3.3584 -10001 0.20583 0.949409 -10001 +4 6 0 0 0 -3.57053 -4.4557 -4.60804 -3.36794 -10001 0.257076 0.953795 -10001 +4 7 0 0 0 -3.73761 -4.43073 -4.74231 -3.38525 -10001 0.310856 0.961002 -10001 +4 8 0 0 0 -3.91108 -4.37755 -4.89693 -3.38444 -10001 0.366831 0.992693 -10001 +4 9 0 0 0 -4.0722 -4.33924 -5.01821 -3.39728 -10001 0.424722 1.0043 -10001 +4 10 0 0 0 -4.22933 -4.29791 -5.13389 -3.40827 -10001 0.484295 1.01678 -10001 +4 11 0 0 0 -4.38088 -4.25646 -5.24462 -3.41757 -10001 0.545354 1.02963 -10001 +4 12 0 0 0 -4.52778 -4.21448 -5.35097 -3.42532 -10001 0.607734 1.04313 -10001 +4 13 0 0 0 -4.65364 -4.19192 -5.42478 -3.44819 -10001 0.671292 1.03686 -10001 +4 14 0 0 0 -4.79084 -4.14966 -5.52359 -3.45327 -10001 0.735906 1.05221 -10001 +4 15 0 0 0 -4.92451 -4.10784 -5.60624 -3.46848 -10001 0.80147 1.06626 -10001 +4 16 0 0 0 -5.05462 -4.06631 -5.69907 -3.47125 -10001 0.867893 1.083 -10001 +4 17 0 0 0 -5.18188 -4.0254 -5.78936 -3.47298 -10001 0.935095 1.09969 -10001 +4 18 0 0 0 0 0 -5.84775 -3.49079 -10001 -10001 1.003 -10001 +4 19 0 0 0 0 0 -5.9786 -3.46857 -10001 -10001 1.07156 -10001 +4 20 0 0 0 0 0 -6.1193 -3.43551 -10001 -10001 1.14071 -10001 +4 21 0 0 0 0 0 -6.25678 -3.40322 -10001 -10001 1.2104 -10001 +4 22 0 0 0 0 0 -6.37336 -3.38166 -10001 -10001 1.28059 -10001 +4 23 0 0 0 0 0 -6.50408 -3.35051 -10001 -10001 1.35124 -10001 +4 24 0 0 0 0 0 -6.63216 -3.32005 -10001 -10001 1.42231 -10001 +4 25 0 0 0 0 0 -6.74012 -3.30119 -10001 -10001 1.49378 -10001 +4 26 0 0 0 0 0 -6.86295 -3.27187 -10001 -10001 1.56561 -10001 +4 27 0 0 0 0 0 -6.98393 -3.24328 -10001 -10001 1.63778 -10001 +4 28 0 0 0 0 0 -7.08325 -3.2258 -10001 -10001 1.71027 -10001 +4 29 0 0 0 0 0 -7.19979 -3.19814 -10001 -10001 1.78305 -10001 +4 30 0 0 0 0 0 -7.29449 -3.18166 -10001 -10001 1.85611 -10001 +4 31 0 0 0 0 0 -7.40742 -3.15495 -10001 -10001 1.92942 -10001 +4 32 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 33 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 34 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 35 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +5 1 0.0115921 0.0275793 -0.312253 -3.96716 -5.02175 -4.8689 -4.09936 0.021237 0.136719 0.977614 -10001 +5 2 0.0124275 0.008105 -0.224179 -3.97901 -5.03544 -4.88749 -4.10351 0.041211 0.128219 0.974825 -10001 +5 3 0.0117252 -0.0079546 -0.129263 -4.11085 -5.03457 -5.03779 -4.10203 0.063478 0.132815 0.993988 -10001 +5 4 0.0111773 -0.0260391 -0.0237622 -4.25262 -5.06173 -5.18166 -4.11129 0.08778 0.18 0.977485 -10001 +5 5 -0.000514308 0.138672 -0.647959 -4.3919 -5.07462 -5.32322 -4.11954 0.113899 0.146932 0.975114 -10001 +5 6 0 0 0 -4.52649 -5.06796 -5.45829 -4.1263 -10001 0.141647 0.989525 -10001 +5 7 0 0 0 -4.64652 -5.09744 -5.5862 -4.13168 -10001 0.170861 0.972994 -10001 +5 8 0 0 0 -4.76663 -5.10741 -5.70734 -4.13579 -10001 0.2014 0.968186 -10001 +5 9 0 0 0 -4.88586 -5.10392 -5.82238 -4.13874 -10001 0.23314 0.970293 -10001 +5 10 0 0 0 -5.00384 -5.09119 -5.932 -4.14061 -10001 0.265974 0.976413 -10001 +5 11 0 0 0 -5.11933 -5.07369 -6.03684 -4.14149 -10001 0.299806 0.984246 -10001 +5 12 0 0 0 -5.23221 -5.05254 -6.13745 -4.14146 -10001 0.334552 0.993587 -10001 +5 13 0 0 0 -5.33461 -5.04621 -6.2085 -4.15511 -10001 0.370136 0.98069 -10001 +5 14 0 0 0 -5.44234 -5.01996 -6.30195 -4.15343 -10001 0.406492 0.99202 -10001 +5 15 0 0 0 -5.54791 -4.99207 -6.38069 -4.16144 -10001 0.443559 1.00259 -10001 +5 16 0 0 0 -5.65138 -4.96304 -6.46839 -4.15835 -10001 0.481285 1.01531 -10001 +5 17 0 0 0 -5.75285 -4.93321 -6.55365 -4.15463 -10001 0.51962 1.02855 -10001 +5 18 0 0 0 -5.83884 -4.91931 -6.61046 -4.16501 -10001 0.55852 1.02297 -10001 +5 19 0 0 0 -5.93567 -4.88844 -6.67958 -4.17065 -10001 0.597947 1.03639 -10001 +5 20 0 0 0 -6.03077 -4.85737 -6.75866 -4.16523 -10001 0.637864 1.05164 -10001 +5 21 0 0 0 -6.11047 -4.84458 -6.80956 -4.17415 -10001 0.678238 1.04275 -10001 +5 22 0 0 0 -6.20185 -4.81334 -6.87337 -4.17837 -10001 0.719041 1.05757 -10001 +5 23 0 0 0 -6.2768 -4.80058 -6.92097 -4.18651 -10001 0.760243 1.04902 -10001 +5 24 0 0 0 -6.36496 -4.76942 -6.98188 -4.18993 -10001 0.801821 1.06458 -10001 +5 25 0 0 0 -6.45198 -4.73849 -7.05348 -4.18224 -10001 0.843751 1.08134 -10001 +5 26 0 0 0 -6.52116 -4.72586 -7.09706 -4.18925 -10001 0.886012 1.07321 -10001 +5 27 0 0 0 -6.60552 -4.69518 -7.15428 -4.19159 -10001 0.928585 1.0897 -10001 +5 28 0 0 0 0 0 -7.16811 -4.21343 -10001 -10001 0.971453 -10001 +5 29 0 0 0 0 0 -7.25065 -4.19971 -10001 -10001 1.0146 -10001 +5 30 0 0 0 0 0 -7.34369 -4.17539 -10001 -10001 1.058 -10001 +5 31 0 0 0 0 0 -7.41972 -4.16028 -10001 -10001 1.10166 -10001 +5 32 0 0 0 0 0 -7.50967 -4.13643 -10001 -10001 1.14555 -10001 +5 33 0 0 0 0 0 -7.59846 -4.1129 -10001 -10001 1.18966 -10001 +5 34 0 0 0 0 0 -7.67206 -4.10013 -10001 -10001 1.23398 -10001 +5 35 0 0 0 0 0 -7.75837 -4.07713 -10001 -10001 1.2785 -10001 +6 1 0.00446513 0.0172319 -0.168673 -4.82013 -5.55143 -5.67614 -4.69474 0.014055 0.119464 0.999206 -10001 +6 2 0.00484376 0.00672344 -0.107508 -4.82345 -5.5617 -5.68771 -4.69684 0.026789 0.131896 0.999296 -10001 +6 3 0.00449413 0.00278732 -0.0856669 -4.94541 -5.56201 -5.80415 -4.70149 0.040704 0.128996 0.997933 -10001 +6 4 0.0042419 -0.00454978 -0.0388836 -5.0814 -5.57186 -5.95092 -4.7016 0.055706 0.142576 0.999141 -10001 +6 5 0.00384229 -0.00596132 -0.0272056 -5.21562 -5.57297 -6.08213 -4.70447 0.071711 0.142231 0.997713 -10001 +6 6 0.00362127 -0.00944918 -0.00545778 -5.34161 -5.58118 -6.22006 -4.70292 0.088643 0.140411 1.00021 -10001 +6 7 -0.000097235 0.0472865 -0.234954 -5.45813 -5.5811 -6.33728 -4.70424 0.106435 0.134659 1.00261 -10001 +6 8 0 0 0 -5.53234 -5.78231 -6.461 -4.70126 -10001 0.125025 0.859041 -10001 +6 9 0 0 0 -5.67635 -5.56513 -6.55402 -4.71123 -10001 0.144357 1.02784 -10001 +6 10 0 0 0 -5.76687 -5.59398 -6.6525 -4.71062 -10001 0.164381 1.00257 -10001 +6 11 0 0 0 -5.86057 -5.60357 -6.75737 -4.70399 -10001 0.18505 0.99691 -10001 +6 12 0 0 0 -5.94749 -5.6147 -6.83551 -4.71229 -10001 0.206324 0.984068 -10001 +6 13 0 0 0 -6.03264 -5.62013 -6.92334 -4.71192 -10001 0.228163 0.98072 -10001 +6 14 0 0 0 -6.116 -5.62116 -6.99418 -4.71935 -10001 0.250532 0.973794 -10001 +6 15 0 0 0 -6.20323 -5.60288 -7.08428 -4.71058 -10001 0.273399 0.987401 -10001 +6 16 0 0 0 -6.28356 -5.5974 -7.14927 -4.71714 -10001 0.296735 0.983463 -10001 +6 17 0 0 0 -6.36217 -5.58984 -7.21172 -4.72335 -10001 0.320512 0.980449 -10001 +6 18 0 0 0 -6.4391 -5.58061 -7.28319 -4.719 -10001 0.344706 0.979679 -10001 +6 19 0 0 0 -6.52194 -5.55318 -7.36624 -4.71054 -10001 0.369291 1.00196 -10001 +6 20 0 0 0 -6.59614 -5.54135 -7.42246 -4.71566 -10001 0.394248 1.00077 -10001 +6 21 0 0 0 -6.66668 -5.52599 -7.47691 -4.7205 -10001 0.419556 1.00589 -10001 +6 22 0 0 0 -6.73761 -5.51257 -7.52972 -4.72507 -10001 0.445197 1.00586 -10001 +6 23 0 0 0 -6.80709 -5.4986 -7.58104 -4.72937 -10001 0.471152 1.00615 -10001 +6 24 0 0 0 -6.87516 -5.48417 -7.64242 -4.72311 -10001 0.497407 1.00815 -10001 +6 25 0 0 0 -6.94179 -5.4706 -7.69104 -4.72688 -10001 0.523946 1.00744 -10001 +6 26 0 0 0 -7.00726 -5.45431 -7.73845 -4.73042 -10001 0.550755 1.01009 -10001 +6 27 0 0 0 -7.08281 -5.42157 -7.81006 -4.71957 -10001 0.577821 1.03597 -10001 +6 28 0 0 0 -7.1462 -5.40604 -7.85531 -4.72263 -10001 0.605132 1.0376 -10001 +6 29 0 0 0 -7.20843 -5.39039 -7.89957 -4.72548 -10001 0.632676 1.03945 -10001 +6 30 0 0 0 -7.26954 -5.37465 -7.94289 -4.72814 -10001 0.660442 1.04151 -10001 +6 31 0 0 0 -7.32973 -5.35893 -7.98531 -4.73062 -10001 0.688421 1.0434 -10001 +6 32 0 0 0 -7.38864 -5.34302 -8.02689 -4.73291 -10001 0.716602 1.04614 -10001 +6 33 0 0 0 -7.4467 -5.32716 -8.06767 -4.73503 -10001 0.744978 1.0487 -10001 +6 34 0 0 0 -7.50385 -5.3113 -8.1077 -4.73699 -10001 0.773539 1.05142 -10001 +6 35 0 0 0 -7.56018 -5.29549 -8.14701 -4.73878 -10001 0.802277 1.05411 -10001 +7 1 0.00204324 0.00967897 -0.0925583 -5.54218 -5.98592 -6.36827 -5.17207 0.010025 0.115677 1.01503 -10001 +7 2 0.00218071 0.00578931 -0.0683278 -5.53932 -5.99362 -6.37894 -5.16592 0.018871 0.124217 1.0144 -10001 +7 3 0.00207202 0.0018879 -0.0425477 -5.65413 -5.99969 -6.49655 -5.16898 0.028379 0.133233 1.01409 -10001 +7 4 0.00185978 0.00132242 -0.0388186 -5.79057 -5.98156 -6.64189 -5.16168 0.03851 0.127115 1.03833 -10001 +7 5 0.00173747 -0.00117352 -0.0215614 -5.91452 -6.00215 -6.76086 -5.16718 0.049229 0.137463 1.01362 -10001 +7 6 0.00156314 -0.00123258 -0.0196422 -6.00179 -6.15341 -6.88605 -5.16882 0.060502 0.13623 0.898099 -10001 +7 7 0.00147595 -0.00274818 -0.00923944 -6.14915 -6.00449 -6.99066 -5.17351 0.072297 0.143827 1.01267 -10001 +7 8 0.00139669 -0.00372717 -0.00267967 -6.25366 -6.0115 -7.10137 -5.17435 0.084587 0.154879 1.0126 -10001 +7 9 0.000791551 0.00531051 -0.0414773 -6.35685 -5.99438 -7.21674 -5.16487 0.097345 0.123728 1.03662 -10001 +7 10 0.00074311 0.00360369 -0.0290018 -6.44486 -6.0152 -7.29133 -5.1784 0.110546 0.135187 1.01156 -10001 +7 11 0 0 0 -6.52636 -6.125 -7.39618 -5.16817 -10001 0.124167 0.90907 -10001 +7 12 0 0 0 -6.59072 -6.1566 -7.47244 -5.17106 -10001 0.138187 0.894651 -10001 +7 13 0 0 0 -6.6971 -6.00169 -7.55801 -5.1702 -10001 0.152586 1.03539 -10001 +7 14 0 0 0 -6.76642 -6.02335 -7.62689 -5.1725 -10001 0.167346 1.0113 -10001 +7 15 0 0 0 -6.83729 -6.02812 -7.70592 -5.17107 -10001 0.182448 1.01352 -10001 +7 16 0 0 0 -6.90314 -6.04225 -7.76891 -5.17282 -10001 0.197877 0.995791 -10001 +7 17 0 0 0 -6.97163 -6.03905 -7.84265 -5.17087 -10001 0.213617 1.00328 -10001 +7 18 0 0 0 -7.03477 -6.04694 -7.90084 -5.17212 -10001 0.229655 0.990002 -10001 +7 19 0 0 0 -7.10137 -6.03778 -7.97024 -5.1697 -10001 0.245976 1.0009 -10001 +7 20 0 0 0 -7.16208 -6.0413 -8.01324 -5.18063 -10001 0.262568 0.988953 -10001 +7 21 0 0 0 -7.22701 -6.02792 -8.09022 -5.16763 -10001 0.279419 1.00339 -10001 +7 22 0 0 0 -7.28546 -6.02838 -8.12983 -5.17814 -10001 0.296518 0.993098 -10001 +7 23 0 0 0 -7.34264 -6.02781 -8.17913 -5.17834 -10001 0.313855 0.984724 -10001 +7 24 0 0 0 -7.4052 -6.01029 -8.24048 -5.17486 -10001 0.331419 0.99982 -10001 +7 25 0 0 0 -7.46022 -6.01209 -8.28716 -5.17468 -10001 0.349201 0.98749 -10001 +7 26 0 0 0 -7.52159 -5.98849 -8.34604 -5.17086 -10001 0.367192 1.00835 -10001 +7 27 0 0 0 -7.57479 -5.98472 -8.37912 -5.18053 -10001 0.385383 1.00018 -10001 +7 28 0 0 0 -7.62682 -5.98312 -8.4224 -5.17985 -10001 0.403768 0.990423 -10001 +7 29 0 0 0 -7.68616 -5.96167 -8.4782 -5.17553 -10001 0.422338 1.0075 -10001 +7 30 0 0 0 -7.73653 -5.95416 -8.50828 -5.1848 -10001 0.441086 1.0031 -10001 +7 31 0 0 0 -7.78581 -5.94882 -8.54877 -5.18366 -10001 0.460005 0.997121 -10001 +7 32 0 0 0 -7.84347 -5.92635 -8.602 -5.17889 -10001 0.479088 1.01481 -10001 +7 33 0 0 0 -7.89113 -5.92045 -8.64093 -5.17747 -10001 0.498331 1.00919 -10001 +7 34 0 0 0 -7.94786 -5.89747 -8.69266 -5.17246 -10001 0.517726 1.02728 -10001 +7 35 0 0 0 -7.99401 -5.89115 -8.71879 -5.18107 -10001 0.537269 1.02069 -10001 +8 1 0.00105215 0.00550918 -0.0530551 -6.13915 -6.49142 -7.0043 -5.55598 0.007528 0.114618 0.924855 -10001 +8 2 0.00111073 0.00389516 -0.0425679 -6.16024 -6.37156 -6.98356 -5.56428 0.014045 0.119541 1.01987 -10001 +8 3 0.00104429 0.00206542 -0.0295219 -6.27093 -6.37563 -7.09356 -5.56896 0.02096 0.126253 1.01978 -10001 +8 4 0.000965995 0.000635617 -0.019414 -6.39822 -6.3792 -7.23119 -5.56332 0.028255 0.133251 1.02095 -10001 +8 5 0.000859963 0.000728759 -0.0197542 -6.49816 -6.49742 -7.36634 -5.55741 0.035912 0.126989 0.923589 -10001 +8 6 0.000801805 -0.000253071 -0.0124894 -6.64187 -6.37762 -7.47049 -5.56447 0.043917 0.132732 1.01902 -10001 +8 7 0.000752189 -0.000964339 -0.0073895 -6.7507 -6.38174 -7.5802 -5.56805 0.052253 0.140655 1.01943 -10001 +8 8 0.000679891 -0.000754234 -0.00790006 -6.83178 -6.4956 -7.69379 -5.56134 0.060907 0.135828 0.922678 -10001 +8 9 0.00064526 -0.00125634 -0.00427033 -6.95281 -6.36733 -7.80102 -5.55442 0.069865 0.141808 1.04342 -10001 +8 10 0.000614094 -0.0016078 -0.00176389 -7.03812 -6.38488 -7.87841 -5.56051 0.079114 0.150803 1.01932 -10001 +8 11 0.000585301 -0.00184126 -0.0000644444 -7.12197 -6.38858 -7.96392 -5.56318 0.088642 0.159464 1.02006 -10001 +8 12 0.000205787 0.00433973 -0.0268111 -7.20606 -6.37089 -8.05608 -5.55558 0.098438 0.12157 1.04258 -10001 +8 13 -0.000248185 0.0107724 -0.0501645 -7.27707 -6.38859 -8.12008 -5.56107 0.108491 0.135068 1.01872 -10001 +8 14 0.000406858 -0.000556856 -0.00347222 -7.34831 -6.39229 -8.19375 -5.56315 0.118791 0.148755 1.01966 -10001 +8 15 0 0 0 -7.42023 -6.45777 -8.27539 -5.55495 -10001 0.129329 0.947209 -10001 +8 16 0 0 0 -7.47083 -6.48835 -8.31882 -5.57004 -10001 0.140095 0.923422 -10001 +8 17 0 0 0 -7.52047 -6.51142 -8.39512 -5.56144 -10001 0.15108 0.920707 -10001 +8 18 0 0 0 -7.60426 -6.39292 -8.44477 -5.56609 -10001 0.162277 1.01654 -10001 +8 19 0 0 0 -7.66088 -6.39692 -8.50559 -5.56732 -10001 0.173677 1.01821 -10001 +8 20 0 0 0 -7.71638 -6.39919 -8.57562 -5.55823 -10001 0.185274 1.02174 -10001 +8 21 0 0 0 -7.76729 -6.41302 -8.61949 -5.5624 -10001 0.19706 1.00185 -10001 +8 22 0 0 0 -7.82101 -6.41126 -8.675 -5.56319 -10001 0.209028 1.00698 -10001 +8 23 0 0 0 -7.86985 -6.42174 -8.71572 -5.5671 -10001 0.221172 0.989737 -10001 +8 24 0 0 0 -7.92211 -6.41647 -8.76838 -5.56762 -10001 0.233485 0.996959 -10001 +8 25 0 0 0 -7.97379 -6.4172 -8.83094 -5.5578 -10001 0.245963 0.997379 -10001 +8 26 0 0 0 -8.02005 -6.4229 -8.86781 -5.5613 -10001 0.258599 0.983926 -10001 +8 27 0 0 0 -8.07057 -6.40697 -8.91686 -5.56144 -10001 0.271388 1.0009 -10001 +8 28 0 0 0 -8.11516 -6.41185 -8.95154 -5.56472 -10001 0.284325 0.987316 -10001 +8 29 0 0 0 -8.16458 -6.40063 -8.99858 -5.56464 -10001 0.297405 0.997627 -10001 +8 30 0 0 0 -8.20759 -6.40416 -9.03134 -5.56771 -10001 0.310624 0.984811 -10001 +8 31 0 0 0 -8.25601 -6.39142 -9.07661 -5.5674 -10001 0.323977 0.995858 -10001 +8 32 0 0 0 -8.30407 -6.37802 -9.13231 -5.55674 -10001 0.33746 1.00849 -10001 +8 33 0 0 0 -8.34501 -6.38354 -9.15136 -5.56977 -10001 0.351068 0.990875 -10001 +8 34 0 0 0 -8.39219 -6.36552 -9.20559 -5.55888 -10001 0.364798 1.00837 -10001 +8 35 0 0 0 -8.43176 -6.36675 -9.23447 -5.56143 -10001 0.378647 0.996761 -10001 +9 1 0.000590518 0.00324844 -0.0318344 -6.69897 -6.80252 -7.55 -5.89706 0.005869 0.112334 0.939898 -10001 +9 2 0.000618768 0.00251284 -0.0269293 -6.68516 -6.81737 -7.52406 -5.90635 0.010879 0.117593 0.92083 -10001 +9 3 0.000577334 0.00158497 -0.0199119 -6.78742 -6.83337 -7.63989 -5.90211 0.016142 0.123196 0.915392 -10001 +9 4 0.000530206 0.000828596 -0.014186 -6.94115 -6.70959 -7.76133 -5.9078 0.021648 0.126852 1.02294 -10001 +9 5 0.000488238 0.000251787 -0.00987367 -7.06296 -6.71172 -7.89122 -5.90318 0.027389 0.132412 1.02438 -10001 +9 6 0.00043448 0.000432994 -0.0109244 -7.16365 -6.80246 -8.01415 -5.89839 0.033357 0.123717 0.940733 -10001 +9 7 0.000405548 0.00000197678 -0.00754392 -7.26262 -6.82258 -8.12949 -5.89345 0.039544 0.130398 0.932978 -10001 +9 8 0.000381028 -0.000325989 -0.00503717 -7.35591 -6.84029 -8.21343 -5.90157 0.045941 0.13726 0.913504 -10001 +9 9 0.000359889 -0.000573137 -0.00318136 -7.47843 -6.71381 -8.30411 -5.90646 0.052542 0.141126 1.02271 -10001 +9 10 0.000341321 -0.000756438 -0.00181289 -7.56527 -6.71581 -8.40015 -5.90102 0.059341 0.14758 1.02465 -10001 +9 11 0.000311999 -0.000598414 -0.00236772 -7.62796 -6.81863 -8.49118 -5.89545 0.066329 0.141197 0.935046 -10001 +9 12 0.000298446 -0.00074687 -0.00125072 -7.69756 -6.83914 -8.55343 -5.90301 0.073502 0.149096 0.914259 -10001 +9 13 0.000286005 -0.000854388 -0.000433389 -7.79817 -6.71648 -8.62495 -5.90735 0.080852 0.152949 1.02182 -10001 +9 14 0.000274394 -0.00092866 0.000156278 -7.86719 -6.71852 -8.70404 -5.90135 0.088375 0.159974 1.02407 -10001 +9 15 -0.00017373 0.0070419 -0.0355225 -7.91347 -6.8232 -8.78 -5.89523 0.096065 0.115133 0.933785 -10001 +9 16 0 0 0 -8.05976 -6.47684 -8.82875 -5.90228 -10001 0.103917 1.1 -10001 +9 17 0 0 0 -8.11459 -6.51043 -8.88819 -5.90613 -10001 0.111924 1.1 -10001 +9 18 0 0 0 -8.17151 -6.53953 -8.95644 -5.89962 -10001 0.120084 1.1 -10001 +9 19 0 0 0 -8.18749 -6.74393 -9.0226 -5.89303 -10001 0.12839 0.981453 -10001 +9 20 0 0 0 -8.229 -6.77105 -9.06242 -5.89962 -10001 0.136839 0.956378 -10001 +9 21 0 0 0 -8.26846 -6.79781 -9.11371 -5.90303 -10001 0.145426 0.944635 -10001 +9 22 0 0 0 -8.30643 -6.82595 -9.17455 -5.89608 -10001 0.154147 0.93359 -10001 +9 23 0 0 0 -8.34478 -6.85159 -9.20942 -5.90239 -10001 0.162999 0.910922 -10001 +9 24 0 0 0 -8.42009 -6.7351 -9.2562 -5.90551 -10001 0.171977 1.00786 -10001 +9 25 0 0 0 -8.4651 -6.73654 -9.31286 -5.89825 -10001 0.181077 1.0113 -10001 +9 26 0 0 0 -8.50586 -6.74983 -9.34382 -5.90429 -10001 0.190297 0.991038 -10001 +9 27 0 0 0 -8.54955 -6.73987 -9.39821 -5.89684 -10001 0.199633 1.00668 -10001 +9 28 0 0 0 -8.59243 -6.7381 -9.44029 -5.89959 -10001 0.209082 1.01115 -10001 +9 29 0 0 0 -8.63501 -6.73537 -9.49264 -5.89199 -10001 0.21864 1.01689 -10001 +9 30 0 0 0 -8.67286 -6.74589 -9.51952 -5.89766 -10001 0.228305 0.998147 -10001 +9 31 0 0 0 -8.71443 -6.74125 -9.55883 -5.90017 -10001 0.238073 1.00396 -10001 +9 32 0 0 0 -8.75562 -6.7357 -9.60859 -5.89231 -10001 0.247942 1.01136 -10001 +9 33 0 0 0 -8.7916 -6.74414 -9.633 -5.89775 -10001 0.257909 0.994102 -10001 +9 34 0 0 0 -8.83193 -6.73713 -9.66999 -5.90004 -10001 0.267972 1.00116 -10001 +9 35 0 0 0 -8.87196 -6.72942 -9.71757 -5.89195 -10001 0.278128 1.00972 -10001 +10 1 0.000353954 0.00198904 -0.019918 -7.19859 -7.08148 -8.041 -6.19732 0.004708 0.110642 0.952777 -10001 +10 2 0.00036895 0.00162712 -0.0174687 -7.18256 -7.09507 -8.03566 -6.19412 0.008685 0.114866 0.946887 -10001 +10 3 0.000342353 0.0011235 -0.0134716 -7.28502 -7.10733 -8.12352 -6.20394 0.01283 0.11922 0.928164 -10001 +10 4 0.000312686 0.000700685 -0.0100875 -7.40274 -7.12087 -8.25233 -6.20036 0.017138 0.12382 0.922954 -10001 +10 5 0.000286447 0.000369826 -0.00745846 -7.54815 -7.00683 -8.36741 -6.20692 0.021605 0.126695 1.0242 -10001 +10 6 0.000264263 0.000114363 -0.00545025 -7.66086 -7.00808 -8.48659 -6.20311 0.026224 0.131204 1.02579 -10001 +10 7 0.000235737 0.000269535 -0.00643264 -7.76047 -7.07502 -8.59815 -6.1992 0.030993 0.120727 0.956448 -10001 +10 8 0.000220555 0.0000633502 -0.00473092 -7.85167 -7.0917 -8.70253 -6.19518 0.035907 0.126017 0.949065 -10001 +10 9 0.00020764 -0.0000993214 -0.00341669 -7.93753 -7.1071 -8.77604 -6.20433 0.040961 0.131416 0.928822 -10001 +10 10 0.000196497 -0.000227294 -0.00239969 -8.01647 -7.12357 -8.86823 -6.20008 0.046153 0.137091 0.922334 -10001 +10 11 0.000186738 -0.000327311 -0.00161258 -8.12147 -7.00971 -8.94421 -6.20604 0.051477 0.140195 1.02372 -10001 +10 12 0.000178068 -0.000404609 -0.00100439 -8.19659 -7.02075 -9.02684 -6.20159 0.056931 0.145464 1.01354 -10001 +10 13 0.00016336 -0.000297917 -0.00146022 -8.25967 -7.0849 -9.10551 -6.19707 0.062511 0.13655 0.952709 -10001 +10 14 0.000156923 -0.000368088 -0.000906472 -8.31972 -7.1044 -9.18065 -6.19246 0.068214 0.142908 0.944062 -10001 +10 15 0.000151022 -0.000422215 -0.000478094 -8.37804 -7.12161 -9.22816 -6.20102 0.074036 0.149365 0.923457 -10001 +10 16 0.000145541 -0.000462871 -0.000149306 -8.46248 -7.02124 -9.2973 -6.19622 0.079974 0.152492 1.01187 -10001 +10 17 0.00014039 -0.000492236 0.000100367 -8.52087 -7.02265 -9.35265 -6.20163 0.086025 0.158281 1.0131 -10001 +10 18 0 0 0 -8.66377 -6.69062 -9.41686 -6.19665 -10001 0.092187 1.1 -10001 +10 19 0 0 0 -8.70936 -6.70205 -9.47895 -6.1916 -10001 0.098456 1.1 -10001 +10 20 0 0 0 -8.75347 -6.76445 -9.51461 -6.19975 -10001 0.104829 1.1 -10001 +10 21 0 0 0 -8.80137 -6.76136 -9.56178 -6.20487 -10001 0.111305 1.1 -10001 +10 22 0 0 0 -8.85019 -6.78781 -9.6185 -6.19955 -10001 0.11788 1.1 -10001 +10 23 0 0 0 -8.83621 -7.06261 -9.67373 -6.19418 -10001 0.124552 0.964416 -10001 +10 24 0 0 0 -8.88719 -7.05684 -9.70301 -6.20206 -10001 0.131319 0.954425 -10001 +10 25 0 0 0 -8.92727 -7.05093 -9.75556 -6.19653 -10001 0.138178 0.969449 -10001 +10 26 0 0 0 -8.96058 -7.0705 -9.79564 -6.20128 -10001 0.145127 0.960702 -10001 +10 27 0 0 0 -8.99207 -7.09458 -9.84583 -6.19562 -10001 0.152164 0.949719 -10001 +10 28 0 0 0 -9.02261 -7.11918 -9.89499 -6.1899 -10001 0.159286 0.938779 -10001 +10 29 0 0 0 -9.05404 -7.14016 -9.91858 -6.19742 -10001 0.166493 0.917052 -10001 +10 30 0 0 0 -9.11944 -7.01788 -9.95456 -6.20193 -10001 0.173781 1.02349 -10001 +10 31 0 0 0 -9.15634 -7.01879 -10.0009 -6.196 -10001 0.18115 1.02647 -10001 +10 32 0 0 0 -9.19275 -7.01913 -10.0465 -6.19003 -10001 0.188596 1.02969 -10001 +10 33 0 0 0 -9.2251 -7.03259 -10.0666 -6.19731 -10001 0.196119 1.0075 -10001 +10 34 0 0 0 -9.26054 -7.03162 -10.0994 -6.20159 -10001 0.203716 1.01064 -10001 +10 35 0 0 0 -9.29603 -7.03036 -10.1428 -6.19541 -10001 0.211387 1.0141 -10001 diff --git a/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT new file mode 120000 index 0000000..7fe55d9 --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT @@ -0,0 +1 @@ +KPlusLambda_Param_sigT_25_01_23 \ No newline at end of file diff --git a/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT_25_01_23 b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT_25_01_23 new file mode 100644 index 0000000..dfd772e --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT_25_01_23 @@ -0,0 +1,315 @@ +2 1 0 0 0 0.945729 -0.646697 0.0582164 0.00275771 -0.967463 -10001 0.273385 0.8 +2 2 0 0 0 0.380195 -0.0558469 -0.137423 -0.634163 -0.953446 -10001 0.548669 0.639022 +2 3 0 0 0 0 0 0 -1.07208 -0.908354 -10001 -10001 0.845727 +2 4 0 0 0 0 0 0 -1.43885 -0.830034 -10001 -10001 1.1551 +2 5 0 0 0 0 0 0 -1.72983 -0.763185 -10001 -10001 1.47226 +2 6 0 0 0 0 0 0 -2.00222 -0.686361 -10001 -10001 1.79471 +2 7 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 8 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 9 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 10 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 11 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 12 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 13 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 14 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 15 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 16 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 17 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 18 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 19 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 20 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 21 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 22 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 23 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 24 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 25 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 26 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 27 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 28 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 29 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 30 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 31 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 32 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 33 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 34 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 35 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 1 0.123858 0.242215 -0.550292 0.181927 -0.103624 -0.070563 -1.09696 -2.08705 0.076573 0.266221 0.619883 +3 2 0.0248069 0.309813 -0.576556 0.0746266 -0.00695443 -0.0654923 -1.84345 -2.02201 0.15691 0.3 0.630166 +3 3 0 0 0 0.027574 0.0536144 -0.0870338 -2.34912 -2.0051 -10001 0.248837 0.623177 +3 4 0 0 0 0.0180297 0.0328078 -0.0519166 -2.73847 -1.98581 -10001 0.349275 0.653679 +3 5 0 0 0 0.0160675 0.0108883 -0.0242852 -3.03562 -1.98007 -10001 0.456179 0.707111 +3 6 0 0 0 0.0146628 0.000361895 -0.0115129 -3.28263 -1.96952 -10001 0.56813 0.749407 +3 7 0 0 0 0 0 0 -3.5026 -1.94746 -10001 -10001 0.684104 +3 8 0 0 0 0 0 0 -3.62013 -1.98609 -10001 -10001 0.803344 +3 9 0 0 0 0 0 0 -3.73523 -2.00689 -10001 -10001 0.925276 +3 10 0 0 0 0 0 0 -3.84876 -2.01458 -10001 -10001 1.04945 +3 11 0 0 0 0 0 0 -3.96197 -2.01269 -10001 -10001 1.17553 +3 12 0 0 0 0 0 0 -4.07435 -2.00303 -10001 -10001 1.30322 +3 13 0 0 0 0 0 0 -4.17854 -1.99362 -10001 -10001 1.4323 +3 14 0 0 0 0 0 0 -4.28952 -1.97545 -10001 -10001 1.56258 +3 15 0 0 0 0 0 0 -4.40046 -1.95413 -10001 -10001 1.69392 +3 16 0 0 0 0 0 0 -4.50067 -1.93616 -10001 -10001 1.82617 +3 17 0 0 0 0 0 0 -4.61083 -1.91079 -10001 -10001 1.95924 +3 18 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 19 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 20 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 21 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 22 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 23 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 24 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 25 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 26 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 27 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 28 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 29 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 30 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 31 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 32 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 33 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 34 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 35 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 1 0.0310867 0.236702 -0.628698 0.0778503 -0.10845 0.0328606 -1.93958 -2.93704 0.036156 0.260863 0.624825 +4 2 0.00721837 0.163191 -0.391439 0.0329599 -0.0334047 -0.00191791 -2.64036 -2.92719 0.07196 0.252356 0.60323 +4 3 -0.000723741 0.118713 -0.253025 0.0174864 -0.0134347 -0.00590188 -3.16281 -2.90884 0.112693 0.267372 0.613253 +4 4 -0.00343994 0.0880702 -0.168057 0.0103945 -0.00552035 -0.00615612 -3.57105 -2.89974 0.157531 0.289037 0.626983 +4 5 0 0 0 0.00363137 0.0107038 -0.0181078 -3.90583 -2.89002 -10001 0.20583 0.6 +4 6 0 0 0 0.00281031 0.00695038 -0.0120535 -4.18901 -2.87805 -10001 0.257076 0.605329 +4 7 0 0 0 0.00244489 0.00402856 -0.00778087 -4.42845 -2.86959 -10001 0.310856 0.62499 +4 8 0 0 0 0.00250432 0.000913712 -0.00384553 -4.62408 -2.87228 -10001 0.366831 0.663603 +4 9 0 0 0 0.00239097 -0.00045494 -0.00204923 -4.80124 -2.86855 -10001 0.424722 0.688131 +4 10 0 0 0 0.00230861 -0.00138832 -0.000849015 -4.95671 -2.86627 -10001 0.484295 0.714499 +4 11 0 0 0 0.00223073 -0.00198802 -7.1125e-05 -5.09395 -2.86515 -10001 0.545354 0.742549 +4 12 0 0 0 0.00214657 -0.00233895 0.000411778 -5.21581 -2.86511 -10001 0.607734 0.772081 +4 13 0 0 0 0 0 0 -5.35827 -2.835 -10001 -10001 0.671292 +4 14 0 0 0 0 0 0 -5.42217 -2.86788 -10001 -10001 0.735906 +4 15 0 0 0 0 0 0 -5.48733 -2.88904 -10001 -10001 0.80147 +4 16 0 0 0 0 0 0 -5.5193 -2.93951 -10001 -10001 0.867893 +4 17 0 0 0 0 0 0 -5.60226 -2.9276 -10001 -10001 0.935095 +4 18 0 0 0 0 0 0 -5.66569 -2.9349 -10001 -10001 1.003 +4 19 0 0 0 0 0 0 -5.72399 -2.94232 -10001 -10001 1.07156 +4 20 0 0 0 0 0 0 -5.78669 -2.94344 -10001 -10001 1.14071 +4 21 0 0 0 0 0 0 -5.84962 -2.94194 -10001 -10001 1.2104 +4 22 0 0 0 0 0 0 -5.90639 -2.94286 -10001 -10001 1.28059 +4 23 0 0 0 0 0 0 -5.96923 -2.93714 -10001 -10001 1.35124 +4 24 0 0 0 0 0 0 -6.03221 -2.93 -10001 -10001 1.42231 +4 25 0 0 0 0 0 0 -6.0877 -2.92644 -10001 -10001 1.49378 +4 26 0 0 0 0 0 0 -6.15027 -2.91664 -10001 -10001 1.56561 +4 27 0 0 0 0 0 0 -6.21333 -2.90583 -10001 -10001 1.63778 +4 28 0 0 0 0 0 0 -6.26715 -2.89945 -10001 -10001 1.71027 +4 29 0 0 0 0 0 0 -6.33005 -2.88693 -10001 -10001 1.78305 +4 30 0 0 0 0 0 0 -6.38275 -2.87928 -10001 -10001 1.85611 +4 31 0 0 0 0 0 0 -6.44573 -2.86553 -10001 -10001 1.92942 +4 32 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 33 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 34 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 35 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +5 1 0.0112535 0.156887 -0.463247 0.0378191 -0.0676115 0.0311156 -2.57463 -3.64923 0.021237 0.227058 0.617915 +5 2 0.00309369 0.0923894 -0.255076 0.0174789 -0.0287306 0.0110801 -3.25312 -3.66207 0.041211 0.227536 0.608484 +5 3 0.000420465 0.0592991 -0.147167 0.010113 -0.0165039 0.00643291 -3.77071 -3.65508 0.063478 0.246755 0.631144 +5 4 -0.000808845 0.0442803 -0.103204 0.00612073 -0.00895014 0.00257036 -4.18858 -3.64463 0.08778 0.251623 0.620477 +5 5 -0.00133228 0.0346025 -0.0759161 0.00392458 -0.00489042 0.000564678 -4.52803 -3.64152 0.113899 0.258188 0.614551 +5 6 -0.00152447 0.0277441 -0.0574031 0.0026137 -0.00254554 -0.000531546 -4.82942 -3.61859 0.141647 0.266298 0.608936 +5 7 -0.00154763 0.0225649 -0.0440978 0.00178591 -0.00113211 -0.00113502 -5.10822 -3.58124 0.170861 0.275786 0.602797 +5 8 0 0 0 0.000747649 0.00181264 -0.00351197 -5.32112 -3.58341 -10001 0.2014 0.604235 +5 9 0 0 0 0.00066716 0.00112428 -0.00242788 -5.51317 -3.58178 -10001 0.23314 0.6 +5 10 0 0 0 0.000623093 0.000587799 -0.00162601 -5.68543 -3.5789 -10001 0.265974 0.606737 +5 11 0 0 0 0.000597981 0.000176223 -0.00103506 -5.8399 -3.57799 -10001 0.299806 0.624121 +5 12 0 0 0 0.000581818 -0.000133255 -0.000603239 -5.97943 -3.57756 -10001 0.334552 0.642596 +5 13 0 0 0 0.000530029 -0.000197504 -0.000456531 -6.11336 -3.57181 -10001 0.370136 0.645824 +5 14 0 0 0 0.000524146 -0.000393564 -0.000193719 -6.22847 -3.57202 -10001 0.406492 0.666427 +5 15 0 0 0 0.000516049 -0.000530207 -9.14334e-06 -6.3318 -3.57487 -10001 0.443559 0.68839 +5 16 0 0 0 0.00050516 -0.000620012 0.000116751 -6.42807 -3.57616 -10001 0.481285 0.711326 +5 17 0 0 0 0.000491435 -0.000673335 0.000198992 -6.51679 -3.57764 -10001 0.51962 0.73561 +5 18 0 0 0 0.000460151 -0.000649293 0.000208619 -6.60953 -3.57181 -10001 0.55852 0.742297 +5 19 0 0 0 0.000445426 -0.000667469 0.000248139 -6.68278 -3.57681 -10001 0.597947 0.769672 +5 20 0 0 0 0.000428441 -0.000667166 0.000267822 -6.75226 -3.58017 -10001 0.637864 0.799642 +5 21 0 0 0 0 0 0 -6.84806 -3.55917 -10001 -10001 0.678238 +5 22 0 0 0 0 0 0 -6.88803 -3.58007 -10001 -10001 0.719041 +5 23 0 0 0 0 0 0 -6.9362 -3.58771 -10001 -10001 0.760243 +5 24 0 0 0 0 0 0 -7.00507 -3.58023 -10001 -10001 0.801821 +5 25 0 0 0 0 0 0 -7.01923 -3.61454 -10001 -10001 0.843751 +5 26 0 0 0 0 0 0 -7.01198 -3.67151 -10001 -10001 0.886012 +5 27 0 0 0 0 0 0 -7.05212 -3.67733 -10001 -10001 0.928585 +5 28 0 0 0 0 0 0 -7.1117 -3.66329 -10001 -10001 0.971453 +5 29 0 0 0 0 0 0 -7.14898 -3.6702 -10001 -10001 1.0146 +5 30 0 0 0 0 0 0 -7.18983 -3.67247 -10001 -10001 1.058 +5 31 0 0 0 0 0 0 -7.22646 -3.67714 -10001 -10001 1.10166 +5 32 0 0 0 0 0 0 -7.26753 -3.67706 -10001 -10001 1.14555 +5 33 0 0 0 0 0 0 -7.3089 -3.67584 -10001 -10001 1.18966 +5 34 0 0 0 0 0 0 -7.34489 -3.67778 -10001 -10001 1.23398 +5 35 0 0 0 0 0 0 -7.38645 -3.67475 -10001 -10001 1.2785 +6 1 0.00503395 0.102447 -0.324577 0.0208247 -0.0432513 0.0239223 -3.08462 -4.25895 0.014055 0.209037 0.786564 +6 2 0.00165679 0.0540802 -0.15861 0.0101936 -0.0209145 0.0114133 -3.7742 -4.25257 0.026789 0.220542 0.796551 +6 3 0.000327901 0.0365657 -0.104142 0.00571554 -0.011126 0.00558015 -4.29616 -4.24274 0.040704 0.21733 0.613583 +6 4 -0.000145727 0.0250025 -0.0659612 0.00369433 -0.00712917 0.00355408 -4.7057 -4.24013 0.055706 0.231112 0.630268 +6 5 -0.000441639 0.019755 -0.0506215 0.0024228 -0.00431991 0.00184429 -5.06992 -4.20801 0.071711 0.229435 0.601983 +6 6 -0.000497352 0.0147908 -0.035234 0.00177572 -0.00317085 0.00138119 -5.36121 -4.20472 0.088643 0.245275 0.619413 +6 7 -0.000577534 0.0124792 -0.0288941 0.00125257 -0.00199894 0.000650749 -5.64427 -4.17097 0.106435 0.245019 0.6 +6 8 -0.000530256 0.00967479 -0.0209227 0.000993711 -0.00162167 0.000581941 -5.86233 -4.17439 0.125025 0.262652 0.617074 +6 9 -0.000545566 0.00841892 -0.0177066 0.000730764 -0.00102513 0.000202781 -6.077 -4.1584 0.144357 0.263662 0.601927 +6 10 -0.000545298 0.00740536 -0.0151434 0.0005345 -0.000572611 -9.31351e-05 -6.27014 -4.14349 0.164381 0.265044 0.6 +6 11 -0.000461541 0.005823 -0.0111917 0.000466461 -0.000573517 3.27087e-05 -6.42429 -4.15078 0.18505 0.284937 0.610713 +6 12 5.89235e-05 0.000569797 0.000727635 0.000349266 -0.000301141 -0.000147068 -6.58504 -4.13811 0.206324 0.263588 0.617009 +6 13 0 0 0 0.000194909 0.000172612 -0.0005463 -6.73356 -4.12518 -10001 0.228163 0.617483 +6 14 0 0 0 0.000180484 0.000100498 -0.00042294 -6.8602 -4.11609 -10001 0.250532 0.6 +6 15 0 0 0 0.000185079 -3.57721e-05 -0.00023411 -6.97333 -4.12629 -10001 0.273399 0.630787 +6 16 0 0 0 0.000175351 -7.68482e-05 -0.000163769 -7.05976 -4.15929 -10001 0.296735 0.613967 +6 17 0 0 0 0.000167389 -0.000110313 -0.000106556 -7.18427 -4.1151 -10001 0.320512 0.620757 +6 18 0 0 0 0.000160611 -0.000137063 -6.03407e-05 -7.26401 -4.13247 -10001 0.344706 0.631105 +6 19 0 0 0 0.000163345 -0.000194465 1.37512e-05 -7.37497 -4.1147 -10001 0.369291 0.651701 +6 20 0 0 0 0.000156908 -0.000205234 3.71179e-05 -7.47239 -4.09491 -10001 0.394248 0.659681 +6 21 0 0 0 0.000150896 -0.000212324 5.49976e-05 -7.52587 -4.11563 -10001 0.419556 0.674566 +6 22 0 0 0 0.000145186 -0.00021631 6.83496e-05 -7.58438 -4.13306 -10001 0.445197 0.688148 +6 23 0 0 0 0.000139698 -0.000217707 7.79864e-05 -7.64747 -4.14135 -10001 0.471152 0.701159 +6 24 0 0 0 0.000134382 -0.000216969 8.4593e-05 -7.71246 -4.14318 -10001 0.497407 0.714067 +6 25 0 0 0 0.000129208 -0.000214496 8.87474e-05 -7.77315 -4.14622 -10001 0.523946 0.728086 +6 26 0 0 0 0.000124161 -0.000210632 9.09341e-05 -7.83168 -4.14814 -10001 0.550755 0.743135 +6 27 0 0 0 0.000121442 -0.000212856 9.73778e-05 -7.90351 -4.12569 -10001 0.577821 0.781299 +6 28 0 0 0 0.00011622 -0.000205569 9.54556e-05 -7.94815 -4.13649 -10001 0.605132 0.8 +6 29 0 0 0 0.000111161 -0.000197864 9.28056e-05 -7.99392 -4.14343 -10001 0.632676 0.8 +6 30 0 0 0 0 0 0 -8.05982 -4.13986 -10001 -10001 0.660442 +6 31 0 0 0 0 0 0 -8.08963 -4.15222 -10001 -10001 0.688421 +6 32 0 0 0 0 0 0 -8.12667 -4.15464 -10001 -10001 0.716602 +6 33 0 0 0 0 0 0 -8.22265 -4.09707 -10001 -10001 0.744978 +6 34 0 0 0 0 0 0 -8.22898 -4.1396 -10001 -10001 0.773539 +6 35 0 0 0 0 0 0 -8.23966 -4.1671 -10001 -10001 0.802277 +7 1 0.00259282 0.0687321 -0.228783 0.0124763 -0.0285878 0.0175349 -3.53784 -4.75545 0.010025 0.2 0.681624 +7 2 0.000915764 0.0356738 -0.112087 0.00615572 -0.013967 0.00847218 -4.22373 -4.75034 0.018871 0.205877 0.690528 +7 3 0.000310034 0.021893 -0.0649447 0.00360549 -0.00810095 0.0048599 -4.73527 -4.74839 0.028379 0.214842 0.700088 +7 4 5.00563e-05 0.0147969 -0.0414815 0.00234024 -0.0052078 0.0030906 -5.14606 -4.74418 0.03851 0.224409 0.709045 +7 5 -0.00012567 0.0117388 -0.0326676 0.00158481 -0.00341766 0.00194401 -5.51346 -4.70958 0.049229 0.21895 0.785845 +7 6 -0.000173801 0.00881817 -0.0232043 0.00115889 -0.00248024 0.00140019 -5.80979 -4.70252 0.060502 0.2296 0.785235 +7 7 -0.000234206 0.00755053 -0.0197188 0.000840566 -0.00170647 0.000886058 -6.08677 -4.67771 0.072297 0.224632 0.6 +7 8 -0.000229689 0.00596952 -0.0147615 0.000659117 -0.00133465 0.000694578 -6.31086 -4.67796 0.084587 0.236288 0.61284 +7 9 -0.000216078 0.00477969 -0.0112181 0.000529984 -0.00107153 0.000559554 -6.5106 -4.67885 0.097345 0.248403 0.627745 +7 10 -0.000233182 0.00432708 -0.0100674 0.000406872 -0.000763281 0.000347045 -6.71044 -4.66054 0.110546 0.244389 0.6 +7 11 -0.000209814 0.00352965 -0.00780984 0.000341397 -0.000646042 0.000302076 -6.87335 -4.66322 0.124167 0.25738 0.614625 +7 12 -0.000217647 0.00326005 -0.00714503 0.000264909 -0.000447646 0.000159344 -7.04307 -4.64487 0.138187 0.2538 0.6 +7 13 -0.000191353 0.00268226 -0.00560314 0.000230463 -0.000400208 0.000156496 -7.17884 -4.64962 0.152586 0.267592 0.607941 +7 14 -0.000195074 0.00251059 -0.00518988 0.000179042 -0.000261976 5.30318e-05 -7.32633 -4.63142 0.167346 0.26441 0.606967 +7 15 -0.000168571 0.00207073 -0.00409011 0.000161136 -0.000250601 7.09795e-05 -7.44097 -4.63809 0.182448 0.278934 0.615958 +7 16 1.72545e-05 0.000184302 0.000342153 0.000124481 -0.000148678 -7.95363e-06 -7.57113 -4.62025 0.197877 0.254122 0.614165 +7 17 5.0858e-05 -0.000109152 0.000748072 0.000115938 -0.000156682 2.02117e-05 -7.66881 -4.62879 0.213617 0.268147 0.626762 +7 18 0 0 0 6.89649e-05 2.92376e-06 -0.000122046 -7.78498 -4.61144 -10001 0.229655 0.620551 +7 19 0 0 0 6.91038e-05 -3.09829e-05 -7.21227e-05 -7.86871 -4.62177 -10001 0.245976 0.635714 +7 20 0 0 0 6.45156e-05 -3.49223e-05 -5.97273e-05 -7.97346 -4.60502 -10001 0.262568 0.62423 +7 21 0 0 0 6.47826e-05 -5.87262e-05 -2.56757e-05 -8.04537 -4.61701 -10001 0.279419 0.638845 +7 22 0 0 0 6.11743e-05 -6.03592e-05 -1.7969e-05 -8.14036 -4.60091 -10001 0.296518 0.623984 +7 23 0 0 0 5.79928e-05 -6.16518e-05 -1.1291e-05 -8.23174 -4.58418 -10001 0.313855 0.607311 +7 24 0 0 0 5.824e-05 -7.63656e-05 9.21943e-06 -8.28899 -4.59904 -10001 0.331419 0.626396 +7 25 0 0 0 5.55195e-05 -7.60337e-05 1.29641e-05 -8.3726 -4.58307 -10001 0.349201 0.627261 +7 26 0 0 0 5.53743e-05 -8.53024e-05 2.61108e-05 -8.42189 -4.59927 -10001 0.367192 0.647533 +7 27 0 0 0 5.29607e-05 -8.38305e-05 2.78494e-05 -8.49885 -4.58407 -10001 0.385383 0.648894 +7 28 0 0 0 5.07203e-05 -8.22222e-05 2.9173e-05 -8.57338 -4.56838 -10001 0.403768 0.650282 +7 29 0 0 0 5.02452e-05 -8.68093e-05 3.61905e-05 -8.61212 -4.58704 -10001 0.422338 0.672784 +7 30 0 0 0 4.81904e-05 -8.45261e-05 3.63294e-05 -8.68113 -4.57216 -10001 0.441086 0.674664 +7 31 0 0 0 4.62546e-05 -8.21983e-05 3.62439e-05 -8.71832 -4.60165 -10001 0.460005 0.68034 +7 32 0 0 0 4.54756e-05 -8.36698e-05 3.94241e-05 -8.77813 -4.57771 -10001 0.479088 0.702846 +7 33 0 0 0 4.36769e-05 -8.10041e-05 3.8685e-05 -8.84045 -4.56321 -10001 0.498331 0.705281 +7 34 0 0 0 4.26299e-05 -8.06481e-05 3.98133e-05 -8.86572 -4.58486 -10001 0.517726 0.77339 +7 35 0 0 0 4.0959e-05 -7.78363e-05 3.86955e-05 -8.92387 -4.57117 -10001 0.537269 0.695923 +8 1 0.00159841 0.0432226 -0.141097 0.00795344 -0.0194787 0.0127037 -3.9247 -5.19363 0.007528 0.219022 0.674349 +8 2 0.000551192 0.0245394 -0.0810326 0.00394859 -0.00961882 0.00625018 -4.614 -5.18324 0.014045 0.2 0.663776 +8 3 0.000211547 0.0149601 -0.0472367 0.00232502 -0.0056186 0.00361804 -5.13393 -5.16875 0.02096 0.202328 0.669815 +8 4 6.17671e-05 0.0100697 -0.0304129 0.00151593 -0.00363404 0.00231894 -5.54533 -5.16311 0.028255 0.209333 0.676603 +8 5 -1.07651e-05 0.00722698 -0.0208918 0.00105792 -0.00251582 0.0015909 -5.88743 -5.1591 0.035912 0.216673 0.683742 +8 6 -7.5753e-05 0.00602854 -0.0175673 0.000762685 -0.00178056 0.00110168 -6.20663 -5.12738 0.043917 0.209146 0.690098 +8 7 -9.0101e-05 0.00468259 -0.0130554 0.000580086 -0.00134465 0.000825505 -6.46191 -5.12585 0.052253 0.217105 0.695509 +8 8 -9.48906e-05 0.00372206 -0.00994086 0.000454197 -0.00104566 0.000637174 -6.6878 -5.12485 0.060907 0.22536 0.701279 +8 9 -9.42442e-05 0.00300958 -0.00770995 0.000364071 -0.000832696 0.000503791 -6.89025 -5.12438 0.069865 0.233893 0.707046 +8 10 -0.000109611 0.00276687 -0.00712809 0.000287469 -0.000635876 0.000367561 -7.09276 -5.10395 0.079114 0.226981 0.8 +8 11 -0.000102591 0.00229638 -0.00567661 0.000239232 -0.000527251 0.000304027 -7.25981 -5.10466 0.088642 0.236064 0.791144 +8 12 -9.46787e-05 0.0019191 -0.004559 0.000201959 -0.000443657 0.000255289 -7.41275 -5.10586 0.098438 0.24539 0.781863 +8 13 -0.000102256 0.00182379 -0.00435024 0.000163204 -0.000339695 0.000179627 -7.57474 -5.08509 0.108491 0.238802 0.6 +8 14 -9.28374e-05 0.00154342 -0.00353996 0.000141479 -0.000295231 0.000157557 -7.70517 -5.08755 0.118791 0.248633 0.609456 +8 15 -8.35511e-05 0.00130875 -0.00289119 0.000123868 -0.000259177 0.000139503 -7.82605 -5.09054 0.129329 0.258674 0.622239 +8 16 -8.8282e-05 0.00126913 -0.00280979 0.000100971 -0.000195008 9.06232e-05 -7.96167 -5.06954 0.140095 0.252403 0.6 +8 17 -7.87874e-05 0.00108229 -0.00230964 9.03827e-05 -0.000176857 8.50304e-05 -8.06656 -5.07388 0.15108 0.262907 0.604889 +8 18 -8.25627e-05 0.00106003 -0.00226456 7.26542e-05 -0.000124434 4.28323e-05 -8.18939 -5.05213 0.162277 0.256668 0.603266 +8 19 -7.32045e-05 0.000906642 -0.00186853 6.65026e-05 -0.000117741 4.54103e-05 -8.28131 -5.05776 0.173677 0.26761 0.610446 +8 20 -6.43437e-05 0.00077385 -0.00154157 6.12217e-05 -0.00011161 4.68807e-05 -8.36744 -5.06387 0.185274 0.278718 0.61239 +8 21 0 0 0 3.05975e-05 3.8242e-06 -6.22205e-05 -8.47453 -5.04243 -10001 0.19706 0.61593 +8 22 0 0 0 3.02525e-05 -8.78204e-06 -4.21898e-05 -8.55065 -5.04979 -10001 0.209028 0.627247 +8 23 0 0 0 2.77756e-05 -7.38229e-06 -4.04954e-05 -8.64994 -5.02779 -10001 0.221172 0.613029 +8 24 0 0 0 2.76924e-05 -1.74138e-05 -2.50464e-05 -8.71725 -5.0365 -10001 0.233485 0.624483 +8 25 0 0 0 2.75356e-05 -2.53974e-05 -1.27972e-05 -8.78066 -5.04554 -10001 0.245963 0.635823 +8 26 0 0 0 2.57598e-05 -2.39376e-05 -1.21409e-05 -8.86932 -5.02416 -10001 0.258599 0.621293 +8 27 0 0 0 2.56811e-05 -3.01168e-05 -2.81968e-06 -8.92572 -5.03439 -10001 0.271388 0.632475 +8 28 0 0 0 2.42089e-05 -2.86735e-05 -2.54842e-06 -9.00906 -5.01263 -10001 0.284325 0.616484 +8 29 0 0 0 2.41414e-05 -3.33572e-05 4.46741e-06 -9.05907 -5.02411 -10001 0.297405 0.626347 +8 30 0 0 0 2.28894e-05 -3.19206e-05 4.45143e-06 -9.13775 -5.00206 -10001 0.310624 0.601342 +8 31 0 0 0 2.27967e-05 -3.53737e-05 9.6526e-06 -9.18205 -5.01474 -10001 0.323977 0.616128 +8 32 0 0 0 2.25929e-05 -3.78305e-05 1.35354e-05 -9.22395 -5.02752 -10001 0.33746 0.631439 +8 33 0 0 0 2.15741e-05 -3.63967e-05 1.32038e-05 -9.29578 -5.0063 -10001 0.351068 0.628039 +8 34 0 0 0 2.13325e-05 -3.80217e-05 1.59341e-05 -9.33285 -5.02017 -10001 0.364798 0.644317 +8 35 0 0 0 2.04302e-05 -3.66286e-05 1.54942e-05 -9.40107 -4.99885 -10001 0.378647 0.641029 +9 1 0.000996898 0.0307094 -0.102913 0.00527242 -0.0135031 0.00915213 -4.27206 -5.57737 0.005869 0.224842 0.66796 +9 2 0.000353986 0.0174832 -0.0599492 0.00265455 -0.00681687 0.00464915 -4.97774 -5.54413 0.010879 0.2 0.648896 +9 3 0.000148157 0.0106188 -0.0351304 0.00156966 -0.00400446 0.00271105 -5.49006 -5.5389 0.016142 0.2 0.653824 +9 4 5.56507e-05 0.00712854 -0.0227558 0.0010274 -0.00260368 0.00174963 -5.90103 -5.53369 0.021648 0.2 0.658596 +9 5 9.45881e-06 0.00510984 -0.0157437 0.000719483 -0.00181117 0.00120795 -6.24234 -5.53013 0.027389 0.20414 0.664149 +9 6 -1.48949e-05 0.00383471 -0.0114084 0.000528785 -0.00132219 0.000875187 -6.53467 -5.5273 0.033357 0.209911 0.669923 +9 7 -2.79021e-05 0.00297575 -0.00855298 0.000403 -0.0010009 0.000657516 -6.78913 -5.52652 0.039544 0.215876 0.67594 +9 8 -4.85403e-05 0.00265637 -0.00777199 0.000313999 -0.000773314 0.000504043 -7.03431 -5.50488 0.045941 0.207206 0.665512 +9 9 -5.01387e-05 0.00216108 -0.00610506 0.000252011 -0.000616804 0.000399242 -7.23804 -5.5038 0.052542 0.213542 0.67115 +9 10 -4.97636e-05 0.00178486 -0.0048724 0.000206114 -0.000501402 0.000322335 -7.42255 -5.50315 0.059341 0.220055 0.677066 +9 11 -4.81901e-05 0.00149166 -0.00393828 0.000171266 -0.000414146 0.000264462 -7.59117 -5.50283 0.066329 0.226734 0.683069 +9 12 -5.56888e-05 0.00142073 -0.00381089 0.000140664 -0.000332605 0.000206613 -7.76652 -5.48056 0.073502 0.218213 0.7081 +9 13 -5.23061e-05 0.0012112 -0.00314124 0.000120024 -0.000282589 0.000174797 -7.9101 -5.48095 0.080852 0.225237 0.708732 +9 14 -4.87505e-05 0.00103858 -0.00260687 0.000103483 -0.000242651 0.000149485 -8.0432 -5.48183 0.088375 0.232414 0.709781 +9 15 -4.51327e-05 0.000894558 -0.00217532 9.00432e-05 -0.000210312 0.000129056 -8.16727 -5.48304 0.096065 0.239733 0.711274 +9 16 -4.93333e-05 0.000880727 -0.00217054 7.53963e-05 -0.000169173 9.81039e-05 -8.30563 -5.45998 0.103917 0.231394 0.6 +9 17 -4.53575e-05 0.000765861 -0.00182832 6.67991e-05 -0.00014984 8.70866e-05 -8.41463 -5.46196 0.111924 0.239036 0.604671 +9 18 -4.14992e-05 0.000667164 -0.00154448 5.95853e-05 -0.000133633 7.78277e-05 -8.51687 -5.46444 0.120084 0.246808 0.8 +9 19 -3.77777e-05 0.000581823 -0.00130761 5.34761e-05 -0.00011991 6.99609e-05 -8.61323 -5.46722 0.12839 0.2547 0.792169 +9 20 -4.07665e-05 0.000584688 -0.00132795 4.5005e-05 -9.48751e-05 5.01626e-05 -8.72833 -5.44375 0.136839 0.246556 0.6 +9 21 -3.70105e-05 0.000512263 -0.00112947 4.10042e-05 -8.70016e-05 4.6706e-05 -8.81445 -5.44736 0.145426 0.25475 0.6 +9 22 -3.3429e-05 0.000448639 -0.000961458 3.75358e-05 -8.01209e-05 4.35915e-05 -8.8958 -5.45141 0.154147 0.263051 0.608489 +9 23 -3.5959e-05 0.000456012 -0.000985667 3.12015e-05 -6.03269e-05 2.7099e-05 -8.99888 -5.4271 0.162999 0.254915 0.600173 +9 24 -3.24223e-05 0.000400399 -0.000841233 2.9e-05 -5.71012e-05 2.68767e-05 -9.07214 -5.43201 0.171977 0.263503 0.603571 +9 25 -2.90688e-05 0.000351064 -0.000717861 2.7049e-05 -5.41379e-05 2.64822e-05 -9.14158 -5.43733 0.181077 0.272188 0.6 +9 26 0 0 0 1.37553e-05 -1.99501e-06 -2.4067e-05 -9.23525 -5.41233 -10001 0.190297 0.609227 +9 27 0 0 0 1.35801e-05 -6.27963e-06 -1.69693e-05 -9.29787 -5.4187 -10001 0.199633 0.617985 +9 28 0 0 0 1.34059e-05 -9.84195e-06 -1.10935e-05 -9.35777 -5.42511 -10001 0.209082 0.626803 +9 29 0 0 0 1.32272e-05 -1.27761e-05 -6.25142e-06 -9.41473 -5.43185 -10001 0.21864 0.635574 +9 30 0 0 0 1.22997e-05 -1.12251e-05 -7.07253e-06 -9.49783 -5.40718 -10001 0.228305 0.619323 +9 31 0 0 0 1.21959e-05 -1.37349e-05 -3.02626e-06 -9.54958 -5.4148 -10001 0.238073 0.628185 +9 32 0 0 0 1.20711e-05 -1.57584e-05 2.71171e-07 -9.59886 -5.42271 -10001 0.247942 0.636895 +9 33 0 0 0 1.13511e-05 -1.44818e-05 -4.20102e-07 -9.67606 -5.39767 -10001 0.257909 0.620376 +9 34 0 0 0 1.12638e-05 -1.61782e-05 2.30984e-06 -9.72088 -5.40645 -10001 0.267972 0.628956 +9 35 0 0 0 1.11494e-05 -1.74991e-05 4.49513e-06 -9.76361 -5.41545 -10001 0.278128 0.637113 +10 1 0.000659319 0.0224493 -0.076857 0.00363613 -0.00964057 0.00672635 -4.58415 -5.91989 0.004708 0.227108 0.664081 +10 2 0.000277673 0.0114608 -0.038166 0.00181909 -0.00479762 0.00332809 -5.26525 -5.91524 0.008685 0.231035 0.668089 +10 3 0.000106671 0.0077757 -0.0266738 0.00109954 -0.00292505 0.00205552 -5.80533 -5.8762 0.01283 0.2 0.645024 +10 4 4.61883e-05 0.00521123 -0.0173606 0.00072197 -0.00191 0.00133399 -6.21231 -5.87463 0.017138 0.201753 0.649287 +10 5 1.53314e-05 0.00373185 -0.0120746 0.000507105 -0.00133406 0.000925959 -6.55253 -5.87215 0.021605 0.206377 0.653549 +10 6 -1.4677e-06 0.00280021 -0.0088016 0.000373734 -0.000977653 0.000674321 -6.84382 -5.87024 0.026224 0.21122 0.658112 +10 7 -1.09191e-05 0.00217485 -0.0066427 0.000285563 -0.00074276 0.000509066 -7.09871 -5.86855 0.030993 0.216277 0.662813 +10 8 -1.62453e-05 0.00173412 -0.00514869 0.000224412 -0.00058037 0.000395237 -7.32522 -5.86709 0.035907 0.221542 0.667643 +10 9 -2.72672e-05 0.00159068 -0.00484829 0.000180819 -0.000467052 0.000318483 -7.54778 -5.84475 0.040961 0.2 0.650717 +10 10 -2.78618e-05 0.00131888 -0.0039044 0.000148123 -0.000380502 0.000257873 -7.7328 -5.84379 0.046153 0.204141 0.655624 +10 11 -2.76509e-05 0.001108 -0.00318756 0.000123239 -0.000314862 0.000212087 -7.90243 -5.84289 0.051477 0.209266 0.660508 +10 12 -2.6937e-05 0.000940853 -0.00263177 0.000103901 -0.000264025 0.000176768 -8.05845 -5.84241 0.056931 0.214503 0.665586 +10 13 -2.59075e-05 0.000805945 -0.00219326 8.86001e-05 -0.000223943 0.000149033 -8.20297 -5.84216 0.062511 0.219847 0.670747 +10 14 -2.46833e-05 0.000695359 -0.0018421 7.63061e-05 -0.00019185 0.000126914 -8.33749 -5.84214 0.068214 0.225293 0.675993 +10 15 -2.83732e-05 0.000686485 -0.00186009 6.52726e-05 -0.000162 0.00010569 -8.48432 -5.8186 0.074036 0.215813 0.673142 +10 16 -2.66717e-05 0.000600315 -0.00158258 5.72188e-05 -0.000141416 9.18426e-05 -8.60216 -5.81921 0.079974 0.221489 0.676912 +10 17 -2.49711e-05 0.000527064 -0.00135277 5.05136e-05 -0.000124332 8.0389e-05 -8.71327 -5.81984 0.086025 0.227259 0.680681 +10 18 -2.32924e-05 0.000464254 -0.00116088 4.4878e-05 -0.000110018 7.08223e-05 -8.81779 -5.82092 0.092187 0.23312 0.68472 +10 19 -2.1649e-05 0.000409988 -0.000999502 4.01005e-05 -9.79175e-05 6.27604e-05 -8.9166 -5.82223 0.098456 0.239068 0.688927 +10 20 -2.39859e-05 0.000416683 -0.00103582 3.47414e-05 -8.25104e-05 5.10457e-05 -9.03342 -5.79763 0.104829 0.229648 0.739592 +10 21 -2.22447e-05 0.000370449 -0.000897397 3.14251e-05 -7.45183e-05 4.60676e-05 -9.12242 -5.79942 0.111305 0.235816 0.733575 +10 22 -2.05679e-05 0.000329731 -0.000778969 2.85536e-05 -6.76061e-05 4.17609e-05 -9.20678 -5.80165 0.11788 0.242063 0.728521 +10 23 -1.89578e-05 0.000293717 -0.000677219 2.60516e-05 -6.15884e-05 3.80086e-05 -9.28711 -5.80409 0.124552 0.248386 0.724625 +10 24 -2.08254e-05 0.000303195 -0.000711146 2.24327e-05 -5.04591e-05 2.89586e-05 -9.38886 -5.77827 0.131319 0.238921 0.6 +10 25 -1.91926e-05 0.000271178 -0.000620507 2.06924e-05 -4.66869e-05 2.69896e-05 -9.4618 -5.78147 0.138178 0.245457 0.6 +10 26 -1.76315e-05 0.000242524 -0.00054182 1.9151e-05 -4.33318e-05 2.52136e-05 -9.53174 -5.78466 0.145127 0.252062 0.6 +10 27 -1.61418e-05 0.000216825 -0.000473348 1.77789e-05 -4.03303e-05 2.36012e-05 -9.59841 -5.78824 0.152164 0.258734 0.607989 +10 28 -1.47223e-05 0.000193733 -0.000413637 1.65514e-05 -3.76299e-05 2.21288e-05 -9.66226 -5.792 0.159286 0.265467 0.8 +10 29 -1.62506e-05 0.000203145 -0.000439489 1.41827e-05 -3.00073e-05 1.56939e-05 -9.7502 -5.7658 0.166493 0.256108 0.6 +10 30 -1.48318e-05 0.00018191 -0.000384757 1.33472e-05 -2.8523e-05 1.52385e-05 -9.80888 -5.77016 0.173781 0.263045 0.6 +10 31 -1.34827e-05 0.000162713 -0.000336768 1.25883e-05 -2.71445e-05 1.4769e-05 -9.86497 -5.77488 0.18115 0.270039 0.6 +10 32 -1.22022e-05 0.000145346 -0.000294647 1.18957e-05 -2.58576e-05 1.42887e-05 -9.91884 -5.77973 0.188596 0.277086 0.60756 +10 33 7.98065e-06 -5.09896e-05 0.000170119 1.00239e-05 -1.9554e-05 8.76787e-06 -9.99898 -5.75278 0.196119 0.246252 0.608728 +10 34 3.33353e-06 -5.64773e-06 5.16106e-05 9.58817e-06 -1.91086e-05 9.02934e-06 -10.0487 -5.75828 0.203716 0.256512 0.613116 +10 35 6.96576e-07 1.86172e-05 -1.11898e-05 9.1827e-06 -1.86476e-05 9.19152e-06 -10.0963 -5.76409 0.211387 0.266598 0.615911 diff --git a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL new file mode 120000 index 0000000..bd92df5 --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL @@ -0,0 +1 @@ +KPlusSigma_Param_sigL_27_01_23 \ No newline at end of file diff --git a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL_27_01_23 b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL_27_01_23 new file mode 100644 index 0000000..85273b4 --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL_27_01_23 @@ -0,0 +1,315 @@ +2 1 -1.06486 -4.32502 0 -1.35449 -3.85382 -3.35892 -2.28367 0.363213 0.614658 1.27659 +2 2 0 0 0 -1.55438 -3.34603 -2.15997 -2.84679 -10001 0.698174 1.21304 +2 3 0 0 0 -1.97771 -2.89502 -2.36429 -2.58857 -10001 1.05257 1.26146 +2 4 0 0 0 0 0 -2.76633 -2.30213 -10001 -10001 1.41797 +2 5 0 0 0 0 0 -3.21404 -2.0441 -10001 -10001 1.79032 +2 6 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 7 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 8 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 9 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 10 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 11 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 12 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 13 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 14 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 15 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 16 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 17 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 18 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 19 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 20 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 21 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 22 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 23 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 24 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 25 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 26 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 27 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 28 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 29 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 30 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 31 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 32 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 33 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 34 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 35 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 1 -3.12513 -4.71948 0 -3.55693 -3.9995 -4.26556 -3.40264 0.105389 0.599735 1.18726 +3 2 -3.19229 -4.63561 0 -3.63547 -3.91114 -4.36562 -3.30206 0.207833 0.611726 1.19878 +3 3 -3.39852 -4.49937 0 -3.79834 -3.86325 -4.55111 -3.23233 0.321569 0.62853 1.19313 +3 4 -3.62925 -4.35093 0 -3.97789 -3.81756 -4.74693 -3.17445 0.443596 0.653656 1.1958 +3 5 0 0 0 -4.09819 -3.83422 -4.91422 -3.13672 -10001 0.571923 1.16993 +3 6 0 0 0 -4.35894 -3.70054 -5.09532 -3.09111 -10001 0.705166 1.2083 +3 7 0 0 0 -4.59253 -3.59196 -5.23129 -3.07163 -10001 0.842329 1.22762 +3 8 0 0 0 -4.82926 -3.47763 -5.38251 -3.04149 -10001 0.982674 1.26851 +3 9 0 0 0 -5.03972 -3.3861 -5.51701 -3.01617 -10001 1.12564 1.29021 +3 10 0 0 0 0 0 -5.6787 -2.97589 -10001 -10001 1.2708 +3 11 0 0 0 0 0 -5.89917 -2.89926 -10001 -10001 1.4178 +3 12 0 0 0 0 0 -6.11083 -2.82841 -10001 -10001 1.56638 +3 13 0 0 0 0 0 -6.31363 -2.76192 -10001 -10001 1.71631 +3 14 0 0 0 0 0 -6.50882 -2.69925 -10001 -10001 1.86741 +3 15 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 16 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 17 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 18 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 19 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 20 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 21 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 22 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 23 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 24 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 25 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 26 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 27 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 28 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 29 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 30 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 31 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 32 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 33 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 34 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 35 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 1 0.0092981 -0.0319958 0.0164839 -4.60536 -4.98399 -5.56534 -3.96753 0.05119 0.179352 0.944437 +4 2 -0.00507038 0.222091 -1.09821 -4.63002 -4.97214 -5.62527 -3.92921 0.098845 0.133139 0.954282 +4 3 0 0 0 -4.76719 -4.97113 -5.76682 -3.91481 -10001 0.151366 0.946334 +4 4 0 0 0 -4.94943 -4.92275 -5.92553 -3.9 -10001 0.207939 0.954389 +4 5 0 0 0 -5.13884 -4.85734 -6.08224 -3.88468 -10001 0.26793 0.969908 +4 6 0 0 0 -5.32491 -4.78885 -6.23255 -3.86879 -10001 0.330831 0.986502 +4 7 0 0 0 -5.50547 -4.71867 -6.37581 -3.85236 -10001 0.396233 1.00465 +4 8 0 0 0 -5.66997 -4.66632 -6.4865 -3.85004 -10001 0.463802 1.00031 +4 9 0 0 0 -5.83554 -4.59509 -6.60511 -3.84308 -10001 0.533262 1.02335 +4 10 0 0 0 -5.99642 -4.52682 -6.73029 -3.82511 -10001 0.604383 1.04582 +4 11 0 0 0 -6.1385 -4.47801 -6.8247 -3.82143 -10001 0.676972 1.0451 +4 12 0 0 0 -6.28832 -4.41315 -6.92893 -3.81317 -10001 0.750864 1.06771 +4 13 0 0 0 -6.41822 -4.36751 -7.0153 -3.80873 -10001 0.82592 1.06855 +4 14 0 0 0 -6.55895 -4.30585 -7.1124 -3.79973 -10001 0.902018 1.0935 +4 15 0 0 0 0 0 -7.16577 -3.80964 -10001 -10001 0.979054 +4 16 0 0 0 0 0 -7.3096 -3.77035 -10001 -10001 1.05694 +4 17 0 0 0 0 0 -7.44537 -3.73084 -10001 -10001 1.13559 +4 18 0 0 0 0 0 -7.59231 -3.68372 -10001 -10001 1.21494 +4 19 0 0 0 0 0 -7.72137 -3.64827 -10001 -10001 1.29493 +4 20 0 0 0 0 0 -7.84611 -3.61396 -10001 -10001 1.37551 +4 21 0 0 0 0 0 -7.98266 -3.57066 -10001 -10001 1.45662 +4 22 0 0 0 0 0 -8.10048 -3.53854 -10001 -10001 1.53822 +4 23 0 0 0 0 0 -8.21467 -3.50728 -10001 -10001 1.62027 +4 24 0 0 0 0 0 -8.32587 -3.47697 -10001 -10001 1.70275 +4 25 0 0 0 0 0 -8.45212 -3.43781 -10001 -10001 1.78561 +4 26 0 0 0 0 0 -8.55839 -3.40922 -10001 -10001 1.86884 +4 27 0 0 0 0 0 -8.66228 -3.3814 -10001 -10001 1.9524 +4 28 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 29 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 30 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 31 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 32 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 33 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 34 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 35 0 0 0 0 0 0 0 -10001 -10001 -10001 +5 1 0.00297739 -0.0084599 -0.00919778 -5.66912 -5.4644 -6.64739 -4.45531 0.030556 0.142942 0.969445 +5 2 0.00309186 -0.0117742 0.00932944 -5.69067 -5.45454 -6.66161 -4.44913 0.057943 0.18 0.965716 +5 3 0.00279868 -0.0116709 0.0135217 -5.82003 -5.4515 -6.79431 -4.44179 0.087604 0.18 0.964912 +5 4 0 0 0 -5.9511 -5.45439 -6.94436 -4.43342 -10001 0.119286 0.97286 +5 5 0 0 0 -6.09759 -5.45191 -7.09246 -4.42413 -10001 0.152771 0.96798 +5 6 0 0 0 -6.24395 -5.43176 -7.23416 -4.414 -10001 0.187871 0.97293 +5 7 0 0 0 -6.38238 -5.41774 -7.34277 -4.41754 -10001 0.224426 0.960191 +5 8 0 0 0 -6.52162 -5.38132 -7.45875 -4.41659 -10001 0.262297 0.971386 +5 9 0 0 0 -6.65695 -5.34101 -7.57779 -4.4024 -10001 0.301359 0.981052 +5 10 0 0 0 -6.78085 -5.31607 -7.67088 -4.40598 -10001 0.341506 0.977966 +5 11 0 0 0 -6.90782 -5.27217 -7.76775 -4.40127 -10001 0.382644 0.987399 +5 12 0 0 0 -7.02901 -5.22477 -7.87509 -4.38729 -10001 0.424689 1.01027 +5 13 0 0 0 -7.13892 -5.19763 -7.95278 -4.38745 -10001 0.467565 1.00454 +5 14 0 0 0 -7.25499 -5.15257 -8.04106 -4.38326 -10001 0.511207 1.02178 +5 15 0 0 0 -7.35678 -5.12648 -8.11241 -4.3826 -10001 0.555555 1.01579 +5 16 0 0 0 -7.4668 -5.08097 -8.19501 -4.37763 -10001 0.600557 1.03536 +5 17 0 0 0 -7.5616 -5.05458 -8.26122 -4.37626 -10001 0.646163 1.03138 +5 18 0 0 0 -7.66665 -5.0109 -8.33917 -4.37063 -10001 0.69233 1.05038 +5 19 0 0 0 -7.75525 -4.98521 -8.40114 -4.36863 -10001 0.739019 1.04753 +5 20 0 0 0 -7.85579 -4.94243 -8.4752 -4.36243 -10001 0.786195 1.06795 +5 21 0 0 0 -7.93949 -4.91766 -8.52151 -4.3706 -10001 0.833825 1.06391 +5 22 0 0 0 -8.02069 -4.89331 -8.57828 -4.36781 -10001 0.881879 1.06107 +5 23 0 0 0 -8.1159 -4.85201 -8.64761 -4.36084 -10001 0.93033 1.08254 +5 24 0 0 0 0 0 -8.67514 -4.37242 -10001 -10001 0.979154 +5 25 0 0 0 0 0 -8.76825 -4.35022 -10001 -10001 1.02833 +5 26 0 0 0 0 0 -8.85889 -4.32849 -10001 -10001 1.07783 +5 27 0 0 0 0 0 -8.96034 -4.2966 -10001 -10001 1.12764 +5 28 0 0 0 0 0 -9.04687 -4.27576 -10001 -10001 1.17774 +5 29 0 0 0 0 0 -9.13127 -4.25533 -10001 -10001 1.22812 +5 30 0 0 0 0 0 -9.22802 -4.22491 -10001 -10001 1.27876 +5 31 0 0 0 0 0 -9.30888 -4.20526 -10001 -10001 1.32964 +5 32 0 0 0 0 0 -9.38788 -4.18597 -10001 -10001 1.38076 +5 33 0 0 0 0 0 -9.46534 -4.1671 -10001 -10001 1.4321 +5 34 0 0 0 0 0 -9.55737 -4.13857 -10001 -10001 1.48365 +5 35 0 0 0 0 0 -9.63112 -4.12006 -10001 -10001 1.53539 +6 1 0.00121855 -0.00365334 -0.00306274 -6.53685 -5.90228 -7.49324 -4.90867 0.020419 0.153488 0.962543 +6 2 0.00124592 -0.00427547 -0.00027275 -6.54033 -5.89429 -7.5219 -4.89016 0.038235 0.152298 0.977533 +6 3 0.00114311 -0.00463405 0.00411689 -6.66564 -5.89413 -7.63098 -4.89582 0.057226 0.18 0.966977 +6 4 0.00101521 -0.0043379 0.00475617 -6.79839 -5.90067 -7.76897 -4.8901 0.077299 0.18 0.960431 +6 5 0.000437185 0.00433374 -0.0317888 -6.93229 -5.89048 -7.91873 -4.88005 0.098369 0.136375 0.976255 +6 6 0 0 0 -7.05005 -5.88125 -8.036 -4.88377 -10001 0.120362 0.988446 +6 7 0 0 0 -7.16881 -5.89114 -8.14597 -4.88696 -10001 0.14321 0.973096 +6 8 0 0 0 -7.2856 -5.89638 -8.26096 -4.87892 -10001 0.166851 0.958618 +6 9 0 0 0 -7.3964 -5.88902 -8.35783 -4.88113 -10001 0.191231 0.953897 +6 10 0 0 0 -7.50835 -5.86029 -8.47516 -4.86845 -10001 0.216299 0.974769 +6 11 0 0 0 -7.61239 -5.84436 -8.56172 -4.86977 -10001 0.24201 0.974086 +6 12 0 0 0 -7.71309 -5.82604 -8.644 -4.87071 -10001 0.268321 0.974439 +6 13 0 0 0 -7.80799 -5.80168 -8.72249 -4.87128 -10001 0.295195 0.982914 +6 14 0 0 0 -7.90237 -5.78038 -8.7976 -4.87151 -10001 0.322596 0.985002 +6 15 0 0 0 -7.99397 -5.75814 -8.86969 -4.87142 -10001 0.350493 0.987594 +6 16 0 0 0 -8.08296 -5.73523 -8.95104 -4.86022 -10001 0.378856 0.992075 +6 17 0 0 0 -8.16949 -5.71463 -9.01796 -4.85951 -10001 0.407658 0.992225 +6 18 0 0 0 -8.25375 -5.68812 -9.08266 -4.85853 -10001 0.436874 0.999171 +6 19 0 0 0 -8.33585 -5.66418 -9.14533 -4.85728 -10001 0.46648 1.00321 +6 20 0 0 0 -8.4159 -5.64011 -9.20615 -4.85579 -10001 0.496456 1.00756 +6 21 0 0 0 -8.49405 -5.61598 -9.26527 -4.85406 -10001 0.52678 1.01221 +6 22 0 0 0 -8.5704 -5.59185 -9.32282 -4.85211 -10001 0.557436 1.01715 +6 23 0 0 0 -8.64506 -5.56776 -9.37892 -4.84995 -10001 0.588405 1.02237 +6 24 0 0 0 -8.71817 -5.54378 -9.43368 -4.84759 -10001 0.619671 1.02776 +6 25 0 0 0 -8.79032 -5.52018 -9.47516 -4.85586 -10001 0.651221 1.03088 +6 26 0 0 0 -8.85991 -5.49612 -9.52749 -4.85312 -10001 0.683039 1.03822 +6 27 0 0 0 -8.92877 -5.47251 -9.57873 -4.85021 -10001 0.715112 1.04444 +6 28 0 0 0 -8.99639 -5.44907 -9.62895 -4.84713 -10001 0.747429 1.05088 +6 29 0 0 0 -9.06295 -5.42584 -9.6782 -4.8439 -10001 0.779978 1.05725 +6 30 0 0 0 -9.12821 -5.4027 -9.72656 -4.84053 -10001 0.812748 1.06435 +6 31 0 0 0 -9.19254 -5.3798 -9.77405 -4.83701 -10001 0.84573 1.07133 +6 32 0 0 0 -9.25593 -5.3571 -9.82075 -4.83336 -10001 0.878913 1.07843 +6 33 0 0 0 -9.30246 -5.35174 -9.84062 -4.84402 -10001 0.91229 1.05994 +6 34 0 0 0 -9.36381 -5.32932 -9.88584 -4.84009 -10001 0.94585 1.06703 +6 35 0 0 0 0 0 -9.90396 -4.85066 -10001 -10001 0.979588 +7 1 0.000574178 -0.00168194 -0.00234487 -7.25938 -6.28872 -8.22151 -5.2978 0.014654 0.142019 0.970956 +7 2 0.000592207 -0.00213331 0.000235571 -7.26296 -6.27976 -8.22494 -5.29622 0.027204 0.16053 0.978082 +7 3 0.000535906 -0.00203186 0.000617306 -7.37193 -6.28971 -8.33213 -5.29765 0.040414 0.150941 0.967892 +7 4 0.000481991 -0.00204586 0.00190689 -7.50894 -6.27995 -8.47026 -5.29505 0.054246 0.173743 0.976061 +7 5 0.000428417 -0.00186736 0.00190706 -7.6352 -6.2737 -8.61786 -5.28129 0.068662 0.168751 0.990185 +7 6 0.000387082 -0.00179315 0.00232233 -7.75845 -6.2785 -8.72089 -5.2922 0.083631 0.18 0.975807 +7 7 0 0 0 -7.86785 -6.24058 -8.85428 -5.27768 -10001 0.09912 1.02444 +7 8 0 0 0 -7.96922 -6.2634 -8.94287 -5.28787 -10001 0.115102 0.998073 +7 9 0 0 0 -8.06619 -6.27969 -9.03702 -5.28698 -10001 0.13155 0.977955 +7 10 0 0 0 -8.16257 -6.27494 -9.13968 -5.28223 -10001 0.148439 0.98428 +7 11 0 0 0 -8.2521 -6.28016 -9.22336 -5.28072 -10001 0.165747 0.971801 +7 12 0 0 0 -8.34252 -6.2658 -9.31674 -5.27541 -10001 0.183452 0.98367 +7 13 0 0 0 -8.426 -6.27973 -9.38032 -5.28415 -10001 0.201535 0.958553 +7 14 0 0 0 -8.51164 -6.26339 -9.47832 -5.26753 -10001 0.219977 0.970703 +7 15 0 0 0 -8.59005 -6.23815 -9.5354 -5.27573 -10001 0.23876 0.982279 +7 16 0 0 0 -8.66599 -6.23113 -9.60165 -5.27293 -10001 0.257869 0.976477 +7 17 0 0 0 -8.7458 -6.20576 -9.67945 -5.26642 -10001 0.277288 0.993934 +7 18 0 0 0 -8.81768 -6.19666 -9.72903 -5.27397 -10001 0.297003 0.987715 +7 19 0 0 0 -8.8875 -6.18693 -9.78849 -5.27052 -10001 0.317001 0.983179 +7 20 0 0 0 -8.96274 -6.15896 -9.86011 -5.26341 -10001 0.337269 1.00204 +7 21 0 0 0 -9.0292 -6.14813 -9.90405 -5.27039 -10001 0.357794 0.996699 +7 22 0 0 0 -9.0939 -6.137 -9.95835 -5.26638 -10001 0.378567 0.992911 +7 23 0 0 0 -9.16546 -6.10769 -10.0252 -5.25874 -10001 0.399576 1.01272 +7 24 0 0 0 -9.22732 -6.09599 -10.0648 -5.2652 -10001 0.420812 1.008 +7 25 0 0 0 -9.28765 -6.08413 -10.103 -5.27154 -10001 0.442265 1.00345 +7 26 0 0 0 -9.34653 -6.07215 -10.1521 -5.26688 -10001 0.463927 1.00037 +7 27 0 0 0 -9.41409 -6.04207 -10.2141 -5.25861 -10001 0.485788 1.02112 +7 28 0 0 0 -9.47065 -6.02988 -10.2491 -5.26449 -10001 0.507841 1.01709 +7 29 0 0 0 -9.52592 -6.01764 -10.2832 -5.27028 -10001 0.530079 1.01322 +7 30 0 0 0 -9.57996 -6.00538 -10.3282 -5.26507 -10001 0.552494 1.01076 +7 31 0 0 0 -9.64441 -5.97517 -10.3865 -5.25627 -10001 0.57508 1.03231 +7 32 0 0 0 -9.69704 -5.96314 -10.418 -5.26166 -10001 0.59783 1.02781 +7 33 0 0 0 -9.74765 -5.95062 -10.4488 -5.26696 -10001 0.620738 1.02555 +7 34 0 0 0 -9.79768 -5.93837 -10.4908 -5.26127 -10001 0.643798 1.02359 +7 35 0 0 0 -9.85967 -5.9084 -10.5461 -5.25203 -10001 0.667006 1.04582 +8 1 0.000301275 -0.000890983 -0.00150068 -7.88582 -6.63504 -8.84253 -5.65167 0.011049 0.135368 0.972896 +8 2 0.000309905 -0.001094 -0.000295675 -7.88356 -6.62948 -8.83745 -5.65366 0.020388 0.148933 0.977528 +8 3 0.000279926 -0.00100517 -0.000340389 -7.99213 -6.62366 -8.96188 -5.64442 0.030124 0.13363 0.990307 +8 4 0.000251586 -0.00101855 0.000493278 -8.11945 -6.63396 -9.07709 -5.64915 0.040238 0.148897 0.972425 +8 5 0.000226437 -0.000996929 0.000950722 -8.24819 -6.62725 -9.20396 -5.65019 0.050715 0.166308 0.978203 +8 6 0.000202407 -0.000896999 0.000841222 -8.36292 -6.62135 -9.33575 -5.64014 0.061537 0.154543 0.991453 +8 7 0.000184441 -0.000865922 0.00106302 -8.47258 -6.64675 -9.43407 -5.64409 0.07269 0.176821 0.958942 +8 8 0.000168802 -0.00082306 0.00114365 -8.57931 -6.63785 -9.53942 -5.6444 0.084159 0.18 0.966449 +8 9 0 0 0 -8.6722 -6.58129 -9.65025 -5.63367 -10001 0.095932 1.03211 +8 10 0 0 0 -8.75752 -6.62874 -9.72949 -5.63694 -10001 0.107995 0.980003 +8 11 0 0 0 -8.84153 -6.63208 -9.81782 -5.63662 -10001 0.120336 0.980743 +8 12 0 0 0 -8.91923 -6.64424 -9.88766 -5.63949 -10001 0.132945 0.963866 +8 13 0 0 0 -8.99715 -6.62029 -9.9677 -5.63879 -10001 0.14581 0.988853 +8 14 0 0 0 -9.07273 -6.61411 -10.0561 -5.62709 -10001 0.158921 0.996353 +8 15 0 0 0 -9.14228 -6.62103 -10.1036 -5.64024 -10001 0.172269 0.980193 +8 16 0 0 0 -9.21368 -6.61001 -10.1862 -5.62817 -10001 0.185844 0.99049 +8 17 0 0 0 -9.27891 -6.61343 -10.2403 -5.63014 -10001 0.199639 0.977692 +8 18 0 0 0 -9.3469 -6.61727 -10.3061 -5.62861 -10001 0.213644 0.970209 +8 19 0 0 0 -9.40843 -6.59999 -10.3558 -5.63028 -10001 0.227853 0.976987 +8 20 0 0 0 -9.47355 -6.5831 -10.4177 -5.62845 -10001 0.242257 0.988999 +8 21 0 0 0 -9.53185 -6.58243 -10.4638 -5.62983 -10001 0.256849 0.978319 +8 22 0 0 0 -9.59453 -6.56379 -10.5223 -5.62773 -10001 0.271623 0.991191 +8 23 0 0 0 -9.64994 -6.56191 -10.5653 -5.62884 -10001 0.286573 0.981072 +8 24 0 0 0 -9.71049 -6.542 -10.621 -5.62649 -10001 0.301692 0.994588 +8 25 0 0 0 -9.76332 -6.53926 -10.6614 -5.62735 -10001 0.316974 0.984872 +8 26 0 0 0 -9.82199 -6.51843 -10.7147 -5.62476 -10001 0.332415 0.998896 +8 27 0 0 0 -9.87247 -6.51505 -10.7528 -5.62538 -10001 0.348008 0.989492 +8 28 0 0 0 -9.9295 -6.49356 -10.8039 -5.62257 -10001 0.363748 1.00393 +8 29 0 0 0 -9.97781 -6.48972 -10.84 -5.62297 -10001 0.379632 0.994787 +8 30 0 0 0 -10.0334 -6.46776 -10.8893 -5.61996 -10001 0.395653 1.00958 +8 31 0 0 0 -10.0797 -6.46356 -10.9117 -5.63104 -10001 0.411808 0.999407 +8 32 0 0 0 -10.1339 -6.44128 -10.9713 -5.61695 -10001 0.428093 1.01577 +8 33 0 0 0 -10.1784 -6.43683 -10.9921 -5.62782 -10001 0.444503 1.00582 +8 34 0 0 0 -10.2219 -6.43233 -11.0242 -5.62775 -10001 0.461034 0.997185 +8 35 0 0 0 -10.2743 -6.40969 -11.0697 -5.62424 -10001 0.477684 1.01271 +9 1 0.00017126 -0.000520902 -0.00092657 -8.44158 -6.94643 -9.41675 -5.95381 0.008639 0.132758 0.982418 +9 2 0.000175829 -0.000619808 -0.000329794 -8.43185 -6.95673 -9.39175 -5.9613 0.015871 0.142378 0.964309 +9 3 0.000160538 -0.00063184 0.000147275 -8.54346 -6.95182 -9.49852 -5.96522 0.023354 0.153526 0.96804 +9 4 0.000142369 -0.000554375 2.625e-06 -8.66478 -6.9496 -9.63375 -5.95808 0.031081 0.135578 0.977255 +9 5 0.000128084 -0.000544353 0.000320744 -8.78944 -6.94499 -9.76643 -5.95079 0.039043 0.148619 0.982689 +9 6 0.000115953 -0.000526315 0.000507561 -8.90366 -6.93903 -9.8662 -5.95744 0.04723 0.159295 0.980593 +9 7 0.000105643 -0.000503531 0.000607483 -9.01419 -6.93319 -9.9725 -5.96066 0.055636 0.174166 0.985385 +9 8 9.57684e-05 -0.000454151 0.000520178 -9.11003 -6.92913 -10.0835 -5.95287 0.064252 0.158216 0.997145 +9 9 8.83405e-05 -0.000435521 0.000580411 -9.20241 -6.94013 -10.1621 -5.95907 0.073071 0.174098 0.978249 +9 10 8.18022e-05 -0.00041444 0.000600478 -9.29301 -6.93433 -10.2492 -5.96185 0.082087 0.18 0.98324 +9 11 0 0 0 -9.3281 -7.18599 -10.3431 -5.95359 -10001 0.091293 0.823569 +9 12 0 0 0 -9.4478 -6.9097 -10.4065 -5.95938 -10001 0.100682 1.00883 +9 13 0 0 0 -9.51995 -6.91404 -10.4802 -5.96174 -10001 0.110249 1.00834 +9 14 0 0 0 -9.58982 -6.91771 -10.5622 -5.95308 -10001 0.119988 1.00801 +9 15 0 0 0 -9.65613 -6.91745 -10.641 -5.94435 -10001 0.129894 1.01211 +9 16 0 0 0 -9.71771 -6.95168 -10.6911 -5.94957 -10001 0.13996 0.971354 +9 17 0 0 0 -9.78054 -6.94706 -10.7527 -5.95144 -10001 0.150183 0.976462 +9 18 0 0 0 -9.83803 -6.95584 -10.7979 -5.95647 -10001 0.160557 0.960499 +9 19 0 0 0 -9.89756 -6.94809 -10.8552 -5.95812 -10001 0.171078 0.967317 +9 20 0 0 0 -9.95576 -6.9241 -10.9223 -5.94877 -10001 0.18174 0.991028 +9 21 0 0 0 -10.0084 -6.93128 -10.9618 -5.95346 -10001 0.192541 0.975017 +9 22 0 0 0 -10.0641 -6.92099 -11.0137 -5.9548 -10001 0.203476 0.982881 +9 23 0 0 0 -10.1187 -6.90974 -11.076 -5.94515 -10001 0.21454 0.992444 +9 24 0 0 0 -10.1674 -6.9146 -11.111 -5.94953 -10001 0.225731 0.977722 +9 25 0 0 0 -10.2201 -6.90183 -11.1588 -5.95058 -10001 0.237044 0.986809 +9 26 0 0 0 -10.2719 -6.88841 -11.2172 -5.94067 -10001 0.248476 0.997451 +9 27 0 0 0 -10.3173 -6.89173 -11.2367 -5.95568 -10001 0.260024 0.982261 +9 28 0 0 0 -10.3675 -6.87728 -11.293 -5.94555 -10001 0.271685 0.993406 +9 29 0 0 0 -10.4108 -6.87994 -11.3224 -5.9495 -10001 0.283454 0.979767 +9 30 0 0 0 -10.4595 -6.86467 -11.365 -5.95013 -10001 0.29533 0.990082 +9 31 0 0 0 -10.5076 -6.84906 -11.4185 -5.93979 -10001 0.307309 1.00182 +9 32 0 0 0 -10.5483 -6.85089 -11.4453 -5.94347 -10001 0.319389 0.98856 +9 33 0 0 0 -10.5952 -6.83472 -11.4855 -5.94387 -10001 0.331567 0.999369 +9 34 0 0 0 -10.6342 -6.8362 -11.5108 -5.94743 -10001 0.34384 0.986287 +9 35 0 0 0 -10.6799 -6.81958 -11.5495 -5.94768 -10001 0.356206 0.997362 +10 1 0.000103584 -0.000327039 -0.000572148 -8.93524 -7.2109 -9.90756 -6.23929 0.006945 0.128357 1.00073 +10 2 0.000106204 -0.000378757 -0.000259675 -8.92284 -7.2238 -9.87845 -6.24819 0.012717 0.135769 0.979503 +10 3 9.68476e-05 -0.000380221 1.01024e-05 -9.03157 -7.22019 -9.9929 -6.24276 0.018657 0.144397 0.983533 +10 4 8.68551e-05 -0.000367993 0.000189839 -9.15702 -7.21595 -10.1121 -6.24808 0.024759 0.153475 0.986817 +10 5 7.71464e-05 -0.000318533 6.68194e-05 -9.27304 -7.21201 -10.2406 -6.2424 0.031019 0.132315 0.997855 +10 6 6.98181e-05 -0.000308403 0.000202733 -9.38798 -7.20906 -10.362 -6.23662 0.037433 0.142967 1.00164 +10 7 6.36388e-05 -0.000296558 0.000287533 -9.49181 -7.23705 -10.4499 -6.24481 0.043995 0.154992 0.965529 +10 8 5.83804e-05 -0.000283734 0.000337064 -9.59221 -7.23221 -10.5447 -6.2497 0.050702 0.166894 0.96943 +10 9 5.385e-05 -0.000270373 0.000362281 -9.68634 -7.2304 -10.6449 -6.24356 0.05755 0.18 0.971333 +10 10 4.94116e-05 -0.00024543 0.000308856 -9.76719 -7.22691 -10.7394 -6.23735 0.064534 0.161207 0.982426 +10 11 4.60473e-05 -0.000235459 0.00032905 -9.84606 -7.23772 -10.8028 -6.24512 0.071651 0.174753 0.963876 +10 12 4.30497e-05 -0.000224938 0.000335394 -9.92423 -7.21694 -10.8878 -6.23869 0.078897 0.18 0.984973 +10 13 4.03494e-05 -0.000214087 0.00033215 -9.99868 -7.21185 -10.9569 -6.24308 0.086269 0.18 0.989132 +10 14 0 0 0 -10.0235 -7.43807 -11.0344 -6.23647 -10001 0.093764 0.841263 +10 15 0 0 0 -10.1252 -7.21512 -11.0827 -6.24386 -10001 0.101377 0.985845 +10 16 0 0 0 -10.1859 -7.21986 -11.1542 -6.23707 -10001 0.109107 0.985198 +10 17 0 0 0 -10.2443 -7.22009 -11.2112 -6.2411 -10001 0.116949 0.987616 +10 18 0 0 0 -10.301 -7.19777 -11.2778 -6.23415 -10001 0.124902 1.01368 +10 19 0 0 0 -10.3536 -7.21405 -11.3162 -6.24118 -10001 0.132961 0.989448 +10 20 0 0 0 -10.4063 -7.21154 -11.3669 -6.24498 -10001 0.141125 0.993856 +10 21 0 0 0 -10.4584 -7.20878 -11.4277 -6.23777 -10001 0.149391 0.998251 +10 22 0 0 0 -10.5093 -7.20495 -11.4868 -6.23051 -10001 0.157757 1.00315 +10 23 0 0 0 -10.5553 -7.21619 -11.5184 -6.23722 -10001 0.166219 0.983789 +10 24 0 0 0 -10.604 -7.21045 -11.5628 -6.24071 -10001 0.174775 0.98871 +10 25 0 0 0 -10.6517 -7.20384 -11.6177 -6.23321 -10001 0.183424 0.995202 +10 26 0 0 0 -10.6943 -7.21305 -11.6454 -6.23973 -10001 0.192163 0.977188 +10 27 0 0 0 -10.7403 -7.20502 -11.6862 -6.24302 -10001 0.200989 0.983298 +10 28 0 0 0 -10.7855 -7.19634 -11.7377 -6.2353 -10001 0.209901 0.990874 +10 29 0 0 0 -10.83 -7.18708 -11.7883 -6.22756 -10001 0.218897 0.998742 +10 30 0 0 0 -10.8689 -7.1944 -11.812 -6.23378 -10001 0.227974 0.981816 +10 31 0 0 0 -10.912 -7.18419 -11.8489 -6.23681 -10001 0.237131 0.988979 +10 32 0 0 0 -10.9546 -7.17357 -11.8969 -6.22888 -10001 0.246366 0.997521 +10 33 0 0 0 -10.991 -7.17997 -11.9181 -6.23492 -10001 0.255678 0.981072 +10 34 0 0 0 -11.0323 -7.16864 -11.9527 -6.23778 -10001 0.265063 0.988778 +10 35 0 0 0 -11.0732 -7.157 -11.9985 -6.22966 -10001 0.274522 0.997817 diff --git a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT new file mode 120000 index 0000000..d99f30a --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT @@ -0,0 +1 @@ +KPlusSigma_Param_sigT_25_01_23 \ No newline at end of file diff --git a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT_25_01_23 b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT_25_01_23 new file mode 100644 index 0000000..1aefd92 --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT_25_01_23 @@ -0,0 +1,316 @@ +2 1 -0.60992 2.93078 -2.70842 -0.0209351 0.669367 -0.52065 -0.504881 -1.41023 0.363213 0.516829 0.879348 +2 2 -0.0989694 0.162807 0.0205258 -0.155438 0.398383 -0.192297 -2.02014 -0.830855 0.698174 0.755896 1.1464 +2 3 -0.119557 0.194179 -0.068957 -0.0109397 0.038597 -0.0131745 -3.26 -0.488335 1.05257 1.39454 1.76528 +2 4 0 0 0 -0.0726443 0.0881102 -0.0243587 -5.39403 0.255382 -10001 1.41797 1.77116 +2 5 0 0 0 0 0 0 -12.4105 3.33025 -10001 -10001 1.79032 +2 6 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 7 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 8 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 9 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 10 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 11 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 12 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 13 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 14 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 15 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 16 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 17 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 18 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 19 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 20 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 21 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 22 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 23 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 24 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 25 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 26 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 27 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 28 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 29 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 30 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 31 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 32 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 33 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 34 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +2 35 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 1 -0.109342 1.56547 -3.13569 0.0863498 0.0718647 -0.185438 -1.3984 -2.30294 0.105389 0.253132 0.634544 +3 2 -0.0389207 0.184705 0.180851 -0.0100432 0.17445 -0.188689 -2.29446 -2.1809 0.207833 0.266012 0.614726 +3 3 -0.0606418 0.296019 -0.304446 0.00776182 0.0196553 -0.0225057 -3.01056 -2.0896 0.321569 0.49011 0.835635 +3 4 -0.0269097 0.0960876 -0.0719754 0.00926873 -0.00569844 -8.67299e-05 -3.62628 -2.00805 0.443596 0.707943 1.09836 +3 5 -0.0249488 0.0725487 -0.0485431 -0.000728514 0.00777008 -0.00503357 -4.28652 -1.86119 0.571923 0.744418 1.10002 +3 6 0.000198907 -0.00667232 0.00973163 -0.0060582 0.0145956 -0.00743103 -4.99912 -1.66791 0.705166 0.758608 1.10242 +3 7 -0.00909118 0.0184929 -0.00888875 -0.000563704 0.00211243 -0.00100185 -5.47514 -1.61212 0.842329 1.03846 1.40453 +3 8 -0.00748667 0.0135524 -0.00593857 -0.00211643 0.00375523 -0.00146527 -6.21733 -1.39784 0.982674 1.09508 1.41335 +3 9 -0.00278475 0.00426705 -0.0015476 -9.72248e-05 0.000420096 -0.000169461 -6.68213 -1.33951 1.12564 1.39571 1.72849 +3 10 -0.002465 0.00345008 -0.00116889 -0.000667678 0.000953421 -0.000301081 -7.60832 -1.04062 1.2708 1.43849 1.7257 +3 11 -0.000131646 -3.4276e-05 9.8973e-05 -0.000926565 0.00114474 -0.000335371 -8.79252 -0.623981 1.4178 1.46654 1.75397 +3 12 0 0 0 -0.000978151 0.00112043 -0.000311966 -10.8415 0.211225 -10001 1.56638 1.78609 +3 13 0 0 0 -2.88822e-05 -3.73883e-05 3.39773e-05 -15.1816 2.17112 -10001 1.71631 1.77903 +3 14 0 0 0 0 0 0 -23.391 5.94328 -10001 -10001 1.86741 +3 15 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 16 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 17 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 18 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 19 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 20 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 21 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 22 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 23 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 24 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 25 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 26 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 27 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 28 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 29 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 30 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 31 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 32 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 33 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 34 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +3 35 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 1 -0.0209365 0.619006 -1.53668 0.0627375 -0.0904935 0.0259554 -2.12281 -3.21168 0.05119 0.227021 0.654567 +4 2 -0.022702 0.322531 -0.673442 0.0234012 -0.0238883 -0.0017786 -2.8929 -3.16369 0.098845 0.257882 0.658322 +4 3 -0.021791 0.210521 -0.388494 0.00690674 0.00664056 -0.0173078 -3.50728 -3.10984 0.151366 0.274633 0.627272 +4 4 -0.00100945 -0.0205201 0.136218 -0.000551583 0.0193967 -0.0230252 -4.04348 -3.04346 0.207939 0.261655 0.605022 +4 5 -0.00882958 0.0497467 -0.0571372 0.00383521 -0.00419752 0.000838945 -4.47268 -3.01737 0.26793 0.465228 0.831522 +4 6 -0.00782038 0.0370998 -0.0387783 0.00127961 0.00036524 -0.00139297 -4.92166 -2.93764 0.330831 0.491297 0.820665 +4 7 -0.00682078 0.0281945 -0.0269464 -0.000166342 0.00271997 -0.00241296 -5.33455 -2.86719 0.396233 0.519179 0.829335 +4 8 -0.000515991 -0.000785316 0.00443347 -0.00103689 0.00402166 -0.00290889 -5.75376 -2.77664 0.463802 0.517637 0.838695 +4 9 -0.00248615 0.00763107 -0.00538925 0.000402299 -0.00020455 -5.39569e-05 -6.05079 -2.75721 0.533262 0.73432 1.08951 +4 10 -0.0023446 0.00658938 -0.00440261 -2.51415e-05 0.00043818 -0.000308967 -6.39569 -2.69773 0.604383 0.75131 1.09199 +4 11 -0.00200839 0.00519006 -0.00324284 -0.000301992 0.000840074 -0.000464403 -6.80266 -2.59394 0.676972 0.78281 1.08866 +4 12 -0.000774762 0.00173553 -0.000911919 0.000144621 -0.000111339 1.76236e-05 -7.00723 -2.60716 0.750864 0.993431 1.39485 +4 13 -0.000666466 0.00138505 -0.000687123 4.33155e-05 1.15284e-05 -2.11522e-05 -7.41482 -2.49636 0.82592 1.03121 1.38694 +4 14 -0.000622399 0.00121735 -0.000577805 -4.12049e-05 0.000114764 -5.38458e-05 -7.82764 -2.38168 0.902018 1.05216 1.38851 +4 15 -0.000531212 0.000977478 -0.000440332 -9.85037e-05 0.00018233 -7.46212e-05 -8.21113 -2.29464 0.979054 1.08712 1.39267 +4 16 -0.000149671 0.000243373 -9.34429e-05 3.5362e-05 -2.62662e-05 4.78235e-06 -8.31776 -2.34019 1.05694 1.38443 1.74882 +4 17 -0.000140949 0.000216638 -7.99623e-05 1.26049e-05 -3.10494e-06 -1.2872e-06 -8.77185 -2.20602 1.13559 1.39652 1.72833 +4 18 -0.000131756 0.000192814 -6.85949e-05 -7.14634e-06 1.72264e-05 -6.68014e-06 -9.27807 -2.04749 1.21494 1.41798 1.71603 +4 19 -0.000112997 0.000157456 -5.37019e-05 -1.73311e-05 2.63305e-05 -8.73204e-06 -9.82702 -1.87 1.29493 1.45793 1.73361 +4 20 -0.000104959 0.00014049 -4.63517e-05 -3.1406e-05 4.08709e-05 -1.26048e-05 -10.5875 -1.587 1.37551 1.47598 1.72418 +4 21 0 0 0 -4.37943e-05 5.38009e-05 -1.60864e-05 -11.52 -1.22506 -10001 1.45662 1.71832 +4 22 0 0 0 -3.77605e-05 4.44442e-05 -1.2806e-05 -12.6227 -0.78487 -10001 1.53822 1.76065 +4 23 0 0 0 -3.51577e-05 3.99261e-05 -1.11689e-05 -14.6389 0.114623 -10001 1.62027 1.78462 +4 24 0 0 0 -2.11103e-06 3.15386e-07 5.95288e-07 -18.248 1.81715 -10001 1.70275 1.7616 +4 25 0 0 0 0 0 0 -24.0056 4.54282 -10001 -10001 1.78561 +4 26 0 0 0 0 0 0 -28.7829 6.68333 -10001 -10001 1.86884 +4 27 0 0 0 0 0 0 -38.3797 11.1265 -10001 -10001 1.9524 +4 28 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 29 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 30 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 31 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 32 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 33 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 34 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +4 35 0 0 0 0 0 0 0 0 -10001 -10001 -10001 +5 1 -0.00507975 0.292295 -0.803669 0.0351808 -0.0716531 0.0389733 -2.73861 -3.93014 0.030556 0.215956 0.690847 +5 2 -0.00659703 0.157623 -0.395358 0.0152066 -0.028372 0.0135179 -3.46418 -3.90744 0.057943 0.227446 0.656216 +5 3 -0.00640088 0.0994327 -0.227136 0.00742169 -0.0118863 0.00409296 -4.0259 -3.87928 0.087604 0.240712 0.640508 +5 4 -0.00583932 0.0684729 -0.142502 0.00373156 -0.00433256 -2.83063e-05 -4.49435 -3.84874 0.119286 0.255504 0.633481 +5 5 -0.00522163 0.0497671 -0.0945226 0.00177343 -0.000520882 -0.00195053 -4.87538 -3.8485 0.152771 0.271616 0.612397 +5 6 -0.00463187 0.0374699 -0.0651134 0.00066134 0.00148645 -0.00282954 -5.24615 -3.81014 0.187871 0.288867 0.609894 +5 7 -0.00180734 0.0118921 -0.0148434 0.00136149 -0.00226603 0.000994256 -5.57858 -3.76355 0.224426 0.446978 0.934002 +5 8 -0.00180415 0.0103514 -0.0123484 0.000842451 -0.00125592 0.000472264 -5.85348 -3.75688 0.262297 0.452678 0.836028 +5 9 -0.00159396 0.00815529 -0.00909106 0.000499111 -0.000602612 0.000140419 -6.16796 -3.69514 0.301359 0.47435 0.82163 +5 10 -0.00140106 0.00648849 -0.00677612 0.000275387 -0.00020565 -4.37923e-05 -6.4975 -3.6094 0.341506 0.497164 0.824112 +5 11 -0.00135856 0.00582901 -0.00584554 6.72723e-05 0.000202144 -0.000255821 -6.76443 -3.56531 0.382644 0.503322 0.822881 +5 12 -0.00118615 0.00470307 -0.00443544 -6.09893e-05 0.000437196 -0.000372173 -7.0165 -3.53377 0.424689 0.524932 0.821204 +5 13 -0.000448814 0.00153753 -0.00118471 0.000158919 -0.000207068 6.94684e-05 -7.17431 -3.55361 0.467565 0.695518 1.10704 +5 14 -0.000437436 0.00140085 -0.00104034 9.79915e-05 -0.000109827 2.91589e-05 -7.43468 -3.49675 0.511207 0.70625 1.08416 +5 15 -0.000381463 0.00114369 -0.000807715 5.43354e-05 -4.19888e-05 1.66387e-06 -7.72179 -3.41773 0.555555 0.732463 1.07509 +5 16 -0.000367989 0.00104756 -0.000715345 1.42597e-05 2.17615e-05 -2.46355e-05 -7.98746 -3.35111 0.600557 0.742568 1.07385 +5 17 -0.000319414 0.000859653 -0.000559978 -1.2356e-05 6.21324e-05 -4.06618e-05 -8.18112 -3.33206 0.646163 0.767856 1.07892 +5 18 -0.000108615 0.000261188 -0.000145671 3.59378e-05 -4.06417e-05 1.18499e-05 -8.24798 -3.38677 0.69233 0.972333 1.47418 +5 19 -9.49274e-05 0.000216076 -0.000115583 2.5525e-05 -2.73647e-05 7.50405e-06 -8.49479 -3.32697 0.739019 0.988901 1.41754 +5 20 -9.17966e-05 0.000199565 -0.00010359 1.61999e-05 -1.53696e-05 3.54746e-06 -8.73123 -3.272 0.786195 1.00308 1.39782 +5 21 -7.97726e-05 0.000165459 -8.2606e-05 9.22339e-06 -6.60346e-06 7.16169e-07 -9.0085 -3.19207 0.833825 1.03252 1.39067 +5 22 -7.66088e-05 0.000153022 -7.43295e-05 1.56713e-06 3.54804e-06 -2.74354e-06 -9.30654 -3.10015 0.881879 1.04402 1.37327 +5 23 -7.33894e-05 0.000141652 -6.70187e-05 -4.20613e-06 1.08973e-05 -5.13654e-06 -9.57745 -3.02428 0.93033 1.05648 1.37733 +5 24 -6.35195e-05 0.000117845 -5.37954e-05 -7.97182e-06 1.54524e-05 -6.55515e-06 -9.92698 -2.90343 0.979154 1.08374 1.37709 +5 25 -1.48193e-05 2.48575e-05 -9.84518e-06 5.13045e-06 -4.76324e-06 1.13318e-06 -9.72574 -3.09375 1.02833 1.40152 1.78879 +5 26 -1.43799e-05 2.3193e-05 -8.94666e-06 3.6263e-06 -3.18436e-06 7.10579e-07 -10.005 -3.01418 1.07783 1.38909 1.7495 +5 27 -1.38742e-05 2.16118e-05 -8.13269e-06 2.21948e-06 -1.69088e-06 3.06116e-07 -10.295 -2.92998 1.12764 1.38068 1.72286 +5 28 -1.20797e-05 1.81574e-05 -6.62697e-06 1.33133e-06 -8.13333e-07 8.61124e-08 -10.5783 -2.84983 1.17774 1.41297 1.73679 +5 29 -1.15882e-05 1.69134e-05 -6.03501e-06 2.04767e-07 3.86372e-07 -2.39839e-07 -10.9436 -2.72767 1.22812 1.42593 1.72203 +5 30 -1.10916e-05 1.57555e-05 -5.5015e-06 -8.58041e-07 1.53051e-06 -5.54161e-07 -11.3295 -2.59733 1.27876 1.43764 1.71137 +5 31 -9.6276e-06 1.32606e-05 -4.50163e-06 -1.23389e-06 1.8383e-06 -6.12958e-07 -11.701 -2.47608 1.32964 1.46866 1.73022 +5 32 -9.19593e-06 1.23655e-05 -4.11377e-06 -2.09756e-06 2.76973e-06 -8.69257e-07 -12.2368 -2.27112 1.38076 1.47877 1.72044 +5 33 0 0 0 -3.3812e-06 4.23649e-06 -1.29449e-06 -12.8879 -2.00888 -10001 1.4321 1.70075 +5 34 0 0 0 -3.24456e-06 3.9631e-06 -1.1869e-06 -13.6176 -1.71317 -10001 1.48365 1.71602 +5 35 0 0 0 -2.82759e-06 3.35924e-06 -9.81114e-07 -14.3208 -1.4356 -10001 1.53539 1.74785 +6 1 -0.00158532 0.166299 -0.503124 0.0199557 -0.046187 0.0286834 -3.25432 -4.52747 0.020419 0.2 0.626319 +6 2 -0.00210195 0.0826278 -0.22519 0.00936043 -0.021133 0.0127645 -3.96529 -4.50779 0.038235 0.218026 0.644698 +6 3 -0.0022731 0.0535306 -0.139081 0.0050321 -0.0108253 0.00615501 -4.50256 -4.49342 0.057226 0.221556 0.642646 +6 4 -0.00221199 0.0381466 -0.094322 0.00288572 -0.00569829 0.00284094 -4.94678 -4.47214 0.077299 0.225626 0.623906 +6 5 -0.00187818 0.0259013 -0.0578845 0.00185492 -0.00354889 0.00170427 -5.32346 -4.45524 0.098369 0.247112 0.640317 +6 6 -0.00176466 0.0204349 -0.0434431 0.00111865 -0.00179878 0.000575181 -5.6559 -4.43529 0.120362 0.252551 0.628658 +6 7 -0.00164833 0.0166168 -0.033598 0.000638897 -0.000655112 -0.00016933 -5.93655 -4.44057 0.14321 0.258339 0.61365 +6 8 -0.00153676 0.0138191 -0.0265763 0.000312627 0.000123324 -0.000679827 -6.22389 -4.4028 0.166851 0.264433 0.608189 +6 9 -0.000149015 -0.000822154 0.00894657 8.36585e-05 0.000668416 -0.00103893 -6.5477 -4.30513 0.191231 0.244554 0.616567 +6 10 -0.000134383 -0.000465512 0.00535134 4.38808e-05 0.000521529 -0.000744164 -6.79385 -4.2754 0.216299 0.270174 0.641767 +6 11 -0.000467673 0.00287598 -0.00358151 0.000280833 -0.000500056 0.000233304 -6.9021 -4.36314 0.24201 0.44249 0.908719 +6 12 -0.000442113 0.00249202 -0.00297919 0.000204709 -0.000347285 0.000152984 -7.11613 -4.33664 0.268321 0.453249 1 +6 13 -0.000415882 0.00217295 -0.00249641 0.000144693 -0.000226581 8.93071e-05 -7.34166 -4.2896 0.295195 0.463998 0.834369 +6 14 -0.00038988 0.00190469 -0.00210491 9.68482e-05 -0.000130273 3.8399e-05 -7.57698 -4.23004 0.322596 0.474725 0.820962 +6 15 -0.000364643 0.00167695 -0.00178429 5.8381e-05 -5.2904e-05 -2.50818e-06 -7.79892 -4.17679 0.350493 0.485427 0.814796 +6 16 -0.000304141 0.00130714 -0.00131028 3.95757e-05 -2.42832e-05 -1.26698e-05 -8.02063 -4.11903 0.378856 0.51303 0.825311 +6 17 -0.000283814 0.00115842 -0.00112036 1.48441e-05 2.4597e-05 -3.808e-05 -8.24429 -4.0561 0.407658 0.523813 0.82193 +6 18 -0.000264544 0.00102948 -0.000961406 -5.38414e-06 6.43276e-05 -5.86136e-05 -8.35375 -4.0855 0.436874 0.534535 0.827728 +6 19 -2.88785e-05 1.27744e-05 0.000111476 -2.19537e-05 9.658e-05 -7.5133e-05 -8.53317 -4.05843 0.46648 0.520406 0.827606 +6 20 -9.14839e-05 0.00030001 -0.000227164 2.71908e-05 -3.75942e-05 1.33572e-05 -8.60833 -4.09375 0.496456 0.70182 1.1107 +6 21 -8.55372e-05 0.000267993 -0.000196738 1.97722e-05 -2.54643e-05 8.2432e-06 -8.80013 -4.04591 0.52678 0.715815 1.08405 +6 22 -7.97993e-05 0.000239685 -0.000170746 1.34745e-05 -1.52044e-05 3.93275e-06 -8.99516 -3.99421 0.557436 0.729596 1.07572 +6 23 -7.43179e-05 0.000214615 -0.000148478 8.12266e-06 -6.52754e-06 3.04876e-07 -9.19442 -3.93828 0.588405 0.743172 1.07186 +6 24 -6.91203e-05 0.00019238 -0.000129352 3.57306e-06 8.02788e-07 -2.74068e-06 -9.39895 -3.87776 0.619671 0.756553 1.07016 +6 25 -6.42199e-05 0.00017263 -0.000112886 -2.92535e-07 6.98266e-06 -5.28759e-06 -9.61072 -3.81127 0.651221 0.769748 1.06976 +6 26 -5.96195e-05 0.000155064 -9.86778e-05 -3.5725e-06 1.2176e-05 -7.40626e-06 -9.8242 -3.74998 0.683039 0.782763 1.06993 +6 27 -5.81964e-07 -1.05739e-05 1.63271e-05 -6.34918e-06 1.65208e-05 -9.15631e-06 -9.87248 -3.79182 0.715112 0.768892 1.08 +6 28 -1.6291e-05 3.68841e-05 -1.97513e-05 4.6465e-06 -5.4378e-06 1.63154e-06 -9.80217 -3.90459 0.747429 0.976011 1.4583 +6 29 -1.51971e-05 3.32622e-05 -1.73717e-05 3.59872e-06 -4.06545e-06 1.1731e-06 -9.97589 -3.86128 0.779978 1.00642 1.55 +6 30 -1.58721e-05 3.38484e-05 -1.74307e-05 2.46855e-06 -2.53857e-06 6.47621e-07 -10.1544 -3.81483 0.812748 1.00637 1.39048 +6 31 -1.47427e-05 3.05302e-05 -1.53559e-05 1.63487e-06 -1.4496e-06 2.84956e-07 -10.3345 -3.76758 0.84573 1.02231 1.38654 +6 32 -1.36798e-05 2.75493e-05 -1.35419e-05 9.09419e-07 -5.08419e-07 -2.63073e-08 -10.5251 -3.71374 0.878913 1.03797 1.38539 +6 33 -1.26835e-05 2.48711e-05 -1.19542e-05 1.12496e-07 5.8038e-07 -4.07183e-07 -10.7751 -3.62492 0.91229 1.05182 1.36748 +6 34 -1.17526e-05 2.24646e-05 -1.05633e-05 -4.49613e-07 1.30269e-06 -6.43769e-07 -10.993 -3.55519 0.94585 1.06668 1.36908 +6 35 -1.0885e-05 2.03018e-05 -9.34347e-06 -9.3493e-07 1.91953e-06 -8.43453e-07 -11.2237 -3.47825 0.979588 1.08131 1.37139 +7 1 -0.000493021 0.102422 -0.330811 0.0121013 -0.030377 0.0203521 -3.70161 -5.02736 0.014654 0.2 0.62596 +7 2 -0.000843977 0.0512519 -0.152902 0.00579723 -0.0142943 0.00938985 -4.39783 -5.01931 0.027204 0.201939 0.64176 +7 3 -0.00100458 0.0337772 -0.0988953 0.00324276 -0.00780008 0.00498877 -4.92647 -5.00623 0.040414 0.200114 0.64496 +7 4 -0.000895045 0.0219557 -0.0593814 0.00202155 -0.00476727 0.00298284 -5.35418 -4.99691 0.054246 0.214249 0.665767 +7 5 -0.000783019 0.0151583 -0.037979 0.00134335 -0.00310432 0.00189928 -5.71951 -4.98371 0.068662 0.22898 0.682785 +7 6 -0.000771801 0.0122826 -0.0300776 0.000895538 -0.00196195 0.00111945 -6.0344 -4.97112 0.083631 0.228299 0.602839 +7 7 -0.000669214 0.00912863 -0.0207503 0.000641588 -0.00137475 0.00076514 -6.31881 -4.95568 0.09912 0.24409 0.612012 +7 8 -0.000651215 0.0078323 -0.0173804 0.000432807 -0.000831905 0.00038504 -6.57445 -4.94209 0.115102 0.24385 0.615662 +7 9 -0.000631071 0.00685258 -0.0148392 0.000277467 -0.000414833 8.05213e-05 -6.7953 -4.949 0.13155 0.243551 0.603101 +7 10 -0.000549631 0.00538181 -0.0108459 0.000208339 -0.000300451 5.22998e-05 -7.01285 -4.93487 0.148439 0.260698 0.6176 +7 11 -0.000533203 0.0048397 -0.00951436 0.000117881 -5.10056e-05 -0.000135475 -7.26985 -4.85693 0.165747 0.26073 0.618206 +7 12 -0.000465428 0.00387353 -0.00711058 8.86051e-05 -3.01008e-05 -0.00010657 -7.4699 -4.83489 0.183452 0.278671 0.636676 +7 13 -9.03152e-05 0.000187658 0.00140556 3.10234e-05 0.0001328 -0.000232447 -7.68854 -4.78258 0.201535 0.25594 0.628441 +7 14 -0.000148322 0.00099753 -0.00130105 0.000111219 -0.000216574 0.00011022 -7.76843 -4.85968 0.219977 0.463618 0.857616 +7 15 -0.000147849 0.000922346 -0.00117361 8.87641e-05 -0.000169096 8.40587e-05 -7.93081 -4.84607 0.23876 0.421854 0.879771 +7 16 -0.00012838 0.000748485 -0.000907518 7.19333e-05 -0.000134803 6.59329e-05 -8.07458 -4.84547 0.257869 0.446085 0.885749 +7 17 -0.000126997 0.000697615 -0.000826178 5.68734e-05 -0.000103283 4.87691e-05 -8.26016 -4.79745 0.277288 0.457683 0.920382 +7 18 -0.000125094 0.000652227 -0.000754986 4.40617e-05 -7.64153e-05 3.41286e-05 -8.41701 -4.77312 0.297003 0.461683 0.842957 +7 19 -0.000108417 0.000534403 -0.000590809 3.52947e-05 -5.9247e-05 2.54014e-05 -8.59029 -4.73045 0.317001 0.481694 0.838752 +7 20 -0.000106441 0.000502257 -0.000543259 2.55762e-05 -3.84023e-05 1.37368e-05 -8.76547 -4.6826 0.337269 0.485336 0.816441 +7 21 -0.000104293 0.000473114 -0.000500912 1.78998e-05 -2.26403e-05 5.38428e-06 -8.90899 -4.65999 0.357794 0.489589 0.819727 +7 22 -9.02931e-05 0.000389989 -0.000395244 1.34847e-05 -1.47557e-05 1.78089e-06 -9.08414 -4.60685 0.378567 0.509723 0.822377 +7 23 -8.83338e-05 0.0003687 -0.000366064 6.81284e-06 -1.1336e-07 -6.61315e-06 -9.26329 -4.54815 0.399576 0.513023 0.810161 +7 24 -8.63395e-05 0.00034919 -0.000339763 6.5284e-07 1.36992e-05 -1.47134e-05 -9.44692 -4.48381 0.420812 0.516061 0.816646 +7 25 -2.7015e-05 9.77091e-05 -7.90307e-05 1.19102e-05 -1.85489e-05 7.44823e-06 -9.32414 -4.67167 0.442265 0.713491 1.11483 +7 26 -2.66876e-05 9.27779e-05 -7.35109e-05 9.98482e-06 -1.53283e-05 6.06894e-06 -9.47086 -4.63538 0.463927 0.656212 1.11475 +7 27 -2.62705e-05 8.81264e-05 -6.84547e-05 8.16977e-06 -1.2241e-05 4.72254e-06 -9.59509 -4.61471 0.485788 0.685783 1.14521 +7 28 -2.26831e-05 7.319e-05 -5.49453e-05 6.80274e-06 -1.0008e-05 3.78862e-06 -9.73767 -4.57976 0.507841 0.708262 1.15584 +7 29 -2.22553e-05 6.96045e-05 -5.12812e-05 5.39626e-06 -7.63211e-06 2.75998e-06 -9.88786 -4.53774 0.530079 0.714609 1.10388 +7 30 -2.17917e-05 6.62251e-05 -4.79106e-05 4.06921e-06 -5.35999e-06 1.76219e-06 -10.0421 -4.49189 0.552494 0.720566 1.07277 +7 31 -2.13048e-05 6.30436e-05 -4.48078e-05 2.98009e-06 -3.55467e-06 9.98804e-07 -10.1617 -4.47096 0.57508 0.726951 1.07615 +7 32 -1.8365e-05 5.25036e-05 -3.61331e-05 2.31817e-06 -2.55338e-06 6.12731e-07 -10.321 -4.42022 0.59783 0.749161 1.08 +7 33 -1.79279e-05 5.00348e-05 -3.38547e-05 1.31492e-06 -8.22529e-07 -1.53298e-07 -10.4864 -4.36452 0.620738 0.754529 1.06834 +7 34 -1.74865e-05 4.77099e-05 -3.17504e-05 3.58595e-07 8.48852e-07 -9.02945e-07 -10.6586 -4.30376 0.643798 0.759562 1.05852 +7 35 -1.70456e-05 4.55217e-05 -2.98055e-05 -2.82207e-07 1.85549e-06 -1.30022e-06 -10.7764 -4.28261 0.667006 0.765933 1.05205 +8 1 -0.000113861 0.0670184 -0.227065 0.00775356 -0.0205956 0.014504 -4.09014 -5.46662 0.011049 0.2 0.629204 +8 2 -0.00035767 0.0336746 -0.107188 0.00376479 -0.00986474 0.00684448 -4.7795 -5.46194 0.020388 0.20806 0.639698 +8 3 -0.00038786 0.0199757 -0.05981 0.00216248 -0.00558722 0.00381781 -5.30339 -5.4519 0.030124 0.217311 0.649902 +8 4 -0.00044173 0.0147232 -0.0440538 0.00137256 -0.0035077 0.00237506 -5.72409 -5.44214 0.040238 0.2 0.638402 +8 5 -0.000394385 0.0102802 -0.0289147 0.00092847 -0.002337 0.00155627 -6.0773 -5.43639 0.050715 0.207036 0.650914 +8 6 -0.000349691 0.00749768 -0.0198583 0.000657508 -0.00162955 0.00106696 -6.38735 -5.42565 0.061537 0.218091 0.66256 +8 7 -0.000354465 0.00639419 -0.0168647 0.000469164 -0.00112589 0.000710099 -6.66114 -5.41379 0.07269 0.213945 0.697446 +8 8 -0.000313286 0.00494231 -0.0122795 0.000352251 -0.000831427 0.000514899 -6.9053 -5.40691 0.084159 0.225635 0.714155 +8 9 -0.000277417 0.0038903 -0.00912281 0.00026991 -0.000626477 0.000380893 -7.13141 -5.39528 0.095932 0.237632 0.730957 +8 10 -0.000278046 0.00353444 -0.00823421 0.000196567 -0.000424242 0.000232252 -7.34127 -5.38159 0.107995 0.233786 0.6 +8 11 -0.000247121 0.00286071 -0.00629631 0.000154767 -0.000327979 0.000175896 -7.50529 -5.40754 0.120336 0.246337 0.6 +8 12 -0.000247137 0.00266425 -0.00582073 0.00010806 -0.000193295 7.1801e-05 -7.70036 -5.38213 0.132945 0.242472 0.601126 +8 13 -0.000220422 0.00219653 -0.00453931 8.63829e-05 -0.000151093 5.43359e-05 -7.87503 -5.36403 0.14581 0.255529 0.612201 +8 14 -0.000196706 0.00182181 -0.00356825 6.95864e-05 -0.000118982 4.13849e-05 -8.05139 -5.33408 0.158921 0.268834 0.62867 +8 15 -0.000197195 0.00173835 -0.0033756 4.32841e-05 -4.03232e-05 -2.14876e-05 -8.24715 -5.27798 0.172269 0.265148 0.625784 +8 16 -0.000176354 0.00145729 -0.0026858 3.48588e-05 -3.06036e-05 -1.83638e-05 -8.39982 -5.26082 0.185844 0.278899 0.639421 +8 17 -2.2813e-05 -3.72035e-05 0.0007941 1.50007e-05 3.14752e-05 -7.00982e-05 -8.57756 -5.21019 0.199639 0.252655 0.626944 +8 18 -2.10188e-05 -1.98001e-05 0.000578704 1.15866e-05 2.78924e-05 -5.74655e-05 -8.72029 -5.19208 0.213644 0.266957 0.641019 +8 19 -4.96928e-05 0.000324808 -0.000419484 3.52452e-05 -7.07757e-05 3.69194e-05 -8.74233 -5.28976 0.227853 0.474685 0.862985 +8 20 -5.12852e-05 0.000316738 -0.000403548 3.0171e-05 -6.02046e-05 3.12535e-05 -8.85208 -5.29505 0.242257 0.410003 0.857431 +8 21 -4.57032e-05 0.000268145 -0.000329212 2.541e-05 -4.98957e-05 2.54642e-05 -8.97518 -5.28138 0.256849 0.471136 0.873122 +8 22 -4.68342e-05 0.00026263 -0.000318376 2.13696e-05 -4.12755e-05 2.0716e-05 -9.13304 -5.23157 0.271623 0.448117 0.870213 +8 23 -4.17029e-05 0.00022327 -0.00026106 1.80746e-05 -3.43412e-05 1.69364e-05 -9.25291 -5.21538 0.286573 0.463335 0.886183 +8 24 -4.25377e-05 0.000219464 -0.000253553 1.4766e-05 -2.71119e-05 1.28491e-05 -9.39386 -5.17766 0.301692 0.462788 0.954746 +8 25 -3.78564e-05 0.000187178 -0.000208775 1.25213e-05 -2.26033e-05 1.05193e-05 -9.50918 -5.16074 0.316974 0.478309 0.977782 +8 26 -3.84957e-05 0.00018454 -0.000203498 9.74921e-06 -1.64061e-05 6.93125e-06 -9.6527 -5.11602 0.332415 0.477467 0.812842 +8 27 -3.42446e-05 0.000157792 -0.000168138 8.27115e-06 -1.36695e-05 5.6612e-06 -9.76416 -5.0988 0.348008 0.493273 0.828487 +8 28 -3.47511e-05 0.000155965 -0.000164386 5.90481e-06 -8.26623e-06 2.46689e-06 -9.91014 -5.04844 0.363748 0.492145 0.805799 +8 29 -3.09014e-05 0.000133627 -0.000136216 4.99427e-06 -6.83824e-06 1.97724e-06 -10.0185 -5.03098 0.379632 0.508217 0.821908 +8 30 -3.13159e-05 0.000132373 -0.000133525 2.9433e-06 -2.06525e-06 -8.95025e-07 -10.1682 -4.97462 0.395653 0.506816 0.815027 +8 31 -3.17087e-05 0.000131295 -0.000131087 1.34359e-06 1.4338e-06 -2.85194e-06 -10.2743 -4.95686 0.411808 0.50634 0.838671 +8 32 -2.81847e-05 0.000112748 -0.000108975 6.5722e-07 2.64929e-06 -3.40977e-06 -10.4289 -4.89419 0.428093 0.52147 0.826437 +8 33 -7.21221e-06 1.91852e-05 -6.17874e-06 -6.61647e-07 5.5179e-06 -4.99835e-06 -10.533 -4.8763 0.444503 0.500963 0.844339 +8 34 -8.65339e-06 3.03484e-05 -2.43357e-05 3.24393e-06 -5.18491e-06 2.12942e-06 -10.3791 -5.07142 0.461034 0.704904 1.10295 +8 35 -7.68292e-06 2.61185e-05 -2.03929e-05 2.7982e-06 -4.40809e-06 1.78329e-06 -10.4745 -5.05601 0.477684 0.72132 1.11999 +9 1 0.000171123 0.0406962 -0.133985 0.0050392 -0.0136807 0.00973374 -4.43954 -5.85303 0.008639 0.232951 0.656547 +9 2 -0.000151897 0.0231657 -0.0774205 0.00254676 -0.00697825 0.00503307 -5.12411 -5.84701 0.015871 0.208948 0.635887 +9 3 -0.000186665 0.0137988 -0.0438842 0.00147757 -0.00400404 0.00285365 -5.63909 -5.84442 0.023354 0.216243 0.644012 +9 4 -0.000185197 0.00907004 -0.0274724 0.000947227 -0.002538 0.00178693 -6.0573 -5.83655 0.031081 0.223771 0.651987 +9 5 -0.000173196 0.00635881 -0.01836 0.000648536 -0.00171777 0.00119453 -6.40874 -5.82854 0.039043 0.231525 0.660211 +9 6 -0.000190201 0.00530844 -0.015485 0.000470599 -0.00124425 0.000866564 -6.71056 -5.82109 0.04723 0.200369 0.643483 +9 7 -0.000170814 0.00403407 -0.0112089 0.000349267 -0.000912181 0.00062691 -6.9752 -5.81732 0.055636 0.208953 0.6532 +9 8 -0.000153431 0.00314359 -0.00832933 0.000266186 -0.000686606 0.000465582 -7.21652 -5.80878 0.064252 0.217751 0.662325 +9 9 -0.000159166 0.0028509 -0.00761519 0.000204226 -0.000517023 0.000343953 -7.43528 -5.79949 0.073071 0.211576 0.662016 +9 10 -0.000143099 0.00230591 -0.00587205 0.000161533 -0.000403603 0.00026469 -7.63363 -5.79515 0.082087 0.220762 0.673018 +9 11 -0.000128922 0.00188859 -0.00459065 0.000129555 -0.000319442 0.000206502 -7.82066 -5.78606 0.091293 0.23014 0.683897 +9 12 -0.000132359 0.00178869 -0.00437504 9.97809e-05 -0.000234017 0.000141784 -7.99656 -5.77512 0.100682 0.223908 0.8 +9 13 -0.000119691 0.00149547 -0.0034918 8.16281e-05 -0.000188765 0.000112611 -8.13236 -5.80244 0.110249 0.233635 0.6 +9 14 -0.00010838 0.00125911 -0.00281009 6.73365e-05 -0.000153525 9.01753e-05 -8.28923 -5.7905 0.119988 0.243535 0.6 +9 15 -9.8244e-05 0.00106641 -0.00227774 5.59469e-05 -0.000125754 7.27195e-05 -8.43789 -5.7788 0.129894 0.253603 0.607258 +9 16 -0.00010093 0.00104381 -0.00223785 4.16391e-05 -8.27035e-05 3.85248e-05 -8.60067 -5.74154 0.13996 0.247437 0.605069 +9 17 -9.17332e-05 0.000893665 -0.00183427 3.48838e-05 -6.81761e-05 3.11489e-05 -8.74942 -5.7146 0.150183 0.257809 0.620641 +9 18 -9.41564e-05 0.000884269 -0.00182102 2.33815e-05 -3.13591e-05 6.93093e-08 -8.90746 -5.6728 0.160557 0.251395 0.613405 +9 19 -8.57666e-05 0.000763207 -0.00150544 1.96115e-05 -2.55864e-05 -4.04204e-07 -9.03508 -5.65902 0.171078 0.262051 0.624108 +9 20 -7.81335e-05 0.000660434 -0.00124934 1.65062e-05 -2.0933e-05 -7.22836e-07 -9.15808 -5.64527 0.18174 0.272848 0.634828 +9 21 -5.72783e-06 -6.12767e-05 0.00048721 8.20053e-06 6.91776e-06 -2.51556e-05 -9.30906 -5.59589 0.192541 0.244349 0.61988 +9 22 -6.70691e-06 -3.6974e-05 0.000354767 6.75597e-06 6.57357e-06 -2.14045e-05 -9.42558 -5.58137 0.203476 0.25572 0.630877 +9 23 -5.14385e-06 -3.85249e-05 0.000299857 5.56921e-06 6.19381e-06 -1.82605e-05 -9.53857 -5.56701 0.21454 0.266797 0.641944 +9 24 -2.01194e-05 0.000133066 -0.000174361 1.40858e-05 -2.91758e-05 1.56283e-05 -9.5254 -5.67846 0.225731 0.474623 0.858965 +9 25 -2.13558e-05 0.00013481 -0.000175589 1.23984e-05 -2.54837e-05 1.35411e-05 -9.6236 -5.67172 0.237044 0.457034 0.868883 +9 26 -1.94064e-05 0.000117541 -0.000148609 1.09625e-05 -2.24491e-05 1.19051e-05 -9.71689 -5.66786 0.248476 0.467021 0.858638 +9 27 -2.04489e-05 0.000119389 -0.000150173 9.53997e-06 -1.92873e-05 1.00912e-05 -9.8264 -5.64529 0.260024 0.440625 0.869121 +9 28 -1.8572e-05 0.000104396 -0.000127523 8.40673e-06 -1.68819e-05 8.78399e-06 -9.94407 -5.61398 0.271685 0.444871 0.857982 +9 29 -1.68647e-05 9.1389e-05 -0.000108474 7.33608e-06 -1.45408e-05 7.46224e-06 -10.0399 -5.60086 0.283454 0.456846 0.870168 +9 30 -1.76807e-05 9.31556e-05 -0.000110064 6.27466e-06 -1.21721e-05 6.10142e-06 -10.1323 -5.58943 0.29533 0.453351 0.891977 +9 31 -1.60499e-05 8.17216e-05 -9.38631e-05 5.49666e-06 -1.05353e-05 5.21621e-06 -10.2503 -5.55252 0.307309 0.465571 0.89293 +9 32 -1.4567e-05 7.17503e-05 -8.01573e-05 4.8105e-06 -9.09818e-06 4.44153e-06 -10.3414 -5.53914 0.319389 0.477835 0.90701 +9 33 -1.52227e-05 7.33452e-05 -8.15958e-05 3.94707e-06 -7.12484e-06 3.28082e-06 -10.4626 -5.49649 0.331567 0.474041 0.816324 +9 34 -1.38127e-05 6.44974e-05 -6.98216e-05 3.45528e-06 -6.15139e-06 2.79085e-06 -10.5514 -5.4829 0.34384 0.486478 0.828443 +9 35 -1.44045e-05 6.60404e-05 -7.12201e-05 2.72803e-06 -4.50244e-06 1.8335e-06 -10.6391 -5.46915 0.356206 0.482815 0.816166 +10 1 0.000175804 0.0288299 -0.0976324 0.00347184 -0.00969875 0.00706157 -4.74966 -6.20049 0.006945 0.232746 0.655696 +10 2 -5.93122e-05 0.0165399 -0.0574229 0.00178347 -0.00505774 0.00375536 -5.43107 -6.19596 0.012717 0.208695 0.63318 +10 3 -9.14189e-05 0.00987945 -0.0329199 0.00104217 -0.00292905 0.00215403 -5.94676 -6.18981 0.018657 0.214534 0.639255 +10 4 -9.68619e-05 0.00651748 -0.0208557 0.000673208 -0.00187485 0.00136536 -6.35743 -6.18872 0.024759 0.220532 0.645771 +10 5 -9.37071e-05 0.00458981 -0.0141129 0.000464645 -0.00128203 0.000924417 -6.70531 -6.1825 0.031019 0.226685 0.652115 +10 6 -8.77329e-05 0.00338453 -0.0100059 0.000336102 -0.000918643 0.000655758 -7.00566 -6.17624 0.037433 0.232987 0.658577 +10 7 -9.86592e-05 0.00295555 -0.00891341 0.000257309 -0.000707202 0.000509713 -7.26749 -6.17002 0.043995 0.2 0.639122 +10 8 -8.96081e-05 0.00231871 -0.00671689 0.00019796 -0.000538673 0.000384101 -7.50086 -6.16822 0.050702 0.201196 0.646408 +10 9 -8.1456e-05 0.00185654 -0.00516981 0.000155588 -0.000419112 0.000295625 -7.71603 -6.16144 0.05755 0.208186 0.653522 +10 10 -7.41506e-05 0.00151101 -0.00404779 0.00012442 -0.000331749 0.000231457 -7.91328 -6.15457 0.064534 0.215314 0.660781 +10 11 -7.85633e-05 0.00143116 -0.00390063 0.000100576 -0.000265809 0.000184183 -8.09504 -6.14709 0.071651 0.207717 0.649254 +10 12 -7.16271e-05 0.00119563 -0.00313308 8.25263e-05 -0.000215782 0.000147801 -8.26488 -6.13993 0.078897 0.215097 0.657235 +10 13 -6.54286e-05 0.00100807 -0.00254191 6.84053e-05 -0.000176941 0.000119797 -8.42056 -6.13721 0.086269 0.222604 0.665655 +10 14 -5.98662e-05 0.000856561 -0.00208007 5.71951e-05 -0.000146347 9.79327e-05 -8.5705 -6.12989 0.093764 0.230236 0.673833 +10 15 -6.27952e-05 0.000844194 -0.00208083 4.62791e-05 -0.000114355 7.34181e-05 -8.71369 -6.12077 0.101377 0.222479 0.719919 +10 16 -5.76283e-05 0.000727271 -0.00172588 3.92e-05 -9.57667e-05 6.073e-05 -8.82256 -6.14718 0.109107 0.230335 0.731427 +10 17 -5.29438e-05 0.00062957 -0.00143965 3.33942e-05 -8.06563e-05 5.05185e-05 -8.95359 -6.13653 0.116949 0.238304 0.742222 +10 18 -4.8685e-05 0.000547289 -0.00120695 2.85925e-05 -6.82713e-05 4.22338e-05 -9.078 -6.12694 0.124902 0.246385 0.75336 +10 19 -5.10039e-05 0.000552116 -0.00123334 2.22676e-05 -4.84899e-05 2.60521e-05 -9.22853 -6.0793 0.132961 0.238452 0.6 +10 20 -4.70113e-05 0.000483884 -0.00104234 1.91846e-05 -4.12592e-05 2.18598e-05 -9.34672 -6.06682 0.141125 0.246732 0.60655 +10 21 -4.3352e-05 0.000425253 -0.000884094 1.65871e-05 -3.52299e-05 1.84057e-05 -9.4577 -6.05766 0.149391 0.255115 0.61512 +10 22 -3.9993e-05 0.000374639 -0.000752317 1.4387e-05 -3.01766e-05 1.55455e-05 -9.56597 -6.04699 0.157757 0.263599 0.623922 +10 23 -4.19463e-05 0.000383728 -0.000779131 1.01513e-05 -1.61553e-05 3.49283e-06 -9.69786 -6.00584 0.166219 0.255476 0.618158 +10 24 -3.87605e-05 0.000339797 -0.000666437 8.80665e-06 -1.37702e-05 2.84702e-06 -9.80059 -5.99439 0.174775 0.264139 0.626869 +10 25 -3.58205e-05 0.000301392 -0.000571444 7.65733e-06 -1.17612e-05 2.31957e-06 -9.90017 -5.98314 0.183424 0.272894 0.635575 +10 26 -2.19832e-06 -3.223e-05 0.000232857 4.15337e-06 4.96542e-07 -8.72007e-06 -10.0301 -5.93438 0.192163 0.243464 0.619275 +10 27 -1.0931e-05 8.06073e-05 -0.000113966 8.16965e-06 -1.75772e-05 9.73031e-06 -10.0077 -6.04849 0.200989 0.45252 0.857343 +10 28 -1.00927e-05 7.15368e-05 -9.86216e-05 7.22431e-06 -1.53872e-05 8.42893e-06 -10.0959 -6.04041 0.209901 0.461379 0.866475 +10 29 -9.31757e-06 6.35738e-05 -8.54937e-05 6.56979e-06 -1.40166e-05 7.70716e-06 -10.183 -6.03125 0.218897 0.469199 0.850756 +10 30 -8.60084e-06 5.65673e-05 -7.42344e-05 5.82924e-06 -1.23103e-05 6.69716e-06 -10.2674 -6.02306 0.227974 0.478221 0.860059 +10 31 -9.33653e-06 5.90765e-05 -7.74765e-05 5.29792e-06 -1.11484e-05 6.0419e-06 -10.326 -6.03931 0.237131 0.459466 0.868146 +10 32 -8.61119e-06 5.26888e-05 -6.74443e-05 4.81659e-06 -1.01352e-05 5.50353e-06 -10.4354 -6.00288 0.246366 0.467355 0.852148 +10 33 -7.94147e-06 4.70359e-05 -5.87887e-05 4.29011e-06 -8.93363e-06 4.79834e-06 -10.5171 -5.99247 0.255678 0.476565 0.861477 +10 34 -8.55359e-06 4.92366e-05 -6.15485e-05 3.85602e-06 -7.96656e-06 4.24388e-06 -10.5967 -5.98275 0.265063 0.415551 0.869646 +10 35 -7.88495e-06 4.40334e-05 -5.37572e-05 3.49568e-06 -7.20374e-06 3.83418e-06 -10.6956 -5.95343 0.274522 0.428489 0.855259 + diff --git a/src/eic_evgen/CrossSection_Params/PiPlus_Param b/src/eic_evgen/CrossSection_Params/PiPlus_Param deleted file mode 100644 index e69de29..0000000 diff --git a/src/eic_evgen/CrossSection_Params/KPlusLambda_Param b/src/eic_evgen/CrossSection_Params/PiPlus_Param_sigL similarity index 100% rename from src/eic_evgen/CrossSection_Params/KPlusLambda_Param rename to src/eic_evgen/CrossSection_Params/PiPlus_Param_sigL diff --git a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param b/src/eic_evgen/CrossSection_Params/PiPlus_Param_sigT similarity index 100% rename from src/eic_evgen/CrossSection_Params/KPlusSigma_Param rename to src/eic_evgen/CrossSection_Params/PiPlus_Param_sigT diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index 6e69450..0e7910d 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -10,7 +10,6 @@ /// /// Comment: Feb 24, 2020: the main function is excuted in main.cc - #include "eic.h" using std::setw; @@ -18,6 +17,7 @@ using std::setprecision; using std::cout; using std::cin; using std::endl; +using std::vector; using namespace std; //--------------------------------------------------------- @@ -114,8 +114,8 @@ void eic() { /*--------------------------------------------------*/ // SJDK 21/12/22 - Note that this is the one that actually gets used, reads in the .json file void eic(Json::Value obj) { - - TString targetname; + + TString targetname; TString charge; int target_direction = obj["Targ_dir"].asInt(); @@ -279,9 +279,19 @@ void eic(Json::Value obj) { } // 18/01/23 - SJDK - I think this would probably be the best point to set the parameter read in for cross section calculations, once the particle and hadron are set, it can then read in the relevant parameter array. For example, assign "sigParArray" to the output of "ReadCrossSectionPar" - //sigParArray = ReadCrossSectionPar(particle, hadron); - - if(particle != "pi0"){ // Default case now + + //vector>>> sig; + SigPar = ReadCrossSectionPar(particle, hadron); + /* + cout << "!!!!!!!!!!!!!!!!!! TEST - EIC.CC !!!!!!!!!!!!!!!!!!" << endl; + cout<process_reaction(); delete r1; @@ -291,7 +301,6 @@ void eic(Json::Value obj) { r1->process_reaction(); delete r1; } - } /*--------------------------------------------------*/ @@ -340,20 +349,22 @@ TString ExtractParticle(TString particle) { TString ExtractCharge(TString particle) { - TString charge; + TString charge; - if (particle.Contains("+") || particle.Contains("plus")) { - charge = "+"; - } else if (particle.Contains("-") || particle.Contains("minus")) { - charge = "-"; - } else { - charge = "0"; - } - return charge; + if (particle.Contains("+") || particle.Contains("plus")) { + charge = "+"; + } else if (particle.Contains("-") || particle.Contains("minus")) { + charge = "-"; + } else { + charge = "0"; + } + return charge; } -double ReadCrossSectionPar(TString particle, TString hadron){ - +vector>>> ReadCrossSectionPar(TString particle, TString hadron){ + + string sigL_ParamFile, sigT_ParamFile; + if (particle == "Pi+" && hadron == "Neutron"){ cout << "Add Pi+/Neutron case here" << endl; } @@ -362,9 +373,13 @@ double ReadCrossSectionPar(TString particle, TString hadron){ } else if (particle == "K+" && hadron == "Lambda"){ cout << "Add K+/Lambda case here" << endl; + sigL_ParamFile = "../src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigL"; + sigT_ParamFile = "../src/eic_evgen/CrossSection_Params/KPlusLambda_Param_sigT"; // Shouldn't really have a relative path, should look at setting a DEMPGen variable and doing this in a better way later } else if (particle == "K+" && hadron == "Sigma"){ cout << "Add K+/Sigma case here" << endl; + sigL_ParamFile = "../src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL"; + sigT_ParamFile = "../src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigT"; } else if (particle == "Pi0"){ cout << "Add Pi0 case here" << endl; @@ -372,8 +387,34 @@ double ReadCrossSectionPar(TString particle, TString hadron){ else{ cout << "Throw some error" << endl; } - - // Need to set and return the array, whatever it is - // retrun Array; - + + //.................................................................................................... + // Love's model parameters (Gojko, Stephen and Nishchey helped me to understand this part) + //.................................................................................................... + double ptmp; + std::vector>>> p_vec; + fstream file_vgl; // The parameterization file we will open and loop over + + for (int i = 0; i < 2; i++){ + if(i == 0){ + file_vgl.open(sigL_ParamFile, ios::in); + } + if(i == 1){ + file_vgl.open(sigT_ParamFile, ios::in); + } + p_vec.push_back(std::vector>>()); + for(int j=0; j <9; j++){// Loop over all values of W - 2 to 10 + p_vec[i].push_back(std::vector>()); + for(int k=0; k<35; k++){ // Loop over all values of Q2 - 1 to 35 for each w + p_vec[i][j].push_back(std::vector()); + + for(int l=0; l<13; l++){ //Loop over all columns at once + file_vgl>>ptmp; + p_vec[i][j][k].push_back(ptmp); + } + } + } + file_vgl.close();// Need to close the file at end of each loop over i + } + return p_vec; } diff --git a/src/eic_evgen/eic.h b/src/eic_evgen/eic.h index c059cc0..6adb707 100644 --- a/src/eic_evgen/eic.h +++ b/src/eic_evgen/eic.h @@ -39,6 +39,8 @@ #include "json/json.h" #include "json/json-forwards.h" +using std::vector; + void eic(); //void eic(int, int, int, TString, int, TString); @@ -53,6 +55,9 @@ void SetEICSeed(int); TString ExtractParticle(TString); TString ExtractCharge(TString); -double SetCrossSectionPar(TString, TString); +vector>>> ReadCrossSectionPar(TString particle, TString hadron); #endif + + + diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index 46a07ab..dc7b273 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -13,13 +13,14 @@ #include "eic_pim.h" +using std::vector; using namespace std; //TRandom2 *fRandom; TRandom3 *fRandom; TFile *f; -TTree *t1; +TTree *t1; int gKinematics_type; bool gPi0_decay; @@ -158,6 +159,8 @@ double fOmega_Energy_CM, fOmega_Mom_CM, fOmega_Energy_CM_GeV, fOmega_Mom_CM_GeV; double fMomentum[300]; +vector>>> SigPar; + double fProb[300] = { 6.03456, 6.02429, 6.01155, 5.99636, 5.97873, 5.95869, 5.93626, 5.91147, 5.88435, 5.85493, 5.82325, 5.78935, 5.75326, 5.71504, 5.67472, 5.63235, 5.58799, 5.54169, 5.4935, 5.44347, diff --git a/src/eic_evgen/eic_pim.h b/src/eic_evgen/eic_pim.h index 53c9571..7f99fb1 100644 --- a/src/eic_evgen/eic_pim.h +++ b/src/eic_evgen/eic_pim.h @@ -12,6 +12,8 @@ #include "TRandom2.h" #include "TRandom3.h" +using std::vector; + class pim { public: @@ -643,7 +645,6 @@ extern double fPion_MomX_RF_GeV; extern double fPion_MomY_RF_GeV; extern double fPion_MomZ_RF_GeV; - extern double fT_Para; extern double fT_Para_GeV; extern double fT; @@ -836,6 +837,9 @@ extern double conserve; // 16/06/21 AU -> New Variables for conservation la extern double ene; extern double mom; +// 27/01/22 - Love Preet - Adding in vector of cross section parameters +extern vector>>> SigPar; + //extern double fProb[300] = { //6.03456, 6.02429, 6.01155, 5.99636, 5.97873, 5.95869, 5.93626, 5.91147, 5.88435, 5.85493, //5.82325, 5.78935, 5.75326, 5.71504, 5.67472, 5.63235, 5.58799, 5.54169, 5.4935, 5.44347, diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 93225c0..7b6c787 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -105,7 +105,7 @@ void DEMP_Reaction::Init() { if (rHadron == "Neutron" ) { rParticle_scat_hadron = "Neutron"; recoil_hadron = Neutron; - f_Scat_hadron_Mass = fNeutron_Mass; + f_Scat_hadron_Mass = fNeutron_Mass; f_Scat_hadron_Mass_GeV = f_Scat_hadron_Mass/1000; } else if (rHadron == "Proton" ) { @@ -171,8 +171,7 @@ void DEMP_Reaction::Processing_Event() { // ---------------------------------------------------- if( kCalcFermi ) { - Consider_Proton_Fermi_Momentum(); - + Consider_Proton_Fermi_Momentum(); } // ---------------------------------------------------- @@ -379,7 +378,6 @@ void DEMP_Reaction::Processing_Event() { // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // //////////////////////////////////////////////////////////////////////////////////////////// - // ----------------------------------------------------------------------------------------- // Calculate -t // ----------------------------------------------------------------------------------------- diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index f4e9a02..3ab047c 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -71,8 +71,8 @@ class DEMP_Reaction { Double_t GetPi0_CrossSection(); //Double_t GetPiPlus_CrossSection(); - Double_t GetKPlus_CrossSection(); - + //Double_t GetKPlus_CrossSection(); + Double_t GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TString fHadron); /*--------------------------------------------------*/ // Parameters From a32472e7943232f20ab666e176ed5f19567fc4e8 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Tue, 31 Jan 2023 15:14:23 -0600 Subject: [PATCH 12/35] Added new KPlus calculation class which calculates the KPlus cross section using Ali's scaling method. Modified other files, actually incorporated Love's cross section determination in DEMP_Reaction.cc --- CMakeLists.txt | 2 +- src/eic_evgen/KPlus_sig_Scaling.cc | 144 +++ src/eic_evgen/KPlus_sig_Scaling.h | 7 + src/eic_evgen/eic.cc | 9 + src/eic_evgen/eic.h | 1 + .../process_routine/DEMP_Reaction.cc | 1144 ++++++++++++++++- 6 files changed, 1287 insertions(+), 20 deletions(-) create mode 100644 src/eic_evgen/KPlus_sig_Scaling.cc create mode 100644 src/eic_evgen/KPlus_sig_Scaling.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a82fbfa..5486a04 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ include_directories("src/eic_evgen") include_directories(SYSTEM ${ROOT_INCLUDE_DIRS}) #include_directories(include/json) -file(GLOB SOURCES "src/*" "src/eic_evgen/eic.cc" "src/eic_evgen/eic_pim.cc" "src/eic_evgen/PiPlus_sig_Param.cc" "src/eic_evgen/reaction_routine.cc" "src/eic_evgen/PiPlus_sig.cc" "src/eic_evgen/process_routine/*") +file(GLOB SOURCES "src/*" "src/eic_evgen/eic.cc" "src/eic_evgen/eic_pim.cc" "src/eic_evgen/PiPlus_sig_Param.cc" "src/eic_evgen/reaction_routine.cc" "src/eic_evgen/PiPlus_sig.cc" "src/eic_evgen/process_routine/*" "src/eic_evgen/KPlus_sig_Scaling.cc") # file(GLOB SOURCES "src/*.cpp") message("Root Include Dirs: " ${ROOT_INCLUDE_DIRS}) diff --git a/src/eic_evgen/KPlus_sig_Scaling.cc b/src/eic_evgen/KPlus_sig_Scaling.cc new file mode 100644 index 0000000..202cbb6 --- /dev/null +++ b/src/eic_evgen/KPlus_sig_Scaling.cc @@ -0,0 +1,144 @@ +// 31/01/23 - SJDK +// New file to get the KPlus cross section via the scaling method that Ali utilised in preliminary kaon studies + +#include "KPlus_sig_Scaling.h" +#include "PiPlus_sig.h" +#include "PiPlus_sig_Param.h" +#include "reaction_routine.h" +#include "TF1.h" +#include "TString.h" + +double GetKPlus_CrossSection_Scaling(double ft, double fw, double fqsq, double feps, double meson_mass, TString recoil_hadron){ + + double sig_total; + + // -------------------------------------------------------------------------------------------------- + // CKY sigma L and T starts + // -------------------------------------------------------------------------------------------------- + double lpar0 = 0., lpar1 = 0., lpar2 = 0., lpar3 = 0., lpar4 = 0., lpar5 = 0., lpar6 = 0.; + double tpar0 = 0., tpar1 = 0., tpar2 = 0., tpar3 = 0., tpar4 = 0.; + + lpar0 = 0.; lpar1 = 0.; lpar2 = 0.; lpar3 = 0.; lpar4 = 0.; lpar5 = 0.; lpar6 = 0.; + tpar0 = 0.; tpar1 = 0.; tpar2 = 0.; tpar3 = 0.; tpar4 = 0.; + + fSig_L = 0; + fSig_T = 0; + + if ( ( ft > 0. ) && ( ft < 0.15 ) ) { + PiPlus_sigmaL_Param( fw, fqsq, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLonglandau = new TF1("sigmaL","landau", 0.0 , 0.15 ); + fitCKYLonglandau->FixParameter( 0 , lpar0 ); + fitCKYLonglandau->FixParameter( 1 , lpar1 ); + fitCKYLonglandau->FixParameter( 2 , lpar2 ); + fSig_L = fitCKYLonglandau->Eval(ft); + if ( lpar0 == 0 || lpar1 == 0 || lpar2 == 0 ) + fSig_L = 0; + fitCKYLonglandau = NULL; + delete fitCKYLonglandau; + } + else if ( ( ft > 0.15 ) && ( ft < 0.5 ) ) { + PiPlus_sigmaL_Param( fw, fqsq, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLongexpo1 = new TF1("sigmaL","expo", 0.15 , 0.5 ); + fitCKYLongexpo1->FixParameter( 0 , lpar3 ); + fitCKYLongexpo1->FixParameter( 1 , lpar4 ); + fSig_L = fitCKYLongexpo1->Eval(ft); + if ( lpar3 == 0 || lpar4 == 0 ) + fSig_L = 0; + fitCKYLongexpo1 = NULL; + delete fitCKYLongexpo1; + } + else if ( ( ft > 0.5 ) && ( ft < 1.3 ) ) { + PiPlus_sigmaL_Param( fw, fqsq, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLongexpo2 = new TF1("sigmaL","expo", 0.5 , 1.3 ); + fitCKYLongexpo2->FixParameter( 0 , lpar5 ); + fitCKYLongexpo2->FixParameter( 1 , lpar6 ); + fSig_L = fitCKYLongexpo2->Eval(ft); + if ( lpar5 == 0 || lpar6 == 0 ) + fSig_L = 0; + fitCKYLongexpo2 = NULL; + delete fitCKYLongexpo2; + } + else { + fSig_L = 0; + } + // SJDK - 02/06/22 - The validity range here was inconsistent, this only went from 0.0 to 0.15, leaving a gap between 0.15 to 0.2 + // I changed the range to remove this gap. + if ( ( ft > 0.0 ) && ( ft < 0.2 ) ) { + PiPlus_sigmaT_Param( fw, fqsq, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); + TF1 *fitCKYTranspol2 = new TF1("sigmaL","pol2", 0.0 , 0.2 ); + fitCKYTranspol2->FixParameter( 0 , tpar0 ); + fitCKYTranspol2->FixParameter( 1 , tpar1 ); + fitCKYTranspol2->FixParameter( 2 , tpar2 ); + fSig_T = fitCKYTranspol2->Eval(ft); + if ( tpar0 == 0 || tpar1 == 0 || tpar2 == 0 ) + fSig_T = 0; + fitCKYTranspol2 = NULL; + delete fitCKYTranspol2; + } + else if ( ( ft > 0.2 ) && ( ft < 1.3 ) ) { + PiPlus_sigmaT_Param( fw, fqsq, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); + TF1 *fitCKYTransexpo = new TF1("sigmaL","expo", 0.2 , 1.3 ); + fitCKYTransexpo->FixParameter( 0 , tpar3 ); + fitCKYTransexpo->FixParameter( 1 , tpar4 ); + fSig_T = fitCKYTransexpo->Eval(ft); + if ( tpar3 == 0 || tpar4 == 0 ) + fSig_T = 0; + fitCKYTransexpo = NULL; + delete fitCKYTransexpo; + } + + // ------------------------------------------------------------------------------------------------ + // Improving the Kaon Sigma_L following GH's fortran code (pole_ration.f) located in main driectory + // Added by AU on July 10, 2021 + // ------------------------------------------------------------------------------------------------ + + double mkg = 0, mpig = 0, hbarc = 0, gpoleKL = 0, gpoleKS = 0, gpolepi = 0, gpoleKhyp = 0, r2_dip = 0, r2_mono = 0, Fpi_mono = 0, Fpi_dip = 0, pmono = 0, Fpi_fit = 0, fpisq = 0, Fkk = 0, fksq = 0, lNpi = 0, lNk = 0, gkhypn = 0, gpinn = 0, dl_poleKhyp = 0, dl_polepi = 0, ratio_Khyp_pi = 0, FT_GeV_neg = 0; + + gpoleKL = -13.3; + gpoleKS = -3.5; + gpolepi = 13.1; + + r2_dip = 0.411; + r2_mono = 0.431; + + hbarc = 0.197; + mkg = meson_mass; + mpig = 0.13957; + + FT_GeV_neg = -1.0 * ft; + + if ( recoil_hadron == "Lambda" ) { + gpoleKhyp = gpoleKL; + } + else if ( recoil_hadron == "Sigma0" ) { + gpoleKhyp = gpoleKS; + } + + Fpi_mono = 1.0 / ( 1.0 + ( r2_mono * fqsq) / (6 * (hbarc * hbarc))); + Fpi_dip = 1.0 / ( 1.0 + ( r2_dip * fqsq) / (12 * (hbarc * hbarc))) * ( 1.0 + ( r2_dip * fqsq) / (12 * (hbarc * hbarc))); + pmono = 0.85; + + Fpi_fit = pmono * Fpi_mono + (1 - pmono) * Fpi_dip; + fpisq = Fpi_fit * Fpi_fit; + + Fkk = 0.9 / (1.0 + fqsq / 0.462 ); + fksq = Fkk * Fkk; + + lNpi = 0.44; + lNk = (0.44+0.80)/2; + + gkhypn = gpoleKhyp * ((lNk * lNk) - (mkg * mkg)) / ((lNk * lNk) - FT_GeV_neg); + gpinn = gpolepi * ((lNpi * lNpi) - (mpig * mpig)) / ((lNpi * lNpi) - FT_GeV_neg); + + dl_poleKhyp = ((gkhypn * gkhypn) * fksq) / ((FT_GeV_neg - (mkg * mkg))*(FT_GeV_neg - (mkg * mkg))); + dl_polepi = ((gpinn * gpinn) * fpisq) / ((FT_GeV_neg - (mpig * mpig))*(FT_GeV_neg - (mpig * mpig))); + + ratio_Khyp_pi = dl_poleKhyp / dl_polepi; + + // -------------------------------------------------------------------------------- + + fSig_VR = (0.1* fSig_T) + feps * (ratio_Khyp_pi* fSig_L); + sig_total = fSig_VR; + + return sig_total; +} diff --git a/src/eic_evgen/KPlus_sig_Scaling.h b/src/eic_evgen/KPlus_sig_Scaling.h new file mode 100644 index 0000000..be94975 --- /dev/null +++ b/src/eic_evgen/KPlus_sig_Scaling.h @@ -0,0 +1,7 @@ +#ifndef KPlus_Sig_Scaling_H +#define KPlus_Sig_Scaling_H +#include "TString.h" + +double GetKPlus_CrossSection_Scaling( double ft, double fw, double fqsq, double feps, double meson_mass, TString recoil_hadron ); + +#endif diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index 0e7910d..5a02372 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -146,9 +146,18 @@ void eic(Json::Value obj) { // New conditional, special case for Kaon particle = ExtractParticle(particle); charge = ExtractCharge(particle); + if(hadron == "Sigma" || hadron == "sigma"){ // SJDK - 31/01/23 - If hadron specified as Sigma, interpret this as Sigma0. Also correct for lower case + hadron = "Sigma0"; + } + if (hadron == "lambda"){ // SJDK - 31/01/23 - Make Lambda selection case insensitive + hadron = "Lambda"; + } if (particle == "K+"){ if (hadron != "Lambda" && hadron != "Sigma0"){ hadron = "Lambda"; + cout << "! WARNING !" << endl; + cout << "! WARNING !- K+ production specified but hadron not recognised, deaulting to Lambda - ! WARNING!" << endl; + cout << "! WARNING !" << endl; } else{ hadron = ExtractParticle(hadron); diff --git a/src/eic_evgen/eic.h b/src/eic_evgen/eic.h index 6adb707..c8e8dea 100644 --- a/src/eic_evgen/eic.h +++ b/src/eic_evgen/eic.h @@ -30,6 +30,7 @@ #include "PiPlus_sig.h" #include "PiPlus_sig_Param.h" +#include "KPlus_sig_Scaling.h" //#include "KPlusLambda_sig_Param.h" //#include "KPlusSigma_sig_Param.h" //#include "Pi0_sig_Param.h" diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 7b6c787..6f53ae1 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -1,5 +1,7 @@ #include "reaction_routine.h" #include "eic.h" +// Love Preet 27/01/23 - Added TF1 include here for now as it is needed in the KPlus function +#include "TF1.h" using namespace std; @@ -105,7 +107,7 @@ void DEMP_Reaction::Init() { if (rHadron == "Neutron" ) { rParticle_scat_hadron = "Neutron"; recoil_hadron = Neutron; - f_Scat_hadron_Mass = fNeutron_Mass; + f_Scat_hadron_Mass = fNeutron_Mass; f_Scat_hadron_Mass_GeV = f_Scat_hadron_Mass/1000; } else if (rHadron == "Proton" ) { @@ -161,7 +163,14 @@ void DEMP_Reaction::Init() { else{ cout << "!!! Notice !!! The beam energy combination simulated does not match an expected case, a default luminosity value of - " << fLumi << " cm^2s^-1 has been assumed. !!! Notice !!!" << endl; } - + + /* cout << "!!!!!!!!!!!!!!!!!! TEST - DEMP_REACTION.CC !!!!!!!!!!!!!!!!!!" << endl; + cout< 35.0 ) { qsq_ev++; return; } @@ -306,7 +316,8 @@ void DEMP_Reaction::Processing_Event() { // Calculate w = (proton + photon)^2 // ---------------------------------------------------------------------------------------------- - if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { + //if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { + if ( fW_GeV < 3.0 || fW_GeV > 10 ) { w_ev++; return; } @@ -338,10 +349,19 @@ void DEMP_Reaction::Processing_Event() { if( std::abs( fsinig.Mag() - fsfing.Mag() ) < fDiff ) { kSConserve = true; } - - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 0.5) != 1 ){ - fConserve++; - return; + // SJDK 27/01/23 - For Kaon events, 0.5 is too stringent for conservation law check with the current (Ahmed) method to determine meson properties + // Hopefully, Rory's method will be better here and we can utilise the same conservation law check for both particles + if (rParticle == "Pi+"){ + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 0.5) != 1 ){ + fConserve++; + return; + } + else if (rParticle == "K+"){ + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 10) != 1 ){ + fConserve++; + return; + } + } } //////////////////////////////////////////////////////////////////////////////////////////// @@ -378,6 +398,7 @@ void DEMP_Reaction::Processing_Event() { // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // //////////////////////////////////////////////////////////////////////////////////////////// + // ----------------------------------------------------------------------------------------- // Calculate -t // ----------------------------------------------------------------------------------------- @@ -505,9 +526,8 @@ void DEMP_Reaction::Processing_Event() { // r_fSig_T = 1; // r_fSig_L = 1; // ------------------------------------------------------------------------------------------- - r_fSig = Get_Total_Cross_Section(); - + // ----------------------------------------------------------------------------------------------------------- // CKY sigma L and T ends // ----------------------------------------------------------------------------------------------------------- @@ -515,6 +535,7 @@ void DEMP_Reaction::Processing_Event() { fSigma_Col = r_fSig * fFlux_Factor_Col * fA * fJacobian_CM_Col; if ( ( fSigma_Col <= 0 ) || std::isnan( fSigma_Col ) ) { + cout << "-ve cross section for event "<< print_itt << " " << fT_GeV << " " << fW_GeV << " " << " " << fQsq_GeV << " " << fEpsilon << endl; fNSigmaNeg ++; return; } @@ -530,7 +551,7 @@ void DEMP_Reaction::Processing_Event() { fLundRecorded++; fRatio = fNRecorded / fNGenerated; - if (gOutputType == "Pythia6"){ + if (gOutputType == "Pythia6"){ DEMPReact_Pythia6_Output(); } else if (gOutputType == "LUND"){ @@ -659,20 +680,1105 @@ Double_t DEMP_Reaction::Get_Phi_TargPol_LeptonPlane_RF () { // 2 - Have the recoil hadron mass as an argument for the kaon cross section, it gets the correponding parameters from this (or scales as appropriate if we go with scaling) Double_t DEMP_Reaction::Get_Total_Cross_Section() { - Double_t total_sig; + Double_t total_sig, total_sig2; Particle_t p = ParticleEnum(rParticle); - switch (p) { - case Pi0: total_sig = GetPi0_CrossSection(); case PiPlus: total_sig = GetPiPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon); + case KPlus: total_sig = GetKPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, rHadron); } - + // SJDK - 31/01/23 - This second case gets the total cross section for the K+ as calculated from Ali's earlier scaling calculation, retain this for comparison. + switch (p){ + case KPlus: total_sig2 = GetKPlus_CrossSection_Scaling(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, fX_Mass_GeV, rHadron); + } + return total_sig; } +// Love Preet 27/01/23 - Will implement this here for now and move it to a separate file later once it is tested and working +Double_t DEMP_Reaction::GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TString fHadron) { + + double_t sig_total; + // SJDK 27/01/23 - Now you can define functions for sigmaL and sigmaT (depending upon the values of t/w/Q2 etc) + // Assign parameters from the SigPar vector to your functions, evaluate them and interpolate as before + // THEN, sum -> sigT +(eps*sigL) and return this as sig_total, job done! + + // sigmaT uses the same set combination of functions across the whole range in Q2/W and they are the same functions for Lambda and Sigma + // As such, you will only need ONE definition of sigmaT -> sigT_fn = ...., sigT = eval(sigT_fn(ft)); + + // sigmaL uses different functions for different ranges, so we need to assign the function dependending upon the value of Q2/W + + // Luckily, we don't actually need to worry about the hadron type since the form of the functions is identical for the Lambda and the Sigma + // BUT, we might as well read it as an argument anyway just in case we wanted to use it in future (or maybe scale it based on the particle type or something) + // The parameter read in already grabs the correct parameter set for the reaction you care about + + // Start with getting it to calculate sigL and sigT based upon just the parameterisation, check they make sense, then add in the interpolation + + double w,q2,t; // For the sake of testing, I redescribed the fw,fqsq,ft as w,q2,t as I alraedy had a file in my PC to calculate the crossection with these notations + w=fw; q2=fqsq; t=ft; + + int w_1,w_2,q2_1,q2_2;// w_1, rounded value of the input W, w_2 is the next (or previous) value of W. q2_1 is the rounded input value of Q2, q2_2 is the next (or previous) value of Q2 in the array + w_1 = round(w); + q2_1 = round(q2); + //.................................................................................................................................................................... + // Below are set of if and else if conditions for boundary values of w and q2 + //.................................................................................................................................................................... + + if (w == w_1){ + w_1 = w; + w_2 = w; + + if (q2 > q2_1){ + q2_2 = q2_1 + 1; + } + + else if (q2 < q2_1){ + q2_2 = q2_1; + q2_1 = q2_2 -1; + } + + else if (q2 == q2_1 ){ + q2_1 = q2; + q2_2 = q2;} + + } + + //................................................................................. + + else if (w > w_1){ + w_2 = w_1 + 1; + + if (q2 > q2_1){ + q2_2 = q2_1 + 1; + } + + else if (q2 < q2_1){ + q2_2 = q2_1; + q2_1 = q2_2 -1; + } + + else if (q2 == q2_1 ){ + q2_1 = q2; + q2_2 = q2;} + } + + //................................................................................... + else if (w < w_1){ + w_2 =w_1; + w_1 = w_2 - 1; + + if (q2 > q2_1){ + q2_2 = q2_1 + 1; + } + + else if (q2 < q2_1){ + q2_2 = q2_1; + q2_1 = q2_2 -1; + } + + else if (q2 == q2_1 ){ + q2_1 = q2; + q2_2 = q2;} + } + + //.................................................................................................................................................................... + // Calcualtion of t-min values at each w and q2 (i.e. at all the four combinations of w's and q2's ) + //.................................................................................................................................................................... + // t1 is the t_min value UNLESS the first fit fails + // If the first fit fails, t2 is the t_min value. If the first fit did NOT fail, t2 is the intersection point between fits 1 and 2 + // If the second fit fails, t3 is the t_min value. If the second fit did NOT fail, t3 is the intersection point between fits 2 and 3 + + int x_1,x_2,y_1,y_2; // Redefination of w's and q2's as the array start from 0 but w starts from 2 and the q2 starts from 1 in the file. + x_1 = w_1-2; + x_2 = w_2-2; + y_1 = q2_1-1; + y_2 = q2_2-1; // Till this point variables are same for sigT and sigL + + //.................................................................................................................................................................... + // Variables that need to be defined globally somewhere ( These variables are only for sigT and I have used different variables for sigL) + double t_1,t_2,t_3,t_4; // 4 corners (points) in t to interpolate over + double sigT1,sigT2,sigT3,sigT4; // Value of SigT at each corner of the square to interpolate over + double lsigT1,lsigT2,lsigT3,lsigT4, slb,slt,sll,slr,altb,allr,fsigTLa,fsigTa; // Logarithm of sigma values and slopes along the bottom, top, left, right and the average of the slope along the top/bottom and left/right. fsigTLa is the result in logarithmic form and fsigTa is the result + double sigT11,sigT14; // Bottom left and top right sigma points, these are calculated if there are less than 3 (or 2) points to interpolate over + //................................................................................................................................................................... + //................................................................................... + + /*if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner + t_1 = SigPar[1][x_1][y_1][10]; + } + else if (SigPar[1][x_1][y_1][11] != -10001){ + t_1 = SigPar[1][x_1][y_1][11]; + } + else if ( SigPar[1][x_1][y_1][12] != -10001){ + t_1 = SigPar[1][x_1][y_1][12]; + } + //................................................................................... + + if(SigPar[1][x_1][y_2][10] != -10001) { // t_2 is t_min for the second corner - this is always the bottom right corner + t_2 = SigPar[1][x_1][y_2][10]; + } + else if (SigPar[1][x_1][y_2][11] != -10001){ + t_2 = SigPar[1][x_1][y_2][11]; + } + else if (SigPar[1][x_1][y_2][12] != -10001){ + t_2 = SigPar[1][x_1][y_2][12]; + }*/ + //................................................................................... + + if(SigPar[1][x_2][y_1][10] != -10001){ // t_3 is t_min for the third corner - this is always the top left corner + t_3 = SigPar[1][x_2][y_1][10]; + } + else if (SigPar[1][x_2][y_1][11] != -10001){ + t_3 = SigPar[1][x_2][y_1][11]; + } + else if (SigPar[1][x_2][y_1][12] != -10001){ + t_3 = SigPar[1][x_2][y_1][12]; + } + else { + return -100; + } + //................................................................................... + + /* if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - this is always the top right corner + t_4 = SigPar[1][x_2][y_2][10]; + } + else if (SigPar[1][x_2][y_2][11] != -10001){ + t_4 =SigPar[1][x_2][y_2][11]; + } + else if (SigPar[1][x_2][y_2][12] != -10001){ + t_4 = SigPar[1][x_2][y_2][12]; + } */ + //.................................................................................................................................................................... + // Calcualtion of sigT's at all the corners of the square + //.................................................................................................................................................................... + + if (t>= t_3 && t<2.0){ // t_3 corner is the one that we will loose at the end + + //Calculating the sigT1 at bottom left corner of the square.................................................................................. + if (t>=SigPar[1][x_1][y_1][10] && tFixParameter(0, SigPar[1][x_1][y_1][2]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); + parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); + sigT1=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_1][y_1][11] && tFixParameter(0, SigPar[1][x_1][y_1][5]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][6]); + parasigT->FixParameter(2, SigPar[1][x_1][y_1][7]); + sigT1=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_1][y_1][12] && t<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); + sigT1=parasigT->Eval(t); + + if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ + sigT1=0; + } + } + + else { + sigT1=0; + } + + //Calculating the sigT2 at bottom right corner of the square.................................................................................. + if (t>=SigPar[1][x_1][y_2][10] && tFixParameter(0, SigPar[1][x_1][y_2][2]); + parasigT->FixParameter(1, SigPar[1][x_1][y_2][3]); + parasigT->FixParameter(2, SigPar[1][x_1][y_2][4]); + sigT2=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_1][y_2][11] && tFixParameter(0, SigPar[1][x_1][y_2][5]); + parasigT->FixParameter(1, SigPar[1][x_1][y_2][6]); + parasigT->FixParameter(2, SigPar[1][x_1][y_2][7]); + sigT2=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_1][y_2][12] && t<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_1][y_2][8]); + parasigT->FixParameter(1, SigPar[1][x_1][y_2][9]); + sigT2=parasigT->Eval(t); + + if (SigPar[1][x_1][y_2][8] == 0 && SigPar[1][x_1][y_2][9] == 0){ + sigT2=0; + } + } + + else { + sigT2=0; + } + + //Calculating the sigT3 at top left corner of the square.................................................................................. + if (t>=SigPar[1][x_2][y_1][10] && tFixParameter(0, SigPar[1][x_2][y_1][2]); + parasigT->FixParameter(1, SigPar[1][x_2][y_1][3]); + parasigT->FixParameter(2, SigPar[1][x_2][y_1][4]); + sigT3=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_2][y_1][11] && tFixParameter(0, SigPar[1][x_2][y_1][5]); + parasigT->FixParameter(1, SigPar[1][x_2][y_1][6]); + parasigT->FixParameter(2, SigPar[1][x_2][y_1][7]); + sigT3=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_2][y_1][12] && t<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_2][y_1][8]); + parasigT->FixParameter(1, SigPar[1][x_2][y_1][9]); + sigT3=parasigT->Eval(t); + + if (SigPar[1][x_2][y_1][8] == 0 && SigPar[1][x_2][y_1][9] == 0){ + sigT3=0; + } + } + + else { + sigT3=0; + } + + //Calculating the sigT4 at top right corner of the square.................................................................................. + + if (t>=SigPar[1][x_2][y_2][10] && tFixParameter(0, SigPar[1][x_2][y_2][2]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); + parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); + sigT4=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_2][y_2][11] && tFixParameter(0, SigPar[1][x_2][y_2][5]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][6]); + parasigT->FixParameter(2, SigPar[1][x_2][y_2][7]); + sigT4=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_2][y_2][12] && t<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_2][y_2][8]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][9]); + sigT4=parasigT->Eval(t); + + if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ + sigT4=0; + } + } + + else { + sigT4=0; + } + //.................................................................................................................................................................... + // Difterent if and else conditions to find the crossection values at the given points. + //.................................................................................................................................................................... + + if (sigT1 == sigT2 && sigT2 == sigT3 && sigT3 == sigT4 && sigT4 == sigT1){ // if the w and q2 will have whole number values + cerr<<"fsigTa = "<=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); + parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); + sigT11=parasigT->Eval(t_1); + } + + else if (t_1>=SigPar[1][x_1][y_1][11] && t_1FixParameter(0,SigPar[1][x_1][y_1][5]); + parasigT->FixParameter(1,SigPar[1][x_1][y_1][6]); + parasigT->FixParameter(2,SigPar[1][x_1][y_1][7]); + sigT11=parasigT->Eval(t_1); + } + + else if (t_1>=SigPar[1][x_1][y_1][12] && t_1<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); + sigT11=parasigT->Eval(t_1); + + if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ + sigT11 =0; + } + } + + else { + sigT11=0; + } + + //Calculating the sigT14 at bottom left corner of the square + + if (t_4>=SigPar[1][x_2][y_2][10]&& t_4FixParameter(0, SigPar[1][x_2][y_2][2]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); + parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); + sigT14=parasigT->Eval(t_4); + } + + else if (t_4>=SigPar[1][x_2][y_2][11] && t_1FixParameter(0,SigPar[1][x_2][y_2][5]); + parasigT->FixParameter(1,SigPar[1][x_2][y_2][6]); + parasigT->FixParameter(2,SigPar[1][x_2][y_2][7]); + sigT14=parasigT->Eval(t_4); + } + + else if (t_4>=SigPar[1][x_1][y_1][12] && t_1<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_2][y_2][8]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][9]); + sigT14=parasigT->Eval(t_4); + + if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ + sigT14 =0; + } + } + + else { + sigT14=0; + } + + // Taking the log of claculated sigT values + lsigT1 = TMath::Log(sigT11); //log value of sigT11. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT14); //log value of sigT4. + // Calculated slopes of different lines + slb = lsigT4-lsigT3; //->interpolation from the third corner + sll = -(lsigT1-lsigT3); + + // Applying taylor's series formula without averaging the slopes + fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + //................................................................................... + + else if (sigT1 == 0 && sigT2 == 0){ // if we loose the 1st and the 2nd corner simultaneously + // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. + +// First try to find t_1 + + if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner + t_1 = SigPar[1][x_1][y_1][10]; + } + else if (SigPar[1][x_1][y_1][11] != -10001){ + t_1 = SigPar[1][x_1][y_1][11]; + } + else if ( SigPar[1][x_1][y_1][12] != -10001){ + t_1 = SigPar[1][x_1][y_1][12]; + } + else { + return -100; + } + + //Calculating the sigT11 at bottom left corner of the square + if (t_1>=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); + parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); + sigT11=parasigT->Eval(t_1); + } + + else if (t_1>=SigPar[1][x_1][y_1][11] && t_1FixParameter(0,SigPar[1][x_1][y_1][5]); + parasigT->FixParameter(1,SigPar[1][x_1][y_1][6]); + parasigT->FixParameter(2,SigPar[1][x_1][y_1][7]); + sigT11=parasigT->Eval(t_1); + } + + else if (t_1>=SigPar[1][x_1][y_1][12] && t_1<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); + sigT11=parasigT->Eval(t_1); + if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ + sigT11 =0; + } + } + + else { + sigT11=0; + } + // Taking the log of claculated sigT values + + lsigT1 = TMath::Log(sigT11); //log value of sigT11. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT4); //log value of sigT4. + // Calculated slopes of different lines + slb = lsigT3-lsigT4; //->interpolation from the third corner + sll = -(lsigT1-lsigT3); + // Applying taylor's series formula without averaging the slopes + fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + + //.............................................................................. + + else if (sigT2 == 0) { // if we loose 2nd corner, first we will always loose this corner as this correspond to highest -t value (interpolate from 3rd corner) + // In this case, we will need atleat three corners to find the cross-section. And even after loosing second corner, we still have three corners to interpolate. + + // Taking the log of claculated sigT values + lsigT1 = TMath::Log(sigT1); //log value of sigT1. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT4); //log value of sigT4. + + // Calculated slopes of different lines + slb = lsigT3-lsigT4; //->interpolation from the third corner + sll = -(lsigT1-lsigT3); + + // Applying taylor's series formula without averaging the slopes + fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + } // end of if statement over t + //.................................................................................................................................................................... + else{ + //cerr<<" Invalid t-value "<= l_3 && t<2.0){ // l_3 corner is the one that we will loose at the end + + //Calculating the sigL1 at bottom left corner of the square.................................................................................. + if (t>=SigPar[0][x_1][y_1][9] && tFixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + sigL1=parasigL->Eval(t); + if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ + sigL1=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); + sigL1=parasigL->Eval(t); + } + } + + else if (t>=SigPar[0][x_1][y_1][10] && tFixParameter(0, SigPar[0][x_1][y_1][5]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); + sigL1=parasigL->Eval(t); + if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ + sigL1=0; + } + } + + else if (t>=SigPar[0][x_1][y_1][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); + sigL1=parasigL->Eval(t); + if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ + sigL1=0; + } + } + + else { + sigL1=0; + } + + //Calculating the sigL2 at bottom right corner of the square.................................................................................. + + if (t>=SigPar[0][x_1][y_2][9] && tFixParameter(0, SigPar[0][x_1][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_2][3]); + sigL2=parasigL->Eval(t); + if (SigPar[0][x_1][y_2][2] == 0 && SigPar[0][x_1][y_2][3] == 0){ + sigL2=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_1][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_2][3]); + parasigL->FixParameter(2, SigPar[0][x_1][y_2][4]); + sigL2=parasigL->Eval(t); + } + } + + else if (t>=SigPar[0][x_1][y_2][10] && tFixParameter(0, SigPar[0][x_1][y_2][5]); + parasigL->FixParameter(1, SigPar[0][x_1][y_2][6]); + sigL2=parasigL->Eval(t); + if (SigPar[0][x_1][y_2][5] == 0 && SigPar[0][x_1][y_2][6] == 0){ + sigL2=0; + } + } + + else if (t>=SigPar[0][x_1][y_2][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_1][y_2][7]); + parasigL->FixParameter(1, SigPar[0][x_1][y_2][8]); + sigL2=parasigL->Eval(t); + if (SigPar[0][x_1][y_2][7] == 0 && SigPar[0][x_1][y_2][8] == 0){ + sigL2=0; + } + } + + else { + sigL2=0; + } + + //Calculating the sigL3 at top left corner of the square.................................................................................. + if (t>=SigPar[0][x_2][y_1][9] && tFixParameter(0, SigPar[0][x_2][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_1][3]); + sigL3=parasigL->Eval(t); + + if (SigPar[0][x_2][y_1][2] == 0 && SigPar[0][x_2][y_1][3] == 0){ + sigL3=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_2][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_1][3]); + parasigL->FixParameter(2, SigPar[0][x_2][y_1][4]); + sigL3=parasigL->Eval(t); + } + } + + else if (t>=SigPar[0][x_2][y_1][10] && tFixParameter(0, SigPar[0][x_2][y_1][5]); + parasigL->FixParameter(1, SigPar[0][x_2][y_1][6]); + sigL3=parasigL->Eval(t); + + if (SigPar[0][x_2][y_1][5] == 0 && SigPar[0][x_2][y_1][6] == 0){ + sigL3=0; + } + } + + else if (t>=SigPar[0][x_2][y_1][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_2][y_1][7]); + parasigL->FixParameter(1, SigPar[0][x_2][y_1][8]); + sigL3=parasigL->Eval(t); + + if (SigPar[0][x_2][y_1][7] == 0 && SigPar[0][x_2][y_1][8] == 0){ + sigL3=0; + } + } + + else { + sigL3=0; + } + + //Calculating the sigL4 at top right corner of the square.................................................................................. + if (t>=SigPar[0][x_2][y_2][9] && tFixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + sigL4=parasigL->Eval(t); + + if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ + sigL4=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); + sigL4=parasigL->Eval(t); + } + } + + else if (t>=SigPar[0][x_2][y_2][10] && tFixParameter(0, SigPar[0][x_2][y_2][5]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][6]); + sigL4=parasigL->Eval(t); + + if (SigPar[0][x_2][y_2][5] == 0 && SigPar[0][x_2][y_2][6] == 0){ + sigL4=0; + } + } + + else if (t>=SigPar[0][x_2][y_2][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][7]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][8]); + sigL4=parasigL->Eval(t); + + if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ + sigL4=0; + } + } + + else { + sigL4=0; + } + + //.................................................................................................................................................................... + // Difterent if and else conditions to find the crossection values at the given points. + //.................................................................................................................................................................... + + if (sigL1 == sigL2 && sigL2 == sigL3 && sigL3 == sigL4 && sigL4 == sigL1){ // if the w and q2 will have whole number values + cerr<<"fsigLa = "<=SigPar[0][x_1][y_1][9] && l_1FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + sigL11=parasigL->Eval(l_1); + + if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ + sigL11=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); + sigL11=parasigL->Eval(l_1); + } + } + + else if (l_1>=SigPar[0][x_1][y_1][10] && l_1FixParameter(0, SigPar[0][x_1][y_1][5]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); + sigL11=parasigL->Eval(l_1); + + if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ + sigL11=0; + } + } + + else if (l_1>=SigPar[0][x_1][y_1][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); + sigL11=parasigL->Eval(l_1); + + if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ + sigL11=0; + } + } + + else { + sigL11=0; + } + + //Calculating the sigL14 at bottom left corner of the square + if (l_4>=SigPar[0][x_2][y_2][9] && l_4FixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ + sigL14=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); + sigL14=parasigL->Eval(l_4); + } + } + + else if (l_4>=SigPar[0][x_2][y_2][10] && l_4FixParameter(0, SigPar[0][x_2][y_2][5]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][6]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][5] == 0 && SigPar[0][x_2][y_2][6] == 0){ + sigL14=0; + } + } + + else if (l_4>=SigPar[0][x_2][y_2][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][7]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][8]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ + sigL14=0; + } + } + + else { + sigL14=0; + } + + // Taking the log of claculated sigL values + lsigL1 = TMath::Log(sigL11); //log value of sigL11. + lsigL3 = TMath::Log(sigL3); //log value of sigL3. + lsigL4 = TMath::Log(sigL14); //log value of sigL14. + + // Calculated slopes of different lines + stb = lsigL4-lsigL3; //->interpolation from the third corner + stl = -(lsigL1-lsigL3); + // Applying taylor's series formula without averaging the slopes + fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigLa = exp(fsigLLa); + } + //................................................................................... + + else if (sigL1 == 0 && sigL2 == 0){ // if we loose the 1st and the 2nd corner simultaneously + // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. + +// First try to find t_1 + +if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner + l_1 = SigPar[0][x_1][y_1][9]; + } + else if (SigPar[0][x_1][y_1][10] != -10001){ + l_1 = SigPar[0][x_1][y_1][10]; + } + else if ( SigPar[0][x_1][y_1][11] != -10001){ + l_1 = SigPar[0][x_1][y_1][11]; + } + else { + return -100; + } + //................................................................................... + //Calculating the sigL11 at bottom left corner of the square + if (l_1>=SigPar[0][x_1][y_1][9] && l_1FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + sigL11=parasigL->Eval(l_1); + + if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ + sigL11=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); + sigL11=parasigL->Eval(l_1); + } + } + + else if (l_1>=SigPar[0][x_1][y_1][10] && l_1FixParameter(0, SigPar[0][x_1][y_1][5]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); + sigL11=parasigL->Eval(l_1); + if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ + sigL11=0; + } + } + + else if (l_1>=SigPar[0][x_1][y_1][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); + sigL11=parasigL->Eval(l_1); + if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ + sigL11=0; + } + } + + else { + sigL11=0; + } + + // Taking the log of claculated sigL values + lsigL1 = TMath::Log(sigL11); //log value of sigL11. + lsigL3 = TMath::Log(sigL3); //log value of sigL3. + lsigL4 = TMath::Log(sigL4); //log value of sigL4. + // Calculated slopes of different lines + stb = lsigL3-lsigL4; //->interpolation from the third corner + stl = -(lsigL1-lsigL3); + + // Applying taylor's series formula without averaging the slopes + fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigLa = exp(fsigLLa); + } + + //.............................................................................. + + else if (sigL2 == 0) { // if we loose 2nd corner, first we will always loose this corner as this correspond to highest -t value (interpolate from 3rd corner) + // In this case, we will need atleat three corners to find the cross-section. And even after loosing second corner, we still have three corners to interpolate. + // Taking the log of claculated sigT values + lsigL1 = TMath::Log(sigL1); //log value of sigL1. + lsigL3 = TMath::Log(sigL3); //log value of sigL3. + lsigL4 = TMath::Log(sigL4); //log value of sigL4. + + // Calculated slopes of different lines + stb = lsigL3-lsigL4; //->interpolation from the third corner + stl = -(lsigL1-lsigL3); + + // Applying taylor's series formula without averaging the slopes + fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigLa = exp(fsigLLa); + } + } // end of if statement over t + //.................................................................................................................................................................... + else{ + //cerr<<" Invalid t-value "< 35 " << setw(20) << qsq_ev << endl; DEMPDetails << "Number of events with Meson (X) energy NaN " << setw(20) << fNaN << endl; DEMPDetails << "Number of events failing conservation law check " << setw(20) << fConserve << endl; DEMPDetails << "Total events passing conservation laws " << setw(20) << conserve << endl; From 1e8c315ad068349ec616e588d698c809a14fbde0 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Tue, 31 Jan 2023 15:56:37 -0600 Subject: [PATCH 13/35] Updated comments, removed a block of cout text in DEMP_Reaction.cc --- src/eic_evgen/KPlus_sig_Scaling.cc | 3 ++- src/eic_evgen/process_routine/DEMP_Reaction.cc | 7 ------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/eic_evgen/KPlus_sig_Scaling.cc b/src/eic_evgen/KPlus_sig_Scaling.cc index 202cbb6..e34f12f 100644 --- a/src/eic_evgen/KPlus_sig_Scaling.cc +++ b/src/eic_evgen/KPlus_sig_Scaling.cc @@ -1,5 +1,6 @@ // 31/01/23 - SJDK -// New file to get the KPlus cross section via the scaling method that Ali utilised in preliminary kaon studies +// New file to get the KPlus cross section via the scaling method that Ali Usman utilised in preliminary kaon studies +// This method relies upon getting the pion cross section before subsequently scaling it #include "KPlus_sig_Scaling.h" #include "PiPlus_sig.h" diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 6f53ae1..e526012 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -164,13 +164,6 @@ void DEMP_Reaction::Init() { cout << "!!! Notice !!! The beam energy combination simulated does not match an expected case, a default luminosity value of - " << fLumi << " cm^2s^-1 has been assumed. !!! Notice !!!" << endl; } - /* cout << "!!!!!!!!!!!!!!!!!! TEST - DEMP_REACTION.CC !!!!!!!!!!!!!!!!!!" << endl; - cout< Date: Tue, 31 Jan 2023 17:39:55 -0600 Subject: [PATCH 14/35] Clarified some event cuts. Added different t cuts depending upon particle type (not kinematics type). --- src/eic_evgen/KPlus_sig_Scaling.cc | 2 +- .../process_routine/DEMP_Reaction.cc | 448 +++++++++--------- 2 files changed, 226 insertions(+), 224 deletions(-) diff --git a/src/eic_evgen/KPlus_sig_Scaling.cc b/src/eic_evgen/KPlus_sig_Scaling.cc index e34f12f..37c1c5c 100644 --- a/src/eic_evgen/KPlus_sig_Scaling.cc +++ b/src/eic_evgen/KPlus_sig_Scaling.cc @@ -100,7 +100,7 @@ double GetKPlus_CrossSection_Scaling(double ft, double fw, double fqsq, double f gpolepi = 13.1; r2_dip = 0.411; - r2_mono = 0.431; + r2_mono = 0.431; hbarc = 0.197; mkg = meson_mass; diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index e526012..e9892e3 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -171,10 +171,9 @@ void DEMP_Reaction::Processing_Event() { // ---------------------------------------------------- // Considering Fermi momentum for the proton // ---------------------------------------------------- - + // SJDK - 31/01/23 - This doesn't seem to do anything? if( kCalcFermi ) { - Consider_Proton_Fermi_Momentum(); - + Consider_Proton_Fermi_Momentum(); } // ---------------------------------------------------- @@ -220,6 +219,7 @@ void DEMP_Reaction::Processing_Event() { r_lphotong = r_lelectrong - r_lscatelecg; fQsq_GeV = -1.* r_lphotong.Mag2(); + // SJDK 31/01/23 - Again, should this be a user defined/set range? // SJDK 30/01/23 - Changed Qsq range to match new validity range from Love's paramaterisation if ( fQsq_GeV < 1.0 || fQsq_GeV > 35.0 ) { qsq_ev++; @@ -239,6 +239,14 @@ void DEMP_Reaction::Processing_Event() { w_neg_ev++; return; } + + // SJDK 31/01/23 - Should have the lower/upper W ranges be user defined? + // Also, moved this cut up in the code, W is known at this point, so why wait to cut on it? + //if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { // SJDK 31/01/23 - Previous range utilised + if ( fW_GeV < 2.0 || fW_GeV > 10 ) { // SJDK 31/01/23 - New range for W to work with K+ cross section model + w_ev++; + return; + } // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum // 21/12/22 - SJDK - Should split this out into its own class, then have two different variants (Rory vs Ahmed) @@ -308,13 +316,7 @@ void DEMP_Reaction::Processing_Event() { // ---------------------------------------------------------------------------------------------- // Calculate w = (proton + photon)^2 // ---------------------------------------------------------------------------------------------- - - //if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { - if ( fW_GeV < 3.0 || fW_GeV > 10 ) { - w_ev++; - return; - } - + r_lw = r_lproton + r_lphoton; fW = r_lw.Mag(); @@ -412,7 +414,9 @@ void DEMP_Reaction::Processing_Event() { fT = -1.*lt.Mag2(); fT_GeV = -1.*ltg.Mag2(); - + + // 31/01/23 - SJDK - Kinematics type 1 is FF and 2 is TSSA, this reaction class shouldn't care about this and only have a limit depending upon particle type? + /* if ( gKinematics_type == 1 && fT_GeV > 0.5 ) { t_ev++; return; @@ -422,7 +426,18 @@ void DEMP_Reaction::Processing_Event() { t_ev++; return; } - + */ + + // 31/01/23 SJDK - New limit on t, remove only events outside the parameterisation range, limits depend upon particle type, need to add Pi0 version + if (rParticle == "Pi+" && fT_GeV > 1.3 ) { + t_ev++; + return; + } + else if (rParticle == "K+" && fT_GeV > 2.0) { + t_ev++; + return; + } + fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); fz = r_lX.E()/r_lphoton.E(); @@ -528,7 +543,6 @@ void DEMP_Reaction::Processing_Event() { fSigma_Col = r_fSig * fFlux_Factor_Col * fA * fJacobian_CM_Col; if ( ( fSigma_Col <= 0 ) || std::isnan( fSigma_Col ) ) { - cout << "-ve cross section for event "<< print_itt << " " << fT_GeV << " " << fW_GeV << " " << " " << fQsq_GeV << " " << fEpsilon << endl; fNSigmaNeg ++; return; } @@ -537,14 +551,14 @@ void DEMP_Reaction::Processing_Event() { // Lab cross section Phase Space Conversion Luminosity Total events tried // Hz = ub / ( sr^2 * GeV ) * GeV * sr^2 * ( cm^2 / ub ) * ( # / ( cm^2 * sec ) ) / ( # ) - // SJDK 24/06/21 - Explicitly taking the absolute value of the weight such that the value is positive! + // SJDK 24/06/21 - Explicitly taking the absolute value of the weight such that the value is positive! Shouldn't matter since any -ve cross section events should be dumped above fEventWeight = abs(fSigma_Col * fPSF * fuBcm2 * fLumi / fNEvents); // in Hz fNRecorded++; fLundRecorded++; fRatio = fNRecorded / fNGenerated; - if (gOutputType == "Pythia6"){ + if (gOutputType == "Pythia6"){ DEMPReact_Pythia6_Output(); } else if (gOutputType == "LUND"){ @@ -668,23 +682,24 @@ Double_t DEMP_Reaction::Get_Phi_TargPol_LeptonPlane_RF () { return fPhi_TargPol_LeptonPlane_RF; } -// SJDK 21/12/22 - Note, this separation into cases is fine, the kaon could be done several different ways -// 1 - Split the kaon case up into two sub cases, call a different cross section function each time -// 2 - Have the recoil hadron mass as an argument for the kaon cross section, it gets the correponding parameters from this (or scales as appropriate if we go with scaling) + Double_t DEMP_Reaction::Get_Total_Cross_Section() { Double_t total_sig, total_sig2; - Particle_t p = ParticleEnum(rParticle); - switch (p) { - case Pi0: total_sig = GetPi0_CrossSection(); - case PiPlus: total_sig = GetPiPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon); - case KPlus: total_sig = GetKPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, rHadron); + if (rParticle == "Pi+"){ + total_sig = GetPiPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon); } - // SJDK - 31/01/23 - This second case gets the total cross section for the K+ as calculated from Ali's earlier scaling calculation, retain this for comparison. - switch (p){ - case KPlus: total_sig2 = GetKPlus_CrossSection_Scaling(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, fX_Mass_GeV, rHadron); + else if (rParticle == "Pi0"){ + total_sig = GetPi0_CrossSection(); } + else if (rParticle == "K+"){ + total_sig = GetKPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, rHadron); + // SJDK - 31/01/23 - This second case gets the total cross section for the K+ as calculated from Ali's earlier scaling calculation, retain this for comparison. + total_sig2 = GetKPlus_CrossSection_Scaling(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, fX_Mass_GeV, rHadron); + } + + //cout << fT_GeV << " " << fW_GeV << " " << fQsq_GeV << " " << "KPlus Paramterisation - " << total_sig << " !!! Old Scaling method - " << total_sig2 << endl; return total_sig; @@ -694,20 +709,6 @@ Double_t DEMP_Reaction::Get_Total_Cross_Section() { Double_t DEMP_Reaction::GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TString fHadron) { double_t sig_total; - // SJDK 27/01/23 - Now you can define functions for sigmaL and sigmaT (depending upon the values of t/w/Q2 etc) - // Assign parameters from the SigPar vector to your functions, evaluate them and interpolate as before - // THEN, sum -> sigT +(eps*sigL) and return this as sig_total, job done! - - // sigmaT uses the same set combination of functions across the whole range in Q2/W and they are the same functions for Lambda and Sigma - // As such, you will only need ONE definition of sigmaT -> sigT_fn = ...., sigT = eval(sigT_fn(ft)); - - // sigmaL uses different functions for different ranges, so we need to assign the function dependending upon the value of Q2/W - - // Luckily, we don't actually need to worry about the hadron type since the form of the functions is identical for the Lambda and the Sigma - // BUT, we might as well read it as an argument anyway just in case we wanted to use it in future (or maybe scale it based on the particle type or something) - // The parameter read in already grabs the correct parameter set for the reaction you care about - - // Start with getting it to calculate sigL and sigT based upon just the parameterisation, check they make sense, then add in the interpolation double w,q2,t; // For the sake of testing, I redescribed the fw,fqsq,ft as w,q2,t as I alraedy had a file in my PC to calculate the crossection with these notations w=fw; q2=fqsq; t=ft; @@ -800,24 +801,24 @@ Double_t DEMP_Reaction::GetKPlus_CrossSection(double ft, double fw, double fqsq, /*if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner t_1 = SigPar[1][x_1][y_1][10]; - } - else if (SigPar[1][x_1][y_1][11] != -10001){ + } + else if (SigPar[1][x_1][y_1][11] != -10001){ t_1 = SigPar[1][x_1][y_1][11]; - } - else if ( SigPar[1][x_1][y_1][12] != -10001){ + } + else if ( SigPar[1][x_1][y_1][12] != -10001){ t_1 = SigPar[1][x_1][y_1][12]; - } - //................................................................................... + } + //................................................................................... - if(SigPar[1][x_1][y_2][10] != -10001) { // t_2 is t_min for the second corner - this is always the bottom right corner + if(SigPar[1][x_1][y_2][10] != -10001) { // t_2 is t_min for the second corner - this is always the bottom right corner t_2 = SigPar[1][x_1][y_2][10]; - } - else if (SigPar[1][x_1][y_2][11] != -10001){ + } + else if (SigPar[1][x_1][y_2][11] != -10001){ t_2 = SigPar[1][x_1][y_2][11]; - } - else if (SigPar[1][x_1][y_2][12] != -10001){ + } + else if (SigPar[1][x_1][y_2][12] != -10001){ t_2 = SigPar[1][x_1][y_2][12]; - }*/ + }*/ //................................................................................... if(SigPar[1][x_2][y_1][10] != -10001){ // t_3 is t_min for the third corner - this is always the top left corner @@ -829,20 +830,20 @@ Double_t DEMP_Reaction::GetKPlus_CrossSection(double ft, double fw, double fqsq, else if (SigPar[1][x_2][y_1][12] != -10001){ t_3 = SigPar[1][x_2][y_1][12]; } - else { + else { return -100; } //................................................................................... - /* if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - this is always the top right corner - t_4 = SigPar[1][x_2][y_2][10]; - } - else if (SigPar[1][x_2][y_2][11] != -10001){ - t_4 =SigPar[1][x_2][y_2][11]; - } - else if (SigPar[1][x_2][y_2][12] != -10001){ - t_4 = SigPar[1][x_2][y_2][12]; - } */ + /* if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - this is always the top right corner + t_4 = SigPar[1][x_2][y_2][10]; + } + else if (SigPar[1][x_2][y_2][11] != -10001){ + t_4 =SigPar[1][x_2][y_2][11]; + } + else if (SigPar[1][x_2][y_2][12] != -10001){ + t_4 = SigPar[1][x_2][y_2][12]; + } */ //.................................................................................................................................................................... // Calcualtion of sigT's at all the corners of the square //.................................................................................................................................................................... @@ -980,14 +981,15 @@ Double_t DEMP_Reaction::GetKPlus_CrossSection(double ft, double fw, double fqsq, //.................................................................................................................................................................... // Difterent if and else conditions to find the crossection values at the given points. //.................................................................................................................................................................... - - if (sigT1 == sigT2 && sigT2 == sigT3 && sigT3 == sigT4 && sigT4 == sigT1){ // if the w and q2 will have whole number values + // SJDK - 31/01/23 - This seems to spam things to screen, even when running pi+ + /* + if (sigT1 == sigT2 && sigT2 == sigT3 && sigT3 == sigT4 && sigT4 == sigT1){ // if the w and q2 will have whole number values cerr<<"fsigTa = "<=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); @@ -1129,22 +1131,22 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - else if (sigT1 == 0 && sigT2 == 0){ // if we loose the 1st and the 2nd corner simultaneously // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. -// First try to find t_1 + // First try to find t_1 - if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner - t_1 = SigPar[1][x_1][y_1][10]; - } - else if (SigPar[1][x_1][y_1][11] != -10001){ - t_1 = SigPar[1][x_1][y_1][11]; - } - else if ( SigPar[1][x_1][y_1][12] != -10001){ - t_1 = SigPar[1][x_1][y_1][12]; - } - else { - return -100; - } + if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner + t_1 = SigPar[1][x_1][y_1][10]; + } + else if (SigPar[1][x_1][y_1][11] != -10001){ + t_1 = SigPar[1][x_1][y_1][11]; + } + else if ( SigPar[1][x_1][y_1][12] != -10001){ + t_1 = SigPar[1][x_1][y_1][12]; + } + else { + return -100; + } - //Calculating the sigT11 at bottom left corner of the square + //Calculating the sigT11 at bottom left corner of the square if (t_1>=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); @@ -1236,27 +1238,27 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - /*if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner l_1 = SigPar[0][x_1][y_1][9]; - } - else if (SigPar[0][x_1][y_1][10] != -10001){ + } + else if (SigPar[0][x_1][y_1][10] != -10001){ l_1 = SigPar[0][x_1][y_1][10]; - } - else if ( SigPar[0][x_1][y_1][11] != -10001){ + } + else if ( SigPar[0][x_1][y_1][11] != -10001){ l_1 = SigPar[0][x_1][y_1][11]; - } - else { + } + else { return -100; - } - //................................................................................... + } + //................................................................................... - if(SigPar[0][x_1][y_2][9] != -10001) { // l_2 is t_min for the second corner - this is always the bottom right corner + if(SigPar[0][x_1][y_2][9] != -10001) { // l_2 is t_min for the second corner - this is always the bottom right corner l_2 = SigPar[0][x_1][y_2][9]; - } - else if (SigPar[0][x_1][y_2][10] != -10001){ + } + else if (SigPar[0][x_1][y_2][10] != -10001){ l_2 = SigPar[0][x_1][y_2][10]; - } - else if (SigPar[0][x_1][y_2][11] != -10001){ + } + else if (SigPar[0][x_1][y_2][11] != -10001){ l_2 = SigPar[0][x_1][y_2][11]; - }*/ + }*/ //................................................................................... if(SigPar[0][x_2][y_1][9] != -10001){ // l_3 is t_min for the third corner - this is always the top left corner @@ -1268,7 +1270,7 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - else if (SigPar[0][x_2][y_1][11] != -10001){ l_3 = SigPar[0][x_2][y_1][11]; } - else { + else { return -100; } @@ -1276,13 +1278,13 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - /*if(SigPar[0][x_2][y_2][9] != -10001){ // l_4 is t_min for the fourth corner - this is always the top right corner l_4 = SigPar[0][x_2][y_2][9]; - } - else if (SigPar[0][x_2][y_2][10] != -10001){ + } + else if (SigPar[0][x_2][y_2][10] != -10001){ l_4 =SigPar[0][x_2][y_2][10]; - } - else if (SigPar[0][x_2][y_2][11] != -10001){ + } + else if (SigPar[0][x_2][y_2][11] != -10001){ l_4 = SigPar[0][x_2][y_2][11]; - } */ + } */ //.................................................................................................................................................................... // Calcualtion of sigL's at all the corners of the square //.................................................................................................................................................................... @@ -1519,33 +1521,33 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - { // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) will always be there and for other two corners, find the value of the cross-section at the first and the fourth corner at the minimum value of t. After that we can interpolate them. -// First try to find t_1 and t_4 + // First try to find t_1 and t_4 -if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner - l_1 = SigPar[0][x_1][y_1][9]; - } - else if (SigPar[0][x_1][y_1][10] != -10001){ - l_1 = SigPar[0][x_1][y_1][10]; - } - else if ( SigPar[0][x_1][y_1][11] != -10001){ - l_1 = SigPar[0][x_1][y_1][11]; - } - else { - return -100; - } - //................................................................................... - if(SigPar[0][x_2][y_2][9] != -10001){ // l_4 is t_min for the fourth corner - this is always the top right corner - l_4 = SigPar[0][x_2][y_2][9]; - } - else if (SigPar[0][x_2][y_2][10] != -10001){ - l_4 =SigPar[0][x_2][y_2][10]; - } - else if (SigPar[0][x_2][y_2][11] != -10001){ - l_4 = SigPar[0][x_2][y_2][11]; - } - else { - return -100; - } + if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner + l_1 = SigPar[0][x_1][y_1][9]; + } + else if (SigPar[0][x_1][y_1][10] != -10001){ + l_1 = SigPar[0][x_1][y_1][10]; + } + else if ( SigPar[0][x_1][y_1][11] != -10001){ + l_1 = SigPar[0][x_1][y_1][11]; + } + else { + return -100; + } + //................................................................................... + if(SigPar[0][x_2][y_2][9] != -10001){ // l_4 is t_min for the fourth corner - this is always the top right corner + l_4 = SigPar[0][x_2][y_2][9]; + } + else if (SigPar[0][x_2][y_2][10] != -10001){ + l_4 =SigPar[0][x_2][y_2][10]; + } + else if (SigPar[0][x_2][y_2][11] != -10001){ + l_4 = SigPar[0][x_2][y_2][11]; + } + else { + return -100; + } //Calculating the sigL11 at bottom left corner of the square if (l_1>=SigPar[0][x_1][y_1][9] && l_1=SigPar[0][x_1][y_1][9] && l_1 35 " << setw(20) << qsq_ev << endl; DEMPDetails << "Number of events with Meson (X) energy NaN " << setw(20) << fNaN << endl; DEMPDetails << "Number of events failing conservation law check " << setw(20) << fConserve << endl; DEMPDetails << "Total events passing conservation laws " << setw(20) << conserve << endl; DEMPDetails << "Total events failed energy conservation " << setw(20) << ene << endl; DEMPDetails << "Total events failed momentum conserveation " << setw(20) << mom << endl; - DEMPDetails << "Number of events with -t more than threshold " << setw(20) << t_ev << endl; + DEMPDetails << "Number of events with -t > 2 (K+) or -t > 1.3 (Pi+) GeV " << setw(20) << t_ev << endl; DEMPDetails << "Number of events with w less than threshold " << setw(20) << fWSqNeg << endl; DEMPDetails << "Number of events with mom not conserve " << setw(20) << fNMomConserve << endl; DEMPDetails << "Number of events with Sigma negative " << setw(20) << fNSigmaNeg << endl; @@ -1811,67 +1813,67 @@ void DEMP_Reaction::Detail_Output() { void DEMP_Reaction::Lund_Output() { DEMPOut << "3" - << " \t " << fPhi // var 1 - << " \t " << fPhiS // var 2 - << " \t " << fx // var 3 - << " \t " << "1" - << " \t " << fQsq_GeV // var 4 - << " \t " << fT_GeV // var 5 - << " \t " << fW_GeV // var 6 - << " \t " << fEpsilon // var 7 - << " \t " << fEventWeight // var 8 - << endl; + << " \t " << fPhi // var 1 + << " \t " << fPhiS // var 2 + << " \t " << fx // var 3 + << " \t " << "1" + << " \t " << fQsq_GeV // var 4 + << " \t " << fT_GeV // var 5 + << " \t " << fW_GeV // var 6 + << " \t " << fEpsilon // var 7 + << " \t " << fEventWeight // var 8 + << endl; // Produced Particle X DEMPOut << setw(10) << "1" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << PDGtype(produced_X) - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lX_g.X() - << setw(16) << r_lX_g.Y() - << setw(16) << r_lX_g.Z() - << setw(16) << r_lX_g.E() - << setw(16) << fX_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(produced_X) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lX_g.X() + << setw(16) << r_lX_g.Y() + << setw(16) << r_lX_g.Z() + << setw(16) << r_lX_g.E() + << setw(16) << fX_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; // Scattered electron DEMPOut << setw(10) << "2" - << setw(10) << "-1" - << setw(10) << "1" - << setw(10) << "11" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lscatelecg.X() - << setw(16) << r_lscatelecg.Y() - << setw(16) << r_lscatelecg.Z() - << setw(16) << r_lscatelecg.E() - << setw(16) << fElectron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; + << setw(10) << "-1" + << setw(10) << "1" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lscatelecg.X() + << setw(16) << r_lscatelecg.Y() + << setw(16) << r_lscatelecg.Z() + << setw(16) << r_lscatelecg.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; // Recoiled neutron DEMPOut << setw(10) << "3" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << PDGtype(recoil_hadron) - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_l_scat_hadron_g.X() - << setw(16) << r_l_scat_hadron_g.Y() - << setw(16) << r_l_scat_hadron_g.Z() - << setw(16) << r_l_scat_hadron_g.E() - << setw(16) << f_Scat_hadron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(recoil_hadron) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_l_scat_hadron_g.X() + << setw(16) << r_l_scat_hadron_g.Y() + << setw(16) << r_l_scat_hadron_g.Z() + << setw(16) << r_l_scat_hadron_g.E() + << setw(16) << f_Scat_hadron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; } void DEMP_Reaction::DEMPReact_Pythia6_Out_Init() { From 7788f339220881eca2368e6e0f79e610cb2a5617 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Fri, 3 Feb 2023 14:09:00 -0600 Subject: [PATCH 15/35] Updated CMakeLists --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5486a04..b331273 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ include_directories("src/eic_evgen") include_directories(SYSTEM ${ROOT_INCLUDE_DIRS}) #include_directories(include/json) -file(GLOB SOURCES "src/*" "src/eic_evgen/eic.cc" "src/eic_evgen/eic_pim.cc" "src/eic_evgen/PiPlus_sig_Param.cc" "src/eic_evgen/reaction_routine.cc" "src/eic_evgen/PiPlus_sig.cc" "src/eic_evgen/process_routine/*" "src/eic_evgen/KPlus_sig_Scaling.cc") +file(GLOB SOURCES "src/*" "src/eic_evgen/eic.cc" "src/eic_evgen/eic_pim.cc" "src/eic_evgen/PiPlus_sig_Param.cc" "src/eic_evgen/reaction_routine.cc" "src/eic_evgen/PiPlus_sig.cc" "src/eic_evgen/KPlus_sig_Scaling.cc" "src/eic_evgen/process_routine/*") # file(GLOB SOURCES "src/*.cpp") message("Root Include Dirs: " ${ROOT_INCLUDE_DIRS}) From 0969c8afb6416c801651fbfc95a50d0aa7cf551f Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Fri, 3 Feb 2023 14:19:29 -0600 Subject: [PATCH 16/35] Added Love's KPlus cross section class. Modified includes elsewhere to use this and compile it appropriately --- CMakeLists.txt | 2 +- src/eic_evgen/KPlus_sig.cc | 1001 +++++++++++++++ src/eic_evgen/KPlus_sig.h | 7 + src/eic_evgen/eic.h | 3 +- .../process_routine/DEMP_Reaction.cc | 1081 +---------------- src/eic_evgen/reaction_routine.h | 3 - 6 files changed, 1017 insertions(+), 1080 deletions(-) create mode 100644 src/eic_evgen/KPlus_sig.cc create mode 100644 src/eic_evgen/KPlus_sig.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b331273..dc0ecda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ include_directories("src/eic_evgen") include_directories(SYSTEM ${ROOT_INCLUDE_DIRS}) #include_directories(include/json) -file(GLOB SOURCES "src/*" "src/eic_evgen/eic.cc" "src/eic_evgen/eic_pim.cc" "src/eic_evgen/PiPlus_sig_Param.cc" "src/eic_evgen/reaction_routine.cc" "src/eic_evgen/PiPlus_sig.cc" "src/eic_evgen/KPlus_sig_Scaling.cc" "src/eic_evgen/process_routine/*") +file(GLOB SOURCES "src/*" "src/eic_evgen/eic.cc" "src/eic_evgen/eic_pim.cc" "src/eic_evgen/PiPlus_sig_Param.cc" "src/eic_evgen/reaction_routine.cc" "src/eic_evgen/PiPlus_sig.cc" "src/eic_evgen/KPlus_sig.cc" "src/eic_evgen/KPlus_sig_Scaling.cc" "src/eic_evgen/process_routine/*") # file(GLOB SOURCES "src/*.cpp") message("Root Include Dirs: " ${ROOT_INCLUDE_DIRS}) diff --git a/src/eic_evgen/KPlus_sig.cc b/src/eic_evgen/KPlus_sig.cc new file mode 100644 index 0000000..c426735 --- /dev/null +++ b/src/eic_evgen/KPlus_sig.cc @@ -0,0 +1,1001 @@ +#include "KPlus_sig.h" +#include "reaction_routine.h" +#include "TF1.h" +#include "TString.h" +#include "TMath.h" + +double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TString fHadron) { + + double_t sig_total; + + double w,q2,t; // For the sake of testing, I redescribed the fw,fqsq,ft as w,q2,t as I alraedy had a file in my PC to calculate the crossection with these notations + w=fw; q2=fqsq; t=ft; + + int w_1,w_2,q2_1,q2_2; // w_1, rounded value of the input W, w_2 is the next (or previous) value of W. q2_1 is the rounded input value of Q2, q2_2 is the next (or previous) value of Q2 in the array + w_1 = round(w); + q2_1 = round(q2); + + //.................................................................................................................................................................... + // Below are set of if and else if conditions for boundary values of w and q2 + //.................................................................................................................................................................... + + if (w == w_1){ + w_1 = w; + w_2 = w; + + if (q2 > q2_1){ + q2_2 = q2_1 + 1; + } + + else if (q2 < q2_1){ + q2_2 = q2_1; + q2_1 = q2_2 -1; + } + + else if (q2 == q2_1 ){ + q2_1 = q2; + q2_2 = q2;} + } + + //................................................................................. + + else if (w > w_1){ + w_2 = w_1 + 1; + + if (q2 > q2_1){ + q2_2 = q2_1 + 1; + } + + else if (q2 < q2_1){ + q2_2 = q2_1; + q2_1 = q2_2 -1; + } + + else if (q2 == q2_1 ){ + q2_1 = q2; + q2_2 = q2;} + } + + //................................................................................... + else if (w < w_1){ + w_2 =w_1; + w_1 = w_2 - 1; + + if (q2 > q2_1){ + q2_2 = q2_1 + 1; + } + + else if (q2 < q2_1){ + q2_2 = q2_1; + q2_1 = q2_2 -1; + } + + else if (q2 == q2_1 ){ + q2_1 = q2; + q2_2 = q2;} + } + + //.................................................................................................................................................................... + // Calcualtion of t-min values at each w and q2 (i.e. at all the four combinations of w's and q2's ) + //.................................................................................................................................................................... + // t1 is the t_min value UNLESS the first fit fails + // If the first fit fails, t2 is the t_min value. If the first fit did NOT fail, t2 is the intersection point between fits 1 and 2 + // If the second fit fails, t3 is the t_min value. If the second fit did NOT fail, t3 is the intersection point between fits 2 and 3 + + int x_1,x_2,y_1,y_2; // Redefination of w's and q2's as the array start from 0 but w starts from 2 and the q2 starts from 1 in the file. + x_1 = w_1-2; + x_2 = w_2-2; + y_1 = q2_1-1; + y_2 = q2_2-1; // Till this point variables are same for sigT and sigL + + //.................................................................................................................................................................... + // Variables that need to be defined globally somewhere ( These variables are only for sigT and I have used different variables for sigL) + double t_1,t_2,t_3,t_4; // 4 corners (points) in t to interpolate over + double sigT1,sigT2,sigT3,sigT4; // Value of SigT at each corner of the square to interpolate over + double lsigT1,lsigT2,lsigT3,lsigT4, slb,slt,sll,slr,altb,allr,fsigTLa,fsigTa; // Logarithm of sigma values and slopes along the bottom, top, left, right and the average of the slope along the top/bottom and left/right. fsigTLa is the result in logarithmic form and fsigTa is the result + double sigT11,sigT14; // Bottom left and top right sigma points, these are calculated if there are less than 3 (or 2) points to interpolate over + //................................................................................................................................................................... + + + if(SigPar[1][x_2][y_1][10] != -10001){ // t_3 is t_min for the third corner - this is always the top left corner + t_3 = SigPar[1][x_2][y_1][10]; + } + else if (SigPar[1][x_2][y_1][11] != -10001){ + t_3 = SigPar[1][x_2][y_1][11]; + } + else if (SigPar[1][x_2][y_1][12] != -10001){ + t_3 = SigPar[1][x_2][y_1][12]; + } + else { + return -100; + } + + //.................................................................................................................................................................... + // Calcualtion of sigT's at all the corners of the square + //.................................................................................................................................................................... + + if (t>= t_3 && t<2.0){ // t_3 corner is the one that we will loose at the end + + //Calculating the sigT1 at bottom left corner of the square.................................................................................. + if (t>=SigPar[1][x_1][y_1][10] && tFixParameter(0, SigPar[1][x_1][y_1][2]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); + parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); + sigT1=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_1][y_1][11] && tFixParameter(0, SigPar[1][x_1][y_1][5]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][6]); + parasigT->FixParameter(2, SigPar[1][x_1][y_1][7]); + sigT1=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_1][y_1][12] && t<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); + sigT1=parasigT->Eval(t); + + if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ + sigT1=0; + } + } + + else { + sigT1=0; + } + + //Calculating the sigT2 at bottom right corner of the square.................................................................................. + if (t>=SigPar[1][x_1][y_2][10] && tFixParameter(0, SigPar[1][x_1][y_2][2]); + parasigT->FixParameter(1, SigPar[1][x_1][y_2][3]); + parasigT->FixParameter(2, SigPar[1][x_1][y_2][4]); + sigT2=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_1][y_2][11] && tFixParameter(0, SigPar[1][x_1][y_2][5]); + parasigT->FixParameter(1, SigPar[1][x_1][y_2][6]); + parasigT->FixParameter(2, SigPar[1][x_1][y_2][7]); + sigT2=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_1][y_2][12] && t<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_1][y_2][8]); + parasigT->FixParameter(1, SigPar[1][x_1][y_2][9]); + sigT2=parasigT->Eval(t); + + if (SigPar[1][x_1][y_2][8] == 0 && SigPar[1][x_1][y_2][9] == 0){ + sigT2=0; + } + } + + else { + sigT2=0; + } + + //Calculating the sigT3 at top left corner of the square.................................................................................. + if (t>=SigPar[1][x_2][y_1][10] && tFixParameter(0, SigPar[1][x_2][y_1][2]); + parasigT->FixParameter(1, SigPar[1][x_2][y_1][3]); + parasigT->FixParameter(2, SigPar[1][x_2][y_1][4]); + sigT3=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_2][y_1][11] && tFixParameter(0, SigPar[1][x_2][y_1][5]); + parasigT->FixParameter(1, SigPar[1][x_2][y_1][6]); + parasigT->FixParameter(2, SigPar[1][x_2][y_1][7]); + sigT3=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_2][y_1][12] && t<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_2][y_1][8]); + parasigT->FixParameter(1, SigPar[1][x_2][y_1][9]); + sigT3=parasigT->Eval(t); + + if (SigPar[1][x_2][y_1][8] == 0 && SigPar[1][x_2][y_1][9] == 0){ + sigT3=0; + } + } + + else { + sigT3=0; + } + + //Calculating the sigT4 at top right corner of the square.................................................................................. + + if (t>=SigPar[1][x_2][y_2][10] && tFixParameter(0, SigPar[1][x_2][y_2][2]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); + parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); + sigT4=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_2][y_2][11] && tFixParameter(0, SigPar[1][x_2][y_2][5]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][6]); + parasigT->FixParameter(2, SigPar[1][x_2][y_2][7]); + sigT4=parasigT->Eval(t); + } + + else if (t>=SigPar[1][x_2][y_2][12] && t<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_2][y_2][8]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][9]); + sigT4=parasigT->Eval(t); + + if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ + sigT4=0; + } + } + + else { + sigT4=0; + } + //.................................................................................................................................................................... + // Difterent if and else conditions to find the crossection values at the given points. + //.................................................................................................................................................................... + + if (sigT1 == sigT2 && sigT2 == sigT3 && sigT3 == sigT4 && sigT4 == sigT1){ // if the w and q2 will have whole number values + fsigTa=sigT1; + } + + //................................................................................... + + else if (sigT1 != 0 && sigT2 != 0 && sigT3 != 0 && sigT4 != 0){ // if all the four corners are present + + // Taking the log of claculated sigT values + lsigT1 = TMath::Log(sigT1); //log value of sigT1. + lsigT2 = TMath::Log(sigT2); //log value of sigT2. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT4); //log value of sigT4. + // Calculated slopes of different lines + slb = lsigT4-lsigT3; //interpolation from the third corner (i.e. top left corner) + slt = lsigT2-lsigT1; + sll = -(lsigT1-lsigT3); + slr = -(lsigT2-lsigT4); + // Taking averages of the slopes + altb = ((slb +slt)/2 ); + allr = ((sll +slr)/2 ); + + // Applying taylor's series formula for the average slopes + fsigTLa = lsigT3 + (q2-q2_1)*altb + (w-w_2)*allr; + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + //................................................................................... + + else if (sigT1 == 0 && sigT2 == 0 && sigT4 == 0) // if we loose the 1st, 2nd and the 4th corner simultaneously + { + // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) will always be there and for other two corners, find the value of the cross-section at the first and the fourth corner at the minimum value of t. After that we can interpolate them. + +// First try to find t_1 and t_4 + + if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner + t_1 = SigPar[1][x_1][y_1][10]; + } + else if (SigPar[1][x_1][y_1][11] != -10001){ + t_1 = SigPar[1][x_1][y_1][11]; + } + else if ( SigPar[1][x_1][y_1][12] != -10001){ + t_1 = SigPar[1][x_1][y_1][12]; + } + else { + return -100; + } + +//................................................................................... +if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - this is always the top right corner + t_4 = SigPar[1][x_2][y_2][10]; + } + else if (SigPar[1][x_2][y_2][11] != -10001){ + t_4 =SigPar[1][x_2][y_2][11]; + } + else if (SigPar[1][x_2][y_2][12] != -10001){ + t_4 = SigPar[1][x_2][y_2][12]; + } + else { + return -100; + } + +//Calculating the sigT11 at bottom left corner of the square + if (t_1>=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); + parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); + sigT11=parasigT->Eval(t_1); + } + + else if (t_1>=SigPar[1][x_1][y_1][11] && t_1FixParameter(0,SigPar[1][x_1][y_1][5]); + parasigT->FixParameter(1,SigPar[1][x_1][y_1][6]); + parasigT->FixParameter(2,SigPar[1][x_1][y_1][7]); + sigT11=parasigT->Eval(t_1); + } + + else if (t_1>=SigPar[1][x_1][y_1][12] && t_1<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); + sigT11=parasigT->Eval(t_1); + + if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ + sigT11 =0; + } + } + + else { + sigT11=0; + } + + //Calculating the sigT14 at bottom left corner of the square + + if (t_4>=SigPar[1][x_2][y_2][10]&& t_4FixParameter(0, SigPar[1][x_2][y_2][2]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); + parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); + sigT14=parasigT->Eval(t_4); + } + + else if (t_4>=SigPar[1][x_2][y_2][11] && t_1FixParameter(0,SigPar[1][x_2][y_2][5]); + parasigT->FixParameter(1,SigPar[1][x_2][y_2][6]); + parasigT->FixParameter(2,SigPar[1][x_2][y_2][7]); + sigT14=parasigT->Eval(t_4); + } + + else if (t_4>=SigPar[1][x_1][y_1][12] && t_1<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_2][y_2][8]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][9]); + sigT14=parasigT->Eval(t_4); + + if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ + sigT14 =0; + } + } + + else { + sigT14=0; + } + + // Taking the log of claculated sigT values + lsigT1 = TMath::Log(sigT11); //log value of sigT11. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT14); //log value of sigT4. + // Calculated slopes of different lines + slb = lsigT4-lsigT3; //->interpolation from the third corner + sll = -(lsigT1-lsigT3); + + // Applying taylor's series formula without averaging the slopes + fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + //................................................................................... + + else if (sigT1 == 0 && sigT2 == 0){ // if we loose the 1st and the 2nd corner simultaneously + // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. + +// First try to find t_1 + + if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner + t_1 = SigPar[1][x_1][y_1][10]; + } + else if (SigPar[1][x_1][y_1][11] != -10001){ + t_1 = SigPar[1][x_1][y_1][11]; + } + else if ( SigPar[1][x_1][y_1][12] != -10001){ + t_1 = SigPar[1][x_1][y_1][12]; + } + else { + return -100; + } + + //Calculating the sigT11 at bottom left corner of the square + if (t_1>=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); + parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); + sigT11=parasigT->Eval(t_1); + } + + else if (t_1>=SigPar[1][x_1][y_1][11] && t_1FixParameter(0,SigPar[1][x_1][y_1][5]); + parasigT->FixParameter(1,SigPar[1][x_1][y_1][6]); + parasigT->FixParameter(2,SigPar[1][x_1][y_1][7]); + sigT11=parasigT->Eval(t_1); + } + + else if (t_1>=SigPar[1][x_1][y_1][12] && t_1<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); + parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); + sigT11=parasigT->Eval(t_1); + if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ + sigT11 =0; + } + } + + else { + sigT11=0; + } + // Taking the log of claculated sigT values + + lsigT1 = TMath::Log(sigT11); //log value of sigT11. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT4); //log value of sigT4. + // Calculated slopes of different lines + slb = lsigT3-lsigT4; //->interpolation from the third corner + sll = -(lsigT1-lsigT3); + // Applying taylor's series formula without averaging the slopes + fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + + //.............................................................................. + + else if (sigT2 == 0) { // if we loose 2nd corner, first we will always loose this corner as this correspond to highest -t value (interpolate from 3rd corner) + // In this case, we will need atleat three corners to find the cross-section. And even after loosing second corner, we still have three corners to interpolate. + + // Taking the log of claculated sigT values + lsigT1 = TMath::Log(sigT1); //log value of sigT1. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT4); //log value of sigT4. + + // Calculated slopes of different lines + slb = lsigT3-lsigT4; //->interpolation from the third corner + sll = -(lsigT1-lsigT3); + + // Applying taylor's series formula without averaging the slopes + fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + } // end of if statement over t + //.................................................................................................................................................................... + else{ + //cerr<<" Invalid t-value "<= l_3 && t<2.0){ // l_3 corner is the one that we will loose at the end + + //Calculating the sigL1 at bottom left corner of the square.................................................................................. + if (t>=SigPar[0][x_1][y_1][9] && tFixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + sigL1=parasigL->Eval(t); + if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ + sigL1=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); + sigL1=parasigL->Eval(t); + } + } + + else if (t>=SigPar[0][x_1][y_1][10] && tFixParameter(0, SigPar[0][x_1][y_1][5]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); + sigL1=parasigL->Eval(t); + if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ + sigL1=0; + } + } + + else if (t>=SigPar[0][x_1][y_1][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); + sigL1=parasigL->Eval(t); + if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ + sigL1=0; + } + } + + else { + sigL1=0; + } + + //Calculating the sigL2 at bottom right corner of the square.................................................................................. + + if (t>=SigPar[0][x_1][y_2][9] && tFixParameter(0, SigPar[0][x_1][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_2][3]); + sigL2=parasigL->Eval(t); + if (SigPar[0][x_1][y_2][2] == 0 && SigPar[0][x_1][y_2][3] == 0){ + sigL2=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_1][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_2][3]); + parasigL->FixParameter(2, SigPar[0][x_1][y_2][4]); + sigL2=parasigL->Eval(t); + } + } + + else if (t>=SigPar[0][x_1][y_2][10] && tFixParameter(0, SigPar[0][x_1][y_2][5]); + parasigL->FixParameter(1, SigPar[0][x_1][y_2][6]); + sigL2=parasigL->Eval(t); + if (SigPar[0][x_1][y_2][5] == 0 && SigPar[0][x_1][y_2][6] == 0){ + sigL2=0; + } + } + + else if (t>=SigPar[0][x_1][y_2][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_1][y_2][7]); + parasigL->FixParameter(1, SigPar[0][x_1][y_2][8]); + sigL2=parasigL->Eval(t); + if (SigPar[0][x_1][y_2][7] == 0 && SigPar[0][x_1][y_2][8] == 0){ + sigL2=0; + } + } + + else { + sigL2=0; + } + + //Calculating the sigL3 at top left corner of the square.................................................................................. + if (t>=SigPar[0][x_2][y_1][9] && tFixParameter(0, SigPar[0][x_2][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_1][3]); + sigL3=parasigL->Eval(t); + + if (SigPar[0][x_2][y_1][2] == 0 && SigPar[0][x_2][y_1][3] == 0){ + sigL3=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_2][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_1][3]); + parasigL->FixParameter(2, SigPar[0][x_2][y_1][4]); + sigL3=parasigL->Eval(t); + } + } + + else if (t>=SigPar[0][x_2][y_1][10] && tFixParameter(0, SigPar[0][x_2][y_1][5]); + parasigL->FixParameter(1, SigPar[0][x_2][y_1][6]); + sigL3=parasigL->Eval(t); + + if (SigPar[0][x_2][y_1][5] == 0 && SigPar[0][x_2][y_1][6] == 0){ + sigL3=0; + } + } + + else if (t>=SigPar[0][x_2][y_1][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_2][y_1][7]); + parasigL->FixParameter(1, SigPar[0][x_2][y_1][8]); + sigL3=parasigL->Eval(t); + + if (SigPar[0][x_2][y_1][7] == 0 && SigPar[0][x_2][y_1][8] == 0){ + sigL3=0; + } + } + + else { + sigL3=0; + } + + //Calculating the sigL4 at top right corner of the square.................................................................................. + if (t>=SigPar[0][x_2][y_2][9] && tFixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + sigL4=parasigL->Eval(t); + + if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ + sigL4=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); + sigL4=parasigL->Eval(t); + } + } + + else if (t>=SigPar[0][x_2][y_2][10] && tFixParameter(0, SigPar[0][x_2][y_2][5]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][6]); + sigL4=parasigL->Eval(t); + + if (SigPar[0][x_2][y_2][5] == 0 && SigPar[0][x_2][y_2][6] == 0){ + sigL4=0; + } + } + + else if (t>=SigPar[0][x_2][y_2][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][7]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][8]); + sigL4=parasigL->Eval(t); + + if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ + sigL4=0; + } + } + + else { + sigL4=0; + } + + //.................................................................................................................................................................... + // Difterent if and else conditions to find the crossection values at the given points. + //.................................................................................................................................................................... + + if (sigL1 == sigL2 && sigL2 == sigL3 && sigL3 == sigL4 && sigL4 == sigL1){ // if the w and q2 will have whole number values + fsigLa = sigL1; + } + + //................................................................................... + + else if (sigL1 != 0 && sigL2 != 0 && sigL3 != 0 && sigL4 != 0){ // if all the four corners are present + + // Taking the log of claculated sigT values + lsigL1 = TMath::Log(sigL1); //log value of sigT1. + lsigL2 = TMath::Log(sigL2); //log value of sigT2. + lsigL3 = TMath::Log(sigL3); //log value of sigT3. + lsigL4 = TMath::Log(sigL4); //log value of sigT4. + + // Calculated slopes of different lines + + stb = lsigL4-lsigL3; //interpolation from the third corner (i.e. top left corner) + stt = lsigL2-lsigL1; + stl = -(lsigL1-lsigL3); + str = -(lsigL2-lsigL4); + + // Taking averages of the slopes + + attb = ((stb +stt)/2 ); + atlr = ((stl +str)/2 ); + + // Applying taylor's series formula for the average slopes + + fsigLLa = lsigL3 + (q2-q2_1)*attb + (w-w_2)*atlr; + + // Find the anti-log of the taylor's series formula value + fsigLa = exp(fsigLLa); + } + //................................................................................... + + else if (sigL1 == 0 && sigL2 == 0 && sigL4 == 0) // if we loose the 1st, 2nd and the 4th corner simultaneously + { + // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) will always be there and for other two corners, find the value of the cross-section at the first and the fourth corner at the minimum value of t. After that we can interpolate them. + +// First try to find t_1 and t_4 + +if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner + l_1 = SigPar[0][x_1][y_1][9]; + } + else if (SigPar[0][x_1][y_1][10] != -10001){ + l_1 = SigPar[0][x_1][y_1][10]; + } + else if ( SigPar[0][x_1][y_1][11] != -10001){ + l_1 = SigPar[0][x_1][y_1][11]; + } + else { + return -100; + } + //................................................................................... + if(SigPar[0][x_2][y_2][9] != -10001){ // l_4 is t_min for the fourth corner - this is always the top right corner + l_4 = SigPar[0][x_2][y_2][9]; + } + else if (SigPar[0][x_2][y_2][10] != -10001){ + l_4 =SigPar[0][x_2][y_2][10]; + } + else if (SigPar[0][x_2][y_2][11] != -10001){ + l_4 = SigPar[0][x_2][y_2][11]; + } + else { + return -100; + } + //Calculating the sigL11 at bottom left corner of the square + if (l_1>=SigPar[0][x_1][y_1][9] && l_1FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + sigL11=parasigL->Eval(l_1); + + if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ + sigL11=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); + sigL11=parasigL->Eval(l_1); + } + } + + else if (l_1>=SigPar[0][x_1][y_1][10] && l_1FixParameter(0, SigPar[0][x_1][y_1][5]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); + sigL11=parasigL->Eval(l_1); + + if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ + sigL11=0; + } + } + + else if (l_1>=SigPar[0][x_1][y_1][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); + sigL11=parasigL->Eval(l_1); + + if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ + sigL11=0; + } + } + + else { + sigL11=0; + } + + //Calculating the sigL14 at bottom left corner of the square + if (l_4>=SigPar[0][x_2][y_2][9] && l_4FixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ + sigL14=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); + sigL14=parasigL->Eval(l_4); + } + } + + else if (l_4>=SigPar[0][x_2][y_2][10] && l_4FixParameter(0, SigPar[0][x_2][y_2][5]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][6]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][5] == 0 && SigPar[0][x_2][y_2][6] == 0){ + sigL14=0; + } + } + + else if (l_4>=SigPar[0][x_2][y_2][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][7]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][8]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ + sigL14=0; + } + } + + else { + sigL14=0; + } + + // Taking the log of claculated sigL values + lsigL1 = TMath::Log(sigL11); //log value of sigL11. + lsigL3 = TMath::Log(sigL3); //log value of sigL3. + lsigL4 = TMath::Log(sigL14); //log value of sigL14. + + // Calculated slopes of different lines + stb = lsigL4-lsigL3; //->interpolation from the third corner + stl = -(lsigL1-lsigL3); + // Applying taylor's series formula without averaging the slopes + fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigLa = exp(fsigLLa); + } + //................................................................................... + + else if (sigL1 == 0 && sigL2 == 0){ // if we loose the 1st and the 2nd corner simultaneously + // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. + +// First try to find t_1 + +if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner + l_1 = SigPar[0][x_1][y_1][9]; + } + else if (SigPar[0][x_1][y_1][10] != -10001){ + l_1 = SigPar[0][x_1][y_1][10]; + } + else if ( SigPar[0][x_1][y_1][11] != -10001){ + l_1 = SigPar[0][x_1][y_1][11]; + } + else { + return -100; + } + //................................................................................... + //Calculating the sigL11 at bottom left corner of the square + if (l_1>=SigPar[0][x_1][y_1][9] && l_1FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + sigL11=parasigL->Eval(l_1); + + if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ + sigL11=0; + } + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); + parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); + sigL11=parasigL->Eval(l_1); + } + } + + else if (l_1>=SigPar[0][x_1][y_1][10] && l_1FixParameter(0, SigPar[0][x_1][y_1][5]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); + sigL11=parasigL->Eval(l_1); + if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ + sigL11=0; + } + } + + else if (l_1>=SigPar[0][x_1][y_1][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); + parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); + sigL11=parasigL->Eval(l_1); + if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ + sigL11=0; + } + } + + else { + sigL11=0; + } + + // Taking the log of claculated sigL values + lsigL1 = TMath::Log(sigL11); //log value of sigL11. + lsigL3 = TMath::Log(sigL3); //log value of sigL3. + lsigL4 = TMath::Log(sigL4); //log value of sigL4. + // Calculated slopes of different lines + stb = lsigL3-lsigL4; //->interpolation from the third corner + stl = -(lsigL1-lsigL3); + + // Applying taylor's series formula without averaging the slopes + fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigLa = exp(fsigLLa); + } + + //.............................................................................. + else if (sigL2 == 0) { // if we loose 2nd corner, first we will always loose this corner as this correspond to highest -t value (interpolate from 3rd corner) + // In this case, we will need atleat three corners to find the cross-section. And even after loosing second corner, we still have three corners to interpolate. + // Taking the log of claculated sigT values + lsigL1 = TMath::Log(sigL1); //log value of sigL1. + lsigL3 = TMath::Log(sigL3); //log value of sigL3. + lsigL4 = TMath::Log(sigL4); //log value of sigL4. + + // Calculated slopes of different lines + stb = lsigL3-lsigL4; //->interpolation from the third corner + stl = -(lsigL1-lsigL3); + + // Applying taylor's series formula without averaging the slopes + fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigLa = exp(fsigLLa); + } + } // end of if statement over t + //.................................................................................................................................................................... + else{ + //cerr<<" Invalid t-value "<CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 0.5) != 1 ){ fConserve++; return; @@ -428,7 +426,7 @@ void DEMP_Reaction::Processing_Event() { } */ - // 31/01/23 SJDK - New limit on t, remove only events outside the parameterisation range, limits depend upon particle type, need to add Pi0 version + // 31/01/23 SJDK - New limit on t, remove only events outside the parameterisation range, limits depend upon particle typ if (rParticle == "Pi+" && fT_GeV > 1.3 ) { t_ev++; return; @@ -437,6 +435,10 @@ void DEMP_Reaction::Processing_Event() { t_ev++; return; } + else if (rParticle == "Pi0+" && fT_GeV > 0.5){ // 03/02/23 - SJDK - Not sure what range is used for pi0, assume < 0.5 for now, would be u in this case anyway? + t_ev++; + return; + } fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); @@ -696,7 +698,7 @@ Double_t DEMP_Reaction::Get_Total_Cross_Section() { else if (rParticle == "K+"){ total_sig = GetKPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, rHadron); // SJDK - 31/01/23 - This second case gets the total cross section for the K+ as calculated from Ali's earlier scaling calculation, retain this for comparison. - total_sig2 = GetKPlus_CrossSection_Scaling(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, fX_Mass_GeV, rHadron); + //total_sig2 = GetKPlus_CrossSection_Scaling(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, fX_Mass_GeV, rHadron); } //cout << fT_GeV << " " << fW_GeV << " " << fQsq_GeV << " " << "KPlus Paramterisation - " << total_sig << " !!! Old Scaling method - " << total_sig2 << endl; @@ -705,1075 +707,6 @@ Double_t DEMP_Reaction::Get_Total_Cross_Section() { } -// Love Preet 27/01/23 - Will implement this here for now and move it to a separate file later once it is tested and working -Double_t DEMP_Reaction::GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TString fHadron) { - - double_t sig_total; - - double w,q2,t; // For the sake of testing, I redescribed the fw,fqsq,ft as w,q2,t as I alraedy had a file in my PC to calculate the crossection with these notations - w=fw; q2=fqsq; t=ft; - - int w_1,w_2,q2_1,q2_2;// w_1, rounded value of the input W, w_2 is the next (or previous) value of W. q2_1 is the rounded input value of Q2, q2_2 is the next (or previous) value of Q2 in the array - w_1 = round(w); - q2_1 = round(q2); - //.................................................................................................................................................................... - // Below are set of if and else if conditions for boundary values of w and q2 - //.................................................................................................................................................................... - - if (w == w_1){ - w_1 = w; - w_2 = w; - - if (q2 > q2_1){ - q2_2 = q2_1 + 1; - } - - else if (q2 < q2_1){ - q2_2 = q2_1; - q2_1 = q2_2 -1; - } - - else if (q2 == q2_1 ){ - q2_1 = q2; - q2_2 = q2;} - - } - - //................................................................................. - - else if (w > w_1){ - w_2 = w_1 + 1; - - if (q2 > q2_1){ - q2_2 = q2_1 + 1; - } - - else if (q2 < q2_1){ - q2_2 = q2_1; - q2_1 = q2_2 -1; - } - - else if (q2 == q2_1 ){ - q2_1 = q2; - q2_2 = q2;} - } - - //................................................................................... - else if (w < w_1){ - w_2 =w_1; - w_1 = w_2 - 1; - - if (q2 > q2_1){ - q2_2 = q2_1 + 1; - } - - else if (q2 < q2_1){ - q2_2 = q2_1; - q2_1 = q2_2 -1; - } - - else if (q2 == q2_1 ){ - q2_1 = q2; - q2_2 = q2;} - } - - //.................................................................................................................................................................... - // Calcualtion of t-min values at each w and q2 (i.e. at all the four combinations of w's and q2's ) - //.................................................................................................................................................................... - // t1 is the t_min value UNLESS the first fit fails - // If the first fit fails, t2 is the t_min value. If the first fit did NOT fail, t2 is the intersection point between fits 1 and 2 - // If the second fit fails, t3 is the t_min value. If the second fit did NOT fail, t3 is the intersection point between fits 2 and 3 - - int x_1,x_2,y_1,y_2; // Redefination of w's and q2's as the array start from 0 but w starts from 2 and the q2 starts from 1 in the file. - x_1 = w_1-2; - x_2 = w_2-2; - y_1 = q2_1-1; - y_2 = q2_2-1; // Till this point variables are same for sigT and sigL - - //.................................................................................................................................................................... - // Variables that need to be defined globally somewhere ( These variables are only for sigT and I have used different variables for sigL) - double t_1,t_2,t_3,t_4; // 4 corners (points) in t to interpolate over - double sigT1,sigT2,sigT3,sigT4; // Value of SigT at each corner of the square to interpolate over - double lsigT1,lsigT2,lsigT3,lsigT4, slb,slt,sll,slr,altb,allr,fsigTLa,fsigTa; // Logarithm of sigma values and slopes along the bottom, top, left, right and the average of the slope along the top/bottom and left/right. fsigTLa is the result in logarithmic form and fsigTa is the result - double sigT11,sigT14; // Bottom left and top right sigma points, these are calculated if there are less than 3 (or 2) points to interpolate over - //................................................................................................................................................................... - //................................................................................... - - /*if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner - t_1 = SigPar[1][x_1][y_1][10]; - } - else if (SigPar[1][x_1][y_1][11] != -10001){ - t_1 = SigPar[1][x_1][y_1][11]; - } - else if ( SigPar[1][x_1][y_1][12] != -10001){ - t_1 = SigPar[1][x_1][y_1][12]; - } - //................................................................................... - - if(SigPar[1][x_1][y_2][10] != -10001) { // t_2 is t_min for the second corner - this is always the bottom right corner - t_2 = SigPar[1][x_1][y_2][10]; - } - else if (SigPar[1][x_1][y_2][11] != -10001){ - t_2 = SigPar[1][x_1][y_2][11]; - } - else if (SigPar[1][x_1][y_2][12] != -10001){ - t_2 = SigPar[1][x_1][y_2][12]; - }*/ - //................................................................................... - - if(SigPar[1][x_2][y_1][10] != -10001){ // t_3 is t_min for the third corner - this is always the top left corner - t_3 = SigPar[1][x_2][y_1][10]; - } - else if (SigPar[1][x_2][y_1][11] != -10001){ - t_3 = SigPar[1][x_2][y_1][11]; - } - else if (SigPar[1][x_2][y_1][12] != -10001){ - t_3 = SigPar[1][x_2][y_1][12]; - } - else { - return -100; - } - //................................................................................... - - /* if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - this is always the top right corner - t_4 = SigPar[1][x_2][y_2][10]; - } - else if (SigPar[1][x_2][y_2][11] != -10001){ - t_4 =SigPar[1][x_2][y_2][11]; - } - else if (SigPar[1][x_2][y_2][12] != -10001){ - t_4 = SigPar[1][x_2][y_2][12]; - } */ - //.................................................................................................................................................................... - // Calcualtion of sigT's at all the corners of the square - //.................................................................................................................................................................... - - if (t>= t_3 && t<2.0){ // t_3 corner is the one that we will loose at the end - - //Calculating the sigT1 at bottom left corner of the square.................................................................................. - if (t>=SigPar[1][x_1][y_1][10] && tFixParameter(0, SigPar[1][x_1][y_1][2]); - parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); - parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); - sigT1=parasigT->Eval(t); - } - - else if (t>=SigPar[1][x_1][y_1][11] && tFixParameter(0, SigPar[1][x_1][y_1][5]); - parasigT->FixParameter(1, SigPar[1][x_1][y_1][6]); - parasigT->FixParameter(2, SigPar[1][x_1][y_1][7]); - sigT1=parasigT->Eval(t); - } - - else if (t>=SigPar[1][x_1][y_1][12] && t<2.0){ - TF1* parasigT= new TF1("parasigT","expo"); - parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); - parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); - sigT1=parasigT->Eval(t); - - if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ - sigT1=0; - } - } - - else { - sigT1=0; - } - - //Calculating the sigT2 at bottom right corner of the square.................................................................................. - if (t>=SigPar[1][x_1][y_2][10] && tFixParameter(0, SigPar[1][x_1][y_2][2]); - parasigT->FixParameter(1, SigPar[1][x_1][y_2][3]); - parasigT->FixParameter(2, SigPar[1][x_1][y_2][4]); - sigT2=parasigT->Eval(t); - } - - else if (t>=SigPar[1][x_1][y_2][11] && tFixParameter(0, SigPar[1][x_1][y_2][5]); - parasigT->FixParameter(1, SigPar[1][x_1][y_2][6]); - parasigT->FixParameter(2, SigPar[1][x_1][y_2][7]); - sigT2=parasigT->Eval(t); - } - - else if (t>=SigPar[1][x_1][y_2][12] && t<2.0){ - TF1* parasigT= new TF1("parasigT","expo"); - parasigT->FixParameter(0, SigPar[1][x_1][y_2][8]); - parasigT->FixParameter(1, SigPar[1][x_1][y_2][9]); - sigT2=parasigT->Eval(t); - - if (SigPar[1][x_1][y_2][8] == 0 && SigPar[1][x_1][y_2][9] == 0){ - sigT2=0; - } - } - - else { - sigT2=0; - } - - //Calculating the sigT3 at top left corner of the square.................................................................................. - if (t>=SigPar[1][x_2][y_1][10] && tFixParameter(0, SigPar[1][x_2][y_1][2]); - parasigT->FixParameter(1, SigPar[1][x_2][y_1][3]); - parasigT->FixParameter(2, SigPar[1][x_2][y_1][4]); - sigT3=parasigT->Eval(t); - } - - else if (t>=SigPar[1][x_2][y_1][11] && tFixParameter(0, SigPar[1][x_2][y_1][5]); - parasigT->FixParameter(1, SigPar[1][x_2][y_1][6]); - parasigT->FixParameter(2, SigPar[1][x_2][y_1][7]); - sigT3=parasigT->Eval(t); - } - - else if (t>=SigPar[1][x_2][y_1][12] && t<2.0){ - TF1* parasigT= new TF1("parasigT","expo"); - parasigT->FixParameter(0, SigPar[1][x_2][y_1][8]); - parasigT->FixParameter(1, SigPar[1][x_2][y_1][9]); - sigT3=parasigT->Eval(t); - - if (SigPar[1][x_2][y_1][8] == 0 && SigPar[1][x_2][y_1][9] == 0){ - sigT3=0; - } - } - - else { - sigT3=0; - } - - //Calculating the sigT4 at top right corner of the square.................................................................................. - - if (t>=SigPar[1][x_2][y_2][10] && tFixParameter(0, SigPar[1][x_2][y_2][2]); - parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); - parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); - sigT4=parasigT->Eval(t); - } - - else if (t>=SigPar[1][x_2][y_2][11] && tFixParameter(0, SigPar[1][x_2][y_2][5]); - parasigT->FixParameter(1, SigPar[1][x_2][y_2][6]); - parasigT->FixParameter(2, SigPar[1][x_2][y_2][7]); - sigT4=parasigT->Eval(t); - } - - else if (t>=SigPar[1][x_2][y_2][12] && t<2.0){ - TF1* parasigT= new TF1("parasigT","expo"); - parasigT->FixParameter(0, SigPar[1][x_2][y_2][8]); - parasigT->FixParameter(1, SigPar[1][x_2][y_2][9]); - sigT4=parasigT->Eval(t); - - if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ - sigT4=0; - } - } - - else { - sigT4=0; - } - //.................................................................................................................................................................... - // Difterent if and else conditions to find the crossection values at the given points. - //.................................................................................................................................................................... - // SJDK - 31/01/23 - This seems to spam things to screen, even when running pi+ - /* - if (sigT1 == sigT2 && sigT2 == sigT3 && sigT3 == sigT4 && sigT4 == sigT1){ // if the w and q2 will have whole number values - cerr<<"fsigTa = "<=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); - parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); - parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); - sigT11=parasigT->Eval(t_1); - } - - else if (t_1>=SigPar[1][x_1][y_1][11] && t_1FixParameter(0,SigPar[1][x_1][y_1][5]); - parasigT->FixParameter(1,SigPar[1][x_1][y_1][6]); - parasigT->FixParameter(2,SigPar[1][x_1][y_1][7]); - sigT11=parasigT->Eval(t_1); - } - - else if (t_1>=SigPar[1][x_1][y_1][12] && t_1<2.0){ - TF1* parasigT= new TF1("parasigT","expo"); - parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); - parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); - sigT11=parasigT->Eval(t_1); - - if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ - sigT11 =0; - } - } - - else { - sigT11=0; - } - - //Calculating the sigT14 at bottom left corner of the square - - if (t_4>=SigPar[1][x_2][y_2][10]&& t_4FixParameter(0, SigPar[1][x_2][y_2][2]); - parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); - parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); - sigT14=parasigT->Eval(t_4); - } - - else if (t_4>=SigPar[1][x_2][y_2][11] && t_1FixParameter(0,SigPar[1][x_2][y_2][5]); - parasigT->FixParameter(1,SigPar[1][x_2][y_2][6]); - parasigT->FixParameter(2,SigPar[1][x_2][y_2][7]); - sigT14=parasigT->Eval(t_4); - } - - else if (t_4>=SigPar[1][x_1][y_1][12] && t_1<2.0){ - TF1* parasigT= new TF1("parasigT","expo"); - parasigT->FixParameter(0, SigPar[1][x_2][y_2][8]); - parasigT->FixParameter(1, SigPar[1][x_2][y_2][9]); - sigT14=parasigT->Eval(t_4); - - if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ - sigT14 =0; - } - } - - else { - sigT14=0; - } - - // Taking the log of claculated sigT values - lsigT1 = TMath::Log(sigT11); //log value of sigT11. - lsigT3 = TMath::Log(sigT3); //log value of sigT3. - lsigT4 = TMath::Log(sigT14); //log value of sigT4. - // Calculated slopes of different lines - slb = lsigT4-lsigT3; //->interpolation from the third corner - sll = -(lsigT1-lsigT3); - - // Applying taylor's series formula without averaging the slopes - fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner - - // Find the anti-log of the taylor's series formula value - fsigTa = exp(fsigTLa); - } - //................................................................................... - - else if (sigT1 == 0 && sigT2 == 0){ // if we loose the 1st and the 2nd corner simultaneously - // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. - - // First try to find t_1 - - if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner - t_1 = SigPar[1][x_1][y_1][10]; - } - else if (SigPar[1][x_1][y_1][11] != -10001){ - t_1 = SigPar[1][x_1][y_1][11]; - } - else if ( SigPar[1][x_1][y_1][12] != -10001){ - t_1 = SigPar[1][x_1][y_1][12]; - } - else { - return -100; - } - - //Calculating the sigT11 at bottom left corner of the square - if (t_1>=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); - parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); - parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); - sigT11=parasigT->Eval(t_1); - } - - else if (t_1>=SigPar[1][x_1][y_1][11] && t_1FixParameter(0,SigPar[1][x_1][y_1][5]); - parasigT->FixParameter(1,SigPar[1][x_1][y_1][6]); - parasigT->FixParameter(2,SigPar[1][x_1][y_1][7]); - sigT11=parasigT->Eval(t_1); - } - - else if (t_1>=SigPar[1][x_1][y_1][12] && t_1<2.0){ - TF1* parasigT= new TF1("parasigT","expo"); - parasigT->FixParameter(0, SigPar[1][x_1][y_1][8]); - parasigT->FixParameter(1, SigPar[1][x_1][y_1][9]); - sigT11=parasigT->Eval(t_1); - if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ - sigT11 =0; - } - } - - else { - sigT11=0; - } - // Taking the log of claculated sigT values - - lsigT1 = TMath::Log(sigT11); //log value of sigT11. - lsigT3 = TMath::Log(sigT3); //log value of sigT3. - lsigT4 = TMath::Log(sigT4); //log value of sigT4. - // Calculated slopes of different lines - slb = lsigT3-lsigT4; //->interpolation from the third corner - sll = -(lsigT1-lsigT3); - // Applying taylor's series formula without averaging the slopes - fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner - - // Find the anti-log of the taylor's series formula value - fsigTa = exp(fsigTLa); - } - - //.............................................................................. - - else if (sigT2 == 0) { // if we loose 2nd corner, first we will always loose this corner as this correspond to highest -t value (interpolate from 3rd corner) - // In this case, we will need atleat three corners to find the cross-section. And even after loosing second corner, we still have three corners to interpolate. - - // Taking the log of claculated sigT values - lsigT1 = TMath::Log(sigT1); //log value of sigT1. - lsigT3 = TMath::Log(sigT3); //log value of sigT3. - lsigT4 = TMath::Log(sigT4); //log value of sigT4. - - // Calculated slopes of different lines - slb = lsigT3-lsigT4; //->interpolation from the third corner - sll = -(lsigT1-lsigT3); - - // Applying taylor's series formula without averaging the slopes - fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner - - // Find the anti-log of the taylor's series formula value - fsigTa = exp(fsigTLa); - } - } // end of if statement over t - //.................................................................................................................................................................... - else{ - //cerr<<" Invalid t-value "<= l_3 && t<2.0){ // l_3 corner is the one that we will loose at the end - - //Calculating the sigL1 at bottom left corner of the square.................................................................................. - if (t>=SigPar[0][x_1][y_1][9] && tFixParameter(0, SigPar[0][x_1][y_1][2]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); - sigL1=parasigL->Eval(t); - if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ - sigL1=0; - } - } - - else{ - TF1* parasigL= new TF1("parasigL","pol2"); - parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); - parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); - sigL1=parasigL->Eval(t); - } - } - - else if (t>=SigPar[0][x_1][y_1][10] && tFixParameter(0, SigPar[0][x_1][y_1][5]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); - sigL1=parasigL->Eval(t); - if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ - sigL1=0; - } - } - - else if (t>=SigPar[0][x_1][y_1][11] && t<2.0){ - TF1* parasigL= new TF1("parasigT","expo"); - parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); - sigL1=parasigL->Eval(t); - if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ - sigL1=0; - } - } - - else { - sigL1=0; - } - - //Calculating the sigL2 at bottom right corner of the square.................................................................................. - - if (t>=SigPar[0][x_1][y_2][9] && tFixParameter(0, SigPar[0][x_1][y_2][2]); - parasigL->FixParameter(1, SigPar[0][x_1][y_2][3]); - sigL2=parasigL->Eval(t); - if (SigPar[0][x_1][y_2][2] == 0 && SigPar[0][x_1][y_2][3] == 0){ - sigL2=0; - } - } - - else{ - TF1* parasigL= new TF1("parasigL","pol2"); - parasigL->FixParameter(0, SigPar[0][x_1][y_2][2]); - parasigL->FixParameter(1, SigPar[0][x_1][y_2][3]); - parasigL->FixParameter(2, SigPar[0][x_1][y_2][4]); - sigL2=parasigL->Eval(t); - } - } - - else if (t>=SigPar[0][x_1][y_2][10] && tFixParameter(0, SigPar[0][x_1][y_2][5]); - parasigL->FixParameter(1, SigPar[0][x_1][y_2][6]); - sigL2=parasigL->Eval(t); - if (SigPar[0][x_1][y_2][5] == 0 && SigPar[0][x_1][y_2][6] == 0){ - sigL2=0; - } - } - - else if (t>=SigPar[0][x_1][y_2][11] && t<2.0){ - TF1* parasigL= new TF1("parasigT","expo"); - parasigL->FixParameter(0, SigPar[0][x_1][y_2][7]); - parasigL->FixParameter(1, SigPar[0][x_1][y_2][8]); - sigL2=parasigL->Eval(t); - if (SigPar[0][x_1][y_2][7] == 0 && SigPar[0][x_1][y_2][8] == 0){ - sigL2=0; - } - } - - else { - sigL2=0; - } - - //Calculating the sigL3 at top left corner of the square.................................................................................. - if (t>=SigPar[0][x_2][y_1][9] && tFixParameter(0, SigPar[0][x_2][y_1][2]); - parasigL->FixParameter(1, SigPar[0][x_2][y_1][3]); - sigL3=parasigL->Eval(t); - - if (SigPar[0][x_2][y_1][2] == 0 && SigPar[0][x_2][y_1][3] == 0){ - sigL3=0; - } - } - - else{ - TF1* parasigL= new TF1("parasigL","pol2"); - parasigL->FixParameter(0, SigPar[0][x_2][y_1][2]); - parasigL->FixParameter(1, SigPar[0][x_2][y_1][3]); - parasigL->FixParameter(2, SigPar[0][x_2][y_1][4]); - sigL3=parasigL->Eval(t); - } - } - - else if (t>=SigPar[0][x_2][y_1][10] && tFixParameter(0, SigPar[0][x_2][y_1][5]); - parasigL->FixParameter(1, SigPar[0][x_2][y_1][6]); - sigL3=parasigL->Eval(t); - - if (SigPar[0][x_2][y_1][5] == 0 && SigPar[0][x_2][y_1][6] == 0){ - sigL3=0; - } - } - - else if (t>=SigPar[0][x_2][y_1][11] && t<2.0){ - TF1* parasigL= new TF1("parasigT","expo"); - parasigL->FixParameter(0, SigPar[0][x_2][y_1][7]); - parasigL->FixParameter(1, SigPar[0][x_2][y_1][8]); - sigL3=parasigL->Eval(t); - - if (SigPar[0][x_2][y_1][7] == 0 && SigPar[0][x_2][y_1][8] == 0){ - sigL3=0; - } - } - - else { - sigL3=0; - } - - //Calculating the sigL4 at top right corner of the square.................................................................................. - if (t>=SigPar[0][x_2][y_2][9] && tFixParameter(0, SigPar[0][x_2][y_2][2]); - parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); - sigL4=parasigL->Eval(t); - - if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ - sigL4=0; - } - } - - else{ - TF1* parasigL= new TF1("parasigL","pol2"); - parasigL->FixParameter(0, SigPar[0][x_2][y_2][2]); - parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); - parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); - sigL4=parasigL->Eval(t); - } - } - - else if (t>=SigPar[0][x_2][y_2][10] && tFixParameter(0, SigPar[0][x_2][y_2][5]); - parasigL->FixParameter(1, SigPar[0][x_2][y_2][6]); - sigL4=parasigL->Eval(t); - - if (SigPar[0][x_2][y_2][5] == 0 && SigPar[0][x_2][y_2][6] == 0){ - sigL4=0; - } - } - - else if (t>=SigPar[0][x_2][y_2][11] && t<2.0){ - TF1* parasigL= new TF1("parasigT","expo"); - parasigL->FixParameter(0, SigPar[0][x_2][y_2][7]); - parasigL->FixParameter(1, SigPar[0][x_2][y_2][8]); - sigL4=parasigL->Eval(t); - - if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ - sigL4=0; - } - } - - else { - sigL4=0; - } - - //.................................................................................................................................................................... - // Difterent if and else conditions to find the crossection values at the given points. - //.................................................................................................................................................................... - - if (sigL1 == sigL2 && sigL2 == sigL3 && sigL3 == sigL4 && sigL4 == sigL1){ // if the w and q2 will have whole number values - cerr<<"fsigLa = "<=SigPar[0][x_1][y_1][9] && l_1FixParameter(0, SigPar[0][x_1][y_1][2]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); - sigL11=parasigL->Eval(l_1); - - if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ - sigL11=0; - } - } - - else{ - TF1* parasigL= new TF1("parasigL","pol2"); - parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); - parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); - sigL11=parasigL->Eval(l_1); - } - } - - else if (l_1>=SigPar[0][x_1][y_1][10] && l_1FixParameter(0, SigPar[0][x_1][y_1][5]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); - sigL11=parasigL->Eval(l_1); - - if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ - sigL11=0; - } - } - - else if (l_1>=SigPar[0][x_1][y_1][11] && t<2.0){ - TF1* parasigL= new TF1("parasigT","expo"); - parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); - sigL11=parasigL->Eval(l_1); - - if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ - sigL11=0; - } - } - - else { - sigL11=0; - } - - //Calculating the sigL14 at bottom left corner of the square - if (l_4>=SigPar[0][x_2][y_2][9] && l_4FixParameter(0, SigPar[0][x_2][y_2][2]); - parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); - sigL14=parasigL->Eval(l_4); - - if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ - sigL14=0; - } - } - - else{ - TF1* parasigL= new TF1("parasigL","pol2"); - parasigL->FixParameter(0, SigPar[0][x_2][y_2][2]); - parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); - parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); - sigL14=parasigL->Eval(l_4); - } - } - - else if (l_4>=SigPar[0][x_2][y_2][10] && l_4FixParameter(0, SigPar[0][x_2][y_2][5]); - parasigL->FixParameter(1, SigPar[0][x_2][y_2][6]); - sigL14=parasigL->Eval(l_4); - - if (SigPar[0][x_2][y_2][5] == 0 && SigPar[0][x_2][y_2][6] == 0){ - sigL14=0; - } - } - - else if (l_4>=SigPar[0][x_2][y_2][11] && t<2.0){ - TF1* parasigL= new TF1("parasigT","expo"); - parasigL->FixParameter(0, SigPar[0][x_2][y_2][7]); - parasigL->FixParameter(1, SigPar[0][x_2][y_2][8]); - sigL14=parasigL->Eval(l_4); - - if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ - sigL14=0; - } - } - - else { - sigL14=0; - } - - // Taking the log of claculated sigL values - lsigL1 = TMath::Log(sigL11); //log value of sigL11. - lsigL3 = TMath::Log(sigL3); //log value of sigL3. - lsigL4 = TMath::Log(sigL14); //log value of sigL14. - - // Calculated slopes of different lines - stb = lsigL4-lsigL3; //->interpolation from the third corner - stl = -(lsigL1-lsigL3); - // Applying taylor's series formula without averaging the slopes - fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner - - // Find the anti-log of the taylor's series formula value - fsigLa = exp(fsigLLa); - } - //................................................................................... - - else if (sigL1 == 0 && sigL2 == 0){ // if we loose the 1st and the 2nd corner simultaneously - // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. - - // First try to find t_1 - - if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner - l_1 = SigPar[0][x_1][y_1][9]; - } - else if (SigPar[0][x_1][y_1][10] != -10001){ - l_1 = SigPar[0][x_1][y_1][10]; - } - else if ( SigPar[0][x_1][y_1][11] != -10001){ - l_1 = SigPar[0][x_1][y_1][11]; - } - else { - return -100; - } - //................................................................................... - //Calculating the sigL11 at bottom left corner of the square - if (l_1>=SigPar[0][x_1][y_1][9] && l_1FixParameter(0, SigPar[0][x_1][y_1][2]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); - sigL11=parasigL->Eval(l_1); - - if (SigPar[0][x_1][y_1][2] == 0 && SigPar[0][x_1][y_1][3] == 0){ - sigL11=0; - } - } - - else{ - TF1* parasigL= new TF1("parasigL","pol2"); - parasigL->FixParameter(0, SigPar[0][x_1][y_1][2]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][3]); - parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); - sigL11=parasigL->Eval(l_1); - } - } - - else if (l_1>=SigPar[0][x_1][y_1][10] && l_1FixParameter(0, SigPar[0][x_1][y_1][5]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][6]); - sigL11=parasigL->Eval(l_1); - if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ - sigL11=0; - } - } - - else if (l_1>=SigPar[0][x_1][y_1][11] && t<2.0){ - TF1* parasigL= new TF1("parasigT","expo"); - parasigL->FixParameter(0, SigPar[0][x_1][y_1][7]); - parasigL->FixParameter(1, SigPar[0][x_1][y_1][8]); - sigL11=parasigL->Eval(l_1); - if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ - sigL11=0; - } - } - - else { - sigL11=0; - } - - // Taking the log of claculated sigL values - lsigL1 = TMath::Log(sigL11); //log value of sigL11. - lsigL3 = TMath::Log(sigL3); //log value of sigL3. - lsigL4 = TMath::Log(sigL4); //log value of sigL4. - // Calculated slopes of different lines - stb = lsigL3-lsigL4; //->interpolation from the third corner - stl = -(lsigL1-lsigL3); - - // Applying taylor's series formula without averaging the slopes - fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner - - // Find the anti-log of the taylor's series formula value - fsigLa = exp(fsigLLa); - } - - //.............................................................................. - - else if (sigL2 == 0) { // if we loose 2nd corner, first we will always loose this corner as this correspond to highest -t value (interpolate from 3rd corner) - // In this case, we will need atleat three corners to find the cross-section. And even after loosing second corner, we still have three corners to interpolate. - // Taking the log of claculated sigT values - lsigL1 = TMath::Log(sigL1); //log value of sigL1. - lsigL3 = TMath::Log(sigL3); //log value of sigL3. - lsigL4 = TMath::Log(sigL4); //log value of sigL4. - - // Calculated slopes of different lines - stb = lsigL3-lsigL4; //->interpolation from the third corner - stl = -(lsigL1-lsigL3); - - // Applying taylor's series formula without averaging the slopes - fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner - - // Find the anti-log of the taylor's series formula value - fsigLa = exp(fsigLLa); - } - } // end of if statement over t - //.................................................................................................................................................................... - else{ - //cerr<<" Invalid t-value "< Date: Wed, 22 Mar 2023 07:04:08 -0400 Subject: [PATCH 17/35] Before merging --- src/eic_evgen/process_routine/PiPlus_prod.cc | 54 +++++++++++--------- src/eic_evgen/reaction_routine.h | 11 ++++ 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/eic_evgen/process_routine/PiPlus_prod.cc b/src/eic_evgen/process_routine/PiPlus_prod.cc index e96b433..9f54a10 100644 --- a/src/eic_evgen/process_routine/PiPlus_prod.cc +++ b/src/eic_evgen/process_routine/PiPlus_prod.cc @@ -175,6 +175,27 @@ void PiPlus_Production::Init() { Proton_Particle = new Particle(); + ///*--------------------------------------------------*/ + /// For testing + + proton_mass_mev = fProton_Mass; + pion_mass_mev = 139.57; + + Interaction = new Particle(); + Target = new Particle(); + Initial = new Particle(); + Final = new Particle(); + + VertBeamElec = new Particle(); + VertScatElec = new Particle(); + Photon = new Particle(); + + VertBeamElec->SetPxPyPzE(0, 0, 11000, 11000); + VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); + Target->SetPxPyPzE(0, 0, 0, 939.565); + + + } void PiPlus_Production::Processing_Event() { @@ -273,30 +294,11 @@ void PiPlus_Production::Processing_Event() { // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- - - proton_mass_mev = fProton_Mass; - pion_mass_mev = 139.57; - - Interaction = new Particle(); - Target = new Particle(); - Initial = new Particle(); - Final = new Particle(); - - Particle* VertBeamElec = new Particle(); - Particle* VertScatElec = new Particle(); - - Particle* Photon = new Particle(); - - VertBeamElec->SetPxPyPzE(0, 0, 11000, 11000); - VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); - Target->SetPxPyPzE(0, 0, 0, 939.565); - *Photon = *VertBeamElec - *VertScatElec; *Interaction = *Photon; Solve(); - - + // // Float_t pion_theta_i, pion_phi_i; // @@ -1350,9 +1352,7 @@ int PiPlus_Production::Solve(double theta, double phi) UnitVect->SetTheta(theta); UnitVect->SetPhi(phi); UnitVect->SetMag(1); - - - double pars[9]; + pars[0] = UnitVect->X(); pars[1] = UnitVect->Y(); pars[2] = UnitVect->Z(); @@ -1375,6 +1375,8 @@ int PiPlus_Production::Solve(double theta, double phi) cout << pars[6] << " " << pars[7] << " " << pars[8] << endl; + cout << "P6 " << pars[6] << endl; + F->SetParameters(pars); double P = F->GetX(0, 0, pars[6], 0.0001, 10000); @@ -1394,7 +1396,12 @@ int PiPlus_Production::Solve(double theta, double phi) cout << Pion->E() << " " << Proton_Particle->E() << endl; + cout << "AAAAAAAA++++ " << SolnCheck() << endl; + cout << "AAAAAAAA++++ " << P << " " << TMath::Abs(F->Eval(P)) << endl; + if (TMath::Abs(F->Eval(P)) > 1){ + + cout << "++++ " << SolnCheck() << endl; delete Pion1; delete Proton1; return 1; @@ -1418,6 +1425,7 @@ int PiPlus_Production::Solve(double theta, double phi) return 0; } + exit(0); //Try second solution Particle * Pion2 = new Particle(pion_mass_mev, diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index 6450b50..7b10244 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -226,6 +226,14 @@ class PiPlus_Production { int Solve(); int Solve(double theta, double phi); + ///*--------------------------------------------------*/ + // Needed for the Solve function + double pars[9]; + + Particle* VertBeamElec ; + Particle* VertScatElec ; + Particle* Photon ; + }; // @@ -445,6 +453,9 @@ class KPlus_Production { unsigned long long int print_itt; + + + }; From 01acec3caf0e5ac60b00abffdd4922f8352c774e Mon Sep 17 00:00:00 2001 From: billlee Date: Wed, 22 Mar 2023 20:16:11 -0400 Subject: [PATCH 18/35] Improved and modified contribution from Ishan --- data/test.txt | 1007 +------- src/eic_evgen/process_routine/Pi0_prod.cc | 2318 +++++++----------- src/eic_evgen/process_routine/PiPlus_prod.cc | 459 +--- src/eic_evgen/reaction_routine.h | 45 +- 4 files changed, 1120 insertions(+), 2709 deletions(-) diff --git a/data/test.txt b/data/test.txt index d8aa005..1dd1ec3 100644 --- a/data/test.txt +++ b/data/test.txt @@ -1,1000 +1,7 @@ -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 -8.14462 11.625 2.58309 5.36 0.0626442 45.371 0 54.2636 0 0 0 0 +11.111 11.0789 2.49487 5.50227 0.0332612 99.2937 0.0884853 0.153026 0 0 0 0 +9.03795 10.7164 2.5549 5.4047 0.0304941 99.3644 0.221746 0.187243 0 0 0 0 +7.88024 9.94301 2.59203 5.35165 0.0280858 99.4204 0.115647 0.183643 0 0 0 0 +8.52366 9.15954 2.5712 5.38417 0.0288262 99.3582 0.203642 0.219421 0 0 0 0 +10.167 10.8937 2.52132 5.45789 0.0321669 99.3283 0.134671 0.165739 0 0 0 0 +9.20235 11.8361 2.54971 5.40971 0.0302413 99.3965 0.0927714 0.139051 0 0 0 0 +8.11153 9.39098 2.58447 5.36401 0.0281077 99.3824 0.214742 0.214618 0 0 0 0 diff --git a/src/eic_evgen/process_routine/Pi0_prod.cc b/src/eic_evgen/process_routine/Pi0_prod.cc index 7bb788a..d5096ee 100644 --- a/src/eic_evgen/process_routine/Pi0_prod.cc +++ b/src/eic_evgen/process_routine/Pi0_prod.cc @@ -1,12 +1,13 @@ #include "reaction_routine.h" #include "eic.h" #include "particleType.h" +#include using namespace std; Pi0_Production::Pi0_Production() { - cout << "Program Start" << endl; + cout << "Program Start" << endl; } @@ -15,26 +16,24 @@ Pi0_Production::Pi0_Production() { Pi0_Production::Pi0_Production(TString particle_str) { - rParticle = particle_str; - -// cout << rParticle << endl; -// exit(0); - - Init(); - Pi0_Decay_Pythia6_Out_Init(); + rParticle = particle_str; + + Init(); + if (gOutputType == "Pythia6"){ + Pi0_Decay_Pythia6_Out_Init(); + } + else if (gOutputType == "HEPMC3"){ + Pi0_HEPMC3_Out_Init(); + } } /*--------------------------------------------------*/ Pi0_Production::~Pi0_Production() { -// delete rRand; - -// cout << "File closed!" << endl; - - ppiOut.close(); - ppiDetails.close(); + ppiOut.close(); + ppiDetails.close(); } @@ -42,23 +41,25 @@ Pi0_Production::~Pi0_Production() { void Pi0_Production::process_reaction() { - if_pi0_decay = gPi0_decay; - - polar_out.open("test.txt", ofstream::out); - - for( long long int i = 0; i < rNEvents; i++ ) { - - rNEvent_itt = i; - fNGenerated ++; - - Progress_Report(); // This is happens at each 10% of the total event is processed - Processing_Event(); - - } + if_pi0_decay = gPi0_decay; + + polar_out.open("test.txt", ofstream::out); + + for( long long int i = 0; i < rNEvents; i++ ) { + + rNEvent_itt = i; + fNGenerated ++; + + Progress_Report(); // This is happens at each 10% of the total event is processed + Processing_Event(); + + } + + polar_out.close(); + + Detail_Output(); - polar_out.close(); - - Detail_Output(); + system("./../../practice/outputs/bin/rootIOTree_example_write.exe LundFiles/eic_input_DEMPGen_EIC_test.dat LundFiles/Converted_Output_ROOT_File.root"); } @@ -66,200 +67,70 @@ void Pi0_Production::process_reaction() { void Pi0_Production::Processing_Event() { + // ---------------------------------------------------- + // Considering Fermi momentum for the proton + // ---------------------------------------------------- - // ---------------------------------------------------- - // Considering Fermi momentum for the proton - // ---------------------------------------------------- - - if( kCalcFermi ) { - Consider_Proton_Fermi_Momentum(); - } + if( kCalcFermi ) { + Consider_Proton_Fermi_Momentum(); + } - // ---------------------------------------------------- - // Boost vector from collider (lab) frame to protons rest frame (Fix target) - // ---------------------------------------------------- + // ---------------------------------------------------- + // Boost vector from collider (lab) frame to protons rest frame (Fix target) + // ---------------------------------------------------- - beta_col_rf = r_lproton.BoostVector(); - fGamma_Col_RF = 1.0/sqrt( 1 - pow( beta_col_rf.Mag() , 2 ) ); - - - // --------------------------------------------------------------------- - // Specify the energy and solid angle of scatterd electron in Collider (lab) frame - // --------------------------------------------------------------------- -// fScatElec_Theta_Col = acos( rRand->Uniform( cos( fScatElec_Theta_I ) , cos( fScatElec_Theta_F ) ) ); -// fScatElec_Phi_Col = rRand->Uniform( 0 , 2.0 * fPi); - -// fScatElec_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); -// fScatElec_Energy_Col = rRand->Uniform( fScatElec_E_Lo * fElectron_Energy_Col , fScatElec_E_Hi * fElectron_Energy_Col ); -// fScatElec_Energy_Col = fRandom->Uniform( fScatElec_E_Lo * fElectron_Energy_Col , fScatElec_E_Hi * fElectron_Energy_Col ); - -// fScatElec_Theta_Col = acos( rRand->Uniform( cos( 120 *fPi /180) , cos( 180 *fPi /180 ) ) ); - -// fScatElec_Theta_Col = rRand->Uniform(fPi/2, fPi); -// fScatElec_Energy_Col = rRand->Uniform(5000, 6500); - - - /*--------------------------------------------------*/ - /*--------------------------------------------------*/ - /// Random gen -// fScatElec_Theta_Col = fRandom->Uniform(fPi/2, fPi); -// fScatElec_Energy_Col = fRandom->Uniform(5000, 6200); -// fScatElec_Phi_Col = fRandom->Uniform(fProton_Phi_Col - fPi/6.0, fProton_Phi_Col + fPi/6.0); - -// cout << "Seed check: " << fRandom->GetSeed() << endl; - -// exit(0); - -// fScatElec_Theta_Col = 134 * fPi /180; -// fScatElec_Energy_Col = 5911; - -/*--------------------------------------------------*/ -/// 6 GeV -// fScatElec_Theta_Col = 152 * fPi /180; -// fScatElec_Energy_Col = 5303; + beta_col_rf = r_lproton.BoostVector(); + fGamma_Col_RF = 1.0/sqrt( 1 - pow( beta_col_rf.Mag() , 2 ) ); -//// + // --------------------------------------------------------------------- + // Specify the energy and solid angle of scatterd electron in Collider (lab) frame + // --------------------------------------------------------------------- -// fScatElec_Theta_Col = 152 * fPi /180; -// fScatElec_Energy_Col = 5336; + fScatElec_Theta_Col = acos( fRandom->Uniform( cos( fScatElec_Theta_I ) , cos( fScatElec_Theta_F ) ) ); + fScatElec_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); + fScatElec_Energy_Col = fRandom->Uniform( fScatElec_E_Lo * fElectron_Energy_Col , fScatElec_E_Hi * fElectron_Energy_Col ); + // fScatElec_Theta_Col = fRandom->Uniform( 1.7 , 1.9 ); + // fScatElec_Phi_Col = fRandom->Uniform( 0-0.01 , 0+0.01 ); + // fScatElec_Energy_Col = fRandom->Uniform( 1.33 * fElectron_Energy_Col , 2.50 * fElectron_Energy_Col ); -// fScatElec_Theta_Col = 152 * fPi /180; -// fScatElec_Energy_Col = 5330; - - -/*--------------------------------------------------*/ -/// 7 GeV -// fScatElec_Theta_Col = 150 * fPi /180; -// fScatElec_Energy_Col = 5350; - -/*--------------------------------------------------*/ -/// 8 GeV -// fScatElec_Theta_Col = 148 * fPi /180; -// fScatElec_Energy_Col = 5403; - - fScatElec_Theta_Col = 148 * fPi /180; - fScatElec_Energy_Col = 5360; - - - - -/*--------------------------------------------------*/ -/// 9 GeV -// fScatElec_Theta_Col = 146 * fPi /180; -// fScatElec_Energy_Col = 5458; - -/*--------------------------------------------------*/ -/// 10.5 GeV -// fScatElec_Theta_Col = 144 * fPi /180; -// fScatElec_Energy_Col = 5518; - -/*--------------------------------------------------*/ -// Q2=10.5 GeV, S=25 -// fScatElec_Theta_Col = 144 * fPi /180; -// fScatElec_Energy_Col = 5477; - - -///*--------------------------------------------------*/ -// For special testing only -// fScatElec_Phi_Col = fPi; -// fScatElec_Phi_Col = 0.0; - fScatElec_Phi_Col = fProton_Phi_Col; - -// cout << "Initial and final angle: " << fScatElec_Theta_I*180/fPi << " " << fScatElec_Theta_F*180/fPi << " " << fScatElec_Theta_Col*180/fPi << " " << fScatElec_Energy_Col << " " << fElectron_Energy_Col << " " << fScatElec_E_Lo * fElectron_Energy_Col << " " << fScatElec_E_Hi * fElectron_Energy_Col << endl; -// -// -// cout << " electron::: " << fScatElec_Phi_Col*180/fPi << endl; - - - // ---------------------------------------------------- - // Produced Particle X in Collider frame - // ---------------------------------------------------- - - /// The generic produced particle in the exclusive reaction is labelled as X - // fX_Theta_Col = acos( rRand->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); - - //fX_Theta_Col = acos( rRand->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); - // fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); - - - //fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); - //fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); - - /// ---------------------------------------------------- - /// ---------------------------------------------------- - /// Random number generation - - // fX_Phi_Col = fRandom->Uniform( fProton_Phi_Col - fPi/6, fProton_Phi_Col + fPi/6); - // fX_Theta_Col = fRandom->Uniform( 0.01, 0.04); - -// fX_Phi_Col = fPi; -// fX_Phi_Col = 0; - - ///*--------------------------------------------------*/ - // For special testing only - - //fX_Theta_Col = 0.01; // 0.5729 degree - //fX_Theta_Col = 0.02; // 0.5729 degree - //fX_Theta_Col = 0.0; // 0.5729 degree - //fX_Theta_Col = 0.025; // Proton incidence angle - - fX_Theta_Col = 0.0; // Proton incidence angle -// fX_Theta_Col = 0.025; // Proton incidence angle -// fX_Theta_Col = 0.05; // Proton incidence angle - -// fX_Phi_Col = 0.0; -// fX_Phi_Col = fPi; - fX_Phi_Col = fProton_Phi_Col; - - /*--------------------------------------------------*/ - - -// cout << "Angle check: " << fX_Theta_Col*180/fPi << " " << fX_Theta_I*180/fPi << " "<< fX_Theta_F*180/fPi << endl; -// -// -// -// cout << "proton phi " << r_lproton.Vect().Theta() << " " << r_lproton.Vect().Phi() << endl; -// -// cout << "10m radians: " << 0.01*180/fPi << endl; - -// exit(0); + // ---------------------------------------------------- + // Produced Particle X in Collider frame + // ---------------------------------------------------- + + /// The generic produced particle in the exclusive reaction is labelled as X + fX_Theta_Col = acos( fRandom->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); + fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); + // fX_Theta_Col = fRandom->Uniform( 0.0 , 0.9 ); + // fX_Phi_Col = fRandom->Uniform( -0.0000001 + fPi , 0.0000001 + fPi ); // --------------------------------------------------------------------- // Specify the energy and solid angle of scatterd electron in Collider (lab) frame // --------------------------------------------------------------------- - fScatElec_Mom_Col = sqrt( pow( fScatElec_Energy_Col,2) - pow( fElectron_Mass , 2) ); - fScatElec_MomZ_Col = ( fScatElec_Mom_Col * cos(fScatElec_Theta_Col) ); - fScatElec_MomX_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * cos(fScatElec_Phi_Col) ); - fScatElec_MomY_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * sin(fScatElec_Phi_Col) ); + fScatElec_Mom_Col = sqrt( pow( fScatElec_Energy_Col,2) - pow( fElectron_Mass , 2) ); + fScatElec_MomZ_Col = ( fScatElec_Mom_Col * cos(fScatElec_Theta_Col) ); + fScatElec_MomX_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * cos(fScatElec_Phi_Col) ); + fScatElec_MomY_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * sin(fScatElec_Phi_Col) ); - r_lscatelec.SetPxPyPzE( fScatElec_MomX_Col, fScatElec_MomY_Col, fScatElec_MomZ_Col, fScatElec_Energy_Col); + r_lscatelec.SetPxPyPzE( fScatElec_MomX_Col, fScatElec_MomY_Col, fScatElec_MomZ_Col, fScatElec_Energy_Col); - r_lscatelecg = r_lscatelec * fm; - - // ---------------------------------------------------- - // Photon in collider (lab) frame and Qsq - // ---------------------------------------------------- + r_lscatelecg = r_lscatelec * fm; - r_lphoton = r_lelectron - r_lscatelec; - r_lphotong = r_lelectrong - r_lscatelecg; + // ---------------------------------------------------- + // Photon in collider (lab) frame and Qsq + // ---------------------------------------------------- - fQsq_GeV = -1.* r_lphotong.Mag2(); + r_lphoton = r_lelectron - r_lscatelec; + r_lphotong = r_lelectrong - r_lscatelecg; -// cout << "e: " << r_lelectron.Px() << " " << r_lelectron.Py() << " " << r_lelectron.Pz() << " " << r_lelectron.E() << endl; -// cout << "Scattered e: " << r_lscatelec.Px() << " " << r_lscatelec.Py() << " " << r_lscatelec.Pz() << " " << r_lscatelec.E() << endl; -// -// cout << "Q2 check: " << fQsq_GeV << endl; -// -// exit(0); + fQsq_GeV = -1.* r_lphotong.Mag2(); - -// if ( fQsq_GeV < 5.0 ) { -// qsq_ev++; -// return; -// } + if ( fQsq_GeV < 5.0 ) { + qsq_ev++; + return; + } // ---------------------------------------------------- // W square, Invariant Mass (P_g + P_p)^2 @@ -270,229 +141,192 @@ void Pi0_Production::Processing_Event() { fW_GeV = lwg.Mag(); fWSq_GeV = lwg.Mag2(); -// cout << endl << endl; -// cout << "W: " << fW_GeV << " s: " << fW_GeV*fW_GeV << " " << "Q2: " << fQsq_GeV << endl; -// cout << endl << endl; -// exit(0); - - - if ( fWSq_GeV < 0 ) { w_neg_ev++; return; } - - if (fW_GeV < 0 || fW_GeV > 40) { - cout << "W out of range of interests" << endl; - return; - } - + // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum + // --------------------------------------------------------- + // Pion momentum in collider frame, analytic solution starts + // --------------------------------------------------------- + if(!Solve()){ + return; + } + // --------------------------------------------------------- + // Pion momentum in collider frame, analytic solution starts + // --------------------------------------------------------- - - - - // --------------------------------------------------------- - // Pion momentum in collider frame, analytic solution starts - // --------------------------------------------------------- - - double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); - double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); - double fupz = cos( fX_Theta_Col ); + double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); + double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); + double fupz = cos( fX_Theta_Col ); - double fuqx = sin( r_lphoton.Theta() ) * cos( r_lphoton.Phi() ); - double fuqy = sin( r_lphoton.Theta() ) * sin( r_lphoton.Phi() ); - double fuqz = cos( r_lphoton.Theta() ); + double fuqx = sin( r_lphoton.Theta() ) * cos( r_lphoton.Phi() ); + double fuqy = sin( r_lphoton.Theta() ) * sin( r_lphoton.Phi() ); + double fuqz = cos( r_lphoton.Theta() ); - double fa = -(r_lphoton.Vect()).Mag() * ( fupx * fuqx + fupy * fuqy + fupz * fuqz ); - double fb = pow ( (r_lphoton.Vect()).Mag() , 2 ); - double fc = r_lphoton.E() + fProton_Mass; - - fa = ( fa - std::abs( (r_lproton.Vect()).Mag() ) * ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fupx ) + - ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fupy ) + - ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fupz ) ) ); - - double factor = ( pow( (r_lproton.Vect()).Mag() , 2 ) + 2.0 * (r_lphoton.Vect()).Mag() * (r_lproton.Vect()).Mag() * - ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fuqx ) + - ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fuqy ) + - ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fuqz ) ) ); - - fb = fb + factor; - fc = r_lphoton.E() + r_lproton.E(); - -// double ft = fc * fc - fb + fPion_Mass * fPion_Mass - fProton_Mass * fProton_Mass; -// t_min = -qsq + mass**2 -2.*(e_pi0CM*e_photCM -sqrt( (e_pi0CM**2-mass**2)*(e_photCM**2+qsq) )) -// t_max = -qsq + mass**2 -2.*(e_pi0CM*e_photCM +sqrt((e_pi0CM**2-mass**2)*(e_photCM**2+qsq))) -// u_min = -qsq + m_psq -2.*(e_pCM*e_photCM -sqrt( (e_pCM**2-m_psq)*(e_photCM**2+qsq) )) - - - double e_X_rf = lX_rf.E(); - double e_photon_rf = lphoton_rf.E(); - -// double e_photon_rf = lproton_rf.E(); - -// fu_min = -fQsq + pow(f_Scat_Nucleon_Mass, 2) -2.*(e_pi0CM*e_photCM -sqrt( (e_pi0CM**2-mass**2)*(e_photCM**2+qsq) )) - - double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; - - double fu = lproton_rf.Dot(lproton_rf) + lX_rf.Dot(lX_rf) - lproton_rf.Dot(lX_rf); - - - -// double fttt = lproton_rfg * lproton_rfg - 2* lproton_rfg * l_scat_nucleon_rf_g + l_scat_nucleon_rf_g * l_scat_nucleon_rf_g; -// double fuuu = lproton_rfg * lproton_rfg - 2* lproton_rfg * lX_rfg + lX_rfg * lX_rfg; - - - - - - ft_min = -fQsq_GeV + pow(fX_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(fX_Mass, 2)) * (pow(e_photon_rf,2)+fQsq) )); - - fu_min = -fQsq_GeV + pow(f_Scat_Nucleon_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Scat_Nucleon_Mass , 2))*(pow(e_photon_rf,2)+fQsq) )); - - -// cout << "asd: " << ft_min << " " << fu_min << f_Scat_Nucleon_Mass << " " << fX_Mass << " " << fProton_Mass << " "<< fQsq << " " << e_photon_rf << " photon photon: " << lphoton_rf.E() << " " << fm << " " << r_lphoton.E() << " " << beta_col_rf.Mag() << endl; -// -// -// cout << r_lprotong.Px() << " " << r_lprotong.Py() << " " << r_lprotong.Pz() << " " << r_lprotong.E() << endl; -// cout << lproton_rfg.Px() << " " << lproton_rfg.Py() << " " << lproton_rfg.Pz() << " " << lproton_rfg.E() << endl; -// cout << beta_col_rf.Px() << " " << beta_col_rf.Py() << " " << beta_col_rf.Pz() << endl; - -// exit(0); - - - double fQA = 4.0 * ( fa * fa - fc * fc ); - double fQB = 4.0 * fc * ft; - -// double fQC = -4.0 * fa * fa * fPion_Mass * fPion_Mass - ft * ft; - double fQC = -4.0 * fa * fa * fX_Mass * fX_Mass - ft * ft; + double fa = -(r_lphoton.Vect()).Mag() * ( fupx * fuqx + fupy * fuqy + fupz * fuqz ); + double fb = pow ( (r_lphoton.Vect()).Mag() , 2 ); + double fc = r_lphoton.E() + fProton_Mass; + + fa = ( fa - std::abs( (r_lproton.Vect()).Mag() ) * ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fupx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fupy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fupz ) ) ); + + double factor = ( pow( (r_lproton.Vect()).Mag() , 2 ) + 2.0 * (r_lphoton.Vect()).Mag() * (r_lproton.Vect()).Mag() * + ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fuqx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fuqy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fuqz ) ) ); + + fb = fb + factor; + fc = r_lphoton.E() + r_lproton.E(); + + double e_X_rf = lX_rf.E(); + double e_photon_rf = lphoton_rf.E(); + + + double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; + + double fu = lproton_rf.Dot(lproton_rf) + lX_rf.Dot(lX_rf) - lproton_rf.Dot(lX_rf); + + ft_min = -fQsq_GeV + pow(fX_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(fX_Mass, 2)) * (pow(e_photon_rf,2)+fQsq) )); + + fu_min = -fQsq_GeV + pow(f_Scat_Nucleon_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Scat_Nucleon_Mass , 2))*(pow(e_photon_rf,2)+fQsq) )); + + double fQA = 4.0 * ( fa * fa - fc * fc ); + double fQB = 4.0 * fc * ft; + + double fQC = -4.0 * fa * fa * fX_Mass * fX_Mass - ft * ft; - fradical = fQB * fQB - 4.0 * fQA * fQC; + fradical = fQB * fQB - 4.0 * fQA * fQC; - fepi1 = ( -fQB - sqrt( fradical ) ) / ( 2.0 * fQA ); - fepi2 = ( -fQB + sqrt( fradical ) ) / ( 2.0 * fQA ); + fepi1 = ( -fQB - sqrt( fradical ) ) / ( 2.0 * fQA ); + fepi2 = ( -fQB + sqrt( fradical ) ) / ( 2.0 * fQA ); - // --------------------------------------------------------- - // Particle X momentum in collider frame, analytic solution ends - // --------------------------------------------------------- - - r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), - fepi1 ); - - r_lX_g = r_lX * fm; - - // ---------------------------------------------------- - // Scattered nucleon collider (lab) frame - - r_l_scat_nucleon.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), - sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + - pow( f_Scat_Nucleon_Mass ,2 ) ) ); - - r_l_scat_nucleon_g = r_l_scat_nucleon * fm; - -// cout << "Proton Momentum: " << r_l_scat_nucleon_g.Vect().Mag() << " " << r_l_scat_nucleon_g.Vect().Theta() << " Angle: "<< r_l_scat_nucleon_g.Vect().Theta() *180/fPi << endl; -// cout << "X Momentum: " << r_lX_g.Vect().Mag() << " Angle: " << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Theta() *180/fPi<< endl ; - -// cout << "Proton-X Angle: " << r_lX_g.Vect().Angle(r_l_scat_nucleon_g.Vect())*180/fPi << endl ; - - // ---------------------------------------------------------------------------------------------- - // ---------------------------------------------------------------------------------------------- - // Calculate w = (proton + photon)^2 - // ---------------------------------------------------------------------------------------------- - // ---------------------------------------------------------------------------------------------- - -// // cout << fW_GeV << endl; -// if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { -// w_ev++; -// return; -// } - - r_lw = r_lproton + r_lphoton; - fW = r_lw.Mag(); - - // ---------------------------------------------------------------------------------------------- - // ---------------------------------------------------------------------------------------------- - // Calculate w prime w' = (proton + photon - pion)^2 - // ---------------------------------------------------------------------------------------------- - // ---------------------------------------------------------------------------------------------- - - lwp = r_lprotong + r_lphotong - r_lX_g; - fW_Prime_GeV = lwp.Mag(); - - fsini = r_lelectron + r_lproton; - fsfin = r_lscatelec + r_lX + r_l_scat_nucleon; - - fsinig = fsini * fm; - fsfing = fsfin * fm; + ///--------------------------------------------------------- + /// Particle X momentum in collider frame, analytic solution + /// And obtain recoiled proton in collider (lab) frame + ///--------------------------------------------------------- + + //r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), + // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), + // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), + // fepi1 ); + // + // r_l_scat_nucleon.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), + // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), + // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), + // sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + + // pow( f_Scat_Nucleon_Mass ,2 ) ) ); + + ///-------------------------------------------------- + /// Output with the Solve Function + /// Setting the solution values to X and recoiled nucleon + + r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); + r_l_scat_nucleon.SetPxPyPzE(r_l_scat_nucleon_solved->Px(), r_l_scat_nucleon_solved->Py(), r_l_scat_nucleon_solved->Pz(), r_l_scat_nucleon_solved->E()); + + ///-------------------------------------------------- + + r_lX_g = r_lX * fm; + r_l_scat_nucleon_g = r_l_scat_nucleon * fm; + + // ---------------------------------------------------------------------------------------------- + // Calculate w = (proton + photon)^2 + // ---------------------------------------------------------------------------------------------- + + // cout << fW_GeV << endl; + if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { + w_ev++; + return; + } + + r_lw = r_lproton + r_lphoton; + fW = r_lw.Mag(); + + // ---------------------------------------------------------------------------------------------- + // Calculate w prime w' = (proton + photon - pion)^2 + // ---------------------------------------------------------------------------------------------- + + lwp = r_lprotong + r_lphotong - r_lX_g; + fW_Prime_GeV = lwp.Mag(); + + fsini = r_lelectron + r_lproton; + fsfin = r_lscatelec + r_lX + r_l_scat_nucleon; + + fsinig = fsini * fm; + fsfing = fsfin * fm; - fMandSConserve = std::abs( fsinig.Mag() - fsfing.Mag() ); - - kSConserve = false; - if( std::abs( fsinig.Mag() - fsfing.Mag() ) < fDiff ) { - kSConserve = true; - } + fMandSConserve = std::abs( fsinig.Mag() - fsfing.Mag() ); + + //*--------------------------------------------------*/ + // SJDK 15/06/21 - Added integer counters for conservation law check and for NaN check + if (r_lX.E() != r_lX.E()){ // SJDK 15/06/21 - If the energy of the produced meson is not a number, return and add to counter + fNaN++; + return; + } + + kSConserve = false; + if( std::abs( fsinig.Mag() - fsfing.Mag() ) < fDiff ) { + kSConserve = true; + } - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_nucleon) != 1 ) - return; - - - //////////////////////////////////////////////////////////////////////////////////////////// - // Start // - // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // - //////////////////////////////////////////////////////////////////////////////////////////// - - lproton_rf = r_lproton; - lproton_rf.Boost(-beta_col_rf); - lproton_rfg = lproton_rf * fm; - - lelectron_rf = r_lelectron; - lelectron_rf.Boost(-beta_col_rf); - lelectron_rfg = lelectron_rf * fm; + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_nucleon) != 1 ){ + fConserve++; + return; + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // Start // + // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // + //////////////////////////////////////////////////////////////////////////////////////////// - lscatelec_rf = r_lscatelec; - lscatelec_rf.Boost(-beta_col_rf); - lscatelec_rfg = lscatelec_rf * fm; - - lphoton_rf = r_lphoton; - lphoton_rf.Boost(-beta_col_rf); - lphoton_rfg = lphoton_rf * fm; - - lX_rf = r_lX; - lX_rf.Boost(-beta_col_rf); - lX_rfg = lX_rf * fm; - - l_scat_nucleon_rf = r_l_scat_nucleon; - l_scat_nucleon_rf.Boost(-beta_col_rf); - l_scat_nucleon_rf_g = l_scat_nucleon_rf * fm; - - - - ///*--------------------------------------------------*/ - /// Doing pi0 decay - - if (if_pi0_decay) { - Pi0_decay(r_lX); - } - - - //////////////////////////////////////////////////////////////////////////////////////////// - // End // - // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // - //////////////////////////////////////////////////////////////////////////////////////////// - -/*--------------------------------------------------*/ -/*--------------------------------------------------*/ -/*--------------------------------------------------*/ -/*--------------------------------------------------*/ -/// Polar output - - if (fQsq_GeV > 5 && fQsq_GeV < 12 && fWSq_GeV > 8 && fWSq_GeV < 12) { + lproton_rf = r_lproton; + lproton_rf.Boost(-beta_col_rf); + lproton_rfg = lproton_rf * fm; + + lelectron_rf = r_lelectron; + lelectron_rf.Boost(-beta_col_rf); + lelectron_rfg = lelectron_rf * fm; + + lscatelec_rf = r_lscatelec; + lscatelec_rf.Boost(-beta_col_rf); + lscatelec_rfg = lscatelec_rf * fm; + + lphoton_rf = r_lphoton; + lphoton_rf.Boost(-beta_col_rf); + lphoton_rfg = lphoton_rf * fm; + + lX_rf = r_lX; + lX_rf.Boost(-beta_col_rf); + lX_rfg = lX_rf * fm; + + l_scat_nucleon_rf = r_l_scat_nucleon; + l_scat_nucleon_rf.Boost(-beta_col_rf); + l_scat_nucleon_rf_g = l_scat_nucleon_rf * fm; + + ///*--------------------------------------------------*/ + /// Doing pi0 decay + + if (if_pi0_decay) { + Pi0_decay(r_lX); + } + + + //////////////////////////////////////////////////////////////////////////////////////////// + // End // + // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // + //////////////////////////////////////////////////////////////////////////////////////////// + + /*--------------------------------------------------*/ + /*--------------------------------------------------*/ + /*--------------------------------------------------*/ + /*--------------------------------------------------*/ + /// Polar output + + if (fQsq_GeV > 5 && fQsq_GeV < 12 && fWSq_GeV > 8 && fWSq_GeV < 12) { // cout << fQsq_GeV << " " << fWSq_GeV << " "; // @@ -501,16 +335,16 @@ void Pi0_Production::Processing_Event() { // << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() // << endl; - polar_out << fQsq_GeV << " " << fWSq_GeV << " "; + polar_out << fQsq_GeV << " " << fWSq_GeV << " "; + + polar_out << r_lscatelecg.Vect().Theta() << " " << r_lscatelecg.Vect().Mag() << " " + << r_l_scat_nucleon_g.Vect().Theta() << " " << r_l_scat_nucleon_g.Vect().Mag() << " " + << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() << " " + << l_photon_1.Vect().Theta() << " " << l_photon_1.Vect().Mag() << " " + << l_photon_2.Vect().Theta() << " " << l_photon_2.Vect().Mag() + << endl; - polar_out << r_lscatelecg.Vect().Theta() << " " << r_lscatelecg.Vect().Mag() << " " - << r_l_scat_nucleon_g.Vect().Theta() << " " << r_l_scat_nucleon_g.Vect().Mag() << " " - << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() << " " - << l_photon_1.Vect().Theta() << " " << l_photon_1.Vect().Mag() << " " - << l_photon_2.Vect().Theta() << " " << l_photon_2.Vect().Mag() - << endl; - - } + } // exit(0); // return; @@ -521,268 +355,223 @@ void Pi0_Production::Processing_Event() { /*--------------------------------------------------*/ /*--------------------------------------------------*/ + e_X_rf = lX_rf.E(); + e_photon_rf = lphoton_rf.E(); + double e_p_rf = lproton_rf.E(); + double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; + double e_pCM = (fWSq_GeV + pow(fProton_Mass/1000, 2) - pow(f_Scat_Nucleon_Mass/1000, 2))/fW_GeV/2.; + ft_min = -fQsq_GeV + pow(fX_Mass/1000, 2) -2.*(e_X_rf/1000*e_photon_rf/1000 -sqrt( (pow(e_X_rf/1000, 2) - pow(fX_Mass/1000, 2)) * (pow(e_photon_rf/1000,2)+fQsq_GeV) )); + fu_min = -fQsq_GeV + pow(fProton_Mass/1000, 2) -2.*(e_pCM*e_photCM -sqrt( (pow(e_pCM/1000, 2) - pow(fProton_Mass/1000 , 2))*(pow(e_photCM/1000,2)+fQsq_GeV) )); + // ---------------------------------------------------------------------------------------------- + // Cut on centre of mass angle of meson X + // ---------------------------------------------------------------------------------------------- + // Theta_cm = r_lX.Vect().Angle(r_lphoton.Vect()); + // if (Theta_cm < 90*TMath::Pi()/180) { + // return; + // } + // ----------------------------------------------------------------------------------------- + // Calculate -t and -u + // ----------------------------------------------------------------------------------------- + fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); + fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; + fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_Nucleon_Mass , 2) ) / ( 2.0 * fW); + fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); + fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; + fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; + + // this equation is valid for parallel kinematics only! + fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_lX.Vect()).Mag()),2) - pow((r_lphoton.E() - r_lX.E()),2)); + fT_Para_GeV = fT_Para/1000000.0; + lt = r_lphoton - r_lX; + ltg = lt * fm; + fT = -1.*lt.Mag2(); + fT_GeV = -1.*ltg.Mag2(); + tc = -1.*lt.Mag2(); + tc_GeV = -1.*ltg.Mag2(); + lu = r_lproton - r_lX; + lug = lu * fm; + uc = -1.*lu.Mag2(); + uc_GeV = -1.*lug.Mag2(); + // ---------------------------------------------------------------------------------------------- + // Cut on u-channel + // ---------------------------------------------------------------------------------------------- + if ( abs(uc_GeV) > abs(tc_GeV) ) { + return; + } + // if ( gKinematics_type == 1 && tc_GeV > 0.5 ) { + // t_ev++; + // return; + // } + // if ( gKinematics_type == 2 && tc_GeV > 1.3 ) { + // t_ev++; + // return; + // } + // if ( gKinematics_type == 1 && uc_GeV > 0.5 ) { + // t_ev++; + // return; + // } + // if ( gKinematics_type == 2 && uc_GeV > 1.3 ) { + // t_ev++; + // return; + // } + fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); + fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); + fz = r_lX.E()/r_lphoton.E(); + // ------------------------------------------------------------------------------------------------------- + // Calculation of Phi ( azimuthal angle of pion momentum w.r.t lepton plane in target's rest frame) + // Calculation of PhiS ( azimuthal angle of target polarization w.r.t lepton plane in target's rest frame) + // ------------------------------------------------------------------------------------------------------- + v3Photon.SetX( lphoton_rfg.X() ); + v3Photon.SetY( lphoton_rfg.Y() ); + v3Photon.SetZ( lphoton_rfg.Z() ); - e_X_rf = lX_rf.E(); + v3Electron.SetX( lelectron_rfg.X() ); + v3Electron.SetY( lelectron_rfg.Y() ); + v3Electron.SetZ( lelectron_rfg.Z() ); - double e_p_rf = lproton_rf.E(); + v3X.SetX( lX_rfg.X() ) ; + v3X.SetY( lX_rfg.Y() ) ; + v3X.SetZ( lX_rfg.Z() ); - e_photon_rf = lphoton_rf.E(); + v3S.SetX( -1 ); + v3S.SetY( 0 ); + v3S.SetZ( 0 ); - // e_photCM = (Wsq - qsq - m_psq)/invm/2. - // e_omCM = (Wsq + mass**2 - m_psq)/invm/2. - // e_pCM = (Wsq + m_psq - mass**2)/invm/2. + v3PhotonUnit = v3Photon.Unit(); + v3QxL = v3Photon.Cross(v3Electron); + v3QxP = v3Photon.Cross(v3X); + v3QxS = v3Photon.Cross(v3S); + v3LxP = v3Electron.Cross(v3X); + v3LxS = v3Electron.Cross(v3S); + v3PxL = v3X.Cross(v3Electron); + v3QUnitxL = v3PhotonUnit.Cross(v3Electron); + v3QUnitxP = v3PhotonUnit.Cross(v3X); + v3QUnitxS = v3PhotonUnit.Cross(v3S); + /*--------------------------------------------------*/ + // Get the Phi scattering angle with respect to the electron scattering plane + fPhi = Get_Phi_X_LeptonPlane_RF (); - + /*--------------------------------------------------*/ + // Get the Phi scattering angle between the target polarization plane and the electron scattering plane + fPhiS = Get_Phi_TargPol_LeptonPlane_RF(); -// double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; + fTheta_X_Photon_RF = fRAD2DEG * acos( ( v3Photon.Dot( v3X ) ) / ( v3Photon.Mag() * v3X.Mag() ) ); + if ( fTheta_X_Photon_RF < 0 ) { fTheta_X_Photon_RF = 180.0 + fTheta_X_Photon_RF; } - double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; - double e_pCM = (fWSq_GeV + pow(fProton_Mass/1000, 2) - pow(f_Scat_Nucleon_Mass/1000, 2))/fW_GeV/2.; + // ----------------------------------------------------------------------------------- + // If we have fermi momentum then epsilon should be in rest frame + // The theta angle of scattered angle used in expression of epsilon is the angle + // with respect to direction of incoming electron in the rest frame of target nucleon + // epsilon=1./(1.+ 2.*(pgam_restg**2)/q2g * *(tand(thscat_rest/2.))**2) + // ----------------------------------------------------------------------------------- -// cout << "*********: " << e_photCM << " " << e_pCM << endl; -// cout << "*********: " << e_photon_rf << " "<< e_p_rf << endl; + double fTheta_EEp = (lelectron_rf.Vect()).Angle(lscatelec_rf.Vect()); + fEpsilon = 1.0 / ( 1.0 + 2.0 * ( pow( (lphoton_rfg.Vect()).Mag(),2)/fQsq_GeV ) * pow( tan( fTheta_EEp / 2 ) , 2 ) ); + /// meson produced angle with respect to the Q-vector - ft_min = -fQsq_GeV + pow(fX_Mass/1000, 2) -2.*(e_X_rf/1000*e_photon_rf/1000 -sqrt( (pow(e_X_rf/1000, 2) - pow(fX_Mass/1000, 2)) * (pow(e_photon_rf/1000,2)+fQsq_GeV) )); + theta_X_rf = (lX_rf.Vect()).Angle(lphoton_rf.Vect()); + // ---------------------------------------------------- + // Virtual Photon flux factor in units of 1/(GeV*Sr) + // ---------------------------------------------------- -// u_min = -qsq + m_psq -2.*(e_pCM*e_photCM -sqrt( (e_pCM**2-m_psq)*(e_photCM**2+qsq) )) + fFlux_Factor_Col = (fAlpha/(2.0*pow(fPi,2))) * (r_lscatelecg.E() / r_lelectrong.E()) * + ( pow(fW_GeV,2) - pow(fProton_Mass_GeV,2) ) / (2.0*fProton_Mass_GeV*fQsq_GeV*(1.0 - fEpsilon)); -// fu_min = -fQsq_GeV + pow(fProton_Mass/1000, 2) -2.*(e_p_rf/1000*e_photon_rf/1000 -sqrt( fabs(pow(e_p_rf/1000, 2) - pow(fProton_Mass/1000 , 2))*(pow(e_photon_rf/1000,2)+fQsq_GeV) )); + fFlux_Factor_RF = ( fAlpha / ( 2.0 * pow( fPi , 2 ) ) ) * ( lscatelec_rfg.E() / lelectron_rfg.E() ) * + ( pow( fW_GeV , 2 ) - pow( fProton_Mass_GeV , 2 ) ) / + ( 2.0 * fProton_Mass_GeV * fQsq_GeV * ( 1.0 - fEpsilon ) ); - fu_min = -fQsq_GeV + pow(fProton_Mass/1000, 2) -2.*(e_pCM*e_photCM -sqrt( (pow(e_pCM/1000, 2) - pow(fProton_Mass/1000 , 2))*(pow(e_photCM/1000,2)+fQsq_GeV) )); + // ---------------------------------------------------- + // Jacobian dt/dcos(theta*)dphi in units of GeV2/sr + // ---------------------------------------------------- - -// cout << fQsq_GeV << " " << "AAAA " << (pow(e_p_rf/1000, 2) - pow(f_Scat_Nucleon_Mass/1000 , 2))*(pow(e_photon_rf/1000,2)+fQsq_GeV) << " :::: " << (pow(e_p_rf/1000, 2) - pow(fProton_Mass/1000 , 2)) << " " << (pow(e_photon_rf/1000,2)+fQsq_GeV) << " " << pow(e_p_rf/1000, 2) << " " << pow(fProton_Mass/1000 , 2) << " " << e_p_rf/1000*e_photon_rf/1000 << endl; -// -// cout << endl; -// cout << endl; -// cout << endl; -// -// -// cout << "asd: " << ft_min << " " << fu_min << " " << f_Scat_Nucleon_Mass << " " << fX_Mass << " " << fProton_Mass << " "<< fQsq << " " << e_photon_rf << " photon photon: " << lphoton_rf.E() << " " << fm << " " << r_lphoton.E() << " " << beta_col_rf.Mag() << endl; -// -// -// cout << "Photon energy: " << e_X_rf << " " << e_photon_rf << endl; -// -// cout << r_lprotong.Px() << " " << r_lprotong.Py() << " " << r_lprotong.Pz() << " " << r_lprotong.E() << endl; -// cout << lproton_rfg.Px() << " " << lproton_rfg.Py() << " " << lproton_rfg.Pz() << " " << lproton_rfg.E() << endl; -// cout << "aaa " << beta_col_rf.Px() << " " << beta_col_rf.Py() << " " << beta_col_rf.Pz() << endl; -// -// exit(0); + fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); - // ----------------------------------------------------------------------------------------- - // ----------------------------------------------------------------------------------------- - // Calculate -t - // ----------------------------------------------------------------------------------------- - // ----------------------------------------------------------------------------------------- - - fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); - fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; - fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_Nucleon_Mass , 2) ) / ( 2.0 * fW); - fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); - fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; - fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; - - // this equation is valid for parallel kinematics only! - fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_lX.Vect()).Mag()),2) - pow((r_lphoton.E() - r_lX.E()),2)); - fT_Para_GeV = fT_Para/1000000.0; - - lt = r_lphoton - r_lX; - ltg = lt * fm; - - fT = -1.*lt.Mag2(); - fT_GeV = -1.*ltg.Mag2(); - - -// cout << "ttt: " << fT_GeV << endl; - - - - //if ( gKinematics_type == 1 && fT_GeV > 0.5 ) { - // t_ev++; - // return; - //} - // - //if ( gKinematics_type == 2 && fT_GeV > 1.3 ) { - // t_ev++; - // return; - //} - - fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); - fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); - fz = r_lX.E()/r_lphoton.E(); - - // ------------------------------------------------------------------------------------------------------- - // Calculation of Phi ( azimuthal angle of pion momentum w.r.t lepton plane in target's rest frame) - // Calculation of PhiS ( azimuthal angle of target polarization w.r.t lepton plane in target's rest frame) - // ------------------------------------------------------------------------------------------------------- - - v3Photon.SetX( lphoton_rfg.X() ); - v3Photon.SetY( lphoton_rfg.Y() ); - v3Photon.SetZ( lphoton_rfg.Z() ); - - v3Electron.SetX( lelectron_rfg.X() ); - v3Electron.SetY( lelectron_rfg.Y() ); - v3Electron.SetZ( lelectron_rfg.Z() ); - - v3X.SetX( lX_rfg.X() ) ; - v3X.SetY( lX_rfg.Y() ) ; - v3X.SetZ( lX_rfg.Z() ); - - v3S.SetX( -1 ); - v3S.SetY( 0 ); - v3S.SetZ( 0 ); - - v3PhotonUnit = v3Photon.Unit(); - v3QxL = v3Photon.Cross(v3Electron); - v3QxP = v3Photon.Cross(v3X); - v3QxS = v3Photon.Cross(v3S); - v3LxP = v3Electron.Cross(v3X); - v3LxS = v3Electron.Cross(v3S); - v3PxL = v3X.Cross(v3Electron); - v3QUnitxL = v3PhotonUnit.Cross(v3Electron); - v3QUnitxP = v3PhotonUnit.Cross(v3X); - v3QUnitxS = v3PhotonUnit.Cross(v3S); - - /*--------------------------------------------------*/ - // Get the Phi scattering angle with respect to the electron scattering plane - fPhi = Get_Phi_X_LeptonPlane_RF (); - - /*--------------------------------------------------*/ - // Get the Phi scattering angle between the target polarization plane and the electron scattering plane - fPhiS = Get_Phi_TargPol_LeptonPlane_RF(); - - fTheta_X_Photon_RF = fRAD2DEG * acos( ( v3Photon.Dot( v3X ) ) / ( v3Photon.Mag() * v3X.Mag() ) ); - if ( fTheta_X_Photon_RF < 0 ) { fTheta_X_Photon_RF = 180.0 + fTheta_X_Photon_RF; } - - // ----------------------------------------------------------------------------------- - // If we have fermi momentum then epsilon should be in rest frame - // The theta angle of scattered angle used in expression of epsilon is the angle - // with respect to direction of incoming electron in the rest frame of target nucleon - // epsilon=1./(1.+ 2.*(pgam_restg**2)/q2g * *(tand(thscat_rest/2.))**2) - // ----------------------------------------------------------------------------------- - - double fTheta_EEp = (lelectron_rf.Vect()).Angle(lscatelec_rf.Vect()); + fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; - fEpsilon = 1.0 / ( 1.0 + 2.0 * ( pow( (lphoton_rfg.Vect()).Mag(),2)/fQsq_GeV ) * pow( tan( fTheta_EEp / 2 ) , 2 ) ); + double fttt = r_lprotong * r_lprotong - 2 * r_lprotong * r_l_scat_nucleon_g + r_l_scat_nucleon_g * r_l_scat_nucleon_g; + double fuuu = r_lprotong * r_lprotong - 2 * r_lprotong * r_lX_g + r_lX_g * r_lX_g; - /// meson produced angle with respect to the Q-vector + // ---------------------------------------------------- + // Jacobian dOmega* / dOmega dimensionless + // ---------------------------------------------------- - theta_X_rf = (lX_rf.Vect()).Angle(lphoton_rf.Vect()); - + fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / + ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - + ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); - // ---------------------------------------------------- - // Virtual Photon flux factor in units of 1/(GeV*Sr) - // ---------------------------------------------------- - fFlux_Factor_Col = (fAlpha/(2.0*pow(fPi,2))) * (r_lscatelecg.E() / r_lelectrong.E()) * - ( pow(fW_GeV,2) - pow(fProton_Mass_GeV,2) ) / (2.0*fProton_Mass_GeV*fQsq_GeV*(1.0 - fEpsilon)); - - fFlux_Factor_RF = ( fAlpha / ( 2.0 * pow( fPi , 2 ) ) ) * ( lscatelec_rfg.E() / lelectron_rfg.E() ) * - ( pow( fW_GeV , 2 ) - pow( fProton_Mass_GeV , 2 ) ) / - ( 2.0 * fProton_Mass_GeV * fQsq_GeV * ( 1.0 - fEpsilon ) ); - - - // ---------------------------------------------------- - // Jacobian dt/dcos(theta*)dphi in units of GeV2/sr - // ---------------------------------------------------- - fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); - - fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; - -// cout << "LXXXX check: " << ( r_lproton + r_lelectron - r_lscatelec - r_lX).X() << " " << ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y() << " " << ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z() << " " << sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + pow( f_Scat_Nucleon_Mass ,2 ) ) << endl; + fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / + ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - + ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); + // ------------------------------------------------------------------------------------------ + // CKY sigma L and T starts + // ------------------------------------------------------------------------------------------ - double fttt = r_lprotong * r_lprotong - 2 * r_lprotong * r_l_scat_nucleon_g + r_l_scat_nucleon_g * r_l_scat_nucleon_g; - double fuuu = r_lprotong * r_lprotong - 2 * r_lprotong * r_lX_g + r_lX_g * r_lX_g; - -// cout << "check this: " << r_lprotong * r_lprotong << " " << r_l_scat_nucleon_g * r_l_scat_nucleon_g << " " << r_lX_g * r_lX_g << endl; -// -// cout << "t: " << ft << " " << fttt << " u: " << fu << " " << fuuu << endl; -// -// cout << "Angle aaa : " << r_lproton.Vect().Angle(r_lX.Vect()) << endl; -// -// -// exit(0); - - // ---------------------------------------------------- - // Jacobian dOmega* / dOmega dimensionless - // ---------------------------------------------------- - fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / - ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - - ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); - - fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / - ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - - ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); - - // ----------------------------------------------------------------------------------------------------------- - // CKY sigma L and T starts - // ----------------------------------------------------------------------------------------------------------- - // ------------------------------------------------------------------------------------------- - - r_fSig = Get_CrossSection(); - - // ----------------------------------------------------------------------------------------------------------- - // CKY sigma L and T ends - // ----------------------------------------------------------------------------------------------------------- - - fSigma_Col = r_fSig * fFlux_Factor_Col * fA * fJacobian_CM_Col; - - - if ( ( fSigma_Col <= 0 ) || std::isnan( fSigma_Col ) ) { - fNSigmaNeg ++; - return; - } - - // ----------------------------------------------------------------------------------------------------------- - // ----------------------------------------------------------------------------------------------------------- - // Lab cross section Phase Space Conversion Luminosity Total events tried - // Hz = ub / ( sr^2 * GeV ) * GeV * sr^2 * ( cm^2 / ub ) * ( # / ( cm^2 * sec ) ) / ( # ) - - fEventWeight = fSigma_Col * fPSF * fuBcm2 * fLumi / fNEvents; // in Hz + r_fSig = Get_CrossSection(); - - fNRecorded ++; - fLundRecorded++; - fRatio = fNRecorded / fNGenerated; - -// cout << if_pi0_decay << endl; + // ------------------------------------------------------------------------------------------ + // CKY sigma L and T ends + // ------------------------------------------------------------------------------------------ -// if (if_pi0_decay) { -// Pi0_Decay_Lund_Output(); -// } else { -// Pi0_Lund_Output(); -// } -// cout << "AAAAAAAAAAAAAA" << endl; + fSigma_Col = r_fSig * fFlux_Factor_Col * fA * fJacobian_CM_Col; - Pi0_Decay_Pythia6_Output(); + if ( ( fSigma_Col <= 0 ) || std::isnan( fSigma_Col ) ) { + fNSigmaNeg ++; + return; + } -// exit(0); + // ------------------------------------------------------------------------------------------ + // ------------------------------------------------------------------------------------------ + // Lab cross section Phase Space Conversion Luminosity Total events tried + // Hz = ub / ( sr^2 * GeV ) * GeV * sr^2 * ( cm^2 / ub ) * ( # / ( cm^2 * sec ) ) / ( # ) + + fEventWeight = fSigma_Col * fPSF * fuBcm2 * fLumi / fNEvents; // in Hz + + fNRecorded ++; + fLundRecorded++; + fRatio = fNRecorded / fNGenerated; + + if (gOutputType == "Pythia6"){ + Pi0_Decay_Pythia6_Output(); + } + else if (gOutputType == "LUND"){ + if (if_pi0_decay){ + Pi0_Decay_Lund_Output(); + } + else { + Pi0_Lund_Output(); + } + } + else if (gOutputType == "HEPMC3"){ + Pi0_HEPMC3_Output(); + } } @@ -790,11 +579,11 @@ void Pi0_Production::Processing_Event() { void Pi0_Production::Detail_Output() { - ppiDetails << "Total events tried " << setw(50) << fNGenerated << endl; - ppiDetails << "Total events recorded " << setw(50) << fNRecorded << endl; + ppiDetails << "Total events tried " << setw(50) << fNGenerated << endl; + ppiDetails << "Total events recorded " << setw(50) << fNRecorded << endl; - ppiDetails << "Seed used for the Random Number Generator " << setw(50) << fSeed << endl; - ppiDetails << "Number of lund events " << setw(50) << fLundRecorded << endl; + ppiDetails << "Seed used for the Random Number Generator " << setw(50) << fSeed << endl; + ppiDetails << "Number of lund events " << setw(50) << fLundRecorded << endl; } @@ -804,189 +593,106 @@ void Pi0_Production::Detail_Output() { void Pi0_Production::Pi0_Lund_Output() { - - ppiOut << "5" - << " \t " << fPhi // var 1 - << " \t " << fPhiS // var 2 - << " \t " << fx // var 3 - << " \t " << "1" - << " \t " << fQsq_GeV // var 4 - << " \t " << fT_GeV // var 5 - << " \t " << fW_GeV // var 6 - << " \t " << fEpsilon // var 7 - << " \t " << fEventWeight // var 8 - << endl; - - ///*--------------------------------------------------*/ - // Initial State - - ppiOut << setw(10) << "1" - << setw(10) << "-1" - << setw(10) << "0" - << setw(10) << "11" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lelectrong.X() - << setw(16) << r_lelectrong.Y() - << setw(16) << r_lelectrong.Z() - << setw(16) << r_lelectrong.E() - << setw(16) << fElectron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - ppiOut << setw(10) << "2" - << setw(10) << "1" - << setw(10) << "0" - << setw(10) << "2212" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lprotong.X() - << setw(16) << r_lprotong.Y() - << setw(16) << r_lprotong.Z() - << setw(16) << r_lprotong.E() - << setw(16) << fProton_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - - - ///*--------------------------------------------------*/ - // Final State - - // Produced Particle X - ppiOut << setw(10) << "3" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << PDGtype(produced_X) - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lX_g.X() - << setw(16) << r_lX_g.Y() - << setw(16) << r_lX_g.Z() - << setw(16) << r_lX_g.E() - << setw(16) << fX_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Scattered electron - ppiOut << setw(10) << "4" - << setw(10) << "-1" - << setw(10) << "1" - << setw(10) << "11" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lscatelecg.X() - << setw(16) << r_lscatelecg.Y() - << setw(16) << r_lscatelecg.Z() - << setw(16) << r_lscatelecg.E() - << setw(16) << fElectron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Recoiled neutron - ppiOut << setw(10) << "5" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << PDGtype(recoil_nucleon) - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_l_scat_nucleon_g.X() - << setw(16) << r_l_scat_nucleon_g.Y() - << setw(16) << r_l_scat_nucleon_g.Z() - << setw(16) << r_l_scat_nucleon_g.E() - << setw(16) << f_Scat_Nucleon_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - -// cout << "Particle check: " << PDGtype(produced_X) << " " << PDGtype(recoil_nucleon) << endl; + ppiOut << "5" + << " \t " << fPhi // var 1 + << " \t " << fPhiS // var 2 + << " \t " << fx // var 3 + << " \t " << "1" + << " \t " << fQsq_GeV // var 4 + << " \t " << fT_GeV // var 5 + << " \t " << fW_GeV // var 6 + << " \t " << fEpsilon // var 7 + << " \t " << fEventWeight // var 8 + << endl; - - - - -// ///*--------------------------------------------------*/ -// -// ppiOut << "3" -// << " \t " << fPhi // var 1 -// << " \t " << fPhiS // var 2 -// << " \t " << fx // var 3 -// << " \t " << "1" -// << " \t " << fQsq_GeV // var 4 -// << " \t " << fT_GeV // var 5 -// << " \t " << fW_GeV // var 6 -// << " \t " << fEpsilon // var 7 -// << " \t " << fEventWeight // var 8 -// << endl; -// -// ///*--------------------------------------------------*/ -// // Final State -// -// // Produced Particle X -// ppiOut << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << PDGtype(produced_X) -// << setw(10) << "0" -// << setw(10) << "0" -// << setw(16) << r_lX_g.X() -// << setw(16) << r_lX_g.Y() -// << setw(16) << r_lX_g.Z() -// << setw(16) << r_lX_g.E() -// << setw(16) << fX_Mass_GeV -// << setw(16) << fVertex_X -// << setw(16) << fVertex_Y -// << setw(16) << fVertex_Z -// << endl; -// -// // Scattered electron -// ppiOut << setw(10) << "2" -// << setw(10) << "-1" -// << setw(10) << "1" -// << setw(10) << "11" -// << setw(10) << "0" -// << setw(10) << "0" -// << setw(16) << r_lscatelecg.X() -// << setw(16) << r_lscatelecg.Y() -// << setw(16) << r_lscatelecg.Z() -// << setw(16) << r_lscatelecg.E() -// << setw(16) << fElectron_Mass_GeV -// << setw(16) << fVertex_X -// << setw(16) << fVertex_Y -// << setw(16) << fVertex_Z -// << endl; -// -// // Recoiled neutron -// ppiOut << setw(10) << "3" -// << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << PDGtype(recoil_nucleon) -// << setw(10) << "0" -// << setw(10) << "0" -// << setw(16) << r_l_scat_nucleon_g.X() -// << setw(16) << r_l_scat_nucleon_g.Y() -// << setw(16) << r_l_scat_nucleon_g.Z() -// << setw(16) << r_l_scat_nucleon_g.E() -// << setw(16) << f_Scat_Nucleon_Mass_GeV -// << setw(16) << fVertex_X -// << setw(16) << fVertex_Y -// << setw(16) << fVertex_Z -// << endl; -// -// -// cout << "Particle check: " << PDGtype(produced_X) << " " << PDGtype(recoil_nucleon) << endl; -// - + ///*--------------------------------------------------*/ + // Initial State + + ppiOut << setw(10) << "1" + << setw(10) << "-1" + << setw(10) << "0" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lelectrong.X() + << setw(16) << r_lelectrong.Y() + << setw(16) << r_lelectrong.Z() + << setw(16) << r_lelectrong.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + ppiOut << setw(10) << "2" + << setw(10) << "1" + << setw(10) << "0" + << setw(10) << "2212" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lprotong.X() + << setw(16) << r_lprotong.Y() + << setw(16) << r_lprotong.Z() + << setw(16) << r_lprotong.E() + << setw(16) << fProton_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + ///*--------------------------------------------------*/ + // Final State + + // Produced Particle X + ppiOut << setw(10) << "3" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(produced_X) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lX_g.X() + << setw(16) << r_lX_g.Y() + << setw(16) << r_lX_g.Z() + << setw(16) << r_lX_g.E() + << setw(16) << fX_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Scattered electron + ppiOut << setw(10) << "4" + << setw(10) << "-1" + << setw(10) << "1" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lscatelecg.X() + << setw(16) << r_lscatelecg.Y() + << setw(16) << r_lscatelecg.Z() + << setw(16) << r_lscatelecg.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Recoiled neutron + ppiOut << setw(10) << "5" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(recoil_nucleon) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_l_scat_nucleon_g.X() + << setw(16) << r_l_scat_nucleon_g.Y() + << setw(16) << r_l_scat_nucleon_g.Z() + << setw(16) << r_l_scat_nucleon_g.E() + << setw(16) << f_Scat_Nucleon_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; } @@ -995,131 +701,103 @@ void Pi0_Production::Pi0_Lund_Output() { void Pi0_Production::Pi0_Decay_Lund_Output() { -// cout << rNEvents << endl; -// cout << "-----------+++++++++++++-------------------" << endl; -// exit(0); - - - - - ppiOut << "4" - << " \t " << fPhi // var 1 - << " \t " << fPhiS // var 2 - << " \t " << fx // var 3 - << " \t " << "1" - << " \t " << fQsq_GeV // var 4 - << " \t " << fT_GeV // var 5 - << " \t " << fW_GeV // var 6 - << " \t " << fEpsilon // var 7 - << " \t " << fEventWeight // var 8 - << endl; - -// // Produced Particle X -// ppiOut << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << "1" -// << setw(10) << PDGtype(produced_X) -// << setw(10) << "0" -// << setw(10) << "0" -// << setw(16) << r_lX_g.X() -// << setw(16) << r_lX_g.Y() -// << setw(16) << r_lX_g.Z() -// << setw(16) << r_lX_g.E() -// << setw(16) << fX_Mass_GeV -// << setw(16) << fVertex_X -// << setw(16) << fVertex_Y -// << setw(16) << fVertex_Z -// << endl; - - // Scattered electron - ppiOut << setw(10) << "2" - << setw(10) << "-1" - << setw(10) << "1" - << setw(10) << "11" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lscatelecg.X() - << setw(16) << r_lscatelecg.Y() - << setw(16) << r_lscatelecg.Z() - << setw(16) << r_lscatelecg.E() - << setw(16) << fElectron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Recoiled neutron - ppiOut << setw(10) << "3" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << PDGtype(recoil_nucleon) - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_l_scat_nucleon_g.X() - << setw(16) << r_l_scat_nucleon_g.Y() - << setw(16) << r_l_scat_nucleon_g.Z() - << setw(16) << r_l_scat_nucleon_g.E() - << setw(16) << f_Scat_Nucleon_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Photon 1 - ppiOut << setw(10) << "3" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << "22" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << l_photon_1.X() - << setw(16) << l_photon_1.Y() - << setw(16) << l_photon_1.Z() - << setw(16) << l_photon_1.E() - << setw(16) << "0" - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Photon 2 - ppiOut << setw(10) << "4" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << "22" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << l_photon_2.X() - << setw(16) << l_photon_2.Y() - << setw(16) << l_photon_2.Z() - << setw(16) << l_photon_2.E() - << setw(16) << "0" - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; + ppiOut << "4" + << " \t " << fPhi // var 1 + << " \t " << fPhiS // var 2 + << " \t " << fx // var 3 + << " \t " << "1" + << " \t " << fQsq_GeV // var 4 + << " \t " << fT_GeV // var 5 + << " \t " << fW_GeV // var 6 + << " \t " << fEpsilon // var 7 + << " \t " << fEventWeight // var 8 + << endl; + + // Scattered electron + ppiOut << setw(10) << "2" + << setw(10) << "-1" + << setw(10) << "1" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lscatelecg.X() + << setw(16) << r_lscatelecg.Y() + << setw(16) << r_lscatelecg.Z() + << setw(16) << r_lscatelecg.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Recoiled neutron + ppiOut << setw(10) << "3" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(recoil_nucleon) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_l_scat_nucleon_g.X() + << setw(16) << r_l_scat_nucleon_g.Y() + << setw(16) << r_l_scat_nucleon_g.Z() + << setw(16) << r_l_scat_nucleon_g.E() + << setw(16) << f_Scat_Nucleon_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Photon 1 + ppiOut << setw(10) << "3" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << "22" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << l_photon_1.X() + << setw(16) << l_photon_1.Y() + << setw(16) << l_photon_1.Z() + << setw(16) << l_photon_1.E() + << setw(16) << "0" + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Photon 2 + ppiOut << setw(10) << "4" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << "22" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << l_photon_2.X() + << setw(16) << l_photon_2.Y() + << setw(16) << l_photon_2.Z() + << setw(16) << l_photon_2.E() + << setw(16) << "0" + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; } - - - /*--------------------------------------------------*/ /*--------------------------------------------------*/ /*--------------------------------------------------*/ void Pi0_Production::Pi0_Decay_Pythia6_Out_Init() { + print_itt = 0; - print_itt = 0; - -// ppiOut << "PYTHIA EVENT FILE" << endl; - ppiOut << "SIMPLE Event FILE" << endl; - ppiOut << "============================================" << endl; - ppiOut << "I, ievent, nParticles" << endl; - ppiOut << "============================================" << endl; - ppiOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; - ppiOut << "============================================" << endl; + // ppiOut << "PYTHIA EVENT FILE" << endl; + ppiOut << "SIMPLE Event FILE" << endl; + ppiOut << "============================================" << endl; + ppiOut << "I, ievent, nParticles" << endl; + ppiOut << "============================================" << endl; + ppiOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; + ppiOut << "============================================" << endl; } @@ -1127,144 +805,162 @@ void Pi0_Production::Pi0_Decay_Pythia6_Out_Init() { void Pi0_Production::Pi0_Decay_Pythia6_Output() { + ppiOut << "0" << " \t\t\t " << print_itt << " \t\t\t " << "1" << endl; // var 1 + print_itt++; -// ppiOut << "4" -// << " \t " << fPhi // var 1 -// << " \t " << fPhiS // var 2 -// << " \t " << fx // var 3 -// << " \t " << "1" -// << " \t " << fQsq_GeV // var 4 -// << " \t " << fT_GeV // var 5 -// << " \t " << fW_GeV // var 6 -// << " \t " << fEpsilon // var 7 -// << " \t " << fEventWeight // var 8 -// << endl; + ppiOut << "============================================" << endl; + ///*--------------------------------------------------*/ + // Initial State + + ppiOut << "1" + << setw(6) << "21" + << setw(6) << "11" + << setw(6) << "0" + << setw(6) << "3" + << setw(6) << "4" + + << setw(14) << r_lelectrong.X() + << setw(14) << r_lelectrong.Y() + << setw(14) << r_lelectrong.Z() + << setw(14) << r_lelectrong.E() + << setw(14) << fElectron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + ppiOut << "2" + << setw(6) << "21" + << setw(6) << "2212" + << setw(6) << "0" + << setw(6) << "5" + << setw(6) << "6" + + << setw(14) << r_lprotong.X() + << setw(14) << r_lprotong.Y() + << setw(14) << r_lprotong.Z() + << setw(14) << r_lprotong.E() + << setw(14) << fProton_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + ppiOut << "3" + << setw(6) << "21" + << setw(6) << "22" + << setw(6) << "1" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lphotong.X() + << setw(14) << r_lphotong.Y() + << setw(14) << r_lphotong.Z() + << setw(14) << r_lphotong.E() + << setw(14) << r_lphotong.M() + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + ///*--------------------------------------------------*/ + // Final State + + // Scattered electron + ppiOut << "4" + << setw(6) << "1" + << setw(6) << "11" + << setw(6) << "1" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lscatelecg.X() + << setw(14) << r_lscatelecg.Y() + << setw(14) << r_lscatelecg.Z() + << setw(14) << r_lscatelecg.E() + << setw(14) << fElectron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + // Recoiled nucleon + ppiOut << "5" + << setw(6) << "1" + << setw(6) << PDGtype(recoil_nucleon) + << setw(6) << "2" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_l_scat_nucleon_g.X() + << setw(14) << r_l_scat_nucleon_g.Y() + << setw(14) << r_l_scat_nucleon_g.Z() + << setw(14) << r_l_scat_nucleon_g.E() + << setw(14) << f_Scat_Nucleon_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + // Produced Particle X + ppiOut << "6" + << setw(6) << "1" + << setw(6) << PDGtype(produced_X) + << setw(6) << "2" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lX_g.X() + << setw(14) << r_lX_g.Y() + << setw(14) << r_lX_g.Z() + << setw(14) << r_lX_g.E() + << setw(14) << fX_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + ppiOut << "=============== Event finished ===============" << endl; - ppiOut << "0" << " \t\t\t\ " << print_itt << " \t\t\t " << "1" << endl; // var 1 +} - print_itt++; +void Pi0_Production::Pi0_HEPMC3_Out_Init() { - ppiOut << "============================================" << endl; - - ///*--------------------------------------------------*/ - // Initial State - - ppiOut << "1" - << setw(6) << "21" - << setw(6) << "11" - << setw(6) << "0" - << setw(6) << "3" - << setw(6) << "4" - - << setw(14) << r_lelectrong.X() - << setw(14) << r_lelectrong.Y() - << setw(14) << r_lelectrong.Z() - << setw(14) << r_lelectrong.E() - << setw(14) << fElectron_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - ppiOut << "2" - << setw(6) << "21" - << setw(6) << "2212" - << setw(6) << "0" - << setw(6) << "5" - << setw(6) << "6" - - << setw(14) << r_lprotong.X() - << setw(14) << r_lprotong.Y() - << setw(14) << r_lprotong.Z() - << setw(14) << r_lprotong.E() - << setw(14) << fProton_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - ppiOut << "3" - << setw(6) << "21" - << setw(6) << "22" - << setw(6) << "1" - << setw(6) << "0" - << setw(6) << "0" - - << setw(14) << r_lphotong.X() - << setw(14) << r_lphotong.Y() - << setw(14) << r_lphotong.Z() - << setw(14) << r_lphotong.E() - << setw(14) << r_lphotong.M() - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - - ///*--------------------------------------------------*/ - // Final State - - // Scattered electron - ppiOut << "4" - << setw(6) << "1" - << setw(6) << "11" - << setw(6) << "1" - << setw(6) << "0" - << setw(6) << "0" - - << setw(14) << r_lscatelecg.X() - << setw(14) << r_lscatelecg.Y() - << setw(14) << r_lscatelecg.Z() - << setw(14) << r_lscatelecg.E() - << setw(14) << fElectron_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - // Recoiled nucleon - ppiOut << "5" - << setw(6) << "1" - << setw(6) << PDGtype(recoil_nucleon) - << setw(6) << "2" - << setw(6) << "0" - << setw(6) << "0" - - << setw(14) << r_l_scat_nucleon_g.X() - << setw(14) << r_l_scat_nucleon_g.Y() - << setw(14) << r_l_scat_nucleon_g.Z() - << setw(14) << r_l_scat_nucleon_g.E() - << setw(14) << f_Scat_Nucleon_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - // Produced Particle X - ppiOut << "6" - << setw(6) << "1" - << setw(6) << PDGtype(produced_X) - << setw(6) << "2" - << setw(6) << "0" - << setw(6) << "0" - - << setw(14) << r_lX_g.X() - << setw(14) << r_lX_g.Y() - << setw(14) << r_lX_g.Z() - << setw(14) << r_lX_g.E() - << setw(14) << fX_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - ppiOut << "=============== Event finished ===============" << endl; + print_itt = 0; + ppiOut << "HepMC::Version 3.02.05" << endl; + ppiOut << "HepMC::Asciiv3-START_EVENT_LISTING" << endl; } +/*--------------------------------------------------*/ +void Pi0_Production::Pi0_HEPMC3_Output() { + + // HEPMC3 output for Athena simulations + + // First line - E - Event# - #Vertices - #Particles + ppiOut << "E" << " " << print_itt << " " << "1" << " " << 5 << endl; + print_itt++; + // Second line, Units - U - ENERGY UNIT - DISTANCE UNIT + ppiOut << "U" << " " << "GEV" << " " << "MM" << endl; + // Third line, optional attributes, the weight + ppiOut << "A" << " " << "0" << " " << "weight" << " " << fEventWeight << endl; + // Beam particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (4, incoming beam particle) + ppiOut << "P" << " " << "1" << " " << "0" << " " << "11" << " " << r_lelectrong.X() << " " << r_lelectrong.Y() << " " << r_lelectrong.Z() << " " << r_lelectrong.E() << " " << fElectron_Mass_GeV << " " << "4" << endl; + ppiOut << "P" << " " << "2" << " " << "0" << " " << "2212" << " " << r_lprotong.X() << " " << r_lprotong.Y() << " " << r_lprotong.Z() << " " << r_lprotong.E() << " " << fProton_Mass_GeV << " " << "4" << endl; + // Vertex line - V - 1 - 0 - [1,2] + ppiOut << "V" << " " << "-1" << " " << "0" << " " << "[1,2]" << endl; + // Output particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (1, undecayed physical particle) + // Scattered electron + ppiOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << fElectron_Mass_GeV << " " << "1" << endl; + // Produced meson + ppiOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_lX_g.X() << " " << r_lX_g.Y() << " " << r_lX_g.Z() << " " << r_lX_g.E() << " " << fX_Mass_GeV << " " << "1" << endl; + // Recoil nucleon + ppiOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_nucleon) << " " << r_l_scat_nucleon_g.X() << " " << r_l_scat_nucleon_g.Y() << " " << r_l_scat_nucleon_g.Z() << " " << r_l_scat_nucleon_g.E() << " " << f_Scat_Nucleon_Mass_GeV << " " << "1" << endl; + +} /*--------------------------------------------------*/ /// Cross section model: Based on 12 GeV Hall C u-channel pi0 proposal @@ -1273,395 +969,273 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { Double_t Pi0_Production::Get_CrossSection(){ - double_t sig_total; + double_t sig_total; - // use fit parameters for xB=0.36 data+model (nb/GeV2) - Double_t Q2tab[4] = {1.75, 3.00, 4.00, 5.50}; - Double_t Wtab[4] = {2.00, 2.46, 2.83, 3.26}; + // use fit parameters for xB=0.36 data+model (nb/GeV2) + Double_t Q2tab[4] = {1.75, 3.00, 4.00, 5.50}; + Double_t Wtab[4] = {2.00, 2.46, 2.83, 3.26}; - // sigT is parameterized in the form p1+p2/(-t) - Double_t p1T[4] = {1577., 168., 67.4, 24.7}; - Double_t p2T[4] = {-125., -11.1, -4.6, -1.66}; + // sigT is parameterized in the form p1+p2/(-t) + Double_t p1T[4] = {1577., 168., 67.4, 24.7}; + Double_t p2T[4] = {-125., -11.1, -4.6, -1.66}; - // sigL is simply constant vs t - Double_t p1L[4] = {0., 2.77, 1.16, 0.43}; + // sigL is simply constant vs t + Double_t p1L[4] = {0., 2.77, 1.16, 0.43}; - // sigTT p1+p2/(-t) - Double_t p1TT[4] = {-674., -141., -57.6, -21.3}; - Double_t p2TT[4] = { 102., 25.4, 10.4, 3.82}; + // sigTT p1+p2/(-t) + Double_t p1TT[4] = {-674., -141., -57.6, -21.3}; + Double_t p2TT[4] = { 102., 25.4, 10.4, 3.82}; - // sigLT p1+p2/(-t) - Double_t p1LT[4] = { 156., 12.57, 5.17, 1.97}; - Double_t p2LT[4] = {-60.0, -2.08, -0.85, -0.32}; + // sigLT p1+p2/(-t) + Double_t p1LT[4] = { 156., 12.57, 5.17, 1.97}; + Double_t p2LT[4] = {-60.0, -2.08, -0.85, -0.32}; - double sigThi, sigTlo, sigLhi, sigLlo; - double sigTThi, sigTTlo, sigLThi, sigLTlo; - double tmin, tprime; - double umin, uprime; - Int_t Q2count =0; + double sigThi, sigTlo, sigLhi, sigLlo; + double sigTThi, sigTTlo, sigLThi, sigLTlo; + double tmin, tprime; + double umin, uprime; + Int_t Q2count =0; - double thetacm = theta_X_rf; + double thetacm = theta_X_rf; - double eps = fEpsilon; - double phicm = fPhi; + double eps = fEpsilon; + double phicm = fPhi; - double Q2hi=0.; - double Q2lo=0.; - double delQ2=1.; + double Q2hi=0.; + double Q2lo=0.; + double delQ2=1.; - double Whi, Wlo; + double Whi, Wlo; - double Q2tmp = fQsq_GeV; - double m_p = fProton_Mass; - double W_gev = fW_GeV; - - double pi = fPi; - - int ndat=4; + double Q2tmp = fQsq_GeV; + double m_p = fProton_Mass; + double W_gev = fW_GeV; - tprime = ft-ft_min; - uprime = fu-fu_min; + double pi = fPi; - if( Q2tmp < Q2tab[0] ) { + int ndat=4; - Q2count = 0; - Q2hi = Q2tab[1]; - Whi = Wtab[1]; - Q2lo = Q2tab[0]; - Wlo = Wtab[0]; - delQ2 = (Q2hi - Q2lo); + tprime = ft-ft_min; + uprime = fu-fu_min; - } else { + if( Q2tmp < Q2tab[0] ) { - for(int Q2c=0; Q2c <= ndat-2; Q2c++){ + Q2count = 0; + Q2hi = Q2tab[1]; + Whi = Wtab[1]; + Q2lo = Q2tab[0]; + Wlo = Wtab[0]; + delQ2 = (Q2hi - Q2lo); -// cout << Q2c << endl; - if( (Q2tmp >= Q2tab[Q2c] && Q2tmp < Q2tab[Q2c+1]) || Q2tmp >= Q2tab[Q2c+1] ) { + } else { - Q2count = Q2c ; - Q2hi = Q2tab[Q2count+1]; - Whi = Wtab[Q2count+1]; - Q2lo = Q2tab[Q2count]; - Wlo = Wtab[Q2count]; - delQ2 = (Q2hi - Q2lo); + for(int Q2c=0; Q2c <= ndat-2; Q2c++){ -// cout << "check this: " << Q2count << " "<< Q2tmp << " " << Q2tab[Q2c] << " "<< Q2tab[Q2c+1] << endl; + if( (Q2tmp >= Q2tab[Q2c] && Q2tmp < Q2tab[Q2c+1]) || Q2tmp >= Q2tab[Q2c+1] ) { - } + Q2count = Q2c ; + Q2hi = Q2tab[Q2count+1]; + Whi = Wtab[Q2count+1]; + Q2lo = Q2tab[Q2count]; + Wlo = Wtab[Q2count]; + delQ2 = (Q2hi - Q2lo); + } + } + } -// do Q2c=1,(ndat-1) -// if( (Q2tmp.ge.Q2tab(Q2c)).and. (Q2tmp.lt.Q2tab(Q2c+1) ) -// 1 .or. Q2tmp.ge.Q2tab(Q2c+1) ) then -// Q2count = Q2c -// Q2hi = Q2tab(Q2count+1) -// Whi = Wtab(Q2count+1) -// Q2lo = Q2tab(Q2count) -// Wlo = Wtab(Q2count) -// delQ2 = (Q2hi - Q2lo) -// endif !Q2 check -// enddo !Q2 - } - } + ///*--------------------------------------------------*/ + // t-channel + if ( thetacm > pi/2.) { + sigThi = p1T[Q2count+1] + p2T[Q2count+1]/(tprime+fabs(tmin)); + sigTlo = p1T[Q2count] + p2T[Q2count]/(tprime+fabs(tmin)); + sigLhi = p1L[Q2count+1]; + sigLlo = p1L[Q2count]; + sigTThi = p1TT[Q2count+1]+p2TT[Q2count+1]/(tprime+fabs(tmin)); + sigTTlo = p1TT[Q2count] +p2TT[Q2count]/(tprime+fabs(tmin)); + sigLThi = p1LT[Q2count+1]+p2LT[Q2count+1]/(tprime+fabs(tmin)); + sigLTlo = p1LT[Q2count] +p2LT[Q2count]/(tprime+fabs(tmin)); + } else { + // + ///*--------------------------------------------------*/ + // u-channel + // christian weiss recommends the following change for u-channel: + // switch u-slope for t-slope, then divide by 10, since back angle peak + // is ~10% of forward angle peak (at least for omega electroproduction) - ///*--------------------------------------------------*/ - // t-channel - if ( thetacm > pi/2.) { + sigThi = (p1T[Q2count+1]+p2T[Q2count+1]/(uprime+fabs(tmin)))/10.; + sigTlo = (p1T[Q2count] +p2T[Q2count]/(uprime+fabs(tmin)))/10.; + sigLhi = p1L[Q2count+1]/10.; + sigLlo = p1L[Q2count]/10.; + sigTThi = (p1TT[Q2count+1]+p2TT[Q2count+1]/(uprime+fabs(tmin)))/10.; + sigTTlo = (p1TT[Q2count] +p2TT[Q2count]/(uprime+fabs(tmin)))/10.; + sigLThi = (p1LT[Q2count+1]+p2LT[Q2count+1]/(uprime+fabs(tmin)))/10.; + sigLTlo = (p1LT[Q2count] +p2LT[Q2count]/(uprime+fabs(tmin)))/10.; - sigThi = p1T[Q2count+1] + p2T[Q2count+1]/(tprime+fabs(tmin)); - sigTlo = p1T[Q2count] + p2T[Q2count]/(tprime+fabs(tmin)); - sigLhi = p1L[Q2count+1]; - sigLlo = p1L[Q2count]; + } - sigTThi = p1TT[Q2count+1]+p2TT[Q2count+1]/(tprime+fabs(tmin)); - sigTTlo = p1TT[Q2count] +p2TT[Q2count]/(tprime+fabs(tmin)); - sigLThi = p1LT[Q2count+1]+p2LT[Q2count+1]/(tprime+fabs(tmin)); - sigLTlo = p1LT[Q2count] +p2LT[Q2count]/(tprime+fabs(tmin)); + double Wfac_hi = pow(pow(Whi, 2) - pow(m_p, 2), 2) / pow( pow(W_gev,2)- pow(m_p, 2), 2); + double Wfac_lo = pow(pow(Wlo, 2) - pow(m_p, 2), 2) / pow( pow(W_gev,2)- pow(m_p, 2), 2); - } else { -// - ///*--------------------------------------------------*/ - // u-channel -// christian weiss recommends the following change for u-channel: -// switch u-slope for t-slope, then divide by 10, since back angle peak -// is ~10% of forward angle peak (at least for omega electroproduction) - - sigThi = (p1T[Q2count+1]+p2T[Q2count+1]/(uprime+fabs(tmin)))/10.; - sigTlo = (p1T[Q2count] +p2T[Q2count]/(uprime+fabs(tmin)))/10. ; - sigLhi = p1L[Q2count+1]/10.; - sigLlo = p1L[Q2count]/10.; - sigTThi = (p1TT[Q2count+1]+p2TT[Q2count+1]/(uprime+fabs(tmin)))/10.; - sigTTlo = (p1TT[Q2count] +p2TT[Q2count]/(uprime+fabs(tmin)))/10.; - sigLThi = (p1LT[Q2count+1]+p2LT[Q2count+1]/(uprime+fabs(tmin)))/10.; - sigLTlo = (p1LT[Q2count] +p2LT[Q2count]/(uprime+fabs(tmin)))/10.; + double sigThiW = sigThi*Wfac_hi; - } + if (sigThiW <0) { + // cout << pizero: sigThiW<0 ',sigThiW,uprime, abs(tmin) + sigThiW=0.; + } -// double Wfac_hi= ((Whi**2 - m_p**2)**2) / ((W_gev**2-m_p**2)**2); -// double Wfac_lo= ((Wlo**2 - m_p**2)**2) / ((W_gev**2-m_p**2)**2); + double sigTloW = sigTlo*Wfac_lo; - double Wfac_hi = pow(pow(Whi, 2) - pow(m_p, 2), 2) / pow( pow(W_gev,2)- pow(m_p, 2), 2); - double Wfac_lo = pow(pow(Wlo, 2) - pow(m_p, 2), 2) / pow( pow(W_gev,2)- pow(m_p, 2), 2); + if (sigTloW < 0) { + // write(6,*)' pizero: sigTloW<0 ',sigTloW,uprime,abs(tmin) + sigTloW=0.; + } - double sigThiW = sigThi*Wfac_hi; + double sigLhiW = sigLhi*Wfac_hi; - if (sigThiW <0) { -// cout << pizero: sigThiW<0 ',sigThiW,uprime, abs(tmin) - sigThiW=0.; - } + if (sigLhiW < 0) { + // write(6,*)' pizero: sigLhiW<0 ',sigLhiW,uprime,abs(tmin) + sigLhiW=0.; + } - double sigTloW = sigTlo*Wfac_lo; + double sigLloW = sigLlo*Wfac_lo; - if (sigTloW < 0) { -// write(6,*)' pizero: sigTloW<0 ',sigTloW,uprime,abs(tmin) - sigTloW=0.; - } + if (sigLloW < 0) { + // write(6,*)' pizero: sigLloW<0 ',sigLloW,uprime,abs(tmin) + sigLloW=0.; + } - double sigLhiW = sigLhi*Wfac_hi; + double sigTThiW = sigTThi*Wfac_hi; + double sigTTloW; + double sigLThiW; + double sigLTloW; - if (sigLhiW < 0) { -// write(6,*)' pizero: sigLhiW<0 ',sigLhiW,uprime,abs(tmin) - sigLhiW=0.; - } + double sig, sigL, sigT, sigLT, sigTT; - double sigLloW = sigLlo*Wfac_lo; + if (abs(sigTThiW) < sigThiW) { + sigTThiW=Sign(sigThiW, sigTThiW); + } + sigTTloW = sigTTlo*Wfac_lo; - if (sigLloW < 0) { -// write(6,*)' pizero: sigLloW<0 ',sigLloW,uprime,abs(tmin) - sigLloW=0.; - } + if (abs(sigTTloW) < sigTloW) { + sigTTloW = Sign(sigTloW,sigTTloW); + } + sigLThiW = sigLThi*Wfac_hi; - double sigTThiW = sigTThi*Wfac_hi; - double sigTTloW; - double sigLThiW; - double sigLTloW; + if (abs(sigLThiW) < sigThiW) { + sigLThiW = Sign(sigThiW,sigLThiW); + } + sigLTloW = sigLTlo*Wfac_lo; - double sig, sigL, sigT, sigLT, sigTT; + if (abs(sigLTloW) < sigTloW) { + sigLTloW = Sign(sigTloW,sigLTloW); + } - if (abs(sigTThiW) < sigThiW) { - sigTThiW=Sign(sigThiW, sigTThiW); - } - sigTTloW = sigTTlo*Wfac_lo; + /*--------------------------------------------------*/ - if (abs(sigTTloW) < sigTloW) { - sigTTloW = Sign(sigTloW,sigTTloW); - } - sigLThiW = sigLThi*Wfac_hi; - - if (abs(sigLThiW) < sigThiW) { - sigLThiW = Sign(sigThiW,sigLThiW); - } - sigLTloW = sigLTlo*Wfac_lo; - - if (abs(sigLTloW) < sigTloW) { - sigLTloW = Sign(sigTloW,sigLTloW); - } - - /*--------------------------------------------------*/ - - if( Q2count <= (ndat-2) && Q2tmp >= Q2tab[Q2count] && Q2tmp < Q2tab[Q2count+1] ) { - - sigT = ( sigTloW*(Q2hi-Q2tmp) + sigThiW*(Q2tmp-Q2lo))/delQ2; - sigL = ( sigLloW*(Q2hi-Q2tmp) + sigLhiW*(Q2tmp-Q2lo))/delQ2; - sigTT = (sigTTloW*(Q2hi-Q2tmp) + sigTThiW*(Q2tmp-Q2lo))/delQ2; - sigLT = (sigLTloW*(Q2hi-Q2tmp) + sigLThiW*(Q2tmp-Q2lo))/delQ2; - - } else if (Q2tmp >= Q2tab[ndat-1]) { - - sigT = sigThiW + (sigThiW-sigTloW) /delQ2; - sigL = sigLhiW + (sigLhiW-sigLloW) /delQ2; - sigTT = sigTThiW + (sigTThiW-sigTTloW)/delQ2; - sigLT = sigLThiW + (sigLThiW-sigLTloW)/delQ2; - - } else if (Q2tmp <= Q2tab[1] ) { - - sigT = sigTloW - (sigThiW-sigTloW) /delQ2; - sigL = sigLloW - (sigLhiW-sigLloW) /delQ2; - sigTT = sigTTloW - (sigTThiW-sigTTloW)/delQ2; - sigLT = sigLTloW - (sigLThiW-sigLTloW)/delQ2; - - } else { + if( Q2count <= (ndat-2) && Q2tmp >= Q2tab[Q2count] && Q2tmp < Q2tab[Q2count+1] ) { -// write(6,*)' Q2tmp error ',Q2tmp,Q2count - } -// endif + sigT = ( sigTloW*(Q2hi-Q2tmp) + sigThiW*(Q2tmp-Q2lo))/delQ2; + sigL = ( sigLloW*(Q2hi-Q2tmp) + sigLhiW*(Q2tmp-Q2lo))/delQ2; + sigTT = (sigTTloW*(Q2hi-Q2tmp) + sigTThiW*(Q2tmp-Q2lo))/delQ2; + sigLT = (sigLTloW*(Q2hi-Q2tmp) + sigLThiW*(Q2tmp-Q2lo))/delQ2; + } else if (Q2tmp >= Q2tab[ndat-1]) { - - sig = sigT + eps*sigL +eps*cos(2.*phicm)*sigTT +sqrt(2.*eps*(1.+eps))*cos(phicm)*sigLT; + sigT = sigThiW + (sigThiW-sigTloW)/delQ2; + sigL = sigLhiW + (sigLhiW-sigLloW)/delQ2; + sigTT = sigTThiW + (sigTThiW-sigTTloW)/delQ2; + sigLT = sigLThiW + (sigLThiW-sigLTloW)/delQ2; - double sig_pi0gmh = sig/2./pi*1.e-09; //dsig/dtdphicm in microbarns/MeV^2/rad + } else if (Q2tmp <= Q2tab[1] ) { - return sig_total; -} + sigT = sigTloW - (sigThiW-sigTloW)/delQ2; + sigL = sigLloW - (sigLhiW-sigLloW)/delQ2; + sigTT = sigTTloW - (sigTThiW-sigTTloW)/delQ2; + sigLT = sigLTloW - (sigLThiW-sigLTloW)/delQ2; + + } else { + + // write(6,*)' Q2tmp error ',Q2tmp,Q2count + } + // endif + sig = sigT + eps*sigL +eps*cos(2.*phicm)*sigTT +sqrt(2.*eps*(1.+eps))*cos(phicm)*sigLT; + double sig_pi0gmh = sig/2./pi*1.e-09; //dsig/dtdphicm in microbarns/MeV^2/rad + return sig_total; +} ///*--------------------------------------------------*/ // Pi0 decay subroutine void Pi0_Production::Pi0_decay(TLorentzVector pi0_vec) { -// TH1D *h1 = new TH1D("h1", "h1", 100, -100, 100); -// TH1D *h2 = new TH1D("h2", "h2", 100, -100, 100); -// TH1D *h3 = new TH1D("h3", "h3", 100, -100, 100); - -// TH2D *photon_2d = new TH2D("photon_2d", "photon_2d", 600, -30, 30, 600, -30, 30); - - TVector3 beta_col_rf_pi0; - - beta_col_rf_pi0 = pi0_vec.BoostVector(); - - Double_t fGamma_Col_pi0_RF = 1.0/sqrt( 1 - pow( beta_col_rf_pi0.Mag() , 2 ) ); - - TLorentzVector l_photon_1_rf; - TLorentzVector l_photon_2_rf; + TVector3 beta_col_rf_pi0; -// TLorentzVector pi0_vec; - TLorentzVector pi0_vec_rf; - TLorentzVector pi0_vec_rf_g; - - pi0_vec_rf = pi0_vec; - - pi0_vec_rf.Boost(-beta_col_rf_pi0); - pi0_vec_rf_g = pi0_vec_rf * fm; - - double photon_1_E = pi0_vec_rf_g.E()/2; - double photon_2_E = pi0_vec_rf_g.E()/2; - -// double photon_1_theta = rRand->Uniform( 0, 2.0 * fPi ); -// double photon_1_phi = rRand->Uniform( 0 , 2.0 * fPi ); - -// for (int i =0; i<=100000; i++) { - -// double photon_1_theta = fPi/4; - -// double photon_1_theta = fPi/1000 *i; -// double photon_1_phi = fPi/2; - -// double photon_1_theta = rRand->Uniform( 0, fPi ); -// double photon_1_phi = rRand->Uniform( 0, 2.0 * fPi); - - double photon_1_theta = fRandom->Uniform( 0, fPi ); - double photon_1_phi = fRandom->Uniform( 0, 2.0 * fPi); + beta_col_rf_pi0 = pi0_vec.BoostVector(); - double photon_1_Mom_Col = photon_1_E; - double photon_1_MomZ_Col = ( photon_1_Mom_Col * cos(photon_1_theta) ); - double photon_1_MomX_Col = ( photon_1_Mom_Col * sin(photon_1_theta) * cos(photon_1_phi) ); - double photon_1_MomY_Col = ( photon_1_Mom_Col * sin(photon_1_theta) * sin(photon_1_phi) ); + Double_t fGamma_Col_pi0_RF = 1.0/sqrt( 1 - pow( beta_col_rf_pi0.Mag() , 2 ) ); - l_photon_1_rf.SetPxPyPzE( photon_1_MomX_Col, photon_1_MomY_Col, photon_1_MomZ_Col, photon_1_E ); - -// photon_2_theta = photon_1_theta - fPi; -// photon_2_phi = photon_1_phi - fPi; + TLorentzVector l_photon_1_rf; + TLorentzVector l_photon_2_rf; - l_photon_2_rf.SetPxPyPzE( -photon_1_MomX_Col, -photon_1_MomY_Col, -photon_1_MomZ_Col, photon_1_E ); + // TLorentzVector pi0_vec; + TLorentzVector pi0_vec_rf; + TLorentzVector pi0_vec_rf_g; - l_photon_1 = l_photon_1_rf; - l_photon_2 = l_photon_2_rf; + pi0_vec_rf = pi0_vec; - // TVector3 beta_col_rf_pi0; - // beta_col_rf_pi0 = pi0_vec.BoostVector(); + pi0_vec_rf.Boost(-beta_col_rf_pi0); + pi0_vec_rf_g = pi0_vec_rf * fm; - TVector3 beta_col_rf_pi0_inverse = -pi0_vec.BoostVector(); + double photon_1_E = pi0_vec_rf_g.E()/2; + double photon_2_E = pi0_vec_rf_g.E()/2; - l_photon_1.Boost(beta_col_rf_pi0); - l_photon_2.Boost(beta_col_rf_pi0); + double photon_1_theta = fRandom->Uniform( 0, fPi ); + double photon_1_phi = fRandom->Uniform( 0, 2.0 * fPi); -// cout << "/*--------------------------------------------------*/" << endl; -// cout << "pi0 decay" << endl; -// cout << "pi0 decay" -// cout << "gamma " << fGamma_Col_pi0_RF << " " << pi0_vec.Gamma() << endl; -// cout << "beta " << pi0_vec.Beta()<< endl; -// cout << "pion energy: " << pi0_vec.E() * fm << " " << pi0_vec.P() * fm << " " << l_photon_1_rf.E() << " " << pi0_vec_rf_g.E() << endl; -// cout << "Photon energy 1: " << l_photon_1_rf.E() << " P: " << l_photon_1_rf.P() << " After transformation " << l_photon_1.E() << " " << l_photon_1.P() << endl; -// cout << "Photon energy 2: " << l_photon_2_rf.E() << " P: " << l_photon_2_rf.P() << " After transformation " << l_photon_2.E() << " " << l_photon_2.P() << endl; -// cout << "angle: " << l_photon_1_rf.Vect().Angle(l_photon_2_rf.Vect()) * 180.0/fPi -// << " " << l_photon_1.Vect().Angle(l_photon_2.Vect()) * 180.0/fPi << endl; -// exit(0); + double photon_1_Mom_Col = photon_1_E; + double photon_1_MomZ_Col = ( photon_1_Mom_Col * cos(photon_1_theta) ); + double photon_1_MomX_Col = ( photon_1_Mom_Col * sin(photon_1_theta) * cos(photon_1_phi) ); + double photon_1_MomY_Col = ( photon_1_Mom_Col * sin(photon_1_theta) * sin(photon_1_phi) ); - double photons_1_sep = (tan(l_photon_1.Vect().Angle(pi0_vec.Vect())) * 32)*100; - double photons_2_sep = (tan(l_photon_2.Vect().Angle(pi0_vec.Vect())) * 32)*100; + l_photon_1_rf.SetPxPyPzE( photon_1_MomX_Col, photon_1_MomY_Col, photon_1_MomZ_Col, photon_1_E ); - double photons_seperation = photons_1_sep + photons_2_sep; - -// cout << "pi0_vec: " << pi0_vec.Vect().Theta() << " " << pi0_vec.Vect().Theta() << endl; -// cout << "Photon 1: " << l_photon_1.Vect().Theta() << " " << l_photon_1.Vect().Phi() << endl; -// cout << "Photon 2: " << l_photon_2.Vect().Theta() << " " << l_photon_2.Vect().Phi() << endl; -// cout << "photon prjecton at 32 meters: " << sin(l_photon_1.Vect().Angle(pi0_vec.Vect())) * 32 -// << " " << sin(l_photon_2.Vect().Angle(pi0_vec.Vect())) * 32 << " " -// << photons_seperation << endl; -// exit(0); + l_photon_2_rf.SetPxPyPzE( -photon_1_MomX_Col, -photon_1_MomY_Col, -photon_1_MomZ_Col, photon_1_E ); - ///*--------------------------------------------------*/ - /// Max angle formula: sin(theta) = m_pi/(2*E_gamma) - // - // Decay at 7.8m - // 2.6033 ± 0.0005 × 10−8 life time + l_photon_1 = l_photon_1_rf; + l_photon_2 = l_photon_2_rf; - /// ZDC is at 30 down stream - // Pi0 drift is 22.2 meters + TVector3 beta_col_rf_pi0_inverse = -pi0_vec.BoostVector(); - // cout << "Maximum angle: " << pi0_vec_rf_g.E() << " " << pi0_vec.E()*fm << " Angle in deg: " << asin(pi0_vec_rf_g.E()/(pi0_vec.E() * fm)) * 180/fPi << endl; + l_photon_1.Boost(beta_col_rf_pi0); + l_photon_2.Boost(beta_col_rf_pi0); - // 2.6*3 = 7.8m before decay + double photons_1_sep = (tan(l_photon_1.Vect().Angle(pi0_vec.Vect())) * 32)*100; + double photons_2_sep = (tan(l_photon_2.Vect().Angle(pi0_vec.Vect())) * 32)*100; - TLorentzVector photon_1_diff = l_photon_1 - pi0_vec*fm; + double photons_seperation = photons_1_sep + photons_2_sep; -// cout << "aa" << endl; -// cout << pi0_vec.Px() *fm << " " << pi0_vec.Py() *fm<< " " << pi0_vec.Pz() *fm<< " " << pi0_vec.E() *fm<< endl; -// cout << l_photon_1.Px() << " " << l_photon_1.Py() << " " << l_photon_1.Pz() << " " << l_photon_1.E() << endl; -// cout << photon_1_diff.Px() << " " << photon_1_diff.Py() << " " << photon_1_diff.Pz() << " " << photon_1_diff.E() << endl; - + ///*--------------------------------------------------*/ + /// Max angle formula: sin(theta) = m_pi/(2*E_gamma) + // + // Decay at 7.8m + // 2.6033 ± 0.0005 × 10−8 life time - double angle = atan(l_photon_1.Px()/l_photon_1.Py()); + /// ZDC is at 30 down stream + // Pi0 drift is 22.2 meters -// h1->Fill(photons_seperation); -// h2->Fill(photons_1_sep); -// h3->Fill(-photons_2_sep); + // 2.6*3 = 7.8m before decay -// cout << photons_1_sep << " " << l_photon_1.Vect().Phi() << " " << photons_2_sep << endl; + TLorentzVector photon_1_diff = l_photon_1 - pi0_vec*fm; -// photon_2d->Fill(photons_1_sep *sin(l_photon_1.Vect().Angle(pi0_vec.Vect())) * cos(l_photon_1.Vect().Phi()), photons_1_sep* sin(l_photon_1.Vect().Angle(pi0_vec.Vect())) *sin(l_photon_1.Vect().Phi()) ); -// photon_2d->Fill(photons_2_sep *cos(l_photon_2.Vect().Phi()), photons_2_sep*sin(l_photon_2.Vect().Phi())); + double angle = atan(l_photon_1.Px()/l_photon_1.Py()); -//photons_2_sep, l_photon_2.Vect().Phi() - -// cout << l_photon_1.Vect().Phi() << " " << l_photon_2.Vect().Phi() << endl; -// cout <<"check: " << photons_1_sep*sin(angle) << " " << photons_1_sep*cos(angle) << " " << angle << endl; -// photon_2d->Fill(l_photon_1.Vect().Phi(), l_photon_2.Vect().Phi()); -// cout << l_photon_1.Px() << " " << l_photon_1.Py() << endl; -// cout << photon_1.Gamma() << endl; -// cout << l_photon_1.Px()**1.1e-7 << " " << l_photon_1.Py()**1.1e-7 << endl; -// photon_2d->Fill(l_photon_1.Px()/0.134/l_photon_1.Gamma()*1.1e-7, l_photon_1.Py()/0.134/l_photon_1.Gamma()*1.1e-7); -// } - -// TCanvas* c1 = new TCanvas(); -// -// h3->SetFillColor(2); -// h3->SetLineColor(2); -// -// h2->SetFillColor(3); -// h2->SetLineColor(3); -// -// // h1->SetFillColor(4); -// h1->SetLineColor(4); -// -// h1->Draw("hist"); -// h2->Draw("same"); -// h3->Draw("same"); -// -// h1->Draw("same"); -// -// c1->Print("seperation.png"); -// photon_2d->Draw("colz"); -// c1->Print("seperation_aaa.png"); -// cout << "/*--------------------------------------------------*/" << endl; -// exit(0); - } + diff --git a/src/eic_evgen/process_routine/PiPlus_prod.cc b/src/eic_evgen/process_routine/PiPlus_prod.cc index 9f54a10..45ee450 100644 --- a/src/eic_evgen/process_routine/PiPlus_prod.cc +++ b/src/eic_evgen/process_routine/PiPlus_prod.cc @@ -15,7 +15,7 @@ PiPlus_Production::PiPlus_Production() { PiPlus_Production::PiPlus_Production(TString particle_str) { - rParticle = particle_str; + rParticle = particle_str; } @@ -27,9 +27,9 @@ PiPlus_Production::~PiPlus_Production() { } void PiPlus_Production::process_reaction() { - + Init(); - + if (gOutputType == "Pythia6"){ PiPlus_Pythia6_Out_Init(); } @@ -38,14 +38,14 @@ void PiPlus_Production::process_reaction() { } for( long long int i = 0; i < rNEvents; i++ ) { - + rNEvent_itt = i; fNGenerated ++; Progress_Report(); // This is happens at each 10% of the total event is processed Processing_Event(); } - + Detail_Output(); } @@ -60,7 +60,7 @@ void PiPlus_Production::Init() { sTFile = Form("./LundFiles/eic_%s.txt", gfile_name.Data()); sLFile= Form("./LundFiles/eic_input_%s.dat", gfile_name.Data()); - + ppiOut.open( sLFile.c_str() ); ppiDetails.open( sTFile.c_str() ); @@ -104,7 +104,7 @@ void PiPlus_Production::Init() { ///*--------------------------------------------------*/ - /// This rParticle_charge is referring to the charge of the preduced meson + /// This rParticle_charge is referring to the charge of the produced meson if (rParticle_charge == "+" ) { rParticle_scat_nucleon = "Neutron"; @@ -132,7 +132,7 @@ void PiPlus_Production::Init() { cout << "Produced particle in exclusive production: " << rParticle << "; with mass: " << fX_Mass << " MeV "<< endl; cout << fEBeam << " GeV electrons on " << fPBeam << " GeV ions" << endl; - + // Set luminosity value based upon beam energy combination // See slide 11 in https://indico.cern.ch/event/1072579/contributions/4796856/attachments/2456676/4210776/CAP-EIC-June-7-2022-Seryi-r2.pdf if ((fEBeam == 5.0 ) && (fPBeam == 41.0) ){ @@ -171,15 +171,11 @@ void PiPlus_Production::Init() { UnitVect = new TVector3(0,0,1); - Pion = new Particle(); - Proton_Particle = new Particle(); - - ///*--------------------------------------------------*/ - /// For testing + // Produced hadron and recoilded nucleon from the solve function - proton_mass_mev = fProton_Mass; - pion_mass_mev = 139.57; + r_lX_solved = new Particle(); + r_l_scat_nucleon_solved = new Particle(); Interaction = new Particle(); Target = new Particle(); @@ -188,11 +184,16 @@ void PiPlus_Production::Init() { VertBeamElec = new Particle(); VertScatElec = new Particle(); - Photon = new Particle(); - VertBeamElec->SetPxPyPzE(0, 0, 11000, 11000); - VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); - Target->SetPxPyPzE(0, 0, 0, 939.565); + Photon = new Particle(); + +// ///*--------------------------------------------------*/ +// /// For testing +// Photon = new Particle(); +// VertBeamElec->SetPxPyPzE(0, 0, 11000, 11000); +// VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); +// Target->SetPxPyPzE(0, 0, 0, 939.565); +// //*--------------------------------------------------*/ @@ -206,23 +207,8 @@ void PiPlus_Production::Processing_Event() { if( kCalcFermi ) { Consider_Proton_Fermi_Momentum(); - } - - - - - - - - - - - - - - // ---------------------------------------------------- // Boost vector from collider (lab) frame to protons rest frame (Fix target) // ---------------------------------------------------- @@ -280,8 +266,6 @@ void PiPlus_Production::Processing_Event() { lwg = r_lprotong + r_lphotong; fW_GeV = lwg.Mag(); fWSq_GeV = lwg.Mag2(); - - if ( fWSq_GeV < 0 ) { @@ -289,152 +273,20 @@ void PiPlus_Production::Processing_Event() { return; } + ///*--------------------------------------------------*/ // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum // --------------------------------------------------------- - // Pion momentum in collider frame, analytic solution starts + // pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- - *Photon = *VertBeamElec - *VertScatElec; - *Interaction = *Photon; - - Solve(); - -// -// Float_t pion_theta_i, pion_phi_i; -// -// pion_theta_i = 0.282478; -// pion_phi_i = 3.49651; -// -// TVector3* UnitVect = new TVector3(0,0,1); -// UnitVect->SetTheta(pion_theta_i); -// UnitVect->SetPhi(pion_phi_i); -// UnitVect->SetMag(1); -// -// -// r_lelectron + r_lproton; -// - -// -// -// Particle* VertBeamElec = new Particle(); -// Particle* VertScatElec = new Particle(); -// -// Particle* Photon = new Particle(); -// -// VertBeamElec->SetPxPyPzE(0, 0, 11000, 11000); -// VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); -// Target->SetPxPyPzE(0, 0, 0, 939.565); -// -// *Photon = *VertBeamElec - *VertScatElec; -// *Interaction = *Photon; -// -//// Interaction->SetName("VirtPhot"); -//// Interaction->SetVx(868.374); -//// Interaction->SetVy(1281.64); -//// Interaction->SetVz(7854.51); -// -// -// *Initial = *Interaction+*Target; -// -// double pars[9]; -// pars[0] = UnitVect->X(); -// pars[1] = UnitVect->Y(); -// pars[2] = UnitVect->Z(); -// -// pars[3] = Initial->Px(); -// pars[4] = Initial->Py(); -// pars[5] = Initial->Pz(); -// pars[6] = Initial->E(); -// -// pars[7] = pion_mass_mev; -// pars[8] = proton_mass_mev; -// -// cout << Interaction->Px() << " " << Interaction->Py() << " " -// << Interaction->Pz() << " " << Interaction->E() << " "<< Interaction->GetMass() << endl; -// -// F->SetParameters(pars); -// -// double P = F->GetX(0, 0, pars[6], 0.0001, 10000); -// -// //std::cout << "Zero: " << F->Eval(P) << std::endl; -// -// Pion = new Particle(); -// Proton_Particle = new Particle(); -// -// Particle * Pion1 = new Particle(pion_mass_mev, -// P*pars[0], -// P*pars[1], -// P*pars[2]); -// *Pion = *Pion1; -// -// cout << endl; -// cout << pars[0] << " " << pars[1] << " " << pars[2] << endl; -// cout << pars[3] << " " << pars[4] << " " << pars[5] << endl; -// cout << pars[6] << " " << pars[7] << " " << pars[8] << endl; -// -// -// Particle * Proton1 = new Particle(); -// *Proton1 = *Initial-*Pion; -// *Proton_Particle = *Proton1; -// -// cout << Pion->E() << " " << Proton_Particle->E() << endl; -// -// if (TMath::Abs(F->Eval(P)) > 1){ -// delete Pion1; -// delete Proton1; -// } -//// cout << (*Initial).Mag2() << endl; -// -// cout << "AAAAAAAA " << SolnCheck() << endl; -// -// if (!SolnCheck()){ -// delete Pion1; -// delete Proton1; -// } -// -// //Check for Second solution: -// double P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); -// -// if (TMath::Abs(F->Eval(P2))> 1){ -// //No second soln -// delete Pion1; -// delete Proton1; -// } -// -// -// //Try second solution -// Particle * Pion2 = new Particle(pion_mass_mev, -// P*pars[0], -// P*pars[1], -// P*pars[2]); -// *Pion = *Pion2; -// -// Particle * Proton2 = new Particle(); -// *Proton2 = *Initial - * Pion; -// *Proton_Particle = *Proton2; -// -// if (SolnCheck()){ -// //Toss a coin -// if (CoinToss->Uniform(0,1)>0.5){ -//// delete Pion1; -//// delete Pion2; -//// delete Proton1; -//// delete Proton2; -// } -// } -// -// //Either SolnCheck or coin toss failed -// //Revert to original solution -// -// *Proton_Particle = *Proton1; -// *Pion = *Pion1; -// -// delete Pion1; -// delete Pion2; -// delete Proton1; -// delete Proton2; -// -// exit(0); + ///*--------------------------------------------------*/ + /// Modifier: Ishan Goel + /// Date: March 22, 2023 + /// This Solve function is the same as the one implemented in the SoLID generator part + // Removing cases with no solution + if(!Solve()){ + return; + } /*--------------------------------------------------*/ @@ -474,33 +326,38 @@ void PiPlus_Production::Processing_Event() { fepi1 = ( -fQB - sqrt( fradical ) ) / ( 2.0 * fQA ); fepi2 = ( -fQB + sqrt( fradical ) ) / ( 2.0 * fQA ); - // --------------------------------------------------------- - // Particle X momentum in collider frame, analytic solution ends - // --------------------------------------------------------- + ///--------------------------------------------------------- + /// Particle X momentum in collider frame, analytic solution + /// And obtain recoiled proton in collider (lab) frame + ///--------------------------------------------------------- - r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), - fepi1 ); - - r_lX_g = r_lX * fm; +// r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), +// ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), +// ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), +// fepi1 ); +// +// r_l_scat_nucleon.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), +// ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), +// ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), +// sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + +// pow( f_Scat_Nucleon_Mass , 2) ) ); - // ---------------------------------------------------- - // Scattered proton collider (lab) frame - // ---------------------------------------------------- + ///-------------------------------------------------- + /// Output with the Solve Function + /// Setting the solution values to X and recoiled nucleon - r_l_scat_nucleon.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), - sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + - pow( f_Scat_Nucleon_Mass ,2 ) ) ); + r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); + r_l_scat_nucleon.SetPxPyPzE(r_l_scat_nucleon_solved->Px(), r_l_scat_nucleon_solved->Py(), r_l_scat_nucleon_solved->Pz(), r_l_scat_nucleon_solved->E()); + ///-------------------------------------------------- + + r_lX_g = r_lX * fm; r_l_scat_nucleon_g = r_l_scat_nucleon * fm; // ---------------------------------------------------------------------------------------------- // Calculate w = (proton + photon)^2 // ---------------------------------------------------------------------------------------------- - + if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { w_ev++; return; @@ -512,7 +369,7 @@ void PiPlus_Production::Processing_Event() { // ---------------------------------------------------------------------------------------------- // Calculate w prime w' = (proton + photon - pion)^2 // ---------------------------------------------------------------------------------------------- - + lwp = r_lprotong + r_lphotong - r_lX_g; fW_Prime_GeV = lwp.Mag(); @@ -578,10 +435,10 @@ void PiPlus_Production::Processing_Event() { // Calculate -t // ----------------------------------------------------------------------------------------- - fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); - fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; - fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_Nucleon_Mass , 2) ) / ( 2.0 * fW); - fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); + fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / (lphoton_rf.E() + fProton_Mass ); + fGamma_CM_RF = (lphoton_rf.E() + fProton_Mass) / fW; + fX_Energy_CM = (pow(fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_Nucleon_Mass , 2) ) / ( 2.0 * fW); + fX_Mom_CM = sqrt(pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; @@ -741,7 +598,7 @@ void PiPlus_Production::Processing_Event() { fRatio = fNRecorded / fNGenerated; if (gOutputType == "Pythia6"){ - PiPlus_Pythia6_Output(); + PiPlus_Pythia6_Output(); } else if (gOutputType == "LUND"){ Lund_Output(); @@ -768,16 +625,16 @@ void PiPlus_Production::Progress_Report() { TLorentzVector PiPlus_Production::GetProtonVector_lab() { - // Crossing angle + ///*--------------------------------------------------*/ + // // SJDK - 12/01/22 + // // Crossing angle + // // Set crossing angle to 0 for fun4all, also required for ATHENA simulations // fProton_Theta_Col = 0.050; // fProton_Theta_Col = 0.025; - // SJDK - 12/01/22 - // Set crossing angle to 0 for fun4all, also required for ATHENA simulations + fProton_Theta_Col = 0.0; ///*--------------------------------------------------*/ - /// The - // fProton_Phi_Col = fPi; fProton_Phi_Col = fProton_incidence_phi; fProton_Mom_Col = fPBeam * 1e3; @@ -1000,7 +857,7 @@ void PiPlus_Production::Detail_Output() { ppiDetails << "Number of events failing conservation law check " << setw(20) << fConserve << endl; ppiDetails << "Total events passing conservation laws " << setw(20) << conserve << endl; ppiDetails << "Total events failed energy conservation " << setw(20) << ene << endl; - ppiDetails << "Total events failed momentum conserveation " << setw(20) << mom << endl; + ppiDetails << "Total events failed momentum conservation " << setw(20) << mom << endl; ppiDetails << "Number of events with -t more than threshold " << setw(20) << t_ev << endl; // SJDK 21/06/21 - Commenting out, reverting to old weight determination //ppiDetails << "Number of events with unit weight outside of 0 to 1 " << setw(20) << fNWeightUnphys << endl; @@ -1085,14 +942,14 @@ void PiPlus_Production::Lund_Output() { void PiPlus_Production::PiPlus_Pythia6_Out_Init() { - print_itt = 0; + print_itt = 0; - ppiOut << "DEMP Event FILE" << endl; - ppiOut << "============================================" << endl; - ppiOut << "I, ievent, nParticles, Weight" << endl; - ppiOut << "============================================" << endl; - ppiOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; - ppiOut << "============================================" << endl; + ppiOut << "DEMP Event FILE" << endl; + ppiOut << "============================================" << endl; + ppiOut << "I, ievent, nParticles, Weight" << endl; + ppiOut << "============================================" << endl; + ppiOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; + ppiOut << "============================================" << endl; } @@ -1258,16 +1115,13 @@ void PiPlus_Production::PiPlus_HEPMC3_Output() { } - - - /*--------------------------------------------------*/ bool PiPlus_Production::SolnCheck() { // Double Checking for solution viability - if (TMath::Abs(proton_mass_mev- Proton_Particle->M())>1){ + if (TMath::Abs(f_Scat_Nucleon_Mass-r_l_scat_nucleon_solved->M())>1){ //cerr << "Mass Missmatch" << endl; //cerr << TMath::Abs(proton_mass_mev-Proton->M()) << endl; return false; @@ -1277,7 +1131,7 @@ bool PiPlus_Production::SolnCheck() //cerr << TMath::Abs(W_in()-W_out()) << endl; return false; } - *Final = *Proton_Particle + *Pion; + *Final = *r_l_scat_nucleon_solved + *r_lX_solved; if (TMath::Abs(Initial->Px()-Final->Px())>1){ //cerr << "Px Missmatch" << endl; @@ -1312,20 +1166,34 @@ double PiPlus_Production::W_in() /*--------------------------------------------------*/ double PiPlus_Production::W_out() { - return (*Proton_Particle+*Pion).Mag2(); + return (*r_l_scat_nucleon_solved+*r_lX_solved).Mag2(); } /*--------------------------------------------------*/ int PiPlus_Production::Solve() { - double theta = AngleGen->Theta(); - double phi = AngleGen->Phi(); +// double theta = AngleGen->Theta(); +// double phi = AngleGen->Phi(); +// theta = 0.282478; +// phi = 3.49651; +// cout << " Theta Phi: "<< theta << " " << phi << endl; + - theta = 0.282478; - phi = 3.49651; + // Setting the initial values for solve function + VertBeamElec->SetPxPyPzE(r_lelectron.Px(), r_lelectron.Py(), r_lelectron.Pz(), r_lelectron.E()); + VertScatElec->SetPxPyPzE(r_lscatelec.Px(), r_lscatelec.Py(), r_lscatelec.Pz(), r_lscatelec.E()); + Target->SetPxPyPzE(r_lproton.Px(), r_lproton.Py(), r_lproton.Pz(), r_lproton.E()); - cout << " Theta Phi: "<< theta << " " << phi << endl; + *Photon = *VertBeamElec - *VertScatElec; + *Interaction = *Photon; + + *Initial = *Interaction+*Target; + + /*--------------------------------------------------*/ + + theta = fX_Theta_Col; + phi = fX_Phi_Col; return this->Solve(theta, phi); @@ -1335,24 +1203,20 @@ int PiPlus_Production::Solve() int PiPlus_Production::Solve(double theta, double phi) { - *Initial = *Interaction+*Target; W_in_val = W_in(); - if (W_in_val<0){ - //cout << "W < 0 " << endl; - return 1; + return 0; } - - //cout << proton_mass_mev << endl; - UnitVect->SetTheta(theta); UnitVect->SetPhi(phi); UnitVect->SetMag(1); - + + double* pars = new double[9]; + pars[0] = UnitVect->X(); pars[1] = UnitVect->Y(); pars[2] = UnitVect->Z(); @@ -1360,107 +1224,56 @@ int PiPlus_Production::Solve(double theta, double phi) pars[4] = Initial->Py(); pars[5] = Initial->Pz(); pars[6] = Initial->E(); - pars[7] = pion_mass_mev; - pars[8] = proton_mass_mev; - - - cout << Interaction->Px() << " " << Interaction->Py() << " " << Interaction->Pz() << " " << Interaction->E() << " " << Interaction->GetMass() << endl; - - cout << Target->Px() << " " << Target->Py() << " " << Target->Pz() << " " << Target->E() << " " << Target->GetMass() << endl; - - - cout << endl; - cout << pars[0] << " " << pars[1] << " " << pars[2] << endl; - cout << pars[3] << " " << pars[4] << " " << pars[5] << endl; - cout << pars[6] << " " << pars[7] << " " << pars[8] << endl; - - - cout << "P6 " << pars[6] << endl; + pars[7] = fX_Mass; + pars[8] = f_Scat_Nucleon_Mass; F->SetParameters(pars); - double P = F->GetX(0, 0, pars[6], 0.0001, 10000); - - //std::cout << "Zero: " << F->Eval(P) << std::endl; - + P = F->GetX(0, 0, pars[6], 0.0001, 10000); - Particle * Pion1 = new Particle(pion_mass_mev, + Particle * r_lX_temp = new Particle(fX_Mass, P*pars[0], P*pars[1], P*pars[2]); - *Pion = *Pion1; - - Particle * Proton1 = new Particle(); - *Proton1 = *Initial-*Pion; - *Proton_Particle = *Proton1; - - cout << Pion->E() << " " << Proton_Particle->E() << endl; + r_lX_solved->SetPxPyPzE(r_lX_temp->Px(), r_lX_temp->Py(), r_lX_temp->Pz(), r_lX_temp->E()); - cout << "AAAAAAAA++++ " << SolnCheck() << endl; - cout << "AAAAAAAA++++ " << P << " " << TMath::Abs(F->Eval(P)) << endl; + Particle * r_l_nucleon_temp= new Particle(); + *r_l_nucleon_temp = *Initial-*r_lX_solved; + r_l_scat_nucleon_solved->SetPxPyPzE(r_l_nucleon_temp->Px(), r_l_nucleon_temp->Py(), r_l_nucleon_temp->Pz(), r_l_nucleon_temp->E()); - if (TMath::Abs(F->Eval(P)) > 1){ - - cout << "++++ " << SolnCheck() << endl; - delete Pion1; - delete Proton1; - return 1; - } - cout << "AAAAAAAA " << SolnCheck() << endl; - - if (!SolnCheck()){ - delete Pion1; - delete Proton1; - return 1; - } - - - //Check for Second solution: - double P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); - - if (TMath::Abs(F->Eval(P2))> 1){ - //No second soln - delete Pion1; - delete Proton1; - return 0; - } - - exit(0); - - //Try second solution - Particle * Pion2 = new Particle(pion_mass_mev, - P*pars[0], - P*pars[1], - P*pars[2]); - *Pion = *Pion2; - - Particle * Proton2 = new Particle(); - *Proton2 = *Initial - * Pion; - *Proton_Particle = *Proton2; - - if (SolnCheck()){ - //Toss a coin - if (CoinToss->Uniform(0,1)>0.5){ - delete Pion1; - delete Pion2; - delete Proton1; - delete Proton2; - return 0; // Keep second solution + delete r_lX_temp; + delete r_l_nucleon_temp; + delete[] pars; + + if (TMath::Abs(F->Eval(P)) < 1){ + if (SolnCheck()){ + return 1; } } - //Either SolnCheck or coin toss failed - //Revert to original solution - - *Proton_Particle = *Proton1; - *Pion = *Pion1; - - delete Pion1; - delete Pion2; - delete Proton1; - delete Proton2; - - exit(0); + ///*--------------------------------------------------*/ + /// Modifier: Ishan Goel + /// Date: March 22, 2023 + /// Commenting out second solution as it is not giving any solution ever + /// Check for Second solution: + // P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); + ///Try second solution + // Particle * Pion2 = new Particle(pion_mass_mev, + // P*pars[0], + // P*pars[1], + // P*pars[2]); + // Pion->SetPxPyPzE(Pion2->Px(), Pion2->Py(), Pion2->Pz(), Pion2->E()); + // Particle * Proton2 = new Particle(); + // *Proton2 = *Initial - * Pion; + // Proton_Particle->SetPxPyPzE(Proton2->Px(), Proton2->Py(), Proton2->Pz(), Proton2->E()); + // delete Pion2; + // delete Proton2; + // if (TMath::Abs(F->Eval(P2)) < 1){ + // if (SolnCheck()){ + // return 1; + // } + // } + ///*--------------------------------------------------*/ return 0; diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index 7b10244..6e48b4c 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -125,6 +125,9 @@ class PiPlus_Production { TLorentzVector r_lX; TLorentzVector r_lX_g; + Particle* r_lX_solved; + Particle* r_l_scat_nucleon_solved; + double fX_Mass; double fX_Mass_GeV; @@ -170,10 +173,12 @@ class PiPlus_Production { /// Center of Mass parameters for particle X double fBeta_CM_RF, fGamma_CM_RF, fX_Energy_CM, fX_Mom_CM, fX_Energy_CM_GeV, fX_Mom_CM_GeV; - + double_t Theta_cm; TLorentzVector lt; TLorentzVector ltg; - + TLorentzVector lu; + TLorentzVector lug; + /////////////////////////////////////////// TVector3 v3Photon; @@ -201,10 +206,8 @@ class PiPlus_Production { ///*--------------------------------------------------*/ // Rory Check algorithm - Float_t proton_mass_mev, pion_mass_mev; - - Particle* Pion; - Particle* Proton_Particle; +// Particle* Pion; +// Particle* Proton_Particle; Particle* Interaction; Particle* Target; @@ -212,6 +215,10 @@ class PiPlus_Production { Particle* Initial; Particle* Final; + Particle* VertBeamElec; + Particle* VertScatElec; + Particle* Photon; + bool SolnCheck(); double W_in(); double W_out(); @@ -228,11 +235,18 @@ class PiPlus_Production { ///*--------------------------------------------------*/ // Needed for the Solve function - double pars[9]; - Particle* VertBeamElec ; - Particle* VertScatElec ; - Particle* Photon ; + + double theta; + double phi; + double P; + double P2; + + double tc; + double tc_GeV; + double uc; + double uc_GeV; + ///*--------------------------------------------------*/ }; @@ -278,6 +292,12 @@ class Pi0_Production:PiPlus_Production{ void Pi0_Decay_Pythia6_Out_Init(); void Pi0_Decay_Pythia6_Output(); + + ///----------------------------------------------------*/ + /// Output algorithm into HEPMC3 format + + void Pi0_HEPMC3_Out_Init(); + void Pi0_HEPMC3_Output(); unsigned long long int print_itt; @@ -389,6 +409,7 @@ class KPlus_Production { TLorentzVector r_lphotong; TLorentzVector r_lX; TLorentzVector r_lX_g; + double fX_Mass; double fX_Mass_GeV; double f_Scat_hadron_Mass; @@ -452,10 +473,6 @@ class KPlus_Production { Double_t r_fSig_L; unsigned long long int print_itt; - - - - }; From da4b42e333bd4b3a7420190a1e7abbe4d7445650 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Mon, 3 Apr 2023 10:10:00 -0600 Subject: [PATCH 19/35] Merging in Love's updates to the KPlus paramterisation --- .../CrossSection_Params/KPlusSigma_Param_sigL | 2 +- .../KPlusSigma_Param_sigL_22_02_23 | 315 ++++++++++ src/eic_evgen/KPlus_sig.cc | 566 ++++++++++++++---- 3 files changed, 771 insertions(+), 112 deletions(-) create mode 100644 src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL_22_02_23 diff --git a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL index bd92df5..5bc5e1e 120000 --- a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL +++ b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL @@ -1 +1 @@ -KPlusSigma_Param_sigL_27_01_23 \ No newline at end of file +KPlusSigma_Param_sigL_22_02_23 \ No newline at end of file diff --git a/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL_22_02_23 b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL_22_02_23 new file mode 100644 index 0000000..e7a5692 --- /dev/null +++ b/src/eic_evgen/CrossSection_Params/KPlusSigma_Param_sigL_22_02_23 @@ -0,0 +1,315 @@ +2 1 -1.06486 -4.32502 0 -1.35449 -3.85382 -3.35892 -2.28367 0.363213 0.614658 1.27659 -10001 +2 2 0 0 0 -1.55438 -3.34603 -2.15997 -2.84679 -10001 0.698174 1.21304 -10001 +2 3 0 0 0 -1.97771 -2.89502 -2.36429 -2.58857 -10001 1.05257 1.26146 -10001 +2 4 0 0 0 0 0 -2.76633 -2.30213 -10001 -10001 1.41797 -10001 +2 5 0 0 0 0 0 -3.21404 -2.0441 -10001 -10001 1.79032 -10001 +2 6 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 7 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 8 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 9 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 10 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 11 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 12 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 13 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 14 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 15 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 16 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 17 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 18 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 19 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 20 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 21 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 22 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 23 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 24 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 25 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 26 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 27 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 28 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 29 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 30 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 31 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 32 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 33 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 34 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +2 35 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 1 -3.12513 -4.71948 0 -3.55693 -3.9995 -4.26556 -3.40264 0.105389 0.599735 1.18726 -10001 +3 2 -3.19229 -4.63561 0 -3.63547 -3.91114 -4.36562 -3.30206 0.207833 0.611726 1.19878 -10001 +3 3 -3.39852 -4.49937 0 -3.79834 -3.86325 -4.55111 -3.23233 0.321569 0.62853 1.19313 -10001 +3 4 -3.62925 -4.35093 0 -3.97789 -3.81756 -4.74693 -3.17445 0.443596 0.653656 1.1958 -10001 +3 5 0 0 0 -4.09819 -3.83422 -4.91422 -3.13672 -10001 0.571923 1.16993 -10001 +3 6 0 0 0 -4.35894 -3.70054 -5.09532 -3.09111 -10001 0.705166 1.2083 -10001 +3 7 0 0 0 -4.59253 -3.59196 -5.23129 -3.07163 -10001 0.842329 1.22762 -10001 +3 8 0 0 0 -4.82926 -3.47763 -5.38251 -3.04149 -10001 0.982674 1.26851 -10001 +3 9 0 0 0 -5.03972 -3.3861 -5.51701 -3.01617 -10001 1.12564 1.29021 -10001 +3 10 0 0 0 0 0 -5.6787 -2.97589 -10001 -10001 1.2708 -10001 +3 11 0 0 0 0 0 -5.89917 -2.89926 -10001 -10001 1.4178 -10001 +3 12 0 0 0 0 0 -6.11083 -2.82841 -10001 -10001 1.56638 -10001 +3 13 0 0 0 0 0 -6.31363 -2.76192 -10001 -10001 1.71631 -10001 +3 14 0 0 0 0 0 -6.50882 -2.69925 -10001 -10001 1.86741 -10001 +3 15 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 16 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 17 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 18 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 19 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 20 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 21 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 22 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 23 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 24 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 25 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 26 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 27 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 28 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 29 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 30 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 31 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 32 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 33 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 34 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +3 35 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 1 0.0092981 -0.0319958 0.0164839 -4.60536 -4.98399 -5.56534 -3.96753 0.05119 0.179352 0.944437 -10001 +4 2 -0.00507038 0.222091 -1.09821 -4.63002 -4.97214 -5.62527 -3.92921 0.098845 0.133139 0.954282 -10001 +4 3 0 0 0 -4.76719 -4.97113 -5.76682 -3.91481 -10001 0.151366 0.946334 -10001 +4 4 0 0 0 -4.94943 -4.92275 -5.92553 -3.9 -10001 0.207939 0.954389 -10001 +4 5 0 0 0 -5.13884 -4.85734 -6.08224 -3.88468 -10001 0.26793 0.969908 -10001 +4 6 0 0 0 -5.32491 -4.78885 -6.23255 -3.86879 -10001 0.330831 0.986502 -10001 +4 7 0 0 0 -5.50547 -4.71867 -6.37581 -3.85236 -10001 0.396233 1.00465 -10001 +4 8 0 0 0 -5.66997 -4.66632 -6.4865 -3.85004 -10001 0.463802 1.00031 -10001 +4 9 0 0 0 -5.83554 -4.59509 -6.60511 -3.84308 -10001 0.533262 1.02335 -10001 +4 10 0 0 0 -5.99642 -4.52682 -6.73029 -3.82511 -10001 0.604383 1.04582 -10001 +4 11 0 0 0 -6.1385 -4.47801 -6.8247 -3.82143 -10001 0.676972 1.0451 -10001 +4 12 0 0 0 -6.28832 -4.41315 -6.92893 -3.81317 -10001 0.750864 1.06771 -10001 +4 13 0 0 0 -6.41822 -4.36751 -7.0153 -3.80873 -10001 0.82592 1.06855 -10001 +4 14 0 0 0 -6.55895 -4.30585 -7.1124 -3.79973 -10001 0.902018 1.0935 -10001 +4 15 0 0 0 0 0 -7.16577 -3.80964 -10001 -10001 0.979054 -10001 +4 16 0 0 0 0 0 -7.3096 -3.77035 -10001 -10001 1.05694 -10001 +4 17 0 0 0 0 0 -7.44537 -3.73084 -10001 -10001 1.13559 -10001 +4 18 0 0 0 0 0 -7.59231 -3.68372 -10001 -10001 1.21494 -10001 +4 19 0 0 0 0 0 -7.72137 -3.64827 -10001 -10001 1.29493 -10001 +4 20 0 0 0 0 0 -7.84611 -3.61396 -10001 -10001 1.37551 -10001 +4 21 0 0 0 0 0 -7.98266 -3.57066 -10001 -10001 1.45662 -10001 +4 22 0 0 0 0 0 -8.10048 -3.53854 -10001 -10001 1.53822 -10001 +4 23 0 0 0 0 0 -8.21467 -3.50728 -10001 -10001 1.62027 -10001 +4 24 0 0 0 0 0 -8.32587 -3.47697 -10001 -10001 1.70275 -10001 +4 25 0 0 0 0 0 -8.45212 -3.43781 -10001 -10001 1.78561 -10001 +4 26 0 0 0 0 0 -8.55839 -3.40922 -10001 -10001 1.86884 -10001 +4 27 0 0 0 0 0 -8.66228 -3.3814 -10001 -10001 1.9524 -10001 +4 28 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 29 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 30 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 31 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 32 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 33 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 34 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +4 35 0 0 0 0 0 0 0 -10001 -10001 -10001 -10001 +5 1 0.00297739 -0.0084599 -0.00919778 -5.66912 -5.4644 -6.64739 -4.45531 0.030556 0.142942 0.969445 -10001 +5 2 0.00309186 -0.0117742 0.00932944 -5.69067 -5.45454 -6.66161 -4.44913 0.057943 0.18 0.965716 -10001 +5 3 0.00279868 -0.0116709 0.0135217 -5.82003 -5.4515 -6.79431 -4.44179 0.087604 0.18 0.964912 -10001 +5 4 0 0 0 -5.9511 -5.45439 -6.94436 -4.43342 -10001 0.119286 0.97286 -10001 +5 5 0 0 0 -6.09759 -5.45191 -7.09246 -4.42413 -10001 0.152771 0.96798 -10001 +5 6 0 0 0 -6.24395 -5.43176 -7.23416 -4.414 -10001 0.187871 0.97293 -10001 +5 7 0 0 0 -6.38238 -5.41774 -7.34277 -4.41754 -10001 0.224426 0.960191 -10001 +5 8 0 0 0 -6.52162 -5.38132 -7.45875 -4.41659 -10001 0.262297 0.971386 -10001 +5 9 0 0 0 -6.65695 -5.34101 -7.57779 -4.4024 -10001 0.301359 0.981052 -10001 +5 10 0 0 0 -6.78085 -5.31607 -7.67088 -4.40598 -10001 0.341506 0.977966 -10001 +5 11 0 0 0 -6.90782 -5.27217 -7.76775 -4.40127 -10001 0.382644 0.987399 -10001 +5 12 0 0 0 -7.02901 -5.22477 -7.87509 -4.38729 -10001 0.424689 1.01027 -10001 +5 13 0 0 0 -7.13892 -5.19763 -7.95278 -4.38745 -10001 0.467565 1.00454 -10001 +5 14 0 0 0 -7.25499 -5.15257 -8.04106 -4.38326 -10001 0.511207 1.02178 -10001 +5 15 0 0 0 -7.35678 -5.12648 -8.11241 -4.3826 -10001 0.555555 1.01579 -10001 +5 16 0 0 0 -7.4668 -5.08097 -8.19501 -4.37763 -10001 0.600557 1.03536 -10001 +5 17 0 0 0 -7.5616 -5.05458 -8.26122 -4.37626 -10001 0.646163 1.03138 -10001 +5 18 0 0 0 -7.66665 -5.0109 -8.33917 -4.37063 -10001 0.69233 1.05038 -10001 +5 19 0 0 0 -7.75525 -4.98521 -8.40114 -4.36863 -10001 0.739019 1.04753 -10001 +5 20 0 0 0 -7.85579 -4.94243 -8.4752 -4.36243 -10001 0.786195 1.06795 -10001 +5 21 0 0 0 -7.93949 -4.91766 -8.52151 -4.3706 -10001 0.833825 1.06391 -10001 +5 22 0 0 0 -8.02069 -4.89331 -8.57828 -4.36781 -10001 0.881879 1.06107 -10001 +5 23 0 0 0 -8.1159 -4.85201 -8.64761 -4.36084 -10001 0.93033 1.08254 -10001 +5 24 0 0 0 0 0 -8.67514 -4.37242 -10001 -10001 0.979154 -10001 +5 25 0 0 0 0 0 -8.76825 -4.35022 -10001 -10001 1.02833 -10001 +5 26 0 0 0 0 0 -8.85889 -4.32849 -10001 -10001 1.07783 -10001 +5 27 0 0 0 0 0 -8.96034 -4.2966 -10001 -10001 1.12764 -10001 +5 28 0 0 0 0 0 -9.04687 -4.27576 -10001 -10001 1.17774 -10001 +5 29 0 0 0 0 0 -9.13127 -4.25533 -10001 -10001 1.22812 -10001 +5 30 0 0 0 0 0 -9.22802 -4.22491 -10001 -10001 1.27876 -10001 +5 31 0 0 0 0 0 -9.30888 -4.20526 -10001 -10001 1.32964 -10001 +5 32 0 0 0 0 0 -9.38788 -4.18597 -10001 -10001 1.38076 -10001 +5 33 0 0 0 0 0 -9.46534 -4.1671 -10001 -10001 1.4321 -10001 +5 34 0 0 0 0 0 -9.55737 -4.13857 -10001 -10001 1.48365 -10001 +5 35 0 0 0 0 0 -9.63112 -4.12006 -10001 -10001 1.53539 -10001 +6 1 0.00121855 -0.00365334 -0.00306274 -6.53685 -5.90228 -7.49324 -4.90867 0.020419 0.153488 0.962543 -10001 +6 2 0.00124592 -0.00427547 -0.00027275 -6.54033 -5.89429 -7.5219 -4.89016 0.038235 0.152298 0.977533 -10001 +6 3 0.00114311 -0.00463405 0.00411689 -6.66564 -5.89413 -7.63098 -4.89582 0.057226 0.18 0.966977 -10001 +6 4 0.00101521 -0.0043379 0.00475617 -6.79839 -5.90067 -7.76897 -4.8901 0.077299 0.18 0.960431 -10001 +6 5 0.000437185 0.00433374 -0.0317888 -6.93229 -5.89048 -7.91873 -4.88005 0.098369 0.136375 0.976255 -10001 +6 6 0 0 0 -7.05005 -5.88125 -8.036 -4.88377 -10001 0.120362 0.988446 -10001 +6 7 0 0 0 -7.16881 -5.89114 -8.14597 -4.88696 -10001 0.14321 0.973096 -10001 +6 8 0 0 0 -7.2856 -5.89638 -8.26096 -4.87892 -10001 0.166851 0.958618 -10001 +6 9 0 0 0 -7.3964 -5.88902 -8.35783 -4.88113 -10001 0.191231 0.953897 -10001 +6 10 0 0 0 -7.50835 -5.86029 -8.47516 -4.86845 -10001 0.216299 0.974769 -10001 +6 11 0 0 0 -7.61239 -5.84436 -8.56172 -4.86977 -10001 0.24201 0.974086 -10001 +6 12 0 0 0 -7.71309 -5.82604 -8.644 -4.87071 -10001 0.268321 0.974439 -10001 +6 13 0 0 0 -7.80799 -5.80168 -8.72249 -4.87128 -10001 0.295195 0.982914 -10001 +6 14 0 0 0 -7.90237 -5.78038 -8.7976 -4.87151 -10001 0.322596 0.985002 -10001 +6 15 0 0 0 -7.99397 -5.75814 -8.86969 -4.87142 -10001 0.350493 0.987594 -10001 +6 16 0 0 0 -8.08296 -5.73523 -8.95104 -4.86022 -10001 0.378856 0.992075 -10001 +6 17 0 0 0 -8.16949 -5.71463 -9.01796 -4.85951 -10001 0.407658 0.992225 -10001 +6 18 0 0 0 -8.25375 -5.68812 -9.08266 -4.85853 -10001 0.436874 0.999171 -10001 +6 19 0 0 0 -8.33585 -5.66418 -9.14533 -4.85728 -10001 0.46648 1.00321 -10001 +6 20 0 0 0 -8.4159 -5.64011 -9.20615 -4.85579 -10001 0.496456 1.00756 -10001 +6 21 0 0 0 -8.49405 -5.61598 -9.26527 -4.85406 -10001 0.52678 1.01221 -10001 +6 22 0 0 0 -8.5704 -5.59185 -9.32282 -4.85211 -10001 0.557436 1.01715 -10001 +6 23 0 0 0 -8.64506 -5.56776 -9.37892 -4.84995 -10001 0.588405 1.02237 -10001 +6 24 0 0 0 -8.71817 -5.54378 -9.43368 -4.84759 -10001 0.619671 1.02776 -10001 +6 25 0 0 0 -8.79032 -5.52018 -9.47516 -4.85586 -10001 0.651221 1.03088 -10001 +6 26 0 0 0 -8.85991 -5.49612 -9.52749 -4.85312 -10001 0.683039 1.03822 -10001 +6 27 0 0 0 -8.92877 -5.47251 -9.57873 -4.85021 -10001 0.715112 1.04444 -10001 +6 28 0 0 0 -8.99639 -5.44907 -9.62895 -4.84713 -10001 0.747429 1.05088 -10001 +6 29 0 0 0 -9.06295 -5.42584 -9.6782 -4.8439 -10001 0.779978 1.05725 -10001 +6 30 0 0 0 -9.12821 -5.4027 -9.72656 -4.84053 -10001 0.812748 1.06435 -10001 +6 31 0 0 0 -9.19254 -5.3798 -9.77405 -4.83701 -10001 0.84573 1.07133 -10001 +6 32 0 0 0 -9.25593 -5.3571 -9.82075 -4.83336 -10001 0.878913 1.07843 -10001 +6 33 0 0 0 -9.30246 -5.35174 -9.84062 -4.84402 -10001 0.91229 1.05994 -10001 +6 34 0 0 0 -9.36381 -5.32932 -9.88584 -4.84009 -10001 0.94585 1.06703 -10001 +6 35 0 0 0 0 0 -9.90396 -4.85066 -10001 -10001 0.979588 -10001 +7 1 0.000574178 -0.00168194 -0.00234487 -7.25938 -6.28872 -8.22151 -5.2978 0.014654 0.142019 0.970956 -10001 +7 2 0.000592207 -0.00213331 0.000235571 -7.26296 -6.27976 -8.22494 -5.29622 0.027204 0.16053 0.978082 -10001 +7 3 0.000535906 -0.00203186 0.000617306 -7.37193 -6.28971 -8.33213 -5.29765 0.040414 0.150941 0.967892 -10001 +7 4 0.000481991 -0.00204586 0.00190689 -7.50894 -6.27995 -8.47026 -5.29505 0.054246 0.173743 0.976061 -10001 +7 5 0.000428417 -0.00186736 0.00190706 -7.6352 -6.2737 -8.61786 -5.28129 0.068662 0.168751 0.990185 -10001 +7 6 0.000387082 -0.00179315 0.00232233 -7.75845 -6.2785 -8.72089 -5.2922 0.083631 0.18 0.975807 -10001 +7 7 0 0 0 -7.86785 -6.24058 -8.85428 -5.27768 -10001 0.09912 1.02444 -10001 +7 8 0 0 0 -7.96922 -6.2634 -8.94287 -5.28787 -10001 0.115102 0.998073 -10001 +7 9 0 0 0 -8.06619 -6.27969 -9.03702 -5.28698 -10001 0.13155 0.977955 -10001 +7 10 0 0 0 -8.16257 -6.27494 -9.13968 -5.28223 -10001 0.148439 0.98428 -10001 +7 11 0 0 0 -8.2521 -6.28016 -9.22336 -5.28072 -10001 0.165747 0.971801 -10001 +7 12 0 0 0 -8.34252 -6.2658 -9.31674 -5.27541 -10001 0.183452 0.98367 -10001 +7 13 0 0 0 -8.426 -6.27973 -9.38032 -5.28415 -10001 0.201535 0.958553 -10001 +7 14 0 0 0 -8.51164 -6.26339 -9.47832 -5.26753 -10001 0.219977 0.970703 -10001 +7 15 0 0 0 -8.59005 -6.23815 -9.5354 -5.27573 -10001 0.23876 0.982279 -10001 +7 16 0 0 0 -8.66599 -6.23113 -9.60165 -5.27293 -10001 0.257869 0.976477 -10001 +7 17 0 0 0 -8.7458 -6.20576 -9.67945 -5.26642 -10001 0.277288 0.993934 -10001 +7 18 0 0 0 -8.81768 -6.19666 -9.72903 -5.27397 -10001 0.297003 0.987715 -10001 +7 19 0 0 0 -8.8875 -6.18693 -9.78849 -5.27052 -10001 0.317001 0.983179 -10001 +7 20 0 0 0 -8.96274 -6.15896 -9.86011 -5.26341 -10001 0.337269 1.00204 -10001 +7 21 0 0 0 -9.0292 -6.14813 -9.90405 -5.27039 -10001 0.357794 0.996699 -10001 +7 22 0 0 0 -9.0939 -6.137 -9.95835 -5.26638 -10001 0.378567 0.992911 -10001 +7 23 0 0 0 -9.16546 -6.10769 -10.0252 -5.25874 -10001 0.399576 1.01272 -10001 +7 24 0 0 0 -9.22732 -6.09599 -10.0648 -5.2652 -10001 0.420812 1.008 -10001 +7 25 0 0 0 -9.28765 -6.08413 -10.103 -5.27154 -10001 0.442265 1.00345 -10001 +7 26 0 0 0 -9.34653 -6.07215 -10.1521 -5.26688 -10001 0.463927 1.00037 -10001 +7 27 0 0 0 -9.41409 -6.04207 -10.2141 -5.25861 -10001 0.485788 1.02112 -10001 +7 28 0 0 0 -9.47065 -6.02988 -10.2491 -5.26449 -10001 0.507841 1.01709 -10001 +7 29 0 0 0 -9.52592 -6.01764 -10.2832 -5.27028 -10001 0.530079 1.01322 -10001 +7 30 0 0 0 -9.57996 -6.00538 -10.3282 -5.26507 -10001 0.552494 1.01076 -10001 +7 31 0 0 0 -9.64441 -5.97517 -10.3865 -5.25627 -10001 0.57508 1.03231 -10001 +7 32 0 0 0 -9.69704 -5.96314 -10.418 -5.26166 -10001 0.59783 1.02781 -10001 +7 33 0 0 0 -9.74765 -5.95062 -10.4488 -5.26696 -10001 0.620738 1.02555 -10001 +7 34 0 0 0 -9.79768 -5.93837 -10.4908 -5.26127 -10001 0.643798 1.02359 -10001 +7 35 0 0 0 -9.85967 -5.9084 -10.5461 -5.25203 -10001 0.667006 1.04582 -10001 +8 1 0.000301275 -0.000890983 -0.00150068 -7.88582 -6.63504 -8.84253 -5.65167 0.011049 0.135368 0.972896 -10001 +8 2 0.000309905 -0.001094 -0.000295675 -7.88356 -6.62948 -8.83745 -5.65366 0.020388 0.148933 0.977528 -10001 +8 3 0.000279926 -0.00100517 -0.000340389 -7.99213 -6.62366 -8.96188 -5.64442 0.030124 0.13363 0.990307 -10001 +8 4 0.000251586 -0.00101855 0.000493278 -8.11945 -6.63396 -9.07709 -5.64915 0.040238 0.148897 0.972425 -10001 +8 5 0.000226437 -0.000996929 0.000950722 -8.24819 -6.62725 -9.20396 -5.65019 0.050715 0.166308 0.978203 -10001 +8 6 0.000202407 -0.000896999 0.000841222 -8.36292 -6.62135 -9.33575 -5.64014 0.061537 0.154543 0.991453 -10001 +8 7 0.000184441 -0.000865922 0.00106302 -8.47258 -6.64675 -9.43407 -5.64409 0.07269 0.176821 0.958942 -10001 +8 8 0.000168802 -0.00082306 0.00114365 -8.57931 -6.63785 -9.53942 -5.6444 0.084159 0.18 0.966449 -10001 +8 9 0 0 0 -8.6722 -6.58129 -9.65025 -5.63367 -10001 0.095932 1.03211 -10001 +8 10 0 0 0 -8.75752 -6.62874 -9.72949 -5.63694 -10001 0.107995 0.980003 -10001 +8 11 0 0 0 -8.84153 -6.63208 -9.81782 -5.63662 -10001 0.120336 0.980743 -10001 +8 12 0 0 0 -8.91923 -6.64424 -9.88766 -5.63949 -10001 0.132945 0.963866 -10001 +8 13 0 0 0 -8.99715 -6.62029 -9.9677 -5.63879 -10001 0.14581 0.988853 -10001 +8 14 0 0 0 -9.07273 -6.61411 -10.0561 -5.62709 -10001 0.158921 0.996353 -10001 +8 15 0 0 0 -9.14228 -6.62103 -10.1036 -5.64024 -10001 0.172269 0.980193 -10001 +8 16 0 0 0 -9.21368 -6.61001 -10.1862 -5.62817 -10001 0.185844 0.99049 -10001 +8 17 0 0 0 -9.27891 -6.61343 -10.2403 -5.63014 -10001 0.199639 0.977692 -10001 +8 18 0 0 0 -9.3469 -6.61727 -10.3061 -5.62861 -10001 0.213644 0.970209 -10001 +8 19 0 0 0 -9.40843 -6.59999 -10.3558 -5.63028 -10001 0.227853 0.976987 -10001 +8 20 0 0 0 -9.47355 -6.5831 -10.4177 -5.62845 -10001 0.242257 0.988999 -10001 +8 21 0 0 0 -9.53185 -6.58243 -10.4638 -5.62983 -10001 0.256849 0.978319 -10001 +8 22 0 0 0 -9.59453 -6.56379 -10.5223 -5.62773 -10001 0.271623 0.991191 -10001 +8 23 0 0 0 -9.64994 -6.56191 -10.5653 -5.62884 -10001 0.286573 0.981072 -10001 +8 24 0 0 0 -9.71049 -6.542 -10.621 -5.62649 -10001 0.301692 0.994588 -10001 +8 25 0 0 0 -9.76332 -6.53926 -10.6614 -5.62735 -10001 0.316974 0.984872 -10001 +8 26 0 0 0 -9.82199 -6.51843 -10.7147 -5.62476 -10001 0.332415 0.998896 -10001 +8 27 0 0 0 -9.87247 -6.51505 -10.7528 -5.62538 -10001 0.348008 0.989492 -10001 +8 28 0 0 0 -9.9295 -6.49356 -10.8039 -5.62257 -10001 0.363748 1.00393 -10001 +8 29 0 0 0 -9.97781 -6.48972 -10.84 -5.62297 -10001 0.379632 0.994787 -10001 +8 30 0 0 0 -10.0334 -6.46776 -10.8893 -5.61996 -10001 0.395653 1.00958 -10001 +8 31 0 0 0 -10.0797 -6.46356 -10.9117 -5.63104 -10001 0.411808 0.999407 -10001 +8 32 0 0 0 -10.1339 -6.44128 -10.9713 -5.61695 -10001 0.428093 1.01577 -10001 +8 33 0 0 0 -10.1784 -6.43683 -10.9921 -5.62782 -10001 0.444503 1.00582 -10001 +8 34 0 0 0 -10.2219 -6.43233 -11.0242 -5.62775 -10001 0.461034 0.997185 -10001 +8 35 0 0 0 -10.2743 -6.40969 -11.0697 -5.62424 -10001 0.477684 1.01271 -10001 +9 1 0.00017126 -0.000520902 -0.00092657 -8.44158 -6.94643 -9.41675 -5.95381 0.008639 0.132758 0.982418 -10001 +9 2 0.000175829 -0.000619808 -0.000329794 -8.43185 -6.95673 -9.39175 -5.9613 0.015871 0.142378 0.964309 -10001 +9 3 0.000160538 -0.00063184 0.000147275 -8.54346 -6.95182 -9.49852 -5.96522 0.023354 0.153526 0.96804 -10001 +9 4 0.000142369 -0.000554375 0.000002625 -8.66478 -6.9496 -9.63375 -5.95808 0.031081 0.135578 0.977255 -10001 +9 5 0.000128084 -0.000544353 0.000320744 -8.78944 -6.94499 -9.76643 -5.95079 0.039043 0.148619 0.982689 -10001 +9 6 0.000115953 -0.000526315 0.000507561 -8.90366 -6.93903 -9.8662 -5.95744 0.04723 0.159295 0.980593 -10001 +9 7 0.000105643 -0.000503531 0.000607483 -9.01419 -6.93319 -9.9725 -5.96066 0.055636 0.174166 0.985385 -10001 +9 8 0.0000957684 -0.000454151 0.000520178 -9.11003 -6.92913 -10.0835 -5.95287 0.064252 0.158216 0.997145 -10001 +9 9 0.0000883405 -0.000435521 0.000580411 -9.20241 -6.94013 -10.1621 -5.95907 0.073071 0.174098 0.978249 -10001 +9 10 0.0000818022 -0.00041444 0.000600478 -9.29301 -6.93433 -10.2492 -5.96185 0.082087 0.18 0.98324 -10001 +9 11 0 0 0 -9.3281 -7.18599 -10.3431 -5.95359 -10001 0.091293 0.823569 -10001 +9 12 0 0 0 -9.4478 -6.9097 -10.4065 -5.95938 -10001 0.100682 1.00883 -10001 +9 13 0 0 0 -9.51995 -6.91404 -10.4802 -5.96174 -10001 0.110249 1.00834 -10001 +9 14 0 0 0 -9.58982 -6.91771 -10.5622 -5.95308 -10001 0.119988 1.00801 -10001 +9 15 0 0 0 -9.65613 -6.91745 -10.641 -5.94435 -10001 0.129894 1.01211 -10001 +9 16 0 0 0 -9.71771 -6.95168 -10.6911 -5.94957 -10001 0.13996 0.971354 -10001 +9 17 0 0 0 -9.78054 -6.94706 -10.7527 -5.95144 -10001 0.150183 0.976462 -10001 +9 18 0 0 0 -9.83803 -6.95584 -10.7979 -5.95647 -10001 0.160557 0.960499 -10001 +9 19 0 0 0 -9.89756 -6.94809 -10.8552 -5.95812 -10001 0.171078 0.967317 -10001 +9 20 0 0 0 -9.95576 -6.9241 -10.9223 -5.94877 -10001 0.18174 0.991028 -10001 +9 21 0 0 0 -10.0084 -6.93128 -10.9618 -5.95346 -10001 0.192541 0.975017 -10001 +9 22 0 0 0 -10.0641 -6.92099 -11.0137 -5.9548 -10001 0.203476 0.982881 -10001 +9 23 0 0 0 -10.1187 -6.90974 -11.076 -5.94515 -10001 0.21454 0.992444 -10001 +9 24 0 0 0 -10.1674 -6.9146 -11.111 -5.94953 -10001 0.225731 0.977722 -10001 +9 25 0 0 0 -10.2201 -6.90183 -11.1588 -5.95058 -10001 0.237044 0.986809 -10001 +9 26 0 0 0 -10.2719 -6.88841 -11.2172 -5.94067 -10001 0.248476 0.997451 -10001 +9 27 0 0 0 -10.3173 -6.89173 -11.2367 -5.95568 -10001 0.260024 0.982261 -10001 +9 28 0 0 0 -10.3675 -6.87728 -11.293 -5.94555 -10001 0.271685 0.993406 -10001 +9 29 0 0 0 -10.4108 -6.87994 -11.3224 -5.9495 -10001 0.283454 0.979767 -10001 +9 30 0 0 0 -10.4595 -6.86467 -11.365 -5.95013 -10001 0.29533 0.990082 -10001 +9 31 0 0 0 -10.5076 -6.84906 -11.4185 -5.93979 -10001 0.307309 1.00182 -10001 +9 32 0 0 0 -10.5483 -6.85089 -11.4453 -5.94347 -10001 0.319389 0.98856 -10001 +9 33 0 0 0 -10.5952 -6.83472 -11.4855 -5.94387 -10001 0.331567 0.999369 -10001 +9 34 0 0 0 -10.6342 -6.8362 -11.5108 -5.94743 -10001 0.34384 0.986287 -10001 +9 35 0 0 0 -10.6799 -6.81958 -11.5495 -5.94768 -10001 0.356206 0.997362 -10001 +10 1 0.000103584 -0.000327039 -0.000572148 -8.93524 -7.2109 -9.90756 -6.23929 0.006945 0.128357 1.00073 -10001 +10 2 0.000106204 -0.000378757 -0.000259675 -8.92284 -7.2238 -9.87845 -6.24819 0.012717 0.135769 0.979503 -10001 +10 3 0.0000968476 -0.000380221 0.0000101024 -9.03157 -7.22019 -9.9929 -6.24276 0.018657 0.144397 0.983533 -10001 +10 4 0.0000868551 -0.000367993 0.000189839 -9.15702 -7.21595 -10.1121 -6.24808 0.024759 0.153475 0.986817 -10001 +10 5 0.0000771464 -0.000318533 0.0000668194 -9.27304 -7.21201 -10.2406 -6.2424 0.031019 0.132315 0.997855 -10001 +10 6 0.0000698181 -0.000308403 0.000202733 -9.38798 -7.20906 -10.362 -6.23662 0.037433 0.142967 1.00164 -10001 +10 7 0.0000636388 -0.000296558 0.000287533 -9.49181 -7.23705 -10.4499 -6.24481 0.043995 0.154992 0.965529 -10001 +10 8 0.0000583804 -0.000283734 0.000337064 -9.59221 -7.23221 -10.5447 -6.2497 0.050702 0.166894 0.96943 -10001 +10 9 0.00005385 -0.000270373 0.000362281 -9.68634 -7.2304 -10.6449 -6.24356 0.05755 0.18 0.971333 -10001 +10 10 0.0000494116 -0.00024543 0.000308856 -9.76719 -7.22691 -10.7394 -6.23735 0.064534 0.161207 0.982426 -10001 +10 11 0.0000460473 -0.000235459 0.00032905 -9.84606 -7.23772 -10.8028 -6.24512 0.071651 0.174753 0.963876 -10001 +10 12 0.0000430497 -0.000224938 0.000335394 -9.92423 -7.21694 -10.8878 -6.23869 0.078897 0.18 0.984973 -10001 +10 13 0.0000403494 -0.000214087 0.00033215 -9.99868 -7.21185 -10.9569 -6.24308 0.086269 0.18 0.989132 -10001 +10 14 0 0 0 -10.0235 -7.43807 -11.0344 -6.23647 -10001 0.093764 0.841263 -10001 +10 15 0 0 0 -10.1252 -7.21512 -11.0827 -6.24386 -10001 0.101377 0.985845 -10001 +10 16 0 0 0 -10.1859 -7.21986 -11.1542 -6.23707 -10001 0.109107 0.985198 -10001 +10 17 0 0 0 -10.2443 -7.22009 -11.2112 -6.2411 -10001 0.116949 0.987616 -10001 +10 18 0 0 0 -10.301 -7.19777 -11.2778 -6.23415 -10001 0.124902 1.01368 -10001 +10 19 0 0 0 -10.3536 -7.21405 -11.3162 -6.24118 -10001 0.132961 0.989448 -10001 +10 20 0 0 0 -10.4063 -7.21154 -11.3669 -6.24498 -10001 0.141125 0.993856 -10001 +10 21 0 0 0 -10.4584 -7.20878 -11.4277 -6.23777 -10001 0.149391 0.998251 -10001 +10 22 0 0 0 -10.5093 -7.20495 -11.4868 -6.23051 -10001 0.157757 1.00315 -10001 +10 23 0 0 0 -10.5553 -7.21619 -11.5184 -6.23722 -10001 0.166219 0.983789 -10001 +10 24 0 0 0 -10.604 -7.21045 -11.5628 -6.24071 -10001 0.174775 0.98871 -10001 +10 25 0 0 0 -10.6517 -7.20384 -11.6177 -6.23321 -10001 0.183424 0.995202 -10001 +10 26 0 0 0 -10.6943 -7.21305 -11.6454 -6.23973 -10001 0.192163 0.977188 -10001 +10 27 0 0 0 -10.7403 -7.20502 -11.6862 -6.24302 -10001 0.200989 0.983298 -10001 +10 28 0 0 0 -10.7855 -7.19634 -11.7377 -6.2353 -10001 0.209901 0.990874 -10001 +10 29 0 0 0 -10.83 -7.18708 -11.7883 -6.22756 -10001 0.218897 0.998742 -10001 +10 30 0 0 0 -10.8689 -7.1944 -11.812 -6.23378 -10001 0.227974 0.981816 -10001 +10 31 0 0 0 -10.912 -7.18419 -11.8489 -6.23681 -10001 0.237131 0.988979 -10001 +10 32 0 0 0 -10.9546 -7.17357 -11.8969 -6.22888 -10001 0.246366 0.997521 -10001 +10 33 0 0 0 -10.991 -7.17997 -11.9181 -6.23492 -10001 0.255678 0.981072 -10001 +10 34 0 0 0 -11.0323 -7.16864 -11.9527 -6.23778 -10001 0.265063 0.988778 -10001 +10 35 0 0 0 -11.0732 -7.157 -11.9985 -6.22966 -10001 0.274522 0.997817 -10001 diff --git a/src/eic_evgen/KPlus_sig.cc b/src/eic_evgen/KPlus_sig.cc index c426735..a3f1c65 100644 --- a/src/eic_evgen/KPlus_sig.cc +++ b/src/eic_evgen/KPlus_sig.cc @@ -106,7 +106,7 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt else if (SigPar[1][x_2][y_1][12] != -10001){ t_3 = SigPar[1][x_2][y_1][12]; } - else { + else { return -100; } @@ -123,6 +123,8 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); sigT1=parasigT->Eval(t); + parasigT = NULL; + delete parasigT; } else if (t>=SigPar[1][x_1][y_1][11] && tFixParameter(1, SigPar[1][x_1][y_1][6]); parasigT->FixParameter(2, SigPar[1][x_1][y_1][7]); sigT1=parasigT->Eval(t); + parasigT = NULL; + delete parasigT; } else if (t>=SigPar[1][x_1][y_1][12] && t<2.0){ @@ -142,6 +146,8 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ sigT1=0; } + parasigT = NULL; + delete parasigT; } else { @@ -155,6 +161,8 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt parasigT->FixParameter(1, SigPar[1][x_1][y_2][3]); parasigT->FixParameter(2, SigPar[1][x_1][y_2][4]); sigT2=parasigT->Eval(t); + parasigT = NULL; + delete parasigT; } else if (t>=SigPar[1][x_1][y_2][11] && tFixParameter(1, SigPar[1][x_1][y_2][6]); parasigT->FixParameter(2, SigPar[1][x_1][y_2][7]); sigT2=parasigT->Eval(t); + parasigT = NULL; + delete parasigT; } else if (t>=SigPar[1][x_1][y_2][12] && t<2.0){ @@ -174,6 +184,8 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt if (SigPar[1][x_1][y_2][8] == 0 && SigPar[1][x_1][y_2][9] == 0){ sigT2=0; } + parasigT = NULL; + delete parasigT; } else { @@ -187,6 +199,8 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt parasigT->FixParameter(1, SigPar[1][x_2][y_1][3]); parasigT->FixParameter(2, SigPar[1][x_2][y_1][4]); sigT3=parasigT->Eval(t); + parasigT = NULL; + delete parasigT; } else if (t>=SigPar[1][x_2][y_1][11] && tFixParameter(1, SigPar[1][x_2][y_1][6]); parasigT->FixParameter(2, SigPar[1][x_2][y_1][7]); sigT3=parasigT->Eval(t); + parasigT = NULL; + delete parasigT; } else if (t>=SigPar[1][x_2][y_1][12] && t<2.0){ @@ -206,6 +222,8 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt if (SigPar[1][x_2][y_1][8] == 0 && SigPar[1][x_2][y_1][9] == 0){ sigT3=0; } + parasigT = NULL; + delete parasigT; } else { @@ -220,6 +238,8 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); sigT4=parasigT->Eval(t); + parasigT = NULL; + delete parasigT; } else if (t>=SigPar[1][x_2][y_2][11] && tFixParameter(1, SigPar[1][x_2][y_2][6]); parasigT->FixParameter(2, SigPar[1][x_2][y_2][7]); sigT4=parasigT->Eval(t); + parasigT = NULL; + delete parasigT; } else if (t>=SigPar[1][x_2][y_2][12] && t<2.0){ @@ -239,6 +261,8 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ sigT4=0; } + parasigT = NULL; + delete parasigT; } else { @@ -252,72 +276,132 @@ double GetKPlus_CrossSection(double ft, double fw, double fqsq, double feps, TSt fsigTa=sigT1; } + //................................................................................... //................................................................................... else if (sigT1 != 0 && sigT2 != 0 && sigT3 != 0 && sigT4 != 0){ // if all the four corners are present - // Taking the log of claculated sigT values - lsigT1 = TMath::Log(sigT1); //log value of sigT1. - lsigT2 = TMath::Log(sigT2); //log value of sigT2. - lsigT3 = TMath::Log(sigT3); //log value of sigT3. - lsigT4 = TMath::Log(sigT4); //log value of sigT4. - // Calculated slopes of different lines - slb = lsigT4-lsigT3; //interpolation from the third corner (i.e. top left corner) - slt = lsigT2-lsigT1; - sll = -(lsigT1-lsigT3); - slr = -(lsigT2-lsigT4); - // Taking averages of the slopes - altb = ((slb +slt)/2 ); - allr = ((sll +slr)/2 ); + if (fHadron == "Lambda"){// Taking the log of claculated sigT values + lsigT1 = TMath::Log(sigT1); //log value of sigT1. + lsigT2 = TMath::Log(sigT2); //log value of sigT2. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT4); //log value of sigT4. + // Calculated slopes of different lines + slb = lsigT4-lsigT3; //interpolation from the third corner (i.e. top left corner) + slt = lsigT2-lsigT1; + sll = -(lsigT1-lsigT3); + slr = -(lsigT2-lsigT4); + // Taking averages of the slopes + altb = ((slb +slt)/2 ); + allr = ((sll +slr)/2 ); - // Applying taylor's series formula for the average slopes - fsigTLa = lsigT3 + (q2-q2_1)*altb + (w-w_2)*allr; + // Applying taylor's series formula for the average slopes + fsigTLa = lsigT3 + (q2-q2_1)*altb + (w-w_2)*allr; - // Find the anti-log of the taylor's series formula value - fsigTa = exp(fsigTLa); + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + + //............................................................................................. + // For Sigma Channel interpolation can happen from either from the 3rd corner or the 4th corner + //............................................................................................. + + else if (fHadron == "Sigma0"){ + + if(w < w_1 +0.5){ // interpolation from fourth corner + + // Taking the log of claculated sigT values + lsigT1 = TMath::Log(sigT1); //log value of sigT1. + lsigT2 = TMath::Log(sigT2); //log value of sigT2. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT4); //log value of sigT4. + // Calculated slopes of different lines + slb = -(lsigT3-lsigT4); //interpolation from the fourth corner (i.e. top right corner) + slt = -(lsigT1-lsigT2); + sll = -(lsigT2-lsigT4); + slr = -(lsigT1-lsigT3); + // Taking averages of the slopes + altb = ((slb +slt)/2 ); + allr = ((sll +slr)/2 ); + + // Applying taylor's series formula for the average slopes + fsigTLa = lsigT4 + (q2-q2_2)*altb + (w-w_2)*allr; + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + + else if(w >= w_1 +0.5){ // interpolation from third corner + + // Taking the log of claculated sigT values + lsigT1 = TMath::Log(sigT1); //log value of sigT1. + lsigT2 = TMath::Log(sigT2); //log value of sigT2. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT4); //log value of sigT4. + // Calculated slopes of different lines + slb = lsigT4-lsigT3; //interpolation from the third corner (i.e. top left corner) + slt = lsigT2-lsigT1; + sll = -(lsigT1-lsigT3); + slr = -(lsigT2-lsigT4); + // Taking averages of the slopes + altb = ((slb +slt)/2 ); + allr = ((sll +slr)/2 ); + + // Applying taylor's series formula for the average slopes + fsigTLa = lsigT3 + (q2-q2_1)*altb + (w-w_2)*allr; + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + + } + } //................................................................................... + //................................................................................... else if (sigT1 == 0 && sigT2 == 0 && sigT4 == 0) // if we loose the 1st, 2nd and the 4th corner simultaneously { // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) will always be there and for other two corners, find the value of the cross-section at the first and the fourth corner at the minimum value of t. After that we can interpolate them. -// First try to find t_1 and t_4 + // First try to find t_1 and t_4 - if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner - t_1 = SigPar[1][x_1][y_1][10]; - } - else if (SigPar[1][x_1][y_1][11] != -10001){ - t_1 = SigPar[1][x_1][y_1][11]; - } - else if ( SigPar[1][x_1][y_1][12] != -10001){ - t_1 = SigPar[1][x_1][y_1][12]; - } - else { - return -100; - } + if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner + t_1 = SigPar[1][x_1][y_1][10]; + } + else if (SigPar[1][x_1][y_1][11] != -10001){ + t_1 = SigPar[1][x_1][y_1][11]; + } + else if ( SigPar[1][x_1][y_1][12] != -10001){ + t_1 = SigPar[1][x_1][y_1][12]; + } + else { + return -100; + } -//................................................................................... -if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - this is always the top right corner - t_4 = SigPar[1][x_2][y_2][10]; - } - else if (SigPar[1][x_2][y_2][11] != -10001){ - t_4 =SigPar[1][x_2][y_2][11]; - } - else if (SigPar[1][x_2][y_2][12] != -10001){ - t_4 = SigPar[1][x_2][y_2][12]; - } - else { - return -100; - } + //................................................................................... + if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - this is always the top right corner + t_4 = SigPar[1][x_2][y_2][10]; + } + else if (SigPar[1][x_2][y_2][11] != -10001){ + t_4 =SigPar[1][x_2][y_2][11]; + } + else if (SigPar[1][x_2][y_2][12] != -10001){ + t_4 = SigPar[1][x_2][y_2][12]; + } + else { + return -100; + } -//Calculating the sigT11 at bottom left corner of the square + //Calculating the sigT11 at bottom left corner of the square if (t_1>=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); sigT11=parasigT->Eval(t_1); + parasigT = NULL; + delete parasigT; } else if (t_1>=SigPar[1][x_1][y_1][11] && t_1FixParameter(1,SigPar[1][x_1][y_1][6]); parasigT->FixParameter(2,SigPar[1][x_1][y_1][7]); sigT11=parasigT->Eval(t_1); + parasigT = NULL; + delete parasigT; } else if (t_1>=SigPar[1][x_1][y_1][12] && t_1<2.0){ @@ -337,6 +423,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ sigT11 =0; } + parasigT = NULL; + delete parasigT; } else { @@ -351,6 +439,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); sigT14=parasigT->Eval(t_4); + parasigT = NULL; + delete parasigT; } else if (t_4>=SigPar[1][x_2][y_2][11] && t_1FixParameter(1,SigPar[1][x_2][y_2][6]); parasigT->FixParameter(2,SigPar[1][x_2][y_2][7]); sigT14=parasigT->Eval(t_4); + parasigT = NULL; + delete parasigT; } else if (t_4>=SigPar[1][x_1][y_1][12] && t_1<2.0){ @@ -370,6 +462,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ sigT14 =0; } + parasigT = NULL; + delete parasigT; } else { @@ -379,7 +473,7 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - // Taking the log of claculated sigT values lsigT1 = TMath::Log(sigT11); //log value of sigT11. lsigT3 = TMath::Log(sigT3); //log value of sigT3. - lsigT4 = TMath::Log(sigT14); //log value of sigT4. + lsigT4 = TMath::Log(sigT14); //log value of sigT14. // Calculated slopes of different lines slb = lsigT4-lsigT3; //->interpolation from the third corner sll = -(lsigT1-lsigT3); @@ -391,32 +485,35 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - fsigTa = exp(fsigTLa); } //................................................................................... + //................................................................................... else if (sigT1 == 0 && sigT2 == 0){ // if we loose the 1st and the 2nd corner simultaneously // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. -// First try to find t_1 + // First try to find t_1 - if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner - t_1 = SigPar[1][x_1][y_1][10]; - } - else if (SigPar[1][x_1][y_1][11] != -10001){ - t_1 = SigPar[1][x_1][y_1][11]; - } - else if ( SigPar[1][x_1][y_1][12] != -10001){ - t_1 = SigPar[1][x_1][y_1][12]; - } - else { - return -100; - } + if(SigPar[1][x_1][y_1][10] != -10001){ // t_1 is t_min for the first corner - this is always the bottom left corner + t_1 = SigPar[1][x_1][y_1][10]; + } + else if (SigPar[1][x_1][y_1][11] != -10001){ + t_1 = SigPar[1][x_1][y_1][11]; + } + else if ( SigPar[1][x_1][y_1][12] != -10001){ + t_1 = SigPar[1][x_1][y_1][12]; + } + else { + return -100; + } - //Calculating the sigT11 at bottom left corner of the square + //Calculating the sigT11 at bottom left corner of the square if (t_1>=SigPar[1][x_1][y_1][10]&& t_1FixParameter(0, SigPar[1][x_1][y_1][2]); parasigT->FixParameter(1, SigPar[1][x_1][y_1][3]); parasigT->FixParameter(2, SigPar[1][x_1][y_1][4]); sigT11=parasigT->Eval(t_1); + parasigT = NULL; + delete parasigT; } else if (t_1>=SigPar[1][x_1][y_1][11] && t_1FixParameter(0,SigPar[1][x_1][y_1][5]); parasigT->FixParameter(1,SigPar[1][x_1][y_1][6]); parasigT->FixParameter(2,SigPar[1][x_1][y_1][7]); - sigT11=parasigT->Eval(t_1); + sigT11=parasigT->Eval(t_1); + parasigT = NULL; + delete parasigT; } else if (t_1>=SigPar[1][x_1][y_1][12] && t_1<2.0){ @@ -435,6 +534,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[1][x_1][y_1][8] == 0 && SigPar[1][x_1][y_1][9] == 0){ sigT11 =0; } + parasigT = NULL; + delete parasigT; } else { @@ -446,16 +547,92 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - lsigT3 = TMath::Log(sigT3); //log value of sigT3. lsigT4 = TMath::Log(sigT4); //log value of sigT4. // Calculated slopes of different lines - slb = lsigT3-lsigT4; //->interpolation from the third corner + slb = lsigT4-lsigT3; //->interpolation from the third corner sll = -(lsigT1-lsigT3); // Applying taylor's series formula without averaging the slopes fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner // Find the anti-log of the taylor's series formula value fsigTa = exp(fsigTLa); - } + } + //................................................................................... + //................................................................................... + + else if (sigT4 == 0 && sigT2 == 0){ // if we loose the 4th and the 2nd corner simultaneously + // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the first corner (i.e. top right) will always be there and for other one corner, find the value of the cross-section at the fourth corner at the minimum value of t. After that we can interpolate them. + + // First try to find t_4 + + if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - this is always the top right corner + t_4 = SigPar[1][x_2][y_2][10]; + } + else if (SigPar[1][x_2][y_2][11] != -10001){ + t_4 =SigPar[1][x_2][y_2][11]; + } + else if (SigPar[1][x_2][y_2][12] != -10001){ + t_4 = SigPar[1][x_2][y_2][12]; + } + else { + return -100; + } + //Calculating the sigT14 at bottom left corner of the square + + if (t_4>=SigPar[1][x_2][y_2][10]&& t_4FixParameter(0, SigPar[1][x_2][y_2][2]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][3]); + parasigT->FixParameter(2, SigPar[1][x_2][y_2][4]); + sigT14=parasigT->Eval(t_4); + parasigT = NULL; + delete parasigT; + } + + else if (t_4>=SigPar[1][x_2][y_2][11] && t_1FixParameter(0,SigPar[1][x_2][y_2][5]); + parasigT->FixParameter(1,SigPar[1][x_2][y_2][6]); + parasigT->FixParameter(2,SigPar[1][x_2][y_2][7]); + sigT14=parasigT->Eval(t_4); + parasigT = NULL; + delete parasigT; + } + + else if (t_4>=SigPar[1][x_1][y_1][12] && t_1<2.0){ + TF1* parasigT= new TF1("parasigT","expo"); + parasigT->FixParameter(0, SigPar[1][x_2][y_2][8]); + parasigT->FixParameter(1, SigPar[1][x_2][y_2][9]); + sigT14=parasigT->Eval(t_4); + + if (SigPar[1][x_2][y_2][8] == 0 && SigPar[1][x_2][y_2][9] == 0){ + sigT14 =0; + } + parasigT = NULL; + delete parasigT; + } + + else { + sigT14=0; + } + + + // Taking the log of claculated sigT values + + lsigT1 = TMath::Log(sigT1); //log value of sigT11. + lsigT3 = TMath::Log(sigT3); //log value of sigT3. + lsigT4 = TMath::Log(sigT14); //log value of sigT4. + // Calculated slopes of different lines + slb = lsigT4-lsigT3; //->interpolation from the third corner + sll = -(lsigT1-lsigT3); + // Applying taylor's series formula without averaging the slopes + fsigTLa = lsigT3 + (q2-q2_1)*slb + (w-w_2)*sll; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigTa = exp(fsigTLa); + } + //.............................................................................. + //................................................................................... else if (sigT2 == 0) { // if we loose 2nd corner, first we will always loose this corner as this correspond to highest -t value (interpolate from 3rd corner) // In this case, we will need atleat three corners to find the cross-section. And even after loosing second corner, we still have three corners to interpolate. @@ -466,7 +643,7 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - lsigT4 = TMath::Log(sigT4); //log value of sigT4. // Calculated slopes of different lines - slb = lsigT3-lsigT4; //->interpolation from the third corner + slb = lsigT4-lsigT3; //->interpolation from the third corner sll = -(lsigT1-lsigT3); // Applying taylor's series formula without averaging the slopes @@ -474,19 +651,27 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - // Find the anti-log of the taylor's series formula value fsigTa = exp(fsigTLa); - } + } + + //................................................................................... + //................................................................................... + } // end of if statement over t //.................................................................................................................................................................... else{ //cerr<<" Invalid t-value "<FixParameter(1, SigPar[0][x_1][y_1][3]); parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); sigL1=parasigL->Eval(t); + parasigL = NULL; + delete parasigL; } + } else if (t>=SigPar[0][x_1][y_1][10] && t=SigPar[0][x_1][y_1][11] && t<2.0){ @@ -557,6 +749,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ sigL1=0; } + parasigL = NULL; + delete parasigL; } else { @@ -574,6 +768,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[0][x_1][y_2][2] == 0 && SigPar[0][x_1][y_2][3] == 0){ sigL2=0; } + parasigL = NULL; + delete parasigL; } else{ @@ -582,6 +778,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - parasigL->FixParameter(1, SigPar[0][x_1][y_2][3]); parasigL->FixParameter(2, SigPar[0][x_1][y_2][4]); sigL2=parasigL->Eval(t); + parasigL = NULL; + delete parasigL; } } @@ -593,6 +791,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[0][x_1][y_2][5] == 0 && SigPar[0][x_1][y_2][6] == 0){ sigL2=0; } + parasigL = NULL; + delete parasigL; } else if (t>=SigPar[0][x_1][y_2][11] && t<2.0){ @@ -603,6 +803,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[0][x_1][y_2][7] == 0 && SigPar[0][x_1][y_2][8] == 0){ sigL2=0; } + parasigL = NULL; + delete parasigL; } else { @@ -620,6 +822,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[0][x_2][y_1][2] == 0 && SigPar[0][x_2][y_1][3] == 0){ sigL3=0; } + parasigL = NULL; + delete parasigL; } else{ @@ -628,7 +832,10 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - parasigL->FixParameter(1, SigPar[0][x_2][y_1][3]); parasigL->FixParameter(2, SigPar[0][x_2][y_1][4]); sigL3=parasigL->Eval(t); + parasigL = NULL; + delete parasigL; } + } else if (t>=SigPar[0][x_2][y_1][10] && t=SigPar[0][x_2][y_1][11] && t<2.0){ @@ -651,6 +860,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[0][x_2][y_1][7] == 0 && SigPar[0][x_2][y_1][8] == 0){ sigL3=0; } + parasigL = NULL; + delete parasigL; } else { @@ -668,6 +879,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ sigL4=0; } + parasigL = NULL; + delete parasigL; } else{ @@ -676,7 +889,10 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); sigL4=parasigL->Eval(t); + parasigL = NULL; + delete parasigL; } + } else if (t>=SigPar[0][x_2][y_2][10] && t=SigPar[0][x_2][y_2][11] && t<2.0){ @@ -699,6 +917,8 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ sigL4=0; } + parasigL = NULL; + delete parasigL; } else { @@ -713,6 +933,7 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - fsigLa = sigL1; } + //................................................................................... //................................................................................... else if (sigL1 != 0 && sigL2 != 0 && sigL3 != 0 && sigL4 != 0){ // if all the four corners are present @@ -743,38 +964,39 @@ if(SigPar[1][x_2][y_2][10] != -10001){ // t_4 is t_min for the fourth corner - fsigLa = exp(fsigLLa); } //................................................................................... + //................................................................................... else if (sigL1 == 0 && sigL2 == 0 && sigL4 == 0) // if we loose the 1st, 2nd and the 4th corner simultaneously { // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) will always be there and for other two corners, find the value of the cross-section at the first and the fourth corner at the minimum value of t. After that we can interpolate them. -// First try to find t_1 and t_4 + // First try to find t_1 and t_4 -if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner - l_1 = SigPar[0][x_1][y_1][9]; - } - else if (SigPar[0][x_1][y_1][10] != -10001){ - l_1 = SigPar[0][x_1][y_1][10]; - } - else if ( SigPar[0][x_1][y_1][11] != -10001){ - l_1 = SigPar[0][x_1][y_1][11]; - } - else { - return -100; - } - //................................................................................... - if(SigPar[0][x_2][y_2][9] != -10001){ // l_4 is t_min for the fourth corner - this is always the top right corner - l_4 = SigPar[0][x_2][y_2][9]; - } - else if (SigPar[0][x_2][y_2][10] != -10001){ - l_4 =SigPar[0][x_2][y_2][10]; - } - else if (SigPar[0][x_2][y_2][11] != -10001){ - l_4 = SigPar[0][x_2][y_2][11]; - } - else { - return -100; - } + if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner + l_1 = SigPar[0][x_1][y_1][9]; + } + else if (SigPar[0][x_1][y_1][10] != -10001){ + l_1 = SigPar[0][x_1][y_1][10]; + } + else if ( SigPar[0][x_1][y_1][11] != -10001){ + l_1 = SigPar[0][x_1][y_1][11]; + } + else { + return -100; + } + //................................................................................... + if(SigPar[0][x_2][y_2][9] != -10001){ // l_4 is t_min for the fourth corner - this is always the top right corner + l_4 = SigPar[0][x_2][y_2][9]; + } + else if (SigPar[0][x_2][y_2][10] != -10001){ + l_4 =SigPar[0][x_2][y_2][10]; + } + else if (SigPar[0][x_2][y_2][11] != -10001){ + l_4 = SigPar[0][x_2][y_2][11]; + } + else { + return -100; + } //Calculating the sigL11 at bottom left corner of the square if (l_1>=SigPar[0][x_1][y_1][9] && l_1FixParameter(1, SigPar[0][x_1][y_1][3]); parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); sigL11=parasigL->Eval(l_1); + parasigL = NULL; + delete parasigL; } } @@ -806,6 +1032,8 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ sigL11=0; } + parasigL = NULL; + delete parasigL; } else if (l_1>=SigPar[0][x_1][y_1][11] && t<2.0){ @@ -817,6 +1045,8 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ sigL11=0; } + parasigL = NULL; + delete parasigL; } else { @@ -834,6 +1064,8 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ sigL14=0; } + parasigL = NULL; + delete parasigL; } else{ @@ -842,7 +1074,10 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); sigL14=parasigL->Eval(l_4); + parasigL = NULL; + delete parasigL; } + } else if (l_4>=SigPar[0][x_2][y_2][10] && l_4=SigPar[0][x_2][y_2][11] && t<2.0){ @@ -865,6 +1102,8 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ sigL14=0; } + parasigL = NULL; + delete parasigL; } else { @@ -886,25 +1125,26 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi fsigLa = exp(fsigLLa); } //................................................................................... + //................................................................................... else if (sigL1 == 0 && sigL2 == 0){ // if we loose the 1st and the 2nd corner simultaneously // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the fourth corner (i.e. top right)will always be there and for other one corner, find the value of the cross-section at the first corner at the minimum value of t. After that we can interpolate them. -// First try to find t_1 + // First try to find t_1 -if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner - l_1 = SigPar[0][x_1][y_1][9]; - } - else if (SigPar[0][x_1][y_1][10] != -10001){ - l_1 = SigPar[0][x_1][y_1][10]; - } - else if ( SigPar[0][x_1][y_1][11] != -10001){ - l_1 = SigPar[0][x_1][y_1][11]; - } - else { - return -100; - } - //................................................................................... + if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - this is always the bottom left corner + l_1 = SigPar[0][x_1][y_1][9]; + } + else if (SigPar[0][x_1][y_1][10] != -10001){ + l_1 = SigPar[0][x_1][y_1][10]; + } + else if ( SigPar[0][x_1][y_1][11] != -10001){ + l_1 = SigPar[0][x_1][y_1][11]; + } + else { + return -100; + } + //................................................................................... //Calculating the sigL11 at bottom left corner of the square if (l_1>=SigPar[0][x_1][y_1][9] && l_1FixParameter(1, SigPar[0][x_1][y_1][3]); parasigL->FixParameter(2, SigPar[0][x_1][y_1][4]); sigL11=parasigL->Eval(l_1); + parasigL = NULL; + delete parasigL; } } @@ -935,6 +1179,8 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi if (SigPar[0][x_1][y_1][5] == 0 && SigPar[0][x_1][y_1][6] == 0){ sigL11=0; } + parasigL = NULL; + delete parasigL; } else if (l_1>=SigPar[0][x_1][y_1][11] && t<2.0){ @@ -945,6 +1191,8 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi if (SigPar[0][x_1][y_1][7] == 0 && SigPar[0][x_1][y_1][8] == 0){ sigL11=0; } + parasigL = NULL; + delete parasigL; } else { @@ -956,7 +1204,7 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi lsigL3 = TMath::Log(sigL3); //log value of sigL3. lsigL4 = TMath::Log(sigL4); //log value of sigL4. // Calculated slopes of different lines - stb = lsigL3-lsigL4; //->interpolation from the third corner + stb = lsigL4-lsigL3; //->interpolation from the third corner stl = -(lsigL1-lsigL3); // Applying taylor's series formula without averaging the slopes @@ -967,6 +1215,99 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi } //.............................................................................. + //................................................................................... + + else if (sigL4 == 0 && sigL2 == 0){ // if we loose the 4th and the 2nd corner simultaneously + // In this case, we will need atleat three corners to find the cross-section. The third corner (i.e. top left) and the first corner (i.e. top right) will always be there and for other one corner, find the value of the cross-section at the fourth corner at the minimum value of t. After that we can interpolate them. + + // First try to find l_4 + if(SigPar[0][x_2][y_2][9] != -10001){ // l_4 is t_min for the fourth corner - this is always the top right corner + l_4 = SigPar[0][x_2][y_2][9]; + } + else if (SigPar[0][x_2][y_2][10] != -10001){ + l_4 =SigPar[0][x_2][y_2][10]; + } + else if (SigPar[0][x_2][y_2][11] != -10001){ + l_4 = SigPar[0][x_2][y_2][11]; + } + else { + return -100; + } + + //Calculating the sigL14 at bottom left corner of the square + if (l_4>=SigPar[0][x_2][y_2][9] && l_4FixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][2] == 0 && SigPar[0][x_2][y_2][3] == 0){ + sigL14=0; + } + parasigL = NULL; + delete parasigL; + } + + else{ + TF1* parasigL= new TF1("parasigL","pol2"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][2]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][3]); + parasigL->FixParameter(2, SigPar[0][x_2][y_2][4]); + sigL14=parasigL->Eval(l_4); + parasigL = NULL; + delete parasigL; + } + + } + + else if (l_4>=SigPar[0][x_2][y_2][10] && l_4FixParameter(0, SigPar[0][x_2][y_2][5]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][6]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][5] == 0 && SigPar[0][x_2][y_2][6] == 0){ + sigL14=0; + } + parasigL = NULL; + delete parasigL; + } + + else if (l_4>=SigPar[0][x_2][y_2][11] && t<2.0){ + TF1* parasigL= new TF1("parasigT","expo"); + parasigL->FixParameter(0, SigPar[0][x_2][y_2][7]); + parasigL->FixParameter(1, SigPar[0][x_2][y_2][8]); + sigL14=parasigL->Eval(l_4); + + if (SigPar[0][x_2][y_2][7] == 0 && SigPar[0][x_2][y_2][8] == 0){ + sigL14=0; + } + parasigL = NULL; + delete parasigL; + } + + else { + sigL14=0; + } + // Taking the log of claculated sigL values + lsigL1 = TMath::Log(sigL1); //log value of sigL11. + lsigL3 = TMath::Log(sigL3); //log value of sigL3. + lsigL4 = TMath::Log(sigL14); //log value of sigL4. + // Calculated slopes of different lines + stb = lsigL4-lsigL3; //->interpolation from the third corner + stl = -(lsigL1-lsigL3); + + // Applying taylor's series formula without averaging the slopes + fsigLLa = lsigL3 + (q2-q2_1)*stb + (w-w_2)*stl; //->interpolation from the third corner + + // Find the anti-log of the taylor's series formula value + fsigLa = exp(fsigLLa); + } + + //.............................................................................. + //................................................................................... + else if (sigL2 == 0) { // if we loose 2nd corner, first we will always loose this corner as this correspond to highest -t value (interpolate from 3rd corner) // In this case, we will need atleat three corners to find the cross-section. And even after loosing second corner, we still have three corners to interpolate. // Taking the log of claculated sigT values @@ -975,7 +1316,7 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi lsigL4 = TMath::Log(sigL4); //log value of sigL4. // Calculated slopes of different lines - stb = lsigL3-lsigL4; //->interpolation from the third corner + stb = lsigL4-lsigL3; //->interpolation from the third corner stl = -(lsigL1-lsigL3); // Applying taylor's series formula without averaging the slopes @@ -983,12 +1324,15 @@ if(SigPar[0][x_1][y_1][9] != -10001){ // l_1 is t_min for the first corner - thi // Find the anti-log of the taylor's series formula value fsigLa = exp(fsigLLa); - } + } + + //................................................................................... + //................................................................................... } // end of if statement over t //.................................................................................................................................................................... else{ //cerr<<" Invalid t-value "< Date: Mon, 3 Apr 2023 16:32:14 -0600 Subject: [PATCH 20/35] Merged in solve function from Bill and Ishan. Compiles, runs with errors about interval. --- Config_EIC.json | 6 +- Config_SoLID.json | 2 + src/Asymmetry.cxx | 1 - src/ProductGen.cxx | 3 - .../archived_routines/PiPlus_prod.cc.SolveFn | 1285 ++++++++++ src/eic_evgen/eic.cc | 42 +- src/eic_evgen/eic_pim.cc | 10 +- src/eic_evgen/eic_pim.h | 6 + .../process_routine/DEMP_Reaction.cc | 280 ++- src/eic_evgen/process_routine/Pi0_prod.cc | 2216 +++++++---------- src/eic_evgen/reaction_routine.h | 65 +- 11 files changed, 2582 insertions(+), 1334 deletions(-) create mode 100644 src/eic_evgen/archived_routines/PiPlus_prod.cc.SolveFn diff --git a/Config_EIC.json b/Config_EIC.json index 8f64400..18905a1 100644 --- a/Config_EIC.json +++ b/Config_EIC.json @@ -26,10 +26,10 @@ "particle": "Pion+", // Choices: omega, pi+, pi0, K+ "hadron": "neutron", // Choices: Neutron, proton, Lambda or Sigma0 "ebeam": 5, // Electron beam energy in GeV - "hbeam": 41, // Hadron beam energy in GeV + "hbeam": 100, // Hadron beam energy in GeV //"hbeam_part":"proton", // Hadron beam particle, proton, deut or helium3, work in progress, will need to be added to shell script later on as an argument - "OutputType": "Pythia6", // choices: LUND (Docker), Pythia6 (ECCE Fun4All) or HEPMC3 (Athena) - "det_location": "ip8", // choices: ip6 for STAR, ip8 for PHENIX + "OutputType": "HEPMC3", // choices: LUND (Docker), Pythia6 (ECCE Fun4All) or HEPMC3 (Athena) + "det_location": "ip6", // choices: ip6 for STAR, ip8 for PHENIX "Ee_Low": 0.5, // The minimum scattered electron energy that will be generated as a fraction of the electron beam energy "Ee_High": 2.5, // The maximum scattered electron energy that will be generated as a fraction of the electron beam energy "e_Theta_Low": 60.0, // The minimum scattered electron angle (theta) that will be generated in degrees diff --git a/Config_SoLID.json b/Config_SoLID.json index be17aeb..06c6ead 100644 --- a/Config_SoLID.json +++ b/Config_SoLID.json @@ -4,8 +4,10 @@ // and degrees for angles. // n_events indicates number of attempts // SJDK 17/06/22 - This is an old .json I found from DEMPEvGen, I believe these are still valid options for DEMPGen + "experiment" : "solid", "output_file" : "Test.root", "n_events" : 10000, + "particle": "Pion+", "beam_energy": 11000, "targ_pol_x": 0.865, "targ_pol_y": 0, diff --git a/src/Asymmetry.cxx b/src/Asymmetry.cxx index 96e65e1..d59e146 100644 --- a/src/Asymmetry.cxx +++ b/src/Asymmetry.cxx @@ -79,7 +79,6 @@ int Asymmetry::Parameterize(vector in_Qsq) n = GK_Raw->Draw(tempname2, tempname3, "goff"); - // The previous version of this parameterization used // only one TF1. As a result, the parameters were // initialized by the previous fit. diff --git a/src/ProductGen.cxx b/src/ProductGen.cxx index dacf0d7..a276372 100644 --- a/src/ProductGen.cxx +++ b/src/ProductGen.cxx @@ -26,7 +26,6 @@ ProductGen::ProductGen(Particle* inInteraction, Particle* inTarget): extern Json::Value obj; - char AngleGenName[100] = "AngleGen"; double dummy[2] = {0,1}; double ThetaRange[2] = {obj["prod_pion_thetamin"].asDouble()*TMath::DegToRad(), @@ -127,8 +126,6 @@ int ProductGen::Solve(double theta, double phi) P*pars[2]); *Pion = *Pion1; - //std::cout << Pion->E() << std::endl; - Particle * Proton1 = new Particle(); *Proton1 = *Initial-*Pion; *Proton = *Proton1; diff --git a/src/eic_evgen/archived_routines/PiPlus_prod.cc.SolveFn b/src/eic_evgen/archived_routines/PiPlus_prod.cc.SolveFn new file mode 100644 index 0000000..45ee450 --- /dev/null +++ b/src/eic_evgen/archived_routines/PiPlus_prod.cc.SolveFn @@ -0,0 +1,1285 @@ +#include "reaction_routine.h" + +#include "eic.h" + +using namespace std; + +PiPlus_Production::PiPlus_Production() { + + cout << "Program Start" << endl; + +} + +/*--------------------------------------------------*/ +/// PiPlus_Production + +PiPlus_Production::PiPlus_Production(TString particle_str) { + + rParticle = particle_str; + +} + +PiPlus_Production::~PiPlus_Production() { + + ppiOut.close(); + ppiDetails.close(); + +} + +void PiPlus_Production::process_reaction() { + + Init(); + + if (gOutputType == "Pythia6"){ + PiPlus_Pythia6_Out_Init(); + } + else if (gOutputType == "HEPMC3"){ + PiPlus_HEPMC3_Out_Init(); + } + + for( long long int i = 0; i < rNEvents; i++ ) { + + rNEvent_itt = i; + fNGenerated ++; + + Progress_Report(); // This is happens at each 10% of the total event is processed + Processing_Event(); + } + + Detail_Output(); + +} + +void PiPlus_Production::Init() { + + pim* myPim; + + pd = dynamic_cast(myPim); + + rParticle_charge = ExtractCharge(rParticle); + + sTFile = Form("./LundFiles/eic_%s.txt", gfile_name.Data()); + sLFile= Form("./LundFiles/eic_input_%s.dat", gfile_name.Data()); + + ppiOut.open( sLFile.c_str() ); + ppiDetails.open( sTFile.c_str() ); + + qsq_ev = 0, t_ev = 0, w_neg_ev = 0, w_ev = 0; + rNEvents = fNEvents; + rNEvent_itt = 0; + + // 02/06/21 SJDK + // Set these values once the beam energies are read in + fPSF = ( fEBeam * ( fScatElec_E_Hi - fScatElec_E_Lo ) *( sin( fScatElec_Theta_F ) - sin( fScatElec_Theta_I ) ) * 2 * fPI *( sin( fPion_Theta_F ) - sin( fPion_Theta_I ) ) * 2 * fPI ); + fElectron_Kin_Col_GeV = fEBeam; + fElectron_Kin_Col = fElectron_Kin_Col_GeV * 1000.0; + + // cout << rNEvents << " " << fNEvents << endl; + + rFermiMomentum = pd->fermiMomentum(); + + // ---------------------------------------------------- + // Proton in collider (lab) frame + + r_lproton = GetProtonVector_lab(); + r_lprotong = GetProtonVector_lab() * fm; + + // ---------------------------------------------------- + // Electron in collider (lab) frame + + cout << "Fermi momentum: " << rFermiMomentum << endl; + + r_lelectron = GetElectronVector_lab(); + r_lelectrong = r_lelectron * fm; + + ///*--------------------------------------------------*/ + /// Getting the particle mass from the data base + + produced_X = ParticleEnum(rParticle); + fX_Mass = ParticleMass(produced_X)*1000; //MeV + fX_Mass_GeV = fX_Mass/1000; //GeV + + cout << rParticle << " " << produced_X << " " << fX_Mass_GeV << endl; + cout << rParticle_charge << endl; + + + ///*--------------------------------------------------*/ + /// This rParticle_charge is referring to the charge of the produced meson + + if (rParticle_charge == "+" ) { + rParticle_scat_nucleon = "Neutron"; + recoil_nucleon = Neutron; + f_Scat_Nucleon_Mass = fNeutron_Mass; + f_Scat_Nucleon_Mass_GeV = f_Scat_Nucleon_Mass/1000; + } + else if (rParticle_charge == "0" ) { + rParticle_scat_nucleon = "Proton"; + recoil_nucleon = Proton; + f_Scat_Nucleon_Mass = fProton_Mass; + f_Scat_Nucleon_Mass_GeV = f_Scat_Nucleon_Mass/1000; + } + else { + cerr << "Is the overall charge of the reaction conserved? " << endl; + cerr << "Please double check the input file and processes!" << endl; + cerr << "Exiting the program!" << endl; + exit(0); + } + + rDEG2RAD = fPI/180.0; + + fX_Theta_I = 0.0 * rDEG2RAD ; + fX_Theta_F = 50.0 * rDEG2RAD; + + cout << "Produced particle in exclusive production: " << rParticle << "; with mass: " << fX_Mass << " MeV "<< endl; + cout << fEBeam << " GeV electrons on " << fPBeam << " GeV ions" << endl; + + // Set luminosity value based upon beam energy combination + // See slide 11 in https://indico.cern.ch/event/1072579/contributions/4796856/attachments/2456676/4210776/CAP-EIC-June-7-2022-Seryi-r2.pdf + if ((fEBeam == 5.0 ) && (fPBeam == 41.0) ){ + fLumi = 0.44e33; + } + else if ((fEBeam == 5.0 ) && (fPBeam == 100.0) ){ + fLumi = 3.68e33; + } + else if ((fEBeam == 10.0 ) && (fPBeam == 100.0) ){ + fLumi = 4.48e33; + } + else if ((fEBeam == 18.0 ) && (fPBeam == 275.0) ){ + fLumi = 1.54e33; + } + + + + /*--------------------------------------------------*/ + + CoinToss = new TRandom3(); + + F = new TF1("F", + "[6]-sqrt([7]**2+x**2)-sqrt([8]**2+([3]-[0]*x)**2+([4]-[1]*x)**2+([5]-[2]*x)**2)", + 0, 12000); + + extern Json::Value obj; + + char AngleGenName[100] = "AngleGen"; + double dummy[2] = {0,1}; + double ThetaRange[2] = {obj["prod_pion_thetamin"].asDouble()*TMath::DegToRad(), + obj["prod_pion_thetamax"].asDouble()*TMath::DegToRad()}; + + double PhiRange[2] = {0, 360*TMath::DegToRad()}; + AngleGen = new CustomRand(AngleGenName, dummy, + ThetaRange, PhiRange); + + UnitVect = new TVector3(0,0,1); + + ///*--------------------------------------------------*/ + // Produced hadron and recoilded nucleon from the solve function + + r_lX_solved = new Particle(); + r_l_scat_nucleon_solved = new Particle(); + + Interaction = new Particle(); + Target = new Particle(); + Initial = new Particle(); + Final = new Particle(); + + VertBeamElec = new Particle(); + VertScatElec = new Particle(); + + Photon = new Particle(); + +// ///*--------------------------------------------------*/ +// /// For testing +// Photon = new Particle(); +// VertBeamElec->SetPxPyPzE(0, 0, 11000, 11000); +// VertScatElec->SetPxPyPzE(15.934, 1106.06, 2281.09, 2535.16); +// Target->SetPxPyPzE(0, 0, 0, 939.565); +// //*--------------------------------------------------*/ + + + +} + +void PiPlus_Production::Processing_Event() { + + // ---------------------------------------------------- + // Considering Fermi momentum for the proton + // ---------------------------------------------------- + + if( kCalcFermi ) { + Consider_Proton_Fermi_Momentum(); + } + + // ---------------------------------------------------- + // Boost vector from collider (lab) frame to protons rest frame (Fix target) + // ---------------------------------------------------- + + beta_col_rf = r_lproton.BoostVector(); + fGamma_Col_RF = 1.0/sqrt( 1 - pow( beta_col_rf.Mag() , 2 ) ); + + // --------------------------------------------------------------------- + // Specify the energy and solid angle of scatterd electron in Collider (lab) frame + // --------------------------------------------------------------------- + fScatElec_Theta_Col = acos( fRandom->Uniform( cos( fScatElec_Theta_I ) , cos( fScatElec_Theta_F ) ) ); + fScatElec_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); + fScatElec_Energy_Col = fRandom->Uniform( fScatElec_E_Lo * fElectron_Energy_Col , fScatElec_E_Hi * fElectron_Energy_Col ); + + // ---------------------------------------------------- + // Produced Particle X in Collider frame + // ---------------------------------------------------- + + /// The generic produced particle in the exclusive reaction is labelled as X + fX_Theta_Col = acos( fRandom->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); + fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); + + // --------------------------------------------------------------------- + // Specify the energy and solid angle of scatterd electron in Collider (lab) frame + // --------------------------------------------------------------------- + + fScatElec_Mom_Col = sqrt( pow( fScatElec_Energy_Col,2) - pow( fElectron_Mass , 2) ); + fScatElec_MomZ_Col = ( fScatElec_Mom_Col * cos(fScatElec_Theta_Col) ); + fScatElec_MomX_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * cos(fScatElec_Phi_Col) ); + fScatElec_MomY_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * sin(fScatElec_Phi_Col) ); + + r_lscatelec.SetPxPyPzE( fScatElec_MomX_Col, fScatElec_MomY_Col, fScatElec_MomZ_Col, fScatElec_Energy_Col); + + r_lscatelecg = r_lscatelec * fm; + + // ---------------------------------------------------- + // Photon in collider (lab) frame and Qsq + // ---------------------------------------------------- + + r_lphoton = r_lelectron - r_lscatelec; + r_lphotong = r_lelectrong - r_lscatelecg; + + fQsq_GeV = -1.* r_lphotong.Mag2(); + + if ( fQsq_GeV < 3.0 ) { + qsq_ev++; + return; + } + + // ---------------------------------------------------- + // W square, Invariant Mass (P_g + P_p)^2 + // ---------------------------------------------------- + + TLorentzVector lwg; + lwg = r_lprotong + r_lphotong; + fW_GeV = lwg.Mag(); + fWSq_GeV = lwg.Mag2(); + + + if ( fWSq_GeV < 0 ) { + w_neg_ev++; + return; + } + + ///*--------------------------------------------------*/ + // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum + // --------------------------------------------------------- + // pion momentum in collider frame, analytic solution starts + // --------------------------------------------------------- + + ///*--------------------------------------------------*/ + /// Modifier: Ishan Goel + /// Date: March 22, 2023 + /// This Solve function is the same as the one implemented in the SoLID generator part + // Removing cases with no solution + if(!Solve()){ + return; + } + + /*--------------------------------------------------*/ + + double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); + double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); + double fupz = cos( fX_Theta_Col ); + + double fuqx = sin( r_lphoton.Theta() ) * cos( r_lphoton.Phi() ); + double fuqy = sin( r_lphoton.Theta() ) * sin( r_lphoton.Phi() ); + double fuqz = cos( r_lphoton.Theta() ); + + double fa = -(r_lphoton.Vect()).Mag() * ( fupx * fuqx + fupy * fuqy + fupz * fuqz ); + double fb = pow ( (r_lphoton.Vect()).Mag() , 2 ); + double fc = r_lphoton.E() + fProton_Mass; + + fa = ( fa - std::abs( (r_lproton.Vect()).Mag() ) * ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fupx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fupy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fupz ) ) ); + + double factor = ( pow( (r_lproton.Vect()).Mag() , 2 ) + 2.0 * (r_lphoton.Vect()).Mag() * (r_lproton.Vect()).Mag() * + ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fuqx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fuqy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fuqz ) ) ); + + fb = fb + factor; + fc = r_lphoton.E() + r_lproton.E(); + + double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; + + double fQA = 4.0 * ( fa * fa - fc * fc ); + double fQB = 4.0 * fc * ft; + + double fQC = -4.0 * fa * fa * fX_Mass * fX_Mass - ft * ft; + + fradical = fQB * fQB - 4.0 * fQA * fQC; + + fepi1 = ( -fQB - sqrt( fradical ) ) / ( 2.0 * fQA ); + fepi2 = ( -fQB + sqrt( fradical ) ) / ( 2.0 * fQA ); + + ///--------------------------------------------------------- + /// Particle X momentum in collider frame, analytic solution + /// And obtain recoiled proton in collider (lab) frame + ///--------------------------------------------------------- + +// r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), +// ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), +// ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), +// fepi1 ); +// +// r_l_scat_nucleon.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), +// ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), +// ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), +// sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + +// pow( f_Scat_Nucleon_Mass , 2) ) ); + + ///-------------------------------------------------- + /// Output with the Solve Function + /// Setting the solution values to X and recoiled nucleon + + r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); + r_l_scat_nucleon.SetPxPyPzE(r_l_scat_nucleon_solved->Px(), r_l_scat_nucleon_solved->Py(), r_l_scat_nucleon_solved->Pz(), r_l_scat_nucleon_solved->E()); + + ///-------------------------------------------------- + + r_lX_g = r_lX * fm; + r_l_scat_nucleon_g = r_l_scat_nucleon * fm; + + // ---------------------------------------------------------------------------------------------- + // Calculate w = (proton + photon)^2 + // ---------------------------------------------------------------------------------------------- + + if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { + w_ev++; + return; + } + + r_lw = r_lproton + r_lphoton; + fW = r_lw.Mag(); + + // ---------------------------------------------------------------------------------------------- + // Calculate w prime w' = (proton + photon - pion)^2 + // ---------------------------------------------------------------------------------------------- + + lwp = r_lprotong + r_lphotong - r_lX_g; + fW_Prime_GeV = lwp.Mag(); + + fsini = r_lelectron + r_lproton; + fsfin = r_lscatelec + r_lX + r_l_scat_nucleon; + + fsinig = fsini * fm; + fsfing = fsfin * fm; + // SJDK 15/06/21 - Mandlestam S conservation check - doesn't actually seem to be utilised? + fMandSConserve = std::abs( fsinig.Mag() - fsfing.Mag() ); + + // SJDK 15/06/21 - Added integer counters for conservation law check and for NaN check + if (r_lX.E() != r_lX.E()){ // SJDK 15/06/21 - If the energy of the produced meson is not a number, return and add to counter + fNaN++; + return; + } + kSConserve = false; + if( std::abs( fsinig.Mag() - fsfing.Mag() ) < fDiff ) { + kSConserve = true; + } + + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_nucleon, 0.5) != 1 ){ + fConserve++; + return; + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // Start // + // Transformation of e', pi- and recoil proton to target's rest frame without energy loss // + //////////////////////////////////////////////////////////////////////////////////////////// + + lproton_rf = r_lproton; + lproton_rf.Boost(-beta_col_rf); + lproton_rfg = lproton_rf * fm; + + lelectron_rf = r_lelectron; + lelectron_rf.Boost(-beta_col_rf); + lelectron_rfg = lelectron_rf * fm; + + lscatelec_rf = r_lscatelec; + lscatelec_rf.Boost(-beta_col_rf); + lscatelec_rfg = lscatelec_rf * fm; + + lphoton_rf = r_lphoton; + lphoton_rf.Boost(-beta_col_rf); + lphoton_rfg = lphoton_rf * fm; + + lX_rf = r_lX; + lX_rf.Boost(-beta_col_rf); + lX_rfg = lX_rf * fm; + + l_scat_nucleon_rf = r_l_scat_nucleon; + l_scat_nucleon_rf.Boost(-beta_col_rf); + l_scat_nucleon_rf_g = l_scat_nucleon_rf * fm; + + //////////////////////////////////////////////////////////////////////////////////////////// + // End // + // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // + //////////////////////////////////////////////////////////////////////////////////////////// + + + // ----------------------------------------------------------------------------------------- + // Calculate -t + // ----------------------------------------------------------------------------------------- + + fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / (lphoton_rf.E() + fProton_Mass ); + fGamma_CM_RF = (lphoton_rf.E() + fProton_Mass) / fW; + fX_Energy_CM = (pow(fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_Nucleon_Mass , 2) ) / ( 2.0 * fW); + fX_Mom_CM = sqrt(pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); + fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; + fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; + + // this equation is valid for parallel kinematics only! + fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_lX.Vect()).Mag()),2) - pow((r_lphoton.E() - r_lX.E()),2)); + fT_Para_GeV = fT_Para/1000000.0; + + lt = r_lphoton - r_lX; + ltg = lt * fm; + + fT = -1.*lt.Mag2(); + fT_GeV = -1.*ltg.Mag2(); + + if ( gKinematics_type == 1 && fT_GeV > 0.5 ) { + t_ev++; + return; + } + + if ( gKinematics_type == 2 && fT_GeV > 1.3 ) { + t_ev++; + return; + } + + fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); + fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); + fz = r_lX.E()/r_lphoton.E(); + + // ------------------------------------------------------------------------------------------------------- + // Calculation of Phi ( azimuthal angle of pion momentum w.r.t lepton plane in target's rest frame) + // Calculation of PhiS ( azimuthal angle of target polarization w.r.t lepton plane in target's rest frame) + // ------------------------------------------------------------------------------------------------------- + + v3Photon.SetX( lphoton_rfg.X() ); + v3Photon.SetY( lphoton_rfg.Y() ); + v3Photon.SetZ( lphoton_rfg.Z() ); + + v3Electron.SetX( lelectron_rfg.X() ); + v3Electron.SetY( lelectron_rfg.Y() ); + v3Electron.SetZ( lelectron_rfg.Z() ); + + v3X.SetX( lX_rfg.X() ) ; + v3X.SetY( lX_rfg.Y() ) ; + v3X.SetZ( lX_rfg.Z() ); + + v3S.SetX( -1 ); + v3S.SetY( 0 ); + v3S.SetZ( 0 ); + + v3PhotonUnit = v3Photon.Unit(); + v3QxL = v3Photon.Cross(v3Electron); + v3QxP = v3Photon.Cross(v3X); + v3QxS = v3Photon.Cross(v3S); + v3LxP = v3Electron.Cross(v3X); + v3LxS = v3Electron.Cross(v3S); + v3PxL = v3X.Cross(v3Electron); + v3QUnitxL = v3PhotonUnit.Cross(v3Electron); + v3QUnitxP = v3PhotonUnit.Cross(v3X); + v3QUnitxS = v3PhotonUnit.Cross(v3S); + + /*--------------------------------------------------*/ + // Get the Phi scattering angle with respect to the electron scattering plane + fPhi = Get_Phi_X_LeptonPlane_RF (); + + /*--------------------------------------------------*/ + // Get the Phi scattering angle with respect to the electron scattering plane + fPhiS = Get_Phi_TargPol_LeptonPlane_RF(); + + fTheta_X_Photon_RF = fRAD2DEG * acos( ( v3Photon.Dot( v3X ) ) / ( v3Photon.Mag() * v3X.Mag() ) ); + if ( fTheta_X_Photon_RF < 0 ) { fTheta_X_Photon_RF = 180.0 + fTheta_X_Photon_RF; } + + // ----------------------------------------------------------------------------------- + // If we have fermi momentum then epsilon should be in rest frame + // The theta angle of scattered angle used in expression of epsilon is the angle + // with respect to direction of incoming electron in the rest frame of target nucleon + // epsilon=1./(1.+ 2.*(pgam_restg**2)/q2g * *(tand(thscat_rest/2.))**2) + // ----------------------------------------------------------------------------------- + + double fTheta_EEp = (lelectron_rf.Vect()).Angle(lscatelec_rf.Vect()); + + fEpsilon = 1.0 / ( 1.0 + 2.0 * ( pow( (lphoton_rfg.Vect()).Mag(),2)/fQsq_GeV ) * pow( tan( fTheta_EEp / 2 ) , 2 ) ); + + // ---------------------------------------------------- + // Virtual Photon flux factor in units of 1/(GeV*Sr) + // ---------------------------------------------------- + fFlux_Factor_Col = (fAlpha/(2.0*pow(fPi,2))) * (r_lscatelecg.E() / r_lelectrong.E()) * + ( pow(fW_GeV,2) - pow(fProton_Mass_GeV,2) ) / (2.0*fProton_Mass_GeV*fQsq_GeV*(1.0 - fEpsilon)); + + fFlux_Factor_RF = ( fAlpha / ( 2.0 * pow( fPi , 2 ) ) ) * ( lscatelec_rfg.E() / lelectron_rfg.E() ) * + ( pow( fW_GeV , 2 ) - pow( fProton_Mass_GeV , 2 ) ) / + ( 2.0 * fProton_Mass_GeV * fQsq_GeV * ( 1.0 - fEpsilon ) ); + + // ---------------------------------------------------- + // Jacobian dt/dcos(theta*)dphi in units of GeV2/sr + // ---------------------------------------------------- + fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); // Eqn 22 in paper + + fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; // Eqn 21 in paper + + // ---------------------------------------------------- + // Jacobian dOmega* / dOmega dimensionless + // ---------------------------------------------------- + fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / + ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - + ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); // Differs from next line in photon vect -> lphoton_rf vs r_lphoton + + fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / // This one is actually used subsequently, so this must be Eqn 20 + ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - + ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); + + + // cout << lX_rf.Vect().Mag() << " " << << << << << << << << endl; + // cout << fJacobian_CM_RF << " " << fJacobian_CM_Col << endl; + + // ----------------------------------------------------------------------------------------------------------- + // CKY sigma L and T starts + // ----------------------------------------------------------------------------------------------------------- + // r_fSig_T = 1; + // r_fSig_L = 1; + // ------------------------------------------------------------------------------------------- + + r_fSig = Get_Total_Cross_Section(); + + // ----------------------------------------------------------------------------------------------------------- + // CKY sigma L and T ends + // ----------------------------------------------------------------------------------------------------------- + + fSigma_Col = r_fSig * fFlux_Factor_Col * fA * fJacobian_CM_Col; + + if ( ( fSigma_Col <= 0 ) || std::isnan( fSigma_Col ) ) { + fNSigmaNeg ++; + return; + } + + // ----------------------------------------------------------------------------------------------------------- + // Lab cross section Phase Space Conversion Luminosity Total events tried + // Hz = ub / ( sr^2 * GeV ) * GeV * sr^2 * ( cm^2 / ub ) * ( # / ( cm^2 * sec ) ) / ( # ) + + // SJDK 11/05/21 - This is the previous non unit weight + // SJDK 24/06/21 - Explicitly taking the absolute value of the weigth such that the value is positive! + fEventWeight = abs(fSigma_Col * fPSF * fuBcm2 * fLumi / fNEvents); // in Hz + // SJDK 21/06/21 - Commenting out "unit weight" calculation for now, reverting to old version + // SJDK 11/05/21 - New weight calculation, division by ceiling weight value to attempt to get a "unit" value + //fEventWeight = abs(fSigma_Col * fPSF * fuBcm2 * fLumi )/fEventWeightCeil; + // if ( (fEventWeight > 1) || (fEventWeight <= 0) ){ + // fNWeightUnphys ++; + // return; + // } + // SJDK 21/06/21 - Reversed sign of condition here, actually want to reject those with a value less than the random number + // fEventWeightRn = fRandom->Uniform( 0, 1.0); + // if ( fEventWeight < fEventWeightRn ){ + // fNWeightReject ++; + // return; + // } + + fNRecorded++; + fLundRecorded++; + fRatio = fNRecorded / fNGenerated; + + if (gOutputType == "Pythia6"){ + PiPlus_Pythia6_Output(); + } + else if (gOutputType == "LUND"){ + Lund_Output(); + } + else if (gOutputType == "HEPMC3"){ + PiPlus_HEPMC3_Output(); + } +} + +void PiPlus_Production::Progress_Report() { + + dFractTime = time(0); + + if ( rNEvent_itt % ( rNEvents / 10 ) == 0 ) { + cout << "Event: " << setw(8) << rNEvent_itt + << " % of events " << setw(4) << ((1.0*rNEvent_itt)/(1.0*rNEvents))*100.0 + << " Day: " << dFractTime.GetDay() + << " Time: " << dFractTime.GetHour() + << ":" << dFractTime.GetMinute() + << ":" << dFractTime.GetSecond() + << endl; + } +} + +TLorentzVector PiPlus_Production::GetProtonVector_lab() { + + ///*--------------------------------------------------*/ + // // SJDK - 12/01/22 + // // Crossing angle + // // Set crossing angle to 0 for fun4all, also required for ATHENA simulations + // fProton_Theta_Col = 0.050; + // fProton_Theta_Col = 0.025; + + fProton_Theta_Col = 0.0; + + ///*--------------------------------------------------*/ + fProton_Phi_Col = fProton_incidence_phi; + + fProton_Mom_Col = fPBeam * 1e3; + fVertex_X = 0.; + fVertex_Y = 0.; + fVertex_Z = 0.; + + TLorentzVector lproton( fProton_Mom_Col * sin(fProton_Theta_Col) * cos(fProton_Phi_Col), + fProton_Mom_Col * sin(fProton_Theta_Col) * sin(fProton_Phi_Col), + fProton_Mom_Col * cos(fProton_Theta_Col), + sqrt( pow( fProton_Mom_Col , 2 ) + pow( fProton_Mass , 2 ) ) ); + + return lproton; + +} + +//*--------------------------------------------------*/ +// Proton in collider (lab) frame +// ---------------------------------------------------- + +void PiPlus_Production::Consider_Proton_Fermi_Momentum() { + + fProton_Mom_Col = fProton_Mom_Col + rFermiMomentum; + fProton_Theta_Col = acos( fRandom->Uniform( cos(0.0) , cos(fPi) ) ); + fProton_Phi_Col = fRandom->Uniform( 0 , 360 ); + + double px, py, pz, e; + + px = fProton_Mom_Col * sin(fProton_Theta_Col) * cos(fProton_Phi_Col); + py = fProton_Mom_Col * sin(fProton_Theta_Col) * sin(fProton_Phi_Col); + pz = fProton_Mom_Col * cos(fProton_Theta_Col); + e = sqrt( pow( fProton_Mom_Col , 2 ) + pow( fProton_Mass , 2 ) ); + + r_lproton.SetPxPyPzE(px,py,pz,e); + + r_lprotong = r_lproton*fm; + +} + +// ---------------------------------------------------- +// Electron in collider (lab) frame +// ---------------------------------------------------- + +TLorentzVector PiPlus_Production::GetElectronVector_lab() { + + fElectron_Energy_Col = fElectron_Kin_Col; + fElectron_Mom_Col = sqrt( pow(fElectron_Energy_Col , 2) - pow(fElectron_Mass , 2) ); + fElectron_Theta_Col = fPi; + fElectron_Phi_Col = 0.0; + fElectron_MomZ_Col = fElectron_Mom_Col * cos(fElectron_Theta_Col); + fElectron_MomX_Col = fElectron_Mom_Col * sin(fElectron_Theta_Col) * cos(fElectron_Phi_Col); + fElectron_MomY_Col = fElectron_Mom_Col * sin(fElectron_Theta_Col) * sin(fElectron_Phi_Col); + + cout << "Define: " << fElectron_MomZ_Col << " "<< fElectron_Mom_Col << " " << cos(fElectron_Theta_Col) << endl; + + TLorentzVector lelectron( fElectron_MomX_Col, fElectron_MomY_Col, fElectron_MomZ_Col, fElectron_Energy_Col); + + return lelectron; + +} + +Double_t PiPlus_Production::Get_Phi_X_LeptonPlane_RF () { + + fCos_Phi_X_LeptonPlane_RF = ( ( v3QUnitxL.Dot( v3QUnitxP ) ) / ( v3QUnitxL.Mag() * v3QUnitxP.Mag() ) ); // hep-ph/0410050v2 + fSin_Phi_X_LeptonPlane_RF = ( ( v3LxP.Dot( v3PhotonUnit ) ) / ( v3QUnitxL.Mag() * v3QUnitxP.Mag() ) ); // hep-ph/0410050v2 + if ( fSin_Phi_X_LeptonPlane_RF >= 0 ) + fPhi_X_LeptonPlane_RF = fRAD2DEG * acos( ( v3QUnitxL.Dot( v3QUnitxP ) ) / ( v3QUnitxL.Mag() * v3QUnitxP.Mag() ) ); + if ( fSin_Phi_X_LeptonPlane_RF < 0 ) + fPhi_X_LeptonPlane_RF = 360.0 - std::abs( fRAD2DEG * acos( ( v3QUnitxL.Dot( v3QUnitxP ) ) / ( v3QUnitxL.Mag() * v3QUnitxP.Mag() ) ) ); + + return fPhi_X_LeptonPlane_RF; + +} + +Double_t PiPlus_Production::Get_Phi_TargPol_LeptonPlane_RF () { + + fCos_Phi_TargPol_LeptonPlane_RF = ( ( v3QUnitxL.Dot( v3QUnitxS ) ) / ( v3QUnitxL.Mag() * v3QUnitxS.Mag() ) ); // hep-ph/0410050v2 + fSin_Phi_TargPol_LeptonPlane_RF = ( ( v3LxS.Dot( v3PhotonUnit ) ) / ( v3QUnitxL.Mag() * v3QUnitxS.Mag() ) ); // hep-ph/0410050v2 + if ( fSin_Phi_TargPol_LeptonPlane_RF >= 0 ) + fPhi_TargPol_LeptonPlane_RF = fRAD2DEG * acos( ( v3QUnitxL.Dot( v3QUnitxS ) ) / ( v3QUnitxL.Mag() * v3QUnitxS.Mag() ) ); + if ( fSin_Phi_TargPol_LeptonPlane_RF < 0 ) + fPhi_TargPol_LeptonPlane_RF = 360.0 - std::abs( fRAD2DEG * acos( ( v3QUnitxL.Dot( v3QUnitxS ) ) / ( v3QUnitxL.Mag() * v3QUnitxS.Mag() ) ) ); + + return fPhi_TargPol_LeptonPlane_RF; + +} + +Double_t PiPlus_Production::Get_Total_Cross_Section() { + + Double_t total_sig; + + Particle_t p = ParticleEnum(rParticle); + + switch (p) { + + case Pi0: total_sig = GetPi0_CrossSection(); + case PiPlus: total_sig = GetPiPlus_CrossSection(); + } + + return total_sig; + +} + +Double_t PiPlus_Production::GetPi0_CrossSection() { + + double_t sig_total; + return sig_total; + +} + +/*--------------------------------------------------*/ +/// Charged Pi+ moduel: +/// Author: Z. Ahmed +/// Date: 2017 + +Double_t PiPlus_Production::GetPiPlus_CrossSection(){ + + double_t sig_total; + + // -------------------------------------------------------------------------------------------------- + // CKY sigma L and T starts + // -------------------------------------------------------------------------------------------------- + double lpar0 = 0., lpar1 = 0., lpar2 = 0., lpar3 = 0., lpar4 = 0., lpar5 = 0., lpar6 = 0.; + double tpar0 = 0., tpar1 = 0., tpar2 = 0., tpar3 = 0., tpar4 = 0.; + + + lpar0 = 0.; lpar1 = 0.; lpar2 = 0.; lpar3 = 0.; lpar4 = 0.; lpar5 = 0.; lpar6 = 0.; + tpar0 = 0.; tpar1 = 0.; tpar2 = 0.; tpar3 = 0.; tpar4 = 0.; + + fSig_L = 0; + fSig_T = 0; + + if ( ( fT_GeV > 0. ) && ( fT_GeV < 0.15 ) ) { + eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLonglandau = new TF1("sigmaL","landau", 0.0 , 0.15 ); + fitCKYLonglandau->FixParameter( 0 , lpar0 ); + fitCKYLonglandau->FixParameter( 1 , lpar1 ); + fitCKYLonglandau->FixParameter( 2 , lpar2 ); + fSig_L = fitCKYLonglandau->Eval(fT_GeV); + if ( lpar0 == 0 || lpar1 == 0 || lpar2 == 0 ) + fSig_L = 0; + fitCKYLonglandau = NULL; + delete fitCKYLonglandau; + } + else if ( ( fT_GeV > 0.15 ) && ( fT_GeV < 0.5 ) ) { + eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLongexpo1 = new TF1("sigmaL","expo", 0.15 , 0.5 ); + fitCKYLongexpo1->FixParameter( 0 , lpar3 ); + fitCKYLongexpo1->FixParameter( 1 , lpar4 ); + fSig_L = fitCKYLongexpo1->Eval(fT_GeV); + if ( lpar3 == 0 || lpar4 == 0 ) + fSig_L = 0; + fitCKYLongexpo1 = NULL; + delete fitCKYLongexpo1; + } + else if ( ( fT_GeV > 0.5 ) && ( fT_GeV < 1.3 ) ) { + eicSigmaL( fW_GeV, fQsq_GeV, lpar0, lpar1, lpar2 , lpar3 , lpar4 , lpar5 , lpar6 ); + TF1 *fitCKYLongexpo2 = new TF1("sigmaL","expo", 0.5 , 1.3 ); + fitCKYLongexpo2->FixParameter( 0 , lpar5 ); + fitCKYLongexpo2->FixParameter( 1 , lpar6 ); + fSig_L = fitCKYLongexpo2->Eval(fT_GeV); + if ( lpar5 == 0 || lpar6 == 0 ) + fSig_L = 0; + fitCKYLongexpo2 = NULL; + delete fitCKYLongexpo2; + } + else { + fSig_L = 0; + } + + // ------------------------------------------------------------------------------------------- + // SJDK - 02/06/22 - The validity range here was inconsistent, this only went from 0.0 to 0.15, leaving a gap between 0.15 to 0.2 + // I changed the range to remove this gap. + if ( ( fT_GeV > 0.0 ) && ( fT_GeV < 0.2 ) ) { + eicSigmaT( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); + TF1 *fitCKYTranspol2 = new TF1("sigmaL","pol2", 0.0 , 0.2 ); + fitCKYTranspol2->FixParameter( 0 , tpar0 ); + fitCKYTranspol2->FixParameter( 1 , tpar1 ); + fitCKYTranspol2->FixParameter( 2 , tpar2 ); + fSig_T = fitCKYTranspol2->Eval(fT_GeV); + if ( tpar0 == 0 || tpar1 == 0 || tpar2 == 0 ) + fSig_T = 0; + fitCKYTranspol2 = NULL; + delete fitCKYTranspol2; + } + else if ( ( fT_GeV > 0.2 ) && ( fT_GeV < 1.3 ) ) { + eicSigmaT( fW_GeV, fQsq_GeV, tpar0, tpar1, tpar2 , tpar3 , tpar4 ); + TF1 *fitCKYTransexpo = new TF1("sigmaL","expo", 0.2 , 1.3 ); + fitCKYTransexpo->FixParameter( 0 , tpar3 ); + fitCKYTransexpo->FixParameter( 1 , tpar4 ); + fSig_T = fitCKYTransexpo->Eval(fT_GeV); + if ( tpar3 == 0 || tpar4 == 0 ) + fSig_T = 0; + fitCKYTransexpo = NULL; + delete fitCKYTransexpo; + } + + // ------------------------------------------------------------------------------------------- + + fSig_VR = fSig_T + fEpsilon * fSig_L; + + sig_total = fSig_VR; + + return sig_total; +} + +/*--------------------------------------------------*/ +/// Output generator detail + +void PiPlus_Production::Detail_Output() { + + ppiDetails << "Total events tried " << setw(20) << fNGenerated << endl; + ppiDetails << "Total events recorded " << setw(20) << fNRecorded << endl; + // 09/02/22 - Commented out, not used anymore + //ppiDetails << "Max weight value " << setw(20) << fEventWeightCeil << endl; + ppiDetails << "Number of events with w more than 10.6 " << setw(20) << w_ev << endl; + ppiDetails << "Number of events with wsq negative " << setw(20) << w_neg_ev << endl; + ppiDetails << "Number of events with qsq less than 3 " << setw(20) << qsq_ev << endl; + ppiDetails << "Number of events with Meson (X) energy NaN " << setw(20) << fNaN << endl; + ppiDetails << "Number of events failing conservation law check " << setw(20) << fConserve << endl; + ppiDetails << "Total events passing conservation laws " << setw(20) << conserve << endl; + ppiDetails << "Total events failed energy conservation " << setw(20) << ene << endl; + ppiDetails << "Total events failed momentum conservation " << setw(20) << mom << endl; + ppiDetails << "Number of events with -t more than threshold " << setw(20) << t_ev << endl; + // SJDK 21/06/21 - Commenting out, reverting to old weight determination + //ppiDetails << "Number of events with unit weight outside of 0 to 1 " << setw(20) << fNWeightUnphys << endl; + //ppiDetails << "Number of events with unit weight less than random number " << setw(20) << fNWeightReject << endl; + ppiDetails << "Number of events with w less than threshold " << setw(20) << fWSqNeg << endl; + ppiDetails << "Number of events with mom not conserve " << setw(20) << fNMomConserve << endl; + ppiDetails << "Number of events with Sigma negative " << setw(20) << fNSigmaNeg << endl; + ppiDetails << "Number of lund events " << setw(20) << fLundRecorded << endl; + + ppiDetails << "Seed used for the Random Number Generator " << setw(20) << fSeed << endl; + +} + +////*-------------------------------------------------- +/// Functions for different output formats follow + +void PiPlus_Production::Lund_Output() { + + ppiOut << "3" + << " \t " << fPhi // var 1 + << " \t " << fPhiS // var 2 + << " \t " << fx // var 3 + << " \t " << "1" + << " \t " << fQsq_GeV // var 4 + << " \t " << fT_GeV // var 5 + << " \t " << fW_GeV // var 6 + << " \t " << fEpsilon // var 7 + << " \t " << fEventWeight // var 8 + << endl; + + // Produced Particle X + ppiOut << setw(10) << "1" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(produced_X) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lX_g.X() + << setw(16) << r_lX_g.Y() + << setw(16) << r_lX_g.Z() + << setw(16) << r_lX_g.E() + << setw(16) << fX_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Scattered electron + ppiOut << setw(10) << "2" + << setw(10) << "-1" + << setw(10) << "1" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lscatelecg.X() + << setw(16) << r_lscatelecg.Y() + << setw(16) << r_lscatelecg.Z() + << setw(16) << r_lscatelecg.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Recoiled neutron + ppiOut << setw(10) << "3" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(recoil_nucleon) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_l_scat_nucleon_g.X() + << setw(16) << r_l_scat_nucleon_g.Y() + << setw(16) << r_l_scat_nucleon_g.Z() + << setw(16) << r_l_scat_nucleon_g.E() + << setw(16) << f_Scat_Nucleon_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; +} + +void PiPlus_Production::PiPlus_Pythia6_Out_Init() { + + print_itt = 0; + + ppiOut << "DEMP Event FILE" << endl; + ppiOut << "============================================" << endl; + ppiOut << "I, ievent, nParticles, Weight" << endl; + ppiOut << "============================================" << endl; + ppiOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; + ppiOut << "============================================" << endl; + +} + +void PiPlus_Production::PiPlus_Pythia6_Output() { + + ppiOut << "0" << " \t\t\t " << print_itt << " \t\t\t " << "1" << " \t\t\t " << fEventWeight << endl; // var 1 + + print_itt++; + + ppiOut << "============================================" << endl; + + ///*--------------------------------------------------*/ + // Initial State + + ppiOut << "1" + << setw(6) << "21" + << setw(6) << "11" + << setw(6) << "0" + << setw(6) << "3" + << setw(6) << "4" + + << setw(14) << r_lelectrong.X() + << setw(14) << r_lelectrong.Y() + << setw(14) << r_lelectrong.Z() + << setw(14) << r_lelectrong.E() + << setw(14) << fElectron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + ppiOut << "2" + << setw(6) << "21" + << setw(6) << "2212" + << setw(6) << "0" + << setw(6) << "5" + << setw(6) << "6" + + << setw(14) << r_lprotong.X() + << setw(14) << r_lprotong.Y() + << setw(14) << r_lprotong.Z() + << setw(14) << r_lprotong.E() + << setw(14) << fProton_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + ppiOut << "3" + << setw(6) << "21" + << setw(6) << "22" + << setw(6) << "1" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lphotong.X() + << setw(14) << r_lphotong.Y() + << setw(14) << r_lphotong.Z() + << setw(14) << r_lphotong.E() + << setw(14) << r_lphotong.M() + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + + ///*--------------------------------------------------*/ + // Final State + + // Scattered electron + ppiOut << "4" + << setw(6) << "1" + << setw(6) << "11" + << setw(6) << "1" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lscatelecg.X() + << setw(14) << r_lscatelecg.Y() + << setw(14) << r_lscatelecg.Z() + << setw(14) << r_lscatelecg.E() + << setw(14) << fElectron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + // Recoiled nucleon + ppiOut << "5" + << setw(6) << "1" + << setw(6) << PDGtype(recoil_nucleon) + << setw(6) << "2" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_l_scat_nucleon_g.X() + << setw(14) << r_l_scat_nucleon_g.Y() + << setw(14) << r_l_scat_nucleon_g.Z() + << setw(14) << r_l_scat_nucleon_g.E() + << setw(14) << f_Scat_Nucleon_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + // Produced Particle X + ppiOut << "6" + << setw(6) << "1" + << setw(6) << PDGtype(produced_X) + << setw(6) << "2" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lX_g.X() + << setw(14) << r_lX_g.Y() + << setw(14) << r_lX_g.Z() + << setw(14) << r_lX_g.E() + << setw(14) << fX_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + ppiOut << "=============== Event finished ===============" << endl; + +} + +/*--------------------------------------------------*/ + +void PiPlus_Production::PiPlus_HEPMC3_Out_Init() { + + print_itt = 0; + ppiOut << "HepMC::Version 3.02.02" << endl; + ppiOut << "HepMC::Asciiv3-START_EVENT_LISTING" << endl; + +} + +/*--------------------------------------------------*/ + +void PiPlus_Production::PiPlus_HEPMC3_Output() { + + // HEPMC3 output for Athena/EPIC simulations + + // First line - E - Event# - #Vertices - #Particles + ppiOut << "E" << " " << print_itt << " " << "1" << " " << 5 << endl; + print_itt++; + // Second line, Units - U - ENERGY UNIT - DISTANCE UNIT + ppiOut << "U" << " " << "GEV" << " " << "MM" << endl; + // Third line, optional attributes, the weight + ppiOut << "A" << " " << "0" << " " << "weight" << " " << fEventWeight << endl; + // Beam particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (4, incoming beam particle) + ppiOut << "P" << " " << "1" << " " << "0" << " " << "11" << " " << r_lelectrong.X() << " " << r_lelectrong.Y() << " " << r_lelectrong.Z() << " " << r_lelectrong.E() << " " << fElectron_Mass_GeV << " " << "4" << endl; + ppiOut << "P" << " " << "2" << " " << "0" << " " << "2212" << " " << r_lprotong.X() << " " << r_lprotong.Y() << " " << r_lprotong.Z() << " " << r_lprotong.E() << " " << fProton_Mass_GeV << " " << "4" << endl; + // Vertex line - V - 1 - 0 - [1,2] + ppiOut << "V" << " " << "-1" << " " << "0" << " " << "[1,2]" << endl; + // Output particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (1, undecayed physical particle) + // Scattered electron + ppiOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << fElectron_Mass_GeV << " " << "1" << endl; + // Produced meson + ppiOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_lX_g.X() << " " << r_lX_g.Y() << " " << r_lX_g.Z() << " " << r_lX_g.E() << " " << fX_Mass_GeV << " " << "1" << endl; + // Recoil nucleon + ppiOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_nucleon) << " " << r_l_scat_nucleon_g.X() << " " << r_l_scat_nucleon_g.Y() << " " << r_l_scat_nucleon_g.Z() << " " << r_l_scat_nucleon_g.E() << " " << f_Scat_Nucleon_Mass_GeV << " " << "1" << endl; + +} + +/*--------------------------------------------------*/ + +bool PiPlus_Production::SolnCheck() +{ + + // Double Checking for solution viability + if (TMath::Abs(f_Scat_Nucleon_Mass-r_l_scat_nucleon_solved->M())>1){ + //cerr << "Mass Missmatch" << endl; + //cerr << TMath::Abs(proton_mass_mev-Proton->M()) << endl; + return false; + } + if (TMath::Abs(W_in()-W_out())>1){ + //cerr << "W Missmatch" << endl; + //cerr << TMath::Abs(W_in()-W_out()) << endl; + return false; + } + *Final = *r_l_scat_nucleon_solved + *r_lX_solved; + + if (TMath::Abs(Initial->Px()-Final->Px())>1){ + //cerr << "Px Missmatch" << endl; + //cerr << TMath::Abs(Initial->Px()-Final->Px()) << endl; + return false; + } + + if (TMath::Abs(Initial->Py()-Final->Py())>1){ + //cerr << "Py Missmatch" << endl; + //cerr << TMath::Abs(Initial->Py()-Final->Py()) << endl; + return false; + } + + if (TMath::Abs(Initial->Pz()-Final->Pz())>1){ + //cerr << "Pz Missmatch" << endl; + //cerr << TMath::Abs(Initial->Pz()-Final->Pz()) << endl; + return false; + } + + if (TMath::Abs(Initial->E()-Final->E())>1){ + return false; + } + return true; +} + +/*--------------------------------------------------*/ +double PiPlus_Production::W_in() +{ + return (*Interaction+*Target).Mag2(); +} + +/*--------------------------------------------------*/ +double PiPlus_Production::W_out() +{ + return (*r_l_scat_nucleon_solved+*r_lX_solved).Mag2(); +} + +/*--------------------------------------------------*/ + +int PiPlus_Production::Solve() +{ +// double theta = AngleGen->Theta(); +// double phi = AngleGen->Phi(); +// theta = 0.282478; +// phi = 3.49651; +// cout << " Theta Phi: "<< theta << " " << phi << endl; + + + // Setting the initial values for solve function + VertBeamElec->SetPxPyPzE(r_lelectron.Px(), r_lelectron.Py(), r_lelectron.Pz(), r_lelectron.E()); + VertScatElec->SetPxPyPzE(r_lscatelec.Px(), r_lscatelec.Py(), r_lscatelec.Pz(), r_lscatelec.E()); + Target->SetPxPyPzE(r_lproton.Px(), r_lproton.Py(), r_lproton.Pz(), r_lproton.E()); + + *Photon = *VertBeamElec - *VertScatElec; + *Interaction = *Photon; + + *Initial = *Interaction+*Target; + + /*--------------------------------------------------*/ + + theta = fX_Theta_Col; + phi = fX_Phi_Col; + + return this->Solve(theta, phi); + +} + +/*--------------------------------------------------*/ + +int PiPlus_Production::Solve(double theta, double phi) +{ + + + W_in_val = W_in(); + + if (W_in_val<0){ + return 0; + } + + UnitVect->SetTheta(theta); + UnitVect->SetPhi(phi); + UnitVect->SetMag(1); + + double* pars = new double[9]; + + pars[0] = UnitVect->X(); + pars[1] = UnitVect->Y(); + pars[2] = UnitVect->Z(); + pars[3] = Initial->Px(); + pars[4] = Initial->Py(); + pars[5] = Initial->Pz(); + pars[6] = Initial->E(); + pars[7] = fX_Mass; + pars[8] = f_Scat_Nucleon_Mass; + + F->SetParameters(pars); + + P = F->GetX(0, 0, pars[6], 0.0001, 10000); + + Particle * r_lX_temp = new Particle(fX_Mass, + P*pars[0], + P*pars[1], + P*pars[2]); + r_lX_solved->SetPxPyPzE(r_lX_temp->Px(), r_lX_temp->Py(), r_lX_temp->Pz(), r_lX_temp->E()); + + Particle * r_l_nucleon_temp= new Particle(); + *r_l_nucleon_temp = *Initial-*r_lX_solved; + r_l_scat_nucleon_solved->SetPxPyPzE(r_l_nucleon_temp->Px(), r_l_nucleon_temp->Py(), r_l_nucleon_temp->Pz(), r_l_nucleon_temp->E()); + + delete r_lX_temp; + delete r_l_nucleon_temp; + delete[] pars; + + if (TMath::Abs(F->Eval(P)) < 1){ + if (SolnCheck()){ + return 1; + } + } + + ///*--------------------------------------------------*/ + /// Modifier: Ishan Goel + /// Date: March 22, 2023 + /// Commenting out second solution as it is not giving any solution ever + /// Check for Second solution: + // P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); + ///Try second solution + // Particle * Pion2 = new Particle(pion_mass_mev, + // P*pars[0], + // P*pars[1], + // P*pars[2]); + // Pion->SetPxPyPzE(Pion2->Px(), Pion2->Py(), Pion2->Pz(), Pion2->E()); + // Particle * Proton2 = new Particle(); + // *Proton2 = *Initial - * Pion; + // Proton_Particle->SetPxPyPzE(Proton2->Px(), Proton2->Py(), Proton2->Pz(), Proton2->E()); + // delete Pion2; + // delete Proton2; + // if (TMath::Abs(F->Eval(P2)) < 1){ + // if (SolnCheck()){ + // return 1; + // } + // } + ///*--------------------------------------------------*/ + + return 0; + +} + + + + + diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index 5a02372..5eabb24 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -174,6 +174,25 @@ void eic(Json::Value obj) { hadron = ""; } + // SJDK 03/04/23 - Change to how Qsq range is set/chosen, could add as an override variable later too + // Set min/max Qsq values depending upon particle type + if (particle == "pi+" || particle == "Pion+" || particle == "Pi+"){ + fQsq_Min = 5.0; fQsq_Max = 35.0; + fW_Min = 3.0; fW_Max = 10.6; + } + else if (particle == "pi0" || particle == "Pion0" || particle == "Pi0"){ + fQsq_Min = 5.0; fQsq_Max = 1000.0; + fW_Min = 2.0; fW_Max = 10.0; + } + else if (particle == "K+"){ + fQsq_Min = 1.0; fQsq_Max = 35.0; + fW_Min = 2.0; fW_Max = 10.0; + } + else{ + fQsq_Min = 5.0; fQsq_Max = 35.0; + fW_Min = 2.0; fW_Max = 10.0; + } + // SJDK - 01/06/21 // Set beam energies from .json read in if (obj.isMember("ebeam")){ @@ -213,8 +232,8 @@ void eic(Json::Value obj) { } else{ cout << "Output type not specified in .json file!" << endl; - cout << "Setting output type to Pythia6 by default!" << endl; - gOutputType = "Pythia6"; + cout << "Setting output type to HEPMC3 by default!" << endl; + gOutputType = "HEPMC3"; } ///*--------------------------------------------------*/ /// The detector selection is determined here @@ -284,21 +303,10 @@ void eic(Json::Value obj) { } else{ fEjectileX_Theta_F = 60.0 * fDEG2RAD; - cout << "Max ejectile X theta not specified in .json file, defaulting to 60 degrees." << endl; - } - - // 18/01/23 - SJDK - I think this would probably be the best point to set the parameter read in for cross section calculations, once the particle and hadron are set, it can then read in the relevant parameter array. For example, assign "sigParArray" to the output of "ReadCrossSectionPar" - - //vector>>> sig; - SigPar = ReadCrossSectionPar(particle, hadron); - /* - cout << "!!!!!!!!!!!!!!!!!! TEST - EIC.CC !!!!!!!!!!!!!!!!!!" << endl; - cout< 35.0 ) { + // SJDK 03/04/23 - Qsq an W ranges now variables set by particle type in .json read in. See eic.cc + if ( fQsq_GeV < fQsq_Min || fQsq_GeV > fQsq_Max ) { qsq_ev++; return; } @@ -238,16 +277,21 @@ void DEMP_Reaction::Processing_Event() { return; } - // SJDK 31/01/23 - Should have the lower/upper W ranges be user defined? - // Also, moved this cut up in the code, W is known at this point, so why wait to cut on it? - //if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { // SJDK 31/01/23 - Previous range utilised - if ( fW_GeV < 2.0 || fW_GeV > 10 ) { // SJDK 31/01/23 - New range for W to work with K+ cross section model + //if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { // SJDK 31/01/23 - Previous range utilised - K+ was 2-10 + if ( fW_GeV < fW_Min || fW_GeV > fW_Max ) { // SJDK 03/04/23 - Switched to the new variable, set by particle type w_ev++; return; } - // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum - // 21/12/22 - SJDK - Should split this out into its own class, then have two different variants (Rory vs Ahmed) + ///*--------------------------------------------------*/ + /// Modifier: Ishan Goel + /// Date: March 22, 2023 + /// This Solve function is the same as the one implemented in the SoLID generator part + // Removing cases with no solution + if(!Solve()){ + return; + } + // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- @@ -288,29 +332,35 @@ void DEMP_Reaction::Processing_Event() { fepi1 = ( -fQB - sqrt( fradical ) ) / ( 2.0 * fQA ); fepi2 = ( -fQB + sqrt( fradical ) ) / ( 2.0 * fQA ); - // --------------------------------------------------------- - // Particle X momentum in collider frame, analytic solution ends - // --------------------------------------------------------- - - r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), - fepi1 ); - + ///--------------------------------------------------------- + /// Particle X momentum in collider frame, analytic solution + /// And obtain recoiled proton in collider (lab) frame + ///--------------------------------------------------------- + + // r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), + // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), + // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), + // fepi1 ); + // + // r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), + // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), + // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), + // sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + + // pow( f_Scat_Hadron_Mass , 2) ) ); + + ///-------------------------------------------------- + /// Output with the Solve Function + /// Setting the solution values to X and recoiled hadron + + r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); + r_l_scat_hadron.SetPxPyPzE(r_l_scat_hadron_solved->Px(), r_l_scat_hadron_solved->Py(), r_l_scat_hadron_solved->Pz(), r_l_scat_hadron_solved->E()); + + ///-------------------------------------------------- + r_lX_g = r_lX * fm; - - // ---------------------------------------------------- - // Scattered proton collider (lab) frame - // ---------------------------------------------------- - - r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), - sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + - pow( f_Scat_hadron_Mass ,2 ) ) ); - r_l_scat_hadron_g = r_l_scat_hadron * fm; + // ---------------------------------------------------------------------------------------------- // Calculate w = (proton + photon)^2 // ---------------------------------------------------------------------------------------------- @@ -396,10 +446,10 @@ void DEMP_Reaction::Processing_Event() { // Calculate -t // ----------------------------------------------------------------------------------------- - fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); - fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; - fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_hadron_Mass , 2) ) / ( 2.0 * fW); - fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); + fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / (lphoton_rf.E() + fProton_Mass ); + fGamma_CM_RF = (lphoton_rf.E() + fProton_Mass) / fW; + fX_Energy_CM = (pow(fW, 2) + pow(fX_Mass,2) - pow(f_Scat_hadron_Mass,2) ) / (2.0* fW); + fX_Mom_CM = sqrt(pow(fX_Energy_CM,2) - pow(fX_Mass,2)); fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; @@ -723,8 +773,8 @@ void DEMP_Reaction::Detail_Output() { DEMPDetails << "Total events tried " << setw(20) << fNGenerated << endl; DEMPDetails << "Total events recorded " << setw(20) << fNRecorded << endl; DEMPDetails << "Number of events with wsq negative " << setw(20) << w_neg_ev << endl; - DEMPDetails << "Number of events with 2 < w < 10 " << setw(20) << w_ev << endl; - DEMPDetails << "Number of events with qsq < 1 or > 35 " << setw(20) << qsq_ev << endl; + DEMPDetails << "Number of events with " << fW_Min << " < w < " << fW_Max << " " << setw(20) << w_ev << endl; + DEMPDetails << "Number of events with " << fQsq_Min << " < qsq < " << fQsq_Max << " " << setw(20) << qsq_ev << endl; DEMPDetails << "Number of events with Meson (X) energy NaN " << setw(20) << fNaN << endl; DEMPDetails << "Number of events failing conservation law check " << setw(20) << fConserve << endl; DEMPDetails << "Total events passing conservation laws " << setw(20) << conserve << endl; @@ -983,3 +1033,167 @@ void DEMP_Reaction::DEMPReact_HEPMC3_Output() { DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << r_l_scat_hadron_g.X() << " " << r_l_scat_hadron_g.Y() << " " << r_l_scat_hadron_g.Z() << " " << r_l_scat_hadron_g.E() << " " << f_Scat_hadron_Mass_GeV << " " << "1" << endl; } + +/*--------------------------------------------------*/ + +bool DEMP_Reaction::SolnCheck() +{ + + // Double Checking for solution viability + if (TMath::Abs(f_Scat_hadron_Mass-r_l_scat_hadron_solved->M())>1){ + //cerr << "Mass Missmatch" << endl; + //cerr << TMath::Abs(proton_mass_mev-Proton->M()) << endl; + return false; + } + if (TMath::Abs(W_in()-W_out())>1){ + //cerr << "W Missmatch" << endl; + //cerr << TMath::Abs(W_in()-W_out()) << endl; + return false; + } + *Final = *r_l_scat_hadron_solved + *r_lX_solved; + + if (TMath::Abs(Initial->Px()-Final->Px())>1){ + //cerr << "Px Missmatch" << endl; + //cerr << TMath::Abs(Initial->Px()-Final->Px()) << endl; + return false; + } + + if (TMath::Abs(Initial->Py()-Final->Py())>1){ + //cerr << "Py Missmatch" << endl; + //cerr << TMath::Abs(Initial->Py()-Final->Py()) << endl; + return false; + } + + if (TMath::Abs(Initial->Pz()-Final->Pz())>1){ + //cerr << "Pz Missmatch" << endl; + //cerr << TMath::Abs(Initial->Pz()-Final->Pz()) << endl; + return false; + } + + if (TMath::Abs(Initial->E()-Final->E())>1){ + return false; + } + return true; +} + +/*--------------------------------------------------*/ +double DEMP_Reaction::W_in() +{ + return (*Interaction+*Target).Mag2(); +} + +/*--------------------------------------------------*/ +double DEMP_Reaction::W_out() +{ + return (*r_l_scat_hadron_solved+*r_lX_solved).Mag2(); +} + +/*--------------------------------------------------*/ + +int DEMP_Reaction::Solve() +{ +// double theta = AngleGen->Theta(); +// double phi = AngleGen->Phi(); +// theta = 0.282478; +// phi = 3.49651; +// cout << " Theta Phi: "<< theta << " " << phi << endl; + + + // Setting the initial values for solve function + VertBeamElec->SetPxPyPzE(r_lelectron.Px(), r_lelectron.Py(), r_lelectron.Pz(), r_lelectron.E()); + VertScatElec->SetPxPyPzE(r_lscatelec.Px(), r_lscatelec.Py(), r_lscatelec.Pz(), r_lscatelec.E()); + Target->SetPxPyPzE(r_lproton.Px(), r_lproton.Py(), r_lproton.Pz(), r_lproton.E()); + + *Photon = *VertBeamElec - *VertScatElec; + *Interaction = *Photon; + + *Initial = *Interaction+*Target; + + /*--------------------------------------------------*/ + + theta = fX_Theta_Col; + phi = fX_Phi_Col; + + return this->Solve(theta, phi); + +} + +/*--------------------------------------------------*/ + +int DEMP_Reaction::Solve(double theta, double phi) +{ + + + W_in_val = W_in(); + + if (W_in_val<0){ + return 0; + } + + UnitVect->SetTheta(theta); + UnitVect->SetPhi(phi); + UnitVect->SetMag(1); + + double* pars = new double[9]; + + pars[0] = UnitVect->X(); + pars[1] = UnitVect->Y(); + pars[2] = UnitVect->Z(); + pars[3] = Initial->Px(); + pars[4] = Initial->Py(); + pars[5] = Initial->Pz(); + pars[6] = Initial->E(); + pars[7] = fX_Mass; + pars[8] = f_Scat_hadron_Mass; + + F->SetParameters(pars); + + P = F->GetX(0, 0, pars[6], 0.0001, 10000); + + Particle * r_lX_temp = new Particle(fX_Mass, + P*pars[0], + P*pars[1], + P*pars[2]); + r_lX_solved->SetPxPyPzE(r_lX_temp->Px(), r_lX_temp->Py(), r_lX_temp->Pz(), r_lX_temp->E()); + + Particle * r_l_hadron_temp= new Particle(); + *r_l_hadron_temp = *Initial-*r_lX_solved; + r_l_scat_hadron_solved->SetPxPyPzE(r_l_hadron_temp->Px(), r_l_hadron_temp->Py(), r_l_hadron_temp->Pz(), r_l_hadron_temp->E()); + + delete r_lX_temp; + delete r_l_hadron_temp; + delete[] pars; + + if (TMath::Abs(F->Eval(P)) < 1){ + if (SolnCheck()){ + return 1; + } + } + + ///*--------------------------------------------------*/ + /// Modifier: Ishan Goel + /// Date: March 22, 2023 + /// Commenting out second solution as it is not giving any solution ever + /// Check for Second solution: + // P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); + ///Try second solution + // Particle * Pion2 = new Particle(pion_mass_mev, + // P*pars[0], + // P*pars[1], + // P*pars[2]); + // Pion->SetPxPyPzE(Pion2->Px(), Pion2->Py(), Pion2->Pz(), Pion2->E()); + // Particle * Proton2 = new Particle(); + // *Proton2 = *Initial - * Pion; + // Proton_Particle->SetPxPyPzE(Proton2->Px(), Proton2->Py(), Proton2->Pz(), Proton2->E()); + // delete Pion2; + // delete Proton2; + // if (TMath::Abs(F->Eval(P2)) < 1){ + // if (SolnCheck()){ + // return 1; + // } + // } + ///*--------------------------------------------------*/ + + return 0; + +} diff --git a/src/eic_evgen/process_routine/Pi0_prod.cc b/src/eic_evgen/process_routine/Pi0_prod.cc index 954c8c3..0935c2b 100644 --- a/src/eic_evgen/process_routine/Pi0_prod.cc +++ b/src/eic_evgen/process_routine/Pi0_prod.cc @@ -1,13 +1,13 @@ #include "reaction_routine.h" #include "eic.h" #include "particleType.h" +#include using namespace std; Pi0_Production::Pi0_Production() { - cout << "Program Start" << endl; - + cout << "Program Start" << endl; } @@ -16,26 +16,24 @@ Pi0_Production::Pi0_Production() { Pi0_Production::Pi0_Production(TString particle_str) { - rParticle = particle_str; - -// cout << rParticle << endl; -// exit(0); - - Init(); - Pi0_Decay_Pythia6_Out_Init(); + rParticle = particle_str; + + Init(); + if (gOutputType == "Pythia6"){ + Pi0_Decay_Pythia6_Out_Init(); + } + else if (gOutputType == "HEPMC3"){ + Pi0_HEPMC3_Out_Init(); + } } /*--------------------------------------------------*/ Pi0_Production::~Pi0_Production() { -// delete rRand; - -// cout << "File closed!" << endl; - - DEMPOut.close(); - DEMPDetails.close(); + DEMPOut.close(); + DEMPDetails.close(); } @@ -43,23 +41,25 @@ Pi0_Production::~Pi0_Production() { void Pi0_Production::process_reaction() { - if_pi0_decay = gPi0_decay; - - polar_out.open("test.txt", ofstream::out); - - for( long long int i = 0; i < rNEvents; i++ ) { - - rNEvent_itt = i; - fNGenerated ++; - - Progress_Report(); // This is happens at each 10% of the total event is processed - Processing_Event(); - - } + if_pi0_decay = gPi0_decay; + + polar_out.open("test.txt", ofstream::out); + + for( long long int i = 0; i < rNEvents; i++ ) { + + rNEvent_itt = i; + fNGenerated ++; + + Progress_Report(); // This is happens at each 10% of the total event is processed + Processing_Event(); + + } + + polar_out.close(); + + Detail_Output(); - polar_out.close(); - - Detail_Output(); + system("./../../practice/outputs/bin/rootIOTree_example_write.exe LundFiles/eic_input_DEMPGen_EIC_test.dat LundFiles/Converted_Output_ROOT_File.root"); } @@ -67,200 +67,70 @@ void Pi0_Production::process_reaction() { void Pi0_Production::Processing_Event() { + // ---------------------------------------------------- + // Considering Fermi momentum for the proton + // ---------------------------------------------------- - // ---------------------------------------------------- - // Considering Fermi momentum for the proton - // ---------------------------------------------------- - - if( kCalcFermi ) { - Consider_Proton_Fermi_Momentum(); - } + if( kCalcFermi ) { + Consider_Proton_Fermi_Momentum(); + } - // ---------------------------------------------------- - // Boost vector from collider (lab) frame to protons rest frame (Fix target) - // ---------------------------------------------------- - - beta_col_rf = r_lproton.BoostVector(); - fGamma_Col_RF = 1.0/sqrt( 1 - pow( beta_col_rf.Mag() , 2 ) ); - - - // --------------------------------------------------------------------- - // Specify the energy and solid angle of scatterd electron in Collider (lab) frame - // --------------------------------------------------------------------- -// fScatElec_Theta_Col = acos( rRand->Uniform( cos( fScatElec_Theta_I ) , cos( fScatElec_Theta_F ) ) ); -// fScatElec_Phi_Col = rRand->Uniform( 0 , 2.0 * fPi); - -// fScatElec_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); -// fScatElec_Energy_Col = rRand->Uniform( fScatElec_E_Lo * fElectron_Energy_Col , fScatElec_E_Hi * fElectron_Energy_Col ); -// fScatElec_Energy_Col = fRandom->Uniform( fScatElec_E_Lo * fElectron_Energy_Col , fScatElec_E_Hi * fElectron_Energy_Col ); + // ---------------------------------------------------- + // Boost vector from collider (lab) frame to protons rest frame (Fix target) + // ---------------------------------------------------- -// fScatElec_Theta_Col = acos( rRand->Uniform( cos( 120 *fPi /180) , cos( 180 *fPi /180 ) ) ); - -// fScatElec_Theta_Col = rRand->Uniform(fPi/2, fPi); -// fScatElec_Energy_Col = rRand->Uniform(5000, 6500); - - - /*--------------------------------------------------*/ - /*--------------------------------------------------*/ - /// Random gen -// fScatElec_Theta_Col = fRandom->Uniform(fPi/2, fPi); -// fScatElec_Energy_Col = fRandom->Uniform(5000, 6200); -// fScatElec_Phi_Col = fRandom->Uniform(fProton_Phi_Col - fPi/6.0, fProton_Phi_Col + fPi/6.0); - -// cout << "Seed check: " << fRandom->GetSeed() << endl; - -// exit(0); - -// fScatElec_Theta_Col = 134 * fPi /180; -// fScatElec_Energy_Col = 5911; - -/*--------------------------------------------------*/ -/// 6 GeV -// fScatElec_Theta_Col = 152 * fPi /180; -// fScatElec_Energy_Col = 5303; - -//// - -// fScatElec_Theta_Col = 152 * fPi /180; -// fScatElec_Energy_Col = 5336; - - -// fScatElec_Theta_Col = 152 * fPi /180; -// fScatElec_Energy_Col = 5330; - - -/*--------------------------------------------------*/ -/// 7 GeV -// fScatElec_Theta_Col = 150 * fPi /180; -// fScatElec_Energy_Col = 5350; - -/*--------------------------------------------------*/ -/// 8 GeV -// fScatElec_Theta_Col = 148 * fPi /180; -// fScatElec_Energy_Col = 5403; - - fScatElec_Theta_Col = 148 * fPi /180; - fScatElec_Energy_Col = 5360; - - - - -/*--------------------------------------------------*/ -/// 9 GeV -// fScatElec_Theta_Col = 146 * fPi /180; -// fScatElec_Energy_Col = 5458; - -/*--------------------------------------------------*/ -/// 10.5 GeV -// fScatElec_Theta_Col = 144 * fPi /180; -// fScatElec_Energy_Col = 5518; - -/*--------------------------------------------------*/ -// Q2=10.5 GeV, S=25 -// fScatElec_Theta_Col = 144 * fPi /180; -// fScatElec_Energy_Col = 5477; - - -///*--------------------------------------------------*/ -// For special testing only -// fScatElec_Phi_Col = fPi; -// fScatElec_Phi_Col = 0.0; - fScatElec_Phi_Col = fProton_Phi_Col; - -// cout << "Initial and final angle: " << fScatElec_Theta_I*180/fPi << " " << fScatElec_Theta_F*180/fPi << " " << fScatElec_Theta_Col*180/fPi << " " << fScatElec_Energy_Col << " " << fElectron_Energy_Col << " " << fScatElec_E_Lo * fElectron_Energy_Col << " " << fScatElec_E_Hi * fElectron_Energy_Col << endl; -// -// -// cout << " electron::: " << fScatElec_Phi_Col*180/fPi << endl; + beta_col_rf = r_lproton.BoostVector(); + fGamma_Col_RF = 1.0/sqrt( 1 - pow( beta_col_rf.Mag() , 2 ) ); + // --------------------------------------------------------------------- + // Specify the energy and solid angle of scatterd electron in Collider (lab) frame + // --------------------------------------------------------------------- - // ---------------------------------------------------- - // Produced Particle X in Collider frame - // ---------------------------------------------------- - - /// The generic produced particle in the exclusive reaction is labelled as X - // fX_Theta_Col = acos( rRand->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); - - //fX_Theta_Col = acos( rRand->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); - // fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); - + fScatElec_Theta_Col = acos( fRandom->Uniform( cos( fScatElec_Theta_I ) , cos( fScatElec_Theta_F ) ) ); + fScatElec_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); + fScatElec_Energy_Col = fRandom->Uniform( fScatElec_E_Lo * fElectron_Energy_Col , fScatElec_E_Hi * fElectron_Energy_Col ); - //fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); - //fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi); + // fScatElec_Theta_Col = fRandom->Uniform( 1.7 , 1.9 ); + // fScatElec_Phi_Col = fRandom->Uniform( 0-0.01 , 0+0.01 ); + // fScatElec_Energy_Col = fRandom->Uniform( 1.33 * fElectron_Energy_Col , 2.50 * fElectron_Energy_Col ); - /// ---------------------------------------------------- - /// ---------------------------------------------------- - /// Random number generation - - // fX_Phi_Col = fRandom->Uniform( fProton_Phi_Col - fPi/6, fProton_Phi_Col + fPi/6); - // fX_Theta_Col = fRandom->Uniform( 0.01, 0.04); - -// fX_Phi_Col = fPi; -// fX_Phi_Col = 0; - - ///*--------------------------------------------------*/ - // For special testing only - - //fX_Theta_Col = 0.01; // 0.5729 degree - //fX_Theta_Col = 0.02; // 0.5729 degree - //fX_Theta_Col = 0.0; // 0.5729 degree - //fX_Theta_Col = 0.025; // Proton incidence angle - - fX_Theta_Col = 0.0; // Proton incidence angle -// fX_Theta_Col = 0.025; // Proton incidence angle -// fX_Theta_Col = 0.05; // Proton incidence angle - -// fX_Phi_Col = 0.0; -// fX_Phi_Col = fPi; - fX_Phi_Col = fProton_Phi_Col; - - /*--------------------------------------------------*/ - - -// cout << "Angle check: " << fX_Theta_Col*180/fPi << " " << fX_Theta_I*180/fPi << " "<< fX_Theta_F*180/fPi << endl; -// -// -// -// cout << "proton phi " << r_lproton.Vect().Theta() << " " << r_lproton.Vect().Phi() << endl; -// -// cout << "10m radians: " << 0.01*180/fPi << endl; - -// exit(0); + // ---------------------------------------------------- + // Produced Particle X in Collider frame + // ---------------------------------------------------- + + /// The generic produced particle in the exclusive reaction is labelled as X + fX_Theta_Col = acos( fRandom->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); + fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); + // fX_Theta_Col = fRandom->Uniform( 0.0 , 0.9 ); + // fX_Phi_Col = fRandom->Uniform( -0.0000001 + fPi , 0.0000001 + fPi ); // --------------------------------------------------------------------- // Specify the energy and solid angle of scatterd electron in Collider (lab) frame // --------------------------------------------------------------------- - fScatElec_Mom_Col = sqrt( pow( fScatElec_Energy_Col,2) - pow( fElectron_Mass , 2) ); - fScatElec_MomZ_Col = ( fScatElec_Mom_Col * cos(fScatElec_Theta_Col) ); - fScatElec_MomX_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * cos(fScatElec_Phi_Col) ); - fScatElec_MomY_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * sin(fScatElec_Phi_Col) ); + fScatElec_Mom_Col = sqrt( pow( fScatElec_Energy_Col,2) - pow( fElectron_Mass , 2) ); + fScatElec_MomZ_Col = ( fScatElec_Mom_Col * cos(fScatElec_Theta_Col) ); + fScatElec_MomX_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * cos(fScatElec_Phi_Col) ); + fScatElec_MomY_Col = ( fScatElec_Mom_Col * sin(fScatElec_Theta_Col) * sin(fScatElec_Phi_Col) ); - r_lscatelec.SetPxPyPzE( fScatElec_MomX_Col, fScatElec_MomY_Col, fScatElec_MomZ_Col, fScatElec_Energy_Col); + r_lscatelec.SetPxPyPzE( fScatElec_MomX_Col, fScatElec_MomY_Col, fScatElec_MomZ_Col, fScatElec_Energy_Col); - r_lscatelecg = r_lscatelec * fm; + r_lscatelecg = r_lscatelec * fm; - // ---------------------------------------------------- - // Photon in collider (lab) frame and Qsq - // ---------------------------------------------------- + // ---------------------------------------------------- + // Photon in collider (lab) frame and Qsq + // ---------------------------------------------------- - r_lphoton = r_lelectron - r_lscatelec; - r_lphotong = r_lelectrong - r_lscatelecg; - - fQsq_GeV = -1.* r_lphotong.Mag2(); - -// cout << "e: " << r_lelectron.Px() << " " << r_lelectron.Py() << " " << r_lelectron.Pz() << " " << r_lelectron.E() << endl; -// cout << "Scattered e: " << r_lscatelec.Px() << " " << r_lscatelec.Py() << " " << r_lscatelec.Pz() << " " << r_lscatelec.E() << endl; -// -// cout << "Q2 check: " << fQsq_GeV << endl; -// -// exit(0); + r_lphoton = r_lelectron - r_lscatelec; + r_lphotong = r_lelectrong - r_lscatelecg; + fQsq_GeV = -1.* r_lphotong.Mag2(); -// if ( fQsq_GeV < 5.0 ) { -// qsq_ev++; -// return; -// } + if ( fQsq_GeV < 5.0 ) { + qsq_ev++; + return; + } // ---------------------------------------------------- // W square, Invariant Mass (P_g + P_p)^2 @@ -271,229 +141,192 @@ void Pi0_Production::Processing_Event() { fW_GeV = lwg.Mag(); fWSq_GeV = lwg.Mag2(); -// cout << endl << endl; -// cout << "W: " << fW_GeV << " s: " << fW_GeV*fW_GeV << " " << "Q2: " << fQsq_GeV << endl; -// cout << endl << endl; -// exit(0); - - - if ( fWSq_GeV < 0 ) { w_neg_ev++; return; } - - if (fW_GeV < 0 || fW_GeV > 40) { - cout << "W out of range of interests" << endl; - return; - } - - + // 13/12/22 - SJDK - This is the start of the block that will need to be replaced by the ROOT function Rory used to determine the pion momentum + // --------------------------------------------------------- + // Pion momentum in collider frame, analytic solution starts + // --------------------------------------------------------- + if(!Solve()){ + return; + } + // --------------------------------------------------------- + // Pion momentum in collider frame, analytic solution starts + // --------------------------------------------------------- - - - // --------------------------------------------------------- - // Pion momentum in collider frame, analytic solution starts - // --------------------------------------------------------- - - double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); - double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); - double fupz = cos( fX_Theta_Col ); + double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); + double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); + double fupz = cos( fX_Theta_Col ); - double fuqx = sin( r_lphoton.Theta() ) * cos( r_lphoton.Phi() ); - double fuqy = sin( r_lphoton.Theta() ) * sin( r_lphoton.Phi() ); - double fuqz = cos( r_lphoton.Theta() ); + double fuqx = sin( r_lphoton.Theta() ) * cos( r_lphoton.Phi() ); + double fuqy = sin( r_lphoton.Theta() ) * sin( r_lphoton.Phi() ); + double fuqz = cos( r_lphoton.Theta() ); - double fa = -(r_lphoton.Vect()).Mag() * ( fupx * fuqx + fupy * fuqy + fupz * fuqz ); - double fb = pow ( (r_lphoton.Vect()).Mag() , 2 ); - double fc = r_lphoton.E() + fProton_Mass; - - fa = ( fa - std::abs( (r_lproton.Vect()).Mag() ) * ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fupx ) + - ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fupy ) + - ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fupz ) ) ); - - double factor = ( pow( (r_lproton.Vect()).Mag() , 2 ) + 2.0 * (r_lphoton.Vect()).Mag() * (r_lproton.Vect()).Mag() * - ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fuqx ) + - ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fuqy ) + - ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fuqz ) ) ); - - fb = fb + factor; - fc = r_lphoton.E() + r_lproton.E(); - -// double ft = fc * fc - fb + fPion_Mass * fPion_Mass - fProton_Mass * fProton_Mass; -// t_min = -qsq + mass**2 -2.*(e_pi0CM*e_photCM -sqrt( (e_pi0CM**2-mass**2)*(e_photCM**2+qsq) )) -// t_max = -qsq + mass**2 -2.*(e_pi0CM*e_photCM +sqrt((e_pi0CM**2-mass**2)*(e_photCM**2+qsq))) -// u_min = -qsq + m_psq -2.*(e_pCM*e_photCM -sqrt( (e_pCM**2-m_psq)*(e_photCM**2+qsq) )) - - - double e_X_rf = lX_rf.E(); - double e_photon_rf = lphoton_rf.E(); - -// double e_photon_rf = lproton_rf.E(); - -// fu_min = -fQsq + pow(f_Scat_hadron_Mass, 2) -2.*(e_pi0CM*e_photCM -sqrt( (e_pi0CM**2-mass**2)*(e_photCM**2+qsq) )) - - double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; - - double fu = lproton_rf.Dot(lproton_rf) + lX_rf.Dot(lX_rf) - lproton_rf.Dot(lX_rf); - - - -// double fttt = lproton_rfg * lproton_rfg - 2* lproton_rfg * l_scat_hadron_rf_g + l_scat_hadron_rf_g * l_scat_hadron_rf_g; -// double fuuu = lproton_rfg * lproton_rfg - 2* lproton_rfg * lX_rfg + lX_rfg * lX_rfg; - - - - - - ft_min = -fQsq_GeV + pow(fX_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(fX_Mass, 2)) * (pow(e_photon_rf,2)+fQsq) )); - - fu_min = -fQsq_GeV + pow(f_Scat_hadron_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Scat_hadron_Mass , 2))*(pow(e_photon_rf,2)+fQsq) )); - - -// cout << "asd: " << ft_min << " " << fu_min << f_Scat_hadron_Mass << " " << fX_Mass << " " << fProton_Mass << " "<< fQsq << " " << e_photon_rf << " photon photon: " << lphoton_rf.E() << " " << fm << " " << r_lphoton.E() << " " << beta_col_rf.Mag() << endl; -// -// -// cout << r_lprotong.Px() << " " << r_lprotong.Py() << " " << r_lprotong.Pz() << " " << r_lprotong.E() << endl; -// cout << lproton_rfg.Px() << " " << lproton_rfg.Py() << " " << lproton_rfg.Pz() << " " << lproton_rfg.E() << endl; -// cout << beta_col_rf.Px() << " " << beta_col_rf.Py() << " " << beta_col_rf.Pz() << endl; - -// exit(0); - - - double fQA = 4.0 * ( fa * fa - fc * fc ); - double fQB = 4.0 * fc * ft; - -// double fQC = -4.0 * fa * fa * fPion_Mass * fPion_Mass - ft * ft; - double fQC = -4.0 * fa * fa * fX_Mass * fX_Mass - ft * ft; + double fa = -(r_lphoton.Vect()).Mag() * ( fupx * fuqx + fupy * fuqy + fupz * fuqz ); + double fb = pow ( (r_lphoton.Vect()).Mag() , 2 ); + double fc = r_lphoton.E() + fProton_Mass; + + fa = ( fa - std::abs( (r_lproton.Vect()).Mag() ) * ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fupx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fupy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fupz ) ) ); + + double factor = ( pow( (r_lproton.Vect()).Mag() , 2 ) + 2.0 * (r_lphoton.Vect()).Mag() * (r_lproton.Vect()).Mag() * + ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fuqx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fuqy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fuqz ) ) ); + + fb = fb + factor; + fc = r_lphoton.E() + r_lproton.E(); + + double e_X_rf = lX_rf.E(); + double e_photon_rf = lphoton_rf.E(); + + + double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; + + double fu = lproton_rf.Dot(lproton_rf) + lX_rf.Dot(lX_rf) - lproton_rf.Dot(lX_rf); + + ft_min = -fQsq_GeV + pow(fX_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(fX_Mass, 2)) * (pow(e_photon_rf,2)+fQsq) )); + + fu_min = -fQsq_GeV + pow(f_Scat_hadron_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Scat_hadron_Mass , 2))*(pow(e_photon_rf,2)+fQsq) )); + + double fQA = 4.0 * ( fa * fa - fc * fc ); + double fQB = 4.0 * fc * ft; + + double fQC = -4.0 * fa * fa * fX_Mass * fX_Mass - ft * ft; - fradical = fQB * fQB - 4.0 * fQA * fQC; + fradical = fQB * fQB - 4.0 * fQA * fQC; - fepi1 = ( -fQB - sqrt( fradical ) ) / ( 2.0 * fQA ); - fepi2 = ( -fQB + sqrt( fradical ) ) / ( 2.0 * fQA ); + fepi1 = ( -fQB - sqrt( fradical ) ) / ( 2.0 * fQA ); + fepi2 = ( -fQB + sqrt( fradical ) ) / ( 2.0 * fQA ); - // --------------------------------------------------------- - // Particle X momentum in collider frame, analytic solution ends - // --------------------------------------------------------- - - r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), - fepi1 ); - - r_lX_g = r_lX * fm; - - // ---------------------------------------------------- - // Scattered hadron collider (lab) frame - - r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), - sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + - pow( f_Scat_hadron_Mass ,2 ) ) ); - - r_l_scat_hadron_g = r_l_scat_hadron * fm; - -// cout << "Proton Momentum: " << r_l_scat_hadron_g.Vect().Mag() << " " << r_l_scat_hadron_g.Vect().Theta() << " Angle: "<< r_l_scat_hadron_g.Vect().Theta() *180/fPi << endl; -// cout << "X Momentum: " << r_lX_g.Vect().Mag() << " Angle: " << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Theta() *180/fPi<< endl ; - -// cout << "Proton-X Angle: " << r_lX_g.Vect().Angle(r_l_scat_hadron_g.Vect())*180/fPi << endl ; - - // ---------------------------------------------------------------------------------------------- - // ---------------------------------------------------------------------------------------------- - // Calculate w = (proton + photon)^2 - // ---------------------------------------------------------------------------------------------- - // ---------------------------------------------------------------------------------------------- - -// // cout << fW_GeV << endl; -// if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { -// w_ev++; -// return; -// } - - r_lw = r_lproton + r_lphoton; - fW = r_lw.Mag(); - - // ---------------------------------------------------------------------------------------------- - // ---------------------------------------------------------------------------------------------- - // Calculate w prime w' = (proton + photon - pion)^2 - // ---------------------------------------------------------------------------------------------- - // ---------------------------------------------------------------------------------------------- - - lwp = r_lprotong + r_lphotong - r_lX_g; - fW_Prime_GeV = lwp.Mag(); - - fsini = r_lelectron + r_lproton; - fsfin = r_lscatelec + r_lX + r_l_scat_hadron; - - fsinig = fsini * fm; - fsfing = fsfin * fm; + ///--------------------------------------------------------- + /// Particle X momentum in collider frame, analytic solution + /// And obtain recoiled proton in collider (lab) frame + ///--------------------------------------------------------- + + //r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), + // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), + // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), + // fepi1 ); + // + // r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), + // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), + // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), + // sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + + // pow( f_Scat_Hadron_Mass ,2 ) ) ); + + ///-------------------------------------------------- + /// Output with the Solve Function + /// Setting the solution values to X and recoiled nucleon + + r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); + r_l_scat_hadron.SetPxPyPzE(r_l_scat_hadron_solved->Px(), r_l_scat_hadron_solved->Py(), r_l_scat_hadron_solved->Pz(), r_l_scat_hadron_solved->E()); + + ///-------------------------------------------------- + + r_lX_g = r_lX * fm; + r_l_scat_hadron_g = r_l_scat_hadron * fm; + + // ---------------------------------------------------------------------------------------------- + // Calculate w = (proton + photon)^2 + // ---------------------------------------------------------------------------------------------- + + // cout << fW_GeV << endl; + if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { + w_ev++; + return; + } + + r_lw = r_lproton + r_lphoton; + fW = r_lw.Mag(); + + // ---------------------------------------------------------------------------------------------- + // Calculate w prime w' = (proton + photon - pion)^2 + // ---------------------------------------------------------------------------------------------- + + lwp = r_lprotong + r_lphotong - r_lX_g; + fW_Prime_GeV = lwp.Mag(); + + fsini = r_lelectron + r_lproton; + fsfin = r_lscatelec + r_lX + r_l_scat_hadron; + + fsinig = fsini * fm; + fsfing = fsfin * fm; - fMandSConserve = std::abs( fsinig.Mag() - fsfing.Mag() ); - - kSConserve = false; - if( std::abs( fsinig.Mag() - fsfing.Mag() ) < fDiff ) { - kSConserve = true; - } + fMandSConserve = std::abs( fsinig.Mag() - fsfing.Mag() ); + + //*--------------------------------------------------*/ + // SJDK 15/06/21 - Added integer counters for conservation law check and for NaN check + if (r_lX.E() != r_lX.E()){ // SJDK 15/06/21 - If the energy of the produced meson is not a number, return and add to counter + fNaN++; + return; + } + + kSConserve = false; + if( std::abs( fsinig.Mag() - fsfing.Mag() ) < fDiff ) { + kSConserve = true; + } - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron) != 1 ) - return; - - - //////////////////////////////////////////////////////////////////////////////////////////// - // Start // - // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // - //////////////////////////////////////////////////////////////////////////////////////////// - - lproton_rf = r_lproton; - lproton_rf.Boost(-beta_col_rf); - lproton_rfg = lproton_rf * fm; + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron) != 1 ){ + fConserve++; + return; + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // Start // + // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // + //////////////////////////////////////////////////////////////////////////////////////////// - lelectron_rf = r_lelectron; - lelectron_rf.Boost(-beta_col_rf); - lelectron_rfg = lelectron_rf * fm; - - lscatelec_rf = r_lscatelec; - lscatelec_rf.Boost(-beta_col_rf); - lscatelec_rfg = lscatelec_rf * fm; - - lphoton_rf = r_lphoton; - lphoton_rf.Boost(-beta_col_rf); - lphoton_rfg = lphoton_rf * fm; - - lX_rf = r_lX; - lX_rf.Boost(-beta_col_rf); - lX_rfg = lX_rf * fm; - - l_scat_hadron_rf = r_l_scat_hadron; - l_scat_hadron_rf.Boost(-beta_col_rf); - l_scat_hadron_rf_g = l_scat_hadron_rf * fm; - - - - ///*--------------------------------------------------*/ - /// Doing pi0 decay - - if (if_pi0_decay) { - Pi0_decay(r_lX); - } - - - //////////////////////////////////////////////////////////////////////////////////////////// - // End // - // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // - //////////////////////////////////////////////////////////////////////////////////////////// - -/*--------------------------------------------------*/ -/*--------------------------------------------------*/ -/*--------------------------------------------------*/ -/*--------------------------------------------------*/ -/// Polar output - - if (fQsq_GeV > 5 && fQsq_GeV < 12 && fWSq_GeV > 8 && fWSq_GeV < 12) { + lproton_rf = r_lproton; + lproton_rf.Boost(-beta_col_rf); + lproton_rfg = lproton_rf * fm; + + lelectron_rf = r_lelectron; + lelectron_rf.Boost(-beta_col_rf); + lelectron_rfg = lelectron_rf * fm; + + lscatelec_rf = r_lscatelec; + lscatelec_rf.Boost(-beta_col_rf); + lscatelec_rfg = lscatelec_rf * fm; + + lphoton_rf = r_lphoton; + lphoton_rf.Boost(-beta_col_rf); + lphoton_rfg = lphoton_rf * fm; + + lX_rf = r_lX; + lX_rf.Boost(-beta_col_rf); + lX_rfg = lX_rf * fm; + + l_scat_hadron_rf = r_l_scat_hadron; + l_scat_hadron_rf.Boost(-beta_col_rf); + l_scat_hadron_rf_g = l_scat_hadron_rf * fm; + + ///*--------------------------------------------------*/ + /// Doing pi0 decay + + if (if_pi0_decay) { + Pi0_decay(r_lX); + } + + + //////////////////////////////////////////////////////////////////////////////////////////// + // End // + // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // + //////////////////////////////////////////////////////////////////////////////////////////// + + /*--------------------------------------------------*/ + /*--------------------------------------------------*/ + /*--------------------------------------------------*/ + /*--------------------------------------------------*/ + /// Polar output + + if (fQsq_GeV > 5 && fQsq_GeV < 12 && fWSq_GeV > 8 && fWSq_GeV < 12) { // cout << fQsq_GeV << " " << fWSq_GeV << " "; // @@ -502,16 +335,16 @@ void Pi0_Production::Processing_Event() { // << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() // << endl; - polar_out << fQsq_GeV << " " << fWSq_GeV << " "; - - polar_out << r_lscatelecg.Vect().Theta() << " " << r_lscatelecg.Vect().Mag() << " " - << r_l_scat_hadron_g.Vect().Theta() << " " << r_l_scat_hadron_g.Vect().Mag() << " " - << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() << " " - << l_photon_1.Vect().Theta() << " " << l_photon_1.Vect().Mag() << " " - << l_photon_2.Vect().Theta() << " " << l_photon_2.Vect().Mag() - << endl; + polar_out << fQsq_GeV << " " << fWSq_GeV << " "; + + polar_out << r_lscatelecg.Vect().Theta() << " " << r_lscatelecg.Vect().Mag() << " " + << r_l_scat_hadron_g.Vect().Theta() << " " << r_l_scat_hadron_g.Vect().Mag() << " " + << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() << " " + << l_photon_1.Vect().Theta() << " " << l_photon_1.Vect().Mag() << " " + << l_photon_2.Vect().Theta() << " " << l_photon_2.Vect().Mag() + << endl; - } + } // exit(0); // return; @@ -522,268 +355,223 @@ void Pi0_Production::Processing_Event() { /*--------------------------------------------------*/ /*--------------------------------------------------*/ + e_X_rf = lX_rf.E(); + e_photon_rf = lphoton_rf.E(); + double e_p_rf = lproton_rf.E(); + double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; + double e_pCM = (fWSq_GeV + pow(fProton_Mass/1000, 2) - pow(f_Scat_hadron_Mass/1000, 2))/fW_GeV/2.; + ft_min = -fQsq_GeV + pow(fX_Mass/1000, 2) -2.*(e_X_rf/1000*e_photon_rf/1000 -sqrt( (pow(e_X_rf/1000, 2) - pow(fX_Mass/1000, 2)) * (pow(e_photon_rf/1000,2)+fQsq_GeV) )); + fu_min = -fQsq_GeV + pow(fProton_Mass/1000, 2) -2.*(e_pCM*e_photCM -sqrt( (pow(e_pCM/1000, 2) - pow(fProton_Mass/1000 , 2))*(pow(e_photCM/1000,2)+fQsq_GeV) )); + // ---------------------------------------------------------------------------------------------- + // Cut on centre of mass angle of meson X + // ---------------------------------------------------------------------------------------------- + // Theta_cm = r_lX.Vect().Angle(r_lphoton.Vect()); + // if (Theta_cm < 90*TMath::Pi()/180) { + // return; + // } + // ----------------------------------------------------------------------------------------- + // Calculate -t and -u + // ----------------------------------------------------------------------------------------- + fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); + fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; + fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_hadron_Mass , 2) ) / ( 2.0 * fW); + fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); + fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; + fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; + + // this equation is valid for parallel kinematics only! + fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_lX.Vect()).Mag()),2) - pow((r_lphoton.E() - r_lX.E()),2)); + fT_Para_GeV = fT_Para/1000000.0; + lt = r_lphoton - r_lX; + ltg = lt * fm; + fT = -1.*lt.Mag2(); + fT_GeV = -1.*ltg.Mag2(); + tc = -1.*lt.Mag2(); + tc_GeV = -1.*ltg.Mag2(); + lu = r_lproton - r_lX; + lug = lu * fm; + uc = -1.*lu.Mag2(); + uc_GeV = -1.*lug.Mag2(); + // ---------------------------------------------------------------------------------------------- + // Cut on u-channel + // ---------------------------------------------------------------------------------------------- + if ( abs(uc_GeV) > abs(tc_GeV) ) { + return; + } + // if ( gKinematics_type == 1 && tc_GeV > 0.5 ) { + // t_ev++; + // return; + // } + // if ( gKinematics_type == 2 && tc_GeV > 1.3 ) { + // t_ev++; + // return; + // } + // if ( gKinematics_type == 1 && uc_GeV > 0.5 ) { + // t_ev++; + // return; + // } + // if ( gKinematics_type == 2 && uc_GeV > 1.3 ) { + // t_ev++; + // return; + // } + fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); + fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); + fz = r_lX.E()/r_lphoton.E(); + // ------------------------------------------------------------------------------------------------------- + // Calculation of Phi ( azimuthal angle of pion momentum w.r.t lepton plane in target's rest frame) + // Calculation of PhiS ( azimuthal angle of target polarization w.r.t lepton plane in target's rest frame) + // ------------------------------------------------------------------------------------------------------- + v3Photon.SetX( lphoton_rfg.X() ); + v3Photon.SetY( lphoton_rfg.Y() ); + v3Photon.SetZ( lphoton_rfg.Z() ); - e_X_rf = lX_rf.E(); + v3Electron.SetX( lelectron_rfg.X() ); + v3Electron.SetY( lelectron_rfg.Y() ); + v3Electron.SetZ( lelectron_rfg.Z() ); - double e_p_rf = lproton_rf.E(); + v3X.SetX( lX_rfg.X() ) ; + v3X.SetY( lX_rfg.Y() ) ; + v3X.SetZ( lX_rfg.Z() ); - e_photon_rf = lphoton_rf.E(); + v3S.SetX( -1 ); + v3S.SetY( 0 ); + v3S.SetZ( 0 ); - // e_photCM = (Wsq - qsq - m_psq)/invm/2. - // e_omCM = (Wsq + mass**2 - m_psq)/invm/2. - // e_pCM = (Wsq + m_psq - mass**2)/invm/2. + v3PhotonUnit = v3Photon.Unit(); + v3QxL = v3Photon.Cross(v3Electron); + v3QxP = v3Photon.Cross(v3X); + v3QxS = v3Photon.Cross(v3S); + v3LxP = v3Electron.Cross(v3X); + v3LxS = v3Electron.Cross(v3S); + v3PxL = v3X.Cross(v3Electron); + v3QUnitxL = v3PhotonUnit.Cross(v3Electron); + v3QUnitxP = v3PhotonUnit.Cross(v3X); + v3QUnitxS = v3PhotonUnit.Cross(v3S); + /*--------------------------------------------------*/ + // Get the Phi scattering angle with respect to the electron scattering plane + fPhi = Get_Phi_X_LeptonPlane_RF (); - + /*--------------------------------------------------*/ + // Get the Phi scattering angle between the target polarization plane and the electron scattering plane + fPhiS = Get_Phi_TargPol_LeptonPlane_RF(); -// double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; + fTheta_X_Photon_RF = fRAD2DEG * acos( ( v3Photon.Dot( v3X ) ) / ( v3Photon.Mag() * v3X.Mag() ) ); + if ( fTheta_X_Photon_RF < 0 ) { fTheta_X_Photon_RF = 180.0 + fTheta_X_Photon_RF; } - double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; - double e_pCM = (fWSq_GeV + pow(fProton_Mass/1000, 2) - pow(f_Scat_hadron_Mass/1000, 2))/fW_GeV/2.; + // ----------------------------------------------------------------------------------- + // If we have fermi momentum then epsilon should be in rest frame + // The theta angle of scattered angle used in expression of epsilon is the angle + // with respect to direction of incoming electron in the rest frame of target nucleon + // epsilon=1./(1.+ 2.*(pgam_restg**2)/q2g * *(tand(thscat_rest/2.))**2) + // ----------------------------------------------------------------------------------- -// cout << "*********: " << e_photCM << " " << e_pCM << endl; -// cout << "*********: " << e_photon_rf << " "<< e_p_rf << endl; + double fTheta_EEp = (lelectron_rf.Vect()).Angle(lscatelec_rf.Vect()); + fEpsilon = 1.0 / ( 1.0 + 2.0 * ( pow( (lphoton_rfg.Vect()).Mag(),2)/fQsq_GeV ) * pow( tan( fTheta_EEp / 2 ) , 2 ) ); + /// meson produced angle with respect to the Q-vector - ft_min = -fQsq_GeV + pow(fX_Mass/1000, 2) -2.*(e_X_rf/1000*e_photon_rf/1000 -sqrt( (pow(e_X_rf/1000, 2) - pow(fX_Mass/1000, 2)) * (pow(e_photon_rf/1000,2)+fQsq_GeV) )); + theta_X_rf = (lX_rf.Vect()).Angle(lphoton_rf.Vect()); + // ---------------------------------------------------- + // Virtual Photon flux factor in units of 1/(GeV*Sr) + // ---------------------------------------------------- -// u_min = -qsq + m_psq -2.*(e_pCM*e_photCM -sqrt( (e_pCM**2-m_psq)*(e_photCM**2+qsq) )) + fFlux_Factor_Col = (fAlpha/(2.0*pow(fPi,2))) * (r_lscatelecg.E() / r_lelectrong.E()) * + ( pow(fW_GeV,2) - pow(fProton_Mass_GeV,2) ) / (2.0*fProton_Mass_GeV*fQsq_GeV*(1.0 - fEpsilon)); -// fu_min = -fQsq_GeV + pow(fProton_Mass/1000, 2) -2.*(e_p_rf/1000*e_photon_rf/1000 -sqrt( fabs(pow(e_p_rf/1000, 2) - pow(fProton_Mass/1000 , 2))*(pow(e_photon_rf/1000,2)+fQsq_GeV) )); + fFlux_Factor_RF = ( fAlpha / ( 2.0 * pow( fPi , 2 ) ) ) * ( lscatelec_rfg.E() / lelectron_rfg.E() ) * + ( pow( fW_GeV , 2 ) - pow( fProton_Mass_GeV , 2 ) ) / + ( 2.0 * fProton_Mass_GeV * fQsq_GeV * ( 1.0 - fEpsilon ) ); - fu_min = -fQsq_GeV + pow(fProton_Mass/1000, 2) -2.*(e_pCM*e_photCM -sqrt( (pow(e_pCM/1000, 2) - pow(fProton_Mass/1000 , 2))*(pow(e_photCM/1000,2)+fQsq_GeV) )); + // ---------------------------------------------------- + // Jacobian dt/dcos(theta*)dphi in units of GeV2/sr + // ---------------------------------------------------- - -// cout << fQsq_GeV << " " << "AAAA " << (pow(e_p_rf/1000, 2) - pow(f_Scat_hadron_Mass/1000 , 2))*(pow(e_photon_rf/1000,2)+fQsq_GeV) << " :::: " << (pow(e_p_rf/1000, 2) - pow(fProton_Mass/1000 , 2)) << " " << (pow(e_photon_rf/1000,2)+fQsq_GeV) << " " << pow(e_p_rf/1000, 2) << " " << pow(fProton_Mass/1000 , 2) << " " << e_p_rf/1000*e_photon_rf/1000 << endl; -// -// cout << endl; -// cout << endl; -// cout << endl; -// -// -// cout << "asd: " << ft_min << " " << fu_min << " " << f_Scat_hadron_Mass << " " << fX_Mass << " " << fProton_Mass << " "<< fQsq << " " << e_photon_rf << " photon photon: " << lphoton_rf.E() << " " << fm << " " << r_lphoton.E() << " " << beta_col_rf.Mag() << endl; -// -// -// cout << "Photon energy: " << e_X_rf << " " << e_photon_rf << endl; -// -// cout << r_lprotong.Px() << " " << r_lprotong.Py() << " " << r_lprotong.Pz() << " " << r_lprotong.E() << endl; -// cout << lproton_rfg.Px() << " " << lproton_rfg.Py() << " " << lproton_rfg.Pz() << " " << lproton_rfg.E() << endl; -// cout << "aaa " << beta_col_rf.Px() << " " << beta_col_rf.Py() << " " << beta_col_rf.Pz() << endl; -// -// exit(0); + fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); - // ----------------------------------------------------------------------------------------- - // ----------------------------------------------------------------------------------------- - // Calculate -t - // ----------------------------------------------------------------------------------------- - // ----------------------------------------------------------------------------------------- - - fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); - fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; - fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_hadron_Mass , 2) ) / ( 2.0 * fW); - fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); - fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; - fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; - - // this equation is valid for parallel kinematics only! - fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_lX.Vect()).Mag()),2) - pow((r_lphoton.E() - r_lX.E()),2)); - fT_Para_GeV = fT_Para/1000000.0; - - lt = r_lphoton - r_lX; - ltg = lt * fm; - - fT = -1.*lt.Mag2(); - fT_GeV = -1.*ltg.Mag2(); - - -// cout << "ttt: " << fT_GeV << endl; - - - - //if ( gKinematics_type == 1 && fT_GeV > 0.5 ) { - // t_ev++; - // return; - //} - // - //if ( gKinematics_type == 2 && fT_GeV > 1.3 ) { - // t_ev++; - // return; - //} - - fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); - fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); - fz = r_lX.E()/r_lphoton.E(); - - // ------------------------------------------------------------------------------------------------------- - // Calculation of Phi ( azimuthal angle of pion momentum w.r.t lepton plane in target's rest frame) - // Calculation of PhiS ( azimuthal angle of target polarization w.r.t lepton plane in target's rest frame) - // ------------------------------------------------------------------------------------------------------- - - v3Photon.SetX( lphoton_rfg.X() ); - v3Photon.SetY( lphoton_rfg.Y() ); - v3Photon.SetZ( lphoton_rfg.Z() ); - - v3Electron.SetX( lelectron_rfg.X() ); - v3Electron.SetY( lelectron_rfg.Y() ); - v3Electron.SetZ( lelectron_rfg.Z() ); - - v3X.SetX( lX_rfg.X() ) ; - v3X.SetY( lX_rfg.Y() ) ; - v3X.SetZ( lX_rfg.Z() ); - - v3S.SetX( -1 ); - v3S.SetY( 0 ); - v3S.SetZ( 0 ); - - v3PhotonUnit = v3Photon.Unit(); - v3QxL = v3Photon.Cross(v3Electron); - v3QxP = v3Photon.Cross(v3X); - v3QxS = v3Photon.Cross(v3S); - v3LxP = v3Electron.Cross(v3X); - v3LxS = v3Electron.Cross(v3S); - v3PxL = v3X.Cross(v3Electron); - v3QUnitxL = v3PhotonUnit.Cross(v3Electron); - v3QUnitxP = v3PhotonUnit.Cross(v3X); - v3QUnitxS = v3PhotonUnit.Cross(v3S); - - /*--------------------------------------------------*/ - // Get the Phi scattering angle with respect to the electron scattering plane - fPhi = Get_Phi_X_LeptonPlane_RF (); - - /*--------------------------------------------------*/ - // Get the Phi scattering angle between the target polarization plane and the electron scattering plane - fPhiS = Get_Phi_TargPol_LeptonPlane_RF(); - - fTheta_X_Photon_RF = fRAD2DEG * acos( ( v3Photon.Dot( v3X ) ) / ( v3Photon.Mag() * v3X.Mag() ) ); - if ( fTheta_X_Photon_RF < 0 ) { fTheta_X_Photon_RF = 180.0 + fTheta_X_Photon_RF; } - - // ----------------------------------------------------------------------------------- - // If we have fermi momentum then epsilon should be in rest frame - // The theta angle of scattered angle used in expression of epsilon is the angle - // with respect to direction of incoming electron in the rest frame of target hadron - // epsilon=1./(1.+ 2.*(pgam_restg**2)/q2g * *(tand(thscat_rest/2.))**2) - // ----------------------------------------------------------------------------------- - - double fTheta_EEp = (lelectron_rf.Vect()).Angle(lscatelec_rf.Vect()); + fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; - fEpsilon = 1.0 / ( 1.0 + 2.0 * ( pow( (lphoton_rfg.Vect()).Mag(),2)/fQsq_GeV ) * pow( tan( fTheta_EEp / 2 ) , 2 ) ); + double fttt = r_lprotong * r_lprotong - 2 * r_lprotong * r_l_scat_hadron_g + r_l_scat_hadron_g * r_l_scat_hadron_g; + double fuuu = r_lprotong * r_lprotong - 2 * r_lprotong * r_lX_g + r_lX_g * r_lX_g; - /// meson produced angle with respect to the Q-vector + // ---------------------------------------------------- + // Jacobian dOmega* / dOmega dimensionless + // ---------------------------------------------------- - theta_X_rf = (lX_rf.Vect()).Angle(lphoton_rf.Vect()); - + fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / + ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - + ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); - // ---------------------------------------------------- - // Virtual Photon flux factor in units of 1/(GeV*Sr) - // ---------------------------------------------------- - fFlux_Factor_Col = (fAlpha/(2.0*pow(fPi,2))) * (r_lscatelecg.E() / r_lelectrong.E()) * - ( pow(fW_GeV,2) - pow(fProton_Mass_GeV,2) ) / (2.0*fProton_Mass_GeV*fQsq_GeV*(1.0 - fEpsilon)); - - fFlux_Factor_RF = ( fAlpha / ( 2.0 * pow( fPi , 2 ) ) ) * ( lscatelec_rfg.E() / lelectron_rfg.E() ) * - ( pow( fW_GeV , 2 ) - pow( fProton_Mass_GeV , 2 ) ) / - ( 2.0 * fProton_Mass_GeV * fQsq_GeV * ( 1.0 - fEpsilon ) ); - - - // ---------------------------------------------------- - // Jacobian dt/dcos(theta*)dphi in units of GeV2/sr - // ---------------------------------------------------- - fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); - - fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; - -// cout << "LXXXX check: " << ( r_lproton + r_lelectron - r_lscatelec - r_lX).X() << " " << ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y() << " " << ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z() << " " << sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + pow( f_Scat_hadron_Mass ,2 ) ) << endl; + fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / + ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - + ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); + // ------------------------------------------------------------------------------------------ + // CKY sigma L and T starts + // ------------------------------------------------------------------------------------------ - double fttt = r_lprotong * r_lprotong - 2 * r_lprotong * r_l_scat_hadron_g + r_l_scat_hadron_g * r_l_scat_hadron_g; - double fuuu = r_lprotong * r_lprotong - 2 * r_lprotong * r_lX_g + r_lX_g * r_lX_g; - -// cout << "check this: " << r_lprotong * r_lprotong << " " << r_l_scat_hadron_g * r_l_scat_hadron_g << " " << r_lX_g * r_lX_g << endl; -// -// cout << "t: " << ft << " " << fttt << " u: " << fu << " " << fuuu << endl; -// -// cout << "Angle aaa : " << r_lproton.Vect().Angle(r_lX.Vect()) << endl; -// -// -// exit(0); - - // ---------------------------------------------------- - // Jacobian dOmega* / dOmega dimensionless - // ---------------------------------------------------- - fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / - ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - - ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); - - fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / - ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - - ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); - - // ----------------------------------------------------------------------------------------------------------- - // CKY sigma L and T starts - // ----------------------------------------------------------------------------------------------------------- - // ------------------------------------------------------------------------------------------- - - r_fSig = Get_CrossSection(); - - // ----------------------------------------------------------------------------------------------------------- - // CKY sigma L and T ends - // ----------------------------------------------------------------------------------------------------------- - - fSigma_Col = r_fSig * fFlux_Factor_Col * fA * fJacobian_CM_Col; - - - if ( ( fSigma_Col <= 0 ) || std::isnan( fSigma_Col ) ) { - fNSigmaNeg ++; - return; - } - - // ----------------------------------------------------------------------------------------------------------- - // ----------------------------------------------------------------------------------------------------------- - // Lab cross section Phase Space Conversion Luminosity Total events tried - // Hz = ub / ( sr^2 * GeV ) * GeV * sr^2 * ( cm^2 / ub ) * ( # / ( cm^2 * sec ) ) / ( # ) - - fEventWeight = fSigma_Col * fPSF * fuBcm2 * fLumi / fNEvents; // in Hz + r_fSig = Get_CrossSection(); - - fNRecorded ++; - fLundRecorded++; - fRatio = fNRecorded / fNGenerated; - -// cout << if_pi0_decay << endl; + // ------------------------------------------------------------------------------------------ + // CKY sigma L and T ends + // ------------------------------------------------------------------------------------------ -// if (if_pi0_decay) { -// Pi0_Decay_Lund_Output(); -// } else { -// Pi0_Lund_Output(); -// } -// cout << "AAAAAAAAAAAAAA" << endl; + fSigma_Col = r_fSig * fFlux_Factor_Col * fA * fJacobian_CM_Col; - Pi0_Decay_Pythia6_Output(); + if ( ( fSigma_Col <= 0 ) || std::isnan( fSigma_Col ) ) { + fNSigmaNeg ++; + return; + } -// exit(0); + // ------------------------------------------------------------------------------------------ + // ------------------------------------------------------------------------------------------ + // Lab cross section Phase Space Conversion Luminosity Total events tried + // Hz = ub / ( sr^2 * GeV ) * GeV * sr^2 * ( cm^2 / ub ) * ( # / ( cm^2 * sec ) ) / ( # ) + + fEventWeight = fSigma_Col * fPSF * fuBcm2 * fLumi / fNEvents; // in Hz + + fNRecorded ++; + fLundRecorded++; + fRatio = fNRecorded / fNGenerated; + + if (gOutputType == "Pythia6"){ + Pi0_Decay_Pythia6_Output(); + } + else if (gOutputType == "LUND"){ + if (if_pi0_decay){ + Pi0_Decay_Lund_Output(); + } + else { + Pi0_Lund_Output(); + } + } + else if (gOutputType == "HEPMC3"){ + Pi0_HEPMC3_Output(); + } } @@ -791,11 +579,11 @@ void Pi0_Production::Processing_Event() { void Pi0_Production::Detail_Output() { - DEMPDetails << "Total events tried " << setw(50) << fNGenerated << endl; - DEMPDetails << "Total events recorded " << setw(50) << fNRecorded << endl; + DEMPDetails << "Total events tried " << setw(50) << fNGenerated << endl; + DEMPDetails << "Total events recorded " << setw(50) << fNRecorded << endl; - DEMPDetails << "Seed used for the Random Number Generator " << setw(50) << fSeed << endl; - DEMPDetails << "Number of lund events " << setw(50) << fLundRecorded << endl; + DEMPDetails << "Seed used for the Random Number Generator " << setw(50) << fSeed << endl; + DEMPDetails << "Number of lund events " << setw(50) << fLundRecorded << endl; } @@ -805,109 +593,106 @@ void Pi0_Production::Detail_Output() { void Pi0_Production::Pi0_Lund_Output() { - - DEMPOut << "5" - << " \t " << fPhi // var 1 - << " \t " << fPhiS // var 2 - << " \t " << fx // var 3 - << " \t " << "1" - << " \t " << fQsq_GeV // var 4 - << " \t " << fT_GeV // var 5 - << " \t " << fW_GeV // var 6 - << " \t " << fEpsilon // var 7 - << " \t " << fEventWeight // var 8 - << endl; + DEMPOut << "5" + << " \t " << fPhi // var 1 + << " \t " << fPhiS // var 2 + << " \t " << fx // var 3 + << " \t " << "1" + << " \t " << fQsq_GeV // var 4 + << " \t " << fT_GeV // var 5 + << " \t " << fW_GeV // var 6 + << " \t " << fEpsilon // var 7 + << " \t " << fEventWeight // var 8 + << endl; - ///*--------------------------------------------------*/ - // Initial State - - DEMPOut << setw(10) << "1" - << setw(10) << "-1" - << setw(10) << "0" - << setw(10) << "11" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lelectrong.X() - << setw(16) << r_lelectrong.Y() - << setw(16) << r_lelectrong.Z() - << setw(16) << r_lelectrong.E() - << setw(16) << fElectron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - DEMPOut << setw(10) << "2" - << setw(10) << "1" - << setw(10) << "0" - << setw(10) << "2212" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lprotong.X() - << setw(16) << r_lprotong.Y() - << setw(16) << r_lprotong.Z() - << setw(16) << r_lprotong.E() - << setw(16) << fProton_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - - - ///*--------------------------------------------------*/ - // Final State - - // Produced Particle X - DEMPOut << setw(10) << "3" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << PDGtype(produced_X) - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lX_g.X() - << setw(16) << r_lX_g.Y() - << setw(16) << r_lX_g.Z() - << setw(16) << r_lX_g.E() - << setw(16) << fX_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Scattered electron - DEMPOut << setw(10) << "4" - << setw(10) << "-1" - << setw(10) << "1" - << setw(10) << "11" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lscatelecg.X() - << setw(16) << r_lscatelecg.Y() - << setw(16) << r_lscatelecg.Z() - << setw(16) << r_lscatelecg.E() - << setw(16) << fElectron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Recoiled neutron - DEMPOut << setw(10) << "5" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << PDGtype(recoil_hadron) - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_l_scat_hadron_g.X() - << setw(16) << r_l_scat_hadron_g.Y() - << setw(16) << r_l_scat_hadron_g.Z() - << setw(16) << r_l_scat_hadron_g.E() - << setw(16) << f_Scat_hadron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; + ///*--------------------------------------------------*/ + // Initial State + + DEMPOut << setw(10) << "1" + << setw(10) << "-1" + << setw(10) << "0" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lelectrong.X() + << setw(16) << r_lelectrong.Y() + << setw(16) << r_lelectrong.Z() + << setw(16) << r_lelectrong.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + DEMPOut << setw(10) << "2" + << setw(10) << "1" + << setw(10) << "0" + << setw(10) << "2212" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lprotong.X() + << setw(16) << r_lprotong.Y() + << setw(16) << r_lprotong.Z() + << setw(16) << r_lprotong.E() + << setw(16) << fProton_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + ///*--------------------------------------------------*/ + // Final State + + // Produced Particle X + DEMPOut << setw(10) << "3" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(produced_X) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lX_g.X() + << setw(16) << r_lX_g.Y() + << setw(16) << r_lX_g.Z() + << setw(16) << r_lX_g.E() + << setw(16) << fX_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Scattered electron + DEMPOut << setw(10) << "4" + << setw(10) << "-1" + << setw(10) << "1" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lscatelecg.X() + << setw(16) << r_lscatelecg.Y() + << setw(16) << r_lscatelecg.Z() + << setw(16) << r_lscatelecg.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Recoiled neutron + DEMPOut << setw(10) << "5" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(recoil_hadron) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_l_scat_hadron_g.X() + << setw(16) << r_l_scat_hadron_g.Y() + << setw(16) << r_l_scat_hadron_g.Z() + << setw(16) << r_l_scat_hadron_g.E() + << setw(16) << f_Scat_hadron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; } @@ -916,108 +701,103 @@ void Pi0_Production::Pi0_Lund_Output() { void Pi0_Production::Pi0_Decay_Lund_Output() { - DEMPOut << "4" - << " \t " << fPhi // var 1 - << " \t " << fPhiS // var 2 - << " \t " << fx // var 3 - << " \t " << "1" - << " \t " << fQsq_GeV // var 4 - << " \t " << fT_GeV // var 5 - << " \t " << fW_GeV // var 6 - << " \t " << fEpsilon // var 7 - << " \t " << fEventWeight // var 8 - << endl; - - - // Scattered electron - DEMPOut << setw(10) << "2" - << setw(10) << "-1" - << setw(10) << "1" - << setw(10) << "11" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_lscatelecg.X() - << setw(16) << r_lscatelecg.Y() - << setw(16) << r_lscatelecg.Z() - << setw(16) << r_lscatelecg.E() - << setw(16) << fElectron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Recoiled neutron - DEMPOut << setw(10) << "3" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << PDGtype(recoil_hadron) - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << r_l_scat_hadron_g.X() - << setw(16) << r_l_scat_hadron_g.Y() - << setw(16) << r_l_scat_hadron_g.Z() - << setw(16) << r_l_scat_hadron_g.E() - << setw(16) << f_Scat_hadron_Mass_GeV - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Photon 1 - DEMPOut << setw(10) << "3" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << "22" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << l_photon_1.X() - << setw(16) << l_photon_1.Y() - << setw(16) << l_photon_1.Z() - << setw(16) << l_photon_1.E() - << setw(16) << "0" - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; - - // Photon 2 - DEMPOut << setw(10) << "4" - << setw(10) << "1" - << setw(10) << "1" - << setw(10) << "22" - << setw(10) << "0" - << setw(10) << "0" - << setw(16) << l_photon_2.X() - << setw(16) << l_photon_2.Y() - << setw(16) << l_photon_2.Z() - << setw(16) << l_photon_2.E() - << setw(16) << "0" - << setw(16) << fVertex_X - << setw(16) << fVertex_Y - << setw(16) << fVertex_Z - << endl; + DEMPOut << "4" + << " \t " << fPhi // var 1 + << " \t " << fPhiS // var 2 + << " \t " << fx // var 3 + << " \t " << "1" + << " \t " << fQsq_GeV // var 4 + << " \t " << fT_GeV // var 5 + << " \t " << fW_GeV // var 6 + << " \t " << fEpsilon // var 7 + << " \t " << fEventWeight // var 8 + << endl; + + // Scattered electron + DEMPOut << setw(10) << "2" + << setw(10) << "-1" + << setw(10) << "1" + << setw(10) << "11" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_lscatelecg.X() + << setw(16) << r_lscatelecg.Y() + << setw(16) << r_lscatelecg.Z() + << setw(16) << r_lscatelecg.E() + << setw(16) << fElectron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Recoiled neutron + DEMPOut << setw(10) << "3" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << PDGtype(recoil_hadron) + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << r_l_scat_hadron_g.X() + << setw(16) << r_l_scat_hadron_g.Y() + << setw(16) << r_l_scat_hadron_g.Z() + << setw(16) << r_l_scat_hadron_g.E() + << setw(16) << f_Scat_hadron_Mass_GeV + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Photon 1 + DEMPOut << setw(10) << "3" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << "22" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << l_photon_1.X() + << setw(16) << l_photon_1.Y() + << setw(16) << l_photon_1.Z() + << setw(16) << l_photon_1.E() + << setw(16) << "0" + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; + + // Photon 2 + DEMPOut << setw(10) << "4" + << setw(10) << "1" + << setw(10) << "1" + << setw(10) << "22" + << setw(10) << "0" + << setw(10) << "0" + << setw(16) << l_photon_2.X() + << setw(16) << l_photon_2.Y() + << setw(16) << l_photon_2.Z() + << setw(16) << l_photon_2.E() + << setw(16) << "0" + << setw(16) << fVertex_X + << setw(16) << fVertex_Y + << setw(16) << fVertex_Z + << endl; } - - - /*--------------------------------------------------*/ /*--------------------------------------------------*/ /*--------------------------------------------------*/ void Pi0_Production::Pi0_Decay_Pythia6_Out_Init() { + print_itt = 0; - print_itt = 0; - -// DEMPOut << "PYTHIA EVENT FILE" << endl; - DEMPOut << "SIMPLE Event FILE" << endl; - DEMPOut << "============================================" << endl; - DEMPOut << "I, ievent, nParticles" << endl; - DEMPOut << "============================================" << endl; - DEMPOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; - DEMPOut << "============================================" << endl; + // DEMPOut << "PYTHIA EVENT FILE" << endl; + DEMPOut << "SIMPLE Event FILE" << endl; + DEMPOut << "============================================" << endl; + DEMPOut << "I, ievent, nParticles" << endl; + DEMPOut << "============================================" << endl; + DEMPOut << "I K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1) P(I,2) P(I,3) P(I,4) P(I,5) V(I,1) V(I,2) V(I,3)" << endl; + DEMPOut << "============================================" << endl; } @@ -1025,144 +805,162 @@ void Pi0_Production::Pi0_Decay_Pythia6_Out_Init() { void Pi0_Production::Pi0_Decay_Pythia6_Output() { + DEMPOut << "0" << " \t\t\t " << print_itt << " \t\t\t " << "1" << endl; // var 1 + print_itt++; -// DEMPOut << "4" -// << " \t " << fPhi // var 1 -// << " \t " << fPhiS // var 2 -// << " \t " << fx // var 3 -// << " \t " << "1" -// << " \t " << fQsq_GeV // var 4 -// << " \t " << fT_GeV // var 5 -// << " \t " << fW_GeV // var 6 -// << " \t " << fEpsilon // var 7 -// << " \t " << fEventWeight // var 8 -// << endl; + DEMPOut << "============================================" << endl; + ///*--------------------------------------------------*/ + // Initial State + + DEMPOut << "1" + << setw(6) << "21" + << setw(6) << "11" + << setw(6) << "0" + << setw(6) << "3" + << setw(6) << "4" + + << setw(14) << r_lelectrong.X() + << setw(14) << r_lelectrong.Y() + << setw(14) << r_lelectrong.Z() + << setw(14) << r_lelectrong.E() + << setw(14) << fElectron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + DEMPOut << "2" + << setw(6) << "21" + << setw(6) << "2212" + << setw(6) << "0" + << setw(6) << "5" + << setw(6) << "6" + + << setw(14) << r_lprotong.X() + << setw(14) << r_lprotong.Y() + << setw(14) << r_lprotong.Z() + << setw(14) << r_lprotong.E() + << setw(14) << fProton_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + DEMPOut << "3" + << setw(6) << "21" + << setw(6) << "22" + << setw(6) << "1" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lphotong.X() + << setw(14) << r_lphotong.Y() + << setw(14) << r_lphotong.Z() + << setw(14) << r_lphotong.E() + << setw(14) << r_lphotong.M() + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + ///*--------------------------------------------------*/ + // Final State + + // Scattered electron + DEMPOut << "4" + << setw(6) << "1" + << setw(6) << "11" + << setw(6) << "1" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lscatelecg.X() + << setw(14) << r_lscatelecg.Y() + << setw(14) << r_lscatelecg.Z() + << setw(14) << r_lscatelecg.E() + << setw(14) << fElectron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + // Recoiled nucleon + DEMPOut << "5" + << setw(6) << "1" + << setw(6) << PDGtype(recoil_hadron) + << setw(6) << "2" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_l_scat_hadron_g.X() + << setw(14) << r_l_scat_hadron_g.Y() + << setw(14) << r_l_scat_hadron_g.Z() + << setw(14) << r_l_scat_hadron_g.E() + << setw(14) << f_Scat_hadron_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + // Produced Particle X + DEMPOut << "6" + << setw(6) << "1" + << setw(6) << PDGtype(produced_X) + << setw(6) << "2" + << setw(6) << "0" + << setw(6) << "0" + + << setw(14) << r_lX_g.X() + << setw(14) << r_lX_g.Y() + << setw(14) << r_lX_g.Z() + << setw(14) << r_lX_g.E() + << setw(14) << fX_Mass_GeV + << setw(6) << fVertex_X + << setw(6) << fVertex_Y + << setw(6) << fVertex_Z + << endl; + + DEMPOut << "=============== Event finished ===============" << endl; - DEMPOut << "0" << " \t\t\t\ " << print_itt << " \t\t\t " << "1" << endl; // var 1 - - print_itt++; +} - DEMPOut << "============================================" << endl; +void Pi0_Production::Pi0_HEPMC3_Out_Init() { - ///*--------------------------------------------------*/ - // Initial State - - DEMPOut << "1" - << setw(6) << "21" - << setw(6) << "11" - << setw(6) << "0" - << setw(6) << "3" - << setw(6) << "4" - - << setw(14) << r_lelectrong.X() - << setw(14) << r_lelectrong.Y() - << setw(14) << r_lelectrong.Z() - << setw(14) << r_lelectrong.E() - << setw(14) << fElectron_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - DEMPOut << "2" - << setw(6) << "21" - << setw(6) << "2212" - << setw(6) << "0" - << setw(6) << "5" - << setw(6) << "6" - - << setw(14) << r_lprotong.X() - << setw(14) << r_lprotong.Y() - << setw(14) << r_lprotong.Z() - << setw(14) << r_lprotong.E() - << setw(14) << fProton_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - DEMPOut << "3" - << setw(6) << "21" - << setw(6) << "22" - << setw(6) << "1" - << setw(6) << "0" - << setw(6) << "0" - - << setw(14) << r_lphotong.X() - << setw(14) << r_lphotong.Y() - << setw(14) << r_lphotong.Z() - << setw(14) << r_lphotong.E() - << setw(14) << r_lphotong.M() - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - - ///*--------------------------------------------------*/ - // Final State - - // Scattered electron - DEMPOut << "4" - << setw(6) << "1" - << setw(6) << "11" - << setw(6) << "1" - << setw(6) << "0" - << setw(6) << "0" - - << setw(14) << r_lscatelecg.X() - << setw(14) << r_lscatelecg.Y() - << setw(14) << r_lscatelecg.Z() - << setw(14) << r_lscatelecg.E() - << setw(14) << fElectron_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - // Recoiled hadron - DEMPOut << "5" - << setw(6) << "1" - << setw(6) << PDGtype(recoil_hadron) - << setw(6) << "2" - << setw(6) << "0" - << setw(6) << "0" - - << setw(14) << r_l_scat_hadron_g.X() - << setw(14) << r_l_scat_hadron_g.Y() - << setw(14) << r_l_scat_hadron_g.Z() - << setw(14) << r_l_scat_hadron_g.E() - << setw(14) << f_Scat_hadron_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - // Produced Particle X - DEMPOut << "6" - << setw(6) << "1" - << setw(6) << PDGtype(produced_X) - << setw(6) << "2" - << setw(6) << "0" - << setw(6) << "0" - - << setw(14) << r_lX_g.X() - << setw(14) << r_lX_g.Y() - << setw(14) << r_lX_g.Z() - << setw(14) << r_lX_g.E() - << setw(14) << fX_Mass_GeV - << setw(6) << fVertex_X - << setw(6) << fVertex_Y - << setw(6) << fVertex_Z - << endl; - - DEMPOut << "=============== Event finished ===============" << endl; + print_itt = 0; + DEMPOut << "HepMC::Version 3.02.05" << endl; + DEMPOut << "HepMC::Asciiv3-START_EVENT_LISTING" << endl; } +/*--------------------------------------------------*/ + +void Pi0_Production::Pi0_HEPMC3_Output() { + + // HEPMC3 output for Athena simulations + + // First line - E - Event# - #Vertices - #Particles + DEMPOut << "E" << " " << print_itt << " " << "1" << " " << 5 << endl; + print_itt++; + // Second line, Units - U - ENERGY UNIT - DISTANCE UNIT + DEMPOut << "U" << " " << "GEV" << " " << "MM" << endl; + // Third line, optional attributes, the weight + DEMPOut << "A" << " " << "0" << " " << "weight" << " " << fEventWeight << endl; + // Beam particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (4, incoming beam particle) + DEMPOut << "P" << " " << "1" << " " << "0" << " " << "11" << " " << r_lelectrong.X() << " " << r_lelectrong.Y() << " " << r_lelectrong.Z() << " " << r_lelectrong.E() << " " << fElectron_Mass_GeV << " " << "4" << endl; + DEMPOut << "P" << " " << "2" << " " << "0" << " " << "2212" << " " << r_lprotong.X() << " " << r_lprotong.Y() << " " << r_lprotong.Z() << " " << r_lprotong.E() << " " << fProton_Mass_GeV << " " << "4" << endl; + // Vertex line - V - 1 - 0 - [1,2] + DEMPOut << "V" << " " << "-1" << " " << "0" << " " << "[1,2]" << endl; + // Output particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (1, undecayed physical particle) + // Scattered electron + DEMPOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << fElectron_Mass_GeV << " " << "1" << endl; + // Produced meson + DEMPOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_lX_g.X() << " " << r_lX_g.Y() << " " << r_lX_g.Z() << " " << r_lX_g.E() << " " << fX_Mass_GeV << " " << "1" << endl; + // Recoil nucleon + DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << r_l_scat_hadron_g.X() << " " << r_l_scat_hadron_g.Y() << " " << r_l_scat_hadron_g.Z() << " " << r_l_scat_hadron_g.E() << " " << f_Scat_hadron_Mass_GeV << " " << "1" << endl; +} /*--------------------------------------------------*/ /// Cross section model: Based on 12 GeV Hall C u-channel pi0 proposal @@ -1171,395 +969,273 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { Double_t Pi0_Production::Get_CrossSection(){ - double_t sig_total; + double_t sig_total; - // use fit parameters for xB=0.36 data+model (nb/GeV2) - Double_t Q2tab[4] = {1.75, 3.00, 4.00, 5.50}; - Double_t Wtab[4] = {2.00, 2.46, 2.83, 3.26}; + // use fit parameters for xB=0.36 data+model (nb/GeV2) + Double_t Q2tab[4] = {1.75, 3.00, 4.00, 5.50}; + Double_t Wtab[4] = {2.00, 2.46, 2.83, 3.26}; - // sigT is parameterized in the form p1+p2/(-t) - Double_t p1T[4] = {1577., 168., 67.4, 24.7}; - Double_t p2T[4] = {-125., -11.1, -4.6, -1.66}; + // sigT is parameterized in the form p1+p2/(-t) + Double_t p1T[4] = {1577., 168., 67.4, 24.7}; + Double_t p2T[4] = {-125., -11.1, -4.6, -1.66}; - // sigL is simply constant vs t - Double_t p1L[4] = {0., 2.77, 1.16, 0.43}; + // sigL is simply constant vs t + Double_t p1L[4] = {0., 2.77, 1.16, 0.43}; - // sigTT p1+p2/(-t) - Double_t p1TT[4] = {-674., -141., -57.6, -21.3}; - Double_t p2TT[4] = { 102., 25.4, 10.4, 3.82}; + // sigTT p1+p2/(-t) + Double_t p1TT[4] = {-674., -141., -57.6, -21.3}; + Double_t p2TT[4] = { 102., 25.4, 10.4, 3.82}; - // sigLT p1+p2/(-t) - Double_t p1LT[4] = { 156., 12.57, 5.17, 1.97}; - Double_t p2LT[4] = {-60.0, -2.08, -0.85, -0.32}; + // sigLT p1+p2/(-t) + Double_t p1LT[4] = { 156., 12.57, 5.17, 1.97}; + Double_t p2LT[4] = {-60.0, -2.08, -0.85, -0.32}; - double sigThi, sigTlo, sigLhi, sigLlo; - double sigTThi, sigTTlo, sigLThi, sigLTlo; - double tmin, tprime; - double umin, uprime; - Int_t Q2count =0; + double sigThi, sigTlo, sigLhi, sigLlo; + double sigTThi, sigTTlo, sigLThi, sigLTlo; + double tmin, tprime; + double umin, uprime; + Int_t Q2count =0; - double thetacm = theta_X_rf; + double thetacm = theta_X_rf; - double eps = fEpsilon; - double phicm = fPhi; + double eps = fEpsilon; + double phicm = fPhi; - double Q2hi=0.; - double Q2lo=0.; - double delQ2=1.; + double Q2hi=0.; + double Q2lo=0.; + double delQ2=1.; - double Whi, Wlo; + double Whi, Wlo; - double Q2tmp = fQsq_GeV; - double m_p = fProton_Mass; - double W_gev = fW_GeV; - - double pi = fPi; - - int ndat=4; + double Q2tmp = fQsq_GeV; + double m_p = fProton_Mass; + double W_gev = fW_GeV; - tprime = ft-ft_min; - uprime = fu-fu_min; + double pi = fPi; - if( Q2tmp < Q2tab[0] ) { + int ndat=4; - Q2count = 0; - Q2hi = Q2tab[1]; - Whi = Wtab[1]; - Q2lo = Q2tab[0]; - Wlo = Wtab[0]; - delQ2 = (Q2hi - Q2lo); + tprime = ft-ft_min; + uprime = fu-fu_min; - } else { + if( Q2tmp < Q2tab[0] ) { - for(int Q2c=0; Q2c <= ndat-2; Q2c++){ + Q2count = 0; + Q2hi = Q2tab[1]; + Whi = Wtab[1]; + Q2lo = Q2tab[0]; + Wlo = Wtab[0]; + delQ2 = (Q2hi - Q2lo); -// cout << Q2c << endl; - if( (Q2tmp >= Q2tab[Q2c] && Q2tmp < Q2tab[Q2c+1]) || Q2tmp >= Q2tab[Q2c+1] ) { + } else { - Q2count = Q2c ; - Q2hi = Q2tab[Q2count+1]; - Whi = Wtab[Q2count+1]; - Q2lo = Q2tab[Q2count]; - Wlo = Wtab[Q2count]; - delQ2 = (Q2hi - Q2lo); + for(int Q2c=0; Q2c <= ndat-2; Q2c++){ -// cout << "check this: " << Q2count << " "<< Q2tmp << " " << Q2tab[Q2c] << " "<< Q2tab[Q2c+1] << endl; + if( (Q2tmp >= Q2tab[Q2c] && Q2tmp < Q2tab[Q2c+1]) || Q2tmp >= Q2tab[Q2c+1] ) { - } + Q2count = Q2c ; + Q2hi = Q2tab[Q2count+1]; + Whi = Wtab[Q2count+1]; + Q2lo = Q2tab[Q2count]; + Wlo = Wtab[Q2count]; + delQ2 = (Q2hi - Q2lo); + } + } + } -// do Q2c=1,(ndat-1) -// if( (Q2tmp.ge.Q2tab(Q2c)).and. (Q2tmp.lt.Q2tab(Q2c+1) ) -// 1 .or. Q2tmp.ge.Q2tab(Q2c+1) ) then -// Q2count = Q2c -// Q2hi = Q2tab(Q2count+1) -// Whi = Wtab(Q2count+1) -// Q2lo = Q2tab(Q2count) -// Wlo = Wtab(Q2count) -// delQ2 = (Q2hi - Q2lo) -// endif !Q2 check -// enddo !Q2 - } - } + ///*--------------------------------------------------*/ + // t-channel + if ( thetacm > pi/2.) { + sigThi = p1T[Q2count+1] + p2T[Q2count+1]/(tprime+fabs(tmin)); + sigTlo = p1T[Q2count] + p2T[Q2count]/(tprime+fabs(tmin)); + sigLhi = p1L[Q2count+1]; + sigLlo = p1L[Q2count]; + sigTThi = p1TT[Q2count+1]+p2TT[Q2count+1]/(tprime+fabs(tmin)); + sigTTlo = p1TT[Q2count] +p2TT[Q2count]/(tprime+fabs(tmin)); + sigLThi = p1LT[Q2count+1]+p2LT[Q2count+1]/(tprime+fabs(tmin)); + sigLTlo = p1LT[Q2count] +p2LT[Q2count]/(tprime+fabs(tmin)); + } else { + // + ///*--------------------------------------------------*/ + // u-channel + // christian weiss recommends the following change for u-channel: + // switch u-slope for t-slope, then divide by 10, since back angle peak + // is ~10% of forward angle peak (at least for omega electroproduction) - ///*--------------------------------------------------*/ - // t-channel - if ( thetacm > pi/2.) { + sigThi = (p1T[Q2count+1]+p2T[Q2count+1]/(uprime+fabs(tmin)))/10.; + sigTlo = (p1T[Q2count] +p2T[Q2count]/(uprime+fabs(tmin)))/10.; + sigLhi = p1L[Q2count+1]/10.; + sigLlo = p1L[Q2count]/10.; + sigTThi = (p1TT[Q2count+1]+p2TT[Q2count+1]/(uprime+fabs(tmin)))/10.; + sigTTlo = (p1TT[Q2count] +p2TT[Q2count]/(uprime+fabs(tmin)))/10.; + sigLThi = (p1LT[Q2count+1]+p2LT[Q2count+1]/(uprime+fabs(tmin)))/10.; + sigLTlo = (p1LT[Q2count] +p2LT[Q2count]/(uprime+fabs(tmin)))/10.; - sigThi = p1T[Q2count+1] + p2T[Q2count+1]/(tprime+fabs(tmin)); - sigTlo = p1T[Q2count] + p2T[Q2count]/(tprime+fabs(tmin)); - sigLhi = p1L[Q2count+1]; - sigLlo = p1L[Q2count]; + } - sigTThi = p1TT[Q2count+1]+p2TT[Q2count+1]/(tprime+fabs(tmin)); - sigTTlo = p1TT[Q2count] +p2TT[Q2count]/(tprime+fabs(tmin)); - sigLThi = p1LT[Q2count+1]+p2LT[Q2count+1]/(tprime+fabs(tmin)); - sigLTlo = p1LT[Q2count] +p2LT[Q2count]/(tprime+fabs(tmin)); + double Wfac_hi = pow(pow(Whi, 2) - pow(m_p, 2), 2) / pow( pow(W_gev,2)- pow(m_p, 2), 2); + double Wfac_lo = pow(pow(Wlo, 2) - pow(m_p, 2), 2) / pow( pow(W_gev,2)- pow(m_p, 2), 2); - } else { -// - ///*--------------------------------------------------*/ - // u-channel -// christian weiss recommends the following change for u-channel: -// switch u-slope for t-slope, then divide by 10, since back angle peak -// is ~10% of forward angle peak (at least for omega electroproduction) - - sigThi = (p1T[Q2count+1]+p2T[Q2count+1]/(uprime+fabs(tmin)))/10.; - sigTlo = (p1T[Q2count] +p2T[Q2count]/(uprime+fabs(tmin)))/10. ; - sigLhi = p1L[Q2count+1]/10.; - sigLlo = p1L[Q2count]/10.; - sigTThi = (p1TT[Q2count+1]+p2TT[Q2count+1]/(uprime+fabs(tmin)))/10.; - sigTTlo = (p1TT[Q2count] +p2TT[Q2count]/(uprime+fabs(tmin)))/10.; - sigLThi = (p1LT[Q2count+1]+p2LT[Q2count+1]/(uprime+fabs(tmin)))/10.; - sigLTlo = (p1LT[Q2count] +p2LT[Q2count]/(uprime+fabs(tmin)))/10.; + double sigThiW = sigThi*Wfac_hi; - } + if (sigThiW <0) { + // cout << pizero: sigThiW<0 ',sigThiW,uprime, abs(tmin) + sigThiW=0.; + } -// double Wfac_hi= ((Whi**2 - m_p**2)**2) / ((W_gev**2-m_p**2)**2); -// double Wfac_lo= ((Wlo**2 - m_p**2)**2) / ((W_gev**2-m_p**2)**2); + double sigTloW = sigTlo*Wfac_lo; - double Wfac_hi = pow(pow(Whi, 2) - pow(m_p, 2), 2) / pow( pow(W_gev,2)- pow(m_p, 2), 2); - double Wfac_lo = pow(pow(Wlo, 2) - pow(m_p, 2), 2) / pow( pow(W_gev,2)- pow(m_p, 2), 2); + if (sigTloW < 0) { + // write(6,*)' pizero: sigTloW<0 ',sigTloW,uprime,abs(tmin) + sigTloW=0.; + } - double sigThiW = sigThi*Wfac_hi; + double sigLhiW = sigLhi*Wfac_hi; - if (sigThiW <0) { -// cout << pizero: sigThiW<0 ',sigThiW,uprime, abs(tmin) - sigThiW=0.; - } + if (sigLhiW < 0) { + // write(6,*)' pizero: sigLhiW<0 ',sigLhiW,uprime,abs(tmin) + sigLhiW=0.; + } - double sigTloW = sigTlo*Wfac_lo; + double sigLloW = sigLlo*Wfac_lo; - if (sigTloW < 0) { -// write(6,*)' pizero: sigTloW<0 ',sigTloW,uprime,abs(tmin) - sigTloW=0.; - } + if (sigLloW < 0) { + // write(6,*)' pizero: sigLloW<0 ',sigLloW,uprime,abs(tmin) + sigLloW=0.; + } - double sigLhiW = sigLhi*Wfac_hi; + double sigTThiW = sigTThi*Wfac_hi; + double sigTTloW; + double sigLThiW; + double sigLTloW; - if (sigLhiW < 0) { -// write(6,*)' pizero: sigLhiW<0 ',sigLhiW,uprime,abs(tmin) - sigLhiW=0.; - } + double sig, sigL, sigT, sigLT, sigTT; - double sigLloW = sigLlo*Wfac_lo; + if (abs(sigTThiW) < sigThiW) { + sigTThiW=Sign(sigThiW, sigTThiW); + } + sigTTloW = sigTTlo*Wfac_lo; - if (sigLloW < 0) { -// write(6,*)' pizero: sigLloW<0 ',sigLloW,uprime,abs(tmin) - sigLloW=0.; - } + if (abs(sigTTloW) < sigTloW) { + sigTTloW = Sign(sigTloW,sigTTloW); + } + sigLThiW = sigLThi*Wfac_hi; - double sigTThiW = sigTThi*Wfac_hi; - double sigTTloW; - double sigLThiW; - double sigLTloW; + if (abs(sigLThiW) < sigThiW) { + sigLThiW = Sign(sigThiW,sigLThiW); + } + sigLTloW = sigLTlo*Wfac_lo; - double sig, sigL, sigT, sigLT, sigTT; + if (abs(sigLTloW) < sigTloW) { + sigLTloW = Sign(sigTloW,sigLTloW); + } - if (abs(sigTThiW) < sigThiW) { - sigTThiW=Sign(sigThiW, sigTThiW); - } - sigTTloW = sigTTlo*Wfac_lo; + /*--------------------------------------------------*/ - if (abs(sigTTloW) < sigTloW) { - sigTTloW = Sign(sigTloW,sigTTloW); - } - sigLThiW = sigLThi*Wfac_hi; - - if (abs(sigLThiW) < sigThiW) { - sigLThiW = Sign(sigThiW,sigLThiW); - } - sigLTloW = sigLTlo*Wfac_lo; - - if (abs(sigLTloW) < sigTloW) { - sigLTloW = Sign(sigTloW,sigLTloW); - } - - /*--------------------------------------------------*/ - - if( Q2count <= (ndat-2) && Q2tmp >= Q2tab[Q2count] && Q2tmp < Q2tab[Q2count+1] ) { - - sigT = ( sigTloW*(Q2hi-Q2tmp) + sigThiW*(Q2tmp-Q2lo))/delQ2; - sigL = ( sigLloW*(Q2hi-Q2tmp) + sigLhiW*(Q2tmp-Q2lo))/delQ2; - sigTT = (sigTTloW*(Q2hi-Q2tmp) + sigTThiW*(Q2tmp-Q2lo))/delQ2; - sigLT = (sigLTloW*(Q2hi-Q2tmp) + sigLThiW*(Q2tmp-Q2lo))/delQ2; - - } else if (Q2tmp >= Q2tab[ndat-1]) { - - sigT = sigThiW + (sigThiW-sigTloW) /delQ2; - sigL = sigLhiW + (sigLhiW-sigLloW) /delQ2; - sigTT = sigTThiW + (sigTThiW-sigTTloW)/delQ2; - sigLT = sigLThiW + (sigLThiW-sigLTloW)/delQ2; - - } else if (Q2tmp <= Q2tab[1] ) { - - sigT = sigTloW - (sigThiW-sigTloW) /delQ2; - sigL = sigLloW - (sigLhiW-sigLloW) /delQ2; - sigTT = sigTTloW - (sigTThiW-sigTTloW)/delQ2; - sigLT = sigLTloW - (sigLThiW-sigLTloW)/delQ2; - - } else { + if( Q2count <= (ndat-2) && Q2tmp >= Q2tab[Q2count] && Q2tmp < Q2tab[Q2count+1] ) { -// write(6,*)' Q2tmp error ',Q2tmp,Q2count - } -// endif + sigT = ( sigTloW*(Q2hi-Q2tmp) + sigThiW*(Q2tmp-Q2lo))/delQ2; + sigL = ( sigLloW*(Q2hi-Q2tmp) + sigLhiW*(Q2tmp-Q2lo))/delQ2; + sigTT = (sigTTloW*(Q2hi-Q2tmp) + sigTThiW*(Q2tmp-Q2lo))/delQ2; + sigLT = (sigLTloW*(Q2hi-Q2tmp) + sigLThiW*(Q2tmp-Q2lo))/delQ2; + } else if (Q2tmp >= Q2tab[ndat-1]) { - - sig = sigT + eps*sigL +eps*cos(2.*phicm)*sigTT +sqrt(2.*eps*(1.+eps))*cos(phicm)*sigLT; + sigT = sigThiW + (sigThiW-sigTloW)/delQ2; + sigL = sigLhiW + (sigLhiW-sigLloW)/delQ2; + sigTT = sigTThiW + (sigTThiW-sigTTloW)/delQ2; + sigLT = sigLThiW + (sigLThiW-sigLTloW)/delQ2; - double sig_pi0gmh = sig/2./pi*1.e-09; //dsig/dtdphicm in microbarns/MeV^2/rad + } else if (Q2tmp <= Q2tab[1] ) { - return sig_total; -} + sigT = sigTloW - (sigThiW-sigTloW)/delQ2; + sigL = sigLloW - (sigLhiW-sigLloW)/delQ2; + sigTT = sigTTloW - (sigTThiW-sigTTloW)/delQ2; + sigLT = sigLTloW - (sigLThiW-sigLTloW)/delQ2; + + } else { + // write(6,*)' Q2tmp error ',Q2tmp,Q2count + } + // endif + sig = sigT + eps*sigL +eps*cos(2.*phicm)*sigTT +sqrt(2.*eps*(1.+eps))*cos(phicm)*sigLT; + double sig_pi0gmh = sig/2./pi*1.e-09; //dsig/dtdphicm in microbarns/MeV^2/rad + + return sig_total; +} ///*--------------------------------------------------*/ // Pi0 decay subroutine void Pi0_Production::Pi0_decay(TLorentzVector pi0_vec) { -// TH1D *h1 = new TH1D("h1", "h1", 100, -100, 100); -// TH1D *h2 = new TH1D("h2", "h2", 100, -100, 100); -// TH1D *h3 = new TH1D("h3", "h3", 100, -100, 100); + TVector3 beta_col_rf_pi0; -// TH2D *photon_2d = new TH2D("photon_2d", "photon_2d", 600, -30, 30, 600, -30, 30); + beta_col_rf_pi0 = pi0_vec.BoostVector(); - TVector3 beta_col_rf_pi0; + Double_t fGamma_Col_pi0_RF = 1.0/sqrt( 1 - pow( beta_col_rf_pi0.Mag() , 2 ) ); - beta_col_rf_pi0 = pi0_vec.BoostVector(); - - Double_t fGamma_Col_pi0_RF = 1.0/sqrt( 1 - pow( beta_col_rf_pi0.Mag() , 2 ) ); + TLorentzVector l_photon_1_rf; + TLorentzVector l_photon_2_rf; - TLorentzVector l_photon_1_rf; - TLorentzVector l_photon_2_rf; + // TLorentzVector pi0_vec; + TLorentzVector pi0_vec_rf; + TLorentzVector pi0_vec_rf_g; -// TLorentzVector pi0_vec; - TLorentzVector pi0_vec_rf; - TLorentzVector pi0_vec_rf_g; + pi0_vec_rf = pi0_vec; - pi0_vec_rf = pi0_vec; - - pi0_vec_rf.Boost(-beta_col_rf_pi0); - pi0_vec_rf_g = pi0_vec_rf * fm; - - double photon_1_E = pi0_vec_rf_g.E()/2; - double photon_2_E = pi0_vec_rf_g.E()/2; - -// double photon_1_theta = rRand->Uniform( 0, 2.0 * fPi ); -// double photon_1_phi = rRand->Uniform( 0 , 2.0 * fPi ); - -// for (int i =0; i<=100000; i++) { - -// double photon_1_theta = fPi/4; - -// double photon_1_theta = fPi/1000 *i; -// double photon_1_phi = fPi/2; - -// double photon_1_theta = rRand->Uniform( 0, fPi ); -// double photon_1_phi = rRand->Uniform( 0, 2.0 * fPi); - - double photon_1_theta = fRandom->Uniform( 0, fPi ); - double photon_1_phi = fRandom->Uniform( 0, 2.0 * fPi); - - double photon_1_Mom_Col = photon_1_E; - double photon_1_MomZ_Col = ( photon_1_Mom_Col * cos(photon_1_theta) ); - double photon_1_MomX_Col = ( photon_1_Mom_Col * sin(photon_1_theta) * cos(photon_1_phi) ); - double photon_1_MomY_Col = ( photon_1_Mom_Col * sin(photon_1_theta) * sin(photon_1_phi) ); - - l_photon_1_rf.SetPxPyPzE( photon_1_MomX_Col, photon_1_MomY_Col, photon_1_MomZ_Col, photon_1_E ); - -// photon_2_theta = photon_1_theta - fPi; -// photon_2_phi = photon_1_phi - fPi; - - l_photon_2_rf.SetPxPyPzE( -photon_1_MomX_Col, -photon_1_MomY_Col, -photon_1_MomZ_Col, photon_1_E ); - - l_photon_1 = l_photon_1_rf; - l_photon_2 = l_photon_2_rf; - - // TVector3 beta_col_rf_pi0; - // beta_col_rf_pi0 = pi0_vec.BoostVector(); + pi0_vec_rf.Boost(-beta_col_rf_pi0); + pi0_vec_rf_g = pi0_vec_rf * fm; - TVector3 beta_col_rf_pi0_inverse = -pi0_vec.BoostVector(); + double photon_1_E = pi0_vec_rf_g.E()/2; + double photon_2_E = pi0_vec_rf_g.E()/2; - l_photon_1.Boost(beta_col_rf_pi0); - l_photon_2.Boost(beta_col_rf_pi0); + double photon_1_theta = fRandom->Uniform( 0, fPi ); + double photon_1_phi = fRandom->Uniform( 0, 2.0 * fPi); -// cout << "/*--------------------------------------------------*/" << endl; -// cout << "pi0 decay" << endl; -// cout << "pi0 decay" -// cout << "gamma " << fGamma_Col_pi0_RF << " " << pi0_vec.Gamma() << endl; -// cout << "beta " << pi0_vec.Beta()<< endl; -// cout << "pion energy: " << pi0_vec.E() * fm << " " << pi0_vec.P() * fm << " " << l_photon_1_rf.E() << " " << pi0_vec_rf_g.E() << endl; -// cout << "Photon energy 1: " << l_photon_1_rf.E() << " P: " << l_photon_1_rf.P() << " After transformation " << l_photon_1.E() << " " << l_photon_1.P() << endl; -// cout << "Photon energy 2: " << l_photon_2_rf.E() << " P: " << l_photon_2_rf.P() << " After transformation " << l_photon_2.E() << " " << l_photon_2.P() << endl; -// cout << "angle: " << l_photon_1_rf.Vect().Angle(l_photon_2_rf.Vect()) * 180.0/fPi -// << " " << l_photon_1.Vect().Angle(l_photon_2.Vect()) * 180.0/fPi << endl; -// exit(0); + double photon_1_Mom_Col = photon_1_E; + double photon_1_MomZ_Col = ( photon_1_Mom_Col * cos(photon_1_theta) ); + double photon_1_MomX_Col = ( photon_1_Mom_Col * sin(photon_1_theta) * cos(photon_1_phi) ); + double photon_1_MomY_Col = ( photon_1_Mom_Col * sin(photon_1_theta) * sin(photon_1_phi) ); - double photons_1_sep = (tan(l_photon_1.Vect().Angle(pi0_vec.Vect())) * 32)*100; - double photons_2_sep = (tan(l_photon_2.Vect().Angle(pi0_vec.Vect())) * 32)*100; + l_photon_1_rf.SetPxPyPzE( photon_1_MomX_Col, photon_1_MomY_Col, photon_1_MomZ_Col, photon_1_E ); - double photons_seperation = photons_1_sep + photons_2_sep; - -// cout << "pi0_vec: " << pi0_vec.Vect().Theta() << " " << pi0_vec.Vect().Theta() << endl; -// cout << "Photon 1: " << l_photon_1.Vect().Theta() << " " << l_photon_1.Vect().Phi() << endl; -// cout << "Photon 2: " << l_photon_2.Vect().Theta() << " " << l_photon_2.Vect().Phi() << endl; -// cout << "photon prjecton at 32 meters: " << sin(l_photon_1.Vect().Angle(pi0_vec.Vect())) * 32 -// << " " << sin(l_photon_2.Vect().Angle(pi0_vec.Vect())) * 32 << " " -// << photons_seperation << endl; -// exit(0); + l_photon_2_rf.SetPxPyPzE( -photon_1_MomX_Col, -photon_1_MomY_Col, -photon_1_MomZ_Col, photon_1_E ); - ///*--------------------------------------------------*/ - /// Max angle formula: sin(theta) = m_pi/(2*E_gamma) - // - // Decay at 7.8m - // 2.6033 ± 0.0005 × 10−8 life time + l_photon_1 = l_photon_1_rf; + l_photon_2 = l_photon_2_rf; - /// ZDC is at 30 down stream - // Pi0 drift is 22.2 meters + TVector3 beta_col_rf_pi0_inverse = -pi0_vec.BoostVector(); - // cout << "Maximum angle: " << pi0_vec_rf_g.E() << " " << pi0_vec.E()*fm << " Angle in deg: " << asin(pi0_vec_rf_g.E()/(pi0_vec.E() * fm)) * 180/fPi << endl; + l_photon_1.Boost(beta_col_rf_pi0); + l_photon_2.Boost(beta_col_rf_pi0); - // 2.6*3 = 7.8m before decay + double photons_1_sep = (tan(l_photon_1.Vect().Angle(pi0_vec.Vect())) * 32)*100; + double photons_2_sep = (tan(l_photon_2.Vect().Angle(pi0_vec.Vect())) * 32)*100; - TLorentzVector photon_1_diff = l_photon_1 - pi0_vec*fm; + double photons_seperation = photons_1_sep + photons_2_sep; -// cout << "aa" << endl; -// cout << pi0_vec.Px() *fm << " " << pi0_vec.Py() *fm<< " " << pi0_vec.Pz() *fm<< " " << pi0_vec.E() *fm<< endl; -// cout << l_photon_1.Px() << " " << l_photon_1.Py() << " " << l_photon_1.Pz() << " " << l_photon_1.E() << endl; -// cout << photon_1_diff.Px() << " " << photon_1_diff.Py() << " " << photon_1_diff.Pz() << " " << photon_1_diff.E() << endl; - + ///*--------------------------------------------------*/ + /// Max angle formula: sin(theta) = m_pi/(2*E_gamma) + // + // Decay at 7.8m + // 2.6033 ± 0.0005 × 10−8 life time - double angle = atan(l_photon_1.Px()/l_photon_1.Py()); + /// ZDC is at 30 down stream + // Pi0 drift is 22.2 meters -// h1->Fill(photons_seperation); -// h2->Fill(photons_1_sep); -// h3->Fill(-photons_2_sep); + // 2.6*3 = 7.8m before decay -// cout << photons_1_sep << " " << l_photon_1.Vect().Phi() << " " << photons_2_sep << endl; + TLorentzVector photon_1_diff = l_photon_1 - pi0_vec*fm; -// photon_2d->Fill(photons_1_sep *sin(l_photon_1.Vect().Angle(pi0_vec.Vect())) * cos(l_photon_1.Vect().Phi()), photons_1_sep* sin(l_photon_1.Vect().Angle(pi0_vec.Vect())) *sin(l_photon_1.Vect().Phi()) ); -// photon_2d->Fill(photons_2_sep *cos(l_photon_2.Vect().Phi()), photons_2_sep*sin(l_photon_2.Vect().Phi())); + double angle = atan(l_photon_1.Px()/l_photon_1.Py()); -//photons_2_sep, l_photon_2.Vect().Phi() - -// cout << l_photon_1.Vect().Phi() << " " << l_photon_2.Vect().Phi() << endl; -// cout <<"check: " << photons_1_sep*sin(angle) << " " << photons_1_sep*cos(angle) << " " << angle << endl; -// photon_2d->Fill(l_photon_1.Vect().Phi(), l_photon_2.Vect().Phi()); -// cout << l_photon_1.Px() << " " << l_photon_1.Py() << endl; -// cout << photon_1.Gamma() << endl; -// cout << l_photon_1.Px()**1.1e-7 << " " << l_photon_1.Py()**1.1e-7 << endl; -// photon_2d->Fill(l_photon_1.Px()/0.134/l_photon_1.Gamma()*1.1e-7, l_photon_1.Py()/0.134/l_photon_1.Gamma()*1.1e-7); -// } - -// TCanvas* c1 = new TCanvas(); -// -// h3->SetFillColor(2); -// h3->SetLineColor(2); -// -// h2->SetFillColor(3); -// h2->SetLineColor(3); -// -// // h1->SetFillColor(4); -// h1->SetLineColor(4); -// -// h1->Draw("hist"); -// h2->Draw("same"); -// h3->Draw("same"); -// -// h1->Draw("same"); -// -// c1->Print("seperation.png"); -// photon_2d->Draw("colz"); -// c1->Print("seperation_aaa.png"); -// cout << "/*--------------------------------------------------*/" << endl; -// exit(0); - } + diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index d5bb93b..2976a83 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -16,6 +16,10 @@ #include "TCanvas.h" +#include "Particle.hxx" +#include "CustomRand.hxx" + + class Reaction{ public: @@ -60,6 +64,7 @@ class DEMP_Reaction { void DEMPReact_HEPMC3_Output(); TRandom2* rRanBd; + TRandom2* rRand; Particle_t recoil_hadron; Particle_t produced_X; @@ -122,6 +127,9 @@ class DEMP_Reaction { TLorentzVector r_lX; TLorentzVector r_lX_g; + Particle* r_lX_solved; + Particle* r_l_scat_hadron_solved; + double fX_Mass; double fX_Mass_GeV; @@ -133,7 +141,7 @@ class DEMP_Reaction { TLorentzVector r_lw; - TLorentzVector lwp; + TLorentzVector lwp; TLorentzVector fsini; TLorentzVector fsfin; @@ -170,7 +178,9 @@ class DEMP_Reaction { TLorentzVector lt; TLorentzVector ltg; - + TLorentzVector lu; + TLorentzVector lug; + /////////////////////////////////////////// TVector3 v3Photon; @@ -195,8 +205,53 @@ class DEMP_Reaction { unsigned long long int print_itt; + ///*--------------------------------------------------*/ + // Rory Check algorithm + + // Particle* Pion; + // Particle* Proton_Particle; + + Particle* Interaction; + Particle* Target; + + Particle* Initial; + Particle* Final; + + Particle* VertBeamElec; + Particle* VertScatElec; + Particle* Photon; + + bool SolnCheck(); + double W_in(); + double W_out(); + double W_in_val; + + TRandom3* CoinToss; + CustomRand* AngleGen; + + TF1* F; + TVector3* UnitVect; + + int Solve(); + int Solve(double theta, double phi); + + ///*--------------------------------------------------*/ + // Needed for the Solve function + + double theta; + double phi; + double P; + double P2; + + double tc; + double tc_GeV; + double uc; + double uc_GeV; + ///*--------------------------------------------------*/ + }; + class Pi0_Production:DEMP_Reaction{ public: @@ -215,6 +270,12 @@ class Pi0_Production:DEMP_Reaction{ void Pi0_Decay_Pythia6_Out_Init(); void Pi0_Decay_Pythia6_Output(); + + ///----------------------------------------------------*/ + /// Output algorithm into HEPMC3 format + + void Pi0_HEPMC3_Out_Init(); + void Pi0_HEPMC3_Output(); unsigned long long int print_itt; From 381449e1b9450bf9d3a04c7f0bcda61ac68fcf25 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Tue, 4 Apr 2023 15:00:52 -0600 Subject: [PATCH 21/35] Added a modified version of Love's HEPMC3 converter. Should stay here as a useful tool. --- HEPMC3_Converter.C | 258 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100755 HEPMC3_Converter.C diff --git a/HEPMC3_Converter.C b/HEPMC3_Converter.C new file mode 100755 index 0000000..41a4682 --- /dev/null +++ b/HEPMC3_Converter.C @@ -0,0 +1,258 @@ +// Original file from Love Preet, University of Regina +// This file converts nEvents from an input HEPMC3 file (raw from DEMPGen or afterburned) into an output root tree. +// Modified on - 04/03/23 - by Stephen JD Kay University of Regina + +#define HEPMC3_Converter_cxx + +// Include relevant stuff +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// SJDK - 04/03/23 - Read in a few things as arguments +void HEPMC3_Converter(Int_t nEvents = 0, string InputHEPMC3File = "", string OutputRootFile = "", string FileType = ""){ + + // 04/04/23 - SJDK - Explicitly set batch mode so it doesn't spam stuff to screen + gROOT->SetBatch(kTRUE); + + // SJDK - 04/03/23 - Explicitly require 3 input arguments + if(nEvents == -1){ + cout << "Enter a the number of events to convert: "; + cin >> nEvents; + if( nEvents<=0 ) return; + } + + if(InputHEPMC3File == ""){ + cout << "Enter a HEPMC3 file to convert: "; + cin >> InputHEPMC3File; + } + + if(OutputRootFile == "") { + cout << "Enter a root file to write to: "; + cin >> OutputRootFile; + } + + if(FileType == ""){ + cout << "File type not specified, enter raw or AB. Raw for DEMPGen output, AB for afterburned files." << endl << "Defaulting to raw." << endl; + FileType = "raw"; + } + else if (FileType != "raw" | FileType != "AB"){ + cout << "Invalid file type specified, enter only raw or AB. Defaulting to raw." << endl; + FileType = "raw"; + } + + Int_t nSkip; // SJDK - 04/04/23 - Number of lines to skip, depends upon file type + if (FileType == "raw"){ + nSkip = 2; + } + else if (FileType == "AB"){ + nSkip = 21; + } + + TString TInputHEPMC3File = InputHEPMC3File; + TString TOutputRootFile = OutputRootFile; + + if (gSystem->AccessPathName(TInputHEPMC3File) == kTRUE){ + cerr << "!!!!! ERROR !!!!! " << endl << TInputHEPMC3File << " not found" << endl << "!!!!! ERRROR !!!!!" << endl; + exit; + } + + fstream HEPMC3In; + HEPMC3In.open(TInputHEPMC3File, ios::in); + + //............................................................................................................................................. + // Stored the whole file in a vector + //............................................................................................................................................. + string s; + vector v; + Int_t nLines; + + for (int i = 0; i nEvents_read){ + cerr << "!!!!! ERROR !!!!! " << endl << "Requested to process more events than are actually in the file! Double check and try again!" << endl << "!!!!! ERRROR !!!!!" << endl; + exit; + } + else if (nEvents != nEvents_read){ + cout << endl << "!!!!! NOTICE !!!!!" << endl << "Requested number of events to process is SMALLER than the number of events in the file, this is fine, but re-run if you want all events." << endl; + cout << "There are - " << nEvents_read << " in your input HEPMC3 file" << endl << "!!!!! NOTICE !!!!!" << endl << endl; + } + + //............................................................................................................................................. + // Getting the values from the vector + //............................................................................................................................................. + vector weight; + string w1,w2; // columns in the weight line + double w3,w4; // colums in the weight line + + vector e_px; + vector e_py; + vector e_pz; + vector e_E; + string l_e; // columns in the outgoing electron line + double id_e,vid_e,pdg_e,px_e,py_e,pz_e,en_e,m_e,s_e; // columns in the outgoing electron line + + vector k_px; + vector k_py; + vector k_pz; + vector k_E; + string l_k; // columns in the outgoing kaon line + double id_k,vid_k,pdg_k,px_k,py_k,pz_k,en_k,m_k,s_k; // columns in the outgoing kaon line + + vector l_px; + vector l_py; + vector l_pz; + vector l_E; + string l_l; // columns in the outgoing lambda line + double id_l,vid_l,pdg_l,px_l,py_l,pz_l,en_l,m_l,s_l; // columns in the outgoing lambda line + if(nEvents <= nEvents_read){ // Only process if less than or equal to the # events in the file + for(int i=0; i>w1>>w3>>w2>>w4; + weight.push_back(w4); + + } + + int o_e=(6+(i*9)); // Accessing the outgoing particle(i.e.electron) line from the whole file + + stringstream o_e_l; // Extract the doubles from the vector using stringstream (accessing the outgoing particle line for each event) + + + o_e_l << v[o_e]; // store the vector to string stream + + //cout << o_e_l.str() <>l_e>>id_e>>vid_e>>pdg_e>>px_e>>py_e>>pz_e>>en_e>>m_e>>s_e; + //cout<<" "<>l_k>>id_k>>vid_k>>pdg_k>>px_k>>py_k>>pz_k>>en_k>>m_k>>s_k; + k_px.push_back(px_k); + k_py.push_back(py_k); + k_pz.push_back(pz_k); + k_E.push_back(en_k); + } + //............................................................................................................................................. + int o_l=(8+(i*9)); // Accessing the outgoing particle(i.e.lambda) line from the whole file + + stringstream o_l_l; // Extract the doubles from the vector using stringstream (accessing the outgoing particle line for each event) + + o_l_l << v[o_l]; // store the vector to string stream + + while (! o_l_l.eof()) { + + o_l_l >>l_l>>id_l>>vid_l>>pdg_l>>px_l>>py_l>>pz_l>>en_l>>m_l>>s_l; + l_px.push_back(px_l); + l_py.push_back(py_l); + l_pz.push_back(pz_l); + l_E.push_back(en_l); + } + }//-> End of for loop over the events + + //............................................................................................................................................. + // Storing the weights in Root TTree + //............................................................................................................................................. + + double w_gp,e_px_gp,e_py_gp,e_pz_gp,e_E_gp; + double k_px_gp,k_py_gp,k_pz_gp,k_E_gp; + double l_px_gp,l_py_gp,l_pz_gp,l_E_gp; + + TFile *OutputFile = new TFile(TOutputRootFile,"RECREATE"); + + TTree *tree = new TTree("Truth_Events","Truth_Events"); + + tree->Branch("w_gp", &w_gp); // weights of generated particles + + tree->Branch("e_px_gp", &e_px_gp); // momentum of generated particles (i.e. electrons) + tree->Branch("e_py_gp", &e_py_gp); + tree->Branch("e_pz_gp", &e_pz_gp); + tree->Branch("e_E_gp", &e_E_gp); + + tree->Branch("k_px_gp", &k_px_gp); // momentum of generated particles (i.e. kaons) + tree->Branch("k_py_gp", &k_py_gp); + tree->Branch("k_pz_gp", &k_pz_gp); + tree->Branch("k_E_gp", &k_E_gp); + + tree->Branch("l_px_gp", &l_px_gp); // momentum of generated particles (i.e. lambdas) + tree->Branch("l_py_gp", &l_py_gp); + tree->Branch("l_pz_gp", &l_pz_gp); + tree->Branch("l_E_gp", &l_E_gp); + + + for (int j=0; jFill(); + } + + //OutputFile->Print(); // 04/04/23 - Don't print to screen to prevent spam when running + OutputFile->Write(); + OutputFile->Close(); + + cout << "Created output root file - " << TOutputRootFile << " - sucessfully." < Main void End From 055bd5665123b992a8b91e82f15d21548a50caa8 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Mon, 17 Apr 2023 16:36:38 -0600 Subject: [PATCH 22/35] Some changes from Love to HEPMC3 file converter. Added comment on what to comment/uncomment to switch from analytical to solve in DEMP_Reaction.cc --- HEPMC3_Converter.C | 27 ++++++++------ .../process_routine/DEMP_Reaction.cc | 35 ++++++++++--------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/HEPMC3_Converter.C b/HEPMC3_Converter.C index 41a4682..90b8835 100755 --- a/HEPMC3_Converter.C +++ b/HEPMC3_Converter.C @@ -19,7 +19,7 @@ #include // SJDK - 04/03/23 - Read in a few things as arguments -void HEPMC3_Converter(Int_t nEvents = 0, string InputHEPMC3File = "", string OutputRootFile = "", string FileType = ""){ +void HEPMC3_Converter(Long_t nEvents = -1, string InputHEPMC3File = "", string OutputRootFile = "", string FileType = ""){ // 04/04/23 - SJDK - Explicitly set batch mode so it doesn't spam stuff to screen gROOT->SetBatch(kTRUE); @@ -40,17 +40,16 @@ void HEPMC3_Converter(Int_t nEvents = 0, string InputHEPMC3File = "", string Out cout << "Enter a root file to write to: "; cin >> OutputRootFile; } - if(FileType == ""){ cout << "File type not specified, enter raw or AB. Raw for DEMPGen output, AB for afterburned files." << endl << "Defaulting to raw." << endl; FileType = "raw"; } - else if (FileType != "raw" | FileType != "AB"){ + else if (FileType != "raw" && FileType != "AB"){ cout << "Invalid file type specified, enter only raw or AB. Defaulting to raw." << endl; FileType = "raw"; } - - Int_t nSkip; // SJDK - 04/04/23 - Number of lines to skip, depends upon file type + + Long_t nSkip; // SJDK - 04/04/23 - Number of lines to skip, depends upon file type if (FileType == "raw"){ nSkip = 2; } @@ -74,9 +73,10 @@ void HEPMC3_Converter(Int_t nEvents = 0, string InputHEPMC3File = "", string Out //............................................................................................................................................. string s; vector v; - Int_t nLines; - - for (int i = 0; i nEvents_read){ - cerr << "!!!!! ERROR !!!!! " << endl << "Requested to process more events than are actually in the file! Double check and try again!" << endl << "!!!!! ERRROR !!!!!" << endl; + cerr << "!!!!! ERROR !!!!! " << endl << "Requested to process more events - ("<< nEvents << ") than are actually in the file - (" << nEvents_read << ")" << endl << "Double check and try again!" << endl << "!!!!! ERRROR !!!!!" << endl; exit; } else if (nEvents != nEvents_read){ diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 6700aa5..37ac709 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -282,15 +282,17 @@ void DEMP_Reaction::Processing_Event() { w_ev++; return; } - + + // SJDK - 17/04/23 - To use the solve function, comment out lines 301-351, uncomment lines 293-295 and 357-358 + ///*--------------------------------------------------*/ /// Modifier: Ishan Goel /// Date: March 22, 2023 /// This Solve function is the same as the one implemented in the SoLID generator part // Removing cases with no solution - if(!Solve()){ - return; - } + // if(!Solve()){ + // return; + // } // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts @@ -337,23 +339,23 @@ void DEMP_Reaction::Processing_Event() { /// And obtain recoiled proton in collider (lab) frame ///--------------------------------------------------------- - // r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), - // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), - // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), - // fepi1 ); - // - // r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), - // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), - // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), - // sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + - // pow( f_Scat_Hadron_Mass , 2) ) ); + r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), + ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), + ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), + fepi1 ); + + r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), + ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), + ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), + sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + + pow( f_Scat_hadron_Mass , 2) ) ); ///-------------------------------------------------- /// Output with the Solve Function /// Setting the solution values to X and recoiled hadron - r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); - r_l_scat_hadron.SetPxPyPzE(r_l_scat_hadron_solved->Px(), r_l_scat_hadron_solved->Py(), r_l_scat_hadron_solved->Pz(), r_l_scat_hadron_solved->E()); + // r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); + // r_l_scat_hadron.SetPxPyPzE(r_l_scat_hadron_solved->Px(), r_l_scat_hadron_solved->Py(), r_l_scat_hadron_solved->Pz(), r_l_scat_hadron_solved->E()); ///-------------------------------------------------- @@ -441,7 +443,6 @@ void DEMP_Reaction::Processing_Event() { // Transformation of e', pi- and recoil proton to target's rest frmae without energy loss // //////////////////////////////////////////////////////////////////////////////////////////// - // ----------------------------------------------------------------------------------------- // Calculate -t // ----------------------------------------------------------------------------------------- From 7710444dfcb5244903d7a53ba0f6b25f84cd4741 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Tue, 18 Apr 2023 12:20:32 -0600 Subject: [PATCH 23/35] Removed some outdated comments. Clarified what to comment/uncomment to switch between analytical and solve fn --- .../process_routine/DEMP_Reaction.cc | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 37ac709..0804165 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -255,8 +255,6 @@ void DEMP_Reaction::Processing_Event() { r_lphotong = r_lelectrong - r_lscatelecg; fQsq_GeV = -1.* r_lphotong.Mag2(); - // SJDK 31/01/23 - Again, should this be a user defined/set range? - // SJDK 30/01/23 - Changed Qsq range to match new validity range from Love's paramaterisation // SJDK 03/04/23 - Qsq an W ranges now variables set by particle type in .json read in. See eic.cc if ( fQsq_GeV < fQsq_Min || fQsq_GeV > fQsq_Max ) { qsq_ev++; @@ -277,22 +275,21 @@ void DEMP_Reaction::Processing_Event() { return; } - //if ( fW_GeV < 3.0 || fW_GeV > 10.6 ) { // SJDK 31/01/23 - Previous range utilised - K+ was 2-10 if ( fW_GeV < fW_Min || fW_GeV > fW_Max ) { // SJDK 03/04/23 - Switched to the new variable, set by particle type w_ev++; return; } - // SJDK - 17/04/23 - To use the solve function, comment out lines 301-351, uncomment lines 293-295 and 357-358 + // SJDK - 17/04/23 - To use the solve function, comment out lines 298-349, uncomment lines 290-292 and 354-355 ///*--------------------------------------------------*/ /// Modifier: Ishan Goel /// Date: March 22, 2023 /// This Solve function is the same as the one implemented in the SoLID generator part // Removing cases with no solution - // if(!Solve()){ - // return; - // } + // if(!Solve()){ + // return; + // } // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts @@ -311,13 +308,13 @@ void DEMP_Reaction::Processing_Event() { double fc = r_lphoton.E() + fProton_Mass; fa = ( fa - std::abs( (r_lproton.Vect()).Mag() ) * ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fupx ) + - ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fupy ) + - ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fupz ) ) ); + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fupy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fupz ) ) ); double factor = ( pow( (r_lproton.Vect()).Mag() , 2 ) + 2.0 * (r_lphoton.Vect()).Mag() * (r_lproton.Vect()).Mag() * - ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fuqx ) + - ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fuqy ) + - ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fuqz ) ) ); + ( ( ( r_lproton.X() / (r_lproton.Vect()).Mag() ) * fuqx ) + + ( ( r_lproton.Y() / (r_lproton.Vect()).Mag() ) * fuqy ) + + ( ( r_lproton.Z() / (r_lproton.Vect()).Mag() ) * fuqz ) ) ); fb = fb + factor; fc = r_lphoton.E() + r_lproton.E(); @@ -362,7 +359,6 @@ void DEMP_Reaction::Processing_Event() { r_lX_g = r_lX * fm; r_l_scat_hadron_g = r_l_scat_hadron * fm; - // ---------------------------------------------------------------------------------------------- // Calculate w = (proton + photon)^2 // ---------------------------------------------------------------------------------------------- From 407a637ffb53e439c95795432174ef0a44333266 Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Wed, 19 Apr 2023 17:05:00 -0600 Subject: [PATCH 24/35] Corrected Solve fn init. Used pion angles (which are not set) rather than the EjectileX angles now used --- src/eic_evgen/process_routine/DEMP_Reaction.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 0804165..175bb6c 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -175,9 +175,8 @@ void DEMP_Reaction::Init() { char AngleGenName[100] = "AngleGen"; double dummy[2] = {0,1}; - double ThetaRange[2] = {obj["prod_pion_thetamin"].asDouble()*TMath::DegToRad(), - obj["prod_pion_thetamax"].asDouble()*TMath::DegToRad()}; - + // Changed the theta range here to match the one actually provided in the input .json file, these are already converted to radians in eic.cc (see ~ line 293) + double ThetaRange[2] = {fX_Theta_I, fX_Theta_F}; double PhiRange[2] = {0, 360*TMath::DegToRad()}; AngleGen = new CustomRand(AngleGenName, dummy, ThetaRange, PhiRange); From 55dceaac0909d3ff22184f41904cf07c9284cf2b Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Thu, 18 May 2023 07:54:13 -0600 Subject: [PATCH 25/35] Merged in Love's changes to DEMP_Reaction routine. Solve fn now changed and now uses correct recoil mass in ft calculation. Solve fn needs splitting out and need to rename with discussed conventions --- src/eic_evgen/eic_pim.cc | 37 ++++++--- .../process_routine/DEMP_Reaction.cc | 79 +++++++++---------- src/eic_evgen/reaction_routine.h | 1 - 3 files changed, 67 insertions(+), 50 deletions(-) diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index 24a3909..2d4f6a8 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -237,7 +237,7 @@ void pim::Initilize() { kMS = false; // 18/01/23 - The luminosity below is some default assumtpion, more up to date values are set in DEMP prod and depend upon beam energy combinations if they are specified // See slide 11 in https://indico.cern.ch/event/1072579/contributions/4796856/attachments/2456676/4210776/CAP-EIC-June-7-2022-Seryi-r2.pdf for more info -// fLumi = 0.374e33; // Jlab design + //fLumi = 0.374e33; // Jlab design //fLumi = 1e34; // https://eic.jlab.org/wiki/index.php/EIC_luminosity - OUTDATED fLumi = 1e33; // 18/01/23, this seems a better default based upon more up to date info, see link above fuBcm2 = 1.0e-30; @@ -288,7 +288,7 @@ void pim::Initilize() { fOmega_Mass = 782.65; fOmega_Mass_GeV = fOmega_Mass/1000.0; - fDiff = 0.5; + fDiff = 0.00001; // 10/05/23 - Love Preet - Changed from 0.5 // 02/06/21 - SJDK // Set to 0, now set in PiPlusProd.cc fElectron_Kin_Col_GeV = 0; @@ -934,8 +934,8 @@ void pim::Initilize() { fSig_2Phi_Plus_PhiS_Col = 0; // SJDK 08/02/22 - New variables Ali added for conservation law checks conserve = 0; - ene = 0; - mom = 0; + //ene = 0; + //mom = 0; } @@ -962,7 +962,7 @@ double pim::fermiMomentum() { } // SJDK - 08/02/22 - Original version where there is no separate energy difference -int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro) { +/*int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro) { double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); @@ -990,10 +990,10 @@ int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, mom++; } return err; -} + }*/ // SJDK - 08/02/22 - Set the energy tolerance is a parameter that is fed in -int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro, double fDiff_E) { +/*int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro, double fDiff_E) { double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); @@ -1021,11 +1021,30 @@ int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, mom++; } return err; -} + }*/ -///*--------------------------------------------------*/ +//-> 10/05/23 - Love added a slimmed down, simpler to read version of the CheckLaws fn +int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro) { + + double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); + double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); + double py_check =(P_t.Py() + P_E0.Py()) - (P_e.Py()+P_pim.Py()+P_pro.Py()); + double pz_check =(P_t.Pz() + P_E0.Pz()) - (P_e.Pz()+P_pim.Pz()+P_pro.Pz()); + + Int_t err = -1; + if( fabs( energy_check ) < fDiff && + fabs( px_check ) < fDiff && + fabs( py_check ) < fDiff && + fabs( pz_check ) < fDiff){ + conserve++; + err = 1; + } + + return err; + } +///*--------------------------------------------------*/ void pim::setrootfile( string rootFile ){ diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 175bb6c..8dba97e 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -171,8 +171,6 @@ void DEMP_Reaction::Init() { "[6]-sqrt([7]**2+x**2)-sqrt([8]**2+([3]-[0]*x)**2+([4]-[1]*x)**2+([5]-[2]*x)**2)", 0, 12000); - extern Json::Value obj; - char AngleGenName[100] = "AngleGen"; double dummy[2] = {0,1}; // Changed the theta range here to match the one actually provided in the input .json file, these are already converted to radians in eic.cc (see ~ line 293) @@ -279,17 +277,17 @@ void DEMP_Reaction::Processing_Event() { return; } - // SJDK - 17/04/23 - To use the solve function, comment out lines 298-349, uncomment lines 290-292 and 354-355 + // SJDK - 17/04/23 - To use the solve function, comment out lines 295-346, uncomment lines 287-289 and 351-352 ///*--------------------------------------------------*/ /// Modifier: Ishan Goel /// Date: March 22, 2023 /// This Solve function is the same as the one implemented in the SoLID generator part // Removing cases with no solution - // if(!Solve()){ - // return; - // } - + // if(!Solve()){ + // return; + // } + // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- @@ -318,7 +316,7 @@ void DEMP_Reaction::Processing_Event() { fb = fb + factor; fc = r_lphoton.E() + r_lproton.E(); - double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; + double ft = fc * fc - fb + fX_Mass * fX_Mass - f_Scat_hadron_Mass * f_Scat_hadron_Mass; // 15/05/23 - Love - Switched from proton mass to scat hadron mass (should be of the the recoiling hadron) double fQA = 4.0 * ( fa * fa - fc * fc ); double fQB = 4.0 * fc * ft; @@ -390,18 +388,23 @@ void DEMP_Reaction::Processing_Event() { kSConserve = true; } // SJDK 27/01/23 - For Kaon events, 0.5 is too stringent for conservation law check with the current (Ahmed) method to determine meson properties - // Hopefully, Rory's method will be better here and we can utilise the same conservation law check for both particles - if (rParticle == "Pi+" || rParticle == "Pi0"){ - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 0.5) != 1 ){ - fConserve++; - return; - } - else if (rParticle == "K+"){ - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 10) != 1 ){ - fConserve++; - return; - } - } + // if (rParticle == "Pi+" || rParticle == "Pi0"){ + // if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 0.5) != 1 ){ + // fConserve++; + // return; + // } + // else if (rParticle == "K+"){ + // if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 10) != 1 ){ + // fConserve++; + // return; + // } + // } + // } + + // 10/05/23 - Love - Following fixes to calculations above, don't need different checks for different particles, uses new, simpler CheckLaws fn + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron) != 1 ){ + fConserve++; + return; } //////////////////////////////////////////////////////////////////////////////////////////// @@ -441,7 +444,7 @@ void DEMP_Reaction::Processing_Event() { // ----------------------------------------------------------------------------------------- // Calculate -t // ----------------------------------------------------------------------------------------- - + // 18/05/23 - SJDK - Should these be proton mass still or not? fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / (lphoton_rf.E() + fProton_Mass ); fGamma_CM_RF = (lphoton_rf.E() + fProton_Mass) / fW; fX_Energy_CM = (pow(fW, 2) + pow(fX_Mass,2) - pow(f_Scat_hadron_Mass,2) ) / (2.0* fW); @@ -814,7 +817,7 @@ void DEMP_Reaction::Lund_Output() { << setw(16) << r_lX_g.Y() << setw(16) << r_lX_g.Z() << setw(16) << r_lX_g.E() - << setw(16) << fX_Mass_GeV + << setw(16) << r_lX_g.M() //15/05/23 - Love - Was fX_Mass_GeV << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -831,7 +834,7 @@ void DEMP_Reaction::Lund_Output() { << setw(16) << r_lscatelecg.Y() << setw(16) << r_lscatelecg.Z() << setw(16) << r_lscatelecg.E() - << setw(16) << fElectron_Mass_GeV + << setw(16) << r_lscatelecg.M() //15/05/23 - Love- Was fElectron_Mass_GeV << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -848,7 +851,7 @@ void DEMP_Reaction::Lund_Output() { << setw(16) << r_l_scat_hadron_g.Y() << setw(16) << r_l_scat_hadron_g.Z() << setw(16) << r_l_scat_hadron_g.E() - << setw(16) << f_Scat_hadron_Mass_GeV + << setw(16) << r_l_scat_hadron_g.M()// 15/05/23 - Love - Was f_Scat_hadron_Mass_GeV << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -890,7 +893,7 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(14) << r_lelectrong.Y() << setw(14) << r_lelectrong.Z() << setw(14) << r_lelectrong.E() - << setw(14) << fElectron_Mass_GeV + << setw(14) << r_lelectrong.M() // 15/05/23 - Love - Was fElectron_Mass_GeV << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -907,7 +910,7 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(14) << r_lprotong.Y() << setw(14) << r_lprotong.Z() << setw(14) << r_lprotong.E() - << setw(14) << fProton_Mass_GeV + << setw(14) << r_lprotong.M() // 15/05/23 - Love - Was fProton_Mass_GeV << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -946,7 +949,7 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(14) << r_lscatelecg.Y() << setw(14) << r_lscatelecg.Z() << setw(14) << r_lscatelecg.E() - << setw(14) << fElectron_Mass_GeV + << setw(14) << r_lscatelecg.M() // 15/05/23 - Love - Was fElectron_Mass_GeV << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -964,7 +967,7 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(14) << r_l_scat_hadron_g.Y() << setw(14) << r_l_scat_hadron_g.Z() << setw(14) << r_l_scat_hadron_g.E() - << setw(14) << f_Scat_hadron_Mass_GeV + << setw(14) << r_l_scat_hadron_g.M() // 15/05/23 - Love - Was f_Scat_hadron_Mass_GeV << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -982,7 +985,7 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(14) << r_lX_g.Y() << setw(14) << r_lX_g.Z() << setw(14) << r_lX_g.E() - << setw(14) << fX_Mass_GeV + << setw(14) << r_lX_g.M() // 15/05/23 - Love - Was fX_Mass_GeV << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -1016,17 +1019,17 @@ void DEMP_Reaction::DEMPReact_HEPMC3_Output() { // Third line, optional attributes, the weight DEMPOut << "A" << " " << "0" << " " << "weight" << " " << fEventWeight << endl; // Beam particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (4, incoming beam particle) - DEMPOut << "P" << " " << "1" << " " << "0" << " " << "11" << " " << r_lelectrong.X() << " " << r_lelectrong.Y() << " " << r_lelectrong.Z() << " " << r_lelectrong.E() << " " << fElectron_Mass_GeV << " " << "4" << endl; - DEMPOut << "P" << " " << "2" << " " << "0" << " " << "2212" << " " << r_lprotong.X() << " " << r_lprotong.Y() << " " << r_lprotong.Z() << " " << r_lprotong.E() << " " << fProton_Mass_GeV << " " << "4" << endl; + DEMPOut << "P" << " " << "1" << " " << "0" << " " << "11" << " " << r_lelectrong.X() << " " << r_lelectrong.Y() << " " << r_lelectrong.Z() << " " << r_lelectrong.E() << " " << r_lelectrong.M() << " " << "4" << endl; + DEMPOut << "P" << " " << "2" << " " << "0" << " " << "2212" << " " << r_lprotong.X() << " " << r_lprotong.Y() << " " << r_lprotong.Z() << " " << r_lprotong.E() << " " << r_lprotong.M()<< " " << "4" << endl; // Vertex line - V - 1 - 0 - [1,2] DEMPOut << "V" << " " << "-1" << " " << "0" << " " << "[1,2]" << endl; // Output particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (1, undecayed physical particle) // Scattered electron - DEMPOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << fElectron_Mass_GeV << " " << "1" << endl; + DEMPOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << r_lscatelecg.M() << " " << "1" << endl; // Produced meson - DEMPOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_lX_g.X() << " " << r_lX_g.Y() << " " << r_lX_g.Z() << " " << r_lX_g.E() << " " << fX_Mass_GeV << " " << "1" << endl; + DEMPOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_lX_g.X() << " " << r_lX_g.Y() << " " << r_lX_g.Z() << " " << r_lX_g.E() << " " << r_lX_g.M() << " " << "1" << endl; // Recoil hadron - DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << r_l_scat_hadron_g.X() << " " << r_l_scat_hadron_g.Y() << " " << r_l_scat_hadron_g.Z() << " " << r_l_scat_hadron_g.E() << " " << f_Scat_hadron_Mass_GeV << " " << "1" << endl; + DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << r_l_scat_hadron_g.X() << " " << r_l_scat_hadron_g.Y() << " " << r_l_scat_hadron_g.Z() << " " << r_l_scat_hadron_g.E() << " " << r_l_scat_hadron_g.M() << " " << "1" << endl; } @@ -1094,19 +1097,16 @@ int DEMP_Reaction::Solve() // phi = 3.49651; // cout << " Theta Phi: "<< theta << " " << phi << endl; - // Setting the initial values for solve function VertBeamElec->SetPxPyPzE(r_lelectron.Px(), r_lelectron.Py(), r_lelectron.Pz(), r_lelectron.E()); VertScatElec->SetPxPyPzE(r_lscatelec.Px(), r_lscatelec.Py(), r_lscatelec.Pz(), r_lscatelec.E()); Target->SetPxPyPzE(r_lproton.Px(), r_lproton.Py(), r_lproton.Pz(), r_lproton.E()); - *Photon = *VertBeamElec - *VertScatElec; *Interaction = *Photon; *Initial = *Interaction+*Target; /*--------------------------------------------------*/ - theta = fX_Theta_Col; phi = fX_Phi_Col; @@ -1119,7 +1119,6 @@ int DEMP_Reaction::Solve() int DEMP_Reaction::Solve(double theta, double phi) { - W_in_val = W_in(); if (W_in_val<0){ @@ -1165,11 +1164,11 @@ int DEMP_Reaction::Solve(double theta, double phi) return 1; } } - + ///*--------------------------------------------------*/ /// Modifier: Ishan Goel /// Date: March 22, 2023 - /// Commenting out second solution as it is not giving any solution ever + /// Commenting out second solution as it is not giving any solution ever - MAYBE this works for the kaon and we need it for that? /// Check for Second solution: // P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); ///Try second solution diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index 2976a83..1070a28 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -251,7 +251,6 @@ class DEMP_Reaction { }; - class Pi0_Production:DEMP_Reaction{ public: From 7d88180582e04dbb732758c6cf0119405ce388ab Mon Sep 17 00:00:00 2001 From: Stephen Kay Date: Thu, 18 May 2023 07:57:52 -0600 Subject: [PATCH 26/35] Uncommented ene/mom counters. --- src/eic_evgen/eic_pim.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index 2d4f6a8..c68af00 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -934,8 +934,8 @@ void pim::Initilize() { fSig_2Phi_Plus_PhiS_Col = 0; // SJDK 08/02/22 - New variables Ali added for conservation law checks conserve = 0; - //ene = 0; - //mom = 0; + ene = 0; + mom = 0; } From 3b072e556582a35684430bbf57c5e826aaff4fb8 Mon Sep 17 00:00:00 2001 From: billlee Date: Wed, 24 May 2023 07:11:19 -0400 Subject: [PATCH 27/35] Committing before merging --- Config_EIC.json | 2 +- src/eic_evgen/eic_pim.cc | 33 +- .../process_routine/DEMP_Reaction.cc | 471 +++++------------- src/eic_evgen/process_routine/Pi0_prod.cc | 198 ++++---- src/eic_evgen/reaction_routine.cc | 12 +- src/eic_evgen/reaction_routine.h | 85 ++-- 6 files changed, 314 insertions(+), 487 deletions(-) diff --git a/Config_EIC.json b/Config_EIC.json index 18905a1..05f6f20 100644 --- a/Config_EIC.json +++ b/Config_EIC.json @@ -18,7 +18,7 @@ "file_name" : "DEMPGen_EIC_test", "n_events" : 100000000, - "generator_seed": 1234567, + "generator_seed": 123467, //************************************** /// This section if for EIC simulation only diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index 24a3909..9c8c9b3 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -237,7 +237,7 @@ void pim::Initilize() { kMS = false; // 18/01/23 - The luminosity below is some default assumtpion, more up to date values are set in DEMP prod and depend upon beam energy combinations if they are specified // See slide 11 in https://indico.cern.ch/event/1072579/contributions/4796856/attachments/2456676/4210776/CAP-EIC-June-7-2022-Seryi-r2.pdf for more info -// fLumi = 0.374e33; // Jlab design + // fLumi = 0.374e33; // Jlab design //fLumi = 1e34; // https://eic.jlab.org/wiki/index.php/EIC_luminosity - OUTDATED fLumi = 1e33; // 18/01/23, this seems a better default based upon more up to date info, see link above fuBcm2 = 1.0e-30; @@ -288,7 +288,7 @@ void pim::Initilize() { fOmega_Mass = 782.65; fOmega_Mass_GeV = fOmega_Mass/1000.0; - fDiff = 0.5; + fDiff = 0.00001; // 10/05/23 - Love Preet - Changed from 0.5 // 02/06/21 - SJDK // Set to 0, now set in PiPlusProd.cc fElectron_Kin_Col_GeV = 0; @@ -962,7 +962,7 @@ double pim::fermiMomentum() { } // SJDK - 08/02/22 - Original version where there is no separate energy difference -int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro) { +/*int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro) { double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); @@ -990,10 +990,10 @@ int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, mom++; } return err; -} +}*/ // SJDK - 08/02/22 - Set the energy tolerance is a parameter that is fed in -int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro, double fDiff_E) { +/*int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro, double fDiff_E) { double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); @@ -1021,11 +1021,30 @@ int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, mom++; } return err; -} +}*/ -///*--------------------------------------------------*/ +//-> 10/05/23 - Love added a slimmed down, simpler to read version of the CheckLaws fn +int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro) { + double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); + double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); + double py_check =(P_t.Py() + P_E0.Py()) - (P_e.Py()+P_pim.Py()+P_pro.Py()); + double pz_check =(P_t.Pz() + P_E0.Pz()) - (P_e.Pz()+P_pim.Pz()+P_pro.Pz()); + + Int_t err = -1; + if( fabs( energy_check ) < fDiff && + fabs( px_check ) < fDiff && + fabs( py_check ) < fDiff && + fabs( pz_check ) < fDiff){ + conserve++; + err = 1; + } + + return err; + } + +///*--------------------------------------------------*/ void pim::setrootfile( string rootFile ){ diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 0804165..01e25dd 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -14,8 +14,8 @@ DEMP_Reaction::DEMP_Reaction() { DEMP_Reaction::DEMP_Reaction(TString particle_str, TString hadron_str) { - rParticle = particle_str; - rHadron = hadron_str; + rEjectile = particle_str; + rRecoil = hadron_str; } @@ -56,7 +56,7 @@ void DEMP_Reaction::Init() { pd = dynamic_cast(myPim); - rParticle_charge = ExtractCharge(rParticle); + rEjectile_charge = ExtractCharge(rEjectile); sTFile = Form("./LundFiles/eic_%s.txt", gfile_name.Data()); sLFile= Form("./LundFiles/eic_input_%s.dat", gfile_name.Data()); @@ -95,46 +95,46 @@ void DEMP_Reaction::Init() { ///*--------------------------------------------------*/ /// Getting the particle mass from the data base - produced_X = ParticleEnum(rParticle); - fX_Mass = ParticleMass(produced_X)*1000; //MeV - fX_Mass_GeV = fX_Mass/1000; //GeV + produced_X = ParticleEnum(rEjectile); + f_Ejectile_Mass = ParticleMass(produced_X)*1000; //MeV + f_Ejectile_Mass_GeV = f_Ejectile_Mass/1000; //GeV - cout << rParticle << " " << produced_X << " " << fX_Mass_GeV << endl; - cout << rParticle_charge << endl; + cout << rEjectile << " " << produced_X << " " << f_Ejectile_Mass_GeV << endl; + cout << rEjectile_charge << endl; - if (rHadron == "Neutron" ) { - rParticle_scat_hadron = "Neutron"; + if (rRecoil == "Neutron" ) { + rEjectile_scat_hadron = "Neutron"; recoil_hadron = Neutron; - f_Scat_hadron_Mass = fNeutron_Mass; - f_Scat_hadron_Mass_GeV = f_Scat_hadron_Mass/1000; + f_Recoil_Mass = fNeutron_Mass; + f_Recoil_Mass_GeV = f_Recoil_Mass/1000; } - else if (rHadron == "Proton" ) { - rParticle_scat_hadron = "Proton"; + else if (rRecoil == "Proton" ) { + rEjectile_scat_hadron = "Proton"; recoil_hadron = Proton; - f_Scat_hadron_Mass = fProton_Mass; - f_Scat_hadron_Mass_GeV = f_Scat_hadron_Mass/1000; + f_Recoil_Mass = fProton_Mass; + f_Recoil_Mass_GeV = f_Recoil_Mass/1000; } - else if(rHadron == "Lambda"){ - rParticle_scat_hadron = "Lambda"; + else if(rRecoil == "Lambda"){ + rEjectile_scat_hadron = "Lambda"; recoil_hadron = Lambda; - f_Scat_hadron_Mass = fLambda_Mass; - f_Scat_hadron_Mass_GeV = f_Scat_hadron_Mass/1000; - cout<<"Particle = "<Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); - fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); + f_Ejectile_Theta_Col = acos( fRandom->Uniform( cos(f_Ejectile_Theta_I), cos(f_Ejectile_Theta_F ) ) ); + f_Ejectile_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); // --------------------------------------------------------------------- // Specify the energy and solid angle of scatterd electron in Collider (lab) frame @@ -280,24 +242,14 @@ void DEMP_Reaction::Processing_Event() { return; } - // SJDK - 17/04/23 - To use the solve function, comment out lines 298-349, uncomment lines 290-292 and 354-355 - - ///*--------------------------------------------------*/ - /// Modifier: Ishan Goel - /// Date: March 22, 2023 - /// This Solve function is the same as the one implemented in the SoLID generator part - // Removing cases with no solution - // if(!Solve()){ - // return; - // } // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- - double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); - double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); - double fupz = cos( fX_Theta_Col ); + double fupx = sin( f_Ejectile_Theta_Col ) * cos( f_Ejectile_Phi_Col ); + double fupy = sin( f_Ejectile_Theta_Col ) * sin( f_Ejectile_Phi_Col ); + double fupz = cos( f_Ejectile_Theta_Col ); double fuqx = sin( r_lphoton.Theta() ) * cos( r_lphoton.Phi() ); double fuqy = sin( r_lphoton.Theta() ) * sin( r_lphoton.Phi() ); @@ -319,12 +271,13 @@ void DEMP_Reaction::Processing_Event() { fb = fb + factor; fc = r_lphoton.E() + r_lproton.E(); - double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; +// double ft = fc * fc - fb + f_Ejectile_Mass * f_Ejectile_Mass - fProton_Mass * fProton_Mass; + double ft = fc * fc - fb + f_Ejectile_Mass * f_Ejectile_Mass - f_Recoil_Mass * f_Recoil_Mass; double fQA = 4.0 * ( fa * fa - fc * fc ); double fQB = 4.0 * fc * ft; - double fQC = -4.0 * fa * fa * fX_Mass * fX_Mass - ft * ft; + double fQC = -4.0 * fa * fa * f_Ejectile_Mass * f_Ejectile_Mass - ft * ft; fradical = fQB * fQB - 4.0 * fQA * fQC; @@ -336,28 +289,21 @@ void DEMP_Reaction::Processing_Event() { /// And obtain recoiled proton in collider (lab) frame ///--------------------------------------------------------- - r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), - ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), + r_l_Ejectile.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(f_Ejectile_Mass , 2) ) ) * sin(f_Ejectile_Theta_Col) * cos(f_Ejectile_Phi_Col), + ( sqrt( pow( fepi1 , 2) - pow(f_Ejectile_Mass , 2) ) ) * sin(f_Ejectile_Theta_Col) * sin(f_Ejectile_Phi_Col), + ( sqrt( pow( fepi1 , 2) - pow(f_Ejectile_Mass , 2) ) ) * cos(f_Ejectile_Theta_Col), fepi1 ); - r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), - ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), - sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + - pow( f_Scat_hadron_Mass , 2) ) ); - - ///-------------------------------------------------- - /// Output with the Solve Function - /// Setting the solution values to X and recoiled hadron - - // r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); - // r_l_scat_hadron.SetPxPyPzE(r_l_scat_hadron_solved->Px(), r_l_scat_hadron_solved->Py(), r_l_scat_hadron_solved->Pz(), r_l_scat_hadron_solved->E()); + l_Recoil.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_l_Ejectile).X(), + ( r_lproton + r_lelectron - r_lscatelec - r_l_Ejectile ).Y(), + ( r_lproton + r_lelectron - r_lscatelec - r_l_Ejectile ).Z(), + sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_l_Ejectile ).Vect() ).Mag()),2) + + pow( f_Recoil_Mass , 2) ) ); ///-------------------------------------------------- - r_lX_g = r_lX * fm; - r_l_scat_hadron_g = r_l_scat_hadron * fm; + r_l_Ejectile_g = r_l_Ejectile * fm; + l_Recoil_g = l_Recoil * fm; // ---------------------------------------------------------------------------------------------- // Calculate w = (proton + photon)^2 @@ -370,11 +316,11 @@ void DEMP_Reaction::Processing_Event() { // Calculate w prime w' = (proton + photon - pion)^2 // ---------------------------------------------------------------------------------------------- - lwp = r_lprotong + r_lphotong - r_lX_g; + lwp = r_lprotong + r_lphotong - r_l_Ejectile_g; fW_Prime_GeV = lwp.Mag(); fsini = r_lelectron + r_lproton; - fsfin = r_lscatelec + r_lX + r_l_scat_hadron; + fsfin = r_lscatelec + r_l_Ejectile + l_Recoil; fsinig = fsini * fm; fsfing = fsfin * fm; @@ -382,7 +328,7 @@ void DEMP_Reaction::Processing_Event() { fMandSConserve = std::abs( fsinig.Mag() - fsfing.Mag() ); // SJDK 15/06/21 - Added integer counters for conservation law check and for NaN check - if (r_lX.E() != r_lX.E()){ // SJDK 15/06/21 - If the energy of the produced meson is not a number, return and add to counter + if (r_l_Ejectile.E() != r_l_Ejectile.E()){ // SJDK 15/06/21 - If the energy of the produced meson is not a number, return and add to counter fNaN++; return; } @@ -392,18 +338,28 @@ void DEMP_Reaction::Processing_Event() { } // SJDK 27/01/23 - For Kaon events, 0.5 is too stringent for conservation law check with the current (Ahmed) method to determine meson properties // Hopefully, Rory's method will be better here and we can utilise the same conservation law check for both particles - if (rParticle == "Pi+" || rParticle == "Pi0"){ - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 0.5) != 1 ){ - fConserve++; - return; - } - else if (rParticle == "K+"){ - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron, 10) != 1 ){ - fConserve++; - return; - } - } - } +// if (rEjectile == "Pi+" || rEjectile == "Pi0"){ +// if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_l_Ejectile, l_Recoil, 0.5) != 1 ){ +// fConserve++; +// return; +// } +// else if (rEjectile == "K+"){ +// if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_l_Ejectile, l_Recoil, 10) != 1 ){ +// fConserve++; +// return; +// } +// } +// } + + // 10/05/23 - Love - Following fixes to calculations above, don't need different checks for different particles, uses new, simpler CheckLaws fn + + if( pd->CheckLaws(r_lelectron, r_lproton, r_lscatelec, r_l_Ejectile, l_Recoil) !=1 ){ + fConserve++; + return; + } + + + //////////////////////////////////////////////////////////////////////////////////////////// // Start // @@ -426,11 +382,11 @@ void DEMP_Reaction::Processing_Event() { lphoton_rf.Boost(-beta_col_rf); lphoton_rfg = lphoton_rf * fm; - lX_rf = r_lX; - lX_rf.Boost(-beta_col_rf); - lX_rfg = lX_rf * fm; + l_Ejectile_rf = r_l_Ejectile; + l_Ejectile_rf.Boost(-beta_col_rf); + l_Ejectile_rfg = l_Ejectile_rf * fm; - l_scat_hadron_rf = r_l_scat_hadron; + l_scat_hadron_rf = l_Recoil; l_scat_hadron_rf.Boost(-beta_col_rf); l_scat_hadron_rf_g = l_scat_hadron_rf * fm; @@ -442,19 +398,20 @@ void DEMP_Reaction::Processing_Event() { // ----------------------------------------------------------------------------------------- // Calculate -t // ----------------------------------------------------------------------------------------- - + // 18/05/23 - SJDK - Should these be proton mass still or not? + fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / (lphoton_rf.E() + fProton_Mass ); fGamma_CM_RF = (lphoton_rf.E() + fProton_Mass) / fW; - fX_Energy_CM = (pow(fW, 2) + pow(fX_Mass,2) - pow(f_Scat_hadron_Mass,2) ) / (2.0* fW); - fX_Mom_CM = sqrt(pow(fX_Energy_CM,2) - pow(fX_Mass,2)); - fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; - fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; + f_Ejectile_Energy_CM = (pow(fW, 2) + pow(f_Ejectile_Mass,2) - pow(f_Recoil_Mass,2) ) / (2.0* fW); + f_Ejectile_Mom_CM = sqrt(pow(f_Ejectile_Energy_CM,2) - pow(f_Ejectile_Mass,2)); + f_Ejectile_Energy_CM_GeV = f_Ejectile_Energy_CM / 1000.0; + f_Ejectile_Mom_CM_GeV = f_Ejectile_Mom_CM / 1000.0; // this equation is valid for parallel kinematics only! - fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_lX.Vect()).Mag()),2) - pow((r_lphoton.E() - r_lX.E()),2)); + fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_l_Ejectile.Vect()).Mag()),2) - pow((r_lphoton.E() - r_l_Ejectile.E()),2)); fT_Para_GeV = fT_Para/1000000.0; - lt = r_lphoton - r_lX; + lt = r_lphoton - r_l_Ejectile; ltg = lt * fm; fT = -1.*lt.Mag2(); @@ -474,22 +431,22 @@ void DEMP_Reaction::Processing_Event() { */ // 31/01/23 SJDK - New limit on t, remove only events outside the parameterisation range, limits depend upon particle typ - if (rParticle == "Pi+" && fT_GeV > 1.3 ) { + if (rEjectile == "Pi+" && fT_GeV > 1.3 ) { t_ev++; return; } - else if (rParticle == "K+" && fT_GeV > 2.0) { + else if (rEjectile == "K+" && fT_GeV > 2.0) { t_ev++; return; } - else if (rParticle == "Pi0+" && fT_GeV > 0.5){ // 03/02/23 - SJDK - Not sure what range is used for pi0, assume < 0.5 for now, would be u in this case anyway? + else if (rEjectile == "Pi0+" && fT_GeV > 0.5){ // 03/02/23 - SJDK - Not sure what range is used for pi0, assume < 0.5 for now, would be u in this case anyway? t_ev++; return; } fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); - fz = r_lX.E()/r_lphoton.E(); + fz = r_l_Ejectile.E()/r_lphoton.E(); // ------------------------------------------------------------------------------------------------------- // Calculation of Phi ( azimuthal angle of pion momentum w.r.t lepton plane in target's rest frame) @@ -504,9 +461,9 @@ void DEMP_Reaction::Processing_Event() { v3Electron.SetY( lelectron_rfg.Y() ); v3Electron.SetZ( lelectron_rfg.Z() ); - v3X.SetX( lX_rfg.X() ) ; - v3X.SetY( lX_rfg.Y() ) ; - v3X.SetZ( lX_rfg.Z() ); + v3X.SetX( l_Ejectile_rfg.X() ) ; + v3X.SetY( l_Ejectile_rfg.Y() ) ; + v3X.SetZ( l_Ejectile_rfg.Z() ); v3S.SetX( -1 ); v3S.SetY( 0 ); @@ -560,21 +517,21 @@ void DEMP_Reaction::Processing_Event() { // ---------------------------------------------------- fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); // Eqn 22 in paper - fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; // Eqn 21 in paper + fA = fJacobian_CM * f_Ejectile_Mom_CM_GeV / fPi; // Eqn 21 in paper // ---------------------------------------------------- // Jacobian dOmega* / dOmega dimensionless // ---------------------------------------------------- - fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / - ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - - ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); // Differs from next line in photon vect -> lphoton_rf vs r_lphoton + fJacobian_CM_RF = ( pow((l_Ejectile_rf.Vect()).Mag(),2)*fW) / + ( f_Ejectile_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (l_Ejectile_rf.Vect()).Mag() - + ( l_Ejectile_rf.E() * (lphoton_rf.Vect()).Mag() * cos( l_Ejectile_rf.Theta() ) ) ) ); // Differs from next line in photon vect -> lphoton_rf vs r_lphoton - fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / // This one is actually used subsequently, so this must be Eqn 20 - ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - - ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); + fJacobian_CM_Col = ( ( pow((r_l_Ejectile.Vect()).Mag(),2) * fW ) / // This one is actually used subsequently, so this must be Eqn 20 + ( f_Ejectile_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_l_Ejectile.Vect()).Mag() - + ( r_l_Ejectile.E() * (r_lphoton.Vect()).Mag() * cos( r_l_Ejectile.Theta() ) ) ) ) ); - // cout << lX_rf.Vect().Mag() << " " << << << << << << << << endl; + // cout << l_Ejectile_rf.Vect().Mag() << " " << << << << << << << << endl; // cout << fJacobian_CM_RF << " " << fJacobian_CM_Col << endl; // ----------------------------------------------------------------------------------------------------------- @@ -736,16 +693,16 @@ Double_t DEMP_Reaction::Get_Total_Cross_Section() { Double_t total_sig, total_sig2; - if (rParticle == "Pi+"){ + if (rEjectile == "Pi+"){ total_sig = GetPiPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon); } - else if (rParticle == "Pi0"){ + else if (rEjectile == "Pi0"){ total_sig = GetPi0_CrossSection(); } - else if (rParticle == "K+"){ - total_sig = GetKPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, rHadron); + else if (rEjectile == "K+"){ + total_sig = GetKPlus_CrossSection(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, rRecoil); // SJDK - 31/01/23 - This second case gets the total cross section for the K+ as calculated from Ali's earlier scaling calculation, retain this for comparison. - //total_sig2 = GetKPlus_CrossSection_Scaling(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, fX_Mass_GeV, rHadron); + //total_sig2 = GetKPlus_CrossSection_Scaling(fT_GeV, fW_GeV, fQsq_GeV, fEpsilon, f_Ejectile_Mass_GeV, rRecoil); } //cout << fT_GeV << " " << fW_GeV << " " << fQsq_GeV << " " << "KPlus Paramterisation - " << total_sig << " !!! Old Scaling method - " << total_sig2 << endl; @@ -811,11 +768,11 @@ void DEMP_Reaction::Lund_Output() { << setw(10) << PDGtype(produced_X) << setw(10) << "0" << setw(10) << "0" - << setw(16) << r_lX_g.X() - << setw(16) << r_lX_g.Y() - << setw(16) << r_lX_g.Z() - << setw(16) << r_lX_g.E() - << setw(16) << fX_Mass_GeV + << setw(16) << r_l_Ejectile_g.X() + << setw(16) << r_l_Ejectile_g.Y() + << setw(16) << r_l_Ejectile_g.Z() + << setw(16) << r_l_Ejectile_g.E() + << setw(16) << r_l_Ejectile_g.M() << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -832,7 +789,7 @@ void DEMP_Reaction::Lund_Output() { << setw(16) << r_lscatelecg.Y() << setw(16) << r_lscatelecg.Z() << setw(16) << r_lscatelecg.E() - << setw(16) << fElectron_Mass_GeV + << setw(16) << r_lscatelecg.M() << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -845,11 +802,11 @@ void DEMP_Reaction::Lund_Output() { << setw(10) << PDGtype(recoil_hadron) << setw(10) << "0" << setw(10) << "0" - << setw(16) << r_l_scat_hadron_g.X() - << setw(16) << r_l_scat_hadron_g.Y() - << setw(16) << r_l_scat_hadron_g.Z() - << setw(16) << r_l_scat_hadron_g.E() - << setw(16) << f_Scat_hadron_Mass_GeV + << setw(16) << l_Recoil_g.X() + << setw(16) << l_Recoil_g.Y() + << setw(16) << l_Recoil_g.Z() + << setw(16) << l_Recoil_g.E() + << setw(16) << l_Recoil_g.M() << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -891,7 +848,7 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(14) << r_lelectrong.Y() << setw(14) << r_lelectrong.Z() << setw(14) << r_lelectrong.E() - << setw(14) << fElectron_Mass_GeV + << setw(14) << r_lelectrong.M() << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -908,7 +865,7 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(14) << r_lprotong.Y() << setw(14) << r_lprotong.Z() << setw(14) << r_lprotong.E() - << setw(14) << fProton_Mass_GeV + << setw(14) << r_lprotong.M() << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -947,7 +904,7 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(14) << r_lscatelecg.Y() << setw(14) << r_lscatelecg.Z() << setw(14) << r_lscatelecg.E() - << setw(14) << fElectron_Mass_GeV + << setw(14) << r_lscatelecg.M() << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -961,11 +918,11 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(6) << "0" << setw(6) << "0" - << setw(14) << r_l_scat_hadron_g.X() - << setw(14) << r_l_scat_hadron_g.Y() - << setw(14) << r_l_scat_hadron_g.Z() - << setw(14) << r_l_scat_hadron_g.E() - << setw(14) << f_Scat_hadron_Mass_GeV + << setw(14) << l_Recoil_g.X() + << setw(14) << l_Recoil_g.Y() + << setw(14) << l_Recoil_g.Z() + << setw(14) << l_Recoil_g.E() + << setw(14) << l_Recoil_g.M() << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -979,11 +936,11 @@ void DEMP_Reaction::DEMPReact_Pythia6_Output() { << setw(6) << "0" << setw(6) << "0" - << setw(14) << r_lX_g.X() - << setw(14) << r_lX_g.Y() - << setw(14) << r_lX_g.Z() - << setw(14) << r_lX_g.E() - << setw(14) << fX_Mass_GeV + << setw(14) << r_l_Ejectile_g.X() + << setw(14) << r_l_Ejectile_g.Y() + << setw(14) << r_l_Ejectile_g.Z() + << setw(14) << r_l_Ejectile_g.E() + << setw(14) << r_l_Ejectile_g.M() << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -1017,180 +974,18 @@ void DEMP_Reaction::DEMPReact_HEPMC3_Output() { // Third line, optional attributes, the weight DEMPOut << "A" << " " << "0" << " " << "weight" << " " << fEventWeight << endl; // Beam particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (4, incoming beam particle) - DEMPOut << "P" << " " << "1" << " " << "0" << " " << "11" << " " << r_lelectrong.X() << " " << r_lelectrong.Y() << " " << r_lelectrong.Z() << " " << r_lelectrong.E() << " " << fElectron_Mass_GeV << " " << "4" << endl; - DEMPOut << "P" << " " << "2" << " " << "0" << " " << "2212" << " " << r_lprotong.X() << " " << r_lprotong.Y() << " " << r_lprotong.Z() << " " << r_lprotong.E() << " " << fProton_Mass_GeV << " " << "4" << endl; + DEMPOut << "P" << " " << "1" << " " << "0" << " " << "11" << " " << r_lelectrong.X() << " " << r_lelectrong.Y() << " " << r_lelectrong.Z() << " " << r_lelectrong.E() << " " << r_lelectrong.M() << " " << "4" << endl; + DEMPOut << "P" << " " << "2" << " " << "0" << " " << "2212" << " " << r_lprotong.X() << " " << r_lprotong.Y() << " " << r_lprotong.Z() << " " << r_lprotong.E() << " " << r_lprotong.M()<< " " << "4" << endl; // Vertex line - V - 1 - 0 - [1,2] DEMPOut << "V" << " " << "-1" << " " << "0" << " " << "[1,2]" << endl; // Output particles, particle line - P - Particle ID - Parent Vertex ID - PDG id - px - py - pz - energy - particle mass - status (1, undecayed physical particle) // Scattered electron - DEMPOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << fElectron_Mass_GeV << " " << "1" << endl; + DEMPOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << r_lscatelecg.M() << " " << "1" << endl; // Produced meson - DEMPOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_lX_g.X() << " " << r_lX_g.Y() << " " << r_lX_g.Z() << " " << r_lX_g.E() << " " << fX_Mass_GeV << " " << "1" << endl; + DEMPOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_l_Ejectile_g.X() << " " << r_l_Ejectile_g.Y() << " " << r_l_Ejectile_g.Z() << " " << r_l_Ejectile_g.E() << " " << r_l_Ejectile_g.M() << " " << "1" << endl; // Recoil hadron - DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << r_l_scat_hadron_g.X() << " " << r_l_scat_hadron_g.Y() << " " << r_l_scat_hadron_g.Z() << " " << r_l_scat_hadron_g.E() << " " << f_Scat_hadron_Mass_GeV << " " << "1" << endl; - -} - -/*--------------------------------------------------*/ - -bool DEMP_Reaction::SolnCheck() -{ - - // Double Checking for solution viability - if (TMath::Abs(f_Scat_hadron_Mass-r_l_scat_hadron_solved->M())>1){ - //cerr << "Mass Missmatch" << endl; - //cerr << TMath::Abs(proton_mass_mev-Proton->M()) << endl; - return false; - } - if (TMath::Abs(W_in()-W_out())>1){ - //cerr << "W Missmatch" << endl; - //cerr << TMath::Abs(W_in()-W_out()) << endl; - return false; - } - *Final = *r_l_scat_hadron_solved + *r_lX_solved; - - if (TMath::Abs(Initial->Px()-Final->Px())>1){ - //cerr << "Px Missmatch" << endl; - //cerr << TMath::Abs(Initial->Px()-Final->Px()) << endl; - return false; - } - - if (TMath::Abs(Initial->Py()-Final->Py())>1){ - //cerr << "Py Missmatch" << endl; - //cerr << TMath::Abs(Initial->Py()-Final->Py()) << endl; - return false; - } - - if (TMath::Abs(Initial->Pz()-Final->Pz())>1){ - //cerr << "Pz Missmatch" << endl; - //cerr << TMath::Abs(Initial->Pz()-Final->Pz()) << endl; - return false; - } - - if (TMath::Abs(Initial->E()-Final->E())>1){ - return false; - } - return true; -} - -/*--------------------------------------------------*/ -double DEMP_Reaction::W_in() -{ - return (*Interaction+*Target).Mag2(); -} - -/*--------------------------------------------------*/ -double DEMP_Reaction::W_out() -{ - return (*r_l_scat_hadron_solved+*r_lX_solved).Mag2(); -} - -/*--------------------------------------------------*/ - -int DEMP_Reaction::Solve() -{ -// double theta = AngleGen->Theta(); -// double phi = AngleGen->Phi(); -// theta = 0.282478; -// phi = 3.49651; -// cout << " Theta Phi: "<< theta << " " << phi << endl; - - - // Setting the initial values for solve function - VertBeamElec->SetPxPyPzE(r_lelectron.Px(), r_lelectron.Py(), r_lelectron.Pz(), r_lelectron.E()); - VertScatElec->SetPxPyPzE(r_lscatelec.Px(), r_lscatelec.Py(), r_lscatelec.Pz(), r_lscatelec.E()); - Target->SetPxPyPzE(r_lproton.Px(), r_lproton.Py(), r_lproton.Pz(), r_lproton.E()); - - *Photon = *VertBeamElec - *VertScatElec; - *Interaction = *Photon; - - *Initial = *Interaction+*Target; - - /*--------------------------------------------------*/ - - theta = fX_Theta_Col; - phi = fX_Phi_Col; - - return this->Solve(theta, phi); + DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << l_Recoil_g.X() << " " << l_Recoil_g.Y() << " " << l_Recoil_g.Z() << " " << l_Recoil_g.E() << " " << l_Recoil_g.M() << " " << "1" << endl; } -/*--------------------------------------------------*/ -int DEMP_Reaction::Solve(double theta, double phi) -{ - - - W_in_val = W_in(); - - if (W_in_val<0){ - return 0; - } - - UnitVect->SetTheta(theta); - UnitVect->SetPhi(phi); - UnitVect->SetMag(1); - - double* pars = new double[9]; - - pars[0] = UnitVect->X(); - pars[1] = UnitVect->Y(); - pars[2] = UnitVect->Z(); - pars[3] = Initial->Px(); - pars[4] = Initial->Py(); - pars[5] = Initial->Pz(); - pars[6] = Initial->E(); - pars[7] = fX_Mass; - pars[8] = f_Scat_hadron_Mass; - - F->SetParameters(pars); - - P = F->GetX(0, 0, pars[6], 0.0001, 10000); - - Particle * r_lX_temp = new Particle(fX_Mass, - P*pars[0], - P*pars[1], - P*pars[2]); - r_lX_solved->SetPxPyPzE(r_lX_temp->Px(), r_lX_temp->Py(), r_lX_temp->Pz(), r_lX_temp->E()); - - Particle * r_l_hadron_temp= new Particle(); - *r_l_hadron_temp = *Initial-*r_lX_solved; - r_l_scat_hadron_solved->SetPxPyPzE(r_l_hadron_temp->Px(), r_l_hadron_temp->Py(), r_l_hadron_temp->Pz(), r_l_hadron_temp->E()); - - delete r_lX_temp; - delete r_l_hadron_temp; - delete[] pars; - - if (TMath::Abs(F->Eval(P)) < 1){ - if (SolnCheck()){ - return 1; - } - } - - ///*--------------------------------------------------*/ - /// Modifier: Ishan Goel - /// Date: March 22, 2023 - /// Commenting out second solution as it is not giving any solution ever - /// Check for Second solution: - // P2 = F->GetX(0, P+100, pars[6], 0.0001, 10000); - ///Try second solution - // Particle * Pion2 = new Particle(pion_mass_mev, - // P*pars[0], - // P*pars[1], - // P*pars[2]); - // Pion->SetPxPyPzE(Pion2->Px(), Pion2->Py(), Pion2->Pz(), Pion2->E()); - // Particle * Proton2 = new Particle(); - // *Proton2 = *Initial - * Pion; - // Proton_Particle->SetPxPyPzE(Proton2->Px(), Proton2->Py(), Proton2->Pz(), Proton2->E()); - // delete Pion2; - // delete Proton2; - // if (TMath::Abs(F->Eval(P2)) < 1){ - // if (SolnCheck()){ - // return 1; - // } - // } - ///*--------------------------------------------------*/ - - return 0; - -} diff --git a/src/eic_evgen/process_routine/Pi0_prod.cc b/src/eic_evgen/process_routine/Pi0_prod.cc index 0935c2b..5f4defd 100644 --- a/src/eic_evgen/process_routine/Pi0_prod.cc +++ b/src/eic_evgen/process_routine/Pi0_prod.cc @@ -16,7 +16,7 @@ Pi0_Production::Pi0_Production() { Pi0_Production::Pi0_Production(TString particle_str) { - rParticle = particle_str; + rEjectile = particle_str; Init(); @@ -99,11 +99,11 @@ void Pi0_Production::Processing_Event() { // ---------------------------------------------------- /// The generic produced particle in the exclusive reaction is labelled as X - fX_Theta_Col = acos( fRandom->Uniform( cos(fX_Theta_I), cos(fX_Theta_F ) ) ); - fX_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); + f_Ejectile_Theta_Col = acos( fRandom->Uniform( cos(f_Ejectile_Theta_I), cos(f_Ejectile_Theta_F ) ) ); + f_Ejectile_Phi_Col = fRandom->Uniform( 0 , 2.0 * fPi ); - // fX_Theta_Col = fRandom->Uniform( 0.0 , 0.9 ); - // fX_Phi_Col = fRandom->Uniform( -0.0000001 + fPi , 0.0000001 + fPi ); + // f_Ejectile_Theta_Col = fRandom->Uniform( 0.0 , 0.9 ); + // f_Ejectile_Phi_Col = fRandom->Uniform( -0.0000001 + fPi , 0.0000001 + fPi ); // --------------------------------------------------------------------- // Specify the energy and solid angle of scatterd electron in Collider (lab) frame @@ -151,17 +151,17 @@ void Pi0_Production::Processing_Event() { // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- - if(!Solve()){ - return; - } +// if(!Solve()){ +// retur; +// } // --------------------------------------------------------- // Pion momentum in collider frame, analytic solution starts // --------------------------------------------------------- - double fupx = sin( fX_Theta_Col ) * cos( fX_Phi_Col ); - double fupy = sin( fX_Theta_Col ) * sin( fX_Phi_Col ); - double fupz = cos( fX_Theta_Col ); + double fupx = sin( f_Ejectile_Theta_Col ) * cos( f_Ejectile_Phi_Col ); + double fupy = sin( f_Ejectile_Theta_Col ) * sin( f_Ejectile_Phi_Col ); + double fupz = cos( f_Ejectile_Theta_Col ); double fuqx = sin( r_lphoton.Theta() ) * cos( r_lphoton.Phi() ); double fuqy = sin( r_lphoton.Theta() ) * sin( r_lphoton.Phi() ); @@ -183,22 +183,22 @@ void Pi0_Production::Processing_Event() { fb = fb + factor; fc = r_lphoton.E() + r_lproton.E(); - double e_X_rf = lX_rf.E(); + double e_X_rf = l_Ejectile_rf.E(); double e_photon_rf = lphoton_rf.E(); - double ft = fc * fc - fb + fX_Mass * fX_Mass - fProton_Mass * fProton_Mass; + double ft = fc * fc - fb + f_Ejectile_Mass * f_Ejectile_Mass - fProton_Mass * fProton_Mass; - double fu = lproton_rf.Dot(lproton_rf) + lX_rf.Dot(lX_rf) - lproton_rf.Dot(lX_rf); + double fu = lproton_rf.Dot(lproton_rf) + l_Ejectile_rf.Dot(l_Ejectile_rf) - lproton_rf.Dot(l_Ejectile_rf); - ft_min = -fQsq_GeV + pow(fX_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(fX_Mass, 2)) * (pow(e_photon_rf,2)+fQsq) )); + ft_min = -fQsq_GeV + pow(f_Ejectile_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Ejectile_Mass, 2)) * (pow(e_photon_rf,2)+fQsq) )); - fu_min = -fQsq_GeV + pow(f_Scat_hadron_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Scat_hadron_Mass , 2))*(pow(e_photon_rf,2)+fQsq) )); + fu_min = -fQsq_GeV + pow(f_Recoil_Mass, 2) -2.*(e_X_rf*e_photon_rf -sqrt( (pow(e_X_rf, 2) - pow(f_Recoil_Mass , 2))*(pow(e_photon_rf,2)+fQsq) )); double fQA = 4.0 * ( fa * fa - fc * fc ); double fQB = 4.0 * fc * ft; - double fQC = -4.0 * fa * fa * fX_Mass * fX_Mass - ft * ft; + double fQC = -4.0 * fa * fa * f_Ejectile_Mass * f_Ejectile_Mass - ft * ft; fradical = fQB * fQB - 4.0 * fQA * fQC; @@ -210,28 +210,28 @@ void Pi0_Production::Processing_Event() { /// And obtain recoiled proton in collider (lab) frame ///--------------------------------------------------------- - //r_lX.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * cos(fX_Phi_Col), - // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * sin(fX_Theta_Col) * sin(fX_Phi_Col), - // ( sqrt( pow( fepi1 , 2) - pow(fX_Mass , 2) ) ) * cos(fX_Theta_Col), - // fepi1 ); - // - // r_l_scat_hadron.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_lX).X(), - // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Y(), - // ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Z(), - // sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_lX ).Vect() ).Mag()),2) + - // pow( f_Scat_Hadron_Mass ,2 ) ) ); + r_l_Ejectile.SetPxPyPzE( (sqrt( pow( fepi1 , 2) - pow(f_Ejectile_Mass , 2) ) ) * sin(f_Ejectile_Theta_Col) * cos(f_Ejectile_Phi_Col), + ( sqrt( pow( fepi1 , 2) - pow(f_Ejectile_Mass , 2) ) ) * sin(f_Ejectile_Theta_Col) * sin(f_Ejectile_Phi_Col), + ( sqrt( pow( fepi1 , 2) - pow(f_Ejectile_Mass , 2) ) ) * cos(f_Ejectile_Theta_Col), + fepi1 ); + + l_Recoil.SetPxPyPzE( ( r_lproton + r_lelectron - r_lscatelec - r_l_Ejectile).X(), + ( r_lproton + r_lelectron - r_lscatelec - r_l_Ejectile ).Y(), + ( r_lproton + r_lelectron - r_lscatelec - r_l_Ejectile ).Z(), + sqrt( pow( ( ( ( r_lproton + r_lelectron - r_lscatelec - r_l_Ejectile ).Vect() ).Mag()),2) + + pow( f_Recoil_Mass ,2 ) ) ); ///-------------------------------------------------- /// Output with the Solve Function /// Setting the solution values to X and recoiled nucleon - r_lX.SetPxPyPzE(r_lX_solved->Px(), r_lX_solved->Py(), r_lX_solved->Pz(), r_lX_solved->E()); - r_l_scat_hadron.SetPxPyPzE(r_l_scat_hadron_solved->Px(), r_l_scat_hadron_solved->Py(), r_l_scat_hadron_solved->Pz(), r_l_scat_hadron_solved->E()); +// r_l_Ejectile.SetPxPyPzE(r_l_Ejectile_solved->Px(), r_l_Ejectile_solved->Py(), r_l_Ejectile_solved->Pz(), r_l_Ejectile_solved->E()); +// l_Recoil.SetPxPyPzE(l_Recoil_solved->Px(), l_Recoil_solved->Py(), l_Recoil_solved->Pz(), l_Recoil_solved->E()); ///-------------------------------------------------- - r_lX_g = r_lX * fm; - r_l_scat_hadron_g = r_l_scat_hadron * fm; + r_l_Ejectile_g = r_l_Ejectile * fm; + l_Recoil_g = l_Recoil * fm; // ---------------------------------------------------------------------------------------------- // Calculate w = (proton + photon)^2 @@ -250,11 +250,11 @@ void Pi0_Production::Processing_Event() { // Calculate w prime w' = (proton + photon - pion)^2 // ---------------------------------------------------------------------------------------------- - lwp = r_lprotong + r_lphotong - r_lX_g; + lwp = r_lprotong + r_lphotong - r_l_Ejectile_g; fW_Prime_GeV = lwp.Mag(); fsini = r_lelectron + r_lproton; - fsfin = r_lscatelec + r_lX + r_l_scat_hadron; + fsfin = r_lscatelec + r_l_Ejectile + l_Recoil; fsinig = fsini * fm; fsfing = fsfin * fm; @@ -263,7 +263,7 @@ void Pi0_Production::Processing_Event() { //*--------------------------------------------------*/ // SJDK 15/06/21 - Added integer counters for conservation law check and for NaN check - if (r_lX.E() != r_lX.E()){ // SJDK 15/06/21 - If the energy of the produced meson is not a number, return and add to counter + if (r_l_Ejectile.E() != r_l_Ejectile.E()){ // SJDK 15/06/21 - If the energy of the produced meson is not a number, return and add to counter fNaN++; return; } @@ -273,7 +273,7 @@ void Pi0_Production::Processing_Event() { kSConserve = true; } - if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_lX, r_l_scat_hadron) != 1 ){ + if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_l_Ejectile, l_Recoil) != 1 ){ fConserve++; return; } @@ -299,11 +299,11 @@ void Pi0_Production::Processing_Event() { lphoton_rf.Boost(-beta_col_rf); lphoton_rfg = lphoton_rf * fm; - lX_rf = r_lX; - lX_rf.Boost(-beta_col_rf); - lX_rfg = lX_rf * fm; + l_Ejectile_rf = r_l_Ejectile; + l_Ejectile_rf.Boost(-beta_col_rf); + l_Ejectile_rfg = l_Ejectile_rf * fm; - l_scat_hadron_rf = r_l_scat_hadron; + l_scat_hadron_rf = l_Recoil; l_scat_hadron_rf.Boost(-beta_col_rf); l_scat_hadron_rf_g = l_scat_hadron_rf * fm; @@ -311,7 +311,7 @@ void Pi0_Production::Processing_Event() { /// Doing pi0 decay if (if_pi0_decay) { - Pi0_decay(r_lX); + Pi0_decay(r_l_Ejectile); } @@ -331,15 +331,15 @@ void Pi0_Production::Processing_Event() { // cout << fQsq_GeV << " " << fWSq_GeV << " "; // // cout << r_lscatelecg.Vect().Theta() << " " << r_lscatelecg.Vect().Mag() << " " -// << r_l_scat_hadron_g.Vect().Theta() << " " << r_l_scat_hadron_g.Vect().Mag() << " " -// << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() +// << l_Recoil_g.Vect().Theta() << " " << l_Recoil_g.Vect().Mag() << " " +// << r_l_Ejectile_g.Vect().Theta() << " " << r_l_Ejectile_g.Vect().Mag() // << endl; polar_out << fQsq_GeV << " " << fWSq_GeV << " "; polar_out << r_lscatelecg.Vect().Theta() << " " << r_lscatelecg.Vect().Mag() << " " - << r_l_scat_hadron_g.Vect().Theta() << " " << r_l_scat_hadron_g.Vect().Mag() << " " - << r_lX_g.Vect().Theta() << " " << r_lX_g.Vect().Mag() << " " + << l_Recoil_g.Vect().Theta() << " " << l_Recoil_g.Vect().Mag() << " " + << r_l_Ejectile_g.Vect().Theta() << " " << r_l_Ejectile_g.Vect().Mag() << " " << l_photon_1.Vect().Theta() << " " << l_photon_1.Vect().Mag() << " " << l_photon_2.Vect().Theta() << " " << l_photon_2.Vect().Mag() << endl; @@ -355,14 +355,14 @@ void Pi0_Production::Processing_Event() { /*--------------------------------------------------*/ /*--------------------------------------------------*/ - e_X_rf = lX_rf.E(); + e_X_rf = l_Ejectile_rf.E(); e_photon_rf = lphoton_rf.E(); double e_p_rf = lproton_rf.E(); double e_photCM = (fWSq_GeV - fQsq_GeV - pow(fProton_Mass/1000, 2))/fW_GeV/2.; - double e_pCM = (fWSq_GeV + pow(fProton_Mass/1000, 2) - pow(f_Scat_hadron_Mass/1000, 2))/fW_GeV/2.; + double e_pCM = (fWSq_GeV + pow(fProton_Mass/1000, 2) - pow(f_Recoil_Mass/1000, 2))/fW_GeV/2.; - ft_min = -fQsq_GeV + pow(fX_Mass/1000, 2) -2.*(e_X_rf/1000*e_photon_rf/1000 -sqrt( (pow(e_X_rf/1000, 2) - pow(fX_Mass/1000, 2)) * (pow(e_photon_rf/1000,2)+fQsq_GeV) )); + ft_min = -fQsq_GeV + pow(f_Ejectile_Mass/1000, 2) -2.*(e_X_rf/1000*e_photon_rf/1000 -sqrt( (pow(e_X_rf/1000, 2) - pow(f_Ejectile_Mass/1000, 2)) * (pow(e_photon_rf/1000,2)+fQsq_GeV) )); fu_min = -fQsq_GeV + pow(fProton_Mass/1000, 2) -2.*(e_pCM*e_photCM -sqrt( (pow(e_pCM/1000, 2) - pow(fProton_Mass/1000 , 2))*(pow(e_photCM/1000,2)+fQsq_GeV) )); @@ -370,7 +370,7 @@ void Pi0_Production::Processing_Event() { // Cut on centre of mass angle of meson X // ---------------------------------------------------------------------------------------------- - // Theta_cm = r_lX.Vect().Angle(r_lphoton.Vect()); + // Theta_cm = r_l_Ejectile.Vect().Angle(r_lphoton.Vect()); // if (Theta_cm < 90*TMath::Pi()/180) { // return; @@ -382,16 +382,16 @@ void Pi0_Production::Processing_Event() { fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / ( lphoton_rf.E() + fProton_Mass ); fGamma_CM_RF = ( lphoton_rf.E() + fProton_Mass ) / fW; - fX_Energy_CM = ( pow( fW , 2) + pow(fX_Mass , 2) - pow(f_Scat_hadron_Mass , 2) ) / ( 2.0 * fW); - fX_Mom_CM = sqrt( pow(fX_Energy_CM , 2) - pow(fX_Mass , 2)); - fX_Energy_CM_GeV = fX_Energy_CM / 1000.0; - fX_Mom_CM_GeV = fX_Mom_CM / 1000.0; + f_Ejectile_Energy_CM = ( pow( fW , 2) + pow(f_Ejectile_Mass , 2) - pow(f_Recoil_Mass , 2) ) / ( 2.0 * fW); + f_Ejectile_Mom_CM = sqrt( pow(f_Ejectile_Energy_CM , 2) - pow(f_Ejectile_Mass , 2)); + f_Ejectile_Energy_CM_GeV = f_Ejectile_Energy_CM / 1000.0; + f_Ejectile_Mom_CM_GeV = f_Ejectile_Mom_CM / 1000.0; // this equation is valid for parallel kinematics only! - fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_lX.Vect()).Mag()),2) - pow((r_lphoton.E() - r_lX.E()),2)); + fT_Para = ( pow(((r_lphoton.Vect()).Mag() - (r_l_Ejectile.Vect()).Mag()),2) - pow((r_lphoton.E() - r_l_Ejectile.E()),2)); fT_Para_GeV = fT_Para/1000000.0; - lt = r_lphoton - r_lX; + lt = r_lphoton - r_l_Ejectile; ltg = lt * fm; fT = -1.*lt.Mag2(); @@ -400,7 +400,7 @@ void Pi0_Production::Processing_Event() { tc = -1.*lt.Mag2(); tc_GeV = -1.*ltg.Mag2(); - lu = r_lproton - r_lX; + lu = r_lproton - r_l_Ejectile; lug = lu * fm; uc = -1.*lu.Mag2(); @@ -436,7 +436,7 @@ void Pi0_Production::Processing_Event() { fx = fQsq_GeV / ( 2.0 * r_lprotong.Dot( r_lphotong ) ); fy = r_lprotong.Dot( r_lphotong ) / r_lprotong.Dot( r_lelectrong ); - fz = r_lX.E()/r_lphoton.E(); + fz = r_l_Ejectile.E()/r_lphoton.E(); // ------------------------------------------------------------------------------------------------------- // Calculation of Phi ( azimuthal angle of pion momentum w.r.t lepton plane in target's rest frame) @@ -451,9 +451,9 @@ void Pi0_Production::Processing_Event() { v3Electron.SetY( lelectron_rfg.Y() ); v3Electron.SetZ( lelectron_rfg.Z() ); - v3X.SetX( lX_rfg.X() ) ; - v3X.SetY( lX_rfg.Y() ) ; - v3X.SetZ( lX_rfg.Z() ); + v3X.SetX( l_Ejectile_rfg.X() ) ; + v3X.SetY( l_Ejectile_rfg.Y() ) ; + v3X.SetZ( l_Ejectile_rfg.Z() ); v3S.SetX( -1 ); v3S.SetY( 0 ); @@ -494,7 +494,7 @@ void Pi0_Production::Processing_Event() { /// meson produced angle with respect to the Q-vector - theta_X_rf = (lX_rf.Vect()).Angle(lphoton_rf.Vect()); + theta_X_rf = (l_Ejectile_rf.Vect()).Angle(lphoton_rf.Vect()); // ---------------------------------------------------- // Virtual Photon flux factor in units of 1/(GeV*Sr) @@ -513,22 +513,22 @@ void Pi0_Production::Processing_Event() { fJacobian_CM = ( (lphoton_rfg.Vect()).Mag() - fBeta_CM_RF * lphoton_rfg.E() ) / ( fGamma_CM_RF * ( 1.0 - pow(fBeta_CM_RF,2) ) ); - fA = fJacobian_CM * fX_Mom_CM_GeV / fPi; + fA = fJacobian_CM * f_Ejectile_Mom_CM_GeV / fPi; - double fttt = r_lprotong * r_lprotong - 2 * r_lprotong * r_l_scat_hadron_g + r_l_scat_hadron_g * r_l_scat_hadron_g; - double fuuu = r_lprotong * r_lprotong - 2 * r_lprotong * r_lX_g + r_lX_g * r_lX_g; + double fttt = r_lprotong * r_lprotong - 2 * r_lprotong * l_Recoil_g + l_Recoil_g * l_Recoil_g; + double fuuu = r_lprotong * r_lprotong - 2 * r_lprotong * r_l_Ejectile_g + r_l_Ejectile_g * r_l_Ejectile_g; // ---------------------------------------------------- // Jacobian dOmega* / dOmega dimensionless // ---------------------------------------------------- - fJacobian_CM_RF = ( pow((lX_rf.Vect()).Mag(),2)*fW) / - ( fX_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (lX_rf.Vect()).Mag() - - ( lX_rf.E() * (lphoton_rf.Vect()).Mag() * cos( lX_rf.Theta() ) ) ) ); + fJacobian_CM_RF = ( pow((l_Ejectile_rf.Vect()).Mag(),2)*fW) / + ( f_Ejectile_Mom_CM * std::abs( ( fProton_Mass + lphoton_rf.E()) * (l_Ejectile_rf.Vect()).Mag() - + ( l_Ejectile_rf.E() * (lphoton_rf.Vect()).Mag() * cos( l_Ejectile_rf.Theta() ) ) ) ); - fJacobian_CM_Col = ( ( pow((r_lX.Vect()).Mag(),2) * fW ) / - ( fX_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_lX.Vect()).Mag() - - ( r_lX.E() * (r_lphoton.Vect()).Mag() * cos( r_lX.Theta() ) ) ) ) ); + fJacobian_CM_Col = ( ( pow((r_l_Ejectile.Vect()).Mag(),2) * fW ) / + ( f_Ejectile_Mom_CM * std::abs( ( fProton_Mass + r_lphoton.E() ) * (r_l_Ejectile.Vect()).Mag() - + ( r_l_Ejectile.E() * (r_lphoton.Vect()).Mag() * cos( r_l_Ejectile.Theta() ) ) ) ) ); // ------------------------------------------------------------------------------------------ // CKY sigma L and T starts @@ -650,11 +650,11 @@ void Pi0_Production::Pi0_Lund_Output() { << setw(10) << PDGtype(produced_X) << setw(10) << "0" << setw(10) << "0" - << setw(16) << r_lX_g.X() - << setw(16) << r_lX_g.Y() - << setw(16) << r_lX_g.Z() - << setw(16) << r_lX_g.E() - << setw(16) << fX_Mass_GeV + << setw(16) << r_l_Ejectile_g.X() + << setw(16) << r_l_Ejectile_g.Y() + << setw(16) << r_l_Ejectile_g.Z() + << setw(16) << r_l_Ejectile_g.E() + << setw(16) << f_Ejectile_Mass_GeV << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -677,18 +677,18 @@ void Pi0_Production::Pi0_Lund_Output() { << setw(16) << fVertex_Z << endl; - // Recoiled neutron + // Recoiled baryon DEMPOut << setw(10) << "5" << setw(10) << "1" << setw(10) << "1" << setw(10) << PDGtype(recoil_hadron) << setw(10) << "0" << setw(10) << "0" - << setw(16) << r_l_scat_hadron_g.X() - << setw(16) << r_l_scat_hadron_g.Y() - << setw(16) << r_l_scat_hadron_g.Z() - << setw(16) << r_l_scat_hadron_g.E() - << setw(16) << f_Scat_hadron_Mass_GeV + << setw(16) << l_Recoil_g.X() + << setw(16) << l_Recoil_g.Y() + << setw(16) << l_Recoil_g.Z() + << setw(16) << l_Recoil_g.E() + << setw(16) << f_Recoil_Mass_GeV << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -730,18 +730,18 @@ void Pi0_Production::Pi0_Decay_Lund_Output() { << setw(16) << fVertex_Z << endl; - // Recoiled neutron + // Recoiled baryon DEMPOut << setw(10) << "3" << setw(10) << "1" << setw(10) << "1" << setw(10) << PDGtype(recoil_hadron) << setw(10) << "0" << setw(10) << "0" - << setw(16) << r_l_scat_hadron_g.X() - << setw(16) << r_l_scat_hadron_g.Y() - << setw(16) << r_l_scat_hadron_g.Z() - << setw(16) << r_l_scat_hadron_g.E() - << setw(16) << f_Scat_hadron_Mass_GeV + << setw(16) << l_Recoil_g.X() + << setw(16) << l_Recoil_g.Y() + << setw(16) << l_Recoil_g.Z() + << setw(16) << l_Recoil_g.E() + << setw(16) << f_Recoil_Mass_GeV << setw(16) << fVertex_X << setw(16) << fVertex_Y << setw(16) << fVertex_Z @@ -886,7 +886,7 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { << setw(6) << fVertex_Z << endl; - // Recoiled nucleon + // Recoiled baryon DEMPOut << "5" << setw(6) << "1" << setw(6) << PDGtype(recoil_hadron) @@ -894,11 +894,11 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { << setw(6) << "0" << setw(6) << "0" - << setw(14) << r_l_scat_hadron_g.X() - << setw(14) << r_l_scat_hadron_g.Y() - << setw(14) << r_l_scat_hadron_g.Z() - << setw(14) << r_l_scat_hadron_g.E() - << setw(14) << f_Scat_hadron_Mass_GeV + << setw(14) << l_Recoil_g.X() + << setw(14) << l_Recoil_g.Y() + << setw(14) << l_Recoil_g.Z() + << setw(14) << l_Recoil_g.E() + << setw(14) << f_Recoil_Mass_GeV << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -912,11 +912,11 @@ void Pi0_Production::Pi0_Decay_Pythia6_Output() { << setw(6) << "0" << setw(6) << "0" - << setw(14) << r_lX_g.X() - << setw(14) << r_lX_g.Y() - << setw(14) << r_lX_g.Z() - << setw(14) << r_lX_g.E() - << setw(14) << fX_Mass_GeV + << setw(14) << r_l_Ejectile_g.X() + << setw(14) << r_l_Ejectile_g.Y() + << setw(14) << r_l_Ejectile_g.Z() + << setw(14) << r_l_Ejectile_g.E() + << setw(14) << f_Ejectile_Mass_GeV << setw(6) << fVertex_X << setw(6) << fVertex_Y << setw(6) << fVertex_Z @@ -956,9 +956,9 @@ void Pi0_Production::Pi0_HEPMC3_Output() { // Scattered electron DEMPOut << "P" << " " << "3" << " " << "-1" << " " << "11" << " " << r_lscatelecg.X() << " " << r_lscatelecg.Y() << " " << r_lscatelecg.Z() << " " << r_lscatelecg.E() << " " << fElectron_Mass_GeV << " " << "1" << endl; // Produced meson - DEMPOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_lX_g.X() << " " << r_lX_g.Y() << " " << r_lX_g.Z() << " " << r_lX_g.E() << " " << fX_Mass_GeV << " " << "1" << endl; + DEMPOut << "P" << " " << "4" << " " << "-1" << " " << PDGtype(produced_X) << " " << r_l_Ejectile_g.X() << " " << r_l_Ejectile_g.Y() << " " << r_l_Ejectile_g.Z() << " " << r_l_Ejectile_g.E() << " " << f_Ejectile_Mass_GeV << " " << "1" << endl; // Recoil nucleon - DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << r_l_scat_hadron_g.X() << " " << r_l_scat_hadron_g.Y() << " " << r_l_scat_hadron_g.Z() << " " << r_l_scat_hadron_g.E() << " " << f_Scat_hadron_Mass_GeV << " " << "1" << endl; + DEMPOut << "P" << " " << "5" << " " << "-1" << " " << PDGtype(recoil_hadron) << " " << l_Recoil_g.X() << " " << l_Recoil_g.Y() << " " << l_Recoil_g.Z() << " " << l_Recoil_g.E() << " " << f_Recoil_Mass_GeV << " " << "1" << endl; } diff --git a/src/eic_evgen/reaction_routine.cc b/src/eic_evgen/reaction_routine.cc index 1a5fc0c..7d7221a 100644 --- a/src/eic_evgen/reaction_routine.cc +++ b/src/eic_evgen/reaction_routine.cc @@ -22,7 +22,7 @@ using namespace std; Reaction::Reaction(TString particle_str) { - rParticle = particle_str; + rEjectile = particle_str; cout << "Produced particle is: " << GetParticle() << endl; cout << "Generated process: e + p -> e' + p' + " << GetParticle() << endl; tTime.Start(); @@ -39,8 +39,8 @@ Reaction::Reaction(TString particle_str) { // SJDK 09/02/22 - New reaction where the particle and hadron are specified Reaction::Reaction(TString particle_str, TString hadron_str) { - rParticle = particle_str; - rHadron = hadron_str; + rEjectile = particle_str; + rRecoil = hadron_str; cout << "Produced particle is: " << GetParticle() << endl; cout << "Produced hadron is: " << GetHadron() << endl; cout << "Generated process: e + p -> e'+ " << GetHadron() << " + " << GetParticle() << endl; @@ -78,15 +78,15 @@ Reaction::~Reaction() { /// void Reaction::process_reaction() { - if (rParticle == "Pi0") { + if (rEjectile == "Pi0") { // Pi0_Production* r1 = new Pi0_Production("Eta"); - Pi0_Production* rr1 = new Pi0_Production(rParticle); + Pi0_Production* rr1 = new Pi0_Production(rEjectile); rr1->process_reaction(); delete rr1; } // SJDK - 19/12/22 - New generic DEMP reaction class, the intention is that this should be able to handle any case else{ - DEMP_Reaction* rr1 = new DEMP_Reaction(rParticle, rHadron); + DEMP_Reaction* rr1 = new DEMP_Reaction(rEjectile, rRecoil); rr1->process_reaction(); delete rr1; } diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index 2976a83..3c6a0f2 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -29,14 +29,14 @@ class Reaction{ ~Reaction(); void process_reaction(); - TString GetParticle() {return rParticle;}; - TString GetHadron() {return rHadron;}; + TString GetParticle() {return rEjectile;}; + TString GetHadron() {return rRecoil;}; protected: TStopwatch tTime; - TString rParticle; - TString rHadron; + TString rEjectile; + TString rRecoil; }; @@ -48,8 +48,8 @@ class DEMP_Reaction { ~DEMP_Reaction(); void process_reaction(); - TString GetParticle() {return rParticle;}; - TString GetHadron() {return rHadron;}; + TString GetParticle() {return rEjectile;}; + TString GetHadron() {return rRecoil;}; protected: @@ -80,10 +80,10 @@ class DEMP_Reaction { // Parameters TStopwatch tTime; - TString rParticle; - TString rParticle_charge; - TString rParticle_scat_hadron; - TString rHadron; + TString rEjectile; + TString rEjectile_charge; + TString rEjectile_scat_hadron; + TString rRecoil; std::string sTFile; /// Generator output files. For documentation and monitoring purposes std::string sLFile; /// Lund input file into the EIC simulation @@ -99,7 +99,7 @@ class DEMP_Reaction { double rDEG2RAD; - double fX_Theta_I, fX_Theta_F; + double f_Ejectile_Theta_I, f_Ejectile_Theta_F; TLorentzVector GetProtonVector_lab(); TLorentzVector GetElectronVector_lab(); @@ -116,7 +116,7 @@ class DEMP_Reaction { Double_t rFermiMomentum; - Double_t fX_Theta_Col, fX_Phi_Col; + Double_t f_Ejectile_Theta_Col, f_Ejectile_Phi_Col; TLorentzVector r_lscatelec; TLorentzVector r_lscatelecg; @@ -124,20 +124,24 @@ class DEMP_Reaction { TLorentzVector r_lphoton; TLorentzVector r_lphotong; - TLorentzVector r_lX; - TLorentzVector r_lX_g; + TLorentzVector r_l_Ejectile; + TLorentzVector r_l_Ejectile_g; - Particle* r_lX_solved; - Particle* r_l_scat_hadron_solved; +// Particle* r_l_Ejectile_solved; +// Particle* l_Recoil_solved; - double fX_Mass; - double fX_Mass_GeV; - double f_Scat_hadron_Mass; - double f_Scat_hadron_Mass_GeV; + TLorentzVector r_l_Ejectile_solved; + TLorentzVector l_Recoil_solved; - TLorentzVector r_l_scat_hadron; - TLorentzVector r_l_scat_hadron_g; + double f_Ejectile_Mass; + double f_Ejectile_Mass_GeV; + + double f_Recoil_Mass; + double f_Recoil_Mass_GeV; + + TLorentzVector l_Recoil; + TLorentzVector l_Recoil_g; TLorentzVector r_lw; @@ -165,8 +169,8 @@ class DEMP_Reaction { TLorentzVector lphoton_rf; TLorentzVector lphoton_rfg; - TLorentzVector lX_rf; - TLorentzVector lX_rfg; + TLorentzVector l_Ejectile_rf; + TLorentzVector l_Ejectile_rfg; TLorentzVector l_scat_hadron_rf; TLorentzVector l_scat_hadron_rf_g; @@ -174,7 +178,7 @@ class DEMP_Reaction { /////////////////////////////////////////// /// Center of Mass parameters for particle X - double fBeta_CM_RF, fGamma_CM_RF, fX_Energy_CM, fX_Mom_CM, fX_Energy_CM_GeV, fX_Mom_CM_GeV; + double fBeta_CM_RF, fGamma_CM_RF, f_Ejectile_Energy_CM, f_Ejectile_Mom_CM, f_Ejectile_Energy_CM_GeV, f_Ejectile_Mom_CM_GeV; TLorentzVector lt; TLorentzVector ltg; @@ -208,22 +212,31 @@ class DEMP_Reaction { ///*--------------------------------------------------*/ // Rory Check algorithm - // Particle* Pion; - // Particle* Proton_Particle; - Particle* Interaction; - Particle* Target; + // Particle* Interaction; + // Particle* Target; + // + // Particle* Initial; + // Particle* Final; + // + // Particle* VertBeamElec; + // Particle* VertScatElec; + // Particle* Photon; - Particle* Initial; - Particle* Final; - Particle* VertBeamElec; - Particle* VertScatElec; - Particle* Photon; + TLorentzVector Interaction_Solve; + TLorentzVector Target_Solve; + + TLorentzVector Initial; + TLorentzVector Final; + + TLorentzVector VertBeamElec; + TLorentzVector VertScatElec; + TLorentzVector Photon; bool SolnCheck(); - double W_in(); - double W_out(); + double W_in_Solve(); + double W_out_Solve(); double W_in_val; TRandom3* CoinToss; From 893133c2e64476e7aa00b6c01aaba604d05b7962 Mon Sep 17 00:00:00 2001 From: billlee Date: Thu, 25 May 2023 04:19:51 -0400 Subject: [PATCH 28/35] Adding the proton beam mass part --- Config_EIC.json | 2 +- src/eic_evgen/eic.cc | 13 ++- src/eic_evgen/eic_pim.cc | 95 ++++++------------- src/eic_evgen/eic_pim.h | 4 +- .../process_routine/DEMP_Reaction.cc | 46 +++++---- src/eic_evgen/reaction_routine.h | 6 ++ 6 files changed, 74 insertions(+), 92 deletions(-) diff --git a/Config_EIC.json b/Config_EIC.json index 05f6f20..1f809dc 100644 --- a/Config_EIC.json +++ b/Config_EIC.json @@ -27,7 +27,7 @@ "hadron": "neutron", // Choices: Neutron, proton, Lambda or Sigma0 "ebeam": 5, // Electron beam energy in GeV "hbeam": 100, // Hadron beam energy in GeV - //"hbeam_part":"proton", // Hadron beam particle, proton, deut or helium3, work in progress, will need to be added to shell script later on as an argument + "hbeam_part":"Proton", // Hadron beam particle, proton, deut or helium3, work in progress, will need to be added to shell script later on as an argument "OutputType": "HEPMC3", // choices: LUND (Docker), Pythia6 (ECCE Fun4All) or HEPMC3 (Athena) "det_location": "ip6", // choices: ip6 for STAR, ip8 for PHENIX "Ee_Low": 0.5, // The minimum scattered electron energy that will be generated as a fraction of the electron beam energy diff --git a/src/eic_evgen/eic.cc b/src/eic_evgen/eic.cc index 5eabb24..bff69be 100644 --- a/src/eic_evgen/eic.cc +++ b/src/eic_evgen/eic.cc @@ -108,7 +108,7 @@ void eic() { delete r1; } } -/* +*/ /*--------------------------------------------------*/ /*--------------------------------------------------*/ @@ -177,8 +177,8 @@ void eic(Json::Value obj) { // SJDK 03/04/23 - Change to how Qsq range is set/chosen, could add as an override variable later too // Set min/max Qsq values depending upon particle type if (particle == "pi+" || particle == "Pion+" || particle == "Pi+"){ - fQsq_Min = 5.0; fQsq_Max = 35.0; - fW_Min = 3.0; fW_Max = 10.6; + fQsq_Min = 3.0; fQsq_Max = 35.0; + fW_Min = 2.0; fW_Max = 10.2; } else if (particle == "pi0" || particle == "Pion0" || particle == "Pi0"){ fQsq_Min = 5.0; fQsq_Max = 1000.0; @@ -210,6 +210,13 @@ void eic(Json::Value obj) { cout << "Ion beam energy not specified in .json file, defaulting to 100 GeV." << endl; } + if (obj.isMember("hbeam_part")){ + gBeamPart = obj["hbeam_part"].asString(); + } + else { + gBeamPart = "Proton"; + } + // SJDK - 12/01/22 // Set output type as a .json read in // Should be Pythia6, LUND or HEPMC3 diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index 6f818f9..b6a8dfa 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -26,6 +26,7 @@ int gKinematics_type; bool gPi0_decay; string gDet_location; string gOutputType; // SJDK 12/01/22 - Added output type as a variable you can specify in the .json file +string gBeamPart; // SJDK 12/01/22 - Added output type as a variable you can specify in the .json file float fProton_incidence_phi; TString gfile_name; @@ -961,70 +962,16 @@ double pim::fermiMomentum() { return fMom; } -// SJDK - 08/02/22 - Original version where there is no separate energy difference -/*int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro) { - - double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); - double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); - double py_check =(P_t.Py() + P_E0.Py()) - (P_e.Py()+P_pim.Py()+P_pro.Py()); - double pz_check =(P_t.Pz() + P_E0.Pz()) - (P_e.Pz()+P_pim.Pz()+P_pro.Pz()); - - Int_t err = -1; - if( fabs( energy_check ) < fDiff && - fabs( px_check ) < fDiff && - fabs( py_check ) < fDiff && - fabs( pz_check ) < fDiff ) - { - conserve++; - err = 1; - } - else if (fabs( energy_check ) >= fDiff_E) - { - ene++; - } - - else (fabs( px_check ) >= fDiff || - fabs( py_check ) >= fDiff || - fabs( pz_check ) >= fDiff ); - { - mom++; - } - return err; - }*/ - -// SJDK - 08/02/22 - Set the energy tolerance is a parameter that is fed in -/*int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro, double fDiff_E) { - - double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); - double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); - double py_check =(P_t.Py() + P_E0.Py()) - (P_e.Py()+P_pim.Py()+P_pro.Py()); - double pz_check =(P_t.Pz() + P_E0.Pz()) - (P_e.Pz()+P_pim.Pz()+P_pro.Pz()); - - Int_t err = -1; - if( fabs( energy_check ) < fDiff_E && - fabs( px_check ) < fDiff && - fabs( py_check ) < fDiff && - fabs( pz_check ) < fDiff ) - { - conserve++; - err = 1; - } - else if (fabs( energy_check ) >= fDiff_E) - { - ene++; - } - - else (fabs( px_check ) >= fDiff || - fabs( py_check ) >= fDiff || - fabs( pz_check ) >= fDiff ); - { - mom++; - } - return err; - }*/ - +///*--------------------------------------------------*/ //-> 10/05/23 - Love added a slimmed down, simpler to read version of the CheckLaws fn - +// +// To check the conservation of the energy and momentum, there two methods avalaible: +// Method 1: Give the four-vectors of the initial and final states partciles, +// tolerance factor will be defaulted 1e-6 MeV +// Method 2: Give the four-vectors of the initial and final states partciles, +// and the prefered tolerance factor. +// + int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro) { double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); @@ -1044,7 +991,27 @@ int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, return err; } -///*--------------------------------------------------*/ +int pim::CheckLaws(TLorentzVector P_E0, TLorentzVector P_t, TLorentzVector P_e, TLorentzVector P_pim, TLorentzVector P_pro, double fdiff_E) { + + double energy_check = (P_t.E() + P_E0.E()) - (P_e.E()+P_pim.E()+P_pro.E()); + double px_check =(P_t.Px() + P_E0.Px()) - (P_e.Px()+P_pim.Px()+P_pro.Px()); + double py_check =(P_t.Py() + P_E0.Py()) - (P_e.Py()+P_pim.Py()+P_pro.Py()); + double pz_check =(P_t.Pz() + P_E0.Pz()) - (P_e.Pz()+P_pim.Pz()+P_pro.Pz()); + + Int_t err = -1; + if( fabs( energy_check ) < fdiff_E && + fabs( px_check ) < fdiff_E && + fabs( py_check ) < fdiff_E && + fabs( pz_check ) < fdiff_E ) { + conserve++; + err = 1; + } + + return err; +} + + +///**************************************** void pim::setrootfile( string rootFile ){ diff --git a/src/eic_evgen/eic_pim.h b/src/eic_evgen/eic_pim.h index 0df35f8..e40021b 100644 --- a/src/eic_evgen/eic_pim.h +++ b/src/eic_evgen/eic_pim.h @@ -37,9 +37,6 @@ class pim { }; - - - //extern TRandom2 *fRandom; extern TRandom3 *fRandom; @@ -55,6 +52,7 @@ extern TString gHadron; extern bool gPi0_decay; extern std::string gDet_location; extern std::string gOutputType; +extern std::string gBeamPart; extern float fProton_incidence_phi; extern int fSeed; diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index f030c54..fbff765 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -29,7 +29,7 @@ DEMP_Reaction::~DEMP_Reaction() { void DEMP_Reaction::process_reaction() { Init(); - + if (gOutputType == "Pythia6"){ DEMPReact_Pythia6_Out_Init(); } @@ -84,6 +84,15 @@ void DEMP_Reaction::Init() { r_lproton = GetProtonVector_lab(); r_lprotong = GetProtonVector_lab() * fm; + // Getting the mass of the hadron beam + r_lhadron_beam_mass = ParticleMass(ParticleEnum(gBeamPart.c_str()))*1000; // in MeV + +// cout << gBeamPart << endl; +// cout << ParticleEnum(gBeamPart.c_str()) << endl; +// cout << ParticleMass(ParticleEnum(gBeamPart.c_str())) << endl; +// cout << r_lhadron_beam_mass << endl; +// exit(0); + // ---------------------------------------------------- // Electron in collider (lab) frame @@ -161,7 +170,8 @@ void DEMP_Reaction::Init() { else{ cout << "!!! Notice !!! The beam energy combination simulated does not match an expected case, a default luminosity value of - " << fLumi << " cm^2s^-1 has been assumed. !!! Notice !!!" << endl; } - + + } void DEMP_Reaction::Processing_Event() { @@ -270,7 +280,6 @@ void DEMP_Reaction::Processing_Event() { fb = fb + factor; fc = r_lphoton.E() + r_lproton.E(); -// double ft = fc * fc - fb + f_Ejectile_Mass * f_Ejectile_Mass - fProton_Mass * fProton_Mass; double ft = fc * fc - fb + f_Ejectile_Mass * f_Ejectile_Mass - f_Recoil_Mass * f_Recoil_Mass; double fQA = 4.0 * ( fa * fa - fc * fc ); @@ -335,22 +344,16 @@ void DEMP_Reaction::Processing_Event() { if( std::abs( fsinig.Mag() - fsfing.Mag() ) < fDiff ) { kSConserve = true; } - // SJDK 27/01/23 - For Kaon events, 0.5 is too stringent for conservation law check with the current (Ahmed) method to determine meson properties - // Hopefully, Rory's method will be better here and we can utilise the same conservation law check for both particles -// if (rEjectile == "Pi+" || rEjectile == "Pi0"){ -// if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_l_Ejectile, l_Recoil, 0.5) != 1 ){ -// fConserve++; -// return; -// } -// else if (rEjectile == "K+"){ -// if ( pd->CheckLaws( r_lelectron, r_lproton, r_lscatelec, r_l_Ejectile, l_Recoil, 10) != 1 ){ -// fConserve++; -// return; -// } -// } -// } - - // 10/05/23 - Love - Following fixes to calculations above, don't need different checks for different particles, uses new, simpler CheckLaws fn + +///*--------------------------------------------------*/ +//-> 10/05/23 - Love added a slimmed down, simpler to read version of the CheckLaws fn +// +// To check the conservation of the energy and momentum, there two methods avalaible: +// Method 1: Give the four-vectors of the initial and final states partciles, +// tolerance factor will be defaulted 1e-6 MeV +// Method 2: Give the four-vectors of the initial and final states partciles, +// and the prefered tolerance factor. +// if( pd->CheckLaws(r_lelectron, r_lproton, r_lscatelec, r_l_Ejectile, l_Recoil) !=1 ){ fConserve++; @@ -396,8 +399,9 @@ void DEMP_Reaction::Processing_Event() { // ----------------------------------------------------------------------------------------- // 18/05/23 - SJDK - Should these be proton mass still or not? - fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / (lphoton_rf.E() + fProton_Mass ); - fGamma_CM_RF = (lphoton_rf.E() + fProton_Mass) / fW; + fBeta_CM_RF = (lphoton_rf.Vect()).Mag() / (lphoton_rf.E() + r_lhadron_beam_mass); + + fGamma_CM_RF = (lphoton_rf.E() + r_lhadron_beam_mass) / fW; f_Ejectile_Energy_CM = (pow(fW, 2) + pow(f_Ejectile_Mass,2) - pow(f_Recoil_Mass,2) ) / (2.0* fW); f_Ejectile_Mom_CM = sqrt(pow(f_Ejectile_Energy_CM,2) - pow(f_Ejectile_Mass,2)); f_Ejectile_Energy_CM_GeV = f_Ejectile_Energy_CM / 1000.0; diff --git a/src/eic_evgen/reaction_routine.h b/src/eic_evgen/reaction_routine.h index 0687c3c..3cf1c1c 100644 --- a/src/eic_evgen/reaction_routine.h +++ b/src/eic_evgen/reaction_routine.h @@ -109,6 +109,12 @@ class DEMP_Reaction { TLorentzVector r_lelectron; // Electron in collider (lab) frame TLorentzVector r_lelectrong; + + TLorentzVector r_lhadron_beam; + TLorentzVector r_lhadron_beamg; + + Double_t r_lhadron_beam_mass; + Double_t r_lhadron_beam_massg; TVector3 beta_col_rf; // Boost vector from collider (lab) frame to protons rest frame (Fix target) From 0c19e2b4eb1fb341d51ac858ac28ad6f239947ec Mon Sep 17 00:00:00 2001 From: Stephen JD Kay Date: Thu, 25 May 2023 06:57:47 -0600 Subject: [PATCH 29/35] Update main.cxx Removed testing statements, --- src/main.cxx | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main.cxx b/src/main.cxx index 57f8630..4bceab0 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -151,10 +151,6 @@ int main(int argc, char** argv){ // cout << "aaa " << VertScatElec->Px() << " " << VertScatElec->Py() << " " // << VertScatElec->Pz() << " " << VertScatElec->E() << " " << VertScatElec->GetMass() << endl; - - cout << "aaa " << Photon->Px() << " " << Photon->Py() << " " - << Photon->Pz() << " " << Photon->E() << " " << Photon->GetMass() << endl; - Particle* FSIProt = new Particle(proton_mass_mev, "FSIProt", pid_prot); @@ -183,14 +179,7 @@ int main(int argc, char** argv){ Particle * Photon = new Particle(); VertEvent->VirtPhot = Photon; */ - -// cout << "bbb " << VertScatElec->Px() << " " << VertScatElec->Py() << " " -// << VertScatElec->Pz() << " " << VertScatElec->E() << " " << VertScatElec->GetMass() << endl; - - cout << "aaa " << Photon->Px() << " " << Photon->Py() << " " - << Photon->Pz() << " " << Photon->E() << " " << Photon->GetMass() << endl; - ProductGen * ProtonPionGen = new ProductGen(Photon, VertTargNeut); From 7f049de6154e69b1554d5dc2be7a482fd1242503 Mon Sep 17 00:00:00 2001 From: billlee Date: Thu, 25 May 2023 09:25:06 -0400 Subject: [PATCH 30/35] Addressing Stephen's comments, unnecessary print statement removed --- Config_EIC.json | 2 +- src/main.cxx | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/Config_EIC.json b/Config_EIC.json index 1f809dc..b3f2125 100644 --- a/Config_EIC.json +++ b/Config_EIC.json @@ -18,7 +18,7 @@ "file_name" : "DEMPGen_EIC_test", "n_events" : 100000000, - "generator_seed": 123467, + "generator_seed": 1234567, //************************************** /// This section if for EIC simulation only diff --git a/src/main.cxx b/src/main.cxx index 57f8630..4649c87 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -149,13 +149,6 @@ int main(int argc, char** argv){ Particle* Photon = VertEvent->VirtPhot; Photon->SetName("VirtPhot"); -// cout << "aaa " << VertScatElec->Px() << " " << VertScatElec->Py() << " " -// << VertScatElec->Pz() << " " << VertScatElec->E() << " " << VertScatElec->GetMass() << endl; - - cout << "aaa " << Photon->Px() << " " << Photon->Py() << " " - << Photon->Pz() << " " << Photon->E() << " " << Photon->GetMass() << endl; - - Particle* FSIProt = new Particle(proton_mass_mev, "FSIProt", pid_prot); Particle* InTotal = new Particle(); @@ -183,9 +176,6 @@ int main(int argc, char** argv){ Particle * Photon = new Particle(); VertEvent->VirtPhot = Photon; */ - -// cout << "bbb " << VertScatElec->Px() << " " << VertScatElec->Py() << " " -// << VertScatElec->Pz() << " " << VertScatElec->E() << " " << VertScatElec->GetMass() << endl; cout << "aaa " << Photon->Px() << " " << Photon->Py() << " " << Photon->Pz() << " " << Photon->E() << " " << Photon->GetMass() << endl; From 46ee45e626e950dfc28879ca5de589449ee2a537 Mon Sep 17 00:00:00 2001 From: billlee Date: Wed, 31 May 2023 22:55:20 -0400 Subject: [PATCH 31/35] Changes implemented on Precission, misspell correction, particle mass --- src/eic_evgen/eic_pim.cc | 12 ++++++------ src/eic_evgen/process_routine/DEMP_Reaction.cc | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/eic_evgen/eic_pim.cc b/src/eic_evgen/eic_pim.cc index b6a8dfa..357d640 100644 --- a/src/eic_evgen/eic_pim.cc +++ b/src/eic_evgen/eic_pim.cc @@ -268,15 +268,15 @@ void pim::Initilize() { fPSF = 0; fK = 1000.0; fm = 1.0/1000.0; - fElectron_Mass = 0.511; + fElectron_Mass = 0.51099895000; fElectron_Mass_GeV = fElectron_Mass/1000.0; - fProton_Mass = 938.27; // Its is the mass of Proton which in SoLID DVMP is outgoing reocil Proton + fProton_Mass = 938.27208816; // Its is the mass of Proton which in SoLID DVMP is outgoing reocil Proton fProton_Mass_GeV = fProton_Mass/1000.0; - fNeutron_Mass = 939.57; // It is the mass of Neutron. The target is Neutron in SoLID DVMP. + fNeutron_Mass = 939.5654205; // It is the mass of Neutron. The target is Neutron in SoLID DVMP. fNeutron_Mass_GeV = fNeutron_Mass/1000.0; - fRecoilProton_Mass = 938.27; + fRecoilProton_Mass = 938.27208816; fRecoilProton_Mass_GeV = fRecoilProton_Mass/1000.0; - fPion_Mass = 139.57018; + fPion_Mass = 139.57039 ; fPion_Mass_GeV = fPion_Mass/1000.0; fKaon_Mass = 493.677; @@ -286,7 +286,7 @@ void pim::Initilize() { fSigma_Mass = 1192.642; fSigma_Mass_GeV = fSigma_Mass/1000.0; - fOmega_Mass = 782.65; + fOmega_Mass = 782.66; fOmega_Mass_GeV = fOmega_Mass/1000.0; fDiff = 0.00001; // 10/05/23 - Love Preet - Changed from 0.5 diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index fbff765..787fd89 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -733,7 +733,7 @@ void DEMP_Reaction::Detail_Output() { DEMPDetails << "Number of events failing conservation law check " << setw(20) << fConserve << endl; DEMPDetails << "Total events passing conservation laws " << setw(20) << conserve << endl; DEMPDetails << "Total events failed energy conservation " << setw(20) << ene << endl; - DEMPDetails << "Total events failed momentum conserveation " << setw(20) << mom << endl; + DEMPDetails << "Total events failed momentum conservation " << setw(20) << mom << endl; DEMPDetails << "Number of events with -t > 2 (K+) or -t > 1.3 (Pi+) GeV " << setw(20) << t_ev << endl; DEMPDetails << "Number of events with w less than threshold " << setw(20) << fWSqNeg << endl; DEMPDetails << "Number of events with mom not conserve " << setw(20) << fNMomConserve << endl; @@ -967,7 +967,7 @@ void DEMP_Reaction::DEMPReact_HEPMC3_Output() { // HEPMC3 output for Athena/EPIC simulations // First line - E - Event# - #Vertices - #Particles - DEMPOut << "E" << " " << print_itt << " " << "1" << " " << 5 << endl; + DEMPOut << std::scientific << std::setprecision(15) << "E" << " " << print_itt << " " << "1" << " " << 5 << endl; print_itt++; // Second line, Units - U - ENERGY UNIT - DISTANCE UNIT DEMPOut << "U" << " " << "GEV" << " " << "MM" << endl; From df0a179dd7d1d1da53dd7e9784e122354ade0528 Mon Sep 17 00:00:00 2001 From: billlee Date: Thu, 1 Jun 2023 08:06:27 -0400 Subject: [PATCH 32/35] Lund output directory is now generic data output directory --- .../process_routine/DEMP_Reaction.cc | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/eic_evgen/process_routine/DEMP_Reaction.cc b/src/eic_evgen/process_routine/DEMP_Reaction.cc index 787fd89..ceba93e 100644 --- a/src/eic_evgen/process_routine/DEMP_Reaction.cc +++ b/src/eic_evgen/process_routine/DEMP_Reaction.cc @@ -1,6 +1,8 @@ #include "reaction_routine.h" #include "eic.h" +#include + using namespace std; DEMP_Reaction::DEMP_Reaction() { @@ -58,9 +60,23 @@ void DEMP_Reaction::Init() { rEjectile_charge = ExtractCharge(rEjectile); - sTFile = Form("./LundFiles/eic_%s.txt", gfile_name.Data()); - sLFile= Form("./LundFiles/eic_input_%s.dat", gfile_name.Data()); + const char* dir_name = "OutputFiles"; + struct stat sb; + + if (stat(dir_name, &sb) == 0) { + cout << "The path is valid!"; + } + else { + cout << "The Path is invalid!"; + mkdir(dir_name,0777); + } + + sTFile = Form("./%s/eic_%s.txt", dir_name, gfile_name.Data()); + sLFile= Form("./%s/eic_input_%s.dat", dir_name, gfile_name.Data()); + + + DEMPOut.open( sLFile.c_str() ); DEMPDetails.open( sTFile.c_str() ); From cd5028ff7a5164c171bf3f249888f8af338c42f9 Mon Sep 17 00:00:00 2001 From: billlee Date: Thu, 1 Jun 2023 08:19:44 -0400 Subject: [PATCH 33/35] Editted the README regarding the new data output directory --- README.md | 8 ++++---- data/performance_difference | 14 -------------- data/test.txt | 7 ------- 3 files changed, 4 insertions(+), 25 deletions(-) delete mode 100644 data/performance_difference delete mode 100644 data/test.txt diff --git a/README.md b/README.md index 78a9d62..c4defea 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,9 @@ Event generator for Deep Exclusive Meson Production - cd data/ - ./../build/DEMPgen ../Config.json + - Date will be saved under data/OutputFiles/ , the default format is in HEMPC3 Ascii format. + + ### Building on the iFarm @@ -154,9 +157,6 @@ The jobs the script creates and submits all execute the Process_EIC.csh script d - This version should be used to submit jobs to the Farm batch queueing system (swif2) - It uses the same arguments as Batch_Submission_EIC.sh -- Before running, ensure you have a folder or sym link for LundFiles - - data/LundFiles - - This must exist for output! - You should also check the paths set throughout the script look ok (for example, in the COMMAND: ... line) - By default, /eic/users/${USER}/DEMPGen is assumed @@ -165,4 +165,4 @@ The jobs the script creates and submits all execute the Process_EIC.csh script d - There were several .json files clogging up the main directory, many of these were very outdated. As such, I've moved them all to a subfolder - - json_examples - This folder has .json config files for a variety of different conditions. - - Due to several of them being quite outdated, the Config_EIC.json file in the main (the directory of this README) directory should be consulted to see the options that are actually availble. \ No newline at end of file + - Due to several of them being quite outdated, the Config_EIC.json file in the main (the directory of this README) directory should be consulted to see the options that are actually availble. diff --git a/data/performance_difference b/data/performance_difference deleted file mode 100644 index 9e22119..0000000 --- a/data/performance_difference +++ /dev/null @@ -1,14 +0,0 @@ -New code test: -Time : Real time 0:03:50, CP time 230.730 -Event: 100000000 -Recorded events: 1768 -Memory used: 0.2G - -Org code test: -Time : Real time 0:05:45, CP time 344.940 -Event: 100000000 -Recorded events: 1708 -Memory used: 0.1G - - - diff --git a/data/test.txt b/data/test.txt deleted file mode 100644 index 1dd1ec3..0000000 --- a/data/test.txt +++ /dev/null @@ -1,7 +0,0 @@ -11.111 11.0789 2.49487 5.50227 0.0332612 99.2937 0.0884853 0.153026 0 0 0 0 -9.03795 10.7164 2.5549 5.4047 0.0304941 99.3644 0.221746 0.187243 0 0 0 0 -7.88024 9.94301 2.59203 5.35165 0.0280858 99.4204 0.115647 0.183643 0 0 0 0 -8.52366 9.15954 2.5712 5.38417 0.0288262 99.3582 0.203642 0.219421 0 0 0 0 -10.167 10.8937 2.52132 5.45789 0.0321669 99.3283 0.134671 0.165739 0 0 0 0 -9.20235 11.8361 2.54971 5.40971 0.0302413 99.3965 0.0927714 0.139051 0 0 0 0 -8.11153 9.39098 2.58447 5.36401 0.0281077 99.3824 0.214742 0.214618 0 0 0 0 From 28279a645ecb5a27a9899c0eebe138663335c201 Mon Sep 17 00:00:00 2001 From: Stephen JD Kay Date: Thu, 1 Jun 2023 07:04:05 -0600 Subject: [PATCH 34/35] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index c4defea..9a30d1e 100644 --- a/README.md +++ b/README.md @@ -21,9 +21,7 @@ Event generator for Deep Exclusive Meson Production - cd data/ - ./../build/DEMPgen ../Config.json - - Date will be saved under data/OutputFiles/ , the default format is in HEMPC3 Ascii format. - - + - Data will be saved under data/OutputFiles/ , the default format is in HEMPC3 Ascii format. ### Building on the iFarm From 8b05fc57024ce5ab5e609ddcdfa76205b983ff29 Mon Sep 17 00:00:00 2001 From: Stephen JD Kay Date: Thu, 1 Jun 2023 07:05:01 -0600 Subject: [PATCH 35/35] Update README.md Minor typo corrections. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a30d1e..24c421f 100644 --- a/README.md +++ b/README.md @@ -163,4 +163,4 @@ The jobs the script creates and submits all execute the Process_EIC.csh script d - There were several .json files clogging up the main directory, many of these were very outdated. As such, I've moved them all to a subfolder - - json_examples - This folder has .json config files for a variety of different conditions. - - Due to several of them being quite outdated, the Config_EIC.json file in the main (the directory of this README) directory should be consulted to see the options that are actually availble. + - Due to several of them being quite outdated, the Config_EIC.json file in the main (the directory of this README) directory should be consulted to see the options that are actually available.