ROOT logo
#ifndef ALIPHOSMODULEMISALIGNMENT_H
#define ALIPHOSMODULEMISALIGNMENT_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id: $ */

// Utility class to calculate PHOS module's 
// misalignment from ideal geometry (defined by AliPHOSGeometry)
// and survey data. 5 modules expected.
// Number of modules is specified by enumerator kModules here,
// if this number changes in AliPHOSGeometry
// - CHANGE kModules constant here.
// We do not have such compile-time constant in
// AliPHOSGeometry.
// I define module position by three points
// with names "name0", "name1", "name2".
//
// Module:
//                                 |
// <-------------Z-----------------|--
// name1 ------------------- name0 |
//                               | |
//                               | |
//                               | |
//                               | |
//                               | |
//                               | X
//                               | |
//                               | |
//                               | |
//                               | |
//                           name2 |
//
// For example, in
//    "PHOS MODULE Position 2 (Production 2) 
//     MEASUREMENT AFTER FINAL INSTALLATION
//     Measurement on 19.05.2008": (https://edms.cern.ch/document/922320)
//
// name0 == "T2_10000"
// name1 == "T2_10027"
// name2 == "T2_24000"
//
// Usage:
//
// ...
// AliPHOSGeometry * phosGeom = AliPHOSGeometry::GetInstance("IHEP", "");
// ...
// //For AliSurveyObj usage details see $ALICE_ROOT/STEER/AliSurveyObj.h,
// //here's example with local file.
// AliSurveyObj survey;
// survey.FillFromLocalFile("local_file_name");
// ...
// AliPHOSModuleMisalignment delta(*phosGeom);
// TGeoHMatrix m;//matrix to save transformations in.
// delta.DeltaTransformation(moduleNumber, survey.GetData(), "T2_10000",
//                           "T2_10027", "T2_24000", &m);
//
// Author: Timur Pocheptsov.
// 2 December 2008

//ROOT's typedefs.
#include <Rtypes.h>

class TGeoHMatrix;
class TString;

class AliSurveyPoint;
class AliPHOSGeometry;

class AliPHOSModuleMisalignment {
  enum {
    kModules = 5
  };

public:
  AliPHOSModuleMisalignment(const AliPHOSGeometry & geom, Bool_t debug = kFALSE);
  //ClassDef macro will add virtual functions,
  //so, I have to define virtual dtor
  //to supress warnings.
  virtual ~AliPHOSModuleMisalignment();
  //Module number "module" starts from zero.
  void DeltaTransformation(UInt_t module, const TObjArray * points, const TString & name0,
                           const TString & name1, const TString & name2, TGeoHMatrix * delta);
private:
  void FindIdealModule(UInt_t module);
  void FindRealModule(const AliSurveyPoint * pt0, const AliSurveyPoint * pt1,
                      const AliSurveyPoint * pt2);
  void FindDelta(TGeoHMatrix * delta)const;

private:
  Bool_t   fDebug;  // debug level

  Double_t fAngles[kModules][3][2]; // Matrix of rotation angles
  Double_t fCenters[kModules][3];   // Matrix of center displacements
  Double_t fModule[3][3];  //Module's described by 3 points (non-positioned module)
  Double_t fU[3][3];       //Points from ideal module
  Double_t fV[3][3];       //Points from real module

  ClassDef(AliPHOSModuleMisalignment, 1)//Utility class for module misalignment.
};

#endif
 AliPHOSModuleMisalignment.h:1
 AliPHOSModuleMisalignment.h:2
 AliPHOSModuleMisalignment.h:3
 AliPHOSModuleMisalignment.h:4
 AliPHOSModuleMisalignment.h:5
 AliPHOSModuleMisalignment.h:6
 AliPHOSModuleMisalignment.h:7
 AliPHOSModuleMisalignment.h:8
 AliPHOSModuleMisalignment.h:9
 AliPHOSModuleMisalignment.h:10
 AliPHOSModuleMisalignment.h:11
 AliPHOSModuleMisalignment.h:12
 AliPHOSModuleMisalignment.h:13
 AliPHOSModuleMisalignment.h:14
 AliPHOSModuleMisalignment.h:15
 AliPHOSModuleMisalignment.h:16
 AliPHOSModuleMisalignment.h:17
 AliPHOSModuleMisalignment.h:18
 AliPHOSModuleMisalignment.h:19
 AliPHOSModuleMisalignment.h:20
 AliPHOSModuleMisalignment.h:21
 AliPHOSModuleMisalignment.h:22
 AliPHOSModuleMisalignment.h:23
 AliPHOSModuleMisalignment.h:24
 AliPHOSModuleMisalignment.h:25
 AliPHOSModuleMisalignment.h:26
 AliPHOSModuleMisalignment.h:27
 AliPHOSModuleMisalignment.h:28
 AliPHOSModuleMisalignment.h:29
 AliPHOSModuleMisalignment.h:30
 AliPHOSModuleMisalignment.h:31
 AliPHOSModuleMisalignment.h:32
 AliPHOSModuleMisalignment.h:33
 AliPHOSModuleMisalignment.h:34
 AliPHOSModuleMisalignment.h:35
 AliPHOSModuleMisalignment.h:36
 AliPHOSModuleMisalignment.h:37
 AliPHOSModuleMisalignment.h:38
 AliPHOSModuleMisalignment.h:39
 AliPHOSModuleMisalignment.h:40
 AliPHOSModuleMisalignment.h:41
 AliPHOSModuleMisalignment.h:42
 AliPHOSModuleMisalignment.h:43
 AliPHOSModuleMisalignment.h:44
 AliPHOSModuleMisalignment.h:45
 AliPHOSModuleMisalignment.h:46
 AliPHOSModuleMisalignment.h:47
 AliPHOSModuleMisalignment.h:48
 AliPHOSModuleMisalignment.h:49
 AliPHOSModuleMisalignment.h:50
 AliPHOSModuleMisalignment.h:51
 AliPHOSModuleMisalignment.h:52
 AliPHOSModuleMisalignment.h:53
 AliPHOSModuleMisalignment.h:54
 AliPHOSModuleMisalignment.h:55
 AliPHOSModuleMisalignment.h:56
 AliPHOSModuleMisalignment.h:57
 AliPHOSModuleMisalignment.h:58
 AliPHOSModuleMisalignment.h:59
 AliPHOSModuleMisalignment.h:60
 AliPHOSModuleMisalignment.h:61
 AliPHOSModuleMisalignment.h:62
 AliPHOSModuleMisalignment.h:63
 AliPHOSModuleMisalignment.h:64
 AliPHOSModuleMisalignment.h:65
 AliPHOSModuleMisalignment.h:66
 AliPHOSModuleMisalignment.h:67
 AliPHOSModuleMisalignment.h:68
 AliPHOSModuleMisalignment.h:69
 AliPHOSModuleMisalignment.h:70
 AliPHOSModuleMisalignment.h:71
 AliPHOSModuleMisalignment.h:72
 AliPHOSModuleMisalignment.h:73
 AliPHOSModuleMisalignment.h:74
 AliPHOSModuleMisalignment.h:75
 AliPHOSModuleMisalignment.h:76
 AliPHOSModuleMisalignment.h:77
 AliPHOSModuleMisalignment.h:78
 AliPHOSModuleMisalignment.h:79
 AliPHOSModuleMisalignment.h:80
 AliPHOSModuleMisalignment.h:81
 AliPHOSModuleMisalignment.h:82
 AliPHOSModuleMisalignment.h:83
 AliPHOSModuleMisalignment.h:84
 AliPHOSModuleMisalignment.h:85
 AliPHOSModuleMisalignment.h:86
 AliPHOSModuleMisalignment.h:87
 AliPHOSModuleMisalignment.h:88
 AliPHOSModuleMisalignment.h:89
 AliPHOSModuleMisalignment.h:90
 AliPHOSModuleMisalignment.h:91
 AliPHOSModuleMisalignment.h:92
 AliPHOSModuleMisalignment.h:93
 AliPHOSModuleMisalignment.h:94
 AliPHOSModuleMisalignment.h:95
 AliPHOSModuleMisalignment.h:96
 AliPHOSModuleMisalignment.h:97
 AliPHOSModuleMisalignment.h:98
 AliPHOSModuleMisalignment.h:99
 AliPHOSModuleMisalignment.h:100
 AliPHOSModuleMisalignment.h:101
 AliPHOSModuleMisalignment.h:102
 AliPHOSModuleMisalignment.h:103