diff --git a/Inputs/EventGenerator/10He.reaction b/Inputs/EventGenerator/10He.reaction index ee2cb1ea1089651bdddd99f13061d8086992d5d6..fd541ea4adedd68d3b50a8e3695be77473a5e2ea 100644 --- a/Inputs/EventGenerator/10He.reaction +++ b/Inputs/EventGenerator/10He.reaction @@ -7,7 +7,8 @@ TransfertToResonance Target= 2H Light= 3He Heavy= 10He - ExcitationEnergy= 1.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 1.0 BeamEnergy= 550 BeamEnergySpread= 0 SigmaThetaX= 0.01 diff --git a/Inputs/EventGenerator/12Li.reaction b/Inputs/EventGenerator/12Li.reaction index 72e2d4fa12c490e0e612ca4b323998c56f50ed02..d8b2cc58eeea144bcb08a5241a558cd6633b769c 100644 --- a/Inputs/EventGenerator/12Li.reaction +++ b/Inputs/EventGenerator/12Li.reaction @@ -8,7 +8,8 @@ Transfert Target= 2H Light= 1H Heavy= 12Li - ExcitationEnergy= 1.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 1.0 BeamEnergy= 550 BeamEnergySpread= 0 SigmaThetaX= 0.6921330164 diff --git a/Inputs/EventGenerator/132Sndp.reaction b/Inputs/EventGenerator/132Sndp.reaction index 6507dc83e390319a9d86f2e4dcf55c9ab6f25533..dc220bd6c9449b5f4e4c328b719f0265535a8373 100644 --- a/Inputs/EventGenerator/132Sndp.reaction +++ b/Inputs/EventGenerator/132Sndp.reaction @@ -7,7 +7,8 @@ Transfert Target= 2H Light= 1H Heavy= 133Sn - ExcitationEnergy= 0.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 5.0 BeamEnergy= 1320 BeamEnergySpread= 0 SigmaX= 0 diff --git a/Inputs/EventGenerator/132SndpTestMarcIsotropic.reaction b/Inputs/EventGenerator/132SndpTestMarcIsotropic.reaction index ccc4df42691cf921f4fc67a1b4b4fb64771b4932..3a3f1a6c67db8a048272fd1baf556cff0709a48f 100644 --- a/Inputs/EventGenerator/132SndpTestMarcIsotropic.reaction +++ b/Inputs/EventGenerator/132SndpTestMarcIsotropic.reaction @@ -7,7 +7,8 @@ Transfert Target= 2H Light= 1H Heavy= 133Sn - ExcitationEnergy= 0.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 0.0 BeamEnergy= 1320 BeamEnergySpread= 0 SigmaX= 0.851 diff --git a/Inputs/EventGenerator/134Snpt.reaction b/Inputs/EventGenerator/134Snpt.reaction index 6ff89b7fe5c5750df094da8717258743867915b8..5a9d186af754c566aa0226ff32864e729f21e30e 100644 --- a/Inputs/EventGenerator/134Snpt.reaction +++ b/Inputs/EventGenerator/134Snpt.reaction @@ -7,7 +7,8 @@ Transfert Target= 1H Light= 3H Heavy= 132Sn - ExcitationEnergy= 0.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 0.0 BeamEnergy= 1340 BeamEnergySpread= 0 SigmaX= 0 diff --git a/Inputs/EventGenerator/27Alppp.reaction b/Inputs/EventGenerator/27Alppp.reaction index 3b5ebe181917689702972e8d16446e39c45524c0..e8190b868da45f7a64ba253dcf1399465dbf65e0 100644 --- a/Inputs/EventGenerator/27Alppp.reaction +++ b/Inputs/EventGenerator/27Alppp.reaction @@ -7,7 +7,8 @@ TransfertToResonance Target= 27Al Light= 1H Heavy= 27Al - ExcitationEnergy= 13.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 13.0 BeamEnergy= 18 BeamEnergySpread= 0 SigmaThetaX= 0 diff --git a/Inputs/EventGenerator/34Si.reaction b/Inputs/EventGenerator/34Si.reaction index 41a35ec8e0a24a92782a3bf5202d1700d4c628ac..1e5b5a69320d0988036f71b1348b0f175ccc9fa9 100644 --- a/Inputs/EventGenerator/34Si.reaction +++ b/Inputs/EventGenerator/34Si.reaction @@ -3,7 +3,8 @@ Transfert Target= 208Pb Light= 208Pb Heavy= 19C - ExcitationEnergy= 5.9 + ExcitationEnergyLight= 5.9 + ExcitationEnergyHeavy= 5.9 BeamEnergy= 722 BeamEnergySpread= 0 SigmaThetaX= 0.6921330164 diff --git a/Inputs/EventGenerator/60Fe.reaction b/Inputs/EventGenerator/60Fe.reaction index ea0874438d3a70b841bdbd8852d269b7e4d3e949..8209d1e8673438c97d39bb957de3be17e56ad10b 100644 --- a/Inputs/EventGenerator/60Fe.reaction +++ b/Inputs/EventGenerator/60Fe.reaction @@ -7,7 +7,8 @@ Transfert Target= 2H Light= 1H Heavy= 61Fe - ExcitationEnergy= 2.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 2.0 BeamEnergy= 1200 BeamEnergySpread= 0 SigmaX= 3 diff --git a/Inputs/EventGenerator/69Ni.reaction b/Inputs/EventGenerator/69Ni.reaction index 76d9893d208d6550f08f8965d29bca51e9392fc5..91461447288df0b2fa154ef15dd6acfd80ab8b55 100644 --- a/Inputs/EventGenerator/69Ni.reaction +++ b/Inputs/EventGenerator/69Ni.reaction @@ -7,7 +7,8 @@ Transfert Target= 2H Light= 1H Heavy= 69Ni - ExcitationEnergy= 2.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 2.0 BeamEnergy= 1904 BeamEnergySpread= 0 SigmaX= 1.5 diff --git a/Inputs/EventGenerator/9He.reaction b/Inputs/EventGenerator/9He.reaction index 6b34ff1e06157af39bbd0354056b666dab70d0be..efff66a0203b316eba044e1b7aa02851e504b33a 100644 --- a/Inputs/EventGenerator/9He.reaction +++ b/Inputs/EventGenerator/9He.reaction @@ -8,7 +8,8 @@ Transfert Target= 2H Light= 4He Heavy= 9He - ExcitationEnergy= 1.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 1.0 BeamEnergy= 550 BeamEnergySpread= 0 SigmaThetaX= 0.6921330164 diff --git a/Inputs/EventGenerator/Source.reaction b/Inputs/EventGenerator/Source.reaction index d430437c75a389988e7b0c3592f7fc2e2990e822..12b39ee5e0424d239a92f8623d71bd436e640ec0 100644 --- a/Inputs/EventGenerator/Source.reaction +++ b/Inputs/EventGenerator/Source.reaction @@ -9,7 +9,8 @@ Transfert Target= 2H Light= 1H Heavy= 12Li - ExcitationEnergy= 1.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 1.0 BeamEnergy= 550 BeamEnergySpread= 0 SigmaThetaX= 0.6921330164 diff --git a/Inputs/EventGenerator/e569.reaction b/Inputs/EventGenerator/e569.reaction index c7f8df64e2f11705d0bcb0dfd171f77467d212af..108c421bc77c715ad29e00617257164f8a464862 100644 --- a/Inputs/EventGenerator/e569.reaction +++ b/Inputs/EventGenerator/e569.reaction @@ -7,7 +7,8 @@ Transfert Target= 2H Light= 3H Heavy= 13O - ExcitationEnergy= 0.0 + ExcitationEnergyLight= 0.0 + ExcitationEnergyHeavy= 0.0 BeamEnergy= 252 BeamEnergySpread= 0 SigmaX= 2 diff --git a/NPLib/Makefile b/NPLib/Makefile index f485a6a30d943c384be7656e65f9a252d5ee6e32..d9939ba9a1ce34a3552d14f10e1fd10ddfd31586 100644 --- a/NPLib/Makefile +++ b/NPLib/Makefile @@ -35,6 +35,7 @@ distclean: rm -f ./lib/* rm -f ./include/*.h rm -f liblist + rm -f ./scripts/NPToolLogon_C* ./scripts/makefile.sh distclean .SUFFIXES: .$(SrcSuf) diff --git a/NPLib/Tools/NPReaction.cxx b/NPLib/Tools/NPReaction.cxx index 2c85273a770e0bb38608fe73d9e3d5fe0374f1ed..cb3f6a9cf213c9310ef1310f131dedbf8ca1958e 100644 --- a/NPLib/Tools/NPReaction.cxx +++ b/NPLib/Tools/NPReaction.cxx @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (C) 2009-2010 this file is part of the NPTool Project * + * Copyright (C) 2009-2010 this file is part of the NPTool Project * * * * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * * For the list of contributors see $NPTOOL/Licence/Contributors * @@ -10,23 +10,25 @@ * Original Author : Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : March 2009 * - * Last update : * + * Last update : January 2011 * *---------------------------------------------------------------------------* * Decription: * - * This class deal with Two Body transfert Reaction * - * Physical parameter (Nuclei mass) are loaded from the nubtab03.asc file * - * (2003 nuclear table of isotopes mass). * - * * - * KineRelativistic: Used in NPSimulation * - * A relativistic calculation is made to compute Light and Heavy nuclei * - * angle given the Theta CM angle. * - * * - * ReconstructRelativistic: Used in NPAnalysis * - * A relativistic calculation is made to compute Excitation energy given the* - * light angle and energy in Lab frame. * - * * + * This class deal with Two Body transfert Reaction * + * Physical parameter (Nuclei mass) are loaded from the nubtab03.asc file * + * (2003 nuclear table of isotopes mass). * + * * + * KineRelativistic: Used in NPSimulation * + * A relativistic calculation is made to compute Light and Heavy nuclei * + * angle given the Theta CM angle. * + * * + * ReconstructRelativistic: Used in NPAnalysis * + * A relativistic calculation is made to compute Excitation energy given the* + * light angle and energy in Lab frame. * + * * *---------------------------------------------------------------------------* * Comment: * + * + 20/01/2011: Add support for excitation energy for light ejectile * + * (N. de Sereville) * * Based on previous work by N.de Sereville * * * *****************************************************************************/ @@ -60,19 +62,24 @@ Reaction::Reaction() fNuclei4 = new Nucleus() ; fBeamEnergy = 0 ; fThetaCM = 0 ; - fExcitation = 0 ; + fExcitationLight = 0 ; + fExcitationHeavy = 0 ; fQValue = 0 ; initializePrecomputeVariable() ; } + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -Reaction::Reaction(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergy,string Path) +Reaction::Reaction(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy ,string Path) { - SetEveryThing( name1, name2, name3, name4, BeamEnergy, ExcitationEnergy, Path) ; + SetEveryThing( name1, name2, name3, name4, BeamEnergy, ExcitationEnergyLight, ExcitationEnergyHeavy, Path) ; } + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Reaction::SetEveryThing(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergy,string Path) +void Reaction::SetEveryThing(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path) { //------------- Constructor with nuclei names and beam energy ------------ @@ -82,7 +89,8 @@ void Reaction::SetEveryThing(string name1, string name2, string name3, string na fNuclei4 = new Nucleus(name4); fBeamEnergy = BeamEnergy; fThetaCM = 0; - fExcitation = ExcitationEnergy; + fExcitationLight = ExcitationEnergyLight; + fExcitationHeavy = ExcitationEnergyHeavy; fQValue = ( fNuclei1->GetMassExcess() + fNuclei2->GetMassExcess() - fNuclei3->GetMassExcess() - fNuclei4->GetMassExcess()) / 1000; @@ -137,10 +145,11 @@ Reaction::~Reaction() } + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... bool Reaction::CheckKinematic() - { - // Check if kinematics is allowed +{ + // Check if kinematics is allowed // case of inverse kinematics double theta = fThetaCM; @@ -151,14 +160,16 @@ bool Reaction::CheckKinematic() double W4lab = W4cm * G * (1 + B*beta4cm*cos(theta + M_PI)); // test for total energy conversion if (fabs(WtotLab - (W3lab+W4lab)) > 1e-6) - return false ; + return false; - else return true ; - } + else return true; +} + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void Reaction::KineRelativistic(double &ThetaLab3, double &EnergieLab3, - double &ThetaLab4, double &EnergieLab4) const + double &ThetaLab4, double &EnergieLab4) const { // 2-body relativistic kinematics: direct + inverse // EnergieLab3,4 : lab energy in MeV of the 2 ejectiles @@ -190,24 +201,26 @@ void Reaction::KineRelativistic(double &ThetaLab3, double &EnergieLab3, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... double Reaction::ReconstructRelativistic(double EnergyLab, double ThetaLab) const - { - // EnergyLab in MeV - // ThetaLab in rad - double P1 = sqrt(2*m1*fBeamEnergy+(fBeamEnergy*fBeamEnergy)) ; - double P3 = sqrt(2*m3*EnergyLab+(EnergyLab*EnergyLab)) ; - double P4 = sqrt(P1*P1+P3*P3-(2*P1*P3*cos(ThetaLab))) ; - double E4 = fBeamEnergy+m1+m2-(EnergyLab+m3) ; - double m4e = sqrt((E4*E4)-(P4*P4)) ; - double Eex= m4e-fNuclei4->Mass() ; - - return Eex; - } +{ + // EnergyLab in MeV + // ThetaLab in rad + double P1 = sqrt(2*m1*fBeamEnergy+(fBeamEnergy*fBeamEnergy)); + double P3 = sqrt(2*m3*EnergyLab+(EnergyLab*EnergyLab)); + double P4 = sqrt(P1*P1+P3*P3-(2*P1*P3*cos(ThetaLab))); + double E4 = fBeamEnergy+m1+m2-(EnergyLab+m3); + double m4e = sqrt((E4*E4)-(P4*P4)); + double Eex= m4e-fNuclei4->Mass(); + + return Eex; +} + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //Return ThetaCM double Reaction::EnergyLabToThetaCM( double EnergyLab , double ExcitationEnergy ) const { - if(ExcitationEnergy == -500) ExcitationEnergy = fExcitation; + if(ExcitationEnergy == -500) ExcitationEnergy = fExcitationHeavy; double E1 = (fBeamEnergy+m1) ; double E3 = (EnergyLab+m3) ; @@ -243,7 +256,8 @@ void Reaction::Print() const << fBeamEnergy << " MeV" << endl ; - cout << "Exc = " << fExcitation << " MeV" << endl; + cout << "Exc Light = " << fExcitationLight << " MeV" << endl; + cout << "Exc Heavy = " << fExcitationHeavy << " MeV" << endl; cout << "Qgg = " << fQValue << " MeV" << endl; } @@ -256,13 +270,14 @@ void Reaction::ReadConfigurationFile(string Path) ////////Reaction Setting needs/////// string Beam, Target, Heavy, Light, CrossSectionPath ; - double BeamEnergy = 0 , ExcitationEnergy = 0 ; + double BeamEnergy = 0 , ExcitationEnergyLight = 0, ExcitationEnergyHeavy = 0; bool ReadingStatus = false ; bool check_Beam = false ; bool check_Target = false ; bool check_Light = false ; bool check_Heavy = false ; - bool check_ExcitationEnergy = false ; + bool check_ExcitationEnergyLight = false ; + bool check_ExcitationEnergyHeavy = false ; bool check_BeamEnergy = false ; bool check_CrossSectionPath = false ; @@ -328,11 +343,18 @@ void Reaction::ReadConfigurationFile(string Path) cout << "Heavy " << Heavy << endl; } - else if (DataBuffer=="ExcitationEnergy=") { - check_ExcitationEnergy = true ; + else if (DataBuffer=="ExcitationEnergyLight=") { + check_ExcitationEnergyLight = true ; + ReactionFile >> DataBuffer; + ExcitationEnergyLight = atof(DataBuffer.c_str()) * MeV; + cout << "Excitation Energy Light" << ExcitationEnergyLight / MeV << " MeV" << endl; + } + + else if (DataBuffer=="ExcitationEnergyHeavy=") { + check_ExcitationEnergyHeavy = true ; ReactionFile >> DataBuffer; - ExcitationEnergy = atof(DataBuffer.c_str()) * MeV; - cout << "Excitation Energy " << ExcitationEnergy / MeV << " MeV" << endl; + ExcitationEnergyHeavy = atof(DataBuffer.c_str()) * MeV; + cout << "Excitation Energy Heavy" << ExcitationEnergyHeavy / MeV << " MeV" << endl; } else if (DataBuffer=="BeamEnergy=") { @@ -356,19 +378,15 @@ void Reaction::ReadConfigurationFile(string Path) /////////////////////////////////////////////////// // If all Token found toggle out - if( check_Beam && check_Target && check_Light && check_Heavy && check_ExcitationEnergy - && check_BeamEnergy && check_CrossSectionPath ) - ReadingStatus = false ; - + if (check_Beam && check_Target && check_Light && check_Heavy && check_ExcitationEnergyLight + && check_ExcitationEnergyHeavy && check_BeamEnergy && check_CrossSectionPath) + ReadingStatus = false; } - - } - - SetEveryThing(Beam, Target, Light, Heavy,BeamEnergy,ExcitationEnergy,CrossSectionPath); + SetEveryThing(Beam, Target, Light, Heavy,BeamEnergy,ExcitationEnergyLight, ExcitationEnergyHeavy,CrossSectionPath); - ReactionFile.close(); + ReactionFile.close(); } @@ -376,8 +394,8 @@ void Reaction::initializePrecomputeVariable() { m1 = fNuclei1->Mass(); m2 = fNuclei2->Mass(); - m3 = fNuclei3->Mass(); - m4 = fNuclei4->Mass() + fExcitation; + m3 = fNuclei3->Mass() + fExcitationLight; + m4 = fNuclei4->Mass() + fExcitationHeavy; // center-of-mass velocity WtotLab = (fBeamEnergy + m1) + m2; @@ -399,12 +417,3 @@ void Reaction::initializePrecomputeVariable() K3 = B / beta3cm; K4 = B / beta4cm; } - - - - - - - - - diff --git a/NPLib/Tools/NPReaction.h b/NPLib/Tools/NPReaction.h index 771aedbea5e67073f181fcc4fed4424199a0fede..0ce4cce5cfdc91e21ea7b4d5d272e7bdc7c65098 100644 --- a/NPLib/Tools/NPReaction.h +++ b/NPLib/Tools/NPReaction.h @@ -1,7 +1,7 @@ #ifndef __REACTION__ #define __REACTION__ /***************************************************************************** - * Copyright (C) 2009 this file is part of the NPTool Project * + * Copyright (C) 2009 this file is part of the NPTool Project * * * * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * * For the list of contributors see $NPTOOL/Licence/Contributors * @@ -12,23 +12,25 @@ * Original Author : Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : March 2009 * - * Last update : * + * Last update : January 2011 * *---------------------------------------------------------------------------* * Decription: * - * This class deal with Two Body transfert Reaction * - * Physical parameter (Nuclei mass) are loaded from the nubtab03.asc file * - * (2003 nuclear table of isotopes mass). * - * * - * KineRelativistic: Used in NPSimulation * - * A relativistic calculation is made to compute Light and Heavy nuclei * - * angle given the Theta CM angle. * - * * - * ReconstructRelativistic: Used in NPAnalysis * - * A relativistic calculation is made to compute Excitation energy given the* - * light angle and energy in Lab frame. * - * * + * This class deal with Two Body transfert Reaction * + * Physical parameter (Nuclei mass) are loaded from the nubtab03.asc file * + * (2003 nuclear table of isotopes mass). * + * * + * KineRelativistic: Used in NPSimulation * + * A relativistic calculation is made to compute Light and Heavy nuclei * + * angle given the Theta CM angle. * + * * + * ReconstructRelativistic: Used in NPAnalysis * + * A relativistic calculation is made to compute Excitation energy given the* + * light angle and energy in Lab frame. * + * * *---------------------------------------------------------------------------* * Comment: * + * + 20/01/2011: Add support for excitation energy for light ejectile * + * (N. de Sereville) * * * * * *****************************************************************************/ @@ -40,99 +42,94 @@ using namespace std; //class Nucleus; -namespace NPL - { - class Reaction { - - public: // Constructors and Destructors - Reaction(); - Reaction(string name1, string name2, string name3, string name4, double BeamEnergy , double ExcitationEnergy, string Path ); - ~Reaction(); - - public: // Various Method - void SetEveryThing(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergy,string Path) ; - void ReadConfigurationFile(string Path) ; - - private: - Nucleus *fNuclei1 ; // Beam - Nucleus *fNuclei2 ; // Target - Nucleus *fNuclei3 ; // Light ejectile - Nucleus *fNuclei4 ; // Heavy ejectile - double fQValue ; // Q-value in MeV - double fBeamEnergy ; // Beam energy in MeV - double fThetaCM ; // Center-of-mass angle in radian - double fExcitation ; // Excitation energy in MeV - double* CrossSection ; // Differential CrossSection - int CrossSectionSize ; // Size of array containing Differention CrossSection - - public: - // Getters and Setters - void SetBeamEnergy (double eBeam) {fBeamEnergy = eBeam;initializePrecomputeVariable();} - void SetThetaCM (double angle) {fThetaCM = angle;initializePrecomputeVariable();} - void SetExcitation (double exci) {fExcitation = exci;initializePrecomputeVariable();} - double GetBeamEnergy() const {return fBeamEnergy;} - double GetThetaCM() const {return fThetaCM;} - double GetExcitation() const {return fExcitation;} - double GetQValue() const {return fQValue;} - Nucleus* GetNucleus1() const {return fNuclei1;} - Nucleus* GetNucleus2() const {return fNuclei2;} - Nucleus* GetNucleus3() const {return fNuclei3;} - Nucleus* GetNucleus4() const {return fNuclei4;} - double* GetCrossSection() const {return CrossSection;} - int GetCrossSectionSize() const {return CrossSectionSize;} - - - - - private: // intern precompute variable - void initializePrecomputeVariable(); - double m1 ; - double m2 ; - double m3 ; - double m4 ; - - // center-of-mass velocity - double WtotLab ; - double P1 ; - double B ; - double G ; - - // total energy of the ejectiles in the center-of-mass - double W3cm ; - double W4cm ; - - // velocity of the ejectiles in the center-of-mass - double beta3cm ; - double beta4cm ; - - // Constants of the kinematics - double K3 ; - double K4 ; - - - public: // Kinematics - // Check that the reaction is alowed - bool CheckKinematic(); - - - // Compute ThetaLab and EnergyLab for product of reaction - void KineRelativistic( double &ThetaLab3 , - double &EnergieLab3 , - double &ThetaLab4 , - double &EnergieLab4 ) const; - - // Return Excitation Energy - double ReconstructRelativistic( double EnergyLab, - double ThetaLab) const; - // Return ThetaCM - double EnergyLabToThetaCM( double EnergyLab , // Energy Measured in lab ref - double ExcitationEnergy = -500) // Excitation Energy previously calculated. If no argument given, fExcitation is used - const; - - // Other // - - // Print private paremeter - void Print() const; - }; +namespace NPL +{ + class Reaction + { + + public: // Constructors and Destructors + Reaction(); + Reaction(string name1, string name2, string name3, string name4, double BeamEnergy , double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path); + ~Reaction(); + + public: // Various Method + void SetEveryThing(string name1, string name2, string name3, string name4, double BeamEnergy, double ExcitationEnergyLight, double ExcitationEnergyHeavy, string Path) ; + void ReadConfigurationFile(string Path); + + private: + Nucleus *fNuclei1; // Beam + Nucleus *fNuclei2; // Target + Nucleus *fNuclei3; // Light ejectile + Nucleus *fNuclei4; // Heavy ejectile + double fQValue; // Q-value in MeV + double fBeamEnergy; // Beam energy in MeV + double fThetaCM; // Center-of-mass angle in radian + double fExcitation; // Excitation energy in MeV + double fExcitationLight; // Excitation energy in MeV + double fExcitationHeavy; // Excitation energy in MeV + double* CrossSection; // Differential CrossSection + int CrossSectionSize; // Size of array containing Differention CrossSection + + public: + // Getters and Setters + void SetBeamEnergy(double eBeam) {fBeamEnergy = eBeam; initializePrecomputeVariable();} + void SetThetaCM(double angle) {fThetaCM = angle; initializePrecomputeVariable();} + void SetExcitationLight(double exci) {fExcitationLight = exci; initializePrecomputeVariable();} + void SetExcitationHeavy(double exci) {fExcitationHeavy = exci; initializePrecomputeVariable();} + double GetBeamEnergy() const {return fBeamEnergy;} + double GetThetaCM() const {return fThetaCM;} + double GetExcitation() const {return fExcitation;} + double GetQValue() const {return fQValue;} + Nucleus* GetNucleus1() const {return fNuclei1;} + Nucleus* GetNucleus2() const {return fNuclei2;} + Nucleus* GetNucleus3() const {return fNuclei3;} + Nucleus* GetNucleus4() const {return fNuclei4;} + double* GetCrossSection() const {return CrossSection;} + int GetCrossSectionSize() const {return CrossSectionSize;} + + private: // intern precompute variable + void initializePrecomputeVariable(); + double m1; + double m2; + double m3; + double m4; + + // center-of-mass velocity + double WtotLab; + double P1; + double B; + double G; + + // total energy of the ejectiles in the center-of-mass + double W3cm; + double W4cm; + + // velocity of the ejectiles in the center-of-mass + double beta3cm; + double beta4cm; + + // Constants of the kinematics + double K3; + double K4; + + public: // Kinematics + // Check that the reaction is alowed + bool CheckKinematic(); + + // Compute ThetaLab and EnergyLab for product of reaction + void KineRelativistic(double &ThetaLab3, double &EnergieLab3, + double &ThetaLab4, double &EnergieLab4) const; + + // Return Excitation Energy + double ReconstructRelativistic(double EnergyLab, double ThetaLab) const; + + // Return ThetaCM + // EnergyLab: energy measured in the laboratory frame + // ExcitationEnergy: excitation energy previously calculated. If no argument given, fExcitation is used + double EnergyLabToThetaCM(double EnergyLab, double ExcitationEnergy = -500) const; + + // Print private paremeter + void Print() const; + }; } #endif diff --git a/NPSimulation/include/EventGeneratorTransfert.hh b/NPSimulation/include/EventGeneratorTransfert.hh index 1239a93946a42db217d393342365100505065c77..819acf4905c9e1a576b32721c1fbed3d97102c1c 100644 --- a/NPSimulation/include/EventGeneratorTransfert.hh +++ b/NPSimulation/include/EventGeneratorTransfert.hh @@ -11,7 +11,7 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : January 2011 * *---------------------------------------------------------------------------* * Decription: * * This event Generator is used to simulated two body TransfertReaction. * @@ -20,6 +20,8 @@ * section shoot. Eleastic scattering can also be simulated. * *---------------------------------------------------------------------------* * Comment: * + * + 20/01/2011: Add support for excitation energy for light ejectile * + * (N. de Sereville) * * * * * *****************************************************************************/ @@ -52,7 +54,8 @@ public: // Constructors and Destructors string name3 , // Product of reaction string name4 , // Product of reaction double BeamEnergy , // Beam Energy - double ExcitationEnergy , // Excitation of Heavy Nuclei + double ExcitationEnergyLight , // Excitation of Light Nuclei + double ExcitationEnergyHeavy , // Excitation of Heavy Nuclei double BeamEnergySpread , double SigmaX , double SigmaY , @@ -107,7 +110,8 @@ private: // TTree to store initial value of beam and reaction string name3 , // Product of reaction string name4 , // Product of reaction double BeamEnergy , // Beam Energy - double ExcitationEnergy , // Excitation of Heavy Nuclei + double ExcitationEnergyLight , // Excitation of Light Nuclei + double ExcitationEnergyHeavy , // Excitation of Heavy Nuclei double BeamEnergySpread , double SigmaX , double SigmaY , diff --git a/NPSimulation/include/EventGeneratorTransfertToResonance.hh b/NPSimulation/include/EventGeneratorTransfertToResonance.hh index dbc1873691d164432e23386a1e73f77c03dc4b62..579a1d97071f8afed8ddc022b3aa98b2adf378fd 100644 --- a/NPSimulation/include/EventGeneratorTransfertToResonance.hh +++ b/NPSimulation/include/EventGeneratorTransfertToResonance.hh @@ -11,16 +11,18 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : January 2011 * *---------------------------------------------------------------------------* * Decription: * * This event Generator is used to simulated two body TransfertReaction. * * A Phase Space calculation is then performed to decay the Heavy product. * * The TGenPhaseSpace from ROOT is used to calculate a phase space decay * - * with flat distribution * + * with flat distribution * *---------------------------------------------------------------------------* * Comment: * - * * + * + 20/01/2011: Add support for excitation energy for light ejectile * + * (N. de Sereville) * + * * * * *****************************************************************************/ // C++ header @@ -54,7 +56,8 @@ class EventGeneratorTransfertToResonance : public VEventGenerator string name3 , //Product of reaction string name4 , //Product of reaction double BeamEnergy , //Beam Energy - double ExcitationEnergy , //Excitation of Heavy Nuclei + double ExcitationEnergyLight , //Excitation of Light Nuclei + double ExcitationEnergyHeavy , //Excitation of Heavy Nuclei double BeamEnergySpread , double SigmaX , double SigmaY , @@ -125,7 +128,8 @@ class EventGeneratorTransfertToResonance : public VEventGenerator string name3 , //Product of reaction string name4 , //Product of reaction double BeamEnergy , //Beam Energy - double ExcitationEnergy , //Excitation of Heavy Nuclei + double ExcitationEnergyLight , //Excitation of Light Nuclei + double ExcitationEnergyHeavy , //Excitation of Heavy Nuclei double BeamEnergySpread , double SigmaX , double SigmaY , diff --git a/NPSimulation/src/EventGeneratorTransfert.cc b/NPSimulation/src/EventGeneratorTransfert.cc index 1e251c2a2378a3d0585d49b99a596e303e008d7a..c19188bf92880bf69f4b4e4196c31e45a2191364 100644 --- a/NPSimulation/src/EventGeneratorTransfert.cc +++ b/NPSimulation/src/EventGeneratorTransfert.cc @@ -9,7 +9,7 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : January 2011 * *---------------------------------------------------------------------------* * Decription: * * This event Generator is used to simulated two body TransfertReaction. * @@ -18,6 +18,8 @@ * section shoot. Eleastic scattering can also be simulated. * *---------------------------------------------------------------------------* * Comment: * + * + 20/01/2011: Add support for excitation energy for light ejectile * + * (N. de Sereville) * * * * * *****************************************************************************/ @@ -87,7 +89,8 @@ EventGeneratorTransfert::EventGeneratorTransfert(string name1 , string name3 , // Product of reaction string name4 , // Product of reaction double BeamEnergy , // Beam Energy - double ExcitationEnergy , // Excitation of Heavy Nuclei + double ExcitationEnergyLight , // Excitation of Light Nuclei + double ExcitationEnergyHeavy , // Excitation of Heavy Nuclei double BeamEnergySpread , double SigmaX , double SigmaY , @@ -102,7 +105,8 @@ EventGeneratorTransfert::EventGeneratorTransfert(string name1 , name3 , // Product of reaction name4 , // Product of reaction BeamEnergy , // Beam Energy - ExcitationEnergy , // Excitation of Heavy Nuclei + ExcitationEnergyLight , // Excitation of Light Nuclei + ExcitationEnergyHeavy , // Excitation of Heavy Nuclei BeamEnergySpread , SigmaX , SigmaY , @@ -143,7 +147,8 @@ void EventGeneratorTransfert::ReadConfiguration(string Path) ////////Reaction Setting needs/////// string Beam, Target, Heavy, Light, CrossSectionPath ; - G4double BeamEnergy = 0 , ExcitationEnergy = 0 , BeamEnergySpread = 0 , SigmaX = 0 , SigmaY = 0 , SigmaThetaX = 0 , SigmaPhiY=0; + G4double BeamEnergy = 0 , ExcitationEnergyLight = 0, ExcitationEnergyHeavy = 0; + G4double BeamEnergySpread = 0 , SigmaX = 0 , SigmaY = 0 , SigmaThetaX = 0 , SigmaPhiY=0; bool ShootLight = false ; bool ShootHeavy = false ; @@ -152,7 +157,8 @@ void EventGeneratorTransfert::ReadConfiguration(string Path) bool check_Target = false ; bool check_Light = false ; bool check_Heavy = false ; - bool check_ExcitationEnergy = false ; + bool check_ExcitationEnergyLight = false ; + bool check_ExcitationEnergyHeavy = false ; bool check_BeamEnergy = false ; bool check_BeamEnergySpread = false ; bool check_FWHMX = false ; @@ -215,11 +221,18 @@ while(ReadingStatus){ G4cout << "Heavy " << Heavy << G4endl; } - else if (DataBuffer.compare(0, 17, "ExcitationEnergy=") == 0) { - check_ExcitationEnergy = true ; + else if (DataBuffer.compare(0, 22, "ExcitationEnergyLight=") == 0) { + check_ExcitationEnergyLight = true ; ReactionFile >> DataBuffer; - ExcitationEnergy = atof(DataBuffer.c_str()) * MeV; - G4cout << "Excitation Energy " << ExcitationEnergy / MeV << " MeV" << G4endl; + ExcitationEnergyLight = atof(DataBuffer.c_str()) * MeV; + G4cout << "Excitation Energy Light" << ExcitationEnergyLight / MeV << " MeV" << G4endl; + } + + else if (DataBuffer.compare(0, 22, "ExcitationEnergyHeavy=") == 0) { + check_ExcitationEnergyHeavy = true ; + ReactionFile >> DataBuffer; + ExcitationEnergyHeavy = atof(DataBuffer.c_str()) * MeV; + G4cout << "Excitation Energy Heavy" << ExcitationEnergyHeavy / MeV << " MeV" << G4endl; } else if (DataBuffer.compare(0, 11, "BeamEnergy=") == 0) { @@ -294,7 +307,7 @@ while(ReadingStatus){ /////////////////////////////////////////////////// // If all Token found toggle out - if( check_Beam && check_Target && check_Light && check_Heavy && check_ExcitationEnergy + if(check_Beam && check_Target && check_Light && check_Heavy && check_ExcitationEnergyLight && check_ExcitationEnergyHeavy && check_BeamEnergy && check_BeamEnergySpread && check_FWHMX && check_FWHMY && check_EmmitanceTheta && check_EmmitancePhi && check_CrossSectionPath && check_ShootLight && check_ShootHeavy) ReadingStatus = false ; @@ -309,7 +322,8 @@ while(ReadingStatus){ Light , Heavy , BeamEnergy , - ExcitationEnergy , + ExcitationEnergyLight , + ExcitationEnergyHeavy , BeamEnergySpread , SigmaX , SigmaY , @@ -514,7 +528,8 @@ void EventGeneratorTransfert::SetEverything(string name1, // Beam nuclei string name3, // Product of reaction string name4, // Product of reaction double BeamEnergy, // Beam Energy - double ExcitationEnergy, // Excitation of Heavy Nuclei + double ExcitationEnergyLight, // Excitation of Light Nuclei + double ExcitationEnergyHeavy, // Excitation of Heavy Nuclei double BeamEnergySpread, double SigmaX, double SigmaY, @@ -524,7 +539,7 @@ void EventGeneratorTransfert::SetEverything(string name1, // Beam nuclei bool ShootHeavy, string Path) { - m_Reaction = new Reaction(name1, name2, name3, name4, BeamEnergy, ExcitationEnergy, Path); + m_Reaction = new Reaction(name1, name2, name3, name4, BeamEnergy, ExcitationEnergyLight, ExcitationEnergyHeavy, Path); m_BeamEnergy = BeamEnergy; m_BeamEnergySpread = BeamEnergySpread; diff --git a/NPSimulation/src/EventGeneratorTransfertToResonance.cc b/NPSimulation/src/EventGeneratorTransfertToResonance.cc index f7338b3a15f0c470c67fe3d69df7e4e45ae31cea..7094ad899a84011b39259a1421f478232bdb78dc 100644 --- a/NPSimulation/src/EventGeneratorTransfertToResonance.cc +++ b/NPSimulation/src/EventGeneratorTransfertToResonance.cc @@ -9,16 +9,18 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : January 2011 * *---------------------------------------------------------------------------* * Decription: * * This event Generator is used to simulated two body TransfertReaction. * * A Phase Space calculation is then performed to decay the Heavy product. * * The TGenPhaseSpace from ROOT is used to calculate a phase space decay * - * with flat distribution * + * with flat distribution * *---------------------------------------------------------------------------* * Comment: * - * * + * + 20/01/2011: Add support for excitation energy for light ejectile * + * (N. de Sereville) * + * * * * *****************************************************************************/ @@ -87,7 +89,8 @@ EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance( string string name3 , string name4 , double BeamEnergy , - double ExcitationEnergy , + double ExcitationEnergyLight , + double ExcitationEnergyHeavy , double BeamEnergySpread , double SigmaX , double SigmaY , @@ -108,7 +111,8 @@ EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance( string name3 , //Product of reaction name4 , //Product of reaction BeamEnergy , //Beam Energy - ExcitationEnergy , //Excitation of Heavy Nuclei + ExcitationEnergyLight , //Excitation of Heavy Nuclei + ExcitationEnergyHeavy , //Excitation of Heavy Nuclei BeamEnergySpread , SigmaX , SigmaY , @@ -147,7 +151,8 @@ void EventGeneratorTransfertToResonance::ReadConfiguration(string Path) ////////Reaction Setting needs/////// string Beam, Target, Heavy, Light, CrossSectionPath ; - G4double BeamEnergy = 0 , ExcitationEnergy = 0 , BeamEnergySpread = 0 , SigmaX = 0 , SigmaY = 0 , SigmaThetaX = 0 , SigmaPhiY=0, ResonanceWidth = 0 ,ResonanceDecayZ = 0 , ResonanceDecayA = 0 ; + G4double BeamEnergy = 0, ExcitationEnergyLight = 0, ExcitationEnergyHeavy = 0; + G4double BeamEnergySpread = 0 , SigmaX = 0 , SigmaY = 0 , SigmaThetaX = 0 , SigmaPhiY=0, ResonanceWidth = 0 ,ResonanceDecayZ = 0 , ResonanceDecayA = 0 ; bool ShootLight = false ; bool ShootHeavy = false ; bool ShootDecayProduct = false ; @@ -157,7 +162,8 @@ void EventGeneratorTransfertToResonance::ReadConfiguration(string Path) bool check_Target = false ; bool check_Light = false ; bool check_Heavy = false ; - bool check_ExcitationEnergy = false ; + bool check_ExcitationEnergyLight = false ; + bool check_ExcitationEnergyHeavy = false ; bool check_BeamEnergy = false ; bool check_BeamEnergySpread = false ; bool check_FWHMX = false ; @@ -224,11 +230,18 @@ while(ReadingStatus){ G4cout << "Heavy " << Heavy << G4endl; } - else if (DataBuffer.compare(0, 17, "ExcitationEnergy=") == 0) { - check_ExcitationEnergy = true ; + else if (DataBuffer.compare(0, 22, "ExcitationEnergyLight=") == 0) { + check_ExcitationEnergyLight = true ; ReactionFile >> DataBuffer; - ExcitationEnergy = atof(DataBuffer.c_str()) * MeV; - G4cout << "Excitation Energy " << ExcitationEnergy / MeV << " MeV" << G4endl; + ExcitationEnergyLight = atof(DataBuffer.c_str()) * MeV; + G4cout << "Excitation Energy Light " << ExcitationEnergyLight / MeV << " MeV" << G4endl; + } + + else if (DataBuffer.compare(0, 22, "ExcitationEnergyHeavy=") == 0) { + check_ExcitationEnergyHeavy = true ; + ReactionFile >> DataBuffer; + ExcitationEnergyHeavy = atof(DataBuffer.c_str()) * MeV; + G4cout << "Excitation Energy Heavy " << ExcitationEnergyHeavy / MeV << " MeV" << G4endl; } else if (DataBuffer.compare(0, 11, "BeamEnergy=") == 0) { @@ -332,7 +345,7 @@ while(ReadingStatus){ /////////////////////////////////////////////////// // If all Token found toggle out - if( check_Beam && check_Target && check_Light && check_Heavy && check_ExcitationEnergy + if (check_Beam && check_Target && check_Light && check_Heavy && check_ExcitationEnergyLight && check_ExcitationEnergyHeavy && check_BeamEnergy && check_BeamEnergySpread && check_FWHMX && check_FWHMY && check_EmmitanceTheta && check_EmmitancePhi && check_CrossSectionPath && check_ShootLight && check_ShootHeavy && check_ResonanceWidth && check_ResonanceDecayZ && check_ResonanceDecayA && check_ShootDecayProduct) @@ -348,7 +361,8 @@ while(ReadingStatus){ Light , Heavy , BeamEnergy , - ExcitationEnergy , + ExcitationEnergyLight , + ExcitationEnergyHeavy , BeamEnergySpread , SigmaX , SigmaY , @@ -407,13 +421,13 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part // EXX should always be more than specific heat of the reaction // double EXX = RandBreitWigner::shoot(m_ResonanceMean,m_ResonanceWidth) ; double EXX = RandGauss::shoot(m_ResonanceMean,m_ResonanceWidth) ; - m_Reaction->SetExcitation( EXX ); + m_Reaction->SetExcitationHeavy( EXX ); while ( m_Reaction->CheckKinematic()==false ) { // EXX = RandBreitWigner::shoot(m_ResonanceMean,m_ResonanceWidth) ; EXX = RandGauss::shoot(m_ResonanceMean,m_ResonanceWidth) ; - m_Reaction->SetExcitation( EXX ); + m_Reaction->SetExcitationHeavy( EXX ); } // Beam G4int BeamZ = m_Reaction->GetNucleus1()->GetZ(); @@ -744,7 +758,8 @@ void EventGeneratorTransfertToResonance::SetEverything( string name1 string name3 , string name4 , double BeamEnergy , - double Excitation , + double ExcitationLight , + double ExcitationHeavy , double BeamEnergySpread , double SigmaX , double SigmaY , @@ -765,7 +780,8 @@ void EventGeneratorTransfertToResonance::SetEverything( string name1 name3 , name4 , BeamEnergy, - Excitation, + ExcitationLight, + ExcitationHeavy, Path) ; m_BeamEnergy = BeamEnergy; m_BeamEnergySpread = BeamEnergySpread ; @@ -774,7 +790,7 @@ void EventGeneratorTransfertToResonance::SetEverything( string name1 m_SigmaThetaX = SigmaThetaX ; m_SigmaPhiY = SigmaPhiY ; m_ResonanceWidth = ResonanceWidth ; - m_ResonanceMean = Excitation ; + m_ResonanceMean = ExcitationHeavy ; m_ResonanceDecayZ = ResonanceDecayZ ; m_ResonanceDecayA = ResonanceDecayA ; m_ShootLight = ShootLight ; diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 771b8be5ea478b300ef57fad16d483e57503dbc7..ac401db3e530c8082f475105ece3004a59ddc8a5 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -23,6 +23,9 @@ Nicolas de Sereville, IPNO + Symbolic links to *.dylib files are done if on a macosx platform. + The 'liblist' file at NPLib level is created. + + NPReaction class + + Now it is possible to give excitation to the light nucleus in exit channel. + + NPOptionManager facility + This singleton class allows to pass arguments on the command line when executing NPSimulation and NPAnalysis.