diff --git a/Inputs/EventGenerator/sofia.reaction b/Inputs/EventGenerator/sofia.reaction index 88336f892654a72b7a0c28382f21528cf40d9bc7..58a92aeae479129b1f4785e32d4ca92d29e10ad2 100644 --- a/Inputs/EventGenerator/sofia.reaction +++ b/Inputs/EventGenerator/sofia.reaction @@ -3,31 +3,31 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%Beam energy given in MeV ; Excitation in MeV ; emmitance in rad Beam - Particle= 238U + Particle= 189Pb Energy= 166000 SigmaEnergy= 2 - SigmaX= 1 cm - SigmaY= 1 cm + SigmaX= 11 mm + SigmaY= 5 mm SigmaThetaX= 0 SigmaPhiY= 0 MeanThetaX= 0 - MeanPhiY= 0 - MeanX= 0 - MeanY= 0 + MeanPhiY= 0.17 deg + MeanX= 11 mm + MeanY= -1.4 mm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TwoBodyReaction - Beam= 238U + Beam= 189Pb Target= 208Pb - Light= 208Pb - Heavy= 238U - ExcitationEnergyLight= 0.0 - ExcitationEnergyHeavy= 15.0 + Light= 189Pb + Heavy= 208Pb + ExcitationEnergyLight= 15.0 + ExcitationEnergyHeavy= 0.0 CrossSectionPath= sofia.txt CS ShootLight= 1 ShootHeavy= 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FissionDecay - CompoundNucleus= 238U + CompoundNucleus= 189Pb FissionModel= GEF VamosChargeStates= 0 Shoot_FF= 1 diff --git a/NPLib/Detectors/Sofia/TSofFissionFragment.cxx b/NPLib/Detectors/Sofia/TSofFissionFragment.cxx index 84620fb2963f753778fb101ea6cb2a16dc25c7e7..53be42bac83cd1d2b1727beddc71a5ac6b8f5c96 100644 --- a/NPLib/Detectors/Sofia/TSofFissionFragment.cxx +++ b/NPLib/Detectors/Sofia/TSofFissionFragment.cxx @@ -55,8 +55,12 @@ void TSofFissionFragment::Clear() { fFF_ThetaIn.clear(); fFF_TofPosX.clear(); fFF_TofPosY.clear(); - fFF_MwpcPosX.clear(); - fFF_MwpcPosY.clear(); + fFF_PosX1.clear(); + fFF_PosX2.clear(); + fFF_PosX3.clear(); + fFF_PosY1.clear(); + fFF_PosY2.clear(); + fFF_PosY3.clear(); fFF_Zsum = -1; fFF_IntZsum = -1; diff --git a/NPLib/Detectors/Sofia/TSofFissionFragment.h b/NPLib/Detectors/Sofia/TSofFissionFragment.h index c277c833d18d890291da04afa8fad4a049dc42bb..c265a6ccaf4da076973a8a0fb059595cdb9ced02 100644 --- a/NPLib/Detectors/Sofia/TSofFissionFragment.h +++ b/NPLib/Detectors/Sofia/TSofFissionFragment.h @@ -46,8 +46,12 @@ class TSofFissionFragment : public TObject { vector<double> fFF_ThetaIn; vector<double> fFF_TofPosX; vector<double> fFF_TofPosY; - vector<double> fFF_MwpcPosX; - vector<double> fFF_MwpcPosY; + vector<double> fFF_PosX1; + vector<double> fFF_PosX2; + vector<double> fFF_PosX3; + vector<double> fFF_PosY1; + vector<double> fFF_PosY2; + vector<double> fFF_PosY3; double fFF_Zsum; int fFF_IntZsum; @@ -87,12 +91,20 @@ class TSofFissionFragment : public TObject { inline void SetThetaIn(double val){fFF_ThetaIn.push_back(val);};//! inline void SetTofPosX(double val){fFF_TofPosX.push_back(val);};//! inline void SetTofPosY(double val){fFF_TofPosY.push_back(val);};//! - inline void SetMwpcPosX(double val){fFF_MwpcPosX.push_back(val);};//! - inline void SetMwpcPosY(double val){fFF_MwpcPosY.push_back(val);};//! + inline void SetPosX1(double val){fFF_PosX1.push_back(val);};//! + inline void SetPosX2(double val){fFF_PosX2.push_back(val);};//! + inline void SetPosX3(double val){fFF_PosX3.push_back(val);};//! + inline void SetPosY1(double val){fFF_PosY1.push_back(val);};//! + inline void SetPosY2(double val){fFF_PosY2.push_back(val);};//! + inline void SetPosY3(double val){fFF_PosY3.push_back(val);};//! ////////////////////// GETTERS //////////////////////// int GetMult() {return fFF_Z.size();}//! + int GetMultTofPos() {return fFF_TofPosY.size();}//! + int GetMultMwpc1() {return fFF_PosY1.size();}//! + int GetMultMwpc2() {return fFF_PosY2.size();}//! + int GetMultMwpc3() {return fFF_PosY3.size();}//! inline double GetZsum() const {return fFF_Zsum;}//! inline int GetIntZsum() const {return fFF_IntZsum;}//! inline double GetZ(int i) const {return fFF_Z[i];}//! @@ -107,8 +119,12 @@ class TSofFissionFragment : public TObject { inline double GetThetaIn(int i) const {return fFF_ThetaIn[i];}//! inline double GetTofPosX(int i) const {return fFF_TofPosX[i];}//! inline double GetTofPosY(int i) const {return fFF_TofPosY[i];}//! - inline double GetMwpcPosX(int i) const {return fFF_MwpcPosX[i];}//! - inline double GetMwpcPosY(int i) const {return fFF_MwpcPosY[i];}//! + inline double GetPosX1(int i) const {return fFF_PosX1[i];}//! + inline double GetPosX2(int i) const {return fFF_PosX2[i];}//! + inline double GetPosX3(int i) const {return fFF_PosX3[i];}//! + inline double GetPosY1(int i) const {return fFF_PosY1[i];}//! + inline double GetPosY2(int i) const {return fFF_PosY2[i];}//! + inline double GetPosY3(int i) const {return fFF_PosY3[i];}//! ////////////////////////////////////////////////////////////// diff --git a/NPLib/Physics/NPFissionDecay.cxx b/NPLib/Physics/NPFissionDecay.cxx index e476e2292f2ae4a252b3fa5003363c3106d77221..5b7cb1f7a1b58985191d8973e0d38796251409d7 100644 --- a/NPLib/Physics/NPFissionDecay.cxx +++ b/NPLib/Physics/NPFissionDecay.cxx @@ -92,8 +92,8 @@ bool NPL::FissionDecay::GenerateEvent(string CompoundName, double MEx,double MEK TVector3 Momentum(MPx,MPy,MPz); Momentum.Unit(); - double Theta = Momentum.Theta(); - double Phi = Momentum.Phi(); + double ThetaCN = Momentum.Theta(); + double PhiCN = Momentum.Phi(); double Lfis = 0; m_Compound = NPL::Particle(CompoundName); @@ -102,7 +102,7 @@ bool NPL::FissionDecay::GenerateEvent(string CompoundName, double MEx,double MEK if(m_FissionModelName=="GEF"){ if(m_FissionModel->IsValid(m_Compound.GetZ(), m_Compound.GetA())){ worked=true; - m_FissionModel->InitCompound(MEx,MEK,Lfis,Theta,Phi); + m_FissionModel->InitCompound(MEx,MEK,Lfis,ThetaCN,PhiCN); m_FissionModel->Treat(); int Ah = m_FissionModel->GetAffh(); @@ -146,14 +146,17 @@ bool NPL::FissionDecay::GenerateEvent(string CompoundName, double MEx,double MEK double Phil = m_FissionModel->GetPhffl(); double Phih = m_FissionModel->GetPhffh(); + TVector3 uxy = TVector3(cos(TMath::Pi()/2-PhiCN), -sin(TMath::Pi()/2-PhiCN), 0); TVector3 Momentuml = Pl * TVector3(sin(Thetal)*cos(Phil), sin(Thetal)*sin(Phil), cos(Thetal)); + //Momentuml.Rotate(-ThetaCN, uxy); TVector3 Momentumh = Ph * TVector3(sin(Thetah)*cos(Phih), sin(Thetah)*sin(Phih), cos(Thetah)); - + //Momentumh.Rotate(-ThetaCN, uxy); + DPx.push_back(Momentuml.X()); DPx.push_back(Momentumh.X()); DPy.push_back(Momentuml.Y()); diff --git a/NPSimulation/Core/MaterialManager.cc b/NPSimulation/Core/MaterialManager.cc index 554581bf1772db7f0d1868bd8497ca0f4324eac9..8ae1b918cf0e62b8ef8e83c25206635079bffff2 100644 --- a/NPSimulation/Core/MaterialManager.cc +++ b/NPSimulation/Core/MaterialManager.cc @@ -985,6 +985,48 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name, return material; } + else if (Name == "Al1050") { + if (!density) + density = 2.71 * g / cm3; + G4Material* material = new G4Material("NPS_" + Name, density, 2); + material->AddElement(GetElementFromLibrary("Al"), 99.5/100.); + // To get to 100% + material->AddElement(GetElementFromLibrary("Fe"), 0.5/100.); + // Not 100% from wiki... + // material->AddElement(GetElementFromLibrary("Cu"), 0.05/100.); + // material->AddElement(GetElementFromLibrary("Fe"), 0.4/100.); + // material->AddElement(GetElementFromLibrary("Mg"), 0.05/100.); + // material->AddElement(GetElementFromLibrary("Mn"), 0.05/100.); + // material->AddElement(GetElementFromLibrary("Si"), 0.25/100.); + // material->AddElement(GetElementFromLibrary("Ti"), 0.03/100.); + // material->AddElement(GetElementFromLibrary("V"), 0.05/100.); + // material->AddElement(GetElementFromLibrary("Zn"), 0.05/100.); + m_Material[Name] = material; + return material; + } + + else if (Name == "Al5754") { + if (!density) + density = 2.67 * g / cm3; + G4Material* material = new G4Material("NPS_" + Name, density, 2); + //Realistic + material->AddElement(GetElementFromLibrary("Al"), 97/100.); + material->AddElement(GetElementFromLibrary("Mg"), 3/100.); + // Not 100% from Wiki... + // material->AddElement(GetElementFromLibrary("Al"), 97.4/100.); + // material->AddElement(GetElementFromLibrary("Cr"), 0.3/100.); + // material->AddElement(GetElementFromLibrary("Cu"), 0.1/100.); + // material->AddElement(GetElementFromLibrary("Fe"), 0.4/100.); + // material->AddElement(GetElementFromLibrary("Mg"), 3.6/100.); + // material->AddElement(GetElementFromLibrary("Mn"), 0.5/100.); + // material->AddElement(GetElementFromLibrary("Si"), 0.4/100.); + // material->AddElement(GetElementFromLibrary("Ti"), 0.15/100.); + // material->AddElement(GetElementFromLibrary("Zn"), 0.2/100.); + m_Material[Name] = material; + return material; + } + + else if (Name == "NE213") { if (!density) density = 0.874 * g / cm3; @@ -1194,7 +1236,6 @@ G4Material* MaterialManager::GetGasFromLibrary(string Name, double Pressure, return material; } - else { exit(1); } diff --git a/NPSimulation/Core/SteppingAction.cc b/NPSimulation/Core/SteppingAction.cc index eb2e65e8b5a5da67e25ffd4aeeab17434919334c..2069571a8c818c8b9c22889e9a09327f81f38ca8 100644 --- a/NPSimulation/Core/SteppingAction.cc +++ b/NPSimulation/Core/SteppingAction.cc @@ -6,7 +6,8 @@ *****************************************************************************/ /***************************************************************************** - * Original Author: ValerianAlcindor contact address: valcindor@@ikp.tu-darmstadt.de + * Original Author: ValerianAlcindor contact address: + *valcindor@@ikp.tu-darmstadt.de * * * Creation Date : September 2021 * * Last update : * diff --git a/NPSimulation/Detectors/Sofia/CMakeLists.txt b/NPSimulation/Detectors/Sofia/CMakeLists.txt index 1cb926c219ae1cb8e2c2e8303776773bdab54e4d..f4c4de3d336c3033aa36cb7cdffd4d68e1b16c77 100644 --- a/NPSimulation/Detectors/Sofia/CMakeLists.txt +++ b/NPSimulation/Detectors/Sofia/CMakeLists.txt @@ -1,2 +1,4 @@ +if(Geant4_gdml_FOUND) add_library(NPSSofTofW SHARED SofTofW.cc) target_link_libraries(NPSSofTofW NPSCore ${ROOT_LIBRARIES} ${Geant4_LIBRARIES} ${NPLib_LIBRARIES} -lNPSofia) +endif() diff --git a/NPSimulation/Detectors/Sofia/SofTofW.cc b/NPSimulation/Detectors/Sofia/SofTofW.cc index b9b1df7e50e4944bc5f74e1b41f580ff912a23aa..f4643859d8c48a6ffca53aa21f9dd9a1f3e963cf 100644 --- a/NPSimulation/Detectors/Sofia/SofTofW.cc +++ b/NPSimulation/Detectors/Sofia/SofTofW.cc @@ -26,6 +26,7 @@ //G4 Geometry object #include "G4Tubs.hh" #include "G4Box.hh" +#include "G4SubtractionSolid.hh" //G4 sensitive #include "G4SDManager.hh" @@ -92,9 +93,14 @@ SofTofW::SofTofW(){ m_TofScorer = 0; m_PlasticTof = 0; m_GLAD= 0; + m_VacuumPipe= 0; m_TofWall = 0; m_Build_GLAD= 0; + m_Build_VacuumPipe= 0; + m_VacuumPipeX= 0; + m_VacuumPipeY= 0; + m_VacuumPipeZ= 0; m_GLAD_MagField = 0; m_GLAD_DistanceFromTarget = 0; @@ -247,18 +253,48 @@ new G4PVPlacement(0,Tv, return m_TwinMusic; }*/ +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4AssemblyVolume* SofTofW::BuildVacuumPipe(){ + if(!m_VacuumPipe){ + m_VacuumPipe = new G4AssemblyVolume; + + G4Tubs* tube = new G4Tubs("tube",8.*cm,15*cm,155./2*cm,0,360*deg); + + G4Box* box_int = new G4Box("box_int",22./2*cm,22./2*cm,14.1/2*cm); + G4Box* box_ext = new G4Box("box_ext",150./2*cm,150./2*cm,14./2*cm); + + G4VSolid* box_subtract = new G4SubtractionSolid("box_subtract",box_ext,box_int,0,G4ThreeVector(0,0,0)); + + G4Material* tube_mat = MaterialManager::getInstance()->GetMaterialFromLibrary("Al"); + + //G4LogicalVolume* tube_vol = new G4LogicalVolume(tube,tube_mat,"logic_tube",0,0,0); + G4LogicalVolume* tube_vol = new G4LogicalVolume(box_subtract,tube_mat,"logic_tube",0,0,0); + + G4VisAttributes* VisTube = new G4VisAttributes(G4Colour(0., 0.7, 0.7)); + tube_vol->SetVisAttributes(VisTube); + + G4ThreeVector Pos = G4ThreeVector(0,0,0); + G4RotationMatrix* Rot = new G4RotationMatrix(); + m_VacuumPipe->AddPlacedVolume(tube_vol,Pos,Rot); + } + + return m_VacuumPipe; +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4AssemblyVolume* SofTofW::BuildGLAD() { if(!m_GLAD){ m_GLAD = new G4AssemblyVolume; string basepath = getenv("NPTOOL"); - string path = basepath + "/NPSimulation/Detectors/Sofia/gdml/glad.gdml"; - m_gdmlparser.Read(path); + //string path = basepath + "/NPSimulation/Detectors/Sofia/gdml/glad.gdml"; + //m_gdmlparser.Read(path); //G4LogicalVolume* vol1 = m_gdmlparser.GetVolume("GEcrans"); //G4LogicalVolume* vol2 = m_gdmlparser.GetVolume("G2202001_Demi_Ecran_thermique_interne"); - G4LogicalVolume* vol3 = m_gdmlparser.GetVolume("G2402001_Enceinte_interne"); + + //G4LogicalVolume* vol3 = m_gdmlparser.GetVolume("G2402001_Enceinte_interne"); + //G4LogicalVolume* vol4 = m_gdmlparser.GetVolume("GEnceinte_externe"); //G4LogicalVolume* vol5 = m_gdmlparser.GetVolume("G2403002_Fonf_cote_sortie"); //G4LogicalVolume* vol6 = m_gdmlparser.GetVolume("G2403001_Fond_cote_entree"); @@ -291,11 +327,11 @@ G4AssemblyVolume* SofTofW::BuildGLAD() //m_GLAD->AddPlacedVolume(vol2,Pos2,Rot2); // *** vol3 *** // - G4ThreeVector Pos3 = G4ThreeVector(0,0,0); + /*G4ThreeVector Pos3 = G4ThreeVector(0,0,0); G4RotationMatrix* Rot3 = new G4RotationMatrix(); Rot3->rotateX(90*deg); Rot3->rotateY(90*deg); - m_GLAD->AddPlacedVolume(vol3,Pos3,Rot3); + m_GLAD->AddPlacedVolume(vol3,Pos3,Rot3);*/ // *** vol4 *** // //G4ThreeVector Pos4 = G4ThreeVector(0*cm,0,0*cm); @@ -371,8 +407,8 @@ void SofTofW::ReadConfiguration(NPL::InputParser parser){ if(NPOptionManager::getInstance()->GetVerboseLevel()) cout << "//// " << blocks.size() << " detectors found " << endl; - vector<string> cart = {"POS","Build_GLAD"}; - vector<string> sphe = {"R","Theta","Phi","Build_GLAD"}; + vector<string> cart = {"POS","Build_GLAD","Build_VacuumPipe"}; + vector<string> sphe = {"R","Theta","Phi","Build_GLAD","Build_VacuumPipe"}; for(unsigned int i = 0 ; i < blocks.size() ; i++){ if(blocks[i]->HasTokenList(cart)){ @@ -381,6 +417,7 @@ void SofTofW::ReadConfiguration(NPL::InputParser parser){ G4ThreeVector Pos = NPS::ConvertVector(blocks[i]->GetTVector3("POS","mm")); m_Build_GLAD = blocks[i]->GetInt("Build_GLAD"); + m_Build_VacuumPipe = blocks[i]->GetInt("Build_VacuumPipe"); AddDetector(Pos); } else if(blocks[i]->HasTokenList(sphe)){ @@ -390,8 +427,12 @@ void SofTofW::ReadConfiguration(NPL::InputParser parser){ double Theta = blocks[i]->GetDouble("Theta","deg"); double Phi = blocks[i]->GetDouble("Phi","deg"); m_Build_GLAD = blocks[i]->GetInt("Build_GLAD"); + m_Build_VacuumPipe = blocks[i]->GetInt("Build_VacuumPipe"); m_GLAD_MagField = blocks[i]->GetDouble("GLAD_MagField","T"); m_GLAD_DistanceFromTarget = blocks[i]->GetDouble("GLAD_DistanceFromTarget", "m"); + m_VacuumPipeX = blocks[i]->GetDouble("VacuumPipeX","m"); + m_VacuumPipeY = blocks[i]->GetDouble("VacuumPipeY","m"); + m_VacuumPipeZ = blocks[i]->GetDouble("VacuumPipeZ","m"); AddDetector(R,Theta,Phi); } @@ -443,6 +484,10 @@ void SofTofW::ConstructDetector(G4LogicalVolume* world){ world, false, 0); */ } + if(m_Build_VacuumPipe==1){ + G4ThreeVector Tube_Pos = G4ThreeVector(m_VacuumPipeX,m_VacuumPipeY,m_VacuumPipeZ); + BuildVacuumPipe()->MakeImprint(world,Tube_Pos,0); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Add Detector branch to the EventTree. diff --git a/NPSimulation/Detectors/Sofia/SofTofW.hh b/NPSimulation/Detectors/Sofia/SofTofW.hh index 066bc9139f28cee64c04e5dcf93dab604d5663b0..5df400ed4fa81735fa1d305f1a32738e26b35ee4 100644 --- a/NPSimulation/Detectors/Sofia/SofTofW.hh +++ b/NPSimulation/Detectors/Sofia/SofTofW.hh @@ -59,6 +59,7 @@ class SofTofW : public NPS::VDetector{ G4AssemblyVolume* BuildTOFDetector(); G4AssemblyVolume* BuildGLAD(); + G4AssemblyVolume* BuildVacuumPipe(); private: G4GDMLParser m_gdmlparser; @@ -66,6 +67,7 @@ class SofTofW : public NPS::VDetector{ //G4LogicalVolume* m_GLAD; G4AssemblyVolume* m_GLAD; G4AssemblyVolume* m_TofWall; + G4AssemblyVolume* m_VacuumPipe; //////////////////////////////////////////////////// ////// Inherite from NPS::VDetector class ///////// @@ -110,9 +112,13 @@ class SofTofW : public NPS::VDetector{ // GLAD // int m_Build_GLAD; + int m_Build_VacuumPipe; double m_GLAD_MagField; double m_GLAD_DistanceFromTarget; - + double m_VacuumPipeX; + double m_VacuumPipeY; + double m_VacuumPipeZ; + // Visualisation Attribute G4VisAttributes* m_VisSquare; G4VisAttributes* m_VisGLAD; diff --git a/NPSimulation/Detectors/Strasse/Strasse.cc b/NPSimulation/Detectors/Strasse/Strasse.cc index b4d7a1c6df5d09dbb4547b957c8b4c5fdb11655f..f751000d70c946625fe33eab4722233f35495ed3 100644 --- a/NPSimulation/Detectors/Strasse/Strasse.cc +++ b/NPSimulation/Detectors/Strasse/Strasse.cc @@ -633,7 +633,9 @@ G4LogicalVolume* Strasse::BuildOuterDetector(){ G4LogicalVolume* Strasse::BuildChamber(){ if(!m_Chamber){ // Needed Element - G4Material* Material = MaterialManager::getInstance()->GetMaterialFromLibrary("Al"); + // G4Material* Material = MaterialManager::getInstance()->GetMaterialFromLibrary("Al"); + G4Material* Material = MaterialManager::getInstance()->GetMaterialFromLibrary("Al5754"); + // G4Material* Material = MaterialManager::getInstance()->GetMaterialFromLibrary("Al1050"); G4RotationMatrix* Rot = new G4RotationMatrix(); // Main Cylinder @@ -694,7 +696,6 @@ G4LogicalVolume* Strasse::BuildChamber(){ m_Chamber = new G4LogicalVolume(Chamber3,Material,"logic_Strasse_Chamber",0,0,0); - m_Chamber->SetVisAttributes(ChamberVisAtt); } @@ -1023,7 +1024,7 @@ void Strasse::ConstructDetector(G4LogicalVolume* world){ } // Chamber - /* + for (unsigned short i = 0 ; i < m_Chamber_Z.size() ; i++) { G4ThreeVector Det_pos = G4ThreeVector(0,0,-m_Chamber_Z[i]) ; G4RotationMatrix* Rot = new G4RotationMatrix(); @@ -1032,7 +1033,7 @@ void Strasse::ConstructDetector(G4LogicalVolume* world){ BuildChamber(), "Strasse",world,false,i+1); } - */ + //G4ThreeVector Det_pos = G4ThreeVector(0,0,+11.5) ; diff --git a/NPSimulation/Process/FissionDecay.cc b/NPSimulation/Process/FissionDecay.cc index 933717d02cb9a6cca28d41adcf2a8fbf91a19363..7839e27c68348b91b58ab86d4352df66246cbd1c 100644 --- a/NPSimulation/Process/FissionDecay.cc +++ b/NPSimulation/Process/FissionDecay.cc @@ -174,7 +174,6 @@ void FissionDecay::DoIt(const G4FastTrack& fastTrack,G4FastStep& fastStep){ G4ParticleDefinition* FissionFragmentDef; unsigned int size = FissionFragment.size(); - if(size == 0) return; @@ -205,8 +204,8 @@ void FissionDecay::DoIt(const G4FastTrack& fastTrack,G4FastStep& fastStep){ m_FissionConditions->SetFragmentTheta(Momentum.theta()/deg); m_FissionConditions->SetFragmentPhi(Momentum.phi()/deg); m_FissionConditions->SetFragmentMomentumX(DPx[i]); - m_FissionConditions->SetFragmentMomentumX(DPy[i]); - m_FissionConditions->SetFragmentMomentumX(DPz[i]); + m_FissionConditions->SetFragmentMomentumY(DPy[i]); + m_FissionConditions->SetFragmentMomentumZ(DPz[i]); // neutral particle if(FFZ==0){ diff --git a/Projects/Sofia/sofia.detector b/Projects/Sofia/sofia.detector index 099a9820b9fb765cf6cda9591e7faa3f269936e1..da3542989588bb5b1d36d1184d039e93df8f4e6b 100644 --- a/Projects/Sofia/sofia.detector +++ b/Projects/Sofia/sofia.detector @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Target THICKNESS= 2 mm - RADIUS= 40 mm + RADIUS= 50 mm MATERIAL= Pb ANGLE= 0 deg X= 0 mm @@ -13,9 +13,13 @@ SofTofW THETA= -9 deg PHI= 0 deg Build_GLAD= 1 - GLAD_DistanceFromTarget= 3.3 m + GLAD_DistanceFromTarget= 3. m GLAD_MagField= 1.8 T - %Build_Twin_Music= 0 + Build_VacuumPipe= 1 + VacuumPipeX= 0 cm + VacuumPipeY= 0 cm + VacuumPipeZ= 2.5 m +%Build_Twin_Music= 0 %Twin_Music_DistanceFromTarget= 1.5 m %Twin_Music_Gas= P10_1atm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Projects/s455/Analysis.cxx b/Projects/s455/Analysis.cxx index 71875203cfefaf6e6f575d144398c19bf76ea003..07fd371ecde3f332e45b8c2b0390babc1798f944 100644 --- a/Projects/s455/Analysis.cxx +++ b/Projects/s455/Analysis.cxx @@ -133,23 +133,59 @@ void Analysis::FissionFragmentAnalysis(){ PosX.push_back(SofTofW->CalPosX[i]); PosY.push_back(SofTofW->CalPosY[i]); - //SofFF->SetTofPosX(SofTofW->CalPosX[i]); - //SofFF->SetTofPosY(SofTofW->CalPosY[i]); + SofFF->SetTofPosX(SofTofW->CalPosX[i]); + SofFF->SetTofPosY(SofTofW->CalPosY[i]); } } - vector<double> Xmwpc4; - vector<double> Ymwpc4; + vector<double> X1; + vector<double> X2; + vector<double> X3; + vector<double> Y1; + vector<double> Y2; + vector<double> Y3; for(unsigned int i=0; i<SofMwpc->DetectorNbr.size(); i++){ + if(SofMwpc->DetectorNbr[i]==2){ + SofFF->SetPosX1(SofMwpc->PositionX1[i]); + SofFF->SetPosY1(SofMwpc->PositionY[i]); + } + if(SofMwpc->DetectorNbr[i]==3){ + SofFF->SetPosX2(SofMwpc->PositionX1[i]); + SofFF->SetPosY2(SofMwpc->PositionY[i]); + } if(SofMwpc->DetectorNbr[i]==4){ - Xmwpc4.push_back(SofMwpc->PositionX1[i]); - Ymwpc4.push_back(SofMwpc->PositionY[i]); + X3.push_back(SofMwpc->PositionX1[i]); + Y3.push_back(SofMwpc->PositionY[i]); + + SofFF->SetPosX3(SofMwpc->PositionX1[i]); + SofFF->SetPosY3(SofMwpc->PositionY[i]); + } + } - //SofFF->SetMwpcPosX(SofMwpc->PositionX1[i]); - //SofFF->SetMwpcPosY(SofMwpc->PositionY[i]); + vector<double> good_posx; + vector<double> good_posy; + for(unsigned int i=0; i<PosX.size(); i++){ + double tofx = PosX[i]; + double tofy = PosY[i]; + for(unsigned int k=0; k<X3.size(); k++){ + double posx = X3[k]; + if(abs(posx-tofx) < 100){ + good_posx.push_back(posx); + good_posy.push_back(tofy); + } } } + + /*if(good_posx.size()==2 && good_posy.size()==2){ + SofFF->SetTofPosX(good_posx[0]); + SofFF->SetTofPosX(good_posx[1]); + + SofFF->SetTofPosY(good_posy[0]); + SofFF->SetTofPosY(good_posy[1]); + }*/ + + int mult1 = SofTwim->mult1; int mult2 = SofTwim->mult2; int mult3 = SofTwim->mult3; @@ -340,39 +376,7 @@ void Analysis::FissionFragmentAnalysis(){ A1 = AoQ1 * iZ1; A2 = AoQ2 * iZ2; - vector<double> good_posx; - vector<double> good_posy; - for(unsigned int i=0; i<PosX.size(); i++){ - double tofx = PosX[i]; - double tofy = PosY[i]; - for(unsigned int k=0; k<Xmwpc4.size(); k++){ - double posx = Xmwpc4[k]; - if(abs(posx-tofx) < 100){ - good_posx.push_back(posx); - //SofFF->SetMwpcPosX(posx); - //SofFF->SetTofPosX(tofx); - } - } - for(unsigned int p=0; p<Ymwpc4.size(); p++){ - double posy = Ymwpc4[p]; - if(abs(posy-tofy) < 20){ - //good_posy.push_back(posy); - good_posy.push_back(tofy); - //SofFF->SetMwpcPosY(posy); - //SofFF->SetTofPosY(tofy); - } - } - } - - if(good_posx.size()==2 && good_posy.size()==2){ - SofFF->SetTofPosX(good_posx[0]); - SofFF->SetTofPosX(good_posx[1]); - - SofFF->SetTofPosY(good_posy[0]); - SofFF->SetTofPosY(good_posy[1]); - } - - //*** Filling the Fission Fragment Tree ***// + // *** Filling the Fission Fragment Tree *** // SofFF->SetTOF(TOF_left); SofFF->SetTOF(TOF_right); SofFF->SetBeta(Beta_Z1); @@ -520,7 +524,7 @@ void Analysis::InitParameter(){ fDCC = -10000; fK_LS2 = -30e-8; - fRunID = 6; + fRunID = 12; // Beam parameter // fZBeta_p0 = 1; diff --git a/Projects/s455/calibration/SofSci/SofSci_physics.cal b/Projects/s455/calibration/SofSci/SofSci_physics.cal index e8cb13bb55b597dc930e2bf5171bf7e21754cea2..8778ee911a3131c0216c0cc52ad439b9029ffaff 100644 --- a/Projects/s455/calibration/SofSci/SofSci_physics.cal +++ b/Projects/s455/calibration/SofSci/SofSci_physics.cal @@ -1,4 +1,4 @@ -SofSci_TOF2INV_V -8.04267 0.00737389 +SofSci_TOF2INV_V -8.0515 0.00737389 SofSci_LENGTH_S2 135.614 -SofSci_DET1_POSPAR 90.0 54.6 +SofSci_DET1_POSPAR 45.0 80.0 SofSci_DET2_POSPAR 943.287 86.652 diff --git a/Projects/s455/calibration/SofTrim/SofTrim_SectionAlign.cal b/Projects/s455/calibration/SofTrim/SofTrim_SectionAlign.cal index 8a3e3df454ce31ee8ad1bf110603e457707558ff..37d3efaaa6803eb42745b0b186822b5f6513519a 100644 --- a/Projects/s455/calibration/SofTrim/SofTrim_SectionAlign.cal +++ b/Projects/s455/calibration/SofTrim/SofTrim_SectionAlign.cal @@ -1,3 +1,3 @@ -SofTrim_SEC1_ALIGN 310.216 1.00792 +SofTrim_SEC1_ALIGN -457.863 1.03809 SofTrim_SEC2_ALIGN 0 1 -SofTrim_SEC3_ALIGN -1382.53 1.13744 +SofTrim_SEC3_ALIGN -2599.29 1.18757