ROOT logo
#ifndef ALI_TPC_CALIB_GLOBAL_MISALIGNMENT_H
#define ALI_TPC_CALIB_GLOBAL_MISALIGNMENT_H

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

////////////////////////////////////////////////////////////////////////////
//                                                                        //
// AliTPCCalibGlobalMisalignment class                                        //
// The class calculates the space point distortions due to simple         // 
// misalignments like shifts in caresian coordinates or a rotation        //
// of the TPC read out planes (A and C side)                              //
//                                                                        //
// date: 06/05/2010                                                       //
// Authors: Stefan Rossegger, Jim Thomas, Magnus Mager                    //
////////////////////////////////////////////////////////////////////////////

#include "AliTPCCorrection.h"
#include "TVectorD.h"
class TGeoMatrix;
class TObjArray;
class TTreeSRedirector;


class AliTPCCalibGlobalMisalignment : public AliTPCCorrection {
public:
  AliTPCCalibGlobalMisalignment();
  virtual ~AliTPCCalibGlobalMisalignment();
  
  // initialization and update functions
  //  virtual void Init();
  //  virtual void Update(const TTimeStamp &timeStamp);
  void AddAlign(const  AliTPCCalibGlobalMisalignment & add);
  // setters and getters for misalignments
  void SetXShift(Float_t xShift) {fXShift=xShift;}
  void SetYShift(Float_t yShift) {fYShift=yShift;}
  void SetZShift(Float_t zShift) {fZShift=zShift;}
  void SetRotPhiA(Float_t rotPhiA) {fRotPhiA=rotPhiA;}
  void SetRotPhiC(Float_t rotPhiC) {fRotPhiC=rotPhiC;}
  void SetdRPhiOffsetA(Float_t dRPhiOffsetA) {fdRPhiOffsetA=dRPhiOffsetA;}
  void SetdRPhiOffsetC(Float_t dRPhiOffsetC) {fdRPhiOffsetC=dRPhiOffsetC;}
  
  Float_t GetXShift() const {return fXShift;}
  Float_t GetYShift() const {return fYShift;}
  Float_t GetZShift() const {return fZShift;}
  Float_t GetRotPhiA() const {return fRotPhiA;}
  Float_t GetRotPhiC() const {return fRotPhiC;}
  Float_t GetdRPhiOffsetA() const {return fdRPhiOffsetA;}
  Float_t GetdRPhiOffsetC() const {return fdRPhiOffsetC;}
  virtual void Print(Option_t* option="") const;
  void SetQuadranAlign(const TVectorD *quadrantQ0, const TVectorD *quadrantRQ0, const TVectorD *quadrantQ1,const TVectorD *quadrantRQ1,  const TVectorD *quadrantQ2,  const TVectorD *quadrantRQ2);
  // 
  // Alignment manipulation using TGeoMatrix
  
  void SetAlignGlobal(const TGeoMatrix * matrixGlobal);
  void SetAlignGlobalDelta(const TGeoMatrix * matrixGlobalDelta);
  void SetAlignSectors(const TObjArray *arraySector);
  TGeoMatrix* GetAlignGlobal() const  {return fMatrixGlobal;}
  TGeoMatrix* GetAlignGlobalDelta() const  {return fMatrixGlobalDelta;}
  TObjArray * GetAlignSectors() const {return fArraySector;}
  //
  static AliTPCCalibGlobalMisalignment*  CreateOCDBAlign();
  static AliTPCCalibGlobalMisalignment*  CreateMeanAlign(const AliTPCCalibGlobalMisalignment *alignIn);
  static void DumpAlignment( AliTPCCalibGlobalMisalignment* align, TTreeSRedirector *pcstream, const char *name);
  //
protected:
  virtual void GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]);

private:
  Float_t fXShift;               // Shift in global X [cm]
  Float_t fYShift;               // Shift in global Y [cm]
  Float_t fZShift;               // Shift in global Z [cm]

  Float_t fRotPhiA;      // simple rotation of A side read-out plane around the Z axis [rad]
  Float_t fRotPhiC;      // simple rotation of C side read-out plane around the Z axis [rad]
  Float_t fdRPhiOffsetA;  // add a constant offset of dRPhi (or local Y) in [cm]: purely for calibration purposes!
  Float_t fdRPhiOffsetC;  // add a constant offset of dRPhi (or local Y) in [cm]: purely for calibration purposes!
  //
  // Quadrant alignment
  //
  TVectorD *fQuadrantQ0;   //OROC medium pads -delta ly+ - ly - shift (cm)
  TVectorD *fQuadrantRQ0;  //OROC medium pads -delta ly+ - ly - rotation (rad) 
  TVectorD *fQuadrantQ1;   //OROC long   pads -delta ly+ - ly - shift
  TVectorD *fQuadrantQ2;   //OROC long   pads -shift
  TVectorD *fQuadrantRQ1;  //OROC long   pads -delta ly+ - ly - rotation
  TVectorD *fQuadrantRQ2;  //OROC long   pads -rotation
  // 
  //
  // Global alignment - use native ROOT representation
  //
  TGeoMatrix * fMatrixGlobal; // global Alignment common
  TGeoMatrix * fMatrixGlobalDelta; // global Alignment common A side-C side
  TObjArray   * fArraySector; //  local Alignmnet Sector
  //
  AliTPCCalibGlobalMisalignment& operator=(const AliTPCCalibGlobalMisalignment&);
  AliTPCCalibGlobalMisalignment(const AliTPCCalibGlobalMisalignment&);
  ClassDef(AliTPCCalibGlobalMisalignment,3);
};

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