]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONSegFactory.h
Added protection and 2 levels for problems
[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("volpath.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 #include "AliMpCathodType.h"
40
41 #include <TObject.h>
42
43 class AliMpVSegmentation;
44 class AliMUONVGeometryDESegmentation;
45 class AliMUONGeometrySegmentation;
46 class AliMUONSegmentation;
47 class AliMUONGeometryTransformer;
48
49 class AliMUONSegFactory : public  TObject {
50
51   public:
52     AliMUONSegFactory(const AliMUONGeometryTransformer* geometry);
53     AliMUONSegFactory(const TString& volPathsFileName,
54                       const TString& transformsFileName);
55     AliMUONSegFactory();
56     virtual ~AliMUONSegFactory();
57     
58     //
59     // Build methods
60     //
61     
62     AliMUONSegmentation* CreateSegmentation(); 
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   private:
73     /// Not implemented
74     AliMUONSegFactory(const AliMUONSegFactory& rhs);
75     /// Not implemented
76     AliMUONSegFactory& operator=(const AliMUONSegFactory& rhs);
77
78     AliMUONVGeometryDESegmentation*  
79       CreateDESegmentation(Int_t detElemId, AliMp::CathodType cath);
80               // Create DE segmentation, operating in local reference frame
81     
82     void
83       CreateModuleSegmentations(Int_t chamberId, AliMp::CathodType cath); 
84               // Create module segmentation(s) for a given chamber, operating 
85               // in global reference frame
86
87     // methods
88     Bool_t IsGeometryDefined(Int_t ichamber);
89     AliMUONSegmentation* Segmentation();
90     
91     // data members     
92     AliMpStringObjMap     fDESegmentations;///< Map of DE segmentations to DE seg names
93     AliMUONSegmentation*  fSegmentation;   ///< Segmentation container 
94     const AliMUONGeometryTransformer* fkTransformer; ///< Geometry transformer
95
96   ClassDef(AliMUONSegFactory,0)  // MUON Factory for Chambers and Segmentation
97 };
98
99 /// Return segmentation
100 inline AliMUONSegmentation* AliMUONSegFactory::GetSegmentation() const
101 { return fSegmentation; }
102
103 #endif //ALI_MUON_SEG_FACTORY_H
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118