Fixed a few coding problems
authorcholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 22 Mar 2011 09:19:39 +0000 (09:19 +0000)
committercholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 22 Mar 2011 09:19:39 +0000 (09:19 +0000)
FMD/AliFMDAltroMapping.cxx
FMD/AliFMDParameters.cxx
FMD/AliFMDQAChecker.cxx
FMD/scripts/TestHWMap.C

index d2da944..9231b43 100644 (file)
@@ -184,6 +184,11 @@ AliFMDAltroMapping::Timebin2Strip(UShort_t  sec,
   sample     =  (t % sampleRate);
   t          -= sample;
   stripOff   =  (sec % 2 ? -1 : 1) * t / sampleRate;
+#if 0
+  AliInfo(Form("[%2d],%4d -> %d * (%4d - %d)-((%4d - %d) %% %d) / %d = %3d,%d",
+              sec,timebin, (sec % 2 ? -1 : 1), timebin, preSamples, 
+              timebin, preSamples, sampleRate, sampleRate, stripOff, sample));
+#endif
 }
 
 //____________________________________________________________________
@@ -206,24 +211,24 @@ AliFMDAltroMapping::Hardware2Detector(UShort_t  ddl,     UShort_t    board,
   if (!Channel2StripBase(board, altro, chan, ring, sec, baseStrip)) 
     return kFALSE;
   Timebin2Strip(sec, timebin, preSamples, sampleRate, stripOffset, sam);
-#if 0
-  AliFMDDebug(1, ("0x%x/0x%02x/0x%x/0x%x/%04d -> FMD%d%c[%2d,%3d]-%d "
-                 "(pre=%d,rate=%d,base=%3d,off=%3d)", 
-                 ddl, 
-                 board, 
-                 altro, 
-                 chan, 
-                 timebin, 
-                 det, 
-                 ring, 
-                 sec, 
-                 str, 
-                 sam,
-                 preSamples, 
-                 sampleRate,
-                 baseStrip, 
-                 stripOffset));
-#endif
+  {
+    AliFMDDebug(50, ("0x%x/0x%02x/0x%x/0x%x/%04d -> FMD%d%c[%2d,%3d]-%d "
+                   "(pre=%d,rate=%d,base=%3d,off=%3d)", 
+                    ddl, 
+                    board, 
+                    altro, 
+                    chan, 
+                    timebin, 
+                    det, 
+                    ring, 
+                    sec, 
+                    str, 
+                    sam,
+                    preSamples, 
+                    sampleRate,
+                    baseStrip, 
+                    stripOffset));
+  }
   str = baseStrip + stripOffset;
   return kTRUE;
 }
@@ -400,8 +405,23 @@ AliFMDAltroMapping::Strip2Timebin(UShort_t sec, UShort_t strip,
   //    the timebin corresponding to the passed strip 
   //
   UShort_t timebin = preSamples;
-  if (sec % 2)  timebin += (127 - (strip % 128)) * sampleRate;
-  else          timebin += (strip % 128) * sampleRate;
+  if (sec % 2)  {
+    timebin += (127 - (strip % 128)) * sampleRate;
+#if 0
+    AliInfo(Form("[%2d,%3d]-%d (%d)-> %d + (127 - (%d %% 128)) * %d + %d = %d", 
+                sec, strip, sam, (strip % 128), 
+                preSamples, strip, sampleRate, sam,
+                timebin+sam));
+#endif
+  }
+  else  {
+    timebin += (strip % 128) * sampleRate;
+#if 0
+    AliInfo(Form("[%2d,%3d]-%d (%d)-> %d + (%d %% 128) * %d + %d = %d", 
+                sec, strip, sam, (strip % 128), 
+                preSamples, strip, sampleRate, sam, timebin+sam));
+#endif
+  }
   timebin += sam;
   return timebin;
 }
index 8e00270..78b6a5e 100644 (file)
@@ -1063,8 +1063,8 @@ AliFMDParameters::Hardware2Detector(UShort_t  ddl,       UShort_t addr,
 }
 //____________________________________________________________________
 Bool_t 
-AliFMDParameters::Hardware2Detector(UShort_t    ddl,       UShort_t   board,
-                                   UShort_t    chip,      UShort_t   chan,
+AliFMDParameters::Hardware2Detector(UShort_t  ddl,       UShort_t   board,
+                                   UShort_t  chip,      UShort_t   chan,
                                    UShort_t  timebin,   
                                    UShort_t& det,       Char_t&   ring, 
                                    UShort_t& sec,       Short_t& str,
@@ -1088,11 +1088,24 @@ AliFMDParameters::Hardware2Detector(UShort_t    ddl,       UShort_t   board,
   // Return:
   //    @c true on success, false otherwise 
   //
-  if (!fAltroMap) return kFALSE;
-  if (fAltroMap->DDL2Detector(ddl) < 0) return kFALSE;
+  if (!fAltroMap) {
+    AliFMDDebug(1, ("No ALTRO map available"));
+    return kFALSE;
+  }
+  if (fAltroMap->DDL2Detector(ddl) < 0) { 
+    AliFMDDebug(1, ("Invalid DDL number %d", ddl));
+    return kFALSE;
+  }
+  det = fAltroMap->DDL2Detector(ddl);
   Short_t stripBase = 0;
-  if (!fAltroMap->Channel2StripBase(board,chip,chan, ring, sec, stripBase)) 
+  if (!fAltroMap->Channel2StripBase(board,chip,chan, ring, sec, stripBase)) {
+    AliFMDDebug(1, ("Failed to translate  "
+                   "%d/0x%02x/0x%x/0x%x/%04d -> "
+                   "FMD%d%c[%2d,%3d] to detector", 
+                   ddl, board, chip, chan, timebin, 
+                   det, ring, sec, stripBase));
     return kFALSE;
+  }
   UShort_t preSamples = GetPreSamples(det, ring, sec, stripBase);
   UShort_t sampleRate = GetSampleRate(det, ring, sec, stripBase);
   Short_t stripOff = 0;
@@ -1133,7 +1146,10 @@ AliFMDParameters::Detector2Hardware(UShort_t  det,        Char_t    ring,
   // Return:
   //    @c true on success, false otherwise 
   //
-  if (!fAltroMap) return kFALSE;
+  if (!fAltroMap) { 
+    AliFMDDebug(1, ("No ALTRO map available"));
+    return kFALSE;
+  }
   UShort_t preSamples = GetPreSamples(det, ring, sec, str);
   UShort_t sampleRate = GetSampleRate(det, ring, sec, str);
   UShort_t strip      = str - GetMinStrip(det,ring,sec,str);
index 5865c9c..825f322 100644 (file)
@@ -65,7 +65,7 @@ void AliFMDQAChecker::Check(Double_t*                   rv,
   
   // Double_t* rv = new Double_t[AliRecoParam::kNSpecies] ; 
   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
-    Int_t count   = 0;
+    // Int_t count   = 0;
     rv[specie]    = 0.; 
 
     if (!AliQAv1::Instance()->IsEventSpecieSet(specie) ) 
@@ -88,7 +88,7 @@ void AliFMDQAChecker::Check(Double_t*                   rv,
       if(what == AliQAv1::kREC) 
        rv[specie] += (hist->GetMean() > 0 ? 1 : 0);
     } // for (int i ...)
-    if (count != 0) rv[specie] /= count;
+    // if (count != 0) rv[specie] /= count;
   }
   // return rv;
 }
index 08747a0..e3f080f 100644 (file)
     @ingroup FMD_script 
 */
 //____________________________________________________________________
-/** @ingroup HW_test
-    @param ddl 
-    @param hwaddr 
-    @return  */
+/** 
+ * Convert hardware address to board,altro,channel
+ * 
+ * @param w Hardware address
+ * @param b out, Board
+ * @param a out, Altro 
+ * @param c out, Channel
+ */
+void
+HwAddr2Channel(UShort_t w, UShort_t& b, UShort_t& a, UShort_t& c)
+{
+  b = (w >> 7) & 0x1F;
+  a = (w >> 4) & 0x7;
+  c = w & 0xF;
+}
+
+//____________________________________________________________________
+/** 
+ * Convert board,altro,channel to hardware address
+ * 
+ * @param b Board
+ * @param a Altro
+ * @param c Channel
+ * 
+ * @return Hardware address
+ */
+UShort_t
+Channel2HwAddr(UShort_t b, UShort_t a, UShort_t c)
+{
+  return (((b & 0x1F) << 7) | ((a & 0x7) << 4) | (c & 0xF));
+}
+//____________________________________________________________________
+/** 
+ * Format a hardware addresss
+ * 
+ * @ingroup HW_test
+ * 
+ * @param l  DDL ID
+ * @param b  Board
+ * @param a  Altro
+ * @param c  Channel
+ * @param tb Timebin
+ * 
+ * @return Formatted hardware address
+ */
 Char_t* 
-Addr2Str(UInt_t ddl, UInt_t hwaddr)
+Addr2Str(UInt_t l, UShort_t b, UShort_t a, UShort_t c, UShort_t tb)
 {
   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);
+  s = Form("(0x%01X,0x%02X,0x%1X,0x%1X)-%4d", l, b, a, c, tb);
   return s.Data();
 }
 
 //____________________________________________________________________
-/** @ingroup HW_test
-    @param det 
-    @param ring 
-    @param sec 
-    @param str 
-    @return  */
+/** 
+ * Format a hardware addresss
+ * 
+ * @ingroup HW_test
+ * 
+ * @param l  DDL ID
+ * @param w  Hardware address
+ * @param tb Timebin
+ * 
+ * @return Formatted hardware address
+ */
 Char_t* 
-Det2Str(UShort_t det, Char_t ring, UShort_t sec, UShort_t str)
+Addr2Str(UShort_t l, UShort_t w, UShort_t tb)
 {
-  static TString s;
-  s = Form("FMD%d%c[%2d,%3d]", det, ring, sec, str);
-  return s.Data();
+  UShort_t b, a, c;
+  HwAddr2Channel(w, b, a, c);
+  return Addr2Str(l, b, a, c, tb);
 }
 
 //____________________________________________________________________
-/** @ingroup HW_test
-    @param det 
-    @param ring 
-    @param sec 
-    @param str 
-    @param ddl 
-    @param hwaddr 
-    @param odet 
-    @param oring 
-    @param osec 
-    @param ostr 
-*/
+/** 
+ * Format a detector address 
+ * 
+ * @ingroup HW_test
+ * 
+ * @param d Detector
+ * @param r Ring 
+ * @param s Sector  
+ * @param t Strip
+ * @param n Sample
+ * 
+ * @return 
+ */
+Char_t* 
+Det2Str(UShort_t d, Char_t r, UShort_t s, UShort_t t, UShort_t n)
+{
+  static TString str;
+  str = Form("FMD%d%c[%2d,%3d]-%d", d, r, s, t, n);
+  return str.Data();
+}
+
+//____________________________________________________________________
+/** 
+ * Print full transformation
+ * 
+ * @ingroup HW_test
+ *
+ * @param d    Detector
+ * @param r    Ring
+ * @param s    Sector 
+ * @param t    Strip
+ * @param n    Sample
+ * @param l    DDL ID
+ * @param w    Hardware address
+ * @param tb   Timebin
+ * @param od   Detector output
+ * @param oR   Ring output    
+ * @param os   Sector output  
+ * @param ot   Strip output   
+ * @param on   Sample output  
+ */
 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)
+PrintTrans(UShort_t d,   Char_t r,   UShort_t s,  UShort_t t,  UShort_t n, 
+          UShort_t l,   UShort_t w, UShort_t tb,
+          UShort_t od,  Char_t oR,  UShort_t os, Short_t  ot, UShort_t on)
 {
   static TString s1, s2, s3;
-  s1 = Det2Str(det, ring, sec, str);
-  s2 = Addr2Str(ddl,hwaddr);
-  s3 = Det2Str(odet, oring, osec, ostr);
+  s1 = Det2Str(d, r, s, t, n);
+  s2 = Addr2Str(l,w,tb);
+  s3 = Det2Str(od, oR, os, ot, on);
+  Info("TestHWMap","%s -> %s -> %s", s1.Data(), s2.Data(), s3.Data());
+}
+//____________________________________________________________________
+/** 
+ * Print full transformation
+ * 
+ * @ingroup HW_test
+ *
+ * @param d    Detector
+ * @param r    Ring
+ * @param s    Sector 
+ * @param t    Strip
+ * @param n    Sample
+ * @param l    DDL ID
+ * @param b    Board
+ * @param a    ALTRO
+ * @param c    Channel
+ * @param tb   Timebin
+ * @param od   Detector output
+ * @param oR   Ring output    
+ * @param os   Sector output  
+ * @param ot   Strip output   
+ * @param on   Sample output  
+ */
+void 
+PrintTrans(UShort_t d,   Char_t   r,  UShort_t s,  UShort_t t,  UShort_t n, 
+          UShort_t l,   UShort_t b,  UShort_t a,  UShort_t c,  UShort_t tb,
+          UShort_t od,  Char_t   oR, UShort_t os, Short_t  ot, UShort_t on)
+{
+  static TString s1, s2, s3;
+  s1 = Det2Str(d, r, s, t, n);
+  s2 = Addr2Str(l,b,a,c,tb);
+  s3 = Det2Str(od, oR, os, ot, on);
   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)
+/** 
+ * Check transformation
+ * 
+ * @ingroup HW_test
+ *
+ * @param d    Detector
+ * @param r    Ring
+ * @param s    Sector 
+ * @param t    Strip
+ * @param n    Sample
+ * @param od   Detector output
+ * @param oR   Ring output    
+ * @param os   Sector output  
+ * @param ot   Strip output   
+ * @param on   Sample output  
+ * 
+ * @return true on success 
+ */
+Bool_t
+CheckTrans(UShort_t d,  Char_t r,  UShort_t s,  UShort_t t,  UShort_t n, 
+          UShort_t od, Char_t oR, UShort_t os, Short_t  ot, UShort_t on)
 {
-  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);
+  bool ok = true;
+  TString what;
+  if (d != od) {
+    what.Append(Form("\n\tDetector # differ %d != %d", d, od));
+    ok = false;
+  }
+  if (r != oR) {
+    what.Append(Form("\n\tRing Id differ %c != %c", r, oR));  
+    ok = false; 
+  }
+  if (s != os) {
+    what.Append(Form("\n\tSector # differ %d != %d", s, os));
+    ok = false;
+  }
+  if (t != ot) {
+    what.Append(Form("\n\tStrip # differ %d != %d", (t / 128) * 128, ot));
+    ok = false;
+  }
+  if (!ok) {
+    static TString s1, s3;
+    s1 = Det2Str(d, r, s, t);
+    s3 = Det2Str(od, oR, os, ot);
+    Warning("TestHWMap", "%s -> %s %s", s1.Data(), s3.Data(), what.Data());
+  }
+  return ok;
 }
 
 //____________________________________________________________________
-/** @ingroup HW_test
+/** 
+ * Test hardware address map by converting from detector coordinates
+ * to hardware address and then back again.
+ * 
+ * @ingroup HW_test
+ *
+ * @param useHwAddr Whether to use 12 bit hardware address, or
+ *                  board,altro,channel 
+ * @param few       Only do a few - 1 detector, one sector 
  */
 void
-TestHWMap()
+TestHWMap(bool useHwAddr=false, bool few=false)
 {
+  AliCDBManager* cdb = AliCDBManager::Instance();
+  cdb->SetDefaultStorage("local://${ALICE_ROOT}/OCDB");
+  cdb->SetRun(0);
+
   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);
+  param->Init(true, AliFMDParameters::kAltroMap);
+  param->SetSampleRate(2);
+  AliLog::SetModuleDebugLevel("FMD", 51);
+
+  UInt_t ol = 0, ow = 0xFFFFFFFF;
+  UShort_t nd = (few ? 1 : 3); 
+  for (UShort_t d = 1; d <= nd; d++) {
+    UShort_t nr = (d == 1 ? 1 : 2);
+    for (UShort_t q = 0; q < nr; q++) {
+      Char_t r  = (q ==   0 ? 'I' : 'O');
+      Int_t  ns = (few ? 1 : (r == 'I' ?  20 :  40));
+      Int_t  nt =            (r == 'I' ? 512 : 256);
+      for (UShort_t s = 0; s < ns; s++) {
+       for (UShort_t t = 0; t < nt; t++) {
+         Int_t nsam = param->GetSampleRate(d, r, s, t);
+         for (UShort_t n=0; n < nsam; n++) {
+           UShort_t l, b, a, c, w, tb;
+           bool ret = true;
+           if (useHwAddr) 
+             ret = param->Detector2Hardware(d, r, s, t, n, l, w, tb);
+           else {
+             ret = param->Detector2Hardware(d, r, s, t, n, l, b, a, c, tb);
+             w   = Channel2HwAddr(b, a, c);
+           }
+           if (!ret) {
+             Warning("TestHWMap", "detector to hardware failed on %s", 
+                     Det2Str(d, r, s, t, n));
+             continue;
+           }
+           UShort_t od, os, on;
+           Short_t  ot;
+           Char_t   oR;
+           if (useHwAddr) 
+             ret = param->Hardware2Detector(l,w,tb,od,oR,os,ot,on);
+           else 
+             ret = param->Hardware2Detector(l,b,a,c,tb,od,oR,os,ot,on);
+           if (!ret) {
+             Warning("TestHWMap", "hardware to detector failed on %s", 
+                     Addr2Str(l, w, tb));
+             continue;
+           }
+           bool print = few;
+           if (ol != l || ow != w) {
+             print = true;
+             ol    = l;
+             ow    = w;
+           }
+           if (!CheckTrans(d,r,s,t,n,od,oR,os,ot,on)) print = true;
+           if (print) {
+             if (useHwAddr)  
+               PrintTrans(d,r,s,t,n,l,w,tb,od,oR,os,ot,on);
+             else
+               PrintTrans(d,r,s,t,n,l,b,a,c,tb,od,oR,os,ot,on);
+           }
+         } // Loop over samples
        }// Loop over strips
       } // Loop over sectors
     } // Loop over rings