Skip to content
Snippets Groups Projects
Commit 9ede4467 authored by Hugo Jacob's avatar Hugo Jacob
Browse files

Adding TAC Data Class + Changing TS to ULong64 in Exo and ZDD Data Classes

parent f75578c2
No related branches found
No related tags found
No related merge requests found
......@@ -30,15 +30,15 @@ class TExogamData : public TObject {
private:
std::vector<UShort_t> fEXO_E;
std::vector<UShort_t> fEXO_E_CrystalNbr;
std::vector<UShort_t> fEXO_E_TS;
std::vector<ULong64_t> fEXO_E_TS;
std::vector<UShort_t> fEXO_HG; // Same as Energy but with High Gain (for Low Energy events)
std::vector<UShort_t> fEXO_HG_CrystalNbr;
std::vector<UShort_t> fEXO_HG_TS;
std::vector<ULong64_t> fEXO_HG_TS;
std::vector<UShort_t> fEXO_TDC; // Internal TDC of EXOGAM
std::vector<UShort_t> fEXO_TDC_CrystalNbr;
std::vector<UShort_t> fEXO_TDC_TS;
std::vector<ULong64_t> fEXO_TDC_TS;
std::vector<UShort_t> fEXO_Outer;
std::vector<UShort_t> fEXO_Outer_SubCrystalNbr;
......@@ -58,17 +58,17 @@ class TExogamData : public TObject {
void Dump() const;
///////////////////// SETTERS ////////////////////////
inline void SetInner6MV(UShort_t& Energy, UShort_t& DetNumb, UShort_t& TimeStamp) {
inline void SetInner6MV(UShort_t& Energy, UShort_t& DetNumb, ULong64_t& TimeStamp) {
fEXO_E.push_back(Energy);
fEXO_E_CrystalNbr.push_back(DetNumb);
fEXO_E_TS.push_back(TimeStamp);
}
inline void SetInner20MV(UShort_t& Energy, UShort_t& DetNumb, UShort_t& TimeStamp) {
inline void SetInner20MV(UShort_t& Energy, UShort_t& DetNumb, ULong64_t& TimeStamp) {
fEXO_HG.push_back(Energy);
fEXO_HG_CrystalNbr.push_back(DetNumb);
fEXO_HG_TS.push_back(TimeStamp);
}
inline void SetDeltaTV(UShort_t& Time, UShort_t& DetNumb, UShort_t& TimeStamp) {
inline void SetDeltaTV(UShort_t& Time, UShort_t& DetNumb, ULong64_t& TimeStamp) {
fEXO_TDC.push_back(Time);
fEXO_TDC_CrystalNbr.push_back(DetNumb);
fEXO_TDC_TS.push_back(TimeStamp);
......@@ -88,13 +88,13 @@ class TExogamData : public TObject {
///////////////////// GETTERS ////////////////////////
inline UShort_t GetEXO_E(UShort_t& i) { return fEXO_E[i]; }
inline UShort_t GetEXO_E_CrystalNbr(UShort_t& i) { return fEXO_E_CrystalNbr[i]; }
inline UShort_t GetEXO_E_TS(UShort_t& i) { return fEXO_E_TS[i]; }
inline ULong64_t GetEXO_E_TS(UShort_t& i) { return fEXO_E_TS[i]; }
inline UShort_t GetEXO_HG(UShort_t& i) { return fEXO_HG[i]; }
inline UShort_t GetEXO_HG_CrystalNbr(UShort_t& i) { return fEXO_HG_CrystalNbr[i]; }
inline UShort_t GetEXO_HG_TS(UShort_t& i) { return fEXO_HG_TS[i]; }
inline ULong64_t GetEXO_HG_TS(UShort_t& i) { return fEXO_HG_TS[i]; }
inline UShort_t GetEXO_TDC(UShort_t& i) { return fEXO_TDC[i]; }
inline UShort_t GetEXO_TDC_CrystalNbr(UShort_t& i) { return fEXO_TDC_CrystalNbr[i]; }
inline UShort_t GetEXO_TDC_TS(UShort_t& i) { return fEXO_TDC_TS[i]; }
inline ULong64_t GetEXO_TDC_TS(UShort_t& i) { return fEXO_TDC_TS[i]; }
inline UShort_t GetEXO_Outer(UShort_t& i) { return fEXO_Outer[i]; }
inline UShort_t GetEXO_Outer_SubCrystalNbr(UShort_t& i) { return fEXO_Outer_SubCrystalNbr[i]; }
inline UShort_t GetEXO_BGO(UShort_t& i) { return fEXO_BGO[i]; }
......
add_custom_command(OUTPUT TTACPhysicsDict.cxx COMMAND ../../scripts/build_dict.sh TTACPhysics.h TTACPhysicsDict.cxx TTACPhysics.rootmap libNPTAC.dylib DEPENDS TTACPhysics.h)
add_custom_command(OUTPUT TTACDataDict.cxx COMMAND ../../scripts/build_dict.sh TTACData.h TTACDataDict.cxx TTACData.rootmap libNPTAC.dylib DEPENDS TTACData.h)
add_library(NPTAC SHARED TTACSpectra.cxx TTACData.cxx TTACPhysics.cxx TTACDataDict.cxx TTACPhysicsDict.cxx )
target_link_libraries(NPTAC ${ROOT_LIBRARIES} NPCore)
install(FILES TTACData.h TTACPhysics.h TTACSpectra.h DESTINATION ${CMAKE_INCLUDE_OUTPUT_DIRECTORY})
/*****************************************************************************
* Copyright (C) 2009-2023 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: Hugo Jacob contact address: hjacob@ijclab.in2p3.fr *
* *
* Creation Date : July 2023 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class hold TAC Raw data *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
* *
*****************************************************************************/
#include "TTACData.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
ClassImp(TTACData)
//////////////////////////////////////////////////////////////////////
TTACData::TTACData() {
}
//////////////////////////////////////////////////////////////////////
TTACData::~TTACData() {
}
//////////////////////////////////////////////////////////////////////
void TTACData::Clear() {
fTAC_Channel.clear();
fTAC_Nbr.clear();
fTAC_TS.clear();
}
//////////////////////////////////////////////////////////////////////
void TTACData::Dump() const {
// This method is very useful for debuging and worth the dev.
cout << "XXXXXXXXXXXXXXXXXXXXXXXX New Event [TTACData::Dump()] XXXXXXXXXXXXXXXXX" << endl;
size_t mysize = fTAC_Channel.size();
cout << "TAC_Mult: " << mysize << endl;
for (size_t i = 0 ; i < mysize ; i++){
cout << "TACNbr: " << fTAC_Nbr[i] << " Channel: " << fTAC_Channel[i] << " TS: " << fTAC_TS[i] << endl;
}
}
#ifndef __TACDATA__
#define __TACDATA__
/*****************************************************************************
* Copyright (C) 2009-2023 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: Hugo Jacob contact address: hjacob@ijclab.in2p3.fr *
* *
* Creation Date : July 2023 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class hold TAC Raw data *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
* *
*****************************************************************************/
// STL
#include <vector>
using namespace std;
// ROOT
#include "TObject.h"
class TTACData : public TObject {
//////////////////////////////////////////////////////////////
// data members are hold into vectors in order
// to allow multiplicity treatment
private:
// Energy
vector<UShort_t> fTAC_Channel;
vector<UShort_t> fTAC_Nbr;
vector<ULong64_t> fTAC_TS;
//////////////////////////////////////////////////////////////
// Constructor and destructor
public:
TTACData();
~TTACData();
//////////////////////////////////////////////////////////////
// Inherited from TObject and overriden to avoid warnings
public:
void Clear();
void Clear(const Option_t*) {};
void Dump() const;
//////////////////////////////////////////////////////////////
// Getters and Setters
// Prefer inline declaration to avoid unnecessary called of
// frequently used methods
// add //! to avoid ROOT creating dictionnary for the methods
public:
////////////////////// SETTERS ////////////////////////
inline void SetTAC(const UShort_t& TACNbr,const UShort_t& Channel, const ULong64_t& TS){
fTAC_Nbr.push_back(TACNbr);
fTAC_Channel.push_back(Channel);
fTAC_TS.push_back(TS);
};//!
////////////////////// GETTERS ////////////////////////
// Energy
inline UShort_t GetTAC_Mult() const
{return fTAC_Channel.size();}
inline UShort_t GetTAC_Channel(const unsigned int &i) const
{return fTAC_Channel[i];}//!
inline UShort_t GetTAC_Nbr(const unsigned int &i) const
{return fTAC_Nbr[i];}//!
inline ULong64_t GetTAC_TS(const unsigned int &i) const
{return fTAC_TS[i];}//!
//////////////////////////////////////////////////////////////
// Required for ROOT dictionnary
ClassDef(TTACData,1) // TACData structure
};
#endif
/*****************************************************************************
* Copyright (C) 2009-2023 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: Hugo Jacob contact address: hjacob@ijclab.in2p3.fr *
* *
* Creation Date : July 2023 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class hold TAC Treated data *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
* *
*****************************************************************************/
#include "TTACPhysics.h"
// STL
#include <sstream>
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <limits>
using namespace std;
// NPL
#include "RootInput.h"
#include "RootOutput.h"
#include "NPDetectorFactory.h"
#include "NPOptionManager.h"
// ROOT
#include "TChain.h"
ClassImp(TTACPhysics)
///////////////////////////////////////////////////////////////////////////
TTACPhysics::TTACPhysics()
: m_EventData(new TTACData),
m_PreTreatedData(new TTACData),
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 TTACPhysics::AddDetector(TVector3 , string ){
// 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++;
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::AddDetector(double R, double Theta, double Phi, string shape){
// Compute the TVector3 corresponding
TVector3 Pos(R*sin(Theta)*cos(Phi),R*sin(Theta)*sin(Phi),R*cos(Theta));
// Call the cartesian method
AddDetector(Pos,shape);
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::BuildSimplePhysicalEvent() {
BuildPhysicalEvent();
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::BuildPhysicalEvent() {
// apply thresholds and calibration
PreTreat();
// match energy and time together
unsigned int mysizeE = m_PreTreatedData->GetMultEnergy();
unsigned int mysizeT = m_PreTreatedData->GetMultTime();
for (UShort_t e = 0; e < mysizeE ; e++) {
for (UShort_t t = 0; t < mysizeT ; t++) {
if (m_PreTreatedData->GetE_DetectorNbr(e) == m_PreTreatedData->GetT_DetectorNbr(t)) {
DetectorNumber.push_back(m_PreTreatedData->GetE_DetectorNbr(e));
Energy.push_back(m_PreTreatedData->Get_Energy(e));
Time.push_back(m_PreTreatedData->Get_Time(t));
}
}
}
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::PreTreat() {
// This method typically applies thresholds and calibrations
// Might test for disabled channels for more complex detector
// clear pre-treated object
ClearPreTreatedData();
// instantiate CalibrationManager
static CalibrationManager* Cal = CalibrationManager::getInstance();
// Energy
unsigned int mysize = m_EventData->GetMultEnergy();
for (UShort_t i = 0; i < mysize ; ++i) {
if (m_EventData->Get_Energy(i) > m_E_RAW_Threshold) {
Double_t Energy = Cal->ApplyCalibration("TAC/ENERGY"+NPL::itoa(m_EventData->GetE_DetectorNbr(i)),m_EventData->Get_Energy(i));
if (Energy > m_E_Threshold) {
m_PreTreatedData->SetEnergy(m_EventData->GetE_DetectorNbr(i), Energy);
}
}
}
// Time
mysize = m_EventData->GetMultTime();
for (UShort_t i = 0; i < mysize; ++i) {
Double_t Time= Cal->ApplyCalibration("TAC/TIME"+NPL::itoa(m_EventData->GetT_DetectorNbr(i)),m_EventData->Get_Time(i));
m_PreTreatedData->SetTime(m_EventData->GetT_DetectorNbr(i), Time);
}
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::ReadAnalysisConfig() {
bool ReadingStatus = false;
// path to file
string FileName = "./configs/ConfigTAC.dat";
// open analysis config file
ifstream AnalysisConfigFile;
AnalysisConfigFile.open(FileName.c_str());
if (!AnalysisConfigFile.is_open()) {
cout << " No ConfigTAC.dat found: Default parameter loaded for Analayis " << FileName << endl;
return;
}
cout << " Loading user parameter for Analysis from ConfigTAC.dat " << endl;
// Save it in a TAsciiFile
TAsciiFile* asciiConfig = RootOutput::getInstance()->GetAsciiFileAnalysisConfig();
asciiConfig->AppendLine("%%% ConfigTAC.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 = "ConfigTAC";
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 TTACPhysics::Clear() {
DetectorNumber.clear();
Energy.clear();
Time.clear();
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::ReadConfiguration(NPL::InputParser parser) {
vector<NPL::InputBlock*> blocks = parser.GetAllBlocksWithToken("TAC");
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << "//// " << blocks.size() << " detectors found " << endl;
vector<string> cart = {"POS","Shape"};
vector<string> sphe = {"R","Theta","Phi","Shape"};
for(unsigned int i = 0 ; i < blocks.size() ; i++){
if(blocks[i]->HasTokenList(cart)){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << endl << "//// TAC " << i+1 << endl;
TVector3 Pos = blocks[i]->GetTVector3("POS","mm");
string Shape = blocks[i]->GetString("Shape");
AddDetector(Pos,Shape);
}
else if(blocks[i]->HasTokenList(sphe)){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << endl << "//// TAC " << i+1 << endl;
double R = blocks[i]->GetDouble("R","mm");
double Theta = blocks[i]->GetDouble("Theta","deg");
double Phi = blocks[i]->GetDouble("Phi","deg");
string Shape = blocks[i]->GetString("Shape");
AddDetector(R,Theta,Phi,Shape);
}
else{
cout << "ERROR: check your input file formatting " << endl;
exit(1);
}
}
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::InitSpectra() {
m_Spectra = new TTACSpectra(m_NumberOfDetectors);
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::FillSpectra() {
m_Spectra -> FillRawSpectra(m_EventData);
m_Spectra -> FillPreTreatedSpectra(m_PreTreatedData);
m_Spectra -> FillPhysicsSpectra(m_EventPhysics);
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::CheckSpectra() {
m_Spectra->CheckSpectra();
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::ClearSpectra() {
// To be done
}
///////////////////////////////////////////////////////////////////////////
map< string , TH1*> TTACPhysics::GetSpectra() {
if(m_Spectra)
return m_Spectra->GetMapHisto();
else{
map< string , TH1*> empty;
return empty;
}
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::WriteSpectra() {
m_Spectra->WriteSpectra();
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::AddParameterToCalibrationManager() {
CalibrationManager* Cal = CalibrationManager::getInstance();
for (int i = 0; i < m_NumberOfDetectors; ++i) {
Cal->AddParameter("TAC", "D"+ NPL::itoa(i+1)+"_ENERGY","TAC_D"+ NPL::itoa(i+1)+"_ENERGY");
Cal->AddParameter("TAC", "D"+ NPL::itoa(i+1)+"_TIME","TAC_D"+ NPL::itoa(i+1)+"_TIME");
}
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::InitializeRootInputRaw() {
TChain* inputChain = RootInput::getInstance()->GetChain();
inputChain->SetBranchStatus("TAC", true );
inputChain->SetBranchAddress("TAC", &m_EventData );
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::InitializeRootInputPhysics() {
TChain* inputChain = RootInput::getInstance()->GetChain();
inputChain->SetBranchAddress("TAC", &m_EventPhysics);
}
///////////////////////////////////////////////////////////////////////////
void TTACPhysics::InitializeRootOutput() {
TTree* outputTree = RootOutput::getInstance()->GetTree();
outputTree->Branch("TAC", "TTACPhysics", &m_EventPhysics);
}
*/
////////////////////////////////////////////////////////////////////////////////
// Construct Method to be pass to the DetectorFactory //
////////////////////////////////////////////////////////////////////////////////
NPL::VDetector* TTACPhysics::Construct() {
return (NPL::VDetector*) new TTACPhysics();
}
////////////////////////////////////////////////////////////////////////////////
// Registering the construct method to the factory //
////////////////////////////////////////////////////////////////////////////////
extern "C"{
class proxy_TAC{
public:
proxy_TAC(){
NPL::DetectorFactory::getInstance()->AddToken("TAC","TAC");
NPL::DetectorFactory::getInstance()->AddDetector("TAC",TTACPhysics::Construct);
}
};
proxy_TAC p_TAC;
}
#ifndef TTACPHYSICS_H
#define TTACPHYSICS_H
/*****************************************************************************
* Copyright (C) 2009-2023 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: Hugo Jacob contact address: hjacob@ijclab.in2p3.fr *
* *
* Creation Date : July 2023 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class hold TAC Treated data *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
* *
*****************************************************************************/
// C++ headers
#include <vector>
#include <map>
#include <string>
using namespace std;
// ROOT headers
#include "TObject.h"
#include "TH1.h"
#include "TVector3.h"
// NPTool headers
#include "TTACData.h"
#include "TTACSpectra.h"
#include "NPCalibrationManager.h"
#include "NPVDetector.h"
#include "NPInputParser.h"
// forward declaration
class TTACSpectra;
class TTACPhysics : public TObject, public NPL::VDetector {
//////////////////////////////////////////////////////////////
// constructor and destructor
public:
TTACPhysics();
~TTACPhysics() {};
//////////////////////////////////////////////////////////////
// Inherited from TObject and overriden to avoid warnings
public:
void Clear();
void Clear(const Option_t*) {};
//////////////////////////////////////////////////////////////
// data obtained after BuildPhysicalEvent() and stored in
// output ROOT file
public:
vector<int> DetectorNumber;
vector<double> Energy;
vector<double> Time;
/// A usefull method to bundle all operation to add a detector
void AddDetector(TVector3 POS, string shape);
void AddDetector(double R, double Theta, double Phi, string shape);
//////////////////////////////////////////////////////////////
// methods inherited from the VDetector ABC class
public:
// read stream from ConfigFile to pick-up detector parameters
void ReadConfiguration(NPL::InputParser);
// add parameters to the CalibrationManger
void AddParameterToCalibrationManager();
// method called event by event, aiming at extracting the
// physical information from detector
void BuildPhysicalEvent();
// same as BuildPhysicalEvent() method but with a simpler
// treatment
void BuildSimplePhysicalEvent();
// same as above but for online analysis
void BuildOnlinePhysicalEvent() {BuildPhysicalEvent();};
// activate raw data object and branches from input TChain
// in this method mother branches (Detector) AND daughter leaves
// (fDetector_parameter) have to be activated
void InitializeRootInputRaw();
// activate physics data object and branches from input TChain
// in this method mother branches (Detector) AND daughter leaves
// (fDetector_parameter) have to be activated
void InitializeRootInputPhysics();
// create branches of output ROOT file
void InitializeRootOutput();
// clear the raw and physical data objects event by event
void ClearEventPhysics() {Clear();}
void ClearEventData() {m_EventData->Clear();}
// methods related to the TTACSpectra class
// instantiate the TTACSpectra class and
// declare list of histograms
void InitSpectra();
// fill the spectra
void FillSpectra();
// used for Online mainly, sanity check for histograms and
// change their color if issues are found, for example
void CheckSpectra();
// used for Online only, clear all the spectra
void ClearSpectra();
// write spectra to ROOT output file
void WriteSpectra();
//////////////////////////////////////////////////////////////
// specific methods to TAC array
public:
// remove bad channels, calibrate the data and apply thresholds
void PreTreat();
// clear the pre-treated object
void ClearPreTreatedData() {m_PreTreatedData->Clear();}
// read the user configuration file. If no file is found, load standard one
void ReadAnalysisConfig();
// give and external TTACData object to TTACPhysics.
// needed for online analysis for example
void SetRawDataPointer(TTACData* rawDataPointer) {m_EventData = rawDataPointer;}
// objects are not written in the TTree
private:
TTACData* m_EventData; //!
TTACData* m_PreTreatedData; //!
TTACPhysics* m_EventPhysics; //!
// getters for raw and pre-treated data object
public:
TTACData* GetRawData() const {return m_EventData;}
TTACData* GetPreTreatedData() const {return m_PreTreatedData;}
// parameters used in the analysis
private:
// thresholds
double m_E_RAW_Threshold; //!
double m_E_Threshold; //!
// number of detectors
private:
int m_NumberOfDetectors; //!
// spectra class
private:
TTACSpectra* m_Spectra; // !
// spectra getter
public:
map<string, TH1*> GetSpectra();
// Static constructor to be passed to the Detector Factory
public:
static NPL::VDetector* Construct();
ClassDef(TTACPhysics,1) // TACPhysics structure
};
#endif
/*****************************************************************************
* Copyright (C) 2009-2023 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: Hugo Jacob contact address: hjacob@ijclab.in2p3.fr *
* *
* Creation Date : July 2023 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class hold TAC Spectra *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
* *
*****************************************************************************/
// class header
#include "TTACSpectra.h"
// STL
#include <iostream>
#include <string>
using namespace std;
// NPTool header
#include "NPOptionManager.h"
////////////////////////////////////////////////////////////////////////////////
TTACSpectra::TTACSpectra()
: fNumberOfDetectors(0) {
SetName("TAC");
}
////////////////////////////////////////////////////////////////////////////////
TTACSpectra::TTACSpectra(unsigned int NumberOfDetectors) {
if(NPOptionManager::getInstance()->GetVerboseLevel()>0)
cout << "************************************************" << endl
<< "TTACSpectra : Initalizing control spectra for "
<< NumberOfDetectors << " Detectors" << endl
<< "************************************************" << endl ;
SetName("TAC");
fNumberOfDetectors = NumberOfDetectors;
InitRawSpectra();
InitPreTreatedSpectra();
InitPhysicsSpectra();
}
////////////////////////////////////////////////////////////////////////////////
TTACSpectra::~TTACSpectra() {
}
////////////////////////////////////////////////////////////////////////////////
void TTACSpectra::InitRawSpectra() {
static string name;
for (unsigned int i = 0; i < fNumberOfDetectors; i++) { // loop on number of detectors
// Energy
name = "TAC"+NPL::itoa(i+1)+"_ENERGY_RAW";
AddHisto1D(name, name, 4096, 0, 16384, "TAC/RAW");
// Time
name = "TAC"+NPL::itoa(i+1)+"_TIME_RAW";
AddHisto1D(name, name, 4096, 0, 16384, "TAC/RAW");
} // end loop on number of detectors
}
////////////////////////////////////////////////////////////////////////////////
void TTACSpectra::InitPreTreatedSpectra() {
static string name;
for (unsigned int i = 0; i < fNumberOfDetectors; i++) { // loop on number of detectors
// Energy
name = "TAC"+NPL::itoa(i+1)+"_ENERGY_CAL";
AddHisto1D(name, name, 500, 0, 25, "TAC/CAL");
// Time
name = "TAC"+NPL::itoa(i+1)+"_TIME_CAL";
AddHisto1D(name, name, 500, 0, 25, "TAC/CAL");
} // end loop on number of detectors
}
////////////////////////////////////////////////////////////////////////////////
void TTACSpectra::InitPhysicsSpectra() {
static string name;
// Kinematic Plot
name = "TAC_ENERGY_TIME";
AddHisto2D(name, name, 500, 0, 500, 500, 0, 50, "TAC/PHY");
}
////////////////////////////////////////////////////////////////////////////////
/*void TTACSpectra::FillRawSpectra(TTACData* RawData) {
static string name;
static string family;
// Energy
unsigned int sizeE = RawData->GetMultEnergy();
for (unsigned int i = 0; i < sizeE; i++) {
name = "TAC"+NPL::itoa(RawData->GetE_DetectorNbr(i))+"_ENERGY_RAW";
family = "TAC/RAW";
FillSpectra(family,name,RawData->Get_Energy(i));
}
// Time
unsigned int sizeT = RawData->GetMultTime();
for (unsigned int i = 0; i < sizeT; i++) {
name = "TAC"+NPL::itoa(RawData->GetT_DetectorNbr(i))+"_TIME_RAW";
family = "TAC/RAW";
FillSpectra(family,name,RawData->Get_Time(i));
}
}
////////////////////////////////////////////////////////////////////////////////
void TTACSpectra::FillPreTreatedSpectra(TTACData* PreTreatedData) {
static string name;
static string family;
// Energy
unsigned int sizeE = PreTreatedData->GetMultEnergy();
for (unsigned int i = 0; i < sizeE; i++) {
name = "TAC"+NPL::itoa(PreTreatedData->GetE_DetectorNbr(i))+"_ENERGY_CAL";
family = "TAC/CAL";
FillSpectra(family,name,PreTreatedData->Get_Energy(i));
}
// Time
unsigned int sizeT = PreTreatedData->GetMultTime();
for (unsigned int i = 0; i < sizeT; i++) {
name = "TAC"+NPL::itoa(PreTreatedData->GetT_DetectorNbr(i))+"_TIME_CAL";
family = "TAC/CAL";
FillSpectra(family,name,PreTreatedData->Get_Time(i));
}
}
*/
////////////////////////////////////////////////////////////////////////////////
void TTACSpectra::FillPhysicsSpectra(TTACPhysics* Physics) {
static string name;
static string family;
family= "TAC/PHY";
// Energy vs time
unsigned int sizeE = Physics->Energy.size();
for(unsigned int i = 0 ; i < sizeE ; i++){
name = "TAC_ENERGY_TIME";
FillSpectra(family,name,Physics->Energy[i],Physics->Time[i]);
}
}
#ifndef TTACSPECTRA_H
#define TTACSPECTRA_H
/*****************************************************************************
* Copyright (C) 2009-2023 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: Hugo Jacob contact address: hjacob@ijclab.in2p3.fr *
* *
* Creation Date : July 2023 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class hold TAC Spectra *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
* *
*****************************************************************************/
// NPLib headers
#include "NPVSpectra.h"
#include "TTACData.h"
#include "TTACPhysics.h"
// Forward Declaration
class TTACPhysics;
class TTACSpectra : public VSpectra {
//////////////////////////////////////////////////////////////
// constructor and destructor
public:
TTACSpectra();
TTACSpectra(unsigned int NumberOfDetectors);
~TTACSpectra();
//////////////////////////////////////////////////////////////
// Initialization methods
private:
void InitRawSpectra();
void InitPreTreatedSpectra();
void InitPhysicsSpectra();
//////////////////////////////////////////////////////////////
// Filling methods
public:
void FillRawSpectra(TTACData*);
void FillPreTreatedSpectra(TTACData*);
void FillPhysicsSpectra(TTACPhysics*);
//////////////////////////////////////////////////////////////
// Detector parameters
private:
unsigned int fNumberOfDetectors;
};
#endif
......@@ -39,22 +39,22 @@ class TZDDData : public TObject {
// IC
vector<UShort_t> fZDD_IC_E;
vector<UShort_t> fZDD_IC_N;
vector<UShort_t> fZDD_IC_TS;
vector<ULong64_t> fZDD_IC_TS;
// Plastic
vector<UShort_t> fZDD_PM_E;
vector<UShort_t> fZDD_PM_N;
vector<UShort_t> fZDD_PM_TS;
vector<ULong64_t> fZDD_PM_TS;
// DC
vector<UShort_t> fZDD_DC_E;
vector<UShort_t> fZDD_DC_N;
vector<UShort_t> fZDD_DC_TS;
vector<ULong64_t> fZDD_DC_TS;
// EXOZDD
vector<UShort_t> fZDD_EXO_E;
vector<UShort_t> fZDD_EXO_N;
vector<UShort_t> fZDD_EXO_TS;
vector<ULong64_t> fZDD_EXO_TS;
//////////////////////////////////////////////////////////////
......@@ -80,22 +80,22 @@ class TZDDData : public TObject {
public:
////////////////////// SETTERS ////////////////////////
// Energy
inline void SetZDDIC(const UShort_t& DetNumb,const UShort_t& Energy, const UShort_t& TimeStamp){
inline void SetZDDIC(const UShort_t& DetNumb,const UShort_t& Energy, const ULong64_t& TimeStamp){
fZDD_IC_E.push_back(Energy);
fZDD_IC_N.push_back(DetNumb);
fZDD_IC_TS.push_back(TimeStamp);
};//!
inline void SetZDDPM(const UShort_t& DetNumb,const UShort_t& Energy, const UShort_t& TimeStamp){
inline void SetZDDPM(const UShort_t& DetNumb,const UShort_t& Energy, const ULong64_t& TimeStamp){
fZDD_PM_E.push_back(Energy);
fZDD_PM_N.push_back(DetNumb);
fZDD_PM_TS.push_back(TimeStamp);
};//!
inline void SetZDDDC(const UShort_t& DetNumb,const UShort_t& Energy, const UShort_t& TimeStamp){
inline void SetZDDDC(const UShort_t& DetNumb,const UShort_t& Energy, const ULong64_t& TimeStamp){
fZDD_DC_E.push_back(Energy);
fZDD_DC_N.push_back(DetNumb);
fZDD_DC_TS.push_back(TimeStamp);
};//!
inline void SetZDDEXO(const UShort_t& DetNumb,const UShort_t& Energy, const UShort_t& TimeStamp){
inline void SetZDDEXO(const UShort_t& DetNumb,const UShort_t& Energy, const ULong64_t& TimeStamp){
fZDD_EXO_E.push_back(Energy);
fZDD_EXO_N.push_back(DetNumb);
fZDD_EXO_TS.push_back(TimeStamp);
......@@ -104,16 +104,16 @@ class TZDDData : public TObject {
////////////////////// GETTERS ////////////////////////
inline UShort_t GetZDD_ICE(UShort_t& i) { return fZDD_IC_E[i]; }
inline UShort_t GetZDD_ICN(UShort_t& i) { return fZDD_IC_N[i]; }
inline UShort_t GetZDD_ICTS(UShort_t& i) { return fZDD_IC_TS[i]; }
inline ULong64_t GetZDD_ICTS(UShort_t& i) { return fZDD_IC_TS[i]; }
inline UShort_t GetZDD_PME(UShort_t& i) { return fZDD_PM_E[i]; }
inline UShort_t GetZDD_PMN(UShort_t& i) { return fZDD_PM_N[i]; }
inline UShort_t GetZDD_PMTS(UShort_t& i) { return fZDD_PM_TS[i]; }
inline ULong64_t GetZDD_PMTS(UShort_t& i) { return fZDD_PM_TS[i]; }
inline UShort_t GetZDD_DCE(UShort_t& i) { return fZDD_DC_E[i]; }
inline UShort_t GetZDD_DCN(UShort_t& i) { return fZDD_DC_N[i]; }
inline UShort_t GetZDD_DCTS(UShort_t& i) { return fZDD_DC_TS[i]; }
inline ULong64_t GetZDD_DCTS(UShort_t& i) { return fZDD_DC_TS[i]; }
inline UShort_t GetZDD_EXOE(UShort_t& i) { return fZDD_EXO_E[i]; }
inline UShort_t GetZDD_EXON(UShort_t& i) { return fZDD_EXO_N[i]; }
inline UShort_t GetZDD_EXOTS(UShort_t& i) { return fZDD_EXO_TS[i]; }
inline ULong64_t GetZDD_EXOTS(UShort_t& i) { return fZDD_EXO_TS[i]; }
//////////////////////////////////////////////////////////////
// Required for ROOT dictionnary
......
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