ROOT logo
#ifndef ALIRSNLISTOUTPUT_H
#define ALIRSNLISTOUTPUT_H

//
// Class AliRsnListOutput
//
// This class defines a base classe to implement a Output
// which uses the internal RSN package event format (AliRsnEvent).
// It contains some default flags which turn out to be useful:
//  - a flag to select only the "true" pairs (tracks from same resonance)
//  - a flag to know if the computation is done over two events (mixing)
//
// Any kind of analysis object should be implemented as inheriting from this
// because the AliRsnAnalyzer which executes the analysis will accept a collection
// of such objects, in order to have a unique format of processing method
//
// The user who implements a kind of computation type should inherit from
// this class and override the virtual Outputs defined in it, which
// initialize the final output histogram and define how to process data.
//
//
// author: A. Pulvirenti             (email: alberto.pulvirenti@ct.infn.it)
//

#include <TRef.h>
#include <TNamed.h>
#include <TArrayI.h>
#include <TObjArray.h>

#include <TH1.h>
#include <TH2.h>
#include <TH3.h>
#include <TNtuple.h>
#include <THnSparse.h>
#include <Rtypes.h>

class AliCFContainer;
class AliRsnValue;
class AliRsnDaughter;
class AliRsnEvent;
class AliRsnListOutput : public TNamed {

public:

   enum EOut {
      kHistoDefault,
      kHistoSparse,
      kCFContainer
   };

   AliRsnListOutput(const char *name = "", EOut type = kHistoDefault);
   AliRsnListOutput(const AliRsnListOutput &copy);
   AliRsnListOutput &operator=(const AliRsnListOutput &copy);
   virtual ~AliRsnListOutput();

   EOut            GetType() const         {return  fType;}
   Int_t           GetSteps() const        {return  fSteps;}
   TObjArray      *GetValues()             {return &fValues;}
   Int_t           GetNValues()            {return (fNValues = fValues.GetEntries());}
   AliRsnValue    *GetValue(Int_t i) const {return (AliRsnValue *)fValues[i];}
   Int_t           GetIndex() const        {return  fIndex;}
   Bool_t          GetFillHistogramOnlyInRange() { return fCheckHistRange; }
   void            SetType(EOut type)      {fType = type;}
   void            SetSteps(Int_t n)       {fSteps = n;}
   void            SetSkipFailed(Bool_t y) {fSkipFailed = y;}
   void            SetFillHistogramOnlyInRange(Bool_t fillInRangeOnly) { fCheckHistRange = fillInRangeOnly; }

   void            AddValue(AliRsnValue *value);

   virtual void    Reset();
   virtual Bool_t  Init(const char *prefix, TList *list);
   virtual Bool_t  Fill(TObject *target, Int_t step = 0);
   virtual Bool_t  Fill(AliRsnEvent *ev,AliRsnDaughter *d);

private:

   TH1            *CreateHistogram(const char *name);
   THnSparseF     *CreateHistogramSparse(const char *name);
   AliCFContainer *CreateCFContainer(const char *name);

   Bool_t           fSkipFailed;    //  tell to skip fills when one computation fails
   EOut             fType;          //  output format among allowed ones
   Int_t            fSteps;         //  number of steps (only for container)
   TObjArray        fValues;        //  container for all related values
   Int_t            fNValues;       //! number of values (internal use)
   TList           *fList;          //! list containing the output
   Int_t            fIndex;         //  index of object in the list
   Bool_t           fCheckHistRange;//  check if values is in histogram range

   TArrayD          fArray;         //! temp array of computed values

   ClassDef(AliRsnListOutput, 2)    //  AliRsnListOutput class
};

#endif
 AliRsnListOutput.h:1
 AliRsnListOutput.h:2
 AliRsnListOutput.h:3
 AliRsnListOutput.h:4
 AliRsnListOutput.h:5
 AliRsnListOutput.h:6
 AliRsnListOutput.h:7
 AliRsnListOutput.h:8
 AliRsnListOutput.h:9
 AliRsnListOutput.h:10
 AliRsnListOutput.h:11
 AliRsnListOutput.h:12
 AliRsnListOutput.h:13
 AliRsnListOutput.h:14
 AliRsnListOutput.h:15
 AliRsnListOutput.h:16
 AliRsnListOutput.h:17
 AliRsnListOutput.h:18
 AliRsnListOutput.h:19
 AliRsnListOutput.h:20
 AliRsnListOutput.h:21
 AliRsnListOutput.h:22
 AliRsnListOutput.h:23
 AliRsnListOutput.h:24
 AliRsnListOutput.h:25
 AliRsnListOutput.h:26
 AliRsnListOutput.h:27
 AliRsnListOutput.h:28
 AliRsnListOutput.h:29
 AliRsnListOutput.h:30
 AliRsnListOutput.h:31
 AliRsnListOutput.h:32
 AliRsnListOutput.h:33
 AliRsnListOutput.h:34
 AliRsnListOutput.h:35
 AliRsnListOutput.h:36
 AliRsnListOutput.h:37
 AliRsnListOutput.h:38
 AliRsnListOutput.h:39
 AliRsnListOutput.h:40
 AliRsnListOutput.h:41
 AliRsnListOutput.h:42
 AliRsnListOutput.h:43
 AliRsnListOutput.h:44
 AliRsnListOutput.h:45
 AliRsnListOutput.h:46
 AliRsnListOutput.h:47
 AliRsnListOutput.h:48
 AliRsnListOutput.h:49
 AliRsnListOutput.h:50
 AliRsnListOutput.h:51
 AliRsnListOutput.h:52
 AliRsnListOutput.h:53
 AliRsnListOutput.h:54
 AliRsnListOutput.h:55
 AliRsnListOutput.h:56
 AliRsnListOutput.h:57
 AliRsnListOutput.h:58
 AliRsnListOutput.h:59
 AliRsnListOutput.h:60
 AliRsnListOutput.h:61
 AliRsnListOutput.h:62
 AliRsnListOutput.h:63
 AliRsnListOutput.h:64
 AliRsnListOutput.h:65
 AliRsnListOutput.h:66
 AliRsnListOutput.h:67
 AliRsnListOutput.h:68
 AliRsnListOutput.h:69
 AliRsnListOutput.h:70
 AliRsnListOutput.h:71
 AliRsnListOutput.h:72
 AliRsnListOutput.h:73
 AliRsnListOutput.h:74
 AliRsnListOutput.h:75
 AliRsnListOutput.h:76
 AliRsnListOutput.h:77
 AliRsnListOutput.h:78
 AliRsnListOutput.h:79
 AliRsnListOutput.h:80
 AliRsnListOutput.h:81
 AliRsnListOutput.h:82
 AliRsnListOutput.h:83
 AliRsnListOutput.h:84
 AliRsnListOutput.h:85
 AliRsnListOutput.h:86
 AliRsnListOutput.h:87
 AliRsnListOutput.h:88
 AliRsnListOutput.h:89
 AliRsnListOutput.h:90
 AliRsnListOutput.h:91
 AliRsnListOutput.h:92
 AliRsnListOutput.h:93
 AliRsnListOutput.h:94
 AliRsnListOutput.h:95