//____________________________________________________________________ // // $id$ // // Check integrety of Hardware2Detector and Detector2Hardware // /** @defgroup ALTRO_test ALTRO test @ingroup FMD_script */ #ifndef __CINT__ # include // # include # include // # include // # include # include # include # include #endif bool show_all=false; //____________________________________________________________________ /** @ingroup ALTRO_test @param ddl @param hwaddr @return */ const Char_t* Addr2Str(UInt_t ddl, UInt_t hwaddr, UShort_t timebin) { 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,%04d)", ddl, board, chip, chan, timebin); return s.Data(); } //____________________________________________________________________ /** @ingroup ALTRO_test @param det @param ring @param sec @param str @return */ const Char_t* Det2Str(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, UShort_t sam) { static TString s; s = Form("FMD%d%c[%2d,%3d]-%d", det, ring, sec, str, sam); return s.Data(); } //____________________________________________________________________ /** @ingroup ALTRO_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, Short_t str, UShort_t sam, UInt_t ddl, UInt_t hwaddr, UShort_t timebin, UShort_t odet, Char_t oring, UShort_t osec, Short_t ostr, UShort_t osam) { static TString s1, s2, s3; s1 = Det2Str(det, ring, sec, str, sam); s2 = Addr2Str(ddl,hwaddr,timebin); s3 = Det2Str(odet, oring, osec, ostr, osam); Info("TestHWMap","%s -> %s -> %s", s1.Data(), s2.Data(), s3.Data()); } //____________________________________________________________________ /** @ingroup ALTRO_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 sam, UInt_t ddl, UInt_t hwaddr, UShort_t timebin, UShort_t odet, Char_t oring, UShort_t osec, UShort_t ostr, UShort_t osam) { bool ok = true; if (det != odet) { Warning("TestHWMap", "Detector # differ %d != %d", det, odet); ok = false; } if (ring != oring) { Warning("TestHWMap", "Ring Id differ %c != %c", ring, oring); ok = false; } if (sec != osec) { Warning("TestHWMap", "Sector # differ %d != %d", sec, osec); ok = false; } if (str != ostr) { ok = false; Warning("TestHWMap", "Strip # differ %d != %d", str, ostr); } if (sam != osam) { ok = false; Warning("TestHWMap", "Sample # differ %d != %d", sam, osam); } if (!show_all) { if (!ok) PrintTrans(det,ring,sec,str,sam, ddl,hwaddr,timebin, odet,oring,osec,ostr,osam); } } //____________________________________________________________________ /** @ingroup ALTRO_test */ void TestAltroMapping(bool sa=false, Int_t min=1, Int_t max=3) { show_all = sa; // AliLog::SetModuleDebugLevel("FMD", 1); // if (min < 1 || min > 3) min = 1; if (max < min) max = min; // AliFMDParameters* param = AliFMDParameters::Instance(); AliFMDAltroMapping m; UShort_t presamp = 19; UShort_t oversamp = 4; for (UShort_t det = min; det <= max; 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 (Short_t str = 0; str < nstr; str ++ /*= 128*/) { for(UShort_t sam = 0; sam < oversamp; sam++) { UShort_t ddl, hwaddr; UShort_t timebin; if (!m.Detector2Hardware(det, ring, sec, str, sam, presamp, oversamp, ddl, hwaddr, timebin)) { Warning("TestHWMap", "detector to hardware failed on %s", Det2Str(det, ring, sec, str, sam)); continue; } UShort_t odet, osec, osam; Short_t ostr; Char_t oring; if (!m.Hardware2Detector(ddl, hwaddr, timebin, presamp, oversamp, odet, oring, osec, ostr, osam)){ Warning("TestHWMap", "hardware to detector failed on %s", Addr2Str(ddl, hwaddr, timebin)); continue; } if (show_all) PrintTrans(det,ring,sec,str,sam, ddl,hwaddr,timebin, odet,oring,osec,ostr,osam); CheckTrans(det,ring,sec,str,sam, ddl,hwaddr,timebin, odet,oring,osec,ostr,osam); } }// Loop over strips } // Loop over sectors } // Loop over rings } // Loop over detectors } //____________________________________________________________________ // // EOF //