From a6910c08bf1cbd812fff593a584b44945b57c805 Mon Sep 17 00:00:00 2001 From: Nicolas de Sereville <deserevi@ipno.in2p3.fr> Date: Wed, 4 Dec 2013 11:51:28 +0100 Subject: [PATCH] + Add Spectra support for Tiara/Hyball --- NPLib/Tiara/Makefile | 10 +- NPLib/Tiara/TTiaraHyballSpectra.cxx | 392 ++++++++++++++++++++++++++++ NPLib/Tiara/TTiaraHyballSpectra.h | 84 ++++++ 3 files changed, 480 insertions(+), 6 deletions(-) create mode 100644 NPLib/Tiara/TTiaraHyballSpectra.cxx create mode 100644 NPLib/Tiara/TTiaraHyballSpectra.h diff --git a/NPLib/Tiara/Makefile b/NPLib/Tiara/Makefile index 423704968..4228c0f0e 100644 --- a/NPLib/Tiara/Makefile +++ b/NPLib/Tiara/Makefile @@ -9,8 +9,7 @@ all: $(SHARELIB) ############### Detector ############## ## Sharc ## -libTiara.so: TTiaraBarrelData.o TTiaraBarrelDataDict.o TTiaraHyballData.o TTiaraHyballDataDict.o - +libTiara.so: TTiaraBarrelData.o TTiaraBarrelDataDict.o TTiaraHyballData.o TTiaraHyballDataDict.o TTiaraHyballSpectra.o $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ TTiaraBarrelDataDict.cxx: TTiaraBarrelData.h @@ -20,8 +19,9 @@ TTiaraHyballDataDict.cxx: TTiaraHyballData.h rootcint -f $@ -c $^ # dependances -TTiaraBarrelData.o: TTiaraBarrelData.cxx TTiaraBarrelData.h -TTiaraHyballData.o: TTiaraHyballData.cxx TTiaraHyballData.h +TTiaraBarrelData.o: TTiaraBarrelData.cxx TTiaraBarrelData.h +TTiaraHyballData.o: TTiaraHyballData.cxx TTiaraHyballData.h +TTiaraHyballSpectra.o: TTiaraHyballSpectra.cxx TTiaraHyballSpectra.h ####################################### @@ -38,5 +38,3 @@ distclean: .$(SrcSuf).$(ObjSuf): $(CXX) $(CXXFLAGS) $(INCLUDE) -c $< - - diff --git a/NPLib/Tiara/TTiaraHyballSpectra.cxx b/NPLib/Tiara/TTiaraHyballSpectra.cxx new file mode 100644 index 000000000..19c81b877 --- /dev/null +++ b/NPLib/Tiara/TTiaraHyballSpectra.cxx @@ -0,0 +1,392 @@ +/***************************************************************************** + * Copyright (C) 2009-2013 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: N. de Sereville contact address: deserevi@ipno.in2p3.fr * + * * + * Creation Date : dec 2013 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class holds all the online spectra needed for Tiara/Hyball * + * * + *---------------------------------------------------------------------------* + * Comment: * + * + first version (not complete yet) * + * * + * * + *****************************************************************************/ + +// NPL +#include "TTiaraHyballSpectra.h" +#include "NPOptionManager.h" +#include "NPGlobalSystemOfUnits.h" +#include "NPPhysicalConstants.h" +#ifdef NP_SYSTEM_OF_UNITS_H +using namespace NPUNITS; +#endif + + +// ROOT +#include "TString.h" +#include "TDirectory.h" +#include "TFile.h" + + +//////////////////////////////////////////////////////////////////////////////// +TTiaraHyballSpectra::TTiaraHyballSpectra() +{ + if (NPOptionManager::getInstance()->GetVerboseLevel() > 0) { + cout << "************************************************" << endl; + cout << "TTiaraHyballSpectra: Initalising control spectra" << endl; + cout << "************************************************" << endl; + } + + fRingsNumber = 16; + fSectorsNumber = 8; + fWedgesNumber = 6; + + InitRawSpectra(); + InitPreTreatedSpectra(); + InitPhysicsSpectra(); +} + + + +//////////////////////////////////////////////////////////////////////////////// +TTiaraHyballSpectra::~TTiaraHyballSpectra() +{ +} + + + +//////////////////////////////////////////////////////////////////////////////// +void TTiaraHyballSpectra::InitRawSpectra() +{ + TString name; + + // HIT_RING_RAW + name = "HYB_HIT_RING_RAW"; + AddHisto1D(name, name, fWedgesNumber*fRingsNumber, 0, fWedgesNumber*fRingsNumber, "TIARA/HYBALL/RAW/HIT"); + + // HIT_SECTOR_RAW + name = "HYB_HIT_SECT_RAW"; + AddHisto1D(name, name, fWedgesNumber*fRingsNumber, 0, fWedgesNumber*fRingsNumber, "TIARA/HYBALL/RAW/HIT"); + + // RING_E_RAW + name = "HYB_RING_E_RAW"; + AddHisto2D(name, name, fWedgesNumber*fRingsNumber, 0, fWedgesNumber*fRingsNumber, 512, 0, 8192, "TIARA/HYBALL/RAW/ENERGY"); + + // SECTOR_E_RAW + name = "HYB_SECT_E_RAW"; + AddHisto2D(name, name, fWedgesNumber*fSectorsNumber, 0, fWedgesNumber*fSectorsNumber, 512, 0, 8192, "TIARA/HYBALL/RAW/ENERGY"); + + // RING_RAW_MULT + name = "HYB_RING_E_RAW_MULT"; + AddHisto1D(name, name, fWedgesNumber*fRingsNumber, 1, fWedgesNumber*fRingsNumber+1, "TIARA/HYBALL/RAW/MULT"); + + // SECTOR_RAW_MULT + name = "HYB_SECT_E_RAW_MULT"; + AddHisto1D(name, name, fWedgesNumber*fSectorsNumber, 1, fWedgesNumber*fSectorsNumber+1, "TIARA/HYBALL/RAW/MULT"); +} + + + +//////////////////////////////////////////////////////////////////////////////// +void TTiaraHyballSpectra::InitPreTreatedSpectra() +{ + TString name; + + // HIT_RING_CAL + name = "HYB_HIT_RING_CAL"; + AddHisto1D(name, name, fWedgesNumber*fRingsNumber, 0, fWedgesNumber*fRingsNumber, "TIARA/HYBALL/CAL/HIT"); + + // HIT_SECTOR_CAL + name = "HYB_HIT_SECT_CAL"; + AddHisto1D(name, name, fWedgesNumber*fRingsNumber, 0, fWedgesNumber*fRingsNumber, "TIARA/HYBALL/CAL/HIT"); + + // RING_E_CAL + name = "HYB_RING_E_CAL"; + AddHisto2D(name, name, fWedgesNumber*fRingsNumber, 0, fWedgesNumber*fRingsNumber, 500, 0, 50, "TIARA/HYBALL/CAL/ENERGY"); + + // SECTOR_E_CAL + name = "HYB_SECT_E_CAL"; + AddHisto2D(name, name, fWedgesNumber*fSectorsNumber, 0, fWedgesNumber*fSectorsNumber, 500, 0, 50, "TIARA/HYBALL/CAL/ENERGY"); + + // RING_CAL_MULT + name = "HYB_RING_E_CAL_MULT"; + AddHisto1D(name, name, fWedgesNumber*fRingsNumber, 1, fWedgesNumber*fRingsNumber+1, "TIARA/HYBALL/CAL/MULT"); + + // SECTOR_CAL_MULT + name = "HYB_SECT_E_CAL_MULT"; + AddHisto1D(name, name, fWedgesNumber*fSectorsNumber, 1, fWedgesNumber*fSectorsNumber+1, "TIARA/HYBALL/CAL/MULT"); +} + + + +//////////////////////////////////////////////////////////////////////////////// +void TTiaraHyballSpectra::InitPhysicsSpectra() +{ + TString name; + // X-Y Impact Matrix + name = "HYB_IMPACT_MATRIX"; + AddHisto2D(name, name, 500, -150, 150, 500, -150, 150, "TIARA/HYBALL/PHY"); + + // Kinematic line + name = "HYB_THETA_E"; + AddHisto2D(name, name, 360, 0, 180, 500, 0, 50, "TIARA/HYBALL/PHY"); + + // Ring v.s. Sector Energy Correlation + // STRX_E_CAL + name = "HYB_XY_COR"; + AddHisto2D(name, name, 500, 0, 50, 500, 0, 50, "TIARA/HYBALL/PHY"); +} + + + +//////////////////////////////////////////////////////////////////////////////// +void TTiaraHyballSpectra::FillRawSpectra(TTiaraHyballData* RawData) +{ + TString name; + TString family; + + // HIT_RING_RAW + family = "TIARA/HYBALL/RAW/HIT"; + name = "HYB_HIT_RING_RAW"; + for (unsigned int i = 0; i < RawData->GetRingEMult(); i++) { + unsigned short channel = RawData->GetRingEDetectorNbr(i) * fRingsNumber + RawData->GetRingEStripNbr(i); + GetHisto(family, name) -> Fill(channel); + } + + // HIT_SECT_RAW + family = "TIARA/HYBALL/RAW/HIT"; + name = "HYB_HIT_SECT_RAW"; + for (unsigned int i = 0; i < RawData->GetSectorEMult(); i++) { + unsigned short channel = RawData->GetSectorEDetectorNbr(i) * fSectorsNumber + RawData->GetSectorEStripNbr(i); + GetHisto(family, name) -> Fill(channel); + } + + // RING_E_RAW + family = "TIARA/HYBALL/RAW/ENERGY"; + name = "HYB_RING_E_RAW"; + for (unsigned int i = 0; i < RawData->GetRingEMult(); i++) { + unsigned short channel = RawData->GetRingEDetectorNbr(i) * fRingsNumber + RawData->GetRingEStripNbr(i); + GetHisto(family, name) -> Fill(channel, RawData->GetRingEEnergy(i)); + } + + // SECTOR_E_RAW + family = "TIARA/HYBALL/RAW/ENERGY"; + name = "HYB_SECT_E_RAW"; + for (unsigned int i = 0; i < RawData->GetRingEMult(); i++) { + unsigned short channel = RawData->GetRingEDetectorNbr(i) * fSectorsNumber + RawData->GetSectorEStripNbr(i); + GetHisto(family, name) -> Fill(channel, RawData->GetRingEEnergy(i)); + } +/* + // STRX MULT + int myMULT[fNumberOfTelescope]; + for( unsigned int i = 0; i < fNumberOfTelescope; i++) + myMULT[i] = 0 ; + + for(unsigned int i = 0 ; i < RawData->GetMMStripXEMult();i++){ + myMULT[RawData->GetMMStripXEDetectorNbr(i)-1] += 1; + } + + for( unsigned int i = 0; i < fNumberOfTelescope; i++){ + + name = Form("MM%d_STRX_RAW_MULT", i+1); + family= "TIARA/HYBALL/RAW/MULT"; + GetHisto(family,name) + -> Fill(myMULT[i]); + } + + // STRY MULT + for( unsigned int i = 0; i < fNumberOfTelescope; i++) + myMULT[i] = 0 ; + + for(unsigned int i = 0 ; i < RawData->GetMMStripYEMult();i++){ + myMULT[RawData->GetMMStripYEDetectorNbr(i)-1] += 1; + } + + for( unsigned int i = 0; i < fNumberOfTelescope; i++){ + name = Form("MM%d_STRY_RAW_MULT", i+1); + family= "TIARA/HYBALL/RAW/MULT"; + GetHisto(family,name) + -> Fill(myMULT[i]); + } + */ +} + + + +//////////////////////////////////////////////////////////////////////////////// +void TTiaraHyballSpectra::FillPreTreatedSpectra(TTiaraHyballData* PreTreatedData) +{ + TString name; + TString family; + + // HIT_RING_CAL + family = "TIARA/HYBALL/CAL/HIT"; + name = "HYB_HIT_RING_CAL"; + for (unsigned int i = 0; i < PreTreatedData->GetRingEMult(); i++) { + unsigned short channel = PreTreatedData->GetRingEDetectorNbr(i) * fRingsNumber + PreTreatedData->GetRingEStripNbr(i); + GetHisto(family, name) -> Fill(channel); + } + + // HIT_SECT_CAL + family = "TIARA/HYBALL/CAL/HIT"; + name = "HYB_HIT_SECT_CAL"; + for (unsigned int i = 0; i < PreTreatedData->GetSectorEMult(); i++) { + unsigned short channel = PreTreatedData->GetSectorEDetectorNbr(i) * fSectorsNumber + PreTreatedData->GetSectorEStripNbr(i); + GetHisto(family, name) -> Fill(channel); + } + + // RING_E_CAL + family = "TIARA/HYBALL/CAL/ENERGY"; + name = "HYB_RING_E_CAL"; + for (unsigned int i = 0; i < PreTreatedData->GetRingEMult(); i++) { + unsigned short channel = PreTreatedData->GetRingEDetectorNbr(i) * fRingsNumber + PreTreatedData->GetRingEStripNbr(i); + GetHisto(family, name) -> Fill(channel, PreTreatedData->GetRingEEnergy(i)); + } + + // SECTOR_E_CAL + family = "TIARA/HYBALL/CAL/ENERGY"; + name = "HYB_SECT_E_CAL"; + for (unsigned int i = 0; i < PreTreatedData->GetRingEMult(); i++) { + unsigned short channel = PreTreatedData->GetRingEDetectorNbr(i) * fSectorsNumber + PreTreatedData->GetSectorEStripNbr(i); + GetHisto(family, name) -> Fill(channel, PreTreatedData->GetRingEEnergy(i)); + } + +/* + // STRX MULT + int myMULT[fNumberOfTelescope]; + for( unsigned int i = 0; i < fNumberOfTelescope; i++) + myMULT[i] = 0 ; + + for(unsigned int i = 0 ; i < PreTreatedData->GetMMStripXEMult();i++){ + myMULT[PreTreatedData->GetMMStripXEDetectorNbr(i)-1] += 1; + } + + for( unsigned int i = 0; i < fNumberOfTelescope; i++){ + + name = Form("MM%d_STRX_CAL_MULT", i+1); + family= "TIARA/HYBALL/CAL/MULT"; + GetHisto(family,name) + -> Fill(myMULT[i]); + } + + // STRY MULT + for( unsigned int i = 0; i < fNumberOfTelescope; i++) + myMULT[i] = 0 ; + + for(unsigned int i = 0 ; i < PreTreatedData->GetMMStripYEMult();i++){ + myMULT[PreTreatedData->GetMMStripYEDetectorNbr(i)-1] += 1; + } + + for( unsigned int i = 0; i < fNumberOfTelescope; i++){ + name = Form("MM%d_STRY_CAL_MULT", i+1); + family= "TIARA/HYBALL/CAL/MULT"; + GetHisto(family,name) + -> Fill(myMULT[i]); + } + */ +} + + +/* +//////////////////////////////////////////////////////////////////////////////// +void TTiaraHyballSpectra::FillPhysicsSpectra(TTiaraHyballPhysics* Physics) +{ +TString name; +TString family= "TIARA/HYBALL/PHY"; +// X-Y Impact Matrix + +for(unsigned int i = 0 ; i < Physics->Si_E.size(); i++){ +name = "MM_IMPACT_MATRIX"; +double x = Physics->GetPositionOfInteraction(i).x(); +double y = Physics->GetPositionOfInteraction(i).y(); +GetHisto(family,name)-> Fill(x,y); + +name = "MM_THETA_E"; +double Theta = Physics->GetPositionOfInteraction(i).Angle(TVector3(0,0,1)); +Theta = Theta/deg; +GetHisto(family,name)-> Fill(Theta,Physics->Si_E[i]); + +// STRX_E_CAL +name = Form("MM%d_XY_COR", Physics->TelescopeNumber[i]); +GetHisto(family,name)-> Fill(Physics->Si_EX[i],Physics->Si_EY[i]); +} +} + */ + + +//////////////////////////////////////////////////////////////////////////////// +TH1* TTiaraHyballSpectra::AddHisto1D(TString name, TString title, Int_t nbinsx, Double_t xlow, Double_t xup, TString family) +{ + // create histo + TH1 *hist = new TH1D(name, title, nbinsx, xlow, xup); + + vector<TString> index; + index.push_back(family); + index.push_back(name); + + // fill map + fMapHisto[index] = hist; + + return hist; +} + + + +//////////////////////////////////////////////////////////////////////////////// +TH1* TTiaraHyballSpectra::AddHisto2D(TString name, TString title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup, TString family) +{ + // create histo + TH1 *hist = new TH2D(name, title, nbinsx, xlow, xup, nbinsy, ylow, yup); + + vector<TString> index; + index.push_back(family); + index.push_back(name); + + // fill map + fMapHisto[index] = hist; + + return hist; +} + + + +//////////////////////////////////////////////////////////////////////////////// +TH1* TTiaraHyballSpectra::GetHisto(TString family, TString name) +{ + vector<TString> index; + index.push_back(family); + index.push_back(name); + + return fMapHisto.at(index); +} + + + +//////////////////////////////////////////////////////////////////////////////// +void TTiaraHyballSpectra::WriteHisto(TString filename) +{ + TFile* f = NULL; + + if (filename != "VOID") { + f = new TFile(filename,"RECREATE"); + } + + map< vector<TString>, TH1* >::iterator it; + for (it=fMapHisto.begin(); it!=fMapHisto.end(); ++it) { + it->second->Write(); + } + + if (filename != "VOID") { + f->Close(); + delete f; + } +} diff --git a/NPLib/Tiara/TTiaraHyballSpectra.h b/NPLib/Tiara/TTiaraHyballSpectra.h new file mode 100644 index 000000000..75a1afdf6 --- /dev/null +++ b/NPLib/Tiara/TTiaraHyballSpectra.h @@ -0,0 +1,84 @@ +#ifndef TTIARAHYBALLSPECTRA_H +#define TTIARAHYBALLSPECTRA_H +/***************************************************************************** + * Copyright (C) 2009-2013 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: N. de Sereville contact address: deserevi@ipno.in2p3.fr * + * * + * Creation Date : dec 2013 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class holds all the online spectra needed for Tiara/Hyball * + * * + *---------------------------------------------------------------------------* + * Comment: * + * + first version (not complete yet) * + * * + * * + *****************************************************************************/ + +// ROOT headers +#include "TObject.h" +#include <TH1.h> +#include <TH2.h> +#include <TString.h> + +// NPLib headers +#include "TTiaraHyballData.h" +//#include "TTiaraHyballPhysics.h" + +// C++ STL headers +#include <map> +using namespace std; + + +// Forward Declaration +//class TTiaraHyballPhysics; + + +class TTiaraHyballSpectra { + public: + // constructor and destructor + TTiaraHyballSpectra(); + ~TTiaraHyballSpectra(); + + private: + // Instantiate and register histo to maps + TH1* AddHisto1D(TString name, TString title, Int_t nbinsx, Double_t xlow, Double_t xup, TString family); + TH1* AddHisto2D(TString name, TString title, Int_t nbinsx, Double_t xlow, Double_t xup, + Int_t nbinsy, Double_t ylow, Double_t yup, TString family); + + // Initialization methods + void InitRawSpectra(); + void InitPreTreatedSpectra(); + void InitPhysicsSpectra(); + + public: + // Filling methods + void FillRawSpectra(TTiaraHyballData*); + void FillPreTreatedSpectra(TTiaraHyballData*); +// void FillPhysicsSpectra(TTiaraHyballPhysics*); + + public: + // get map histo which will be used for GSpectra in GUser + map< vector<TString>, TH1* > GetMapHisto() const {return fMapHisto;} + TH1* GetHisto(TString family, TString name); + void WriteHisto(TString filename = "VOID"); + + private: // Information on MUST2 + unsigned int fRingsNumber; + unsigned int fSectorsNumber; + unsigned int fWedgesNumber; + + private: + // map holding histo pointers and their family names + map< vector<TString>, TH1* > fMapHisto; +}; + +#endif -- GitLab