]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONGeometryMisAligner.cxx
No compression by default
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryMisAligner.cxx
index f3fae9308d81a6d0e1208642f3d7fc9636e2f534..66ead2277bd34317ac14cc7d01bb2204e72d1e7a 100644 (file)
 //  Eric only allowed 3 :  x,y,theta_xy, but in principle z and the other 
 //  two angles are alignable as well.
 
-
-
 #include "AliMUONGeometryMisAligner.h"
 #include "AliMUONGeometryTransformer.h"
 #include "AliMUONGeometryModuleTransformer.h"
 #include "AliMUONGeometryDetElement.h"
 #include "AliMUONGeometryStore.h"
 #include "AliMUONGeometryBuilder.h"
+
+#include "AliLog.h"
+
 #include <TGeoManager.h>
 #include <Riostream.h>
 #include <TObjArray.h>
@@ -61,8 +62,6 @@
 #include <TMath.h>
 #include <TRandom.h>
 
-#include "AliLog.h"
-
 #include <sstream>
 
 ClassImp(AliMUONGeometryMisAligner)
@@ -117,9 +116,12 @@ operator=(const AliMUONGeometryMisAligner & right)
   return *this;
 }
 
+//_________________________________________________________________________
 void
 AliMUONGeometryMisAligner::SetXYAngMisAligFactor(Double_t factor)
 {
+  /// Set factor 
+
   if (TMath::Abs(factor) > 1.0 && factor > 0.)
     fXYAngMisAligFactor = factor;
   else
@@ -203,10 +205,12 @@ AliMUONGeometryMisAligner::MisAlign(const AliMUONGeometryTransformer *
        new AliMUONGeometryModuleTransformer(iMt);
       newGeometryTransformer->AddModuleTransformer(newModuleTransformer);
 
-      const TGeoCombiTrans *kModuleTransform =
-       kModuleTransformer->GetTransformation();
-      TGeoCombiTrans *newModuleTransform = new TGeoCombiTrans(*kModuleTransform);      // same module transform as the previous one 
-      newModuleTransformer->SetTransformation(*kModuleTransform);
+      TGeoCombiTrans moduleTransform =
+       TGeoCombiTrans(*kModuleTransformer->GetTransformation());
+      TGeoCombiTrans *newModuleTransform = new TGeoCombiTrans(moduleTransform);        
+              // same module transform as the previous one 
+             // no mis align object created
+      newModuleTransformer->SetTransformation(moduleTransform);
 
       AliMUONGeometryStore *detElements =
        kModuleTransformer->GetDetElementStore();
@@ -223,27 +227,36 @@ AliMUONGeometryMisAligner::MisAlign(const AliMUONGeometryTransformer *
          if (!detElement)
            AliFatal("Detection element not found.");
 
-         // local transformation of this detection element.
-         const TGeoCombiTrans *kLocalTransform =
-           detElement->GetLocalTransformation();
-         TGeoCombiTrans newLocalTransform = MisAlign(*kLocalTransform);
-
-         /// make a new detection element with this local transform
+         /// make a new detection element
          AliMUONGeometryDetElement *newDetElement =
            new AliMUONGeometryDetElement(detElement->GetId(),
-                                         detElement->GetAlignedVolume(),
-                                         newLocalTransform);
+                                         detElement->GetVolumePath());
 
-         TGeoHMatrix newGlobalTransform =
-           AliMUONGeometryBuilder::Multiply(newLocalTransform,
-                                            *newModuleTransform);
+         // local transformation of this detection element.
+          TGeoCombiTrans localTransform
+           = TGeoCombiTrans(*detElement->GetLocalTransformation());
+         TGeoCombiTrans newLocalTransform = MisAlign(localTransform);
+          newDetElement->SetLocalTransformation(newLocalTransform);                                      
 
+         // global transformation
+         TGeoHMatrix newGlobalTransform =
+           AliMUONGeometryBuilder::Multiply(*newModuleTransform,
+                                             newLocalTransform);
          newDetElement->SetGlobalTransformation(newGlobalTransform);
-         if (verbose)
-           AliInfo("GlobalTransforms:");
-         newModuleTransformer->GetDetElementStore()->Add(
-                                                         newDetElement->GetId(),
+         
+         // add this det element to module
+         newModuleTransformer->GetDetElementStore()->Add(newDetElement->GetId(),
                                                          newDetElement);
+          // Get delta transformation: 
+         // Tdelta = Tnew * Told.inverse
+         TGeoHMatrix  deltaTransform
+           = AliMUONGeometryBuilder::Multiply(
+               newGlobalTransform, 
+               detElement->GetGlobalTransformation()->Inverse());
+         
+         // Create mis alignment matrix
+         newGeometryTransformer
+           ->AddMisAlignDetElement(detElement->GetId(), deltaTransform);
        }
       if (verbose)
        AliInfo(Form("Added module transformer %i to the transformer", iMt));