- Method MisAlign(const TGeoCombiTrans&) moved to private area
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 8 Feb 2006 15:10:23 +0000 (15:10 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 8 Feb 2006 15:10:23 +0000 (15:10 +0000)
- In MisAlign(const AliMUONGeometryTransformer* ):
  - corrected calculation of global DE transformation
  - adding storing delta matrices in the new transformer
- Reordered includes, forward declarations

MUON/AliMUONGeometryMisAligner.cxx
MUON/AliMUONGeometryMisAligner.h

index f3fae93..566ce38 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)
@@ -203,10 +202,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 +224,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));
index 28775e0..9ba2e07 100644 (file)
 
 #include <TObject.h>
 #include <TGeoMatrix.h>
-class TRandom;
 
 class AliMUONGeometryTransformer;
 
+class TRandom;
+
 class AliMUONGeometryMisAligner:public TObject
 {
  public:
@@ -30,11 +31,9 @@ class AliMUONGeometryMisAligner:public TObject
   // methods
   
   // return a misaligned geometry obtained from the existing one.
-  AliMUONGeometryTransformer* MisAlign(const AliMUONGeometryTransformer* transformer, Bool_t verbose = kFALSE);
+  AliMUONGeometryTransformer* MisAlign(const AliMUONGeometryTransformer* transformer, 
+                                       Bool_t verbose = kFALSE);
   
-  // return a misaligned transformation
-  TGeoCombiTrans MisAlign(const TGeoCombiTrans& transform) const;
-
   void SetMaxCartMisAlig(Double_t offset)
     {fMaxCartMisAlig = offset ;}
   
@@ -49,6 +48,9 @@ class AliMUONGeometryMisAligner:public TObject
   AliMUONGeometryMisAligner & operator =(const AliMUONGeometryMisAligner &right);
   
  private:
+  // return a misaligned transformation
+  TGeoCombiTrans MisAlign(const TGeoCombiTrans& transform) const;
+
   Double_t fMaxCartMisAlig;   // cartesian displacement range, set by SetMaxCartMisAlig (translations)
   Double_t fMaxAngMisAlig;    // Angular displacement range (rotations)
   Double_t fXYAngMisAligFactor; // factor (<1) to apply to angular misalignment range since range of motion is restricted out of the xy plane