]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONVGeometryBuilder.h
Additional protection in case of negative indexes. More investigation is needed
[u/mrichter/AliRoot.git] / MUON / AliMUONVGeometryBuilder.h
CommitLineData
30178c30 1/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
3
d1cd2474 4// $Id$
30178c30 5// Revision of includes 07/05/2004
692de412 6
7/// \ingroup geometry
8/// \class AliMUONVGeometryBuilder
9/// \brief Abstract base class for geometry construction per module(s)
10///
11/// Author: Ivana Hrivnacova, IPN Orsay
d1cd2474 12
13#ifndef ALI_MUON_V_GEOMETRY_BUILDER_H
14#define ALI_MUON_V_GEOMETRY_BUILDER_H
15
2811276d 16#include <fstream>
17
d1cd2474 18#include <TObject.h>
e118b27e 19#include <TObjArray.h>
067866a3 20#include <TGeoMatrix.h>
d1cd2474 21
22class TGeoTranslation;
23class TGeoRotation;
24class TGeoCombiTrans;
d1cd2474 25
e118b27e 26class AliMUONGeometryModule;
2811276d 27class AliMUONGeometryEnvelopeStore;
e118b27e 28class AliMUONGeometryStore;
fc01c870 29class AliMUONStringIntMap;
d1cd2474 30
31class AliMUONVGeometryBuilder : public TObject
32{
33 public:
9a6c488e 34 AliMUONVGeometryBuilder(Int_t geometryModuleId1,
35 Int_t geometryModuleId2 = -1,
36 Int_t geometryModuleId3 = -1,
37 Int_t geometryModuleId4 = -1,
38 Int_t geometryModuleId5 = -1,
39 Int_t geometryModuleId6 = -1);
d1cd2474 40 AliMUONVGeometryBuilder();
41 virtual ~AliMUONVGeometryBuilder();
d1cd2474 42
43 // methods
9a6c488e 44 void SetReferenceFrame(const TGeoCombiTrans& referenceFrame);
fc01c870 45 void RebuildSVMaps(Bool_t withEnvelopes = true) const;
46 void CreateDetElements() const;
067866a3 47
d1cd2474 48 virtual void CreateMaterials() {} // make = 0; ?
49 // Function to be overriden in a concrete chamber/station
50 // geometry builder class.
51 // Only materials that are not defined in the common
52 // functions should be defined here.
9a6c488e 53
d1cd2474 54 virtual void CreateGeometry() = 0;
55 // Function to be overriden in a concrete chamber/station
56 // geometry builder class.
57 // The geometry built there should not be placed
58 // in ALIC; but all volumes going to ALIC
59 // have to be added as envelopes to the chamber
60 // geometries
61 // (They will be then placed automatically
62 // usind the provided transformation.
9a6c488e 63
d1cd2474 64 virtual void SetTransformations() = 0;
65 // Function to be overriden in a concrete chamber/station
66 // geometry class.
67 // The transformation of each chamber(s) wrt ALICE
68 // should be defined and set to its geometry class.
9a6c488e 69
d1cd2474 70 virtual void SetSensitiveVolumes() = 0;
71 // Function to be overriden in a concrete chamber/station
72 // geometry class.
73 // The sensitive volumes Ids for each chamber
74 // should be defined and set to its geometry class.
9a6c488e 75
067866a3 76 virtual bool ApplyGlobalTransformation() { return true; }
77 // Function to be overriden (and return false)
78 // in the concrete geometry builder classes
79 // which are already defined in the new ALICE
80 // coordinate frame
2811276d 81
e118b27e 82 // access to module geometries
83 Int_t NofGeometries() const;
84 AliMUONGeometryModule* Geometry(Int_t i) const;
85 // In difference from protected GetGeometry()
86 // this function access geometry via index and not
87 // via moduleId
88
d1cd2474 89 protected:
30178c30 90 AliMUONVGeometryBuilder(const AliMUONVGeometryBuilder& rhs);
91
92 // operators
93 AliMUONVGeometryBuilder& operator = (const AliMUONVGeometryBuilder& rhs);
94
d1cd2474 95 // methods
e118b27e 96 AliMUONGeometryModule* GetGeometry(Int_t moduleId) const;
97 AliMUONGeometryEnvelopeStore* GetEnvelopes(Int_t moduleId) const;
fc01c870 98 AliMUONStringIntMap* GetSVMap(Int_t moduleId) const;
d1cd2474 99
9a6c488e 100 // set module transformation
101 void SetTranslation(Int_t moduleId,
102 const TGeoTranslation& translation);
103 void SetTransformation(Int_t moduleId,
104 const TGeoTranslation& translation,
105 const TGeoRotation& rotation);
fc01c870 106
107 // set volumes
108 void SetVolume(Int_t moduleId, const TString& volumeName,
109 Bool_t isVirtual = false);
110 void SetMotherVolume(Int_t moduleId, const TString& volumeName);
9a6c488e 111
d1cd2474 112 private:
2811276d 113 //methods
9a6c488e 114 TGeoHMatrix ConvertTransform(const TGeoHMatrix& transform) const;
6ec9cd4e 115 TGeoHMatrix ConvertDETransform(const TGeoHMatrix& transform) const;
9a6c488e 116 TString ComposePath(const TString& volName, Int_t copyNo) const;
117 void MapSV(const TString& path0,
118 const TString& volName, Int_t detElemId) const;
119
d1cd2474 120 // data members
9a6c488e 121 TObjArray* fGeometryModules; // the modules geometries that will be built
067866a3 122 // by this builder
123 TGeoCombiTrans fReferenceFrame; // the transformation from the builder
124 // reference frame to that of the transform
125 // data files
126
127 ClassDef(AliMUONVGeometryBuilder,4) // MUON chamber geometry base class
d1cd2474 128};
129
e118b27e 130// inline functions
131
132inline Int_t AliMUONVGeometryBuilder::NofGeometries() const
9a6c488e 133{ return fGeometryModules->GetEntriesFast(); }
e118b27e 134
135inline AliMUONGeometryModule* AliMUONVGeometryBuilder::Geometry(Int_t i) const
9a6c488e 136{ return (AliMUONGeometryModule*)fGeometryModules->At(i); }
067866a3 137
d1cd2474 138#endif //ALI_MUON_V_GEOMETRY_BUILDER_H