#ifndef ALIMUONSURVEYUTIL_H
#define ALIMUONSURVEYUTIL_H
class AliMUONGeometryTransformer;
class TGeoCombiTrans;
class TClonesArray;
class AliMUONSurveyUtil:public TObject
{
public:
virtual ~AliMUONSurveyUtil();
static AliMUONSurveyUtil *Instance();
static Bool_t MatrixToAngles(const Double_t *rot, Double_t *angles);
static void AnglesToMatrix(const Double_t *angles, Double_t *rot);
Double_t XpCenter(const Double_t *x, const Double_t *par) const;
Double_t XnCenter(const Double_t *x, const Double_t *par) const;
Double_t YpCenter(const Double_t *x, const Double_t *par) const;
Double_t YnCenter(const Double_t *x, const Double_t *par) const;
Double_t ZpCenter(const Double_t *x, const Double_t *par) const;
Double_t ZnCenter(const Double_t *x, const Double_t *par) const;
Double_t PhiXpp(const Double_t *x, const Double_t *par) const;
Double_t PhiXpn(const Double_t *x, const Double_t *par) const;
Double_t PhiXnp(const Double_t *x, const Double_t *par) const;
Double_t PhiXnn(const Double_t *x, const Double_t *par) const;
Double_t PhiYpp(const Double_t *x, const Double_t *par) const;
Double_t PhiYpn(const Double_t *x, const Double_t *par) const;
Double_t PhiYnp(const Double_t *x, const Double_t *par) const;
Double_t PhiYnn(const Double_t *x, const Double_t *par) const;
static AliMUONGeometryTransformer *ReAlign(const AliMUONGeometryTransformer * transformer,
int rMod, int rNDetElems, int rDetElemToDetElemId[], TGeoCombiTrans deltaDetElemTransf[], Bool_t verbose);
static void SetAlignmentResolution(const TClonesArray* misAlignArray, Int_t chId, Double_t chResX, Double_t chResY, Double_t deResX, Double_t deResY);
protected:
AliMUONSurveyUtil() : TObject() {}
private:
AliMUONSurveyUtil(const AliMUONSurveyUtil& right);
AliMUONSurveyUtil& operator = (const AliMUONSurveyUtil& right);
static int fgNDetElemCh[10];
static AliMUONSurveyUtil *fgInstance;
ClassDef(AliMUONSurveyUtil, 0)
};
#endif