source: trunk/Mars/msim/MPhotonData.h@ 19894

Last change on this file since 19894 was 19762, checked in by tbretz, 5 years ago
Setter for production height.
File size: 4.8 KB
Line 
1#ifndef MARS_MPhotonData
2#define MARS_MPhotonData
3
4#ifndef MARS_MMcEvtBasic
5#include "MMcEvtBasic.h"
6#endif
7
8#ifndef ROOT_TVector2
9#include <TVector2.h>
10#endif
11
12#ifndef ROOT_TVector3
13#include <TVector3.h>
14#endif
15
16#ifndef ROOT_TQuaternion
17#include <math.h>
18//#define sqrt ::sqrt
19#include <TQuaternion.h>
20//#undef sqrt
21#endif
22
23// gcc 3.2
24//class ifstream;
25#include <iosfwd>
26
27class MCorsikaRunHeader;
28
29class MPhotonData : public TObject
30{
31private:
32 Float_t fPosX; // [cm] "+west" "-east" (both at observation level)
33 Float_t fPosY; // [cm] "+south" "-north" (north denotes the magnet north which is defined to be in the geografic north!)
34
35 Float_t fCosU; // [cos x] U direction cosine to x-axis
36 Float_t fCosV; // [cos y] V direction cosine to y-axis
37
38 Float_t fTime; // [ns] Time since first interaction or entrance into atmosphere
39 Short_t fWavelength; // [nm] Wavelength
40// UInt_t fNumPhotons; // Number of cherenkov photons ins bunch
41 Float_t fProductionHeight; // [cm] Height of bunch production
42 MMcEvtBasic::ParticleId_t fPrimary; // Type of emitting particle
43
44 Int_t fTag; //! A tag for external use
45 Int_t fMirrorTag; // Tag for the mirror ID of the mirror which was hit by this photon
46 Float_t fWeight; //! A weight for external use
47
48public:
49 MPhotonData(/*const char *name=NULL, const char *title=NULL*/);
50 //MPhotonData(const MPhotonData &ph);
51
52 // Getter 1D
53 Float_t GetPosX() const { return fPosX; }
54 Float_t GetPosY() const { return fPosY; }
55
56 Float_t GetCosU() const { return fCosU; }
57 Float_t GetCosV() const { return fCosV; }
58 Double_t GetCosW() const;
59 Double_t GetSinW() const;
60 Double_t GetCosW2() const;
61 Double_t GetSinW2() const;
62 Double_t GetTheta() const;
63
64 Double_t GetTime() const { return fTime; }
65
66 // Getter 2D
67 TVector2 GetPos2() const { return TVector2(fPosX, fPosY); }
68 TVector2 GetDir2() const { return TVector2(fCosU, fCosV);}
69// TVector2 GetDir2() const { return TVector2(fCosU, fCosV)/(1-TMath::Hypot(fCosU, fCosV)); }
70
71 // Getter 3D
72 TVector3 GetPos3() const { return TVector3(fPosX, fPosY, 0); }
73 TVector3 GetDir3() const { return TVector3(fCosU, fCosV, -GetCosW()); }
74
75 // Getter 4D
76 TQuaternion GetPosQ() const;
77 TQuaternion GetDirQ() const;
78
79 // Getter Others
80 UShort_t GetWavelength() const { return TMath::Abs(fWavelength); }
81 Float_t GetProductionHeight() const { return fProductionHeight; }
82 MMcEvtBasic::ParticleId_t GetPrimary() const { return fPrimary; }
83
84 // Status of the simulation of photons
85 Bool_t IncludesEfficiencies() const { return fWavelength<0; }
86
87 //virtual Float_t GetWeight() const { return 1; }
88 virtual Float_t GetWeight() const { return fWeight; }
89 void SetWeight(Float_t w=1) { fWeight=w; }
90
91 // Setter
92 void SetPosition(Float_t x, Float_t y) { fPosX=x; fPosY=y; }
93 void SetDirection(Float_t u, Float_t v) { fCosU=u; fCosV=v; }
94
95 void SetPosition(const TVector2 &p) { fPosX=p.X(); fPosY=p.Y(); }
96 void SetDirection(const TVector2 &d) { fCosU=d.X(); fCosV=d.Y(); }
97
98 void SetPosition(const TQuaternion &p) { fPosX=p.fVectorPart.X(); fPosY=p.fVectorPart.Y(); fTime=p.fRealPart; }
99 void SetDirection(const TQuaternion &d) { fCosU=d.fVectorPart.X(); fCosV=d.fVectorPart.Y(); }
100
101 void SetPrimary(MMcEvtBasic::ParticleId_t p) { fPrimary=p; }
102 void SetWavelength(Short_t wl) { fWavelength=wl; }
103 void SetProductionHeight(Float_t h) { fProductionHeight = h; }
104
105 void AddTime(Double_t dt) { fTime += dt; }
106 void SetTime(Double_t t) { fTime = t; }
107
108 void SimWavelength(Float_t wmin, Float_t wmax);
109
110 void Copy(TObject &obj) const;
111
112 void SetTag(Int_t tag) { fTag=tag; }
113 Int_t GetTag() const { return fTag; }
114
115 void SetMirrorTag(Int_t mirrorTag) { fMirrorTag=mirrorTag; }
116 Int_t GetMirrorTag() const { return fMirrorTag; }
117
118 // TObject
119 //void Clear(Option_t * = NULL);
120 void Print(Option_t * = NULL) const;
121 //void Draw (Option_t * = NULL);
122 Bool_t IsSortable() const { return kTRUE; }
123 Int_t Compare(const TObject *obj) const
124 {
125 const MPhotonData &d = *static_cast<const MPhotonData*>(obj);
126 if (fTime<d.fTime)
127 return -1;
128 if (fTime>d.fTime)
129 return 1;
130 return 0;
131 }
132
133 // I/O
134 //Int_t ReadCorsikaEvt(istream &fin);
135 //Int_t ReadRflEvt(istream &fin);
136
137 Int_t FillCorsika(const Float_t f[7], Int_t i);
138 Int_t FillCorsikaThin(const Float_t f[8], Int_t i);
139 Int_t FillEventIO(const Short_t f[8]);
140 Int_t FillEventIO(const Float_t f[8]);
141 Int_t FillRfl(const Float_t f[8]);
142
143 ClassDef(MPhotonData, 2) //Container to store a cherenkov photon bunch from a CORSUKA file
144};
145
146#endif
Note: See TracBrowser for help on using the repository browser.