in this plane. Misalignments in the XZ and YZ plane will be very small
compared to those in the XY plane, which are small already - of the order
of microns)
+ --> Default behavior generates a "residual" misalignment using gaussian
+ distributions. Uniform distributions can still be used, see
+ AliMUONGeometryAligner.
Note : If the detection elements are allowed to be misaligned in all
directions, this has consequences for the alignment algorithm, which
needs to know the number of free parameters. Eric only allowed 3 :
*/
-void MUONCheckMisAligner(Double_t cartmisalig = 1.0, Double_t angmisalig = 10.)
+void MUONCheckMisAligner(Double_t xcartmisaligm = 0.0, Double_t xcartmisaligw = 0.004,
+ Double_t ycartmisaligm = 0.0, Double_t ycartmisaligw = 0.003,
+ Double_t angmisaligm = 0.0, Double_t angmisaligw = 0.0023,
+ TString nameCDB = "ResMisAlignCDB")
{
AliMUONGeometryTransformer *transform = new AliMUONGeometryTransformer(true);
- transform->ReadTransformations("transform.dat");
-
- AliMUONGeometryMisAligner misAligner(cartmisalig,angmisalig);
+ transform->ReadGeometryData("volpath.dat", "transform.dat");
+ if (gSystem->AccessPathName("geometry.root",kFileExists))
+ gGeoManager->Export("geometry.root");
+ AliMUONGeometryMisAligner misAligner(xcartmisaligm,xcartmisaligw,
+ ycartmisaligm,ycartmisaligw,
+ angmisaligm,angmisaligw);
+ // Generate mis alignment data
AliMUONGeometryTransformer *newTransform = misAligner.MisAlign(transform,true);
newTransform->WriteTransformations("transform2.dat");
+ newTransform->WriteMisAlignmentData("misalign.root");
+
+ // Apply misAlignment via AliRoot framework
+ TGeoManager::Import("geometry.root");
+ AliSimulation::ApplyAlignObjsToGeom(
+ const_cast<TClonesArray*>(newTransform->GetMisAlignmentData()));
+ // Save new geometry file
+ gGeoManager->Export("geometry2.root");
+
+ // Extract new transformations
+ AliMUONGeometryTransformer* transform3 = new AliMUONGeometryTransformer(true);
+ transform3->ReadGeometryData("volpath.dat", "geometry2.root");
+ transform3->WriteTransformations("transform3.dat");
+ // Check that transform3.dat is equal to transform2.dat
+
+ // Generate misaligned data in local cdb
+ TClonesArray* array = newTransform->GetMisAlignmentData();
+
+ TString sLocCDB("local://");
+ sLocCDB += nameCDB;
+ // CDB manager
+ AliCDBManager* cdbManager = AliCDBManager::Instance();
+ cdbManager->SetDefaultStorage(sLocCDB.Data());
+
+ AliCDBMetaData* cdbData = new AliCDBMetaData();
+ cdbData->SetResponsible("Dimuon Offline project");
+ cdbData->SetComment("MUON alignment objects with residual misalignment");
+ AliCDBId id("MUON/Align/Data", 0, 0);
+ cdbManager->Put(array, id, cdbData);
// To run simulation with misaligned geometry, you have to set
// the Align option in Config.C: