]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDBaseDigit.cxx
Adding TOF calib task for calibration of problematic channels
[u/mrichter/AliRoot.git] / FMD / AliFMDBaseDigit.cxx
index f570effc8d0ce9c9b1b8dd1587722d45d3b1e6e0..48481765d5a19b3052c95b9d9acebb3ffc80ed2e 100644 (file)
@@ -1,4 +1,4 @@
-/**************************************************************************
+/*************************************************************************
  * Copyright(c) 2004, ALICE Experiment at CERN, All rights reserved. *
  *                                                                        *
  * Author: The ALICE Off-line Project.                                    *
  * appear in the supporting documentation. The authors make no claims     *
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-/* $Id$ */
-/** @file    AliFMDBaseDigit.cxx
-    @author  Christian Holm Christensen <cholm@nbi.dk>
-    @date    Mon Mar 27 12:37:41 2006
-    @brief   Digits for the FMD 
-    @ingroup FMD_base
-*/
+ *************************************************************************
+ * $Id$ */
+/**
+ * @file    AliFMDBaseDigit.cxx
+ * @author  Christian Holm Christensen <cholm@nbi.dk>
+ * @date    Mon Mar 27 12:37:41 2006
+ * @brief   Digits for the FMD 
+ * @ingroup FMD_base
+ */
 //////////////////////////////////////////////////////////////////////
 //
 //  Digits classes for the FMD                
 //////////////////////////////////////////////////////////////////////
 
 #include "AliFMDBaseDigit.h"   // ALIFMDDIGIT_H
+#include "AliFMDStripIndex.h"
 #include "Riostream.h"         // ROOT_Riostream
-#include <TString.h>
-#include <AliLog.h>
+// #include <TString.h>
+// #include <AliLog.h>
+#include "AliFMDDebug.h" // Better debug macros
 
 //====================================================================
+using std::cout;
+using std::flush;
 ClassImp(AliFMDBaseDigit)
 #if 0
   ; // This is here to keep Emacs from indenting the next line
@@ -79,18 +84,25 @@ AliFMDBaseDigit::AliFMDBaseDigit()
   : fDetector(0), 
     fRing('\0'), 
     fSector(0), 
-    fStrip(0)
-{}
+    fStrip(0), 
+    fName("")
+{
+  // 
+  // CTOR 
+  //
+}
 
 //____________________________________________________________________
 AliFMDBaseDigit::AliFMDBaseDigit(UShort_t detector, 
-                        Char_t   ring, 
-                        UShort_t sector, 
-                        UShort_t strip)
-  : fDetector(detector), 
+                                Char_t   ring, 
+                                UShort_t sector, 
+                                UShort_t strip)
+  : AliDigit(), 
+    fDetector(detector), 
     fRing(ring), 
     fSector(sector), 
-    fStrip(strip)
+    fStrip(strip),
+    fName("")
 {
   //
   // Creates a base data digit object
@@ -103,12 +115,39 @@ AliFMDBaseDigit::AliFMDBaseDigit(UShort_t detector,
   //    strip    Strip # (For inner/outer rings: 0-511/0-255)
 }
 
+//____________________________________________________________________
+AliFMDBaseDigit::AliFMDBaseDigit(Int_t*   tracks, 
+                                UShort_t detector, 
+                                Char_t   ring, 
+                                UShort_t sector, 
+                                UShort_t strip)
+  : AliDigit(tracks), 
+    fDetector(detector), 
+    fRing(ring), 
+    fSector(sector), 
+    fStrip(strip),
+    fName("")
+{
+  //
+  // Creates a base data digit object
+  //
+  // Parameters 
+  //
+  //    tracks    Array of 3 track labels
+  //    detector  Detector # (1, 2, or 3)                      
+  //    ring     Ring ID ('I' or 'O')
+  //    sector   Sector # (For inner/outer rings: 0-19/0-39)
+  //    strip    Strip # (For inner/outer rings: 0-511/0-255)
+}
+
 //____________________________________________________________________
 void
 AliFMDBaseDigit::Print(Option_t* /* option*/) const 
 {
   // Print digit to standard out 
-  cout << ClassName() << ": FMD" << GetName() << flush;
+  cout << ClassName() << ": FMD" << fDetector << fRing 
+       << '[' << std::setw(2) << fSector 
+       << ',' << std::setw(3) << fStrip << ']' << flush;
 }
 
 //____________________________________________________________________
@@ -128,9 +167,14 @@ AliFMDBaseDigit::GetName() const
 ULong_t
 AliFMDBaseDigit::Hash() const
 {
+  // Calculate a hash value based on the detector coordinates. 
+#if 1  
+  return AliFMDStripIndex::Pack(fDetector, fRing, fSector, fStrip);
+#else
   size_t ringi = (fRing == 'I' ||  fRing == 'i' ? 0 : 1);
   return fStrip + fMaxStrips * 
     (fSector + fMaxSectors * (ringi + fMaxRings * (fDetector - 1)));
+#endif
 }
 
 
@@ -138,6 +182,18 @@ AliFMDBaseDigit::Hash() const
 Int_t
 AliFMDBaseDigit::Compare(const TObject* o) const
 {
+  // Compare to other digit.  If the passed pointer to TObject does
+  // not point to an object of class AliFMDBaseDigit (or one of it's
+  // derived classes), then a fatal exception is made. 
+  // 
+  // Returns -1, if this object's detector coordinates are smaller
+  // than passed object's detector coordinates. 
+  // 
+  // Returns  0, if this object's detector coordinates is the same as
+  // passed object's detector coordinates.  
+  // 
+  // Returns  1, if this object's detector coordinates are larger
+  // than passed object's detector coordinates. 
   if (!o) 
     AliFatal("Can not compare to NULL!");
   if (o->IsA() != AliFMDBaseDigit::Class()) 
@@ -148,6 +204,42 @@ AliFMDBaseDigit::Compare(const TObject* o) const
   return 1;
 }
 
+//____________________________________________________________________
+void
+AliFMDBaseDigit::AddTrack(Int_t track)
+{
+  // 
+  // Add a track referenc
+  // 
+  // Parameters:
+  //    trackno The track number
+  //  
+  if      (fTracks[0] == -1) fTracks[0] = track;
+  else if (fTracks[1] == -1) fTracks[1] = track;
+  else if (fTracks[2] == -1) fTracks[2] = track;
+  else 
+    AliFMDDebug(1, ("While adding track label to %s for %s: "
+                   "All 3 track labels used, can't add "
+                   "reference to track %d",
+                   ClassName(), GetName(), track));
+}
+
+//____________________________________________________________________
+UShort_t
+AliFMDBaseDigit::GetNTrack() const
+{
+  // 
+  // Get the number of track references (max 3)
+  // 
+  // 
+  // Return:
+  //    Number of valid track references. 
+  //
+  for (Int_t i = 3; i > 0; i--) 
+    if (fTracks[i-1] != -1) return i;
+  return 0;
+}
+
 
 //____________________________________________________________________
 //