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

Last change on this file since 18481 was 18449, checked in by ftemme, 10 years ago
Added an additional mirrortag, so that the information which mirror was hit is not lost later in the process
File size: 4.5 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 UShort_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 fWavelength; }
81 Float_t GetProductionHeight() const { return fProductionHeight; }
82 MMcEvtBasic::ParticleId_t GetPrimary() const { return fPrimary; }
83
84 //virtual Float_t GetWeight() const { return 1; }
85 virtual Float_t GetWeight() const { return fWeight; }
86 void SetWeight(Float_t w=1) { fWeight=w; }
87
88 // Setter
89 void SetPosition(Float_t x, Float_t y) { fPosX=x; fPosY=y; }
90 void SetDirection(Float_t u, Float_t v) { fCosU=u; fCosV=v; }
91
92 void SetPosition(const TVector2 &p) { fPosX=p.X(); fPosY=p.Y(); }
93 void SetDirection(const TVector2 &d) { fCosU=d.X(); fCosV=d.Y(); }
94
95 void SetPosition(const TQuaternion &p) { fPosX=p.fVectorPart.X(); fPosY=p.fVectorPart.Y(); fTime=p.fRealPart; }
96 void SetDirection(const TQuaternion &d) { fCosU=d.fVectorPart.X(); fCosV=d.fVectorPart.Y(); }
97
98 void SetPrimary(MMcEvtBasic::ParticleId_t p) { fPrimary=p; }
99 void SetWavelength(UShort_t wl) { fWavelength=wl; }
100
101 void AddTime(Double_t dt) { fTime += dt; }
102 void SetTime(Double_t t) { fTime = t; }
103
104 void SimWavelength(Float_t wmin, Float_t wmax);
105
106 void Copy(TObject &obj) const;
107
108 void SetTag(Int_t tag) { fTag=tag; }
109 Int_t GetTag() const { return fTag; }
110
111 void SetMirrorTag(Int_t mirrorTag) { fMirrorTag=mirrorTag; }
112 Int_t GetMirrorTag() const { return fMirrorTag; }
113
114 // TObject
115 //void Clear(Option_t * = NULL);
116 void Print(Option_t * = NULL) const;
117 //void Draw (Option_t * = NULL);
118 Bool_t IsSortable() const { return kTRUE; }
119 Int_t Compare(const TObject *obj) const
120 {
121 const MPhotonData &d = *static_cast<const MPhotonData*>(obj);
122 if (fTime<d.fTime)
123 return -1;
124 if (fTime>d.fTime)
125 return 1;
126 return 0;
127 }
128
129 // I/O
130 //Int_t ReadCorsikaEvt(istream &fin);
131 //Int_t ReadRflEvt(istream &fin);
132
133 Int_t FillCorsika(Float_t f[7], Int_t i);
134 Int_t FillEventIO(Float_t f[7]);
135 Int_t FillRfl(Float_t f[8]);
136
137 ClassDef(MPhotonData, 2) //Container to store a cherenkov photon bunch from a CORSUKA file
138};
139
140#endif
Note: See TracBrowser for help on using the repository browser.