]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDInput.h
Fixes for reading zero-suppressed data. These should be propagated to
[u/mrichter/AliRoot.git] / FMD / AliFMDInput.h
index 7434a3bfcade0cc4c33dfc17590223ae88dbef6b..d284ad31fb6c3573124c0c39a2220ee42f66fed3 100644 (file)
@@ -6,6 +6,18 @@
  * See cxx source for full Copyright notice                               
  */
 //___________________________________________________________________
+//
+// The classes defined here, are utility classes for reading in data
+// for the FMD.  They are  put in a seperate library to not polute the
+// normal libraries.  The classes are intended to be used as base
+// classes for customized class that do some sort of analysis on the
+// various types of data produced by the FMD. 
+/** @file    AliFMDInput.h
+    @author  Christian Holm Christensen <cholm@nbi.dk>
+    @date    Mon Mar 27 12:42:40 2006
+    @brief   FMD utility classes for reading FMD data
+*/
+//___________________________________________________________________
 /** @defgroup FMD_util Utility classes. 
 
     The classes defined here, are utility classes for reading in data
     classes for customized class that do some sort of analysis on the
     various types of data produced by the FMD.
 */
-#include <TObject.h>
+#include <TNamed.h>
 #ifndef ROOT_TString
 # include <TString.h>
 #endif
+#ifndef ROOT_TArrayF
+# include <TArrayF.h>
+#endif
 class AliRunLoader;
 class AliLoader;
 class AliStack;
 class AliRun;
 class AliRawReader;
+class AliFMDRawReader;
 class AliFMD;
 class AliFMDHit;
 class AliFMDDigit;
 class AliFMDSDigit;
 class AliFMDRecPoint;
-class AliESD;
+class AliESDEvent;
 class AliESDFMD;
+class AliHeader;
 class TString;
 class TClonesArray;
 class TTree;
@@ -82,7 +99,7 @@ class TChain;
     various scripts in @c FMD/scripts. 
     @ingroup FMD_util
  */
-class AliFMDInput : public TObject
+class AliFMDInput : public TNamed
 {
 public:
   /** The kinds of data that can be read in. */
@@ -95,7 +112,8 @@ public:
     kRecPoints,       // Reconstructed points
     kESD,             // Load ESD's
     kRaw,             // Read raw data 
-    kGeometry         // Not really a tree 
+    kGeometry,        // Not really a tree 
+    kTracks          // Hits and tracs - for BG study  
   };
   /** CTOR  */
   AliFMDInput();
@@ -143,6 +161,10 @@ public:
       optionally the corresponding kinematics track. 
       @return @c false on error  */
   virtual Bool_t ProcessHits();
+  /** Loop over all tracks, and call ProcessTrack with each hit for
+      that track
+      @return @c false on error  */
+  virtual Bool_t ProcessTracks();
   /** Loop over all digits, and call ProcessDigit for each digit.
       @return @c false on error  */
   virtual Bool_t ProcessDigits();
@@ -158,109 +180,146 @@ public:
       each reconstructed point. 
       @return @c false on error  */
   virtual Bool_t ProcessRecPoints();
+  /** Loop over all ESD data, and call ProcessESD for each entry.
+      @return  @c false on error  */
+  virtual Bool_t ProcessESDs();
 
   /** Process one hit, and optionally it's corresponding kinematics
       track.  Users should over this to process each hit. 
+      @param h Hit 
+      @param p Associated track
+      @return  @c false on error   */
+  virtual Bool_t ProcessHit(AliFMDHit* h, TParticle* p);
+  /** Process one hit per track. Users should over this to process
+      each hit. 
+      @param i Track number 
+      @param p Track  
+      @param h Associated Hit
       @return  @c false on error   */
-  virtual Bool_t ProcessHit(AliFMDHit*, TParticle*)  { return kTRUE; }
-  /** Process one digit.  Users should over this to process each digit. 
+  virtual Bool_t ProcessTrack(Int_t i, TParticle* p, AliFMDHit* h);
+  /** Process one digit.  Users should over this to process each
+      digit. 
+      @param digit Digit
       @return  @c false on error   */
-  virtual Bool_t ProcessDigit(AliFMDDigit*)          { return kTRUE; }
+  virtual Bool_t ProcessDigit(AliFMDDigit* digit);
   /** Process one summable digit.  Users should over this to process
       each summable digit.  
+      @param sdigit Summable digit
       @return  @c false on error   */
-  virtual Bool_t ProcessSDigit(AliFMDSDigit*)        { return kTRUE; }
+  virtual Bool_t ProcessSDigit(AliFMDSDigit* sdigit);
   /** Process one digit from raw data files.  Users should over this
       to process each raw digit.  
+      @param digit Raw digit
       @return  @c false on error   */
-  virtual Bool_t ProcessRawDigit(AliFMDDigit*)       { return kTRUE; }
+  virtual Bool_t ProcessRawDigit(AliFMDDigit* digit);
   /** Process one reconstructed point.  Users should over this to
       process each reconstructed point.  
+      @param point Reconstructed point 
       @return  @c false on error   */
-  virtual Bool_t ProcessRecPoint(AliFMDRecPoint*)    { return kTRUE; }
+  virtual Bool_t ProcessRecPoint(AliFMDRecPoint* point);
   /** Process ESD data for the FMD.  Users should overload this to
       deal with ESD data. 
+      @param d    Detector number (1-3)
+      @param r    Ring identifier ('I' or 'O')
+      @param s    Sector number (0-19, or 0-39)
+      @param t    Strip number (0-511, or 0-255)
+      @param eta  Psuedo-rapidity 
+      @param mult Psuedo-multiplicity 
       @return  @c false on error  */
-  virtual Bool_t ProcessESD(AliESDFMD*)              { return kTRUE; }
-  
-protected:
-  TString       fGAliceFile; // File name of gAlice file
-  AliRunLoader* fLoader;     // Loader of FMD data 
-  AliRun*       fRun;        // Run information
-  AliStack*     fStack;      // Stack of particles 
-  AliLoader*    fFMDLoader;  // Loader of FMD data 
-  AliRawReader* fReader;     // Raw data reader 
-  AliFMD*       fFMD;        // FMD object
-  AliESD*       fMainESD;    // ESD Object
-  AliESDFMD*    fESD;        // FMD ESD data  
-  TTree*        fTreeE;      // Header tree 
-  TTree*        fTreeH;      // Hits tree
-  TTree*        fTreeD;      // Digit tree 
-  TTree*        fTreeS;      // SDigit tree 
-  TTree*        fTreeR;      // RecPoint tree
-  TTree*        fTreeA;      // Raw data tree
-  TChain*       fChainE;     // Chain of ESD's
-  TClonesArray* fArrayE;     // Event info array
-  TClonesArray* fArrayH;     // Hit info array
-  TClonesArray* fArrayD;     // Digit info array
-  TClonesArray* fArrayS;     // SDigit info array
-  TClonesArray* fArrayR;     // Rec points info array
-  TClonesArray* fArrayA;     // Raw data (digits) info array
-  TGeoManager*  fGeoManager; // Geometry manager
-  Int_t         fTreeMask;   // Which tree's to load
-  Bool_t        fIsInit;
-  ClassDef(AliFMDInput,0)  //Hits for detector FMD
-};
-
+  virtual Bool_t ProcessESD(UShort_t, Char_t, UShort_t, UShort_t, 
+                           Float_t, Float_t);
+  /** Service function to make a logarithmic axis. 
+      @param n    Number of bins 
+      @param min  Minimum of axis 
+      @param max  Maximum of axis. 
+      @return An array with the bin boundaries. */
+  static TArrayF MakeLogScale(Int_t n, Double_t min, Double_t max);
 
-//____________________________________________________________________
-class AliFMDHit;
-class AliFMDInputHits : public AliFMDInput 
-{
-public:
-  AliFMDInputHits(const char* file="galice.root") 
-    : AliFMDInput(file) { AddLoad(kHits); }
-  ClassDef(AliFMDInputHits, 0);
-};
-
-//____________________________________________________________________
-class AliFMDDigit;
-class AliFMDInputDigits : public AliFMDInput 
-{
-public:
-  AliFMDInputDigits(const char* file="galice.root")
-    : AliFMDInput(file) { AddLoad(kDigits); }
-  ClassDef(AliFMDInputDigits, 0);
-};
+  /** Set the raw data input 
+      @param file File name - if empty, assume simulated raw. */
+  void SetRawFile(const char* file) { if (file) fRawFile = file; }
+     
+protected:
+  /** Copy ctor 
+      @param o Object to copy from  */
+  AliFMDInput(const AliFMDInput& o) 
+    : TNamed(o),
+      fGAliceFile(""),
+      fLoader(0),
+      fRun(0),
+      fStack(0),
+      fFMDLoader(0),
+      fReader(0),
+      fFMDReader(0),
+      fFMD(0),
+      fESD(0),
+      fESDEvent(0),
+      fTreeE(0),
+      fTreeH(0),
+      fTreeD(0),
+      fTreeS(0),
+      fTreeR(0),
+      fTreeA(0),
+      fChainE(0),
+      fArrayE(0),
+      fArrayH(0),
+      fArrayD(0),
+      fArrayS(0),
+      fArrayR(0),
+      fArrayA(0),
+      fHeader(0),
+      fGeoManager(0),
+      fTreeMask(0),
+      fRawFile(""),      
+      fIsInit(kFALSE),
+      fEventCount(0)
+  {}
+  /** Assignement operator 
+      @return  REference to this */
+  AliFMDInput& operator=(const AliFMDInput&) { return *this; }
 
-//____________________________________________________________________
-class AliFMDSDigit;
-class AliFMDInputSDigits : public AliFMDInput 
-{
-public:
-  AliFMDInputSDigits(const char* file="galice.root") 
-    : AliFMDInput(file) { AddLoad(kSDigits); }
-  ClassDef(AliFMDInputSDigits, 0);
+  TString          fGAliceFile; // File name of gAlice file
+  AliRunLoader*    fLoader;     // Loader of FMD data 
+  AliRun*          fRun;        // Run information
+  AliStack*        fStack;      // Stack of particles 
+  AliLoader*       fFMDLoader;  // Loader of FMD data 
+  AliRawReader*    fReader;     // Raw data reader 
+  AliFMDRawReader* fFMDReader;  // FMD raw reader
+  AliFMD*          fFMD;        // FMD object
+  AliESDFMD*       fESD;        // FMD ESD data  
+  AliESDEvent*     fESDEvent;   // ESD Event object. 
+  TTree*           fTreeE;      // Header tree 
+  TTree*           fTreeH;      // Hits tree
+  TTree*           fTreeD;      // Digit tree 
+  TTree*           fTreeS;      // SDigit tree 
+  TTree*           fTreeR;      // RecPoint tree
+  TTree*           fTreeA;      // Raw data tree
+  TChain*          fChainE;     // Chain of ESD's
+  TClonesArray*    fArrayE;     // Event info array
+  TClonesArray*    fArrayH;     // Hit info array
+  TClonesArray*    fArrayD;     // Digit info array
+  TClonesArray*    fArrayS;     // SDigit info array
+  TClonesArray*    fArrayR;     // Rec points info array
+  TClonesArray*    fArrayA;     // Raw data (digits) info array
+  AliHeader*       fHeader;     // Header 
+  TGeoManager*     fGeoManager; // Geometry manager
+  Int_t            fTreeMask;   // Which tree's to load
+  TString          fRawFile;    // Raw input file
+  Bool_t           fIsInit;     // Have we been initialized 
+  Int_t            fEventCount; // Event counter 
+  ClassDef(AliFMDInput,0)  //Hits for detector FMD
 };
 
-//____________________________________________________________________
-class AliFMDInputRaw : public AliFMDInput 
-{
-public:
-  AliFMDInputRaw(const char* file="galice.root") 
-    : AliFMDInput(file) { AddLoad(kRaw); }
-  ClassDef(AliFMDInputRaw, 0);
-};
+inline Bool_t AliFMDInput::ProcessHit(AliFMDHit*,TParticle*) { return kTRUE; }
+inline Bool_t AliFMDInput::ProcessTrack(Int_t,TParticle*,
+                                       AliFMDHit*) { return kTRUE; }
+inline Bool_t AliFMDInput::ProcessDigit(AliFMDDigit*) { return kTRUE; }
+inline Bool_t AliFMDInput::ProcessSDigit(AliFMDSDigit*) { return kTRUE; }
+inline Bool_t AliFMDInput::ProcessRawDigit(AliFMDDigit*) { return kTRUE; }
+inline Bool_t AliFMDInput::ProcessRecPoint(AliFMDRecPoint*) { return kTRUE; }
+inline Bool_t AliFMDInput::ProcessESD(UShort_t,Char_t,UShort_t,UShort_t,
+                                     Float_t,Float_t) { return kTRUE; }
 
-//____________________________________________________________________
-class AliFMDRecPoint;
-class AliFMDInputRecPoints : public AliFMDInput 
-{
-public:
-  AliFMDInputRecPoints(const char* file="galice.root") 
-    : AliFMDInput(file) { AddLoad(kRecPoints); }
-  ClassDef(AliFMDInputRecPoints, 0);
-};
 
 #endif
 //____________________________________________________________________