Newer
Older
#ifndef __Beam__
#define __Beam__
/*****************************************************************************
* Copyright (C) 2009-2013 this file is part of the NPTool Project *
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
* *
* For the licensing terms see $NPTOOL/Licence/NPTool_Licence *
* For the list of contributors see $NPTOOL/Licence/Contributors *
*****************************************************************************/
/*****************************************************************************
* *
* Original Author : Adrien MATTA contact address: matta@ipno.in2p3.fr *
* *
* Creation Date : January 2013 *
*---------------------------------------------------------------------------*
* Decription: *
* This class deal with Beam: *
* User can enter various parameter, such as emittance or use ASCII or root *
* TH1F distribution *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
* *
*****************************************************************************/
// C++ header
#include <string>
// ROOT header
#include "TH1F.h"
#include "TH2F.h"
#include "TLorentzVector.h"
#include "TRandom.h"
using namespace std;
// NPL header
#include "NPNucleus.h"
using namespace NPL;
namespace NPL{
public: // Constructors and Destructors
Beam();
~Beam();
public: // Various Method
void ReadConfigurationFile(string Path);
private:
int fVerboseLevel;
double fEnergy;
double fSigmaEnergy;
double fMeanX;
double fMeanY;
double fSigmaX;
double fSigmaY;
double fMeanThetaX;
double fMeanPhiY;
double fSigmaThetaX;
double fSigmaPhiY;
// case of user given distribution
TH1F* fEnergyHist;
TH2F* fXThetaXHist;
TH2F* fYPhiYHist;
public:
// Getters and Setters
// Set
// void SetBeamNucleus (Nucleus* BeamNucleus) {delete fBeamNucleus ; fBeamNucleus = new Nucleus(BeamNucleus->GetZ(),BeamNucleus->GetA());}
void SetEnergy (double Energy) {fEnergy=Energy;}
void SetSigmaEnergy (double SigmaEnergy) {fSigmaEnergy=SigmaEnergy;}
void SetMeanX (double MeanX) {fMeanX=MeanX;}
void SetMeanY (double MeanY) {fMeanY=MeanY;}
void SetSigmaX (double SigmaX) {fSigmaX=SigmaX;}
void SetSigmaY (double SigmaY) {fSigmaY=SigmaY;}
void SetMeanThetaX (double MeanThetaX) {fMeanThetaX=MeanThetaX;}
void SetMeanPhiY (double MeanPhiY) {fMeanPhiY=MeanPhiY;}
void SetSigmaThetaX (double SigmaThetaX) {fSigmaThetaX=SigmaThetaX;}
void SetSigmaPhiY (double SigmaPhiY) {fSigmaPhiY=SigmaPhiY;}
void SetEnergyHist (TH1F* EnergyHist) {delete fEnergyHist; fEnergyHist = EnergyHist;}
void SetXThetaXHist (TH2F* XThetaXHist) {delete fXThetaXHist; fXThetaXHist = XThetaXHist;}
void SetYPhiYHist (TH2F* YPhiYHist) {delete fYPhiYHist; fYPhiYHist = YPhiYHist;}
void SetVerboseLevel(int verbose) {fVerboseLevel = verbose;}
// Nucleus* GetNucleus () const {return fBeamNucleus;}
double GetEnergy () const {return fEnergy;}
double GetSigmaEnergy () const {return fSigmaEnergy;}
double GetMeanX () const {return fMeanX;}
double GetMeanY () const {return fMeanY;}
double GetSigmaX () const {return fSigmaX;}
double GetSigmaY () const {return fSigmaY;}
double GetMeanThetaX () const {return fMeanThetaX;}
double GetMeanPhiY () const {return fMeanPhiY;}
double GetSigmaThetaX () const {return fSigmaThetaX;}
double GetSigmaPhiY () const {return fSigmaPhiY;}
TH1F* GetEnergyHist () const {return fEnergyHist;}
TH2F* GetXThetaXHist () const {return fXThetaXHist;}
TH2F* GetYPhiYHist () const {return fYPhiYHist;}
int GetVerboseLevel() const {return fVerboseLevel;}
private: // Event Generation private variable
double fTargetSize;
double fEffectiveTargetSize; // target size has seen from the beam axis
double fTargetThickness;
double fEffectiveTargetThickness; // target thickness has seen by the beam
double fTargetAngle;
double fTargetZ;
public: // Event Generation
void GenerateRandomEvent(double& E, double& X, double& Y, double& Z, double& ThetaX, double& PhiY );
void SetTargetSize(double TargetSize);
void SetTargetThickness(double TargetThickness);
void SetTargetAngle(double TargetAngle);
void SetTargetZ(double TargetZ) {fTargetZ = TargetZ;}