ROOT logo
#ifndef ALIDIGITIZATIONINPUT_H
#define ALIDIGITIZATIONINPUT_H
/* Copyright(c) 1998-2000, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

////////////////////////////////////////////////////////////////////////
//
//  Manager Class for Merging/Digitization   
//  This handles Merging and Digitisation of AliRoot events                
//  Author: Jiri Chudoba (CERN)
//
////////////////////////////////////////////////////////////////////////

// --- ROOT system ---

#include "TArrayI.h"
#include "TNamed.h"
#include "TClonesArray.h"
class TFile;
class TParticle;
class TTree;

// --- AliRoot header files ---

#include "AliStream.h" 
class AliDigitizer;
class AliMergeCombi;
class AliRunLoader;

#define MAXSTREAMSTOMERGE 4

class AliDigitizationInput: public TNamed {

public:
  AliDigitizationInput();
  AliDigitizationInput(Int_t nInputStreams, Int_t sperb=1);

  virtual ~AliDigitizationInput();

  void      SetOutputFile(TString fn);
  TString   GetOutputFile() const {return fOutputFileName;}
  
  void      SetOutputDir(TString dn) {fOutputDirName = dn;}
  TString   GetOutputDir() const {return fOutputDirName;}
  
  void      SetInputStream(Int_t stream, const char *inputName, TString foldername = "");
  
  void      SetFirstOutputEventNr(Int_t i) {fEvent = i;}
  void      SetNrOfEventsToWrite(Int_t i) {fNrOfEventsToWrite = i;}
  void      SetCopyTreesFromInput(Int_t i) {fCopyTreesFromInput = i;}
  Int_t     GetCopyTreesFromInput() const {return fCopyTreesFromInput;}
  Int_t     GetOutputEventNr() const {return fEvent;}
  void      SetCombinationFileName(TString fn) {fCombinationFileName = fn;} 
  TString   GetCombinationFileName() const {return fCombinationFileName;}
  Int_t     GetMask(Int_t i) const {return fkMASK[i];}
  void      SetRegionOfInterest(Bool_t flag) {fRegionOfInterest = flag;};
  Bool_t    GetRegionOfInterest() const {return fRegionOfInterest;};
  Int_t     GetNinputs() const {return fNinputs;}
  const TString& GetInputFolderName(Int_t i) const;
  const char* GetOutputFolderName();


    
// Nr of particles in all input files for a given event
//     (as numbered in the output file)
  Int_t GetNParticles(Int_t event) const;

// Nr of particles in input file input for a given event
//     (as numbered in this input file)
  Int_t GetNParticles(Int_t event, Int_t input) const;

// return pointer to an int array with input event numbers which were
// merged in the output event event
  Int_t* GetInputEventNumbers(Int_t event) const;

// return an event number of an eventInput from input file input
// which was merged to create output event event
  Int_t GetInputEventNumber(Int_t event, Int_t input) const;
  
  AliStream * GetInputStream(Int_t index) const { return dynamic_cast<AliStream *>(fInputStreams->At(index)) ; }
// return pointer to particle with index i (index with mask)
  TParticle* GetParticle(Int_t i, Int_t event) const;

// return pointer to particle with index i in the input file input
// (index without mask)
  TParticle* GetParticle(Int_t i, Int_t input, Int_t event) const;

// return TString with input file name  
  TString GetInputFileName(Int_t input, Int_t order) const;
  AliRunLoader*     GetOutRunLoader();
  //
  Bool_t            ConnectInputTrees();
  Bool_t            InitOutputGlobal();
  void              InitEvent();
  void              FinishEvent();
  void              FinishGlobal();
  
private:
  AliDigitizationInput(const AliDigitizationInput& dig); // not implemented
  AliDigitizationInput& operator=(const AliDigitizationInput& dig); // not implemented
  void Copy(TObject& dig) const;

  Int_t             fkMASK[MAXSTREAMSTOMERGE];  //! masks for track ids from
                                              //  different source files
  Int_t             fkMASKSTEP;           // step to increase MASK for
                                          // each input file
  TString           fOutputFileName;      // output file name
  TString           fOutputDirName;       // output dir name

  Int_t             fEvent;               // output event nr.
  Int_t             fNrOfEventsToWrite;   // Nr of events to write
  Int_t             fNrOfEventsWritten;   // Nr of events written
  Int_t             fCopyTreesFromInput;  // from which input file the trees
                                          // should be copied, -1 for no copies
  Int_t             fNinputs;             // nr of input streams - can be taken from the TClonesArray dimension
  Int_t             fNinputsGiven;        // nr of input streams given by user
  Bool_t            fRegionOfInterest;    // digitization in region of interest
  TClonesArray *    fInputStreams;        // input signal streams

//  AliStream*        fOutputStream;
  AliRunLoader*     fOutRunLoader;        //!
  Bool_t            fOutputInitialized;   //indicates if outout was initialized 
                                          // 
  AliMergeCombi *   fCombi;               // pointer to the combination object
  TArrayI           fCombination;         //! combination of events from
  TString           fCombinationFileName; // fn with combinations (used
                                          // with type 2 of comb.)  
  static const TString fgkDefOutFolderName;//default name for output foler 
  static const TString fgkBaseInFolderName;//default name for input foler
  ClassDef(AliDigitizationInput,2)
};

#endif // ALIRUNDIGITIZER_H
 AliDigitizationInput.h:1
 AliDigitizationInput.h:2
 AliDigitizationInput.h:3
 AliDigitizationInput.h:4
 AliDigitizationInput.h:5
 AliDigitizationInput.h:6
 AliDigitizationInput.h:7
 AliDigitizationInput.h:8
 AliDigitizationInput.h:9
 AliDigitizationInput.h:10
 AliDigitizationInput.h:11
 AliDigitizationInput.h:12
 AliDigitizationInput.h:13
 AliDigitizationInput.h:14
 AliDigitizationInput.h:15
 AliDigitizationInput.h:16
 AliDigitizationInput.h:17
 AliDigitizationInput.h:18
 AliDigitizationInput.h:19
 AliDigitizationInput.h:20
 AliDigitizationInput.h:21
 AliDigitizationInput.h:22
 AliDigitizationInput.h:23
 AliDigitizationInput.h:24
 AliDigitizationInput.h:25
 AliDigitizationInput.h:26
 AliDigitizationInput.h:27
 AliDigitizationInput.h:28
 AliDigitizationInput.h:29
 AliDigitizationInput.h:30
 AliDigitizationInput.h:31
 AliDigitizationInput.h:32
 AliDigitizationInput.h:33
 AliDigitizationInput.h:34
 AliDigitizationInput.h:35
 AliDigitizationInput.h:36
 AliDigitizationInput.h:37
 AliDigitizationInput.h:38
 AliDigitizationInput.h:39
 AliDigitizationInput.h:40
 AliDigitizationInput.h:41
 AliDigitizationInput.h:42
 AliDigitizationInput.h:43
 AliDigitizationInput.h:44
 AliDigitizationInput.h:45
 AliDigitizationInput.h:46
 AliDigitizationInput.h:47
 AliDigitizationInput.h:48
 AliDigitizationInput.h:49
 AliDigitizationInput.h:50
 AliDigitizationInput.h:51
 AliDigitizationInput.h:52
 AliDigitizationInput.h:53
 AliDigitizationInput.h:54
 AliDigitizationInput.h:55
 AliDigitizationInput.h:56
 AliDigitizationInput.h:57
 AliDigitizationInput.h:58
 AliDigitizationInput.h:59
 AliDigitizationInput.h:60
 AliDigitizationInput.h:61
 AliDigitizationInput.h:62
 AliDigitizationInput.h:63
 AliDigitizationInput.h:64
 AliDigitizationInput.h:65
 AliDigitizationInput.h:66
 AliDigitizationInput.h:67
 AliDigitizationInput.h:68
 AliDigitizationInput.h:69
 AliDigitizationInput.h:70
 AliDigitizationInput.h:71
 AliDigitizationInput.h:72
 AliDigitizationInput.h:73
 AliDigitizationInput.h:74
 AliDigitizationInput.h:75
 AliDigitizationInput.h:76
 AliDigitizationInput.h:77
 AliDigitizationInput.h:78
 AliDigitizationInput.h:79
 AliDigitizationInput.h:80
 AliDigitizationInput.h:81
 AliDigitizationInput.h:82
 AliDigitizationInput.h:83
 AliDigitizationInput.h:84
 AliDigitizationInput.h:85
 AliDigitizationInput.h:86
 AliDigitizationInput.h:87
 AliDigitizationInput.h:88
 AliDigitizationInput.h:89
 AliDigitizationInput.h:90
 AliDigitizationInput.h:91
 AliDigitizationInput.h:92
 AliDigitizationInput.h:93
 AliDigitizationInput.h:94
 AliDigitizationInput.h:95
 AliDigitizationInput.h:96
 AliDigitizationInput.h:97
 AliDigitizationInput.h:98
 AliDigitizationInput.h:99
 AliDigitizationInput.h:100
 AliDigitizationInput.h:101
 AliDigitizationInput.h:102
 AliDigitizationInput.h:103
 AliDigitizationInput.h:104
 AliDigitizationInput.h:105
 AliDigitizationInput.h:106
 AliDigitizationInput.h:107
 AliDigitizationInput.h:108
 AliDigitizationInput.h:109
 AliDigitizationInput.h:110
 AliDigitizationInput.h:111
 AliDigitizationInput.h:112
 AliDigitizationInput.h:113
 AliDigitizationInput.h:114
 AliDigitizationInput.h:115
 AliDigitizationInput.h:116
 AliDigitizationInput.h:117
 AliDigitizationInput.h:118
 AliDigitizationInput.h:119
 AliDigitizationInput.h:120
 AliDigitizationInput.h:121
 AliDigitizationInput.h:122
 AliDigitizationInput.h:123
 AliDigitizationInput.h:124
 AliDigitizationInput.h:125
 AliDigitizationInput.h:126
 AliDigitizationInput.h:127
 AliDigitizationInput.h:128
 AliDigitizationInput.h:129
 AliDigitizationInput.h:130
 AliDigitizationInput.h:131
 AliDigitizationInput.h:132
 AliDigitizationInput.h:133
 AliDigitizationInput.h:134
 AliDigitizationInput.h:135