Skip to content
Snippets Groups Projects
Commit 22437ffb authored by Samuel Hallam's avatar Samuel Hallam
Browse files

new getamu flag

parent e06068f1
No related branches found
No related tags found
No related merge requests found
...@@ -56,6 +56,9 @@ ClassImp(TGeTAMUPhysics) ...@@ -56,6 +56,9 @@ ClassImp(TGeTAMUPhysics)
//Calibrated Threshold //Calibrated Threshold
m_Cry_E_Raw_Threshold = 100 ; m_Cry_E_Raw_Threshold = 100 ;
m_Seg_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 //Add Back mode
m_AddBackMode = 1; m_AddBackMode = 1;
...@@ -203,6 +206,17 @@ void TGeTAMUPhysics::ReadAnalysisConfig(){ ...@@ -203,6 +206,17 @@ void TGeTAMUPhysics::ReadAnalysisConfig(){
cout << whatToDo << " " << m_Seg_E_Threshold << endl; 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") { else if (whatToDo== "ADC_RANDOM_BIN") {
AnalysisConfigFile >> DataBuffer; AnalysisConfigFile >> DataBuffer;
m_ADCRandomBinIsSet = true ; m_ADCRandomBinIsSet = true ;
...@@ -243,17 +257,19 @@ void TGeTAMUPhysics::BuildPhysicalEvent(){ ...@@ -243,17 +257,19 @@ void TGeTAMUPhysics::BuildPhysicalEvent(){
if(m_PreTreatedData->GetMultiplicityCoreE()==0) return; if(m_PreTreatedData->GetMultiplicityCoreE()==0) return;
vector <int> CryEN, SegEN; vector <int> CryEN, SegEN;
vector <double> CryE, SegE; vector <double> CryE, CryRaw, SegE;
for (unsigned iClover=0; iClover<4; iClover++){ for (unsigned iClover=0; iClover<4; iClover++){
int clover = iClover+1; int clover = iClover+1;
CryEN.clear(); CryEN.clear();
SegEN.clear(); SegEN.clear();
CryE.clear(); CryE.clear();
CryRaw.clear();
SegE.clear(); SegE.clear();
//Energy //Energy
if(Singles_CloverMap_CryEN.find(iClover+1) != Singles_CloverMap_CryEN.end()){ if(Singles_CloverMap_CryEN.find(iClover+1) != Singles_CloverMap_CryEN.end()){
CryEN = Singles_CloverMap_CryEN[iClover+1]; CryEN = Singles_CloverMap_CryEN[iClover+1];
CryE = Singles_CloverMap_CryE[iClover+1]; CryE = Singles_CloverMap_CryE[iClover+1];
CryRaw = Singles_CloverMap_CryRaw[iClover+1];
} }
else else
continue; // no need to go further if Cores energies are non existant continue; // no need to go further if Cores energies are non existant
...@@ -273,13 +289,14 @@ void TGeTAMUPhysics::BuildPhysicalEvent(){ ...@@ -273,13 +289,14 @@ void TGeTAMUPhysics::BuildPhysicalEvent(){
//sort the crystal energies; //sort the crystal energies;
int swapEN; int swapEN;
double swapE; double swapE, swapRaw;
int size = (int) CryE.size(); int size = (int) CryE.size();
for (int i=0; i< (size -1); i++){ // element to be compared for (int i=0; i< (size -1); i++){ // element to be compared
for(int j = (i+1); j < size; j++){ // rest of the elements for(int j = (i+1); j < size; j++){ // rest of the elements
if (CryE[i] < CryE[j]){ // descending order if (CryE[i] < CryE[j]){ // descending order
swapE= CryE[i]; CryE[i] = CryE[j]; CryE[j] = swapE; swapE= CryE[i]; CryE[i] = CryE[j]; CryE[j] = swapE;
swapEN= CryEN[i]; CryEN[i] = CryEN[j]; CryEN[j] = swapEN; 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(){ ...@@ -324,11 +341,12 @@ void TGeTAMUPhysics::BuildPhysicalEvent(){
else if (pixel[crystal-1][segmentA-1] < pixel[crystal-1][segmentB-1]) else if (pixel[crystal-1][segmentA-1] < pixel[crystal-1][segmentB-1])
segment = segmentB; 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_Clover.push_back(clover);
Singles_Crystal.push_back(CryEN[i]); Singles_Crystal.push_back(CryEN[i]);
Singles_Segment.push_back(segment); Singles_Segment.push_back(segment);
Singles_E.push_back(CryE[i]); Singles_E.push_back(CryE[i]);
Singles_Raw.push_back(CryRaw[i]);
TVector3 Pos = GetSegmentPosition(clover,CryEN[i],segment); TVector3 Pos = GetSegmentPosition(clover,CryEN[i],segment);
Singles_X.push_back(Pos.X()); Singles_X.push_back(Pos.X());
Singles_Y.push_back(Pos.Y()); Singles_Y.push_back(Pos.Y());
...@@ -379,15 +397,14 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){ ...@@ -379,15 +397,14 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){
crystal = m_EventData->GetCoreCrystalNbrE(i); crystal = m_EventData->GetCoreCrystalNbrE(i);
Eraw = m_EventData->GetCoreEnergy(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) if(m_LowGainCryIsOpt)
{ {
LG_Opt = false; 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; unsigned int mysizeE2;
double Eraw_tmp; double Eraw_tmp;
...@@ -430,6 +447,7 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){ ...@@ -430,6 +447,7 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){
if(Energy>=m_Cry_E_Threshold){ if(Energy>=m_Cry_E_Threshold){
Singles_CloverMap_CryEN[clover].push_back(crystal); Singles_CloverMap_CryEN[clover].push_back(crystal);
Singles_CloverMap_CryE[clover].push_back(Energy); Singles_CloverMap_CryE[clover].push_back(Energy);
Singles_CloverMap_CryRaw[clover].push_back(Eraw);
m_PreTreatedData->SetCoreE(clover,crystal,Energy); m_PreTreatedData->SetCoreE(clover,crystal,Energy);
} }
} }
...@@ -475,9 +493,8 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){ ...@@ -475,9 +493,8 @@ for(unsigned int i = 0 ; i < mysizeE ; i++){
{ {
LG_Opt = false; 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_Gain_Crossover)
if(Eraw>=m_Seg_E_Raw_Threshold_tmp)
{ {
unsigned int mysizeE2; unsigned int mysizeE2;
double Eraw_tmp; double Eraw_tmp;
...@@ -871,12 +888,14 @@ void TGeTAMUPhysics::Clear() { ...@@ -871,12 +888,14 @@ void TGeTAMUPhysics::Clear() {
Singles_CloverMap_CryEN.clear(); // cry number energy Singles_CloverMap_CryEN.clear(); // cry number energy
Singles_CloverMap_SegEN.clear(); // seg number Singles_CloverMap_SegEN.clear(); // seg number
Singles_CloverMap_CryE.clear(); // cry energy Singles_CloverMap_CryE.clear(); // cry energy
Singles_CloverMap_CryRaw.clear(); //cry raw
Singles_CloverMap_SegE.clear(); // seg energy Singles_CloverMap_SegE.clear(); // seg energy
Singles_CloverMap_CryTN.clear(); // cry number time Singles_CloverMap_CryTN.clear(); // cry number time
Singles_CloverMap_SegTN.clear(); // seg number Singles_CloverMap_SegTN.clear(); // seg number
Singles_CloverMap_CryT.clear(); // cry energy Singles_CloverMap_CryT.clear(); // cry energy
Singles_CloverMap_SegT.clear(); // seg energy Singles_CloverMap_SegT.clear(); // seg energy
Singles_E.clear(); Singles_E.clear();
Singles_Raw.clear();
Singles_DC.clear(); Singles_DC.clear();
Singles_Theta.clear(); Singles_Theta.clear();
Singles_X.clear(); Singles_X.clear();
......
...@@ -102,6 +102,7 @@ class TGeTAMUPhysics : public TObject, public NPL::VDetector{ ...@@ -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_CryEN; //! cry number energy
map<int, vector <int> > Singles_CloverMap_SegEN; //1 seg number 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_CryE; //! cry energy
map<int, vector <double> > Singles_CloverMap_CryRaw; //! cry raw
map<int, vector <double> > Singles_CloverMap_SegE; //! seg energy 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_CryTN; //! cry number time
map<int, vector <int> > Singles_CloverMap_SegTN; //! seg number map<int, vector <int> > Singles_CloverMap_SegTN; //! seg number
...@@ -111,6 +112,7 @@ class TGeTAMUPhysics : public TObject, public NPL::VDetector{ ...@@ -111,6 +112,7 @@ class TGeTAMUPhysics : public TObject, public NPL::VDetector{
public: // Data Member public: // Data Member
//sorting parameters //sorting parameters
vector<double> Singles_E; vector<double> Singles_E;
vector<double> Singles_Raw;
vector<double> Singles_T; vector<double> Singles_T;
vector<double> Singles_DC; // Doppler Corrected Energy (filled externaly) vector<double> Singles_DC; // Doppler Corrected Energy (filled externaly)
vector<double> Singles_Theta; vector<double> Singles_Theta;
...@@ -140,6 +142,8 @@ class TGeTAMUPhysics : public TObject, public NPL::VDetector{ ...@@ -140,6 +142,8 @@ class TGeTAMUPhysics : public TObject, public NPL::VDetector{
double m_Seg_E_Threshold; double m_Seg_E_Threshold;
int m_Cry_E_Raw_Threshold; int m_Cry_E_Raw_Threshold;
int m_Seg_E_Raw_Threshold; int m_Seg_E_Raw_Threshold;
int m_Cry_Gain_Crossover;
int m_Seg_Gain_Crossover;
int m_AddBackMode; int m_AddBackMode;
bool m_LowGainCryIsSet; bool m_LowGainCryIsSet;
bool m_LowGainSegIsSet; bool m_LowGainSegIsSet;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment