From b13801dc19b0973e36ffdb0b12c16a358a88e53d Mon Sep 17 00:00:00 2001 From: Morfouace <pierre.morfouace@cea.fr> Date: Thu, 25 Aug 2022 22:59:40 +0200 Subject: [PATCH] updating vendeta project --- NPLib/Detectors/Vendeta/TVendetaPhysics.cxx | 1 - Projects/Vendeta/Analysis.cxx | 372 +++++++++--------- Projects/Vendeta/calibration/Vendeta_Time.cal | 8 +- 3 files changed, 182 insertions(+), 199 deletions(-) diff --git a/NPLib/Detectors/Vendeta/TVendetaPhysics.cxx b/NPLib/Detectors/Vendeta/TVendetaPhysics.cxx index 191d8ef3c..1bc3e025d 100644 --- a/NPLib/Detectors/Vendeta/TVendetaPhysics.cxx +++ b/NPLib/Detectors/Vendeta/TVendetaPhysics.cxx @@ -137,7 +137,6 @@ void TVendetaPhysics::PreTreat() { double Qmax = m_EventData->GetLGQmax(i); double TimeOffset=0; TimeOffset = Cal->GetValue("Vendeta/DET"+NPL::itoa(det)+"_LG_ANODE"+NPL::itoa(m_AnodeNumber)+"_TIMEOFFSET",0); - TimeOffset=0; double Time = m_EventData->GetLGTime(i) + TimeOffset; // Remove saturated detector and echoes (signals after a specific amplitude) if(Qmax < LG_Limits[det-1] && det != ID_Saturation && det != ID_Echoes ){ diff --git a/Projects/Vendeta/Analysis.cxx b/Projects/Vendeta/Analysis.cxx index c6dca6bea..a52dbc18e 100644 --- a/Projects/Vendeta/Analysis.cxx +++ b/Projects/Vendeta/Analysis.cxx @@ -36,205 +36,189 @@ Analysis::~Analysis(){ //////////////////////////////////////////////////////////////////////////////// void Analysis::Init(){ - InitOutputBranch(); + InitOutputBranch(); - Vendeta= (TVendetaPhysics*) m_DetectorManager->GetDetector("Vendeta"); - FC= (TFissionChamberPhysics*) m_DetectorManager->GetDetector("FissionChamber"); + Vendeta= (TVendetaPhysics*) m_DetectorManager->GetDetector("Vendeta"); + FC= (TFissionChamberPhysics*) m_DetectorManager->GetDetector("FissionChamber"); - neutron = new NPL::Particle("1n"); + neutron = new NPL::Particle("1n"); } //////////////////////////////////////////////////////////////////////////////// void Analysis::TreatEvent(){ - - ReInitValue(); - - - const double GPeak_Vendlg[4] = {45.68, 45.42, 36.54, 41.6}; - const double GPeak_Vendhg[4] = {40.26, 43.84, 42.91, 44.21}; - const double LoF_Vend[4] = {560.8, 552.4, 546.2, 565.5}; - double ToF_Shift_Vendlg[4], ToF_Shift_Vendhg[4]; - - for(int i = 0; i <=3; i++){ - ToF_Shift_Vendlg[i] = LoF_Vend[i] / c_light - GPeak_Vendlg[i]; - ToF_Shift_Vendhg[i] = LoF_Vend[i] / c_light - GPeak_Vendhg[i]; - } - - double FC_Qmax = -100; - unsigned int FC_mult = FC->AnodeNumber.size(); - if(FC_mult==1 ){ - FC_Qmax = FC->Qmax[0]; - - if(FC_Qmax > 400){ - - int anode = FC->AnodeNumber[0]; - double Time_FC = FC->Time[0]; - - Vendeta->SetAnodeNumber(anode); - Vendeta->BuildPhysicalEvent(); - FC->BuildPhysicalEvent(); - - // VENDETA LG - unsigned int Vendeta_LG_mult = Vendeta->LG_DetectorNumber.size(); - for(unsigned int i=0; i<Vendeta_LG_mult; i++){ - - int DetNbr = Vendeta->LG_DetectorNumber[i]; - double Time_Vendeta = Vendeta->LG_Time[i]; - double Rdet = Vendeta->GetDistanceFromTarget(DetNbr); - TVector3 DetPos = Vendeta->GetVectorDetectorPosition(DetNbr); - - double DT = Time_Vendeta - Time_FC + ToF_Shift_Vendlg[DetNbr-1]; - - if(DT>0){ - - double DeltaTheta = atan(63.5/Rdet); - double Theta_Vendeta = DetPos.Theta(); - double Theta_random = ra.Uniform(Theta_Vendeta-DeltaTheta,Theta_Vendeta+DeltaTheta); - //cout << DT << " " << Rdet << endl; - //neutron->SetTimeOfFlight(DT*1e-9/(Rdet*1e-3)); - //neutron->SetTimeOfFlight(DT*1e-9/(0.55)); - neutron->SetBeta( (LoF_Vend[DetNbr-1] / DT )/ c_light); - - double En = neutron->GetEnergy(); - - // Filling output tree - LG_Tof.push_back(DT); - LG_ID.push_back(DetNbr); - LG_ELab.push_back(En); - LG_ThetaLab.push_back(Theta_random); - LG_Q1.push_back(Vendeta->LG_Q1[i]); - LG_Q2.push_back(Vendeta->LG_Q2[i]); - LG_Qmax.push_back(Vendeta->LG_Qmax[i]); - } - } - - // VENDETA HG - unsigned int Vendeta_HG_mult = Vendeta->HG_DetectorNumber.size(); - for(unsigned int i=0; i<Vendeta_HG_mult; i++){ - int DetNbr = Vendeta->HG_DetectorNumber[i]; - double Time_Vendeta = Vendeta->HG_Time[i]; - double Rdet = Vendeta->GetDistanceFromTarget(DetNbr); - TVector3 DetPos = Vendeta->GetVectorDetectorPosition(DetNbr); - - double DT = Time_Vendeta - Time_FC + ToF_Shift_Vendhg[DetNbr-1]; - - if(DT>0){ - double DeltaTheta = atan(63.5/Rdet); - double Theta_Vendeta = DetPos.Theta(); - double Theta_random = ra.Uniform(Theta_Vendeta-DeltaTheta,Theta_Vendeta+DeltaTheta); - //cout << DT << " " << Rdet << endl; - //neutron->SetTimeOfFlight(DT*1e-9/(Rdet*1e-3)); - //neutron->SetTimeOfFlight(DT*1e-9/(0.55)); - neutron->SetBeta( (LoF_Vend[DetNbr-1] / DT )/ c_light); - double En = neutron->GetEnergy(); - - // Filling output tree - HG_ID.push_back(DetNbr); - HG_Tof.push_back(DT); - HG_ELab.push_back(En); - HG_ThetaLab.push_back(Theta_random); - HG_Q1.push_back(Vendeta->HG_Q1[i]); - HG_Q2.push_back(Vendeta->HG_Q2[i]); - HG_Qmax.push_back(Vendeta->HG_Qmax[i]); - } - } - - //Process coincidences signals in VENDETA LG / HG - - if(HG_Tof.size() > 0 && LG_Tof.size() > 0 ){ - for(int j = 0; j < LG_Tof.size();j++){ - for(int k = 0; k < HG_Tof.size(); k++){ - if(abs(HG_Tof[k]-LG_Tof[j]) < 2 && HG_ID[k] == LG_ID[j]){ - if( HG_Q2[k]>120000){ - /* HG_ID[k] = */ - HG_Tof[k] = - 100000; - HG_ELab[k] = - 100000; - HG_ThetaLab[k] = - 100000; - HG_Q1[k] = - 100000; - HG_Q2[k] = - 100000; - HG_Qmax[k] = - 100000; - } - else if( HG_Q2[k]<120000){ - /* HG_ID[k] = */ - LG_Tof[k] = - 100000; - LG_ELab[k] = - 100000; - LG_ThetaLab[k] = - 100000; - LG_Q1[k] = - 100000; - LG_Q2[k] = - 100000; - - } - } - } - } - } // if LG && HG - } // if FC_Qmax > 400 - }// if FC = 1 -} - -//////////////////////////////////////////////////////////////////////////////// -void Analysis::InitOutputBranch(){ - RootOutput::getInstance()->GetTree()->Branch("LG_ID",&LG_ID); - RootOutput::getInstance()->GetTree()->Branch("LG_ThetaLab",&LG_ThetaLab); - RootOutput::getInstance()->GetTree()->Branch("LG_ELab",&LG_ELab); - RootOutput::getInstance()->GetTree()->Branch("LG_Tof",&LG_Tof); - RootOutput::getInstance()->GetTree()->Branch("LG_Q1",&LG_Q1); - RootOutput::getInstance()->GetTree()->Branch("LG_Q2",&LG_Q2); - RootOutput::getInstance()->GetTree()->Branch("LG_Qmax",&LG_Qmax); - - RootOutput::getInstance()->GetTree()->Branch("HG_ID",&HG_ID); - RootOutput::getInstance()->GetTree()->Branch("HG_ThetaLab",&HG_ThetaLab); - RootOutput::getInstance()->GetTree()->Branch("HG_ELab",&HG_ELab); - RootOutput::getInstance()->GetTree()->Branch("HG_Tof",&HG_Tof); - RootOutput::getInstance()->GetTree()->Branch("HG_Q1",&HG_Q1); - RootOutput::getInstance()->GetTree()->Branch("HG_Q2",&HG_Q2); - RootOutput::getInstance()->GetTree()->Branch("HG_Qmax",&HG_Qmax); - -} - -//////////////////////////////////////////////////////////////////////////////// -void Analysis::ReInitValue(){ - LG_ThetaLab.clear(); - LG_ELab.clear(); - LG_Tof.clear(); - LG_ID.clear(); - LG_Q1.clear(); - LG_Q2.clear(); - LG_Qmax.clear(); - - HG_ThetaLab.clear(); - HG_ELab.clear(); - HG_Tof.clear(); - HG_ID.clear(); - HG_Q1.clear(); - HG_Q2.clear(); - HG_Qmax.clear(); - -} - -//////////////////////////////////////////////////////////////////////////////// -void Analysis::End(){ -} - - -//////////////////////////////////////////////////////////////////////////////// -// Construct Method to be pass to the DetectorFactory // -//////////////////////////////////////////////////////////////////////////////// -NPL::VAnalysis* Analysis::Construct(){ - return (NPL::VAnalysis*) new Analysis(); -} - -//////////////////////////////////////////////////////////////////////////////// -// Registering the construct method to the factory // -//////////////////////////////////////////////////////////////////////////////// -extern "C"{ - class proxy{ - public: - proxy(){ - NPL::AnalysisFactory::getInstance()->SetConstructor(Analysis::Construct); - } - }; - - proxy p; -} + ReInitValue(); + + unsigned int FC_mult = FC->AnodeNumber.size(); + if(FC_mult==1 ){ + int anode = FC->AnodeNumber[0]; + double Time_FC = FC->Time[0]; + + Vendeta->SetAnodeNumber(anode); + Vendeta->BuildPhysicalEvent(); + FC->BuildPhysicalEvent(); + + // VENDETA LG + unsigned int Vendeta_LG_mult = Vendeta->LG_DetectorNumber.size(); + for(unsigned int i=0; i<Vendeta_LG_mult; i++){ + + int DetNbr = Vendeta->LG_DetectorNumber[i]; + double Time_Vendeta = Vendeta->LG_Time[i]; + double Rdet = Vendeta->GetDistanceFromTarget(DetNbr); + TVector3 DetPos = Vendeta->GetVectorDetectorPosition(DetNbr); + + double DT = Time_Vendeta - Time_FC;// + ToF_Shift_Vendlg[DetNbr-1]; + + if(DT>0){ + + double DeltaTheta = atan(63.5/Rdet); + double Theta_Vendeta = DetPos.Theta(); + double Theta_random = ra.Uniform(Theta_Vendeta-DeltaTheta,Theta_Vendeta+DeltaTheta); + //cout << DT << " " << Rdet << endl; + //neutron->SetTimeOfFlight(DT*1e-9/(Rdet*1e-3)); + neutron->SetTimeOfFlight(DT*1e-9/(0.55)); + //neutron->SetBeta( (LoF_Vend[DetNbr-1] / DT )/ c_light); + + double En = neutron->GetEnergy(); + + // Filling output tree + LG_Tof.push_back(DT); + LG_ID.push_back(DetNbr); + LG_ELab.push_back(En); + LG_ThetaLab.push_back(Theta_random); + LG_Q1.push_back(Vendeta->LG_Q1[i]); + LG_Q2.push_back(Vendeta->LG_Q2[i]); + LG_Qmax.push_back(Vendeta->LG_Qmax[i]); + } + } + + // VENDETA HG + unsigned int Vendeta_HG_mult = Vendeta->HG_DetectorNumber.size(); + for(unsigned int i=0; i<Vendeta_HG_mult; i++){ + int DetNbr = Vendeta->HG_DetectorNumber[i]; + double Time_Vendeta = Vendeta->HG_Time[i]; + double Rdet = Vendeta->GetDistanceFromTarget(DetNbr); + TVector3 DetPos = Vendeta->GetVectorDetectorPosition(DetNbr); + + double DT = Time_Vendeta - Time_FC;// + ToF_Shift_Vendhg[DetNbr-1]; + + if(DT>0){ + double DeltaTheta = atan(63.5/Rdet); + double Theta_Vendeta = DetPos.Theta(); + double Theta_random = ra.Uniform(Theta_Vendeta-DeltaTheta,Theta_Vendeta+DeltaTheta); + //cout << DT << " " << Rdet << endl; + //neutron->SetTimeOfFlight(DT*1e-9/(Rdet*1e-3)); + neutron->SetTimeOfFlight(DT*1e-9/(0.55)); + //neutron->SetBeta( (LoF_Vend[DetNbr-1] / DT )/ c_light); + double En = neutron->GetEnergy(); + + // Filling output tree + HG_ID.push_back(DetNbr); + HG_Tof.push_back(DT); + HG_ELab.push_back(En); + HG_ThetaLab.push_back(Theta_random); + HG_Q1.push_back(Vendeta->HG_Q1[i]); + HG_Q2.push_back(Vendeta->HG_Q2[i]); + HG_Qmax.push_back(Vendeta->HG_Qmax[i]); + } + } + + //Process coincidences signals in VENDETA LG / HG + + /*if(HG_Tof.size() > 0 && LG_Tof.size() > 0 ){ + for(int j = 0; j < LG_Tof.size();j++){ + for(int k = 0; k < HG_Tof.size(); k++){ + if(abs(HG_Tof[k]-LG_Tof[j]) < 2 && HG_ID[k] == LG_ID[j]){ + if( HG_Q2[k]>120000){ + // HG_ID[k] = + HG_Tof[k] = - 100000; + HG_ELab[k] = - 100000; + HG_ThetaLab[k] = - 100000; + HG_Q1[k] = - 100000; + HG_Q2[k] = - 100000; + HG_Qmax[k] = - 100000; + } + else if( HG_Q2[k]<120000){ + // HG_ID[k] = + LG_Tof[k] = - 100000; + LG_ELab[k] = - 100000; + LG_ThetaLab[k] = - 100000; + LG_Q1[k] = - 100000; + LG_Q2[k] = - 100000; + + } + } + } + } + } // if LG && HG*/ + }// if FC = 1 + + + } + + //////////////////////////////////////////////////////////////////////////////// + void Analysis::InitOutputBranch(){ + RootOutput::getInstance()->GetTree()->Branch("LG_ID",&LG_ID); + RootOutput::getInstance()->GetTree()->Branch("LG_ThetaLab",&LG_ThetaLab); + RootOutput::getInstance()->GetTree()->Branch("LG_ELab",&LG_ELab); + RootOutput::getInstance()->GetTree()->Branch("LG_Tof",&LG_Tof); + RootOutput::getInstance()->GetTree()->Branch("LG_Q1",&LG_Q1); + RootOutput::getInstance()->GetTree()->Branch("LG_Q2",&LG_Q2); + RootOutput::getInstance()->GetTree()->Branch("LG_Qmax",&LG_Qmax); + + RootOutput::getInstance()->GetTree()->Branch("HG_ID",&HG_ID); + RootOutput::getInstance()->GetTree()->Branch("HG_ThetaLab",&HG_ThetaLab); + RootOutput::getInstance()->GetTree()->Branch("HG_ELab",&HG_ELab); + RootOutput::getInstance()->GetTree()->Branch("HG_Tof",&HG_Tof); + RootOutput::getInstance()->GetTree()->Branch("HG_Q1",&HG_Q1); + RootOutput::getInstance()->GetTree()->Branch("HG_Q2",&HG_Q2); + RootOutput::getInstance()->GetTree()->Branch("HG_Qmax",&HG_Qmax); + + } + + //////////////////////////////////////////////////////////////////////////////// + void Analysis::ReInitValue(){ + LG_ThetaLab.clear(); + LG_ELab.clear(); + LG_Tof.clear(); + LG_ID.clear(); + LG_Q1.clear(); + LG_Q2.clear(); + LG_Qmax.clear(); + + HG_ThetaLab.clear(); + HG_ELab.clear(); + HG_Tof.clear(); + HG_ID.clear(); + HG_Q1.clear(); + HG_Q2.clear(); + HG_Qmax.clear(); + + } + + //////////////////////////////////////////////////////////////////////////////// + void Analysis::End(){ + } + + + //////////////////////////////////////////////////////////////////////////////// + // Construct Method to be pass to the DetectorFactory // + //////////////////////////////////////////////////////////////////////////////// + NPL::VAnalysis* Analysis::Construct(){ + return (NPL::VAnalysis*) new Analysis(); + } + + //////////////////////////////////////////////////////////////////////////////// + // Registering the construct method to the factory // + //////////////////////////////////////////////////////////////////////////////// + extern "C"{ + class proxy{ + public: + proxy(){ + NPL::AnalysisFactory::getInstance()->SetConstructor(Analysis::Construct); + } + }; + + proxy p; + } diff --git a/Projects/Vendeta/calibration/Vendeta_Time.cal b/Projects/Vendeta/calibration/Vendeta_Time.cal index 74dd43528..73c78e314 100755 --- a/Projects/Vendeta/calibration/Vendeta_Time.cal +++ b/Projects/Vendeta/calibration/Vendeta_Time.cal @@ -1,5 +1,5 @@ -Vendeta_DET1_LG_ANODE1_TIMEOFFSET -40.2 -Vendeta_DET1_HG_ANODE1_TIMEOFFSET -37.2 +Vendeta_DET1_LG_ANODE1_TIMEOFFSET 0 +Vendeta_DET1_HG_ANODE1_TIMEOFFSET 0 Vendeta_DET1_LG_ANODE2_TIMEOFFSET 0 Vendeta_DET1_HG_ANODE2_TIMEOFFSET 0 Vendeta_DET1_LG_ANODE3_TIMEOFFSET 0 @@ -8,8 +8,8 @@ Vendeta_DET1_LG_ANODE4_TIMEOFFSET 0 Vendeta_DET1_HG_ANODE4_TIMEOFFSET 0 Vendeta_DET1_LG_ANODE5_TIMEOFFSET 0 Vendeta_DET1_HG_ANODE5_TIMEOFFSET 0 -Vendeta_DET1_LG_ANODE6_TIMEOFFSET -40.2 -Vendeta_DET1_HG_ANODE6_TIMEOFFSET -37.2 +Vendeta_DET1_LG_ANODE6_TIMEOFFSET 0 +Vendeta_DET1_HG_ANODE6_TIMEOFFSET 0 Vendeta_DET1_LG_ANODE7_TIMEOFFSET 0 Vendeta_DET1_HG_ANODE7_TIMEOFFSET 0 Vendeta_DET1_LG_ANODE8_TIMEOFFSET 0 -- GitLab