Newer
Older
1
2
3
4
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
43
44
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#ifndef __Beam__
#define __Beam__
/*****************************************************************************
* Copyright (C) 2009 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 : 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{
class Beam{
public: // Constructors and Destructors
Beam();
~Beam();
public: // Various Method
void ReadConfigurationFile(string Path);
private:
Nucleus* fBeamNucleus;
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 = new TH1F(*EnergyHist);}
void SetXThetaXHist (TH2F* XThetaXHist) {delete fXThetaXHist; fXThetaXHist = new TH2F(*XThetaXHist);}
void SetYPhiYHist (TH2F* YPhiYHist) {delete fYPhiYHist; fYPhiYHist = new TH2F(*YPhiYHist);}
// Get
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;}
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) {fTargetSize = TargetSize; fEffectiveTargetSize = fTargetSize*cos(fTargetAngle);}
void SetTargetThickness(double TargetThickness) {fTargetThickness = TargetThickness; fEffectiveTargetThickness = fTargetThickness/cos(fTargetAngle);}
void SetTargetAngle(double TargetAngle) {fTargetAngle = TargetAngle; fEffectiveTargetSize = fTargetSize*cos(fTargetAngle);}
void SetTargetZ(double TargetZ) {fTargetZ = TargetZ;}
public: // Print private paremeter
void Print() const;
};
}
#endif