]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/scripts/TestAltroMapping.C
Improved ALTRO mapping: Now does the full conversion from
[u/mrichter/AliRoot.git] / FMD / scripts / TestAltroMapping.C
CommitLineData
502fbe9a 1//____________________________________________________________________
2//
3// $id$
4//
5// Check integrety of Hardware2Detector and Detector2Hardware
6//
9b48326f 7/** @defgroup ALTRO_test ALTRO test
8 @ingroup FMD_script
9*/
f38b1653 10#ifndef __CINT__
11# include <TString.h>
12// # include <FMD/AliFMDParameters.h>
13# include <FMD/AliFMDAltroMapping.h>
14// # include <FMD/AliFMDUShortMap.h>
15// # include <FMD/AliFMDBoolMap.h>
16# include <TError.h>
17# include <iostream>
18#endif
19#define SHOW_ALL 1
502fbe9a 20//____________________________________________________________________
9b48326f 21/** @ingroup ALTRO_test
22 @param ddl
23 @param hwaddr
24 @return */
f38b1653 25const Char_t*
26Addr2Str(UInt_t ddl, UInt_t hwaddr, UShort_t timebin)
502fbe9a 27{
28 static TString s;
29 UInt_t board = (hwaddr >> 7) & 0x1F;
30 UInt_t chip = (hwaddr >> 4) & 0x7;
31 UInt_t chan = hwaddr & 0xF;
f38b1653 32 s = Form("(0x%05X,0x%02X,0x%1X,0x%1X,%04d)", ddl, board, chip, chan, timebin);
502fbe9a 33 return s.Data();
34}
35
36//____________________________________________________________________
9b48326f 37/** @ingroup ALTRO_test
38 @param det
39 @param ring
40 @param sec
41 @param str
42 @return */
f38b1653 43const Char_t*
44Det2Str(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UShort_t sam)
502fbe9a 45{
46 static TString s;
f38b1653 47 s = Form("FMD%d%c[%2d,%3d]-%d", det, ring, sec, str, sam);
502fbe9a 48 return s.Data();
49}
50
51//____________________________________________________________________
9b48326f 52/** @ingroup ALTRO_test
53 @param det
54 @param ring
55 @param sec
56 @param str
57 @param ddl
58 @param hwaddr
59 @param odet
60 @param oring
61 @param osec
62 @param ostr
63*/
502fbe9a 64void
f38b1653 65PrintTrans(UShort_t det, Char_t ring, UShort_t sec, Short_t str, UShort_t sam,
66 UInt_t ddl, UInt_t hwaddr, UShort_t timebin,
67 UShort_t odet, Char_t oring, UShort_t osec, Short_t ostr,
68 UShort_t osam)
502fbe9a 69{
70 static TString s1, s2, s3;
f38b1653 71 s1 = Det2Str(det, ring, sec, str, sam);
72 s2 = Addr2Str(ddl,hwaddr,timebin);
73 s3 = Det2Str(odet, oring, osec, ostr, osam);
502fbe9a 74 Info("TestHWMap","%s -> %s -> %s", s1.Data(), s2.Data(), s3.Data());
75}
76
77//____________________________________________________________________
9b48326f 78/** @ingroup ALTRO_test
79 @param det
80 @param ring
81 @param sec
82 @param str
83 @param odet
84 @param oring
85 @param osec
86 @param ostr
87*/
502fbe9a 88void
f38b1653 89CheckTrans(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UShort_t sam,
90 UInt_t ddl, UInt_t hwaddr, UShort_t timebin,
91 UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr,
92 UShort_t osam)
502fbe9a 93{
f38b1653 94 bool ok = true;
95 if (det != odet) {
a9579262 96 Warning("TestHWMap", "Detector # differ %d != %d", det, odet);
f38b1653 97 ok = false;
98 }
99 if (ring != oring) {
a9579262 100 Warning("TestHWMap", "Ring Id differ %c != %c", ring, oring);
f38b1653 101 ok = false;
102 }
103 if (sec != osec) {
502fbe9a 104 Warning("TestHWMap", "Sector # differ %d != %d", sec, osec);
f38b1653 105 ok = false;
106 }
107 if (str != ostr) {
108 ok = false;
502fbe9a 109 Warning("TestHWMap", "Strip # differ %d != %d", str, ostr);
f38b1653 110 }
111 if (sam != osam) {
112 ok = false;
113 Warning("TestHWMap", "Sample # differ %d != %d", sam, osam);
114 }
115#ifndef SHOW_ALL
116 if (!ok)
117 PrintTrans(det,ring,sec,str,sam,
118 ddl,hwaddr,timebin,
119 odet,oring,osec,ostr,osam);
120#endif
502fbe9a 121}
122
123//____________________________________________________________________
9b48326f 124/** @ingroup ALTRO_test
125 */
502fbe9a 126void
a9579262 127TestAltroMapping(Int_t min=2, Int_t max=0)
502fbe9a 128{
a9579262 129 // if (min < 1 || min > 3) min = 1;
130 if (max < min) max = min;
f38b1653 131 // AliFMDParameters* param = AliFMDParameters::Instance();
502fbe9a 132 AliFMDAltroMapping m;
f38b1653 133 UShort_t presamp = 0;
134 UShort_t oversamp = 4;
135
a9579262 136 for (UShort_t det = min; det <= max; det++) {
502fbe9a 137 for (UShort_t rng = 0; rng < 2; rng++) {
138 Char_t ring = (rng == 0 ? 'I' : 'O');
139 Int_t nsec = (ring == 'I' ? 20 : 40);
140 Int_t nstr = (ring == 'I' ? 512 : 256);
141 for (UShort_t sec = 0; sec < nsec; sec++) {
f38b1653 142 for (Short_t str = 0; str < nstr; str ++ /*= 128*/) {
143 for(UShort_t sam = 0; sam < oversamp; sam++) {
144 UInt_t ddl, hwaddr;
145 UShort_t timebin;
146 if (!m.Detector2Hardware(det, ring, sec, str, sam,
147 presamp, oversamp,
148 ddl, hwaddr, timebin)) {
149 Warning("TestHWMap", "detector to hardware failed on %s",
150 Det2Str(det, ring, sec, str, sam));
151 continue;
152 }
153 UShort_t odet, osec, osam;
154 Short_t ostr;
155 Char_t oring;
156 if (!m.Hardware2Detector(ddl, hwaddr, timebin,
157 presamp, oversamp,
158 odet, oring, osec, ostr, osam)){
159 Warning("TestHWMap", "hardware to detector failed on %s",
160 Addr2Str(ddl, hwaddr, timebin));
161 continue;
162 }
163#ifdef SHOW_ALL
164 PrintTrans(det,ring,sec,str,sam,
165 ddl,hwaddr,timebin,
166 odet,oring,osec,ostr,osam);
167#endif
168 CheckTrans(det,ring,sec,str,sam,
169 ddl,hwaddr,timebin,
170 odet,oring,osec,ostr,osam);
502fbe9a 171 }
502fbe9a 172 }// Loop over strips
173 } // Loop over sectors
174 } // Loop over rings
175 } // Loop over detectors
176}
177
178
179//____________________________________________________________________
180//
181// EOF
182//
183
184
185
186