From dbd71bd49a89a603e125742d69161d70655b1cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GIRARD=20ALCINDOR=20Val=C3=A9rian?= <girard-alcindor@ijclab.in2p3.fr> Date: Thu, 25 Jan 2024 23:12:16 +0100 Subject: [PATCH] Update e870 --- Projects/e870/Analysis.cxx | 4 + Projects/e870/Analysis.h | 1 + Projects/e870/macros/DrawExInvariant.cxx | 231 ++++++++++++----------- 3 files changed, 121 insertions(+), 115 deletions(-) diff --git a/Projects/e870/Analysis.cxx b/Projects/e870/Analysis.cxx index 928df1b41..a3345f779 100644 --- a/Projects/e870/Analysis.cxx +++ b/Projects/e870/Analysis.cxx @@ -134,6 +134,7 @@ void Analysis::TreatEvent() { TVector3 HitDirection = M2->GetPositionOfInteraction(countMust2) - BeamImpact; TVector3 Coords = M2->GetPositionOfInteraction(countMust2); double Theta = HitDirection.Angle(BeamDirection); + double Phi = HitDirection.Phi(); X.push_back(Coords.x()); Y.push_back(Coords.y()); Z.push_back(Coords.z()); @@ -170,6 +171,7 @@ void Analysis::TreatEvent() { // What is written in the tree ThetaLab.push_back(Theta / deg); + PhiLab.push_back(Phi / deg); Ex.push_back(reaction.ReconstructRelativistic(Energy, Theta)); ELab.push_back(Energy); @@ -186,6 +188,7 @@ void Analysis::InitOutputBranch() { RootOutput::getInstance()->GetTree()->Branch("Ex", &Ex); RootOutput::getInstance()->GetTree()->Branch("ELab", &ELab); RootOutput::getInstance()->GetTree()->Branch("ThetaLab", &ThetaLab); + RootOutput::getInstance()->GetTree()->Branch("PhiLab", &PhiLab); RootOutput::getInstance()->GetTree()->Branch("ThetaCM", &ThetaCM, "ThetaCM/D"); RootOutput::getInstance()->GetTree()->Branch("Run", &Run, "Run/I"); // RootOutput::getInstance()->GetTree()->Branch("X", &X, "X/D"); Like before @@ -237,6 +240,7 @@ void Analysis::ReInitValue() { dE = -1000; ELab.clear(); ThetaLab.clear(); + PhiLab.clear(); Ex.clear(); } diff --git a/Projects/e870/Analysis.h b/Projects/e870/Analysis.h index 6ba81025d..afe2d339f 100644 --- a/Projects/e870/Analysis.h +++ b/Projects/e870/Analysis.h @@ -58,6 +58,7 @@ class Analysis: public NPL::VAnalysis{ double EDC; std::vector<double> ELab; std::vector<double> ThetaLab; + std::vector<double> PhiLab; double ThetaCM; double OriginalELab; double OriginalThetaLab; diff --git a/Projects/e870/macros/DrawExInvariant.cxx b/Projects/e870/macros/DrawExInvariant.cxx index 0d2aa1f11..c624a907a 100644 --- a/Projects/e870/macros/DrawExInvariant.cxx +++ b/Projects/e870/macros/DrawExInvariant.cxx @@ -1,16 +1,15 @@ void DrawExInvariant() { //////////////////////////////////////////////////////////////////////////////// - TLorentzVector LV_alpha, LV_7Li; - // TLorentzVector LV_alpha, LV_proton, LV_fragment; - double mu = 931.5; // MeV/c2 - double m_alpha = 4 * mu + 2.425; // Mev/c2 - double m_7Li = 7 * mu + 14.91; // MeV/c2 - // double m_proton = mu + 7.289; // Mev/c2 - // double m_fragment = 44 * mu - 3.755; // Mev/c2 + TLorentzVector LV_alpha, LV_7Li, LV_p; + double mu = 931.5; // MeV/c2 + double m_alpha = 4 * mu + 2.425; // Mev/c2 + double m_7Li = 7 * mu + 14.91; // MeV/c2 + double m_10Be = 10 * mu + 12.61; // MeV/c2 + double mp = mu + 7.289; // MeV/c2 // double m_5Li = 5 * mu + 11.68; // MeV/c2 TChain* t = new TChain("PhysicsTree"); - t->Add("../../Outputs/Analysis/testnew.root"); // Name of simulated file + t->Add("../../Outputs/Analysis/Ana10Bepalpha_38AMeV_CH2.root"); // Name of simulated file // YOUR ALPHA AND Li CUT TFile* fcuta = new TFile("cuts/CUT_alpha.root", "read"); @@ -22,19 +21,16 @@ void DrawExInvariant() { TMust2Physics* M2 = new TMust2Physics(); std::vector<double>* ELab = 0; std::vector<double>* ThetaLab = 0; - std::vector<double>* X = 0; - std::vector<double>* Y = 0; - std::vector<double>* Z = 0; + std::vector<double>* PhiLab = 0; std::vector<double>* Ex = 0; TBranch* b_ELab; TBranch* b_ThetaLab; + TBranch* b_PhiLab; TBranch* b_X; TBranch* b_Y; TBranch* b_Z; TBranch* b_Ex; - // float CATS1_X, CATS1_Y, CATS2_X, CATS2_Y, Xf, Yf; - t->SetBranchStatus("*", false); t->SetBranchStatus("MUST2", true); t->SetBranchAddress("MUST2", &M2); @@ -42,145 +38,150 @@ void DrawExInvariant() { t->SetBranchAddress("ELab", &ELab, &b_ELab); t->SetBranchStatus("ThetaLab", true); t->SetBranchAddress("ThetaLab", &ThetaLab, &b_ThetaLab); - // t->SetBranchStatus("CATS1_X", "true"); - // t->SetBranchAddress("CATS1_X", &CATS1_X); - // t->SetBranchStatus("CATS1_Y", "true"); - // t->SetBranchAddress("CATS1_Y", &CATS1_Y); - // t->SetBranchStatus("CATS2_X", "true"); - // t->SetBranchAddress("CATS2_X", &CATS2_X); - // t->SetBranchStatus("CATS2_Y", "true"); - // t->SetBranchAddress("CATS2_Y", &CATS2_Y); - t->SetBranchStatus("X", "true"); - t->SetBranchAddress("X", &X, &b_X); - t->SetBranchStatus("Y", "true"); - t->SetBranchAddress("Y", &Y, &b_Y); - t->SetBranchStatus("Z", "true"); - t->SetBranchAddress("Z", &Z, &b_Z); + t->SetBranchStatus("PhiLab", true); + t->SetBranchAddress("PhiLab", &PhiLab, &b_PhiLab); t->SetBranchStatus("Ex", "true"); t->SetBranchAddress("Ex", &Ex, &b_Ex); - TH1F* hExTot = new TH1F("hExTot", "hExTot", 1000, -100, 100); - TH1F* hEx = new TH1F("hEx", "hEx", 1000, -100, 100); + TH1F* hExInv = new TH1F("hExInv", "hExInv", 1000, -20, 20); + TH1F* hExMM = new TH1F("hExMM", "hExMM", 1000, -20, 20); TH2F* hE1E2 = new TH2F("hE1E2", "hE1E2", 1000, 0, 500, 1000, 0, 500); + TH2F* hELabThetaLab = new TH2F("hELabThetLab", "hELabThetaLab", 1000, 0, 50, 1000, 0, 500); //////////////////////////////////////////////////////////////////////////////// - // int n_entries = t->GetEntries(); - int n_entries = 1e7; + int n_entries = t->GetEntries(); + // int n_entries = 1e7; for (unsigned int i = 0; i < n_entries; i++) { t->GetEntry(i); - double e_alpha; - double theta_alpha; - double phi_alpha; - - double e_li; - double theta_li; - double phi_li; - - double xtarget = 0; - double ytarget = 0; - // double CATSX_diff = 0; - // double CATSY_diff = 0; + double e_alpha = -1000; + double theta_alpha = -1000; + double phi_alpha = -1000; - // if (CATS1_X > -1500 && CATS2_X > -1500 && Xf > -1500) { - // CATSX_diff = -(CATS2_X - CATS1_X); - // xtarget = -Xf; - // } - // if (CATS1_Y > -1500 && CATS2_X > -1500 && Yf > -1500) { - // ytarget = Yf; - // CATSY_diff = CATS2_X - CATS1_X; - // } - - TVector3 BeamImpact(xtarget, ytarget, 0); - TVector3 BeamDirection(0,0,1); + double e_li = -1000; + double theta_li = -1000; + double phi_li = -1000; if (M2->Si_E.size() == 2) { - if ((cuta->IsInside(M2->CsI_E[0], M2->Si_E[0]) && cutli->IsInside(M2->CsI_E[1], M2->Si_E[1]))) { + if ((cuta->IsInside(M2->CsI_E[0], M2->Si_E[0])) && (cutli->IsInside(M2->CsI_E[1], M2->Si_E[1]))) { // Particle1 = alpha - TVector3 PositionOfInteraction_alpha(X->at(0), Y->at(0), Z->at(0)); - TVector3 HitDirection_alpha = PositionOfInteraction_alpha - BeamImpact; e_alpha = ELab->at(0); - theta_alpha = HitDirection_alpha.Angle(BeamDirection); - phi_alpha = HitDirection_alpha.Phi(); + theta_alpha = ThetaLab->at(0) * M_PI / 180.; + phi_alpha = PhiLab->at(0); + if (phi_alpha + 180. > 360) + phi_alpha = phi_alpha - 180; + else + phi_alpha = phi_alpha + 180; + phi_alpha = phi_alpha * M_PI / 180.; // Particle2 = 7li - TVector3 PositionOfInteraction_li(X->at(1), Y->at(1), Z->at(1)); - TVector3 HitDirection_li = PositionOfInteraction_li - BeamImpact; e_li = ELab->at(1); - theta_li = HitDirection_li.Angle(BeamDirection); - phi_li = HitDirection_li.Phi(); + theta_li = ThetaLab->at(1) * M_PI / 180.; + phi_li = PhiLab->at(1); + if (phi_li + 180. > 360) + phi_li = phi_li - 180; + else + phi_li = phi_li + 180; + phi_li = phi_li * M_PI / 180.; + hExMM->Fill(Ex->at(0)); } - else if (cuta->IsInside(M2->CsI_E[1], M2->Si_E[1]) && cutli->IsInside(M2->CsI_E[0], M2->Si_E[0])) { + else if ((cuta->IsInside(M2->CsI_E[1], M2->Si_E[1])) && (cutli->IsInside(M2->CsI_E[0], M2->Si_E[0]))) { + hExMM->Fill(Ex->at(1)); // Particle2 = alpha - TVector3 PositionOfInteraction_alpha(X->at(1), Y->at(1), Z->at(1)); - TVector3 HitDirection_alpha = PositionOfInteraction_alpha - BeamImpact; e_alpha = ELab->at(1); - theta_alpha = HitDirection_alpha.Angle(BeamDirection); - phi_alpha = HitDirection_alpha.Phi(); + theta_alpha = ThetaLab->at(1) * M_PI / 180.; + phi_alpha = PhiLab->at(1); + if (phi_alpha + 180. > 360) + phi_alpha = phi_alpha - 180; + else + phi_alpha = phi_alpha + 180; + phi_alpha = phi_alpha * M_PI / 180.; // Particle1 = 7li - TVector3 PositionOfInteraction_li(X->at(0), Y->at(0), Z->at(0)); - TVector3 HitDirection_li = PositionOfInteraction_li - BeamImpact; e_li = ELab->at(0); - theta_li = HitDirection_li.Angle(BeamDirection); - phi_li = HitDirection_li.Phi(); + theta_li = ThetaLab->at(0) * M_PI / 180.; + phi_li = PhiLab->at(0); + if (phi_li + 180. > 360) + phi_li = phi_li - 180; + else + phi_li = phi_li + 180; + phi_li = phi_li * M_PI / 180.; } - //////////////////////////////////////////////////////////////////////////////// - double gamma_alpha = e_alpha / m_alpha + 1; - double beta_alpha = sqrt(1 - 1 / (pow(gamma_alpha, 2.))); - double p_alpha_mag = gamma_alpha * m_alpha * beta_alpha; - double etot_alpha = sqrt(pow(p_alpha_mag, 2) + pow(m_alpha, 2)); - - TVector3 p_alpha(sin(theta_alpha) * cos(phi_alpha), // px - sin(theta_alpha) * sin(phi_alpha), // py - cos(theta_alpha)); // pz - p_alpha.SetMag(p_alpha_mag); - LV_alpha.SetPxPyPzE(p_alpha.x(), p_alpha.y(), p_alpha.z(), etot_alpha); - - //////////////////////////////////////////////////////////////////////////////// - double gamma_li = e_li / m_7Li + 1; - double beta_li = sqrt(1 - 1 / (pow(gamma_li, 2.))); - double p_li_mag = gamma_li * m_7Li * beta_li; - double etot_li = sqrt(pow(p_li_mag, 2) + pow(m_7Li, 2)); - - TVector3 p_li(sin(theta_li) * cos(phi_li), // px - sin(theta_li) * sin(phi_li), // py - cos(theta_li)); // pz - p_li.SetMag(p_li_mag); - LV_7Li.SetPxPyPzE(p_li.x(), p_li.y(), p_li.z(), etot_li); - TLorentzVector LV_total = LV_alpha + LV_7Li; - - double ExTot = LV_total.Mag() - m_alpha - m_7Li; - hExTot->Fill(ExTot); - if (Ex->size() >= 2) { - hEx->Fill(Ex->at(0)); - hEx->Fill(Ex->at(1)); + if (e_alpha > 0 && e_li > 0) { + //////////////////////////////////////////////////////////////////////////////// + double gamma_alpha = e_alpha / m_alpha + 1; + double beta_alpha = sqrt(1 - 1 / (pow(gamma_alpha, 2.))); + cout << i << endl; + cout << "alpha: " << e_alpha << " " << beta_alpha << " " << theta_alpha << endl; + double p_alpha_mag = gamma_alpha * m_alpha * beta_alpha; + double etot_alpha = sqrt(pow(p_alpha_mag, 2) + pow(m_alpha, 2)); + + TVector3 p_alpha(sin(theta_alpha) * cos(phi_alpha), // px + sin(theta_alpha) * sin(phi_alpha), // py + cos(theta_alpha)); // pz + p_alpha.SetMag(p_alpha_mag); + LV_alpha.SetPxPyPzE(p_alpha.x(), p_alpha.y(), p_alpha.z(), etot_alpha); + + // double etot_alpha = m_alpha + e_alpha; + // double p_alpha_mag = sqrt(etot_alpha * etot_alpha - m_alpha * m_alpha); + // LV_alpha.SetPxPyPzE(p_alpha_mag * sin(theta_alpha) * cos(phi_alpha), p_alpha_mag * sin(phi_alpha), + // p_alpha_mag * cos(theta_alpha), etot_alpha); + + //////////////////////////////////////////////////////////////////////////////// + double gamma_li = e_li / m_7Li + 1; + double beta_li = sqrt(1 - 1 / (pow(gamma_li, 2.))); + cout << "li: " << e_li << " " << beta_li << " " << theta_li << endl; + double p_li_mag = gamma_li * m_7Li * beta_li; + double etot_li = sqrt(pow(p_li_mag, 2) + pow(m_7Li, 2)); + + TVector3 p_li(sin(theta_li) * cos(phi_li), // px + sin(theta_li) * sin(phi_li), // py + cos(theta_li)); // pz + p_li.SetMag(p_li_mag); + LV_7Li.SetPxPyPzE(p_li.x(), p_li.y(), p_li.z(), etot_li); + + // double etot_li = m_7Li + e_li; + // double p_li_mag = sqrt(etot_li * etot_li - m_7Li * m_7Li); + // LV_7Li.SetPxPyPzE(p_li_mag * sin(theta_li) * cos(phi_li), p_li_mag * sin(phi_li), p_li_mag * + // cos(theta_li), + // etot_li); + + LV_p.SetPxPyPzE(0, 0, 0, mp); + TLorentzVector LV_total = LV_alpha + LV_7Li - LV_p; + + double ExTot = LV_total.Mag() - m_10Be; + cout << ExTot << endl; + hExInv->Fill(ExTot); + hE1E2->Fill(e_alpha, e_li); + hELabThetaLab->Fill(theta_alpha * 180 / M_PI, e_alpha); + hELabThetaLab->Fill(theta_li * 180 / M_PI, e_li); } - hE1E2->Fill(e_alpha, e_li); } } TCanvas* c1 = new TCanvas(); gStyle->SetOptStat(0); - hExTot->Draw(); - hEx->SetLineColor(kRed); - hEx->Draw("same"); + hExInv->Draw(); + hExMM->SetLineColor(kRed); + hExMM->Draw("same"); - TF1* fitExTot = new TF1("fitExTot", "gaus", hExTot->GetXaxis()->GetXmin(), hExTot->GetXaxis()->GetXmax()); - hExTot->Fit(fitExTot, "Q"); + TF1* fitExTot = new TF1("fitExTot", "gaus", hExInv->GetXaxis()->GetXmin(), hExInv->GetXaxis()->GetXmax()); + hExInv->Fit(fitExTot, "Q"); double meanExTot = fitExTot->GetParameter(1); - std::cout << "Center of hExTot: " << meanExTot << " MeV" << std::endl; + std::cout << "Center of hExInv: " << meanExTot << " MeV" << std::endl; - double fitRangeMin = 0.0; - double fitRangeMax = 15.0; + double fitRangeMin = 0.0; + double fitRangeMax = 15.0; TF1* fitEx = new TF1("fitEx", "gaus", fitRangeMin, fitRangeMax); - hEx->Fit(fitEx); + hExMM->Fit(fitEx, "", "", -10, 10); double meanEx = fitEx->GetParameter(1); std::cout << "Center of hEx: " << meanEx << " MeV" << std::endl; TLegend* legend = new TLegend(0.75, 0.75, 0.85, 0.85); - legend->AddEntry(hExTot, "hExTot", "l"); // "l" for line - legend->AddEntry(hEx, "hex", "l"); + legend->AddEntry(hExInv, "hExInv", "l"); // "l" for line + legend->AddEntry(hExMM, "hExMM", "l"); legend->Draw(); -} + TCanvas* c2 = new TCanvas(); + hELabThetaLab->Draw("col"); +} -- GitLab