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

/* $Id$ */

//
// This is the basic class for any
// ALICE detector module, whether it is 
// sensitive or not. Detector classes depend
// on this.
//

#include <Riostream.h>
#include <TNamed.h>
#include <TClonesArray.h>

#include "AliLog.h"
#include "AliTriggerDetector.h"

class TBrowser;
class TArrayI;
class TFile;
class TTree;
class AliLoader;
class AliTrackReference;
class AliDigitizer;
class AliDigitizationInput;
class AliVertexer;
class AliTracker;
class AliESD;
class AliRunLoader;
class AliRawReader;


class AliModule : public TNamed {
public:

  // Creators - distructors
  AliModule(const char* name, const char *title);
  AliModule();
  virtual ~AliModule();

  // Inline functions
  virtual  Int_t         GetNdigits() const {return 0;}
  virtual  Int_t         GetNhits()  const {return 0;}
  virtual  TArrayI      *GetIdtmed()   const {return fIdtmed;}
  virtual  TClonesArray *Digits() const {return 0;}
  virtual  TClonesArray *Hits()   const {return 0;}
  virtual  TObjArray    *Points() const {return 0;}
  virtual  Int_t         GetIshunt() const {return 0;}
  virtual  void          SetIshunt(Int_t) {}
  virtual  Bool_t        IsActive() const {return fActive;}
  virtual  Bool_t        IsFolder() const {return kTRUE;}
  virtual  Int_t&        LoMedium() {return fLoMedium;}
  virtual  Int_t&        HiMedium() {return fHiMedium;}
  virtual  Bool_t        IsModule() const {return kTRUE;}
  virtual  Bool_t        IsDetector() const {return kFALSE;}

  // Module composition
  virtual void AliMaterial(Int_t imat, const char* name, Float_t a, 
			   Float_t z, Float_t dens, Float_t radl,
			   Float_t absl, Float_t *buf=0, Int_t nwbuf=0) const;
  virtual void AliGetMaterial(Int_t imat, char* name, Float_t &a, 
			      Float_t &z, Float_t &dens, Float_t &radl,
			      Float_t &absl) const;
  virtual void AliMixture(Int_t imat, const char *name, Float_t *a,
                          Float_t *z, Float_t dens, Int_t nlmat,
                          Float_t *wmat) const;
  virtual void AliMedium(Int_t numed, const char *name, Int_t nmat,
                          Int_t isvol, Int_t ifield, Float_t fieldm,
                          Float_t tmaxfd, Float_t stemax, Float_t deemax,
                          Float_t epsil, Float_t stmin, Float_t *ubuf=0,
                          Int_t nbuf=0) const;
  virtual void AliMatrix(Int_t &nmat, Float_t theta1, Float_t phi1,
                          Float_t theta2, Float_t phi2, Float_t theta3,
                          Float_t phi3) const;
  
  // Virtual methods
  virtual void  BuildGeometry() {};
  virtual Int_t IsVersion() const =0;
  
  
  // Other methods
  virtual void        AddDigit(Int_t*, Int_t*){
  Error("AddDigit","Digits cannot be added to module %s\n",fName.Data());}
  virtual void        AddHit(Int_t, Int_t*, Float_t *) {
  Error("AddDigit","Hits cannot be added to module %s\n",fName.Data());}
  virtual void        Hits2SDigits() {}
  virtual AliDigitizer* CreateDigitizer(AliDigitizationInput* /*manager*/) const 
    {return NULL;}
  virtual AliTriggerDetector* CreateTriggerDetector() const
    { AliTriggerDetector* det = new AliTriggerDetector(); det->SetName(GetName()); return det;}
  virtual void        SDigits2Digits() {}
  virtual void        Hits2Digits() {}
  virtual void        Digits2Reco() {}
  virtual void        Digits2Raw();
  virtual void        Raw2Digits()  {}
  virtual Bool_t      Raw2SDigits(AliRawReader*) {return kFALSE;}
  virtual void        QADataMaker (const char *) {} 
  virtual void        Browse(TBrowser *) {} //PH Do we need it?
  virtual void        CreateGeometry() {}
  virtual void        CreateMaterials() {}
  virtual void        DefineOpticalProperties() {}
  virtual void        AddAlignableVolumes() const;
  virtual void        PreTrack(){}
  virtual void        PostTrack(){}
  virtual void        FinishEvent() {}
  virtual void        FinishRun() {}
  virtual void        FinishPrimary() {}
  virtual void        Init() {}
  virtual void        LoadPoints(Int_t ) {}
  virtual void        UpdateInternalGeometry() {}



  virtual void        MakeBranch(Option_t * /*opt =" "*/) {}
  virtual void        MakeTree(Option_t *) {}//skowron 

  virtual AliLoader*  MakeLoader(const char* topfoldername);  
  virtual AliLoader*  GetLoader() const {return 0x0;} //skowron
  

  virtual void        Paint(Option_t *) {} //PH Do we need it?
  virtual void        ResetDigits() {}
  virtual void        ResetSDigits() {}
  virtual void        ResetHits() {}
  virtual void        SetTimeGate(Float_t) {}
  virtual Float_t     GetTimeGate() const {return 1.e10;}
  virtual void        StepManager() {}
  virtual void        DisableStepManager() {fEnable = kFALSE;}
  virtual Bool_t      StepManagerIsEnabled() const {return fEnable;}
  virtual void        SetBufferSize(Int_t) {}  
  virtual Float_t     ZMin() const;
  virtual Float_t     ZMax() const;
// Track reference related
  virtual  AliTrackReference * AddTrackReference(Int_t label, Int_t id = -999);
  TTree* TreeTR();  //shorcut method for accessing treeTR from folder
  void                SetRunLoader(AliRunLoader* runLoader) 
    {fRunLoader = runLoader;}
  
// Quality Assurance methods
  virtual void CheckQA()    { ; }
  AliDigitizationInput* GetDigitizationInput() const {return fDigInput;}
  //  
  static void SetDensityFactor(Float_t density) { fgDensityFactor = density; }
  static Float_t GetDensityFactor() { return fgDensityFactor; }
  
protected:      

  // Data members
  
  TArrayI      *fIdtmed;      //!List of tracking medium numbers
  TArrayI      *fIdmate;      //!List of material numbers
  Int_t         fLoMedium;   //!Minimum tracking medium ID for this Module
  Int_t         fHiMedium;   //!Maximum tracking medium ID for this Module

  Bool_t        fActive;      //Detector activity flag
  Bool_t        fEnable;      //StepManager enabling flag
  Int_t         fMaxIterTrackRef;     //!for track refernce iterator routines
  Int_t         fCurrentIterTrackRef; //!for track refernce iterator routines

  AliRunLoader* fRunLoader;   //!local pointer to run loader
  AliDigitizationInput* fDigInput; //! input for sdigits -> digits
  static Float_t fgDensityFactor; //! factor that is multiplied to all material densities (ONLY for systematic studies)
 private:
  AliModule(const AliModule&);
  AliModule& operator=(const AliModule&);

  ClassDef(AliModule, 10)  //Base class for ALICE Modules
};
#endif
 AliModule.h:1
 AliModule.h:2
 AliModule.h:3
 AliModule.h:4
 AliModule.h:5
 AliModule.h:6
 AliModule.h:7
 AliModule.h:8
 AliModule.h:9
 AliModule.h:10
 AliModule.h:11
 AliModule.h:12
 AliModule.h:13
 AliModule.h:14
 AliModule.h:15
 AliModule.h:16
 AliModule.h:17
 AliModule.h:18
 AliModule.h:19
 AliModule.h:20
 AliModule.h:21
 AliModule.h:22
 AliModule.h:23
 AliModule.h:24
 AliModule.h:25
 AliModule.h:26
 AliModule.h:27
 AliModule.h:28
 AliModule.h:29
 AliModule.h:30
 AliModule.h:31
 AliModule.h:32
 AliModule.h:33
 AliModule.h:34
 AliModule.h:35
 AliModule.h:36
 AliModule.h:37
 AliModule.h:38
 AliModule.h:39
 AliModule.h:40
 AliModule.h:41
 AliModule.h:42
 AliModule.h:43
 AliModule.h:44
 AliModule.h:45
 AliModule.h:46
 AliModule.h:47
 AliModule.h:48
 AliModule.h:49
 AliModule.h:50
 AliModule.h:51
 AliModule.h:52
 AliModule.h:53
 AliModule.h:54
 AliModule.h:55
 AliModule.h:56
 AliModule.h:57
 AliModule.h:58
 AliModule.h:59
 AliModule.h:60
 AliModule.h:61
 AliModule.h:62
 AliModule.h:63
 AliModule.h:64
 AliModule.h:65
 AliModule.h:66
 AliModule.h:67
 AliModule.h:68
 AliModule.h:69
 AliModule.h:70
 AliModule.h:71
 AliModule.h:72
 AliModule.h:73
 AliModule.h:74
 AliModule.h:75
 AliModule.h:76
 AliModule.h:77
 AliModule.h:78
 AliModule.h:79
 AliModule.h:80
 AliModule.h:81
 AliModule.h:82
 AliModule.h:83
 AliModule.h:84
 AliModule.h:85
 AliModule.h:86
 AliModule.h:87
 AliModule.h:88
 AliModule.h:89
 AliModule.h:90
 AliModule.h:91
 AliModule.h:92
 AliModule.h:93
 AliModule.h:94
 AliModule.h:95
 AliModule.h:96
 AliModule.h:97
 AliModule.h:98
 AliModule.h:99
 AliModule.h:100
 AliModule.h:101
 AliModule.h:102
 AliModule.h:103
 AliModule.h:104
 AliModule.h:105
 AliModule.h:106
 AliModule.h:107
 AliModule.h:108
 AliModule.h:109
 AliModule.h:110
 AliModule.h:111
 AliModule.h:112
 AliModule.h:113
 AliModule.h:114
 AliModule.h:115
 AliModule.h:116
 AliModule.h:117
 AliModule.h:118
 AliModule.h:119
 AliModule.h:120
 AliModule.h:121
 AliModule.h:122
 AliModule.h:123
 AliModule.h:124
 AliModule.h:125
 AliModule.h:126
 AliModule.h:127
 AliModule.h:128
 AliModule.h:129
 AliModule.h:130
 AliModule.h:131
 AliModule.h:132
 AliModule.h:133
 AliModule.h:134
 AliModule.h:135
 AliModule.h:136
 AliModule.h:137
 AliModule.h:138
 AliModule.h:139
 AliModule.h:140
 AliModule.h:141
 AliModule.h:142
 AliModule.h:143
 AliModule.h:144
 AliModule.h:145
 AliModule.h:146
 AliModule.h:147
 AliModule.h:148
 AliModule.h:149
 AliModule.h:150
 AliModule.h:151
 AliModule.h:152
 AliModule.h:153
 AliModule.h:154
 AliModule.h:155
 AliModule.h:156
 AliModule.h:157
 AliModule.h:158
 AliModule.h:159
 AliModule.h:160
 AliModule.h:161
 AliModule.h:162
 AliModule.h:163
 AliModule.h:164
 AliModule.h:165
 AliModule.h:166
 AliModule.h:167
 AliModule.h:168
 AliModule.h:169
 AliModule.h:170
 AliModule.h:171
 AliModule.h:172
 AliModule.h:173