diff --git a/Armory/AnalysisLib.h b/Armory/AnalysisLib.h index c689b0c..c739d55 100644 --- a/Armory/AnalysisLib.h +++ b/Armory/AnalysisLib.h @@ -53,6 +53,18 @@ TGraph * TrapezoidFilter(TGraph * trace, int baseLineEnd = 80, int riseTime = 10 return trapezoid; } +bool isEmptyOrSpaces(const std::string& str) { + if (str.empty()) { + return true; + } + for (char c : str) { + if (!std::isspace(c)) { + return false; + } + } + return true; +} + std::vector SplitStr(std::string tempLine, std::string splitter, int shift = 0){ std::vector output; diff --git a/Armory/ClassDetGeo.h b/Armory/ClassDetGeo.h index c401a96..e79b3db 100644 --- a/Armory/ClassDetGeo.h +++ b/Armory/ClassDetGeo.h @@ -97,7 +97,7 @@ public: bool LoadDetectorGeo(TString fileName, bool verbose = true); bool LoadDetectorGeo(TMacro * macro, bool verbose = true); - void PrintDetGeo( bool printAll = true) const; + void Print( bool printAll = true) const; private: @@ -138,7 +138,11 @@ inline bool DetGeo::LoadDetectorGeo(TMacro * macro, bool verbose){ for( int i = 0 ; i < numLine; i++){ - std::vector str = AnalysisLib::SplitStr(macro->GetListOfLines()->At(i)->GetName(), " "); + std::string line = macro->GetListOfLines()->At(i)->GetName(); + + if( AnalysisLib::isEmptyOrSpaces(line) ) continue; + + std::vector str = AnalysisLib::SplitStr(line, " "); // printf("%3d | %s\n", i, str[0].c_str()); @@ -150,20 +154,20 @@ inline bool DetGeo::LoadDetectorGeo(TMacro * macro, bool verbose){ } if( detFlag == 0 ){ - if ( i == 0 ) { + if ( detLine == 0 ) { Bfield = atof(str[0].c_str()); BfieldSign = Bfield > 0 ? 1: -1; } - if ( i == 1 ) BfieldTheta = atof(str[0].c_str()); - if ( i == 2 ) bore = atof(str[0].c_str()); - if ( i == 3 ) recoilPos = atof(str[0].c_str()); - if ( i == 4 ) recoilInnerRadius = atof(str[0].c_str()); - if ( i == 5 ) recoilOuterRadius = atof(str[0].c_str()); - if ( i == 6 ) isCoincidentWithRecoil = str[0] == "false" ? false: true; - if ( i == 7 ) recoilPos1 = atof(str[0].c_str()); - if ( i == 8 ) recoilPos2 = atof(str[0].c_str()); - if ( i == 9 ) elumPos1 = atof(str[0].c_str()); - if ( i == 10 ) elumPos2 = atof(str[0].c_str()); + if ( detLine == 1 ) BfieldTheta = atof(str[0].c_str()); + if ( detLine == 2 ) bore = atof(str[0].c_str()); + if ( detLine == 3 ) recoilPos = atof(str[0].c_str()); + if ( detLine == 4 ) recoilInnerRadius = atof(str[0].c_str()); + if ( detLine == 5 ) recoilOuterRadius = atof(str[0].c_str()); + if ( detLine == 6 ) isCoincidentWithRecoil = str[0] == "false" ? false: true; + if ( detLine == 7 ) recoilPos1 = atof(str[0].c_str()); + if ( detLine == 8 ) recoilPos2 = atof(str[0].c_str()); + if ( detLine == 9 ) elumPos1 = atof(str[0].c_str()); + if ( detLine == 10 ) elumPos2 = atof(str[0].c_str()); } if( detFlag == 1){ @@ -177,7 +181,6 @@ inline bool DetGeo::LoadDetectorGeo(TMacro * macro, bool verbose){ if ( detLine == 7 ) array1.detFaceOut = str[0] == "Out" ? true : false; if ( detLine == 8 ) array1.mDet = atoi(str[0].c_str()); if ( detLine >= 9 ) array1.pos.push_back(atof(str[0].c_str())); - detLine ++; } if( detFlag == 2){ @@ -192,30 +195,29 @@ inline bool DetGeo::LoadDetectorGeo(TMacro * macro, bool verbose){ if ( detLine == 8 ) array2.detFaceOut = str[0] == "Out" ? true : false; if ( detLine == 9 ) array2.mDet = atoi(str[0].c_str()); if ( detLine >= 10 ) array2.pos.push_back(atof(str[0].c_str())); - detLine ++; } + detLine ++; } array1.DeduceAbsolutePos(); + array2.DeduceAbsolutePos(); zMin = array1.zMin; zMax = array1.zMax; if( use2ndArray) { - array2.DeduceAbsolutePos(); - zMax = TMath::Min(array1.zMax, array2.zMax); zMin = TMath::Min(array1.zMin, array2.zMin); } - if( verbose ) PrintDetGeo(false); + if( verbose ) Print(false); return true; } -inline void DetGeo::PrintDetGeo(bool printAll) const{ +inline void DetGeo::Print(bool printAll) const{ printf("=====================================================\n"); printf(" B-field: %8.2f T, Theta : %6.2f deg \n", Bfield, BfieldTheta); @@ -223,22 +225,13 @@ inline void DetGeo::PrintDetGeo(bool printAll) const{ printf(" +---- field angle != 0 is not supported!!! \n"); } printf(" Recoil detector pos: %8.2f mm, radius: %6.2f - %6.2f mm \n", recoilPos, recoilInnerRadius, recoilOuterRadius); - if( printAll ){ - printf("------------------------------------- Detector Position \n"); - array1.PrintArray(); - if( use2ndArray){ - printf("--------------------------------- 2nd Detector Position \n"); - array2.PrintArray(); - } - }else{ - if( use2ndArray){ - printf("--------------------------------- 2nd Detector Position \n"); - array2.PrintArray(); - }else{ - printf("------------------------------------- Detector Position \n"); - array1.PrintArray(); - } + printf("------------------------------------- Detector Position \n"); + array1.PrintArray(); + + if( printAll || use2ndArray){ + printf("--------------------------------- 2nd Detector Position \n"); + array2.PrintArray(); } if( elumPos1 != 0 || elumPos2 != 0 || recoilPos1 != 0 || recoilPos2 != 0){ diff --git a/Armory/ClassReactionConfig.h b/Armory/ClassReactionConfig.h index a90b89a..a6a552a 100644 --- a/Armory/ClassReactionConfig.h +++ b/Armory/ClassReactionConfig.h @@ -13,6 +13,33 @@ #include "AnalysisLib.h" +struct Recoil { + + unsigned short lightA, lightZ; + unsigned short heavyA, heavyZ; + + std::string lightStoppingPowerFile = ""; ///stopping_power_for_light_recoil + std::string heavyStoppingPowerFile = ""; ///stopping_power_for_heavy_recoil + + bool isDecay = false; ///isDacay + unsigned short decayA = 0; ///decayNucleus_A + unsigned short decayZ = 0; ///decayNucleus_Z + + void Print() const { + printf(" light : A = %3d, Z = %2d \n", lightA, lightZ); + printf(" heavy : A = %3d, Z = %2d \n", heavyA, heavyZ); + + printf(" light stopping file : %s \n", lightStoppingPowerFile.c_str()); + printf(" heavy stopping file : %s \n", heavyStoppingPowerFile.c_str()); + printf(" is simulate decay : %s \n", isDecay ? "Yes" : "No"); + if( isDecay ){ + printf(" heavy decay : A = %d, Z = %d \n", decayA, decayZ); + } + } + +}; + + class ReactionConfig { public: @@ -21,11 +48,8 @@ public: ReactionConfig(TMacro * macro){ LoadReactionConfig(macro);} ~ReactionConfig(){} - int beamA, beamZ; - int targetA, targetZ; - int recoilLightA, recoilLightZ; - int recoilHeavyA, recoilHeavyZ; - + unsigned short beamA, beamZ; + float beamEx; ///excitation_energy_of_A[MeV] float beamEnergy; ///MeV/u float beamEnergySigma; ///beam-energy_sigma_in_MeV/u float beamAngle; ///beam-angle_in_mrad @@ -33,18 +57,16 @@ public: float beamX; ///x_offset_of_Beam_in_mm float beamY; ///y_offset_of_Beam_in_mm - int numEvents; ///number_of_Event_being_generated + unsigned short targetA, targetZ; bool isTargetScattering; ///isTargetScattering float targetDensity; ///target_density_in_g/cm3 float targetThickness; ///targetThickness_in_cm std::string beamStoppingPowerFile; ///stopping_power_for_beam - std::string recoilLightStoppingPowerFile; ///stopping_power_for_light_recoil - std::string recoilHeavyStoppingPowerFile; ///stopping_power_for_heavy_recoil - bool isDecay; ///isDacay - int heavyDecayA; ///decayNucleus_A - int heavyDecayZ; ///decayNucleus_Z + + Recoil recoil1, recoil2; + + int numEvents; ///number_of_Event_being_generated bool isRedo; ///isReDo - std::vector beamEx; ///excitation_energy_of_A[MeV] void SetReactionSimple(int beamA, int beamZ, int targetA, int targetZ, @@ -53,7 +75,7 @@ public: bool LoadReactionConfig(TString fileName); bool LoadReactionConfig(TMacro * macro); - void PrintReactionConfig() const; + void Print() const; private: @@ -67,10 +89,11 @@ inline void ReactionConfig::SetReactionSimple(int beamA, int beamZ, this->beamZ = beamZ; this->targetA = targetA; this->targetZ = targetZ; - this->recoilLightA = recoilA; - this->recoilLightZ = recoilZ; - recoilHeavyA = this->beamA + this->targetA - recoilLightA; - recoilHeavyZ = this->beamZ + this->targetZ - recoilLightZ; + + this->recoil1.lightA = recoilA; + this->recoil1.lightZ = recoilZ; + recoil1.heavyA = this->beamA + this->targetA - recoil1.lightA; + recoil1.heavyZ = this->beamZ + this->targetZ - recoil1.lightZ; beamEnergy = beamEnergy_AMeV; beamEnergySigma = 0; @@ -101,93 +124,113 @@ inline bool ReactionConfig::LoadReactionConfig(TMacro * macro){ if( macro == NULL ) return false; + int recoilFlag = 0; + int recoilLine = 0; + int numLine = macro->GetListOfLines()->GetSize(); for( int i = 0; i < numLine; i ++){ - std::vector str =AnalysisLib::SplitStr(macro->GetListOfLines()->At(i)->GetName(), " "); + std::string line = macro->GetListOfLines()->At(i)->GetName(); + if( AnalysisLib::isEmptyOrSpaces(line) ) continue; - ///printf("%d | %s\n", i, str[0].c_str()); + std::vector str =AnalysisLib::SplitStr(line, " "); + // printf("%d |%s|%d|%d\n", i, str[0].c_str(), recoilFlag, recoilLine); - if( str[0].find_first_of("#") == 0 ) break; + if( str[0].find("####") != std::string::npos ) break; + if( str[0].find("#===") != std::string::npos ) { + recoilFlag ++; + recoilLine = 0; + continue; + } - if( i == 0 ) beamA = atoi(str[0].c_str()); - if( i == 1 ) beamZ = atoi(str[0].c_str()); - if( i == 2 ) targetA = atoi(str[0].c_str()); - if( i == 3 ) targetZ = atoi(str[0].c_str()); - if( i == 4 ) recoilLightA = atoi(str[0].c_str()); - if( i == 5 ) recoilLightZ = atoi(str[0].c_str()); - if( i == 6 ) beamEnergy = atof(str[0].c_str()); - if( i == 7 ) beamEnergySigma = atof(str[0].c_str()); - if( i == 8 ) beamAngle = atof(str[0].c_str()); - if( i == 9 ) beamAngleSigma = atof(str[0].c_str()); - if( i == 10 ) beamX = atof(str[0].c_str()); - if( i == 11 ) beamY = atof(str[0].c_str()); - if( i == 12 ) numEvents = atoi(str[0].c_str()); - if( i == 13 ) { - if( str[0].compare("false") == 0 ) isTargetScattering = false; - if( str[0].compare("true") == 0 ) isTargetScattering = true; + if( recoilFlag == 0 ){ + if( recoilLine == 0 ) beamA = atoi(str[0].c_str()); + if( recoilLine == 1 ) beamZ = atoi(str[0].c_str()); + if( recoilLine == 2 ) beamEx = atoi(str[0].c_str()); + + if( recoilLine == 3 ) beamEnergy = atof(str[0].c_str()); + if( recoilLine == 4 ) beamEnergySigma = atof(str[0].c_str()); + if( recoilLine == 5 ) beamAngle = atof(str[0].c_str()); + if( recoilLine == 6 ) beamAngleSigma = atof(str[0].c_str()); + if( recoilLine == 7 ) beamX = atof(str[0].c_str()); + if( recoilLine == 8 ) beamY = atof(str[0].c_str()); + + if( recoilLine == 9 ) targetA = atoi(str[0].c_str()); + if( recoilLine == 10 ) targetZ = atoi(str[0].c_str()); + + if( recoilLine == 11 ) isTargetScattering = str[0].compare("true") == 0 ? true: false; + if( recoilLine == 12 ) targetDensity = atof(str[0].c_str()); + if( recoilLine == 13 ) targetThickness = atof(str[0].c_str()); + if( recoilLine == 14 ) beamStoppingPowerFile = str[0]; + + if( recoilLine == 15 ) numEvents = atoi(str[0].c_str()); + if( recoilLine == 16 ) isRedo = str[0].compare("true" ) == 0 ? true : false; } - if( i == 14 ) targetDensity = atof(str[0].c_str()); - if( i == 15 ) targetThickness = atof(str[0].c_str()); - if( i == 16 ) beamStoppingPowerFile = str[0]; - if( i == 17 ) recoilLightStoppingPowerFile = str[0]; - if( i == 18 ) recoilHeavyStoppingPowerFile = str[0]; - if( i == 19 ) { - if( str[0].compare("false") == 0 ) isDecay = false; - if( str[0].compare("true") == 0 ) isDecay = true; + + if( recoilFlag == 1 ){ + + if( recoilLine == 0 ) recoil1.lightA = atoi(str[0].c_str()); + if( recoilLine == 1 ) recoil1.lightZ = atoi(str[0].c_str()); + if( recoilLine == 2 ) recoil1.lightStoppingPowerFile = str[0]; + if( recoilLine == 3 ) recoil1.heavyStoppingPowerFile = str[0]; + if( recoilLine == 4 ) recoil1.isDecay = str[0].compare("true") == 0 ? true : false; + if( recoilLine == 5 ) recoil1.decayA = atoi(str[0].c_str()); + if( recoilLine == 6 ) recoil1.decayZ = atoi(str[0].c_str()); + } - if( i == 20 ) heavyDecayA = atoi(str[0].c_str()); - if( i == 21 ) heavyDecayZ = atoi(str[0].c_str()); - if( i == 22 ) { - if( str[0].compare("false") == 0 ) isRedo = false; - if( str[0].compare("true" ) == 0 ) isRedo = true; + + if( recoilFlag == 2 ){ + + if( recoilLine == 0 ) recoil2.lightA = atoi(str[0].c_str()); + if( recoilLine == 1 ) recoil2.lightZ = atoi(str[0].c_str()); + if( recoilLine == 2 ) recoil2.lightStoppingPowerFile = str[0]; + if( recoilLine == 3 ) recoil2.heavyStoppingPowerFile = str[0]; + if( recoilLine == 4 ) recoil2.isDecay = str[0].compare("true") == 0 ? true : false; + if( recoilLine == 5 ) recoil2.decayA = atoi(str[0].c_str()); + if( recoilLine == 6 ) recoil2.decayZ = atoi(str[0].c_str()); + } + + recoilLine ++; - if( i >= 23) { - beamEx.push_back( atof(str[0].c_str()) ); - } } - recoilHeavyA = beamA + targetA - recoilLightA; - recoilHeavyZ = beamZ + targetZ - recoilLightZ; + recoil1.heavyA = beamA + targetA - recoil1.lightA; + recoil1.heavyZ = beamZ + targetZ - recoil1.lightZ; + + recoil2.heavyA = beamA + targetA - recoil2.lightA; + recoil2.heavyZ = beamZ + targetZ - recoil2.lightZ; return true; } -inline void ReactionConfig::PrintReactionConfig() const{ +inline void ReactionConfig::Print() const{ printf("=====================================================\n"); - printf(" beam : A = %3d, Z = %2d \n", beamA, beamZ); - printf(" target : A = %3d, Z = %2d \n", targetA, targetZ); - printf(" light : A = %3d, Z = %2d \n", recoilLightA, recoilLightZ); + printf("number of Simulation Events : %d \n", numEvents); + printf(" is Redo until hit array : %s \n", isRedo ? "Yes" : "No"); + + printf("------------------------------ Beam\n"); + printf(" beam : A = %3d, Z = %2d, Ex = %.2f MeV\n", beamA, beamZ, beamEx); printf(" beam Energy : %.2f +- %.2f MeV/u, dE/E = %5.2f %%\n", beamEnergy, beamEnergySigma, beamEnergySigma/beamEnergy); printf(" Angle : %.2f +- %.2f mrad\n", beamAngle, beamAngleSigma); printf(" offset : (x,y) = (%.2f, %.2f) mmm \n", beamX, beamY); - printf("##### number of Simulation Events : %d \n", numEvents); - + printf("------------------------------ Target\n"); + printf(" target : A = %3d, Z = %2d \n", targetA, targetZ); printf(" is target scattering : %s \n", isTargetScattering ? "Yes" : "No"); - if(isTargetScattering){ printf(" target density : %.f g/cm3\n", targetDensity); printf(" thickness : %.f cm\n", targetThickness); printf(" beam stopping file : %s \n", beamStoppingPowerFile.c_str()); - printf(" recoil light stopping file : %s \n", recoilLightStoppingPowerFile.c_str()); - printf(" recoil heavy stopping file : %s \n", recoilHeavyStoppingPowerFile.c_str()); } - printf(" is simulate decay : %s \n", isDecay ? "Yes" : "No"); - if( isDecay ){ - printf(" heavy decay : A = %d, Z = %d \n", heavyDecayA, heavyDecayZ); - } - printf(" is Redo until hit array : %s \n", isRedo ? "Yes" : "No"); + printf("------------------------------ Recoil-1\n"); recoil1.Print(); - printf(" beam Ex : %.2f MeV \n", beamEx[0]); - for( int i = 1; i < (int) beamEx.size(); i++){ - printf(" %.2f MeV \n", beamEx[i]); - } + printf("------------------------------ Recoil-2\n"); recoil2.Print(); + printf("=====================================================\n"); } diff --git a/Cleopatra/ClassTransfer.h b/Cleopatra/ClassTransfer.h index b2cb4da..e433d2c 100644 --- a/Cleopatra/ClassTransfer.h +++ b/Cleopatra/ClassTransfer.h @@ -30,9 +30,9 @@ public: targetA, targetZ, recoilA, recoilZ, beamEnergy_AMeV); } - TransferReaction(string reactionConfigFile){ + TransferReaction(string configFile){ Inititization(); - SetReactionFromFile(reactionConfigFile); + SetReactionFromFile(configFile); } ~TransferReaction(); @@ -49,12 +49,12 @@ public: void SetExA(double Ex); void SetExB(double Ex); - void SetReactionFromFile(string reactionConfigFile); + void SetReactionFromFile(string configFile); TString GetReactionName(); TString GetReactionName_Latex(); - ReactionConfig GetRectionConfig() { return reactionConfig;} + ReactionConfig GetRectionConfig() { return config;} double GetMass_A() const {return mA + ExA;} double GetMass_a() const {return ma;} @@ -85,7 +85,7 @@ public: private: - ReactionConfig reactionConfig; + ReactionConfig config; string nameA, namea, nameb, nameB; double thetaIN, phiIN; @@ -119,7 +119,7 @@ void TransferReaction::Inititization(){ Setb(1,1); SetB(13,6); TA = 6; - T = TA * reactionConfig.beamA; + T = TA * config.beamA; ExA = 0; ExB = 0; @@ -141,8 +141,8 @@ TransferReaction::~TransferReaction(){ void TransferReaction::SetA(int A, int Z, double Ex = 0){ Isotope temp (A, Z); mA = temp.Mass; - reactionConfig.beamA = A; - reactionConfig.beamZ = Z; + config.beamA = A; + config.beamZ = Z; ExA = Ex; nameA = temp.Name; isReady = false; @@ -152,8 +152,8 @@ void TransferReaction::SetA(int A, int Z, double Ex = 0){ void TransferReaction::Seta(int A, int Z){ Isotope temp (A, Z); ma = temp.Mass; - reactionConfig.targetA = A; - reactionConfig.targetZ = Z; + config.targetA = A; + config.targetZ = Z; namea = temp.Name; isReady = false; isBSet = false; @@ -161,8 +161,8 @@ void TransferReaction::Seta(int A, int Z){ void TransferReaction::Setb(int A, int Z){ Isotope temp (A, Z); mb = temp.Mass; - reactionConfig.recoilLightA = A; - reactionConfig.recoilLightZ = Z; + config.recoil1.lightA = A; + config.recoil1.lightZ = Z; nameb = temp.Name; isReady = false; isBSet = false; @@ -170,8 +170,8 @@ void TransferReaction::Setb(int A, int Z){ void TransferReaction::SetB(int A, int Z){ Isotope temp (A, Z); mB = temp.Mass; - reactionConfig.recoilHeavyA = A; - reactionConfig.recoilHeavyZ = Z; + config.recoil1.heavyA = A; + config.recoil1.heavyZ = Z; nameB = temp.Name; isReady = false; isBSet = true; @@ -179,7 +179,7 @@ void TransferReaction::SetB(int A, int Z){ void TransferReaction::SetIncidentEnergyAngle(double KEA, double theta, double phi){ this->TA = KEA; - this->T = TA * reactionConfig.beamA; + this->T = TA * config.beamA; this->thetaIN = theta; this->phiIN = phi; isReady = false; @@ -189,15 +189,15 @@ void TransferReaction::SetReactionSimple(int beamA, int beamZ, int targetA, int targetZ, int recoilA, int recoilZ, float beamEnergy_AMeV){ - reactionConfig.SetReactionSimple(beamA, beamZ, + config.SetReactionSimple(beamA, beamZ, targetA, targetZ, recoilA, recoilZ, beamEnergy_AMeV); - SetA(reactionConfig.beamA, reactionConfig.beamZ); - Seta(reactionConfig.targetA, reactionConfig.targetZ); - Setb(reactionConfig.recoilLightA, reactionConfig.recoilLightZ); - SetB(reactionConfig.recoilHeavyA, reactionConfig.recoilHeavyZ); - SetIncidentEnergyAngle(reactionConfig.beamEnergy, 0, 0); + SetA(config.beamA, config.beamZ); + Seta(config.targetA, config.targetZ); + Setb(config.recoil1.lightA, config.recoil1.lightZ); + SetB(config.recoil1.heavyA, config.recoil1.heavyZ); + SetIncidentEnergyAngle(config.beamEnergy, 0, 0); CalReactionConstant(); @@ -213,20 +213,20 @@ void TransferReaction::SetExB(double Ex){ isReady = false; } -void TransferReaction::SetReactionFromFile(string reactionConfigFile){ +void TransferReaction::SetReactionFromFile(string configFile){ - if( reactionConfig.LoadReactionConfig(reactionConfigFile) ){ + if( config.LoadReactionConfig(configFile) ){ - SetA(reactionConfig.beamA, reactionConfig.beamZ); - Seta(reactionConfig.targetA, reactionConfig.targetZ); - Setb(reactionConfig.recoilLightA, reactionConfig.recoilLightZ); - SetB(reactionConfig.recoilHeavyA, reactionConfig.recoilHeavyZ); - SetIncidentEnergyAngle(reactionConfig.beamEnergy, 0, 0); + SetA(config.beamA, config.beamZ); + Seta(config.targetA, config.targetZ); + Setb(config.recoil1.lightA, config.recoil1.lightZ); + SetB(config.recoil1.heavyA, config.recoil1.heavyZ); + SetIncidentEnergyAngle(config.beamEnergy, 0, 0); CalReactionConstant(); }else{ - printf("cannot read file %s.\n", reactionConfigFile.c_str()); + printf("cannot read file %s.\n", configFile.c_str()); isReady = false; } @@ -260,9 +260,9 @@ TString TransferReaction::GetReactionName_Latex(){ void TransferReaction::CalReactionConstant(){ if( !isBSet){ - reactionConfig.recoilHeavyA = reactionConfig.beamA + reactionConfig.targetA - reactionConfig.recoilLightA; - reactionConfig.recoilHeavyZ = reactionConfig.beamZ + reactionConfig.targetZ - reactionConfig.recoilLightZ; - Isotope temp (reactionConfig.recoilHeavyA, reactionConfig.recoilHeavyZ); + config.recoil1.heavyA = config.beamA + config.targetA - config.recoil1.lightA; + config.recoil1.heavyZ = config.beamZ + config.targetZ - config.recoil1.lightZ; + Isotope temp (config.recoil1.heavyA, config.recoil1.heavyZ); mB = temp.Mass; isBSet = true; } @@ -355,7 +355,7 @@ std::pair TransferReaction::CalExThetaCM(double e, double z, dou double mass = mb; double massB = mB; double y = e + mass; - double slope = 299.792458 * reactionConfig.recoilLightZ * abs(Bfield) / TMath::TwoPi() * beta / 1000.; // MeV/mm; + double slope = 299.792458 * config.recoil1.lightZ * abs(Bfield) / TMath::TwoPi() * beta / 1000.; // MeV/mm; double alpha = slope/beta; double G = alpha * gamma * beta * perpDist ; double Z = alpha * gamma * beta * z; diff --git a/Cleopatra/Simulation_Helper.C b/Cleopatra/Simulation_Helper.C index e14204e..9f306f2 100644 --- a/Cleopatra/Simulation_Helper.C +++ b/Cleopatra/Simulation_Helper.C @@ -381,12 +381,12 @@ void MyMainFrame::OpenFile(int ID){ if ( ID == 6 ) fileName = "../working/DWBA2.out"; if ( ID == 7 ) fileName = "../working/DWBA2.Xsec.txt"; }else{ - if ( ID == 1 ) fileName = "../working/reactionConfig1.txt"; - if ( ID == 2 ) fileName = "../working/Ex1.txt"; - if ( ID == 3 ) fileName = "../working/DWBA1"; - if ( ID == 5 ) fileName = "../working/DWBA1.in"; - if ( ID == 6 ) fileName = "../working/DWBA1.out"; - if ( ID == 7 ) fileName = "../working/DWBA1.Xsec.txt"; + if ( ID == 1 ) fileName = "../working/reactionConfig.txt"; + if ( ID == 2 ) fileName = "../working/Ex.txt"; + if ( ID == 3 ) fileName = "../working/DWBA"; + if ( ID == 5 ) fileName = "../working/DWBA.in"; + if ( ID == 6 ) fileName = "../working/DWBA.out"; + if ( ID == 7 ) fileName = "../working/DWBA.Xsec.txt"; } if ( ID == 4 ) fileName = "../working/Check_Simulation_Config.txt"; if ( ID == 8 ) fileName = isoFileName; @@ -494,12 +494,12 @@ void MyMainFrame::Command(int ID) { if( ID == 1 ){ - string basicConfig = "reactionConfig1.txt"; + string basicConfig = "reactionConfig.txt"; string heliosDetGeoFile = "detectorGeo.txt"; - string excitationFile = "Ex1.txt"; //when no file, only ground state + string excitationFile = "Ex.txt"; //when no file, only ground state TString ptolemyRoot = ""; // when no file, use isotropic distribution of thetaCM - TString saveFileName = "transfer1.root"; - TString filename = "reaction1.dat"; //when no file, no output + TString saveFileName = "transfer.root"; + TString filename = "reaction.dat"; //when no file, no output if( withDWBA->GetState() ) { ptolemyRoot = "DWBA1.root"; @@ -538,7 +538,7 @@ void MyMainFrame::Command(int ID) { if( isUse2ndArray ){ Check_Simulation("transfer2.root"); }else{ - Check_Simulation("transfer1.root"); + Check_Simulation("transfer.root"); } statusLabel->SetText(" Run Simulation first."); } diff --git a/working/Ex1.txt b/working/Ex.txt similarity index 100% rename from working/Ex1.txt rename to working/Ex.txt diff --git a/working/Ex2.txt b/working/Ex2.txt deleted file mode 100644 index 160e6c1..0000000 --- a/working/Ex2.txt +++ /dev/null @@ -1,6 +0,0 @@ -//Ex relative_xsec SF sigma_in_MeV -//<--- use "//" for line comment -0.000 1.0 1.0 0.0100 -//4.400 1.0 1.0 0.0100 -//4.600 1.0 1.0 0.0100 -#============_End_of_file diff --git a/working/detectorGeo.txt b/working/detectorGeo.txt index d4453f6..e879c64 100644 --- a/working/detectorGeo.txt +++ b/working/detectorGeo.txt @@ -1,6 +1,8 @@ -3.00 //Bfield_[T] 0.00 //Bfield_direction_to_z-axis_[deg]_should_not_use 462.5 //bore_[mm] + + 1000 //recoil_position_+_for_downstream_[mm] 10.0 //inner_radius_of_recoil_detector_[mm] 40.2 //outter_radius_of_recoil_detector_[mm] @@ -9,6 +11,7 @@ false //is_coincident_with_recoil 0 //Recoil_2_position_[mm] 0.00 //Elum_1_position_[mm]_(just_another_recoil_detector_but_for_light_recoil) 0.00 //Elum_2_position_[mm]_when_Elum=0_disable_tree_branch + #===============1st_Array 11.5 //distance_from_axis_[mm] 10.0 //width_of_detector_[mm] @@ -24,7 +27,8 @@ Out //detector_facing_Out_or_In 117.9 176.8 235.8 //5th_det -290.0 +294.0 + #===============2nd_Array false //is_2nd_array_exist_is_use_for_Simulation 11.5 //distance_from_axis_[mm] @@ -42,4 +46,5 @@ Out //detector_facing_Out_or_In 176.8 235.8 //5th_det 290.0 -################## end of file + +################## end of file \ No newline at end of file diff --git a/working/reactionConfig.txt b/working/reactionConfig.txt new file mode 100644 index 0000000..5f0662d --- /dev/null +++ b/working/reactionConfig.txt @@ -0,0 +1,39 @@ +32 //beam_A +14 //beam_Z +0.0 //excitation_energy_of_beam[MeV] +8.8 //beam-energy_in_MeV/u +0.000 //beam-energy_sigma_in_MeV/u +0.000 //beam-angle_in_mrad +0.000 //beam-emittance_in_mrad +0.00 //x_offset_of_Beam_in_mm +0.00 //y_offset_of_Beam_in_mm + +2 //target_A +1 //target_Z +false //isTargetScattering +0.913 //target_density_in_g/cm3 +2.2e-4 //targetThickness_in_cm +../SRIM/20F_in_CD2.txt //stopping_power_for_beam + +100000 //number_of_Event_being_generated +false //Redo_until_hit_array=all_events_hit_array + +#=====reaction_for_1st_Array +1 //recoil_light_A +1 //recoil-light_Z +../SRIM/3H_in_CD2.txt //stopping_power_for_light_recoil +../SRIM/19F_in_CD2.txt //stopping_power_for_heavy_recoil +false //isDacay +32 //decayNucleus_A +14 //decayNucleus_Z + +#=====_reaction_for_2nd_Array_use_ony_when_2nd_array_used +3 //recoil_light_A +2 //recoil-light_Z +../SRIM/3H_in_CD2.txt //stopping_power_for_light_recoil +../SRIM/19F_in_CD2.txt //stopping_power_for_heavy_recoil +false //isDacay +32 //decayNucleus_A +14 //decayNucleus_Z + +################## end of file \ No newline at end of file diff --git a/working/reactionConfig1.txt b/working/reactionConfig1.txt deleted file mode 100644 index 5cee6fe..0000000 --- a/working/reactionConfig1.txt +++ /dev/null @@ -1,25 +0,0 @@ -32 //beam_A -14 //beam_Z -2 //target_A -1 //target_Z -1 //recoil_light_A -1 //recoil-light_Z -8.8 //beam-energy_in_MeV/u -0.000 //beam-energy_sigma_in_MeV/u -0.000 //beam-angle_in_mrad -0.000 //beam-emittance_in_mrad -0.00 //x_offset_of_Beam_in_mm -0.00 //y_offset_of_Beam_in_mm -10000 //number_of_Event_being_generated -false //isTargetScattering -0.913 //target_density_in_g/cm3 -2.2e-4 //targetThickness_in_cm -../SRIM/20F_in_CD2.txt //stopping_power_for_beam -../SRIM/3H_in_CD2.txt //stopping_power_for_light_recoil -../SRIM19F_in_CD2.txt //stopping_power_for_heavy_recoil -false //isDacay -32 //decayNucleus_A -14 //decayNucleus_Z -false //isReDo -0.0 //List_of_excitation_energy_of_A[MeV] -#===== end of file diff --git a/working/reactionConfig2.txt b/working/reactionConfig2.txt deleted file mode 100644 index 801cd8c..0000000 --- a/working/reactionConfig2.txt +++ /dev/null @@ -1,25 +0,0 @@ -16 //beam_A -8 //beam_Z -2 //target_A -1 //target_Z -1 //recoil_light_A -1 //recoil-light_Z -10.0 //beam-energy_in_MeV/u -0.000 //beam-energy_sigma_in_MeV/u -0.000 //beam-angle_in_mrad -0.000 //beam-emittance_in_mrad -0.00 //x_offset_of_Beam_in_mm -0.00 //y_offset_of_Beam_in_mm -100000 //number_of_Event_being_generated -false //isTargetScattering -0.913 //target_density_in_g/cm3 -2.2e-4 //targetThickness_in_cm -../SRIM/20F_in_CD2.txt //stopping_power_for_beam -../SRIM/3H_in_CD2.txt //stopping_power_for_light_recoil -../SRIM19F_in_CD2.txt //stopping_power_for_heavy_recoil -false //isDacay -32 //decayNucleus_A -14 //decayNucleus_Z -false //isReDo -0.0 //List_of_excitation_energy_of_A[MeV] -#===== end of file