Update master to aliroot
[u/mrichter/AliRoot.git] / STEER / STEER / AliDigitizationInput.h
1 #ifndef ALIDIGITIZATIONINPUT_H
2 #define ALIDIGITIZATIONINPUT_H
3 /* Copyright(c) 1998-2000, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 ////////////////////////////////////////////////////////////////////////
9 //
10 //  Manager Class for Merging/Digitization   
11 //  This handles Merging and Digitisation of AliRoot events                
12 //  Author: Jiri Chudoba (CERN)
13 //
14 ////////////////////////////////////////////////////////////////////////
15
16 // --- ROOT system ---
17
18 #include "TArrayI.h"
19 #include "TNamed.h"
20 #include "TClonesArray.h"
21 class TFile;
22 class TParticle;
23 class TTree;
24
25 // --- AliRoot header files ---
26
27 #include "AliStream.h" 
28 class AliDigitizer;
29 class AliMergeCombi;
30 class AliRunLoader;
31
32 #define MAXSTREAMSTOMERGE 4
33
34 class AliDigitizationInput: public TNamed {
35
36 public:
37   AliDigitizationInput();
38   AliDigitizationInput(Int_t nInputStreams, Int_t sperb=1);
39
40   virtual ~AliDigitizationInput();
41
42   void      SetOutputFile(TString fn);
43   TString   GetOutputFile() const {return fOutputFileName;}
44   
45   void      SetOutputDir(TString dn) {fOutputDirName = dn;}
46   TString   GetOutputDir() const {return fOutputDirName;}
47   
48   void      SetInputStream(Int_t stream, const char *inputName, TString foldername = "");
49   
50   void      SetFirstOutputEventNr(Int_t i) {fEvent = i;}
51   void      SetNrOfEventsToWrite(Int_t i) {fNrOfEventsToWrite = i;}
52   void      SetCopyTreesFromInput(Int_t i) {fCopyTreesFromInput = i;}
53   Int_t     GetCopyTreesFromInput() const {return fCopyTreesFromInput;}
54   Int_t     GetOutputEventNr() const {return fEvent;}
55   void      SetCombinationFileName(TString fn) {fCombinationFileName = fn;} 
56   TString   GetCombinationFileName() const {return fCombinationFileName;}
57   Int_t     GetMask(Int_t i) const {return fkMASK[i];}
58   void      SetRegionOfInterest(Bool_t flag) {fRegionOfInterest = flag;};
59   Bool_t    GetRegionOfInterest() const {return fRegionOfInterest;};
60   Int_t     GetNinputs() const {return fNinputs;}
61   const TString& GetInputFolderName(Int_t i) const;
62   const char* GetOutputFolderName();
63
64
65     
66 // Nr of particles in all input files for a given event
67 //     (as numbered in the output file)
68   Int_t GetNParticles(Int_t event) const;
69
70 // Nr of particles in input file input for a given event
71 //     (as numbered in this input file)
72   Int_t GetNParticles(Int_t event, Int_t input) const;
73
74 // return pointer to an int array with input event numbers which were
75 // merged in the output event event
76   Int_t* GetInputEventNumbers(Int_t event) const;
77
78 // return an event number of an eventInput from input file input
79 // which was merged to create output event event
80   Int_t GetInputEventNumber(Int_t event, Int_t input) const;
81   
82   AliStream * GetInputStream(Int_t index) const { return dynamic_cast<AliStream *>(fInputStreams->At(index)) ; }
83 // return pointer to particle with index i (index with mask)
84   TParticle* GetParticle(Int_t i, Int_t event) const;
85
86 // return pointer to particle with index i in the input file input
87 // (index without mask)
88   TParticle* GetParticle(Int_t i, Int_t input, Int_t event) const;
89
90 // return TString with input file name  
91   TString GetInputFileName(Int_t input, Int_t order) const;
92   AliRunLoader*     GetOutRunLoader();
93   //
94   Bool_t            ConnectInputTrees();
95   Bool_t            InitOutputGlobal();
96   void              InitEvent();
97   void              FinishEvent();
98   void              FinishGlobal();
99   
100 private:
101   AliDigitizationInput(const AliDigitizationInput& dig); // not implemented
102   AliDigitizationInput& operator=(const AliDigitizationInput& dig); // not implemented
103   void Copy(TObject& dig) const;
104
105   Int_t             fkMASK[MAXSTREAMSTOMERGE];  //! masks for track ids from
106                                               //  different source files
107   Int_t             fkMASKSTEP;           // step to increase MASK for
108                                           // each input file
109   TString           fOutputFileName;      // output file name
110   TString           fOutputDirName;       // output dir name
111
112   Int_t             fEvent;               // output event nr.
113   Int_t             fNrOfEventsToWrite;   // Nr of events to write
114   Int_t             fNrOfEventsWritten;   // Nr of events written
115   Int_t             fCopyTreesFromInput;  // from which input file the trees
116                                           // should be copied, -1 for no copies
117   Int_t             fNinputs;             // nr of input streams - can be taken from the TClonesArray dimension
118   Int_t             fNinputsGiven;        // nr of input streams given by user
119   Bool_t            fRegionOfInterest;    // digitization in region of interest
120   TClonesArray *    fInputStreams;        // input signal streams
121
122 //  AliStream*        fOutputStream;
123   AliRunLoader*     fOutRunLoader;        //!
124   Bool_t            fOutputInitialized;   //indicates if outout was initialized 
125                                           // 
126   AliMergeCombi *   fCombi;               // pointer to the combination object
127   TArrayI           fCombination;         //! combination of events from
128   TString           fCombinationFileName; // fn with combinations (used
129                                           // with type 2 of comb.)  
130   static const TString fgkDefOutFolderName;//default name for output foler 
131   static const TString fgkBaseInFolderName;//default name for input foler
132   ClassDef(AliDigitizationInput,2)
133 };
134
135 #endif // ALIRUNDIGITIZER_H