Newer
Older
#ifndef TEXOGAMPHYSICS_H
#define TEXOGAMPHYSICS_H
/*****************************************************************************
* Copyright (C) 2009-2014 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: S. Giron contact address: giron@ipno.in2p3.fr *
* B. Le Crom lecrom@ipno.in2p3.fr *
* Creation Date : march 2014 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class hold exogam treated data *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
*****************************************************************************/
// STL
#include <vector>
#include <map>
// NPL
#include "NPCalibrationManager.h"
#include "NPVDetector.h"
#include "TExogamData.h"
#include "TExogamSpectra.h"
// ROOT
#include "TVector2.h"
#include "TVector3.h"
#include "TObject.h"
using namespace std ;
// Forward Declaration
class TExogamSpectra;
class TExogamPhysics : public TObject, public NPL::VDetector
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
{
public:
TExogamPhysics() ;
~TExogamPhysics() {};
public:
void Clear() ;
void Clear(const Option_t*) {};
// Provide Physical Multiplicity
Int_t EventMultiplicity ;
Int_t ECC_Multiplicity ;
Int_t GOCCE_Multiplicity ;
Int_t NumberOfClover ; //!
// Clover
Int_t NumberOfHitClover ; //!
Int_t NumberOfHitCristal ; //!
vector<int> ECC_CloverNumber ;
vector<int> ECC_CristalNumber ;
vector<int> GOCCE_CloverNumber ;
vector<int> GOCCE_CristalNumber ;
vector<int> GOCCE_SegmentNumber ;
// ECC
vector<double> ECC_E ;
vector<double> ECC_T ;
// GOCCE
vector<double> GOCCE_E ;
// Add-Back and Doppler correction
vector<int> CristalNumber ;
vector<int> SegmentNumber ;
vector<int> CloverNumber ;
int CloverMult ;
vector<double> TotalEnergy_lab ;
vector<double> Time ;
vector<double> DopplerCorrectedEnergy ;
vector<double> Position ;
vector<double> Theta ;
vector < vector < vector < vector <double> > > > Clover_Angles_Theta_Phi; //!
/*
TH1F* clover_mult ;
TH1F* cristal_mult ;
*/
public: // Innherited from VDetector Class
// Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token
void ReadConfiguration(string) ;
// 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
// Activated associated Branches and link it to the private member DetectorPhysics address
// In this method mother Branches (Detector) AND daughter leaf (parameter) have to be activated
void InitializeRootInputPhysics() ;/////////////////////////////////////////////////////////////////////////
// Create associated branches and associated private member DetectorPhysics address
void InitializeRootOutput() ;
// This method is called at each event read from the Input Tree. Aim is to build a tree of calibrated data.
void PreTreat() ;
// This method is called at each event read from the Input Tree.
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() ;
double DopplerCorrection(double Energy, double Theta);
// Those two method all to clear the Event Physics or Data
void ClearEventPhysics() {Clear();}
void ClearEventData() {EventData->Clear();}
void ClearPreTreatedData() {PreTreatedData->Clear();}
// Method related to the TSpectra classes, aimed at providing a framework for online applications
// Instantiate the Spectra class and the histogramm throught it
void InitSpectra();
// Fill the spectra hold by the spectra class
void FillSpectra();
// Used for Online mainly, perform check on the histo and for example change their color if issues are found
void CheckSpectra();
// Used for Online only, clear all the spectra hold by the Spectra class
void ClearSpectra();
private: // Root Input and Output tree classes
TExogamData* EventData ;//!
TExogamData* PreTreatedData ;//!
TExogamPhysics* EventPhysics ;//!
public: // Specific to EXOGAM Array
// Add a Clover
void AddClover(string AngleFile);
Int_t GetClover_Mult() { return(CloverNumber.size()); }
// Int_t GetECC_Mult() { return(ECC_CristalNumber.size()); }
// Int_t GetGOCCE_Mult() { return(GOCCE_SegmentNumber.size()); }
Double_t GetSegmentAnglePhi(int Clover, int Cristal, int Segment) {return(Clover_Angles_Theta_Phi[Clover][Cristal][Segment][1]);};
Double_t GetSegmentAngleTheta(int Clover, int Cristal, int Segment) {return(Clover_Angles_Theta_Phi[Clover][Cristal][Segment][0]);};
// Give and external TMustData object to TExogamPhysics. Needed for online analysis for example.
void SetRawDataPointer(TExogamData* rawDataPointer) {EventData = rawDataPointer;}
// Retrieve raw and pre-treated data
TExogamData* GetRawData() const {return EventData;}
TExogamData* GetPreTreatedData() const {return PreTreatedData;}
private: // Spectra Class
TExogamSpectra* m_Spectra;//!
public: // Spectra Getter
map< string , TH1*> GetSpectra();
public: // Static constructor to be passed to the Detector Factory
static NPL::VDetector* Construct();
ClassDef(TExogamPhysics,1) // ExogamPhysics structure
};
namespace EXOGAM_LOCAL
{
const double Threshold_ECC = 50;
const double Threshold_GOCCE = 0;
const double RawThreshold_ECC = 0;
const double RawThreshold_GOCCE = 0;
// tranform an integer to a string
string itoa(int value);
}
#endif