]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDInput.h
Protection added.
[u/mrichter/AliRoot.git] / FMD / AliFMDInput.h
index 7434a3bfcade0cc4c33dfc17590223ae88dbef6b..214879c1a19f7dc867702e220f8e8662eee68806 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 AliTrackReference;
 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 +100,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 +113,10 @@ public:
     kRecPoints,       // Reconstructed points
     kESD,             // Load ESD's
     kRaw,             // Read raw data 
-    kGeometry         // Not really a tree 
+    kGeometry,        // Not really a tree 
+    kTrackRefs,       // Track references - also for BG study
+    kRawCalib,        // Read raws and calibrate them
+    kUser
   };
   /** CTOR  */
   AliFMDInput();
@@ -137,12 +158,24 @@ public:
   virtual Bool_t Finish() { return kTRUE; }
   /** Run a full job. 
       @return @c false on error  */
-  virtual Bool_t Run();
+  virtual Bool_t Run(UInt_t maxEvents=0);
 
   /** Loop over all hits, and call ProcessHit with that hit, and
       optionally the corresponding kinematics track. 
       @return @c false on error  */
   virtual Bool_t ProcessHits();
+  /** Loop over all track refs, and call ProcessTrackRef with that hit, and
+      optionally the corresponding kinematics track. 
+      @return @c false on error  */
+  virtual Bool_t ProcessTrackRefs();
+  /** 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 tracks, and call ProcessTrack with each hit for
+      that track
+      @return @c false on error  */
+  virtual Bool_t ProcessStack();
   /** Loop over all digits, and call ProcessDigit for each digit.
       @return @c false on error  */
   virtual Bool_t ProcessDigits();
@@ -154,113 +187,208 @@ public:
       ProcessRawDigit for each digit. 
       @return @c false on error  */
   virtual Bool_t ProcessRawDigits();
+  /** Loop over all digits read from raw data files, and call
+      ProcessRawDigit for each digit. 
+      @return @c false on error  */
+  virtual Bool_t ProcessRawCalibDigits();
   /** Loop over all reconstructed points, and call ProcessRecPoint for
       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();
+  /** Loop over all strips and ask user routine to supply the data.
+      @return  @c false on error  */
+  virtual Bool_t ProcessUsers();
 
   /** 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*, TParticle*)  { return kTRUE; }
-  /** Process one digit.  Users should over this to process each digit. 
+  virtual Bool_t ProcessHit(AliFMDHit* h, TParticle* p);
+  /** Process one track reference, and optionally it's corresponding kinematics
+      track.  Users should overload this to process each track reference. 
+      @param trackRef Track Reference 
+      @param track Associated track
       @return  @c false on error   */
-  virtual Bool_t ProcessDigit(AliFMDDigit*)          { return kTRUE; }
+  virtual Bool_t ProcessTrackRef(AliTrackReference* trackRef, TParticle* track);
+  /** 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 ProcessTrack(Int_t i, TParticle* p, AliFMDHit* h);
+  /** Process stack particle 
+      @param i Track number 
+      @param p Track  
+      @return  @c false on error   */
+  virtual Bool_t ProcessParticle(Int_t i , TParticle* p);
+  /** Process one digit.  Users should over this to process each
+      digit. 
+      @param digit Digit
+      @return  @c false on error   */
+  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* 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 ProcessSDigit(AliFMDSDigit*)        { return kTRUE; }
+  virtual Bool_t ProcessRawDigit(AliFMDDigit* digit);
   /** 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 ProcessRawCalibDigit(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
-};
-
-
-//____________________________________________________________________
-class AliFMDHit;
-class AliFMDInputHits : public AliFMDInput 
-{
-public:
-  AliFMDInputHits(const char* file="galice.root") 
-    : AliFMDInput(file) { AddLoad(kHits); }
-  ClassDef(AliFMDInputHits, 0);
-};
+  virtual Bool_t ProcessESD(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
+                           Float_t eta, Float_t mult);
+  /** Process User 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 v    Value
+      @return  @c false on error  */
+  virtual Bool_t ProcessUser(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
+                            Float_t v);
+  /** 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 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),
+      fTreeTR(0),
+      fTreeD(0),
+      fTreeS(0),
+      fTreeR(0),
+      fTreeA(0),
+      fChainE(0),
+      fArrayE(0),
+      fArrayH(0),
+      fArrayTR(0),
+      fArrayD(0),
+      fArrayS(0),
+      fArrayR(0),
+      fArrayA(0),
+      fHeader(0),
+      fGeoManager(0),
+      fTreeMask(0),
+      fRawFile(""),      
+      fIsInit(kFALSE),
+      fEventCount(0),
+      fNEvents(-1)
+  {}
+  /** Assignement operator 
+      @return  REference to this */
+  AliFMDInput& operator=(const AliFMDInput&) { return *this; }
+  /** 
+   * Get user supplued data
+   * 
+   * @param d Detector
+   * @param r Ring
+   * @param s Sector
+   * @param t Strip
+   * 
+   * @return Value
+   */
+  virtual Float_t GetSignal(UShort_t d, Char_t r, UShort_t s, UShort_t t);
 
-//____________________________________________________________________
-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*           fTreeTR;     // Track Reference 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*    fArrayTR;    // 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 
+  Int_t            fNEvents;    // The maximum number of events
+  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::ProcessTrackRef(AliTrackReference*, 
+                                          TParticle*) { return kTRUE; }
+inline Bool_t AliFMDInput::ProcessTrack(Int_t,TParticle*,
+                                       AliFMDHit*) { return kTRUE; }
+inline Bool_t AliFMDInput::ProcessParticle(Int_t,TParticle*) { 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::ProcessRawCalibDigit(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; }
+inline Bool_t AliFMDInput::ProcessUser(UShort_t,Char_t,UShort_t,UShort_t,
+                                      Float_t) { return kTRUE; }
+inline Float_t AliFMDInput::GetSignal(UShort_t, Char_t, UShort_t, UShort_t) { 
+  return 0.; }
 
-//____________________________________________________________________
-class AliFMDRecPoint;
-class AliFMDInputRecPoints : public AliFMDInput 
-{
-public:
-  AliFMDInputRecPoints(const char* file="galice.root") 
-    : AliFMDInput(file) { AddLoad(kRecPoints); }
-  ClassDef(AliFMDInputRecPoints, 0);
-};
 
 #endif
 //____________________________________________________________________