ROOT logo
/**************************************************************************
 * Copyright(c) 2007-2010, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//========================================================================
//
// This class generates misalignment for HMPID. In particular it defines
// the misalignment in the three canonical scenarios: "ideal", "residual"
// and "full".
// It is meant to be run standalone or from the steering macro
// $ALICE_ROOT/macros/MakeAlignmentObjs.C
// looping on the detectors.
//
//========================================================================

#include "AliHMPIDMisAligner.h"
#include "AliGeomManager.h"
#include "TClonesArray.h"
#include "TRandom.h"
#include "TMath.h"
#include "AliAlignObjMatrix.h"
#include "AliLog.h"

ClassImp(AliHMPIDMisAligner)

//_______________________________________________________________________________________
AliHMPIDMisAligner::AliHMPIDMisAligner() : AliMisAligner()
{
    //
    // dummy constructor
    //
}

//_______________________________________________________________________________________
TClonesArray* AliHMPIDMisAligner::MakeAlObjsArray() {
    // builds and returns the array of alignment objects
    // according to the spcified misalignment scenario
    // ("ideal", "residual" or "full").
    //
    if(!AliGeomManager::GetGeometry())
    {
	AliError("No geometry loaded into AliGeomManager! Returning null pointer!");
	return 0;
    }

    TClonesArray *array = new TClonesArray("AliAlignObjMatrix",7);

    AliGeomManager::ELayerID idHMPID =  AliGeomManager::kHMPID;
    Double_t sigmaTrans, sigmaRotPsi, sigmaRotTheta, sigmaRotPhi;
    Double_t dX=0., dY=0., dZ=0., dPsi=0., dTheta=0., dPhi=0.; //displacements

    // TRandom *pRnd   = new TRandom(4357);
    gRandom->SetSeed(4357);

    if(TString(GetMisalType())=="ideal")
    {

	for (Int_t iCh = 0; iCh < 7; iCh++) {
	    new((*array)[iCh]) AliAlignObjMatrix(AliGeomManager::SymName(idHMPID,iCh),
		    AliGeomManager::LayerToVolUID(idHMPID,iCh),dX,dY,dZ,dPsi,dTheta,dPhi,kTRUE);
	}

    }else if( TString(GetMisalType())=="residual" || TString(GetMisalType())=="full"){

	sigmaTrans=4.;       // 4 cm
	sigmaRotPsi = 0.2;   // degrees
        sigmaRotTheta = 1.0; // degrees
        sigmaRotPhi = 0.5;   // degrees
        
	for (Int_t iCh = 0; iCh < 7; iCh++) {
          
	    /*dX     = 2 - 2.1*gRandom->Uniform();
            dY     = 2 - 2.1*gRandom->Uniform();
     	    dZ     = 2.0 - 4*gRandom->Uniform();
            dPsi   = 0.1 - 0.2*gRandom->Uniform();
	    dTheta = 1 - 1.1*gRandom->Uniform();
	    dPhi   = 0.25 - 0.5*gRandom->Uniform();*/
         
            dX     = sigmaTrans/2 - (sigmaTrans/2+0.1)*gRandom->Uniform();   // -0.1  <---> 2    cm
            dY     = sigmaTrans/2 - (sigmaTrans/2+0.1)*gRandom->Uniform();   // -0.1  <---> 2    cm
     	    dZ     = (gRandom->Uniform() - 0.5)*sigmaTrans;                  // -2.0  <---> 2    cm
            dPsi   = (gRandom->Uniform() - 0.5)*sigmaRotPsi;                 // -0.1  <---> 0.1  degree
	    dTheta = sigmaRotTheta - (sigmaRotTheta+0.1)*gRandom->Uniform(); // -0.1  <---> 1.0  degree
	    dPhi   = (gRandom->Uniform() - 0.5)*sigmaRotPhi;                 // -0.25 <---> 0.25 degree  

            
	    //    dX     = (pRnd->Uniform()-0.5)*sigmaTrans;    dY     = (pRnd->Uniform()-0.5)*sigmaTrans;    dZ     = (pRnd->Uniform()-0.5)*sigmaTrans;
	    //    dPsi   = (pRnd->Uniform()-0.5)*sigmaRot;    dTheta = (pRnd->Uniform()-0.5)*sigmaRot;    dPhi   = (pRnd->Uniform()-0.5)*sigmaRot;
	    new((*array)[iCh]) AliAlignObjMatrix(AliGeomManager::SymName(idHMPID,iCh),
		    AliGeomManager::LayerToVolUID(idHMPID,iCh),dX,dY,dZ,dPsi,dTheta,dPhi,kTRUE);
	}
    }else{
	AliError(Form("\"%s\" is not a valid identifier for misalignment types. Exiting ...",GetMisalType()));
	return 0;
    }

    return array;
}

//_______________________________________________________________________________________
AliCDBMetaData* AliHMPIDMisAligner::GetCDBMetaData() const {
    // Returns the comment and responsible for the
    // AliCDBMetaData to be associated with the OCDB entry
    // containing the HMPID array of misalignment objects
    //
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("HMPID expert means nothing");

    if(TString(GetMisalType())=="ideal")
	md->SetComment("Alignment objects for HMPID ideal misalignment");
    if(TString(GetMisalType())=="residual")
	md->SetComment("Alignment objects for HMPID residual misalignment");
    if(TString(GetMisalType())=="full")
        md->SetComment("Full misalignment objects for HMPID produced with sigmaTrans=1mm and sigmaRot=1mrad");

    return md;
}
 AliHMPIDMisAligner.cxx:1
 AliHMPIDMisAligner.cxx:2
 AliHMPIDMisAligner.cxx:3
 AliHMPIDMisAligner.cxx:4
 AliHMPIDMisAligner.cxx:5
 AliHMPIDMisAligner.cxx:6
 AliHMPIDMisAligner.cxx:7
 AliHMPIDMisAligner.cxx:8
 AliHMPIDMisAligner.cxx:9
 AliHMPIDMisAligner.cxx:10
 AliHMPIDMisAligner.cxx:11
 AliHMPIDMisAligner.cxx:12
 AliHMPIDMisAligner.cxx:13
 AliHMPIDMisAligner.cxx:14
 AliHMPIDMisAligner.cxx:15
 AliHMPIDMisAligner.cxx:16
 AliHMPIDMisAligner.cxx:17
 AliHMPIDMisAligner.cxx:18
 AliHMPIDMisAligner.cxx:19
 AliHMPIDMisAligner.cxx:20
 AliHMPIDMisAligner.cxx:21
 AliHMPIDMisAligner.cxx:22
 AliHMPIDMisAligner.cxx:23
 AliHMPIDMisAligner.cxx:24
 AliHMPIDMisAligner.cxx:25
 AliHMPIDMisAligner.cxx:26
 AliHMPIDMisAligner.cxx:27
 AliHMPIDMisAligner.cxx:28
 AliHMPIDMisAligner.cxx:29
 AliHMPIDMisAligner.cxx:30
 AliHMPIDMisAligner.cxx:31
 AliHMPIDMisAligner.cxx:32
 AliHMPIDMisAligner.cxx:33
 AliHMPIDMisAligner.cxx:34
 AliHMPIDMisAligner.cxx:35
 AliHMPIDMisAligner.cxx:36
 AliHMPIDMisAligner.cxx:37
 AliHMPIDMisAligner.cxx:38
 AliHMPIDMisAligner.cxx:39
 AliHMPIDMisAligner.cxx:40
 AliHMPIDMisAligner.cxx:41
 AliHMPIDMisAligner.cxx:42
 AliHMPIDMisAligner.cxx:43
 AliHMPIDMisAligner.cxx:44
 AliHMPIDMisAligner.cxx:45
 AliHMPIDMisAligner.cxx:46
 AliHMPIDMisAligner.cxx:47
 AliHMPIDMisAligner.cxx:48
 AliHMPIDMisAligner.cxx:49
 AliHMPIDMisAligner.cxx:50
 AliHMPIDMisAligner.cxx:51
 AliHMPIDMisAligner.cxx:52
 AliHMPIDMisAligner.cxx:53
 AliHMPIDMisAligner.cxx:54
 AliHMPIDMisAligner.cxx:55
 AliHMPIDMisAligner.cxx:56
 AliHMPIDMisAligner.cxx:57
 AliHMPIDMisAligner.cxx:58
 AliHMPIDMisAligner.cxx:59
 AliHMPIDMisAligner.cxx:60
 AliHMPIDMisAligner.cxx:61
 AliHMPIDMisAligner.cxx:62
 AliHMPIDMisAligner.cxx:63
 AliHMPIDMisAligner.cxx:64
 AliHMPIDMisAligner.cxx:65
 AliHMPIDMisAligner.cxx:66
 AliHMPIDMisAligner.cxx:67
 AliHMPIDMisAligner.cxx:68
 AliHMPIDMisAligner.cxx:69
 AliHMPIDMisAligner.cxx:70
 AliHMPIDMisAligner.cxx:71
 AliHMPIDMisAligner.cxx:72
 AliHMPIDMisAligner.cxx:73
 AliHMPIDMisAligner.cxx:74
 AliHMPIDMisAligner.cxx:75
 AliHMPIDMisAligner.cxx:76
 AliHMPIDMisAligner.cxx:77
 AliHMPIDMisAligner.cxx:78
 AliHMPIDMisAligner.cxx:79
 AliHMPIDMisAligner.cxx:80
 AliHMPIDMisAligner.cxx:81
 AliHMPIDMisAligner.cxx:82
 AliHMPIDMisAligner.cxx:83
 AliHMPIDMisAligner.cxx:84
 AliHMPIDMisAligner.cxx:85
 AliHMPIDMisAligner.cxx:86
 AliHMPIDMisAligner.cxx:87
 AliHMPIDMisAligner.cxx:88
 AliHMPIDMisAligner.cxx:89
 AliHMPIDMisAligner.cxx:90
 AliHMPIDMisAligner.cxx:91
 AliHMPIDMisAligner.cxx:92
 AliHMPIDMisAligner.cxx:93
 AliHMPIDMisAligner.cxx:94
 AliHMPIDMisAligner.cxx:95
 AliHMPIDMisAligner.cxx:96
 AliHMPIDMisAligner.cxx:97
 AliHMPIDMisAligner.cxx:98
 AliHMPIDMisAligner.cxx:99
 AliHMPIDMisAligner.cxx:100
 AliHMPIDMisAligner.cxx:101
 AliHMPIDMisAligner.cxx:102
 AliHMPIDMisAligner.cxx:103
 AliHMPIDMisAligner.cxx:104
 AliHMPIDMisAligner.cxx:105
 AliHMPIDMisAligner.cxx:106
 AliHMPIDMisAligner.cxx:107
 AliHMPIDMisAligner.cxx:108
 AliHMPIDMisAligner.cxx:109
 AliHMPIDMisAligner.cxx:110
 AliHMPIDMisAligner.cxx:111
 AliHMPIDMisAligner.cxx:112
 AliHMPIDMisAligner.cxx:113
 AliHMPIDMisAligner.cxx:114
 AliHMPIDMisAligner.cxx:115
 AliHMPIDMisAligner.cxx:116
 AliHMPIDMisAligner.cxx:117
 AliHMPIDMisAligner.cxx:118
 AliHMPIDMisAligner.cxx:119
 AliHMPIDMisAligner.cxx:120
 AliHMPIDMisAligner.cxx:121
 AliHMPIDMisAligner.cxx:122
 AliHMPIDMisAligner.cxx:123
 AliHMPIDMisAligner.cxx:124
 AliHMPIDMisAligner.cxx:125
 AliHMPIDMisAligner.cxx:126
 AliHMPIDMisAligner.cxx:127
 AliHMPIDMisAligner.cxx:128