double *misAlignments, Bool_t verbose)
{
- /////////////////////////////////////////////////////////////////////
- // Takes the internal geometry module transformers, copies them
+ /// Returns a new AliMUONGeometryTransformer with the found misalignments
+ /// applied.
+
+ // Takes the internal geometry module transformers, copies them
// and gets the Detection Elements from them.
// Takes misalignment parameters and applies these
// to the local transform of the Detection Element
while ( ( detElement = static_cast<AliMUONGeometryDetElement*>(next()) ) )
{
++iDe;
- /// make a new detection element
+ // make a new detection element
AliMUONGeometryDetElement *newDetElement =
new AliMUONGeometryDetElement(detElement->GetId(),
detElement->GetVolumePath());
//______________________________________________________________________
void AliMUONAlignment::SetAlignmentResolution(const TClonesArray* misAlignArray, Int_t rChId, Double_t rChResX, Double_t rChResY, Double_t rDeResX, Double_t rDeResY){
- //// Set alignment resolution to misalign objects to be stored in CDB
+ /// Set alignment resolution to misalign objects to be stored in CDB
Int_t chIdMin = (rChId<0)? 0 : rChId;
Int_t chIdMax = (rChId<0)? 9 : rChId;
Double_t chResX = rChResX;
void SetBFieldOn(Bool_t bBFieldOn) {
fBFieldOn = bBFieldOn;
}
+ /// Define chambers to align
void SetChOnOff(Bool_t *bChOnOff) {
for(int iCh=0; iCh<10; iCh++)
fChOnOff[iCh] = bChOnOff[iCh];
}
+ /// Possibility to align only one side of the detector
void SetSpecLROnOff(Bool_t *bSpecLROnOff) {
fSpecLROnOff[0] = bSpecLROnOff[0];
fSpecLROnOff[1] = bSpecLROnOff[1];
, fSurveyObj(0x0)
, fSurveyDetElem(0x0)
{
+ /// Constructor with the chamber id
fSurveyObj = new AliSurveyObj();
fSurveyDetElem = new TClonesArray("AliMUONSurveyDetElem",4);
}
}
Int_t AliMUONSurveyChamber::AddStickerTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax) {
+ /// Add a maximum of lTargetMax sticker targets with stBaseName from the pArray of targets
return AliMUONSurveyObj::AddStickerTargets(pArray, stBaseName, lTargetMax);
}
}
Int_t AliMUONSurveyChamber::AddGButtonTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax) {
+ /// Add a maximum of lTargetMax global targets with stBaseName from the pArray of targets
return AliMUONSurveyObj::AddGButtonTargets(pArray, stBaseName, lTargetMax);
}
virtual Int_t AddStickerTargets(TString stBaseName, Int_t lTargetMax = 9);
virtual Int_t AddGButtonTargets(TString btBaseName, Int_t lTargetMax = 9);
+
virtual Int_t AddStickerTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax = 9);
virtual Int_t AddGButtonTargets(TObjArray *pArray, TString btBaseName, Int_t lTargetMax = 9);
Int_t AddSurveyDetElem(Int_t lDetElemId);
+ /// Returns the number od detection elements of the chamber
Int_t GetNDetElem() const {return fNDetElem;}
AliMUONSurveyDetElem* GetDetElem(Int_t lDetElemIndex);
-
+ /// Returns the internal AliSurveyObj
AliSurveyObj* GetSurveyObj() const {return fSurveyObj;}
virtual void SetLocalTransformation(TGeoCombiTrans *localTrf, Bool_t ownerLocalTrf = kFALSE);
}
Int_t AliMUONSurveyDetElem::AddStickerTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax) {
+ /// Add a maximum of lTargetMax sticker targets with stBaseName from pArray of targets
return AliMUONSurveyObj::AddStickerTargets(pArray, stBaseName, lTargetMax);
}
}
Int_t AliMUONSurveyDetElem::AddGButtonTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax) {
+ /// Add a maximum of lTargetMax global button targets with stBaseName from pArray of targets
return AliMUONSurveyObj::AddGButtonTargets(pArray, stBaseName, lTargetMax);
}
}
void AliMUONSurveyDetElem::PrintLocalTrf() {
+ /// Print the local transformation
printf("DetElem%d Th",fDetElemId);
AliMUONSurveyObj::PrintLocalTrf();
}
void AliMUONSurveyDetElem::PrintAlignTrf() {
+ /// Print the alignment transformation
printf("DetElem%d d",fDetElemId);
AliMUONSurveyObj::PrintAlignTrf();
}
private:
/// Not implemented
AliMUONSurveyDetElem(const AliMUONSurveyDetElem& right);
- // Not implemented
+ /// Not implemented
AliMUONSurveyDetElem& operator = (const AliMUONSurveyDetElem& right);
Int_t fDetElemId; ///< Detection element id
, fZMin(-2000.)
, fZMax(2000.)
{
-/// Default constructor
+ /// Default constructor
fSTargets = new TObjArray();
fSTargets->SetOwner(kFALSE);
virtual Int_t AddGButtonTargets(TObjArray *pArray, TString btBaseName, Int_t lTargetMax = 9);
virtual Int_t AddLButtonTargets(TObjArray *pArray, TString btBaseName, Int_t lTargetMax = 9);
+ /// To be implemented in a concrete Chamber or DetElem class
virtual Int_t AddStickerTargets(TString stBaseName, Int_t lTargetMax = 9) = 0;
+ /// To be implemented in a concrete Chamber or DetElem class
virtual Int_t AddGButtonTargets(TString btBaseName, Int_t lTargetMax = 9) = 0;
void AddStickerTarget(AliSurveyPoint *stPoint);
fOwnerLocalTrf=ownerLocalTrf;
}
+ /// Returns the local transformation
TGeoCombiTrans* GetLocalTrf() const {return fLocalTrf;}
+ /// Returns the base (global) transformation
TGeoCombiTrans* GetBaseTrf() const {return fBaseTrf;}
+ /// Returns the alignment transformation
TGeoCombiTrans* GetAlignTrf()const {return fAlignTrf;}
+ /// Define wether to work in mm (survey units) or cm (alice units)
void SetUseCM(Bool_t bUseCM = kTRUE) {fUseCM = bUseCM;}
+ /// Indicates if working in mm (survey units) or cm (alice units)
Bool_t GetUseCM() const {return fUseCM;}
void SetPlane(TString pName, Double_t xMin=-2000., Double_t xMax=+2000., Double_t yMin=-2000., Double_t yMax=2000.);
void DrawSTargets();
Double_t FitPlane();
+ /// Returns the plane (TF2) representing the object
TF2* GetPlane() const {return fPlane;}
+ /// Returns the TFitter used for the best local to global transformation determination
TFitter* GetFitter() const {return fFitter;}
Int_t SurveyToAlign(TGeoCombiTrans &quadTransf, Double_t *parErr, Double_t psi=0., Double_t tht=0., Double_t epsi=0., Double_t etht=0.);
Int_t CalculateBestTransf(Int_t iP1, Int_t iP2, Double_t *lXYZ, Double_t *lPTP);
void CalculateMeanTransf(Double_t *lXYZ, Double_t *lPTP);
-
+
+ /// Set xMin for functions fitting
void SetXMin(Double_t xMin) {fXMin = xMin;}
+ /// Set xMax for functions fitting
void SetXMax(Double_t xMax) {fXMax = xMax;}
+ /// Set yMin for functions fitting
void SetYMin(Double_t yMin) {fYMin = yMin;}
+ /// Set yMax for functions fitting
void SetYMax(Double_t yMax) {fYMax = yMax;}
+ /// Set zMin for functions fitting
void SetZMin(Double_t zMin) {fZMin = zMin;}
+ /// Set zMax for functions fitting
void SetZMax(Double_t zMax) {fZMax = zMax;}
virtual void PrintLocalTrf();
AliMUONSurveyObj& operator = (const AliMUONSurveyObj& right);
Double_t EqPlane(const Double_t *x, const Double_t *par) const {
+ /// Plane equation
return (-par[1]*x[0] +par[0]*x[1] -par[2]); // then psi=ATan(par[0]) and tht=ATan(par[0])
// return (-par[0]*x[0] -par[1]*x[1] -par[2]);
}
TFitter *fFitter; ///< Fitter for best local to global transformation
- Double_t fXMin;
- Double_t fXMax;
- Double_t fYMin;
- Double_t fYMax;
- Double_t fZMin;
- Double_t fZMax;
+ Double_t fXMin; ///< xMin for functions fitting
+ Double_t fXMax; ///< xMax for functions fitting
+ Double_t fYMin; ///< yMin for functions fitting
+ Double_t fYMax; ///< yMax for functions fitting
+ Double_t fZMin; ///< zMin for functions fitting
+ Double_t fZMax; ///< zMax for functions fitting
ClassDef(AliMUONSurveyObj, 0) //Class for alignment of muon spectrometer
//-----------------------------------------------------------------------------
/// \class AliMUONSurveyUtil
-/// Utility class for the survey processing of the ALICE DiMuon spectrometer
+/// Singleton utility class for the survey processing of the ALICE DiMuon spectrometer
///
/// This class contains various functions to calculate misalignement parameters
/// from survey data and designed positions of survey targets.
}
AliMUONSurveyUtil* AliMUONSurveyUtil::Instance() {
+ /// Return its instance
if (!fgInstance)
fgInstance = new AliMUONSurveyUtil();
void AliMUONSurveyUtil::AnglesToMatrix(const Double_t *angles, Double_t *rot)
{
- // Calculates the rotation matrix using the
- // Euler angles in "x y z" notation
- //
+ /// Calculates the rotation matrix using the
+ /// Euler angles in "x y z" notation
+ ///
// Double_t degrad = TMath::DegToRad();
Double_t degrad = 1.;
Double_t sinpsi = TMath::Sin(degrad*angles[0]);
AliMUONSurveyUtil& operator = (const AliMUONSurveyUtil& right);
- static int fgNDetElemCh[10];
- static AliMUONSurveyUtil *fgInstance;
+ static int fgNDetElemCh[10]; ///< Numbers of detection elements per chamber
+ static AliMUONSurveyUtil *fgInstance; ///< Singleton instance
ClassDef(AliMUONSurveyUtil, 0) //Class for alignment of muon spectrometer
};