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 T0. 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 "AliT0MisAligner.h"
#include "AliGeomManager.h"
#include "TClonesArray.h"
#include "TRandom.h"
#include "AliAlignObjParams.h"
#include "AliLog.h"

ClassImp(AliT0MisAligner)

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

//_______________________________________________________________________________________
TClonesArray* AliT0MisAligner::MakeAlObjsArray() {
    // builds and returns the array of alignment objects
    // according to the spcified misalignment scenario
    // ("ideal", "residual" or "full").
    //
    TClonesArray *array = new TClonesArray("AliAlignObjParams",4);
    TClonesArray &alobj = *array;

    Double_t dx,dy,dz,dpsi,dtheta,dphi;
    gRandom->SetSeed(4321);
    Double_t sigmatr = 0.006; // sigma for shifts in cm
    Double_t sigmarot = 0.001; // sigma for tilts in degrees

    TString symName[2] = {"/ALIC_1/0STR_1","/ALIC_1/0STL_1"};

    Int_t iIndex=0;
    AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
    UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex);

    if(TString(GetMisalType())=="ideal")
    {
	dx=0., dy=0., dz=0.;
	dpsi=0., dtheta=0., dphi=0.;
	for (Int_t imod=0; imod<2; imod++)
	{
	    new(alobj[imod]) AliAlignObjParams(symName[imod].Data(), volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
	}
    }else if(TString(GetMisalType())=="residual" || TString(GetMisalType())=="full")
    {

	for (Int_t imod=0; imod<2; imod++)
	{
	    dx = gRandom->Gaus(0.,sigmatr);
	    dy = gRandom->Gaus(0.,sigmatr);
	    dz = gRandom->Gaus(0.,sigmatr);
	    dpsi = gRandom->Gaus(0.,sigmarot);
	    dtheta = gRandom->Gaus(0.,sigmarot);
	    dphi = gRandom->Gaus(0.,sigmarot);
	    new(alobj[imod]) AliAlignObjParams(symName[imod].Data(), volid, 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* AliT0MisAligner::GetCDBMetaData() const {
    // Returns the comment and responsible for the
    // AliCDBMetaData to be associated with the OCDB entry
    // containing the T0 array of misalignment objects
    //
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("Tomasz Malkiewicz");

    if(TString(GetMisalType())=="ideal")
	md->SetComment("Alignment objects for T0 ideal misalignment");
    if(TString(GetMisalType())=="residual")
	md->SetComment("Alignment objects for T0 residual misalignment");
    if(TString(GetMisalType())=="full")
	md->SetComment("Alignment objects for T0 full misalignment");

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