Fixes for #87043: FMD crashes RAW OCDB simulation (Christian)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 25 Sep 2011 13:14:50 +0000 (13:14 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 25 Sep 2011 13:14:50 +0000 (13:14 +0000)
STEER/ESD/AliFMDFloatMap.cxx
STEER/ESD/AliFMDFloatMap.h
STEER/ESD/AliFMDMap.cxx
STEER/ESD/AliFMDMap.h

index 2adf971..4f0e7b9 100755 (executable)
 // Created Mon Nov  8 12:51:51 2004 by Christian Holm Christensen
 // 
 #include "AliFMDFloatMap.h"    //ALIFMDFLOATMAP_H
-namespace {
-  class Printer : public AliFMDMap::ForOne
-  {
-  public:
-    Printer(const char* format) 
-      : fFormat(format), fOldD(0), fOldR('-'), fOldS(1024) {}
-    Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
-                     Float_t m)
-    {
-      if (d != fOldD) { 
-       fOldD = d;
-       fOldR = '-';
-       if (d != 0) printf("\n");
-       printf("FMD%d", fOldD);
-      }
-      if (r != fOldR) {
-       fOldR = r;
-       fOldS = 1024;
-       printf("\n %s ring", (r == 'I' ? "Inner" : "Outer"));
-      }
-      if (s != fOldS) { 
-       fOldS = s;
-       printf("\n  Sector %2d", fOldS);
-      }
-      if (t % 4 == 0) printf("\n   %3d-%3d ", t, t+3);
-      printf(fFormat, m);
-      // if (t % 4 == 3) printf("\n");
-
-      return kTRUE;
-    }
-    Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t)
-    {
-      return kTRUE;
-    }
-    Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, UShort_t)
-    {
-      return kTRUE;
-    }
-    Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Bool_t)
-    {
-      return kTRUE;
-    }
-  private:
-    Printer(const Printer& p) 
-      : AliFMDMap::ForOne(p),
-       fFormat(p.fFormat), 
-       fOldD(p.fOldD), 
-       fOldR(p.fOldR), 
-       fOldS(p.fOldS) 
-    {}
-    Printer& operator=(const Printer&) { return *this; }
-    const char* fFormat;
-    UShort_t    fOldD;
-    Char_t      fOldR;
-    UShort_t    fOldS;
-  };
-}
 //__________________________________________________________
 ClassImp(AliFMDFloatMap)
 #if 0
@@ -186,16 +129,6 @@ AliFMDFloatMap::Reset(const Float_t& val)
 }
 
 //__________________________________________________________
-void
-AliFMDFloatMap::Print(Option_t* option) const
-{
-  // Print contents of map
-  if (!option || option[0] == '\0') TObject::Print();
-  Printer p(option);
-  ForEach(p);
-  printf("\n");
-}
-//__________________________________________________________
 Float_t&
 AliFMDFloatMap::operator()(UShort_t det, 
                           Char_t   ring, 
index c9a772f..4c38598 100755 (executable)
@@ -39,7 +39,8 @@ public:
                                    UShort_t sec,
                                    UShort_t str) const;
   Float_t* Data() const { return fData; }
-  void Print(Option_t* option="%8.4f") const;
+  void Print(Option_t* option="%8.4f") const { AliFMDMap::Print(option); }
+  void* Ptr() const { return reinterpret_cast<void*>(fData); }
 protected:
   Int_t    MaxIndex() const { return fTotal; }
   Float_t  AtAsFloat(Int_t i) const { return fData[i]; } 
index 8e7a2a0..f0b3717 100755 (executable)
@@ -357,6 +357,88 @@ AliFMDMap::ForEach(ForOne& algo) const
   return ret;
 }
 
+//__________________________________________________________
+void
+AliFMDMap::Print(Option_t* option) const
+{
+  // Print contents of map
+  if (!option || option[0] == '\0') TObject::Print();
+  Printer p(option);
+  ForEach(p);
+  printf("\n");
+}
+
+//===================================================================
+AliFMDMap::Printer::Printer(const char* format)
+  : fFormat(format), fOldD(0), fOldR('-'), fOldS(1024) 
+{}
+
+//___________________________________________________________________
+AliFMDMap::Printer::Printer(const Printer& p) 
+  : AliFMDMap::ForOne(p),
+    fFormat(p.fFormat), 
+    fOldD(p.fOldD), 
+    fOldR(p.fOldR), 
+    fOldS(p.fOldS) 
+{}
+//___________________________________________________________________
+void
+AliFMDMap::Printer::PrintHeadings(UShort_t d, Char_t r, UShort_t s, UShort_t t) 
+{
+  if (d != fOldD) { 
+    fOldD = d;
+    fOldR = '-';
+    if (d != 0) printf("\n");
+    printf("FMD%d", fOldD);
+  }
+  if (r != fOldR) {
+    fOldR = r;
+    fOldS = 1024;
+    printf("\n %s ring", (r == 'I' ? "Inner" : "Outer"));
+  }
+  if (s != fOldS) { 
+    fOldS = s;
+    printf("\n  Sector %2d", fOldS);
+  }
+  if (t % 4 == 0) printf("\n   %3d-%3d ", t, t+3);
+}
+//___________________________________________________________________
+Bool_t
+AliFMDMap::Printer::operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
+                              Float_t m)
+{
+  PrintHeadings(d, r, s, t);
+  printf(fFormat, m);
+  return kTRUE;
+}
+//___________________________________________________________________
+Bool_t
+AliFMDMap::Printer::operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
+                              Int_t m)
+{
+  PrintHeadings(d, r, s, t);
+  printf(fFormat, m);
+  return kTRUE;
+}
+//___________________________________________________________________
+Bool_t
+AliFMDMap::Printer::operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
+                              UShort_t m)
+{
+  PrintHeadings(d, r, s, t);
+  printf(fFormat, m);
+  return kTRUE;
+}
+//___________________________________________________________________
+Bool_t
+AliFMDMap::Printer::operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
+                              Bool_t m)
+{
+  PrintHeadings(d, r, s, t);
+  printf(fFormat, int(m));
+  return kTRUE;
+}
+
 #if 0
 //___________________________________________________________________
 void AliFMDMap::Streamer(TBuffer &R__b)
index f25f736..57c6526 100755 (executable)
@@ -123,6 +123,78 @@ public:
     virtual Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
                              Bool_t v);
   };
+  /**
+   * Class to print content of map 
+   * 
+   */
+  class Printer : public ForOne
+  {
+  public:
+    /** 
+     * Constructor 
+     * 
+     * @param format Output format (argument to printf)
+     */
+    Printer(const char* format);
+    /** 
+     * Destructor 
+     */
+    virtual ~Printer() {}
+    /** 
+     * Print a floating point entry
+     * 
+     * @return true
+     */
+    Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t m);
+    /** 
+     * Print a integer entry
+     * 
+     * @return true
+     */
+    Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Int_t m);
+    /** 
+     * Print a integer entry
+     * 
+     * @return true
+     */
+    Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, UShort_t m);
+    /** 
+     * Print a boolean entry
+     * 
+     * @return true
+     */
+    Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Bool_t m);
+  private:
+    /** 
+     * Copy constructor
+     * 
+     * @param p Object to copy from 
+     */
+    Printer(const Printer& p);
+    /** 
+     * Assignment operator
+     * 
+     * @return Reference to this 
+     */
+    Printer& operator=(const Printer&) { return *this; }
+    /** 
+     * Print headings 
+     * 
+     * @param d Current detector
+     * @param r Current ring 
+     * @param s Current sector
+     * @param t Current strip
+     */
+    virtual void PrintHeadings(UShort_t d, Char_t r, UShort_t s, UShort_t t);
+    /** Printf like format */
+    const char* fFormat;
+    /** Last detector */
+    UShort_t    fOldD;
+    /** Last ring */
+    Char_t      fOldR;
+    /** Last sector */
+    UShort_t    fOldS;
+  };
 
   /** 
    * Constructor 
@@ -246,6 +318,12 @@ public:
    */
   virtual Int_t MaxIndex() const = 0;
   /** 
+   * Print content of the map 
+   * 
+   * @param option If not null or empty string, print map 
+   */
+  virtual void Print(Option_t* option="") const;
+  /** 
    * Virtal function to get the value at index @a idx as a floating
    * point number.  
    * 
@@ -381,7 +459,12 @@ public:
    * @return @c true if the map is boolean valued 
    */
   virtual Bool_t IsBool() const { return kFALSE; }
-
+  /** 
+   * Get raw data pointer. 
+   * 
+   * @return Raw data pointer 
+   */
+  virtual void* Ptr() const = 0;
   enum {
     /** In case of version 2 of this class, this bit should be set. */
     kNeedUShort = 14