+//_____________________________________________________________________________
+void AliMUONGeometryBuilder::SetAlign(AliMUONVGeometryBuilder* builder)
+{
+/// Set align option to all geometry modules associated with the builder
+
+ for (Int_t j=0; j<builder->NofGeometries(); j++) {
+
+ AliMUONGeometryModule* geometry = builder->Geometry(j);
+
+ geometry->SetAlign(fAlign);
+ }
+}
+
+//
+// public functions
+//
+
+//_____________________________________________________________________________
+void AliMUONGeometryBuilder::AddBuilder(AliMUONVGeometryBuilder* geomBuilder)
+{
+/// Add the geometry builder to the list
+
+ fGeometryBuilders->Add(geomBuilder);
+
+ // Pass geometry modules created in the to the geometry parametrisation
+ for (Int_t i=0; i<geomBuilder->NofGeometries(); i++) {
+ fGeometry->AddModule(geomBuilder->Geometry(i));
+ }
+
+ if (geomBuilder->ApplyGlobalTransformation())
+ geomBuilder->SetReferenceFrame(fGlobalTransformation);
+
+ SetAlign(geomBuilder);
+}
+
+//______________________________________________________________________________
+void AliMUONGeometryBuilder::CreateGeometry()
+{
+/// Construct geometry using geometry builders.
+
+ 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);
+ }
+}
+