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 AliMUONTriggerGeometryBuilder
/// \brief MUON Trigger stations geometry construction class
///
/// \author Philippe Crochet (LPCCFd)

#ifndef ALI_MUON_TRIGGER_GEOMETRY_BUILDER_H
#define ALI_MUON_TRIGGER_GEOMETRY_BUILDER_H

#include "AliMUONVGeometryBuilder.h"

class AliMUON;

class AliMUONTriggerGeometryBuilder : public AliMUONVGeometryBuilder
{
  public:
    AliMUONTriggerGeometryBuilder(AliMUON* muon);
    AliMUONTriggerGeometryBuilder();
    virtual ~AliMUONTriggerGeometryBuilder();
  
    // methods
    virtual void CreateGeometry();
    virtual void SetVolumes();
    virtual void SetTransformations();
    virtual void SetSensitiveVolumes();
    
    /// Do not apply global transformation (geometry is defined in the new ALICE reference frame)
    virtual bool ApplyGlobalTransformation() { return false; }
    
  protected:  
    
  private:
    /// Not implemented
    AliMUONTriggerGeometryBuilder(const AliMUONTriggerGeometryBuilder& rhs);
    /// Not implemented
    AliMUONTriggerGeometryBuilder& operator = (const AliMUONTriggerGeometryBuilder& rhs);

    // methods
    void BuildChamberPrototype(Int_t icount) const;  
    void BuildRPCSupportsVertical(Int_t& iVolNum, Int_t icount) const;    
    void BuildRPCSupportsHorizontal(Int_t icount) const;    
    void BuildAngularSupportForChambers(Int_t icount) const;  
    void BuildGasPipes(Int_t icount) const;         
    void BuildChamberTypeA(Int_t& iVolNum, Int_t icount);  
    void BuildChamberTypeB(Int_t& iVolNum, Int_t icount);  
    void BuildChamberTypeD(Int_t& iVolNum, Int_t icount);  
    void BuildChamberTypeE(Int_t& iVolNum, Int_t icount);  
    void BuildChamberTypeF(Int_t& iVolNum, Int_t icount);  

    // constants
    
    static const Float_t fgkDXZERO; ///<  vertical gap between right and left chambers (kDXZERO*2=4cm)

    // main distances for chamber definition in first plane/first station
    static const Float_t fgkXMIN; ///< xmin distance in first plane/first station    
    static const Float_t fgkXMED; ///< xmed distance in first plane/first station                                 
    static const Float_t fgkXMAX; ///< xmax distance in first plane/first station  

    // 090704 kXMAX changed from 272 to 255.
    // (see fig.2-4 & 2-5 of Local Trigger Board PRR)
    // segmentation updated accordingly
    static const Float_t fgkYMIN; ///< add                             
    static const Float_t fgkYMAX; ///< add                            

    // inner/outer radius of flange between beam shield. and chambers (1/station)
    //    static const Float_t fgkRMIN[2]={50.,50.};
    //    static const Float_t fgkRMAX[2]={64.,68.};
    // z position of the middle of the gas gap in mother vol 
    static const Float_t fgkZm; ///< inner radius of flange between beam shield. and chambers (1/station)
    static const Float_t fgkZp; ///< outer radius of flange between beam shield. and chambers (1/station)
    
    static const Float_t fgkYVSup[4]; ///< y positions of vertical supports

    static const Float_t fgkSizeVSupExt[3]; ///< ext dimensions of vertical supports 
    static const Float_t fgkSizeVSupInt[3]; ///< int dimensions of vertical supports  

    static const Float_t fgkSizeSupport1V[3]; ///< transverse dimensions of 1V angular supports 
    static const Float_t fgkSizeSupport1H[3]; ///< transverse dimensions of 1H angular supports 
       // z should be 1.4 in the installed set-up 
    static const Float_t fgkSizeSupport2V[3]; ///< transverse dimensions of 2V angular supports  
    static const Float_t fgkSizeSupport2H[3]; ///< transverse dimensions of 2H angular supports  
    static const Float_t fgkSizeSupportXV[3]; ///< transverse dimensions of XV angular supports 
    static const Float_t fgkSizeSupportXH[3]; ///< transverse dimensions of XH angular supports 

    static const Float_t fgkSizeSupportCable[3]; /// transverse dimensions of horizontal cable supports
    static const Float_t fgkSizeGasPipe[3]; ///< dimensions of gas pipes (inner and outer radius)

    static const Float_t fgkOffsetGasPipe;  ///< Position of gas pipe with respect to angular support
    static const Float_t fgkAvoidExtrusion; ///<  Small cut on some volumes to avoid extrusion from SC1x
    
    // 
    TString GetVolumeName(const TString& volume, Int_t icount) const; 
    TString GetVolEnvName(Int_t icount, Int_t ienv) const; 
    TString GetVolAluAngSuppName(
                     const TString& type1234X, 
                     const TString& typeHV,
                     Int_t icount) const;                      
    TString GetVolEnvSuppAngName(
                     const TString& type1234X, 
                     const TString& typeHV, 
                     const TString& typeABDEF,
                     Int_t icount, Int_t ivol) const;                      
    TString GetVolEnvInoxGasPipeName(
                     const TString& type12, 
                     const TString& typeABCDEF,
                     Int_t icount, Int_t ivol) const;                      
                           
    
    // data members 
    AliMUON*  fMUON;   ///< the MUON detector class 
    Int_t*    fIdtmed; //!< tracking media   
    Int_t     fIdAir;  //!< medium 1
    Int_t     fIdAlu1; //!< medium 4
    Int_t     fIdInox; //!< medium 29 Stainless Steel (18%Cr,9%Ni,Fe)
    Float_t   fYEnvPsave; //!< add
    Float_t   fYEnvMsave; //!< add
    Float_t   fDYsave;    //!< add
    Float_t   fDXsave;    //!< add
    TGeoRotation fRsupportpipe; ///< pipe support rotation 
        
  ClassDef(AliMUONTriggerGeometryBuilder,1) // MUON Trigger stations geometry construction class
};

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