#include "AliMUONVGeometryBuilder.h"
#include "AliMUONChamberGeometry.h"
#include "AliMUONGeometryEnvelope.h"
+#include "AliMUONGeometryEnvelopeStore.h"
#include "AliMUONGeometryConstituent.h"
#include "AliMagF.h"
#include "AliRun.h"
+#include "AliLog.h"
ClassImp(AliMUONGeometryBuilder)
AliMUONGeometryBuilder::AliMUONGeometryBuilder()
: TObject(),
fMUON(0),
+ fAlign(false),
fGlobalTransformation(0),
fGeometryBuilders(0)
{
AliMUONGeometryBuilder::AliMUONGeometryBuilder(AliMUON* muon)
: TObject(),
fMUON(muon),
+ fAlign(false),
fGlobalTransformation(0),
fGeometryBuilders(0)
{
{
// copy constructor (not implemented)
- Fatal("AliMUONGeometryBuilder", "Copy constructor not provided.");
+ AliFatal("Copy constructor not provided.");
}
//______________________________________________________________________________
// check assignement to self
if (this == &right) return *this;
- Fatal("operator =", "Assignement operator not provided.");
+ AliFatal("Assignement operator not provided.");
return *this;
}
// Create geometry with each builder
if (builder) {
- builder->CreateGeometry();
- builder->SetTransformations();
+ if (fAlign) {
+ builder->ReadTransformations();
+ builder->CreateGeometry();
+ }
+ else {
+ builder->CreateGeometry();
+ builder->SetTransformations();
+ }
}
}
// Skip chambers with not defined geometry
// Loop over envelopes
- const TObjArray* kEnvelopes = geometry->GetEnvelopes();
+ const TObjArray* kEnvelopes = geometry->GetEnvelopeStore()->GetEnvelopes();
for (Int_t k=0; k<kEnvelopes->GetEntriesFast(); k++) {
// Get envelope
// virtual envelope + nof constituents = 0
// => not allowed;
// empty virtual envelope has no sense
- Fatal("CreateGeometry", "Virtual envelope must have constituents.");
+ AliFatal("Virtual envelope must have constituents.");
return;
}
// non virtual envelope + nof constituents > 0
// => not allowed;
// use VMC to place constituents
- Fatal("CreateGeometry", "Non virtual envelope cannot have constituents.");
+ AliFatal("Non virtual envelope cannot have constituents.");
return;
}
= (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
// Set sesitive volumes with each builder
- if (builder) builder->SetSensitiveVolumes();
+ builder->SetSensitiveVolumes();
+
+ // Read sensitive volume map from a file
+ builder->ReadSVMap();
+ if (!fAlign) builder->FillTransformations();
+ }
+}
+
+//______________________________________________________________________________
+void AliMUONGeometryBuilder::WriteTransformations()
+{
+ // Writes transformations into files per builder
+ // ---
+
+ for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
+
+ // Get the builder
+ AliMUONVGeometryBuilder* builder
+ = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
+
+ // Write transformations
+ builder->WriteTransformations();
+ }
+}
+
+//______________________________________________________________________________
+void AliMUONGeometryBuilder::WriteSVMaps(Bool_t rebuild)
+{
+ // Writes sensitive volume maps into files per builder
+ // ---
+
+ for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
+
+ // Get the builder
+ AliMUONVGeometryBuilder* builder
+ = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
+
+ // Write transformations
+ builder->WriteSVMap(rebuild);
}
}
fGeometryBuilders->Add(geomBuilder);
}
+//_____________________________________________________________________________
+void AliMUONGeometryBuilder::SetAlign(Bool_t align)
+{
+// Sets the option for alignement
+// ---
+
+ fAlign = align;
+
+ for (Int_t j=0; j<AliMUONConstants::NCh(); j++) {
+
+ AliMUONChamberGeometry* geometry = fMUON->Chamber(j).GetGeometry();
+
+ if (!geometry) continue;
+ // Skip chambers with not defined geometry
+
+ geometry->SetAlign(align);
+ }
+}
+
+