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

// $Id$
// Revision of includes 07/05/2004
//
/// \ingroup sim
/// \class AliMUONSt1GeometryBuilderV2
/// \brief MUON Station1 detailed geometry construction class
///
/// \author David Guez, Ivana Hrivnacova, Marion MacCormick; IPN Orsay

#ifndef ALI_MUON_ST1_GEOMETRY_BUILDER_V2_H
#define ALI_MUON_ST1_GEOMETRY_BUILDER_V2_H


#include "AliMUONVGeometryBuilder.h"

#include <TExMap.h>

// typedef Float_t GReal_t; // for AliGeant3
typedef Double_t GReal_t;  // for VirtualMC

class AliMUON;
class AliMpSector;

class TTree;
class TVector2;
class TVector3;

class AliMUONSt1GeometryBuilderV2 : public AliMUONVGeometryBuilder 
{
  public:
    AliMUONSt1GeometryBuilderV2(AliMUON* muon);
    AliMUONSt1GeometryBuilderV2();
    virtual ~AliMUONSt1GeometryBuilderV2();

    virtual void CreateMaterials();
    virtual void CreateGeometry();
    virtual void SetVolumes();
    virtual void SetTransformations();
    virtual void SetSensitiveVolumes();
   
  protected:
 
  private:
    /// Not implemented
    AliMUONSt1GeometryBuilderV2(const AliMUONSt1GeometryBuilderV2& rMUON);
    /// Not implemented
    AliMUONSt1GeometryBuilderV2& operator = (const AliMUONSt1GeometryBuilderV2& rhs);    

    // Constants
    //
    static const GReal_t fgkHzPadPlane;    ///< Pad plane
    static const GReal_t fgkHzFoam;        ///< Foam of mechanicalplane
    static const GReal_t fgkHzFR4;         ///< FR4 of mechanical plane
    static const GReal_t fgkHzSnPb;        ///< Pad/Kapton connection (66 pt)
    static const GReal_t fgkHzKapton;      ///< Kapton
    static const GReal_t fgkHzBergPlastic; ///< Berg connector 
    static const GReal_t fgkHzBergCopper;  ///< Berg connector (80 pt)
    static const GReal_t fgkHzDaughter;    ///< Daughter board
    static const GReal_t fgkHzGas;         ///< ArCO2 Gas
        
    // Sensitive copper pads, foam layer, PCB and electronics model parameters
    static const GReal_t fgkHxHole;          ///< foam hole paremeter
    static const GReal_t fgkHyHole;          ///< foam hole paremeter
    static const GReal_t fgkHxBergPlastic;   ///< Berg connector parameter
    static const GReal_t fgkHyBergPlastic;   ///< Berg connector parameter
    static const GReal_t fgkHxBergCopper;    ///< Berg connector parameter
    static const GReal_t fgkHyBergCopper;    ///< Berg connector parameter
    static const GReal_t fgkHxKapton;        ///< Kapton parameter
    static const GReal_t fgkHyKapton;        ///< Kapton parameter
    static const GReal_t fgkHxDaughter;      ///< Electronics parameter
    static const GReal_t fgkHyDaughter;      ///< Electronics parameter
    static const GReal_t fgkOffsetX;         ///< Offset X
    static const GReal_t fgkOffsetY;         ///< Offset Y
    static const GReal_t fgkDeltaFilleEtamX; ///< Electronics parameter
    static const GReal_t fgkDeltaFilleEtamY; ///< Electronics parameter

    static const GReal_t fgkDeltaQuadLHC; ///< LHC Origin wrt Quadrant Origin
    static const GReal_t fgkFrameOffset;  ///< Frame offset

    // Pad planes offsets
    static const GReal_t fgkPadXOffsetBP; ///< Horizontal offset in bending plane  
    static const GReal_t fgkPadYOffsetBP; ///< Vertical offset in bending plane 

    // Quadrant Mother volume - TUBS1   
    static const GReal_t fgkMotherIR1;    ///< Middle Layer Rin
    static const GReal_t fgkMotherOR1;    ///< Middle Layer Rout
    static const GReal_t fgkMotherThick1; ///< Middle Layer Hz 
    static const GReal_t fgkMotherPhiL1;  ///< Middle Layer Sphi
    static const GReal_t fgkMotherPhiU1;  ///< Middle Layer Endphi

    // Quadrant Mother volume - TUBS2 (2 copies at different Z's)   
    static const GReal_t fgkMotherIR2;    ///< Near and Far Layer Rin
    static const GReal_t fgkMotherOR2;    ///< Near and Far Layer Rout
    static const GReal_t fgkMotherThick2; ///< Near and Far Layer Hz 
    static const GReal_t fgkMotherPhiL2;  ///< Near and Far Layer Sphi
    static const GReal_t fgkMotherPhiU2;  ///< Near and Far Layer Endphi  

    static const char* fgkHoleName;          ///< prefix for automatic volume naming
    static const char* fgkQuadrantEnvelopeName; ///< prefix for automatic volume naming
    static const char* fgkQuadrantMLayerName;///< prefix for automatic volume naming
    static const char* fgkQuadrantNLayerName;///< prefix for automatic volume naming
    static const char* fgkQuadrantFLayerName;///< prefix for automatic volume naming
    static const char* fgkQuadrantMFLayerName;    ///< prefix for automatic volume naming
    static const char* fgkDaughterName;      ///< prefix for automatic volume naming
    static const Int_t fgkFoamBoxNameOffset; ///< coefficient for automatic volume naming
    static const Int_t fgkFR4BoxNameOffset;  ///< coefficient for automatic volume naming
    static const Int_t fgkDaughterCopyNoOffset; ///< \brief copy number offset for daughter 
                                                /// boards positions in non-bending plane

    // Methods
    //
    void CreateHole();
    void CreateDaughterBoard();
    void CreateInnerLayers();
    void CreateSpacer0();
    void CreateSpacer();
    void CreateQuadrant(Int_t chamber);
    void CreateFoamBox(Int_t segNumber, const TVector2& dimensions);
    void CreatePlaneSegment(Int_t segNumber, const TVector2& dimensions,
                     Int_t nofHoles);
    void CreateQuadrantLayersAsVolumes(Int_t chamber);
    void CreateQuadrantLayersAsAssemblies(Int_t chamber);
    void CreateFrame(Int_t chamber);

    void PlaceInnerLayers(Int_t chamber);
    void PlaceSpacer0(Int_t chamber);
    void PlaceSector(const AliMpSector* sector, TExMap specialMap,
                     const TVector3& where, Bool_t reflectZ, Int_t chamber);
		     
    TString QuadrantEnvelopeName(Int_t chamber, Int_t quadrant) const;
    TString QuadrantMLayerName(Int_t chamber) const;
    TString QuadrantNLayerName(Int_t chamber) const;
    TString QuadrantFLayerName(Int_t chamber) const;
    TString QuadrantMFLayerName(Int_t chamber) const;
    TString PlaneSegmentName(Int_t segNumber) const;
    TString FoamBoxName(Int_t segNumber) const;
    TString FR4BoxName(Int_t segNumber) const;
    TString GasVolumeName(const TString& name, Int_t chamber) const;

    GReal_t TotalHzPlane() const ; 
    GReal_t TotalHzDaughter() const ;
    GReal_t TotalHz() const ;
       
    // Data members
    //
    //Float_t  fRadlCopper;  //! copper computed radiation length
    //Float_t  fRadlFoam;    //! foam   computed radiation length
    //Float_t  fRadlFR4;     //! FR4    computed radiation length
    AliMUON*  fMUON; ///< the MUON detector class 
    
  ClassDef(AliMUONSt1GeometryBuilderV2,1)  // MUON Detector base class
};

// inline functions

/// Return total mechanical plane half Size
inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHzPlane() const 
//{ return fgkHzPadPlane + fgkHzFoam + fgkHzFR4; }
{ return fgkHzFoam + fgkHzFR4; }

/// Return total daughter plane half Size
inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHzDaughter() const 
{ return fgkHzBergPlastic + fgkHzDaughter; }

/// Return total plane half Size
inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHz() const 
{ return TotalHzPlane() + TotalHzDaughter(); }

/// Return middle quadrant layer name for chamber \a chamber
inline TString AliMUONSt1GeometryBuilderV2::QuadrantMLayerName(Int_t chamber) const
{ return Form("%s%d",fgkQuadrantMLayerName,chamber); }

/// Return middle quadrant frame layer name for chamber \a chamber
inline TString AliMUONSt1GeometryBuilderV2::QuadrantMFLayerName(Int_t chamber) const
{ return Form("%s%d",fgkQuadrantMFLayerName,chamber); }

/// Return nearer quadrant layer name for chamber \a chamber
inline TString AliMUONSt1GeometryBuilderV2::QuadrantNLayerName(Int_t chamber) const
{ return Form("%s%d",fgkQuadrantNLayerName,chamber); }

/// Return farther quadrant layer name for chamber \a chamber
inline TString AliMUONSt1GeometryBuilderV2::QuadrantFLayerName(Int_t chamber) const
{ return Form("%s%d",fgkQuadrantFLayerName,chamber); }

/// Return plane segment name for segment \a segNumber
inline TString AliMUONSt1GeometryBuilderV2::PlaneSegmentName(Int_t segNumber) const
{ return Form("S%.3d", segNumber); }

/// Return foam box name for segment \a segNumber
inline TString AliMUONSt1GeometryBuilderV2::FoamBoxName(Int_t segNumber) const
{ return Form("S%.3d", segNumber + fgkFoamBoxNameOffset); }

/// Return FR4 box name for segment \a segNumber
inline TString AliMUONSt1GeometryBuilderV2::FR4BoxName(Int_t segNumber) const
{ return Form("S%.3d", segNumber + fgkFR4BoxNameOffset); }

#endif //ALI_MUON_ST1_GEOMETRY_BUILDER_V2_H
 AliMUONSt1GeometryBuilderV2.h:1
 AliMUONSt1GeometryBuilderV2.h:2
 AliMUONSt1GeometryBuilderV2.h:3
 AliMUONSt1GeometryBuilderV2.h:4
 AliMUONSt1GeometryBuilderV2.h:5
 AliMUONSt1GeometryBuilderV2.h:6
 AliMUONSt1GeometryBuilderV2.h:7
 AliMUONSt1GeometryBuilderV2.h:8
 AliMUONSt1GeometryBuilderV2.h:9
 AliMUONSt1GeometryBuilderV2.h:10
 AliMUONSt1GeometryBuilderV2.h:11
 AliMUONSt1GeometryBuilderV2.h:12
 AliMUONSt1GeometryBuilderV2.h:13
 AliMUONSt1GeometryBuilderV2.h:14
 AliMUONSt1GeometryBuilderV2.h:15
 AliMUONSt1GeometryBuilderV2.h:16
 AliMUONSt1GeometryBuilderV2.h:17
 AliMUONSt1GeometryBuilderV2.h:18
 AliMUONSt1GeometryBuilderV2.h:19
 AliMUONSt1GeometryBuilderV2.h:20
 AliMUONSt1GeometryBuilderV2.h:21
 AliMUONSt1GeometryBuilderV2.h:22
 AliMUONSt1GeometryBuilderV2.h:23
 AliMUONSt1GeometryBuilderV2.h:24
 AliMUONSt1GeometryBuilderV2.h:25
 AliMUONSt1GeometryBuilderV2.h:26
 AliMUONSt1GeometryBuilderV2.h:27
 AliMUONSt1GeometryBuilderV2.h:28
 AliMUONSt1GeometryBuilderV2.h:29
 AliMUONSt1GeometryBuilderV2.h:30
 AliMUONSt1GeometryBuilderV2.h:31
 AliMUONSt1GeometryBuilderV2.h:32
 AliMUONSt1GeometryBuilderV2.h:33
 AliMUONSt1GeometryBuilderV2.h:34
 AliMUONSt1GeometryBuilderV2.h:35
 AliMUONSt1GeometryBuilderV2.h:36
 AliMUONSt1GeometryBuilderV2.h:37
 AliMUONSt1GeometryBuilderV2.h:38
 AliMUONSt1GeometryBuilderV2.h:39
 AliMUONSt1GeometryBuilderV2.h:40
 AliMUONSt1GeometryBuilderV2.h:41
 AliMUONSt1GeometryBuilderV2.h:42
 AliMUONSt1GeometryBuilderV2.h:43
 AliMUONSt1GeometryBuilderV2.h:44
 AliMUONSt1GeometryBuilderV2.h:45
 AliMUONSt1GeometryBuilderV2.h:46
 AliMUONSt1GeometryBuilderV2.h:47
 AliMUONSt1GeometryBuilderV2.h:48
 AliMUONSt1GeometryBuilderV2.h:49
 AliMUONSt1GeometryBuilderV2.h:50
 AliMUONSt1GeometryBuilderV2.h:51
 AliMUONSt1GeometryBuilderV2.h:52
 AliMUONSt1GeometryBuilderV2.h:53
 AliMUONSt1GeometryBuilderV2.h:54
 AliMUONSt1GeometryBuilderV2.h:55
 AliMUONSt1GeometryBuilderV2.h:56
 AliMUONSt1GeometryBuilderV2.h:57
 AliMUONSt1GeometryBuilderV2.h:58
 AliMUONSt1GeometryBuilderV2.h:59
 AliMUONSt1GeometryBuilderV2.h:60
 AliMUONSt1GeometryBuilderV2.h:61
 AliMUONSt1GeometryBuilderV2.h:62
 AliMUONSt1GeometryBuilderV2.h:63
 AliMUONSt1GeometryBuilderV2.h:64
 AliMUONSt1GeometryBuilderV2.h:65
 AliMUONSt1GeometryBuilderV2.h:66
 AliMUONSt1GeometryBuilderV2.h:67
 AliMUONSt1GeometryBuilderV2.h:68
 AliMUONSt1GeometryBuilderV2.h:69
 AliMUONSt1GeometryBuilderV2.h:70
 AliMUONSt1GeometryBuilderV2.h:71
 AliMUONSt1GeometryBuilderV2.h:72
 AliMUONSt1GeometryBuilderV2.h:73
 AliMUONSt1GeometryBuilderV2.h:74
 AliMUONSt1GeometryBuilderV2.h:75
 AliMUONSt1GeometryBuilderV2.h:76
 AliMUONSt1GeometryBuilderV2.h:77
 AliMUONSt1GeometryBuilderV2.h:78
 AliMUONSt1GeometryBuilderV2.h:79
 AliMUONSt1GeometryBuilderV2.h:80
 AliMUONSt1GeometryBuilderV2.h:81
 AliMUONSt1GeometryBuilderV2.h:82
 AliMUONSt1GeometryBuilderV2.h:83
 AliMUONSt1GeometryBuilderV2.h:84
 AliMUONSt1GeometryBuilderV2.h:85
 AliMUONSt1GeometryBuilderV2.h:86
 AliMUONSt1GeometryBuilderV2.h:87
 AliMUONSt1GeometryBuilderV2.h:88
 AliMUONSt1GeometryBuilderV2.h:89
 AliMUONSt1GeometryBuilderV2.h:90
 AliMUONSt1GeometryBuilderV2.h:91
 AliMUONSt1GeometryBuilderV2.h:92
 AliMUONSt1GeometryBuilderV2.h:93
 AliMUONSt1GeometryBuilderV2.h:94
 AliMUONSt1GeometryBuilderV2.h:95
 AliMUONSt1GeometryBuilderV2.h:96
 AliMUONSt1GeometryBuilderV2.h:97
 AliMUONSt1GeometryBuilderV2.h:98
 AliMUONSt1GeometryBuilderV2.h:99
 AliMUONSt1GeometryBuilderV2.h:100
 AliMUONSt1GeometryBuilderV2.h:101
 AliMUONSt1GeometryBuilderV2.h:102
 AliMUONSt1GeometryBuilderV2.h:103
 AliMUONSt1GeometryBuilderV2.h:104
 AliMUONSt1GeometryBuilderV2.h:105
 AliMUONSt1GeometryBuilderV2.h:106
 AliMUONSt1GeometryBuilderV2.h:107
 AliMUONSt1GeometryBuilderV2.h:108
 AliMUONSt1GeometryBuilderV2.h:109
 AliMUONSt1GeometryBuilderV2.h:110
 AliMUONSt1GeometryBuilderV2.h:111
 AliMUONSt1GeometryBuilderV2.h:112
 AliMUONSt1GeometryBuilderV2.h:113
 AliMUONSt1GeometryBuilderV2.h:114
 AliMUONSt1GeometryBuilderV2.h:115
 AliMUONSt1GeometryBuilderV2.h:116
 AliMUONSt1GeometryBuilderV2.h:117
 AliMUONSt1GeometryBuilderV2.h:118
 AliMUONSt1GeometryBuilderV2.h:119
 AliMUONSt1GeometryBuilderV2.h:120
 AliMUONSt1GeometryBuilderV2.h:121
 AliMUONSt1GeometryBuilderV2.h:122
 AliMUONSt1GeometryBuilderV2.h:123
 AliMUONSt1GeometryBuilderV2.h:124
 AliMUONSt1GeometryBuilderV2.h:125
 AliMUONSt1GeometryBuilderV2.h:126
 AliMUONSt1GeometryBuilderV2.h:127
 AliMUONSt1GeometryBuilderV2.h:128
 AliMUONSt1GeometryBuilderV2.h:129
 AliMUONSt1GeometryBuilderV2.h:130
 AliMUONSt1GeometryBuilderV2.h:131
 AliMUONSt1GeometryBuilderV2.h:132
 AliMUONSt1GeometryBuilderV2.h:133
 AliMUONSt1GeometryBuilderV2.h:134
 AliMUONSt1GeometryBuilderV2.h:135
 AliMUONSt1GeometryBuilderV2.h:136
 AliMUONSt1GeometryBuilderV2.h:137
 AliMUONSt1GeometryBuilderV2.h:138
 AliMUONSt1GeometryBuilderV2.h:139
 AliMUONSt1GeometryBuilderV2.h:140
 AliMUONSt1GeometryBuilderV2.h:141
 AliMUONSt1GeometryBuilderV2.h:142
 AliMUONSt1GeometryBuilderV2.h:143
 AliMUONSt1GeometryBuilderV2.h:144
 AliMUONSt1GeometryBuilderV2.h:145
 AliMUONSt1GeometryBuilderV2.h:146
 AliMUONSt1GeometryBuilderV2.h:147
 AliMUONSt1GeometryBuilderV2.h:148
 AliMUONSt1GeometryBuilderV2.h:149
 AliMUONSt1GeometryBuilderV2.h:150
 AliMUONSt1GeometryBuilderV2.h:151
 AliMUONSt1GeometryBuilderV2.h:152
 AliMUONSt1GeometryBuilderV2.h:153
 AliMUONSt1GeometryBuilderV2.h:154
 AliMUONSt1GeometryBuilderV2.h:155
 AliMUONSt1GeometryBuilderV2.h:156
 AliMUONSt1GeometryBuilderV2.h:157
 AliMUONSt1GeometryBuilderV2.h:158
 AliMUONSt1GeometryBuilderV2.h:159
 AliMUONSt1GeometryBuilderV2.h:160
 AliMUONSt1GeometryBuilderV2.h:161
 AliMUONSt1GeometryBuilderV2.h:162
 AliMUONSt1GeometryBuilderV2.h:163
 AliMUONSt1GeometryBuilderV2.h:164
 AliMUONSt1GeometryBuilderV2.h:165
 AliMUONSt1GeometryBuilderV2.h:166
 AliMUONSt1GeometryBuilderV2.h:167
 AliMUONSt1GeometryBuilderV2.h:168
 AliMUONSt1GeometryBuilderV2.h:169
 AliMUONSt1GeometryBuilderV2.h:170
 AliMUONSt1GeometryBuilderV2.h:171
 AliMUONSt1GeometryBuilderV2.h:172
 AliMUONSt1GeometryBuilderV2.h:173
 AliMUONSt1GeometryBuilderV2.h:174
 AliMUONSt1GeometryBuilderV2.h:175
 AliMUONSt1GeometryBuilderV2.h:176
 AliMUONSt1GeometryBuilderV2.h:177
 AliMUONSt1GeometryBuilderV2.h:178
 AliMUONSt1GeometryBuilderV2.h:179
 AliMUONSt1GeometryBuilderV2.h:180
 AliMUONSt1GeometryBuilderV2.h:181
 AliMUONSt1GeometryBuilderV2.h:182
 AliMUONSt1GeometryBuilderV2.h:183
 AliMUONSt1GeometryBuilderV2.h:184
 AliMUONSt1GeometryBuilderV2.h:185
 AliMUONSt1GeometryBuilderV2.h:186
 AliMUONSt1GeometryBuilderV2.h:187
 AliMUONSt1GeometryBuilderV2.h:188
 AliMUONSt1GeometryBuilderV2.h:189
 AliMUONSt1GeometryBuilderV2.h:190
 AliMUONSt1GeometryBuilderV2.h:191
 AliMUONSt1GeometryBuilderV2.h:192
 AliMUONSt1GeometryBuilderV2.h:193
 AliMUONSt1GeometryBuilderV2.h:194
 AliMUONSt1GeometryBuilderV2.h:195
 AliMUONSt1GeometryBuilderV2.h:196
 AliMUONSt1GeometryBuilderV2.h:197
 AliMUONSt1GeometryBuilderV2.h:198
 AliMUONSt1GeometryBuilderV2.h:199
 AliMUONSt1GeometryBuilderV2.h:200