00001
00002
00003
00004
00005
00006
00010
00015 Char_t*
00016 Addr2Str(UInt_t ddl, UInt_t hwaddr)
00017 {
00018 static TString s;
00019 UInt_t board = (hwaddr >> 7) & 0x1F;
00020 UInt_t chip = (hwaddr >> 4) & 0x7;
00021 UInt_t chan = hwaddr & 0xF;
00022 s = Form("(0x%05X,0x%02X,0x%1X,0x%1X)", ddl, board, chip, chan);
00023 return s.Data();
00024 }
00025
00026
00033 Char_t*
00034 Det2Str(UShort_t det, Char_t ring, UShort_t sec, UShort_t str)
00035 {
00036 static TString s;
00037 s = Form("FMD%d%c[%2d,%3d]", det, ring, sec, str);
00038 return s.Data();
00039 }
00040
00041
00054 void
00055 PrintTrans(UShort_t det, Char_t ring, UShort_t sec, UShort_t str,
00056 UInt_t ddl, UInt_t hwaddr,
00057 UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr)
00058 {
00059 static TString s1, s2, s3;
00060 s1 = Det2Str(det, ring, sec, str);
00061 s2 = Addr2Str(ddl,hwaddr);
00062 s3 = Det2Str(odet, oring, osec, ostr);
00063 Info("TestHWMap","%s -> %s -> %s", s1.Data(), s2.Data(), s3.Data());
00064 }
00065
00066
00077 void
00078 CheckTrans(UShort_t det, Char_t ring, UShort_t sec, UShort_t str,
00079 UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr)
00080 {
00081 if (det != odet)
00082 Waring("TestHWMap", "Detector # differ %d != %d", det, odet);
00083 if (ring != oring)
00084 Waring("TestHWMap", "Ring Id differ %c != %c", ring, oring);
00085 if (sec != osec)
00086 Warning("TestHWMap", "Sector # differ %d != %d", sec, osec);
00087 if ((str / 128) * 128 != ostr)
00088 Warning("TestHWMap", "Strip # differ %d != %d", (str / 128) * 128, ostr);
00089 }
00090
00091
00094 void
00095 TestHWMap()
00096 {
00097 AliFMDParameters* param = AliFMDParameters::Instance();
00098 param->Init();
00099 AliLog::SetModuleDebugLevel("FMD", 1);
00100
00101 UInt_t oldddl = 0, oldhwaddr = 0xFFFFFFFF;
00102 for (UShort_t det = 1; det <= 3; det++) {
00103 for (UShort_t rng = 0; rng < 2; rng++) {
00104 Char_t ring = (rng == 0 ? 'I' : 'O');
00105 Int_t nsec = (ring == 'I' ? 20 : 40);
00106 Int_t nstr = (ring == 'I' ? 512 : 256);
00107 for (UShort_t sec = 0; sec < nsec; sec++) {
00108 for (UShort_t str = 0; str < nstr; str ++) {
00109 UInt_t ddl, hwaddr;
00110 if (!param->Detector2Hardware(det, ring, sec, str, ddl, hwaddr)) {
00111 Warning("TestHWMap", "detector to hardware failed on %s",
00112 Det2Str(det, ring, sec, str));
00113 continue;
00114 }
00115 UShort_t odet, osec, ostr;
00116 Char_t oring;
00117 if (!param->Hardware2Detector(ddl, hwaddr, odet, oring, osec, ostr)){
00118 Warning("TestHWMap", "hardware to detector failed on %s",
00119 Addr2Str(ddl, hwaddr));
00120 continue;
00121 }
00122 if (oldddl != ddl || oldhwaddr != hwaddr) {
00123 PrintTrans(det,ring,sec,str,ddl,hwaddr,odet,oring,osec,ostr);
00124 oldddl = ddl;
00125 oldhwaddr = hwaddr;
00126 }
00127 CheckTrans(det,ring,sec,str,odet,oring,osec,ostr);
00128 }
00129 }
00130 }
00131 }
00132 }
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142