From 8e9dd2c096225f6f4ee2396ecf3c206092789e62 Mon Sep 17 00:00:00 2001
From: deserevi <deserevi@nptool>
Date: Tue, 8 Mar 2011 15:14:50 +0000
Subject: [PATCH] * Add TMust2Spectra.{h,cxx} class in NPLib    + This class
 holds the spetra which are needed for the online analysis      of Must2
 experiments    + However, this class only depends on ROOT and can be used in
 any context.    + This is a first uncomplete version which has not been
 tested yet.

---
 NPLib/MUST2/Makefile          |  10 +-
 NPLib/MUST2/TMust2Spectra.cxx | 249 ++++++++++++++++++++++++++++++++++
 NPLib/MUST2/TMust2Spectra.h   | 121 +++++++++++++++++
 3 files changed, 378 insertions(+), 2 deletions(-)
 create mode 100644 NPLib/MUST2/TMust2Spectra.cxx
 create mode 100644 NPLib/MUST2/TMust2Spectra.h

diff --git a/NPLib/MUST2/Makefile b/NPLib/MUST2/Makefile
index 8bcd291e5..b4145b3b1 100644
--- a/NPLib/MUST2/Makefile
+++ b/NPLib/MUST2/Makefile
@@ -1,7 +1,7 @@
 include ../Makefile.arch
 
 #------------------------------------------------------------------------------
-SHARELIB      =  libMust2Data.so	libMust2Physics.so
+SHARELIB      =  libMust2Data.so	libMust2Physics.so   libMust2Spectra.so
 
 all:            $(SHARELIB)
 #------------------------------------------------------------------------------
@@ -20,10 +20,16 @@ libMust2Physics.so:	TMust2Physics.o	TMust2PhysicsDict.o
 TMust2PhysicsDict.cxx: TMust2Physics.h
 			rootcint -f $@ -c $^
 
+libMust2Spectra.so:	TMust2Spectra.o	TMust2SpectraDict.o
+		$(LD) $(SOFLAGS) $^ $(OutPutOpt) $@
+
+TMust2SpectraDict.cxx: TMust2Spectra.h
+			rootcint -f $@ -c $^
+
 # dependances
 TMust2Data.o:		TMust2Data.cxx	TMust2Data.h
-TMust2DataDict.o:		TMust2DataDict.cxx	TMust2DataDict.h
 TMust2Physics.o:	TMust2Physics.cxx	TMust2Physics.h
+TMust2Spectra.o:	TMust2Spectra.cxx	TMust2Spectra.h
 #######################################
 
 ############# Clean and More ##########
diff --git a/NPLib/MUST2/TMust2Spectra.cxx b/NPLib/MUST2/TMust2Spectra.cxx
new file mode 100644
index 000000000..8673e8e0e
--- /dev/null
+++ b/NPLib/MUST2/TMust2Spectra.cxx
@@ -0,0 +1,249 @@
+/*****************************************************************************
+ * Copyright (C) 2009-2010   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  : march 2011                                               *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class holds all the online spectra needed for Must2                 *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *    + first version (not complete yet)                                     *
+ *                                                                           *
+ *                                                                           *
+ *****************************************************************************/
+#include "TMust2Spectra.h"
+
+#include "TString.h"
+
+
+ClassImp(TMust2Spectra)
+
+TMust2Spectra::TMust2Spectra()
+   : fMust2Data(new TMust2Data()),
+     fMust2PreTreatedData(new TMust2Data()),
+     fMust2Physics(new TMust2Physics())
+{
+   fMust2PreTreatedData = fMust2Physics->GetPreTreatedData();
+}
+
+
+
+TMust2Spectra::~TMust2Spectra()
+{
+}
+
+
+
+void TMust2Spectra::InitRawUserSpectra()
+{
+   TString name;
+   for (Int_t i = 0; i < NUMBERMUST2; ++i) {   // loop on number of detectors
+      // STRX_MULT
+      name = Form("MM%d_STRX_MULT", i+1);
+      MM_STRX_MULT[i] = AddTH1(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, "MUST2/BRUT/MULT");
+
+      // STRY_MULT
+      name = Form("MM%d_STRY_MULT", i+1);
+      MM_STRY_MULT[i] = AddTH1(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, "MUST2/BRUT/MULT");
+
+      // SILI_MULT
+      name = Form("MM%d_SILI_MULT", i+1);
+      MM_SILI_MULT[i] = AddTH1(name, name, NUMBERSILI, 1, NUMBERSILI+1, "MUST2/BRUT/MULT");
+
+      // CSI_MULT
+      name = Form("MM%d_CSI_MULT", i+1);
+      MM_CSI_MULT[i] = AddTH1(name, name, NUMBERCSI, 1, NUMBERCSI+1, "MUST2/BRUT/MULT");
+   } // end loop on number of detectors
+}
+
+
+
+void TMust2Spectra::InitUserSpectra()
+{
+   TString name;
+   for (Int_t i = 0; i < NUMBERMUST2; i++) { // loop on number of detectors
+      // STRX_E_BRU
+      name = Form("MM%d_STRX_E_BRU", i+1);
+      MM_STRX_E_BRU[i] = AddTH2(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, 512, 0, 8192, "MUST2/BRUT/STRXE");
+
+      // STRY_E_BRU
+      name = Form("MM%d_STRY_E_BRU", i+1);
+      MM_STRY_E_BRU[i] = AddTH2(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, 512, 0, 8192, "MUST2/BRUT/STRYE");
+
+      // STRX_T_BRU
+      name = Form("MM%d_STRX_T_BRU", i+1);
+      MM_STRX_T_BRU[i] = AddTH2(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, 512, 0, 8192, "MUST2/BRUT/STRXT");
+
+      // STRY_T_BRU
+      name = Form("MM%d_STRY_T_BRU", i+1);
+      MM_STRY_T_BRU[i] = AddTH2(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, 512, 0, 8192, "MUST2/BRUT/STRYT");
+
+      // SILI_E_BRU
+      name = Form("MM%d_SILI_E_BRU", i+1);
+      MM_SILI_E_BRU[i] = AddTH2(name, name, NUMBERSILI, 1, NUMBERSILI+1, 512, 0, 8192, "MUST2/BRUT/SILIE");
+
+      // SILI_T_BRU
+      name = Form("MM%d_SILI_T_BRU", i+1);
+      MM_SILI_T_BRU[i] = AddTH2(name, name, NUMBERSILI, 1, NUMBERSILI+1, 512, 0, 8192, "MUST2/BRUT/SILIT");
+
+      // CSI_E_BRU
+      name = Form("MM%d_CSI_E_BRU", i+1);
+      MM_CSI_E_BRU[i] = AddTH2(name, name, NUMBERCSI, 1, NUMBERCSI+1, 512, 0, 8192, "MUST2/BRUT/CSIE");
+
+      // CSI_T_BRU
+      name = Form("MM%d_CSI_T_BRU", i+1);
+      MM_CSI_T_BRU[i] = AddTH2(name, name, NUMBERCSI, 1, NUMBERCSI+1, 512, 0, 8192, "MUST2/BRUT/CSIT");
+
+      // STRX_E_CAL
+      name = Form("MM%d_STRX_E_CAL", i+1);
+      MM_STRX_E_CAL[i] = AddTH2(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, 500, 0, 50, "MUST2/CAL/STRXE");
+
+      // STRY_E_CAL
+      name = Form("MM%d_STRY_E_CAL", i+1);
+      MM_STRY_E_CAL[i] = AddTH2(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, 500, 0, 50, "MUST2/CAL/STRYE");
+
+      // STRX_T_CAL
+      name = Form("MM%d_STRX_T_CAL", i+1);
+      MM_STRX_T_CAL[i] = AddTH2(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, 500, 0, 500, "MUST2/CAL/STRXT");
+
+      // STRY_T_CAL
+      name = Form("MM%d_STRY_T_CAL", i+1);
+      MM_STRY_T_CAL[i] = AddTH2(name, name, NUMBERSTRIPS, 1, NUMBERSTRIPS+1, 500, 0, 500, "MUST2/CAL/STRYT");
+
+      // SILI_E_CAL
+      name = Form("MM%d_SILI_E_CAL", i+1);
+      MM_SILI_E_CAL[i] = AddTH2(name, name, NUMBERSILI, 1, NUMBERSILI+1, 500, 0, 50, "MUST2/CAL/SILIE");
+
+      // SILI_T_CAL
+      name = Form("MM%d_SILI_T_CAL", i+1);
+      MM_SILI_T_CAL[i] = AddTH2(name, name, NUMBERSILI, 1, NUMBERSILI+1, 500, 0, 50, "MUST2/CAL/SILIT");
+
+      // CSI_E_CAL
+      name = Form("MM%d_CSI_E_CAL", i+1);
+      MM_CSI_E_CAL[i] = AddTH2(name, name, NUMBERCSI, 1, NUMBERCSI+1, 500, 0, 50, "MUST2/CAL/CSIE");
+
+      // CSI_T_CAL
+      name = Form("MM%d_CSI_T_CAL", i+1);
+      MM_CSI_T_CAL[i] = AddTH2(name, name, NUMBERCSI, 1, NUMBERCSI+1, 500, 0, 50, "MUST2/CAL/CSIT");
+   }  // end loop on number of detectors
+}
+
+
+
+void TMust2Spectra::FillRawUserSpectra()
+{
+   
+}
+
+
+
+void TMust2Spectra::FillUserSpectra()
+{
+   // STRX_E 
+   for (Int_t i = 0; i < fMust2Data->GetMMStripXEMult(); i++) {
+      MM_STRX_E_BRU[fMust2Data->GetMMStripXEDetectorNbr(i) - 1] -> Fill(fMust2Data->GetMMStripXEStripNbr(i), fMust2Data->GetMMStripXEEnergy(i) - 8192);
+   }
+
+   // STRY_E
+   for (Int_t i = 0; i < fMust2Data->GetMMStripYEMult(); i++) {
+      MM_STRY_E_BRU[fMust2Data->GetMMStripYEDetectorNbr(i) - 1] -> Fill(fMust2Data->GetMMStripYEStripNbr(i), 8192 - fMust2Data->GetMMStripYEEnergy(i));
+   }
+
+   // STRX_T
+   for (Int_t i = 0; i < fMust2Data->GetMMStripXTMult(); i++) {
+      MM_STRX_T_BRU[fMust2Data->GetMMStripXTDetectorNbr(i) - 1] -> Fill(fMust2Data->GetMMStripXTStripNbr(i), fMust2Data->GetMMStripXTTime(i) - 8192);
+   }
+   // STRY_T
+   for (Int_t i = 0; i < fMust2Data->GetMMStripYTMult(); i++) {
+      MM_STRY_T_BRU[fMust2Data->GetMMStripYTDetectorNbr(i) - 1] -> Fill(fMust2Data->GetMMStripYTStripNbr(i), 8192 - fMust2Data->GetMMStripYTTime(i));
+   }
+
+   // SILI_E
+   for (Int_t i = 0; i < fMust2Data->GetMMSiLiEMult(); i++) {
+      MM_SILI_E_BRU[fMust2Data->GetMMSiLiEDetectorNbr(i) - 1] -> Fill(fMust2Data->GetMMSiLiEPadNbr(i), fMust2Data->GetMMSiLiEEnergy(i));
+   }
+
+   // SILI_T
+   for (Int_t i = 0; i < fMust2Data->GetMMSiLiTMult(); i++) {
+      MM_SILI_T_BRU[fMust2Data->GetMMSiLiTDetectorNbr(i) - 1] -> Fill(fMust2Data->GetMMSiLiTPadNbr(i), fMust2Data->GetMMSiLiTTime(i));
+   }
+
+   // CSI_E
+   for (Int_t i = 0; i < fMust2Data->GetMMCsIEMult(); i++) {
+      MM_CSI_E_BRU[fMust2Data->GetMMCsIEDetectorNbr(i) - 1] -> Fill(fMust2Data->GetMMCsIECristalNbr(i), fMust2Data->GetMMCsIEEnergy(i));
+   }
+
+   // CSI_T
+   for (Int_t i = 0; i < fMust2Data->GetMMCsITMult(); i++) {
+      MM_CSI_T_BRU[fMust2Data->GetMMCsITDetectorNbr(i) - 1] -> Fill(fMust2Data->GetMMCsITCristalNbr(i), fMust2Data->GetMMCsITTime(i));
+   }
+
+   // fill calibrated user spectra
+   // STRX_E
+   for (Int_t i = 0; i < fMust2PreTreatedData->GetMMStripXEMult(); i++) {
+      MM_STRX_E_CAL[fMust2PreTreatedData->GetMMStripXEDetectorNbr(i) - 1] -> Fill(fMust2PreTreatedData->GetMMStripXEStripNbr(i), fMust2PreTreatedData->GetMMStripXEEnergy(i));
+   }
+   // STRY_E
+   for (Int_t i = 0; i < fMust2PreTreatedData->GetMMStripYEMult(); i++) {
+      MM_STRY_E_CAL[fMust2PreTreatedData->GetMMStripYEDetectorNbr(i) - 1] -> Fill(fMust2PreTreatedData->GetMMStripYEStripNbr(i), fMust2PreTreatedData->GetMMStripYEEnergy(i));
+   }
+   // STRX_T
+   for (Int_t i = 0; i < fMust2PreTreatedData->GetMMStripXTMult(); i++) {
+      MM_STRX_T_CAL[fMust2PreTreatedData->GetMMStripXTDetectorNbr(i) - 1] -> Fill(fMust2PreTreatedData->GetMMStripXTStripNbr(i), fMust2PreTreatedData->GetMMStripXTTime(i));
+   }
+   // STRY_T
+   for (Int_t i = 0; i < fMust2PreTreatedData->GetMMStripYTMult(); i++) {
+      MM_STRY_T_CAL[fMust2PreTreatedData->GetMMStripYTDetectorNbr(i) - 1] -> Fill(fMust2PreTreatedData->GetMMStripYTStripNbr(i), fMust2PreTreatedData->GetMMStripYTTime(i));
+   }
+   // SILI_E
+   for (Int_t i = 0; i < fMust2PreTreatedData->GetMMSiLiEMult(); i++) {
+      MM_SILI_E_CAL[fMust2PreTreatedData->GetMMSiLiEDetectorNbr(i) - 1] -> Fill(fMust2PreTreatedData->GetMMSiLiEPadNbr(i), fMust2PreTreatedData->GetMMSiLiEEnergy(i));
+   }
+   // SILI_T
+   for (Int_t i = 0; i < fMust2PreTreatedData->GetMMSiLiTMult(); i++) {
+      MM_SILI_T_CAL[fMust2PreTreatedData->GetMMSiLiTDetectorNbr(i) - 1] -> Fill(fMust2PreTreatedData->GetMMSiLiTPadNbr(i), fMust2PreTreatedData->GetMMSiLiTTime(i));
+   }
+   // CSI_E
+   for (Int_t i = 0; i < fMust2PreTreatedData->GetMMCsIEMult(); i++) {
+      MM_CSI_E_CAL[fMust2PreTreatedData->GetMMCsIEDetectorNbr(i) - 1] -> Fill(fMust2PreTreatedData->GetMMCsIECristalNbr(i), fMust2PreTreatedData->GetMMCsIEEnergy(i));
+   }
+   // CSI_T
+   for (Int_t i = 0; i < fMust2PreTreatedData->GetMMCsITMult(); i++) {
+         MM_CSI_T_CAL[fMust2PreTreatedData->GetMMCsITDetectorNbr(i) - 1] -> Fill(fMust2PreTreatedData->GetMMCsITCristalNbr(i), fMust2PreTreatedData->GetMMCsITTime(i));
+      }
+}
+
+
+
+TH1* TMust2Spectra::AddTH1(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, const char* family)
+{
+   // create histo
+   TH1 *hist = new TH1I(name, title, nbinsx, xlow, xup);
+
+   // fill map
+   fMapHisto[family].push_back(hist);
+
+   return hist;
+}
+
+
+
+TH1* TMust2Spectra::AddTH2(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup, const char* family)
+{
+   // create histo
+   TH1 *hist = new TH2I(name, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
+
+   // fill map
+   fMapHisto[family].push_back(hist);
+
+   return hist;
+}
diff --git a/NPLib/MUST2/TMust2Spectra.h b/NPLib/MUST2/TMust2Spectra.h
new file mode 100644
index 000000000..8d9cbd2f7
--- /dev/null
+++ b/NPLib/MUST2/TMust2Spectra.h
@@ -0,0 +1,121 @@
+#ifndef __MUST2SPECTRA__
+#define __MUST2SPECTRA__
+/*****************************************************************************
+ * Copyright (C) 2009-2010   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  : march 2011                                               *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  This class holds all the online spectra needed for Must2                 *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *    + first version (not complete yet)                                     *
+ *                                                                           *
+ *                                                                           *
+ *****************************************************************************/
+
+// C++ STL headers
+#include <map>
+#include <string>
+
+// ROOT headers
+#include "TObject.h"
+#include <TH1.h>
+#include <TH2.h>
+
+// NPLib headers
+#include "TMust2Data.h"
+#include "TMust2Physics.h"
+
+using namespace std;
+
+#define NUMBERMUST2  8
+#define NUMBERSTRIPS 128
+#define NUMBERSILI   16
+#define NUMBERCSI    16
+
+
+class TMust2Spectra : public TObject {
+ public:
+   // constructor and destructor
+	TMust2Spectra();
+	virtual ~TMust2Spectra();
+
+   // Instantiate and register histo to maps
+   TH1* AddTH1(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, const char* family = "MUST2");
+   TH1* AddTH2(const char* name, const char* title, Int_t nbinsx, Double_t xlow, Double_t xup, Int_t nbinsy, Double_t ylow, Double_t yup, const char* family = "MUST2");
+
+   // Initialization methods
+   void InitRawUserSpectra();
+   void InitUserSpectra();
+   // Filling methods
+   void FillRawUserSpectra();
+   void FillUserSpectra();
+
+	// getters and setters
+   // getters
+   TMust2Data*	   GetMust2Data()             const {return fMust2Data;}
+   TMust2Data*	   GetMust2PreTreatedData()   const {return fMust2PreTreatedData;}
+	TMust2Physics*	GetMust2Physics()          const {return fMust2Physics;}
+   // setters
+   void SetMust2Data(TMust2Data*           must2Data)           {fMust2Data           = must2Data;}
+   void SetMust2PreTreatedData(TMust2Data* must2PreTreatedData) {fMust2PreTreatedData = must2PreTreatedData;}
+   void SetMust2Data(TMust2Physics*        must2Physics)        {fMust2Physics        = must2Physics;}
+
+   // get map histo which will be used for GSpectra in GUser
+   map< string, vector<TH1*> > GetMapHisto() const {return fMapHisto;}
+
+
+ private:
+	// Data and physics class for Must2
+	TMust2Data     *fMust2Data;
+	TMust2Data     *fMust2PreTreatedData;
+	TMust2Physics  *fMust2Physics;
+
+ private:
+   // map holding histo pointers and their family names
+   map< string, vector<TH1*> > fMapHisto;
+
+ private:
+   // monodim
+   TH1 *MM_STRX_MULT[NUMBERMUST2];  // dim = 128
+   TH1 *MM_STRY_MULT[NUMBERMUST2];  // dim = 128
+   TH1 *MM_SILI_MULT[NUMBERMUST2];  // dim = 16
+   TH1 *MM_CSI_MULT[NUMBERMUST2];   // dim = 16
+
+   // bidim
+   TH1 *MM_STRX_E_BRU[NUMBERMUST2];   // dim = 128 x 512
+   TH1 *MM_STRY_E_BRU[NUMBERMUST2];
+   TH1 *MM_STRX_T_BRU[NUMBERMUST2];
+   TH1 *MM_STRY_T_BRU[NUMBERMUST2];
+   // SiLi E
+   TH1 *MM_SILI_E_BRU[NUMBERMUST2];   // dim = 16 x 512
+   TH1 *MM_SILI_T_BRU[NUMBERMUST2];   // dim = 16 x 512
+   // CsI E
+   TH1 *MM_CSI_E_BRU[NUMBERMUST2];    // dim = 16 x 512
+   TH1 *MM_CSI_T_BRU[NUMBERMUST2];    // dim = 16 x 512
+   // Strips (X,Y) (E.T)
+   TH1 *MM_STRX_E_CAL[NUMBERMUST2];   // dim = 128 x 500 (50 MeV range)
+   TH1 *MM_STRY_E_CAL[NUMBERMUST2];
+   TH1 *MM_STRX_T_CAL[NUMBERMUST2];   // dim = 128 x 500 (500 ns range)
+   TH1 *MM_STRY_T_CAL[NUMBERMUST2];
+   // SiLi E
+   TH1 *MM_SILI_E_CAL[NUMBERMUST2];   // dim = 16 x 512
+   TH1 *MM_SILI_T_CAL[NUMBERMUST2];   // dim = 16 x 512
+   // CsI E
+   TH1 *MM_CSI_E_CAL[NUMBERMUST2];    // dim = 16 x 512
+   TH1 *MM_CSI_T_CAL[NUMBERMUST2];    // dim = 16 x 512
+
+	ClassDef(TMust2Spectra,1)  // Must2Spectra structure
+};
+
+#endif
-- 
GitLab