| 1 | ///////////////////////////////////////////////////////////////// | 
|---|
| 2 | // | 
|---|
| 3 | // CORParticle | 
|---|
| 4 | // | 
|---|
| 5 | //  Created: Tue Apr 28 16:43:30 1998 | 
|---|
| 6 | //  Author:  Jose Carlos Gonzales | 
|---|
| 7 | //  Purpose: Base class for Particles/Cherenkov photons | 
|---|
| 8 | //  Notes: | 
|---|
| 9 | // | 
|---|
| 10 | ///////////////////////////////////////////////////////////////// | 
|---|
| 11 |  | 
|---|
| 12 | // @T \newpage | 
|---|
| 13 |  | 
|---|
| 14 | // @section Source code of {\tt CORParticle.hxx} | 
|---|
| 15 |  | 
|---|
| 16 | /* @text | 
|---|
| 17 | This section shows the include file {\tt CORParticle.hxx} | 
|---|
| 18 | @endtext */ | 
|---|
| 19 |  | 
|---|
| 20 | #ifndef CORParticle_Class | 
|---|
| 21 | #define CORParticle_Class | 
|---|
| 22 |  | 
|---|
| 23 | // @subsection Include files | 
|---|
| 24 |  | 
|---|
| 25 | // @code | 
|---|
| 26 | #ifdef __ROOT__ | 
|---|
| 27 | #include "TROOT.h" | 
|---|
| 28 | #include "TObject.h" | 
|---|
| 29 | #else // not __ROOT__ | 
|---|
| 30 | #include "Rtypes.h" | 
|---|
| 31 | #endif | 
|---|
| 32 |  | 
|---|
| 33 | #include <iostream.h> | 
|---|
| 34 | #include <iomanip.h> | 
|---|
| 35 | #include <fstream.h> | 
|---|
| 36 | #include <stdlib.h> | 
|---|
| 37 | #include <math.h> | 
|---|
| 38 | // @endcode | 
|---|
| 39 |  | 
|---|
| 40 | // @subsection Class {\em CORParticle}: Definition | 
|---|
| 41 |  | 
|---|
| 42 | // @code | 
|---|
| 43 | class CORParticle { | 
|---|
| 44 |  | 
|---|
| 45 | public: | 
|---|
| 46 | Float_t     w;                // wavelength/type of particle [nm/-] | 
|---|
| 47 | Float_t     x, y;             // position [cm] | 
|---|
| 48 | Float_t     u, v;             // director cosines | 
|---|
| 49 | Float_t     t;                // time since first interaction [ns] | 
|---|
| 50 | Float_t     h;                // height [cm] | 
|---|
| 51 |  | 
|---|
| 52 | public: | 
|---|
| 53 | CORParticle() {} // default constructor | 
|---|
| 54 |  | 
|---|
| 55 | // overloaded constructor | 
|---|
| 56 | CORParticle( ifstream &is ) { CORParticle::read( is ); } | 
|---|
| 57 |  | 
|---|
| 58 | // overloaded constructor | 
|---|
| 59 | CORParticle(Float_t thew, Float_t thex, Float_t they, | 
|---|
| 60 | Float_t theu, Float_t thev, Float_t thet, Float_t theh) | 
|---|
| 61 | { | 
|---|
| 62 | w = thew; | 
|---|
| 63 | x = thex; | 
|---|
| 64 | y = they; | 
|---|
| 65 | u = theu; | 
|---|
| 66 | v = thev; | 
|---|
| 67 | t = thet; | 
|---|
| 68 | h = theh; | 
|---|
| 69 | } | 
|---|
| 70 |  | 
|---|
| 71 | virtual ~CORParticle() {} // default destructor | 
|---|
| 72 |  | 
|---|
| 73 | // reads photon from binary input stream | 
|---|
| 74 | Int_t read ( ifstream &is ) { | 
|---|
| 75 | int n; | 
|---|
| 76 | is.read ( (char *)this, 7 * sizeof( Float_t ) );   // | 
|---|
| 77 | return is.gcount(); | 
|---|
| 78 | } | 
|---|
| 79 |  | 
|---|
| 80 | // writes photon to binary output stream | 
|---|
| 81 | Int_t write ( ofstream &os ) { | 
|---|
| 82 | os.write ( (char *)this, 7 * sizeof( Float_t ) ); | 
|---|
| 83 | return 0; | 
|---|
| 84 | } | 
|---|
| 85 |  | 
|---|
| 86 | // fill information | 
|---|
| 87 | inline void fill(Float_t thew, Float_t thex, Float_t they, | 
|---|
| 88 | Float_t theu, Float_t thev, Float_t thet, Float_t theh) | 
|---|
| 89 | { | 
|---|
| 90 | w = thew; | 
|---|
| 91 | x = thex; | 
|---|
| 92 | y = they; | 
|---|
| 93 | u = theu; | 
|---|
| 94 | v = thev; | 
|---|
| 95 | t = thet; | 
|---|
| 96 | h = theh; | 
|---|
| 97 | } | 
|---|
| 98 |  | 
|---|
| 99 |  | 
|---|
| 100 | // print content of one particle | 
|---|
| 101 | inline void print() | 
|---|
| 102 | { | 
|---|
| 103 | cout << "      PartId: " << get_particle() | 
|---|
| 104 | << " Pos: " << x << "/" << y | 
|---|
| 105 | << " lam: " << w - 1000.*((int)floor(w/1000.)) | 
|---|
| 106 | << " hei: " << h | 
|---|
| 107 | << " tim: " << t | 
|---|
| 108 | << " dir: " << u << "/" << v | 
|---|
| 109 | << endl ; | 
|---|
| 110 | } | 
|---|
| 111 |  | 
|---|
| 112 | // get information about the photon | 
|---|
| 113 | inline Float_t get_wl( void ) { | 
|---|
| 114 | return ( (w>1.0) ? | 
|---|
| 115 | w - 1000.*((int)floor(w/1000.)) : | 
|---|
| 116 | 0.0 ); | 
|---|
| 117 | } | 
|---|
| 118 | inline Float_t get_id( void ) { return ( w ); } | 
|---|
| 119 | inline Int_t get_particle( void ) { | 
|---|
| 120 | return ( (int)floor(w/1000.) ); | 
|---|
| 121 | } | 
|---|
| 122 | inline Float_t get_x( void ) { return ( x ); } | 
|---|
| 123 | inline Float_t get_y( void ) { return ( y ); } | 
|---|
| 124 | inline Float_t get_u( void ) { return ( u ); } | 
|---|
| 125 | inline Float_t get_v( void ) { return ( v ); } | 
|---|
| 126 | inline Float_t get_h( void ) { return ( h ); } | 
|---|
| 127 | inline Float_t get_t( void ) { return ( t ); } | 
|---|
| 128 |  | 
|---|
| 129 | inline Float_t get_r( void ) { return ( sqrt( x*x + y*y ) ); } | 
|---|
| 130 | inline Float_t get_w( void ) { return ( sqrt( 1.0 - u*u - v*v ) ); } | 
|---|
| 131 | }; | 
|---|
| 132 |  | 
|---|
| 133 | // @endcode | 
|---|
| 134 |  | 
|---|
| 135 | #endif  // not defined CORParticle_Class | 
|---|
| 136 |  | 
|---|