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

#include <AliDetector.h>  //base class
#include <TClonesArray.h> //XxxCreate() 
#include <TObjArray.h>    //fDig,fClu field

//.
//HMPID base class
//.

class AliHMPID : public AliDetector //TObject-TNamed-AliModule-AliDetector-AliHMPID
{
public:
//ctor & dtor    
            AliHMPID(const char *nm,const char *ttl);                                                           //named ctor
            AliHMPID(                              ):AliDetector(    ),fDoFeed(kTRUE),fSdi(0),fDig(0),fClu(0) {}  //default ctor          
  virtual  ~AliHMPID();                                            
//framework part  
  virtual void  CreateMaterials (                )=0;          //from AliModule invoked from AliMC::ConstructGeometry() to define detector materials
  virtual void  CreateGeometry  (                )=0;          //from AliModule invoked from AliMC::ConstructGeometry() to build detector for simulation

  virtual Int_t IsVersion       (                )const=0;     //from AliModule not used        
  virtual void  Init            (                )=0;          //from AliModule invoked from AliMC::InitGeometry() after CreateGeometry() to do VolID initialization
  virtual void  DefineOpticalProperties() {}                   //from AliModule invoked from AliMC::ConstructOpGeometry() to set Cerenkov properties
          void  MakeBranch      (Option_t *opt="");            //from AliModule invokde from AliRun::Tree2Tree() to make requested HMPID branch
          void  SetTreeAddress  (                );            //from AliModule invoked from AliRun::GetEvent(), AliLoader::SetTAddrInDet()
  virtual void  StepManager     (                )=0;          //from AliModule invoked from AliMC
//private part +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
  void          HitCreate(         )     {if(fHits)return; fHits=new TClonesArray("AliHMPIDHit"); fNhits=0;     }//create hits list
              
  TClonesArray* SdiLst   (         )const{return fSdi;                                                          }//get sdigits list 
  void          SdiCreate(         )     {if(fSdi)return; fSdi=new TClonesArray("AliHMPIDDigit");               }//create sdigits list
  void          SdiReset (         )     {if(fSdi)  fSdi ->Clear();                                             }//clean sdigits list
         
  TObjArray*    DigLst   (         )const{return fDig;                                                          }//get digits list for all chambers
  TClonesArray* DigLst   (Int_t c  )const{return fDig ? (TClonesArray *)fDig->At(c):0;                          }//get digits list for chamber
  void          DigCreate(         )     {
    if (fDig) return; //PH do not recreate existing containers
    fDig=new TObjArray(7);for(Int_t i=0;i<7;i++)fDig->AddAt(new TClonesArray("AliHMPIDDigit"),i);               }//create digits list
  void          DigReset (         )     {if(fDig)for(int i=0;i<7;i++)fDig->At(i)->Clear();                     }//clean digits list 
          
  TObjArray*    CluLst   (         )const{return fClu;                                                          }//get clusters list for all chambers
  TClonesArray* CluLst   (Int_t c  )const{return fClu ? (TClonesArray *)fClu->At(c):0;                          }//get clusters list for chamber
  void          CluCreate(         )     {
    if (fClu) return; //PH do not recreate existing containers
    fClu=new TObjArray(7); for(Int_t i=0;i<7;i++)fClu->AddAt(new TClonesArray("AliHMPIDCluster"),i);            }//create clusters list
         void   CluReset (         )     {if(fClu)for(int i=0;i<7;i++)fClu->At(i)->Clear();                     }//clean clusters list
protected:  
  Bool_t                fDoFeed;                  //! Flag to switch on/off Feedback photon creation
  TClonesArray         *fSdi;                     //! list of sdigits  
  TObjArray            *fDig;                     //! each chamber holds it's one list of digits
  TObjArray            *fClu;                     //! each chamber holds it's one list of clusters 
  
private:
  AliHMPID(const AliHMPID &rich           );
  AliHMPID&  operator=(const AliHMPID&);

  ClassDef(AliHMPID,11)                            //Main HMPID class 
};//class AliHMPID  

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#endif
 AliHMPID.h:1
 AliHMPID.h:2
 AliHMPID.h:3
 AliHMPID.h:4
 AliHMPID.h:5
 AliHMPID.h:6
 AliHMPID.h:7
 AliHMPID.h:8
 AliHMPID.h:9
 AliHMPID.h:10
 AliHMPID.h:11
 AliHMPID.h:12
 AliHMPID.h:13
 AliHMPID.h:14
 AliHMPID.h:15
 AliHMPID.h:16
 AliHMPID.h:17
 AliHMPID.h:18
 AliHMPID.h:19
 AliHMPID.h:20
 AliHMPID.h:21
 AliHMPID.h:22
 AliHMPID.h:23
 AliHMPID.h:24
 AliHMPID.h:25
 AliHMPID.h:26
 AliHMPID.h:27
 AliHMPID.h:28
 AliHMPID.h:29
 AliHMPID.h:30
 AliHMPID.h:31
 AliHMPID.h:32
 AliHMPID.h:33
 AliHMPID.h:34
 AliHMPID.h:35
 AliHMPID.h:36
 AliHMPID.h:37
 AliHMPID.h:38
 AliHMPID.h:39
 AliHMPID.h:40
 AliHMPID.h:41
 AliHMPID.h:42
 AliHMPID.h:43
 AliHMPID.h:44
 AliHMPID.h:45
 AliHMPID.h:46
 AliHMPID.h:47
 AliHMPID.h:48
 AliHMPID.h:49
 AliHMPID.h:50
 AliHMPID.h:51
 AliHMPID.h:52
 AliHMPID.h:53
 AliHMPID.h:54
 AliHMPID.h:55
 AliHMPID.h:56
 AliHMPID.h:57
 AliHMPID.h:58
 AliHMPID.h:59
 AliHMPID.h:60
 AliHMPID.h:61
 AliHMPID.h:62
 AliHMPID.h:63
 AliHMPID.h:64
 AliHMPID.h:65