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