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


//*************************************************************************
// This class Defines the Geometry for the ITS Upgrade using TGeo
// This is a work class used to study different configurations
// during the development of the new ITS structure.
//
//  Mario Sitta <sitta@to.infn.it>
// Chinorat Kobdaj (kobdaj@g.sut.ac.th)
//*************************************************************************


/*
  $Id: AliITSUv0Layer.h
 */

#include "AliITSv11Geometry.h"
#include "AliITSUv0.h"
#include <TGeoManager.h>
#include <TGeoCompositeShape.h>
#include <TGeoXtru.h>

class TGeoVolume;

class AliITSUv0Layer : public AliITSv11Geometry {
  public:
    AliITSUv0Layer();
    AliITSUv0Layer(Int_t debug);
    AliITSUv0Layer(Int_t lay, Int_t debug);
    AliITSUv0Layer(Int_t lay, Bool_t turbo, Int_t debug);
    AliITSUv0Layer(const AliITSUv0Layer &source);
    AliITSUv0Layer& operator=(const AliITSUv0Layer &source);
    virtual ~AliITSUv0Layer();
    //
    Bool_t    IsTurbo() const {return fIsTurbo;};

    Double_t  GetStaveThick() const {return fStaveThick;};
    Double_t  GetStaveTilt()  const {return fStaveTilt;};
    Double_t  GetStaveWidth() const {return fStaveWidth;};
    Double_t  GetSensorThick() const {return fSensorThick;};
    Double_t  GetNStaves()    const {return fNStaves;};
    Double_t  GetNChips()    const {return fNChips;};
    Double_t  GetRadius()      const {return fLayRadius;};
    Double_t  GetPhi0()        const {return fPhi0;};
    Double_t  GetZLength()     const {return fZLength;};
    Int_t     GetChipType()     const {return fChipTypeID;}
    AliITSUv0::AliITSUModel_t GetStaveModel() const {return fStaveModel;}
    //
    void      SetStaveThick(Double_t t)    {fStaveThick = t;};
    void      SetStaveTilt(Double_t t);
    void      SetStaveWidth(Double_t w);
    void      SetSensorThick(Double_t t)    {fSensorThick = t;};
    void      SetNStaves(Int_t n)          {fNStaves = n;};
    void      SetNChips(Int_t m)          {fNChips = m;};
    void      SetRadius(Double_t r)         {fLayRadius = r;};
    void      SetPhi0(Double_t phi)         {fPhi0 = phi;}
    void      SetZLength(Double_t z)        {fZLength   = z;};
    void      SetChipType(Int_t tp)          {fChipTypeID = tp;}
    void      SetBuildLevel(Int_t buildLevel){fBuildLevel=buildLevel;}
    void      SetStaveModel(AliITSUv0::AliITSUModel_t model) {fStaveModel=model;}
    virtual void CreateLayer(TGeoVolume *moth);

  private:
    void CreateLayerTurbo(TGeoVolume *moth);

    Double_t RadiusOfTurboContainer();

    TGeoVolume* CreateStave(const TGeoManager *mgr=gGeoManager);
    //TGeoVolume* CreateChip(Double_t x, Double_t z, const TGeoManager *mgr=gGeoManager);
    TGeoVolume* CreateChip(Double_t x,Double_t y, Double_t z, const TGeoManager *mgr=gGeoManager);


    TGeoVolume* CreateStaveStruct(Double_t x,Double_t z, const TGeoManager *mgr=gGeoManager);
    TGeoVolume* CreateStaveModelDummy(Double_t x,Double_t z, const TGeoManager *mgr=gGeoManager) const;
    TGeoVolume* CreateStaveModel0(Double_t x,Double_t z, const TGeoManager *mgr=gGeoManager);
    TGeoVolume* CreateStaveModel1(Double_t x,Double_t z, const TGeoManager *mgr=gGeoManager);
    TGeoVolume* CreateStaveModel21(Double_t x,Double_t z, const TGeoManager *mgr=gGeoManager);
    TGeoVolume* CreateStaveModel22(Double_t x,Double_t z, const TGeoManager *mgr=gGeoManager);
    TGeoVolume* CreateStaveModel3(Double_t x,Double_t z, const TGeoManager *mgr=gGeoManager);


    Int_t     fLayerNumber; // Current layer number
    Double_t  fPhi0;        // lab phi of 1st stave, in degrees!!!
    Double_t  fLayRadius;   // Inner radius of this layer
    Double_t  fZLength;     // Z length of this layer
    Double_t  fSensorThick; // Sensor thickness
    Double_t  fStaveThick; // Stave thickness
    Double_t  fStaveWidth; // Stave width (for turbo layers only)
    Double_t  fStaveTilt;  // Stave tilt angle (for turbo layers only) in degrees
    Int_t     fNStaves;    // Number of staves in this layer
    Int_t     fNChips;    // Number of chips per stave in this layer
    UInt_t    fChipTypeID;   // detector type id
    Bool_t    fIsTurbo;     // True if this layer is a "turbo" layer
    Int_t     fBuildLevel;  // Used for material studies

    AliITSUv0::AliITSUModel_t fStaveModel; // The stave model

    // Parameters for the Upgrade geometry

    static const Double_t fgkDefaultSensorThick; // Default sensor thickness
    static const Double_t fgkDefaultStaveThick; // Default stave thickness

  ClassDef(AliITSUv0Layer,0) // ITS Upgrade v0 geometry
};

#endif
 AliITSUv0Layer.h:1
 AliITSUv0Layer.h:2
 AliITSUv0Layer.h:3
 AliITSUv0Layer.h:4
 AliITSUv0Layer.h:5
 AliITSUv0Layer.h:6
 AliITSUv0Layer.h:7
 AliITSUv0Layer.h:8
 AliITSUv0Layer.h:9
 AliITSUv0Layer.h:10
 AliITSUv0Layer.h:11
 AliITSUv0Layer.h:12
 AliITSUv0Layer.h:13
 AliITSUv0Layer.h:14
 AliITSUv0Layer.h:15
 AliITSUv0Layer.h:16
 AliITSUv0Layer.h:17
 AliITSUv0Layer.h:18
 AliITSUv0Layer.h:19
 AliITSUv0Layer.h:20
 AliITSUv0Layer.h:21
 AliITSUv0Layer.h:22
 AliITSUv0Layer.h:23
 AliITSUv0Layer.h:24
 AliITSUv0Layer.h:25
 AliITSUv0Layer.h:26
 AliITSUv0Layer.h:27
 AliITSUv0Layer.h:28
 AliITSUv0Layer.h:29
 AliITSUv0Layer.h:30
 AliITSUv0Layer.h:31
 AliITSUv0Layer.h:32
 AliITSUv0Layer.h:33
 AliITSUv0Layer.h:34
 AliITSUv0Layer.h:35
 AliITSUv0Layer.h:36
 AliITSUv0Layer.h:37
 AliITSUv0Layer.h:38
 AliITSUv0Layer.h:39
 AliITSUv0Layer.h:40
 AliITSUv0Layer.h:41
 AliITSUv0Layer.h:42
 AliITSUv0Layer.h:43
 AliITSUv0Layer.h:44
 AliITSUv0Layer.h:45
 AliITSUv0Layer.h:46
 AliITSUv0Layer.h:47
 AliITSUv0Layer.h:48
 AliITSUv0Layer.h:49
 AliITSUv0Layer.h:50
 AliITSUv0Layer.h:51
 AliITSUv0Layer.h:52
 AliITSUv0Layer.h:53
 AliITSUv0Layer.h:54
 AliITSUv0Layer.h:55
 AliITSUv0Layer.h:56
 AliITSUv0Layer.h:57
 AliITSUv0Layer.h:58
 AliITSUv0Layer.h:59
 AliITSUv0Layer.h:60
 AliITSUv0Layer.h:61
 AliITSUv0Layer.h:62
 AliITSUv0Layer.h:63
 AliITSUv0Layer.h:64
 AliITSUv0Layer.h:65
 AliITSUv0Layer.h:66
 AliITSUv0Layer.h:67
 AliITSUv0Layer.h:68
 AliITSUv0Layer.h:69
 AliITSUv0Layer.h:70
 AliITSUv0Layer.h:71
 AliITSUv0Layer.h:72
 AliITSUv0Layer.h:73
 AliITSUv0Layer.h:74
 AliITSUv0Layer.h:75
 AliITSUv0Layer.h:76
 AliITSUv0Layer.h:77
 AliITSUv0Layer.h:78
 AliITSUv0Layer.h:79
 AliITSUv0Layer.h:80
 AliITSUv0Layer.h:81
 AliITSUv0Layer.h:82
 AliITSUv0Layer.h:83
 AliITSUv0Layer.h:84
 AliITSUv0Layer.h:85
 AliITSUv0Layer.h:86
 AliITSUv0Layer.h:87
 AliITSUv0Layer.h:88
 AliITSUv0Layer.h:89
 AliITSUv0Layer.h:90
 AliITSUv0Layer.h:91
 AliITSUv0Layer.h:92
 AliITSUv0Layer.h:93
 AliITSUv0Layer.h:94
 AliITSUv0Layer.h:95
 AliITSUv0Layer.h:96
 AliITSUv0Layer.h:97
 AliITSUv0Layer.h:98
 AliITSUv0Layer.h:99
 AliITSUv0Layer.h:100
 AliITSUv0Layer.h:101
 AliITSUv0Layer.h:102
 AliITSUv0Layer.h:103
 AliITSUv0Layer.h:104
 AliITSUv0Layer.h:105
 AliITSUv0Layer.h:106
 AliITSUv0Layer.h:107
 AliITSUv0Layer.h:108
 AliITSUv0Layer.h:109
 AliITSUv0Layer.h:110