LCOV - code coverage report
Current view: top level - MUON/MUONgeometry - AliMUONSurveyObj.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 21 4.8 %
Date: 2016-06-14 17:26:59 Functions: 1 21 4.8 %

          Line data    Source code
       1             : #ifndef ALIMUONSURVEYOBJ_H
       2             : #define ALIMUONSURVEYOBJ_H
       3             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       4             :  * See cxx source for full Copyright notice                               */
       5             : 
       6             : /// \ingroup geometry
       7             : /// \class AliMUONSurveyObj
       8             : /// \brief Base class for survey of muon spectrometer
       9             : //
      10             : // Author: Javier Castillo
      11             : 
      12             : #include <TObject.h>
      13             : 
      14             : class TObjArray;
      15             : class TGeoCombiTrans;
      16             : class TVector3;
      17             : class TH2;
      18             : class TF2;
      19             : class TFitter;
      20             : class TArrayD;
      21             : 
      22             : class AliSurveyPoint;
      23             : 
      24             : class AliMUONSurveyObj:public TObject
      25             : {
      26             : 
      27             :  public:
      28             :   AliMUONSurveyObj();
      29             :   virtual ~AliMUONSurveyObj();
      30             :  
      31             :   virtual Int_t AddStickerTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax = 9);
      32             :   virtual Int_t AddGButtonTargets(TObjArray *pArray, TString btBaseName, Int_t lTargetMax = 9);
      33             :   virtual Int_t AddLButtonTargets(TObjArray *pArray, TString btBaseName, Int_t lTargetMax = 9);
      34             : 
      35             :   /// To be implemented in a concrete Chamber or DetElem class
      36             :   virtual Int_t AddStickerTargets(TString stBaseName, Int_t lTargetMax = 9) = 0;
      37             :   /// To be implemented in a concrete Chamber or DetElem class
      38             :   virtual Int_t AddGButtonTargets(TString btBaseName, Int_t lTargetMax = 9) = 0;
      39             : 
      40             :   void AddStickerTarget(AliSurveyPoint *stPoint);
      41             :   void AddGButtonTarget(AliSurveyPoint *btPoint);
      42             :   void AddLButtonTarget(AliSurveyPoint *btPoint);
      43             :   void AddLButtonTarget(TVector3 *btVector);
      44             : 
      45             :   Int_t GetNStickerTargets();
      46             :   AliSurveyPoint *GetStickerTarget(Int_t stIndex);
      47             :   Int_t GetNGButtonTargets();
      48             :   AliSurveyPoint *GetGButtonTarget(Int_t btIndex);
      49             :   Int_t GetNLButtonTargets();
      50             :   AliSurveyPoint *GetLButtonTarget(Int_t btIndex);
      51             :   /// Set transformation of geoemtrical element
      52             :   void SetBaseTransformation(TGeoCombiTrans *baseTrf, Bool_t ownerBaseTrf = kFALSE) {
      53           0 :     fBaseTrf = baseTrf;
      54           0 :     fOwnerBaseTrf=ownerBaseTrf;
      55           0 :   }
      56             :   /// Set local transformation of geometrical element
      57             :   virtual void SetLocalTransformation(TGeoCombiTrans *localTrf, Bool_t ownerLocalTrf = kFALSE) {
      58           0 :     fLocalTrf=localTrf;
      59           0 :     fOwnerLocalTrf=ownerLocalTrf;
      60           0 :   }
      61             : 
      62             :   /// Returns the local transformation
      63           0 :   TGeoCombiTrans* GetLocalTrf() const {return fLocalTrf;} 
      64             :   /// Returns the base (global) transformation
      65           0 :   TGeoCombiTrans* GetBaseTrf() const {return fBaseTrf;}
      66             :   /// Returns the alignment transformation
      67           0 :   TGeoCombiTrans* GetAlignTrf()const {return fAlignTrf;}
      68             : 
      69             :   /// Define wether to work in mm (survey units) or cm (alice units)
      70           0 :   void SetUseCM(Bool_t bUseCM = kTRUE) {fUseCM = bUseCM;}
      71             :   /// Indicates if working in mm (survey units) or cm (alice units)
      72           0 :   Bool_t GetUseCM() const {return fUseCM;}
      73             : 
      74             :   void SetPlane(TString pName, Double_t xMin=-2000., Double_t xMax=+2000., Double_t yMin=-2000., Double_t yMax=2000.);
      75             :   void SetPlaneParameters(Double_t p0, Double_t p1, Double_t p2);
      76             : 
      77             :   void DrawSTargets();
      78             :   Double_t FitPlane();
      79             : 
      80             :   /// Returns the plane (TF2) representing the object
      81           0 :   TF2* GetPlane() const {return fPlane;}
      82             : 
      83             :   /// Returns the TFitter used for the best local to global transformation determination
      84           0 :   TFitter* GetFitter() const {return fFitter;}
      85             : 
      86             :   Int_t SurveyToAlign(TGeoCombiTrans &quadTransf, Double_t *parErr, Double_t psi=0., Double_t tht=0., Double_t epsi=0., Double_t etht=0.);
      87             :   Int_t SurveyToAlign(Double_t psi=0., Double_t tht=0., Double_t epsi=0., Double_t etht=0.);
      88             :   Double_t SurveyChi2(Double_t *par);
      89             : 
      90             :   Double_t EvalFunction(const TF2 *lFunction, Int_t iP1, Int_t iP2, const Char_t *lCoord);
      91             : 
      92             :   void CalculateTranslation(TF2 *xFunc, TF2 *yFunc, TF2 *zFunc, Int_t iP1, Int_t iP2, Double_t *lCenTemp);
      93             :   //  TGeoCombiTrans *CalculateTransformation(TF2 *xFunc, TF2 *yFunc, TF2 *zFunc, TF2 *pFunc, Int_t iP1, Int_t iP2);
      94             : 
      95             :   Double_t CalculateGlobalDiff(TGeoCombiTrans &lTransf, Int_t nPoints, TArrayD &lDiff);
      96             : 
      97             :   Int_t CalculateBestTransf(Int_t iP1, Int_t iP2, Double_t *lXYZ, Double_t *lPTP);
      98             : 
      99             :   void CalculateMeanTransf(Double_t *lXYZ, Double_t *lPTP);
     100             :   
     101             :   /// Set xMin for functions fitting
     102           0 :   void SetXMin(Double_t xMin) {fXMin = xMin;}
     103             :   /// Set xMax for functions fitting
     104           0 :   void SetXMax(Double_t xMax) {fXMax = xMax;}
     105             :   /// Set yMin for functions fitting
     106           0 :   void SetYMin(Double_t yMin) {fYMin = yMin;}
     107             :   /// Set yMax for functions fitting
     108           0 :   void SetYMax(Double_t yMax) {fYMax = yMax;}
     109             :   /// Set zMin for functions fitting
     110           0 :   void SetZMin(Double_t zMin) {fZMin = zMin;}
     111             :   /// Set zMax for functions fitting
     112           0 :   void SetZMax(Double_t zMax) {fZMax = zMax;}
     113             : 
     114             :   virtual void PrintLocalTrf();
     115             :   virtual void PrintAlignTrf();
     116             : 
     117             :   void FillSTHistograms(TString baseNameC, TH2 *hSTc, TString baseNameA="", TH2 *hSTa = 0);
     118             : 
     119             :   Double_t GetAlignResX();
     120             :   Double_t GetAlignResY();
     121             : 
     122             :   AliSurveyPoint* ConvertPointUnits(AliSurveyPoint *stPoint, Float_t lFactor = 0.1);
     123             : 
     124             :  private:
     125             :   /// Not implemented
     126             :   AliMUONSurveyObj(const AliMUONSurveyObj& right);
     127             :   /// Not implemented
     128             :   AliMUONSurveyObj&  operator = (const AliMUONSurveyObj& right);
     129             : 
     130             :   Double_t EqPlane(const Double_t *x, const Double_t *par) const {
     131             :     /// Plane equation 
     132           0 :     return (-par[1]*x[0] +par[0]*x[1] -par[2]);  // then psi=ATan(par[0]) and tht=ATan(par[0])
     133             :     //    return (-par[0]*x[0] -par[1]*x[1] -par[2]); 
     134             :   }
     135             : 
     136             :   TObjArray *fSTargets;   ///< Array of AliSurveyPoint of Sticker Targets
     137             :   TObjArray *fGBTargets;  ///< Array of AliSurveyPoint of Button Targets
     138             :   TObjArray *fLBTargets;  ///< Array of TVector3 or AliSurveyPoint of local position of Button Targets
     139             :   TGeoCombiTrans *fLocalTrf; ///< Local transformation
     140             :   TGeoCombiTrans *fAlignTrf; ///< Local alignment transformation
     141             :   TGeoCombiTrans *fBaseTrf;  ///< Base Transformation
     142             : 
     143             :   Bool_t fOwnerLocalTrf;    ///< Flag for owner of fLocalTrf
     144             :   Bool_t fOwnerAlignTrf;    ///< Flag for owner of fAlignTrf
     145             :   Bool_t fOwnerBaseTrf;     ///< Flag for owner of fBaseTrf
     146             : 
     147             :   Bool_t fUseCM;            ///< Use centimeters, survey units are mm but aliroot uses cm
     148             : 
     149             :   TF2 *fPlane;  ///< TF2 for plane fitting
     150             : 
     151             :   TFitter *fFitter;  ///< Fitter for best local to global transformation
     152             : 
     153             :   Double_t fXMin;    ///< xMin for functions fitting
     154             :   Double_t fXMax;    ///< xMax for functions fitting
     155             :   Double_t fYMin;    ///< yMin for functions fitting
     156             :   Double_t fYMax;    ///< yMax for functions fitting
     157             :   Double_t fZMin;    ///< zMin for functions fitting
     158             :   Double_t fZMax;    ///< zMax for functions fitting
     159             : 
     160             : 
     161          18 : ClassDef(AliMUONSurveyObj, 0) //Class for alignment of muon spectrometer
     162             : };
     163             : 
     164             : #endif

Generated by: LCOV version 1.11