Subversion Repositories f9daq

Rev

Rev 72 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 72 Rev 73
Line 37... Line 37...
37
class CRay
37
class CRay
38
{
38
{
39
public:
39
public:
40
  CRay() :
40
  CRay() :
41
    r(TVector3(0,0,0)),
41
    r(TVector3(0,0,0)),
42
    n(TVector3(1,0,0)),
42
    k(TVector3(1,0,0)),
43
    //p(TVector3(0,1,0)),
43
    //p(TVector3(0,1,0)),
44
    p(TVector3(0,0,1)),
44
    p(TVector3(0,0,1)),
45
    color(kBlack)
45
    color(kBlack)
46
  {};
46
  {};
47
  CRay(TVector3 r0, TVector3 n0) :
47
  CRay(TVector3 r0, TVector3 k0) :
48
    r(r0),
48
    r(r0),
49
    n(n0.Unit()),
49
    k(k0.Unit()),
50
    //p(TVector3(0,1,0)),
50
    //p(TVector3(0,1,0)),
51
    p(TVector3(0,0,1)),
51
    p(TVector3(0,0,1)),
52
    color(kBlack)
52
    color(kBlack)
53
  {};
53
  {};
54
  CRay(double x0, double y0, double z0, double l0, double m0, double n0) :
54
  CRay(double x0, double y0, double z0, double l0, double m0, double n0) :
55
    r(TVector3(x0,y0,z0)),
55
    r(TVector3(x0,y0,z0)),
56
    n(TVector3(l0,m0,n0).Unit()),
56
    k(TVector3(l0,m0,n0).Unit()),
57
    //p(TVector3(0,1,0)),
57
    //p(TVector3(0,1,0)),
58
    p(TVector3(0,0,1)),
58
    p(TVector3(0,0,1)),
59
    color(kBlack)
59
    color(kBlack)
60
  {};
60
  {};
61
 
61
 
62
  void Set(TVector3 r0, TVector3 n0);
62
  void Set(TVector3 r0, TVector3 k0);
63
  //void Set(double x0, double y0, double z0, double l0, double m0, double n0);
63
  //void Set(double x0, double y0, double z0, double l0, double m0, double n0);
64
  void SetColor(int c){color = c;};
64
  void SetColor(int c){color = c;};
65
  void SetPolarization(TVector3 p0) {p = p0.Unit();};
65
  void setPolarization(TVector3 p0) {
-
 
66
    p = p0.Unit();
-
 
67
    if (p.Dot(k)>1e-3) printf("*** ERROR in CRay: E has component || with k\n");
-
 
68
  };
66
 
69
 
67
  //inline CRay & operator = (const CRay &);
70
  //inline CRay & operator = (const CRay &);
68
 
71
 
69
  TVector3 GetR() const {return r;};
72
  TVector3 GetR() const {return r;};
70
  TVector3 GetN() const {return n;};
73
  TVector3 GetK() const {return k;};
71
  TVector3 GetP() const {return p;};
74
  TVector3 GetP() const {return p;};
72
 
75
 
73
  void Print();
76
  void Print();
74
  void Draw();
77
  void Draw();
75
  void Draw(double x_from, double x_to);
78
  void Draw(double x_from, double x_to);
76
  void DrawS(double x_from, double t);
79
  void DrawS(double x_from, double t);
77
 
80
 
-
 
81
  //r = position, k = unit wave vector, p = polarization
78
private:
82
private:
79
  TVector3 r;
83
  TVector3 r;
80
  TVector3 n;
84
  TVector3 k;
81
  TVector3 p; //r = point on line, n = normal, p = polarization
85
  TVector3 p;
82
  int color;
86
  int color;
83
};
87
};
84
//=================================================================================
-
 
85
 
88
 
86
 
89
 
87
//=================================================================================
90
//=================================================================================
88
// ravnina, definirana in omejena s 4 tockami na njej (stirikotni poligon)
91
// ravnina, definirana in omejena s 4 tockami na njej (stirikotni poligon)
89
// zanasam se na taksno definicijo: (normala kaze noter)
92
// zanasam se na taksno definicijo: (normala kaze noter)
Line 118... Line 121...
118
private:
121
private:
119
  TVector3 r[4], n;
122
  TVector3 r[4], n;
120
  double A, B, C, D;
123
  double A, B, C, D;
121
  TVector3 edge[4]; // vektorji stranic
124
  TVector3 edge[4]; // vektorji stranic
122
  double angle_r[4]; // koti ob posameznem vogalu
125
  double angle_r[4]; // koti ob posameznem vogalu
123
};
126
};
124
//=================================================================================
127
//=================================================================================
125
// ravnina - krog
128
// ravnina - krog
126
class CPlaneR
129
class CPlaneR
127
{
130
{
128
 
131
 
Line 132... Line 135...
132
 
135
 
133
  void Set(TVector3 c, TVector3 n0, double R0)
136
  void Set(TVector3 c, TVector3 n0, double R0)
134
  {center = c; n = n0; _r = R0;};
137
  {center = c; n = n0; _r = R0;};
135
 
138
 
136
  int TestIntersection(TVector3 *vec, CRay in);
139
  int TestIntersection(TVector3 *vec, CRay in);
137
 
140
 
138
  void Draw(int color = 1, int NN = 32);
141
  void Draw(int color = 1, int NN = 32);
139
 
142
 
140
private:
143
private:
141
  TVector3 n, center;
144
  TVector3 n, center;
142
  double _r;
145
  double _r;
143
};
146
};
144
//=================================================================================
-
 
145
 
147
 
146
//=================================================================================
148
//=================================================================================
147
// ravna opticna povrsina: refractor, zrcalo ali povrsina s totalnim odbojem
149
// ravna opticna povrsina: refractor, zrcalo ali povrsina s totalnim odbojem
148
#define SURF_DUMMY 0
150
#define SURF_DUMMY 0
149
#define SURF_REFRA 1
151
#define SURF_REFRA 1
150
#define SURF_REFLE 2
152
#define SURF_REFLE 2
Line 174... Line 176...
174
  {type = type0; CPlane4::Set(r1, r2, r3, r4); SetIndex(n10, n20); reflection = reflectivity;};
176
  {type = type0; CPlane4::Set(r1, r2, r3, r4); SetIndex(n10, n20); reflection = reflectivity;};
175
 
177
 
176
  int PropagateRay(CRay in, CRay *out, TVector3 *intersection);
178
  int PropagateRay(CRay in, CRay *out, TVector3 *intersection);
177
 
179
 
178
  double N1_N2(int sign) { return ((sign > 0) ? n1/n2 : n2/n1);};
180
  double N1_N2(int sign) { return ((sign > 0) ? n1/n2 : n2/n1);};
179
 
181
 
180
  void Print(){printf("Type = %d\n", type); CPlane4::Print();};
182
  void Print(){printf("Type = %d\n", type); CPlane4::Print();};
181
 
183
 
182
private:
184
private:
183
  int type; //0 = dummy; 1 = refractor; 2 = reflector; 3 = total reflection
185
  int type; //0 = dummy; 1 = refractor; 2 = reflector; 3 = total reflection
184
  double n1, n2, n1_n2; //index of refraction, n1 @ +normal, n2 @ -normal
186
  double n1, n2, n1_n2; //index of refraction, n1 @ +normal, n2 @ -normal
185
  double reflection; // odbojnost stranic
187
  double reflection; // odbojnost stranic
186
  TRandom rand; // za racunanje verjetnosti odboja od zrcala
188
  TRandom rand; // za racunanje verjetnosti odboja od zrcala
187
  double cosTtotal; //cosinus mejnega kota totalnega odboja za dana n1 in n2
189
  double cosTtotal; //cosinus mejnega kota totalnega odboja za dana n1 in n2
188
 
190
 
189
  int fresnel; // ali naj uposteva Fresnelove enacbe
191
  int fresnel; // ali naj uposteva Fresnelove enacbe
190
};
192
};
191
//=================================================================================
-
 
192
 
193
 
193
 
194
 
194
//=================================================================================
195
//=================================================================================
195
//    +-------   n1                
196
//    +-------   n1                
196
//    |       -------              
197
//    |       -------              
Line 284... Line 285...
284
  int getPlateOn() { return _plateOn; };
285
  int getPlateOn() { return _plateOn; };
285
  double getOffsetY() { return offsetY; };
286
  double getOffsetY() { return offsetY; };
286
  double getOffsetZ() { return offsetZ; };
287
  double getOffsetZ() { return offsetZ; };
287
  // bad coupling in the case the small amount of grease was applied
288
  // bad coupling in the case the small amount of grease was applied
288
  bool badCoupling() { return _coupling; };
289
  bool badCoupling() { return _coupling; };
289
 
290
 
290
private:
291
private:
291
  double _a;
292
  double _a;
292
  double _b;
293
  double _b;
293
  double _d;
294
  double _d;
294
  double _active;
295
  double _active;
295
  double _n1;
296
  double _n1;
Line 340... Line 341...
340
  TH2F* GetHOut() const {return hout;};
341
  TH2F* GetHOut() const {return hout;};
341
  int GetExitHits() {return (int)hfate->GetBinContent(5);};
342
  int GetExitHits() {return (int)hfate->GetBinContent(5);};
342
  int GetEnteranceHits() {return (int)hfate->GetBinContent(6);};
343
  int GetEnteranceHits() {return (int)hfate->GetBinContent(6);};
343
  void GetVFate(int *out);
344
  void GetVFate(int *out);
344
  int GetMAXODB() const {return MAX_REFLECTIONS;};
345
  int GetMAXODB() const {return MAX_REFLECTIONS;};
345
 
346
 
346
  void Draw(int color = 1, int width = 1);
347
  void Draw(int color = 1, int width = 1);
347
  void DrawSkel(int color = 1, int width = 1);
348
  void DrawSkel(int color = 1, int width = 1);
348
 
349
 
349
private:
350
private:
350
  Fate fate;
351
  Fate fate;
351
  double _d; // parameters
352
  double _d; // parameters
352
  double _n1, _n2, _n3; // refractive index: n1 above entry surface, n2 inside, n3 after exit
353
  double _n1, _n2, _n3; // refractive index: n1 above entry surface, n2 inside, n3 after exit
353
  double _r;
354
  double _r;
Line 361... Line 362...
361
  TVector3 center, vodnik_edge[8];
362
  TVector3 center, vodnik_edge[8];
362
 
363
 
363
  TH1F *hfate, *hnodb_all, *hnodb_exit;
364
  TH1F *hfate, *hnodb_all, *hnodb_exit;
364
  TH2F *hin, *hout;
365
  TH2F *hin, *hout;
365
};
366
};
366
//=================================================================================
-
 
367
 
367
 
368
//=============================================================================================================================== <<<<<<<<
-
 
369
 
368
 
370
 
369
 
371
class Plate
370
class Plate
372
{
371
{
373
public:
372
public:
Line 383... Line 382...
383
private:
382
private:
384
  TVector3 plate_edge[8];
383
  TVector3 plate_edge[8];
385
  CSurface *sides[6];
384
  CSurface *sides[6];
386
};
385
};
387
 
386
 
388
// ================================================================================
-
 
389
 
387
 
390
class CDetector
388
class CDetector
391
{
389
{
392
public:
390
public:
393
  CDetector(TVector3 center0, DetectorParameters& parameters);
391
  CDetector(TVector3 center0, DetectorParameters& parameters);
Line 509... Line 507...
509
  double offsetZ;
507
  double offsetZ;
510
};
508
};
511
 
509
 
512
 
510
 
513
 
511
 
514
//=================================================================================
-
 
515
#endif
512
#endif