//____________________________________________________________________ // // $id$ // // Check integrety of Hardware2Detector and Detector2Hardware // /** @defgroup HW_Test Hardware map test @ingroup FMD_script */ //____________________________________________________________________ /** @ingroup HW_test @param ddl @param hwaddr @return */ Char_t* Addr2Str(UInt_t ddl, UInt_t hwaddr) { static TString s; UInt_t board = (hwaddr >> 7) & 0x1F; UInt_t chip = (hwaddr >> 4) & 0x7; UInt_t chan = hwaddr & 0xF; s = Form("(0x%05X,0x%02X,0x%1X,0x%1X)", ddl, board, chip, chan); return s.Data(); } //____________________________________________________________________ /** @ingroup HW_test @param det @param ring @param sec @param str @return */ Char_t* Det2Str(UShort_t det, Char_t ring, UShort_t sec, UShort_t str) { static TString s; s = Form("FMD%d%c[%2d,%3d]", det, ring, sec, str); return s.Data(); } //____________________________________________________________________ /** @ingroup HW_test @param det @param ring @param sec @param str @param ddl @param hwaddr @param odet @param oring @param osec @param ostr */ void PrintTrans(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UInt_t ddl, UInt_t hwaddr, UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr) { static TString s1, s2, s3; s1 = Det2Str(det, ring, sec, str); s2 = Addr2Str(ddl,hwaddr); s3 = Det2Str(odet, oring, osec, ostr); Info("TestHWMap","%s -> %s -> %s", s1.Data(), s2.Data(), s3.Data()); } //____________________________________________________________________ /** @ingroup HW_test @param det @param ring @param sec @param str @param odet @param oring @param osec @param ostr */ void CheckTrans(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr) { if (det != odet) Waring("TestHWMap", "Detector # differ %d != %d", det, odet); if (ring != oring) Waring("TestHWMap", "Ring Id differ %c != %c", ring, oring); if (sec != osec) Warning("TestHWMap", "Sector # differ %d != %d", sec, osec); if ((str / 128) * 128 != ostr) Warning("TestHWMap", "Strip # differ %d != %d", (str / 128) * 128, ostr); } //____________________________________________________________________ /** @ingroup HW_test */ void TestHWMap() { AliFMDParameters* param = AliFMDParameters::Instance(); param->Init(); AliLog::SetModuleDebugLevel("FMD", 1); UInt_t oldddl = 0, oldhwaddr = 0xFFFFFFFF; for (UShort_t det = 1; det <= 3; det++) { for (UShort_t rng = 0; rng < 2; rng++) { Char_t ring = (rng == 0 ? 'I' : 'O'); Int_t nsec = (ring == 'I' ? 20 : 40); Int_t nstr = (ring == 'I' ? 512 : 256); for (UShort_t sec = 0; sec < nsec; sec++) { for (UShort_t str = 0; str < nstr; str ++) { UInt_t ddl, hwaddr; if (!param->Detector2Hardware(det, ring, sec, str, ddl, hwaddr)) { Warning("TestHWMap", "detector to hardware failed on %s", Det2Str(det, ring, sec, str)); continue; } UShort_t odet, osec, ostr; Char_t oring; if (!param->Hardware2Detector(ddl, hwaddr, odet, oring, osec, ostr)){ Warning("TestHWMap", "hardware to detector failed on %s", Addr2Str(ddl, hwaddr)); continue; } if (oldddl != ddl || oldhwaddr != hwaddr) { PrintTrans(det,ring,sec,str,ddl,hwaddr,odet,oring,osec,ostr); oldddl = ddl; oldhwaddr = hwaddr; } CheckTrans(det,ring,sec,str,odet,oring,osec,ostr); }// Loop over strips } // Loop over sectors } // Loop over rings } // Loop over detectors } //____________________________________________________________________ // // EOF //