]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/MUONCheckMisAligner.C
Corrected geometry w.r.t. the z-length.
[u/mrichter/AliRoot.git] / MUON / MUONCheckMisAligner.C
index 68bf07abe2a2a42041fcabed0873524ef4049d22..efc2664614acb3290a1c8f2053461e11c0070ff1 100644 (file)
   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.
+  --> User can also generate module misalignments using SetModuleCartMisAlig
+  and SetModuleAngMisAlig
   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 = 0.1, Double_t angmisalig = 1.)
+#if !defined(__CINT__) || defined(__MAKECINT__)
+
+#include "AliMUONGeometryTransformer.h"
+#include "AliMUONGeometryMisAligner.h"
+
+#include "AliGeomManager.h"
+#include "AliCDBManager.h"
+#include "AliCDBMetaData.h"
+#include "AliCDBId.h"
+
+#include <TGeoManager.h>
+#include <TClonesArray.h>
+
+#endif
+
+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", 
+                         const TString& geomFileName = "geometry.root")
 {
   
-  AliMUONGeometryTransformer *transform = new AliMUONGeometryTransformer(true);
-  transform->ReadGeometryData("volpath.dat", "transform.dat");
+  AliMUONGeometryTransformer *transform = new AliMUONGeometryTransformer();
+  transform->LoadGeometryData(geomFileName.Data());
 
-  AliMUONGeometryMisAligner misAligner(cartmisalig,angmisalig);
+  AliMUONGeometryMisAligner misAligner(xcartmisaligm,xcartmisaligw,
+                                       ycartmisaligm,ycartmisaligw,
+                                      angmisaligm,angmisaligw);
 
   // Generate mis alignment data
+
+  // Uncomment lines below if you would like to generate module misalignments
+  // misAligner.SetModuleCartMisAlig(0.0,0.1,0.0,0.1,0.0,0.1); // Full
+  // misAligner.SetModuleAngMisAlig(0.0,0.02,0.0,0.04,0.0,0.02); // Full
+  // misAligner.SetModuleCartMisAlig(0.0,0.003,0.0,0.003,0.0,0.003); // Res
+  // misAligner.SetModuleAngMisAlig(0.0,0.0006,0.0,0.001,0.0,0.0005); // Res
+
   AliMUONGeometryTransformer *newTransform = misAligner.MisAlign(transform,true); 
   newTransform->WriteTransformations("transform2.dat");
   newTransform->WriteMisAlignmentData("misalign.root");
 
   // Apply misAlignment via AliRoot framework
-  TGeoManager::Import("geometry.root");
-  AliRun::ApplyAlignObjsToGeom(
-     const_cast<TClonesArray*>(newTransform->GetMisAlignmentData()));
+  AliGeomManager::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");
+  AliMUONGeometryTransformer* transform3 = new AliMUONGeometryTransformer();
+  transform3->LoadGeometryData("geometry2.root");
   transform3->WriteTransformations("transform3.dat");
                // Check that transform3.dat is equal to transform2.dat
 
+  // Generate misaligned data in local cdb
+  const 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(const_cast<TClonesArray*>(array), id, cdbData);
+
   // To run simulation with misaligned geometry, you have to set
   // the Align option in Config.C:
   // MUON->SetAlign("transform2.dat");