Bug fix. Removed delete statement
[u/mrichter/AliRoot.git] / STEER / AliRunDigitizer.h
1 #ifndef ALIRUNDIGITIZER_H
2 #define ALIRUNDIGITIZER_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 "TTask.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 AliRunDigitizer: public TTask {
35
36 public:
37   AliRunDigitizer();
38   AliRunDigitizer(Int_t nInputStreams, Int_t sperb=1);
39   AliRunDigitizer(const AliRunDigitizer& dig);
40   AliRunDigitizer& operator=(const AliRunDigitizer& dig)
41     {dig.Copy(*this); return (*this);}
42   virtual ~AliRunDigitizer();
43
44   void      ExecuteTask(Option_t* option = 0);
45   void      Exec(Option_t *option) {this->Digitize(option);}
46   void      Digitize(Option_t* option = 0);
47   void      AddDigitizer(AliDigitizer *digitizer);
48
49   void      SetOutputFile(TString fn);
50   TString   GetOutputFile() const {return fOutputFileName;}
51   
52   void      SetOutputDir(TString dn) {fOutputDirName = dn;}
53   TString   GetOutputDir() const {return fOutputDirName;}
54   
55   void      SetInputStream(Int_t stream, const char *inputName, TString foldername = "");
56   
57   void      SetFirstOutputEventNr(Int_t i) {fEvent = i;}
58   void      SetNrOfEventsToWrite(Int_t i) {fNrOfEventsToWrite = i;}
59   void      SetCopyTreesFromInput(Int_t i) {fCopyTreesFromInput = i;}
60   Int_t     GetCopyTreesFromInput() const {return fCopyTreesFromInput;}
61   Int_t     GetOutputEventNr() const {return fEvent;}
62   void      SetCombinationFileName(TString fn) {fCombinationFileName = fn;} 
63   TString   GetCombinationFileName() const {return fCombinationFileName;}
64   Int_t     GetMask(Int_t i) const {return fkMASK[i];}
65
66
67   Int_t     GetNinputs() const {return fNinputs;}
68   const TString& GetInputFolderName(Int_t i) const;
69   const char* GetOutputFolderName();
70
71
72     
73 // Nr of particles in all input files for a given event
74 //     (as numbered in the output file)
75   Int_t GetNParticles(Int_t event) const;
76
77 // Nr of particles in input file input for a given event
78 //     (as numbered in this input file)
79   Int_t GetNParticles(Int_t event, Int_t input) const;
80
81 // return pointer to an int array with input event numbers which were
82 // merged in the output event event
83   Int_t* GetInputEventNumbers(Int_t event) const;
84
85 // return an event number of an eventInput from input file input
86 // which was merged to create output event event
87   Int_t GetInputEventNumber(Int_t event, Int_t input) const;
88   
89   AliStream * GetInputStream(Int_t index) const { return dynamic_cast<AliStream *>(fInputStreams->At(index)) ; }
90 // return pointer to particle with index i (index with mask)
91   TParticle* GetParticle(Int_t i, Int_t event) const;
92
93 // return pointer to particle with index i in the input file input
94 // (index without mask)
95   TParticle* GetParticle(Int_t i, Int_t input, Int_t event) const;
96
97 // return TString with input file name  
98   TString GetInputFileName(Int_t input, Int_t order) const;
99   
100 private:
101   void Copy(TObject& dig) const;
102   Bool_t            ConnectInputTrees();
103   Bool_t            InitGlobal();
104   Bool_t            InitOutputGlobal();
105   void              InitEvent();
106   void              FinishEvent();
107   void              FinishGlobal();
108
109   Int_t             fkMASK[MAXSTREAMSTOMERGE];  //! masks for track ids from
110                                               //  different source files
111   Int_t             fkMASKSTEP;           // step to increase MASK for
112                                           // each input file
113   TString           fOutputFileName;      // output file name
114   TString           fOutputDirName;       // output dir name
115
116   Int_t             fEvent;               // output event nr.
117   Int_t             fNrOfEventsToWrite;   // Nr of events to write
118   Int_t             fNrOfEventsWritten;   // Nr of events written
119   Int_t             fCopyTreesFromInput;  // from which input file the trees
120                                           // should be copied, -1 for no copies
121   Int_t             fNinputs;             // nr of input streams - can be taken from the TClonesArray dimension
122   Int_t             fNinputsGiven;        // nr of input streams given by user
123   TClonesArray *    fInputStreams;        // input signal streams
124
125 //  AliStream*        fOutputStream;
126   AliRunLoader*     fOutRunLoader;        //!
127   Bool_t            fOutputInitialized;   //indicates if outout was initialized 
128                                           // 
129   AliMergeCombi *   fCombi;               // pointer to the combination object
130   TArrayI           fCombination;         //! combination of events from
131   TString           fCombinationFileName; // fn with combinations (used
132                                           // with type 2 of comb.)
133
134   AliRunLoader*     GetOutRunLoader();
135   
136   static const TString fgkDefOutFolderName;//default name for output foler 
137   static const TString fgkBaseInFolderName;//default name for input foler
138   ClassDef(AliRunDigitizer,6)
139 };
140
141 #endif // ALIRUNDIGITIZER_H