**************************************************************************/
// $Id$
-//
+
+//-----------------------------------------------------------------------------
// Class AliMUONGeometryModuleTransformer
// -------------------------------------
// Class for definition of the detector module transformations
-//
// Author: Ivana Hrivnacova, IPN Orsay
+//-----------------------------------------------------------------------------
+
+#include "AliMUONGeometryModuleTransformer.h"
+#include "AliMUONGeometryDetElement.h"
+
+#include "AliMpExMap.h"
+
+#include "AliLog.h"
#include <TVirtualMC.h>
#include <TGeoMatrix.h>
#include <TArrayI.h>
#include <Riostream.h>
-#include "AliLog.h"
+using std::endl;
+/// \cond CLASSIMP
+ClassImp(AliMUONGeometryModuleTransformer)
+/// \endcond
-#include "AliMUONGeometryModuleTransformer.h"
-#include "AliMUONGeometryDetElement.h"
-#include "AliMUONGeometryStore.h"
+//
+// static methods
+//
-ClassImp(AliMUONGeometryModuleTransformer)
+//______________________________________________________________________________
+const TString& AliMUONGeometryModuleTransformer::GetModuleNamePrefix()
+{
+ /// Geometry module name prefix
+ static const TString kModuleNamePrefix = "GM";
+ return kModuleNamePrefix;
+}
+
+//______________________________________________________________________________
+TString AliMUONGeometryModuleTransformer::GetModuleName(Int_t moduleId)
+{
+/// Return the module name for given moduleId
+
+ TString moduleName(GetModuleNamePrefix());
+ moduleName += moduleId;
+ return moduleName;
+}
+
+//
+// ctor, dtor
+//
//______________________________________________________________________________
AliMUONGeometryModuleTransformer::AliMUONGeometryModuleTransformer(Int_t moduleId)
: TObject(),
fModuleId(moduleId),
+ fModuleName(GetModuleName(moduleId)),
+ fVolumePath(),
fTransformation(0),
fDetElements(0)
{
/// Standard constructor
// Chamber transformation
- fTransformation = new TGeoCombiTrans("");
+ fTransformation = new TGeoHMatrix("");
// Det elements transformation stores
- fDetElements = new AliMUONGeometryStore(true);
+ fDetElements = new AliMpExMap;
}
//______________________________________________________________________________
-AliMUONGeometryModuleTransformer::AliMUONGeometryModuleTransformer()
+AliMUONGeometryModuleTransformer::AliMUONGeometryModuleTransformer(TRootIOCtor* /*ioCtor*/)
: TObject(),
fModuleId(0),
+ fModuleName(),
+ fVolumePath(),
fTransformation(0),
fDetElements(0)
{
-/// Default constructor
+/// Root IO constructor
}
-//______________________________________________________________________________
-AliMUONGeometryModuleTransformer::AliMUONGeometryModuleTransformer(
- const AliMUONGeometryModuleTransformer& rhs)
- : TObject(rhs)
-{
-/// Protected copy constructor
-
- AliFatal("Copy constructor is not implemented.");
-}
-
//______________________________________________________________________________
AliMUONGeometryModuleTransformer::~AliMUONGeometryModuleTransformer()
{
delete fDetElements;
}
-//______________________________________________________________________________
-AliMUONGeometryModuleTransformer&
-AliMUONGeometryModuleTransformer::operator = (
- const AliMUONGeometryModuleTransformer& rhs)
-{
-/// Protected assignement operator
-
- // check assignement to self
- if (this == &rhs) return *this;
-
- AliFatal("Assignment operator is not implemented.");
-
- return *this;
-}
-
//
// public methods
//
//______________________________________________________________________________
void AliMUONGeometryModuleTransformer::SetTransformation(
- const TGeoCombiTrans& transform)
+ const TGeoHMatrix& transform)
{
/// Set the module position wrt world.
*fTransformation = transform;
}
+//______________________________________________________________________________
+TString AliMUONGeometryModuleTransformer::GetVolumeName() const
+{
+/// Extract volume name from the path
+
+ std::string volPath = fVolumePath.Data();
+ std::string::size_type first = volPath.rfind('/')+1;
+ std::string::size_type last = volPath.rfind('_');
+
+ return volPath.substr(first, last-first );
+}
+
+//______________________________________________________________________________
+TString AliMUONGeometryModuleTransformer::GetMotherVolumeName() const
+{
+/// Extract mother volume name from the path
+
+ std::string volPath = fVolumePath.Data();
+ std::string::size_type first = volPath.rfind('/');
+ if ( first != std::string::npos )
+ volPath = volPath.substr(0, first);
+
+ std::string::size_type next = volPath.rfind('/')+1;
+ std::string::size_type last = volPath.rfind('_');
+
+ return volPath.substr(next, last-next );
+}
+
//______________________________________________________________________________
AliMUONGeometryDetElement*
-AliMUONGeometryModuleTransformer::GetDetElement(Int_t detElemId) const
+AliMUONGeometryModuleTransformer::GetDetElement(Int_t detElemId, Bool_t warn) const
{
/// Return the detection element specified by detElemId.
-/// Give error if detection element is not defined.
+/// Give error if detection element is not defined and warn is true.
// Get detection element
AliMUONGeometryDetElement* detElement
- = (AliMUONGeometryDetElement*) fDetElements->Get(detElemId);
+ = (AliMUONGeometryDetElement*) fDetElements->GetValue(detElemId);
if (!detElement) {
- AliErrorStream()
- << "Detection element " << detElemId
- << " not found in module " << fModuleId << endl;
+ if (warn)
+ AliErrorStream()
+ << "Detection element " << detElemId
+ << " not found in module " << fModuleId << endl;
return 0;
}