2fe855ebae95a1e4150722b416366b56f8fb260a
[u/mrichter/AliRoot.git] / FMD / scripts / TestHWMap.C
1 //____________________________________________________________________
2 //
3 // $id$
4 //
5 // Check integrety of Hardware2Detector and Detector2Hardware
6 //
7
8 //____________________________________________________________________
9 Char_t* 
10 Addr2Str(UInt_t ddl, UInt_t hwaddr)
11 {
12   static TString s;
13   UInt_t board = (hwaddr >> 7) & 0x1F;
14   UInt_t chip  = (hwaddr >> 4) & 0x7;
15   UInt_t chan  = hwaddr & 0xF;
16   s = Form("(0x%05X,0x%02X,0x%1X,0x%1X)", ddl, board, chip, chan);
17   return s.Data();
18 }
19
20 //____________________________________________________________________
21 Char_t* 
22 Det2Str(UShort_t det, Char_t ring, UShort_t sec, UShort_t str)
23 {
24   static TString s;
25   s = Form("FMD%d%c[%2d,%3d]", det, ring, sec, str);
26   return s.Data();
27 }
28
29 //____________________________________________________________________
30 void 
31 PrintTrans(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, 
32            UInt_t ddl, UInt_t hwaddr,
33            UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr)
34 {
35   static TString s1, s2, s3;
36   s1 = Det2Str(det, ring, sec, str);
37   s2 = Addr2Str(ddl,hwaddr);
38   s3 = Det2Str(odet, oring, osec, ostr);
39   Info("TestHWMap","%s -> %s -> %s", s1.Data(), s2.Data(), s3.Data());
40 }
41
42 //____________________________________________________________________
43 void
44 CheckTrans(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, 
45            UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr)
46 {
47   if (det != odet) 
48     Waring("TestHWMap", "Detector # differ %d != %d", det, odet);
49   if (ring != oring) 
50     Waring("TestHWMap", "Ring Id differ %c != %c", ring, oring);  
51   if (sec != osec) 
52     Warning("TestHWMap", "Sector # differ %d != %d", sec, osec);
53   if ((str / 128) * 128 != ostr) 
54     Warning("TestHWMap", "Strip # differ %d != %d", (str / 128) * 128, ostr);
55 }
56
57 //____________________________________________________________________
58 void
59 TestHWMap()
60 {
61   AliFMDParameters* param = AliFMDParameters::Instance();
62   param->Init();
63   AliLog::SetModuleDebugLevel("FMD", 1);
64   
65   UInt_t oldddl = 0, oldhwaddr = 0xFFFFFFFF;
66   for (UShort_t det = 1; det <= 3; det++) {
67     for (UShort_t rng = 0; rng < 2; rng++) {
68       Char_t ring = (rng == 0 ? 'I' : 'O');
69       Int_t  nsec = (ring == 'I' ?  20 :  40);
70       Int_t  nstr = (ring == 'I' ? 512 : 256);
71       for (UShort_t sec = 0; sec < nsec; sec++) {
72         for (UShort_t str = 0; str < nstr; str ++) {
73           UInt_t ddl, hwaddr;
74           if (!param->Detector2Hardware(det, ring, sec, str, ddl, hwaddr)) {
75             Warning("TestHWMap", "detector to hardware failed on %s", 
76                     Det2Str(det, ring, sec, str));
77             continue;
78           }
79           UShort_t odet, osec, ostr;
80           Char_t   oring;
81           if (!param->Hardware2Detector(ddl, hwaddr, odet, oring, osec, ostr)){
82             Warning("TestHWMap", "hardware to detector failed on %s", 
83                     Addr2Str(ddl, hwaddr));
84             continue;
85           }
86           if (oldddl != ddl || oldhwaddr != hwaddr) {
87             PrintTrans(det,ring,sec,str,ddl,hwaddr,odet,oring,osec,ostr);
88             oldddl    = ddl;
89             oldhwaddr = hwaddr;
90           }
91           CheckTrans(det,ring,sec,str,odet,oring,osec,ostr);
92         }// Loop over strips
93       } // Loop over sectors
94     } // Loop over rings
95   } // Loop over detectors
96 }
97
98   
99 //____________________________________________________________________
100 //
101 // EOF
102 //
103     
104         
105
106