#include "AliMUONVGeometryBuilder.h"
#include "AliMUONChamberGeometry.h"
#include "AliMUONGeometryEnvelope.h"
+#include "AliMUONGeometryEnvelopeStore.h"
#include "AliMUONGeometryConstituent.h"
#include "AliMagF.h"
#include "AliRun.h"
AliMUONGeometryBuilder::AliMUONGeometryBuilder()
: TObject(),
fMUON(0),
+ fAlign(false),
fGlobalTransformation(0),
fGeometryBuilders(0)
{
AliMUONGeometryBuilder::AliMUONGeometryBuilder(AliMUON* muon)
: TObject(),
fMUON(muon),
+ fAlign(false),
fGlobalTransformation(0),
fGeometryBuilders(0)
{
// 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
= (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);
+ }
+}
+
+
void CreateGeometry();
void CreateMaterials();
void InitGeometry();
+ void WriteTransformations();
+ void WriteSVMaps(Bool_t rebuild = true);
+
+ // Alignement
+ virtual Bool_t GetAlign() const;
+ virtual void SetAlign(Bool_t align);
void AddBuilder(AliMUONVGeometryBuilder* geomBuilder);
// data members
AliMUON* fMUON; // MUON detector
+ Bool_t fAlign; // option to read transformations
+ // from a file
TGeoCombiTrans* fGlobalTransformation;// global transformation
// applied to the whole geometry
- TObjArray* fGeometryBuilders; // List of Geometry Builders
+ TObjArray* fGeometryBuilders; // list of Geometry Builders
ClassDef(AliMUONGeometryBuilder,2) // MUON Detector class Version 1
};
+// inline functions
+
+inline Bool_t AliMUONGeometryBuilder::GetAlign() const
+{ return fAlign; }
+
#endif //ALI_MUON_GEOMETRY_BUILDER_H