Skip to content
Snippets Groups Projects
Commit fefe7880 authored by Adrien Matta's avatar Adrien Matta :skull_crossbones:
Browse files

Advancing on strasse missing mass

parent d34e1114
No related branches found
No related tags found
No related merge requests found
Pipeline #77844 passed
...@@ -215,7 +215,7 @@ void QFS::CalculateVariables(){ ...@@ -215,7 +215,7 @@ void QFS::CalculateVariables(){
//cout<<"---- COMPUTE ------"<<endl; //cout<<"---- COMPUTE ------"<<endl;
// cout<<"--CM--"<<endl; // cout<<"--CM--"<<endl;
mA = fNucleiA.Mass(); // Beam mass in MeV mA = fNucleiA.Mass(); // Beam mass in MeV
mT = fNucleiT.Mass(); // Target mass in MeV mT = fNucleiT.Mass(); // Target mass in MeV
mB = fNucleiB.Mass(); // Heavy residual mass in MeV mB = fNucleiB.Mass(); // Heavy residual mass in MeV
m1 = mT; // scattered target nucleon (same mass); m1 = mT; // scattered target nucleon (same mass);
...@@ -307,7 +307,7 @@ void QFS::KineRelativistic(double& ThetaLab1, double& PhiLab1, double& KineticEn ...@@ -307,7 +307,7 @@ void QFS::KineRelativistic(double& ThetaLab1, double& PhiLab1, double& KineticEn
pCM_2*sin(thetaCM_2)*sin(phiCM_2), pCM_2*sin(thetaCM_2)*sin(phiCM_2),
pCM_2*cos(thetaCM_2), pCM_2*cos(thetaCM_2),
ECM_2); ECM_2);
fEnergyImpulsionCM_1 = fTotalEnergyImpulsionCM - fEnergyImpulsionCM_2; fEnergyImpulsionCM_1 = fTotalEnergyImpulsionCM - fEnergyImpulsionCM_2;
//-- Boost in the direction of the moving cluster "a" --// //-- Boost in the direction of the moving cluster "a" --//
...@@ -346,7 +346,6 @@ void QFS::KineRelativistic(double& ThetaLab1, double& PhiLab1, double& KineticEn ...@@ -346,7 +346,6 @@ void QFS::KineRelativistic(double& ThetaLab1, double& PhiLab1, double& KineticEn
// Kinetic Energy in the lab frame // Kinetic Energy in the lab frame
KineticEnergyLab1 = fEnergyImpulsionLab_1.E() - m1; KineticEnergyLab1 = fEnergyImpulsionLab_1.E() - m1;
KineticEnergyLab2 = fEnergyImpulsionLab_2.E() - m2; KineticEnergyLab2 = fEnergyImpulsionLab_2.E() - m2;
// test for total energy conversion // test for total energy conversion
//if (fabs(fTotalEnergyImpulsionLab.E() - (fEnergyImpulsionLab_1.E()+fEnergyImpulsionLab_2.E())) > 1e-6) //if (fabs(fTotalEnergyImpulsionLab.E() - (fEnergyImpulsionLab_1.E()+fEnergyImpulsionLab_2.E())) > 1e-6)
// cout << "Problem for energy conservation" << endl; // cout << "Problem for energy conservation" << endl;
......
...@@ -104,7 +104,12 @@ public: ...@@ -104,7 +104,12 @@ public:
void SetMomentumDirectionX (const double & Momentum_Direction_X) {fRC_Momentum_Direction_X.push_back(Momentum_Direction_X);}//! void SetMomentumDirectionX (const double & Momentum_Direction_X) {fRC_Momentum_Direction_X.push_back(Momentum_Direction_X);}//!
void SetMomentumDirectionY (const double & Momentum_Direction_Y) {fRC_Momentum_Direction_Y.push_back(Momentum_Direction_Y);}//! void SetMomentumDirectionY (const double & Momentum_Direction_Y) {fRC_Momentum_Direction_Y.push_back(Momentum_Direction_Y);}//!
void SetMomentumDirectionZ (const double & Momentum_Direction_Z) {fRC_Momentum_Direction_Z.push_back(Momentum_Direction_Z);}//! void SetMomentumDirectionZ (const double & Momentum_Direction_Z) {fRC_Momentum_Direction_Z.push_back(Momentum_Direction_Z);}//!
void SetMomentum (const TVector3 & Momentum) {fRC_Momentum.push_back(Momentum);}//! void SetMomentum (const TVector3 & Momentum) {
Momentum.Unit();
SetMomentumDirectionX(Momentum.X());
SetMomentumDirectionY(Momentum.Y());
SetMomentumDirectionZ(Momentum.Z());
}//!
///////////////////// GETTERS //////////////////////// ///////////////////// GETTERS ////////////////////////
// Beam parameter // Beam parameter
...@@ -133,7 +138,7 @@ public: ...@@ -133,7 +138,7 @@ public:
double GetMomentumDirectionX (const int &i) const {return fRC_Momentum_Direction_X[i];}//! double GetMomentumDirectionX (const int &i) const {return fRC_Momentum_Direction_X[i];}//!
double GetMomentumDirectionY (const int &i) const {return fRC_Momentum_Direction_Y[i];}//! double GetMomentumDirectionY (const int &i) const {return fRC_Momentum_Direction_Y[i];}//!
double GetMomentumDirectionZ (const int &i) const {return fRC_Momentum_Direction_Z[i];}//! double GetMomentumDirectionZ (const int &i) const {return fRC_Momentum_Direction_Z[i];}//!
TVector3 GetParticleMomentum (const int &i) const {return fRC_Momentum[i];}//! TVector3 GetParticleMomentum (const int &i) const {return TVector3(fRC_Momentum_Direction_X[i],fRC_Momentum_Direction_Y[i],fRC_Momentum_Direction_Z[i]).Unit();}//!
TVector3 GetBeamDirection () const ; TVector3 GetBeamDirection () const ;
TVector3 GetParticleDirection (const int i) const ; TVector3 GetParticleDirection (const int i) const ;
......
...@@ -482,10 +482,10 @@ void NPS::BeamReaction::DoIt(const G4FastTrack& fastTrack, ...@@ -482,10 +482,10 @@ void NPS::BeamReaction::DoIt(const G4FastTrack& fastTrack,
TLorentzVector* P_A = m_QFS.GetEnergyImpulsionLab_A(); TLorentzVector* P_A = m_QFS.GetEnergyImpulsionLab_A();
TLorentzVector* P_B = m_QFS.GetEnergyImpulsionLab_B(); TLorentzVector* P_B = m_QFS.GetEnergyImpulsionLab_B();
G4ThreeVector momentum_kineB_beam( P_B->Px(), P_B->Py(), P_B->Pz() ); G4ThreeVector momentum_kineB_beam( P_B->Px(), P_B->Py(), P_B->Pz() );
momentum_kineB_beam = momentum_kineB_beam.unit(); momentum_kineB_beam = momentum_kineB_beam.unit();
TKEB = m_QFS.GetEnergyImpulsionLab_B()->Energy() - m_QFS.GetNucleusB()->Mass(); TKEB = P_B->Energy() - m_QFS.GetNucleusB()->Mass();
G4ThreeVector momentum_kineB_world = momentum_kineB_beam; G4ThreeVector momentum_kineB_world = momentum_kineB_beam;
momentum_kineB_world.rotate(Beam_theta, V); // rotation of Beam_theta on Y axis momentum_kineB_world.rotate(Beam_theta, V); // rotation of Beam_theta on Y axis
momentum_kineB_world.rotate(Beam_phi, ZZ); // rotation of Beam_phi on Z axis momentum_kineB_world.rotate(Beam_phi, ZZ); // rotation of Beam_phi on Z axis
...@@ -549,15 +549,15 @@ void NPS::BeamReaction::DoIt(const G4FastTrack& fastTrack, ...@@ -549,15 +549,15 @@ void NPS::BeamReaction::DoIt(const G4FastTrack& fastTrack,
m_ReactionConditions->SetInternalMomentum(m_QFS.GetInternalMomentum()); m_ReactionConditions->SetInternalMomentum(m_QFS.GetInternalMomentum());
//m_ReactionConditions->SetExcitationEnergy3(m_QFS.GetExcitation3()); //m_ReactionConditions->SetExcitationEnergy3(m_QFS.GetExcitation3());
//m_ReactionConditions->SetExcitationEnergy4(m_QFS.GetExcitation4()); //m_ReactionConditions->SetExcitationEnergy4(m_QFS.GetExcitation4());
// Momuntum X 3 and 4 // // Momuntum X 1,2 and B //
m_ReactionConditions->SetMomentumDirectionX(momentum_kine1_world.x()); m_ReactionConditions->SetMomentumDirectionX(momentum_kine1_world.x());
m_ReactionConditions->SetMomentumDirectionX(momentum_kine2_world.x()); m_ReactionConditions->SetMomentumDirectionX(momentum_kine2_world.x());
m_ReactionConditions->SetMomentumDirectionX(momentum_kineB_world.x()); m_ReactionConditions->SetMomentumDirectionX(momentum_kineB_world.x());
// Momuntum Y 3 and 4 // // Momuntum Y 1,2 and B //
m_ReactionConditions->SetMomentumDirectionY(momentum_kine1_world.y()); m_ReactionConditions->SetMomentumDirectionY(momentum_kine1_world.y());
m_ReactionConditions->SetMomentumDirectionY(momentum_kine2_world.y()); m_ReactionConditions->SetMomentumDirectionY(momentum_kine2_world.y());
m_ReactionConditions->SetMomentumDirectionY(momentum_kineB_world.y()); m_ReactionConditions->SetMomentumDirectionY(momentum_kineB_world.y());
// Momuntum Z 3 and 4 // // Momuntum Z 1,2 and B //
m_ReactionConditions->SetMomentumDirectionZ(momentum_kine1_world.z()); m_ReactionConditions->SetMomentumDirectionZ(momentum_kine1_world.z());
m_ReactionConditions->SetMomentumDirectionZ(momentum_kine2_world.z()); m_ReactionConditions->SetMomentumDirectionZ(momentum_kine2_world.z());
m_ReactionConditions->SetMomentumDirectionZ(momentum_kineB_world.z()); m_ReactionConditions->SetMomentumDirectionZ(momentum_kineB_world.z());
......
...@@ -27,6 +27,7 @@ using namespace std; ...@@ -27,6 +27,7 @@ using namespace std;
#include"NPOptionManager.h" #include"NPOptionManager.h"
#include"NPFunction.h" #include"NPFunction.h"
#include"NPTrackingUtility.h" #include"NPTrackingUtility.h"
#include"NPPhysicalConstants.h"
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
Analysis::Analysis(){ Analysis::Analysis(){
} }
...@@ -40,19 +41,18 @@ void Analysis::Init(){ ...@@ -40,19 +41,18 @@ void Analysis::Init(){
DC= new TInteractionCoordinates; DC= new TInteractionCoordinates;
RC= new TReactionConditions; RC= new TReactionConditions;
InitOutputBranch(); InitOutputBranch();
InitInputBranch(); InitInputBranch();
Strasse = (TStrassePhysics*) m_DetectorManager -> GetDetector("Strasse"); Strasse = (TStrassePhysics*) m_DetectorManager -> GetDetector("Strasse");
Catana = (TCatanaPhysics*) m_DetectorManager -> GetDetector("Catana"); Catana = (TCatanaPhysics*) m_DetectorManager -> GetDetector("Catana");
// reaction properties // reaction properties
myQFS = new NPL::QFS(); m_QFS = new NPL::QFS();
myQFS->ReadConfigurationFile(NPOptionManager::getInstance()->GetReactionFile()); m_QFS->ReadConfigurationFile(NPOptionManager::getInstance()->GetReactionFile());
// reaction properties // reaction properties
myBeam = new NPL::Beam(); myBeam = new NPL::Beam();
myBeam->ReadConfigurationFile(NPOptionManager::getInstance()->GetReactionFile()); myBeam->ReadConfigurationFile(NPOptionManager::getInstance()->GetReactionFile());
InitialBeamEnergy = myBeam->GetEnergy() * myBeam->GetA(); InitialBeamEnergy = myBeam->GetEnergy()/* * myBeam->GetA()*/;
// target thickness // target thickness
TargetThickness = m_DetectorManager->GetTargetThickness(); TargetThickness = m_DetectorManager->GetTargetThickness();
string TargetMaterial = m_DetectorManager->GetTargetMaterial(); string TargetMaterial = m_DetectorManager->GetTargetMaterial();
...@@ -62,8 +62,7 @@ void Analysis::Init(){ ...@@ -62,8 +62,7 @@ void Analysis::Init(){
protonTarget = NPL::EnergyLoss("proton_"+TargetMaterial+".G4table","G4Table",100); protonTarget = NPL::EnergyLoss("proton_"+TargetMaterial+".G4table","G4Table",100);
protonAl = NPL::EnergyLoss("proton_Al.G4table","G4Table",100); protonAl = NPL::EnergyLoss("proton_Al.G4table","G4Table",100);
protonSi = NPL::EnergyLoss("proton_Si.G4table","G4Table",100); protonSi = NPL::EnergyLoss("proton_Si.G4table","G4Table",100);
LV_T.SetVectM(TVector3(0,0,0),NPUNITS::proton_mass_c2);
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
...@@ -109,20 +108,28 @@ void Analysis::TreatEvent(){ ...@@ -109,20 +108,28 @@ void Analysis::TreatEvent(){
if(i1!=i2){ if(i1!=i2){
E1 = ReconstructProtonEnergy(Vertex,Proton1,Catana->Energy[i1]); E1 = ReconstructProtonEnergy(Vertex,Proton1,Catana->Energy[i1]);
E2 = ReconstructProtonEnergy(Vertex,Proton2,Catana->Energy[i2]); E2 = ReconstructProtonEnergy(Vertex,Proton2,Catana->Energy[i2]);
double TA = BeamTarget.Slow(InitialBeamEnergy,abs(VertexZ-75),0);
//double TA = RC->GetBeamEnergy();
// setting up Lorentz Vector from measured trajectories and energies
TVector3 PA(0,0,sqrt(TA*(TA+2*m_QFS->GetNucleusA()->Mass()))); // for like there is no BDC
Proton1=E1*Proton1.Unit();
Proton2=E2*Proton2.Unit();
LV_A.SetVectM(PA,m_QFS->GetNucleusA()->Mass());
double P1= sqrt(E1*(E1+2*NPUNITS::proton_mass_c2));
double P2= sqrt(E2*(E2+2*NPUNITS::proton_mass_c2));
LV_p1.SetVectM(Proton1.Unit()*P1,NPUNITS::proton_mass_c2);
LV_p2.SetVectM(Proton2.Unit()*P2,NPUNITS::proton_mass_c2);
// computing Ex from Missing Mass
LV_B = LV_A + LV_T - LV_p1 - LV_p2;
//LV_B = RC->GetParticleMomentum(2);
Ex = LV_B.M() - m_QFS->GetNucleusB()->Mass();
cout << Ex << " " << m_QFS->GetNucleusB()->Mass() << endl;
} }
} }
//double thickness_before = 0;
//double EA_vertex = BeamTarget.Slow(InitialBeamEnergy,thickness_before,0);
// setting up Lorentz Vector from measured trajectories and energies
//LV_A.SetVect(PA); LV_p1.SetE(EA_vertex);
//LV_p1.SetVect(P1); LV_p1.SetE(E1);
//LV_p2.SetVect(P2); LV_p1.SetE(E2);
// computing Ex from Missing Mass
//double EB = LV_A.E() + LV_T.E() - LV_p1.E() - LV_p2.E();
//TVector3 PB = LV_A.Vect() + LV_p1.Vect() - LV_p2.Vect();
//Ex = TMath::Sqrt( EB*EB - PB.Mag2() ) - myQFS->GetNucleusB()->Mass();
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
......
...@@ -73,7 +73,7 @@ class Analysis: public NPL::VAnalysis{ ...@@ -73,7 +73,7 @@ class Analysis: public NPL::VAnalysis{
TLorentzVector LV_p2; TLorentzVector LV_p2;
NPL::Beam* myBeam; NPL::Beam* myBeam;
NPL::QFS* myQFS; NPL::QFS* m_QFS;
// Energy loss table: the G4Table are generated by the simulation // Energy loss table: the G4Table are generated by the simulation
EnergyLoss BeamTarget; EnergyLoss BeamTarget;
EnergyLoss protonTarget; EnergyLoss protonTarget;
......
...@@ -4,10 +4,10 @@ Beam ...@@ -4,10 +4,10 @@ Beam
Particle= 12C Particle= 12C
Energy= 4800 MeV Energy= 4800 MeV
SigmaEnergy= 0 MeV SigmaEnergy= 0 MeV
SigmaThetaX= 0.1 deg SigmaThetaX= 0 deg
SigmaPhiY= 0.1 deg SigmaPhiY= 0 deg
SigmaX= 5 mm SigmaX= 0 mm
SigmaY= 5 mm SigmaY= 0 mm
MeanThetaX= 0 deg MeanThetaX= 0 deg
MeanPhiY= 0 deg MeanPhiY= 0 deg
MeanX= 0 mm MeanX= 0 mm
...@@ -22,7 +22,7 @@ QFSReaction ...@@ -22,7 +22,7 @@ QFSReaction
Heavy= 11B Heavy= 11B
ExcitationEnergyBeam= 0.0 MeV ExcitationEnergyBeam= 0.0 MeV
ExcitationEnergyHeavy= 0.0 MeV ExcitationEnergyHeavy= 0.0 MeV
MomentumSigma= 50.0 MomentumSigma= 0.0
ShootHeavy= 1 ShootHeavy= 1
ShootLight= 1 ShootLight= 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment