diff --git a/Inputs/DetectorConfiguration/MUGAST_Agata_Cryo.detector b/Inputs/DetectorConfiguration/MUGAST_Agata_Cryo.detector index 2d689f9420e4f057a6baac3f66aa90fb9ea0488e..733c58498e18da147423ab5f6d1cdbf3e9ff3c54 100644 --- a/Inputs/DetectorConfiguration/MUGAST_Agata_Cryo.detector +++ b/Inputs/DetectorConfiguration/MUGAST_Agata_Cryo.detector @@ -75,7 +75,7 @@ GPDSquare X1_Y128= -132.251 58.314 -3.13 X128_Y128= -61.823 128.742 -3.13 FIRSTSTAGE= 1 - SECONDSTAGE= 0 + SECONDSTAGE= 1 THIRDSTAGE= 0 VIS= all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2 @@ -85,7 +85,7 @@ GPDSquare X1_Y128= -135.00 -51.01 -3.13 X128_Y128= -135.00 43.99 -3.13 FIRSTSTAGE= 1 - SECONDSTAGE= 0 + SECONDSTAGE= 1 THIRDSTAGE= 0 VIS= all diff --git a/NPLib/Physics/NPBeam.cxx b/NPLib/Physics/NPBeam.cxx index 93c90f27f3a8e0867d01fbc2ca6373b157c57dad..ec26534b1041f9ad11317289939beab8775389e6 100644 --- a/NPLib/Physics/NPBeam.cxx +++ b/NPLib/Physics/NPBeam.cxx @@ -114,9 +114,6 @@ Beam::Beam(string isotope){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Beam::~Beam(){ - delete fEnergyHist ; - delete fXThetaXHist ; - delete fYPhiYHist ; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/NPLib/Physics/NPNucleus.cxx b/NPLib/Physics/NPNucleus.cxx index 57e59fbf05966ee59b71232c1259411a8d666938..e9c1a26c9a98e7b219a68fdf4b2fc37b7c21d820 100644 --- a/NPLib/Physics/NPNucleus.cxx +++ b/NPLib/Physics/NPNucleus.cxx @@ -48,8 +48,7 @@ using namespace std; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -Nucleus::Nucleus() -{ +Nucleus::Nucleus(){ //----------- Default Constructor ---------- fName= "XX DEFAULT XX"; fCharge= 0; @@ -149,27 +148,24 @@ Nucleus::~Nucleus() } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Nucleus::Extract(const char* line) -{ - string ligne = line; - +void Nucleus::Extract(string line){ // name of the isotope - string s_name = ligne.substr(11,7); + string s_name = line.substr(11,7); fName = s_name.data(); // charge and mass - string s_mass = ligne.substr(0,3); - string s_charge = ligne.substr(4,4); + string s_mass = line.substr(0,3); + string s_charge = line.substr(4,4); fAtomicWeight = atoi(s_mass.data()); fCharge = atoi(s_charge.data()); fCharge /= 10; // mass excess - string s_excess = ligne.substr(18,10); + string s_excess = line.substr(18,10); fMassExcess = atof(s_excess.data()); // life time - string s_lt_units = ligne.substr(69,3); - string s_LifeTime = ligne.substr(57,12); + string s_lt_units = line.substr(69,3); + string s_LifeTime = line.substr(57,12); // Remove space s_LifeTime.erase( std::remove_if( s_LifeTime.begin(), s_LifeTime.end(), ::isspace ), s_LifeTime.end() ); s_lt_units.erase( std::remove_if( s_lt_units.begin(), s_lt_units.end(), ::isspace ), s_lt_units.end() ); @@ -213,7 +209,7 @@ void Nucleus::Extract(const char* line) fLifeTime*=3600*24*365.25*1e12; // spin and parity - string s_spinparity = ligne.substr(79,14); + string s_spinparity = line.substr(79,14); fSpinParity = s_spinparity.data(); size_t found_p = s_spinparity.find("+"); size_t found_m = s_spinparity.find("-"); diff --git a/NPLib/Physics/NPNucleus.h b/NPLib/Physics/NPNucleus.h index e70800e2f5aaec206741fc80e0f82d8ff9f54709..7cc5aed5ed8d805fc668843f88a869fcba0cd51f 100644 --- a/NPLib/Physics/NPNucleus.h +++ b/NPLib/Physics/NPNucleus.h @@ -50,14 +50,14 @@ namespace NPL { private : //intrinsic properties - const char* fName; // Nucleus name + string fName; // Nucleus name string fNucleusName; int fCharge; // Nucleus charge int fAtomicWeight; // Nucleus atomic weight double fMassExcess; // Nucleus mass excess in keV - const char* fSpinParity; // Nucleus spin and parity + string fSpinParity; // Nucleus spin and parity double fSpin; // Nucleus spin - const char* fParity; // Nucleus parity + string fParity; // Nucleus parity double fLifeTime; // life time //kinematic properties @@ -84,17 +84,17 @@ namespace NPL { protected : - void Extract(const char* line); + void Extract(string line); public : void GetNucleusName(); string GetName() const {return fNucleusName;} - int GetZ() const {return fCharge;} - int GetA() const {return fAtomicWeight;} + int GetZ() const {return fCharge;} + int GetA() const {return fAtomicWeight;} double GetMassExcess() const {return fMassExcess;} - const char* GetSpinParity() const {return fSpinParity;} + string GetSpinParity() const {return fSpinParity;} double GetSpin() const {return fSpin;} - const char* GetParity() const {return fParity;} + string GetParity() const {return fParity;} double GetLifeTime() const {return fLifeTime;} double GetEnergy() const {return fKineticEnergy;} double GetBrho() const {return fBrho;} diff --git a/NPLib/Physics/NPReaction.cxx b/NPLib/Physics/NPReaction.cxx index 710692eba9fccf644f5fd2320385de3fc838a5b5..271a3c8fdfb7f8987ddaf945010e04cbf9d9039d 100644 --- a/NPLib/Physics/NPReaction.cxx +++ b/NPLib/Physics/NPReaction.cxx @@ -70,10 +70,6 @@ Reaction::Reaction(){ fAngleLine = 0; // - fNuclei1 = new Beam(); - fNuclei2 = new Nucleus(); - fNuclei3 = new Nucleus(); - fNuclei4 = new Nucleus(); fBeamEnergy = 0; fThetaCM = 0; fExcitation3 = 0; @@ -82,12 +78,7 @@ Reaction::Reaction(){ fVerboseLevel = NPOptionManager::getInstance()->GetVerboseLevel(); initializePrecomputeVariable(); - // do that to avoid warning from multiple Hist with same name... int offset = 0; - int offset = 0; - while(gDirectory->FindObjectAny(Form("EnergyHist_%i",offset))!=0) - ++offset; - - fCrossSectionHist = new TH1F(Form("EnergyHist_%i",offset),"Reaction_CS",1,0,180); + fCrossSectionHist = NULL; fExcitationEnergyHist = NULL; fDoubleDifferentialCrossSectionHist = NULL ; @@ -136,10 +127,10 @@ Reaction::Reaction(string reaction){ fLineBrho3 = 0; fTheta3VsTheta4 = 0; fAngleLine = 0; - fNuclei1 = new Beam(A); - fNuclei2 = new Nucleus(b); - fNuclei3 = new Nucleus(c); - fNuclei4 = new Nucleus(D); + fNuclei1 = Beam(A); + fNuclei2 = Nucleus(b); + fNuclei3 = Nucleus(c); + fNuclei4 = Nucleus(D); fBeamEnergy = atof(E.c_str()); fThetaCM = 0; fExcitation3 = 0; @@ -154,7 +145,6 @@ Reaction::Reaction(string reaction){ ++offset; fCrossSectionHist = new TH1F(Form("EnergyHist_%i",offset),"Reaction_CS",1,0,180); - fCrossSectionHist = NULL; fDoubleDifferentialCrossSectionHist = NULL ; fshoot3=true; @@ -164,20 +154,6 @@ fshoot3=true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Reaction::~Reaction(){ - //------------- Default Destructor ------------ - - if(fNuclei1) - delete fNuclei1; - - if(fNuclei2) - delete fNuclei2; - - if(fNuclei3) - delete fNuclei3; - - if(fNuclei4) - delete fNuclei4; - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -285,7 +261,7 @@ double Reaction::ReconstructRelativistic(double EnergyLab, double ThetaLab){ fEnergyImpulsionLab_4 = fTotalEnergyImpulsionLab - fEnergyImpulsionLab_3; - double Eex = fEnergyImpulsionLab_4.Mag() - fNuclei4->Mass(); + double Eex = fEnergyImpulsionLab_4.Mag() - fNuclei4.Mass(); return Eex; } @@ -309,8 +285,8 @@ double Reaction::EnergyLabToThetaCM(double EnergyLab, double ThetaLab){ void Reaction::Print() const{ // Print informations concerning the reaction - cout << "Reaction : " << fNuclei2->GetName() << "(" << fNuclei1->GetName() - << "," << fNuclei3->GetName() << ")" << fNuclei4->GetName() << " @ " + cout << "Reaction : " << fNuclei2.GetName() << "(" << fNuclei1.GetName() + << "," << fNuclei3.GetName() << ")" << fNuclei4.GetName() << " @ " << fBeamEnergy << " MeV" << endl ; @@ -380,31 +356,31 @@ void Reaction::ReadConfigurationFile(string Path){ check_Beam = true ; ReactionFile >> DataBuffer; // Pick up the beam energy from the Beam event generator - fNuclei1->SetVerboseLevel(0); - fNuclei1->ReadConfigurationFile(Path); - fBeamEnergy= fNuclei1->GetEnergy(); - if(fVerboseLevel==1) cout << "\033[1;35mBeam " << fNuclei1->GetName() << " @ " << fBeamEnergy << " MeV" << endl; + fNuclei1.SetVerboseLevel(0); + fNuclei1.ReadConfigurationFile(Path); + fBeamEnergy= fNuclei1.GetEnergy(); + if(fVerboseLevel==1) cout << "\033[1;35mBeam " << fNuclei1.GetName() << " @ " << fBeamEnergy << " MeV" << endl; } else if (DataBuffer=="Target=") { check_Target = true ; ReactionFile >> DataBuffer; - fNuclei2 = new Nucleus(DataBuffer); - if(fVerboseLevel==1) cout << "Target " << fNuclei2->GetName() << endl; + fNuclei2 = Nucleus(DataBuffer); + if(fVerboseLevel==1) cout << "Target " << fNuclei2.GetName() << endl; } else if (DataBuffer=="Light=" || DataBuffer=="Nuclei3=") { check_Light = true ; ReactionFile >> DataBuffer; - fNuclei3 = new Nucleus(DataBuffer); - if(fVerboseLevel==1) cout << "Light " << fNuclei3->GetName() << endl; + fNuclei3 = Nucleus(DataBuffer); + if(fVerboseLevel==1) cout << "Light " << fNuclei3.GetName() << endl; } else if (DataBuffer== "Heavy="|| DataBuffer=="Nuclei4=") { check_Heavy = true ; ReactionFile >> DataBuffer; - fNuclei4 = new Nucleus(DataBuffer); - if(fVerboseLevel==1) cout << "Heavy " << fNuclei4->GetName() << endl; + fNuclei4 = Nucleus(DataBuffer); + if(fVerboseLevel==1) cout << "Heavy " << fNuclei4.GetName() << endl; } else if (DataBuffer=="ExcitationEnergy3=" || DataBuffer=="ExcitationEnergyLight=") { @@ -526,10 +502,10 @@ void Reaction::initializePrecomputeVariable(){ if(fBeamEnergy < 0) fBeamEnergy = 0 ; - m1 = fNuclei1->Mass(); - m2 = fNuclei2->Mass(); - m3 = fNuclei3->Mass() + fExcitation3; - m4 = fNuclei4->Mass() + fExcitation4; + m1 = fNuclei1.Mass(); + m2 = fNuclei2.Mass(); + m3 = fNuclei3.Mass() + fExcitation3; + m4 = fNuclei4.Mass() + fExcitation4; fQValue =m1+m2-m3-m4; s = m1*m1 + m2*m2 + 2*m2*(fBeamEnergy + m1); @@ -569,8 +545,8 @@ void Reaction::SetNuclei3(double EnergyLab, double ThetaLab){ fEnergyImpulsionLab_3 = TLorentzVector(p3*sin(ThetaLab),0,p3*cos(ThetaLab),EnergyLab+m3); fEnergyImpulsionLab_4 = fTotalEnergyImpulsionLab - fEnergyImpulsionLab_3; - fNuclei3->SetEnergyImpulsion(fEnergyImpulsionLab_3); - fNuclei4->SetEnergyImpulsion(fEnergyImpulsionLab_4); + fNuclei3.SetEnergyImpulsion(fEnergyImpulsionLab_3); + fNuclei4.SetEnergyImpulsion(fEnergyImpulsionLab_4); fThetaCM = EnergyLabToThetaCM(EnergyLab, ThetaLab); fExcitation4 = ReconstructRelativistic(EnergyLab, ThetaLab); @@ -586,7 +562,7 @@ TGraph* Reaction::GetKinematicLine3(double AngleStep_CM){ for (double angle=0 ; angle < 360 ; angle+=AngleStep_CM){ SetThetaCM(angle*deg); KineRelativistic(theta3, E3, theta4, E4); - fNuclei3->SetKineticEnergy(E3); + fNuclei3.SetKineticEnergy(E3); if(E3>0){ vx.push_back(theta3/deg); @@ -608,7 +584,7 @@ TGraph* Reaction::GetKinematicLine4(double AngleStep_CM){ for (double angle=0 ; angle < 360 ; angle+=AngleStep_CM){ SetThetaCM(angle*deg); KineRelativistic(theta3, E3, theta4, E4); - fNuclei4->SetKineticEnergy(E4); + fNuclei4.SetKineticEnergy(E4); if(E4>0){ vx.push_back(theta4/deg); vy.push_back(E4); @@ -649,8 +625,8 @@ TGraph* Reaction::GetBrhoLine3(double AngleStep_CM){ for (double angle=0 ; angle < 360 ; angle+=AngleStep_CM){ SetThetaCM(angle*deg); KineRelativistic(theta3, E3, theta4, E4); - fNuclei3->SetKineticEnergy(E3); - Brho = fNuclei3->GetBrho(); + fNuclei3.SetKineticEnergy(E3); + Brho = fNuclei3.GetBrho(); vx.push_back(theta3/deg); vy.push_back(Brho); @@ -720,11 +696,11 @@ void Reaction::PrintKinematic(){ SetThetaCM(((double)i)/2*deg); KineRelativistic(theta3, E3, theta4, E4); - fNuclei3->SetKineticEnergy(E3); - Brho3 = fNuclei3->GetBrho(); + fNuclei3.SetKineticEnergy(E3); + Brho3 = fNuclei3.GetBrho(); - fNuclei4->SetKineticEnergy(E4); - Brho4 = fNuclei4->GetBrho(); + fNuclei4.SetKineticEnergy(E4); + Brho4 = fNuclei4.GetBrho(); cout << (double)i/2 << " " << theta3/deg << " " << E3 << " " << Brho3 << " " << E4 << " " << Brho4 << endl; } diff --git a/NPLib/Physics/NPReaction.h b/NPLib/Physics/NPReaction.h index 7f93db29684a2e902f9dbb8e12a36d1729320684..0869dae2d6623c9b523d51bc6ff5a59f7c7fe753 100644 --- a/NPLib/Physics/NPReaction.h +++ b/NPLib/Physics/NPReaction.h @@ -80,10 +80,10 @@ namespace NPL{ TGraph* fLineBrho3; TGraph* fAngleLine; private: - Beam* fNuclei1; // Beam - Nucleus* fNuclei2; // Target - Nucleus* fNuclei3; // Light ejectile - Nucleus* fNuclei4; // Heavy ejectile + Beam 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 @@ -112,10 +112,10 @@ namespace NPL{ double GetExcitation3() const {return fExcitation3;} double GetExcitation4() const {return fExcitation4;} 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;} + Nucleus GetNucleus1() const {return fNuclei1;} + Nucleus GetNucleus2() const {return fNuclei2;} + Nucleus GetNucleus3() const {return fNuclei3;} + Nucleus GetNucleus4() const {return fNuclei4;} TH1F* GetCrossSectionHist() const {return fCrossSectionHist;} int GetVerboseLevel() const {return fVerboseLevel;} bool GetShoot3() const {return fshoot3;} diff --git a/NPSimulation/Core/EventGeneratorTwoBodyReaction.cc b/NPSimulation/Core/EventGeneratorTwoBodyReaction.cc index 59e4bcd2341d520d0455ac8b69070bdf56ec65a0..835a991955bda6c6e50b43322317c45c37fd225d 100644 --- a/NPSimulation/Core/EventGeneratorTwoBodyReaction.cc +++ b/NPSimulation/Core/EventGeneratorTwoBodyReaction.cc @@ -104,15 +104,15 @@ void EventGeneratorTwoBodyReaction::GenerateEvent(G4Event*){ //////Define the kind of particle to shoot//////// ////////////////////////////////////////////////// // Nucleus 3 - G4int LightZ = m_Reaction->GetNucleus3()->GetZ() ; - G4int LightA = m_Reaction->GetNucleus3()->GetA() ; + G4int LightZ = m_Reaction->GetNucleus3().GetZ() ; + G4int LightA = m_Reaction->GetNucleus3().GetA() ; G4ParticleDefinition* LightName = G4ParticleTable::GetParticleTable()->GetIonTable()->GetIon(LightZ, LightA, m_Reaction->GetExcitation3()*MeV); // Nucleus 4 - G4int HeavyZ = m_Reaction->GetNucleus4()->GetZ() ; - G4int HeavyA = m_Reaction->GetNucleus4()->GetA() ; + G4int HeavyZ = m_Reaction->GetNucleus4().GetZ() ; + G4int HeavyA = m_Reaction->GetNucleus4().GetA() ; // Generate the excitation energy if a distribution is given m_Reaction->ShootRandomExcitationEnergy();