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

/* $Id: AliITSU.h */

////////////////////////////////////////////////////////////////////////
//           Manager class for set: ITS Upgrade                       //
////////////////////////////////////////////////////////////////////////


#include <TObjArray.h> // used in inline function GetChip.
#include "AliDetector.h"
#include "AliITSTrigger.h"
#include "AliITSUGeomTGeo.h"

class TString;
class TTree;
class AliITSUSDigit;
class AliITSUSimulation;
class AliITSsegmentation;
class AliITSUChip;
class AliITSCalibration;
class AliITSUHit;
class AliITSdigit;
class AliDigitizationInput;
class AliITSUSensMap;
class AliITSUSimuParam;
class AliITSUParamList;

class AliITSU : public AliDetector {

 public:
  //
  // number detector types
  enum {kNChipTypes = AliITSUGeomTGeo::kNChipTypes};
  //
  //================= Standard Classes ===============================
  AliITSU();  // Default creator.
  AliITSU(const char *title, Int_t nlayers); // extended standard Creator
  virtual ~AliITSU(); // destructor
  virtual Int_t IsVersion() const {return 11;}
  
  //===================== Simulation Geometry ========================
  // get geometry version - detailed (major) or coarse (minor)
  virtual Int_t GetMajorVersion() const {return -1;}
  virtual Int_t GetMinorVersion() const {return -1;}
  virtual void  GetGeometryVersion(Int_t &a,Int_t &b) const {a = GetMajorVersion();b=GetMinorVersion();return;}
  virtual void  SetEUCLID(Bool_t euclid=kTRUE) {fEuclidOut = euclid;}
  virtual Bool_t GetEUCLID()const {return fEuclidOut;}
  //-------------------- Geometry Transformations --------------------
  
  // ITS geometry functions From Simulation
  AliITSUGeomTGeo* GetITSGeomTGeo() const {return fGeomTGeo;}
  //RS  AliITSgeom* GetITSgeom() const {return fChipTypeSim->GetITSgeom();}
  //RS  void   SetITSgeom(AliITSgeom *geom) {fChipTypeSim->SetITSgeom(geom);}
  // return pointer to the array of chips
  
  AliITSUChip   * GetChip(Int_t index) {return (AliITSUChip*)fChipHits->UncheckedAt(index);}
  AliITSUSimuParam* GetSimuParam() const {return fSimuParam;}
    
  //================ Necessary general Classes =======================
  virtual void Init();
  virtual AliLoader* MakeLoader(const char* topfoldername);
  virtual void MakeBranch(Option_t *opt=" ");
  virtual void MakeBranchS(const char* fl);
  virtual void MakeBranchD(const char* file);
  virtual void MakeBranchInTreeD(TTree* treeD, const char* file=0);
  virtual void SetTreeAddress();
  virtual AliITSUSimulation*   GetSimulationModel(Int_t lr)   {return (AliITSUSimulation*)fSimModelLr[lr];}
  virtual AliITSsegmentation*  GetSegmentation(Int_t lr)      {return (AliITSsegmentation*)fSegModelLr[lr];}
  virtual AliITSUParamList*    GetResponseParam(Int_t lr)     {return (AliITSUParamList*)fResponseLr[lr];}
  //=================== Hits =========================================
  virtual void StepManager() {} // See Step Manager for specific geometry.
  //------------ sort hits by chip for Digitisation ----------------
  virtual void FillChips(Int_t bgrev, Option_t *opt, const char *filename); 
  virtual void FillChips(TTree *treeH, Int_t mask = 0);
  virtual void ClearChips();
  virtual void AddHit(Int_t track, Int_t *vol, Float_t *hits);
  void         InitSimulation();
  //
  // Trigger
  //  virtual AliTriggerDetector* CreateTriggerDetector() const;

  AliDigitizer* CreateDigitizer(AliDigitizationInput* manager) const;
  virtual void SDigits2Digits();
  virtual void Hits2Digits(); 
  virtual void Hits2SDigits();
  virtual void Hits2Digits(Int_t evNumber,Int_t bgrev,Option_t *option, const char *filename);
  virtual void Hits2SDigits(Int_t evNumber,Int_t bgrev,Option_t *option,const char *filename);
    
  virtual void ResetSDigits()       {if (fSDigits) fSDigits->Clear();}
  virtual void ResetDigits();
  virtual void ResetDigits(Int_t branch);
  virtual void AddSumDigit(AliITSUSDigit &sdig);
  virtual void AddSimDigit(Int_t branch, AliITSdigit *d);
  virtual void AddSimDigit(Int_t branch,Float_t phys,Int_t* digits,Int_t* tracks,Int_t *hits,Float_t* trkcharges,Int_t sigexpanded=-1000);
  TObjArray*   GetDigits()                const {return fDetDigits;}
  TClonesArray *DigitsAddress(Int_t id)  {return fDetDigits ? (TClonesArray*)fDetDigits->At(id) : 0;}
  //Fast simulation
  virtual void  Hits2FastRecPoints(Int_t bgrev,Option_t *opr, const char *filename);
  virtual Int_t Hits2Clusters(TTree *in, TTree *out);
  virtual void  CheckLabels(Int_t lab[3]) const;

  //===================== Raw Data IO ================================
  // Write digits into raw data format
  virtual void   Digits2Raw();
  virtual Bool_t Raw2SDigits(AliRawReader*);
    
  //===================== FO signals ================================
  // Write FO signals in UserInfo of SDigits/Digits tree
  void    WriteFOSignals();

  void    SetRunNumber(Int_t rn=0)        {fRunNumber = rn;}
  Int_t   GetNLayers()              const {return fNLayers;}
  Int_t   GetRunNumber()            const {return fRunNumber;}
  Bool_t  IsSimInitDone()           const {return fSimInitDone;}

 protected:
  void        InitArrays();
  const char* GetDigitClassName(Int_t i) {return Form("AliITSUDigit%s",AliITSUGeomTGeo::GetChipTypeName(i));}
  const char* GetChipTypeName(Int_t i) {return AliITSUGeomTGeo::GetChipTypeName(i);}
  
 protected:
  //================== Data Members ==================================
  Bool_t                fEuclidOut;      // Flag to write geometry in euclid format
  Int_t                 fNLayers;        // the number of layers
  Int_t                *fIdSens;         //[fNLayers] layer identifier
  TString              *fLayerName;      //[fNLayers] layer identifier
  Bool_t                fTiming;         // flag to turn on/off timers.
  AliITSUGeomTGeo*      fGeomTGeo;       //  access to geometry details
  AliITSUSimuParam*     fSimuParam;      //!simulation parameters
  TClonesArray**        fModA;           //! Used by Raw2SDigits (one TC per chip)
  TClonesArray*         fpSDigits;       //! Branch address to build SD from raw data 
  TClonesArray*         fSDigits;        //! Branch address to build SD
  TClonesArray*         fDetHits;        //! array of full detector hits
  TObjArray*            fChipHits;       //! chip's hits container in (pointers on the fDetHits)
  TObjArray*            fDetDigits;      //! AliDetector has TClonesArray fDigits, avoid same name
  AliITSUSensMap*       fSensMap;        //! sensor map for digitization
  //
  AliITSUSimulation    **fSimModelLr;     //! simulation objects per layer
  AliITSsegmentation   **fSegModelLr;     //! segmentation objects per layar
  AliITSUParamList     **fResponseLr;     //! response parameters for each layer
  TObjArray            *fCalibration;    //! calibration objects
  Int_t                 fRunNumber;      //! run number
  Bool_t                fSimInitDone;    //! flag initialized simulation

 private:
  AliITSU(const AliITSU &source); // copy constructor. Not to be used!
  AliITSU& operator=(const AliITSU &source); // = operator. Not to be used!
  ClassDef(AliITSU,1) // Base class for ITS
};

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