diff --git a/NPLib/Detectors/FissionChamber/TFissionChamberPhysics.cxx b/NPLib/Detectors/FissionChamber/TFissionChamberPhysics.cxx index 4c68b837b9a3ef581c2916b42bf4528921849a20..d0a3477c03a8046c657e8f0dac92686f347e5a7b 100644 --- a/NPLib/Detectors/FissionChamber/TFissionChamberPhysics.cxx +++ b/NPLib/Detectors/FissionChamber/TFissionChamberPhysics.cxx @@ -42,30 +42,34 @@ using namespace std; ClassImp(TFissionChamberPhysics) -/////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// TFissionChamberPhysics::TFissionChamberPhysics() - : m_EventData(new TFissionChamberData), - m_PreTreatedData(new TFissionChamberData), - m_EventPhysics(this), - m_Spectra(0), - m_E_RAW_Threshold(0), // adc channels - m_E_Threshold(0), // MeV - m_NumberOfDetectors(0) { -} + : m_EventData(new TFissionChamberData), + m_PreTreatedData(new TFissionChamberData), + m_EventPhysics(this), + m_Spectra(0), + m_E_RAW_Threshold(0), // adc channels + m_E_Threshold(0), // MeV + m_NumberOfDetectors(0) { + } /////////////////////////////////////////////////////////////////////////// /// A usefull method to bundle all operation to add a detector -void TFissionChamberPhysics::AddDetector(TVector3 ){ +void TFissionChamberPhysics::AddDetector(TVector3 pos) { // In That simple case nothing is done // Typically for more complex detector one would calculate the relevant // positions (stripped silicon) or angles (gamma array) m_NumberOfDetectors++; - - for(int i=0; i<12; i++){ - LastTime[i] = 0; - CurrentTime[i] = 0; - counter[i] = 0; - } + for(int i =0; i<11; i++){ + TVector3 AnodePos(pos.X() , pos.Y(), pos.Z() - 25 + i*5); + m_AnodePosition.push_back(AnodePos); + } + + for(int i=0; i<12; i++){ + LastTime[i] = 0; + CurrentTime[i] = 0; + counter[i] = 0; + } } /////////////////////////////////////////////////////////////////////////// @@ -73,9 +77,10 @@ void TFissionChamberPhysics::AddDetector(double R, double Theta, double Phi){ // Compute the TVector3 corresponding TVector3 Pos(R*sin(Theta)*cos(Phi),R*sin(Theta)*sin(Phi),R*cos(Theta)); // Call the cartesian method + /* m_DetectorPosition.push_back(Pos); */ AddDetector(Pos); } - + /////////////////////////////////////////////////////////////////////////// void TFissionChamberPhysics::BuildSimplePhysicalEvent() { BuildPhysicalEvent(); @@ -87,19 +92,19 @@ void TFissionChamberPhysics::BuildSimplePhysicalEvent() { void TFissionChamberPhysics::BuildPhysicalEvent() { // apply thresholds and calibration PreTreat(); - + // match energy and time together unsigned int mysizeE = m_PreTreatedData->GetMultiplicity(); for (UShort_t e = 0; e < mysizeE ; e++) { - - int A = m_EventData->GetAnodeNbr(e); - CurrentTime[A] = m_EventData->GetTime(e); - double DT = CurrentTime[A] - LastTime[A]; - - LastTime[A] = m_EventData->GetTime(e); - - DT_FC.push_back(DT); - AnodeNumber.push_back(m_PreTreatedData->GetAnodeNbr(e)); + + int A = m_EventData->GetAnodeNbr(e); + CurrentTime[A] = m_EventData->GetTime(e); + double DT = CurrentTime[A] - LastTime[A]; + + LastTime[A] = m_EventData->GetTime(e); + + DT_FC.push_back(DT); + AnodeNumber.push_back(m_PreTreatedData->GetAnodeNbr(e)); Q1.push_back(m_PreTreatedData->GetQ1(e)); Q2.push_back(m_PreTreatedData->GetQ2(e)); Qmax.push_back(m_PreTreatedData->GetQmax(e)); @@ -108,11 +113,11 @@ void TFissionChamberPhysics::BuildPhysicalEvent() { Time_HF.push_back(m_PreTreatedData->GetTimeHF(e)); } - + /*unsigned int mysizeHF = m_PreTreatedData->GetHFMultiplicity(); - for(UShort_t e =0; e < mysizeHF ; e++){ + for(UShort_t e =0; e < mysizeHF ; e++){ Time_HF.push_back(m_PreTreatedData->GetTimeHF(e)); - }*/ + }*/ } @@ -126,34 +131,34 @@ void TFissionChamberPhysics::PreTreat() { // instantiate CalibrationManager static CalibrationManager* Cal = CalibrationManager::getInstance(); - - + + unsigned int mysize = m_EventData->GetMultiplicity(); for (UShort_t i = 0; i < mysize ; ++i) { Double_t Q1 = m_EventData->GetQ1(i); Double_t Q2 = m_EventData->GetQ2(i); Double_t Qmax = m_EventData->GetQmax(i); - - if (Q1 > m_E_Threshold) { - int AnodeNumber = m_EventData->GetAnodeNbr(i); + + if (Q1 > m_E_Threshold) { + int AnodeNumber = m_EventData->GetAnodeNbr(i); double TimeOffset = Cal->GetValue("FissionChamber/ANODE"+NPL::itoa(AnodeNumber)+"_TIMEOFFSET",0); double Time = m_EventData->GetTime(i);// + TimeOffset; - m_PreTreatedData->SetAnodeNbr(AnodeNumber); + m_PreTreatedData->SetAnodeNbr(AnodeNumber); m_PreTreatedData->SetQ1(Q1); m_PreTreatedData->SetQ2(Q2); m_PreTreatedData->SetQmax(Qmax); m_PreTreatedData->SetTime(Time); m_PreTreatedData->SetFakeFissionStatus(m_EventData->GetFakeFissionStatus(i)); - m_PreTreatedData->SetTimeHF(m_EventData->GetTimeHF(i)); + m_PreTreatedData->SetTimeHF(m_EventData->GetTimeHF(i)); } } - - /*unsigned int mysizeHF = m_EventData->GetHFMultiplicity(); - for (UShort_t i = 0; i < mysizeHF ; ++i) { + + /*unsigned int mysizeHF = m_EventData->GetHFMultiplicity(); + for (UShort_t i = 0; i < mysizeHF ; ++i) { m_PreTreatedData->SetTimeHF(m_EventData->GetTimeHF(i)); - }*/ + }*/ } @@ -232,7 +237,7 @@ void TFissionChamberPhysics::Clear() { Time.clear(); Time_HF.clear(); isFakeFission.clear(); - DT_FC.clear(); + DT_FC.clear(); } diff --git a/NPLib/Detectors/FissionChamber/TFissionChamberPhysics.h b/NPLib/Detectors/FissionChamber/TFissionChamberPhysics.h index c846a43455342221d39b9f281649abec93c399d2..db47fa132f2cf242e413cac5e0dabe7937704f05 100644 --- a/NPLib/Detectors/FissionChamber/TFissionChamberPhysics.h +++ b/NPLib/Detectors/FissionChamber/TFissionChamberPhysics.h @@ -69,14 +69,17 @@ class TFissionChamberPhysics : public TObject, public NPL::VDetector { vector<double> Time; vector<bool> isFakeFission; vector<double> Time_HF; - vector<double> DT_FC; + vector<double> DT_FC; - /// A usefull method to bundle all operation to add a detector - void AddDetector(TVector3 POS); - void AddDetector(double R, double Theta, double Phi); - - ////////////////////////////////////////////////////////////// - // methods inherited from the VDetector ABC class + /// A usefull method to bundle all operation to add a detector + void AddDetector(TVector3 POS); + void AddDetector(double R, double Theta, double Phi); + + TVector3 GetVectorDetectorPosition(){ return m_DetectorPosition[0];} + TVector3 GetVectorAnodePosition(int AnodeNbr){ return m_AnodePosition[AnodeNbr-1];} + + ////////////////////////////////////////////////////////////// + // methods inherited from the VDetector ABC class public: // read stream from ConfigFile to pick-up detector parameters void ReadConfiguration(NPL::InputParser); @@ -131,8 +134,8 @@ class TFissionChamberPhysics : public TObject, public NPL::VDetector { void WriteSpectra(); - ////////////////////////////////////////////////////////////// - // specific methods to FissionChamber array + ////////////////////////////////////////////////////////////// + // specific methods to FissionChamber array public: // remove bad channels, calibrate the data and apply thresholds void PreTreat(); @@ -146,39 +149,41 @@ class TFissionChamberPhysics : public TObject, public NPL::VDetector { // give and external TFissionChamberData object to TFissionChamberPhysics. // needed for online analysis for example void SetRawDataPointer(TFissionChamberData* rawDataPointer) {m_EventData = rawDataPointer;} - - // objects are not written in the TTree + + // objects are not written in the TTree private: TFissionChamberData* m_EventData; //! TFissionChamberData* m_PreTreatedData; //! TFissionChamberPhysics* m_EventPhysics; //! - // getters for raw and pre-treated data object + // getters for raw and pre-treated data object public: TFissionChamberData* GetRawData() const {return m_EventData;} TFissionChamberData* GetPreTreatedData() const {return m_PreTreatedData;} - // parameters used in the analysis + // parameters used in the analysis private: // thresholds double m_E_RAW_Threshold; //! double m_E_Threshold; //! - double CurrentTime[12]; //! - double LastTime[12]; //! - int counter[12]; //! - // number of detectors + double CurrentTime[12]; //! + double LastTime[12]; //! + int counter[12]; //! + // number of detectors private: int m_NumberOfDetectors; //! + vector<TVector3> m_DetectorPosition; //! + vector<TVector3> m_AnodePosition; //! - // spectra class + // spectra class private: TFissionChamberSpectra* m_Spectra; // ! - // spectra getter + // spectra getter public: map<string, TH1*> GetSpectra(); - // Static constructor to be passed to the Detector Factory + // Static constructor to be passed to the Detector Factory public: static NPL::VDetector* Construct(); diff --git a/NPLib/Detectors/Vendeta/TVendetaPhysics.cxx b/NPLib/Detectors/Vendeta/TVendetaPhysics.cxx index c7a0bdaead8cb0e34324c70635c365856dad0a90..4353ebb26b8b9a41c0f1bea0ae8d7041cc034e96 100644 --- a/NPLib/Detectors/Vendeta/TVendetaPhysics.cxx +++ b/NPLib/Detectors/Vendeta/TVendetaPhysics.cxx @@ -136,27 +136,36 @@ 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); - double Time = m_EventData->GetLGTime(i) + TimeOffset; - m_PreTreatedData->SetLGDetectorNbr(det); - m_PreTreatedData->SetLGQ1(m_EventData->GetLGQ1(i)); - m_PreTreatedData->SetLGQ2(m_EventData->GetLGQ2(i)); - m_PreTreatedData->SetLGTime(Time); - m_PreTreatedData->SetLGQmax(Qmax); - } - - // HG pretreat - for (UShort_t i = 0; i < mysizeHG ; ++i){ - int det = m_EventData->GetHGDetectorNbr(i); - double Qmax = m_EventData->GetHGQmax(i); - double TimeOffset=0; - TimeOffset = Cal->GetValue("Vendeta/DET"+NPL::itoa(det)+"_HG_ANODE"+NPL::itoa(m_AnodeNumber)+"_TIMEOFFSET",0); - double Time = m_EventData->GetHGTime(i) + TimeOffset; - m_PreTreatedData->SetHGDetectorNbr(det); - m_PreTreatedData->SetHGQ1(m_EventData->GetHGQ1(i)); - m_PreTreatedData->SetHGQ2(m_EventData->GetHGQ2(i)); - m_PreTreatedData->SetHGTime(Time); - m_PreTreatedData->SetHGQmax(Qmax); - } + if(m_AnodeNumber==0){ + // Apply calibration from Anode 6 in case of Pulser + TimeOffset = Cal->GetValue("Vendeta/DET"+NPL::itoa(det)+"_LG_ANODE"+NPL::itoa(6)+"_TIMEOFFSET",0); + } + double Time = m_EventData->GetLGTime(i) + TimeOffset; + m_PreTreatedData->SetLGDetectorNbr(det); + m_PreTreatedData->SetLGQ1(m_EventData->GetLGQ1(i)); + m_PreTreatedData->SetLGQ2(m_EventData->GetLGQ2(i)); + m_PreTreatedData->SetLGTime(Time); + m_PreTreatedData->SetLGQmax(Qmax); + } + + // HG pretreat + for (UShort_t i = 0; i < mysizeHG ; ++i){ + int det = m_EventData->GetHGDetectorNbr(i); + double Qmax = m_EventData->GetHGQmax(i); + double TimeOffset=0; + TimeOffset = Cal->GetValue("Vendeta/DET"+NPL::itoa(det)+"_HG_ANODE"+NPL::itoa(m_AnodeNumber)+"_TIMEOFFSET",0); + if(m_AnodeNumber==0){ + // Apply calibration from Anode 6 in case of Pulser + TimeOffset = Cal->GetValue("Vendeta/DET"+NPL::itoa(det)+"_HG_ANODE"+NPL::itoa(6)+"_TIMEOFFSET",0); + } + + double Time = m_EventData->GetHGTime(i) + TimeOffset; + m_PreTreatedData->SetHGDetectorNbr(det); + m_PreTreatedData->SetHGQ1(m_EventData->GetHGQ1(i)); + m_PreTreatedData->SetHGQ2(m_EventData->GetHGQ2(i)); + m_PreTreatedData->SetHGTime(Time); + m_PreTreatedData->SetHGQmax(Qmax); + } } @@ -164,81 +173,81 @@ void TVendetaPhysics::PreTreat() { /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::ReadAnalysisConfig() { - bool ReadingStatus = false; - - // path to file - string FileName = "./configs/ConfigVendeta.dat"; - - // open analysis config file - ifstream AnalysisConfigFile; - AnalysisConfigFile.open(FileName.c_str()); - - if (!AnalysisConfigFile.is_open()) { - cout << " No ConfigVendeta.dat found: Default parameter loaded for Analayis " << FileName << endl; - return; - } - cout << " Loading user parameter for Analysis from ConfigVendeta.dat " << endl; - - // Save it in a TAsciiFile - TAsciiFile* asciiConfig = RootOutput::getInstance()->GetAsciiFileAnalysisConfig(); - asciiConfig->AppendLine("%%% ConfigVendeta.dat %%%"); - asciiConfig->Append(FileName.c_str()); - asciiConfig->AppendLine(""); - // read analysis config file - string LineBuffer,DataBuffer,whatToDo; - while (!AnalysisConfigFile.eof()) { - // Pick-up next line - getline(AnalysisConfigFile, LineBuffer); - - // search for "header" - string name = "ConfigVendeta"; - if (LineBuffer.compare(0, name.length(), name) == 0) - ReadingStatus = true; - - // loop on tokens and data - while (ReadingStatus ) { - whatToDo=""; - AnalysisConfigFile >> whatToDo; - - // Search for comment symbol (%) - if (whatToDo.compare(0, 1, "%") == 0) { - AnalysisConfigFile.ignore(numeric_limits<streamsize>::max(), '\n' ); - } - - else if (whatToDo=="E_RAW_THRESHOLD") { - AnalysisConfigFile >> DataBuffer; - m_E_RAW_Threshold = atof(DataBuffer.c_str()); - cout << whatToDo << " " << m_E_RAW_Threshold << endl; - } - - else if (whatToDo=="E_THRESHOLD") { - AnalysisConfigFile >> DataBuffer; - m_E_Threshold = atof(DataBuffer.c_str()); - cout << whatToDo << " " << m_E_Threshold << endl; - } - - else { - ReadingStatus = false; - } - } - } + bool ReadingStatus = false; + + // path to file + string FileName = "./configs/ConfigVendeta.dat"; + + // open analysis config file + ifstream AnalysisConfigFile; + AnalysisConfigFile.open(FileName.c_str()); + + if (!AnalysisConfigFile.is_open()) { + cout << " No ConfigVendeta.dat found: Default parameter loaded for Analayis " << FileName << endl; + return; + } + cout << " Loading user parameter for Analysis from ConfigVendeta.dat " << endl; + + // Save it in a TAsciiFile + TAsciiFile* asciiConfig = RootOutput::getInstance()->GetAsciiFileAnalysisConfig(); + asciiConfig->AppendLine("%%% ConfigVendeta.dat %%%"); + asciiConfig->Append(FileName.c_str()); + asciiConfig->AppendLine(""); + // read analysis config file + string LineBuffer,DataBuffer,whatToDo; + while (!AnalysisConfigFile.eof()) { + // Pick-up next line + getline(AnalysisConfigFile, LineBuffer); + + // search for "header" + string name = "ConfigVendeta"; + if (LineBuffer.compare(0, name.length(), name) == 0) + ReadingStatus = true; + + // loop on tokens and data + while (ReadingStatus ) { + whatToDo=""; + AnalysisConfigFile >> whatToDo; + + // Search for comment symbol (%) + if (whatToDo.compare(0, 1, "%") == 0) { + AnalysisConfigFile.ignore(numeric_limits<streamsize>::max(), '\n' ); + } + + else if (whatToDo=="E_RAW_THRESHOLD") { + AnalysisConfigFile >> DataBuffer; + m_E_RAW_Threshold = atof(DataBuffer.c_str()); + cout << whatToDo << " " << m_E_RAW_Threshold << endl; + } + + else if (whatToDo=="E_THRESHOLD") { + AnalysisConfigFile >> DataBuffer; + m_E_Threshold = atof(DataBuffer.c_str()); + cout << whatToDo << " " << m_E_Threshold << endl; + } + + else { + ReadingStatus = false; + } + } + } } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::Clear() { - LG_DetectorNumber.clear(); - LG_Q1.clear(); - LG_Q2.clear(); - LG_Time.clear(); - LG_Qmax.clear(); - - HG_DetectorNumber.clear(); - HG_Q1.clear(); - HG_Q2.clear(); - HG_Time.clear(); - HG_Qmax.clear(); + LG_DetectorNumber.clear(); + LG_Q1.clear(); + LG_Q2.clear(); + LG_Time.clear(); + LG_Qmax.clear(); + + HG_DetectorNumber.clear(); + HG_Q1.clear(); + HG_Q2.clear(); + HG_Time.clear(); + HG_Qmax.clear(); } @@ -246,117 +255,117 @@ void TVendetaPhysics::Clear() { /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::ReadConfiguration(NPL::InputParser parser) { - vector<NPL::InputBlock*> blocks = parser.GetAllBlocksWithToken("Vendeta"); - if(NPOptionManager::getInstance()->GetVerboseLevel()) - cout << "//// " << blocks.size() << " detectors found " << endl; - - vector<string> cart = {"POS"}; - vector<string> sphe = {"R","Theta","Phi"}; - - for(unsigned int i = 0 ; i < blocks.size() ; i++){ - if(blocks[i]->HasTokenList(cart)){ - if(NPOptionManager::getInstance()->GetVerboseLevel()) - cout << endl << "//// Vendeta " << i+1 << endl; - - TVector3 Pos = blocks[i]->GetTVector3("POS","mm"); - AddDetector(Pos); - } - else if(blocks[i]->HasTokenList(sphe)){ - if(NPOptionManager::getInstance()->GetVerboseLevel()) - cout << endl << "//// Vendeta " << i+1 << endl; - double R = blocks[i]->GetDouble("R","mm"); - double Theta = blocks[i]->GetDouble("Theta","deg"); - double Phi = blocks[i]->GetDouble("Phi","deg"); - AddDetector(R,Theta,Phi); - } - else{ - cout << "ERROR: check your input file formatting " << endl; - exit(1); - } - } + vector<NPL::InputBlock*> blocks = parser.GetAllBlocksWithToken("Vendeta"); + if(NPOptionManager::getInstance()->GetVerboseLevel()) + cout << "//// " << blocks.size() << " detectors found " << endl; + + vector<string> cart = {"POS"}; + vector<string> sphe = {"R","Theta","Phi"}; + + for(unsigned int i = 0 ; i < blocks.size() ; i++){ + if(blocks[i]->HasTokenList(cart)){ + if(NPOptionManager::getInstance()->GetVerboseLevel()) + cout << endl << "//// Vendeta " << i+1 << endl; + + TVector3 Pos = blocks[i]->GetTVector3("POS","mm"); + AddDetector(Pos); + } + else if(blocks[i]->HasTokenList(sphe)){ + if(NPOptionManager::getInstance()->GetVerboseLevel()) + cout << endl << "//// Vendeta " << i+1 << endl; + double R = blocks[i]->GetDouble("R","mm"); + double Theta = blocks[i]->GetDouble("Theta","deg"); + double Phi = blocks[i]->GetDouble("Phi","deg"); + AddDetector(R,Theta,Phi); + } + else{ + cout << "ERROR: check your input file formatting " << endl; + exit(1); + } + } } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::InitSpectra() { - m_Spectra = new TVendetaSpectra(m_NumberOfDetectors); + m_Spectra = new TVendetaSpectra(m_NumberOfDetectors); } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::FillSpectra() { - m_Spectra -> FillRawSpectra(m_EventData); - m_Spectra -> FillPreTreatedSpectra(m_PreTreatedData); - m_Spectra -> FillPhysicsSpectra(m_EventPhysics); + m_Spectra -> FillRawSpectra(m_EventData); + m_Spectra -> FillPreTreatedSpectra(m_PreTreatedData); + m_Spectra -> FillPhysicsSpectra(m_EventPhysics); } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::CheckSpectra() { - m_Spectra->CheckSpectra(); + m_Spectra->CheckSpectra(); } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::ClearSpectra() { - // To be done + // To be done } /////////////////////////////////////////////////////////////////////////// map< string , TH1*> TVendetaPhysics::GetSpectra() { - if(m_Spectra) - return m_Spectra->GetMapHisto(); - else{ - map< string , TH1*> empty; - return empty; - } + if(m_Spectra) + return m_Spectra->GetMapHisto(); + else{ + map< string , TH1*> empty; + return empty; + } } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::WriteSpectra() { - m_Spectra->WriteSpectra(); + m_Spectra->WriteSpectra(); } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::AddParameterToCalibrationManager() { - CalibrationManager* Cal = CalibrationManager::getInstance(); - for (int i = 0; i < m_NumberOfDetectors; ++i) { - for(int j = 0; j < 11; j++){ - Cal->AddParameter("Vendeta","DET"+NPL::itoa(i+1)+"_LG_ANODE"+NPL::itoa(j+1)+"_TIMEOFFSET","Vendeta_DET"+ NPL::itoa(i+1)+"_LG_ANODE"+NPL::itoa(j+1)+"_TIMEOFFSET"); - Cal->AddParameter("Vendeta","DET"+NPL::itoa(i+1)+"_HG_ANODE"+NPL::itoa(j+1)+"_TIMEOFFSET","Vendeta_DET"+ NPL::itoa(i+1)+"_HG_ANODE"+NPL::itoa(j+1)+"_TIMEOFFSET"); - } - } + CalibrationManager* Cal = CalibrationManager::getInstance(); + for (int i = 0; i < m_NumberOfDetectors; ++i) { + for(int j = 0; j < 11; j++){ + Cal->AddParameter("Vendeta","DET"+NPL::itoa(i+1)+"_LG_ANODE"+NPL::itoa(j+1)+"_TIMEOFFSET","Vendeta_DET"+ NPL::itoa(i+1)+"_LG_ANODE"+NPL::itoa(j+1)+"_TIMEOFFSET"); + Cal->AddParameter("Vendeta","DET"+NPL::itoa(i+1)+"_HG_ANODE"+NPL::itoa(j+1)+"_TIMEOFFSET","Vendeta_DET"+ NPL::itoa(i+1)+"_HG_ANODE"+NPL::itoa(j+1)+"_TIMEOFFSET"); + } + } } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::InitializeRootInputRaw() { - TChain* inputChain = RootInput::getInstance()->GetChain(); - inputChain->SetBranchStatus("Vendeta", true ); - inputChain->SetBranchAddress("Vendeta", &m_EventData ); + TChain* inputChain = RootInput::getInstance()->GetChain(); + inputChain->SetBranchStatus("Vendeta", true ); + inputChain->SetBranchAddress("Vendeta", &m_EventData ); } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::InitializeRootInputPhysics() { - TChain* inputChain = RootInput::getInstance()->GetChain(); - inputChain->SetBranchAddress("Vendeta", &m_EventPhysics); + TChain* inputChain = RootInput::getInstance()->GetChain(); + inputChain->SetBranchAddress("Vendeta", &m_EventPhysics); } /////////////////////////////////////////////////////////////////////////// void TVendetaPhysics::InitializeRootOutput() { - TTree* outputTree = RootOutput::getInstance()->GetTree(); - outputTree->Branch("Vendeta", "TVendetaPhysics", &m_EventPhysics); + TTree* outputTree = RootOutput::getInstance()->GetTree(); + outputTree->Branch("Vendeta", "TVendetaPhysics", &m_EventPhysics); } @@ -365,7 +374,7 @@ void TVendetaPhysics::InitializeRootOutput() { // Construct Method to be pass to the DetectorFactory // //////////////////////////////////////////////////////////////////////////////// NPL::VDetector* TVendetaPhysics::Construct() { - return (NPL::VDetector*) new TVendetaPhysics(); + return (NPL::VDetector*) new TVendetaPhysics(); } @@ -374,14 +383,14 @@ NPL::VDetector* TVendetaPhysics::Construct() { // Registering the construct method to the factory // //////////////////////////////////////////////////////////////////////////////// extern "C"{ - class proxy_Vendeta{ - public: - proxy_Vendeta(){ - NPL::DetectorFactory::getInstance()->AddToken("Vendeta","Vendeta"); - NPL::DetectorFactory::getInstance()->AddDetector("Vendeta",TVendetaPhysics::Construct); - } - }; - - proxy_Vendeta p_Vendeta; + class proxy_Vendeta{ + public: + proxy_Vendeta(){ + NPL::DetectorFactory::getInstance()->AddToken("Vendeta","Vendeta"); + NPL::DetectorFactory::getInstance()->AddDetector("Vendeta",TVendetaPhysics::Construct); + } + }; + + proxy_Vendeta p_Vendeta; } diff --git a/NPSimulation/Detectors/FissionChamber/FissionChamber.cc b/NPSimulation/Detectors/FissionChamber/FissionChamber.cc index 5bbb7ab2704f136b13c9187fca0423ebc29c31b1..0a9c37f68807aa5e6286682da683448deb06b8a3 100644 --- a/NPSimulation/Detectors/FissionChamber/FissionChamber.cc +++ b/NPSimulation/Detectors/FissionChamber/FissionChamber.cc @@ -373,7 +373,6 @@ void FissionChamber::BuildAnode(double Zpos){ Tv.setZ(Zpos+0.5*FissionChamber_NS::Kapton_Thickness+0.5*FissionChamber_NS::Cu_Thickness); m_FissionChamberVolume->AddPlacedVolume(Cu_vol, Tv, Rv); - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Add Detector branch to the EventTree. @@ -408,6 +407,7 @@ void FissionChamber::ReadSensitive(const G4Event* ){ m_Event->SetQ1(Energy); m_Event->SetQ2(Energy); m_Event->SetTime(Time); + m_Event->SetQmax(Energy); m_Event->SetTimeHF(0); m_Event->SetFakeFissionStatus(0); } diff --git a/Projects/Vendeta/Analysis.cxx b/Projects/Vendeta/Analysis.cxx index 8acfff0d406584fed01b0add8c3b32220646ba6a..0e777b7ee21632251b3cbed30e3729ed85c2c6a1 100644 --- a/Projects/Vendeta/Analysis.cxx +++ b/Projects/Vendeta/Analysis.cxx @@ -1,23 +1,23 @@ /***************************************************************************** - * Copyright (C) 2009-2016 this file is part of the NPTool Project * - * * - * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * - * For the list of contributors see $NPTOOL/Licence/Contributors * - *****************************************************************************/ + * Copyright (C) 2009-2016 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ /***************************************************************************** - * Original Author: XAUTHORX contact address: XMAILX * - * * - * Creation Date : XMONTHX XYEARX * - * Last update : * - *---------------------------------------------------------------------------* - * Decription: * - * This class describe Vendeta analysis project * - * * - *---------------------------------------------------------------------------* - * Comment: * - * * - *****************************************************************************/ + * Original Author: XAUTHORX contact address: XMAILX * + * * + * Creation Date : XMONTHX XYEARX * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class describe Vendeta analysis project * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + *****************************************************************************/ #include<iostream> using namespace std; @@ -36,250 +36,377 @@ 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(); + ReInitValue(); - unsigned int FC_mult = FC->AnodeNumber.size(); - unsigned int HF_mult = FC->Time_HF.size(); + unsigned int FC_mult = FC->AnodeNumber.size(); + unsigned int HF_mult = FC->Time_HF.size(); - // Run 11 - //double GammaOffset[11] = {971.37, 970.67, 972.73, 972.59, 989.33, 982.03, 970.73, 985.13, 980.03, 976.83, 983.93}; + // Run 11 + //double GammaOffset[11] = {971.37, 970.67, 972.73, 972.59, 989.33, 982.03, 970.73, 985.13, 980.03, 976.83, 983.93}; - // Run 25++ - //double GammaOffset[11] = {969.58, 969.11, 975.03, 974.75, 978.90, 978.16, 967.34, 977.2, 981.14, 983.04, 982.32}; + // Run 25++ + //double GammaOffset[11] = {969.58, 969.11, 975.03, 974.75, 978.90, 978.16, 967.34, 977.2, 981.14, 983.04, 982.32}; - // Run 59++ - // double GammaOffset[11] = {969.28, 968.81, 987.43, 974.45, 994.30, 977.86, 980.25, 986.97, 996.30, 998.58, 997.12}; + // Run 59++ + // double GammaOffset[11] = {969.28, 968.81, 987.43, 974.45, 994.30, 977.86, 980.25, 986.97, 996.30, 998.58, 997.12}; - //Run 85+- - double GammaOffset[11] = {981.25, 980.88, 988.35, 978.45, 997.40, 982.01, 992.7, 995.18, 995.27, 997.45, 993.0}; + //Run 87 + // double GammaOffset[11] = {973.3, 972.81, 989.33, 978.45, 997.40, 982.01, 993.82, 995.10, 997.25, 999.25, 994.8}; + //Run 94++ + // double GammaOffset[11] = {977.27, 976.72, 995.38, 984.38, 1007.49, 995.91, 999.38, 995.30, 1003.12, 999.25, 998.84}; - double incomingDT=0; - double incomingE=0; - double flight_path = 21500.; - /*for(unsigned int j=0; j<HF_mult; j++){ - for(unsigned int i=0; i<FC_mult; i++){ - incomingDT = FC->Time[i] - FC->Time_HF[j] - GammaOffset[FC->AnodeNumber[i]-1]; - if(incomingDT<0){ - incomingDT += 1790; - } - double length = flight_path;// + 6*FC->AnodeNumber[i]; - neutron->SetBeta((length/incomingDT) / c_light); - incomingE = neutron->GetEnergy(); + //Run 102++ + //double GammaOffset[11] = {975.14, 974.69, 985.36, 974.37, 1001.16, 987.81, 999.6, 997.08, 1001.04, 1003.2, 996.54}; - inToF.push_back(incomingDT); - inEnergy.push_back(incomingE); - } + //Run 110++ + /* double GammaOffset[11] = {975.14, 974.69, 985.36, 974.37, 1001.16, 987.81, 999.6, 993.04, 1001.04, 1003.2, 996.54}; */ + + //Run 120++ + /* double GammaOffset[11] = {975.298, 974.871, 985.779, 974.52, 996.487, 987.831, 1001.131, 993.013, 1001.013, 1001.964, 995.565}; */ + + //Run 131-133 + double GammaOffset[11]={975.1, 974.97, 984.78, 974.7, 998.4, 987.8, 1002.6, 993.73, 1000.3, 1001.16, 995.17}; + double FakeFission_Offset = 987.94; + + //Run 135-137 (2.3 us pulse) + /* double GammaOffset[11] = {1511.931, 1511.552, 1521.525, 1511.366, 1534.876 ,1524.462,1539.23, 1530.338, 1536.912, 1537.882, 1531.938}; */ + + //Run 140++ + // double GammaOffset[11] = {975.1,975,988.6,978.7,998.3,983.7,1002.4,997.5,996.1,997.4,991.1}; + + //Run 144 part 4 ++ (2.3 us pulse) + /* double GammaOffset[11] = {1507.98, 1507.94, 1525.7, 1515.59, 1535.15,1520.7,1530.48, 1534.12, 1532.71, 1534.08, 1528.07}; */ + + double incomingDT=0; + double incomingE=0; + double flight_path = 21500.; + /*for(unsigned int j=0; j<HF_mult; j++){ + for(unsigned int i=0; i<FC_mult; i++){ + incomingDT = FC->Time[i] - FC->Time_HF[j] - GammaOffset[FC->AnodeNumber[i]-1]; + if(incomingDT<0){ + incomingDT += 1790; + } + double length = flight_path;// + 6*FC->AnodeNumber[i]; + neutron->SetBeta((length/incomingDT) / c_light); + incomingE = neutron->GetEnergy(); + + inToF.push_back(incomingDT); + inEnergy.push_back(incomingE); + } }*/ - /*if(FC_mult==2){ - double HF1, HF2; - for(int i=0; i<2; i++){ - HF1 = FC->Time[0] - FC->Time_HF[0]; - HF2 = FC->Time[1] - FC->Time_HF[1]; - } - if(FC->AnodeNumber[0]>0 && FC->AnodeNumber[1]>0 && HF1<1790 && HF2<1790) - cout << FC->AnodeNumber[0] << " / " << FC->AnodeNumber[1] << endl; + /*if(FC_mult==2){ + double HF1, HF2; + for(int i=0; i<2; i++){ + HF1 = FC->Time[0] - FC->Time_HF[0]; + HF2 = FC->Time[1] - FC->Time_HF[1]; + } + if(FC->AnodeNumber[0]>0 && FC->AnodeNumber[1]>0 && HF1<1790 && HF2<1790) }*/ - if(FC_mult>0){ - - int anode = FC->AnodeNumber[0]; - double Time_FC = FC->Time[0]; - bool isFake = FC->isFakeFission[0]; - - incomingDT = FC->Time[0] - FC->Time_HF[0]; - if(anode>0) incomingDT -= GammaOffset[anode-1]; - if(incomingDT<0){ - incomingDT += 1790; - } - double length = flight_path;// + 6*FC->AnodeNumber[i]; - neutron->SetBeta((length/incomingDT) / c_light); - incomingE = neutron->GetEnergy(); - - inToF.push_back(incomingDT); - inEnergy.push_back(incomingE); - - FC_Q1.push_back(FC->Q1[0]); - FC_Q2.push_back(FC->Q2[0]); - FC_Qmax.push_back(FC->Qmax[0]); - FC_DT.push_back(FC->DT_FC[0]); - FC_FakeFission.push_back(FC->isFakeFission[0]); - FC_Anode_ID.push_back(anode); - - Vendeta->SetAnodeNumber(anode); - Vendeta->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>-500){ - - double DeltaTheta = atan(63.5/Rdet); - double Theta_Vendeta = DetPos.Theta(); - double Theta_random = ra.Uniform(Theta_Vendeta-DeltaTheta,Theta_Vendeta+DeltaTheta); - //cout << DetNbr << " " << Rdet << endl; - //neutron->SetTimeOfFlight(DT*1e-9/(Rdet*1e-3)); - //neutron->SetTimeOfFlight(DT*1e-9/(0.55)); - neutron->SetBeta( (Rdet/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>-500){ - double DeltaTheta = atan(63.5/Rdet); - double Theta_Vendeta = DetPos.Theta(); - double Theta_random = ra.Uniform(Theta_Vendeta-DeltaTheta,Theta_Vendeta+DeltaTheta); - //cout << DetNbr << " " << Rdet << endl; - //neutron->SetTimeOfFlight(DT*1e-9/(Rdet*1e-3)); - //neutron->SetTimeOfFlight(DT*1e-9/(0.55)); - neutron->SetBeta( (Rdet/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] = -1; - 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){ - LG_ID[j] = -1; - LG_Tof[j] = - 100000; - LG_ELab[j] = - 100000; - LG_ThetaLab[j] = - 100000; - LG_Q1[j] = - 100000; - LG_Q2[j] = - 100000; - LG_Qmax[j] = - 100000; - - } - } - } - } - } // if LG && HG*/ - - }// if FC = 1 + if(FC_mult>0){ + int EventMax=0; + + // double AnodeMaxQ=0; + // for(unsigned int i=0;i<FC_mult;i++) + // { + // if(FC->AnodeNumber[i]==7) EventMax=i; + // // if(AnodeMaxQ<AnodeQ) {EventMax=i; AnodeMaxQ=AnodeQ;} + // } + + int anode = FC->AnodeNumber[EventMax]; + double Time_FC = FC->Time[EventMax]; + bool isFake = FC->isFakeFission[EventMax]; + double Time_HF = FC->Time_HF[EventMax]; + incomingDT = FC->Time[EventMax] - FC->Time_HF[EventMax]; + TVector3 AnodePos = FC->GetVectorAnodePosition(6); + + if(anode>0){ + incomingDT -= GammaOffset[anode-1]; + AnodePos = FC->GetVectorAnodePosition(anode); + } + else if(anode ==0){ + incomingDT -= FakeFission_Offset; + } + /* if(FC_mult==3){ */ + /* double inDT2 = FC->Time[1] -FC->Time_HF[1] - GammaOffset[FC->AnodeNumber[1]-1]; */ + /* double inDT3 = FC->Time[2] -FC->Time_HF[2] - GammaOffset[FC->AnodeNumber[2]-1]; */ + /* if( incomingDT - inDT2 > 0 ) */ + /* } */ + + if(incomingDT<0){ + incomingDT += 1790; + /* incomingDT += 2325; */ + } + + double length = flight_path;// + 6*FC->AnodeNumber[i]; + neutron->SetBeta((length/incomingDT) / c_light); + incomingE = neutron->GetEnergy(); + + inToF.push_back(incomingDT); + inEnergy.push_back(incomingE); + + FC_Q1.push_back(FC->Q1[EventMax]); + FC_Q2.push_back(FC->Q2[EventMax]); + FC_Qmax.push_back(FC->Qmax[EventMax]); + FC_DT.push_back(FC->DT_FC[EventMax]); + FC_FakeFission.push_back(FC->isFakeFission[EventMax]); + FC_Anode_ID.push_back(anode); + + /* FC_Time.push_back(FC->Time[EventMax]); */ + /* HF_Time.push_back(FC->Time_HF[EventMax]); */ + + Vendeta->SetAnodeNumber(anode); + Vendeta->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]; + TVector3 DetPos = Vendeta->GetVectorDetectorPosition(DetNbr); + double Rdet = (DetPos-AnodePos).Mag() + 2 + 0.5*5.1 ; // Aluminum window + cell thickness + double DT = Time_Vendeta - Time_FC;// + ToF_Shift_Vendlg[DetNbr-1]; + + if(DT>-500){ + double DeltaTheta = atan(63.5/Rdet); + double Theta_Vendeta = DetPos.Theta(); + double Theta_random = ra.Uniform(Theta_Vendeta-DeltaTheta,Theta_Vendeta+DeltaTheta); + //neutron->SetTimeOfFlight(DT*1e-9/(Rdet*1e-3)); + //neutron->SetTimeOfFlight(DT*1e-9/(0.55)); + neutron->SetBeta( (Rdet/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]); + /* LG_Time.push_back(Time_Vendeta); */ + + } + } + + // 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]; + TVector3 DetPos = Vendeta->GetVectorDetectorPosition(DetNbr); + double Rdet = (DetPos-AnodePos).Mag() + 2 + 0.5*5.1 ; // Aluminum window + cell thickness + double DT = Time_Vendeta - Time_FC;// + ToF_Shift_Vendhg[DetNbr-1]; + + if(DT>-500){ + + double DeltaTheta = atan(63.5/Rdet); + + double Theta_Vendeta = DetPos.Theta(); + double Theta_random = ra.Uniform(Theta_Vendeta-DeltaTheta,Theta_Vendeta+DeltaTheta); + //neutron->SetTimeOfFlight(DT*1e-9/(Rdet*1e-3)); + //neutron->SetTimeOfFlight(DT*1e-9/(0.55)); + neutron->SetBeta( (Rdet/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]); + /* HG_Time.push_back(Time_Vendeta); */ + } + } + + //Highlight saturated detectors + static vector<int> LG_Saturated, HG_Saturated, LG_T_sat, HG_T_sat; + LG_Saturated.clear(), HG_Saturated.clear(), LG_T_sat.clear(), HG_T_sat.clear(); + for(int j = 0; j < LG_Tof.size();j++){ + int lgID = LG_ID[j]; + if( (lgID %4 < 2) && LG_Q1[j]>500e3){ // 50 Ohm + LG_Saturated.push_back(lgID); + LG_T_sat.push_back(LG_Tof[j]); + } + else if( lgID %4 > 1 && LG_Q1[j]>590e3){ // 70 Ohm + LG_Saturated.push_back(lgID); + LG_T_sat.push_back(LG_Tof[j]); + } + } + for(int j = 0; j < HG_Tof.size();j++){ + int hgID = HG_ID[j] ; + if( (hgID %4 ==0 || hgID %4 ==1) && HG_Qmax[j] > 23800){ + HG_Saturated.push_back(hgID); + HG_T_sat.push_back(HG_Tof[j]); + } + else if( hgID %4 !=0 && hgID %4 !=1 && HG_Qmax[j] > 24300){ + HG_Saturated.push_back(hgID); + HG_T_sat.push_back(HG_Tof[j]); + } + } + /////////////////////////////////////////////////// + + + //Removes all signals from saturated detectors + for(int j = 0; j < LG_Saturated.size(); j++){ + for(int k = 0; k < HG_Tof.size(); k++){ + if(HG_ID[k] == LG_Saturated[j] && HG_Tof[k] > LG_T_sat[j]){ + HG_ID[k] = -1; + HG_Tof[k] =-100000; + HG_ELab[k] =-100000; + HG_ThetaLab[k] =-100000; + HG_Q1[k] =-100000; + HG_Q2[k] =-100000; + HG_Qmax[k] =-100000; + } + } + for(int k = 0; k < LG_Tof.size(); k++){ + if(LG_ID[k] == LG_Saturated[j] && LG_Tof[k] > LG_T_sat[j]){ + LG_ID[k] = -1; + LG_Tof[k] =-100000; + LG_ELab[k] =-100000; + LG_ThetaLab[k] =-100000; + LG_Q1[k] =-100000; + LG_Q2[k] =-100000; + LG_Qmax[k] =-100000; + } + } + } + + for(int j = 0; j < HG_Saturated.size(); j++){ + for(int k = 0; k < HG_Tof.size(); k++){ + if(HG_ID[k] == HG_Saturated[j] && HG_Tof[k] > HG_T_sat[j]){ + HG_ID[k] = -1; + HG_Tof[k] =-100000; + HG_ELab[k] =-100000; + HG_ThetaLab[k] =-100000; + HG_Q1[k] =-100000; + HG_Q2[k] =-100000; + HG_Qmax[k] =-100000; + } + } + } + + /////////////////////////////////////////////////// + + //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]) < 3 && HG_ID[k] == LG_ID[j] && LG_ID[j]>0){ */ + /* if( HG_Q1[k]>=120e3){ */ + /* HG_ID[k] = -1; */ + /* HG_Tof[k] = -100000; */ + /* HG_ELab[k] = -100000; */ + /* HG_ThetaLab[k] = -100000; */ + /* HG_Q1[k] = -100000; */ + /* HG_Q2[k] = -100000; */ + /* HG_Qmax[k] = -100000; */ + /* /1* HG_Time[k] = - 100000; *1/ */ + /* } */ + /* else if( HG_Q1[k]<120e3){ */ + /* LG_ID[j] = -1; */ + /* LG_Tof[j] = -100000; */ + /* LG_ELab[j] = -100000; */ + /* LG_ThetaLab[j] = -100000; */ + /* LG_Q1[j] = -100000; */ + /* LG_Q2[j] = -100000; */ + /* LG_Qmax[j] = -100000; */ + /* /1* LG_Time[j] = -100000; *1/ */ + + /* } */ + /* } */ + /* } */ + /* } */ + /* } // if LG && HG */ + + }// if FC = 1 } //////////////////////////////////////////////////////////////////////////////// void Analysis::InitOutputBranch(){ - // Incoming neutron - RootOutput::getInstance()->GetTree()->Branch("inToF",&inToF); - RootOutput::getInstance()->GetTree()->Branch("inEnergy",&inEnergy); - - // FissionChamber - RootOutput::getInstance()->GetTree()->Branch("FC_Q1",&FC_Q1); - RootOutput::getInstance()->GetTree()->Branch("FC_Q2",&FC_Q2); - RootOutput::getInstance()->GetTree()->Branch("FC_Qmax",&FC_Qmax); - RootOutput::getInstance()->GetTree()->Branch("FC_DT",&FC_DT); - RootOutput::getInstance()->GetTree()->Branch("FC_FakeFission",&FC_FakeFission); - RootOutput::getInstance()->GetTree()->Branch("FC_Anode_ID",&FC_Anode_ID); - - // LG - 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); - - // HG - 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); + // Incoming neutron + RootOutput::getInstance()->GetTree()->Branch("inToF",&inToF); + RootOutput::getInstance()->GetTree()->Branch("inEnergy",&inEnergy); + + // FissionChamber + RootOutput::getInstance()->GetTree()->Branch("FC_Q1",&FC_Q1); + RootOutput::getInstance()->GetTree()->Branch("FC_Q2",&FC_Q2); + RootOutput::getInstance()->GetTree()->Branch("FC_Qmax",&FC_Qmax); + RootOutput::getInstance()->GetTree()->Branch("FC_DT",&FC_DT); + RootOutput::getInstance()->GetTree()->Branch("FC_FakeFission",&FC_FakeFission); + RootOutput::getInstance()->GetTree()->Branch("FC_Anode_ID",&FC_Anode_ID); + /* RootOutput::getInstance()->GetTree()->Branch("FC_Time",&FC_Time); */ + /* RootOutput::getInstance()->GetTree()->Branch("HF_Time",&HF_Time); */ + + // LG + 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("LG_Time",&LG_Time); */ + + // HG + 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); + /* RootOutput::getInstance()->GetTree()->Branch("HG_Time",&HG_Time); */ } //////////////////////////////////////////////////////////////////////////////// void Analysis::ReInitValue(){ - inToF.clear(); - inEnergy.clear(); - - 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(); - - FC_Q1.clear(); - FC_Q2.clear(); - FC_Qmax.clear(); - FC_DT.clear(); - FC_FakeFission.clear(); - FC_Anode_ID.clear(); - - + inToF.clear(); + inEnergy.clear(); + + LG_ThetaLab.clear(); + LG_ELab.clear(); + LG_Tof.clear(); + LG_ID.clear(); + LG_Q1.clear(); + LG_Q2.clear(); + LG_Qmax.clear(); + /* LG_Time.clear(); */ + + HG_ThetaLab.clear(); + HG_ELab.clear(); + HG_Tof.clear(); + HG_ID.clear(); + HG_Q1.clear(); + HG_Q2.clear(); + HG_Qmax.clear(); + /* HG_Time.clear(); */ + + FC_Q1.clear(); + FC_Q2.clear(); + FC_Qmax.clear(); + FC_DT.clear(); + FC_FakeFission.clear(); + FC_Anode_ID.clear(); + /* FC_Time.clear(); */ + /* HF_Time.clear(); */ } //////////////////////////////////////////////////////////////////////////////// @@ -291,20 +418,20 @@ void Analysis::End(){ // Construct Method to be pass to the DetectorFactory // //////////////////////////////////////////////////////////////////////////////// NPL::VAnalysis* Analysis::Construct(){ - return (NPL::VAnalysis*) new Analysis(); + 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; + class proxy{ + public: + proxy(){ + NPL::AnalysisFactory::getInstance()->SetConstructor(Analysis::Construct); + } + }; + + proxy p; }