From 22437ffb185b7f46ef64cba3d58a5dd1d58dd7bf Mon Sep 17 00:00:00 2001
From: Samuel Hallam <sh00319@surrey.ac.uk>
Date: Wed, 25 Jul 2018 10:28:51 +0100
Subject: [PATCH]  new getamu flag

---
 NPLib/Detectors/GeTAMU/TGeTAMUPhysics.cxx | 39 +++++++++++++++++------
 NPLib/Detectors/GeTAMU/TGeTAMUPhysics.h   |  4 +++
 2 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/NPLib/Detectors/GeTAMU/TGeTAMUPhysics.cxx b/NPLib/Detectors/GeTAMU/TGeTAMUPhysics.cxx
index dee7964c9..1c77a2fd8 100644
--- a/NPLib/Detectors/GeTAMU/TGeTAMUPhysics.cxx
+++ b/NPLib/Detectors/GeTAMU/TGeTAMUPhysics.cxx
@@ -56,6 +56,9 @@ ClassImp(TGeTAMUPhysics)
     //Calibrated Threshold
     m_Cry_E_Raw_Threshold = 100 ;
     m_Seg_E_Raw_Threshold = 100 ;
+    //Gain Crossover
+    m_Cry_Gain_Crossover = 5000 ;
+    m_Seg_Gain_Crossover = 5000 ; 
     //Add Back mode
     m_AddBackMode = 1;
 
@@ -203,6 +206,17 @@ void TGeTAMUPhysics::ReadAnalysisConfig(){
         cout << whatToDo << " " << m_Seg_E_Threshold << endl;
       }
 
+      else if (whatToDo== "CRY_GAIN_CROSSOVER") {
+        AnalysisConfigFile >> DataBuffer;
+        m_Cry_Gain_Crossover = atof(DataBuffer.c_str());
+        cout << whatToDo << " " << m_Cry_Gain_Crossover << endl;
+      }
+      else if (whatToDo== "SEG_GAIN_CROSSOVER") {
+        AnalysisConfigFile >> DataBuffer;
+        m_Seg_Gain_Crossover = atof(DataBuffer.c_str());
+        cout << whatToDo << " " << m_Seg_Gain_Crossover << endl;
+      }
+
       else if (whatToDo== "ADC_RANDOM_BIN") {
         AnalysisConfigFile >> DataBuffer;
         m_ADCRandomBinIsSet  = true ;
@@ -243,17 +257,19 @@ void TGeTAMUPhysics::BuildPhysicalEvent(){
   if(m_PreTreatedData->GetMultiplicityCoreE()==0) return;
 
   vector <int>    CryEN, SegEN;
-  vector <double> CryE, SegE;
+  vector <double> CryE, CryRaw, SegE;
   for (unsigned iClover=0; iClover<4; iClover++){
     int clover = iClover+1;
     CryEN.clear();
     SegEN.clear();
     CryE.clear();
+    CryRaw.clear();
     SegE.clear();
     //Energy
     if(Singles_CloverMap_CryEN.find(iClover+1) != Singles_CloverMap_CryEN.end()){
       CryEN  = Singles_CloverMap_CryEN[iClover+1];
       CryE   = Singles_CloverMap_CryE[iClover+1];
+      CryRaw = Singles_CloverMap_CryRaw[iClover+1];
     }
     else
       continue; // no need to go further if Cores energies are non existant
@@ -273,13 +289,14 @@ void TGeTAMUPhysics::BuildPhysicalEvent(){
 
     //sort the crystal energies;
     int swapEN;
-    double swapE;
+    double swapE, swapRaw;
     int size = (int) CryE.size();
     for (int i=0; i< (size -1); i++){    // element to be compared
       for(int j = (i+1); j < size; j++){   // rest of the elements
         if (CryE[i] < CryE[j]){          // descending order
           swapE= CryE[i];    CryE[i] = CryE[j];   CryE[j] = swapE;
           swapEN= CryEN[i];   CryEN[i] = CryEN[j];   CryEN[j] = swapEN;
+          swapRaw= CryRaw[i];   CryRaw[i] = CryRaw[j];   CryRaw[j] = swapRaw;
         }
       }
     }
@@ -324,11 +341,12 @@ void TGeTAMUPhysics::BuildPhysicalEvent(){
       else if (pixel[crystal-1][segmentA-1] < pixel[crystal-1][segmentB-1])
         segment = segmentB;
 
-      //cout << i <<" picked: crystal " << crystal << "   segment " << segment << "  Energy " << CryE[i] << endl;
+      //cout << i <<" picked: crystal " << crystal << "   segment " << segment << "  Energy " << CryE[i] << " Raw " << CryRaw[i] << endl;
       Singles_Clover.push_back(clover);
       Singles_Crystal.push_back(CryEN[i]);
       Singles_Segment.push_back(segment);
       Singles_E.push_back(CryE[i]);
+        Singles_Raw.push_back(CryRaw[i]);
       TVector3 Pos = GetSegmentPosition(clover,CryEN[i],segment);
       Singles_X.push_back(Pos.X());
       Singles_Y.push_back(Pos.Y());
@@ -379,15 +397,14 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){
     crystal = m_EventData->GetCoreCrystalNbrE(i);
     Eraw = m_EventData->GetCoreEnergy(i);
 
-//by Shuya 170919. Use low-gain data if it is available (for high-energy gammas which might be above high-gain data's saturation level).
 //***************************************************************************************************
     if(m_LowGainCryIsOpt)
     {
 	LG_Opt = false;
 
-	int	m_Cry_E_Raw_Threshold_tmp = 2000;
-	//try low-gain data if high-gain data is above this threshold. If set 0 -> all low-gain, set above 5000 -> all high gain.
-        if(Eraw>=m_Cry_E_Raw_Threshold_tmp)
+
+
+        if(Eraw>=m_Cry_Gain_Crossover)
     	{
 		unsigned int mysizeE2;
 		double Eraw_tmp;
@@ -430,6 +447,7 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){
     if(Energy>=m_Cry_E_Threshold){
       Singles_CloverMap_CryEN[clover].push_back(crystal);
       Singles_CloverMap_CryE[clover].push_back(Energy);
+      Singles_CloverMap_CryRaw[clover].push_back(Eraw);
       m_PreTreatedData->SetCoreE(clover,crystal,Energy);
     }
   }
@@ -475,9 +493,8 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){
     {
 	LG_Opt = false;
 
-	int	m_Seg_E_Raw_Threshold_tmp = 2000;
-	//try low-gain data if high-gain data is above this threshold. If set 0 -> all low-gain, set above 5000 -> all high gain.
-        if(Eraw>=m_Seg_E_Raw_Threshold_tmp)
+
+        if(Eraw>=m_Seg_Gain_Crossover)
     	{
 		unsigned int mysizeE2;
 		double Eraw_tmp;
@@ -871,12 +888,14 @@ void TGeTAMUPhysics::Clear() {
   Singles_CloverMap_CryEN.clear(); // cry number energy
   Singles_CloverMap_SegEN.clear(); // seg number
   Singles_CloverMap_CryE.clear(); // cry energy
+    Singles_CloverMap_CryRaw.clear(); //cry raw
   Singles_CloverMap_SegE.clear(); // seg energy
   Singles_CloverMap_CryTN.clear(); // cry number time
   Singles_CloverMap_SegTN.clear(); // seg number
   Singles_CloverMap_CryT.clear(); // cry energy
   Singles_CloverMap_SegT.clear(); // seg energy
   Singles_E.clear();
+    Singles_Raw.clear();
   Singles_DC.clear();
   Singles_Theta.clear();
   Singles_X.clear();
diff --git a/NPLib/Detectors/GeTAMU/TGeTAMUPhysics.h b/NPLib/Detectors/GeTAMU/TGeTAMUPhysics.h
index ad83b9708..9d4b9118e 100644
--- a/NPLib/Detectors/GeTAMU/TGeTAMUPhysics.h
+++ b/NPLib/Detectors/GeTAMU/TGeTAMUPhysics.h
@@ -102,6 +102,7 @@ class TGeTAMUPhysics :  public TObject, public NPL::VDetector{
     map<int, vector <int> > Singles_CloverMap_CryEN; //! cry number energy
     map<int, vector <int> > Singles_CloverMap_SegEN; //1 seg number
     map<int, vector <double> > Singles_CloverMap_CryE; //! cry energy
+    map<int, vector <double> > Singles_CloverMap_CryRaw; //! cry raw
     map<int, vector <double> > Singles_CloverMap_SegE; //! seg energy
     map<int, vector <int> > Singles_CloverMap_CryTN; //! cry number time
     map<int, vector <int> > Singles_CloverMap_SegTN; //! seg number
@@ -111,6 +112,7 @@ class TGeTAMUPhysics :  public TObject, public NPL::VDetector{
   public: // Data Member
     //sorting parameters
     vector<double> Singles_E;
+    vector<double> Singles_Raw;
     vector<double> Singles_T;
     vector<double> Singles_DC;   // Doppler Corrected Energy (filled externaly)
     vector<double> Singles_Theta;
@@ -140,6 +142,8 @@ class TGeTAMUPhysics :  public TObject, public NPL::VDetector{
     double m_Seg_E_Threshold;
     int m_Cry_E_Raw_Threshold;
     int m_Seg_E_Raw_Threshold;
+    int m_Cry_Gain_Crossover;
+    int m_Seg_Gain_Crossover;
     int m_AddBackMode;
     bool m_LowGainCryIsSet;
     bool m_LowGainSegIsSet;
-- 
GitLab