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