Added charge to the clusters tree
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUAux.h
1 #ifndef ALIITSUAUX
2 #define ALIITSUAUX
3
4 #include <TObject.h>
5 #include <TMath.h>
6
7 ///////////////////////////////////////////////////////////////////////
8 //                                                                   //
9 //  Namespace AliITSUAux                                             //
10 //  Set of utilities for the ITSU classes                            //
11 //                                                                   //
12 ///////////////////////////////////////////////////////////////////////
13
14 #define _ITSU_TUNING_MODE_
15 //#define _ITSU_DEBUG_
16
17 class AliITSUGeomTGeo;
18 class AliITSsegmentation;
19 using namespace TMath;
20
21
22
23 namespace AliITSUAux {
24   void   BringTo02Pi(double &phi);
25   Bool_t OKforPhiMin(double phiMin,double phi);
26   Bool_t OKforPhiMax(double phiMax,double phi);
27   UInt_t PackCluster(Int_t lr, Int_t clID);
28   Int_t  UnpackCluster(UInt_t p, Int_t &lr);
29   Int_t  UnpackLayer(UInt_t p);
30   Int_t  UnpackCluster(UInt_t p);
31   Bool_t IsCluster(UInt_t p);
32   Int_t  NumberOfBitsSet(UInt_t x);
33   void   PrintBits(ULong64_t patt, Int_t maxBits);
34   //
35   const Double_t kNominalBz = 5.01;           // nominal field
36   const Double_t kPionMass  = 1.3957e-01;
37   const UInt_t   kLrBitLow  = 28;             // layer mask lowest bit
38   const UInt_t   kLrMask    = 0xf0000000;     // layer mask
39   const UInt_t   kClMask    = 0x0fffffff;     // cluster mask
40   const UInt_t   kMaxLayers = 15;             // max number of active layers
41   const UInt_t   kMaxLrMask = 0x7fff;         // bitmask for allowed layers
42 }
43
44 //_________________________________________________________________________________
45 inline void AliITSUAux::BringTo02Pi(double &phi) {   
46   // bring phi to 0-2pi range
47   if (phi<0) phi+=TwoPi(); else if (phi>TwoPi()) phi-=TwoPi();
48 }
49
50 //_________________________________________________________________________________
51 inline Bool_t AliITSUAux::OKforPhiMin(double phiMin,double phi) {
52   // check if phi is above the phiMin, phi's must be in 0-2pi range
53   double dphi = phi-phiMin;
54   return ((dphi>0 && dphi<Pi()) || dphi<-Pi()) ? kTRUE:kFALSE;
55 }
56
57 //_________________________________________________________________________________
58 inline Bool_t AliITSUAux::OKforPhiMax(double phiMax,double phi) {
59   // check if phi is below the phiMax, phi's must be in 0-2pi range
60   double dphi = phi-phiMax;
61   return ((dphi<0 && dphi>-Pi()) || dphi>Pi()) ? kTRUE:kFALSE;
62 }
63
64 //_________________________________________________________________________________
65 inline UInt_t AliITSUAux::PackCluster(Int_t lr, Int_t clID) {
66   // pack layer/cluster into single uint
67   UInt_t p = (clID<0 ? 0 : clID+1) + (lr<<=kLrBitLow);
68   return p;
69 }
70
71 //_________________________________________________________________________________
72 inline Int_t AliITSUAux::UnpackCluster(UInt_t p, Int_t &lr) {
73   // unpack layer/cluster
74   lr = (p&kLrMask)>>kLrBitLow;
75   p &= kClMask;
76   return int(p)-1;
77 }
78
79 //_________________________________________________________________________________
80 inline Int_t AliITSUAux::UnpackLayer(UInt_t p) {
81   // unpack layer
82   return (p&kLrMask)>>kLrBitLow;
83 }
84
85 //_________________________________________________________________________________
86 inline Int_t AliITSUAux::UnpackCluster(UInt_t p) {
87   // unpack cluster
88   return int(p&kClMask)-1;
89 }
90
91 //_________________________________________________________________________________
92 inline Bool_t AliITSUAux::IsCluster(UInt_t p) {
93   // does it correspond to cluster?
94   return (p&kClMask);
95 }
96
97 //_________________________________________________________________________________
98 inline Int_t AliITSUAux::NumberOfBitsSet(UInt_t x) {
99   // count number of non-0 bits in 32bit word
100   x = x - ((x >> 1) & 0x55555555);
101   x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
102   return (((x + (x >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
103 }
104
105
106 #endif