]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONSegFactory.h
- Adding option for ownership of sector
[u/mrichter/AliRoot.git] / MUON / AliMUONSegFactory.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2  * See cxx source for full Copyright notice                               */
3
4 /* $Id$ */
5
6 /// \ingroup base
7 /// \class AliMUONSegFactory
8 /// \brief New factory for building segmentations at all levels
9 ///
10 /// The factory is associated with the AliMUONGeometryTransformer
11 /// object, used in geometry (module) segmentations for performing
12 /// trasformation between the global reference frame and the local DE one.
13 /// This transformer object can be passed by pointer or can be created 
14 /// by a factory and filled from the transformations data file.               
15 /// The transformer need not to be set if factory is used only
16 /// to create mapping segmentation:                                           \n
17 ///
18 /// Construction:
19 /// - AliMUONSegFactory  factory(kTransformer);
20 /// - AliMUONSegFactory  factory("volpaths.dat", "transform.dat");
21 /// - AliMUONSegFactory  factory(0);                                          \n
22 ///
23 /// All created objects are registered in the AliMUONSegmentation
24 /// object, which can be accessed via GetSegmentation() method.
25 /// A repetetive call to the same Create.. method does not create
26 /// a new object but returns the existing one.                                \n                
27 /// 
28 /// Factory does not delete the created segmentation objects.
29 /// They have to be deleted in the client code via the AliMUONSegmentation
30 /// container:                                                                \n
31 /// delete factory.GetSegmentation();
32 ///
33 /// \author Ivana Hrivnacova, IPN Orsay
34
35 #ifndef ALI_MUON_SEG_FACTORY_H
36 #define ALI_MUON_SEG_FACTORY_H
37
38 #include "AliMpStringObjMap.h"
39
40 #include <TObject.h>
41
42 class AliMpVSegmentation;
43 class AliMUONVGeometryDESegmentation;
44 class AliMUONGeometrySegmentation;
45 class AliMUONSegmentation;
46 class AliMUONGeometryTransformer;
47
48 class AliMUONSegFactory : public  TObject {
49
50   public:
51     AliMUONSegFactory(const AliMUONGeometryTransformer* geometry);
52     AliMUONSegFactory(const TString& volPathsFileName,
53                       const TString& transformsFileName);
54     AliMUONSegFactory();
55     virtual ~AliMUONSegFactory();
56     
57     //
58     // Build methods
59     //
60     
61     AliMUONSegmentation*  
62       CreateSegmentation(const TString& option = "default"); 
63               // Create segmentations on all levels and return their container.
64     
65     //
66     // Get method
67     //
68     AliMUONSegmentation* GetSegmentation() const;
69               // Returned segmentation contains all the lower level segmentations
70               // created with the factory
71
72   protected:
73     AliMUONSegFactory(const AliMUONSegFactory& rhs);
74     AliMUONSegFactory& operator=(const AliMUONSegFactory& rhs);
75
76   private:
77     AliMUONVGeometryDESegmentation*  
78       CreateDESegmentation(Int_t detElemId, Int_t cath);
79               // Create DE segmentation, operating in local reference frame
80     
81     void
82       CreateModuleSegmentations(Int_t chamberId, Int_t cath); 
83               // Create module segmentation(s) for a given chamber, operating 
84               // in global reference frame
85
86     // methods
87     Bool_t IsGeometryDefined(Int_t ichamber);
88     AliMUONSegmentation* Segmentation();
89     
90     // data members     
91     AliMpStringObjMap     fDESegmentations;///< Map of DE segmentations to DE names
92     AliMUONSegmentation*  fSegmentation;   ///< Segmentation container 
93     const AliMUONGeometryTransformer* fkTransformer; ///< Geometry transformer
94
95   ClassDef(AliMUONSegFactory,0)  // MUON Factory for Chambers and Segmentation
96 };
97
98 /// Return segmentation
99 inline AliMUONSegmentation* AliMUONSegFactory::GetSegmentation() const
100 { return fSegmentation; }
101
102 #endif //ALI_MUON_SEG_FACTORY_H
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117