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 VZERO. 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 "AliVZEROMisAligner.h"
#include "AliGeomManager.h"
#include "AliMathBase.h"
#include "TClonesArray.h"
#include "TRandom.h"
#include "AliAlignObjParams.h"
#include "AliLog.h"

ClassImp(AliVZEROMisAligner)

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

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

    Double_t dx, dy, dz, dpsi, dtheta, dphi;
    gRandom->SetSeed(4321);
    Double_t sigmatr; // max shift in cm
    Double_t sigmarot; // max rot in degrees

    TString v0alignable[2]={"VZERO/V0C", "VZERO/V0A"};

    Int_t iIndex=0; // VZERO is not indexed
    AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
    UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex);

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

	for(Int_t ii=0; ii<2; ii++)
	    new(alobj[ii]) AliAlignObjParams(v0alignable[ii].Data(), volid, 0., 0., 0., 0., 0., 0., kTRUE);

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

	if(!AliGeomManager::GetGeometry())
	{
	    AliError("No geometry loaded into AliGeomManager! Returning null pointer!");
	    return 0;
	}

	sigmatr = 0.1;
	sigmarot = 0.5;

	for(Int_t ii=0; ii<2; ii++)
	{
	    dx = AliMathBase::TruncatedGaus(0.,sigmatr, 3*sigmatr);
	    dy = AliMathBase::TruncatedGaus(0.,sigmatr, 3*sigmatr);
	    dz = AliMathBase::TruncatedGaus(0.,sigmatr, 3*sigmatr);
	    dpsi   = AliMathBase::TruncatedGaus(0.,sigmarot, 3*sigmarot);
	    dtheta = AliMathBase::TruncatedGaus(0.,sigmarot, 3*sigmarot);
	    dphi   = AliMathBase::TruncatedGaus(0.,sigmarot, 3*sigmarot);
	    new(alobj[ii]) AliAlignObjParams(v0alignable[ii].Data(), volid, dx, dy, dz, dpsi, dtheta, dphi, kFALSE);
	}

    }else{
	AliError(Form("\"%s\" is not a valid identifier for misalignment types. Exiting ...",GetMisalType()));
	return 0;
    }

    return array;
}

//_______________________________________________________________________________________
AliCDBMetaData* AliVZEROMisAligner::GetCDBMetaData() const {
    // Returns the comment and responsible for the
    // AliCDBMetaData to be associated with the OCDB entry
    // containing the VZERO array of misalignment objects
    //
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("Brigitte Cheynis");

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

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