diff --git a/NPAnalysis/10He_Riken/Analysis b/NPAnalysis/10He_Riken/Analysis index 592ab93c584150d90ec51a9f190d63e0e5f2bfa5..17a18c713490b00b1f4bb3098d55b3ae7fc7d93b 100755 Binary files a/NPAnalysis/10He_Riken/Analysis and b/NPAnalysis/10He_Riken/Analysis differ diff --git a/NPAnalysis/10He_Riken/include/ObjectManager.hh b/NPAnalysis/10He_Riken/include/ObjectManager.hh index 1ab104dbca5e056560ffb6817dff20c3d12d574d..336fb8c7142848ae3f053a591911a9684948e3f2 100644 --- a/NPAnalysis/10He_Riken/include/ObjectManager.hh +++ b/NPAnalysis/10He_Riken/include/ObjectManager.hh @@ -109,17 +109,21 @@ namespace ENERGYLOSS // 3He Energy Loss EnergyLoss He3TargetWind = EnergyLoss ( "He3_Mylar.G4table" , + "G4Table", 10000 ); EnergyLoss He3TargetGaz = EnergyLoss ( "He3_D2.G4table" , + "G4Table", 10000 ); EnergyLoss He3StripAl = EnergyLoss ( "3He_Al.txt" , + "LISE", 10000 , 1 , 3 ); EnergyLoss He3StripSi = EnergyLoss ( "3He_Si.txt" , + "LISE", 10000 , 1 , 3 ); @@ -150,16 +154,19 @@ namespace ENERGYLOSS // proton Energy Loss EnergyLoss protonTargetWind = EnergyLoss ( "proton_Mylar.txt" , + "LISE", 1000 , 1 , 1 ); EnergyLoss protonTargetGaz = EnergyLoss ( "proton_D2gaz_1b_26K.txt" , + "LISE", 1000 , 1 , 1 ); EnergyLoss protonStripAl = EnergyLoss ( "proton_Al.txt" , + "LISE", 100 , 1 , 1 ); diff --git a/NPLib/Tools/NPEnergyLoss.cxx b/NPLib/Tools/NPEnergyLoss.cxx index 6285a02477045bc726fc3ccc8bf6059010bc5018..f41ac75f9b09e671ac9c8875d142358d2934c5a2 100644 --- a/NPLib/Tools/NPEnergyLoss.cxx +++ b/NPLib/Tools/NPEnergyLoss.cxx @@ -56,7 +56,7 @@ EnergyLoss::~EnergyLoss() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EnergyLoss::EnergyLoss(string Path , int NumberOfSlice=100 , int LiseColumn , int NumberOfMass) +EnergyLoss::EnergyLoss(string Path , string Source, int NumberOfSlice=100 , int LiseColumn , int NumberOfMass) { fNumberOfSlice = NumberOfSlice ; @@ -67,105 +67,86 @@ EnergyLoss::EnergyLoss(string Path , int NumberOfSlice=100 , int LiseColumn , i cout << "///////////////////////////////// " << endl ; cout << "Initialising an EnergyLoss object " << endl ; - - //If LiseColumn is set to 0 File type is expected to be from SRIM or Geant4 - if (LiseColumn == 0) - { - // Opening dE/dX file + + ifstream TableFile ; + TableFile.open(Path.c_str()) ; - ifstream TableFile ; - TableFile.open(Path.c_str()) ; + // Opening dE/dX file + if(!TableFile) cout << "ERROR: TABLE FILE NOT FOUND" << endl; + + if (Source == "G4Table") + { + cout << "Reading Energy Loss File: " << Path << endl ; + // Reading Data + double energy, total; + string dummy; + //skipped first line + getline(TableFile,dummy); + while ( TableFile >> energy) + { + fEnergy.push_back ( energy*MeV ) ; + TableFile >> total; + fdEdX_Total.push_back ( total*MeV/micrometer ) ; + } + + // Close File + TableFile.close(); + + } + + else if (Source == "SRIM") + { + // Reading Data + double energy, nuclear, electronic; + string unit, dummy; + + while ( TableFile >> energy >> unit + >> electronic >> nuclear + >> dummy >> dummy >> dummy + >> dummy >> dummy >> dummy ) + { + if ( unit == "keV" ) energy = energy*keV ; + if ( unit == "MeV" ) energy = energy*MeV ; + if ( unit == "GeV" ) energy = energy*GeV ; + fEnergy .push_back ( energy ) ; + fdEdX_Nuclear .push_back ( nuclear ) ; + fdEdX_Electronic .push_back ( electronic ) ; + fdEdX_Total .push_back ( nuclear + electronic ) ; + } + + // Close File + TableFile.close(); + } - if ( !TableFile ) - { - cout << "Failed to open file " << Path << endl; - return; - } - else - { - cout << "Reading Energy Loss File: " << Path << endl ; - // Reading Data - double energy, total; - string dummy; - //skipped first line - getline(TableFile,dummy); - while ( TableFile >> energy) - { - fEnergy.push_back ( energy*MeV ) ; - TableFile >> total; - fdEdX_Total.push_back ( total*MeV/micrometer ) ; + else if(Source == "LISE") + { + cout << "Reading Energy Loss File: " << Path << endl ; + // Reading Data + double energy=0, energyloss=0; + string dummy; + // skipping comment first line + getline(TableFile,dummy); + + while ( TableFile >> energy ) + { + for (int k = 0 ; k < 11 ; k++ ) + { + TableFile >> dummy ; + if (k+1==LiseColumn) energyloss = atof(dummy.c_str()) ; } - - // Close File - TableFile.close(); - } - /* else - { - // Reading Data - double energy, nuclear, electronic; - string unit, dummy; - - while ( TableFile >> energy >> unit - >> electronic >> nuclear - >> dummy >> dummy >> dummy - >> dummy >> dummy >> dummy ) - { - if ( unit == "keV" ) energy = energy*keV ; - if ( unit == "MeV" ) energy = energy*MeV ; - if ( unit == "GeV" ) energy = energy*GeV ; - fEnergy .push_back ( energy ) ; - fdEdX_Nuclear .push_back ( nuclear ) ; - fdEdX_Electronic .push_back ( electronic ) ; - fdEdX_Total .push_back ( nuclear + electronic ) ; - } - - // Close File - TableFile.close(); - }*/ - + fEnergy.push_back (energy*MeV) ; + fdEdX_Total.push_back(energyloss*MeV/micrometer); + } + + // Close File + TableFile.close(); + } - } - - //Else File is expected to be from Lise, and LiseColumn gives which model to take else { - // Opening dE/dX file - - ifstream TableFile ; - TableFile.open(Path.c_str()) ; - - if ( !TableFile ) - { - cout << "Failed to open file " << Path << endl; - return; - } - - else - { - cout << "Reading Energy Loss File: " << Path << endl ; - // Reading Data - double energy=0, energyloss=0; - string dummy; - // skipping comment first line - getline(TableFile,dummy); - - while ( TableFile >> energy ) - { - for (int k = 0 ; k < 11 ; k++ ) - { - TableFile >> dummy ; - if (k+1==LiseColumn) energyloss = atof(dummy.c_str()) ; - } - fEnergy.push_back (energy*MeV) ; - fdEdX_Total.push_back(energyloss*MeV/micrometer); - } - - // Close File - TableFile.close(); - } - - + cout << "ERROR : Wrong Source Type" << endl ; } + fInter = new Interpolator( fEnergy , fdEdX_Total ) ; cout << "///////////////////////////////// " << endl ; } diff --git a/NPLib/Tools/NPEnergyLoss.h b/NPLib/Tools/NPEnergyLoss.h index 005b0b2b8ce447f763edf9814a1a25555be16c46..080c3298a0ccd631bff74667bd76eda58f40b028 100644 --- a/NPLib/Tools/NPEnergyLoss.h +++ b/NPLib/Tools/NPEnergyLoss.h @@ -60,10 +60,11 @@ namespace NPL public : // Constructor EnergyLoss(); - EnergyLoss( string Path , // Path of dE/dX table file - int NumberOfSlice , // Low number = Faster, High Number = more accurate / typical: 100 to 1000 - int LiseColumns=0 , // Indicate which model to read in a lise File, set to 0 (Default value) for a SRIM file - int NumberOfMass=1 ); // Number of mass A of the nucleus (used only for Lise file) + EnergyLoss( string Path , // Path of dE/dX table file + string Source , // Type of file : Geant4,Lise,SRIM + int NumberOfSlice , // Low number = Faster, High Number = more accurate / typical: 100 to 1000 + int LiseColumns=0 , // Indicate which model to read in a lise File, set to 0 (Default value) for a SRIM file + int NumberOfMass=1 );// Number of mass A of the nucleus (used only for Lise file) ~EnergyLoss(); private : // dE/dX, slice parameter diff --git a/NPSimulation/src/EventGeneratorBeam.cc b/NPSimulation/src/EventGeneratorBeam.cc index b3da7f51cfae0e30bb09efac0fb64eab9350296d..a8c8db2784d1220bd6c98a6e5744e76339d8e86f 100644 --- a/NPSimulation/src/EventGeneratorBeam.cc +++ b/NPSimulation/src/EventGeneratorBeam.cc @@ -185,6 +185,11 @@ void EventGeneratorBeam::ReadConfiguration(string Path) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void EventGeneratorBeam::GenerateEvent(G4Event* anEvent, G4ParticleGun* particleGun) { + //--------------write the DeDx Table ------------------- + if(m_Target!=0) + m_Target->WriteDEDXTable(m_particle ,0, m_BeamEnergy+4*m_BeamEnergySpread); + + m_InitConditions->Clear(); /////////////////////////////////////////////////////////////////////// diff --git a/NPSimulation/src/EventGeneratorTransfert.cc b/NPSimulation/src/EventGeneratorTransfert.cc index db689adb86849fbe9e54a42e5c13ccd3bcc52c79..894f882a5727d920bd1ac0f2b1f87dc7c838b37c 100644 --- a/NPSimulation/src/EventGeneratorTransfert.cc +++ b/NPSimulation/src/EventGeneratorTransfert.cc @@ -326,6 +326,27 @@ while(ReadingStatus){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* particleGun) { + // If first time, write the DeDx table + if(anEvent->GetEventID()==0) + { + //-------------- Before living, wrtie the DeDx Table ------------------- + + G4int LightZx = m_Reaction->GetNucleus3()->GetZ() ; + G4int LightAx = m_Reaction->GetNucleus3()->GetA() ; + + G4int BeamZx = m_Reaction->GetNucleus1()->GetZ() ; + G4int BeamAx = m_Reaction->GetNucleus1()->GetA() ; + + if(m_Target!=0) + { + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZx,LightAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread); + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(BeamZx,BeamAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread); + } + + } + + + // Clear contents of Precedent event (now stored in ROOTOutput) m_InitConditions->Clear(); diff --git a/NPSimulation/src/EventGeneratorTransfertToResonance.cc b/NPSimulation/src/EventGeneratorTransfertToResonance.cc index 06e8d7de224b836008e544cb366405389235aa49..270f2eadae742b4d751c5211cbee822406692ce2 100644 --- a/NPSimulation/src/EventGeneratorTransfertToResonance.cc +++ b/NPSimulation/src/EventGeneratorTransfertToResonance.cc @@ -69,7 +69,7 @@ EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventGeneratorTransfertToResonance::~EventGeneratorTransfertToResonance() { - //------------- Default Destructor ------------ + //------------- Default Destructor ------------ delete m_InitConditions; delete m_Reaction ; } @@ -77,13 +77,7 @@ EventGeneratorTransfertToResonance::~EventGeneratorTransfertToResonance() void EventGeneratorTransfertToResonance::SetTarget(Target* Target) { if(Target!=0) - { m_Target = Target; - G4int LightZ = m_Reaction->GetNucleus3()->GetZ() ; - G4int LightA = m_Reaction->GetNucleus3()->GetA() ; - m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZ,LightA, 0.) ,0, m_BeamEnergy); - } - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance( string name1 , @@ -377,9 +371,24 @@ while(ReadingStatus){ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4ParticleGun* particleGun) { - G4int LightZx = m_Reaction->GetNucleus3()->GetZ() ; - G4int LightAx = m_Reaction->GetNucleus3()->GetA() ; - m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZx,LightAx, 0.) ,0, 550); + // If first time, write the DeDx table + if(anEvent->GetEventID()==0) + { + //-------------- Before living, wrtie the DeDx Table ------------------- + + G4int LightZx = m_Reaction->GetNucleus3()->GetZ() ; + G4int LightAx = m_Reaction->GetNucleus3()->GetA() ; + + G4int BeamZx = m_Reaction->GetNucleus1()->GetZ() ; + G4int BeamAx = m_Reaction->GetNucleus1()->GetA() ; + + if(m_Target!=0) + { + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZx,LightAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread); + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(BeamZx,BeamAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread); + } + + } // Clear contents of Precedent event (now stored in ROOTOutput) m_InitConditions->Clear(); diff --git a/NPSimulation/src/Target.cc b/NPSimulation/src/Target.cc index 122bbe8bf06c9e69ad45939b3cbe61ddc2d1962b..51eba32448deaa208974316e2729fddc5e7b8902 100644 --- a/NPSimulation/src/Target.cc +++ b/NPSimulation/src/Target.cc @@ -653,8 +653,7 @@ void Target::WriteDEDXTable(G4ParticleDefinition* Particle ,G4double Emin,G4doub // G4double dedx = emCalculator.ComputeTotalDEDX(E, Particle, m_WindowsMaterial); G4double dedx = emCalculator.ComputeDEDX( E, Particle , "ionIoni", m_WindowsMaterial); -cout << dedx<<endl ; - File << E/MeV << "\t" << dedx/(MeV/micrometer) << endl ; + File << E/MeV << "\t" << dedx/(MeV/micrometer) << endl ; } } File.close();