**************************************************************************/
// $Id$
-//
-// ----------------------------
+
+//-----------------------------------------------------------------------------
// Class AliMUONGeometryBuilder
// ----------------------------
// Manager class for geometry construction via geometry builders.
// Author: Ivana Hrivnacova, IPN Orsay
+//-----------------------------------------------------------------------------
#include "AliMUONGeometryBuilder.h"
#include "AliMUONVGeometryBuilder.h"
#include "AliMUONGeometryEnvelope.h"
#include "AliMUONGeometryEnvelopeStore.h"
#include "AliMUONGeometryDetElement.h"
-#include "AliMUONGeometryStore.h"
#include "AliMUONGeometryConstituent.h"
+#include "AliMpDEManager.h"
+
#include "AliModule.h"
#include "AliLog.h"
#include "AliRun.h"
if (fAlign) {
// Read transformations from ASCII data file
fGeometry->GetTransformer()
- ->ReadGeometryData(fgkDefaultVolPathsFileName, fTransformFileName);
+ ->LoadGeometryData(fTransformFileName);
}
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
// Create geometry + envelopes
//
builder->CreateGeometry();
+ builder->SetVolumes();
if (!fAlign) builder->SetTransformations();
// Place module volumes and envelopes
AliMUONGeometryEnvelope* env
= (AliMUONGeometryEnvelope*)kEnvelopes->At(k);
+ // Check consistency of detElemId and module Id
+ if ( env->GetUniqueID() > 0 &&
+ AliMpDEManager::GetGeomModuleId(env->GetUniqueID())
+ != geometry->GetModuleId() ) {
+
+ AliErrorStream()
+ << "Detection element " << env->GetUniqueID()
+ << " is being placed in geometry module " << geometry->GetModuleId()
+ << " but should go in "
+ << AliMpDEManager::GetGeomModuleId(env->GetUniqueID())
+ << endl;
+ AliFatal("Inconsistent IDs");
+ }
+
const TGeoCombiTrans* kEnvTrans = env->GetTransformation();
const char* only = "ONLY";
if (env->IsMANY()) only = "MANY";
if (fAlign) {
// Read transformations from ASCII data file
- fGeometry->GetTransformer()
- ->ReadGeometryData(fgkDefaultVolPathsFileName, fTransformFileName);
+ fGeometry->GetTransformer()->LoadGeometryData(fTransformFileName);
}
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
AliMUONGeometryEnvelope* env
= (AliMUONGeometryEnvelope*)kEnvelopes->At(k);
+ // Check consistency of detElemId and module Id
+ if ( env->GetUniqueID() > 0 &&
+ AliMpDEManager::GetGeomModuleId(env->GetUniqueID())
+ != geometry->GetModuleId() ) {
+
+ AliErrorStream()
+ << "Detection element " << env->GetUniqueID()
+ << " is being placed in geometry module " << geometry->GetModuleId()
+ << " but should go in "
+ << AliMpDEManager::GetGeomModuleId(env->GetUniqueID())
+ << endl;
+ AliFatal("Inconsistent IDs");
+ }
+
const TGeoCombiTrans* kEnvTrans = env->GetTransformation();
const char* only = "ONLY";
if (env->IsMANY()) only = "MANY";
{
/// Construct geometry using geometry builders.
- if ( gMC->IsRootGeometrySupported() &&
- TString(gMC->ClassName()) != "TGeant4" ) {
+ if ( gMC->IsRootGeometrySupported() ) {
CreateGeometryWithTGeo();
}
else
CreateGeometryWithoutTGeo();
+
+ for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
+
+ // Get the builder
+ AliMUONVGeometryBuilder* builder
+ = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
+
+ // Update detection elements from built geometry
+ Bool_t create = ! fAlign;
+ builder->UpdateDetElements(create);
+ }
}
//_____________________________________________________________________________
// Load alignement data from geometry if geometry is read from Root file
if ( gAlice->IsRootGeometry() ) {
fAlign = true;
-
- fGeometry->GetTransformer()
- ->ReadGeometryData(fgkDefaultVolPathsFileName, gGeoManager);
- }
+ fGeometry->GetTransformer()->LoadGeometryData();
+ }
// Read sensitive volume map from a file
fGeometry->ReadSVMap(svmapFileName);
-
+
// Set the chamber (sensitive region) GEANT identifier
//
for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
// Set sensitive volumes with each builder
builder->SetSensitiveVolumes();
-
- if (!fAlign) {
- // Create detection elements from built geometry
- builder->CreateDetElements();
- }
}
}
+//________________________________________________________________
+void AliMUONGeometryBuilder::UpdateInternalGeometry()
+{
+/// Update geometry after applying mis-alignment:
+/// reload transformations in geometry builder.
+
+ fGeometry->GetTransformer()->LoadTransformations();
+}
+
//______________________________________________________________________________
void AliMUONGeometryBuilder::WriteSVMaps(const TString& fileName,
- Bool_t rebuild)
+ Bool_t rebuild, Bool_t writeEnvelopes)
{
/// Write sensitive volume maps into files per builder
AliMUONVGeometryBuilder* builder
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
- Bool_t writeEnvelopes = false;
- if ( gMC->IsRootGeometrySupported() &&
- TString(gMC->ClassName()) != "TGeant4") writeEnvelopes = true;
-
builder->RebuildSVMaps(writeEnvelopes);
}