// Inherits from AliMUONv1 but with a more detailed
// geometrical description of station 1
-#include <map>
+#include <TVector2.h>
+#include <TVector3.h>
#include "AliMUONv1.h"
+#include "AliMUONSt1Types.h"
#include "AliMUONSt1SpecialMotif.h"
-#include <TVector2.h>
-#include <TVector3.h>
-
-typedef Float_t GReal_t; // for AliGeant3
-//typedef Double_t GReal_t; // for VirtualMC
+//typedef Float_t GReal_t; // for AliGeant3
+typedef Double_t GReal_t; // for VirtualMC
class TTree;
-class MSector;
-using std::map;
-
+class TArrayI;
+class AliMpSector;
-class AliMUONv2 : public AliMUONv1 {
+class AliMUONv2 : public AliMUONv1
+{
public:
AliMUONv2();
AliMUONv2(const char* name, const char* title);
virtual ~AliMUONv2();
virtual Int_t IsVersion() const;
- virtual void CreateGeometry();
virtual void CreateMaterials();
-
+ virtual void CreateGeometry();
+ virtual void Init();
+
protected:
// Copy Operator
- AliMUONv2& operator = (const AliMUONv2& rhs);
-
+ AliMUONv2& operator = (const AliMUONv2& rhs);
+ virtual Int_t GetChamberId(Int_t volId) const;
+
private:
-
- typedef map< Int_t , AliMUONSt1SpecialMotif > TSpecialMap;
- 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
-
- GReal_t totalHzPlane() const ; //Total mechanical plane half Size
- GReal_t totalHzDaughter() const ; //Total daughter plane half Size
- GReal_t totalHz() const ; //Total plane half Size
+ // Methods
+ //
+ void CreateHole();
+ void CreateDaughterBoard();
+ void CreateInnerLayers();
+ void CreateQuadrant(Int_t chamber);
+ void CreateFoamBox(const char* name,const TVector2& dimensions);
+ void CreatePlaneSegment(const char* name,const TVector2& dimensions,
+ Int_t nofHoles);
+ void CreateFrame(Int_t chamber);
+ void PlaceInnerLayers(Int_t chamber);
+ void PlaceSector(AliMpSector* sector, TSpecialMap specialMap,
+ const TVector3& where, Bool_t reflectZ, Int_t chamber);
+
+ TString QuadrantMLayerName(Int_t chamber) const;
+ TString QuadrantNLayerName(Int_t chamber) const;
+ TString QuadrantFLayerName(Int_t chamber) const;
+ TString GasVolumeName(const TString& name, Int_t chamber) const;
+
+ void AddChamberGid(Int_t id,Int_t volName,Int_t idx);
+ Bool_t IsInChamber(Int_t ich, Int_t volGid) const;
+
+ GReal_t TotalHzPlane() const ; // Total mechanical plane half Size
+ GReal_t TotalHzDaughter() const ; // Total daughter plane half Size
+ GReal_t TotalHz() const ; // Total plane half Size
+
+ // 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;
static const GReal_t fgkHyHole;
static const GReal_t fgkHxBergPlastic;
static const GReal_t fgkOffsetY;
static const GReal_t fgkDeltaFilleEtamX;
static const GReal_t fgkDeltaFilleEtamY;
- static const GReal_t fgkHxQuadrant;
- static const GReal_t fgkHyQuadrant;
- static const GReal_t fgkMotherIR;
- static const GReal_t fgkMotherOR;
- static const GReal_t fgkMotherThick;
- static const GReal_t fgkMotherPhiL;
- static const GReal_t fgkMotherPhiU;
-
- static const char* fgkHoleName;
- static const char* fgkQuadrantName;
- static const char* fgkDaughterName;
- static const char fgkFoamLayerSuffix;
-
- void CreateHole();
- void CreateDaughterBoard();
- void CreateFrame(Int_t chamber);
- void CreateQuadrant(Int_t chamber);
- void CreatePlaneBox(const char* name,const TVector2& dimensions);
- void CreatePlaneSegment(const char* name,const TVector2& dimensions
- ,Int_t nofHoles);
- void CreateDaughterSegment(const char* name,const TVector2& dimensions
- ,Int_t nofHoles);
- void PlaceSector(MSector* sector,TSpecialMap specialMap
- ,const TVector3& where,Int_t chamber);
- TString QuadrantName(Int_t chamber);
- Int_t fIdSens; // Sensitive volume identifier
+ static const GReal_t fgkDeltaQuadLHC; //LHC Origin wrt Quadrant Origin
+ static const GReal_t fgkFrameOffset;
+
+ // Quadrant Mother volume - TUBS1
+ static const GReal_t fgkMotherIR1;
+ static const GReal_t fgkMotherOR1;
+ static const GReal_t fgkMotherThick1;
+ static const GReal_t fgkMotherPhiL1;
+ static const GReal_t fgkMotherPhiU1;
+
+ // Quadrant Mother volume - TUBS2 (2 copies at different Z's)
+ static const GReal_t fgkMotherIR2;
+ static const GReal_t fgkMotherOR2;
+ static const GReal_t fgkMotherThick2;
+ static const GReal_t fgkMotherPhiL2;
+ static const GReal_t fgkMotherPhiU2;
+
+ static const char* fgkHoleName; // 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* fgkDaughterName; // prefix for automatic volume naming
+ static const char fgkFoamLayerSuffix; // suffix for automatic volume naming
+
+ // Data members
+ //
+ Float_t fRadlCopper; //! copper computed radiation length
+ Float_t fRadlFoam; //! foam computed radiation length
+ Float_t fRadlFR4; //! FR4 computed radiation length
+ TArrayI* fChamberV2[2];// Sensitive volumes IDs
-
ClassDef(AliMUONv2,1) // MUON Detector base class
};
// inline functions
inline Int_t AliMUONv2::IsVersion () const
- { return 2; }
-inline GReal_t AliMUONv2::totalHzPlane() const
- { return fgkHzPadPlane + fgkHzFoam + fgkHzFR4;}
-inline GReal_t AliMUONv2::totalHzDaughter() const
- { return fgkHzBergPlastic + fgkHzDaughter;}
-inline GReal_t AliMUONv2::totalHz() const
- { return totalHzPlane() + totalHzDaughter();}
-inline TString AliMUONv2::QuadrantName(Int_t chamber)
-{return Form("%s%d",fgkQuadrantName,chamber);}
+{ return 2; }
+
+inline GReal_t AliMUONv2::TotalHzPlane() const
+//{ return fgkHzPadPlane + fgkHzFoam + fgkHzFR4; }
+{ return fgkHzFoam + fgkHzFR4; }
+
+inline GReal_t AliMUONv2::TotalHzDaughter() const
+{ return fgkHzBergPlastic + fgkHzDaughter; }
+
+inline GReal_t AliMUONv2::TotalHz() const
+{ return TotalHzPlane() + TotalHzDaughter(); }
+
+inline TString AliMUONv2::QuadrantMLayerName(Int_t chamber) const
+{ return Form("%s%d",fgkQuadrantMLayerName,chamber); }
+
+inline TString AliMUONv2::QuadrantNLayerName(Int_t chamber) const
+{ return Form("%s%d",fgkQuadrantNLayerName,chamber); }
+
+inline TString AliMUONv2::QuadrantFLayerName(Int_t chamber) const
+{ return Form("%s%d",fgkQuadrantFLayerName,chamber); }
+
+inline void AliMUONv2::AddChamberGid(Int_t id,Int_t volName,Int_t idx)
+{ fChamberV2[id]->AddAt(volName,idx); }
#endif //ALI_MUON_V2_H