1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
7 /// \class AliMUONSegFactory
8 /// \brief New factory for building segmentations at all levels
10 /// The factory is associated with a 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
19 /// - AliMUONSegFactory factory(kTransformer);
20 /// - AliMUONSegFactory factory("volpaths.dat", "transform.dat");
21 /// - AliMUONSegFactory factory(0); \n
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
28 /// Factory does not delete the created segmentation objects.
29 /// They have to be deleted in the client code via the AliMUONSegmentation
31 /// delete factory.GetSegmentation();
33 /// Authors: Ivana Hrivnacova, IPN Orsay
35 #ifndef ALI_MUON_SEG_FACTORY_H
36 #define ALI_MUON_SEG_FACTORY_H
38 #include "AliMpSegFactory.h"
39 #include "AliMpStringObjMap.h"
43 class AliMpVSegmentation;
44 class AliMUONVGeometryDESegmentation;
45 class AliMUONGeometrySegmentation;
46 class AliMUONSegmentation;
47 class AliMUONGeometryTransformer;
49 class AliMUONSegFactory : public TObject {
52 AliMUONSegFactory(const AliMUONGeometryTransformer* geometry);
53 AliMUONSegFactory(const TString& volPathsFileName,
54 const TString& transformsFileName);
56 virtual ~AliMUONSegFactory();
63 CreateMpSegmentation(Int_t detElemId, Int_t cath);
64 // Create mapping segmentation only
66 AliMUONVGeometryDESegmentation*
67 CreateDESegmentation(Int_t detElemId, Int_t cath);
68 // Create DE segmentation, operating in local reference frame
70 AliMUONGeometrySegmentation*
71 CreateModuleSegmentation(Int_t moduleId, Int_t cath);
72 // Create module segmentation, operating in global reference frame
75 CreateSegmentation(const TString& option = "default");
76 // Create segmentations on all levels and return their container.
81 AliMUONSegmentation* GetSegmentation() const;
82 // Returned segmentation contains all the lower level segmentations
83 // created with the factory
86 AliMUONSegFactory(const AliMUONSegFactory& rhs);
87 AliMUONSegFactory& operator=(const AliMUONSegFactory& rhs);
91 Bool_t IsGeometryDefined(Int_t ichamber);
92 AliMUONSegmentation* Segmentation();
94 // Old segmentations (not based on mapping)
101 AliMpSegFactory fMpSegFactory; // Mapping segmentation factory
102 AliMpStringObjMap fDESegmentations;// Map of DE segmentations to DE names
103 AliMUONSegmentation* fSegmentation; // Segmentation container
104 const AliMUONGeometryTransformer* fkTransformer; // Geometry transformer
106 ClassDef(AliMUONSegFactory,0) // MUON Factory for Chambers and Segmentation
109 inline AliMUONSegmentation* AliMUONSegFactory::GetSegmentation() const
110 { return fSegmentation; }
112 #endif //ALI_MUON_SEG_FACTORY_H