#ifndef ALIITSUV1_H
#define ALIITSUV1_H
#include "AliITSU.h"
class AliITSUv1Layer;
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 <hick, 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;}
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);
AliITSUv1& operator=(const AliITSUv1 &source);
TGeoVolume* CreateWrapperVolume(Int_t nLay);
Int_t fNWrapVol;
Double_t* fWrapRMin;
Double_t* fWrapRMax;
Double_t* fWrapZSpan;
Int_t* fLay2WrapV;
Bool_t *fLayTurbo;
Double_t *fLayPhi0;
Double_t *fLayRadii;
Double_t *fLayZLength;
Int_t *fStavPerLay;
Int_t *fUnitPerStave;
Double_t *fChipThick;
Double_t *fStaveWidth;
Double_t *fStaveTilt;
Double_t *fSensThick;
UInt_t *fChipTypeID;
Int_t *fBuildLevel;
AliITSUv1Layer **fUpGeom;
AliITSUModel_t fStaveModelIB;
AliITSUModel_t fStaveModelOB;
ClassDef(AliITSUv1,0)
};
#endif