Newer
Older
/*****************************************************************************
* 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 : march 2011 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class holds all the online spectra needed for Must2 *
* *
*---------------------------------------------------------------------------*
* Comment: *
* + first version (not complete yet) *
* *
* *
*****************************************************************************/
#include "NPGlobalSystemOfUnits.h"
#include "NPPhysicalConstants.h"
#ifdef NP_SYSTEM_OF_UNITS_H
using namespace NPUNITS;
#endif
// ROOT
#include "TDirectory.h"
#include "TFile.h"
////////////////////////////////////////////////////////////////////////////////
TMust2Spectra::TMust2Spectra(){
fNumberOfTelescope = 0;
fStripX=128;
fStripY=128;
fPadSili=16;
fCrystalCsI=16;
}
////////////////////////////////////////////////////////////////////////////////
TMust2Spectra::TMust2Spectra(unsigned int NumberOfTelescope){
if(NPOptionManager::getInstance()->GetVerboseLevel()>0)
cout << "************************************************" << endl
<< "TMust2Spectra : Initalising control spectra for "
<< NumberOfTelescope << " Telescopes" << endl
<< "************************************************" << endl ;
fNumberOfTelescope = NumberOfTelescope;
fStripX=128;
fStripY=128;
fPadSili=16;
fCrystalCsI=16;
InitRawSpectra();
InitPreTreatedSpectra();
InitPhysicsSpectra();
////////////////////////////////////////////////////////////////////////////////
TMust2Spectra::~TMust2Spectra(){
}
////////////////////////////////////////////////////////////////////////////////
void TMust2Spectra::InitRawSpectra(){
TString name;
for (unsigned int i = 0; i < fNumberOfTelescope; i++) { // loop on number of detectors
// STRX_E_RAW
name = Form("MM%d_STRX_E_RAW", i+1);
AddHisto2D(name, name, fStripX, 1, fStripX+1, 512, 0, 8192, "MUST2/RAW/STRXE");
// STRY_E_RAW
name = Form("MM%d_STRY_E_RAW", i+1);
AddHisto2D(name, name, fStripY, 1, fStripY+1, 512, 0, 8192, "MUST2/RAW/STRYE");
// STRX_T_RAW
name = Form("MM%d_STRX_T_RAW", i+1);
AddHisto2D(name, name, fStripX, 1, fStripX+1, 512, 0, 8192, "MUST2/RAW/STRXT");
// STRY_T_RAW
name = Form("MM%d_STRY_T_RAW", i+1);
AddHisto2D(name, name, fStripY, 1, fStripY+1, 512, 0, 8192, "MUST2/RAW/STRYT");
// SILI_E_RAW
name = Form("MM%d_SILI_E_RAW", i+1);
AddHisto2D(name, name, fPadSili, 1, fPadSili+1, 512, 0, 8192, "MUST2/RAW/SILIE");
// SILI_T_RAW
name = Form("MM%d_SILI_T_RAW", i+1);
AddHisto2D(name, name, fPadSili, 1, fPadSili+1, 512, 0, 8192, "MUST2/RAW/SILIT");
// CSI_E_RAW
name = Form("MM%d_CSI_E_RAW", i+1);
AddHisto2D(name, name, fCrystalCsI, 1, fCrystalCsI+1, 512, 0, 8192, "MUST2/RAW/CSIE");
// CSI_T_RAW
name = Form("MM%d_CSI_T_RAW", i+1);
AddHisto2D(name, name, fCrystalCsI, 1, fCrystalCsI+1, 512, 0, 8192, "MUST2/RAW/CSIT");
// STRX_RAW_MULT
name = Form("MM%d_STRX_RAW_MULT", i+1);
AddHisto1D(name, name, fStripX, 1, fStripX+1, "MUST2/RAW/MULT");
// STRY_RAW_MULT
name = Form("MM%d_STRY_RAW_MULT", i+1);
AddHisto1D(name, name, fStripX, 1, fStripX+1, "MUST2/RAW/MULT");
// SILI_RAW_MULT
name = Form("MM%d_SILI_RAW_MULT", i+1);
AddHisto1D(name, name, fPadSili, 1, fPadSili+1, "MUST2/RAW/MULT");
// CSI_RAW_MULT
name = Form("MM%d_CSI_RAW_MULT", i+1);
AddHisto1D(name, name, fCrystalCsI, 1, fCrystalCsI+1, "MUST2/RAW/MULT");
} // end loop on number of detectors
////////////////////////////////////////////////////////////////////////////////
void TMust2Spectra::InitPreTreatedSpectra()
{
TString name;
for (unsigned int i = 0; i < fNumberOfTelescope; i++) { // loop on number of detectors
// STRX_E_CAL
name = Form("MM%d_STRX_E_CAL", i+1);
AddHisto2D(name, name, fStripX, 1, fStripX+1, 500, 0, 50, "MUST2/CAL/STRXE");
// STRY_E_CAL
name = Form("MM%d_STRY_E_CAL", i+1);
AddHisto2D(name, name, fStripY, 1, fStripY+1, 500, 0, 50, "MUST2/CAL/STRYE");
// STRX_T_CAL
name = Form("MM%d_STRX_T_CAL", i+1);
AddHisto2D(name, name, fStripX, 1, fStripX+1, 500, 0, 500, "MUST2/CAL/STRXT");
// STRY_T_CAL
name = Form("MM%d_STRY_T_CAL", i+1);
AddHisto2D(name, name, fStripY, 1, fStripY+1, 500, 0, 500, "MUST2/CAL/STRYT");
// SILI_E_CAL
name = Form("MM%d_SILI_E_CAL", i+1);
AddHisto2D(name, name, fPadSili, 1, fPadSili+1, 500, 0, 50, "MUST2/CAL/SILIE");
// SILI_T_CAL
name = Form("MM%d_SILI_T_CAL", i+1);
AddHisto2D(name, name, fPadSili, 1, fPadSili+1, 500, 0, 50, "MUST2/CAL/SILIT");
// CSI_E_CAL
name = Form("MM%d_CSI_E_CAL", i+1);
AddHisto2D(name, name, fCrystalCsI, 1, fCrystalCsI+1, 500, 0, 50, "MUST2/CAL/CSIE");
// CSI_T_CAL
name = Form("MM%d_CSI_T_CAL", i+1);
AddHisto2D(name, name, fCrystalCsI, 1, fCrystalCsI+1, 500, 0, 50, "MUST2/CAL/CSIT");
// STRX_CAL_MULT
name = Form("MM%d_STRX_CAL_MULT", i+1);
AddHisto1D(name, name, fStripX, 1, fStripX+1, "MUST2/CAL/MULT");
// STRY_CAL_MULT
name = Form("MM%d_STRY_CAL_MULT", i+1);
AddHisto1D(name, name, fStripX, 1, fStripX+1, "MUST2/CAL/MULT");
// SILI_CAL_MULT
name = Form("MM%d_SILI_CAL_MULT", i+1);
AddHisto1D(name, name, fPadSili, 1, fPadSili+1, "MUST2/CAL/MULT");
// CSI_CAL_MULT
name = Form("MM%d_CSI_CAL_MULT", i+1);
AddHisto1D(name, name, fCrystalCsI, 1, fCrystalCsI+1, "MUST2/CAL/MULT");
} // end loop on number of detectors
////////////////////////////////////////////////////////////////////////////////
void TMust2Spectra::InitPhysicsSpectra(){
TString name;
// X-Y Impact Matrix
name = "MM_IMPACT_MATRIX";
AddHisto2D(name, name,500,-150,150,500,-150,150, "MUST2/PHY");
// X-Y Impact Matrix
name = "MM_THETA_E";
AddHisto2D(name, name, 360, 0, 180,500,0,50,"MUST2/PHY");
// X-Y Energy Correlation
for (unsigned int i = 0 ; i < fNumberOfTelescope ; i++) { // loop on number of detectors
// STRX_E_CAL
name = Form("MM%d_XY_COR", i+1);
AddHisto2D(name, name, 500,0,50,500,0,50, "MUST2/PHY");
}
}
////////////////////////////////////////////////////////////////////////////////
void TMust2Spectra::FillRawSpectra(TMust2Data* RawData){
TString name;
TString family;
// STRX_E
for (unsigned int i = 0; i < RawData->GetMMStripXEMult(); i++) {
name = Form("MM%d_STRX_E_RAW", RawData->GetMMStripXEDetectorNbr(i) );
family = "MUST2/RAW/STRXE";
GetHisto(family,name)
-> Fill(RawData->GetMMStripXEStripNbr(i),
RawData->GetMMStripXEEnergy(i) - 8192);
}
// STRY_E
for (unsigned int i = 0; i < RawData->GetMMStripYEMult(); i++) {
name = Form("MM%d_STRY_E_RAW", RawData->GetMMStripYEDetectorNbr(i) );
family = "MUST2/RAW/STRYE";
GetHisto(family,name)
-> Fill(RawData->GetMMStripYEStripNbr(i),
8192 - RawData->GetMMStripYEEnergy(i));
}
// STRX_T
for (unsigned int i = 0; i < RawData->GetMMStripXTMult(); i++) {
name = Form("MM%d_STRX_T_RAW", RawData->GetMMStripXTDetectorNbr(i) );
family = "MUST2/RAW/STRXT";
GetHisto(family,name)
-> Fill(RawData->GetMMStripXTStripNbr(i),
RawData->GetMMStripXTTime(i) - 8192);
}
// STRY_T
for (unsigned int i = 0; i < RawData->GetMMStripYTMult(); i++) {
name = Form("MM%d_STRY_T_RAW", RawData->GetMMStripYTDetectorNbr(i) );
family = "MUST2/RAW/STRYT";
GetHisto(family,name)
-> Fill(RawData->GetMMStripYTStripNbr(i),
8192 - RawData->GetMMStripYTTime(i));
}
// SILI_E
for (unsigned int i = 0; i < RawData->GetMMSiLiEMult(); i++) {
name = Form("MM%d_SILI_E_RAW", RawData->GetMMSiLiEDetectorNbr(i) );
family = "MUST2/RAW/SILIE";
GetHisto(family,name)
-> Fill(RawData->GetMMSiLiEPadNbr(i),
RawData->GetMMSiLiEEnergy(i));
}
// SILI_T
for (unsigned int i = 0; i < RawData->GetMMSiLiTMult(); i++) {
name = Form("MM%d_SILI_T_RAW", RawData->GetMMSiLiTDetectorNbr(i) );
family = "MUST2/RAW/SILIT";
GetHisto(family,name)
-> Fill(RawData->GetMMSiLiTPadNbr(i),
RawData->GetMMSiLiTTime(i));
}
// CSI_E
for (unsigned int i = 0; i < RawData->GetMMCsIEMult(); i++) {
name = Form("MM%d_CSI_E_RAW", RawData->GetMMCsIEDetectorNbr(i) );
family = "MUST2/RAW/CSIE";
GetHisto(family,name)
-> Fill(RawData->GetMMCsIECristalNbr(i),
RawData->GetMMCsIEEnergy(i));
}
// CSI_T
for (unsigned int i = 0; i < RawData->GetMMCsITMult(); i++) {
name = Form("MM%d_CSI_T_RAW", RawData->GetMMCsITDetectorNbr(i) );
family = "MUST2/RAW/CSIT";
GetHisto(family,name)
-> Fill(RawData->GetMMCsITCristalNbr(i),
RawData->GetMMCsITTime(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= "MUST2/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= "MUST2/RAW/MULT";
GetHisto(family,name)
-> Fill(myMULT[i]);
}
// SILI MULT
for( unsigned int i = 0; i < fNumberOfTelescope; i++)
myMULT[i] = 0 ;
for(unsigned int i = 0 ; i < RawData->GetMMSiLiEMult();i++){
myMULT[RawData->GetMMSiLiEDetectorNbr(i)-1] += 1;
}
for( unsigned int i = 0; i < fNumberOfTelescope; i++){
name = Form("MM%d_SILI_RAW_MULT", i+1);
family= "MUST2/RAW/MULT";
GetHisto(family,name)
-> Fill(myMULT[i]);
}
// CSI MULT
for( unsigned int i = 0; i < fNumberOfTelescope; i++)
myMULT[i] = 0 ;
for(unsigned int i = 0 ; i < RawData->GetMMCsIEMult();i++){
myMULT[RawData->GetMMCsIEDetectorNbr(i)-1] += 1;
}
for( unsigned int i = 0; i < fNumberOfTelescope; i++){
name = Form("MM%d_CSI_RAW_MULT", i+1);
family= "MUST2/RAW/MULT";
GetHisto(family,name)
-> Fill(myMULT[i]);
}
////////////////////////////////////////////////////////////////////////////////
void TMust2Spectra::FillPreTreatedSpectra(TMust2Data* PreTreatedData){
TString name ;
TString family;
// STRX_E
for (unsigned int i = 0; i < PreTreatedData->GetMMStripXEMult(); i++) {
name = Form("MM%d_STRX_E_CAL", PreTreatedData->GetMMStripXEDetectorNbr(i) );
GetHisto(family,name)
-> Fill(PreTreatedData->GetMMStripXEStripNbr(i),
PreTreatedData->GetMMStripXEEnergy(i));
}
// STRY_E
for (unsigned int i = 0; i < PreTreatedData->GetMMStripYEMult(); i++) {
name = Form("MM%d_STRY_E_CAL", PreTreatedData->GetMMStripYEDetectorNbr(i) );
family = "MUST2/CAL/STRYE";
GetHisto(family,name)
-> Fill(PreTreatedData->GetMMStripYEStripNbr(i),
PreTreatedData->GetMMStripYEEnergy(i));
}
// STRX_T
for (unsigned int i = 0; i < PreTreatedData->GetMMStripXTMult(); i++) {
name = Form("MM%d_STRX_T_CAL", PreTreatedData->GetMMStripXTDetectorNbr(i) );
family = "MUST2/CAL/STRXT";
GetHisto(family,name)
-> Fill(PreTreatedData->GetMMStripXTStripNbr(i),
PreTreatedData->GetMMStripXTTime(i));
}
// STRY_T
for (unsigned int i = 0; i < PreTreatedData->GetMMStripYTMult(); i++) {
name = Form("MM%d_STRY_T_CAL", PreTreatedData->GetMMStripYTDetectorNbr(i) );
family = "MUST2/CAL/STRYT";
GetHisto(family,name)
-> Fill(PreTreatedData->GetMMStripYTStripNbr(i),
PreTreatedData->GetMMStripYTTime(i));
}
// SILI_E
for (unsigned int i = 0; i < PreTreatedData->GetMMSiLiEMult(); i++) {
name = Form("MM%d_SILI_E_CAL", PreTreatedData->GetMMSiLiEDetectorNbr(i) );
GetHisto(family,name)
-> Fill(PreTreatedData->GetMMSiLiEPadNbr(i),
PreTreatedData->GetMMSiLiEEnergy(i));
}
// SILI_T
for (unsigned int i = 0; i < PreTreatedData->GetMMSiLiTMult(); i++) {
name = Form("MM%d_SILI_T_CAL", PreTreatedData->GetMMSiLiTDetectorNbr(i) );
family = "MUST2/CAL/SILIT";
GetHisto(family,name)
-> Fill(PreTreatedData->GetMMSiLiTPadNbr(i),
PreTreatedData->GetMMSiLiTTime(i));
}
// CSI_E
for (unsigned int i = 0; i < PreTreatedData->GetMMCsIEMult(); i++) {
name = Form("MM%d_CSI_E_CAL", PreTreatedData->GetMMCsIEDetectorNbr(i) );
family = "MUST2/CAL/CSIE";
GetHisto(family,name)
-> Fill(PreTreatedData->GetMMCsIECristalNbr(i),
PreTreatedData->GetMMCsIEEnergy(i));
}
// CSI_T
for (unsigned int i = 0; i < PreTreatedData->GetMMCsITMult(); i++) {
name = Form("MM%d_CSI_T_CAL", PreTreatedData->GetMMCsITDetectorNbr(i) );
family = "MUST2/CAL/CSIT";
GetHisto(family,name)
-> Fill(PreTreatedData->GetMMCsITCristalNbr(i),
PreTreatedData->GetMMCsITTime(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= "MUST2/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= "MUST2/CAL/MULT";
GetHisto(family,name)
-> Fill(myMULT[i]);
}
// SILI MULT
for( unsigned int i = 0; i < fNumberOfTelescope; i++)
myMULT[i] = 0 ;
for(unsigned int i = 0 ; i < PreTreatedData->GetMMSiLiEMult();i++){
myMULT[PreTreatedData->GetMMSiLiEDetectorNbr(i)-1] += 1;
}
for( unsigned int i = 0; i < fNumberOfTelescope; i++){
name = Form("MM%d_SILI_CAL_MULT", i+1);
family= "MUST2/CAL/MULT";
GetHisto(family,name)
-> Fill(myMULT[i]);
}
// CSI MULT
for( unsigned int i = 0; i < fNumberOfTelescope; i++)
myMULT[i] = 0 ;
for(unsigned int i = 0 ; i < PreTreatedData->GetMMCsIEMult();i++){
myMULT[PreTreatedData->GetMMCsIEDetectorNbr(i)-1] += 1;
}
for( unsigned int i = 0; i < fNumberOfTelescope; i++){
name = Form("MM%d_CSI_CAL_MULT", i+1);
family= "MUST2/CAL/MULT";
GetHisto(family,name)
-> Fill(myMULT[i]);
}
////////////////////////////////////////////////////////////////////////////////
void TMust2Spectra::FillPhysicsSpectra(TMust2Physics* Physics){
TString name;
TString family= "MUST2/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* TMust2Spectra::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* TMust2Spectra::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* TMust2Spectra::GetHisto(TString family, TString name){
vector<TString> index ;
index.push_back(family);
index.push_back(name);
// fill map
return fMapHisto.at(index);
////////////////////////////////////////////////////////////////////////////////
void TMust2Spectra::WriteHisto(TString filename){
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;
}
}