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.                  *
 **************************************************************************/

/* $Id$ */

//========================================================================
//
// This class is a helper, producing ITS aligmnent objects.
// It provides also some useful functions
// See the parameters of the misalignment at the end of this script.
//
// Main author: L. Gaudichet
// Contact: andrea.dainese@lnl.infn.it
//
//========================================================================

#include <TClonesArray.h>
#include <TMath.h>
#include <TClass.h>
#include <TGeoManager.h>
#include "AliLog.h"
#include "AliAlignObjParams.h"
#include "AliITSMisAligner.h"
#include "AliITSSurveyToAlign.h"
#include "AliMathBase.h"

ClassImp(AliITSMisAligner)
  
const Int_t AliITSMisAligner::fgkNLadders[AliITSMisAligner::kNLayers] = {20,40,14,22,34,38};
const Int_t AliITSMisAligner::fgkNDetectors[AliITSMisAligner::kNLayers] = {4,4,6,8,22,25};

const Double_t kRadToDeg = 180./TMath::Pi();

//________________________________________________________________________
AliITSMisAligner::AliITSMisAligner():
    AliMisAligner(),
    fRnd(),
    fInd(0),
    fAlignObjArray(NULL),
    fStrSPD("ITS/SPD"),
    fStrSDD("ITS/SDD"),
    fStrSSD("ITS/SSD"),
    fStrStave("/Stave"),
    fStrHalfStave("/HalfStave"),
    fStrLadder("/Ladder"),
    fStrSector("/Sector"),
    fStrSensor("/Sensor"),
    fUnifSPDSector(kFALSE),
    fUnifSPDHS(kFALSE),
    fUnifSDDLadder(kFALSE),
    fUnifSSDLadder(kFALSE),
    fUnifSPDLadder(kFALSE),
    fUnifSDDModule(kFALSE),
    fUnifSSDModule(kFALSE)
{
    //
    // defaul constructor
    //
    fRnd.SetSeed(38217945);
    fAlignObjArray = new TClonesArray("AliAlignObjParams",4000);
    for(Int_t ii=0; ii<6; ii++)
    {
	fWholeITS[ii]=0.;
	fSPDSector[ii]=0.;
	fSPDHB[ii]=0.;
	fSPDBarrel[ii]=0.;
	fSPDHS[ii]=0.;
	fSPDLadder[ii]=0.;
	fSDDLayer[ii]=0.;
	fSDDBarrel[ii]=0.;
	fSDDLadder[ii]=0.;
	fSDDModule[ii]=0.;
	fSSDBarrel[ii]=0.;
	fSSDLayer[ii]=0.;
	fSSDLadder[ii]=0.;
	fSSDModule[ii]=0.;
	fSPDLadderShiftT[ii]=0.;
	fSPDLadderShiftB[ii]=0.;
	fSDDLadderShift1[ii]=0.;
	fSDDLadderShift2[ii]=0.;
    }
}


//_______________________________________________________________________________________
TClonesArray* AliITSMisAligner::MakeAlObjsArray() {
    // Make the array of alignment objects, depending on the misalignment scenario (Zero, Residual, Full)
    //

    // Setting default values for ideal, residual or full misalignment
    SetWholeITSMisAlignment();
    SetSPDMisAlignment();
    SetSDDMisAlignment();
    SetSSDMisAlignment(); 

    // Get array of alignment objects from survey (based on which we build later the SSD objects)
    AliITSSurveyToAlign* s2a = new AliITSSurveyToAlign();
    s2a->Run();
    TClonesArray* surveyArray = dynamic_cast<TClonesArray*> (s2a->GetAlignObjsArray());
    if(!surveyArray){
	Printf("SSD survey array was not build! Probably you missed to connect to alien");
	return 0;
    }else{
	Printf("survey array contains %d entries", surveyArray->GetEntriesFast());
    }
    char strtemp[5]="ITS";
    AddAlignObj(strtemp,fWholeITS[0],fWholeITS[1],fWholeITS[2],fWholeITS[3],fWholeITS[4],fWholeITS[5],"fixed");

    AddSectorAlignObj(1,5,fSPDSector[0],fSPDSector[1],fSPDSector[2],fSPDSector[3],fSPDSector[4],fSPDSector[5],
	    fSPDLadderShiftT[0],fSPDLadderShiftT[1],fSPDLadderShiftT[2],fSPDLadderShiftT[3],fSPDLadderShiftT[4],fSPDLadderShiftT[5],fUnifSPDSector);
    AddSectorAlignObj(6,10,fSPDSector[0],fSPDSector[1],fSPDSector[2],fSPDSector[3],fSPDSector[4],fSPDSector[5],
	    fSPDLadderShiftB[0],fSPDLadderShiftB[1],fSPDLadderShiftB[2],fSPDLadderShiftB[3],fSPDLadderShiftB[4],fSPDLadderShiftB[5],fUnifSPDSector);

    //=****************************************
    // misalignment at the level of half-staves (SPD)/ladders (SDD,SSD) :
    //=****************************************
    AddAlignObj(0,-1,fSPDHS[0],fSPDHS[1],fSPDHS[2],fSPDHS[3],fSPDHS[4],fSPDHS[5],
	    0,0,0,0,0,0,fUnifSPDHS); // all SPD1 half-staves
    AddAlignObj(1,-1,fSPDHS[0],fSPDHS[1],fSPDHS[2],fSPDHS[3],fSPDHS[4],fSPDHS[5],
	    0,0,0,0,0,0,fUnifSPDHS); // all SPD2 half-staves

    AddAlignObj(2,-1,fSDDLadder[0],fSDDLadder[1],fSDDLadder[2],fSDDLadder[3],
	    fSDDLadder[4],fSDDLadder[5],fSDDLadderShift1[0],fSDDLadderShift1[1],fSDDLadderShift1[2],fSDDLadderShift1[3],fSDDLadderShift1[4],fSDDLadderShift1[5],fUnifSDDLadder); // all SDD1 ladders
    AddAlignObj(3,-1,fSDDLadder[0],fSDDLadder[1],fSDDLadder[2],fSDDLadder[3],
	    fSDDLadder[4],fSDDLadder[5],fSDDLadderShift2[0],fSDDLadderShift2[1],fSDDLadderShift2[2],fSDDLadderShift2[3],fSDDLadderShift2[4],fSDDLadderShift2[5],fUnifSDDLadder); // all SDD2 ladders

    // all SSD ladders as from survey, + shift and smearing in the "residual" and "full" case
    for(Int_t ii=0; ii<surveyArray->GetEntriesFast(); ii++)
    {
	AliAlignObjParams* aop = static_cast<AliAlignObjParams*> (surveyArray->UncheckedAt(ii));
	TString sName(aop->GetSymName());

	if(sName.Contains("SSD") && !sName.Contains("Sensor"))
	{

	    if(!(TString(GetMisalType())=="ideal"))
	    {
		// First we shift all SSD ladders by the same quantity to reproduce a barrel shift
		ShiftAlignObj(*aop,fSSDBarrel[0],fSSDBarrel[1],fSSDBarrel[2],fSSDBarrel[3],fSSDBarrel[4],fSSDBarrel[5]);

		// Then we smear according to the sigmas given by the misalignment scenario
		if(sName.Contains("SSD4")){
		    // we correct with the factor 1.13 for the fact that, in the inner SSD layer, z lever arm is 45.135cm instead of 51cm
		    SmearAlignObj(*aop,fSSDLadder[0],fSSDLadder[1],fSSDLadder[2],fSSDLadder[3]*1.13,fSSDLadder[4]*1.13,fSSDLadder[5]);
		}else if(sName.Contains("SSD5")){
		    SmearAlignObj(*aop,fSSDLadder[0],fSSDLadder[1],fSSDLadder[2],fSSDLadder[3],fSSDLadder[4],fSSDLadder[5]);
		}
	    }

	    new((*fAlignObjArray)[fInd++]) AliAlignObjParams(*aop);
	    aop->ApplyToGeometry(); // this we need to correctly build objects for SSD ladders below
	}
    }

    //=****************************************
    // misalignment at the level of ladders (SPD)/modules (SDD,SSD) :
    //=****************************************
    AddAlignObj(0,fSPDLadder[0],fSPDLadder[1],fSPDLadder[2],fSPDLadder[3],fSPDLadder[4],fSPDLadder[5],fUnifSPDLadder);// all SPD1 ladders
    AddAlignObj(1,fSPDLadder[0],fSPDLadder[1],fSPDLadder[2],fSPDLadder[3],fSPDLadder[4],fSPDLadder[5],fUnifSPDLadder);// all SPD2 ladders

    AddAlignObj(2,fSDDModule[0],fSDDModule[1],fSDDModule[2],fSDDModule[3],fSDDModule[4],fSDDModule[5],fUnifSDDModule);// all SDD1 modules
    AddAlignObj(3,fSDDModule[0],fSDDModule[1],fSDDModule[2],fSDDModule[3],fSDDModule[4],fSDDModule[5],fUnifSDDModule);// all SDD2 modules

    // all SSD modules
    for(Int_t ii=0; ii<surveyArray->GetEntriesFast(); ii++)
    {
	AliAlignObjParams* aop = static_cast<AliAlignObjParams*> (surveyArray->UncheckedAt(ii));
	TString sName(aop->GetSymName());
	if(sName.Contains("SSD") && sName.Contains("Sensor"))
	{
	    if(!(TString(GetMisalType())=="ideal"))
		SmearAlignObj(*aop,fSSDModule[0],fSSDModule[1],fSSDModule[2],fSSDModule[3],fSSDModule[4],fSSDModule[5]);
	    new((*fAlignObjArray)[fInd++]) AliAlignObjParams(*aop);
	}
    }

    return fAlignObjArray;
}

//_______________________________________________________________________________________
void AliITSMisAligner::ShiftAlignObj(AliAlignObjParams &alObj, Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
{
    // 
    // Shift the parameters of the alignment object passed as first argument by the quantities defined by the arguments
    //
    Double_t shifts[3]; Double_t angles[3];
    alObj.GetPars(shifts, angles);
    alObj.SetPars(shifts[0]+dx, shifts[1]+dy, shifts[2]+dz, angles[0]+dpsi, angles[1]+dtheta, angles[2]+dphi);
}

//_______________________________________________________________________________________
void AliITSMisAligner::SmearAlignObj(AliAlignObjParams &alObj, Double_t sx, Double_t sy, Double_t sz, Double_t spsi, Double_t stheta, Double_t sphi)
{
    // 
    // Smear the parameters of the alignment object passed as first argument in the range defined by the subsequent arguments
    //
    Double_t shifts[3]; Double_t angles[3];
    alObj.GetLocalPars(shifts, angles);
    Double_t x = AliMathBase::TruncatedGaus(shifts[0], sx, 3.*sx);
    Double_t y = AliMathBase::TruncatedGaus(shifts[1], sy, 3.*sy);
    Double_t z = AliMathBase::TruncatedGaus(shifts[2], sz, 3.*sz);
    Double_t psi = AliMathBase::TruncatedGaus(angles[0], spsi, 3.*spsi);
    Double_t theta = AliMathBase::TruncatedGaus(angles[1], stheta, 3.*stheta);
    Double_t phi = AliMathBase::TruncatedGaus(angles[2], sphi, 3.*sphi);
    alObj.SetLocalPars(x, y, z, psi, theta, phi);
}

//_______________________________________________________________________________________
void AliITSMisAligner::SetWholeITSMisAlignment()
{
    // Set misalignment for the whole ITS for the standar scenarios (zero, residual, full)
    // To make custom misalignments set directly the misalignments at each level (methods "SetS?D*Pars")
    //
    if(TString(GetMisalType())=="ideal")
    {
	// overall ITS misalignment according to survey as reported by Werner Riegler (18/07/2008)
	SetWholeITSPars(-0.12, -0.07, 0.29, 0., 0.03, 0.04);
    }else if(TString(GetMisalType())=="residual"){
	// overall ITS misalignment according to survey as reported by Werner Riegler (18/07/2008)
	// no smearing added (would clash with vertex constraint)
	SetWholeITSPars(-0.12, -0.07, 0.29, 0., 0.03, 0.04);
    }else if(TString(GetMisalType())=="full"){
	// overall ITS misalignment according to survey as reported by Werner Riegler (18/07/2008) plus smearing
	Double_t sigmatrW = 0.01;
	Double_t sigmarotW = 0.006;
	SetWholeITSPars(AliMathBase::TruncatedGaus(-0.12,sigmatrW,3.*sigmatrW),
		AliMathBase::TruncatedGaus(-0.07,sigmatrW,3.*sigmatrW),
		AliMathBase::TruncatedGaus(0.29,sigmatrW,3.*sigmatrW),
		AliMathBase::TruncatedGaus(0.,sigmarotW,3.*sigmarotW),
		AliMathBase::TruncatedGaus(0.03,sigmarotW,3.*sigmarotW),
		AliMathBase::TruncatedGaus(0.04,sigmarotW,3.*sigmarotW));
    }
}

//_______________________________________________________________________________________
void AliITSMisAligner::SetSPDMisAlignment()
{
    // Set misalignment for SPD alignable volumes for the standar scenarios (zero, residual, full)
    // To make custom misalignments set directly the misalignments at each level (methods "SetSPD*Pars")
    //
    if(TString(GetMisalType())=="ideal")
    {
	// misalignment for SPD at all levels equal to zero (identical transformations)
	SetSPDBarrelSigmas(0., 0., 0., 0., 0., 0.); 
	SetSPDHBSigmas(0., 0., 0., 0., 0., 0.); 
	SetSPDSectorSigmas(0., 0., 0., 0., 0., 0.); 
	SetSPDHSSigmas(0., 0., 0., 0., 0., 0.); 
	SetSPDLadderSigmas(0., 0., 0., 0., 0., 0.); 
    }else if(TString(GetMisalType())=="residual"){
	// misalignment at the level of SPD barrel and half-barrels left to zero
	SetSPDBarrelSigmas(0., 0., 0., 0., 0., 0.); 
	SetSPDHBSigmas(0., 0., 0., 0., 0., 0.); 

	// misalignment at the level of SPD sectors (source: A.Pepato)
	SetSPDSectorSigmas( 0.0050/5., //  50 micron (~tangetial, i.e. rphi)
		0.0100/5., // 100 micron (~radial)
		0.0100/5., // 100 micron
		0.0100/30.*kRadToDeg/5., // so as to have 100 micron difference at the two extremes
		0.0100/30.*kRadToDeg/5., // so as to have 100 micron difference at the two extremes
		0.0050/1.5*kRadToDeg/5.); // so as to have 50 micron difference at the two extremes
	fUnifSPDSector=kFALSE;

	// misalignment at the level of half-staves (SPD) (source: S.Moretto)
	SetSPDHSSigmas( 0.0100/4., // 100 micron
		0.0020/4., // 20 micron
		0.0020/4., // 20 micron
		0.0020/7.*kRadToDeg/4., // so as to have 20 micron difference at the two extremes
		0.0050/7.*kRadToDeg/4., // so as to have 50 micron difference at the two extremes
		0.0050/0.7*kRadToDeg/4.);// so as to have 50 micron difference at the two extremes
	fUnifSPDHS=kFALSE;

	// misalignment at the level of ladders (SPD) (source: R.Santoro)
	SetSPDLadderSigmas( 0.0010/5., // 10 micron
		0.0050/5., // 50 micron
		0.0010/5., // 10 micron
		0.0001*kRadToDeg/5., // 0.1 mrad
		0.0001*kRadToDeg/5., // 0.1 mrad
		0.0001*kRadToDeg/5.);// 0.1 mrad
	fUnifSPDLadder=kFALSE;

    }else if(TString(GetMisalType())=="full"){
	// misalignment at the level of SPD barrel (source: A.Pepato)
	SetSPDBarrelSigmas( 0.1000, // 1 mm (very pessimistic)
		0.1000, // 1 mm (very pessimistic)
		0.1000, // 1 mm (very pessimistic)
		0.0500/30.*kRadToDeg, // so as to have 500 micron difference at the two extremes
		0.0500/30.*kRadToDeg, // so as to have 500 micron difference at the two extremes
		0.0500/7.*kRadToDeg); // so as to have 500 micron difference at the two extremes

	// misalignment at the level of SPD half-barrels (source: A.Pepato)
	SetSPDHBSigmas( 0.0200, // 200 micron
		0.0200, // 200 micron
		0.0200, // 200 micron
		0.0100/30.*kRadToDeg, // so as to have 100 micron difference at the two extremes
		0.0100/30.*kRadToDeg, // so as to have 100 micron difference at the two extremes
		0.0100/7.*kRadToDeg); // so as to have 100 micron difference at the two extremes

	// misalignment at the level of SPD sectors (source: A.Pepato)
	SetSPDSectorSigmas( 0.0050, //  50 micron (~tangetial, i.e. rphi)
		0.0100, // 100 micron (~radial)
		0.0100, // 100 micron
		0.0100/30.*kRadToDeg, // so as to have 100 micron difference at the two extremes
		0.0100/30.*kRadToDeg, // so as to have 100 micron difference at the two extremes
		0.0050/1.5*kRadToDeg); // so as to have 50 micron difference at the two extremes
	fUnifSPDSector=kTRUE;

	// misalignment at the level of half-staves (SPD) (source: S.Moretto)
	SetSPDHSSigmas( 0.0100, // 100 micron // normal to plane
		0.0020, // 20 micron
		0.0020, // 20 micron
		0.0020/7.*kRadToDeg, // so as to have 20 micron difference at the two extremes
		0.0050/7.*kRadToDeg, // so as to have 50 micron difference at the two extremes
		0.0050/0.7*kRadToDeg); // so as to have 50 micron difference at the two extremes
	fUnifSPDHS=kTRUE;

	// misalignment at the level of ladders (SPD) (source: R.Santoro)
	SetSPDLadderSigmas( 0.0010, // 10 micron
		0.0030, // 50 micron
		0.0010, // 10 micron
		0.0001*kRadToDeg, // 0.1 mrad
		0.0001*kRadToDeg, // 0.1 mrad
		0.0001*kRadToDeg); // 0.1 mrad
	fUnifSPDLadder=kTRUE;


	// misalignment at the level of SPD barrel, half-barrels, and at the level
	// of SPD sectors
	Double_t shBtop[6], shBbot[6]; //top and bottom barrel shifts
	for(Int_t ii=0; ii<6; ii++){
	    shBtop[ii] = AliMathBase::TruncatedGaus(0.,fSPDBarrel[ii]/3,fSPDBarrel[ii]);
	    shBbot[ii] = shBtop[ii];
	}

	for(Int_t ii=0; ii<6; ii++){
	    shBtop[ii] += AliMathBase::TruncatedGaus(0.,fSPDHB[ii]/3,fSPDHB[ii]);
	    shBbot[ii] += AliMathBase::TruncatedGaus(0.,fSPDHB[ii]/3,fSPDHB[ii]);
	}
	SetSPDLadderShiftT(shBtop);
	SetSPDLadderShiftB(shBbot);
    }
}

//_______________________________________________________________________________________
void AliITSMisAligner::SetSDDMisAlignment() 
{
    // Set misalignment for SDD alignable volumes for the standar scenarios (zero, residual, full)
    // To make custom misalignments set directly the misalignments at each level (methods "SetSDD*Pars")
    //
    if(TString(GetMisalType())=="ideal")
    {
	// misalignment for SDD at all levels equal to zero
	SetSDDLayerSigmas(0., 0., 0., 0., 0., 0.);
	SetSDDBarrelSigmas(0., 0., 0., 0., 0., 0.);
	SetSDDLadderSigmas(0., 0., 0., 0., 0., 0.);
	SetSDDModuleSigmas(0., 0., 0., 0., 0., 0.);
    }else if(TString(GetMisalType())=="residual"){
	// misalignment at the level of SDD and SSD layers(source: B.Giraudo)
	SetSDDLayerSigmas(0., 0., 0., 0., 0., 0.);
	SetSDDBarrelSigmas(0., 0., 0., 0., 0., 0.);

	// misalignment at the level of half-staves (SPD) (source: S.Moretto)
	SetSDDLadderSigmas( 0.0005, // 5 micron
		0.0005, // 5 micron
		0.0005, // 5 micron
		0.00, //  ?
		0.00, //  ?
		0.00); //  ?
	fUnifSDDLadder=kFALSE;

	// misalignment at the level of SDD modules(source: L.Gaudichet)
	SetSDDModuleSigmas( 0.0045/5., // 45 micron
		0.0045/5., // 45 micron
		0.0105/5., // 105 micron
		0.00, // ?
		0.00, //  ?
		0.00);//  ?
	fUnifSDDModule=kFALSE;

    }else if(TString(GetMisalType())=="full"){
	// misalignment at the level of SDD layers(source: B.Giraudo)
	SetSDDBarrelSigmas( 0.0020, // 20 micron
		0.0020, // 20 micron
		0.0020, // 20 micron
		0.0020/52.*kRadToDeg,  // so as to have 20 micron difference at the two extremes
		0.0020/52.*kRadToDeg,  // so as to have 20 micron difference at the two extremes
		0.0020/20.*kRadToDeg); // so as to have 20 micron difference at the two extremes

	SetSDDLayerSigmas( 0.0010, // 10 micron
		0.0010, // 10 micron
		0.0010, // 10 micron
		0.0010/52.*kRadToDeg, // so as to have 10 micron difference at the two extremes
		0.0010/52.*kRadToDeg, // so as to have 10 micron difference at the two extremes
		0.0010/20.*kRadToDeg);  // so as to have 10 micron difference at the two extremes

	// misalignment at the level of SDD ladders
	SetSDDLadderSigmas( 0.0005, // 5 micron
		0.0005, // 5 micron
		0.0005, // 5 micron
		0.00, //  ?
		0.00, //  ?
		0.00);//  ?
	fUnifSDDLadder=kTRUE;

	// misalignment at the level of SDD modules (source: L.Gaudichet)
	SetSDDModuleSigmas( 0.0045, // 45 micron
		0.0045, // 45 micron
		0.0105, // 105 micron
		0.00, // ?
		0.00, //  ?
		0.00);//  ?
	fUnifSDDModule=kTRUE;
    }

    fSDDLadderShift1[0] = GetUnif(-fSDDBarrel[0],fSDDBarrel[0]);
    fSDDLadderShift1[1] = GetUnif(-fSDDBarrel[1],fSDDBarrel[1]);
    fSDDLadderShift1[2] = GetUnif(-fSDDBarrel[2],fSDDBarrel[2]);
    fSDDLadderShift1[3] = GetUnif(-fSDDBarrel[3],fSDDBarrel[3]);
    fSDDLadderShift1[4] = GetUnif(-fSDDBarrel[4],fSDDBarrel[4]);
    fSDDLadderShift1[5] = GetUnif(-fSDDBarrel[5],fSDDBarrel[5]);

    for(Int_t ii=0; ii<6; ii++)
	fSDDLadderShift2[ii] = fSDDLadderShift1[ii];

    //  layer SDD1
    fSDDLadderShift1[0] += GetUnif(-fSDDLayer[0],fSDDLayer[0]);
    fSDDLadderShift1[1] += GetUnif(-fSDDLayer[1],fSDDLayer[1]);
    fSDDLadderShift1[2] += GetUnif(-fSDDLayer[2],fSDDLayer[2]);
    fSDDLadderShift1[3] += GetUnif(-fSDDLayer[3],fSDDLayer[3]);
    fSDDLadderShift1[4] += GetUnif(-fSDDLayer[4],fSDDLayer[4]);
    fSDDLadderShift1[5] += GetUnif(-fSDDLayer[5],fSDDLayer[5]);

    //  layer SDD2
    fSDDLadderShift2[0] += GetUnif(-fSDDLayer[0],fSDDLayer[0]);
    fSDDLadderShift2[1] += GetUnif(-fSDDLayer[1],fSDDLayer[1]);
    fSDDLadderShift2[2] += GetUnif(-fSDDLayer[2],fSDDLayer[2]);
    fSDDLadderShift2[3] += GetUnif(-fSDDLayer[3],fSDDLayer[3]);
    fSDDLadderShift2[4] += GetUnif(-fSDDLayer[4],fSDDLayer[4]);
    fSDDLadderShift2[5] += GetUnif(-fSDDLayer[5],fSDDLayer[5]);

}

//_______________________________________________________________________________________
void AliITSMisAligner::SetSSDMisAlignment() 
{
    // Set misalignment for SSD alignable volumes for the standar scenarios (zero, residual, full)
    // To make custom misalignments set directly the misalignments at each level (methods "SetSSD*Pars")
    //
    if(TString(GetMisalType())=="ideal"){

	// zero misalignment at the level of SSD barrel
	SetSSDBarrelPars(0.,0.,0.,0.,0.,0.);
	// zero misalignment at the level of SSD ladders
	SetSSDLadderSigmas(0.,0.,0.,0.,0.,0.);
	// zero misalignment at the level of SSD modules
	SetSSDModuleSigmas(0.,0.,0.,0.,0.,0.);

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

	// zero misalignment at the level of SSD barrel
	SetSSDBarrelPars(0.,0.,0.,0.,0.,0.);
	// misalignment at the level of SSD ladders (source: M. Van Leeuwen)
	// values set so that overall maximum displacement (combined effect of shift and rotation
	// of the ladder) for any point of the ladder cannot exceed 10um in x, 100 um in y, 50um in z
	SetSSDLadderSigmas( 0.0005, // 5 microns
		0.0033, // 33 microns
		0.0050, // 50 microns
		0.000067*kRadToDeg, // 0.067 mrads
		0.00001*kRadToDeg, // 0.01 mrads
		0.001*kRadToDeg); // 1 mrad
	fUnifSSDLadder=kTRUE;

	// misalignment at the level of SSD modules (source: M. Van Leeuwen)
	// values set so that overall maximum displacement (combined effect of shift and rotation
	// of the ladder) for any point of the module cannot exceed 5um in x, 10 um in y, 5um in z
	SetSSDModuleSigmas( 0.00025, // 2.5 microns
		0.00034, // 3.4 microns
		0.0005, // 5 microns
		0.00017*kRadToDeg, // 0.17 mrads
		0.000125*kRadToDeg, // 0.125 mrads
		0.0001*kRadToDeg); // 0.1 mrads
	fUnifSSDModule=kTRUE;

    }else if(TString(GetMisalType())=="full"){
	// misalignment at the level of SSD layers (source: B. Giraudo)
	SetSSDBarrelPars( GetUnif(-0.0020,0.0020), // 20 micron
		GetUnif(-0.0020,0.0020), // 20 micron
		GetUnif(-0.0020,0.0020), // 20 micron
		GetUnif(-0.0020/90.*kRadToDeg,0.0020), // so as to have 20 micron difference at the two extremes
		GetUnif(-0.0020/90.*kRadToDeg,0.0020), // so as to have 20 micron difference at the two extremes
		GetUnif(-0.0020/40.*kRadToDeg,0.0020));  // so as to have 20 micron difference at the two extremes

	// misalignment at the level of SSD ladders (source: M. Van Leeuwen)
	// values set so that overall maximum displacement (combined effect of shift and rotation
	// of the ladder) for any point of the ladder cannot exceed 20um in x, 100 um in y, 50um in z
	SetSSDLadderSigmas( 0.0010, // 10 microns
		0.0033, // 33 microns
		0.0050, // 50 microns
		0.000067*kRadToDeg, // 0.067 mrads
		0.00002*kRadToDeg, // 0.02 mrads
		0.001*kRadToDeg); // 1 mrad
	fUnifSSDLadder=kTRUE;

	// misalignment at the level of SSD modules (source: M. Van Leeuwen)
	// values set so that overall maximum displacement (combined effect of shift and rotation
	// of the ladder) for any point of the module cannot exceed 5um in x, 10 um in y, 5um in z
	SetSSDModuleSigmas( 0.00025, // 2.5 microns
		0.00034, // 3.4 microns
		0.0005, // 5 microns
		0.00017*kRadToDeg, // 0.17 mrads
		0.000125*kRadToDeg, // 0.125 mrads
		0.0001*kRadToDeg); // 0.1 mrads
	fUnifSSDModule=kTRUE;
    }

}

//_______________________________________________________________________________________
AliCDBMetaData* AliITSMisAligner::GetCDBMetaData() const {
    // Returns the AliCDBMetaData to be associated with AliCDBEntry which will contain
    // the array of alignment objects for ITS misalignment
    // Presently "responsible" and "comment" are filled.
    //
    AliCDBMetaData* md = new AliCDBMetaData();
    md->SetResponsible("A. Dainese, M. Van Leeuwen, R. Grosso");

    if(TString(GetMisalType())=="ideal")
	md->SetComment(
		Form("Alignment objects for ITS ideal misalignment. It includes:"
		    "\n                                 survey of whole ITS;"
		    "\n                                 survey of SSD ladders and modules"));
    if(TString(GetMisalType())=="residual")
	md->SetComment(
		Form("Alignment objects for ITS residual misalignment. It includes:"
		    "\n                                 survey of whole ITS;"
		    "\n                                 survey of SSD ladders and modules"));
    if(TString(GetMisalType())=="full")
	md->SetComment(
		Form("Alignment objects for ITS full misalignment. It includes:"
		    "\n                                 survey of whole ITS;"
		    "\n                                 survey of SSD ladders and modules"));
    return md;
}

//________________________________________________________________________
Bool_t AliITSMisAligner::AddAlignObj(char* name,Double_t dx,Double_t dy,Double_t dz,
	Double_t dpsi,Double_t dtheta,Double_t dphi,const char* distrib) {
    //
    // misalignment by symname
    //
    Double_t vx=0.,vy=0.,vz=0.,vpsi=0.,vtheta=0.,vphi=0.;

    TString sdistrib(distrib);

    if(sdistrib==TString("gaussian")) {
	vx = AliMathBase::TruncatedGaus(0.,dx/3.,dx); // mean, sigma, max absolute value 
	vy = AliMathBase::TruncatedGaus(0.,dy/3.,dy);
	vz = AliMathBase::TruncatedGaus(0.,dz/3.,dz);
	vpsi   = AliMathBase::TruncatedGaus(0.,dpsi/3.,  dpsi );
	vtheta = AliMathBase::TruncatedGaus(0.,dtheta/3.,dtheta);
	vphi   = AliMathBase::TruncatedGaus(0.,dphi/3.,  dphi);
    }else if(sdistrib==TString("uniform")){ 
	vx = fRnd.Uniform(-dx,dx);
	vy = fRnd.Uniform(-dy,dy);
	vz = fRnd.Uniform(-dz,dz);
	vpsi = fRnd.Uniform(-dpsi,dpsi);
	vtheta = fRnd.Uniform(-dtheta,dtheta);
	vphi = fRnd.Uniform(-dphi,dphi);
    }else if(sdistrib==TString("fixed")){
	vx=dx;
	vy=dy;
	vz=dz;
	vpsi=dpsi;
	vtheta=dtheta;
	vphi=dphi;
    }else{
      AliFatal(Form("Invalid string \"%s\" specifying the misalignment type for the volume \"%s\"",sdistrib.Data(),name));
    }

    new((*fAlignObjArray)[fInd]) AliAlignObjParams(name,0,vx,vy,vz,vpsi,vtheta,vphi,kFALSE);

    AliAlignObjParams* itsalobj = (AliAlignObjParams*) fAlignObjArray->UncheckedAt(fInd);
    itsalobj->ApplyToGeometry();

    fInd++;

    return kTRUE;
}


//________________________________________________________________________
Bool_t AliITSMisAligner::AddAlignObj(Int_t lay,Double_t dx,Double_t dy,Double_t dz,
	Double_t dpsi,Double_t dtheta,Double_t dphi,Bool_t unif) {
    //
    // misalignment at the level of sensitive alignable volumes (SPD ladders/ SDD,SSD modules)
    // done for all ladders/modules of the given layer
    //
    lay+=1; // layers are numbered from 1 to 6 in AliGeomManager

    printf("LAYER %d  MODULES %d\n",lay,AliGeomManager::LayerSize(lay));

    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(lay); iModule++) {

	Double_t vx,vy,vz,vpsi,vtheta,vphi;

	if(!unif) {
	    vx = AliMathBase::TruncatedGaus(0.,dx/3.,dx); // mean, sigma, max absolute value 
	    vy = AliMathBase::TruncatedGaus(0.,dy/3.,dy);
	    vz = AliMathBase::TruncatedGaus(0.,dz/3.,dz);
	    vpsi = AliMathBase::TruncatedGaus(0.,dpsi/3.,dpsi);
	    vtheta = AliMathBase::TruncatedGaus(0.,dtheta/3.,dtheta);
	    vphi = AliMathBase::TruncatedGaus(0.,dphi/3.,dphi);
	} else {
	    vx = fRnd.Uniform(-dx,dx);
	    vy = fRnd.Uniform(-dy,dy);
	    vz = fRnd.Uniform(-dz,dz);
	    vpsi = fRnd.Uniform(-dpsi,dpsi);
	    vtheta = fRnd.Uniform(-dtheta,dtheta);
	    vphi = fRnd.Uniform(-dphi,dphi);
	}

	UShort_t volid = AliGeomManager::LayerToVolUID(lay,iModule);
	const char *symname = AliGeomManager::SymName(volid);

	new((*fAlignObjArray)[fInd]) AliAlignObjParams(symname,volid,vx,vy,vz,vpsi,vtheta,vphi,kFALSE);
	fInd++; 
    }

    return kTRUE;
}

//________________________________________________________________________
Bool_t AliITSMisAligner::AddAlignObj(Int_t lay,Int_t ladd,Double_t dx,Double_t dy,Double_t dz,
	Double_t dpsi,Double_t dtheta,Double_t dphi,
	Double_t xShift,Double_t yShift,Double_t zShift,
	Double_t psiShift,Double_t thetaShift,Double_t phiShift,
	Bool_t unif) {
    //
    // misalignment at the level of half-staves/ladders (ladd=-1 means that all ladders are scanned)
    //
    Double_t vx,vy,vz,vpsi,vtheta,vphi;
    Double_t tr[3],rot[3];  

    Int_t laddMin = ladd;
    Int_t laddMax = laddMin+1;
    if (ladd<0) {
	laddMin = 0;
	laddMax = fgkNLadders[lay];
    }

    for (Int_t iLadd=laddMin; iLadd<laddMax; iLadd++) {

	Int_t nHS = 1; 
	if (lay<2) nHS = 2;
	for (Int_t iHalfStave=0; iHalfStave<nHS; iHalfStave++) {

	    if(!unif) {
		vx = AliMathBase::TruncatedGaus(0.,dx/3.,dx); // mean, sigma, max absolute value 
		vy = AliMathBase::TruncatedGaus(0.,dy/3.,dy);
		vz = AliMathBase::TruncatedGaus(0.,dz/3.,dz);
		vpsi = AliMathBase::TruncatedGaus(0.,dpsi/3.,dpsi);
		vtheta = AliMathBase::TruncatedGaus(0.,dtheta/3.,dtheta);
		vphi = AliMathBase::TruncatedGaus(0.,dphi/3.,dphi);
	    } else {
		vx = fRnd.Uniform(-dx,dx);
		vy = fRnd.Uniform(-dy,dy);
		vz = fRnd.Uniform(-dz,dz);
		vpsi = fRnd.Uniform(-dpsi,dpsi);
		vtheta = fRnd.Uniform(-dtheta,dtheta);
		vphi = fRnd.Uniform(-dphi,dphi);
	    }

	    TString name(GetHalfStaveLadderSymbName(lay,iLadd,iHalfStave));

	    // first apply half-stave / ladder level misalignment
	    AliAlignObjParams aaop(name.Data(),0,vx,vy,vz,vpsi,vtheta,vphi,kFALSE); // set them as local
	    aaop.GetPars(tr,rot); // global

	    // then, apply layer-level misalignment (only for SDD and SSD)
	    if(lay>1) {
		tr[0] += xShift;
		tr[1] += yShift;
		tr[2] += zShift;
		rot[0] += psiShift;
		rot[1] += thetaShift;
		rot[2] += phiShift;
	    }
	    new((*fAlignObjArray)[fInd]) AliAlignObjParams(name.Data(),0,tr[0],tr[1],tr[2],rot[0],rot[1],rot[2],kTRUE); // set them as global

	    AliAlignObjParams* itsalobj = (AliAlignObjParams*) fAlignObjArray->UncheckedAt(fInd);
	    itsalobj->ApplyToGeometry();
	    fInd++;
	}
    }

    return kTRUE;
}


//________________________________________________________________________
Bool_t AliITSMisAligner::AddSectorAlignObj(Int_t sectMin,Int_t sectMax,
	Double_t dx,Double_t dy,Double_t dz,
	Double_t dpsi,Double_t dtheta,Double_t dphi,
	Double_t xShift,Double_t yShift,Double_t zShift,
	Double_t psiShift,Double_t thetaShift,Double_t phiShift,Bool_t unif) {
    //
    // misalignment at the level of SPD sectors and half-barrels
    // 

    if ((sectMin<1) || (sectMax>10)) return kFALSE;
    Double_t vx,vy,vz,vpsi,vtheta,vphi;
    Double_t tr[3],rot[3];  

    for (Int_t iSect = sectMin-1; iSect<sectMax; iSect++) {

	// first, apply sector level misalignment    
	if(!unif) {
	    vx = AliMathBase::TruncatedGaus(0.,dx/3.,dx); // mean, sigma, max absolute value 
	    vy = AliMathBase::TruncatedGaus(0.,dy/3.,dy);
	    vz = AliMathBase::TruncatedGaus(0.,dz/3.,dz);
	    vpsi = AliMathBase::TruncatedGaus(0.,dpsi/3.,dpsi);
	    vtheta = AliMathBase::TruncatedGaus(0.,dtheta/3.,dtheta);
	    vphi = AliMathBase::TruncatedGaus(0.,dphi/3.,dphi);
	} else {
	    vx = fRnd.Uniform(-dx,dx);
	    vy = fRnd.Uniform(-dy,dy);
	    vz = fRnd.Uniform(-dz,dz);
	    vpsi = fRnd.Uniform(-dpsi,dpsi);
	    vtheta = fRnd.Uniform(-dtheta,dtheta);
	    vphi = fRnd.Uniform(-dphi,dphi);
	}

	TString name(GetSymbName(0));
	name += fStrSector;
	name += iSect;


	AliAlignObjParams aaop(name.Data(),0,vx,vy,vz,vpsi,vtheta,vphi,kFALSE); // set them as local
	aaop.GetPars(tr,rot); // global

	// then, apply half-barrel level misalignment
	tr[0] += xShift;
	tr[1] += yShift;
	tr[2] += zShift;
	rot[0] += psiShift;
	rot[1] += thetaShift;
	rot[2] += phiShift;

	new((*fAlignObjArray)[fInd]) AliAlignObjParams(name.Data(),0,tr[0],tr[1],tr[2],rot[0],rot[1],rot[2],kTRUE); // set them as global

	AliAlignObjParams* itsalobj = (AliAlignObjParams*) fAlignObjArray->UncheckedAt(fInd);
	itsalobj->ApplyToGeometry();
	fInd++;
    }
    return kTRUE;
}

//________________________________________________________________________
const char* AliITSMisAligner::GetSymbName(Int_t layer) const {
    //
    // be careful : SPD0 and SPD1 are not physically separated 
    //
    TString name;
    switch (layer) {
	case 0:
	case 1: name = fStrSPD; name += layer; break;
	case 2:
	case 3: name = fStrSDD; name += layer; break;
	case 4:
	case 5: name = fStrSSD; name += layer; break;
	default: AliFatal("Wrong layer index");
    }
    return name.Data();
}

//________________________________________________________________________
const char* AliITSMisAligner::GetSymbName(Int_t layer, Int_t ladder, Int_t det) const {
    //
    // symname from layer, ladder, detector
    //
    TString symname(GetHalfStaveLadderSymbName(layer,ladder,det));
    if(layer<=2){
	symname+="Ladder";
    }else if(layer<=6){
	symname+="Sensor";
    }else{
	AliError("Invalid layer!");
	return 0;
    }
    symname+=det;
    return symname.Data();
}

//________________________________________________________________________
const char* AliITSMisAligner::GetSymbName(Int_t layer,Int_t ladd) const {
    //
    // Get logical names at the level of staves / ladders
    //
    TString name(GetSymbName(layer));
    if (layer==0) { // SPD1

	int sector = ladd/2;
	name += fStrSector;
	name += sector;
	int stave = ladd-sector*2;
	name += fStrStave;
	name += stave;
    }
    else if (layer==1) { // SPD2

	int sector = ladd/4;
	name += fStrSector;
	name += sector;
	int stave = ladd-sector*4;
	name += fStrStave;
	name += stave;
    }
    else if (layer>=2 && layer<=5) { // SDD and SSD
	name += fStrLadder;
	name += ladd;
    }
    else {
	AliFatal("Wrong layer index");
    }
    return name.Data();
}

//________________________________________________________________________
const char* AliITSMisAligner::GetHalfStaveLadderSymbName(Int_t layer,Int_t ladd,Int_t halfStave) const {
    //
    // Get logical names at the level of half-staves (SPD) or ladders (SDD and SSD)
    //
    TString name(GetSymbName(layer));
    if (layer==0) { // SPD1

	int sector = ladd/2;
	name += fStrSector;
	name += sector;
	int stave = ladd-sector*2;
	name += fStrStave;
	name += stave;
	name += fStrHalfStave;
	name += halfStave;
    }
    else if (layer==1) { // SPD2

	int sector = ladd/4;
	name += fStrSector;
	name += sector;
	int stave = ladd-sector*4;
	name += fStrStave;
	name += stave;
	name += fStrHalfStave;
	name += halfStave;
    }
    else if (layer>=2 && layer<=5) { // SDD and SSD
	name += fStrLadder;
	name += ladd;
    } 
    else {
	AliFatal("Wrong layer index");
    }
    return name.Data();
}

//________________________________________________________________________
const char* AliITSMisAligner::GetParentSymName(const char* symname) {
    //
    // symnane of parent volume
    //
    TString parent(symname);
    // Give the symname of 
    if(parent.BeginsWith('/')) parent.Remove(TString::kLeading,'/');
    if(parent.EndsWith("/")) parent.Remove(TString::kTrailing,'/');

    if(!parent.CountChar('/')) AliErrorClass("Not a valid symbolic name");

    Int_t layer,level;
    GetLayerAndLevel(symname,layer,level);
    if(level==1) return "ITS";

    parent.Remove(parent.Last('/'));

    if((layer==0 || layer==1) && level==2){
	parent.Remove(parent.Last('/'));
	parent[7]='0';
    }

    return parent.Data(); 
}

//________________________________________________________________________
Bool_t AliITSMisAligner::GetLayerAndLevel(const char* symname, Int_t &layer, Int_t &level) {
    //
    // given the symbolic name set layer and level
    //
    const char* basename[6] = {"ITS/SPD0/Sector","ITS/SPD1/Sector","ITS/SDD2/Ladder","ITS/SDD3/Ladder","ITS/SSD4/Ladder","ITS/SSD5/Ladder"};
    TString strSym(symname);
    if(strSym=="ITS"){
	level=0;
	layer=-1;
	return kTRUE;
    }
    Int_t i;
    for(i=0; i<6; i++){
	if(strSym.BeginsWith(basename[i])) break;
    }

    if(i>=6){
	AliErrorClass(Form("%s is not a valid symbolic name for an ITS alignable volume",strSym.Data()));
	return kFALSE;
    }

    layer=i;
    //The part above could be replaced by just
    // TString seventh = strSym[7];
    // layer = seventh.Atoi();
    // if we don't need to check the validity of the symname

    level=1;
    switch(layer){
	case 0:
	case 1:
	    if(strSym.Contains("Stave")) level=2;
	    if(strSym.Contains("Ladder")) level=3;
	    break;
	case 2:
	case 3:
	case 4:
	case 5:
	    if(strSym.Contains("Sensor")) level=2;
    }

    return kTRUE;
}

//________________________________________________________________________
Int_t AliITSMisAligner::GetNSisters(const char* symname) {
    //
    // number of volumes on same level
    //
    Int_t layer,level;
    if(!GetLayerAndLevel(symname,layer,level)) return -1;
    if(level==0) return -1;
    if(level==1) return GetNLadders(layer);
    if(level==2) return GetNDetectors(layer);
    AliErrorClass(Form("Invalid layer and level"));
    return -1;
}

//________________________________________________________________________
Int_t AliITSMisAligner::GetNDaughters(const char* symname) {
    //
    // number of daughter volumes
    // 
    Int_t layer,level;
    if(!GetLayerAndLevel(symname,layer,level)) return -1;
    if(level==0) {
	Int_t nLadders = 0;
	for(Int_t lay=0; lay<6; lay++) nLadders += GetNLadders(lay);
	return nLadders;
    }
    if(level==1) return GetNDetectors(layer);
    if(level==2){
	AliWarningClass(Form("Volume %s is a sensitive volume and has no alignable dauthers",symname));
	return -1;
    }
    AliErrorClass(Form("Invalid layer and level"));
    return -1;
}

/*
//________________________________________________________________________
TString AliITSMisAligner::GetSymbName(Int_t layer,Int_t ladd,Int_t mod) const {

// Get logical names at the level of SPD ladders / SDD and SSD modules

Int_t halfStave = mod/2;
TString name = GetHalfStaveLadderSymbName(layer,ladd,halfStave);

if (layer<2) { // SPD
name += fStrLadder;
name += mod;
} 
else if (layer>=2 && layer<=5) { // SDD and SSD
name += fStrSensor;
name += mod;
}
else {
AliFatal("Wrong layer index");
}
return name;
}
*/
 AliITSMisAligner.cxx:1
 AliITSMisAligner.cxx:2
 AliITSMisAligner.cxx:3
 AliITSMisAligner.cxx:4
 AliITSMisAligner.cxx:5
 AliITSMisAligner.cxx:6
 AliITSMisAligner.cxx:7
 AliITSMisAligner.cxx:8
 AliITSMisAligner.cxx:9
 AliITSMisAligner.cxx:10
 AliITSMisAligner.cxx:11
 AliITSMisAligner.cxx:12
 AliITSMisAligner.cxx:13
 AliITSMisAligner.cxx:14
 AliITSMisAligner.cxx:15
 AliITSMisAligner.cxx:16
 AliITSMisAligner.cxx:17
 AliITSMisAligner.cxx:18
 AliITSMisAligner.cxx:19
 AliITSMisAligner.cxx:20
 AliITSMisAligner.cxx:21
 AliITSMisAligner.cxx:22
 AliITSMisAligner.cxx:23
 AliITSMisAligner.cxx:24
 AliITSMisAligner.cxx:25
 AliITSMisAligner.cxx:26
 AliITSMisAligner.cxx:27
 AliITSMisAligner.cxx:28
 AliITSMisAligner.cxx:29
 AliITSMisAligner.cxx:30
 AliITSMisAligner.cxx:31
 AliITSMisAligner.cxx:32
 AliITSMisAligner.cxx:33
 AliITSMisAligner.cxx:34
 AliITSMisAligner.cxx:35
 AliITSMisAligner.cxx:36
 AliITSMisAligner.cxx:37
 AliITSMisAligner.cxx:38
 AliITSMisAligner.cxx:39
 AliITSMisAligner.cxx:40
 AliITSMisAligner.cxx:41
 AliITSMisAligner.cxx:42
 AliITSMisAligner.cxx:43
 AliITSMisAligner.cxx:44
 AliITSMisAligner.cxx:45
 AliITSMisAligner.cxx:46
 AliITSMisAligner.cxx:47
 AliITSMisAligner.cxx:48
 AliITSMisAligner.cxx:49
 AliITSMisAligner.cxx:50
 AliITSMisAligner.cxx:51
 AliITSMisAligner.cxx:52
 AliITSMisAligner.cxx:53
 AliITSMisAligner.cxx:54
 AliITSMisAligner.cxx:55
 AliITSMisAligner.cxx:56
 AliITSMisAligner.cxx:57
 AliITSMisAligner.cxx:58
 AliITSMisAligner.cxx:59
 AliITSMisAligner.cxx:60
 AliITSMisAligner.cxx:61
 AliITSMisAligner.cxx:62
 AliITSMisAligner.cxx:63
 AliITSMisAligner.cxx:64
 AliITSMisAligner.cxx:65
 AliITSMisAligner.cxx:66
 AliITSMisAligner.cxx:67
 AliITSMisAligner.cxx:68
 AliITSMisAligner.cxx:69
 AliITSMisAligner.cxx:70
 AliITSMisAligner.cxx:71
 AliITSMisAligner.cxx:72
 AliITSMisAligner.cxx:73
 AliITSMisAligner.cxx:74
 AliITSMisAligner.cxx:75
 AliITSMisAligner.cxx:76
 AliITSMisAligner.cxx:77
 AliITSMisAligner.cxx:78
 AliITSMisAligner.cxx:79
 AliITSMisAligner.cxx:80
 AliITSMisAligner.cxx:81
 AliITSMisAligner.cxx:82
 AliITSMisAligner.cxx:83
 AliITSMisAligner.cxx:84
 AliITSMisAligner.cxx:85
 AliITSMisAligner.cxx:86
 AliITSMisAligner.cxx:87
 AliITSMisAligner.cxx:88
 AliITSMisAligner.cxx:89
 AliITSMisAligner.cxx:90
 AliITSMisAligner.cxx:91
 AliITSMisAligner.cxx:92
 AliITSMisAligner.cxx:93
 AliITSMisAligner.cxx:94
 AliITSMisAligner.cxx:95
 AliITSMisAligner.cxx:96
 AliITSMisAligner.cxx:97
 AliITSMisAligner.cxx:98
 AliITSMisAligner.cxx:99
 AliITSMisAligner.cxx:100
 AliITSMisAligner.cxx:101
 AliITSMisAligner.cxx:102
 AliITSMisAligner.cxx:103
 AliITSMisAligner.cxx:104
 AliITSMisAligner.cxx:105
 AliITSMisAligner.cxx:106
 AliITSMisAligner.cxx:107
 AliITSMisAligner.cxx:108
 AliITSMisAligner.cxx:109
 AliITSMisAligner.cxx:110
 AliITSMisAligner.cxx:111
 AliITSMisAligner.cxx:112
 AliITSMisAligner.cxx:113
 AliITSMisAligner.cxx:114
 AliITSMisAligner.cxx:115
 AliITSMisAligner.cxx:116
 AliITSMisAligner.cxx:117
 AliITSMisAligner.cxx:118
 AliITSMisAligner.cxx:119
 AliITSMisAligner.cxx:120
 AliITSMisAligner.cxx:121
 AliITSMisAligner.cxx:122
 AliITSMisAligner.cxx:123
 AliITSMisAligner.cxx:124
 AliITSMisAligner.cxx:125
 AliITSMisAligner.cxx:126
 AliITSMisAligner.cxx:127
 AliITSMisAligner.cxx:128
 AliITSMisAligner.cxx:129
 AliITSMisAligner.cxx:130
 AliITSMisAligner.cxx:131
 AliITSMisAligner.cxx:132
 AliITSMisAligner.cxx:133
 AliITSMisAligner.cxx:134
 AliITSMisAligner.cxx:135
 AliITSMisAligner.cxx:136
 AliITSMisAligner.cxx:137
 AliITSMisAligner.cxx:138
 AliITSMisAligner.cxx:139
 AliITSMisAligner.cxx:140
 AliITSMisAligner.cxx:141
 AliITSMisAligner.cxx:142
 AliITSMisAligner.cxx:143
 AliITSMisAligner.cxx:144
 AliITSMisAligner.cxx:145
 AliITSMisAligner.cxx:146
 AliITSMisAligner.cxx:147
 AliITSMisAligner.cxx:148
 AliITSMisAligner.cxx:149
 AliITSMisAligner.cxx:150
 AliITSMisAligner.cxx:151
 AliITSMisAligner.cxx:152
 AliITSMisAligner.cxx:153
 AliITSMisAligner.cxx:154
 AliITSMisAligner.cxx:155
 AliITSMisAligner.cxx:156
 AliITSMisAligner.cxx:157
 AliITSMisAligner.cxx:158
 AliITSMisAligner.cxx:159
 AliITSMisAligner.cxx:160
 AliITSMisAligner.cxx:161
 AliITSMisAligner.cxx:162
 AliITSMisAligner.cxx:163
 AliITSMisAligner.cxx:164
 AliITSMisAligner.cxx:165
 AliITSMisAligner.cxx:166
 AliITSMisAligner.cxx:167
 AliITSMisAligner.cxx:168
 AliITSMisAligner.cxx:169
 AliITSMisAligner.cxx:170
 AliITSMisAligner.cxx:171
 AliITSMisAligner.cxx:172
 AliITSMisAligner.cxx:173
 AliITSMisAligner.cxx:174
 AliITSMisAligner.cxx:175
 AliITSMisAligner.cxx:176
 AliITSMisAligner.cxx:177
 AliITSMisAligner.cxx:178
 AliITSMisAligner.cxx:179
 AliITSMisAligner.cxx:180
 AliITSMisAligner.cxx:181
 AliITSMisAligner.cxx:182
 AliITSMisAligner.cxx:183
 AliITSMisAligner.cxx:184
 AliITSMisAligner.cxx:185
 AliITSMisAligner.cxx:186
 AliITSMisAligner.cxx:187
 AliITSMisAligner.cxx:188
 AliITSMisAligner.cxx:189
 AliITSMisAligner.cxx:190
 AliITSMisAligner.cxx:191
 AliITSMisAligner.cxx:192
 AliITSMisAligner.cxx:193
 AliITSMisAligner.cxx:194
 AliITSMisAligner.cxx:195
 AliITSMisAligner.cxx:196
 AliITSMisAligner.cxx:197
 AliITSMisAligner.cxx:198
 AliITSMisAligner.cxx:199
 AliITSMisAligner.cxx:200
 AliITSMisAligner.cxx:201
 AliITSMisAligner.cxx:202
 AliITSMisAligner.cxx:203
 AliITSMisAligner.cxx:204
 AliITSMisAligner.cxx:205
 AliITSMisAligner.cxx:206
 AliITSMisAligner.cxx:207
 AliITSMisAligner.cxx:208
 AliITSMisAligner.cxx:209
 AliITSMisAligner.cxx:210
 AliITSMisAligner.cxx:211
 AliITSMisAligner.cxx:212
 AliITSMisAligner.cxx:213
 AliITSMisAligner.cxx:214
 AliITSMisAligner.cxx:215
 AliITSMisAligner.cxx:216
 AliITSMisAligner.cxx:217
 AliITSMisAligner.cxx:218
 AliITSMisAligner.cxx:219
 AliITSMisAligner.cxx:220
 AliITSMisAligner.cxx:221
 AliITSMisAligner.cxx:222
 AliITSMisAligner.cxx:223
 AliITSMisAligner.cxx:224
 AliITSMisAligner.cxx:225
 AliITSMisAligner.cxx:226
 AliITSMisAligner.cxx:227
 AliITSMisAligner.cxx:228
 AliITSMisAligner.cxx:229
 AliITSMisAligner.cxx:230
 AliITSMisAligner.cxx:231
 AliITSMisAligner.cxx:232
 AliITSMisAligner.cxx:233
 AliITSMisAligner.cxx:234
 AliITSMisAligner.cxx:235
 AliITSMisAligner.cxx:236
 AliITSMisAligner.cxx:237
 AliITSMisAligner.cxx:238
 AliITSMisAligner.cxx:239
 AliITSMisAligner.cxx:240
 AliITSMisAligner.cxx:241
 AliITSMisAligner.cxx:242
 AliITSMisAligner.cxx:243
 AliITSMisAligner.cxx:244
 AliITSMisAligner.cxx:245
 AliITSMisAligner.cxx:246
 AliITSMisAligner.cxx:247
 AliITSMisAligner.cxx:248
 AliITSMisAligner.cxx:249
 AliITSMisAligner.cxx:250
 AliITSMisAligner.cxx:251
 AliITSMisAligner.cxx:252
 AliITSMisAligner.cxx:253
 AliITSMisAligner.cxx:254
 AliITSMisAligner.cxx:255
 AliITSMisAligner.cxx:256
 AliITSMisAligner.cxx:257
 AliITSMisAligner.cxx:258
 AliITSMisAligner.cxx:259
 AliITSMisAligner.cxx:260
 AliITSMisAligner.cxx:261
 AliITSMisAligner.cxx:262
 AliITSMisAligner.cxx:263
 AliITSMisAligner.cxx:264
 AliITSMisAligner.cxx:265
 AliITSMisAligner.cxx:266
 AliITSMisAligner.cxx:267
 AliITSMisAligner.cxx:268
 AliITSMisAligner.cxx:269
 AliITSMisAligner.cxx:270
 AliITSMisAligner.cxx:271
 AliITSMisAligner.cxx:272
 AliITSMisAligner.cxx:273
 AliITSMisAligner.cxx:274
 AliITSMisAligner.cxx:275
 AliITSMisAligner.cxx:276
 AliITSMisAligner.cxx:277
 AliITSMisAligner.cxx:278
 AliITSMisAligner.cxx:279
 AliITSMisAligner.cxx:280
 AliITSMisAligner.cxx:281
 AliITSMisAligner.cxx:282
 AliITSMisAligner.cxx:283
 AliITSMisAligner.cxx:284
 AliITSMisAligner.cxx:285
 AliITSMisAligner.cxx:286
 AliITSMisAligner.cxx:287
 AliITSMisAligner.cxx:288
 AliITSMisAligner.cxx:289
 AliITSMisAligner.cxx:290
 AliITSMisAligner.cxx:291
 AliITSMisAligner.cxx:292
 AliITSMisAligner.cxx:293
 AliITSMisAligner.cxx:294
 AliITSMisAligner.cxx:295
 AliITSMisAligner.cxx:296
 AliITSMisAligner.cxx:297
 AliITSMisAligner.cxx:298
 AliITSMisAligner.cxx:299
 AliITSMisAligner.cxx:300
 AliITSMisAligner.cxx:301
 AliITSMisAligner.cxx:302
 AliITSMisAligner.cxx:303
 AliITSMisAligner.cxx:304
 AliITSMisAligner.cxx:305
 AliITSMisAligner.cxx:306
 AliITSMisAligner.cxx:307
 AliITSMisAligner.cxx:308
 AliITSMisAligner.cxx:309
 AliITSMisAligner.cxx:310
 AliITSMisAligner.cxx:311
 AliITSMisAligner.cxx:312
 AliITSMisAligner.cxx:313
 AliITSMisAligner.cxx:314
 AliITSMisAligner.cxx:315
 AliITSMisAligner.cxx:316
 AliITSMisAligner.cxx:317
 AliITSMisAligner.cxx:318
 AliITSMisAligner.cxx:319
 AliITSMisAligner.cxx:320
 AliITSMisAligner.cxx:321
 AliITSMisAligner.cxx:322
 AliITSMisAligner.cxx:323
 AliITSMisAligner.cxx:324
 AliITSMisAligner.cxx:325
 AliITSMisAligner.cxx:326
 AliITSMisAligner.cxx:327
 AliITSMisAligner.cxx:328
 AliITSMisAligner.cxx:329
 AliITSMisAligner.cxx:330
 AliITSMisAligner.cxx:331
 AliITSMisAligner.cxx:332
 AliITSMisAligner.cxx:333
 AliITSMisAligner.cxx:334
 AliITSMisAligner.cxx:335
 AliITSMisAligner.cxx:336
 AliITSMisAligner.cxx:337
 AliITSMisAligner.cxx:338
 AliITSMisAligner.cxx:339
 AliITSMisAligner.cxx:340
 AliITSMisAligner.cxx:341
 AliITSMisAligner.cxx:342
 AliITSMisAligner.cxx:343
 AliITSMisAligner.cxx:344
 AliITSMisAligner.cxx:345
 AliITSMisAligner.cxx:346
 AliITSMisAligner.cxx:347
 AliITSMisAligner.cxx:348
 AliITSMisAligner.cxx:349
 AliITSMisAligner.cxx:350
 AliITSMisAligner.cxx:351
 AliITSMisAligner.cxx:352
 AliITSMisAligner.cxx:353
 AliITSMisAligner.cxx:354
 AliITSMisAligner.cxx:355
 AliITSMisAligner.cxx:356
 AliITSMisAligner.cxx:357
 AliITSMisAligner.cxx:358
 AliITSMisAligner.cxx:359
 AliITSMisAligner.cxx:360
 AliITSMisAligner.cxx:361
 AliITSMisAligner.cxx:362
 AliITSMisAligner.cxx:363
 AliITSMisAligner.cxx:364
 AliITSMisAligner.cxx:365
 AliITSMisAligner.cxx:366
 AliITSMisAligner.cxx:367
 AliITSMisAligner.cxx:368
 AliITSMisAligner.cxx:369
 AliITSMisAligner.cxx:370
 AliITSMisAligner.cxx:371
 AliITSMisAligner.cxx:372
 AliITSMisAligner.cxx:373
 AliITSMisAligner.cxx:374
 AliITSMisAligner.cxx:375
 AliITSMisAligner.cxx:376
 AliITSMisAligner.cxx:377
 AliITSMisAligner.cxx:378
 AliITSMisAligner.cxx:379
 AliITSMisAligner.cxx:380
 AliITSMisAligner.cxx:381
 AliITSMisAligner.cxx:382
 AliITSMisAligner.cxx:383
 AliITSMisAligner.cxx:384
 AliITSMisAligner.cxx:385
 AliITSMisAligner.cxx:386
 AliITSMisAligner.cxx:387
 AliITSMisAligner.cxx:388
 AliITSMisAligner.cxx:389
 AliITSMisAligner.cxx:390
 AliITSMisAligner.cxx:391
 AliITSMisAligner.cxx:392
 AliITSMisAligner.cxx:393
 AliITSMisAligner.cxx:394
 AliITSMisAligner.cxx:395
 AliITSMisAligner.cxx:396
 AliITSMisAligner.cxx:397
 AliITSMisAligner.cxx:398
 AliITSMisAligner.cxx:399
 AliITSMisAligner.cxx:400
 AliITSMisAligner.cxx:401
 AliITSMisAligner.cxx:402
 AliITSMisAligner.cxx:403
 AliITSMisAligner.cxx:404
 AliITSMisAligner.cxx:405
 AliITSMisAligner.cxx:406
 AliITSMisAligner.cxx:407
 AliITSMisAligner.cxx:408
 AliITSMisAligner.cxx:409
 AliITSMisAligner.cxx:410
 AliITSMisAligner.cxx:411
 AliITSMisAligner.cxx:412
 AliITSMisAligner.cxx:413
 AliITSMisAligner.cxx:414
 AliITSMisAligner.cxx:415
 AliITSMisAligner.cxx:416
 AliITSMisAligner.cxx:417
 AliITSMisAligner.cxx:418
 AliITSMisAligner.cxx:419
 AliITSMisAligner.cxx:420
 AliITSMisAligner.cxx:421
 AliITSMisAligner.cxx:422
 AliITSMisAligner.cxx:423
 AliITSMisAligner.cxx:424
 AliITSMisAligner.cxx:425
 AliITSMisAligner.cxx:426
 AliITSMisAligner.cxx:427
 AliITSMisAligner.cxx:428
 AliITSMisAligner.cxx:429
 AliITSMisAligner.cxx:430
 AliITSMisAligner.cxx:431
 AliITSMisAligner.cxx:432
 AliITSMisAligner.cxx:433
 AliITSMisAligner.cxx:434
 AliITSMisAligner.cxx:435
 AliITSMisAligner.cxx:436
 AliITSMisAligner.cxx:437
 AliITSMisAligner.cxx:438
 AliITSMisAligner.cxx:439
 AliITSMisAligner.cxx:440
 AliITSMisAligner.cxx:441
 AliITSMisAligner.cxx:442
 AliITSMisAligner.cxx:443
 AliITSMisAligner.cxx:444
 AliITSMisAligner.cxx:445
 AliITSMisAligner.cxx:446
 AliITSMisAligner.cxx:447
 AliITSMisAligner.cxx:448
 AliITSMisAligner.cxx:449
 AliITSMisAligner.cxx:450
 AliITSMisAligner.cxx:451
 AliITSMisAligner.cxx:452
 AliITSMisAligner.cxx:453
 AliITSMisAligner.cxx:454
 AliITSMisAligner.cxx:455
 AliITSMisAligner.cxx:456
 AliITSMisAligner.cxx:457
 AliITSMisAligner.cxx:458
 AliITSMisAligner.cxx:459
 AliITSMisAligner.cxx:460
 AliITSMisAligner.cxx:461
 AliITSMisAligner.cxx:462
 AliITSMisAligner.cxx:463
 AliITSMisAligner.cxx:464
 AliITSMisAligner.cxx:465
 AliITSMisAligner.cxx:466
 AliITSMisAligner.cxx:467
 AliITSMisAligner.cxx:468
 AliITSMisAligner.cxx:469
 AliITSMisAligner.cxx:470
 AliITSMisAligner.cxx:471
 AliITSMisAligner.cxx:472
 AliITSMisAligner.cxx:473
 AliITSMisAligner.cxx:474
 AliITSMisAligner.cxx:475
 AliITSMisAligner.cxx:476
 AliITSMisAligner.cxx:477
 AliITSMisAligner.cxx:478
 AliITSMisAligner.cxx:479
 AliITSMisAligner.cxx:480
 AliITSMisAligner.cxx:481
 AliITSMisAligner.cxx:482
 AliITSMisAligner.cxx:483
 AliITSMisAligner.cxx:484
 AliITSMisAligner.cxx:485
 AliITSMisAligner.cxx:486
 AliITSMisAligner.cxx:487
 AliITSMisAligner.cxx:488
 AliITSMisAligner.cxx:489
 AliITSMisAligner.cxx:490
 AliITSMisAligner.cxx:491
 AliITSMisAligner.cxx:492
 AliITSMisAligner.cxx:493
 AliITSMisAligner.cxx:494
 AliITSMisAligner.cxx:495
 AliITSMisAligner.cxx:496
 AliITSMisAligner.cxx:497
 AliITSMisAligner.cxx:498
 AliITSMisAligner.cxx:499
 AliITSMisAligner.cxx:500
 AliITSMisAligner.cxx:501
 AliITSMisAligner.cxx:502
 AliITSMisAligner.cxx:503
 AliITSMisAligner.cxx:504
 AliITSMisAligner.cxx:505
 AliITSMisAligner.cxx:506
 AliITSMisAligner.cxx:507
 AliITSMisAligner.cxx:508
 AliITSMisAligner.cxx:509
 AliITSMisAligner.cxx:510
 AliITSMisAligner.cxx:511
 AliITSMisAligner.cxx:512
 AliITSMisAligner.cxx:513
 AliITSMisAligner.cxx:514
 AliITSMisAligner.cxx:515
 AliITSMisAligner.cxx:516
 AliITSMisAligner.cxx:517
 AliITSMisAligner.cxx:518
 AliITSMisAligner.cxx:519
 AliITSMisAligner.cxx:520
 AliITSMisAligner.cxx:521
 AliITSMisAligner.cxx:522
 AliITSMisAligner.cxx:523
 AliITSMisAligner.cxx:524
 AliITSMisAligner.cxx:525
 AliITSMisAligner.cxx:526
 AliITSMisAligner.cxx:527
 AliITSMisAligner.cxx:528
 AliITSMisAligner.cxx:529
 AliITSMisAligner.cxx:530
 AliITSMisAligner.cxx:531
 AliITSMisAligner.cxx:532
 AliITSMisAligner.cxx:533
 AliITSMisAligner.cxx:534
 AliITSMisAligner.cxx:535
 AliITSMisAligner.cxx:536
 AliITSMisAligner.cxx:537
 AliITSMisAligner.cxx:538
 AliITSMisAligner.cxx:539
 AliITSMisAligner.cxx:540
 AliITSMisAligner.cxx:541
 AliITSMisAligner.cxx:542
 AliITSMisAligner.cxx:543
 AliITSMisAligner.cxx:544
 AliITSMisAligner.cxx:545
 AliITSMisAligner.cxx:546
 AliITSMisAligner.cxx:547
 AliITSMisAligner.cxx:548
 AliITSMisAligner.cxx:549
 AliITSMisAligner.cxx:550
 AliITSMisAligner.cxx:551
 AliITSMisAligner.cxx:552
 AliITSMisAligner.cxx:553
 AliITSMisAligner.cxx:554
 AliITSMisAligner.cxx:555
 AliITSMisAligner.cxx:556
 AliITSMisAligner.cxx:557
 AliITSMisAligner.cxx:558
 AliITSMisAligner.cxx:559
 AliITSMisAligner.cxx:560
 AliITSMisAligner.cxx:561
 AliITSMisAligner.cxx:562
 AliITSMisAligner.cxx:563
 AliITSMisAligner.cxx:564
 AliITSMisAligner.cxx:565
 AliITSMisAligner.cxx:566
 AliITSMisAligner.cxx:567
 AliITSMisAligner.cxx:568
 AliITSMisAligner.cxx:569
 AliITSMisAligner.cxx:570
 AliITSMisAligner.cxx:571
 AliITSMisAligner.cxx:572
 AliITSMisAligner.cxx:573
 AliITSMisAligner.cxx:574
 AliITSMisAligner.cxx:575
 AliITSMisAligner.cxx:576
 AliITSMisAligner.cxx:577
 AliITSMisAligner.cxx:578
 AliITSMisAligner.cxx:579
 AliITSMisAligner.cxx:580
 AliITSMisAligner.cxx:581
 AliITSMisAligner.cxx:582
 AliITSMisAligner.cxx:583
 AliITSMisAligner.cxx:584
 AliITSMisAligner.cxx:585
 AliITSMisAligner.cxx:586
 AliITSMisAligner.cxx:587
 AliITSMisAligner.cxx:588
 AliITSMisAligner.cxx:589
 AliITSMisAligner.cxx:590
 AliITSMisAligner.cxx:591
 AliITSMisAligner.cxx:592
 AliITSMisAligner.cxx:593
 AliITSMisAligner.cxx:594
 AliITSMisAligner.cxx:595
 AliITSMisAligner.cxx:596
 AliITSMisAligner.cxx:597
 AliITSMisAligner.cxx:598
 AliITSMisAligner.cxx:599
 AliITSMisAligner.cxx:600
 AliITSMisAligner.cxx:601
 AliITSMisAligner.cxx:602
 AliITSMisAligner.cxx:603
 AliITSMisAligner.cxx:604
 AliITSMisAligner.cxx:605
 AliITSMisAligner.cxx:606
 AliITSMisAligner.cxx:607
 AliITSMisAligner.cxx:608
 AliITSMisAligner.cxx:609
 AliITSMisAligner.cxx:610
 AliITSMisAligner.cxx:611
 AliITSMisAligner.cxx:612
 AliITSMisAligner.cxx:613
 AliITSMisAligner.cxx:614
 AliITSMisAligner.cxx:615
 AliITSMisAligner.cxx:616
 AliITSMisAligner.cxx:617
 AliITSMisAligner.cxx:618
 AliITSMisAligner.cxx:619
 AliITSMisAligner.cxx:620
 AliITSMisAligner.cxx:621
 AliITSMisAligner.cxx:622
 AliITSMisAligner.cxx:623
 AliITSMisAligner.cxx:624
 AliITSMisAligner.cxx:625
 AliITSMisAligner.cxx:626
 AliITSMisAligner.cxx:627
 AliITSMisAligner.cxx:628
 AliITSMisAligner.cxx:629
 AliITSMisAligner.cxx:630
 AliITSMisAligner.cxx:631
 AliITSMisAligner.cxx:632
 AliITSMisAligner.cxx:633
 AliITSMisAligner.cxx:634
 AliITSMisAligner.cxx:635
 AliITSMisAligner.cxx:636
 AliITSMisAligner.cxx:637
 AliITSMisAligner.cxx:638
 AliITSMisAligner.cxx:639
 AliITSMisAligner.cxx:640
 AliITSMisAligner.cxx:641
 AliITSMisAligner.cxx:642
 AliITSMisAligner.cxx:643
 AliITSMisAligner.cxx:644
 AliITSMisAligner.cxx:645
 AliITSMisAligner.cxx:646
 AliITSMisAligner.cxx:647
 AliITSMisAligner.cxx:648
 AliITSMisAligner.cxx:649
 AliITSMisAligner.cxx:650
 AliITSMisAligner.cxx:651
 AliITSMisAligner.cxx:652
 AliITSMisAligner.cxx:653
 AliITSMisAligner.cxx:654
 AliITSMisAligner.cxx:655
 AliITSMisAligner.cxx:656
 AliITSMisAligner.cxx:657
 AliITSMisAligner.cxx:658
 AliITSMisAligner.cxx:659
 AliITSMisAligner.cxx:660
 AliITSMisAligner.cxx:661
 AliITSMisAligner.cxx:662
 AliITSMisAligner.cxx:663
 AliITSMisAligner.cxx:664
 AliITSMisAligner.cxx:665
 AliITSMisAligner.cxx:666
 AliITSMisAligner.cxx:667
 AliITSMisAligner.cxx:668
 AliITSMisAligner.cxx:669
 AliITSMisAligner.cxx:670
 AliITSMisAligner.cxx:671
 AliITSMisAligner.cxx:672
 AliITSMisAligner.cxx:673
 AliITSMisAligner.cxx:674
 AliITSMisAligner.cxx:675
 AliITSMisAligner.cxx:676
 AliITSMisAligner.cxx:677
 AliITSMisAligner.cxx:678
 AliITSMisAligner.cxx:679
 AliITSMisAligner.cxx:680
 AliITSMisAligner.cxx:681
 AliITSMisAligner.cxx:682
 AliITSMisAligner.cxx:683
 AliITSMisAligner.cxx:684
 AliITSMisAligner.cxx:685
 AliITSMisAligner.cxx:686
 AliITSMisAligner.cxx:687
 AliITSMisAligner.cxx:688
 AliITSMisAligner.cxx:689
 AliITSMisAligner.cxx:690
 AliITSMisAligner.cxx:691
 AliITSMisAligner.cxx:692
 AliITSMisAligner.cxx:693
 AliITSMisAligner.cxx:694
 AliITSMisAligner.cxx:695
 AliITSMisAligner.cxx:696
 AliITSMisAligner.cxx:697
 AliITSMisAligner.cxx:698
 AliITSMisAligner.cxx:699
 AliITSMisAligner.cxx:700
 AliITSMisAligner.cxx:701
 AliITSMisAligner.cxx:702
 AliITSMisAligner.cxx:703
 AliITSMisAligner.cxx:704
 AliITSMisAligner.cxx:705
 AliITSMisAligner.cxx:706
 AliITSMisAligner.cxx:707
 AliITSMisAligner.cxx:708
 AliITSMisAligner.cxx:709
 AliITSMisAligner.cxx:710
 AliITSMisAligner.cxx:711
 AliITSMisAligner.cxx:712
 AliITSMisAligner.cxx:713
 AliITSMisAligner.cxx:714
 AliITSMisAligner.cxx:715
 AliITSMisAligner.cxx:716
 AliITSMisAligner.cxx:717
 AliITSMisAligner.cxx:718
 AliITSMisAligner.cxx:719
 AliITSMisAligner.cxx:720
 AliITSMisAligner.cxx:721
 AliITSMisAligner.cxx:722
 AliITSMisAligner.cxx:723
 AliITSMisAligner.cxx:724
 AliITSMisAligner.cxx:725
 AliITSMisAligner.cxx:726
 AliITSMisAligner.cxx:727
 AliITSMisAligner.cxx:728
 AliITSMisAligner.cxx:729
 AliITSMisAligner.cxx:730
 AliITSMisAligner.cxx:731
 AliITSMisAligner.cxx:732
 AliITSMisAligner.cxx:733
 AliITSMisAligner.cxx:734
 AliITSMisAligner.cxx:735
 AliITSMisAligner.cxx:736
 AliITSMisAligner.cxx:737
 AliITSMisAligner.cxx:738
 AliITSMisAligner.cxx:739
 AliITSMisAligner.cxx:740
 AliITSMisAligner.cxx:741
 AliITSMisAligner.cxx:742
 AliITSMisAligner.cxx:743
 AliITSMisAligner.cxx:744
 AliITSMisAligner.cxx:745
 AliITSMisAligner.cxx:746
 AliITSMisAligner.cxx:747
 AliITSMisAligner.cxx:748
 AliITSMisAligner.cxx:749
 AliITSMisAligner.cxx:750
 AliITSMisAligner.cxx:751
 AliITSMisAligner.cxx:752
 AliITSMisAligner.cxx:753
 AliITSMisAligner.cxx:754
 AliITSMisAligner.cxx:755
 AliITSMisAligner.cxx:756
 AliITSMisAligner.cxx:757
 AliITSMisAligner.cxx:758
 AliITSMisAligner.cxx:759
 AliITSMisAligner.cxx:760
 AliITSMisAligner.cxx:761
 AliITSMisAligner.cxx:762
 AliITSMisAligner.cxx:763
 AliITSMisAligner.cxx:764
 AliITSMisAligner.cxx:765
 AliITSMisAligner.cxx:766
 AliITSMisAligner.cxx:767
 AliITSMisAligner.cxx:768
 AliITSMisAligner.cxx:769
 AliITSMisAligner.cxx:770
 AliITSMisAligner.cxx:771
 AliITSMisAligner.cxx:772
 AliITSMisAligner.cxx:773
 AliITSMisAligner.cxx:774
 AliITSMisAligner.cxx:775
 AliITSMisAligner.cxx:776
 AliITSMisAligner.cxx:777
 AliITSMisAligner.cxx:778
 AliITSMisAligner.cxx:779
 AliITSMisAligner.cxx:780
 AliITSMisAligner.cxx:781
 AliITSMisAligner.cxx:782
 AliITSMisAligner.cxx:783
 AliITSMisAligner.cxx:784
 AliITSMisAligner.cxx:785
 AliITSMisAligner.cxx:786
 AliITSMisAligner.cxx:787
 AliITSMisAligner.cxx:788
 AliITSMisAligner.cxx:789
 AliITSMisAligner.cxx:790
 AliITSMisAligner.cxx:791
 AliITSMisAligner.cxx:792
 AliITSMisAligner.cxx:793
 AliITSMisAligner.cxx:794
 AliITSMisAligner.cxx:795
 AliITSMisAligner.cxx:796
 AliITSMisAligner.cxx:797
 AliITSMisAligner.cxx:798
 AliITSMisAligner.cxx:799
 AliITSMisAligner.cxx:800
 AliITSMisAligner.cxx:801
 AliITSMisAligner.cxx:802
 AliITSMisAligner.cxx:803
 AliITSMisAligner.cxx:804
 AliITSMisAligner.cxx:805
 AliITSMisAligner.cxx:806
 AliITSMisAligner.cxx:807
 AliITSMisAligner.cxx:808
 AliITSMisAligner.cxx:809
 AliITSMisAligner.cxx:810
 AliITSMisAligner.cxx:811
 AliITSMisAligner.cxx:812
 AliITSMisAligner.cxx:813
 AliITSMisAligner.cxx:814
 AliITSMisAligner.cxx:815
 AliITSMisAligner.cxx:816
 AliITSMisAligner.cxx:817
 AliITSMisAligner.cxx:818
 AliITSMisAligner.cxx:819
 AliITSMisAligner.cxx:820
 AliITSMisAligner.cxx:821
 AliITSMisAligner.cxx:822
 AliITSMisAligner.cxx:823
 AliITSMisAligner.cxx:824
 AliITSMisAligner.cxx:825
 AliITSMisAligner.cxx:826
 AliITSMisAligner.cxx:827
 AliITSMisAligner.cxx:828
 AliITSMisAligner.cxx:829
 AliITSMisAligner.cxx:830
 AliITSMisAligner.cxx:831
 AliITSMisAligner.cxx:832
 AliITSMisAligner.cxx:833
 AliITSMisAligner.cxx:834
 AliITSMisAligner.cxx:835
 AliITSMisAligner.cxx:836
 AliITSMisAligner.cxx:837
 AliITSMisAligner.cxx:838
 AliITSMisAligner.cxx:839
 AliITSMisAligner.cxx:840
 AliITSMisAligner.cxx:841
 AliITSMisAligner.cxx:842
 AliITSMisAligner.cxx:843
 AliITSMisAligner.cxx:844
 AliITSMisAligner.cxx:845
 AliITSMisAligner.cxx:846
 AliITSMisAligner.cxx:847
 AliITSMisAligner.cxx:848
 AliITSMisAligner.cxx:849
 AliITSMisAligner.cxx:850
 AliITSMisAligner.cxx:851
 AliITSMisAligner.cxx:852
 AliITSMisAligner.cxx:853
 AliITSMisAligner.cxx:854
 AliITSMisAligner.cxx:855
 AliITSMisAligner.cxx:856
 AliITSMisAligner.cxx:857
 AliITSMisAligner.cxx:858
 AliITSMisAligner.cxx:859
 AliITSMisAligner.cxx:860
 AliITSMisAligner.cxx:861
 AliITSMisAligner.cxx:862
 AliITSMisAligner.cxx:863
 AliITSMisAligner.cxx:864
 AliITSMisAligner.cxx:865
 AliITSMisAligner.cxx:866
 AliITSMisAligner.cxx:867
 AliITSMisAligner.cxx:868
 AliITSMisAligner.cxx:869
 AliITSMisAligner.cxx:870
 AliITSMisAligner.cxx:871
 AliITSMisAligner.cxx:872
 AliITSMisAligner.cxx:873
 AliITSMisAligner.cxx:874
 AliITSMisAligner.cxx:875
 AliITSMisAligner.cxx:876
 AliITSMisAligner.cxx:877
 AliITSMisAligner.cxx:878
 AliITSMisAligner.cxx:879
 AliITSMisAligner.cxx:880
 AliITSMisAligner.cxx:881
 AliITSMisAligner.cxx:882
 AliITSMisAligner.cxx:883
 AliITSMisAligner.cxx:884
 AliITSMisAligner.cxx:885
 AliITSMisAligner.cxx:886
 AliITSMisAligner.cxx:887
 AliITSMisAligner.cxx:888
 AliITSMisAligner.cxx:889
 AliITSMisAligner.cxx:890
 AliITSMisAligner.cxx:891
 AliITSMisAligner.cxx:892
 AliITSMisAligner.cxx:893
 AliITSMisAligner.cxx:894
 AliITSMisAligner.cxx:895
 AliITSMisAligner.cxx:896
 AliITSMisAligner.cxx:897
 AliITSMisAligner.cxx:898
 AliITSMisAligner.cxx:899
 AliITSMisAligner.cxx:900
 AliITSMisAligner.cxx:901
 AliITSMisAligner.cxx:902
 AliITSMisAligner.cxx:903
 AliITSMisAligner.cxx:904
 AliITSMisAligner.cxx:905
 AliITSMisAligner.cxx:906
 AliITSMisAligner.cxx:907
 AliITSMisAligner.cxx:908
 AliITSMisAligner.cxx:909
 AliITSMisAligner.cxx:910
 AliITSMisAligner.cxx:911
 AliITSMisAligner.cxx:912
 AliITSMisAligner.cxx:913
 AliITSMisAligner.cxx:914
 AliITSMisAligner.cxx:915
 AliITSMisAligner.cxx:916
 AliITSMisAligner.cxx:917
 AliITSMisAligner.cxx:918
 AliITSMisAligner.cxx:919
 AliITSMisAligner.cxx:920
 AliITSMisAligner.cxx:921
 AliITSMisAligner.cxx:922
 AliITSMisAligner.cxx:923
 AliITSMisAligner.cxx:924
 AliITSMisAligner.cxx:925
 AliITSMisAligner.cxx:926
 AliITSMisAligner.cxx:927
 AliITSMisAligner.cxx:928
 AliITSMisAligner.cxx:929
 AliITSMisAligner.cxx:930
 AliITSMisAligner.cxx:931
 AliITSMisAligner.cxx:932
 AliITSMisAligner.cxx:933
 AliITSMisAligner.cxx:934
 AliITSMisAligner.cxx:935
 AliITSMisAligner.cxx:936
 AliITSMisAligner.cxx:937
 AliITSMisAligner.cxx:938
 AliITSMisAligner.cxx:939
 AliITSMisAligner.cxx:940
 AliITSMisAligner.cxx:941
 AliITSMisAligner.cxx:942
 AliITSMisAligner.cxx:943
 AliITSMisAligner.cxx:944
 AliITSMisAligner.cxx:945
 AliITSMisAligner.cxx:946
 AliITSMisAligner.cxx:947
 AliITSMisAligner.cxx:948
 AliITSMisAligner.cxx:949
 AliITSMisAligner.cxx:950
 AliITSMisAligner.cxx:951
 AliITSMisAligner.cxx:952
 AliITSMisAligner.cxx:953
 AliITSMisAligner.cxx:954
 AliITSMisAligner.cxx:955
 AliITSMisAligner.cxx:956
 AliITSMisAligner.cxx:957
 AliITSMisAligner.cxx:958
 AliITSMisAligner.cxx:959
 AliITSMisAligner.cxx:960
 AliITSMisAligner.cxx:961
 AliITSMisAligner.cxx:962
 AliITSMisAligner.cxx:963
 AliITSMisAligner.cxx:964
 AliITSMisAligner.cxx:965
 AliITSMisAligner.cxx:966
 AliITSMisAligner.cxx:967
 AliITSMisAligner.cxx:968
 AliITSMisAligner.cxx:969
 AliITSMisAligner.cxx:970
 AliITSMisAligner.cxx:971
 AliITSMisAligner.cxx:972
 AliITSMisAligner.cxx:973
 AliITSMisAligner.cxx:974
 AliITSMisAligner.cxx:975
 AliITSMisAligner.cxx:976
 AliITSMisAligner.cxx:977
 AliITSMisAligner.cxx:978
 AliITSMisAligner.cxx:979
 AliITSMisAligner.cxx:980
 AliITSMisAligner.cxx:981
 AliITSMisAligner.cxx:982
 AliITSMisAligner.cxx:983
 AliITSMisAligner.cxx:984
 AliITSMisAligner.cxx:985
 AliITSMisAligner.cxx:986
 AliITSMisAligner.cxx:987
 AliITSMisAligner.cxx:988
 AliITSMisAligner.cxx:989
 AliITSMisAligner.cxx:990
 AliITSMisAligner.cxx:991
 AliITSMisAligner.cxx:992
 AliITSMisAligner.cxx:993
 AliITSMisAligner.cxx:994
 AliITSMisAligner.cxx:995
 AliITSMisAligner.cxx:996
 AliITSMisAligner.cxx:997
 AliITSMisAligner.cxx:998
 AliITSMisAligner.cxx:999
 AliITSMisAligner.cxx:1000
 AliITSMisAligner.cxx:1001
 AliITSMisAligner.cxx:1002
 AliITSMisAligner.cxx:1003
 AliITSMisAligner.cxx:1004
 AliITSMisAligner.cxx:1005