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

//========================================================================
//
//        Geometry for the Upgrade of the Inner Tracking System
//
// Mario Sitta (sitta@to.infn.it)
//
//========================================================================


// $Id: AliITSUv1.h 

#include "AliITSU.h"

class  AliITSUv1Layer;
//class  AliITSv11GeomBeamPipe;
class  TGeoVolume;
class  TGeoVolumeAssembly;

class AliITSUv1 : public AliITSU {

 public:


  typedef enum {
    kIBModelDummy=0,
    kIBModel0=1,
    kIBModel1=2, 
    kIBModel21=3,
    kIBModel22=4,
    kIBModel3=5,
    kIBModel4=10,
    kOBModelDummy=6,
    kOBModel0=7,
    kOBModel1=8, 
    kOBModel2=9 
  } AliITSUModel_t;
  

  AliITSUv1();
  AliITSUv1(const char *title, Int_t nlay);
  virtual       ~AliITSUv1() ;
  virtual void   SetNWrapVolumes(Int_t n);
  virtual void   AddAlignableVolumes() const;
  void           AddAlignableVolumesLayer(int lr, TString& parent,Int_t &lastUID) const;
  void           AddAlignableVolumesStave(int lr, int st, TString& parent,Int_t &lastUID) const;
  void           AddAlignableVolumesHalfStave(int lr, int st, int sst, TString& parent,Int_t &lastUID) const;
  void           AddAlignableVolumesModule(int lr, int st, int sst, int md, TString& parent,Int_t &lastUID) const;
  void           AddAlignableVolumesChip(int lr, int st, int sst, int md, int ch, TString& parent,Int_t &lastUID) const;

  virtual void   CreateGeometry();
  	  void   CreateSuppCyl(const Bool_t innerBarrel,TGeoVolume *dest,const TGeoManager *mgr=gGeoManager);
  virtual void   CreateMaterials();
  virtual void   DefineLayer(Int_t nlay,Double_t phi0,Double_t r,Double_t zlen,Int_t nstav,
			     Int_t nunit, Double_t lthick=0.,Double_t dthick=0.,UInt_t detType=0, Int_t buildFlag=0);
  virtual void   DefineLayerTurbo(Int_t nlay,Double_t phi0,Double_t r,Double_t zlen,Int_t nstav,
				  Int_t nunit,Double_t width,Double_t tilt,
				  Double_t lthick = 0.,Double_t dthick = 0.,UInt_t detType=0, Int_t buildFlag=0);
  virtual void   GetLayerParameters(Int_t nlay, Double_t &phi0,Double_t &r, Double_t &zlen,
				    Int_t &nstav, Int_t &nmod,
				    Double_t &width, Double_t &tilt,
				    Double_t &lthick, Double_t &mthick,
				    UInt_t &dettype) const;
  virtual void   DefineWrapVolume(Int_t id, Double_t rmin,Double_t rmax, Double_t zspan);
  virtual void   Init(); 
  virtual Bool_t IsLayerTurbo(Int_t nlay);
  virtual Int_t  IsVersion()                 const { return 20;}  // vUpgrade ? do we need this
  virtual void   SetDefaults();
  virtual void   StepManager();
  virtual void   SetLayerChipTypeID(Int_t lr, UInt_t id);
  virtual Int_t  GetLayerChipTypeID(Int_t lr);
  virtual void   SetStaveModelIB(AliITSUModel_t model) {fStaveModelIB=model;}
  virtual void   SetStaveModelOB(AliITSUModel_t model) {fStaveModelOB=model;}
  virtual AliITSUModel_t GetStaveModelIB() const {return fStaveModelIB;}
  virtual AliITSUModel_t GetStaveModelOB() const {return fStaveModelOB;}
  //
 private:
  AliITSUv1(const AliITSUv1 &source); // copy constructor
  AliITSUv1& operator=(const AliITSUv1 &source); // assignment operator

  TGeoVolume* CreateWrapperVolume(Int_t nLay);

  //
  Int_t     fNWrapVol;       // number of wrapper volumes
  Double_t* fWrapRMin;       // min radius of wrapper volume
  Double_t* fWrapRMax;       // max radius of wrapper volume
  Double_t* fWrapZSpan;      // Z span of wrapper volume
  Int_t*    fLay2WrapV;      // id of wrapper layer to which layer belongs (-1 if not wrapped)
  Bool_t   *fLayTurbo;       // True for "turbo" layers
  Double_t *fLayPhi0;        // Vector of layer's 1st stave phi in lab
  Double_t *fLayRadii;       // Vector of layer radii
  Double_t *fLayZLength;     // Vector of layer length along Z
  Int_t    *fStavPerLay;     // Vector of number of staves per layer
  Int_t    *fUnitPerStave;   // Vector of number of "units" per stave
  Double_t *fChipThick;      // Vector of chip thicknesses
  Double_t *fStaveWidth;     // Vector of stave width (only used for turbo)
  Double_t *fStaveTilt;      // Vector of stave tilt (only used for turbo)
  Double_t *fSensThick;      // Vector of sensor thicknesses
  UInt_t   *fChipTypeID;     // Vector of detector type id
  Int_t    *fBuildLevel;     // Vector of Material Budget Studies
  //  
  AliITSUv1Layer **fUpGeom; //! Geometry
  AliITSUModel_t fStaveModelIB; // The stave model for the Inner Barrel
  AliITSUModel_t fStaveModelOB; // The stave model for the Outer Barrel
  
  // Parameters for the Upgrade geometry
  
  ClassDef(AliITSUv1,0)
};
 
#endif
 AliITSUv1.h:1
 AliITSUv1.h:2
 AliITSUv1.h:3
 AliITSUv1.h:4
 AliITSUv1.h:5
 AliITSUv1.h:6
 AliITSUv1.h:7
 AliITSUv1.h:8
 AliITSUv1.h:9
 AliITSUv1.h:10
 AliITSUv1.h:11
 AliITSUv1.h:12
 AliITSUv1.h:13
 AliITSUv1.h:14
 AliITSUv1.h:15
 AliITSUv1.h:16
 AliITSUv1.h:17
 AliITSUv1.h:18
 AliITSUv1.h:19
 AliITSUv1.h:20
 AliITSUv1.h:21
 AliITSUv1.h:22
 AliITSUv1.h:23
 AliITSUv1.h:24
 AliITSUv1.h:25
 AliITSUv1.h:26
 AliITSUv1.h:27
 AliITSUv1.h:28
 AliITSUv1.h:29
 AliITSUv1.h:30
 AliITSUv1.h:31
 AliITSUv1.h:32
 AliITSUv1.h:33
 AliITSUv1.h:34
 AliITSUv1.h:35
 AliITSUv1.h:36
 AliITSUv1.h:37
 AliITSUv1.h:38
 AliITSUv1.h:39
 AliITSUv1.h:40
 AliITSUv1.h:41
 AliITSUv1.h:42
 AliITSUv1.h:43
 AliITSUv1.h:44
 AliITSUv1.h:45
 AliITSUv1.h:46
 AliITSUv1.h:47
 AliITSUv1.h:48
 AliITSUv1.h:49
 AliITSUv1.h:50
 AliITSUv1.h:51
 AliITSUv1.h:52
 AliITSUv1.h:53
 AliITSUv1.h:54
 AliITSUv1.h:55
 AliITSUv1.h:56
 AliITSUv1.h:57
 AliITSUv1.h:58
 AliITSUv1.h:59
 AliITSUv1.h:60
 AliITSUv1.h:61
 AliITSUv1.h:62
 AliITSUv1.h:63
 AliITSUv1.h:64
 AliITSUv1.h:65
 AliITSUv1.h:66
 AliITSUv1.h:67
 AliITSUv1.h:68
 AliITSUv1.h:69
 AliITSUv1.h:70
 AliITSUv1.h:71
 AliITSUv1.h:72
 AliITSUv1.h:73
 AliITSUv1.h:74
 AliITSUv1.h:75
 AliITSUv1.h:76
 AliITSUv1.h:77
 AliITSUv1.h:78
 AliITSUv1.h:79
 AliITSUv1.h:80
 AliITSUv1.h:81
 AliITSUv1.h:82
 AliITSUv1.h:83
 AliITSUv1.h:84
 AliITSUv1.h:85
 AliITSUv1.h:86
 AliITSUv1.h:87
 AliITSUv1.h:88
 AliITSUv1.h:89
 AliITSUv1.h:90
 AliITSUv1.h:91
 AliITSUv1.h:92
 AliITSUv1.h:93
 AliITSUv1.h:94
 AliITSUv1.h:95
 AliITSUv1.h:96
 AliITSUv1.h:97
 AliITSUv1.h:98
 AliITSUv1.h:99
 AliITSUv1.h:100
 AliITSUv1.h:101
 AliITSUv1.h:102
 AliITSUv1.h:103
 AliITSUv1.h:104
 AliITSUv1.h:105
 AliITSUv1.h:106
 AliITSUv1.h:107
 AliITSUv1.h:108
 AliITSUv1.h:109
 AliITSUv1.h:110
 AliITSUv1.h:111
 AliITSUv1.h:112
 AliITSUv1.h:113
 AliITSUv1.h:114
 AliITSUv1.h:115