AliRoot Core  3dc7879 (3dc7879)
TestFloatMap.C
Go to the documentation of this file.
1 #include <STEER/AliFMDFloatMap.h>
2 #include <cstdio>
3 #include <STEER/AliLog.h>
4 
5 //____________________________________________________________________
6 struct Printer : public AliFMDMap::ForOne
7 {
8  Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t v)
9  {
10  printf("FMD%d%c[%2d,%3d] = %8.3f\n", d, r, s, t, v);
11  return kTRUE;
12  }
13  Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Int_t v)
14  {
15  printf("FMD%d%c[%2d,%3d] = %d\n", d, r, s, t, v);
16  return kTRUE;
17  }
18 };
19 //____________________________________________________________________
20 struct Tester : public AliFMDMap::ForOne
21 {
22  Tester(AliFMDFloatMap& m) : fMap(&m) { }
23  Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t)
24  {
25  Int_t idx = fMap->CalcIndex(d, r, s, t);
26  UShort_t rd, rs, rt;
27  Char_t rr;
28  fMap->CalcCoords(idx, rd, rr, rs, rt);
29 
30  if (d != rd || r != rr || s != rs || t != rt)
31  printf("Mismatch FMD%d%c[%2d,%3d] -> %5d -> FMD%d%c[%2d,%3d]\n",
32  d, r, s, t, idx, rd, rr, rs, rt);
33  return kTRUE;
34  }
35  Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t){return kTRUE;}
37 };
38 //____________________________________________________________________
39 struct Filler : public AliFMDMap::ForOne
40 {
41  Filler(AliFMDFloatMap& map) : fMap(&map) {}
42  Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t)
43  {
44  fMap->operator()(d, r, s, t) = MakeVal(d, r, s, t);
45  return kTRUE;
46  }
47  Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t)
48  {
49  return kTRUE;
50  }
51  static Float_t MakeVal(UShort_t d, Char_t r, UShort_t s, UShort_t t)
52  {
53  UShort_t ir = r == 'I' ? 0 : 1;
54  Float_t val = d * 1000 + ir * 100 + s + 0.001 * t;
55  return val;
56  }
58 };
59 
60 //____________________________________________________________________
61 struct Unity : public AliFMDMap::ForOne
62 {
63  Unity(AliFMDFloatMap& map) : fMap(&map) {}
64  Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t)
65  {
66  fMap->operator()(d, r, s, t) = 1;
67  return kTRUE;
68  }
69  Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t) {return kTRUE;}
71 };
72 
73 //____________________________________________________________________
74 void
75 FillMap(AliFMDFloatMap& m, Bool_t useFiller=kTRUE)
76 {
77  if (useFiller) {
78  Filler f(m);
79  m.ForEach(f);
80  return;
81  }
82  for (UShort_t d = 1; d <= 3; d++) {
83  UShort_t nRng = (d == 1 ? 1 : 2);
84  for (UShort_t q = 0; q < nRng; q++) {
85  Char_t r = (q == 0 ? 'I' : 'O');
86  UShort_t nSec = 1; // (q == 0 ? 20 : 40);
87  UShort_t nStr = (q == 0 ? 512 : 256);
88  for (UShort_t s = 0; s < nSec; s++) {
89  for (UShort_t t = 0; t < nStr; t++) {
90  m(d, r, s, t) = Filler::MakeVal(d, r, s, t);
91  }
92  }
93  }
94  }
95 }
96 //____________________________________________________________________
97 void
99 {
100  Printer p;
101  map.ForEach(p);
102 }
103 //____________________________________________________________________
104 void
106 {
107  Unity u(map);
108  map.ForEach(u);
109 }
110 
111 //____________________________________________________________________
112 void
113 TestIndex(AliFMDFloatMap& map, Bool_t useTester=kTRUE)
114 {
115  if (useTester) {
116  Tester t(map);
117  map.ForEach(t);
118  return;
119  }
120  for (UShort_t d = 1; d <= 3; d++) {
121  UShort_t nRng = (d == 1 ? 1 : 2);
122  for (UShort_t q = 0; q < nRng; q++) {
123  Char_t r = (q == 0 ? 'I' : 'O');
124  UShort_t nSec = 1; // (q == 0 ? 20 : 40);
125  UShort_t nStr = (q == 0 ? 512 : 256);
126  for (UShort_t s = 0; s < nSec; s++) {
127  for (UShort_t t = 0; t < nStr; t++) {
128  Int_t idx = map.CalcIndex(d, r, s, t);
129 
130  UShort_t rd, rs, rt;
131  Char_t rr;
132  map.CalcCoords(idx, rd, rr, rs, rt);
133 
134  if (d != rd || r != rr || s != rs || t != rt)
135  printf("Mismatch FMD%d%c[%2d,%3d] -> %5d -> FMD%d%c[%2d,%3d]\n",
136  d, r, s, t, idx, rd, rr, rs, rt);
137  }
138  }
139  }
140  }
141 }
142 
143 void
145 {
146  // AliLog::SetModuleDebugLevel("FMD", 1);
147  AliFMDFloatMap m1(0, 0, 0, 0);
148  FillMap(m1);
149  // PrintMap(m1);
150  TestIndex(m1);
151 
152  AliFMDFloatMap m2;
153  FillOne(m2);
154  // m2 *= m1;
155  // m2 /= m1;
156  m2 += m2;
157  // PrintMap(m2);
158 
159  AliFMDFloatMap m3(3, 2, 1, 512);
160  TestIndex(m3, kFALSE);
161  FillMap(m3, kFALSE);
162  // PrintMap(m3);
163  FillOne(m2);
164  m2 *= m3;
165  PrintMap(m2);
166 }
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
Filler(AliFMDFloatMap &map)
Definition: TestFloatMap.C:41
AliFMDFloatMap * fMap
Definition: TestFloatMap.C:70
void TestIndex(AliFMDFloatMap &map, Bool_t useTester=kTRUE)
Definition: TestFloatMap.C:113
Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t)
Definition: TestFloatMap.C:35
Float_t p[]
Definition: kNNTest.C:133
AliFMDFloatMap * fMap
Definition: TestFloatMap.C:57
Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t)
Definition: TestFloatMap.C:69
void TestFloatMap()
Definition: TestFloatMap.C:144
static Float_t MakeVal(UShort_t d, Char_t r, UShort_t s, UShort_t t)
Definition: TestFloatMap.C:51
Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Int_t v)
Definition: TestFloatMap.C:13
Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t)
Definition: TestFloatMap.C:42
void FillMap(AliFMDFloatMap &m, Bool_t useFiller=kTRUE)
Definition: TestFloatMap.C:75
Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t)
Definition: TestFloatMap.C:47
virtual Bool_t ForEach(ForOne &algo) const
Definition: AliFMDMap.cxx:335
Unity(AliFMDFloatMap &map)
Definition: TestFloatMap.C:63
Tester(AliFMDFloatMap &m)
Definition: TestFloatMap.C:22
TF1 * f
Definition: interpolTest.C:21
Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t)
Definition: TestFloatMap.C:64
void FillOne(AliFMDFloatMap &map)
Definition: TestFloatMap.C:105
Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t)
Definition: TestFloatMap.C:23
Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t v)
Definition: TestFloatMap.C:8
AliFMDFloatMap * fMap
Definition: TestFloatMap.C:36
void PrintMap(AliFMDFloatMap &map)
Definition: TestFloatMap.C:98
void CalcCoords(Int_t idx, UShort_t &det, Char_t &ring, UShort_t &sec, UShort_t &str) const
Definition: AliFMDMap.cxx:118
Int_t CalcIndex(UShort_t det, Char_t ring, UShort_t sec, UShort_t str) const
Definition: AliFMDMap.cxx:192