From 7cfc50548827af65d4aa99d1741d4e90b448e4d5 Mon Sep 17 00:00:00 2001 From: matta <matta@npt> Date: Thu, 25 Nov 2010 13:46:36 +0000 Subject: [PATCH] * Adding config file reading for SSSD on same model as MUST2 - User can now edit a ConfigSSSD.dat file in order to disable channel --- NPLib/MUST2/TMust2Physics.cxx | 7 +- NPLib/SSSD/TSSSDPhysics.cxx | 579 +++++++++++++++++++++------------- NPLib/SSSD/TSSSDPhysics.h | 112 ++++--- 3 files changed, 429 insertions(+), 269 deletions(-) diff --git a/NPLib/MUST2/TMust2Physics.cxx b/NPLib/MUST2/TMust2Physics.cxx index 7371b1082..8d92e2228 100644 --- a/NPLib/MUST2/TMust2Physics.cxx +++ b/NPLib/MUST2/TMust2Physics.cxx @@ -43,7 +43,7 @@ TMust2Physics::TMust2Physics() EventData = new TMust2Data ; PreTreatedData = new TMust2Data ; EventPhysics = this ; - NumberOfTelescope = 0 ; + NumberOfTelescope = 0 ; m_MaximumStripMultiplicityAllowed = 0 ; m_StripEnergyMatchingTolerance = 0 ; // ReadAnalysisConfig(); @@ -1055,12 +1055,9 @@ void TMust2Physics::ReadConfiguration(string Path) } } - -// InitializeStandardParameter(); -// ReadAnalysisConfig(); } InitializeStandardParameter(); - ReadAnalysisConfig(); + ReadAnalysisConfig(); cout << endl << "/////////////////////////////" << endl << endl; diff --git a/NPLib/SSSD/TSSSDPhysics.cxx b/NPLib/SSSD/TSSSDPhysics.cxx index 9ba970a25..0acd6498c 100644 --- a/NPLib/SSSD/TSSSDPhysics.cxx +++ b/NPLib/SSSD/TSSSDPhysics.cxx @@ -19,55 +19,58 @@ * * * * *****************************************************************************/ -// NPL +// NPL #include "TSSSDPhysics.h" #include "RootOutput.h" #include "RootInput.h" -// STL +// STL #include <iostream> #include <sstream> #include <fstream> #include <limits> #include <stdlib.h> using namespace std; - -// ROOT +using namespace LOCAL; +// ROOT #include "TChain.h" -// tranform an integer to a string - string itoa(int value) - { - std::ostringstream o; - - if (!(o << value)) - return "" ; - - return o.str(); - } +// tranform an integer to a string + string itoa(int value) + { + std::ostringstream o; + + if (!(o << value)) + return "" ; + + return o.str(); + } ClassImp(TSSSDPhysics) /////////////////////////////////////////////////////////////////////////// TSSSDPhysics::TSSSDPhysics() - { - NumberOfDetector = 0 ; - EventData = new TSSSDData ; - EventPhysics = this ; - } + { + NumberOfDetector = 0 ; + EventData = new TSSSDData ; + PreTreatedData = new TSSSDData ; + EventPhysics = this ; + E_Threshold = 0 ; + Pedestal_Threshold = 000; + } /////////////////////////////////////////////////////////////////////////// TSSSDPhysics::~TSSSDPhysics() - {} + {} /////////////////////////////////////////////////////////////////////////// void TSSSDPhysics::Clear() - { - DetectorNumber .clear() ; - StripNumber .clear() ; - Energy .clear() ; - Time .clear() ; - } + { + DetectorNumber .clear() ; + StripNumber .clear() ; + Energy .clear() ; + Time .clear() ; + } /////////////////////////////////////////////////////////////////////////// void TSSSDPhysics::ReadConfiguration(string Path) - { + { ifstream ConfigFile ; ConfigFile.open(Path.c_str()) ; string LineBuffer ; @@ -87,218 +90,348 @@ void TSSSDPhysics::ReadConfiguration(string Path) bool ReadingStatus = false ; while (!ConfigFile.eof()) - { + { - getline(ConfigFile, LineBuffer); - - // If line is a Start Up ThinSi bloc, Reading toggle to true - if (LineBuffer.compare(0, 6, "ThinSi") == 0) - { - cout << "Detector found: " << endl ; - ReadingStatus = true ; - } - - // Else don't toggle to Reading Block Status - else ReadingStatus = false ; - - // Reading Block - while(ReadingStatus) - { - // Pickup Next Word - ConfigFile >> DataBuffer ; - - // Comment Line - if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} - - // Finding another telescope (safety), toggle out - else if (DataBuffer.compare(0, 6, "ThinSi") == 0) { - cout << "WARNING: Another Telescope is find before standard sequence of Token, Error may occured in Telecope definition" << endl ; - ReadingStatus = false ; - } - - //Position method - else if (DataBuffer.compare(0, 3, "A=") == 0) { - check_A = true; - ConfigFile >> DataBuffer ; - TLX = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - TLY = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - TLZ = atof(DataBuffer.c_str()) ; - - } - - else if (DataBuffer.compare(0, 3, "B=") == 0) { - check_B = true; - ConfigFile >> DataBuffer ; - BLX = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - BLY = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - BLZ = atof(DataBuffer.c_str()) ; - - } - - else if (DataBuffer.compare(0, 3, "C=") == 0) { - check_C = true; - ConfigFile >> DataBuffer ; - BRX = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - BRY = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - BRZ = atof(DataBuffer.c_str()) ; - - } - - else if (DataBuffer.compare(0, 3, "D=") == 0) { - check_D = true; - ConfigFile >> DataBuffer ; - TRX = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - TRY = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - TRZ = atof(DataBuffer.c_str()) ; - - } - - - //Angle method - else if (DataBuffer.compare(0, 6, "THETA=") == 0) { - check_Theta = true; - ConfigFile >> DataBuffer ; - Theta = atof(DataBuffer.c_str()) ; - } - - else if (DataBuffer.compare(0, 4, "PHI=") == 0) { - check_Phi = true; - ConfigFile >> DataBuffer ; - Phi = atof(DataBuffer.c_str()) ; - } - - else if (DataBuffer.compare(0, 2, "R=") == 0) { - check_R = true; - ConfigFile >> DataBuffer ; - R = atof(DataBuffer.c_str()) ; - } - - - else if (DataBuffer.compare(0, 5, "BETA=") == 0) { - check_beta = true; - ConfigFile >> DataBuffer ; - beta_u = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - beta_v = atof(DataBuffer.c_str()) ; - ConfigFile >> DataBuffer ; - beta_w = atof(DataBuffer.c_str()) ; - } - - /////////////////////////////////////////////////// - // If no Detector Token and no comment, toggle out - else - {ReadingStatus = false; cout << "Wrong Token Sequence: Getting out " << DataBuffer << endl ;} - - ///////////////////////////////////////////////// - // If All necessary information there, toggle out - - if ( (check_A && check_B && check_C && check_D) || (check_Theta && check_Phi && check_R && check_beta) ) - { - ReadingStatus = false; - - ///Add The previously define telescope - //With position method - if ((check_A && check_B && check_C && check_D) || !(check_Theta && check_Phi && check_R)) { - NumberOfDetector++; - } - - //with angle method - else if ((check_Theta && check_Phi && check_R) || !(check_A && check_B && check_C && check_D)) { - NumberOfDetector++; - } - - // Reinitialisation of Check Boolean - - check_A = false ; - check_B = false ; - check_C = false ; - check_D = false ; - - check_Theta = false ; - check_Phi = false ; - check_R = false ; - check_beta = false ; - ReadingStatus = false ; - - } - - } - } - + getline(ConfigFile, LineBuffer); + + // If line is a Start Up ThinSi bloc, Reading toggle to true + if (LineBuffer.compare(0, 6, "ThinSi") == 0) + { + cout << "Detector found: " << endl ; + ReadingStatus = true ; + } + + // Else don't toggle to Reading Block Status + else ReadingStatus = false ; + + // Reading Block + while(ReadingStatus) + { + // Pickup Next Word + ConfigFile >> DataBuffer ; + + // Comment Line + if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} + + // Finding another telescope (safety), toggle out + else if (DataBuffer.compare(0, 6, "ThinSi") == 0) { + cout << "WARNING: Another Telescope is find before standard sequence of Token, Error may occured in Telecope definition" << endl ; + ReadingStatus = false ; + } + + //Position method + else if (DataBuffer.compare(0, 3, "A=") == 0) { + check_A = true; + ConfigFile >> DataBuffer ; + TLX = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + TLY = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + TLZ = atof(DataBuffer.c_str()) ; + + } + + else if (DataBuffer.compare(0, 3, "B=") == 0) { + check_B = true; + ConfigFile >> DataBuffer ; + BLX = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + BLY = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + BLZ = atof(DataBuffer.c_str()) ; + + } + + else if (DataBuffer.compare(0, 3, "C=") == 0) { + check_C = true; + ConfigFile >> DataBuffer ; + BRX = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + BRY = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + BRZ = atof(DataBuffer.c_str()) ; + + } + + else if (DataBuffer.compare(0, 3, "D=") == 0) { + check_D = true; + ConfigFile >> DataBuffer ; + TRX = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + TRY = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + TRZ = atof(DataBuffer.c_str()) ; + + } + + + //Angle method + else if (DataBuffer.compare(0, 6, "THETA=") == 0) { + check_Theta = true; + ConfigFile >> DataBuffer ; + Theta = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 4, "PHI=") == 0) { + check_Phi = true; + ConfigFile >> DataBuffer ; + Phi = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 2, "R=") == 0) { + check_R = true; + ConfigFile >> DataBuffer ; + R = atof(DataBuffer.c_str()) ; + } + + + else if (DataBuffer.compare(0, 5, "BETA=") == 0) { + check_beta = true; + ConfigFile >> DataBuffer ; + beta_u = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + beta_v = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + beta_w = atof(DataBuffer.c_str()) ; + } + + /////////////////////////////////////////////////// + // If no Detector Token and no comment, toggle out + else + {ReadingStatus = false; cout << "Wrong Token Sequence: Getting out " << DataBuffer << endl ;} + + ///////////////////////////////////////////////// + // If All necessary information there, toggle out + + if ( (check_A && check_B && check_C && check_D) || (check_Theta && check_Phi && check_R && check_beta) ) + { + ReadingStatus = false; + + ///Add The previously define telescope + //With position method + if ((check_A && check_B && check_C && check_D) || !(check_Theta && check_Phi && check_R)) { + NumberOfDetector++; + } + + //with angle method + else if ((check_Theta && check_Phi && check_R) || !(check_A && check_B && check_C && check_D)) { + NumberOfDetector++; + } + + // Reinitialisation of Check Boolean + + check_A = false ; + check_B = false ; + check_C = false ; + check_D = false ; + + check_Theta = false ; + check_Phi = false ; + check_R = false ; + check_beta = false ; + ReadingStatus = false ; + + } + + } + } + + InitializeStandardParameter() ; + ReadAnalysisConfig() ; } /////////////////////////////////////////////////////////////////////////// void TSSSDPhysics::AddParameterToCalibrationManager() - { - CalibrationManager* Cal = CalibrationManager::getInstance(); - - for(int i = 0 ; i < NumberOfDetector ; i++) - { - - for( int j = 0 ; j < 16 ; j++) - { - Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E") ; - Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T") ; - } - - } - } - + { + CalibrationManager* Cal = CalibrationManager::getInstance(); + + for(int i = 0 ; i < NumberOfDetector ; i++) + { + + for( int j = 0 ; j < 16 ; j++) + { + Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E") ; + Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T") ; + } + + } + } + /////////////////////////////////////////////////////////////////////////// void TSSSDPhysics::InitializeRootInput() - { - TChain* inputChain = RootInput::getInstance()->GetChain() ; - inputChain->SetBranchStatus ( "ThinSi" , true ) ; - inputChain->SetBranchStatus ( "fSSSD_*" , true ) ; - inputChain->SetBranchAddress( "ThinSi" , &EventData ) ; - } + { + TChain* inputChain = RootInput::getInstance()->GetChain() ; + inputChain->SetBranchStatus ( "SSSD" , true ) ; + inputChain->SetBranchStatus ( "fSSSD_*" , true ) ; + inputChain->SetBranchAddress( "SSSD" , &EventData ) ; + } /////////////////////////////////////////////////////////////////////////// void TSSSDPhysics::InitializeRootOutput() - { - TTree* outputTree = RootOutput::getInstance()->GetTree() ; - outputTree->Branch( "SSSD" , "TSSSDPhysics" , &EventPhysics ) ; - } + { + TTree* outputTree = RootOutput::getInstance()->GetTree() ; + outputTree->Branch( "SSSD" , "TSSSDPhysics" , &EventPhysics ) ; + } /////////////////////////////////////////////////////////////////////////// void TSSSDPhysics::BuildPhysicalEvent() - { - BuildSimplePhysicalEvent() ; - } + { + BuildSimplePhysicalEvent() ; + } /////////////////////////////////////////////////////////////////////////// void TSSSDPhysics::BuildSimplePhysicalEvent() - { - if( EventData->GetEnergyMult() == EventData->GetTimeMult() ) - { - for(unsigned int i = 0 ; i < EventData->GetEnergyMult() ; i++) - { - - DetectorNumber .push_back( EventData->GetEnergyDetectorNbr(i) ) ; - StripNumber .push_back( EventData->GetEnergyStripNbr(i) ) ; - - Energy .push_back( - CalibrationManager::getInstance()->ApplyCalibration( "SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_E", - EventData->GetEnergy(i) ) - ) ; - - Time .push_back( - CalibrationManager::getInstance()->ApplyCalibration( "SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_T", - EventData->GetTime(i) ) - ) ; - } - } - - else return ; + { + PreTreat(); + + for(unsigned int i = 0 ; i < PreTreatedData->GetEnergyMult() ; i++) + { + + DetectorNumber .push_back( PreTreatedData->GetEnergyDetectorNbr(i) ) ; + StripNumber .push_back( PreTreatedData->GetEnergyStripNbr(i) ) ; + Energy .push_back( PreTreatedData->GetEnergy(i) ) ; + // Look For associate Time + for(unsigned int j = 0 ; j < PreTreatedData->GetTimeMult() ; j ++ ) + { + if(PreTreatedData->GetEnergyDetectorNbr(i) == PreTreatedData->GetTimeDetectorNbr(j) && PreTreatedData->GetEnergyStripNbr(i)==PreTreatedData->GetTimeStripNbr(j)) + Time.push_back(PreTreatedData->GetTime(j)); + } + } + return; + } + +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::PreTreat() + { + ClearPreTreatedData(); + + // E + for(int i = 0 ; i < EventData->GetEnergyMult() ; i++) + { + if(ChannelStatus[EventData->GetEnergyDetectorNbr(i)][EventData->GetEnergyStripNbr(i)]) + { + double E = fSi_E(EventData , i); + if( E > E_Threshold && EventData->GetEnergy(i) > Pedestal_Threshold) + { + PreTreatedData->SetEnergyDetectorNbr( EventData->GetEnergyDetectorNbr(i) ) ; + PreTreatedData->SetEnergyStripNbr( EventData->GetEnergyStripNbr(i) ) ; + PreTreatedData->SetEnergy( E ) ; + } + } + } - } + // T + for(int i = 0 ; i < EventData->GetTimeMult() ; i++) + { + if(ChannelStatus[EventData->GetEnergyDetectorNbr(i)][EventData->GetEnergyStripNbr(i)]) + { + PreTreatedData->SetTimeDetectorNbr( EventData->GetTimeDetectorNbr(i) ) ; + PreTreatedData->SetTimeStripNbr( EventData->GetTimeStripNbr(i) ) ; + PreTreatedData->SetTime( fSi_T(EventData , i) ) ; + } + } + } +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::InitializeStandardParameter() + { + // Enable all channel + vector< bool > TempChannelStatus; + + TempChannelStatus.resize(16,true); + for(int i = 0 ; i < NumberOfDetector ; i ++) + ChannelStatus[i+1] = TempChannelStatus; + } +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::ReadAnalysisConfig() +{ + bool ReadingStatus = false; + + // path to file + string FileName = "./configs/ConfigSSSD.dat"; + + // open analysis config file + ifstream AnalysisConfigFile; + AnalysisConfigFile.open(FileName.c_str()); + + if (!AnalysisConfigFile.is_open()) { + cout << " No ConfigMust2.dat found: Default parameter loaded for Analayis " << FileName << endl; + return; + } + cout << " Loading user parameter for Analysis from ConfigSSSD.dat " << endl; + + // read analysis config file + string LineBuffer,DataBuffer; + while (!AnalysisConfigFile.eof()) { + // Pick-up next line + getline(AnalysisConfigFile, LineBuffer); + + // search for "header" + if (LineBuffer.compare(0, 11, "ConfigSSSD") == 0) ReadingStatus = true; + + // loop on tokens and data + while (ReadingStatus) { + AnalysisConfigFile >> DataBuffer; + + // Search for comment symbol (%) + if (DataBuffer.compare(0, 1, "%") == 0) { + AnalysisConfigFile.ignore(numeric_limits<streamsize>::max(), '\n' ); + } + + else if (DataBuffer.compare(0, 4, "SSSD") == 0) { + AnalysisConfigFile >> DataBuffer; + string whatToDo = DataBuffer; + if (whatToDo.compare(0, 11, "DISABLE_ALL") == 0) { + AnalysisConfigFile >> DataBuffer; + cout << whatToDo << " " << DataBuffer << endl; + int Detector = atoi(DataBuffer.substr(2,1).c_str()); + vector< bool > ChannelStatusBuffer; + ChannelStatusBuffer.resize(16,false); + ChannelStatus[Detector] = ChannelStatusBuffer; + } + + else if (whatToDo.compare(0, 15, "DISABLE_CHANNEL") == 0) { + AnalysisConfigFile >> DataBuffer; + cout << whatToDo << " " << DataBuffer << endl; + int telescope = atoi(DataBuffer.substr(2,1).c_str()); + int channel = -1; + if (DataBuffer.compare(3,3,"STR") == 0) { + channel = atoi(DataBuffer.substr(8).c_str()); + *(ChannelStatus[telescope].begin()+channel) = false; + } + + else { + cout << "Warning: detector type for Must2 unknown!" << endl; + } + } + else { + cout << "Warning: don't know what to do (lost in translation)" << endl; + } + } + else { + ReadingStatus = false; +// cout << "WARNING: Wrong Token Sequence" << endl; + } + } + } +} + + + + /////////////////////////////////////////////////////////////////////////// + double LOCAL::fSi_E( TSSSDData* EventData , int i ) + { + return CalibrationManager::getInstance()->ApplyCalibration( "SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_E", + EventData->GetEnergy(i) ); + } + + + double LOCAL::fSi_T( TSSSDData* EventData , int i ) + { + return CalibrationManager::getInstance()->ApplyCalibration( "SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_T", + EventData->GetTime(i) ); + } + + + diff --git a/NPLib/SSSD/TSSSDPhysics.h b/NPLib/SSSD/TSSSDPhysics.h index fa341dc97..8490abc50 100644 --- a/NPLib/SSSD/TSSSDPhysics.h +++ b/NPLib/SSSD/TSSSDPhysics.h @@ -33,60 +33,90 @@ using namespace std ; #include "../include/VDetector.h" #include "../include/CalibrationManager.h" + class TSSSDPhysics : public TObject, public NPA::VDetector { - public: // Constructor and Destructor - TSSSDPhysics(); - ~TSSSDPhysics(); - - - public: // Calibrated Data + public: // Constructor and Destructor + TSSSDPhysics(); + ~TSSSDPhysics(); - vector<UShort_t> DetectorNumber ; - vector<UShort_t> StripNumber ; - vector<Double_t> Energy ; - vector<Double_t> Time ; + public: // Calibrated Data + vector<UShort_t> DetectorNumber; + vector<UShort_t> StripNumber; + vector<Double_t> Energy; + vector<Double_t> Time; - public: // inherrited from VDetector - // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token - void ReadConfiguration(string) ; + public: // inherrited from VDetector + // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token + void ReadConfiguration(string); - - // Add Parameter to the CalibrationManger - void AddParameterToCalibrationManager() ; + // Add Parameter to the CalibrationManger + void AddParameterToCalibrationManager(); - // Activated associated Branches and link it to the private member DetectorData address - // In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated - void InitializeRootInput() ; + // Activated associated Branches and link it to the private member DetectorData address + // In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated + void InitializeRootInput(); + // Create associated branches and associated private member DetectorPhysics address + void InitializeRootOutput(); - // Create associated branches and associated private member DetectorPhysics address - void InitializeRootOutput() ; - + // This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. + void BuildPhysicalEvent(); - // This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. - void BuildPhysicalEvent() ; + // Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...). + // This method aimed to be used for analysis performed during experiment, when speed is requiered. + // NB: This method can eventually be the same as BuildPhysicalEvent. + void BuildSimplePhysicalEvent(); + + // Those two method all to clear the Event Physics or Data + void ClearEventPhysics() {Clear();} + void ClearEventData() {EventData->Clear();} + + + public: // Specific to SSSD + // Clear The PreTeated object + void ClearPreTreatedData() {PreTreatedData->Clear();} - // Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...). - // This method aimed to be used for analysis performed during experiment, when speed is requiered. - // NB: This method can eventually be the same as BuildPhysicalEvent. - void BuildSimplePhysicalEvent() ; - - // Those two method all to clear the Event Physics or Data - void ClearEventPhysics() {Clear();} - void ClearEventData() {EventData->Clear();} - - private: // Data not writted in the tree - int NumberOfDetector ;//! - TSSSDData* EventData ;//! - TSSSDPhysics* EventPhysics ;//! - - void Clear(); - void Clear(const Option_t*) {}; + // Remove bad channel, calibrate the data and apply threshold + void PreTreat(); + + // Initialize the standard parameter for analysis + // ie: all channel enable, maximum multiplicity for strip = number of telescope + void InitializeStandardParameter(); + + // Read the user configuration file; if no file found, load standard one + void ReadAnalysisConfig(); + + + private: // Data not written in the tree + int NumberOfDetector; //! + TSSSDData* EventData; //! + TSSSDData* PreTreatedData; //! + TSSSDPhysics* EventPhysics; //! + + double E_Threshold; //! + double Pedestal_Threshold; //! + + + private: // Map of activated Channel + map< int, vector<bool> > ChannelStatus;//! + + public: // Return True if the channel is activated + // bool IsValidChannel(int DetectorNbr, int StripNbr) ; + + void Clear(); + void Clear(const Option_t*) {}; - ClassDef(TSSSDPhysics,1) // SSSDPhysics structure + ClassDef(TSSSDPhysics,1) // SSSDPhysics structure }; + +namespace LOCAL +{ + double fSi_E( TSSSDData* EventData , int i ); + double fSi_T( TSSSDData* EventData , int i ); +} + #endif -- GitLab